From python-dev@python.org Tue Aug 1 00:42:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:42:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.25,1.26 Message-ID: <200007312342.QAA24864@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24857/Doc/lib Modified Files: libstdtypes.tex Log Message: Stop lying about [].pop() being experimental! There is no backing it out at this point. Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** libstdtypes.tex 2000/07/31 20:52:21 1.25 --- libstdtypes.tex 2000/07/31 23:42:23 1.26 *************** *** 507,514 **** \var{s}. ! \item[(4)] The \method{pop()} method is experimental and at the moment ! only supported by the list and array types. The optional argument ! \var{i} defaults to \code{-1}, so that by default the last item is ! removed and returned. \item[(5)] The \method{sort()} and \method{reverse()} methods modify the --- 507,513 ---- \var{s}. ! \item[(4)] The \method{pop()} method only supported by the list and ! array types. The optional argument \var{i} defaults to \code{-1}, ! so that by default the last item is removed and returned. \item[(5)] The \method{sort()} and \method{reverse()} methods modify the From python-dev@python.org Tue Aug 1 00:54:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:54:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml/parsers - New directory Message-ID: <200007312354.QAA25943@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml/parsers In directory slayer.i.sourceforge.net:/tmp/cvs-serv25935/parsers Log Message: Directory /cvsroot/python/python/dist/src/Lib/xml/parsers added to the repository From python-dev@python.org Tue Aug 1 00:59:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:59:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml/parser __init__.py,1.2,NONE Message-ID: <200007312359.QAA26404@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml/parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv26394/parser Removed Files: __init__.py Log Message: Rename the "parser" package to "parsers" to be compatible with the PyXML project. From python-dev@python.org Tue Aug 1 00:59:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:59:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml/parsers __init__.py,NONE,1.1 Message-ID: <200007312359.QAA26407@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml/parsers In directory slayer.i.sourceforge.net:/tmp/cvs-serv26394/parsers Added Files: __init__.py Log Message: Rename the "parser" package to "parsers" to be compatible with the PyXML project. --- NEW FILE --- """Python interfaces to XML parsers. This package contains one module: expat -- Python wrapper for James Clark's Expat parser, with namespace support. """ From python-dev@python.org Tue Aug 1 01:05:18 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 17:05:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml __init__.py,1.3,1.4 Message-ID: <200008010005.RAA27941@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml In directory slayer.i.sourceforge.net:/tmp/cvs-serv27883 Modified Files: __init__.py Log Message: Add magic to replace the xml package with _xmlplus at import time. Update docstring to reflect change of name for the parsers subpackage. Index: __init__.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/xml/__init__.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** __init__.py 2000/07/02 13:52:21 1.3 --- __init__.py 2000/08/01 00:05:16 1.4 *************** *** 6,10 **** Namespaces. ! parser -- Python wrappers for XML parsers (currently only supports Expat). sax -- The Simple API for XML, developed by XML-Dev, led by David --- 6,10 ---- Namespaces. ! parsers -- Python wrappers for XML parsers (currently only supports Expat). sax -- The Simple API for XML, developed by XML-Dev, led by David *************** *** 12,13 **** --- 12,23 ---- supports the SAX 2 API. """ + + + if __name__ == "xml": + try: + import _xmlplus + except ImportError: + pass + else: + import sys + sys.modules[__name__] = _xmlplus From python-dev@python.org Tue Aug 1 01:07:21 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Mon, 31 Jul 2000 17:07:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.26,1.27 Message-ID: <200008010007.RAA28516@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv28392 Modified Files: libstdtypes.tex Log Message: fixing a minor spelling mistake Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** libstdtypes.tex 2000/07/31 23:42:23 1.26 --- libstdtypes.tex 2000/08/01 00:07:17 1.27 *************** *** 507,511 **** \var{s}. ! \item[(4)] The \method{pop()} method only supported by the list and array types. The optional argument \var{i} defaults to \code{-1}, so that by default the last item is removed and returned. --- 507,511 ---- \var{s}. ! \item[(4)] The \method{pop()} method is only supported by the list and array types. The optional argument \var{i} defaults to \code{-1}, so that by default the last item is removed and returned. From python-dev@python.org Tue Aug 1 02:21:15 2000 From: python-dev@python.org (A.M. Kuchling) Date: Mon, 31 Jul 2000 18:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/curses has_key.py,NONE,1.1 __init__.py,1.2,1.3 Message-ID: <200008010121.SAA14986@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/curses In directory slayer.i.sourceforge.net:/tmp/cvs-serv14935 Modified Files: __init__.py Added Files: has_key.py Log Message: Added Python function to emulate the ncurses has_key() function. --- NEW FILE --- # # Emulation of has_key() function for platforms that don't use ncurses # import _curses # Table mapping curses keys to the terminfo capability name _capability_names = { _curses.KEY_A1: 'ka1', _curses.KEY_A3: 'ka3', _curses.KEY_B2: 'kb2', _curses.KEY_BACKSPACE: 'kbs', _curses.KEY_BEG: 'kbeg', _curses.KEY_BTAB: 'kcbt', _curses.KEY_C1: 'kc1', _curses.KEY_C3: 'kc3', _curses.KEY_CANCEL: 'kcan', _curses.KEY_CATAB: 'ktbc', _curses.KEY_CLEAR: 'kclr', _curses.KEY_CLOSE: 'kclo', _curses.KEY_COMMAND: 'kcmd', _curses.KEY_COPY: 'kcpy', _curses.KEY_CREATE: 'kcrt', _curses.KEY_CTAB: 'kctab', _curses.KEY_DC: 'kdch1', _curses.KEY_DL: 'kdl1', _curses.KEY_DOWN: 'kcud1', _curses.KEY_EIC: 'krmir', _curses.KEY_END: 'kend', _curses.KEY_ENTER: 'kent', _curses.KEY_EOL: 'kel', _curses.KEY_EOS: 'ked', _curses.KEY_EXIT: 'kext', _curses.KEY_F0: 'kf0', _curses.KEY_F1: 'kf1', _curses.KEY_F10: 'kf10', _curses.KEY_F11: 'kf11', _curses.KEY_F12: 'kf12', _curses.KEY_F13: 'kf13', _curses.KEY_F14: 'kf14', _curses.KEY_F15: 'kf15', _curses.KEY_F16: 'kf16', _curses.KEY_F17: 'kf17', _curses.KEY_F18: 'kf18', _curses.KEY_F19: 'kf19', _curses.KEY_F2: 'kf2', _curses.KEY_F20: 'kf20', _curses.KEY_F21: 'kf21', _curses.KEY_F22: 'kf22', _curses.KEY_F23: 'kf23', _curses.KEY_F24: 'kf24', _curses.KEY_F25: 'kf25', _curses.KEY_F26: 'kf26', _curses.KEY_F27: 'kf27', _curses.KEY_F28: 'kf28', _curses.KEY_F29: 'kf29', _curses.KEY_F3: 'kf3', _curses.KEY_F30: 'kf30', _curses.KEY_F31: 'kf31', _curses.KEY_F32: 'kf32', _curses.KEY_F33: 'kf33', _curses.KEY_F34: 'kf34', _curses.KEY_F35: 'kf35', _curses.KEY_F36: 'kf36', _curses.KEY_F37: 'kf37', _curses.KEY_F38: 'kf38', _curses.KEY_F39: 'kf39', _curses.KEY_F4: 'kf4', _curses.KEY_F40: 'kf40', _curses.KEY_F41: 'kf41', _curses.KEY_F42: 'kf42', _curses.KEY_F43: 'kf43', _curses.KEY_F44: 'kf44', _curses.KEY_F45: 'kf45', _curses.KEY_F46: 'kf46', _curses.KEY_F47: 'kf47', _curses.KEY_F48: 'kf48', _curses.KEY_F49: 'kf49', _curses.KEY_F5: 'kf5', _curses.KEY_F50: 'kf50', _curses.KEY_F51: 'kf51', _curses.KEY_F52: 'kf52', _curses.KEY_F53: 'kf53', _curses.KEY_F54: 'kf54', _curses.KEY_F55: 'kf55', _curses.KEY_F56: 'kf56', _curses.KEY_F57: 'kf57', _curses.KEY_F58: 'kf58', _curses.KEY_F59: 'kf59', _curses.KEY_F6: 'kf6', _curses.KEY_F60: 'kf60', _curses.KEY_F61: 'kf61', _curses.KEY_F62: 'kf62', _curses.KEY_F63: 'kf63', _curses.KEY_F7: 'kf7', _curses.KEY_F8: 'kf8', _curses.KEY_F9: 'kf9', _curses.KEY_FIND: 'kfnd', _curses.KEY_HELP: 'khlp', _curses.KEY_HOME: 'khome', _curses.KEY_IC: 'kich1', _curses.KEY_IL: 'kil1', _curses.KEY_LEFT: 'kcub1', _curses.KEY_LL: 'kll', _curses.KEY_MARK: 'kmrk', _curses.KEY_MESSAGE: 'kmsg', _curses.KEY_MOVE: 'kmov', _curses.KEY_NEXT: 'knxt', _curses.KEY_NPAGE: 'knp', _curses.KEY_OPEN: 'kopn', _curses.KEY_OPTIONS: 'kopt', _curses.KEY_PPAGE: 'kpp', _curses.KEY_PREVIOUS: 'kprv', _curses.KEY_PRINT: 'kprt', _curses.KEY_REDO: 'krdo', _curses.KEY_REFERENCE: 'kref', _curses.KEY_REFRESH: 'krfr', _curses.KEY_REPLACE: 'krpl', _curses.KEY_RESTART: 'krst', _curses.KEY_RESUME: 'kres', _curses.KEY_RIGHT: 'kcuf1', _curses.KEY_SAVE: 'ksav', _curses.KEY_SBEG: 'kBEG', _curses.KEY_SCANCEL: 'kCAN', _curses.KEY_SCOMMAND: 'kCMD', _curses.KEY_SCOPY: 'kCPY', _curses.KEY_SCREATE: 'kCRT', _curses.KEY_SDC: 'kDC', _curses.KEY_SDL: 'kDL', _curses.KEY_SELECT: 'kslt', _curses.KEY_SEND: 'kEND', _curses.KEY_SEOL: 'kEOL', _curses.KEY_SEXIT: 'kEXT', _curses.KEY_SF: 'kind', _curses.KEY_SFIND: 'kFND', _curses.KEY_SHELP: 'kHLP', _curses.KEY_SHOME: 'kHOM', _curses.KEY_SIC: 'kIC', _curses.KEY_SLEFT: 'kLFT', _curses.KEY_SMESSAGE: 'kMSG', _curses.KEY_SMOVE: 'kMOV', _curses.KEY_SNEXT: 'kNXT', _curses.KEY_SOPTIONS: 'kOPT', _curses.KEY_SPREVIOUS: 'kPRV', _curses.KEY_SPRINT: 'kPRT', _curses.KEY_SR: 'kri', _curses.KEY_SREDO: 'kRDO', _curses.KEY_SREPLACE: 'kRPL', _curses.KEY_SRIGHT: 'kRIT', _curses.KEY_SRSUME: 'kRES', _curses.KEY_SSAVE: 'kSAV', _curses.KEY_SSUSPEND: 'kSPD', _curses.KEY_STAB: 'khts', _curses.KEY_SUNDO: 'kUND', _curses.KEY_SUSPEND: 'kspd', _curses.KEY_UNDO: 'kund', _curses.KEY_UP: 'kcuu1' } def has_key(ch): if type(ch) == type( '' ): ch = ord(ch) # Figure out the correct capability name for the keycode. capability_name = _capability_names[ch] #Check the current terminal description for that capability; #if present, return true, else return false. if _curses.tigetstr( capability_name ): return 1 else: return 0 if __name__ == '__main__': # Compare the output of this implementation and the ncurses has_key, # on platforms where has_key is already available import _curses try: L = [] _curses.initscr() for key in _capability_names.keys(): system = _curses.has_key(key) python = has_key(key) if system != python: L.append( 'Mismatch for key %s, system=%i, Python=%i' % (_curses.keyname( key ), system, python) ) finally: _curses.endwin() for i in L: print i Index: __init__.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/curses/__init__.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** __init__.py 2000/06/26 23:54:03 1.2 --- __init__.py 2000/08/01 01:21:11 1.3 *************** *** 33,34 **** --- 33,41 ---- return stdscr + # Import Python has_key() implementation if _curses doesn't contain has_key() + + try: + has_key + except NameError: + from has_key import has_key + From python-dev@python.org Tue Aug 1 02:26:04 2000 From: python-dev@python.org (A.M. Kuchling) Date: Mon, 31 Jul 2000 18:26:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules shamodule.c,2.8,2.9 Message-ID: <200008010126.SAA15273@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv15247 Modified Files: shamodule.c Log Message: Update e-mail address Index: shamodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/shamodule.c,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** shamodule.c 2000/07/21 06:00:07 2.8 --- shamodule.c 2000/08/01 01:26:02 2.9 *************** *** 22,26 **** based upon. Additional work performed by: ! Andrew Kuchling (amk1@erols.com) Greg Stein (gstein@lyra.org) */ --- 22,26 ---- based upon. Additional work performed by: ! Andrew Kuchling (amk1@bigfoot.com) Greg Stein (gstein@lyra.org) */ From python-dev@python.org Tue Aug 1 14:01:46 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 06:01:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.3,1.4 Message-ID: <200008011301.GAA10270@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv10022/Lib/test Modified Files: test_sre.py Log Message: -- SRE 0.9.8: updated test scripts Index: test_sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_sre.py 2000/07/03 18:44:21 1.3 --- test_sre.py 2000/08/01 13:01:34 1.4 *************** *** 153,159 **** assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! # FIXME: group problem ! # assert sre.split("(b)|(:+)", ":a:b::c") == \ ! # ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: --- 153,160 ---- assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! ## print sre.split("(b)|(:+)", ":a:b::c") ! ## print ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] ! ## assert sre.split("(b)|(:+)", ":a:b::c") == \ ! ## ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: *************** *** 378,383 **** print '=== Fails on locale-sensitive match', t ! # Try the match with UNICODE enabled, and check that it ! # still succeeds. obj=sre.compile(pattern, sre.UNICODE) result=obj.search(s) --- 379,384 ---- print '=== Fails on locale-sensitive match', t ! # Try the match with UNICODE locale enabled, and check ! # that it still succeeds. obj=sre.compile(pattern, sre.UNICODE) result=obj.search(s) From python-dev@python.org Tue Aug 1 14:01:46 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 06:01:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_sre,1.7,1.8 test_re,1.11,1.12 Message-ID: <200008011301.GAA10275@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv10022/Lib/test/output Modified Files: test_sre test_re Log Message: -- SRE 0.9.8: updated test scripts Index: test_sre =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_sre,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** test_sre 2000/07/23 21:46:17 1.7 --- test_sre 2000/08/01 13:01:43 1.8 *************** *** 1,6 **** test_sre - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Failed incorrectly ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === grouping error ('(a)(b)c|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None') 'ab-None-b' should be 'ab-None-None' - === grouping error ('(a)+b|aac', 'aac', 0, 'found+"-"+g1', 'aac-None') 'aac-a' should be 'aac-None' - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') --- 1 ---- Index: test_re =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_re,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** test_re 2000/07/24 22:35:11 1.11 --- test_re 2000/08/01 13:01:43 1.12 *************** *** 1,12 **** test_re - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on case-insensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on locale-sensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Failed incorrectly ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === Fails on case-insensitive match ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === Fails on locale-sensitive match ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === grouping error ('(a)(b)c|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None') 'ab-None-b' should be 'ab-None-None' - === grouping error ('(a)+b|aac', 'aac', 0, 'found+"-"+g1', 'aac-None') 'aac-a' should be 'aac-None' - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on case-insensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on locale-sensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') --- 1 ---- From python-dev@python.org Tue Aug 1 14:16:58 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 06:16:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.4,1.5 Message-ID: <200008011316.GAA15551@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv14481/Lib/test Modified Files: test_sre.py Log Message: -- SRE 0.9.8: now that the bug is fixed, I might as well enable the test again... Index: test_sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_sre.py 2000/08/01 13:01:34 1.4 --- test_sre.py 2000/08/01 13:16:55 1.5 *************** *** 153,160 **** assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! ## print sre.split("(b)|(:+)", ":a:b::c") ! ## print ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] ! ## assert sre.split("(b)|(:+)", ":a:b::c") == \ ! ## ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: --- 153,158 ---- assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! assert sre.split("(b)|(:+)", ":a:b::c") == \ ! ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: From python-dev@python.org Tue Aug 1 16:50:12 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 08:50:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python20.wse,1.5,1.6 Message-ID: <200008011550.IAA15659@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv15642 Modified Files: python20.wse Log Message: somehow the 'Total Keys=1' disappears. No other changes. Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** python20.wse 2000/06/30 14:55:26 1.5 --- python20.wse 2000/08/01 15:50:09 1.6 *************** *** 1,1249 **** ! Document Type: WSE ! item: Global ! Version=5.0 ! Title=Python 2.0 beta 1 ! Flags=00010100 ! Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ! Japanese Font Name=MS Gothic ! Japanese Font Size=10 ! Start Gradient=0 0 255 ! End Gradient=0 0 0 [...2446 lines suppressed...] ! Text=%APPTITLE% has been successfully installed. ! Text= ! Text=Press the Finish button to exit this installation. ! Text French=%APPTITLE% est maintenant installé. ! Text French= ! Text French=Cliquez sur le bouton Fin pour quitter l'installation. ! Text German=%APPTITLE% wurde erfolgreich installiert. ! Text German= ! Text German=Klicken Sie auf "Weiter", um die Installation zu beenden. ! Text Spanish=%APPTITLE% se ha instalado con éxito. ! Text Spanish= ! Text Spanish=Presione el botón Terminar para salir de esta instalación. ! Text Italian=L'installazione %APPTITLE% è stata portata a termine con successo. ! Text Italian= ! Text Italian=Premere il pulsante Fine per uscire dall'installazione. ! end ! end ! end ! item: End Block ! end From python-dev@python.org Tue Aug 1 17:37:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 09:37:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile,1.195,1.195.2.1 Message-ID: <200008011637.JAA26634@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv26624 Modified Files: Tag: cnri-16-start Makefile Log Message: Update the release number for the 1.6 branch only. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile,v retrieving revision 1.195 retrieving revision 1.195.2.1 diff -C2 -r1.195 -r1.195.2.1 *** Makefile 2000/04/28 17:09:17 1.195 --- Makefile 2000/08/01 16:37:02 1.195.2.1 *************** *** 62,66 **** # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6a2 --- 62,66 ---- # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6b1 From python-dev@python.org Tue Aug 1 17:42:35 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 09:42:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include patchlevel.h,2.35,2.35.2.1 Message-ID: <200008011642.JAA27103@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv27093 Modified Files: Tag: cnri-16-start patchlevel.h Log Message: Update the release number for the 1.6 branch only. Index: patchlevel.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/patchlevel.h,v retrieving revision 2.35 retrieving revision 2.35.2.1 diff -C2 -r2.35 -r2.35.2.1 *** patchlevel.h 2000/04/06 15:01:30 2.35 --- patchlevel.h 2000/08/01 16:42:32 2.35.2.1 *************** *** 53,64 **** #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 0 ! #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA ! #define PY_RELEASE_SERIAL 2 /* Version as a string */ ! #define PY_VERSION "1.6a2" /* Historic */ ! #define PATCHLEVEL "1.6a2" /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. --- 53,64 ---- #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 0 ! #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_BETA ! #define PY_RELEASE_SERIAL 1 /* Version as a string */ ! #define PY_VERSION "1.6b1" /* Historic */ ! #define PATCHLEVEL "1.6b1" /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. From python-dev@python.org Tue Aug 1 17:53:47 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Tue, 1 Aug 2000 09:53:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.9,2.10 Message-ID: <200008011653.JAA28273@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv28218 Modified Files: pyport.h Log Message: Guido said this is food for the beta-testers Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.9 retrieving revision 2.10 diff -C2 -r2.9 -r2.10 *** pyport.h 2000/07/31 22:19:30 2.9 --- pyport.h 2000/08/01 16:53:44 2.10 *************** *** 282,285 **** --- 282,287 ---- here is a set that should do the job */ + #ifdef 0 /* disabled and probably obsolete */ + #ifndef FD_SETSIZE #define FD_SETSIZE 256 *************** *** 305,308 **** --- 307,313 ---- #endif /* FD_SET */ + + #endif /* fd manipulation macros */ + #ifdef __cplusplus } From python-dev@python.org Tue Aug 1 18:33:35 2000 From: python-dev@python.org (Jeremy Hylton) Date: Tue, 1 Aug 2000 10:33:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib httplib.py,1.18,1.19 Message-ID: <200008011733.KAA06829@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv6655 Modified Files: httplib.py Log Message: add support for HTTPS Modify HTTP to use delegation instead of inheritance. The _connection_class attribute of the class defines what class to delegate to. The HTTPS class is a subclass of HTTP that redefines _connection_class. Index: httplib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/httplib.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** httplib.py 2000/07/18 09:09:47 1.18 --- httplib.py 2000/08/01 17:33:32 1.19 *************** *** 1,7 **** - # - # HTTP/1.1 client library - # - - # ### this may as well go into a doc string... """HTTP/1.1 client library --- 1,2 ---- *************** *** 72,76 **** """ - import socket import string --- 67,70 ---- *************** *** 600,604 **** ! class HTTP(HTTPConnection): "Compatibility class with httplib.py from 1.5." --- 594,598 ---- ! class HTTP: "Compatibility class with httplib.py from 1.5." *************** *** 608,611 **** --- 602,607 ---- debuglevel = 0 + _connection_class = HTTPConnection + def __init__(self, host='', port=None, **x509): "Provide a default host, since the superclass requires one." *************** *** 618,622 **** # an error when we attempt to connect. Presumably, the client code # will call connect before then, with a proper host. ! HTTPConnection.__init__(self, host, port) # we never actually use these for anything, but we keep them here for --- 614,622 ---- # an error when we attempt to connect. Presumably, the client code # will call connect before then, with a proper host. ! self._conn = self._connection_class(host, port) ! # set up delegation to flesh out interface ! self.send = self._conn.send ! self.putrequest = self._conn.putrequest ! self.endheaders = self._conn.endheaders # we never actually use these for anything, but we keep them here for *************** *** 631,636 **** if host is not None: ! self._set_hostport(host, port) ! HTTPConnection.connect(self) def set_debuglevel(self, debuglevel): --- 631,636 ---- if host is not None: ! self._conn._set_hostport(host, port) ! self._conn.connect() def set_debuglevel(self, debuglevel): *************** *** 644,649 **** def putheader(self, header, *values): "The superclass allows only one value argument." ! HTTPConnection.putheader(self, header, ! string.joinfields(values, '\r\n\t')) def getreply(self): --- 644,649 ---- def putheader(self, header, *values): "The superclass allows only one value argument." ! self._conn.putheader(header, ! string.joinfields(values, '\r\n\t')) def getreply(self): *************** *** 656,660 **** """ try: ! response = self.getresponse() except BadStatusLine, e: ### hmm. if getresponse() ever closes the socket on a bad request, --- 656,660 ---- """ try: ! response = self._conn.getresponse() except BadStatusLine, e: ### hmm. if getresponse() ever closes the socket on a bad request, *************** *** 663,667 **** ### should we keep this behavior? do people use it? # keep the socket open (as a file), and return it ! self.file = self.sock.makefile('rb', 0) # close our socket -- we want to restart after any protocol error --- 663,667 ---- ### should we keep this behavior? do people use it? # keep the socket open (as a file), and return it ! self.file = self._conn.sock.makefile('rb', 0) # close our socket -- we want to restart after any protocol error *************** *** 676,680 **** def close(self): ! HTTPConnection.close(self) # note that self.file == response.fp, which gets closed by the --- 676,680 ---- def close(self): ! self._conn.close() # note that self.file == response.fp, which gets closed by the *************** *** 685,688 **** --- 685,699 ---- self.file = None + if hasattr(socket, 'ssl'): + class HTTPS(HTTP): + """Compatibility with 1.5 httplib interface + + Python 1.5.2 did not have an HTTPS class, but it defined an + interface for sending http requests that is also useful for + https. + """ + + _connection_class = HTTPSConnection + class HTTPException(Exception): *************** *** 765,769 **** if hasattr(socket, 'ssl'): ! host = 'www.c2.net' hs = HTTPS() hs.connect(host) --- 776,780 ---- if hasattr(socket, 'ssl'): ! host = 'sourceforge.net' hs = HTTPS() hs.connect(host) From python-dev@python.org Tue Aug 1 18:46:25 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 10:46:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python Makefile.in,2.24,2.25 Message-ID: <200008011746.KAA08023@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv8008/Python Modified Files: Makefile.in Log Message: Include the dependence of sysmodule on the patchlevel.h include, so that sys.version_info will be built properly. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/Makefile.in,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -r2.24 -r2.25 *** Makefile.in 2000/05/26 19:04:27 2.24 --- Makefile.in 2000/08/01 17:46:22 2.25 *************** *** 132,136 **** strtod.o: strtod.c structmember.o: structmember.c ! sysmodule.o: sysmodule.c thread.o: thread.c traceback.o: traceback.c --- 132,136 ---- strtod.o: strtod.c structmember.o: structmember.c ! sysmodule.o: sysmodule.c ../Include/patchlevel.h thread.o: thread.c traceback.o: traceback.c From python-dev@python.org Tue Aug 1 19:20:10 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 11:20:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.28,2.29 sre.h,2.15,2.16 sre_constants.h,2.7,2.8 Message-ID: <200008011820.LAA14089@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13106/Modules Modified Files: _sre.c sre.h sre_constants.h Log Message: SRE 0.9.8: passes the entire test suite -- reverted REPEAT operator to use "repeat context" strategy (from 0.8.X), but done right this time. -- got rid of backtracking stack; use nested SRE_MATCH calls instead (should probably put it back again in 0.9.9 ;-) -- properly reset state in scanner mode -- don't use aggressive inlining by default Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** _sre.c 2000/07/23 21:46:17 2.28 --- _sre.c 2000/08/01 18:20:07 2.29 *************** *** 6,22 **** * partial history: * 99-10-24 fl created (based on existing template matcher code) - * 99-11-13 fl added categories, branching, and more (0.2) - * 99-11-16 fl some tweaks to compile on non-Windows platforms - * 99-12-18 fl non-literals, generic maximizing repeat (0.3) - * 00-02-28 fl tons of changes (not all to the better ;-) (0.4) * 00-03-06 fl first alpha, sort of (0.5) - * 00-03-14 fl removed most compatibility stuff (0.6) - * 00-05-10 fl towards third alpha (0.8.2) - * 00-05-13 fl added experimental scanner stuff (0.8.3) [...1355 lines suppressed...] int status; ! state_reset(state); ! state->ptr = state->start; *************** *** 2122,2126 **** int status; ! state->lastindex = -1; state->ptr = state->start; --- 1968,1973 ---- int status; ! state_reset(state); ! state->ptr = state->start; Index: sre.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre.h,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** sre.h 2000/07/23 21:46:17 2.15 --- sre.h 2000/08/01 18:20:07 2.16 *************** *** 1,4 **** /* - * * Secret Labs' Regular Expression Engine * --- 1,3 ---- *************** *** 45,60 **** typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch); - typedef struct { - /* stack elements */ - SRE_CODE* pattern; - void* ptr; - int mark; - void* mark0; - void* mark1; - } SRE_STACK; - /* FIXME: shouldn't be a constant, really... */ #define SRE_MARK_SIZE 200 typedef struct { /* string pointers */ --- 44,56 ---- typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch); /* FIXME: shouldn't be a constant, really... */ #define SRE_MARK_SIZE 200 + typedef struct SRE_REPEAT_T { + int count; + SRE_CODE* pattern; /* points to REPEAT operator arguments */ + struct SRE_REPEAT_T *prev; /* points to previous repeat context */ + } SRE_REPEAT; + typedef struct { /* string pointers */ *************** *** 72,79 **** int lastmark; void* mark[SRE_MARK_SIZE]; ! /* backtracking stack */ ! SRE_STACK* stack; ! int stacksize; ! int stackbase; /* hooks */ SRE_TOLOWER_HOOK lower; --- 68,76 ---- int lastmark; void* mark[SRE_MARK_SIZE]; ! /* dynamically allocated stuff */ ! void** mark_stack; ! int mark_stack_size; ! int mark_stack_base; ! SRE_REPEAT *repeat; /* current repeat context */ /* hooks */ SRE_TOLOWER_HOOK lower; *************** *** 81,85 **** typedef struct { - /* scanner (internal helper object) */ PyObject_HEAD PyObject* pattern; --- 78,81 ---- Index: sre_constants.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre_constants.h,v retrieving revision 2.7 retrieving revision 2.8 diff -C2 -r2.7 -r2.8 *** sre_constants.h 2000/07/02 17:33:27 2.7 --- sre_constants.h 2000/08/01 18:20:07 2.8 *************** *** 22,43 **** #define SRE_OP_CATEGORY 8 #define SRE_OP_CHARSET 9 ! #define SRE_OP_GROUP 10 ! #define SRE_OP_GROUP_IGNORE 11 ! #define SRE_OP_INDEX 12 ! #define SRE_OP_IN 13 ! #define SRE_OP_IN_IGNORE 14 ! #define SRE_OP_INFO 15 ! #define SRE_OP_JUMP 16 ! #define SRE_OP_LITERAL 17 ! #define SRE_OP_LITERAL_IGNORE 18 ! #define SRE_OP_MARK 19 ! #define SRE_OP_MAX_REPEAT 20 ! #define SRE_OP_MAX_REPEAT_ONE 21 ! #define SRE_OP_MIN_REPEAT 22 ! #define SRE_OP_NOT_LITERAL 23 ! #define SRE_OP_NOT_LITERAL_IGNORE 24 ! #define SRE_OP_NEGATE 25 ! #define SRE_OP_RANGE 26 ! #define SRE_OP_REPEAT 27 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 --- 22,43 ---- #define SRE_OP_CATEGORY 8 #define SRE_OP_CHARSET 9 ! #define SRE_OP_GROUPREF 10 ! #define SRE_OP_GROUPREF_IGNORE 11 ! #define SRE_OP_IN 12 ! #define SRE_OP_IN_IGNORE 13 ! #define SRE_OP_INFO 14 ! #define SRE_OP_JUMP 15 ! #define SRE_OP_LITERAL 16 ! #define SRE_OP_LITERAL_IGNORE 17 ! #define SRE_OP_MARK 18 ! #define SRE_OP_MAX_UNTIL 19 ! #define SRE_OP_MIN_UNTIL 20 ! #define SRE_OP_NOT_LITERAL 21 ! #define SRE_OP_NOT_LITERAL_IGNORE 22 ! #define SRE_OP_NEGATE 23 ! #define SRE_OP_RANGE 24 ! #define SRE_OP_REPEAT 25 ! #define SRE_OP_REPEAT_ONE 26 ! #define SRE_OP_SUBPATTERN 27 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 From python-dev@python.org Tue Aug 1 19:20:10 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 11:20:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.21,1.22 sre_compile.py,1.26,1.27 sre_constants.py,1.18,1.19 sre_parse.py,1.26,1.27 Message-ID: <200008011820.LAA14083@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13106/Lib Modified Files: sre.py sre_compile.py sre_constants.py sre_parse.py Log Message: SRE 0.9.8: passes the entire test suite -- reverted REPEAT operator to use "repeat context" strategy (from 0.8.X), but done right this time. -- got rid of backtracking stack; use nested SRE_MATCH calls instead (should probably put it back again in 0.9.9 ;-) -- properly reset state in scanner mode -- don't use aggressive inlining by default Index: sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** sre.py 2000/07/23 21:46:17 1.21 --- sre.py 2000/08/01 18:20:06 1.22 *************** *** 6,11 **** # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and # other compatibility work. # --- 6,15 ---- # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # + # This version of the SRE library can be redistributed under CNRI's + # Python 1.6 license. For any other use, please contact Secret Labs + # AB (info@pythonware.com). + # # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 1.6 integration and # other compatibility work. # *************** *** 25,29 **** X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE ! # sre extensions (may or may not be in 2.0 final) T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE U = UNICODE = sre_compile.SRE_FLAG_UNICODE --- 29,33 ---- X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE ! # sre extensions (may or may not be in 1.6/2.0 final) T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE U = UNICODE = sre_compile.SRE_FLAG_UNICODE *************** *** 169,173 **** class Scanner: def __init__(self, lexicon): ! from sre_constants import BRANCH, SUBPATTERN, INDEX self.lexicon = lexicon # combine phrases into a compound pattern --- 173,177 ---- class Scanner: def __init__(self, lexicon): ! from sre_constants import BRANCH, SUBPATTERN self.lexicon = lexicon # combine phrases into a compound pattern *************** *** 176,181 **** for phrase, action in lexicon: p.append(sre_parse.SubPattern(s, [ ! (SUBPATTERN, (None, sre_parse.parse(phrase))), ! (INDEX, len(p)) ])) p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) --- 180,184 ---- for phrase, action in lexicon: p.append(sre_parse.SubPattern(s, [ ! (SUBPATTERN, (len(p), sre_parse.parse(phrase))), ])) p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) Index: sre_compile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** sre_compile.py 2000/07/23 21:46:17 1.26 --- sre_compile.py 2000/08/01 18:20:06 1.27 *************** *** 6,12 **** # Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. # ! # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and ! # other compatibility work. # --- 6,10 ---- # Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. # ! # See the sre.py file for information on usage and redistribution. # *************** *** 125,128 **** --- 123,127 ---- elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT): if flags & SRE_FLAG_TEMPLATE: + raise error, "internal: unsupported template operator" emit(OPCODES[REPEAT]) skip = len(code); emit(0) *************** *** 137,143 **** raise error, "nothing to repeat" if 0 and lo == hi == 1 and op is MAX_REPEAT: ! # FIXME: need a better way to figure out when ! # it's safe to use this one (in the parser, probably) ! emit(OPCODES[MAX_REPEAT_ONE]) skip = len(code); emit(0) emit(av[0]) --- 136,141 ---- raise error, "nothing to repeat" if 0 and lo == hi == 1 and op is MAX_REPEAT: ! # FIXME: fast and wrong (but we'll fix that) ! emit(OPCODES[REPEAT_ONE]) skip = len(code); emit(0) emit(av[0]) *************** *** 147,173 **** code[skip] = len(code) - skip else: ! emit(OPCODES[op]) skip = len(code); emit(0) emit(av[0]) emit(av[1]) - mark = MAXCODE - if av[2][0][0] == SUBPATTERN: - # repeated subpattern - gid, foo = av[2][0][1] - if gid: - mark = (gid-1)*2 - emit(mark) _compile(code, av[2], flags) - emit(OPCODES[SUCCESS]) code[skip] = len(code) - skip elif op is SUBPATTERN: ! gid = av[0] ! if gid: emit(OPCODES[MARK]) ! emit((gid-1)*2) _compile(code, av[1], flags) ! if gid: emit(OPCODES[MARK]) ! emit((gid-1)*2+1) elif op in (SUCCESS, FAILURE): emit(OPCODES[op]) --- 145,166 ---- code[skip] = len(code) - skip else: ! emit(OPCODES[REPEAT]) skip = len(code); emit(0) emit(av[0]) emit(av[1]) _compile(code, av[2], flags) code[skip] = len(code) - skip + if op == MAX_REPEAT: + emit(OPCODES[MAX_UNTIL]) + else: + emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: ! if av[0]: emit(OPCODES[MARK]) ! emit((av[0]-1)*2) _compile(code, av[1], flags) ! if av[0]: emit(OPCODES[MARK]) ! emit((av[0]-1)*2+1) elif op in (SUCCESS, FAILURE): emit(OPCODES[op]) *************** *** 198,206 **** emit(ATCODES[av]) elif op is BRANCH: tail = [] for av in av[1]: - emit(OPCODES[op]) skip = len(code); emit(0) - emit(MAXCODE) # save mark _compile(code, av, flags) emit(OPCODES[JUMP]) --- 191,198 ---- emit(ATCODES[av]) elif op is BRANCH: + emit(OPCODES[op]) tail = [] for av in av[1]: skip = len(code); emit(0) _compile(code, av, flags) emit(OPCODES[JUMP]) *************** *** 224,230 **** emit(OPCODES[op]) emit(av-1) - elif op in (MARK, INDEX): - emit(OPCODES[op]) - emit(av) else: raise ValueError, ("unsupported operand type", op) --- 216,219 ---- *************** *** 295,309 **** pass ! def compile(p, flags=0): ! # internal: convert pattern list to internal format - # compile, as necessary - if type(p) in STRING_TYPES: - import sre_parse - pattern = p - p = sre_parse.parse(p, flags) - else: - pattern = None - flags = p.pattern.flags | flags code = [] --- 284,289 ---- pass ! def _compile1(p, flags): flags = p.pattern.flags | flags code = [] *************** *** 316,319 **** --- 296,313 ---- code.append(OPCODES[SUCCESS]) + + return code + + def compile(p, flags=0): + # internal: convert pattern list to internal format + + if type(p) in STRING_TYPES: + import sre_parse + pattern = p + p = sre_parse.parse(p, flags) + else: + pattern = None + + code = _compile1(p, flags) # print code Index: sre_constants.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_constants.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** sre_constants.py 2000/07/23 21:46:17 1.18 --- sre_constants.py 2000/08/01 18:20:06 1.19 *************** *** 7,13 **** # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and ! # other compatibility work. # --- 7,11 ---- # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # See the sre.py file for information on usage and redistribution. # *************** *** 34,38 **** IN = "in" IN_IGNORE = "in_ignore" - INDEX = "index" INFO = "info" JUMP = "jump" --- 32,35 ---- *************** *** 41,46 **** MARK = "mark" MAX_REPEAT = "max_repeat" ! MAX_REPEAT_ONE = "max_repeat_one" MIN_REPEAT = "min_repeat" NEGATE = "negate" NOT_LITERAL = "not_literal" --- 38,44 ---- MARK = "mark" MAX_REPEAT = "max_repeat" ! MAX_UNTIL = "max_until" MIN_REPEAT = "min_repeat" + MIN_UNTIL = "min_until" NEGATE = "negate" NOT_LITERAL = "not_literal" *************** *** 92,96 **** CHARSET, GROUPREF, GROUPREF_IGNORE, - INDEX, IN, IN_IGNORE, INFO, --- 90,93 ---- *************** *** 98,108 **** LITERAL, LITERAL_IGNORE, MARK, ! MAX_REPEAT, ! MAX_REPEAT_ONE, ! MIN_REPEAT, NOT_LITERAL, NOT_LITERAL_IGNORE, NEGATE, RANGE, ! REPEAT ] --- 95,106 ---- LITERAL, LITERAL_IGNORE, MARK, ! MAX_UNTIL, ! MIN_UNTIL, NOT_LITERAL, NOT_LITERAL_IGNORE, NEGATE, RANGE, ! REPEAT, ! REPEAT_ONE, ! SUBPATTERN ] Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** sre_parse.py 2000/07/23 21:46:17 1.26 --- sre_parse.py 2000/08/01 18:20:06 1.27 *************** *** 6,12 **** # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and ! # other compatibility work. # --- 6,10 ---- # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # See the sre.py file for information on usage and redistribution. # *************** *** 537,542 **** p = _parse_sub(source, state) subpattern.append((SUBPATTERN, (group, p))) - if group is not None: - p.append((INDEX, group)) else: while 1: --- 535,538 ---- From python-dev@python.org Tue Aug 1 19:28:47 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 11:28:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.10,2.11 Message-ID: <200008011828.LAA16142@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv16132 Modified Files: pyport.h Log Message: Of course, you meant "#if 0" and not "#ifdef 0". :) Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** pyport.h 2000/08/01 16:53:44 2.10 --- pyport.h 2000/08/01 18:28:44 2.11 *************** *** 282,286 **** here is a set that should do the job */ ! #ifdef 0 /* disabled and probably obsolete */ #ifndef FD_SETSIZE --- 282,286 ---- here is a set that should do the job */ ! #if 0 /* disabled and probably obsolete */ #ifndef FD_SETSIZE From python-dev@python.org Tue Aug 1 21:28:36 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 13:28:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib re.py,1.37,1.38 Message-ID: <200008012028.NAA10085@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10073 Modified Files: re.py Log Message: Replace the jitterbug page with the SF Bug Tracker page. Index: re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/re.py,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** re.py 2000/06/30 22:01:36 1.37 --- re.py 2000/08/01 20:28:33 1.38 *************** *** 9,13 **** # page: # ! # http://www.python.org/search/search_bugs.html # # or send a mail to SRE's author: --- 9,13 ---- # page: # ! # http://sourceforge.net/bugs/?group_id=5470 # # or send a mail to SRE's author: *************** *** 21,26 **** # ! engine = "sre" ! # engine = "pre" if engine == "sre": --- 21,26 ---- # ! # engine = "sre" ! engine = "pre" if engine == "sre": From python-dev@python.org Tue Aug 1 21:30:11 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 13:30:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8,1.8.2.1 python16.dsp,1.8,1.8.2.1 Message-ID: <200008012030.NAA10334@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv10313 Added Files: Tag: cnri-16-start python16.wse python16.dsp Log Message: Attempt to resurrect the Python 1.6 installer and MSVC project file. From python-dev@python.org Tue Aug 1 21:36:51 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 13:36:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.dsp,1.8.2.1,1.8.2.2 Message-ID: <200008012036.NAA10834@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv10822 Modified Files: Tag: cnri-16-start python16.dsp Log Message: restore CRLF line endings -- poke-n-hope Index: python16.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.dsp,v retrieving revision 1.8.2.1 retrieving revision 1.8.2.2 diff -C2 -r1.8.2.1 -r1.8.2.2 *** python16.dsp 2000/08/01 20:30:08 1.8.2.1 --- python16.dsp 2000/08/01 20:36:48 1.8.2.2 *************** *** 672,676 **** !ENDIF ! # End Source File # Begin Source File --- 672,676 ---- !ENDIF ! # End Source File # Begin Source File From python-dev@python.org Tue Aug 1 22:01:02 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 1 Aug 2000 14:01:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules arraymodule.c,2.51,2.52 Message-ID: <200008012101.OAA13954@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12853/python/dist/src/modules Modified Files: arraymodule.c Log Message: Removed decl of unreferenced vrbl. Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.51 retrieving revision 2.52 diff -C2 -r2.51 -r2.52 *** arraymodule.c 2000/07/31 21:57:30 2.51 --- arraymodule.c 2000/08/01 21:00:58 2.52 *************** *** 795,799 **** int size; PyObject *bb; - arrayobject *np; if (!PyArg_ParseTuple(args, "O:extend", &bb)) --- 795,798 ---- From python-dev@python.org Tue Aug 1 22:05:44 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 14:05:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre_compile.py,1.27,1.28 sre_parse.py,1.27,1.28 Message-ID: <200008012105.OAA19618@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12762/Lib Modified Files: sre_compile.py sre_parse.py Log Message: -- fixed width calculations for alternations -- fixed literal check in branch operator (this broke test_tokenize, as reported by Mark Favas) -- added REPEAT_ONE operator (still not enabled, though) -- added some debugging stuff (maxlevel) Index: sre_compile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** sre_compile.py 2000/08/01 18:20:06 1.27 --- sre_compile.py 2000/08/01 21:05:40 1.28 *************** *** 271,274 **** --- 271,275 ---- code.extend(table[1:]) # don't store first entry elif charset: + # FIXME: use charset optimizer! for char in charset: emit(OPCODES[LITERAL]) *************** *** 284,288 **** pass ! def _compile1(p, flags): flags = p.pattern.flags | flags --- 285,289 ---- pass ! def _code(p, flags): flags = p.pattern.flags | flags *************** *** 309,313 **** pattern = None ! code = _compile1(p, flags) # print code --- 310,314 ---- pattern = None ! code = _code(p, flags) # print code Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** sre_parse.py 2000/08/01 18:20:06 1.27 --- sre_parse.py 2000/08/01 21:05:40 1.28 *************** *** 138,147 **** for op, av in self.data: if op is BRANCH: ! l = sys.maxint ! h = 0 for av in av[1]: ! i, j = av.getwidth() ! l = min(l, i) ! h = min(h, j) lo = lo + i hi = hi + j --- 138,147 ---- for op, av in self.data: if op is BRANCH: ! i = sys.maxint ! j = 0 for av in av[1]: ! l, h = av.getwidth() ! i = min(i, l) ! j = min(j, h) lo = lo + i hi = hi + j From python-dev@python.org Tue Aug 1 22:05:44 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 14:05:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.29,2.30 sre.h,2.16,2.17 Message-ID: <200008012105.OAA19622@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12762/Modules Modified Files: _sre.c sre.h Log Message: -- fixed width calculations for alternations -- fixed literal check in branch operator (this broke test_tokenize, as reported by Mark Favas) -- added REPEAT_ONE operator (still not enabled, though) -- added some debugging stuff (maxlevel) Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** _sre.c 2000/08/01 18:20:07 2.29 --- _sre.c 2000/08/01 21:05:41 2.30 *************** *** 220,223 **** --- 220,231 ---- mark_fini(SRE_STATE* state) { + #if 0 + /* FIXME: debugging */ + if (state->maxlevel > 0) + printf("max %d\n", state->maxlevel); + if (state->mark_stack_base > 0) + printf("mark stack %d\n", state->mark_stack_base); + #endif + if (state->mark_stack) free(state->mark_stack); *************** *** 431,435 **** LOCAL(int) ! SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern) { /* check if string matches the given pattern. returns -1 for --- 439,443 ---- LOCAL(int) ! SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level) { /* check if string matches the given pattern. returns -1 for *************** *** 444,448 **** SRE_REPEAT rep; /* FIXME: allocate in STATE instead */ ! TRACE(("%8d: enter\n", PTR(ptr))); if (pattern[0] == SRE_OP_INFO) { --- 452,456 ---- SRE_REPEAT rep; /* FIXME: allocate in STATE instead */ ! TRACE(("%8d: enter %d\n", PTR(ptr), level)); if (pattern[0] == SRE_OP_INFO) { *************** *** 457,460 **** --- 465,472 ---- } + /* FIXME: debugging */ + if (level > state->maxlevel) + state->maxlevel = level; + for (;;) { *************** *** 624,628 **** if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2); if (i <= 0) return i; --- 636,640 ---- if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2, level + 1); if (i <= 0) return i; *************** *** 639,643 **** if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2); if (i < 0) return i; --- 651,655 ---- if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2, level + 1); if (i < 0) return i; *************** *** 657,664 **** while (pattern[0]) { TRACE(("%8d: try branch\n", PTR(ptr))); ! if (pattern[2] != SRE_OP_LITERAL || ! (ptr < end && (SRE_CODE) ptr[0] == pattern[3])) { state->ptr = ptr; ! i = SRE_MATCH(state, pattern + 1); if (i) return i; --- 669,676 ---- while (pattern[0]) { TRACE(("%8d: try branch\n", PTR(ptr))); ! if (pattern[1] != SRE_OP_LITERAL || ! (ptr < end && (SRE_CODE) ptr[0] == pattern[2])) { state->ptr = ptr; ! i = SRE_MATCH(state, pattern + 1, level + 1); if (i) return i; *************** *** 671,674 **** --- 683,835 ---- return 0; + case SRE_OP_REPEAT_ONE: + /* match repeated sequence (maximizing regexp) */ + + /* this operator only works if the repeated item is + exactly one character wide, and we're not already + collecting backtracking points. for other cases, + use the MAX_REPEAT operator instead */ + + /* <1=min> <2=max> item tail */ + + TRACE(("%8d: max repeat one {%d,%d}\n", PTR(ptr), + pattern[1], pattern[2])); + + count = 0; + + if (pattern[3] == SRE_OP_ANY) { + /* repeated wildcard. skip to the end of the target + string, and backtrack from there */ + /* FIXME: must look for line endings */ + if (ptr + pattern[1] > end) + return 0; /* cannot match */ + count = pattern[2]; + if (count > end - ptr) + count = end - ptr; + ptr += count; + + } else if (pattern[3] == SRE_OP_LITERAL) { + /* repeated literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) ptr[0] != chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_LITERAL_IGNORE) { + /* repeated literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_NOT_LITERAL) { + /* repeated non-literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) ptr[0] == chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_NOT_LITERAL_IGNORE) { + /* repeated non-literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_IN) { + /* repeated set */ + while (count < (int) pattern[2]) { + if (ptr >= end || !SRE_MEMBER(pattern + 5, *ptr)) + break; + ptr++; + count++; + } + + } else { + /* repeated single character pattern */ + state->ptr = ptr; + while (count < (int) pattern[2]) { + i = SRE_MATCH(state, pattern + 3, level + 1); + if (i < 0) + return i; + if (!i) + break; + count++; + } + state->ptr = ptr; + ptr += count; + } + + /* when we arrive here, count contains the number of + matches, and ptr points to the tail of the target + string. check if the rest of the pattern matches, + and backtrack if not. */ + + TRACE(("%8d: repeat %d found\n", PTR(ptr), count)); + + if (count < (int) pattern[1]) + return 0; + + if (pattern[pattern[0]] == SRE_OP_SUCCESS) { + /* tail is empty. we're finished */ + TRACE(("%8d: tail is empty\n", PTR(ptr))); + state->ptr = ptr; + return 1; + + } else if (pattern[pattern[0]] == SRE_OP_LITERAL) { + /* tail starts with a literal. skip positions where + the rest of the pattern cannot possibly match */ + SRE_CODE chr = pattern[pattern[0]+1]; + TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr)); + for (;;) { + TRACE(("%8d: scan for tail match\n", PTR(ptr))); + while (count >= (int) pattern[1] && + (ptr >= end || *ptr != chr)) { + ptr--; + count--; + } + TRACE(("%8d: check tail\n", PTR(ptr))); + if (count < (int) pattern[1]) + break; + state->ptr = ptr; + i = SRE_MATCH(state, pattern + pattern[0], level + 1); + if (i > 0) { + TRACE(("%8d: repeat %d picked\n", PTR(ptr), count)); + return 1; + } + ptr--; + count--; + } + + } else { + /* general case */ + TRACE(("%8d: tail is pattern\n", PTR(ptr))); + while (count >= (int) pattern[1]) { + state->ptr = ptr; + i = SRE_MATCH(state, pattern + pattern[0], level + 1); + if (i < 0) + return i; + if (i) { + TRACE(("%8d: repeat %d picked\n", PTR(ptr), count)); + return 1; + } + ptr--; + count--; + } + } + return 0; + case SRE_OP_REPEAT: /* create repeat context. all the hard work is done *************** *** 678,683 **** pattern[1], pattern[2])); - state->ptr = ptr; - rep.count = -1; rep.pattern = pattern; --- 839,842 ---- *************** *** 687,694 **** state->repeat = &rep; ! i = SRE_MATCH(state, pattern + pattern[0]); state->repeat = rep.prev; - /* free(rp); */ return i; --- 846,853 ---- state->repeat = &rep; ! state->ptr = ptr; ! i = SRE_MATCH(state, pattern + pattern[0], level + 1); state->repeat = rep.prev; return i; *************** *** 715,719 **** TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 874,878 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 730,734 **** lastmark = state->lastmark; mark_save(state, 0, lastmark); ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 889,893 ---- lastmark = state->lastmark; mark_save(state, 0, lastmark); ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 742,750 **** TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern); ! if (i) { ! /* free(rp); */ return i; - } state->repeat = rp; return 0; --- 901,907 ---- TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern, level + 1); ! if (i) return i; state->repeat = rp; return 0; *************** *** 768,772 **** TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 925,929 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 779,783 **** TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern); if (i) { /* free(rp); */ --- 936,940 ---- TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern, level + 1); if (i) { /* free(rp); */ *************** *** 791,795 **** TRACE(("%8d: match item (optional)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 948,952 ---- TRACE(("%8d: match item (optional)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 866,870 **** if (flags & SRE_INFO_LITERAL) return 1; /* we got all of it */ ! status = SRE_MATCH(state, pattern + 2*prefix_len); if (status != 0) return status; --- 1023,1027 ---- if (flags & SRE_INFO_LITERAL) return 1; /* we got all of it */ ! status = SRE_MATCH(state, pattern + 2*prefix_len, 1); if (status != 0) return status; *************** *** 894,898 **** state->start = ptr; state->ptr = ++ptr; ! status = SRE_MATCH(state, pattern + 2); if (status != 0) break; --- 1051,1055 ---- state->start = ptr; state->ptr = ++ptr; ! status = SRE_MATCH(state, pattern + 2, 1); if (status != 0) break; *************** *** 908,912 **** state->start = ptr; state->ptr = ptr; ! status = SRE_MATCH(state, pattern); if (status != 0) break; --- 1065,1069 ---- state->start = ptr; state->ptr = ptr; ! status = SRE_MATCH(state, pattern, 1); if (status != 0) break; *************** *** 917,921 **** TRACE(("%8d: === SEARCH ===\n", PTR(ptr))); state->start = state->ptr = ptr++; ! status = SRE_MATCH(state, pattern); if (status != 0) break; --- 1074,1078 ---- TRACE(("%8d: === SEARCH ===\n", PTR(ptr))); state->start = state->ptr = ptr++; ! status = SRE_MATCH(state, pattern, 1); if (status != 0) break; *************** *** 1033,1036 **** --- 1190,1196 ---- state->repeat = NULL; + /* FIXME: debugging */ + state->maxlevel = 0; + mark_fini(state); } *************** *** 1111,1114 **** --- 1271,1275 ---- state->mark_stack = NULL; + state->mark_stack_base = 0; state_reset(state); *************** *** 1263,1270 **** if (state.charsize == 1) { ! status = sre_match(&state, PatternObject_GetCode(self)); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(&state, PatternObject_GetCode(self)); #endif } --- 1424,1431 ---- if (state.charsize == 1) { ! status = sre_match(&state, PatternObject_GetCode(self), 1); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(&state, PatternObject_GetCode(self), 1); #endif } *************** *** 1942,1949 **** if (state->charsize == 1) { ! status = sre_match(state, PatternObject_GetCode(self->pattern)); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(state, PatternObject_GetCode(self->pattern)); #endif } --- 2103,2110 ---- if (state->charsize == 1) { ! status = sre_match(state, PatternObject_GetCode(self->pattern), 1); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(state, PatternObject_GetCode(self->pattern), 1); #endif } Index: sre.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** sre.h 2000/08/01 18:20:07 2.16 --- sre.h 2000/08/01 21:05:41 2.17 *************** *** 75,78 **** --- 75,80 ---- /* hooks */ SRE_TOLOWER_HOOK lower; + /* debugging */ + int maxlevel; } SRE_STATE; From python-dev@python.org Tue Aug 1 22:22:20 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 14:22:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib re.py,1.38,1.39 Message-ID: <200008012122.OAA22327@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22316 Modified Files: re.py Log Message: My fix to the URL accidentally also switched back to the "pre" module. Undo that! Index: re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/re.py,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** re.py 2000/08/01 20:28:33 1.38 --- re.py 2000/08/01 21:22:16 1.39 *************** *** 21,26 **** # ! # engine = "sre" ! engine = "pre" if engine == "sre": --- 21,26 ---- # ! engine = "sre" ! # engine = "pre" if engine == "sre": From python-dev@python.org Tue Aug 1 23:47:51 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 15:47:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.22,1.23 sre_compile.py,1.28,1.29 sre_constants.py,1.19,1.20 sre_parse.py,1.28,1.29 Message-ID: <200008012247.PAA10592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10513/Lib Modified Files: sre.py sre_compile.py sre_constants.py sre_parse.py Log Message: final 0.9.8 updates: -- added REPEAT_ONE operator -- added ANY_ALL operator (used to represent "(?s).") Index: sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** sre.py 2000/08/01 18:20:06 1.22 --- sre.py 2000/08/01 22:47:48 1.23 *************** *** 99,103 **** except KeyError: pass ! p = sre_compile.compile(pattern, flags) if len(_cache) >= _MAXCACHE: _cache.clear() --- 99,106 ---- except KeyError: pass ! try: ! p = sre_compile.compile(pattern, flags) ! except error, v: ! raise error, v # invalid expression if len(_cache) >= _MAXCACHE: _cache.clear() Index: sre_compile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** sre_compile.py 2000/08/01 21:05:40 1.28 --- sre_compile.py 2000/08/01 22:47:48 1.29 *************** *** 74,77 **** --- 74,84 ---- return charset + def _simple(av): + # check if av is a "simple" operator + lo, hi = av[2].getwidth() + if lo == 0: + raise error, "nothing to repeat" + return lo == hi == 1 and av[2][0][0] != SUBPATTERN + def _compile(code, pattern, flags): # internal: compile a (sub)pattern *************** *** 117,124 **** elif op is ANY: if flags & SRE_FLAG_DOTALL: ! emit(OPCODES[op]) else: ! emit(OPCODES[CATEGORY]) ! emit(CHCODES[CATEGORY_NOT_LINEBREAK]) elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT): if flags & SRE_FLAG_TEMPLATE: --- 124,130 ---- elif op is ANY: if flags & SRE_FLAG_DOTALL: ! emit(OPCODES[ANY_ALL]) else: ! emit(OPCODES[ANY]) elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT): if flags & SRE_FLAG_TEMPLATE: *************** *** 131,158 **** emit(OPCODES[SUCCESS]) code[skip] = len(code) - skip else: ! lo, hi = av[2].getwidth() ! if lo == 0: ! raise error, "nothing to repeat" ! if 0 and lo == hi == 1 and op is MAX_REPEAT: ! # FIXME: fast and wrong (but we'll fix that) ! emit(OPCODES[REPEAT_ONE]) ! skip = len(code); emit(0) ! emit(av[0]) ! emit(av[1]) ! _compile(code, av[2], flags) ! emit(OPCODES[SUCCESS]) ! code[skip] = len(code) - skip else: ! emit(OPCODES[REPEAT]) ! skip = len(code); emit(0) ! emit(av[0]) ! emit(av[1]) ! _compile(code, av[2], flags) ! code[skip] = len(code) - skip ! if op == MAX_REPEAT: ! emit(OPCODES[MAX_UNTIL]) ! else: ! emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: if av[0]: --- 137,159 ---- emit(OPCODES[SUCCESS]) code[skip] = len(code) - skip + elif _simple(av) and op == MAX_REPEAT: + emit(OPCODES[REPEAT_ONE]) + skip = len(code); emit(0) + emit(av[0]) + emit(av[1]) + _compile(code, av[2], flags) + emit(OPCODES[SUCCESS]) + code[skip] = len(code) - skip else: ! emit(OPCODES[REPEAT]) ! skip = len(code); emit(0) ! emit(av[0]) ! emit(av[1]) ! _compile(code, av[2], flags) ! code[skip] = len(code) - skip ! if op == MAX_REPEAT: ! emit(OPCODES[MAX_UNTIL]) else: ! emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: if av[0]: Index: sre_constants.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_constants.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** sre_constants.py 2000/08/01 18:20:06 1.19 --- sre_constants.py 2000/08/01 22:47:48 1.20 *************** *** 21,24 **** --- 21,25 ---- ANY = "any" + ANY_ALL = "any_all" ASSERT = "assert" ASSERT_NOT = "assert_not" *************** *** 82,86 **** FAILURE, SUCCESS, ! ANY, ASSERT, ASSERT_NOT, AT, --- 83,87 ---- FAILURE, SUCCESS, ! ANY, ANY_ALL, ASSERT, ASSERT_NOT, AT, Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** sre_parse.py 2000/08/01 21:05:40 1.28 --- sre_parse.py 2000/08/01 22:47:48 1.29 *************** *** 143,147 **** l, h = av.getwidth() i = min(i, l) ! j = min(j, h) lo = lo + i hi = hi + j --- 143,147 ---- l, h = av.getwidth() i = min(i, l) ! j = max(j, h) lo = lo + i hi = hi + j From python-dev@python.org Tue Aug 1 23:47:51 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 15:47:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.30,2.31 sre_constants.h,2.8,2.9 Message-ID: <200008012247.PAA10594@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv10513/Modules Modified Files: _sre.c sre_constants.h Log Message: final 0.9.8 updates: -- added REPEAT_ONE operator -- added ANY_ALL operator (used to represent "(?s).") Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.30 retrieving revision 2.31 diff -C2 -r2.30 -r2.31 *** _sre.c 2000/08/01 21:05:41 2.30 --- _sre.c 2000/08/01 22:47:49 2.31 *************** *** 449,452 **** --- 449,453 ---- SRE_REPEAT* rp; int lastmark; + SRE_CODE chr; SRE_REPEAT rep; /* FIXME: allocate in STATE instead */ *************** *** 526,531 **** case SRE_OP_ANY: ! /* match anything */ /* */ TRACE(("%8d: anything\n", PTR(ptr))); if (ptr >= end) --- 527,541 ---- case SRE_OP_ANY: ! /* match anything (except a newline) */ /* */ + TRACE(("%8d: anything (except newline)\n", PTR(ptr))); + if (ptr >= end || SRE_IS_LINEBREAK(ptr[0])) + return 0; + ptr++; + break; + + case SRE_OP_ANY_ALL: + /* match anything */ + /* */ TRACE(("%8d: anything\n", PTR(ptr))); if (ptr >= end) *************** *** 696,705 **** pattern[1], pattern[2])); count = 0; ! if (pattern[3] == SRE_OP_ANY) { /* repeated wildcard. skip to the end of the target string, and backtrack from there */ - /* FIXME: must look for line endings */ if (ptr + pattern[1] > end) return 0; /* cannot match */ --- 706,729 ---- pattern[1], pattern[2])); + if (ptr + pattern[1] > end) + return 0; /* cannot match */ + count = 0; + + switch (pattern[3]) { ! case SRE_OP_ANY: ! /* repeated wildcard. */ ! while (count < (int) pattern[2]) { ! if (ptr >= end || SRE_IS_LINEBREAK(ptr[0])) ! break; ! ptr++; ! count++; ! } ! break; ! ! case SRE_OP_ANY_ALL: /* repeated wildcard. skip to the end of the target string, and backtrack from there */ if (ptr + pattern[1] > end) return 0; /* cannot match */ *************** *** 708,715 **** count = end - ptr; ptr += count; ! } else if (pattern[3] == SRE_OP_LITERAL) { /* repeated literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] != chr) --- 732,740 ---- count = end - ptr; ptr += count; + break; ! case SRE_OP_LITERAL: /* repeated literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] != chr) *************** *** 718,725 **** count++; } ! } else if (pattern[3] == SRE_OP_LITERAL_IGNORE) { /* repeated literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) --- 743,751 ---- count++; } + break; ! case SRE_OP_LITERAL_IGNORE: /* repeated literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) *************** *** 728,735 **** count++; } ! } else if (pattern[3] == SRE_OP_NOT_LITERAL) { /* repeated non-literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] == chr) --- 754,762 ---- count++; } + break; ! case SRE_OP_NOT_LITERAL: /* repeated non-literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] == chr) *************** *** 738,745 **** count++; } ! ! } else if (pattern[3] == SRE_OP_NOT_LITERAL_IGNORE) { /* repeated non-literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) --- 765,773 ---- count++; } ! break; ! ! case SRE_OP_NOT_LITERAL_IGNORE: /* repeated non-literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) *************** *** 748,753 **** count++; } ! } else if (pattern[3] == SRE_OP_IN) { /* repeated set */ while (count < (int) pattern[2]) { --- 776,782 ---- count++; } + break; ! case SRE_OP_IN: /* repeated set */ while (count < (int) pattern[2]) { *************** *** 757,762 **** count++; } ! } else { /* repeated single character pattern */ state->ptr = ptr; --- 786,792 ---- count++; } + break; ! default: /* repeated single character pattern */ state->ptr = ptr; *************** *** 771,774 **** --- 801,805 ---- state->ptr = ptr; ptr += count; + break; } *************** *** 792,796 **** /* tail starts with a literal. skip positions where the rest of the pattern cannot possibly match */ ! SRE_CODE chr = pattern[pattern[0]+1]; TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr)); for (;;) { --- 823,827 ---- /* tail starts with a literal. skip positions where the rest of the pattern cannot possibly match */ ! chr = pattern[pattern[0]+1]; TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr)); for (;;) { Index: sre_constants.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre_constants.h,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** sre_constants.h 2000/08/01 18:20:07 2.8 --- sre_constants.h 2000/08/01 22:47:49 2.9 *************** *** 15,43 **** #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 ! #define SRE_OP_ASSERT 3 ! #define SRE_OP_ASSERT_NOT 4 ! #define SRE_OP_AT 5 ! #define SRE_OP_BRANCH 6 ! #define SRE_OP_CALL 7 ! #define SRE_OP_CATEGORY 8 ! #define SRE_OP_CHARSET 9 ! #define SRE_OP_GROUPREF 10 ! #define SRE_OP_GROUPREF_IGNORE 11 ! #define SRE_OP_IN 12 ! #define SRE_OP_IN_IGNORE 13 ! #define SRE_OP_INFO 14 ! #define SRE_OP_JUMP 15 ! #define SRE_OP_LITERAL 16 ! #define SRE_OP_LITERAL_IGNORE 17 ! #define SRE_OP_MARK 18 ! #define SRE_OP_MAX_UNTIL 19 ! #define SRE_OP_MIN_UNTIL 20 ! #define SRE_OP_NOT_LITERAL 21 ! #define SRE_OP_NOT_LITERAL_IGNORE 22 ! #define SRE_OP_NEGATE 23 ! #define SRE_OP_RANGE 24 ! #define SRE_OP_REPEAT 25 ! #define SRE_OP_REPEAT_ONE 26 ! #define SRE_OP_SUBPATTERN 27 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 --- 15,44 ---- #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 ! #define SRE_OP_ANY_ALL 3 ! #define SRE_OP_ASSERT 4 ! #define SRE_OP_ASSERT_NOT 5 ! #define SRE_OP_AT 6 ! #define SRE_OP_BRANCH 7 ! #define SRE_OP_CALL 8 ! #define SRE_OP_CATEGORY 9 ! #define SRE_OP_CHARSET 10 ! #define SRE_OP_GROUPREF 11 ! #define SRE_OP_GROUPREF_IGNORE 12 ! #define SRE_OP_IN 13 ! #define SRE_OP_IN_IGNORE 14 ! #define SRE_OP_INFO 15 ! #define SRE_OP_JUMP 16 ! #define SRE_OP_LITERAL 17 ! #define SRE_OP_LITERAL_IGNORE 18 ! #define SRE_OP_MARK 19 ! #define SRE_OP_MAX_UNTIL 20 ! #define SRE_OP_MIN_UNTIL 21 ! #define SRE_OP_NOT_LITERAL 22 ! #define SRE_OP_NOT_LITERAL_IGNORE 23 ! #define SRE_OP_NEGATE 24 ! #define SRE_OP_RANGE 25 ! #define SRE_OP_REPEAT 26 ! #define SRE_OP_REPEAT_ONE 27 ! #define SRE_OP_SUBPATTERN 28 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 From python-dev@python.org Wed Aug 2 00:49:52 2000 From: python-dev@python.org (Mark Hammond) Date: Tue, 1 Aug 2000 16:49:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libwinreg.tex,1.4,1.5 Message-ID: <200008012349.QAA22857@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22846 Modified Files: libwinreg.tex Log Message: As requested by Fred - mention that in the future a winreg module may make a comeback. Index: libwinreg.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libwinreg.tex,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** libwinreg.tex 2000/07/06 04:38:37 1.4 --- libwinreg.tex 2000/08/01 23:49:50 1.5 *************** *** 15,20 **** This module exposes a very low-level interface to the Windows ! registry; for a more object-oriented interface, use the ! \module{winreg} module. This module offers the following functions: --- 15,21 ---- This module exposes a very low-level interface to the Windows ! registry; it is expected that in the future a new \code{winreg} ! module will be created offering a higher-level interface to the ! registry API. This module offers the following functions: From python-dev@python.org Wed Aug 2 00:54:31 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 16:54:31 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_ext.py,1.58,1.59 Message-ID: <200008012354.QAA23245@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv23103/command Modified Files: build_ext.py Log Message: Patch from Rene Liebscher, tweaked by me: - 'export_symbol_file' (and corresponding 'def_file' in the old "build info" dict) are gone; warn if we see 'def_file' in the dict - the MSVC "pre-link hack" is gone -- all that stuff is now handled elsewhere (eg. by using 'export_symbols', etc.) - add 'get_export_symbols()' and 'get_libraries()' methods -- needed because on Windows, both of those things are a tad more complicated than fetching them from the Extension instance Index: build_ext.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_ext.py,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -r1.58 -r1.59 *** build_ext.py 2000/07/27 02:13:20 1.58 --- build_ext.py 2000/08/01 23:54:29 1.59 *************** *** 85,89 **** ('help-compiler', None, "list available compilers", show_compilers), ! ] def initialize_options (self): --- 85,89 ---- ('help-compiler', None, "list available compilers", show_compilers), ! ] def initialize_options (self): *************** *** 283,287 **** # Medium-easy stuff: same syntax/semantics, different names. ext.runtime_library_dirs = build_info.get('rpath') ! ext.export_symbol_file = build_info.get('def_file') # Non-trivial stuff: 'macros' split into 'define_macros' --- 283,289 ---- # Medium-easy stuff: same syntax/semantics, different names. ext.runtime_library_dirs = build_info.get('rpath') ! if build_info.has_key('def_file'): ! self.warn("'def_file' element of build info dict " ! "no longer supported") # Non-trivial stuff: 'macros' split into 'define_macros' *************** *** 421,434 **** extra_args = ext.extra_link_args or [] - # Bunch of fixing-up we have to do for Microsoft's linker. - if self.compiler.compiler_type == 'msvc': - self.msvc_prelink_hack(sources, ext, extra_args) self.compiler.link_shared_object ( objects, ext_filename, ! libraries=ext.libraries, library_dirs=ext.library_dirs, runtime_library_dirs=ext.runtime_library_dirs, extra_postargs=extra_args, debug=self.debug, build_temp=self.build_temp) --- 423,434 ---- extra_args = ext.extra_link_args or [] self.compiler.link_shared_object ( objects, ext_filename, ! libraries=self.get_libraries(ext), library_dirs=ext.library_dirs, runtime_library_dirs=ext.runtime_library_dirs, extra_postargs=extra_args, + export_symbols=self.get_export_symbols(ext), debug=self.debug, build_temp=self.build_temp) *************** *** 512,553 **** # find_swig () - - # -- Hooks 'n hacks ------------------------------------------------ - - def msvc_prelink_hack (self, sources, ext, extra_args): - - # XXX this is a kludge! Knowledge of specific compilers or - # platforms really doesn't belong here; in an ideal world, the - # CCompiler interface would provide access to everything in a - # compiler/linker system needs to build Python extensions, and - # we would just do everything nicely and cleanly through that - # interface. However, this is a not an ideal world and the - # CCompiler interface doesn't handle absolutely everything. - # Thus, kludges like this slip in occasionally. (This is no - # excuse for committing more platform- and compiler-specific - # kludges; they are to be avoided if possible!) - - def_file = ext.export_symbol_file - - if def_file is not None: - extra_args.append ('/DEF:' + def_file) - else: - modname = string.split (ext.name, '.')[-1] - extra_args.append('/export:init%s' % modname) - - # The MSVC linker generates .lib and .exp files, which cannot be - # suppressed by any linker switches. The .lib files may even be - # needed! Make sure they are generated in the temporary build - # directory. Since they have different names for debug and release - # builds, they can go into the same directory. - implib_file = os.path.join ( - self.implib_dir, - self.get_ext_libname (ext.name)) - extra_args.append ('/IMPLIB:' + implib_file) - self.mkpath (os.path.dirname (implib_file)) - - # msvc_prelink_hack () - - # -- Name generators ----------------------------------------------- # (extension names, filenames, whatever) --- 512,515 ---- *************** *** 579,582 **** --- 541,579 ---- return apply (os.path.join, ext_path) + '_d.lib' return apply (os.path.join, ext_path) + '.lib' + + + def get_export_symbols (self, ext): + """Return the list of symbols that a shared extension has to + export. This either uses 'ext.export_symbols' or, if it's not + provided, "init" + module_name. Only relevant on Windows, where + the .pyd file (DLL) must export the module "init" function. + """ + + # XXX what if 'export_symbols' defined but it doesn't contain + # "init" + module_name? Should we add it? warn? or just carry + # on doing nothing? + + if ext.export_symbols is None: + return ["init" + string.split(ext.name,'.')[-1]] + else: + return ext.export_symbols + + def get_libraries (self, ext): + """Return the list of libraries to link against when building a + shared extension. On most platforms, this is just 'ext.libraries'; + on Windows, we add the Python library (eg. python20.dll). + """ + # The python library is always needed on Windows. For MSVC, this + # is redundant, since the library is mentioned in a pragma in + # config.h that MSVC groks. The other Windows compilers all seem + # to need it mentioned explicitly, though, so that's what we do. + if sys.platform == "win32": + pythonlib = ("python%d%d" % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + # don't extend ext.libraries, it may be shared with other + # extensions, it is a reference to the original list + return ext.libraries + [pythonlib] + else: + return ext.libraries # class build_ext From python-dev@python.org Wed Aug 2 01:00:33 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:00:33 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.35,1.36 Message-ID: <200008020000.RAA25307@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv25004 Modified Files: msvccompiler.py Log Message: Patch from Rene Liebscher: generate an /IMPLIB: option to ensure that the linker leaves the (temporary) .lib file in the temporary dir. (Moved from 'msvc_prelink_hack()' method in build_ext.py.) Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** msvccompiler.py 2000/06/30 19:37:59 1.35 --- msvccompiler.py 2000/08/02 00:00:30 1.36 *************** *** 381,388 **** objects + ['/OUT:' + output_filename]) if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend (extra_postargs) print "link_shared_object():" --- 381,400 ---- objects + ['/OUT:' + output_filename]) + # The MSVC linker generates .lib and .exp files, which cannot be + # suppressed by any linker switches. The .lib files may even be + # needed! Make sure they are generated in the temporary build + # directory. Since they have different names for debug and release + # builds, they can go into the same directory. + (dll_name, dll_ext) = os.path.splitext( + os.path.basename(output_filename)) + implib_file = os.path.join( + os.path.dirname(objects[0]), + self.library_filename(dll_name)) + ld_args.append ('/IMPLIB:' + implib_file) + if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend(extra_postargs) print "link_shared_object():" From python-dev@python.org Wed Aug 2 01:01:58 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:01:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.36,1.37 Message-ID: <200008020001.RAA29477@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv29217 Modified Files: msvccompiler.py Log Message: Ditched some debugging prints. Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** msvccompiler.py 2000/08/02 00:00:30 1.36 --- msvccompiler.py 2000/08/02 00:01:56 1.37 *************** *** 398,404 **** ld_args.extend(extra_postargs) - print "link_shared_object():" - print " output_filename =", output_filename - print " mkpath'ing:", os.path.dirname (output_filename) self.mkpath (os.path.dirname (output_filename)) try: --- 398,401 ---- From python-dev@python.org Wed Aug 2 01:04:16 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:04:16 -0700 Subject: [Python-checkins] CVS: distutils/distutils extension.py,1.2,1.3 Message-ID: <200008020004.RAA31389@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv31375 Modified Files: extension.py Log Message: Removed 'export_symbol_file'. 'export_symbols' can be None (not sure this is a good idea: it's inconsistent with every other instance attribute of Extension). Index: extension.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/extension.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** extension.py 2000/06/24 00:18:24 1.2 --- extension.py 2000/08/02 00:04:13 1.3 *************** *** 74,82 **** extensions, which typically export exactly one symbol: "init" + extension_name. - export_symbol_file : string - name of file that lists symbols to export; the format of this - file is platform- and compiler-specific. This is even more - gratuitous and unnecessary than 'export_symbols'; I'll be happy - when it goes away forever. """ --- 74,77 ---- *************** *** 92,96 **** extra_link_args=None, export_symbols=None, - export_symbol_file=None, ): --- 87,90 ---- *************** *** 112,117 **** self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols or [] ! self.export_symbol_file = export_symbol_file # class Extension --- 106,110 ---- self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols # class Extension From python-dev@python.org Wed Aug 2 01:37:36 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:37:36 -0700 Subject: [Python-checkins] CVS: distutils/distutils util.py,1.39,1.40 Message-ID: <200008020037.RAA00993@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv985 Modified Files: util.py Log Message: Ditched 'abspath()' -- don't need 1.5.1 compatability hacks anymore. Index: util.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/util.py,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** util.py 2000/07/27 02:13:19 1.39 --- util.py 2000/08/02 00:37:32 1.40 *************** *** 19,32 **** - # Need to define 'abspath()', because it was new with Python 1.5.2 - if hasattr (os.path, 'abspath'): - abspath = os.path.abspath - else: - def abspath(path): - if not os.path.isabs(path): - path = os.path.join(os.getcwd(), path) - return os.path.normpath(path) - - # More backwards compatibility hacks def extend (list, new_list): --- 19,22 ---- From python-dev@python.org Wed Aug 2 02:03:27 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:03:27 -0700 Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.1,1.2 Message-ID: <200008020103.SAA06206@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv2567 Modified Files: bcppcompiler.py Log Message: Patch from Rene Liebscher. Some ugly changes, but supposedly this makes it so BCPPCompiler actually works, so I'm provisionally accepting it -- ugly and working is better than not working! Major changes: - normalize paths (apparently BC++ doesn't like slashes) - overhauled how we search for and specify libraries on the linker command-line - hacked up 'find_library_file()' so it knows about "debug" library naming convention as well as "bcpp_xxx.lib" -- the question is, is this a well-established and sensible convention? Also: - change to use 'util.write_file()' to write the .def file Index: bcppcompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** bcppcompiler.py 2000/06/28 01:20:35 1.1 --- bcppcompiler.py 2000/08/02 01:03:23 1.2 *************** *** 12,26 **** # WindowsCCompiler! --GPW - # XXX Lyle reports that this doesn't quite work yet: - # """...but this is what I've got so far. The compile step works fine but - # when it runs the link step I get an "out of memory" failure. Since - # spawn() echoes the command it's trying to spawn, I can type the link line - # verbatim at the DOS prompt and it links the Windows DLL correctly -- so - # the syntax is correct. There's just some weird interaction going on when - # it tries to "spawn" the link process from within the setup.py script. I'm - # not really sure how to debug this one right off-hand; obviously there's - # nothing wrong with the "spawn()" function since it's working properly for - # the compile stage.""" - __revision__ = "$Id$" --- 12,15 ---- *************** *** 32,35 **** --- 21,25 ---- from distutils.ccompiler import \ CCompiler, gen_preprocess_options, gen_lib_options + from distutils.file_util import write_file *************** *** 124,135 **** input_opt = "-P" output_opt = "-o" + obj ! ! self.mkpath (os.path.dirname (obj)) # Compiler command line syntax is: "bcc32 [options] file(s)". # Note that the source file names must appear at the end of # the command line. - try: self.spawn ([self.cc] + compile_opts + pp_opts + --- 114,126 ---- input_opt = "-P" + src = os.path.normpath(src) + obj = os.path.normpath(obj) + output_opt = "-o" + obj ! self.mkpath(os.path.dirname(obj)) # Compiler command line syntax is: "bcc32 [options] file(s)". # Note that the source file names must appear at the end of # the command line. try: self.spawn ([self.cc] + compile_opts + pp_opts + *************** *** 213,216 **** --- 204,210 ---- build_temp=None): + # XXX this ignores 'build_temp'! should follow the lead of + # msvccompiler.py + (objects, output_dir) = self._fix_object_args (objects, output_dir) (libraries, library_dirs, runtime_library_dirs) = \ *************** *** 227,237 **** if debug: ! ldflags = self.ldflags_shared_debug else: ! ldflags = self.ldflags_shared startup_obj = 'c0d32' ! libraries.append ('mypylib') libraries.append ('import32') libraries.append ('cw32mt') --- 221,237 ---- if debug: ! ld_args = self.ldflags_shared_debug[:] else: ! ld_args = self.ldflags_shared[:] + # Borland C++ has problems with '/' in paths + objects = map(os.path.normpath, objects) startup_obj = 'c0d32' + objects.insert(0, startup_obj) ! # either exchange python15.lib in the python libs directory against ! # a Borland-like one, or create one with name bcpp_python15.lib ! # there and remove the pragmas from config.h ! #libraries.append ('mypylib') libraries.append ('import32') libraries.append ('cw32mt') *************** *** 240,257 **** head, tail = os.path.split (output_filename) modname, ext = os.path.splitext (tail) ! def_file = os.path.join (build_temp, '%s.def' % modname) ! f = open (def_file, 'w') ! f.write ('EXPORTS\n') for sym in (export_symbols or []): ! f.write (' %s=_%s\n' % (sym, sym)) ! ! ld_args = ldflags + [startup_obj] + objects + \ ! [',%s,,' % output_filename] + \ ! libraries + [',' + def_file] if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend (extra_postargs) self.mkpath (os.path.dirname (output_filename)) --- 240,281 ---- head, tail = os.path.split (output_filename) modname, ext = os.path.splitext (tail) ! temp_dir = os.path.dirname(objects[0]) # preserve tree structure ! def_file = os.path.join (temp_dir, '%s.def' % modname) ! contents = ['EXPORTS'] for sym in (export_symbols or []): ! contents.append(' %s=_%s' % (sym, sym)) ! self.execute(write_file, (def_file, contents), ! "writing %s" % def_file) ! ! # Start building command line flags and options. ! ! for l in library_dirs: ! ld_args.append("/L%s" % os.path.normpath(l)) ! ! ld_args.extend(objects) # list of object files ! ! # name of dll file ! ld_args.extend([',',output_filename]) ! # no map file and start libraries ! ld_args.extend([',', ',']) ! ! for lib in libraries: ! # see if we find it and if there is a bcpp specific lib ! # (bcpp_xxx.lib) ! libfile = self.find_library_file(library_dirs, lib, debug) ! if libfile is None: ! ld_args.append(lib) ! # probably a BCPP internal library -- don't warn ! # self.warn('library %s not found.' % lib) ! else: ! # full name which prefers bcpp_xxx.lib over xxx.lib ! ld_args.append(libfile) ! # def file for export symbols ! ld_args.extend([',',def_file]) if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend(extra_postargs) self.mkpath (os.path.dirname (output_filename)) *************** *** 326,338 **** def runtime_library_dir_option (self, dir): raise DistutilsPlatformError, \ ! "don't know how to set runtime library search path for MSVC++" def library_option (self, lib): return self.library_filename (lib) - - def find_library_file (self, dirs, lib): for dir in dirs: libfile = os.path.join (dir, self.library_filename (lib)) if os.path.exists (libfile): --- 350,379 ---- def runtime_library_dir_option (self, dir): raise DistutilsPlatformError, \ ! ("don't know how to set runtime library search path " ! "for Borland C++") def library_option (self, lib): return self.library_filename (lib) + def find_library_file (self, dirs, lib, debug=0): + # find library file + # bcpp_xxx.lib is better than xxx.lib + # and xxx_d.lib is better than xxx.lib if debug is set for dir in dirs: + if debug: + libfile = os.path.join ( + dir, self.library_filename ("bcpp_" + lib + "_d")) + if os.path.exists (libfile): + return libfile + libfile = os.path.join ( + dir, self.library_filename ("bcpp_" + lib)) + if os.path.exists (libfile): + return libfile + if debug: + libfile = os.path.join ( + dir, self.library_filename(lib + '_d')) + if os.path.exists (libfile): + return libfile libfile = os.path.join (dir, self.library_filename (lib)) if os.path.exists (libfile): From python-dev@python.org Wed Aug 2 02:08:04 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:08:04 -0700 Subject: [Python-checkins] CVS: distutils/distutils spawn.py,1.8,1.9 Message-ID: <200008020108.SAA10405@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv10389 Modified Files: spawn.py Log Message: Rene Liebscher: factor 'find_executable()' out of '_spawn_nt()'. Index: spawn.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/spawn.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** spawn.py 2000/03/26 21:47:00 1.8 --- spawn.py 2000/08/02 01:08:02 1.9 *************** *** 2,6 **** Provides the 'spawn()' function, a front-end to various platform- ! specific functions for launching another program in a sub-process.""" # created 1999/07/24, Greg Ward --- 2,8 ---- Provides the 'spawn()' function, a front-end to various platform- ! specific functions for launching another program in a sub-process. ! Also provides the 'find_executable()' to search the path for a given ! executable name. """ # created 1999/07/24, Greg Ward *************** *** 66,80 **** cmd = _nt_quote_args (cmd) if search_path: ! paths = string.split( os.environ['PATH'], os.pathsep) ! base,ext = os.path.splitext(executable) ! if (ext != '.exe'): ! executable = executable + '.exe' ! if not os.path.isfile(executable): ! paths.reverse() # go over the paths and keep the last one ! for p in paths: ! f = os.path.join( p, executable ) ! if os.path.isfile ( f ): ! # the file exists, we have a shot at spawn working ! executable = f if verbose: print string.join ([executable] + cmd[1:], ' ') --- 68,73 ---- cmd = _nt_quote_args (cmd) if search_path: ! # either we find one or it stays the same ! executable = find_executable(executable) or executable if verbose: print string.join ([executable] + cmd[1:], ' ') *************** *** 92,96 **** "command '%s' failed with exit status %d" % (cmd[0], rc) - def _spawn_posix (cmd, --- 85,88 ---- *************** *** 148,149 **** --- 140,166 ---- (cmd[0], status) # _spawn_posix () + + + def find_executable(executable, path=None): + """Try to find 'executable' in the directories listed in 'path' (a + string listing directories separated by 'os.pathsep'; defaults to + os.environ['PATH']). Returns the complete filename or None if not + found. + """ + if path is None: + path = os.environ['PATH'] + paths = string.split(path, os.pathsep) + (base, ext) = os.path.splitext(executable) + if (sys.platform == 'win32') and (ext != '.exe'): + executable = executable + '.exe' + if not os.path.isfile(executable): + for p in paths: + f = os.path.join(p, executable) + if os.path.isfile(f): + # the file exists, we have a shot at spawn working + return f + return None + else: + return executable + + # find_executable() From python-dev@python.org Wed Aug 2 02:09:13 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:09:13 -0700 Subject: [Python-checkins] CVS: distutils/distutils sysconfig.py,1.22,1.23 Message-ID: <200008020109.SAA10455@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv10445 Modified Files: sysconfig.py Log Message: Rene Liebscher: deleted unneeded hard-coded assignments of CC, RANLIB, etc. in '_init_nt()' (they were kludges for CygwinCCompiler and no longer needed). Index: sysconfig.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/sysconfig.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** sysconfig.py 2000/06/27 01:59:43 1.22 --- sysconfig.py 2000/08/02 01:09:11 1.23 *************** *** 268,289 **** g['SO'] = '.pyd' - g['exec_prefix'] = EXEC_PREFIX - - # These are needed for the CygwinCCompiler and Mingw32CCompiler - # classes, which are just UnixCCompiler classes that happen to work on - # Windows. UnixCCompiler expects to find these values in sysconfig, so - # here they are. The fact that other Windows compilers don't need - # these values is pure luck (hmmm). - - # XXX I think these are now unnecessary... - - g['CC'] = "cc" # not gcc? - g['RANLIB'] = "ranlib" - g['AR'] = "ar" - g['OPT'] = "-O2" - g['SO'] = ".pyd" - g['LDSHARED'] = "ld" - g['CCSHARED'] = "" g['EXE'] = ".exe" --- 268,273 ---- g['SO'] = '.pyd' g['EXE'] = ".exe" + g['exec_prefix'] = EXEC_PREFIX From python-dev@python.org Wed Aug 2 02:31:58 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:31:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils cygwinccompiler.py,1.3,1.4 Message-ID: <200008020131.SAA12174@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv11708 Modified Files: cygwinccompiler.py Log Message: Latest version from Rene Liebscher; major changes: - added big comment describing possible problems - look for and react to versions of gcc, ld, and dlltool; mainly this is done by the 'get_versions()' function and the CygwinCCompiler and Mingw32CCompiler constructors - move 'check_config_h()' to end of file and defer calling it until we need to (ie. in the CygwinCCompiler constructor) - lots of changes in 'link_shared_object()' -- mostly seems to be library and DLL stuff, but I don't follow it entirely Index: cygwinccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cygwinccompiler.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** cygwinccompiler.py 2000/07/27 02:13:19 1.3 --- cygwinccompiler.py 2000/08/02 01:31:56 1.4 *************** *** 7,57 **** """ # created 2000/05/05, Rene Liebscher __revision__ = "$Id$" ! import os,sys,string ! from distutils import sysconfig from distutils.unixccompiler import UnixCCompiler - # Because these compilers aren't configured in Python's config.h file by - # default we should at least warn the user if he is using a unmodified - # version. - - def check_config_h(): - """Checks if the GCC compiler is mentioned in config.h. If it is not, - compiling probably doesn't work, so print a warning to stderr. - """ - - # XXX the result of the check should be returned! - - from distutils import sysconfig - import string,sys - try: - # It would probably better to read single lines to search. - # But we do this only once, and it is fast enough - f=open(sysconfig.get_config_h_filename()) - s=f.read() - f.close() - try: - # is somewhere a #ifdef __GNUC__ or something similar - string.index(s,"__GNUC__") - except ValueError: - sys.stderr.write ("warning: "+ - "Python's config.h doesn't seem to support your compiler.\n") - except IOError: - # if we can't read this file, we cannot say it is wrong - # the compiler will complain later about this file as missing - pass - - - # This is called when the module is imported, so we make this check only once - # XXX why not make it only when the compiler is needed? - check_config_h() - - class CygwinCCompiler (UnixCCompiler): compiler_type = 'cygwin' def __init__ (self, --- 7,58 ---- """ + # problems: + # + # * if you use a msvc compiled python version (1.5.2) + # 1. you have to insert a __GNUC__ section in its config.h + # 2. you have to generate a import library for its dll + # - create a def-file for python??.dll + # - create a import library using + # dlltool --dllname python15.dll --def python15.def \ + # --output-lib libpython15.a + # + # see also http://starship.python.net/crew/kernr/mingw32/Notes.html + # + # * We use put export_symbols in a def-file, and don't use + # --export-all-symbols because it doesn't worked reliable in some + # tested configurations. And because other windows compilers also + # need their symbols specified this no serious problem. + # + # tested configurations: + # + # * cygwin gcc 2.91.57/ld 2.9.4/dllwrap 0.2.4 works + # (after patching python's config.h and for C++ some other include files) + # see also http://starship.python.net/crew/kernr/mingw32/Notes.html + # * mingw32 gcc 2.95.2/ld 2.9.4/dllwrap 0.2.4 works + # (ld doesn't support -shared, so we use dllwrap) + # * cygwin gcc 2.95.2/ld 2.10.90/dllwrap 2.10.90 works now + # - its dllwrap doesn't work, there is a bug in binutils 2.10.90 + # see also ..... + # - using gcc -mdll instead dllwrap doesn't work without -static because + # it tries to link against dlls instead their import libraries. (If + # it finds the dll first.) + # By specifying -static we force ld to link against the import libraries, + # this is windows standard and there are normally not the necessary symbols + # in the dlls. + # created 2000/05/05, Rene Liebscher __revision__ = "$Id$" ! import os,sys from distutils.unixccompiler import UnixCCompiler + from distutils.file_util import write_file class CygwinCCompiler (UnixCCompiler): compiler_type = 'cygwin' + gcc_version = None + dllwrap_version = None + ld_version = None def __init__ (self, *************** *** 62,81 **** UnixCCompiler.__init__ (self, verbose, dry_run, force) # Hard-code GCC because that's what this is all about. # XXX optimization, warnings etc. should be customizable. ! self.set_executables(compiler='gcc -O -Wall', ! compiler_so='gcc -O -Wall', ! linker_exe='gcc', ! linker_so='dllwrap --target=i386-cygwin32') # cygwin and mingw32 need different sets of libraries ! self.dll_libraries=[ ! # cygwin shouldn't need msvcrt, ! # but without the dll's will crash ! # ( gcc version 2.91.57 ) ! # perhaps something about initialization ! # mingw32 needs it in all cases ! "msvcrt" ! ] # __init__ () --- 63,105 ---- UnixCCompiler.__init__ (self, verbose, dry_run, force) + if check_config_h()<=0: + self.warn( + "Python's config.h doesn't seem to support your compiler. " + "Compiling may fail because of undefined preprocessor macros.") + + (self.gcc_version, self.ld_version, self.dllwrap_version) = \ + get_versions() + sys.stderr.write(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % + (self.gcc_version, + self.ld_version, + self.dllwrap_version) ) + + # ld_version >= "2.10.90" should also be able to use + # gcc -mdll instead of dllwrap + # Older dllwraps had own version numbers, newer ones use the + # same as the rest of binutils ( also ld ) + # dllwrap 2.10.90 is buggy + if self.ld_version >= "2.10.90": + self.linker = "gcc" + else: + self.linker = "dllwrap" + # Hard-code GCC because that's what this is all about. # XXX optimization, warnings etc. should be customizable. ! self.set_executables(compiler='gcc -mcygwin -O -Wall', ! compiler_so='gcc -mcygwin -mdll -O -Wall', ! linker_exe='gcc -mcygwin', ! linker_so=('%s -mcygwin -mdll -static' % ! self.linker)) # cygwin and mingw32 need different sets of libraries ! if self.gcc_version == "2.91.57": ! # cygwin shouldn't need msvcrt, but without the dlls will crash ! # (gcc version 2.91.57) -- perhaps something about initialization ! self.dll_libraries=["msvcrt"] ! self.warn( ! "Consider upgrading to a newer version of gcc") ! else: ! self.dll_libraries=[] # __init__ () *************** *** 94,155 **** build_temp=None): ! if libraries == None: ! libraries = [] ! # Additional libraries: the python library is always needed on ! # Windows we need the python version without the dot, eg. '15' ! ! pythonlib = ("python%d%d" % ! (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) ! libraries.append(pythonlib) libraries.extend(self.dll_libraries) ! # name of extension ! # XXX WRONG WRONG WRONG ! # this is NOT the place to make guesses about Python namespaces; ! # that MUST be done in build_ext.py ! ! if not debug: ! ext_name = os.path.basename(output_filename)[:-len(".pyd")] ! else: ! ext_name = os.path.basename(output_filename)[:-len("_d.pyd")] ! ! def_file = os.path.join(build_temp, ext_name + ".def") ! #exp_file = os.path.join(build_temp, ext_name + ".exp") ! #lib_file = os.path.join(build_temp, 'lib' + ext_name + ".a") ! ! # Make .def file ! # (It would probably better to check if we really need this, ! # but for this we had to insert some unchanged parts of ! # UnixCCompiler, and this is not what we want.) ! f = open(def_file,"w") ! f.write("EXPORTS\n") # intro ! if export_symbols == None: ! # export a function "init" + ext_name ! f.write("init" + ext_name + "\n") else: ! # if there are more symbols to export write them into f for sym in export_symbols: ! f.write(sym+"\n") ! f.close() ! ! if extra_preargs == None: ! extra_preargs = [] ! ! extra_preargs = extra_preargs + [ ! #"--verbose", ! #"--output-exp",exp_file, ! #"--output-lib",lib_file, ! "--def",def_file ! ] ! # who wants symbols and a many times larger output file # should explicitly switch the debug mode on ! # otherwise we let dllwrap strip the output file # (On my machine unstripped_file = stripped_file + 254KB # 10KB < stripped_file < ??100KB ) if not debug: ! extra_preargs = extra_preargs + ["-s"] UnixCCompiler.link_shared_object(self, --- 118,182 ---- build_temp=None): ! # use separate copies, so can modify the lists ! extra_preargs = list(extra_preargs or []) ! libraries = list(libraries or []) ! # Additional libraries libraries.extend(self.dll_libraries) + + # we want to put some files in the same directory as the + # object files are, build_temp doesn't help much ! # where are the object files ! temp_dir = os.path.dirname(objects[0]) ! # name of dll to give the helper files (def, lib, exp) the same name ! (dll_name, dll_extension) = os.path.splitext( ! os.path.basename(output_filename)) ! ! # generate the filenames for these files ! def_file = None # this will be done later, if necessary ! exp_file = os.path.join(temp_dir, dll_name + ".exp") ! lib_file = os.path.join(temp_dir, 'lib' + dll_name + ".a") ! ! #extra_preargs.append("--verbose") ! if self.linker == "dllwrap": ! extra_preargs.extend([#"--output-exp",exp_file, ! "--output-lib",lib_file, ! ]) else: ! # doesn't work: bfd_close build\...\libfoo.a: Invalid operation ! extra_preargs.extend([#"-Wl,--out-implib,%s" % lib_file, ! ]) ! ! # check what we got in export_symbols ! if export_symbols is not None: ! # Make .def file ! # (It would probably better to check if we really need this, ! # but for this we had to insert some unchanged parts of ! # UnixCCompiler, and this is not what we want.) ! def_file = os.path.join(temp_dir, dll_name + ".def") ! contents = [ ! "LIBRARY %s" % os.path.basename(output_filename), ! "EXPORTS"] for sym in export_symbols: ! contents.append(sym) ! self.execute(write_file, (def_file, contents), ! "writing %s" % def_file) ! ! if def_file: ! if self.linker == "dllwrap": ! # for dllwrap we have to use a special option ! extra_preargs.append("--def") ! # for gcc/ld it is specified as any other object file ! extra_preargs.append(def_file) ! # who wants symbols and a many times larger output file # should explicitly switch the debug mode on ! # otherwise we let dllwrap/ld strip the output file # (On my machine unstripped_file = stripped_file + 254KB # 10KB < stripped_file < ??100KB ) if not debug: ! extra_preargs.append("-s") UnixCCompiler.link_shared_object(self, *************** *** 160,164 **** library_dirs, runtime_library_dirs, ! None, # export_symbols, we do this with our def-file debug, extra_preargs, --- 187,191 ---- library_dirs, runtime_library_dirs, ! None, # export_symbols, we do this in our def-file debug, extra_preargs, *************** *** 182,199 **** CygwinCCompiler.__init__ (self, verbose, dry_run, force) self.set_executables(compiler='gcc -mno-cygwin -O -Wall', ! compiler_so='gcc -mno-cygwin -O -Wall', linker_exe='gcc -mno-cygwin', ! linker_so='dllwrap' ! + ' --target=i386-mingw32' ! + ' --entry _DllMain@12') ! # mingw32 doesn't really need 'target' and cygwin too (it seems, ! # it is enough to specify a different entry point) ! ! # no additional libraries need ! # (only msvcrt, which is already added by CygwinCCompiler) ! # __init__ () ! # class Mingw32CCompiler --- 209,322 ---- CygwinCCompiler.__init__ (self, verbose, dry_run, force) + + # A real mingw32 doesn't need to specify a different entry point, + # but cygwin 2.91.57 in no-cygwin-mode needs it. + if self.gcc_version <= "2.91.57": + entry_point = '--entry _DllMain@12' + else: + entry_point = '' self.set_executables(compiler='gcc -mno-cygwin -O -Wall', ! compiler_so='gcc -mno-cygwin -mdll -O -Wall', linker_exe='gcc -mno-cygwin', ! linker_so='%s -mno-cygwin -mdll -static %s' ! % (self.linker, entry_point)) ! # Maybe we should also append -mthreads, but then the finished ! # dlls need another dll (mingwm10.dll see Mingw32 docs) ! # (-mthreads: Support thread-safe exception handling on `Mingw32') ! ! # no additional libraries needed ! self.dll_libraries=[] ! # __init__ () ! # class Mingw32CCompiler + + # Because these compilers aren't configured in Python's config.h file by + # default, we should at least warn the user if he is using a unmodified + # version. + + def check_config_h(): + """Checks if the GCC compiler is mentioned in config.h. If it is not, + compiling probably doesn't work. + """ + # return values + # 2: OK, python was compiled with GCC + # 1: OK, python's config.h mentions __GCC__ + # 0: uncertain, because we couldn't check it + # -1: probably not OK, because we didn't found it in config.h + # You could check check_config_h()>0 => OK + + from distutils import sysconfig + import string,sys + # if sys.version contains GCC then python was compiled with + # GCC, and the config.h file should be OK + if -1 == string.find(sys.version,"GCC"): + pass # go to the next test + else: + return 2 + + try: + # It would probably better to read single lines to search. + # But we do this only once, and it is fast enough + f=open(sysconfig.get_config_h_filename()) + s=f.read() + f.close() + + # is somewhere a #ifdef __GNUC__ or something similar + if -1 == string.find(s,"__GNUC__"): + return -1 + else: + return 1 + except IOError: + # if we can't read this file, we cannot say it is wrong + # the compiler will complain later about this file as missing + pass + return 0 + + def get_versions(): + """ Try to find out the versions of gcc, ld and dllwrap. + If not possible it returns None for it. + """ + from distutils.version import StrictVersion + from distutils.spawn import find_executable + import re + + gcc_exe = find_executable('gcc') + if gcc_exe: + out = os.popen(gcc_exe + ' -dumpversion','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+\.\d+)',out_string) + if result: + gcc_version = StrictVersion(result.group(1)) + else: + gcc_version = None + else: + gcc_version = None + ld_exe = find_executable('ld') + if ld_exe: + out = os.popen(ld_exe + ' -v','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+\.\d+)',out_string) + if result: + ld_version = StrictVersion(result.group(1)) + else: + ld_version = None + else: + ld_version = None + dllwrap_exe = find_executable('dllwrap') + if dllwrap_exe: + out = os.popen(dllwrap_exe + ' --version','r') + out_string = out.read() + out.close() + result = re.search(' (\d+\.\d+\.\d+)',out_string) + if result: + dllwrap_version = StrictVersion(result.group(1)) + else: + dllwrap_version = None + else: + dllwrap_version = None + return (gcc_version, ld_version, dllwrap_version) + From python-dev@python.org Wed Aug 2 02:34:21 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:34:21 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command install_lib.py,1.25,1.26 Message-ID: <200008020134.SAA12324@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv12313/command Modified Files: install_lib.py Log Message: Rene Liebscher: fix 'skipping byte-compilation' message for grammatical consistency. Index: install_lib.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/install_lib.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** install_lib.py 2000/05/27 17:27:23 1.25 --- install_lib.py 2000/08/02 01:34:18 1.26 *************** *** 75,79 **** compile_msg = "byte-compiling %s to %s" % \ (f, os.path.basename (out_fn)) ! skip_msg = "byte-compilation of %s skipped" % f self.make_file (f, out_fn, compile, (f,), compile_msg, skip_msg) --- 75,79 ---- compile_msg = "byte-compiling %s to %s" % \ (f, os.path.basename (out_fn)) ! skip_msg = "skipping byte-compilation of %s" % f self.make_file (f, out_fn, compile, (f,), compile_msg, skip_msg) From python-dev@python.org Wed Aug 2 02:37:33 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:37:33 -0700 Subject: [Python-checkins] CVS: distutils/distutils util.py,1.40,1.41 Message-ID: <200008020137.SAA12539@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12526 Modified Files: util.py Log Message: Added the 'execute()' function (moved here from cmd.py with minor tweakage). Index: util.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/util.py,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** util.py 2000/08/02 00:37:32 1.40 --- util.py 2000/08/02 01:37:30 1.41 *************** *** 224,225 **** --- 224,251 ---- # split_quoted () + + + def execute (func, args, msg=None, verbose=0, dry_run=0): + """Perform some action that affects the outside world (eg. by writing + to the filesystem). Such actions are special because they are disabled + by the 'dry_run' flag, and announce themselves if 'verbose' is true. + This method takes care of all that bureaucracy for you; all you have to + do is supply the function to call and an argument tuple for it (to + embody the "external action" being performed), and an optional message + to print. + """ + # Generate a message if we weren't passed one + if msg is None: + msg = "%s%s" % (func.__name__, `args`) + if msg[-2:] == ',)': # correct for singleton tuple + msg = msg[0:-2] + ')' + + # Print it if verbosity level is high enough + if verbose: + print msg + + # And do it, as long as we're not in dry-run mode + if not dry_run: + apply(func, args) + + # execute() From python-dev@python.org Wed Aug 2 02:37:55 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:37:55 -0700 Subject: [Python-checkins] CVS: distutils/distutils cmd.py,1.20,1.21 Message-ID: <200008020137.SAA12560@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12552 Modified Files: cmd.py Log Message: Replaced 'execute()' method with a thin wrapper around 'util.execute()'. Index: cmd.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cmd.py,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** cmd.py 2000/07/27 02:13:19 1.20 --- cmd.py 2000/08/02 01:37:53 1.21 *************** *** 319,347 **** def execute (self, func, args, msg=None, level=1): ! """Perform some action that affects the outside world (eg. by ! writing to the filesystem). Such actions are special because they ! should be disabled by the "dry run" flag, and should announce ! themselves if the current verbosity level is high enough. This ! method takes care of all that bureaucracy for you; all you have to ! do is supply the function to call and an argument tuple for it (to ! embody the "external action" being performed), a message to print ! if the verbosity level is high enough, and an optional verbosity ! threshold. ! """ ! ! # Generate a message if we weren't passed one ! if msg is None: ! msg = "%s %s" % (func.__name__, `args`) ! if msg[-2:] == ',)': # correct for singleton tuple ! msg = msg[0:-2] + ')' ! ! # Print it if verbosity level is high enough ! self.announce (msg, level) ! ! # And do it, as long as we're not in dry-run mode ! if not self.dry_run: ! apply (func, args) ! ! # execute() --- 319,323 ---- def execute (self, func, args, msg=None, level=1): ! util.execute(func, args, msg, self.verbose >= level, self.dry_run) From python-dev@python.org Wed Aug 2 02:38:23 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:38:23 -0700 Subject: [Python-checkins] CVS: distutils/distutils ccompiler.py,1.30,1.31 Message-ID: <200008020138.SAA12590@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12580 Modified Files: ccompiler.py Log Message: Added 'execute()' method, a thin wrapper around 'util.execute() (just like the one in cmd.py). Index: ccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/ccompiler.py,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** ccompiler.py 2000/07/27 02:13:19 1.30 --- ccompiler.py 2000/08/02 01:38:20 1.31 *************** *** 16,20 **** from distutils.dir_util import mkpath from distutils.dep_util import newer_pairwise, newer_group ! from distutils.util import split_quoted --- 16,20 ---- from distutils.dir_util import mkpath from distutils.dep_util import newer_pairwise, newer_group ! from distutils.util import split_quoted, execute *************** *** 784,787 **** --- 784,790 ---- def warn (self, msg): sys.stderr.write ("warning: %s\n" % msg) + + def execute (self, func, args, msg=None, level=1): + execute(func, args, msg, self.verbose >= level, self.dry_run) def spawn (self, cmd): From python-dev@python.org Wed Aug 2 02:42:14 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:42:14 -0700 Subject: [Python-checkins] CVS: distutils mksnap,1.6,1.7 Message-ID: <200008020142.SAA12922@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12910 Modified Files: mksnap Log Message: Source distributions now go in 'dist' directory, so expect them there. Index: mksnap =================================================================== RCS file: /cvsroot/python/distutils/mksnap,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** mksnap 2000/06/08 01:19:18 1.6 --- mksnap 2000/08/02 01:42:11 1.7 *************** *** 1,3 **** #!/bin/sh ./snapshot_setup.py sdist ! mv distutils-*.{tar,zip}* www/download --- 1,3 ---- #!/bin/sh ./snapshot_setup.py sdist ! mv dist/distutils-*.{tar,zip}* www/download From python-dev@python.org Wed Aug 2 02:44:47 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:44:47 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command bdist.py,1.15,1.16 Message-ID: <200008020144.SAA13026@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv13015 Modified Files: bdist.py Log Message: Added 'wininst' to the 'format_commands' list, so it's included in the --help-formats output. Also moved that list up so it's more obvious when adding formats. Index: bdist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/bdist.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** bdist.py 2000/07/05 03:07:18 1.15 --- bdist.py 2000/08/02 01:44:44 1.16 *************** *** 53,56 **** --- 53,61 ---- 'nt': 'zip', } + # Establish the preferred order (for the --help-formats option). + format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar', + 'wininst', 'zip'] + + # And the real information. format_command = { 'rpm': ('bdist_rpm', "RPM distribution"), 'gztar': ('bdist_dumb', "gzip'ed tar file"), *************** *** 58,67 **** 'ztar': ('bdist_dumb', "compressed tar file"), 'tar': ('bdist_dumb', "tar file"), - 'zip': ('bdist_dumb', "ZIP file"), 'wininst': ('bdist_wininst', "Windows executable installer"), } - # establish the preferred order - format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar', 'zip'] --- 63,70 ---- 'ztar': ('bdist_dumb', "compressed tar file"), 'tar': ('bdist_dumb', "tar file"), 'wininst': ('bdist_wininst', "Windows executable installer"), + 'zip': ('bdist_dumb', "ZIP file"), } From python-dev@python.org Wed Aug 2 02:49:43 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:49:43 -0700 Subject: [Python-checkins] CVS: distutils/distutils sysconfig.py,1.23,1.24 Message-ID: <200008020149.SAA13303@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv13293 Modified Files: sysconfig.py Log Message: Typo fix. Index: sysconfig.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/sysconfig.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** sysconfig.py 2000/08/02 01:09:11 1.23 --- sysconfig.py 2000/08/02 01:49:40 1.24 *************** *** 78,82 **** elif os.name == "mac": ! if platform_specific: if standard_lib: return os.path.join(EXEC_PREFIX, "Mac", "Plugins") --- 78,82 ---- elif os.name == "mac": ! if plat_specific: if standard_lib: return os.path.join(EXEC_PREFIX, "Mac", "Plugins") From python-dev@python.org Wed Aug 2 03:35:10 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 19:35:10 -0700 Subject: [Python-checkins] CVS: python/dist/src LICENSE,NONE,1.1 Message-ID: <200008020235.TAA23800@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv23792 Added Files: LICENSE Log Message: Adding a LICENSE file so we can have it in the 1.6 release. --- NEW FILE --- # Placeholder for license information. From python-dev@python.org Wed Aug 2 03:59:04 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 19:59:04 -0700 Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1,1.1.2.1 Message-ID: <200008020259.TAA25379@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv25370 Modified Files: Tag: cnri-16-start LICENSE Log Message: License ext as Bob Kahn wants it. Index: LICENSE =================================================================== RCS file: /cvsroot/python/python/dist/src/LICENSE,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -r1.1 -r1.1.2.1 *** LICENSE 2000/08/02 02:35:08 1.1 --- LICENSE 2000/08/02 02:59:02 1.1.2.1 *************** *** 1 **** ! # Placeholder for license information. --- 1,117 ---- ! A. HISTORY OF THE SOFTWARE ! ! Python originated in 1991 at Stichting Mathematisch Centrum (CWI) in ! the Netherlands as an outgrowth of a language called ABC. Its ! principal author was Guido van Rossum, although it included smaller ! contributions from others at CWI and elsewhere. The last version of ! Python issued by CWI was Python 1.2. In 1995, Mr. van Rossum ! continued his work on Python at the Corporation for National Research ! Initiatives (CNRI) in Reston, Virginia where several versions of the ! software were generated. Python 1.6 is the last of the versions ! developed at CNRI. ! ! ! ! B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING Python 1.6, beta 1 ! ! ! 1. CNRI LICENSE AGREEMENT ! ! PYTHON 1.6, beta 1 ! ! CNRI OPEN SOURCE LICENSE AGREEMENT ! ! ! IMPORTANT: PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY. ! ! BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, ! INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE ! DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE ! AGREEMENT. ! ! 1. This LICENSE AGREEMENT is between the Corporation for National ! Research Initiatives, having an office at 1895 Preston White Drive, ! Reston, VA 20191 ("CNRI"), and the Individual or Organization ! ("Licensee") accessing and otherwise using Python 1.6, beta 1 software ! in source or binary form and its associated documentation, as released ! at the www.python.org Internet site on August 5, 2000 ("Python ! 1.6b1"). ! ! 2. Subject to the terms and conditions of this License Agreement, CNRI ! hereby grants Licensee a nonexclusive, royalty-free, world-wide ! license to reproduce, analyze, test, perform and/or display publicly, ! prepare derivative works, distribute, and otherwise use Python 1.6b1 ! alone or in any derivative version, provided, however, that CNRI's ! License Agreement is retained in Python 1.6b1, alone or in any ! derivative version prepared by Licensee. ! ! Alternately, in lieu of CNRI's License Agreement, Licensee may ! substitute the following text (omitting the quotes): "Python 1.6, beta ! 1, is made available subject to the terms and conditions in CNRI's ! License Agreement. This Agreement may be located on the Internet ! using the following unique, persistent identifier (known as a handle): ! 1895.22/1011. This Agreement may also be obtained from a proxy server ! on the Internet using the URL:http://hdl.handle.net/1895.22/1011". ! ! 3. In the event Licensee prepares a derivative work that is based on ! or incorporates Python 1.6b1or any part thereof, and wants to make the ! derivative work available to the public as provided herein, then ! Licensee hereby agrees to indicate in any such work the nature of the ! modifications made to Python 1.6b1. ! ! 4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS" ! basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR ! IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND ! DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ! FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1 WILL NOT ! INFRINGE ANY THIRD PARTY RIGHTS. ! ! 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE ! SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS ! AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1, OR ANY ! DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME ! STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY SO THE ! ABOVE DISCLAIMER MAY NOT APPLY TO LICENSEE. ! ! 6. This License Agreement will automatically terminate upon a material ! breach of its terms and conditions. ! ! 7. This License Agreement shall be governed by and interpreted in all ! respects by the law of the State of Virginia, excluding conflict of ! law provisions. Nothing in this License Agreement shall be deemed to ! create any relationship of agency, partnership, or joint venture ! between CNRI and Licensee. This License Agreement does not grant ! permission to use CNRI trademarks or trade name in a trademark sense ! to endorse or promote products or services of Licensee, or any third ! party. ! ! 8. By clicking on the "ACCEPT" button where indicated, or by copying ! installing or otherwise using Python 1.6b1, Licensee agrees to be ! bound by the terms and conditions of this License Agreement. ! ! ACCEPT ! ! ! ! 2. CWI PERMISSIONS STATEMENT AND DISCLAIMER ! ! Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, ! The Netherlands. All rights reserved. ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the name of Stichting Mathematisch ! Centrum or CWI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO ! THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND ! FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE ! FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT ! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! From python-dev@python.org Wed Aug 2 14:41:21 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 06:41:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pypcre.c,2.21,2.22 Message-ID: <200008021341.GAA15122@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv14555 Modified Files: pypcre.c Log Message: Fix for bug #110651 (Jitterbug PR#343): only use the low 8 bits of an octal escape, as documented in the comment for the check_escape() function Index: pypcre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pypcre.c,v retrieving revision 2.21 retrieving revision 2.22 diff -C2 -r2.21 -r2.22 *** pypcre.c 2000/07/31 15:28:04 2.21 --- pypcre.c 2000/08/02 13:41:18 2.22 *************** *** 1033,1037 **** { if (( pcre_ctypes[ ptr[i] ] & ctype_odigit) != 0) ! c = c * 8 + ptr[i]-'0'; else break; /* Non-octal character--break out of the loop */ --- 1033,1037 ---- { if (( pcre_ctypes[ ptr[i] ] & ctype_odigit) != 0) ! c = (c * 8 + ptr[i]-'0') & 255; else break; /* Non-octal character--break out of the loop */ From python-dev@python.org Wed Aug 2 21:46:54 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 2 Aug 2000 13:46:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules fcntlmodule.c,2.23,2.24 Message-ID: <200008022046.NAA14885@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv14876 Modified Files: fcntlmodule.c Log Message: Rob Hooft (Patch #101046): use PyArg_ParseTuple everywhere. Index: fcntlmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/fcntlmodule.c,v retrieving revision 2.23 retrieving revision 2.24 diff -C2 -r2.23 -r2.24 *** fcntlmodule.c 2000/07/21 06:00:07 2.23 --- fcntlmodule.c 2000/08/02 20:46:51 2.24 *************** *** 38,42 **** char buf[1024]; ! if (PyArg_Parse(args, "(iis#)", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, --- 38,42 ---- char buf[1024]; ! if (PyArg_ParseTuple(args, "iis#:fcntl", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, *************** *** 56,65 **** PyErr_Clear(); ! if (PyArg_Parse(args, "(ii)", &fd, &code)) ! arg = 0; ! else { ! PyErr_Clear(); ! if (!PyArg_Parse(args, "(iii)", &fd, &code, &arg)) ! return NULL; } Py_BEGIN_ALLOW_THREADS --- 56,63 ---- PyErr_Clear(); ! arg = 0; ! if (!PyArg_ParseTuple(args, "ii|i;fcntl requires 2 integers and optionally a third integer or a string", ! &fd, &code, &arg)) { ! return NULL; } Py_BEGIN_ALLOW_THREADS *************** *** 80,84 **** is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module FCNTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string."; --- 78,87 ---- is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module FCNTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string. If arg is\n\ ! given as a string, the return value of fcntl is a string of that length,\n\ ! containing the resulting value put in the arg buffer by the operating system.\n\ ! The length of the arg string is not allowed to exceed 1024 bytes. If the arg\n\ ! given is an integer or if none is specified, the result value is an integer\n\ ! corresponding to the return value of the fcntl call in the C code."; *************** *** 96,100 **** char buf[1024]; ! if (PyArg_Parse(args, "(iis#)", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, --- 99,103 ---- char buf[1024]; ! if (PyArg_ParseTuple(args, "iis#:ioctl", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, *************** *** 114,123 **** PyErr_Clear(); ! if (PyArg_Parse(args, "(ii)", &fd, &code)) ! arg = 0; ! else { ! PyErr_Clear(); ! if (!PyArg_Parse(args, "(iii)", &fd, &code, &arg)) ! return NULL; } Py_BEGIN_ALLOW_THREADS --- 117,124 ---- PyErr_Clear(); ! arg = 0; ! if (!PyArg_ParseTuple(args, "ii|i;ioctl requires 2 integers and optionally a third integer or a string", ! &fd, &code, &arg)) { ! return NULL; } Py_BEGIN_ALLOW_THREADS *************** *** 137,141 **** is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module IOCTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string."; --- 138,147 ---- is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module IOCTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string. If arg is\n\ ! given as a string, the return value of ioctl is a string of that length,\n\ ! containing the resulting value put in the arg buffer by the operating system.\n\ ! The length of the arg string is not allowed to exceed 1024 bytes. If the arg\n\ ! given is an integer or if none is specified, the result value is an integer\n\ ! corresponding to the return value of the ioctl call in the C code."; *************** *** 149,153 **** int ret; ! if (!PyArg_Parse(args, "(ii)", &fd, &code)) return NULL; --- 155,159 ---- int ret; ! if (!PyArg_ParseTuple(args, "ii:flock", &fd, &code)) return NULL; *************** *** 274,281 **** static PyMethodDef fcntl_methods[] = { ! {"fcntl", fcntl_fcntl, 0, fcntl_doc}, ! {"ioctl", fcntl_ioctl, 0, ioctl_doc}, ! {"flock", fcntl_flock, 0, flock_doc}, ! {"lockf", fcntl_lockf, 1, lockf_doc}, {NULL, NULL} /* sentinel */ }; --- 280,287 ---- static PyMethodDef fcntl_methods[] = { ! {"fcntl", fcntl_fcntl, METH_VARARGS, fcntl_doc}, ! {"ioctl", fcntl_ioctl, METH_VARARGS, ioctl_doc}, ! {"flock", fcntl_flock, METH_VARARGS, flock_doc}, ! {"lockf", fcntl_lockf, METH_VARARGS, lockf_doc}, {NULL, NULL} /* sentinel */ }; From python-dev@python.org Wed Aug 2 21:53:53 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 2 Aug 2000 13:53:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfcntl.tex,1.22,1.23 Message-ID: <200008022053.NAA15397@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv15381/lib Modified Files: libfcntl.tex Log Message: Rob Hooft : Description of fcntl(): Added description of what can go wrong. Index: libfcntl.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfcntl.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** libfcntl.tex 2000/04/03 20:13:53 1.22 --- libfcntl.tex 2000/08/02 20:53:51 1.23 *************** *** 31,36 **** data is copied to a buffer whose address is passed to the C \cfunction{fcntl()} call. The return value after a successful call ! is the contents of the buffer, converted to a string object. In ! case the \cfunction{fcntl()} fails, an \exception{IOError} is raised. \end{funcdesc} --- 31,42 ---- data is copied to a buffer whose address is passed to the C \cfunction{fcntl()} call. The return value after a successful call ! is the contents of the buffer, converted to a string object. The length ! of the returned string will be the same as the length of the \var{arg} ! argument. This is limited to 1024 bytes. If the information returned ! in the buffer by the operating system is larger than 1024 bytes, ! this is most likely to result in a segmentation violation or a more ! subtle data corruption. ! ! If the \cfunction{fcntl()} fails, an \exception{IOError} is raised. \end{funcdesc} From python-dev@python.org Wed Aug 2 22:29:33 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 2 Aug 2000 14:29:33 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.85,1.85.2.1 Message-ID: <200008022129.OAA26057@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26035 Modified Files: Tag: cnri-16-start README Log Message: Changes pertaining to the new license, changed email addresses, and so on. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.85 retrieving revision 1.85.2.1 diff -C2 -r1.85 -r1.85.2.1 *** README 2000/04/11 17:11:09 1.85 --- README 2000/08/02 21:29:30 1.85.2.1 *************** *** 1,8 **** ! This is Python version 1.6 ! ========================== ! There are various alpha and beta versions -- these are distinguishable ! through Include/patchlevel.h or by the name of the top-level directory ! and the tar file. --- 1,14 ---- ! This is Python version 1.6 beta 1 (1.6b1) ! ========================================= ! License information ! ------------------- ! ! Copyright (c) 1991-1995, Stichting Mathematisch Centrum. ! All rights reserved. ! ! See the file "LICENSE" for information on terms & conditions for ! accessing and otherwise using Python 1.6b1 and for a DISCLAIMER OF ALL ! WARRANTIES. *************** *** 31,49 **** - A modest plug - ------------- - - ************************************************************************ - * Without your support, I won't be able to continue to work on Python! * - ************************************************************************ - - If you use Python, please consider joining the Python Software - Activity (PSA). See http://www.python.org/psa/. - - Organizations that make heavy use of Python are especially encouraged - to become corporate members -- or better still, to join the Python - Consortium (see http://www.python.org/consortium/). - - How do I learn Python? ---------------------- --- 37,40 ---- *************** *** 57,71 **** - Copyright issues - ---------------- - - Python is COPYRIGHTED but free to use for all. See the full copyright - notice at the end of this file and in the file Misc/COPYRIGHT. - - The Python distribution is *not* affected by the GNU Public Licence - (GPL). There are interfaces to some GNU code but these are entirely - optional and no GNU code is distributed with Python. - - Build instructions ================== --- 48,51 ---- *************** *** 680,684 **** Misc/python-mode.el. Originally written by the famous Tim Peters, it is now maintained by the equally famous Barry Warsaw ! . The latest version, along with various other contributed Python-related Emacs goodies, is online at . And if you are planning to --- 660,664 ---- Misc/python-mode.el. Originally written by the famous Tim Peters, it is now maintained by the equally famous Barry Warsaw ! . The latest version, along with various other contributed Python-related Emacs goodies, is online at . And if you are planning to *************** *** 723,734 **** ! Bug reports ! ----------- ! Bugs are best reported to the comp.lang.python newsgroup (or the ! Python mailing list) -- see the section "Newsgroups" above. Before ! posting, check the newsgroup archives (see above) to see if your bug ! has already been reported! If you don't want to go public, send them ! to me: . --- 703,711 ---- ! Bug reports and patches ! ----------------------- ! To report a bug or contribute a patch, use the Python project at ! SourceForge: http://sourceforge.net/projects/python. *************** *** 836,889 **** tags, TAGS Tags files for vi and Emacs - - Author's address - ================ - - Guido van Rossum - CNRI - 1895 Preston White Drive - Reston, VA 20191 - USA - - E-mail: guido@cnri.reston.va.us or guido@python.org - - - - Copyright notice - ================ - - The Python source is copyrighted, but you can freely use and copy it - as long as you don't change or remove the copyright notice: - - ---------------------------------------------------------------------- - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ---------------------------------------------------------------------- ! --Guido van Rossum (home page: http://www.python.org/~guido/) --- 813,820 ---- tags, TAGS Tags files for vi and Emacs ! That's all, folks! ! ------------------ ! --Guido van Rossum (home page: http://www.pythonlabs.com/~guido/) From python-dev@python.org Thu Aug 3 03:04:08 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:04:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules zlibmodule.c,2.34,2.35 Message-ID: <200008030204.TAA19199@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv17704 Modified Files: zlibmodule.c Log Message: Use METH_VARARGS instead of numeric constant 1 Index: zlibmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/zlibmodule.c,v retrieving revision 2.34 retrieving revision 2.35 diff -C2 -r2.34 -r2.35 *** zlibmodule.c 2000/07/21 06:00:07 2.34 --- zlibmodule.c 2000/08/03 02:04:05 2.35 *************** *** 611,615 **** PyObject *RetVal; ! if (!PyArg_NoArgs(args)) return NULL; if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) --- 611,615 ---- PyObject *RetVal; ! if (!PyArg_ParseTuple(args, "")) return NULL; if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) *************** *** 676,681 **** static PyMethodDef comp_methods[] = { ! {"compress", (binaryfunc)PyZlib_objcompress, 1, comp_compress__doc__}, ! {"flush", (binaryfunc)PyZlib_flush, 1, comp_flush__doc__}, {NULL, NULL} }; --- 676,683 ---- static PyMethodDef comp_methods[] = { ! {"compress", (binaryfunc)PyZlib_objcompress, ! METH_VARARGS, comp_compress__doc__}, ! {"flush", (binaryfunc)PyZlib_flush, ! METH_VARARGS, comp_flush__doc__}, {NULL, NULL} }; *************** *** 683,688 **** static PyMethodDef Decomp_methods[] = { ! {"decompress", (binaryfunc)PyZlib_objdecompress, 1, decomp_decompress__doc__}, ! {"flush", (binaryfunc)PyZlib_unflush, 0, decomp_flush__doc__}, {NULL, NULL} }; --- 685,692 ---- static PyMethodDef Decomp_methods[] = { ! {"decompress", (binaryfunc)PyZlib_objdecompress, ! METH_VARARGS, decomp_decompress__doc__}, ! {"flush", (binaryfunc)PyZlib_unflush, ! METH_VARARGS, decomp_flush__doc__}, {NULL, NULL} }; *************** *** 751,761 **** static PyMethodDef zlib_methods[] = { ! {"adler32", (PyCFunction)PyZlib_adler32, 1, adler32__doc__}, ! {"compress", (PyCFunction)PyZlib_compress, 1, compress__doc__}, ! {"compressobj", (PyCFunction)PyZlib_compressobj, 1, compressobj__doc__}, ! {"crc32", (PyCFunction)PyZlib_crc32, 1, crc32__doc__}, ! {"decompress", (PyCFunction)PyZlib_decompress, 1, decompress__doc__}, ! {"decompressobj", (PyCFunction)PyZlib_decompressobj, 1, decompressobj__doc__}, ! {NULL, NULL} }; --- 755,771 ---- static PyMethodDef zlib_methods[] = { ! {"adler32", (PyCFunction)PyZlib_adler32, ! METH_VARARGS, adler32__doc__}, ! {"compress", (PyCFunction)PyZlib_compress, ! METH_VARARGS, compress__doc__}, ! {"compressobj", (PyCFunction)PyZlib_compressobj, ! METH_VARARGS, compressobj__doc__}, ! {"crc32", (PyCFunction)PyZlib_crc32, ! METH_VARARGS, crc32__doc__}, ! {"decompress", (PyCFunction)PyZlib_decompress, ! METH_VARARGS, decompress__doc__}, ! {"decompressobj", (PyCFunction)PyZlib_decompressobj, ! METH_VARARGS, decompressobj__doc__}, ! {NULL, NULL} }; From python-dev@python.org Thu Aug 3 03:06:48 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:06:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.20,1.21 Message-ID: <200008030206.TAA20060@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20021 Modified Files: test_re.py Log Message: Add nasty test case that overflows the stack with a repeated group Index: test_re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** test_re.py 2000/06/30 16:25:20 1.20 --- test_re.py 2000/08/03 02:06:45 1.21 *************** *** 29,32 **** --- 29,36 ---- raise TestFailed, "re.search" + # Try nasty case that overflows the straightforward recursive + # implementation of repeated groups. + assert re.match('(x)*', 50000*'x').span() == (0, 50000) + if verbose: print 'Running tests on re.sub' From python-dev@python.org Thu Aug 3 03:06:19 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:06:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.13,2.14 binascii.c,2.22,2.23 cStringIO.c,2.24,2.25 cmathmodule.c,2.19,2.20 md5module.c,2.20,2.21 newmodule.c,2.25,2.26 readline.c,2.25,2.26 socketmodule.c,1.124,1.125 soundex.c,2.8,2.9 stropmodule.c,2.70,2.71 threadmodule.c,2.35,2.36 timemodule.c,2.98,2.99 Message-ID: <200008030206.TAA20036@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv19973 Modified Files: _localemodule.c binascii.c cStringIO.c cmathmodule.c md5module.c newmodule.c readline.c socketmodule.c soundex.c stropmodule.c threadmodule.c timemodule.c Log Message: Use METH_VARARGS instead of numeric constant 1 in method def. tables Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** _localemodule.c 2000/07/21 06:00:07 2.13 --- _localemodule.c 2000/08/03 02:06:15 2.14 *************** *** 390,397 **** static struct PyMethodDef PyLocale_Methods[] = { ! {"setlocale", (PyCFunction) PyLocale_setlocale, 1, setlocale__doc__}, ! {"localeconv", (PyCFunction) PyLocale_localeconv, 0, localeconv__doc__}, ! {"strcoll", (PyCFunction) PyLocale_strcoll, 1, strcoll__doc__}, ! {"strxfrm", (PyCFunction) PyLocale_strxfrm, 1, strxfrm__doc__}, #if defined(MS_WIN32) || defined(macintosh) {"_getdefaultlocale", (PyCFunction) PyLocale_getdefaultlocale, 0}, --- 390,401 ---- static struct PyMethodDef PyLocale_Methods[] = { ! {"setlocale", (PyCFunction) PyLocale_setlocale, ! METH_VARARGS, setlocale__doc__}, ! {"localeconv", (PyCFunction) PyLocale_localeconv, ! 0, localeconv__doc__}, ! {"strcoll", (PyCFunction) PyLocale_strcoll, ! METH_VARARGS, strcoll__doc__}, ! {"strxfrm", (PyCFunction) PyLocale_strxfrm, ! METH_VARARGS, strxfrm__doc__}, #if defined(MS_WIN32) || defined(macintosh) {"_getdefaultlocale", (PyCFunction) PyLocale_getdefaultlocale, 0}, Index: binascii.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v retrieving revision 2.22 retrieving revision 2.23 diff -C2 -r2.22 -r2.23 *** binascii.c 2000/07/21 06:00:07 2.22 --- binascii.c 2000/08/03 02:06:15 2.23 *************** *** 878,895 **** static struct PyMethodDef binascii_module_methods[] = { ! {"a2b_uu", binascii_a2b_uu, 1, doc_a2b_uu}, ! {"b2a_uu", binascii_b2a_uu, 1, doc_b2a_uu}, ! {"a2b_base64", binascii_a2b_base64, 1, doc_a2b_base64}, ! {"b2a_base64", binascii_b2a_base64, 1, ! doc_b2a_base64}, ! {"a2b_hqx", binascii_a2b_hqx, 1, doc_a2b_hqx}, ! {"b2a_hqx", binascii_b2a_hqx, 1, doc_b2a_hqx}, ! {"rlecode_hqx", binascii_rlecode_hqx, 1, ! doc_rlecode_hqx}, ! {"rledecode_hqx", binascii_rledecode_hqx, 1, ! doc_rledecode_hqx}, ! {"crc_hqx", binascii_crc_hqx, 1, doc_crc_hqx}, ! {"crc32", binascii_crc32, 1, doc_crc32}, {NULL, NULL} /* sentinel */ }; --- 878,902 ---- static struct PyMethodDef binascii_module_methods[] = { ! {"a2b_uu", binascii_a2b_uu, ! METH_VARARGS, doc_a2b_uu}, ! {"b2a_uu", binascii_b2a_uu, ! METH_VARARGS, doc_b2a_uu}, ! {"a2b_base64", binascii_a2b_base64, ! METH_VARARGS, doc_a2b_base64}, ! {"b2a_base64", binascii_b2a_base64, ! METH_VARARGS, doc_b2a_base64}, ! {"a2b_hqx", binascii_a2b_hqx, ! METH_VARARGS, doc_a2b_hqx}, ! {"b2a_hqx", binascii_b2a_hqx, ! METH_VARARGS, doc_b2a_hqx}, ! {"rlecode_hqx", binascii_rlecode_hqx, ! METH_VARARGS, doc_rlecode_hqx}, ! {"rledecode_hqx", binascii_rledecode_hqx, ! METH_VARARGS, doc_rledecode_hqx}, ! {"crc_hqx", binascii_crc_hqx, ! METH_VARARGS, doc_crc_hqx}, ! {"crc32", binascii_crc32, ! METH_VARARGS, doc_crc32}, {NULL, NULL} /* sentinel */ }; Index: cStringIO.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cStringIO.c,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -r2.24 -r2.25 *** cStringIO.c 2000/07/24 14:43:35 2.24 --- cStringIO.c 2000/08/03 02:06:16 2.25 *************** *** 618,622 **** static struct PyMethodDef IO_methods[] = { ! {"StringIO", (PyCFunction)IO_StringIO, 1, IO_StringIO__doc__}, {NULL, NULL} /* sentinel */ }; --- 618,623 ---- static struct PyMethodDef IO_methods[] = { ! {"StringIO", (PyCFunction)IO_StringIO, ! METH_VARARGS, IO_StringIO__doc__}, {NULL, NULL} /* sentinel */ }; Index: cmathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cmathmodule.c,v retrieving revision 2.19 retrieving revision 2.20 diff -C2 -r2.19 -r2.20 *** cmathmodule.c 2000/07/31 15:28:04 2.19 --- cmathmodule.c 2000/08/03 02:06:16 2.20 *************** *** 373,392 **** static PyMethodDef cmath_methods[] = { ! {"acos", cmath_acos, 1, c_acos_doc}, ! {"acosh", cmath_acosh, 1, c_acosh_doc}, ! {"asin", cmath_asin, 1, c_asin_doc}, ! {"asinh", cmath_asinh, 1, c_asinh_doc}, ! {"atan", cmath_atan, 1, c_atan_doc}, ! {"atanh", cmath_atanh, 1, c_atanh_doc}, ! {"cos", cmath_cos, 1, c_cos_doc}, ! {"cosh", cmath_cosh, 1, c_cosh_doc}, ! {"exp", cmath_exp, 1, c_exp_doc}, ! {"log", cmath_log, 1, c_log_doc}, ! {"log10", cmath_log10, 1, c_log10_doc}, ! {"sin", cmath_sin, 1, c_sin_doc}, ! {"sinh", cmath_sinh, 1, c_sinh_doc}, ! {"sqrt", cmath_sqrt, 1, c_sqrt_doc}, ! {"tan", cmath_tan, 1, c_tan_doc}, ! {"tanh", cmath_tanh, 1, c_tanh_doc}, {NULL, NULL} /* sentinel */ }; --- 373,408 ---- static PyMethodDef cmath_methods[] = { ! {"acos", cmath_acos, ! METH_VARARGS, c_acos_doc}, ! {"acosh", cmath_acosh, ! METH_VARARGS, c_acosh_doc}, ! {"asin", cmath_asin, ! METH_VARARGS, c_asin_doc}, ! {"asinh", cmath_asinh, ! METH_VARARGS, c_asinh_doc}, ! {"atan", cmath_atan, ! METH_VARARGS, c_atan_doc}, ! {"atanh", cmath_atanh, ! METH_VARARGS, c_atanh_doc}, ! {"cos", cmath_cos, ! METH_VARARGS, c_cos_doc}, ! {"cosh", cmath_cosh, ! METH_VARARGS, c_cosh_doc}, ! {"exp", cmath_exp, ! METH_VARARGS, c_exp_doc}, ! {"log", cmath_log, ! METH_VARARGS, c_log_doc}, ! {"log10", cmath_log10, ! METH_VARARGS, c_log10_doc}, ! {"sin", cmath_sin, ! METH_VARARGS, c_sin_doc}, ! {"sinh", cmath_sinh, ! METH_VARARGS, c_sinh_doc}, ! {"sqrt", cmath_sqrt, ! METH_VARARGS, c_sqrt_doc}, ! {"tan", cmath_tan, ! METH_VARARGS, c_tan_doc}, ! {"tanh", cmath_tanh, ! METH_VARARGS, c_tanh_doc}, {NULL, NULL} /* sentinel */ }; Index: md5module.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** md5module.c 2000/07/21 06:00:07 2.20 --- md5module.c 2000/08/03 02:06:16 2.21 *************** *** 228,233 **** static PyMethodDef md5_functions[] = { ! {"new", (PyCFunction)MD5_new, 1, new_doc}, ! {"md5", (PyCFunction)MD5_new, 1, new_doc}, /* Backward compatibility */ {NULL, NULL} /* Sentinel */ }; --- 228,233 ---- static PyMethodDef md5_functions[] = { ! {"new", (PyCFunction)MD5_new, METH_VARARGS, new_doc}, ! {"md5", (PyCFunction)MD5_new, METH_VARARGS, new_doc}, /* Backward compatibility */ {NULL, NULL} /* Sentinel */ }; Index: newmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/newmodule.c,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** newmodule.c 2000/07/21 06:00:07 2.25 --- newmodule.c 2000/08/03 02:06:16 2.26 *************** *** 181,190 **** static PyMethodDef new_methods[] = { ! {"instance", new_instance, 1, new_instance_doc}, ! {"instancemethod", new_instancemethod, 1, new_im_doc}, ! {"function", new_function, 1, new_function_doc}, ! {"code", new_code, 1, new_code_doc}, ! {"module", new_module, 1, new_module_doc}, ! {"classobj", new_class, 1, new_class_doc}, {NULL, NULL} /* sentinel */ }; --- 181,196 ---- static PyMethodDef new_methods[] = { ! {"instance", new_instance, ! METH_VARARGS, new_instance_doc}, ! {"instancemethod", new_instancemethod, ! METH_VARARGS, new_im_doc}, ! {"function", new_function, ! METH_VARARGS, new_function_doc}, ! {"code", new_code, ! METH_VARARGS, new_code_doc}, ! {"module", new_module, ! METH_VARARGS, new_module_doc}, ! {"classobj", new_class, ! METH_VARARGS, new_class_doc}, {NULL, NULL} /* sentinel */ }; Index: readline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/readline.c,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** readline.c 2000/07/23 21:18:09 2.25 --- readline.c 2000/08/03 02:06:16 2.26 *************** *** 324,336 **** static struct PyMethodDef readline_methods[] = { ! {"parse_and_bind", parse_and_bind, 1, doc_parse_and_bind}, {"get_line_buffer", get_line_buffer, 0, doc_get_line_buffer}, ! {"insert_text", insert_text, 1, doc_insert_text}, ! {"read_init_file", read_init_file, 1, doc_read_init_file}, ! {"read_history_file", read_history_file, 1, doc_read_history_file}, ! {"write_history_file", write_history_file, 1, doc_write_history_file}, ! {"set_history_length", set_history_length, 1, set_history_length_doc}, ! {"get_history_length", get_history_length, 1, get_history_length_doc}, ! {"set_completer", set_completer, 1, doc_set_completer}, {"get_begidx", get_begidx, 0, doc_get_begidx}, {"get_endidx", get_endidx, 0, doc_get_endidx}, --- 324,340 ---- static struct PyMethodDef readline_methods[] = { ! {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, {"get_line_buffer", get_line_buffer, 0, doc_get_line_buffer}, ! {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, ! {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, ! {"read_history_file", read_history_file, ! METH_VARARGS, doc_read_history_file}, ! {"write_history_file", write_history_file, ! METH_VARARGS, doc_write_history_file}, ! {"set_history_length", set_history_length, ! METH_VARARGS, set_history_length_doc}, ! {"get_history_length", get_history_length, ! METH_VARARGS, get_history_length_doc}, ! {"set_completer", set_completer, METH_VARARGS, doc_set_completer}, {"get_begidx", get_begidx, 0, doc_get_begidx}, {"get_endidx", get_endidx, 0, doc_get_endidx}, Index: socketmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v retrieving revision 1.124 retrieving revision 1.125 diff -C2 -r1.124 -r1.125 *** socketmodule.c 2000/07/31 15:28:04 1.124 --- socketmodule.c 2000/08/03 02:06:16 1.125 *************** *** 1345,1391 **** static PyMethodDef PySocketSock_methods[] = { ! {"accept", (PyCFunction)PySocketSock_accept, 1, accept_doc}, ! {"bind", (PyCFunction)PySocketSock_bind, 1, bind_doc}, ! {"close", (PyCFunction)PySocketSock_close, 1, close_doc}, ! {"connect", (PyCFunction)PySocketSock_connect, 1, connect_doc}, ! {"connect_ex", (PyCFunction)PySocketSock_connect_ex, 1, connect_ex_doc}, #ifndef NO_DUP ! {"dup", (PyCFunction)PySocketSock_dup, 1, dup_doc}, #endif ! {"fileno", (PyCFunction)PySocketSock_fileno, 1, fileno_doc}, #ifdef HAVE_GETPEERNAME ! {"getpeername", (PyCFunction)PySocketSock_getpeername, 1, getpeername_doc}, #endif ! {"getsockname", (PyCFunction)PySocketSock_getsockname, 1, getsockname_doc}, ! {"getsockopt", (PyCFunction)PySocketSock_getsockopt, 1, getsockopt_doc}, ! {"listen", (PyCFunction)PySocketSock_listen, 1, listen_doc}, #ifndef NO_DUP ! {"makefile", (PyCFunction)PySocketSock_makefile, 1, makefile_doc}, #endif ! {"recv", (PyCFunction)PySocketSock_recv, 1, recv_doc}, ! {"recvfrom", (PyCFunction)PySocketSock_recvfrom, 1, recvfrom_doc}, ! {"send", (PyCFunction)PySocketSock_send, 1, send_doc}, ! {"sendto", (PyCFunction)PySocketSock_sendto, 1, sendto_doc}, ! {"setblocking", (PyCFunction)PySocketSock_setblocking, 1, setblocking_doc}, ! {"setsockopt", (PyCFunction)PySocketSock_setsockopt, 1, setsockopt_doc}, ! {"shutdown", (PyCFunction)PySocketSock_shutdown, 1, shutdown_doc}, {NULL, NULL} /* sentinel */ --- 1345,1391 ---- static PyMethodDef PySocketSock_methods[] = { ! {"accept", (PyCFunction)PySocketSock_accept, METH_VARARGS, accept_doc}, ! {"bind", (PyCFunction)PySocketSock_bind, METH_VARARGS, bind_doc}, ! {"close", (PyCFunction)PySocketSock_close, METH_VARARGS, close_doc}, ! {"connect", (PyCFunction)PySocketSock_connect, METH_VARARGS, connect_doc}, ! {"connect_ex", (PyCFunction)PySocketSock_connect_ex, METH_VARARGS, connect_ex_doc}, #ifndef NO_DUP ! {"dup", (PyCFunction)PySocketSock_dup, METH_VARARGS, dup_doc}, #endif ! {"fileno", (PyCFunction)PySocketSock_fileno, METH_VARARGS, fileno_doc}, #ifdef HAVE_GETPEERNAME ! {"getpeername", (PyCFunction)PySocketSock_getpeername, METH_VARARGS, getpeername_doc}, #endif ! {"getsockname", (PyCFunction)PySocketSock_getsockname, METH_VARARGS, getsockname_doc}, ! {"getsockopt", (PyCFunction)PySocketSock_getsockopt, METH_VARARGS, getsockopt_doc}, ! {"listen", (PyCFunction)PySocketSock_listen, METH_VARARGS, listen_doc}, #ifndef NO_DUP ! {"makefile", (PyCFunction)PySocketSock_makefile, METH_VARARGS, makefile_doc}, #endif ! {"recv", (PyCFunction)PySocketSock_recv, METH_VARARGS, recv_doc}, ! {"recvfrom", (PyCFunction)PySocketSock_recvfrom, METH_VARARGS, recvfrom_doc}, ! {"send", (PyCFunction)PySocketSock_send, METH_VARARGS, send_doc}, ! {"sendto", (PyCFunction)PySocketSock_sendto, METH_VARARGS, sendto_doc}, ! {"setblocking", (PyCFunction)PySocketSock_setblocking, METH_VARARGS, setblocking_doc}, ! {"setsockopt", (PyCFunction)PySocketSock_setsockopt, METH_VARARGS, setsockopt_doc}, ! {"shutdown", (PyCFunction)PySocketSock_shutdown, METH_VARARGS, shutdown_doc}, {NULL, NULL} /* sentinel */ *************** *** 2200,2221 **** static PyMethodDef PySocket_methods[] = { ! {"gethostbyname", PySocket_gethostbyname, 1, gethostbyname_doc}, ! {"gethostbyname_ex", PySocket_gethostbyname_ex, 1, ghbn_ex_doc}, ! {"gethostbyaddr", PySocket_gethostbyaddr, 1, gethostbyaddr_doc}, ! {"gethostname", PySocket_gethostname, 1, gethostname_doc}, ! {"getservbyname", PySocket_getservbyname, 1, getservbyname_doc}, ! {"getprotobyname", PySocket_getprotobyname, 1,getprotobyname_doc}, ! {"socket", PySocket_socket, 1, socket_doc}, #ifndef NO_DUP ! {"fromfd", PySocket_fromfd, 1, fromfd_doc}, #endif ! {"ntohs", PySocket_ntohs, 1, ntohs_doc}, ! {"ntohl", PySocket_ntohl, 1, ntohl_doc}, ! {"htons", PySocket_htons, 1, htons_doc}, ! {"htonl", PySocket_htonl, 1, htonl_doc}, ! {"inet_aton", PySocket_inet_aton, 1, inet_aton_doc}, ! {"inet_ntoa", PySocket_inet_ntoa, 1, inet_ntoa_doc}, #ifdef USE_SSL ! {"ssl", PySocket_ssl, 1, ssl_doc}, #endif /* USE_SSL */ {NULL, NULL} /* Sentinel */ --- 2200,2236 ---- static PyMethodDef PySocket_methods[] = { ! {"gethostbyname", PySocket_gethostbyname, ! METH_VARARGS, gethostbyname_doc}, ! {"gethostbyname_ex", PySocket_gethostbyname_ex, ! METH_VARARGS, ghbn_ex_doc}, ! {"gethostbyaddr", PySocket_gethostbyaddr, ! METH_VARARGS, gethostbyaddr_doc}, ! {"gethostname", PySocket_gethostname, ! METH_VARARGS, gethostname_doc}, ! {"getservbyname", PySocket_getservbyname, ! METH_VARARGS, getservbyname_doc}, ! {"getprotobyname", PySocket_getprotobyname, ! METH_VARARGS,getprotobyname_doc}, ! {"socket", PySocket_socket, ! METH_VARARGS, socket_doc}, #ifndef NO_DUP ! {"fromfd", PySocket_fromfd, ! METH_VARARGS, fromfd_doc}, #endif ! {"ntohs", PySocket_ntohs, ! METH_VARARGS, ntohs_doc}, ! {"ntohl", PySocket_ntohl, ! METH_VARARGS, ntohl_doc}, ! {"htons", PySocket_htons, ! METH_VARARGS, htons_doc}, ! {"htonl", PySocket_htonl, ! METH_VARARGS, htonl_doc}, ! {"inet_aton", PySocket_inet_aton, ! METH_VARARGS, inet_aton_doc}, ! {"inet_ntoa", PySocket_inet_ntoa, ! METH_VARARGS, inet_ntoa_doc}, #ifdef USE_SSL ! {"ssl", PySocket_ssl, ! METH_VARARGS, ssl_doc}, #endif /* USE_SSL */ {NULL, NULL} /* Sentinel */ Index: soundex.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/soundex.c,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** soundex.c 2000/07/21 06:00:07 2.8 --- soundex.c 2000/08/03 02:06:16 2.9 *************** *** 158,165 **** static PyMethodDef SoundexMethods[] = { ! {"sound_similar", sound_similar, 1, soundex_sound_similar__doc__}, ! {"get_soundex", get_soundex, 1, soundex_get_soundex__doc__}, ! {NULL, NULL } /* sentinel */ }; --- 158,167 ---- static PyMethodDef SoundexMethods[] = { ! {"sound_similar", sound_similar, ! METH_VARARGS, soundex_sound_similar__doc__}, ! {"get_soundex", get_soundex, ! METH_VARARGS, soundex_get_soundex__doc__}, ! {NULL, NULL } /* sentinel */ }; Index: stropmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/stropmodule.c,v retrieving revision 2.70 retrieving revision 2.71 diff -C2 -r2.70 -r2.71 *** stropmodule.c 2000/07/21 06:00:07 2.70 --- stropmodule.c 2000/08/03 02:06:16 2.71 *************** *** 1155,1178 **** static PyMethodDef strop_methods[] = { ! {"atof", strop_atof, 1, atof__doc__}, ! {"atoi", strop_atoi, 1, atoi__doc__}, ! {"atol", strop_atol, 1, atol__doc__}, {"capitalize", strop_capitalize, 0, capitalize__doc__}, ! {"count", strop_count, 1, count__doc__}, ! {"expandtabs", strop_expandtabs, 1, expandtabs__doc__}, ! {"find", strop_find, 1, find__doc__}, ! {"join", strop_joinfields, 1, joinfields__doc__}, ! {"joinfields", strop_joinfields, 1, joinfields__doc__}, {"lstrip", strop_lstrip, 0, lstrip__doc__}, {"lower", strop_lower, 0, lower__doc__}, ! {"maketrans", strop_maketrans, 1, maketrans__doc__}, ! {"replace", strop_replace, 1, replace__doc__}, ! {"rfind", strop_rfind, 1, rfind__doc__}, {"rstrip", strop_rstrip, 0, rstrip__doc__}, ! {"split", strop_splitfields, 1, splitfields__doc__}, ! {"splitfields", strop_splitfields, 1, splitfields__doc__}, {"strip", strop_strip, 0, strip__doc__}, {"swapcase", strop_swapcase, 0, swapcase__doc__}, ! {"translate", strop_translate, 1, translate__doc__}, {"upper", strop_upper, 0, upper__doc__}, {NULL, NULL} /* sentinel */ --- 1155,1192 ---- static PyMethodDef strop_methods[] = { ! {"atof", strop_atof, ! METH_VARARGS, atof__doc__}, ! {"atoi", strop_atoi, ! METH_VARARGS, atoi__doc__}, ! {"atol", strop_atol, ! METH_VARARGS, atol__doc__}, {"capitalize", strop_capitalize, 0, capitalize__doc__}, ! {"count", strop_count, ! METH_VARARGS, count__doc__}, ! {"expandtabs", strop_expandtabs, ! METH_VARARGS, expandtabs__doc__}, ! {"find", strop_find, ! METH_VARARGS, find__doc__}, ! {"join", strop_joinfields, ! METH_VARARGS, joinfields__doc__}, ! {"joinfields", strop_joinfields, ! METH_VARARGS, joinfields__doc__}, {"lstrip", strop_lstrip, 0, lstrip__doc__}, {"lower", strop_lower, 0, lower__doc__}, ! {"maketrans", strop_maketrans, ! METH_VARARGS, maketrans__doc__}, ! {"replace", strop_replace, ! METH_VARARGS, replace__doc__}, ! {"rfind", strop_rfind, ! METH_VARARGS, rfind__doc__}, {"rstrip", strop_rstrip, 0, rstrip__doc__}, ! {"split", strop_splitfields, ! METH_VARARGS, splitfields__doc__}, ! {"splitfields", strop_splitfields, ! METH_VARARGS, splitfields__doc__}, {"strip", strop_strip, 0, strip__doc__}, {"swapcase", strop_swapcase, 0, swapcase__doc__}, ! {"translate", strop_translate, ! METH_VARARGS, translate__doc__}, {"upper", strop_upper, 0, upper__doc__}, {NULL, NULL} /* sentinel */ Index: threadmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/threadmodule.c,v retrieving revision 2.35 retrieving revision 2.36 diff -C2 -r2.35 -r2.36 *** threadmodule.c 2000/07/21 06:00:07 2.35 --- threadmodule.c 2000/08/03 02:06:16 2.36 *************** *** 338,344 **** static PyMethodDef thread_methods[] = { ! {"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread, 1, start_new_doc}, ! {"start_new", (PyCFunction)thread_PyThread_start_new_thread, 1, start_new_doc}, {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, 0, --- 338,346 ---- static PyMethodDef thread_methods[] = { ! {"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread, ! METH_VARARGS, start_new_doc}, ! {"start_new", (PyCFunction)thread_PyThread_start_new_thread, ! METH_VARARGS, start_new_doc}, {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, 0, Index: timemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v retrieving revision 2.98 retrieving revision 2.99 diff -C2 -r2.98 -r2.99 *** timemodule.c 2000/07/31 15:28:04 2.98 --- timemodule.c 2000/08/03 02:06:16 2.99 *************** *** 499,512 **** {"gmtime", time_gmtime, 0, gmtime_doc}, {"localtime", time_localtime, 0, localtime_doc}, ! {"asctime", time_asctime, 1, asctime_doc}, {"ctime", time_ctime, 0, ctime_doc}, #ifdef HAVE_MKTIME ! {"mktime", time_mktime, 1, mktime_doc}, #endif #ifdef HAVE_STRFTIME ! {"strftime", time_strftime, 1, strftime_doc}, #endif #ifdef HAVE_STRPTIME ! {"strptime", time_strptime, 1, strptime_doc}, #endif {NULL, NULL} /* sentinel */ --- 499,512 ---- {"gmtime", time_gmtime, 0, gmtime_doc}, {"localtime", time_localtime, 0, localtime_doc}, ! {"asctime", time_asctime, METH_VARARGS, asctime_doc}, {"ctime", time_ctime, 0, ctime_doc}, #ifdef HAVE_MKTIME ! {"mktime", time_mktime, METH_VARARGS, mktime_doc}, #endif #ifdef HAVE_STRFTIME ! {"strftime", time_strftime, METH_VARARGS, strftime_doc}, #endif #ifdef HAVE_STRPTIME ! {"strptime", time_strptime, METH_VARARGS, strptime_doc}, #endif {NULL, NULL} /* sentinel */ From python-dev@python.org Thu Aug 3 03:28:57 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:28:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include methodobject.h,2.20,2.21 Message-ID: <200008030228.TAA21382@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv21360 Modified Files: methodobject.h Log Message: Added #define for oldest version of argument calling Index: methodobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/methodobject.h,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** methodobject.h 2000/07/09 03:09:55 2.20 --- methodobject.h 2000/08/03 02:28:54 2.21 *************** *** 51,54 **** --- 51,55 ---- /* Flag passed to newmethodobject */ + #define METH_OLDARGS 0x0000 #define METH_VARARGS 0x0001 #define METH_KEYWORDS 0x0002 From python-dev@python.org Thu Aug 3 03:34:47 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:34:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules cryptmodule.c,2.9,2.10 md5module.c,2.21,2.22 pwdmodule.c,1.21,1.22 readline.c,2.26,2.27 signalmodule.c,2.52,2.53 stropmodule.c,2.71,2.72 termios.c,2.13,2.14 threadmodule.c,2.36,2.37 timemodule.c,2.99,2.100 Message-ID: <200008030234.TAA21870@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv21741 Modified Files: cryptmodule.c md5module.c pwdmodule.c readline.c signalmodule.c stropmodule.c termios.c threadmodule.c timemodule.c Log Message: Use METH_OLDARGS instead of numeric constant 0 in method def. tables Index: cryptmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cryptmodule.c,v retrieving revision 2.9 retrieving revision 2.10 diff -C2 -r2.9 -r2.10 *** cryptmodule.c 2000/07/22 23:57:55 2.9 --- cryptmodule.c 2000/08/03 02:34:44 2.10 *************** *** 32,36 **** static PyMethodDef crypt_methods[] = { ! {"crypt", crypt_crypt, 0, crypt_crypt__doc__}, {NULL, NULL} /* sentinel */ }; --- 32,36 ---- static PyMethodDef crypt_methods[] = { ! {"crypt", crypt_crypt, METH_OLDARGS, crypt_crypt__doc__}, {NULL, NULL} /* sentinel */ }; Index: md5module.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v retrieving revision 2.21 retrieving revision 2.22 diff -C2 -r2.21 -r2.22 *** md5module.c 2000/08/03 02:06:16 2.21 --- md5module.c 2000/08/03 02:34:44 2.22 *************** *** 127,133 **** static PyMethodDef md5_methods[] = { ! {"update", (PyCFunction)md5_update, 0, update_doc}, ! {"digest", (PyCFunction)md5_digest, 0, digest_doc}, ! {"copy", (PyCFunction)md5_copy, 0, copy_doc}, {NULL, NULL} /* sentinel */ }; --- 127,136 ---- static PyMethodDef md5_methods[] = { ! {"update", (PyCFunction)md5_update, ! METH_OLDARGS, update_doc}, ! {"digest", (PyCFunction)md5_digest, ! METH_OLDARGS, digest_doc}, ! {"copy", (PyCFunction)md5_copy, ! METH_OLDARGS, copy_doc}, {NULL, NULL} /* sentinel */ }; Index: pwdmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** pwdmodule.c 2000/07/21 06:00:07 1.21 --- pwdmodule.c 2000/08/03 02:34:44 1.22 *************** *** 129,136 **** static PyMethodDef pwd_methods[] = { ! {"getpwuid", pwd_getpwuid, 0, pwd_getpwuid__doc__}, ! {"getpwnam", pwd_getpwnam, 0, pwd_getpwnam__doc__}, #ifdef HAVE_GETPWENT ! {"getpwall", pwd_getpwall, 0, pwd_getpwall__doc__}, #endif {NULL, NULL} /* sentinel */ --- 129,136 ---- static PyMethodDef pwd_methods[] = { ! {"getpwuid", pwd_getpwuid, METH_OLDARGS, pwd_getpwuid__doc__}, ! {"getpwnam", pwd_getpwnam, METH_OLDARGS, pwd_getpwnam__doc__}, #ifdef HAVE_GETPWENT ! {"getpwall", pwd_getpwall, METH_OLDARGS, pwd_getpwall__doc__}, #endif {NULL, NULL} /* sentinel */ Index: readline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/readline.c,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** readline.c 2000/08/03 02:06:16 2.26 --- readline.c 2000/08/03 02:34:44 2.27 *************** *** 325,329 **** { {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, ! {"get_line_buffer", get_line_buffer, 0, doc_get_line_buffer}, {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, --- 325,330 ---- { {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, ! {"get_line_buffer", get_line_buffer, ! METH_OLDARGS, doc_get_line_buffer}, {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, *************** *** 337,347 **** METH_VARARGS, get_history_length_doc}, {"set_completer", set_completer, METH_VARARGS, doc_set_completer}, ! {"get_begidx", get_begidx, 0, doc_get_begidx}, ! {"get_endidx", get_endidx, 0, doc_get_endidx}, ! {"set_completer_delims", set_completer_delims, METH_VARARGS, ! doc_set_completer_delims}, ! {"get_completer_delims", get_completer_delims, 0, ! doc_get_completer_delims}, {0, 0} }; --- 338,348 ---- METH_VARARGS, get_history_length_doc}, {"set_completer", set_completer, METH_VARARGS, doc_set_completer}, ! {"get_begidx", get_begidx, METH_OLDARGS, doc_get_begidx}, ! {"get_endidx", get_endidx, METH_OLDARGS, doc_get_endidx}, ! {"set_completer_delims", set_completer_delims, ! METH_VARARGS, doc_set_completer_delims}, ! {"get_completer_delims", get_completer_delims, ! METH_OLDARGS, doc_get_completer_delims}, {0, 0} }; Index: signalmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/signalmodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** signalmodule.c 2000/07/25 12:56:37 2.52 --- signalmodule.c 2000/08/03 02:34:44 2.53 *************** *** 281,293 **** static PyMethodDef signal_methods[] = { #ifdef HAVE_ALARM ! {"alarm", signal_alarm, 0, alarm_doc}, #endif ! {"signal", signal_signal, 0, signal_doc}, ! {"getsignal", signal_getsignal, 0, getsignal_doc}, #ifdef HAVE_PAUSE ! {"pause", signal_pause, 0, pause_doc}, #endif ! {"default_int_handler", signal_default_int_handler, 0, ! default_int_handler_doc}, {NULL, NULL} /* sentinel */ }; --- 281,293 ---- static PyMethodDef signal_methods[] = { #ifdef HAVE_ALARM ! {"alarm", signal_alarm, METH_OLDARGS, alarm_doc}, #endif ! {"signal", signal_signal, METH_OLDARGS, signal_doc}, ! {"getsignal", signal_getsignal, METH_OLDARGS, getsignal_doc}, #ifdef HAVE_PAUSE ! {"pause", signal_pause, METH_OLDARGS, pause_doc}, #endif ! {"default_int_handler", signal_default_int_handler, ! METH_OLDARGS, default_int_handler_doc}, {NULL, NULL} /* sentinel */ }; Index: stropmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/stropmodule.c,v retrieving revision 2.71 retrieving revision 2.72 diff -C2 -r2.71 -r2.72 *** stropmodule.c 2000/08/03 02:06:16 2.71 --- stropmodule.c 2000/08/03 02:34:44 2.72 *************** *** 1161,1165 **** {"atol", strop_atol, METH_VARARGS, atol__doc__}, ! {"capitalize", strop_capitalize, 0, capitalize__doc__}, {"count", strop_count, METH_VARARGS, count__doc__}, --- 1161,1166 ---- {"atol", strop_atol, METH_VARARGS, atol__doc__}, ! {"capitalize", strop_capitalize, ! METH_OLDARGS, capitalize__doc__}, {"count", strop_count, METH_VARARGS, count__doc__}, *************** *** 1172,1177 **** {"joinfields", strop_joinfields, METH_VARARGS, joinfields__doc__}, ! {"lstrip", strop_lstrip, 0, lstrip__doc__}, ! {"lower", strop_lower, 0, lower__doc__}, {"maketrans", strop_maketrans, METH_VARARGS, maketrans__doc__}, --- 1173,1180 ---- {"joinfields", strop_joinfields, METH_VARARGS, joinfields__doc__}, ! {"lstrip", strop_lstrip, ! METH_OLDARGS, lstrip__doc__}, ! {"lower", strop_lower, ! METH_OLDARGS, lower__doc__}, {"maketrans", strop_maketrans, METH_VARARGS, maketrans__doc__}, *************** *** 1180,1193 **** {"rfind", strop_rfind, METH_VARARGS, rfind__doc__}, ! {"rstrip", strop_rstrip, 0, rstrip__doc__}, {"split", strop_splitfields, METH_VARARGS, splitfields__doc__}, {"splitfields", strop_splitfields, METH_VARARGS, splitfields__doc__}, ! {"strip", strop_strip, 0, strip__doc__}, ! {"swapcase", strop_swapcase, 0, swapcase__doc__}, {"translate", strop_translate, METH_VARARGS, translate__doc__}, ! {"upper", strop_upper, 0, upper__doc__}, {NULL, NULL} /* sentinel */ }; --- 1183,1200 ---- {"rfind", strop_rfind, METH_VARARGS, rfind__doc__}, ! {"rstrip", strop_rstrip, ! METH_OLDARGS, rstrip__doc__}, {"split", strop_splitfields, METH_VARARGS, splitfields__doc__}, {"splitfields", strop_splitfields, METH_VARARGS, splitfields__doc__}, ! {"strip", strop_strip, ! METH_OLDARGS, strip__doc__}, ! {"swapcase", strop_swapcase, ! METH_OLDARGS, swapcase__doc__}, {"translate", strop_translate, METH_VARARGS, translate__doc__}, ! {"upper", strop_upper, ! METH_OLDARGS, upper__doc__}, {NULL, NULL} /* sentinel */ }; Index: termios.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/termios.c,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** termios.c 2000/07/21 06:00:07 2.13 --- termios.c 2000/08/03 02:34:44 2.14 *************** *** 279,288 **** static PyMethodDef termios_methods[] = { ! {"tcgetattr", termios_tcgetattr, 0, termios_tcgetattr__doc__}, ! {"tcsetattr", termios_tcsetattr, 0, termios_tcsetattr__doc__}, ! {"tcsendbreak", termios_tcsendbreak, 0, termios_tcsendbreak__doc__}, ! {"tcdrain", termios_tcdrain, 0, termios_tcdrain__doc__}, ! {"tcflush", termios_tcflush, 0, termios_tcflush__doc__}, ! {"tcflow", termios_tcflow, 0, termios_tcflow__doc__}, {NULL, NULL} }; --- 279,294 ---- static PyMethodDef termios_methods[] = { ! {"tcgetattr", termios_tcgetattr, ! METH_OLDARGS, termios_tcgetattr__doc__}, ! {"tcsetattr", termios_tcsetattr, ! METH_OLDARGS, termios_tcsetattr__doc__}, ! {"tcsendbreak", termios_tcsendbreak, ! METH_OLDARGS, termios_tcsendbreak__doc__}, ! {"tcdrain", termios_tcdrain, ! METH_OLDARGS, termios_tcdrain__doc__}, ! {"tcflush", termios_tcflush, ! METH_OLDARGS, termios_tcflush__doc__}, ! {"tcflow", termios_tcflow, ! METH_OLDARGS, termios_tcflow__doc__}, {NULL, NULL} }; Index: threadmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/threadmodule.c,v retrieving revision 2.36 retrieving revision 2.37 diff -C2 -r2.36 -r2.37 *** threadmodule.c 2000/08/03 02:06:16 2.36 --- threadmodule.c 2000/08/03 02:34:44 2.37 *************** *** 142,151 **** static PyMethodDef lock_methods[] = { ! {"acquire_lock", (PyCFunction)lock_PyThread_acquire_lock, 0, acquire_doc}, ! {"acquire", (PyCFunction)lock_PyThread_acquire_lock, 0, acquire_doc}, ! {"release_lock", (PyCFunction)lock_PyThread_release_lock, 0, release_doc}, ! {"release", (PyCFunction)lock_PyThread_release_lock, 0, release_doc}, ! {"locked_lock", (PyCFunction)lock_locked_lock, 0, locked_doc}, ! {"locked", (PyCFunction)lock_locked_lock, 0, locked_doc}, {NULL, NULL} /* sentinel */ }; --- 142,157 ---- static PyMethodDef lock_methods[] = { ! {"acquire_lock", (PyCFunction)lock_PyThread_acquire_lock, ! METH_OLDARGS, acquire_doc}, ! {"acquire", (PyCFunction)lock_PyThread_acquire_lock, ! METH_OLDARGS, acquire_doc}, ! {"release_lock", (PyCFunction)lock_PyThread_release_lock, ! METH_OLDARGS, release_doc}, ! {"release", (PyCFunction)lock_PyThread_release_lock, ! METH_OLDARGS, release_doc}, ! {"locked_lock", (PyCFunction)lock_locked_lock, ! METH_OLDARGS, locked_doc}, ! {"locked", (PyCFunction)lock_locked_lock, ! METH_OLDARGS, locked_doc}, {NULL, NULL} /* sentinel */ }; *************** *** 344,357 **** METH_VARARGS, start_new_doc}, ! {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, 0, ! allocate_doc}, ! {"allocate", (PyCFunction)thread_PyThread_allocate_lock, 0, ! allocate_doc}, ! {"exit_thread", (PyCFunction)thread_PyThread_exit_thread, 0, ! exit_doc}, ! {"exit", (PyCFunction)thread_PyThread_exit_thread, 0, ! exit_doc}, ! {"get_ident", (PyCFunction)thread_get_ident, 0, ! get_ident_doc}, #ifndef NO_EXIT_PROG {"exit_prog", (PyCFunction)thread_PyThread_exit_prog}, --- 350,363 ---- METH_VARARGS, start_new_doc}, ! {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, ! METH_OLDARGS, allocate_doc}, ! {"allocate", (PyCFunction)thread_PyThread_allocate_lock, ! METH_OLDARGS, allocate_doc}, ! {"exit_thread", (PyCFunction)thread_PyThread_exit_thread, ! METH_OLDARGS, exit_doc}, ! {"exit", (PyCFunction)thread_PyThread_exit_thread, ! METH_OLDARGS, exit_doc}, ! {"get_ident", (PyCFunction)thread_get_ident, ! METH_OLDARGS, get_ident_doc}, #ifndef NO_EXIT_PROG {"exit_prog", (PyCFunction)thread_PyThread_exit_prog}, Index: timemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v retrieving revision 2.99 retrieving revision 2.100 diff -C2 -r2.99 -r2.100 *** timemodule.c 2000/08/03 02:06:16 2.99 --- timemodule.c 2000/08/03 02:34:44 2.100 *************** *** 492,504 **** static PyMethodDef time_methods[] = { ! {"time", time_time, 0, time_doc}, #ifdef HAVE_CLOCK ! {"clock", time_clock, 0, clock_doc}, #endif ! {"sleep", time_sleep, 0, sleep_doc}, ! {"gmtime", time_gmtime, 0, gmtime_doc}, ! {"localtime", time_localtime, 0, localtime_doc}, {"asctime", time_asctime, METH_VARARGS, asctime_doc}, ! {"ctime", time_ctime, 0, ctime_doc}, #ifdef HAVE_MKTIME {"mktime", time_mktime, METH_VARARGS, mktime_doc}, --- 492,504 ---- static PyMethodDef time_methods[] = { ! {"time", time_time, METH_OLDARGS, time_doc}, #ifdef HAVE_CLOCK ! {"clock", time_clock, METH_OLDARGS, clock_doc}, #endif ! {"sleep", time_sleep, METH_OLDARGS, sleep_doc}, ! {"gmtime", time_gmtime, METH_OLDARGS, gmtime_doc}, ! {"localtime", time_localtime, METH_OLDARGS, localtime_doc}, {"asctime", time_asctime, METH_VARARGS, asctime_doc}, ! {"ctime", time_ctime, METH_OLDARGS, ctime_doc}, #ifdef HAVE_MKTIME {"mktime", time_mktime, METH_VARARGS, mktime_doc}, From python-dev@python.org Thu Aug 3 04:59:48 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 2 Aug 2000 20:59:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.dsp,1.8.2.2,1.8.2.3 Message-ID: <200008030359.UAA01889@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv1869 Modified Files: Tag: cnri-16-start python16.dsp Log Message: Removed gcmodule.c and exceptions.c -- these files aren't in 1.6. Index: python16.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.dsp,v retrieving revision 1.8.2.2 retrieving revision 1.8.2.3 diff -C2 -r1.8.2.2 -r1.8.2.3 *** python16.dsp 2000/08/01 20:36:48 1.8.2.2 --- python16.dsp 2000/08/03 03:59:45 1.8.2.3 *************** *** 541,559 **** # Begin Source File - SOURCE=..\Python\exceptions.c - - !IF "$(CFG)" == "python16 - Win32 Release" - - !ELSEIF "$(CFG)" == "python16 - Win32 Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Release" - - !ENDIF - - # End Source File - # Begin Source File - SOURCE=..\Objects\fileobject.c --- 541,544 ---- *************** *** 647,664 **** SOURCE=..\Objects\funcobject.c - - !IF "$(CFG)" == "python16 - Win32 Release" - - !ELSEIF "$(CFG)" == "python16 - Win32 Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Release" - - !ENDIF - - # End Source File - # Begin Source File - SOURCE=..\Modules\gcmodule.c !IF "$(CFG)" == "python16 - Win32 Release" --- 632,635 ---- From python-dev@python.org Thu Aug 3 13:16:33 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 3 Aug 2000 05:16:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.21,1.22 Message-ID: <200008031216.FAA15766@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv15596 Modified Files: test_re.py Log Message: Comment out repeated-group test for the moment Index: test_re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** test_re.py 2000/08/03 02:06:45 1.21 --- test_re.py 2000/08/03 12:16:29 1.22 *************** *** 31,35 **** # Try nasty case that overflows the straightforward recursive # implementation of repeated groups. ! assert re.match('(x)*', 50000*'x').span() == (0, 50000) if verbose: --- 31,35 ---- # Try nasty case that overflows the straightforward recursive # implementation of repeated groups. ! #assert re.match('(x)*', 50000*'x').span() == (0, 50000) if verbose: From python-dev@python.org Thu Aug 3 16:41:50 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:41:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0201.txt,1.13,1.14 Message-ID: <200008031541.IAA01490@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1479 Modified Files: pep-0201.txt Log Message: This proposal has been accepted by the BDFL. Index: pep-0201.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0201.txt,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** pep-0201.txt 2000/07/31 16:52:52 1.13 --- pep-0201.txt 2000/08/03 15:41:47 1.14 *************** *** 4,8 **** Author: bwarsaw@beopen.com (Barry A. Warsaw) Python-Version: 2.0 ! Status: Draft Created: 13-Jul-2000 Post-History: 27-Jul-2000 --- 4,8 ---- Author: bwarsaw@beopen.com (Barry A. Warsaw) Python-Version: 2.0 ! Status: Accepted Created: 13-Jul-2000 Post-History: 27-Jul-2000 From python-dev@python.org Thu Aug 3 16:42:45 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:42:45 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.18,1.19 Message-ID: <200008031542.IAA01557@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1547 Modified Files: pep-0000.txt Log Message: PEP 201 has been accepted by the BDFL. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** pep-0000.txt 2000/07/31 20:20:52 1.18 --- pep-0000.txt 2000/08/03 15:42:42 1.19 *************** *** 22,26 **** 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! 201 pep-0201.txt Lockstep Iteration bwarsaw 202 pep-0202.txt List Comprehensions tim_one 203 pep-0203.txt Augmented Assignments twouters --- 22,26 ---- 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! [*] 201 pep-0201.txt Lockstep Iteration bwarsaw 202 pep-0202.txt List Comprehensions tim_one 203 pep-0203.txt Augmented Assignments twouters *************** *** 40,43 **** --- 40,46 ---- 217 pep-0217.txt Display Hook for Interactive Use moshez 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson + + + [*] denotes accepted proposals. From python-dev@python.org Thu Aug 3 16:45:33 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:45:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.173,2.174 Message-ID: <200008031545.IAA01906@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv1893 Modified Files: bltinmodule.c Log Message: Both PEP 201 Lockstep Iteration and SF patch #101030 have been accepted by the BDFL. builtin_zip(): New function to implement the zip() function described in the above proposal. zip_doc[]: Docstring for zip(). builtin_methods[]: added entry for zip() Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.173 retrieving revision 2.174 diff -C2 -r2.173 -r2.174 *** bltinmodule.c 2000/07/31 15:28:04 2.173 --- bltinmodule.c 2000/08/03 15:45:29 2.174 *************** *** 2151,2154 **** --- 2151,2209 ---- + static PyObject* + builtin_zip(PyObject *self, PyObject *args) + { + PyObject *ret; + int itemsize = PySequence_Length(args); + int i, j; + + if (itemsize < 1) { + PyErr_SetString(PyExc_TypeError, + "at least one sequence is required"); + return NULL; + } + /* args must be a tuple */ + assert(PyTuple_Check(args)); + + if ((ret = PyList_New(0)) == NULL) + return NULL; + + for (i = 0;; i++) { + PyObject *next = PyTuple_New(itemsize); + if (!next) { + Py_DECREF(ret); + return NULL; + } + for (j = 0; j < itemsize; j++) { + PyObject *seq = PyTuple_GET_ITEM(args, j); + PyObject *item = PySequence_GetItem(seq, i); + + if (!item) { + if (PyErr_ExceptionMatches(PyExc_IndexError)) { + PyErr_Clear(); + Py_DECREF(next); + return ret; + } + Py_DECREF(next); + Py_DECREF(ret); + return NULL; + } + PyTuple_SET_ITEM(next, j, item); + } + PyList_Append(ret, next); + Py_DECREF(next); + } + /* no return */ + } + + + static char zip_doc[] = + "zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\ + \n\ + Return a list of tuples, where each tuple contains the i-th element\n\ + from each of the argument sequences. The returned list is truncated\n\ + in length to the length of the shortest argument sequence."; + + static PyMethodDef builtin_methods[] = { {"__import__", builtin___import__, 1, import_doc}, *************** *** 2208,2211 **** --- 2263,2267 ---- {"vars", builtin_vars, 1, vars_doc}, {"xrange", builtin_xrange, 1, xrange_doc}, + {"zip", builtin_zip, 1, zip_doc}, {NULL, NULL}, }; From python-dev@python.org Thu Aug 3 16:46:20 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:46:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfuncs.tex,1.66,1.67 Message-ID: <200008031546.IAA01956@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv1947 Modified Files: libfuncs.tex Log Message: Both PEP 201 Lockstep Iteration and SF patch #101030 have been accepted by the BDFL. Added documentation for zip() builtin. Index: libfuncs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfuncs.tex,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -r1.66 -r1.67 *** libfuncs.tex 2000/06/30 16:06:19 1.66 --- libfuncs.tex 2000/08/03 15:46:17 1.67 *************** *** 704,705 **** --- 704,714 ---- used (e.g. when the loop is usually terminated with \keyword{break}). \end{funcdesc} + + \begin{funcdesc}{zip}{seq1\optional{, seq2\optional{, ...}}} + This function returns a list of tuples, where each tuple contains the + i-th element from each of the argument sequences. At least one + sequence is required, otherwise a \exception{TypeError} is raised. + The returned list is truncated in length to the length of the shortest + argument sequence. When the argument sequences are all of the same + length, \function{zip} is similar to \function{map} with an initial + None argument. From python-dev@python.org Thu Aug 3 16:48:10 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:48:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_b2.py,1.15,1.16 Message-ID: <200008031548.IAA02053@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2044 Modified Files: test_b2.py Log Message: Added testsuite for new zip() builtin. Index: test_b2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_b2.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** test_b2.py 1999/12/23 15:36:42 1.15 --- test_b2.py 2000/08/03 15:48:07 1.16 *************** *** 256,259 **** --- 256,295 ---- raise TestFailed, 'xrange(0,10,2)' + print 'zip' + a = (1, 2, 3) + b = (4, 5, 6) + t = [(1, 4), (2, 5), (3, 6)] + if zip(a, b) <> t: raise TestFailed, 'zip(a, b) - same size, both tuples' + b = [4, 5, 6] + if zip(a, b) <> t: raise TestFailed, 'zip(a, b) - same size, tuple/list' + b = (4, 5, 6, 7) + if zip(a, b) <> t: raise TestFailed, 'zip(a, b) - b is longer' + class I: + def __getitem__(self, i): + if i < 0 or i > 2: raise IndexError + return i + 4 + if zip(a, I()) <> t: raise TestFailed, 'zip(a, b) - b is instance' + exc = 0 + try: + zip() + except TypeError: + exc = 1 + except: + e = sys.exc_info()[0] + raise TestFailed, 'zip() - no args, expected TypeError, got', e + if not exc: + raise TestFailed, 'zip() - no args, missing expected TypeError' + + exc = 0 + try: + zip(None) + except TypeError: + exc = 1 + except: + e = sys.exc_info()[0] + raise TestFailed, 'zip(None) - expected TypeError, got', e + if not exc: + raise TestFailed, 'zip(None) - missing expected TypeError' + # Epilogue -- unlink the temp file From python-dev@python.org Thu Aug 3 16:48:33 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:48:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_builtin,1.3,1.4 Message-ID: <200008031548.IAA02087@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv2077 Modified Files: test_builtin Log Message: Added output for testsuite for new zip() builtin. Index: test_builtin =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_builtin,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_builtin 1997/08/22 21:27:40 1.3 --- test_builtin 2000/08/03 15:48:31 1.4 *************** *** 50,51 **** --- 50,52 ---- vars xrange + zip From python-dev@python.org Thu Aug 3 16:50:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:50:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test regrtest.py,1.19,1.20 Message-ID: <200008031550.IAA02360@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2351 Modified Files: regrtest.py Log Message: Added a -l/--leakdebug option which turns on DEBUG_LEAK if the gc module is importable. Index: regrtest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** regrtest.py 2000/07/16 12:04:31 1.19 --- regrtest.py 2000/08/03 15:50:37 1.20 *************** *** 9,18 **** Command line options: ! -v: verbose -- run tests in verbose mode with output to stdout ! -q: quiet -- don't print anything except if a test fails ! -g: generate -- write the output file for a test instead of comparing it ! -x: exclude -- arguments are tests to *exclude* ! -s: single -- run only a single test (see below) ! -r: random -- randomize test execution order If non-option arguments are present, they are names for tests to run, --- 9,19 ---- Command line options: ! -v: verbose -- run tests in verbose mode with output to stdout ! -q: quiet -- don't print anything except if a test fails ! -g: generate -- write the output file for a test instead of comparing it ! -x: exclude -- arguments are tests to *exclude* ! -s: single -- run only a single test (see below) ! -r: random -- randomize test execution order ! -l: leakdebug -- if cycle garbage collection is enabled, run with DEBUG_LEAK If non-option arguments are present, they are names for tests to run, *************** *** 40,44 **** def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0): """Execute a test suite. --- 41,45 ---- def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0, leakdebug=0): """Execute a test suite. *************** *** 57,68 **** files beginning with test_ will be used. ! The other six default arguments (verbose, quiet, generate, exclude, ! single, and randomize) allow programmers calling main() directly to ! set the values that would normally be set by flags on the command ! line. """ try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsr') except getopt.error, msg: print msg --- 58,70 ---- files beginning with test_ will be used. ! The other seven default arguments (verbose, quiet, generate, exclude, ! single, randomize, and leakdebug) allow programmers calling main() ! directly to set the values that would normally be set by flags on the ! command line. ! """ try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsrl') except getopt.error, msg: print msg *************** *** 76,79 **** --- 78,82 ---- if o == '-s': single = 1 if o == '-r': randomize = 1 + if o == '-l': leakdebug = 1 if generate and verbose: print "-g and -v don't go together!" *************** *** 82,85 **** --- 85,96 ---- bad = [] skipped = [] + + if leakdebug: + try: + import gc + except ImportError: + print 'cycle garbage collection not available' + else: + gc.set_debug(gc.DEBUG_LEAK) if single: From python-dev@python.org Thu Aug 3 16:52:32 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:52:32 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.92,1.93 Message-ID: <200008031552.IAA02483@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv2473 Modified Files: Makefile.in Log Message: TESTOPTS: Since gc is enabled by default now (this may change for the final release), run "make test" with gc's LEAK_DEBUG enabled. This uses the new -l flag to regrtest. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.92 retrieving revision 1.93 diff -C2 -r1.92 -r1.93 *** Makefile.in 2000/07/31 18:26:35 1.92 --- Makefile.in 2000/08/03 15:52:30 1.93 *************** *** 213,217 **** # Test the interpreter (twice, once without .pyc files, once with) ! TESTOPTS= TESTPROG= $(srcdir)/Lib/test/regrtest.py TESTPYTHON= ./python$(EXE) -tt --- 213,217 ---- # Test the interpreter (twice, once without .pyc files, once with) ! TESTOPTS= -l TESTPROG= $(srcdir)/Lib/test/regrtest.py TESTPYTHON= ./python$(EXE) -tt From python-dev@python.org Thu Aug 3 17:24:27 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:27 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include codecs.h,2.2,2.3 unicodeobject.h,2.16,2.17 Message-ID: <200008031624.JAA13125@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Include Modified Files: codecs.h unicodeobject.h Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: codecs.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/codecs.h,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** codecs.h 2000/05/09 19:51:10 2.2 --- codecs.h 2000/08/03 16:24:24 2.3 *************** *** 12,16 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 12,16 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/unicodeobject.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** unicodeobject.h 2000/07/22 23:30:03 2.16 --- unicodeobject.h 2000/08/03 16:24:24 2.17 *************** *** 8,12 **** Unicode Integration Proposal (see file Misc/unicode.txt). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. --- 8,12 ---- Unicode Integration Proposal (see file Misc/unicode.txt). ! Copyright (c) Corporation for National Research Initiatives. From python-dev@python.org Thu Aug 3 17:24:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python codecs.c,2.11,2.12 Message-ID: <200008031624.JAA13141@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Python Modified Files: codecs.c Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: codecs.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/codecs.c,v retrieving revision 2.11 retrieving revision 2.12 diff -C2 -r2.11 -r2.12 *** codecs.c 2000/07/22 18:47:25 2.11 --- codecs.c 2000/08/03 16:24:25 2.12 *************** *** 5,9 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 5,9 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ From python-dev@python.org Thu Aug 3 17:24:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _codecsmodule.c,2.4,2.5 unicodedata.c,2.3,2.4 unicodedatabase.c,2.2,2.3 unicodedatabase.h,2.2,2.3 Message-ID: <200008031624.JAA13150@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Modules Modified Files: _codecsmodule.c unicodedata.c unicodedatabase.c unicodedatabase.h Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: _codecsmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_codecsmodule.c,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** _codecsmodule.c 2000/07/21 06:00:06 2.4 --- _codecsmodule.c 2000/08/03 16:24:24 2.5 *************** *** 32,36 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 32,36 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodedata.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/unicodedata.c,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** unicodedata.c 2000/07/21 06:00:07 2.3 --- unicodedata.c 2000/08/03 16:24:24 2.4 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodedatabase.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/unicodedatabase.c,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** unicodedatabase.c 2000/03/31 17:26:09 2.2 --- unicodedatabase.c 2000/08/03 16:24:24 2.3 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodedatabase.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/unicodedatabase.h,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** unicodedatabase.h 2000/03/31 17:26:12 2.2 --- unicodedatabase.h 2000/08/03 16:24:25 2.3 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ From python-dev@python.org Thu Aug 3 17:24:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodectype.c,2.4,2.5 unicodeobject.c,2.53,2.54 Message-ID: <200008031624.JAA13145@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Objects Modified Files: unicodectype.c unicodeobject.c Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: unicodectype.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodectype.c,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** unicodectype.c 2000/07/06 13:57:38 2.4 --- unicodectype.c 2000/08/03 16:24:25 2.5 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. */ Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** unicodeobject.c 2000/07/31 15:28:04 2.53 --- unicodeobject.c 2000/08/03 16:24:25 2.54 *************** *** 5,9 **** Unicode Integration Proposal (see file Misc/unicode.txt). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. --- 5,9 ---- Unicode Integration Proposal (see file Misc/unicode.txt). ! Copyright (c) Corporation for National Research Initiatives. From python-dev@python.org Thu Aug 3 17:29:53 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 3 Aug 2000 09:29:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.5,1.6 Message-ID: <200008031629.JAA13749@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12492/Lib/test Modified Files: test_sre.py Log Message: -- added recursion limit (currently ~10,000 levels) -- improved error messages -- factored out SRE_COUNT; the same code is used by SRE_OP_REPEAT_ONE_TEMPLATE -- minor cleanups Index: test_sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** test_sre.py 2000/08/01 13:16:55 1.5 --- test_sre.py 2000/08/03 16:29:50 1.6 *************** *** 265,268 **** --- 265,278 ---- print 'Exception raised on flag', flags + if verbose: + print 'Test engine limitations' + + # Try nasty case that overflows the straightforward recursive + # implementation of repeated groups. + try: + assert sre.match('(x)*', 50000*'x').span() == (0, 50000) + except RuntimeError, v: + print v + from re_tests import * From python-dev@python.org Thu Aug 3 17:29:53 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 3 Aug 2000 09:29:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.31,2.32 sre.h,2.17,2.18 Message-ID: <200008031629.JAA13751@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12492/Modules Modified Files: _sre.c sre.h Log Message: -- added recursion limit (currently ~10,000 levels) -- improved error messages -- factored out SRE_COUNT; the same code is used by SRE_OP_REPEAT_ONE_TEMPLATE -- minor cleanups Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.31 retrieving revision 2.32 diff -C2 -r2.31 -r2.32 *** _sre.c 2000/08/01 22:47:49 2.31 --- _sre.c 2000/08/03 16:29:50 2.32 *************** *** 14,17 **** --- 14,19 ---- * 00-07-21 fl reset lastindex in scanner methods (0.9.6) * 00-08-01 fl fixes for 1.6b1 (0.9.8) + * 00-08-02 fl moved SRE_COUNT out of the match method + * 00-08-03 fl added recursion limit * * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. *************** *** 56,59 **** --- 58,64 ---- /* optional features */ + /* prevent run-away recursion (bad patterns on long strings) */ + #define USE_RECURSION_LIMIT 10000 + /* enables fast searching */ #define USE_FAST_SEARCH *************** *** 78,81 **** --- 83,87 ---- #define SRE_ERROR_ILLEGAL -1 /* illegal opcode */ #define SRE_ERROR_STATE -2 /* illegal state */ + #define SRE_ERROR_RECURSION_LIMIT -3 /* runaway recursion */ #define SRE_ERROR_MEMORY -9 /* out of memory */ *************** *** 211,234 **** static void - mark_init(SRE_STATE* state) - { - state->mark_stack = NULL; - state->mark_stack_size = state->mark_stack_base = 0; - } - - static void mark_fini(SRE_STATE* state) { ! #if 0 ! /* FIXME: debugging */ ! if (state->maxlevel > 0) ! printf("max %d\n", state->maxlevel); ! if (state->mark_stack_base > 0) ! printf("mark stack %d\n", state->mark_stack_base); ! #endif ! ! if (state->mark_stack) free(state->mark_stack); ! mark_init(state); } --- 217,227 ---- static void mark_fini(SRE_STATE* state) { ! if (state->mark_stack) { free(state->mark_stack); ! state->mark_stack = NULL; ! } ! state->mark_stack_size = state->mark_stack_base = 0; } *************** *** 305,308 **** --- 298,302 ---- #define SRE_CHAR unsigned char #define SRE_AT sre_at + #define SRE_COUNT sre_count #define SRE_MEMBER sre_member #define SRE_MATCH sre_match *************** *** 318,321 **** --- 312,316 ---- #undef SRE_MATCH #undef SRE_MEMBER + #undef SRE_COUNT #undef SRE_AT #undef SRE_CHAR *************** *** 325,328 **** --- 320,324 ---- #define SRE_CHAR Py_UNICODE #define SRE_AT sre_uat + #define SRE_COUNT sre_ucount #define SRE_MEMBER sre_umember #define SRE_MATCH sre_umatch *************** *** 395,405 **** switch (*set++) { - case SRE_OP_NEGATE: - ok = !ok; - break; - - case SRE_OP_FAILURE: - return !ok; - case SRE_OP_LITERAL: /* */ --- 391,394 ---- *************** *** 430,433 **** --- 419,429 ---- break; + case SRE_OP_NEGATE: + ok = !ok; + break; + + case SRE_OP_FAILURE: + return !ok; + default: /* internal error -- there's not much we can do about it *************** *** 438,445 **** } LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level) { ! /* check if string matches the given pattern. returns -1 for error, 0 for failure, and 1 for success */ --- 434,518 ---- } + LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level); + LOCAL(int) + SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, int maxcount, int level) + { + SRE_CODE chr; + SRE_CHAR* ptr = state->ptr; + SRE_CHAR* end = state->end; + int i; + + /* adjust end */ + if (maxcount < end - ptr && maxcount != 65535) + end = ptr + maxcount; + + switch (pattern[0]) { + + case SRE_OP_ANY: + /* repeated dot wildcard. */ + while (ptr < end && !SRE_IS_LINEBREAK(*ptr)) + ptr++; + break; + + case SRE_OP_ANY_ALL: + /* repeated dot wildcare. skip to the end of the target + string, and backtrack from there */ + ptr = end; + break; + + case SRE_OP_LITERAL: + /* repeated literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) *ptr == chr) + ptr++; + break; + + case SRE_OP_LITERAL_IGNORE: + /* repeated literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr) + ptr++; + break; + + case SRE_OP_NOT_LITERAL: + /* repeated non-literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) *ptr != chr) + ptr++; + break; + + case SRE_OP_NOT_LITERAL_IGNORE: + /* repeated non-literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr) + ptr++; + break; + + case SRE_OP_IN: + /* repeated set */ + while (ptr < end && SRE_MEMBER(pattern + 2, *ptr)) + ptr++; + break; + + default: + /* repeated single character pattern */ + while ((SRE_CHAR*) state->ptr < end) { + i = SRE_MATCH(state, pattern, level); + if (i < 0) + return i; + if (!i) + break; + } + return (SRE_CHAR*) state->ptr - ptr; + } + + return ptr - (SRE_CHAR*) state->ptr; + } + + LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level) { ! /* check if string matches the given pattern. returns <0 for error, 0 for failure, and 1 for success */ *************** *** 455,458 **** --- 528,536 ---- TRACE(("%8d: enter %d\n", PTR(ptr), level)); + #if defined(USE_RECURSION_LIMIT) + if (level > USE_RECURSION_LIMIT) + return SRE_ERROR_RECURSION_LIMIT; + #endif + if (pattern[0] == SRE_OP_INFO) { /* optimization info block */ *************** *** 466,473 **** } - /* FIXME: debugging */ - if (level > state->maxlevel) - state->maxlevel = level; - for (;;) { --- 544,547 ---- *************** *** 612,616 **** TRACE(("%8d: set lower(%c)\n", PTR(ptr), *ptr)); if (ptr >= end ! || !SRE_MEMBER(pattern+1, (SRE_CODE) state->lower(*ptr))) return 0; pattern += pattern[0]; --- 686,690 ---- TRACE(("%8d: set lower(%c)\n", PTR(ptr), *ptr)); if (ptr >= end ! || !SRE_MEMBER(pattern + 1, (SRE_CODE) state->lower(*ptr))) return 0; pattern += pattern[0]; *************** *** 675,693 **** /* <0=skip> code ... */ TRACE(("%8d: branch\n", PTR(ptr))); ! { ! lastmark = state->lastmark; ! while (pattern[0]) { ! TRACE(("%8d: try branch\n", PTR(ptr))); ! if (pattern[1] != SRE_OP_LITERAL || ! (ptr < end && (SRE_CODE) ptr[0] == pattern[2])) { ! state->ptr = ptr; ! i = SRE_MATCH(state, pattern + 1, level + 1); ! if (i) ! return i; ! } while (state->lastmark > lastmark) state->mark[state->lastmark--] = NULL; - pattern += pattern[0]; } } return 0; --- 749,779 ---- /* <0=skip> code ... */ TRACE(("%8d: branch\n", PTR(ptr))); ! lastmark = state->lastmark; ! while (pattern[0]) { ! SRE_CODE* code = pattern+1; ! TRACE(("%8d: try branch\n", PTR(ptr))); ! switch (code[0]) { ! case SRE_OP_IN: ! if (ptr >= end || !SRE_MEMBER(code + 2, ptr[0])) ! break; ! code += code[1] + 1; ! state->ptr = ptr + 1; ! goto branch; ! case SRE_OP_LITERAL: ! if (ptr >= end || (SRE_CODE) ptr[0] != code[1]) ! break; ! code += 2; ! state->ptr = ptr + 1; ! goto branch; ! default: ! state->ptr = ptr; ! branch: ! i = SRE_MATCH(state, code, level + 1); ! if (i) ! return i; while (state->lastmark > lastmark) state->mark[state->lastmark--] = NULL; } + pattern += pattern[0]; } return 0; *************** *** 708,806 **** if (ptr + pattern[1] > end) return 0; /* cannot match */ - - count = 0; - - switch (pattern[3]) { - - case SRE_OP_ANY: - /* repeated wildcard. */ - while (count < (int) pattern[2]) { - if (ptr >= end || SRE_IS_LINEBREAK(ptr[0])) - break; - ptr++; - count++; - } - break; - - case SRE_OP_ANY_ALL: - /* repeated wildcard. skip to the end of the target - string, and backtrack from there */ - if (ptr + pattern[1] > end) - return 0; /* cannot match */ - count = pattern[2]; - if (count > end - ptr) - count = end - ptr; - ptr += count; - break; - - case SRE_OP_LITERAL: - /* repeated literal */ - chr = pattern[4]; - while (count < (int) pattern[2]) { - if (ptr >= end || (SRE_CODE) ptr[0] != chr) - break; - ptr++; - count++; - } - break; - - case SRE_OP_LITERAL_IGNORE: - /* repeated literal */ - chr = pattern[4]; - while (count < (int) pattern[2]) { - if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) - break; - ptr++; - count++; - } - break; ! case SRE_OP_NOT_LITERAL: ! /* repeated non-literal */ ! chr = pattern[4]; ! while (count < (int) pattern[2]) { ! if (ptr >= end || (SRE_CODE) ptr[0] == chr) ! break; ! ptr++; ! count++; ! } ! break; ! ! case SRE_OP_NOT_LITERAL_IGNORE: ! /* repeated non-literal */ ! chr = pattern[4]; ! while (count < (int) pattern[2]) { ! if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) ! break; ! ptr++; ! count++; ! } ! break; ! case SRE_OP_IN: ! /* repeated set */ ! while (count < (int) pattern[2]) { ! if (ptr >= end || !SRE_MEMBER(pattern + 5, *ptr)) ! break; ! ptr++; ! count++; ! } ! break; ! default: ! /* repeated single character pattern */ ! state->ptr = ptr; ! while (count < (int) pattern[2]) { ! i = SRE_MATCH(state, pattern + 3, level + 1); ! if (i < 0) ! return i; ! if (!i) ! break; ! count++; ! } ! state->ptr = ptr; ! ptr += count; ! break; ! } /* when we arrive here, count contains the number of --- 794,805 ---- if (ptr + pattern[1] > end) return 0; /* cannot match */ ! state->ptr = ptr; ! count = SRE_COUNT(state, pattern + 3, pattern[2], level + 1); ! if (count < 0) ! return count; ! ptr += count; /* when we arrive here, count contains the number of *************** *** 905,908 **** --- 904,908 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 920,923 **** --- 920,924 ---- lastmark = state->lastmark; mark_save(state, 0, lastmark); + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 956,959 **** --- 957,961 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 979,982 **** --- 981,985 ---- TRACE(("%8d: match item (optional)\n", PTR(ptr))); rp->count = count; + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 995,999 **** } ! static int SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern) { --- 998,1002 ---- } ! LOCAL(int) SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern) { *************** *** 1221,1227 **** state->repeat = NULL; - /* FIXME: debugging */ - state->maxlevel = 0; - mark_fini(state); } --- 1224,1227 ---- *************** *** 1237,1240 **** --- 1237,1244 ---- void* ptr; + memset(state, 0, sizeof(SRE_STATE)); + + state->lastindex = -1; + /* get pointer to string buffer */ buffer = string->ob_type->tp_as_buffer; *************** *** 1301,1309 **** state->lower = sre_lower; - state->mark_stack = NULL; - state->mark_stack_base = 0; - - state_reset(state); - return string; } --- 1305,1308 ---- *************** *** 1335,1338 **** --- 1334,1359 ---- } + static void + pattern_error(int status) + { + switch (status) { + case SRE_ERROR_RECURSION_LIMIT: + PyErr_SetString( + PyExc_RuntimeError, + "maximum recursion limit exceeded" + ); + break; + case SRE_ERROR_MEMORY: + PyErr_NoMemory(); + break; + default: + /* other error codes indicate compiler/engine bugs */ + PyErr_SetString( + PyExc_RuntimeError, + "internal error in regular expression engine" + ); + } + } + static PyObject* pattern_new_match(PatternObject* pattern, SRE_STATE* state, int status) *************** *** 1384,1399 **** return (PyObject*) match; ! } else if (status < 0) { ! /* internal error */ ! PyErr_SetString( ! PyExc_RuntimeError, "internal error in regular expression engine" ! ); ! return NULL; } ! Py_INCREF(Py_None); ! return Py_None; } --- 1405,1419 ---- return (PyObject*) match; ! } else if (status == 0) { ! /* no match */ ! Py_INCREF(Py_None); ! return Py_None; } ! /* internal error */ ! pattern_error(status); ! return NULL; } *************** *** 1642,1650 **** break; ! /* internal error */ ! PyErr_SetString( ! PyExc_RuntimeError, ! "internal error in regular expression engine" ! ); goto error; --- 1662,1666 ---- break; ! pattern_error(status); goto error; Index: sre.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre.h,v retrieving revision 2.17 retrieving revision 2.18 diff -C2 -r2.17 -r2.18 *** sre.h 2000/08/01 21:05:41 2.17 --- sre.h 2000/08/03 16:29:50 2.18 *************** *** 75,80 **** /* hooks */ SRE_TOLOWER_HOOK lower; - /* debugging */ - int maxlevel; } SRE_STATE; --- 75,78 ---- From python-dev@python.org Thu Aug 3 17:29:53 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 3 Aug 2000 09:29:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_sre,1.8,1.9 Message-ID: <200008031629.JAA13756@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv12492/Lib/test/output Modified Files: test_sre Log Message: -- added recursion limit (currently ~10,000 levels) -- improved error messages -- factored out SRE_COUNT; the same code is used by SRE_OP_REPEAT_ONE_TEMPLATE -- minor cleanups Index: test_sre =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_sre,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** test_sre 2000/08/01 13:01:43 1.8 --- test_sre 2000/08/03 16:29:50 1.9 *************** *** 1 **** --- 1,2 ---- test_sre + maximum recursion limit exceeded From python-dev@python.org Thu Aug 3 17:35:03 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:35:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.54,2.54.2.1 Message-ID: <200008031635.JAA14253@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv14231 Modified Files: Tag: cnri-16-start unicodeobject.c Log Message: Add back #include "mymath.h" on the 1.6 branch because pyport.h doesn't yet exist in 1.6. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.54 retrieving revision 2.54.2.1 diff -C2 -r2.54 -r2.54.2.1 *** unicodeobject.c 2000/08/03 16:24:25 2.54 --- unicodeobject.c 2000/08/03 16:35:00 2.54.2.1 *************** *** 65,68 **** --- 65,69 ---- #include "Python.h" + #include "mymath.h" #include "unicodeobject.h" #include "ucnhash.h" From python-dev@python.org Thu Aug 3 17:42:16 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include abstract.h,2.25,2.26 Message-ID: <200008031642.JAA14860@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv14777/Include Modified Files: abstract.h Log Message: Remobe beopen/cnri/cwi copyrights, according to CNRI instructions. This doesn't change the copyright status for these files -- just the markings! Doing it on the main branch for these three files for which the HEAD revision was pushed back into 1.6. Index: abstract.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/abstract.h,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** abstract.h 2000/07/17 09:22:26 2.25 --- abstract.h 2000/08/03 16:42:14 2.26 *************** *** 5,18 **** #endif - /*********************************************************** - Copyright (c) 2000, BeOpen.com. - Copyright (c) 1995-2000, Corporation for National Research Initiatives. - Copyright (c) 1990-1995, Stichting Mathematisch Centrum. - All rights reserved. - - See the file "Misc/COPYRIGHT" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. - ******************************************************************/ - /* Abstract Object Interface (many thanks to Jim Fulton) */ --- 5,8 ---- From python-dev@python.org Thu Aug 3 17:42:16 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules socketmodule.c,1.125,1.126 Message-ID: <200008031642.JAA14852@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv14777/Modules Modified Files: socketmodule.c Log Message: Remobe beopen/cnri/cwi copyrights, according to CNRI instructions. This doesn't change the copyright status for these files -- just the markings! Doing it on the main branch for these three files for which the HEAD revision was pushed back into 1.6. Index: socketmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v retrieving revision 1.125 retrieving revision 1.126 diff -C2 -r1.125 -r1.126 *** socketmodule.c 2000/08/03 02:06:16 1.125 --- socketmodule.c 2000/08/03 16:42:13 1.126 *************** *** 1,12 **** - /*********************************************************** - Copyright (c) 2000, BeOpen.com. - Copyright (c) 1995-2000, Corporation for National Research Initiatives. - Copyright (c) 1990-1995, Stichting Mathematisch Centrum. - All rights reserved. - - See the file "Misc/COPYRIGHT" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. - ******************************************************************/ - /* Socket module */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:42:16 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.43,2.44 Message-ID: <200008031642.JAA14856@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv14777/Objects Modified Files: abstract.c Log Message: Remobe beopen/cnri/cwi copyrights, according to CNRI instructions. This doesn't change the copyright status for these files -- just the markings! Doing it on the main branch for these three files for which the HEAD revision was pushed back into 1.6. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.43 retrieving revision 2.44 diff -C2 -r2.43 -r2.44 *** abstract.c 2000/07/22 23:59:32 2.43 --- abstract.c 2000/08/03 16:42:14 2.44 *************** *** 1,12 **** - /*********************************************************** - Copyright (c) 2000, BeOpen.com. - Copyright (c) 1995-2000, Corporation for National Research Initiatives. - Copyright (c) 1990-1995, Stichting Mathematisch Centrum. - All rights reserved. - - See the file "Misc/COPYRIGHT" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. - ******************************************************************/ - /* Abstract Object Interface (many thanks to Jim Fulton) */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:48:10 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:48:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include Python.h,2.16,2.16.2.1 bitset.h,2.9,2.9.4.1 bufferobject.h,2.2,2.2.4.1 ceval.h,2.31,2.31.2.1 classobject.h,2.28,2.28.4.1 cobject.h,2.5,2.5.4.1 compile.h,2.19,2.19.4.1 dictobject.h,2.16,2.16.2.1 errcode.h,2.8,2.8.4.1 eval.h,2.10,2.10.4.1 fileobject.h,2.17,2.17.4.1 floatobject.h,2.13,2.13.2.1 frameobject.h,2.24,2.24.4.1 funcobject.h,2.16,2.16.4.1 grammar.h,2.10,2.10.4.1 import.h,2.22,2.22.4.1 intobject.h,2.17,2.17.2.1 intrcheck.h,2.5,2.5.4.1 listobject.h,2.17,2.17.2.1 longintrepr.h,2.5,2.5.4.1 longobject.h,2.13,2.13.2.1 marshal.h,2.6,2.6.4.1 metagrammar.h,2.7,2.7.4.1 methodobject.h,2.16,2.16.4.1 modsupport.h,2.28,2.28.2.1 moduleobject.h,2.13,2.13.4.1 mymalloc.h,2.19,2.19.2.1 myproto.h,2.6,2.6.4.1 myselect.h,2.10,2.10.2.1 mytime.h,2.4,2.4.4.1 node.h,2.12,2.12.4.1 object.h,2.54,2.54.2.1 objimpl.h,2.15,2.15.2.1 opcode.h,2.23,2.23.2.1 osdefs.h,2.10,2.10.4.1 parsetok.h,2.10,2.10.4.1 patchlevel.h,2.35.2.1,2.35.2.2 pgenheaders.h,2.17,2.17.4.1 pyd! ebug.h,2.11,2.11.2.1 pyerrors.h,2.35,2.35.2.1 pystate.h,2.9,2.9.4.1 pythonrun.h,2.26,2.26.4.1 pythread.h,2.13,2.13.4.1 rangeobject.h,2.11,2.11.4.1 stringobject.h,2.17,2.17.4.1 structmember.h,2.12,2.12.4.1 sysmodule.h,2.17,2.17.4.1 token.h,2.12,2.12.4.1 traceback.h,2.14,2.14.4.1 tupleobject.h,2.20,2.20.2.1 Message-ID: <200008031648.JAA15532@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv15472 Modified Files: Tag: cnri-16-start Python.h bitset.h bufferobject.h ceval.h classobject.h cobject.h compile.h dictobject.h errcode.h eval.h fileobject.h floatobject.h frameobject.h funcobject.h grammar.h import.h intobject.h intrcheck.h listobject.h longintrepr.h longobject.h marshal.h metagrammar.h methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h myselect.h mytime.h node.h object.h objimpl.h opcode.h osdefs.h parsetok.h patchlevel.h pgenheaders.h pydebug.h pyerrors.h pystate.h pythonrun.h pythread.h rangeobject.h stringobject.h structmember.h sysmodule.h token.h traceback.h tupleobject.h Log Message: Remove CWI notice per CNRI instructions. Index: Python.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/Python.h,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** Python.h 2000/05/08 13:35:17 2.16 --- Python.h 2000/08/03 16:48:06 2.16.2.1 *************** *** 3,37 **** /* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include nearly all Python header files */ --- 3,6 ---- Index: bitset.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/bitset.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** bitset.h 1996/10/25 14:37:47 2.9 --- bitset.h 2000/08/03 16:48:06 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Bitset interface */ --- 5,8 ---- Index: bufferobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/bufferobject.h,v retrieving revision 2.2 retrieving revision 2.2.4.1 diff -C2 -r2.2 -r2.2.4.1 *** bufferobject.h 1998/12/04 18:47:51 2.2 --- bufferobject.h 2000/08/03 16:48:06 2.2.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Buffer object interface */ --- 5,8 ---- Index: ceval.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/ceval.h,v retrieving revision 2.31 retrieving revision 2.31.2.1 diff -C2 -r2.31 -r2.31.2.1 *** ceval.h 2000/05/08 14:04:54 2.31 --- ceval.h 2000/08/03 16:48:06 2.31.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface to random parts in ceval.c */ --- 5,8 ---- Index: classobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/classobject.h,v retrieving revision 2.28 retrieving revision 2.28.4.1 diff -C2 -r2.28 -r2.28.4.1 *** classobject.h 1998/12/04 18:47:53 2.28 --- classobject.h 2000/08/03 16:48:06 2.28.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Class object interface */ --- 5,8 ---- Index: cobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/cobject.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** cobject.h 1998/12/04 18:47:54 2.5 --- cobject.h 2000/08/03 16:48:06 2.5.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* C objects to be exported from one extension module to another. --- 5,8 ---- Index: compile.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/compile.h,v retrieving revision 2.19 retrieving revision 2.19.4.1 diff -C2 -r2.19 -r2.19.4.1 *** compile.h 1998/12/04 18:47:55 2.19 --- compile.h 2000/08/03 16:48:06 2.19.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Definitions for bytecode */ --- 5,8 ---- Index: dictobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/dictobject.h,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** dictobject.h 2000/03/30 22:27:28 2.16 --- dictobject.h 2000/08/03 16:48:06 2.16.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Dictionary object type -- mapping from hashable object to object */ --- 5,8 ---- Index: errcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/errcode.h,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** errcode.h 1998/04/09 21:37:20 2.8 --- errcode.h 2000/08/03 16:48:06 2.8.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Error codes passed around between file input, tokenizer, parser and interpreter. This is necessary so we can turn them into Python --- 5,8 ---- Index: eval.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/eval.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** eval.h 1998/12/04 18:47:58 2.10 --- eval.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface to execute compiled code */ --- 5,8 ---- Index: fileobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/fileobject.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** fileobject.h 1998/12/04 18:47:59 2.17 --- fileobject.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* File object interface */ --- 5,8 ---- Index: floatobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/floatobject.h,v retrieving revision 2.13 retrieving revision 2.13.2.1 diff -C2 -r2.13 -r2.13.2.1 *** floatobject.h 1999/10/12 19:54:34 2.13 --- floatobject.h 2000/08/03 16:48:06 2.13.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Float object interface */ --- 5,8 ---- Index: frameobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/frameobject.h,v retrieving revision 2.24 retrieving revision 2.24.4.1 diff -C2 -r2.24 -r2.24.4.1 *** frameobject.h 1998/12/04 18:48:01 2.24 --- frameobject.h 2000/08/03 16:48:06 2.24.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Frame object interface */ --- 5,8 ---- Index: funcobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/funcobject.h,v retrieving revision 2.16 retrieving revision 2.16.4.1 diff -C2 -r2.16 -r2.16.4.1 *** funcobject.h 1998/12/04 18:48:02 2.16 --- funcobject.h 2000/08/03 16:48:06 2.16.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Function object interface */ --- 5,8 ---- Index: grammar.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/grammar.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** grammar.h 1997/08/12 14:57:08 2.10 --- grammar.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Grammar interface */ --- 5,8 ---- Index: import.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/import.h,v retrieving revision 2.22 retrieving revision 2.22.4.1 diff -C2 -r2.22 -r2.22.4.1 *** import.h 1999/01/04 16:39:38 2.22 --- import.h 2000/08/03 16:48:06 2.22.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module definition and import interface */ --- 5,8 ---- Index: intobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/intobject.h,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** intobject.h 2000/04/05 20:11:08 2.17 --- intobject.h 2000/08/03 16:48:06 2.17.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Integer object interface */ --- 5,8 ---- Index: intrcheck.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/intrcheck.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** intrcheck.h 1998/12/04 18:48:04 2.5 --- intrcheck.h 2000/08/03 16:48:06 2.5.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - extern DL_IMPORT(int) PyOS_InterruptOccurred Py_PROTO((void)); extern DL_IMPORT(void) PyOS_InitInterrupts Py_PROTO((void)); --- 5,8 ---- Index: listobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/listobject.h,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** listobject.h 2000/03/01 15:06:53 2.17 --- listobject.h 2000/08/03 16:48:06 2.17.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* List object interface */ --- 5,8 ---- Index: longintrepr.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/longintrepr.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** longintrepr.h 1998/12/04 18:48:06 2.5 --- longintrepr.h 2000/08/03 16:48:06 2.5.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This is published for the benefit of "friend" marshal.c only. */ --- 5,8 ---- Index: longobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/longobject.h,v retrieving revision 2.13 retrieving revision 2.13.2.1 diff -C2 -r2.13 -r2.13.2.1 *** longobject.h 2000/04/05 20:11:08 2.13 --- longobject.h 2000/08/03 16:48:06 2.13.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Long (arbitrary precision) integer object interface */ --- 5,8 ---- Index: marshal.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/marshal.h,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** marshal.h 1998/12/04 18:48:07 2.6 --- marshal.h 2000/08/03 16:48:06 2.6.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface for marshal.c */ --- 5,8 ---- Index: metagrammar.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/metagrammar.h,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** metagrammar.h 1996/10/25 14:38:29 2.7 --- metagrammar.h 2000/08/03 16:48:06 2.7.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #define MSTART 256 #define RULE 257 --- 5,8 ---- Index: methodobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/methodobject.h,v retrieving revision 2.16 retrieving revision 2.16.4.1 diff -C2 -r2.16 -r2.16.4.1 *** methodobject.h 1998/12/04 18:48:08 2.16 --- methodobject.h 2000/08/03 16:48:06 2.16.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Method object interface */ --- 5,8 ---- Index: modsupport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/modsupport.h,v retrieving revision 2.28 retrieving revision 2.28.2.1 diff -C2 -r2.28 -r2.28.2.1 *** modsupport.h 2000/03/29 01:46:45 2.28 --- modsupport.h 2000/08/03 16:48:06 2.28.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module support interface */ --- 5,8 ---- Index: moduleobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/moduleobject.h,v retrieving revision 2.13 retrieving revision 2.13.4.1 diff -C2 -r2.13 -r2.13.4.1 *** moduleobject.h 1999/02/15 14:43:11 2.13 --- moduleobject.h 2000/08/03 16:48:06 2.13.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module object interface */ --- 5,8 ---- Index: mymalloc.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/mymalloc.h,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** mymalloc.h 2000/05/05 15:36:09 2.19 --- mymalloc.h 2000/08/03 16:48:06 2.19.2.1 *************** *** 1,35 **** #ifndef Py_MYMALLOC_H #define Py_MYMALLOC_H - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Lowest-level memory allocation interface */ --- 1,4 ---- Index: myproto.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/myproto.h,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** myproto.h 1997/05/07 23:50:40 2.6 --- myproto.h 2000/08/03 16:48:06 2.6.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifdef HAVE_PROTOTYPES #define Py_PROTO(x) x --- 5,8 ---- Index: myselect.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/myselect.h,v retrieving revision 2.10 retrieving revision 2.10.2.1 diff -C2 -r2.10 -r2.10.2.1 *** myselect.h 2000/04/24 15:12:54 2.10 --- myselect.h 2000/08/03 16:48:06 2.10.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include file for users of select() */ --- 5,8 ---- Index: mytime.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/mytime.h,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** mytime.h 1996/10/25 14:38:42 2.4 --- mytime.h 2000/08/03 16:48:06 2.4.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include file instead of and/or */ --- 5,8 ---- Index: node.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/node.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** node.h 1998/12/04 18:48:11 2.12 --- node.h 2000/08/03 16:48:06 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parse tree node interface */ --- 5,8 ---- Index: object.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/object.h,v retrieving revision 2.54 retrieving revision 2.54.2.1 diff -C2 -r2.54 -r2.54.2.1 *** object.h 2000/04/24 15:40:45 2.54 --- object.h 2000/08/03 16:48:06 2.54.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Object and type object interface */ --- 5,8 ---- Index: objimpl.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/objimpl.h,v retrieving revision 2.15 retrieving revision 2.15.2.1 diff -C2 -r2.15 -r2.15.2.1 *** objimpl.h 2000/05/03 23:44:23 2.15 --- objimpl.h 2000/08/03 16:48:06 2.15.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "mymalloc.h" --- 5,8 ---- Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.23 retrieving revision 2.23.2.1 diff -C2 -r2.23 -r2.23.2.1 *** opcode.h 2000/03/29 00:10:03 2.23 --- opcode.h 2000/08/03 16:48:06 2.23.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Instruction opcodes for compiled code */ --- 5,8 ---- Index: osdefs.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/osdefs.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** osdefs.h 1997/12/05 21:39:25 2.10 --- osdefs.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Operating system dependencies */ --- 5,8 ---- Index: parsetok.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/parsetok.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** parsetok.h 1998/12/04 18:48:14 2.10 --- parsetok.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser-tokenizer link interface */ --- 5,8 ---- Index: patchlevel.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/patchlevel.h,v retrieving revision 2.35.2.1 retrieving revision 2.35.2.2 diff -C2 -r2.35.2.1 -r2.35.2.2 *** patchlevel.h 2000/08/01 16:42:32 2.35.2.1 --- patchlevel.h 2000/08/03 16:48:06 2.35.2.2 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Newfangled version identification scheme. --- 1,2 ---- Index: pgenheaders.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pgenheaders.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** pgenheaders.h 1998/12/04 18:48:15 2.17 --- pgenheaders.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include files and extern declarations used by most of the parser. */ --- 5,8 ---- Index: pydebug.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pydebug.h,v retrieving revision 2.11 retrieving revision 2.11.2.1 diff -C2 -r2.11 -r2.11.2.1 *** pydebug.h 2000/05/01 17:51:41 2.11 --- pydebug.h 2000/08/03 16:48:06 2.11.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifndef Py_PYDEBUG_H #define Py_PYDEBUG_H --- 1,2 ---- Index: pyerrors.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyerrors.h,v retrieving revision 2.35 retrieving revision 2.35.2.1 diff -C2 -r2.35 -r2.35.2.1 *** pyerrors.h 2000/03/10 22:33:32 2.35 --- pyerrors.h 2000/08/03 16:48:06 2.35.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Error handling definitions */ --- 5,8 ---- Index: pystate.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pystate.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** pystate.h 1998/12/21 20:21:19 2.9 --- pystate.h 2000/08/03 16:48:06 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread and interpreter state structures and their interfaces */ --- 5,8 ---- Index: pythonrun.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v retrieving revision 2.26 retrieving revision 2.26.4.1 diff -C2 -r2.26 -r2.26.4.1 *** pythonrun.h 1998/12/04 18:48:18 2.26 --- pythonrun.h 2000/08/03 16:48:06 2.26.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interfaces to parse and execute pieces of python code */ --- 5,8 ---- Index: pythread.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythread.h,v retrieving revision 2.13 retrieving revision 2.13.4.1 diff -C2 -r2.13 -r2.13.4.1 *** pythread.h 1999/03/24 19:02:09 2.13 --- pythread.h 2000/08/03 16:48:06 2.13.4.1 *************** *** 2,36 **** #define Py_PYTHREAD_H - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #define NO_EXIT_PROG /* don't define PyThread_exit_prog() */ /* (the result is no use of signals on SGI) */ --- 2,5 ---- Index: rangeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/rangeobject.h,v retrieving revision 2.11 retrieving revision 2.11.4.1 diff -C2 -r2.11 -r2.11.4.1 *** rangeobject.h 1998/12/04 18:48:19 2.11 --- rangeobject.h 2000/08/03 16:48:06 2.11.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Range object interface */ --- 1,2 ---- Index: stringobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/stringobject.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** stringobject.h 1998/12/04 18:48:21 2.17 --- stringobject.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* String object interface */ --- 5,8 ---- Index: structmember.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/structmember.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** structmember.h 1998/12/04 18:48:22 2.12 --- structmember.h 2000/08/03 16:48:06 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface to map C struct members to Python object attributes */ --- 5,8 ---- Index: sysmodule.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/sysmodule.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** sysmodule.h 1998/12/04 18:48:22 2.17 --- sysmodule.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* System module interface */ --- 5,8 ---- Index: token.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/token.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** token.h 1998/12/04 18:48:23 2.12 --- token.h 2000/08/03 16:48:06 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Token types */ --- 5,8 ---- Index: traceback.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/traceback.h,v retrieving revision 2.14 retrieving revision 2.14.4.1 diff -C2 -r2.14 -r2.14.4.1 *** traceback.h 1998/12/04 18:48:24 2.14 --- traceback.h 2000/08/03 16:48:06 2.14.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Traceback interface */ --- 5,8 ---- Index: tupleobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/tupleobject.h,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** tupleobject.h 2000/03/01 15:06:53 2.20 --- tupleobject.h 2000/08/03 16:48:06 2.20.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tuple object interface */ --- 5,8 ---- From python-dev@python.org Thu Aug 3 17:48:55 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:48:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects bufferobject.c,2.7,2.7.2.1 classobject.c,2.86,2.86.2.1 cobject.c,2.8,2.8.2.1 complexobject.c,2.24,2.24.2.1 dictobject.c,2.52,2.52.2.1 fileobject.c,2.73,2.73.2.1 floatobject.c,2.57,2.57.2.1 frameobject.c,2.39,2.39.2.1 funcobject.c,2.20,2.20.2.1 intobject.c,2.42,2.42.2.1 listobject.c,2.69,2.69.2.1 longobject.c,1.57,1.57.2.1 methodobject.c,2.26,2.26.2.1 moduleobject.c,2.25,2.25.2.1 object.c,2.70,2.70.2.1 rangeobject.c,2.12,2.12.2.1 stringobject.c,2.65,2.65.2.1 tupleobject.c,2.33,2.33.2.1 typeobject.c,2.12,2.12.4.1 xxobject.c,2.15,2.15.2.1 Message-ID: <200008031648.JAA15606@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv15573 Modified Files: Tag: cnri-16-start bufferobject.c classobject.c cobject.c complexobject.c dictobject.c fileobject.c floatobject.c frameobject.c funcobject.c intobject.c listobject.c longobject.c methodobject.c moduleobject.c object.c rangeobject.c stringobject.c tupleobject.c typeobject.c xxobject.c Log Message: Remove CWI notice per CNRI instructions. Index: bufferobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/bufferobject.c,v retrieving revision 2.7 retrieving revision 2.7.2.1 diff -C2 -r2.7 -r2.7.2.1 *** bufferobject.c 2000/05/03 23:44:34 2.7 --- bufferobject.c 2000/08/03 16:48:51 2.7.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Buffer object implementation */ --- 1,2 ---- Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.86 retrieving revision 2.86.2.1 diff -C2 -r2.86 -r2.86.2.1 *** classobject.c 2000/05/03 23:44:34 2.86 --- classobject.c 2000/08/03 16:48:51 2.86.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Class object implementation */ --- 1,2 ---- Index: cobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/cobject.c,v retrieving revision 2.8 retrieving revision 2.8.2.1 diff -C2 -r2.8 -r2.8.2.1 *** cobject.c 2000/05/03 23:44:34 2.8 --- cobject.c 2000/08/03 16:48:51 2.8.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Wrap void* pointers to be passed between C modules */ --- 1,2 ---- Index: complexobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/complexobject.c,v retrieving revision 2.24 retrieving revision 2.24.2.1 diff -C2 -r2.24 -r2.24.2.1 *** complexobject.c 2000/05/03 23:44:34 2.24 --- complexobject.c 2000/08/03 16:48:51 2.24.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Complex object implementation */ --- 1,2 ---- Index: dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.52 retrieving revision 2.52.2.1 diff -C2 -r2.52 -r2.52.2.1 *** dictobject.c 2000/05/03 23:44:34 2.52 --- dictobject.c 2000/08/03 16:48:51 2.52.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Dictionary object implementation using a hash table */ --- 1,2 ---- Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.73 retrieving revision 2.73.2.1 diff -C2 -r2.73 -r2.73.2.1 *** fileobject.c 2000/05/03 23:44:34 2.73 --- fileobject.c 2000/08/03 16:48:51 2.73.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* File object implementation */ --- 1,2 ---- Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.57 retrieving revision 2.57.2.1 diff -C2 -r2.57 -r2.57.2.1 *** floatobject.c 2000/05/03 23:44:34 2.57 --- floatobject.c 2000/08/03 16:48:51 2.57.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Float object implementation */ --- 1,2 ---- Index: frameobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/frameobject.c,v retrieving revision 2.39 retrieving revision 2.39.2.1 diff -C2 -r2.39 -r2.39.2.1 *** frameobject.c 2000/05/03 23:44:34 2.39 --- frameobject.c 2000/08/03 16:48:51 2.39.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Frame object implementation */ --- 1,2 ---- Index: funcobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/funcobject.c,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** funcobject.c 2000/05/03 23:44:35 2.20 --- funcobject.c 2000/08/03 16:48:51 2.20.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Function object implementation */ --- 1,2 ---- Index: intobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/intobject.c,v retrieving revision 2.42 retrieving revision 2.42.2.1 diff -C2 -r2.42 -r2.42.2.1 *** intobject.c 2000/05/09 14:27:48 2.42 --- intobject.c 2000/08/03 16:48:51 2.42.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Integer object implementation */ --- 1,2 ---- Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.69 retrieving revision 2.69.2.1 diff -C2 -r2.69 -r2.69.2.1 *** listobject.c 2000/05/03 23:44:35 2.69 --- listobject.c 2000/08/03 16:48:51 2.69.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* List object implementation */ --- 1,2 ---- Index: longobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/longobject.c,v retrieving revision 1.57 retrieving revision 1.57.2.1 diff -C2 -r1.57 -r1.57.2.1 *** longobject.c 2000/05/03 23:44:35 1.57 --- longobject.c 2000/08/03 16:48:51 1.57.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Long (arbitrary precision) integer object implementation */ --- 1,2 ---- Index: methodobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/methodobject.c,v retrieving revision 2.26 retrieving revision 2.26.2.1 diff -C2 -r2.26 -r2.26.2.1 *** methodobject.c 2000/05/03 23:44:35 2.26 --- methodobject.c 2000/08/03 16:48:51 2.26.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Method object implementation */ --- 1,2 ---- Index: moduleobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/moduleobject.c,v retrieving revision 2.25 retrieving revision 2.25.2.1 diff -C2 -r2.25 -r2.25.2.1 *** moduleobject.c 2000/05/03 23:44:35 2.25 --- moduleobject.c 2000/08/03 16:48:51 2.25.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module object implementation */ --- 1,2 ---- Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.70 retrieving revision 2.70.2.1 diff -C2 -r2.70 -r2.70.2.1 *** object.c 2000/05/03 23:44:35 2.70 --- object.c 2000/08/03 16:48:51 2.70.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Generic object operations; and implementation of None (NoObject) */ --- 1,2 ---- Index: rangeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v retrieving revision 2.12 retrieving revision 2.12.2.1 diff -C2 -r2.12 -r2.12.2.1 *** rangeobject.c 2000/05/03 23:44:35 2.12 --- rangeobject.c 2000/08/03 16:48:51 2.12.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Range object implementation */ --- 1,2 ---- Index: stringobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v retrieving revision 2.65 retrieving revision 2.65.2.1 diff -C2 -r2.65 -r2.65.2.1 *** stringobject.c 2000/05/08 14:08:05 2.65 --- stringobject.c 2000/08/03 16:48:51 2.65.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* String object implementation */ --- 1,2 ---- Index: tupleobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/tupleobject.c,v retrieving revision 2.33 retrieving revision 2.33.2.1 diff -C2 -r2.33 -r2.33.2.1 *** tupleobject.c 2000/05/03 23:44:36 2.33 --- tupleobject.c 2000/08/03 16:48:51 2.33.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tuple object implementation */ --- 1,2 ---- Index: typeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** typeobject.c 1997/06/02 14:43:07 2.12 --- typeobject.c 2000/08/03 16:48:51 2.12.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Type object implementation */ --- 1,2 ---- Index: xxobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/xxobject.c,v retrieving revision 2.15 retrieving revision 2.15.2.1 diff -C2 -r2.15 -r2.15.2.1 *** xxobject.c 2000/05/03 23:44:36 2.15 --- xxobject.c 2000/08/03 16:48:51 2.15.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Use this file as a template to start implementing a new object type. If your objects will be called foobar, start by copying this file to --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:49:24 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:49:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser acceler.c,2.12,2.12.4.1 assert.h,2.7,2.7.4.1 bitset.c,2.7,2.7.4.1 firstsets.c,2.7,2.7.4.1 grammar.c,2.13,2.13.4.1 grammar1.c,2.8,2.8.4.1 intrcheck.c,2.30,2.30.4.1 listnode.c,2.9,2.9.4.1 metagrammar.c,2.7,2.7.4.1 myreadline.c,2.17,2.17.2.1 node.c,2.7,2.7.4.1 parser.c,2.10,2.10.4.1 parser.h,2.9,2.9.4.1 parsetok.c,2.16,2.16.2.1 pgen.c,2.12,2.12.4.1 pgen.h,2.9,2.9.4.1 pgenmain.c,2.16,2.16.2.1 printgrammar.c,2.8,2.8.4.1 tokenizer.c,2.41,2.41.2.1 tokenizer.h,2.12,2.12.4.1 Message-ID: <200008031649.JAA15770@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv15733 Modified Files: Tag: cnri-16-start acceler.c assert.h bitset.c firstsets.c grammar.c grammar1.c intrcheck.c listnode.c metagrammar.c myreadline.c node.c parser.c parser.h parsetok.c pgen.c pgen.h pgenmain.c printgrammar.c tokenizer.c tokenizer.h Log Message: Remove CWI notice per CNRI instructions. Index: acceler.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/acceler.c,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** acceler.c 1997/08/02 03:02:25 2.12 --- acceler.c 2000/08/03 16:49:21 2.12.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser accelerator module */ --- 1,2 ---- Index: assert.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/assert.h,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** assert.h 1996/10/25 14:37:45 2.7 --- assert.h 2000/08/03 16:49:21 2.7.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifdef MPW /* This is for MPW's File command */ --- 5,8 ---- Index: bitset.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/bitset.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** bitset.c 1997/04/29 21:02:21 2.7 --- bitset.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Bitset primitives used by the parser generator */ --- 1,2 ---- Index: firstsets.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/firstsets.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** firstsets.c 1997/04/29 21:02:24 2.7 --- firstsets.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Computation of FIRST stets */ --- 1,2 ---- Index: grammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/grammar.c,v retrieving revision 2.13 retrieving revision 2.13.4.1 diff -C2 -r2.13 -r2.13.4.1 *** grammar.c 1998/04/10 22:09:36 2.13 --- grammar.c 2000/08/03 16:49:21 2.13.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Grammar implementation */ --- 1,2 ---- Index: grammar1.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/grammar1.c,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** grammar1.c 1997/04/29 21:02:31 2.8 --- grammar1.c 2000/08/03 16:49:21 2.8.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Grammar subroutines needed by parser */ --- 1,2 ---- Index: intrcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/intrcheck.c,v retrieving revision 2.30 retrieving revision 2.30.4.1 diff -C2 -r2.30 -r2.30.4.1 *** intrcheck.c 1998/12/04 18:50:20 2.30 --- intrcheck.c 2000/08/03 16:49:21 2.30.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Check for interrupts */ --- 1,2 ---- Index: listnode.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/listnode.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** listnode.c 1997/04/29 21:02:37 2.9 --- listnode.c 2000/08/03 16:49:21 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* List a node on a file */ --- 1,2 ---- Index: metagrammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/metagrammar.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** metagrammar.c 1997/04/29 21:02:40 2.7 --- metagrammar.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "pgenheaders.h" #include "metagrammar.h" --- 1,2 ---- Index: myreadline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/myreadline.c,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** myreadline.c 2000/05/03 23:44:37 2.17 --- myreadline.c 2000/08/03 16:49:21 2.17.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Readline interface for tokenizer.c and [raw_]input() in bltinmodule.c. By default, or when stdin is not a tty device, we have a super --- 1,2 ---- Index: node.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/node.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** node.c 1997/04/29 21:02:42 2.7 --- node.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parse tree node implementation */ --- 1,2 ---- Index: parser.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parser.c,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** parser.c 1997/04/29 21:02:45 2.10 --- parser.c 2000/08/03 16:49:21 2.10.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser implementation */ --- 1,2 ---- Index: parser.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parser.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** parser.h 1997/04/29 21:02:47 2.9 --- parser.h 2000/08/03 16:49:21 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser interface */ --- 5,8 ---- Index: parsetok.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parsetok.c,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** parsetok.c 2000/05/03 23:44:37 2.16 --- parsetok.c 2000/08/03 16:49:21 2.16.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser-tokenizer link implementation */ --- 1,2 ---- Index: pgen.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/pgen.c,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** pgen.c 1998/04/10 22:09:39 2.12 --- pgen.c 2000/08/03 16:49:21 2.12.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser generator */ /* XXX This file is not yet fully PROTOized */ --- 1,2 ---- Index: pgen.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/pgen.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** pgen.h 1997/04/29 21:02:56 2.9 --- pgen.h 2000/08/03 16:49:21 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser generator interface */ --- 5,8 ---- Index: pgenmain.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/pgenmain.c,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** pgenmain.c 2000/05/03 23:44:37 2.16 --- pgenmain.c 2000/08/03 16:49:21 2.16.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser generator main program */ --- 1,2 ---- Index: printgrammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/printgrammar.c,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** printgrammar.c 1997/05/07 23:50:06 2.8 --- printgrammar.c 2000/08/03 16:49:21 2.8.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Print a bunch of C initializers that represent a grammar */ --- 1,2 ---- Index: tokenizer.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.c,v retrieving revision 2.41 retrieving revision 2.41.2.1 diff -C2 -r2.41 -r2.41.2.1 *** tokenizer.c 2000/05/03 23:44:37 2.41 --- tokenizer.c 2000/08/03 16:49:21 2.41.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tokenizer implementation */ --- 1,2 ---- Index: tokenizer.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** tokenizer.h 1998/04/09 21:38:06 2.12 --- tokenizer.h 2000/08/03 16:49:21 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tokenizer interface */ --- 5,8 ---- From python-dev@python.org Thu Aug 3 17:50:42 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:50:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python atof.c,2.3,2.3.4.1 bltinmodule.c,2.159,2.159.2.1 ceval.c,2.179,2.179.2.1 compile.c,2.108,2.108.2.1 dynload_aix.c,2.3,2.3.2.1 dynload_beos.c,2.2,2.2.2.1 dynload_dl.c,2.2,2.2.2.1 dynload_hpux.c,2.2,2.2.2.1 dynload_mac.c,2.4,2.4.2.1 dynload_next.c,2.3,2.3.2.1 dynload_os2.c,2.2,2.2.2.1 dynload_shlib.c,2.2,2.2.2.1 dynload_stub.c,2.1,2.1.2.1 dynload_win.c,2.2,2.2.2.1 errors.c,2.45,2.45.2.1 fmod.c,2.9,2.9.4.1 frozen.c,1.6,1.6.4.1 frozenmain.c,2.20,2.20.4.1 getargs.c,2.33,2.33.2.1 getcompiler.c,1.5,1.5.4.1 getcopyright.c,1.6,1.6.2.1 getcwd.c,1.9,1.9.4.1 getmtime.c,2.9,2.9.4.1 getplatform.c,1.4,1.4.4.1 getversion.c,1.10,1.10.4.1 import.c,2.134,2.134.2.1 importdl.c,2.64,2.64.2.1 importdl.h,2.12,2.12.2.1 marshal.c,1.47,1.47.2.1 memmove.c,2.4,2.4.4.1 modsupport.c,2.42,2.42.2.1 mystrtoul.c,2.17,2.17.4.1 pystate.c,2.9,2.9.2.1 pythonrun.c,2.96,2.96.2.1 sigcheck.c,2.4,2.4.4.1 strerror.c,2.6,2.6.4.1 structmember.c,2.14,2.14.4.1 sysmodule.c,2.63,2.63.2.1 t! hread.c,2.29,2.29.2.1 thread_beos.h,2.2,2.2.4.1 thread_cthread.h,2.8,2.8.4.1 thread_foobar.h,2.6,2.6.4.1 thread_lwp.h,2.7,2.7.4.1 thread_nt.h,2.9,2.9.2.1 thread_os2.h,2.5,2.5.4.1 thread_pth.h,2.1,2.1.2.1 thread_pthread.h,2.24,2.24.4.1 thread_sgi.h,2.9,2.9.4.1 thread_solaris.h,2.10,2.10.4.1 thread_wince.h,2.1,2.1.4.1 traceback.c,2.27,2.27.2.1 Message-ID: <200008031650.JAA15923@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv15854 Modified Files: Tag: cnri-16-start atof.c bltinmodule.c ceval.c compile.c dynload_aix.c dynload_beos.c dynload_dl.c dynload_hpux.c dynload_mac.c dynload_next.c dynload_os2.c dynload_shlib.c dynload_stub.c dynload_win.c errors.c fmod.c frozen.c frozenmain.c getargs.c getcompiler.c getcopyright.c getcwd.c getmtime.c getplatform.c getversion.c import.c importdl.c importdl.h marshal.c memmove.c modsupport.c mystrtoul.c pystate.c pythonrun.c sigcheck.c strerror.c structmember.c sysmodule.c thread.c thread_beos.h thread_cthread.h thread_foobar.h thread_lwp.h thread_nt.h thread_os2.h thread_pth.h thread_pthread.h thread_sgi.h thread_solaris.h thread_wince.h traceback.c Log Message: Remove CWI notice per CNRI instructions. Index: atof.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/atof.c,v retrieving revision 2.3 retrieving revision 2.3.4.1 diff -C2 -r2.3 -r2.3.4.1 *** atof.c 1996/10/25 14:42:36 2.3 --- atof.c 2000/08/03 16:50:35 2.3.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Just in case you haven't got an atof() around... This one doesn't check for bad syntax or overflow, --- 1,2 ---- Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.159 retrieving revision 2.159.2.1 diff -C2 -r2.159 -r2.159.2.1 *** bltinmodule.c 2000/05/09 19:55:16 2.159 --- bltinmodule.c 2000/08/03 16:50:35 2.159.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Built-in functions */ --- 1,2 ---- Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.179 retrieving revision 2.179.2.1 diff -C2 -r2.179 -r2.179.2.1 *** ceval.c 2000/05/08 14:06:50 2.179 --- ceval.c 2000/08/03 16:50:35 2.179.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Execute compiled code */ --- 1,2 ---- Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.108 retrieving revision 2.108.2.1 diff -C2 -r2.108 -r2.108.2.1 *** compile.c 2000/05/03 23:44:38 2.108 --- compile.c 2000/08/03 16:50:35 2.108.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Compile an expression node to intermediate code */ --- 1,2 ---- Index: dynload_aix.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_aix.c,v retrieving revision 2.3 retrieving revision 2.3.2.1 diff -C2 -r2.3 -r2.3.2.1 *** dynload_aix.c 1999/12/22 14:09:35 2.3 --- dynload_aix.c 2000/08/03 16:50:35 2.3.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_beos.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_beos.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_beos.c 1999/12/22 14:09:35 2.2 --- dynload_beos.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_dl.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_dl.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_dl.c 1999/12/22 14:09:35 2.2 --- dynload_dl.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_hpux.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_hpux.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_hpux.c 1999/12/22 14:09:35 2.2 --- dynload_hpux.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_mac.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_mac.c,v retrieving revision 2.4 retrieving revision 2.4.2.1 diff -C2 -r2.4 -r2.4.2.1 *** dynload_mac.c 2000/04/24 15:08:01 2.4 --- dynload_mac.c 2000/08/03 16:50:35 2.4.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_next.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_next.c,v retrieving revision 2.3 retrieving revision 2.3.2.1 diff -C2 -r2.3 -r2.3.2.1 *** dynload_next.c 2000/04/10 12:45:10 2.3 --- dynload_next.c 2000/08/03 16:50:35 2.3.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_os2.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_os2.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_os2.c 1999/12/22 14:09:35 2.2 --- dynload_os2.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_shlib.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_shlib.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_shlib.c 1999/12/22 14:09:35 2.2 --- dynload_shlib.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_stub.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_stub.c,v retrieving revision 2.1 retrieving revision 2.1.2.1 diff -C2 -r2.1 -r2.1.2.1 *** dynload_stub.c 1999/12/20 21:18:49 2.1 --- dynload_stub.c 2000/08/03 16:50:35 2.1.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This module provides the necessary stubs for when dynamic loading is not present. */ --- 1,2 ---- Index: dynload_win.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_win.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_win.c 1999/12/22 14:09:35 2.2 --- dynload_win.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: errors.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v retrieving revision 2.45 retrieving revision 2.45.2.1 diff -C2 -r2.45 -r2.45.2.1 *** errors.c 2000/05/02 19:27:51 2.45 --- errors.c 2000/08/03 16:50:35 2.45.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Error handling */ --- 1,2 ---- Index: fmod.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/fmod.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** fmod.c 1996/10/25 14:43:04 2.9 --- fmod.c 2000/08/03 16:50:35 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Portable fmod(x, y) implementation for systems that don't have it */ --- 1,2 ---- Index: frozen.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/frozen.c,v retrieving revision 1.6 retrieving revision 1.6.4.1 diff -C2 -r1.6 -r1.6.4.1 *** frozen.c 1998/04/03 21:10:36 1.6 --- frozen.c 2000/08/03 16:50:35 1.6.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Dummy frozen modules initializer */ --- 1,2 ---- Index: frozenmain.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/frozenmain.c,v retrieving revision 2.20 retrieving revision 2.20.4.1 diff -C2 -r2.20 -r2.20.4.1 *** frozenmain.c 1999/01/02 21:42:48 2.20 --- frozenmain.c 2000/08/03 16:50:35 2.20.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Python interpreter main program for frozen scripts */ --- 1,2 ---- Index: getargs.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v retrieving revision 2.33 retrieving revision 2.33.2.1 diff -C2 -r2.33 -r2.33.2.1 *** getargs.c 2000/05/09 21:50:00 2.33 --- getargs.c 2000/08/03 16:50:35 2.33.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* New getargs implementation */ --- 1,2 ---- Index: getcompiler.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getcompiler.c,v retrieving revision 1.5 retrieving revision 1.5.4.1 diff -C2 -r1.5 -r1.5.4.1 *** getcompiler.c 1997/07/19 19:48:41 1.5 --- getcompiler.c 2000/08/03 16:50:36 1.5.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the compiler identification, if possible. */ --- 1,2 ---- Index: getcopyright.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getcopyright.c,v retrieving revision 1.6 retrieving revision 1.6.2.1 diff -C2 -r1.6 -r1.6.2.1 *** getcopyright.c 2000/05/10 20:06:00 1.6 --- getcopyright.c 2000/08/03 16:50:36 1.6.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1996 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the copyright string. This is updated manually. */ --- 1,2 ---- Index: getcwd.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getcwd.c,v retrieving revision 1.9 retrieving revision 1.9.4.1 diff -C2 -r1.9 -r1.9.4.1 *** getcwd.c 1996/10/25 14:43:14 1.9 --- getcwd.c 2000/08/03 16:50:36 1.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Two PD getcwd() implementations. Author: Guido van Rossum, CWI Amsterdam, Jan 1991, . */ --- 1,2 ---- Index: getmtime.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getmtime.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** getmtime.c 1997/09/05 07:33:15 2.9 --- getmtime.c 2000/08/03 16:50:36 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Subroutine to get the last modification time of a file */ --- 1,2 ---- Index: getplatform.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getplatform.c,v retrieving revision 1.4 retrieving revision 1.4.4.1 diff -C2 -r1.4 -r1.4.4.1 *** getplatform.c 1997/07/19 19:48:05 1.4 --- getplatform.c 2000/08/03 16:50:36 1.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" --- 1,2 ---- Index: getversion.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getversion.c,v retrieving revision 1.10 retrieving revision 1.10.4.1 diff -C2 -r1.10 -r1.10.4.1 *** getversion.c 1999/04/22 12:03:40 1.10 --- getversion.c 2000/08/03 16:50:36 1.10.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the full version string. */ --- 1,2 ---- Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.134 retrieving revision 2.134.2.1 diff -C2 -r2.134 -r2.134.2.1 *** import.c 2000/05/03 23:44:39 2.134 --- import.c 2000/08/03 16:50:36 2.134.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module definition and import implementation */ --- 1,2 ---- Index: importdl.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/importdl.c,v retrieving revision 2.64 retrieving revision 2.64.2.1 diff -C2 -r2.64 -r2.64.2.1 *** importdl.c 1999/12/22 14:09:35 2.64 --- importdl.c 2000/08/03 16:50:36 2.64.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: importdl.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/importdl.h,v retrieving revision 2.12 retrieving revision 2.12.2.1 diff -C2 -r2.12 -r2.12.2.1 *** importdl.h 1999/12/20 22:55:03 2.12 --- importdl.h 2000/08/03 16:50:36 2.12.2.1 *************** *** 6,40 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Definitions for dynamic loading of extension modules */ enum filetype { --- 6,9 ---- Index: marshal.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/marshal.c,v retrieving revision 1.47 retrieving revision 1.47.2.1 diff -C2 -r1.47 -r1.47.2.1 *** marshal.c 2000/05/03 23:44:39 1.47 --- marshal.c 2000/08/03 16:50:36 1.47.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Write Python objects to files and read them back. This is intended for writing and reading compiled Python code only; --- 1,2 ---- Index: memmove.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/memmove.c,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** memmove.c 1996/10/25 14:43:30 2.4 --- memmove.c 2000/08/03 16:50:36 2.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* A perhaps slow but I hope correct implementation of memmove */ --- 1,2 ---- Index: modsupport.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/modsupport.c,v retrieving revision 2.42 retrieving revision 2.42.2.1 diff -C2 -r2.42 -r2.42.2.1 *** modsupport.c 2000/04/28 14:42:37 2.42 --- modsupport.c 2000/08/03 16:50:36 2.42.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module support implementation */ --- 1,2 ---- Index: mystrtoul.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/mystrtoul.c,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** mystrtoul.c 1999/04/07 16:07:21 2.17 --- mystrtoul.c 2000/08/03 16:50:36 2.17.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" --- 1,2 ---- Index: pystate.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pystate.c,v retrieving revision 2.9 retrieving revision 2.9.2.1 diff -C2 -r2.9 -r2.9.2.1 *** pystate.c 1999/06/18 14:22:24 2.9 --- pystate.c 2000/08/03 16:50:36 2.9.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread and interpreter state structures and their interfaces */ --- 1,2 ---- Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.96 retrieving revision 2.96.2.1 diff -C2 -r2.96 -r2.96.2.1 *** pythonrun.c 2000/05/03 23:44:39 2.96 --- pythonrun.c 2000/08/03 16:50:36 2.96.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Python interpreter top-level routines, including init/exit */ --- 1,2 ---- Index: sigcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sigcheck.c,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** sigcheck.c 1997/04/29 20:08:14 2.4 --- sigcheck.c 2000/08/03 16:50:36 2.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Sigcheck is similar to intrcheck() but sets an exception when an interrupt occurs. It can't be in the intrcheck.c file since that --- 1,2 ---- Index: strerror.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/strerror.c,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** strerror.c 1996/10/25 14:43:41 2.6 --- strerror.c 2000/08/03 16:50:36 2.6.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* PD implementation of strerror() for systems that don't have it. Author: Guido van Rossum, CWI Amsterdam, Oct. 1990, . */ --- 1,2 ---- Index: structmember.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/structmember.c,v retrieving revision 2.14 retrieving revision 2.14.4.1 diff -C2 -r2.14 -r2.14.4.1 *** structmember.c 1998/05/20 22:25:32 2.14 --- structmember.c 2000/08/03 16:50:36 2.14.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Map C struct members to Python object attributes */ --- 1,2 ---- Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.63 retrieving revision 2.63.2.1 diff -C2 -r2.63 -r2.63.2.1 *** sysmodule.c 2000/05/09 19:57:01 2.63 --- sysmodule.c 2000/08/03 16:50:36 2.63.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* System module */ --- 1,2 ---- Index: thread.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread.c,v retrieving revision 2.29 retrieving revision 2.29.2.1 diff -C2 -r2.29 -r2.29.2.1 *** thread.c 2000/05/08 13:36:49 2.29 --- thread.c 2000/08/03 16:50:36 2.29.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread package. This is intended to be usable independently from Python. --- 1,2 ---- Index: thread_beos.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_beos.h,v retrieving revision 2.2 retrieving revision 2.2.4.1 diff -C2 -r2.2 -r2.2.4.1 *** thread_beos.h 1998/12/21 19:32:29 2.2 --- thread_beos.h 2000/08/03 16:50:36 2.2.4.1 *************** *** 1,31 **** /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - BeOS thread support by Chris Herborth (chrish@qnx.com) ******************************************************************/ --- 1,3 ---- Index: thread_cthread.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_cthread.h,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** thread_cthread.h 1998/12/21 19:32:30 2.8 --- thread_cthread.h 2000/08/03 16:50:36 2.8.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include --- 1,2 ---- Index: thread_foobar.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_foobar.h,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** thread_foobar.h 1998/12/21 19:32:30 2.6 --- thread_foobar.h 2000/08/03 16:50:36 2.6.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* * Initialization. --- 1,2 ---- Index: thread_lwp.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_lwp.h,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** thread_lwp.h 1998/12/21 19:32:31 2.7 --- thread_lwp.h 2000/08/03 16:50:36 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include #include --- 1,2 ---- Index: thread_nt.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_nt.h,v retrieving revision 2.9 retrieving revision 2.9.2.1 diff -C2 -r2.9 -r2.9.2.1 *** thread_nt.h 2000/05/11 12:53:51 2.9 --- thread_nt.h 2000/08/03 16:50:36 2.9.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This code implemented by Dag.Gruneau@elsa.preseco.comm.se */ /* Fast NonRecursiveMutex support by Yakov Markovitch, markovitch@iso.ru */ --- 1,2 ---- Index: thread_os2.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_os2.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** thread_os2.h 1998/12/21 19:32:33 2.5 --- thread_os2.h 2000/08/03 16:50:36 2.5.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This code implemented by cvale@netcom.com */ --- 1,2 ---- Index: thread_pth.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_pth.h,v retrieving revision 2.1 retrieving revision 2.1.2.1 diff -C2 -r2.1 -r2.1.2.1 *** thread_pth.h 2000/05/08 13:36:49 2.1 --- thread_pth.h 2000/08/03 16:50:36 2.1.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* GNU pth threads interface http://www.gnu.org/software/pth --- 1,2 ---- Index: thread_pthread.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_pthread.h,v retrieving revision 2.24 retrieving revision 2.24.4.1 diff -C2 -r2.24 -r2.24.4.1 *** thread_pthread.h 1999/03/15 20:27:53 2.24 --- thread_pthread.h 2000/08/03 16:50:36 2.24.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Posix threads interface */ --- 1,2 ---- Index: thread_sgi.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_sgi.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** thread_sgi.h 1998/12/21 19:32:34 2.9 --- thread_sgi.h 2000/08/03 16:50:36 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifdef WITH_SGI_DL #define USE_DL --- 1,2 ---- Index: thread_solaris.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_solaris.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** thread_solaris.h 1999/04/13 14:32:12 2.10 --- thread_solaris.h 2000/08/03 16:50:36 2.10.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include #include --- 1,2 ---- Index: thread_wince.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_wince.h,v retrieving revision 2.1 retrieving revision 2.1.4.1 diff -C2 -r2.1 -r2.1.4.1 *** thread_wince.h 1999/04/08 13:57:06 2.1 --- thread_wince.h 2000/08/03 16:50:36 2.1.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This code implemented by Mark Hammond (MHammond@skippinet.com.au) */ --- 1,2 ---- Index: traceback.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/traceback.c,v retrieving revision 2.27 retrieving revision 2.27.2.1 diff -C2 -r2.27 -r2.27.2.1 *** traceback.c 2000/05/03 23:44:39 2.27 --- traceback.c 2000/08/03 16:50:36 2.27.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Traceback implementation */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:52:07 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:52:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _tkinter.c,1.99,1.99.2.1 almodule.c,1.24,1.24.2.1 arraymodule.c,2.39,2.39.2.1 audioop.c,1.36,1.36.2.1 binascii.c,2.19,2.19.2.1 bsddbmodule.c,1.18,1.18.2.1 cdmodule.c,1.19,1.19.2.1 cgen.py,2.14,2.14.4.1 cgensupport.c,2.11,2.11.4.1 cgensupport.h,2.11,2.11.4.1 clmodule.c,2.20,2.20.2.1 config.c.in,1.67,1.67.4.1 cstubs,2.18,2.18.4.1 dbmmodule.c,2.17,2.17.2.1 dlmodule.c,2.7,2.7.2.1 errnomodule.c,2.9,2.9.4.1 fcntlmodule.c,2.19,2.19.2.1 flmodule.c,1.36,1.36.2.1 fmmodule.c,1.11,1.11.2.1 gdbmmodule.c,2.22,2.22.2.1 getpath.c,1.21,1.21.2.1 glmodule.c,2.3,2.3.4.1 grpmodule.c,2.9,2.9.4.1 imageop.c,2.20,2.20.4.1 imgfile.c,1.22,1.22.4.1 main.c,1.38,1.38.2.1 mathmodule.c,2.45,2.45.2.1 md5module.c,2.15,2.15.2.1 mpzmodule.c,2.23,2.23.2.1 newmodule.c,2.20,2.20.2.1 parsermodule.c,2.39,2.39.2.1 pcremodule.c,2.19,2.19.2.1 posixmodule.c,2.134,2.134.2.1 pwdmodule.c,1.17,1.17.4.1 pyexpat.c,2.4,2.4.2.1 regexmodule.c,1.34,1.34.2.1 resource.c,2.10,2.10.2.1 selectmod! ule.c,2.32,2.32.2.1 sgimodule.c,1.11,1.11.4.1 shamodule.c,2.5,2.5.2.1 signalmodule.c,2.39,2.39.4.1 stropmodule.c,2.63,2.63.2.1 structmodule.c,2.30,2.30.2.1 sunaudiodev.c,1.17,1.17.2.1 svmodule.c,2.11,2.11.2.1 threadmodule.c,2.31,2.31.2.1 timemodule.c,2.83,2.83.2.1 xxmodule.c,2.16,2.16.2.1 yuv.h,2.5,2.5.4.1 yuvconvert.c,2.4,2.4.4.1 Message-ID: <200008031652.JAA16131@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv16042 Modified Files: Tag: cnri-16-start _tkinter.c almodule.c arraymodule.c audioop.c binascii.c bsddbmodule.c cdmodule.c cgen.py cgensupport.c cgensupport.h clmodule.c config.c.in cstubs dbmmodule.c dlmodule.c errnomodule.c fcntlmodule.c flmodule.c fmmodule.c gdbmmodule.c getpath.c glmodule.c grpmodule.c imageop.c imgfile.c main.c mathmodule.c md5module.c mpzmodule.c newmodule.c parsermodule.c pcremodule.c posixmodule.c pwdmodule.c pyexpat.c regexmodule.c resource.c selectmodule.c sgimodule.c shamodule.c signalmodule.c stropmodule.c structmodule.c sunaudiodev.c svmodule.c threadmodule.c timemodule.c xxmodule.c yuv.h yuvconvert.c Log Message: Remove CWI notice per CNRI instructions. Index: _tkinter.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_tkinter.c,v retrieving revision 1.99 retrieving revision 1.99.2.1 diff -C2 -r1.99 -r1.99.2.1 *** _tkinter.c 2000/05/04 15:55:17 1.99 --- _tkinter.c 2000/08/03 16:52:00 1.99.2.1 *************** *** 1,32 **** /*********************************************************** Copyright (C) 1994 Steen Lumholt. - Copyright 1994-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ******************************************************************/ --- 1,4 ---- Index: almodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/almodule.c,v retrieving revision 1.24 retrieving revision 1.24.2.1 diff -C2 -r1.24 -r1.24.2.1 *** almodule.c 2000/05/03 23:44:31 1.24 --- almodule.c 2000/08/03 16:52:00 1.24.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #define OLD_INTERFACE /* define for pre-Irix 6 interface */ --- 1,2 ---- Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.39 retrieving revision 2.39.2.1 diff -C2 -r2.39 -r2.39.2.1 *** arraymodule.c 2000/05/03 23:44:31 2.39 --- arraymodule.c 2000/08/03 16:52:00 2.39.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Array object implementation */ --- 1,2 ---- Index: audioop.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/audioop.c,v retrieving revision 1.36 retrieving revision 1.36.2.1 diff -C2 -r1.36 -r1.36.2.1 *** audioop.c 2000/05/02 21:18:13 1.36 --- audioop.c 2000/08/03 16:52:00 1.36.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* audioopmodule - Module to detect peak values in arrays */ --- 1,2 ---- Index: binascii.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** binascii.c 2000/02/29 13:59:22 2.19 --- binascii.c 2000/08/03 16:52:00 2.19.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum, - Amsterdam, The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* ** Routines to represent binary data in ASCII and vice-versa --- 1,2 ---- Index: bsddbmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/bsddbmodule.c,v retrieving revision 1.18 retrieving revision 1.18.2.1 diff -C2 -r1.18 -r1.18.2.1 *** bsddbmodule.c 2000/05/03 23:44:31 1.18 --- bsddbmodule.c 2000/08/03 16:52:00 1.18.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Berkeley DB interface. Author: Michael McLay --- 1,2 ---- Index: cdmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cdmodule.c,v retrieving revision 1.19 retrieving revision 1.19.2.1 diff -C2 -r1.19 -r1.19.2.1 *** cdmodule.c 2000/05/03 23:44:31 1.19 --- cdmodule.c 2000/08/03 16:52:00 1.19.2.1 *************** *** 1,33 **** - /********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* CD module -- interface to Mark Callow's and Roger Chickering's */ /* CD Audio Library (CD). */ --- 1,2 ---- Index: cgen.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cgen.py,v retrieving revision 2.14 retrieving revision 2.14.4.1 diff -C2 -r2.14 -r2.14.4.1 *** cgen.py 1997/04/29 21:34:06 2.14 --- cgen.py 2000/08/03 16:52:00 2.14.4.1 *************** *** 1,32 **** - ######################################################################## - # Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - # The Netherlands. - # - # All Rights Reserved - # - # Permission to use, copy, modify, and distribute this software and its - # documentation for any purpose and without fee is hereby granted, - # provided that the above copyright notice appear in all copies and that - # both that copyright notice and this permission notice appear in - # supporting documentation, and that the names of Stichting Mathematisch - # Centrum or CWI or Corporation for National Research Initiatives or - # CNRI not be used in advertising or publicity pertaining to - # distribution of the software without specific, written prior - # permission. - # - # While CWI is the initial source for this software, a modified version - # is made available by the Corporation for National Research Initiatives - # (CNRI) at the Internet address ftp://ftp.python.org. - # - # STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - # REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - # MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - # CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - # PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - # PERFORMANCE OF THIS SOFTWARE. - ######################################################################## - # Python script to parse cstubs file for gl and generate C stubs. # usage: python cgen.py glmodule.c --- 1,2 ---- Index: cgensupport.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cgensupport.c,v retrieving revision 2.11 retrieving revision 2.11.4.1 diff -C2 -r2.11 -r2.11.4.1 *** cgensupport.c 1997/04/29 15:43:55 2.11 --- cgensupport.c 2000/08/03 16:52:00 2.11.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Functions used by cgen output */ --- 1,2 ---- Index: cgensupport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cgensupport.h,v retrieving revision 2.11 retrieving revision 2.11.4.1 diff -C2 -r2.11 -r2.11.4.1 *** cgensupport.h 1997/04/29 15:35:28 2.11 --- cgensupport.h 2000/08/03 16:52:00 2.11.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Definitions used by cgen output */ --- 5,8 ---- Index: clmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/clmodule.c,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** clmodule.c 2000/05/03 23:44:31 2.20 --- clmodule.c 2000/08/03 16:52:00 2.20.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Cl objects */ --- 1,2 ---- Index: config.c.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/config.c.in,v retrieving revision 1.67 retrieving revision 1.67.4.1 diff -C2 -r1.67 -r1.67.4.1 *** config.c.in 1997/04/29 20:31:59 1.67 --- config.c.in 2000/08/03 16:52:00 1.67.4.1 *************** *** 1,33 **** ! /* -*- C -*- *********************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ! ******************************************************************/ ! /* Module configuration */ --- 1,3 ---- ! /* -*- C -*- */ /* Module configuration */ Index: cstubs =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cstubs,v retrieving revision 2.18 retrieving revision 2.18.4.1 diff -C2 -r2.18 -r2.18.4.1 *** cstubs 1998/04/28 16:09:16 2.18 --- cstubs 2000/08/03 16:52:00 2.18.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Input used to generate the Python module "glmodule.c". --- 1,2 ---- Index: dbmmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/dbmmodule.c,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** dbmmodule.c 2000/05/03 23:44:32 2.17 --- dbmmodule.c 2000/08/03 16:52:00 2.17.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* DBM module using dictionary interface */ --- 1,2 ---- Index: dlmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/dlmodule.c,v retrieving revision 2.7 retrieving revision 2.7.2.1 diff -C2 -r2.7 -r2.7.2.1 *** dlmodule.c 2000/05/03 23:44:32 2.7 --- dlmodule.c 2000/08/03 16:52:00 2.7.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* dl module */ --- 1,2 ---- Index: errnomodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/errnomodule.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** errnomodule.c 1999/01/27 18:04:05 2.9 --- errnomodule.c 2000/08/03 16:52:00 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Errno module */ --- 1,2 ---- Index: fcntlmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/fcntlmodule.c,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** fcntlmodule.c 2000/02/29 13:59:23 2.19 --- fcntlmodule.c 2000/08/03 16:52:00 2.19.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* fcntl module */ --- 1,2 ---- Index: flmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/flmodule.c,v retrieving revision 1.36 retrieving revision 1.36.2.1 diff -C2 -r1.36 -r1.36.2.1 *** flmodule.c 2000/05/03 23:44:32 1.36 --- flmodule.c 2000/08/03 16:52:00 1.36.2.1 *************** *** 1,33 **** - /********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* FL module -- interface to Mark Overmars' FORMS Library. */ --- 1,2 ---- Index: fmmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/fmmodule.c,v retrieving revision 1.11 retrieving revision 1.11.2.1 diff -C2 -r1.11 -r1.11.2.1 *** fmmodule.c 2000/05/03 23:44:32 1.11 --- fmmodule.c 2000/08/03 16:52:01 1.11.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Font Manager module */ --- 1,2 ---- Index: gdbmmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/gdbmmodule.c,v retrieving revision 2.22 retrieving revision 2.22.2.1 diff -C2 -r2.22 -r2.22.2.1 *** gdbmmodule.c 2000/05/03 23:44:32 2.22 --- gdbmmodule.c 2000/08/03 16:52:01 2.22.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* DBM module using dictionary interface */ /* Author: Anthony Baxter, after dbmmodule.c */ --- 1,2 ---- Index: getpath.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/getpath.c,v retrieving revision 1.21 retrieving revision 1.21.2.1 diff -C2 -r1.21 -r1.21.2.1 *** getpath.c 2000/05/03 23:44:32 1.21 --- getpath.c 2000/08/03 16:52:01 1.21.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the initial module search path. */ --- 1,2 ---- Index: glmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/glmodule.c,v retrieving revision 2.3 retrieving revision 2.3.4.1 diff -C2 -r2.3 -r2.3.4.1 *** glmodule.c 1998/10/21 16:10:40 2.3 --- glmodule.c 2000/08/03 16:52:01 2.3.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Input used to generate the Python module "glmodule.c". --- 1,2 ---- Index: grpmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/grpmodule.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** grpmodule.c 1998/12/04 18:49:50 2.9 --- grpmodule.c 2000/08/03 16:52:01 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* UNIX group file access module */ --- 1,2 ---- Index: imageop.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/imageop.c,v retrieving revision 2.20 retrieving revision 2.20.4.1 diff -C2 -r2.20 -r2.20.4.1 *** imageop.c 1998/12/04 18:49:50 2.20 --- imageop.c 2000/08/03 16:52:01 2.20.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* imageopmodule - Various operations on pictures */ --- 1,2 ---- Index: imgfile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/imgfile.c,v retrieving revision 1.22 retrieving revision 1.22.4.1 diff -C2 -r1.22 -r1.22.4.1 *** imgfile.c 1997/10/01 04:26:35 1.22 --- imgfile.c 2000/08/03 16:52:01 1.22.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* IMGFILE module - Interface to sgi libimage */ --- 1,2 ---- Index: main.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/main.c,v retrieving revision 1.38 retrieving revision 1.38.2.1 diff -C2 -r1.38 -r1.38.2.1 *** main.c 2000/05/02 19:20:26 1.38 --- main.c 2000/08/03 16:52:01 1.38.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Python interpreter main program */ --- 1,2 ---- Index: mathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/mathmodule.c,v retrieving revision 2.45 retrieving revision 2.45.2.1 diff -C2 -r2.45 -r2.45.2.1 *** mathmodule.c 2000/05/11 18:40:42 2.45 --- mathmodule.c 2000/08/03 16:52:01 2.45.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Math module -- standard C math library functions, pi and e */ --- 1,2 ---- Index: md5module.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v retrieving revision 2.15 retrieving revision 2.15.2.1 diff -C2 -r2.15 -r2.15.2.1 *** md5module.c 2000/05/03 23:44:32 2.15 --- md5module.c 2000/08/03 16:52:01 2.15.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* MD5 module */ --- 1,2 ---- Index: mpzmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/mpzmodule.c,v retrieving revision 2.23 retrieving revision 2.23.2.1 diff -C2 -r2.23 -r2.23.2.1 *** mpzmodule.c 2000/05/03 23:44:32 2.23 --- mpzmodule.c 2000/08/03 16:52:01 2.23.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* MPZ module */ --- 1,2 ---- Index: newmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/newmodule.c,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** newmodule.c 2000/05/03 23:44:32 2.20 --- newmodule.c 2000/08/03 16:52:01 2.20.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module new -- create new objects of various types */ --- 1,2 ---- Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.39 retrieving revision 2.39.2.1 diff -C2 -r2.39 -r2.39.2.1 *** parsermodule.c 2000/05/03 23:44:32 2.39 --- parsermodule.c 2000/08/03 16:52:01 2.39.2.1 *************** *** 76,110 **** */ - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - static PyObject* node2tuple(node *n, /* node to convert */ --- 76,79 ---- Index: pcremodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pcremodule.c,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** pcremodule.c 2000/05/03 23:44:32 2.19 --- pcremodule.c 2000/08/03 16:52:01 2.19.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1997 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Pcre objects */ --- 1,2 ---- Index: posixmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.134 retrieving revision 2.134.2.1 diff -C2 -r2.134 -r2.134.2.1 *** posixmodule.c 2000/05/03 02:44:55 2.134 --- posixmodule.c 2000/08/03 16:52:01 2.134.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* POSIX module implementation */ --- 1,2 ---- Index: pwdmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v retrieving revision 1.17 retrieving revision 1.17.4.1 diff -C2 -r1.17 -r1.17.4.1 *** pwdmodule.c 1998/12/04 18:50:00 1.17 --- pwdmodule.c 2000/08/03 16:52:01 1.17.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* UNIX password file access module */ --- 1,2 ---- Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.4 retrieving revision 2.4.2.1 diff -C2 -r2.4 -r2.4.2.1 *** pyexpat.c 2000/05/03 23:44:33 2.4 --- pyexpat.c 2000/08/03 16:52:01 2.4.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 2000 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" #include "xmlparse.h" --- 1,2 ---- Index: regexmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/regexmodule.c,v retrieving revision 1.34 retrieving revision 1.34.2.1 diff -C2 -r1.34 -r1.34.2.1 *** regexmodule.c 2000/05/03 23:44:33 1.34 --- regexmodule.c 2000/08/03 16:52:01 1.34.2.1 *************** *** 4,38 **** */ - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Regular expression objects */ /* This uses Tatu Ylonen's copyleft-free reimplementation of --- 4,7 ---- Index: resource.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/resource.c,v retrieving revision 2.10 retrieving revision 2.10.2.1 diff -C2 -r2.10 -r2.10.2.1 *** resource.c 2000/02/29 13:59:23 2.10 --- resource.c 2000/08/03 16:52:01 2.10.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" #include "mytime.h" /* needed for SunOS4.1 */ --- 1,2 ---- Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.32 retrieving revision 2.32.2.1 diff -C2 -r2.32 -r2.32.2.1 *** selectmodule.c 2000/05/03 23:44:33 2.32 --- selectmodule.c 2000/08/03 16:52:01 2.32.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* select - Module containing unix select(2) call. Under Unix, the file descriptors are small integers. --- 1,2 ---- Index: sgimodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sgimodule.c,v retrieving revision 1.11 retrieving revision 1.11.4.1 diff -C2 -r1.11 -r1.11.4.1 *** sgimodule.c 1996/12/10 00:32:31 1.11 --- sgimodule.c 2000/08/03 16:52:01 1.11.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* SGI module -- random SGI-specific things */ --- 1,2 ---- Index: shamodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/shamodule.c,v retrieving revision 2.5 retrieving revision 2.5.2.1 diff -C2 -r2.5 -r2.5.2.1 *** shamodule.c 2000/05/03 23:44:33 2.5 --- shamodule.c 2000/08/03 16:52:01 2.5.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1999 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* SHA module */ --- 1,2 ---- Index: signalmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/signalmodule.c,v retrieving revision 2.39 retrieving revision 2.39.4.1 diff -C2 -r2.39 -r2.39.4.1 *** signalmodule.c 1998/12/21 19:32:39 2.39 --- signalmodule.c 2000/08/03 16:52:01 2.39.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Signal module -- many thanks to Lance Ellinghaus */ --- 1,2 ---- Index: stropmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/stropmodule.c,v retrieving revision 2.63 retrieving revision 2.63.2.1 diff -C2 -r2.63 -r2.63.2.1 *** stropmodule.c 2000/05/03 23:44:33 2.63 --- stropmodule.c 2000/08/03 16:52:01 2.63.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* strop module */ --- 1,2 ---- Index: structmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/structmodule.c,v retrieving revision 2.30 retrieving revision 2.30.2.1 diff -C2 -r2.30 -r2.30.2.1 *** structmodule.c 2000/02/29 13:59:24 2.30 --- structmodule.c 2000/08/03 16:52:01 2.30.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* struct module -- pack values into and (out of) strings */ --- 1,2 ---- Index: sunaudiodev.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sunaudiodev.c,v retrieving revision 1.17 retrieving revision 1.17.2.1 diff -C2 -r1.17 -r1.17.2.1 *** sunaudiodev.c 2000/05/03 23:44:33 1.17 --- sunaudiodev.c 2000/08/03 16:52:01 1.17.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Sad objects */ --- 1,2 ---- Index: svmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/svmodule.c,v retrieving revision 2.11 retrieving revision 2.11.2.1 diff -C2 -r2.11 -r2.11.2.1 *** svmodule.c 2000/05/03 23:44:33 2.11 --- svmodule.c 2000/08/03 16:52:02 2.11.2.1 *************** *** 1,33 **** - /********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* SV module -- interface to the Indigo video board */ --- 1,2 ---- Index: threadmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/threadmodule.c,v retrieving revision 2.31 retrieving revision 2.31.2.1 diff -C2 -r2.31 -r2.31.2.1 *** threadmodule.c 2000/05/03 23:44:33 2.31 --- threadmodule.c 2000/08/03 16:52:02 2.31.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread module */ /* Interface to Sjoerd's portable C thread library */ --- 1,2 ---- Index: timemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v retrieving revision 2.83 retrieving revision 2.83.2.1 diff -C2 -r2.83 -r2.83.2.1 *** timemodule.c 2000/05/09 19:52:40 2.83 --- timemodule.c 2000/08/03 16:52:02 2.83.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Time module */ --- 1,2 ---- Index: xxmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/xxmodule.c,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** xxmodule.c 2000/05/03 23:44:33 2.16 --- xxmodule.c 2000/08/03 16:52:02 2.16.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Use this file as a template to start implementing a module that also declares objects types. All occurrences of 'Xxo' should be changed --- 1,2 ---- Index: yuv.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/yuv.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** yuv.h 1996/10/25 14:41:05 2.5 --- yuv.h 2000/08/03 16:52:02 2.5.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifndef Py_YUV_H #define Py_YUV_H --- 1,2 ---- Index: yuvconvert.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/yuvconvert.c,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** yuvconvert.c 1996/10/25 14:41:08 2.4 --- yuvconvert.c 2000/08/03 16:52:02 2.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "yuv.h" --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:55:06 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:55:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC config.c,1.22,1.22.2.1 getpathp.c,1.13,1.13.2.1 Message-ID: <200008031655.JAA16420@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv16403 Modified Files: Tag: cnri-16-start config.c getpathp.c Log Message: Remove CWI notice per CNRI instructions. Index: config.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/config.c,v retrieving revision 1.22 retrieving revision 1.22.2.1 diff -C2 -r1.22 -r1.22.2.1 *** config.c 2000/05/08 14:15:19 1.22 --- config.c 2000/08/03 16:55:03 1.22.2.1 *************** *** 1,33 **** ! /* -*- C -*- *********************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ! ******************************************************************/ ! /* Module configuration */ --- 1,3 ---- ! /* -*- C -*- */ /* Module configuration */ Index: getpathp.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/getpathp.c,v retrieving revision 1.13 retrieving revision 1.13.2.1 diff -C2 -r1.13 -r1.13.2.1 *** getpathp.c 2000/03/30 19:45:39 1.13 --- getpathp.c 2000/08/03 16:55:03 1.13.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the initial module search path. */ /* Used by DOS, OS/2, Windows 3.1, Windows 95/98, Windows NT. */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:55:06 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:55:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC/os2vacpp config.c,1.3,1.3.4.1 getpathp.c,1.4,1.4.4.1 Message-ID: <200008031655.JAA16424@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC/os2vacpp In directory slayer.i.sourceforge.net:/tmp/cvs-serv16403/os2vacpp Modified Files: Tag: cnri-16-start config.c getpathp.c Log Message: Remove CWI notice per CNRI instructions. Index: config.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/os2vacpp/config.c,v retrieving revision 1.3 retrieving revision 1.3.4.1 diff -C2 -r1.3 -r1.3.4.1 *** config.c 1998/09/28 22:02:36 1.3 --- config.c 2000/08/03 16:55:04 1.3.4.1 *************** *** 1,33 **** ! /* -*- C -*- *********************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ! ******************************************************************/ ! /* Module configuration */ --- 1,3 ---- ! /* -*- C -*- */ /* Module configuration */ Index: getpathp.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/os2vacpp/getpathp.c,v retrieving revision 1.4 retrieving revision 1.4.4.1 diff -C2 -r1.4 -r1.4.4.1 *** getpathp.c 1998/07/27 13:49:04 1.4 --- getpathp.c 2000/08/03 16:55:04 1.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the initial module search path. */ /* Used by DOS, OS/2, Windows 3.1. Works on NT too. */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:56:46 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:56:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/modulator/Templates copyright,1.2,1.2.4.1 Message-ID: <200008031656.JAA16626@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/modulator/Templates In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606/Tools/modulator/Templates Modified Files: Tag: cnri-16-start copyright Log Message: Remove CWI notice per CNRI instructions. Index: copyright =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/modulator/Templates/copyright,v retrieving revision 1.2 retrieving revision 1.2.4.1 diff -C2 -r1.2 -r1.2.4.1 *** copyright 1996/10/25 14:44:06 1.2 --- copyright 2000/08/03 16:56:43 1.2.4.1 *************** *** 1,30 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ --- 0 ---- From python-dev@python.org Thu Aug 3 17:56:45 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:56:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/BeOS dl_export.h,1.1,1.1.4.1 Message-ID: <200008031656.JAA16618@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/BeOS In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606/BeOS Modified Files: Tag: cnri-16-start dl_export.h Log Message: Remove CWI notice per CNRI instructions. Index: dl_export.h =================================================================== RCS file: /cvsroot/python/python/dist/src/BeOS/dl_export.h,v retrieving revision 1.1 retrieving revision 1.1.4.1 diff -C2 -r1.1 -r1.1.4.1 *** dl_export.h 1999/01/12 20:30:23 1.1 --- dl_export.h 2000/08/03 16:56:43 1.1.4.1 *************** *** 8,35 **** * * This trivial header is released under the same license as the rest of ! * Python: ! * ! * Permission to use, copy, modify, and distribute this software and its ! * documentation for any purpose and without fee is hereby granted, ! * provided that the above copyright notice appear in all copies and that ! * both that copyright notice and this permission notice appear in ! * supporting documentation, and that the names of Stichting Mathematisch ! * Centrum or CWI or Corporation for National Research Initiatives or ! * CNRI not be used in advertising or publicity pertaining to ! * distribution of the software without specific, written prior ! * permission. ! * ! * While CWI is the initial source for this software, a modified version ! * is made available by the Corporation for National Research Initiatives ! * (CNRI) at the Internet address ftp://ftp.python.org. ! * ! * STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! * MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! * CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! * PERFORMANCE OF THIS SOFTWARE. * * - Chris Herborth (chrish@beoscentral.com) --- 8,12 ---- * * This trivial header is released under the same license as the rest of ! * Python. * * - Chris Herborth (chrish@beoscentral.com) From python-dev@python.org Thu Aug 3 17:56:56 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:56:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc README,1.38,1.38.2.1 Message-ID: <200008031656.JAA16622@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606/Doc Modified Files: Tag: cnri-16-start README Log Message: Remove CWI notice per CNRI instructions. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/README,v retrieving revision 1.38 retrieving revision 1.38.2.1 diff -C2 -r1.38 -r1.38.2.1 *** README 2000/04/28 16:53:35 1.38 --- README 2000/08/03 16:56:43 1.38.2.1 *************** *** 191,223 **** The Python source is copyrighted, but you can freely use and copy it ! as long as you don't change or remove the copyright notice: ! ! ---------------------------------------------------------------------- ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ---------------------------------------------------------------------- --- 191,193 ---- The Python source is copyrighted, but you can freely use and copy it ! as long as you don't change or remove the copyright notice. From python-dev@python.org Thu Aug 3 17:57:42 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:57:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/scripts fixnotice.py,1.2,1.2.4.1 Message-ID: <200008031657.JAA16711@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/scripts In directory slayer.i.sourceforge.net:/tmp/cvs-serv16703 Modified Files: Tag: cnri-16-start fixnotice.py Log Message: Change it to remove the old CWI notice, per CNRI instructions. Index: fixnotice.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/scripts/fixnotice.py,v retrieving revision 1.2 retrieving revision 1.2.4.1 diff -C2 -r1.2 -r1.2.4.1 *** fixnotice.py 1998/03/24 05:30:22 1.2 --- fixnotice.py 2000/08/03 16:57:40 1.2.4.1 *************** *** 1,23 **** #! /usr/bin/env python ! OLD_NOTICE = """ ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior permission. ! STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO ! THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND ! FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE ! FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT ! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! """ - NEW_NOTICE = """ Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, --- 1,11 ---- #! /usr/bin/env python ! OLD_NOTICE = """\ ! /*********************************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, *************** *** 42,48 **** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ ! # " <-- Help Emacs import os, sys, string --- 30,39 ---- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ******************************************************************/ + """ ! NEW_NOTICE = "" import os, sys, string From python-dev@python.org Thu Aug 3 18:00:04 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 10:00:04 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.86,1.86.2.1 Message-ID: <200008031700.KAA17091@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv16961 Modified Files: Tag: cnri-16-start Makefile.in Log Message: Remove CWI notice per CNRI instructions. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.86 retrieving revision 1.86.2.1 diff -C2 -r1.86 -r1.86.2.1 *** Makefile.in 2000/04/24 14:57:21 1.86 --- Makefile.in 2000/08/03 17:00:01 1.86.2.1 *************** *** 1,32 **** - ######################################################################## - # Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - # The Netherlands. - # - # All Rights Reserved - # - # Permission to use, copy, modify, and distribute this software and its - # documentation for any purpose and without fee is hereby granted, - # provided that the above copyright notice appear in all copies and that - # both that copyright notice and this permission notice appear in - # supporting documentation, and that the names of Stichting Mathematisch - # Centrum or CWI or Corporation for National Research Initiatives or - # CNRI not be used in advertising or publicity pertaining to - # distribution of the software without specific, written prior - # permission. - # - # While CWI is the initial source for this software, a modified version - # is made available by the Corporation for National Research Initiatives - # (CNRI) at the Internet address ftp://ftp.python.org. - # - # STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - # REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - # MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - # CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - # PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - # PERFORMANCE OF THIS SOFTWARE. - ######################################################################## - # Top-level Makefile for Python # --- 1,2 ---- From python-dev@python.org Thu Aug 3 18:25:47 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:25:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.77,1.78 Message-ID: <200008031725.KAA26643@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv26636/perl Modified Files: python.perl Log Message: do_cmd_moreargs(), do_cmd_unspecified(): New functions to reflect previously unused markup. do_cmd_file(): Simplified generated markup to only make use of the existing stylesheet. do_cmd_makevar(): Make the markup more stylesheet-friendly. Index: python.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -r1.77 -r1.78 *** python.perl 2000/06/28 21:06:08 1.77 --- python.perl 2000/08/03 17:25:44 1.78 *************** *** 123,127 **** sub do_cmd_pytype{ return @_[0]; } ! sub do_cmd_makevar{ return @_[0]; } sub do_cmd_code{ return use_wrappers(@_[0], '', ''); } --- 123,128 ---- sub do_cmd_pytype{ return @_[0]; } ! sub do_cmd_makevar{ ! return use_wrappers(@_[0], '', ''); } sub do_cmd_code{ return use_wrappers(@_[0], '', ''); } *************** *** 170,176 **** return use_italics(@_); } sub do_cmd_file{ ! return use_wrappers(@_[0], ! '', ! ''); } sub do_cmd_filenq{ return do_cmd_file(@_[0]); } --- 171,175 ---- return use_italics(@_); } sub do_cmd_file{ ! return use_wrappers(@_[0], '', ''); } sub do_cmd_filenq{ return do_cmd_file(@_[0]); } *************** *** 185,188 **** --- 184,192 ---- sub do_cmd_textit{ return use_wrappers(@_[0], '', ''); } + + sub do_cmd_moreargs{ + return '...' . @_[0]; } + sub do_cmd_unspecified{ + return '...' . @_[0]; } From python-dev@python.org Thu Aug 3 18:28:56 2000 From: python-dev@python.org (Moshe Zadka) Date: Thu, 3 Aug 2000 10:28:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_urlparse,NONE,1.1 Message-ID: <200008031728.KAA26850@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv26804/output Added Files: test_urlparse Log Message: Checking in empty tests for urlparse, as future place holders --- NEW FILE --- test_urlparse From python-dev@python.org Thu Aug 3 18:29:18 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:29:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfuncs.tex,1.67,1.68 Message-ID: <200008031729.KAA26900@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv26885/lib Modified Files: libfuncs.tex Log Message: int() description: Fix markup to avoid image generation for math mode. zip() description: Fix broken markup, three small markup consistency nits, and one really minor usage nit. Introduce use of \moreargs instead of hardcoding "..." with \optional. Index: libfuncs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfuncs.tex,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -r1.67 -r1.68 *** libfuncs.tex 2000/08/03 15:46:17 1.67 --- libfuncs.tex 2000/08/03 17:29:13 1.68 *************** *** 320,324 **** this behaves identical to \code{string.atoi(\var{x}\optional{, \var{radix}})}. The \var{radix} parameter gives the base for the ! conversion and may be any integer in the range $[2, 36]$. If \var{radix} is specified and \var{x} is not a string, \exception{TypeError} is raised. --- 320,324 ---- this behaves identical to \code{string.atoi(\var{x}\optional{, \var{radix}})}. The \var{radix} parameter gives the base for the ! conversion and may be any integer in the range [2, 36]. If \var{radix} is specified and \var{x} is not a string, \exception{TypeError} is raised. *************** *** 705,714 **** \end{funcdesc} ! \begin{funcdesc}{zip}{seq1\optional{, seq2\optional{, ...}}} This function returns a list of tuples, where each tuple contains the ! i-th element from each of the argument sequences. At least one sequence is required, otherwise a \exception{TypeError} is raised. The returned list is truncated in length to the length of the shortest argument sequence. When the argument sequences are all of the same ! length, \function{zip} is similar to \function{map} with an initial ! None argument. --- 705,715 ---- \end{funcdesc} ! \begin{funcdesc}{zip}{seq1, \moreargs} This function returns a list of tuples, where each tuple contains the ! \var{i}-th element from each of the argument sequences. At least one sequence is required, otherwise a \exception{TypeError} is raised. The returned list is truncated in length to the length of the shortest argument sequence. When the argument sequences are all of the same ! length, \function{zip()} is similar to \function{map()} with an ! initial argument of \code{None}. ! \end{funcdesc} From python-dev@python.org Thu Aug 3 18:28:56 2000 From: python-dev@python.org (Moshe Zadka) Date: Thu, 3 Aug 2000 10:28:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_urlparse.py,NONE,1.1 Message-ID: <200008031728.KAA26849@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv26804 Added Files: test_urlparse.py Log Message: Checking in empty tests for urlparse, as future place holders --- NEW FILE --- From python-dev@python.org Thu Aug 3 18:38:34 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:38:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/texinputs python.sty,1.61,1.62 Message-ID: <200008031738.KAA27830@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/texinputs In directory slayer.i.sourceforge.net:/tmp/cvs-serv27817/texinputs Modified Files: python.sty Log Message: \py@varvars: Merge the various definitions to be the simplist one that does everything needed, and discard the older stuff that is not being used. Index: python.sty =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/texinputs/python.sty,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -r1.61 -r1.62 *** python.sty 2000/06/30 17:57:05 1.61 --- python.sty 2000/08/03 17:38:30 1.62 *************** *** 751,761 **** \newcommand{\newsgroup}[1]{{\small\textsf{#1}}} ! %\newcommand{\py@varvars}[1]{{\def\,{\/{\char`\,}}\var{#1}}} ! \newcommand{\py@varvars}[1]{% {\let\unspecified=\py@unspecified% \let\moreargs=\py@moreargs% ! \def\,{\/{\char`\,}}\var{#1}}} ! % let's see if this breaks anything now; we may be able to simplify... ! \renewcommand{\py@varvars}[1]{\var{#1}} % I'd really like to get rid of this! --- 751,758 ---- \newcommand{\newsgroup}[1]{{\small\textsf{#1}}} ! \newcommand{\py@varvars}[1]{{% {\let\unspecified=\py@unspecified% \let\moreargs=\py@moreargs% ! \var{#1}}}} % I'd really like to get rid of this! From python-dev@python.org Thu Aug 3 18:39:23 2000 From: python-dev@python.org (Greg Stein) Date: Thu, 3 Aug 2000 10:39:23 -0700 Subject: [Python-checkins] CVS: python/nondist/src/Compiler/compiler transformer.py,1.10,1.11 Message-ID: <200008031739.KAA27908@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/src/Compiler/compiler In directory slayer.i.sourceforge.net:/tmp/cvs-serv27804 Modified Files: transformer.py Log Message: add a bit more legal junk (too lazy to paste in the whole BSD license tho; included by ref) Index: transformer.py =================================================================== RCS file: /cvsroot/python/python/nondist/src/Compiler/compiler/transformer.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** transformer.py 2000/05/02 22:32:59 1.10 --- transformer.py 2000/08/03 17:39:13 1.11 *************** *** 1,2 **** --- 1,18 ---- + # + # Copyright (C) 1997-1998 Greg Stein. All Rights Reserved. + # + # This module is provided under a BSD-ish license. See + # http://www.opensource.org/licenses/bsd-license.html + # and replace OWNER, ORGANIZATION, and YEAR as appropriate. + # + # + # Written by Greg Stein (gstein@lyra.org) + # and Bill Tutt (rassilon@lima.mudlib.org) + # February 1997. + # + # Support for ast.Node subclasses written and other revisions by + # Jeremy Hylton (jeremy@cnri.reston.va.us) + # + """Parse tree transformation module. *************** *** 9,20 **** """ - # Copyright 1997-1998 Greg Stein and Bill Tutt - # - # Written by Greg Stein (gstein@lyra.org) - # and Bill Tutt (rassilon@lima.mudlib.org) - # February 1997. - # - # Support for Node subclasses written and other revisions by - # Jeremy Hylton (jeremy@cnri.reston.va.us) # # The output tree has the following nodes: --- 25,28 ---- From python-dev@python.org Thu Aug 3 18:43:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:43:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects rangeobject.c,2.16,2.17 Message-ID: <200008031743.KAA28246@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv28227 Modified Files: rangeobject.c Log Message: Remove the tp_print handler. Revise the tp_repr handler to produce a more "minimal" presentation. Make the tolist() method use PyArg_ParseTuple() and provide a docstring. Index: rangeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** rangeobject.c 2000/07/09 06:21:27 2.16 --- rangeobject.c 2000/08/03 17:43:02 2.17 *************** *** 59,92 **** } - static int - range_print(rangeobject *r, FILE *fp, int flags) - { - int i, j; - - fprintf(fp, "("); - for (i = 0; i < r->reps; ++i) - for (j = 0; j < r->len; ++j) { - if (j > 0 || i > 0) - fprintf(fp, ", "); - - fprintf(fp, "%ld", r->start + j * r->step); - } - - if (r->len == 1 && r->reps == 1) - fprintf(fp, ","); - fprintf(fp, ")"); - return 0; - } - static PyObject * range_repr(rangeobject *r) { ! char buf[80]; ! sprintf(buf, "(xrange(%ld, %ld, %ld) * %d)", ! r->start, ! r->start + r->len * r->step, ! r->step, ! r->reps); ! return PyString_FromString(buf); } --- 59,86 ---- } static PyObject * range_repr(rangeobject *r) { ! char buf1[80]; ! char buf2[80]; ! ! if (r->start == 0 && r->step == 1) { ! snprintf(buf1, sizeof(buf1), "xrange(%ld)", ! r->start + r->len * r->step); ! } ! else { ! char *fmt = "xrange(%ld, %ld, %ld)"; ! if (r->step == 1) ! fmt = "xrange(%ld, %ld)"; ! snprintf(buf1, sizeof(buf1), fmt, ! r->start, ! r->start + r->len * r->step, ! r->step); ! } ! if (r->reps != 1) { ! snprintf(buf2, sizeof(buf2), ! "(%s * %d)", buf1, r->reps); ! } ! return PyString_FromString(r->reps == 1 ? buf1 : buf2); } *************** *** 171,175 **** int len = self->len * self->reps; ! if (! PyArg_Parse(args, "")) return NULL; --- 165,169 ---- int len = self->len * self->reps; ! if (! PyArg_ParseTuple(args, ":tolist")) return NULL; *************** *** 189,193 **** { static PyMethodDef range_methods[] = { ! {"tolist", (PyCFunction)range_tolist}, {NULL, NULL} }; --- 183,189 ---- { static PyMethodDef range_methods[] = { ! {"tolist", (PyCFunction)range_tolist, METH_VARARGS, ! "tolist() -> list\n" ! "Return a list object with the same values."}, {NULL, NULL} }; *************** *** 229,237 **** 0, /* Item size for varobject */ (destructor)range_dealloc, /*tp_dealloc*/ ! (printfunc)range_print, /*tp_print*/ (getattrfunc)range_getattr, /*tp_getattr*/ 0, /*tp_setattr*/ (cmpfunc)range_compare, /*tp_compare*/ ! (reprfunc)range_repr, /*tp_repr*/ 0, /*tp_as_number*/ &range_as_sequence, /*tp_as_sequence*/ --- 225,233 ---- 0, /* Item size for varobject */ (destructor)range_dealloc, /*tp_dealloc*/ ! 0, /*tp_print*/ (getattrfunc)range_getattr, /*tp_getattr*/ 0, /*tp_setattr*/ (cmpfunc)range_compare, /*tp_compare*/ ! (reprfunc)range_repr, /*tp_repr*/ 0, /*tp_as_number*/ &range_as_sequence, /*tp_as_sequence*/ From python-dev@python.org Thu Aug 3 19:16:52 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 11:16:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Misc COPYRIGHT,1.4,NONE Message-ID: <200008031816.LAA01468@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv1452 Removed Files: Tag: cnri-16-start COPYRIGHT Log Message: The Misc/COPYRIGHT file is superseded by the toplevel LICENSE file. From python-dev@python.org Thu Aug 3 19:42:31 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:42:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include unicodeobject.h,2.17,2.18 Message-ID: <200008031842.LAA08557@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv8534/Include Modified Files: unicodeobject.h Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: unicodeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/unicodeobject.h,v retrieving revision 2.17 retrieving revision 2.18 diff -C2 -r2.17 -r2.18 *** unicodeobject.h 2000/08/03 16:24:24 2.17 --- unicodeobject.h 2000/08/03 18:42:28 2.18 *************** *** 205,210 **** Py_UNICODE *str; /* Raw Unicode buffer */ long hash; /* Hash value; -1 if not set */ ! PyObject *utf8str; /* UTF-8 encoded version as Python string, ! or NULL */ } PyUnicodeObject; --- 205,211 ---- Py_UNICODE *str; /* Raw Unicode buffer */ long hash; /* Hash value; -1 if not set */ ! PyObject *defenc; /* (Default) Encoded version as Python ! string, or NULL; this is used for ! implementing the buffer protocol */ } PyUnicodeObject; From python-dev@python.org Thu Aug 3 19:43:01 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:43:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python getargs.c,2.42,2.43 Message-ID: <200008031843.LAA08602@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv8588/Python Modified Files: getargs.c Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: getargs.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v retrieving revision 2.42 retrieving revision 2.43 diff -C2 -r2.42 -r2.43 *** getargs.c 2000/07/22 18:47:25 2.42 --- getargs.c 2000/08/03 18:42:59 2.43 *************** *** 373,377 **** /* Internal API needed by convertsimple1(): */ extern ! PyObject *_PyUnicode_AsUTF8String(PyObject *unicode, const char *errors); --- 373,377 ---- /* Internal API needed by convertsimple1(): */ extern ! PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode, const char *errors); *************** *** 568,572 **** *p = PyString_AS_STRING(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsUTF8String(arg, NULL); if (arg == NULL) return "unicode conversion error"; --- 568,573 ---- *p = PyString_AS_STRING(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsDefaultEncodedString( ! arg, NULL); if (arg == NULL) return "unicode conversion error"; *************** *** 613,617 **** *p = PyString_AsString(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsUTF8String(arg, NULL); if (arg == NULL) return "unicode conversion error"; --- 614,619 ---- *p = PyString_AsString(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsDefaultEncodedString( ! arg, NULL); if (arg == NULL) return "unicode conversion error"; *************** *** 645,649 **** encoding = (const char *)va_arg(*p_va, const char *); if (encoding == NULL) ! return "(encoding is NULL)"; /* Get 's' parameter: the output buffer to use */ --- 647,651 ---- encoding = (const char *)va_arg(*p_va, const char *); if (encoding == NULL) ! encoding = PyUnicode_GetDefaultEncoding(); /* Get 's' parameter: the output buffer to use */ From python-dev@python.org Thu Aug 3 19:44:31 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:44:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.54,2.55 Message-ID: <200008031844.LAA08711@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv8693/Objects Modified Files: unicodeobject.c Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.54 retrieving revision 2.55 diff -C2 -r2.54 -r2.55 *** unicodeobject.c 2000/08/03 16:24:25 2.54 --- unicodeobject.c 2000/08/03 18:44:28 2.55 *************** *** 166,172 **** reset: /* Reset the object caches */ ! if (unicode->utf8str) { ! Py_DECREF(unicode->utf8str); ! unicode->utf8str = NULL; } unicode->hash = -1; --- 166,172 ---- reset: /* Reset the object caches */ ! if (unicode->defenc) { ! Py_DECREF(unicode->defenc); ! unicode->defenc = NULL; } unicode->hash = -1; *************** *** 244,248 **** unicode->length = length; unicode->hash = -1; ! unicode->utf8str = NULL; return unicode; --- 244,248 ---- unicode->length = length; unicode->hash = -1; ! unicode->defenc = NULL; return unicode; *************** *** 263,269 **** unicode->length = 0; } ! if (unicode->utf8str) { ! Py_DECREF(unicode->utf8str); ! unicode->utf8str = NULL; } /* Add to free list */ --- 263,269 ---- unicode->length = 0; } ! if (unicode->defenc) { ! Py_DECREF(unicode->defenc); ! unicode->defenc = NULL; } /* Add to free list */ *************** *** 274,278 **** else { PyMem_DEL(unicode->str); ! Py_XDECREF(unicode->utf8str); PyObject_DEL(unicode); } --- 274,278 ---- else { PyMem_DEL(unicode->str); ! Py_XDECREF(unicode->defenc); PyObject_DEL(unicode); } *************** *** 530,533 **** --- 530,560 ---- } + /* Return a Python string holding the default encoded value of the + Unicode object. + + The resulting string is cached in the Unicode object for subsequent + usage by this function. The cached version is needed to implement + the character buffer interface and will live (at least) as long as + the Unicode object itself. + + The refcount of the string is *not* incremented. + + *** Exported for internal use by the interpreter only !!! *** + + */ + + PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode, + const char *errors) + { + PyObject *v = ((PyUnicodeObject *)unicode)->defenc; + + if (v) + return v; + v = PyUnicode_AsEncodedString(unicode, NULL, errors); + if (v && errors == NULL) + ((PyUnicodeObject *)unicode)->defenc = v; + return v; + } + Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode) { *************** *** 875,907 **** } - /* Return a Python string holding the UTF-8 encoded value of the - Unicode object. - - The resulting string is cached in the Unicode object for subsequent - usage by this function. The cached version is needed to implement - the character buffer interface and will live (at least) as long as - the Unicode object itself. - - The refcount of the string is *not* incremented. - - *** Exported for internal use by the interpreter only !!! *** - - */ - - PyObject *_PyUnicode_AsUTF8String(PyObject *unicode, - const char *errors) - { - PyObject *v = ((PyUnicodeObject *)unicode)->utf8str; - - if (v) - return v; - v = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), - PyUnicode_GET_SIZE(unicode), - errors); - if (v && errors == NULL) - ((PyUnicodeObject *)unicode)->utf8str = v; - return v; - } - PyObject *PyUnicode_AsUTF8String(PyObject *unicode) { --- 902,905 ---- *************** *** 912,916 **** return NULL; } ! str = _PyUnicode_AsUTF8String(unicode, NULL); if (str == NULL) return NULL; --- 910,916 ---- return NULL; } ! str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), ! PyUnicode_GET_SIZE(unicode), ! NULL); if (str == NULL) return NULL; *************** *** 4520,4524 **** return -1; } ! str = _PyUnicode_AsUTF8String((PyObject *)self, NULL); if (str == NULL) return -1; --- 4520,4524 ---- return -1; } ! str = _PyUnicode_AsDefaultEncodedString((PyObject *)self, NULL); if (str == NULL) return -1; *************** *** 5131,5135 **** if (v->str) PyMem_DEL(v->str); ! Py_XDECREF(v->utf8str); PyObject_DEL(v); } --- 5131,5135 ---- if (v->str) PyMem_DEL(v->str); ! Py_XDECREF(v->defenc); PyObject_DEL(v); } From python-dev@python.org Thu Aug 3 19:46:10 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:46:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Misc unicode.txt,3.8,3.9 Message-ID: <200008031846.LAA08911@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv8894 Modified Files: unicode.txt Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: unicode.txt =================================================================== RCS file: /cvsroot/python/python/dist/src/Misc/unicode.txt,v retrieving revision 3.8 retrieving revision 3.9 diff -C2 -r3.8 -r3.9 *** unicode.txt 2000/06/08 17:51:33 3.8 --- unicode.txt 2000/08/03 18:46:08 3.9 *************** *** 1,4 **** ============================================================================= ! Python Unicode Integration Proposal Version: 1.4 ----------------------------------------------------------------------------- --- 1,4 ---- ============================================================================= ! Python Unicode Integration Proposal Version: 1.6 ----------------------------------------------------------------------------- *************** *** 42,56 **** by all APIs taking an encoding name as input). ! Encoding names should follow the name conventions as used by the Unicode Consortium: spaces are converted to hyphens, e.g. 'utf 16' is written as 'utf-16'. ! Codec modules should use the same names, but with hyphens converted to underscores, e.g. utf_8, utf_16, iso_8859_1. - · The should be the widely used 'utf-8' format. This - is very close to the standard 7-bit ASCII format and thus resembles the - standard used programming nowadays in most aspects. Unicode Constructors: --- 42,92 ---- by all APIs taking an encoding name as input). ! · Encoding names should follow the name conventions as used by the Unicode Consortium: spaces are converted to hyphens, e.g. 'utf 16' is written as 'utf-16'. ! · Codec modules should use the same names, but with hyphens converted to underscores, e.g. utf_8, utf_16, iso_8859_1. + Unicode Default Encoding: + ------------------------- + + The Unicode implementation has to make some assumption about the + encoding of 8-bit strings passed to it for coercion and about the + encoding to as default for conversion of Unicode to strings when no + specific encoding is given. This encoding is called + throughout this text. + + For this, the implementation maintains a global which can be set in + the site.py Python startup script. Subsequent changes are not + possible. The can be set and queried using the + two sys module APIs: + + sys.setdefaultencoding(encoding) + --> Sets the used by the Unicode implementation. + encoding has to be an encoding which is supported by the Python + installation, otherwise, a LookupError is raised. + + Note: This API is only available in site.py ! It is removed + from the sys module by site.py after usage. + + sys.getdefaultencoding() + --> Returns the current . + + If not otherwise defined or set, the defaults to + 'ascii'. This encoding is also the startup default of Python (and in + effect before site.py is executed). + + Note that the default site.py startup module contains disabled + optional code which can set the according to the + encoding defined by the current locale. The locale module is used to + extract the encoding from the locale default settings defined by the + OS environment (see locale.py). If the encoding cannot be determined, + is unkown or unsupported, the code defaults to setting the to 'ascii'. To enable this code, edit the site.py file or + place the appropriate code into the sitecustomize.py module of your + Python installation. + Unicode Constructors: *************** *** 160,165 **** encoding>. ! For the same reason, Unicode objects should return the same hash value ! as their UTF-8 equivalent strings. When compared using cmp() (or PyObject_Compare()) the implementation --- 196,203 ---- encoding>. ! Unicode objects should return the same hash value as their ASCII ! equivalent strings. Unicode strings holding non-ASCII values are not ! guaranteed to return the same hash values as the default encoded ! equivalent string representation. When compared using cmp() (or PyObject_Compare()) the implementation *************** *** 662,670 **** Unicode objects should have a pointer to a cached Python string object ! holding the object's value using the current . This is needed for performance and internal parsing (see ! Internal Argument Parsing) reasons. The buffer is filled when the ! first conversion request to the is issued on the ! object. Interning is not needed (for now), since Python identifiers are --- 700,707 ---- Unicode objects should have a pointer to a cached Python string object ! holding the object's value using the . ! This is needed for performance and internal parsing (see Internal ! Argument Parsing) reasons. The buffer is filled when the first ! conversion request to the is issued on the object. Interning is not needed (for now), since Python identifiers are *************** *** 702,710 **** ----------------- ! Implement the buffer interface using the Python string object as basis for bf_getcharbuf (corresponds to the "t#" argument parsing marker) and the internal buffer for bf_getreadbuf (corresponds to the "s#" argument parsing marker). If bf_getcharbuf is requested ! and the object does not yet exist, it is created first. This has the advantage of being able to write to output streams (which --- 739,747 ---- ----------------- ! Implement the buffer interface using the Python string object as basis for bf_getcharbuf (corresponds to the "t#" argument parsing marker) and the internal buffer for bf_getreadbuf (corresponds to the "s#" argument parsing marker). If bf_getcharbuf is requested ! and the object does not yet exist, it is created first. This has the advantage of being able to write to output streams (which *************** *** 776,781 **** "U": Check for Unicode object and return a pointer to it ! "s": For Unicode objects: auto convert them to the ! and return a pointer to the object's buffer. "s#": Access to the Unicode object via the bf_getreadbuf buffer interface --- 813,818 ---- "U": Check for Unicode object and return a pointer to it ! "s": For Unicode objects: return a pointer to the object's ! buffer (which uses the ). "s#": Access to the Unicode object via the bf_getreadbuf buffer interface *************** *** 786,791 **** "t#": Access to the Unicode object via the bf_getcharbuf buffer interface (see Buffer Interface); note that the length relates to the buffer ! length, not necessarily to the Unicode string length (this may ! be different depending on the ). "es": --- 823,827 ---- "t#": Access to the Unicode object via the bf_getcharbuf buffer interface (see Buffer Interface); note that the length relates to the buffer ! length, not necessarily to the Unicode string length. "es": *************** *** 1008,1011 **** --- 1044,1052 ---- History of this Proposal: ------------------------- + 1.6: Changed to since this is the name used in the + implementation. Added notes about the usage of in the + buffer protocol implementation. + 1.5: Added notes about setting the . Fixed some + typos (thanks to Andrew Kuchling). Changed to . 1.4: Added note about mixed type comparisons and contains tests. Changed treating of Unicode objects in format strings (if used From python-dev@python.org Thu Aug 3 20:26:25 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 3 Aug 2000 12:26:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/scripts trace.py,NONE,1.1 Message-ID: <200008031926.MAA18490@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/scripts In directory slayer.i.sourceforge.net:/tmp/cvs-serv18344 Added Files: trace.py Log Message: Python code coverage tool by Skip Montanaro and Andrew Dalke --- NEW FILE --- #!/usr/bin/env python # Copyright 2000, Mojam Media, Inc., all rights reserved. # Author: Skip Montanaro # # Copyright 1999, Bioreason, Inc., all rights reserved. # Author: Andrew Dalke # # Copyright 1995-1997, Automatrix, Inc., all rights reserved. # Author: Skip Montanaro # # Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. # # # Permission to use, copy, modify, and distribute this Python software and # its associated documentation for any purpose without fee is hereby # granted, provided that the above copyright notice appears in all copies, # and that both that copyright notice and this permission notice appear in # supporting documentation, and that the name of neither Automatrix, # Bioreason or Mojam Media be used in advertising or publicity pertaining to # distribution of the software without specific, written prior permission. # # # Summary of recent changes: # Support for files with the same basename (submodules in packages) # Expanded the idea of how to ignore files or modules # Split tracing and counting into different classes # Extracted count information and reporting from the count class # Added some ability to detect which missing lines could be executed # Added pseudo-pragma to prohibit complaining about unexecuted lines # Rewrote the main program # Summary of older changes: # Added run-time display of statements being executed # Incorporated portability and performance fixes from Greg Stein # Incorporated main program from Michael Scharf """ program/module to trace Python program or function execution Sample use, command line: trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs trace.py -t --ignore-dir '$prefix' spam.py eggs Sample use, programmatically (still more complicated than it should be) # create an Ignore option, telling it what you want to ignore ignore = trace.Ignore(dirs = [sys.prefix, sys.exec_prefix]) # create a Coverage object, telling it what to ignore coverage = trace.Coverage(ignore) # run the new command using the given trace trace.run(coverage.trace, 'main()') # make a report, telling it where you want output t = trace.create_results_log(coverage.results(), '/usr/local/Automatrix/concerts/coverage') show_missing = 1) The Trace class can be instantited instead of the Coverage class if runtime display of executable lines is desired instead of statement converage measurement. """ import sys, os, string, marshal, tempfile, copy, operator def usage(outfile): outfile.write("""Usage: %s [OPTIONS] [ARGS] Execution: --help Display this help then exit. --version Output version information then exit. -t,--trace Print the line to be executed to sys.stdout. -c,--count Count the number of times a line is executed. Results are written in the results file, if given. -r,--report Generate a report from a results file; do not execute any code. (One of `-t', `-c' or `-r' must be specified) I/O: -f,--file= File name for accumulating results over several runs. (No file name means do not archive results) -d,--logdir= Directory to use when writing annotated log files. Log files are the module __name__ with `.` replaced by os.sep and with '.pyl' added. -m,--missing Annotate all executable lines which were not executed with a '>>>>>> '. -R,--no-report Do not generate the annotated reports. Useful if you want to accumulate several over tests. Selection: Do not trace or log lines from ... --ignore-module=[string] modules with the given __name__, and submodules of that module --ignore-dir=[string] files in the stated directory (multiple directories can be joined by os.pathsep) The selection options can be listed multiple times to ignore different modules. """ % sys.argv[0]) class Ignore: def __init__(self, modules = None, dirs = None): self._mods = modules or [] self._dirs = dirs or [] self._ignore = { '': 1 } def names(self, filename, modulename): if self._ignore.has_key(modulename): return self._ignore[modulename] # haven't seen this one before, so see if the module name is # on the ignore list. Need to take some care since ignoring # "cmp" musn't mean ignoring "cmpcache" but ignoring # "Spam" must also mean ignoring "Spam.Eggs". for mod in self._mods: if mod == modulename: # Identical names, so ignore self._ignore[modulename] = 1 return 1 # check if the module is a proper submodule of something on # the ignore list n = len(mod) # (will not overflow since if the first n characters are the # same and the name has not already occured, then the size # of "name" is greater than that of "mod") if mod == modulename[:n] and modulename[n] == '.': self._ignore[modulename] = 1 return 1 # Now check that __file__ isn't in one of the directories if filename is None: # must be a built-in, so we must ignore self._ignore[modulename] = 1 return 1 # Ignore a file when it contains one of the ignorable paths for d in self._dirs: # The '+ os.sep' is to ensure that d is a parent directory, # as compared to cases like: # d = "/usr/local" # filename = "/usr/local.py" # or # d = "/usr/local.py" # filename = "/usr/local.py" if string.find(filename, d + os.sep) == 0: self._ignore[modulename] = 1 return 1 # Tried the different ways, so we don't ignore this module self._ignore[modulename] = 0 return 0 def run(trace, cmd): import __main__ dict = __main__.__dict__ sys.settrace(trace) try: exec cmd in dict, dict finally: sys.settrace(None) def runctx(trace, cmd, globals=None, locals=None): if globals is None: globals = {} if locals is None: locals = {} sys.settrace(trace) try: exec cmd in dict, dict finally: sys.settrace(None) def runfunc(trace, func, *args, **kw): result = None sys.settrace(trace) try: result = apply(func, args, kw) finally: sys.settrace(None) return result class CoverageResults: def __init__(self, counts = {}, modules = {}): self.counts = counts.copy() # map (filename, lineno) to count self.modules = modules.copy() # map filenames to modules def update(self, other): """Merge in the data from another CoverageResults""" counts = self.counts other_counts = other.counts modules = self.modules other_modules = other.modules for key in other_counts.keys(): counts[key] = counts.get(key, 0) + other_counts[key] for key in other_modules.keys(): if modules.has_key(key): # make sure they point to the same file assert modules[key] == other_modules[key], \ "Strange! filename %s has two different module names" % \ (key, modules[key], other_module[key]) else: modules[key] = other_modules[key] # Given a code string, return the SET_LINENO information def _find_LINENO_from_string(co_code): """return all of the SET_LINENO information from a code string""" import dis linenos = {} # This code was filched from the `dis' module then modified n = len(co_code) i = 0 prev_op = None prev_lineno = 0 while i < n: c = co_code[i] op = ord(c) if op == dis.SET_LINENO: if prev_op == op: # two SET_LINENO in a row, so the previous didn't # indicate anything. This occurs with triple # quoted strings (?). Remove the old one. del linenos[prev_lineno] prev_lineno = ord(co_code[i+1]) + ord(co_code[i+2])*256 linenos[prev_lineno] = 1 if op >= dis.HAVE_ARGUMENT: i = i + 3 else: i = i + 1 prev_op = op return linenos def _find_LINENO(code): """return all of the SET_LINENO information from a code object""" import types # get all of the lineno information from the code of this scope level linenos = _find_LINENO_from_string(code.co_code) # and check the constants for references to other code objects for c in code.co_consts: if type(c) == types.CodeType: # find another code object, so recurse into it linenos.update(_find_LINENO(c)) return linenos def find_executable_linenos(filename): """return a dict of the line numbers from executable statements in a file Works by finding all of the code-like objects in the module then searching the byte code for 'SET_LINENO' terms (so this won't work one -O files). """ import parser prog = open(filename).read() ast = parser.suite(prog) code = parser.compileast(ast, filename) # The only way I know to find line numbers is to look for the # SET_LINENO instructions. Isn't there some way to get it from # the AST? return _find_LINENO(code) ### XXX because os.path.commonprefix seems broken by my way of thinking... def commonprefix(dirs): "Given a list of pathnames, returns the longest common leading component" if not dirs: return '' n = copy.copy(dirs) for i in range(len(n)): n[i] = n[i].split(os.sep) prefix = n[0] for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: prefix = prefix[:i] if i == 0: return '' break return os.sep.join(prefix) def create_results_log(results, dirname = ".", show_missing = 1, save_counts = 0): import re # turn the counts data ("(filename, lineno) = count") into something # accessible on a per-file basis per_file = {} for filename, lineno in results.counts.keys(): lines_hit = per_file[filename] = per_file.get(filename, {}) lines_hit[lineno] = results.counts[(filename, lineno)] # try and merge existing counts and modules file from dirname try: counts = marshal.load(open(os.path.join(dirname, "counts"))) modules = marshal.load(open(os.path.join(dirname, "modules"))) results.update(results.__class__(counts, modules)) except IOError: pass # there are many places where this is insufficient, like a blank # line embedded in a multiline string. blank = re.compile(r'^\s*(#.*)?$') # generate file paths for the coverage files we are going to write... fnlist = [] tfdir = tempfile.gettempdir() for key in per_file.keys(): filename = key # skip some "files" we don't care about... if filename == "": continue # are these caused by code compiled using exec or something? if filename.startswith(tfdir): continue # XXX this is almost certainly not portable!!! fndir = os.path.dirname(filename) if filename[:1] == os.sep: coverpath = os.path.join(dirname, "."+fndir) else: coverpath = os.path.join(dirname, fndir) if filename.endswith(".pyc") or filename.endswith(".pyo"): filename = filename[:-1] # Get the original lines from the .py file try: lines = open(filename, 'r').readlines() except IOError, err: sys.stderr.write( "%s: Could not open %s for reading because: %s - skipping\n" % \ ("trace", `filename`, err.strerror)) continue modulename = os.path.split(results.modules[key])[1] # build list file name by appending a ".cover" to the module name # and sticking it into the specified directory listfilename = os.path.join(coverpath, modulename + ".cover") #sys.stderr.write("modulename: %(modulename)s\n" # "filename: %(filename)s\n" # "coverpath: %(coverpath)s\n" # "listfilename: %(listfilename)s\n" # "dirname: %(dirname)s\n" # % locals()) try: outfile = open(listfilename, 'w') except IOError, err: sys.stderr.write( '%s: Could not open %s for writing because: %s - skipping\n' % ("trace", `listfilename`, err.strerror)) continue # If desired, get a list of the line numbers which represent # executable content (returned as a dict for better lookup speed) if show_missing: executable_linenos = find_executable_linenos(filename) else: executable_linenos = {} lines_hit = per_file[key] for i in range(len(lines)): line = lines[i] # do the blank/comment match to try to mark more lines # (help the reader find stuff that hasn't been covered) if lines_hit.has_key(i+1): # count precedes the lines that we captured outfile.write('%5d: ' % lines_hit[i+1]) elif blank.match(line): # blank lines and comments are preceded by dots outfile.write(' . ') else: # lines preceded by no marks weren't hit # Highlight them if so indicated, unless the line contains # '#pragma: NO COVER' (it is possible to embed this into # the text as a non-comment; no easy fix) if executable_linenos.has_key(i+1) and \ string.find(lines[i], string.join(['#pragma', 'NO COVER'])) == -1: outfile.write('>>>>>> ') else: outfile.write(' '*7) outfile.write(string.expandtabs(lines[i], 8)) outfile.close() if save_counts: # try and store counts and module info into dirname try: marshal.dump(results.counts, open(os.path.join(dirname, "counts"), "w")) marshal.dump(results.modules, open(os.path.join(dirname, "modules"), "w")) except IOError, err: sys.stderr.write("cannot save counts/modules files because %s" % err.strerror) # There is a lot of code shared between these two classes even though # it is straightforward to make a super class to share code. However, # for performance reasons (remember, this is called at every step) I # wanted to keep everything to a single function call. Also, by # staying within a single scope, I don't have to temporarily nullify # sys.settrace, which would slow things down even more. class Coverage: def __init__(self, ignore = Ignore()): self.ignore = ignore self.ignore_names = ignore._ignore # access ignore's cache (speed hack) self.counts = {} # keys are (filename, linenumber) self.modules = {} # maps filename -> module name def trace(self, frame, why, arg): if why == 'line': # something is fishy about getting the file name filename = frame.f_globals.get("__file__", None) if filename is None: filename = frame.f_code.co_filename modulename = frame.f_globals["__name__"] # We do this next block to keep from having to make methods # calls, which also requires resetting the trace ignore_it = self.ignore_names.get(modulename, -1) if ignore_it == -1: # unknown filename sys.settrace(None) ignore_it = self.ignore.names(filename, modulename) sys.settrace(self.trace) # record the module name for every file self.modules[filename] = modulename if not ignore_it: lineno = frame.f_lineno # record the file name and line number of every trace key = (filename, lineno) self.counts[key] = self.counts.get(key, 0) + 1 return self.trace def results(self): return CoverageResults(self.counts, self.modules) class Trace: def __init__(self, ignore = Ignore()): self.ignore = ignore self.ignore_names = ignore._ignore # access ignore's cache (speed hack) self.files = {'': None} # stores lines from the .py file, or None def trace(self, frame, why, arg): if why == 'line': filename = frame.f_code.co_filename modulename = frame.f_globals["__name__"] # We do this next block to keep from having to make methods # calls, which also requires resetting the trace ignore_it = self.ignore_names.get(modulename, -1) if ignore_it == -1: # unknown filename sys.settrace(None) ignore_it = self.ignore.names(filename, modulename) sys.settrace(self.trace) if not ignore_it: lineno = frame.f_lineno files = self.files if filename != '' and not files.has_key(filename): files[filename] = map(string.rstrip, open(filename).readlines()) # If you want to see filenames (the original behaviour), try: # modulename = filename # or, prettier but confusing when several files have the same name # modulename = os.path.basename(filename) if files[filename] != None: print '%s(%d): %s' % (os.path.basename(filename), lineno, files[filename][lineno-1]) else: print '%s(%d): ??' % (modulename, lineno) return self.trace def _err_exit(msg): sys.stderr.write("%s: %s\n" % (sys.argv[0], msg)) sys.exit(1) def main(argv = None): import getopt if argv is None: argv = sys.argv try: opts, prog_argv = getopt.getopt(argv[1:], "tcrRf:d:m", ["help", "version", "trace", "count", "report", "no-report", "file=", "logdir=", "missing", "ignore-module=", "ignore-dir="]) except getopt.error, msg: sys.stderr.write("%s: %s\n" % (sys.argv[0], msg)) sys.stderr.write("Try `%s --help' for more information\n" % sys.argv[0]) sys.exit(1) trace = 0 count = 0 report = 0 no_report = 0 counts_file = None logdir = "." missing = 0 ignore_modules = [] ignore_dirs = [] for opt, val in opts: if opt == "--help": usage(sys.stdout) sys.exit(0) if opt == "--version": sys.stdout.write("trace 2.0\n") sys.exit(0) if opt == "-t" or opt == "--trace": trace = 1 continue if opt == "-c" or opt == "--count": count = 1 continue if opt == "-r" or opt == "--report": report = 1 continue if opt == "-R" or opt == "--no-report": no_report = 1 continue if opt == "-f" or opt == "--file": counts_file = val continue if opt == "-d" or opt == "--logdir": logdir = val continue if opt == "-m" or opt == "--missing": missing = 1 continue if opt == "--ignore-module": ignore_modules.append(val) continue if opt == "--ignore-dir": for s in string.split(val, os.pathsep): s = os.path.expandvars(s) # should I also call expanduser? (after all, could use $HOME) s = string.replace(s, "$prefix", os.path.join(sys.prefix, "lib", "python" + sys.version[:3])) s = string.replace(s, "$exec_prefix", os.path.join(sys.exec_prefix, "lib", "python" + sys.version[:3])) s = os.path.normpath(s) ignore_dirs.append(s) continue assert 0, "Should never get here" if len(prog_argv) == 0: _err_exit("missing name of file to run") if count + trace + report > 1: _err_exit("can only specify one of --trace, --count or --report") if count + trace + report == 0: _err_exit("must specify one of --trace, --count or --report") if report and counts_file is None: _err_exit("--report requires a --file") if report and no_report: _err_exit("cannot specify both --report and --no-report") if logdir is not None: # warn if the directory doesn't exist, but keep on going # (is this the correct behaviour?) if not os.path.isdir(logdir): sys.stderr.write( "trace: WARNING, --logdir directory %s is not available\n" % `logdir`) sys.argv = prog_argv progname = prog_argv[0] if eval(sys.version[:3])>1.3: sys.path[0] = os.path.split(progname)[0] # ??? # everything is ready ignore = Ignore(ignore_modules, ignore_dirs) if trace: t = Trace(ignore) try: run(t.trace, 'execfile(' + `progname` + ')') except IOError, err: _err_exit("Cannot run file %s because: %s" % \ (`sys.argv[0]`, err.strerror)) elif count: t = Coverage(ignore) try: run(t.trace, 'execfile(' + `progname` + ')') except IOError, err: _err_exit("Cannot run file %s because: %s" % \ (`sys.argv[0]`, err.strerror)) except SystemExit: pass results = t.results() # Add another lookup from the program's file name to its import name # This give the right results, but I'm not sure why ... results.modules[progname] = os.path.splitext(progname)[0] if counts_file: # add in archived data, if available try: old_counts, old_modules = marshal.load(open(counts_file, 'rb')) except IOError: pass else: results.update(CoverageResults(old_counts, old_modules)) if not no_report: create_results_log(results, logdir, missing) if counts_file: try: marshal.dump( (results.counts, results.modules), open(counts_file, 'wb')) except IOError, err: _err_exit("Cannot save counts file %s because: %s" % \ (`counts_file`, err.strerror)) elif report: old_counts, old_modules = marshal.load(open(counts_file, 'rb')) results = CoverageResults(old_counts, old_modules) create_results_log(results, logdir, missing) else: assert 0, "Should never get here" if __name__=='__main__': main() From python-dev@python.org Thu Aug 3 20:38:10 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 12:38:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ext ext.tex,1.80,1.81 Message-ID: <200008031938.MAA21177@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ext In directory slayer.i.sourceforge.net:/tmp/cvs-serv21136/Doc/ext Modified Files: ext.tex Log Message: Added descriptions of the new parser markers for PyArg_ParseTuple(). Index: ext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ext/ext.tex,v retrieving revision 1.80 retrieving revision 1.81 diff -C2 -r1.80 -r1.81 *** ext.tex 2000/07/09 16:27:33 1.80 --- ext.tex 2000/08/03 19:38:07 1.81 *************** *** 677,710 **** \begin{description} ! \item[\samp{s} (string) {[char *]}] ! Convert a Python string to a C pointer to a character string. You ! must not provide storage for the string itself; a pointer to an ! existing string is stored into the character pointer variable whose ! address you pass. The C string is null-terminated. The Python string ! must not contain embedded null bytes; if it does, a \exception{TypeError} ! exception is raised. ! ! \item[\samp{s\#} (string) {[char *, int]}] ! This variant on \samp{s} stores into two C variables, the first one ! a pointer to a character string, the second one its length. In this ! case the Python string may contain embedded null bytes. \item[\samp{z} (string or \code{None}) {[char *]}] Like \samp{s}, but the Python object may also be \code{None}, in which case the C pointer is set to \NULL{}. ! \item[\samp{z\#} (string or \code{None}) {[char *, int]}] This is to \samp{s\#} as \samp{z} is to \samp{s}. ! \item[\samp{u} (Unicode string) {[Py_UNICODE *]}] Convert a Python Unicode object to a C pointer to a null-terminated ! buffer of Unicode (UCS-2) data. As with \samp{s}, there is no need to provide storage for the Unicode data buffer; a pointer to the existing Unicode data is stored into the Py_UNICODE pointer variable whose address you pass. ! \item[\samp{u\#} (Unicode string) {[Py_UNICODE *, int]}] This variant on \samp{u} stores into two C variables, the first one a pointer to a Unicode data buffer, the second one its length. \item[\samp{b} (integer) {[char]}] --- 677,771 ---- \begin{description} ! \item[\samp{s} (string or Unicode object) {[char *]}] ! Convert a Python string or Unicode object to a C pointer to a ! character string. You must not provide storage for the string ! itself; a pointer to an existing string is stored into the character ! pointer variable whose address you pass. The C string is ! null-terminated. The Python string must not contain embedded null ! bytes; if it does, a \exception{TypeError} exception is raised. ! Unicode objects are converted to C strings using the default ! encoding. If this conversion fails, an \exception{UnicodeError} is ! raised. + \item[\samp{s\#} (string, Unicode or any read buffer compatible object) + {[char *, int]}] + This variant on \samp{s} stores into two C variables, the first one a + pointer to a character string, the second one its length. In this + case the Python string may contain embedded null bytes. Unicode + objects and all other read buffer compatible objects pass back a + reference to the raw internal data representation. In case of Unicode + objects the pointer points to a null-terminated buffer of 16-bit + Py_UNICODE (UTF-16) data. + \item[\samp{z} (string or \code{None}) {[char *]}] Like \samp{s}, but the Python object may also be \code{None}, in which case the C pointer is set to \NULL{}. ! \item[\samp{z\#} (string or \code{None} or any read buffer compatible object) ! {[char *, int]}] This is to \samp{s\#} as \samp{z} is to \samp{s}. ! \item[\samp{u} (Unicode object) {[Py_UNICODE *]}] Convert a Python Unicode object to a C pointer to a null-terminated ! buffer of 16-bit Unicode (UTF-16) data. As with \samp{s}, there is no need to provide storage for the Unicode data buffer; a pointer to the existing Unicode data is stored into the Py_UNICODE pointer variable whose address you pass. ! \item[\samp{u\#} (Unicode object) {[Py_UNICODE *, int]}] This variant on \samp{u} stores into two C variables, the first one a pointer to a Unicode data buffer, the second one its length. + + \item[\samp{es} (string, Unicode object or character buffer compatible + object) {[const char *encoding, char **buffer]}] + This variant on \samp{s} is used for encoding Unicode and objects + convertible to Unicode into a character buffer. It only works for + encoded data without embedded \NULL{} bytes. + + The variant reads one C variable and stores into two C variables, the + first one a pointer to an encoding name string (\var{encoding}), the + second a pointer to a pointer to a character buffer (\var{**buffer}, + the buffer used for storing the encoded data) and the third one a + pointer to an integer (\var{*buffer_length}, the buffer length). + + The encoding name must map to a registered codec. If set to \NULL{}, + the default encoding is used. + + \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed + size using \cfunction{PyMem_NEW()}, copy the encoded data into this + buffer and adjust \var{*buffer} to reference the newly allocated + storage. The caller is responsible for calling + \cfunction{PyMem_Free()} to free the allocated buffer after usage. + + \item[\samp{es\#} (string, Unicode object or character buffer compatible + object) {[const char *encoding, char **buffer, int *buffer_length]}] + This variant on \samp{s\#} is used for encoding Unicode and objects + convertible to Unicode into a character buffer. It reads one C + variable and stores into two C variables, the first one a pointer to + an encoding name string (\var{encoding}), the second a pointer to a + pointer to a character buffer (\var{**buffer}, the buffer used for + storing the encoded data) and the third one a pointer to an integer + (\var{*buffer_length}, the buffer length). + + The encoding name must map to a registered codec. If set to \NULL{}, + the default encoding is used. + + There are two modes of operation: + + If \var{*buffer} points a \NULL{} pointer, + \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed + size using \cfunction{PyMem_NEW()}, copy the encoded data into this + buffer and adjust \var{*buffer} to reference the newly allocated + storage. The caller is responsible for calling + \cfunction{PyMem_Free()} to free the allocated buffer after usage. + + If \var{*buffer} points to a non-\NULL{} pointer (an already allocated + buffer), \cfuntion{PyArg_ParseTuple()} will use this location as + buffer and interpret \var{*buffer_length} as buffer size. It will then + copy the encoded data into the buffer and 0-terminate it. Buffer + overflow is signalled with an exception. + + In both cases, \var{*buffer_length} is set to the length of the + encoded data without the trailing 0-byte. \item[\samp{b} (integer) {[char]}] From python-dev@python.org Thu Aug 3 21:57:47 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 3 Aug 2000 13:57:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib cgi.py,1.48,1.49 Message-ID: <200008032057.NAA02997@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2916 Modified Files: cgi.py Log Message: Remove very long doc string (it's all in the docs) Modify parse_qsl to interpret 'a=b=c' as key 'a' and value 'b=c' (which matches Perl's CGI.pm) Index: cgi.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/cgi.py,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -r1.48 -r1.49 *** cgi.py 2000/07/16 12:04:30 1.48 --- cgi.py 2000/08/03 20:57:44 1.49 *************** *** 5,408 **** This module defines a number of utilities for use by CGI scripts written in Python. - - - Introduction - ------------ - - A CGI script is invoked by an HTTP server, usually to process user - input submitted through an HTML
or element. - - Most often, CGI scripts live in the server's special cgi-bin - directory. The HTTP server places all sorts of information about the - request (such as the client's hostname, the requested URL, the query - string, and lots of other goodies) in the script's shell environment, - executes the script, and sends the script's output back to the client. - - The script's input is connected to the client too, and sometimes the - form data is read this way; at other times the form data is passed via - the "query string" part of the URL. This module (cgi.py) is intended - to take care of the different cases and provide a simpler interface to - the Python script. It also provides a number of utilities that help - in debugging scripts, and the latest addition is support for file - uploads from a form (if your browser supports it -- Grail 0.3 and - Netscape 2.0 do). - - The output of a CGI script should consist of two sections, separated - by a blank line. The first section contains a number of headers, - telling the client what kind of data is following. Python code to - generate a minimal header section looks like this: - - print "Content-type: text/html" # HTML is following - print # blank line, end of headers - - The second section is usually HTML, which allows the client software - to display nicely formatted text with header, in-line images, etc. - Here's Python code that prints a simple piece of HTML: - - print "CGI script output" - print "

This is my first CGI script

" - print "Hello, world!" - - It may not be fully legal HTML according to the letter of the - standard, but any browser will understand it. - - - Using the cgi module - -------------------- - - Begin by writing "import cgi". Don't use "from cgi import *" -- the - module defines all sorts of names for its own use or for backward - compatibility that you don't want in your namespace. - - It's best to use the FieldStorage class. The other classes define in this - module are provided mostly for backward compatibility. Instantiate it - exactly once, without arguments. This reads the form contents from - standard input or the environment (depending on the value of various - environment variables set according to the CGI standard). Since it may - consume standard input, it should be instantiated only once. - - The FieldStorage instance can be accessed as if it were a Python - dictionary. For instance, the following code (which assumes that the - Content-type header and blank line have already been printed) checks that - the fields "name" and "addr" are both set to a non-empty string: - - form = cgi.FieldStorage() - form_ok = 0 - if form.has_key("name") and form.has_key("addr"): - if form["name"].value != "" and form["addr"].value != "": - form_ok = 1 - if not form_ok: - print "

Error

" - print "Please fill in the name and addr fields." - return - ...further form processing here... - - Here the fields, accessed through form[key], are themselves instances - of FieldStorage (or MiniFieldStorage, depending on the form encoding). - - If the submitted form data contains more than one field with the same - name, the object retrieved by form[key] is not a (Mini)FieldStorage - instance but a list of such instances. If you are expecting this - possibility (i.e., when your HTML form contains multiple fields with - the same name), use the type() function to determine whether you have - a single instance or a list of instances. For example, here's code - that concatenates any number of username fields, separated by commas: - - username = form["username"] - if type(username) is type([]): - # Multiple username fields specified - usernames = "" - for item in username: - if usernames: - # Next item -- insert comma - usernames = usernames + "," + item.value - else: - # First item -- don't insert comma - usernames = item.value - else: - # Single username field specified - usernames = username.value - - If a field represents an uploaded file, the value attribute reads the - entire file in memory as a string. This may not be what you want. You can - test for an uploaded file by testing either the filename attribute or the - file attribute. You can then read the data at leisure from the file - attribute: - - fileitem = form["userfile"] - if fileitem.file: - # It's an uploaded file; count lines - linecount = 0 - while 1: - line = fileitem.file.readline() - if not line: break - linecount = linecount + 1 - - The file upload draft standard entertains the possibility of uploading - multiple files from one field (using a recursive multipart/* - encoding). When this occurs, the item will be a dictionary-like - FieldStorage item. This can be determined by testing its type - attribute, which should have the value "multipart/form-data" (or - perhaps another string beginning with "multipart/"). It this case, it - can be iterated over recursively just like the top-level form object. - - When a form is submitted in the "old" format (as the query string or as a - single data part of type application/x-www-form-urlencoded), the items - will actually be instances of the class MiniFieldStorage. In this case, - the list, file and filename attributes are always None. - - - Old classes - ----------- - - These classes, present in earlier versions of the cgi module, are still - supported for backward compatibility. New applications should use the - FieldStorage class. - - SvFormContentDict: single value form content as dictionary; assumes each - field name occurs in the form only once. - - FormContentDict: multiple value form content as dictionary (the form - items are lists of values). Useful if your form contains multiple - fields with the same name. - - Other classes (FormContent, InterpFormContentDict) are present for - backwards compatibility with really old applications only. If you still - use these and would be inconvenienced when they disappeared from a next - version of this module, drop me a note. - - - Functions - --------- - - These are useful if you want more control, or if you want to employ - some of the algorithms implemented in this module in other - circumstances. - - parse(fp, [environ, [keep_blank_values, [strict_parsing]]]): parse a - form into a Python dictionary. - - parse_qs(qs, [keep_blank_values, [strict_parsing]]): parse a query - string (data of type application/x-www-form-urlencoded). Data are - returned as a dictionary. The dictionary keys are the unique query - variable names and the values are lists of vales for each name. - - parse_qsl(qs, [keep_blank_values, [strict_parsing]]): parse a query - string (data of type application/x-www-form-urlencoded). Data are - returned as a list of (name, value) pairs. - - parse_multipart(fp, pdict): parse input of type multipart/form-data (for - file uploads). - - parse_header(string): parse a header like Content-type into a main - value and a dictionary of parameters. - - test(): complete test program. - - print_environ(): format the shell environment in HTML. - - print_form(form): format a form in HTML. - - print_environ_usage(): print a list of useful environment variables in - HTML. - - escape(): convert the characters "&", "<" and ">" to HTML-safe - sequences. Use this if you need to display text that might contain - such characters in HTML. To translate URLs for inclusion in the HREF - attribute of an tag, use urllib.quote(). - - log(fmt, ...): write a line to a log file; see docs for initlog(). - - - Caring about security - --------------------- - - There's one important rule: if you invoke an external program (e.g. - via the os.system() or os.popen() functions), make very sure you don't - pass arbitrary strings received from the client to the shell. This is - a well-known security hole whereby clever hackers anywhere on the web - can exploit a gullible CGI script to invoke arbitrary shell commands. - Even parts of the URL or field names cannot be trusted, since the - request doesn't have to come from your form! - - To be on the safe side, if you must pass a string gotten from a form - to a shell command, you should make sure the string contains only - alphanumeric characters, dashes, underscores, and periods. - - - Installing your CGI script on a Unix system - ------------------------------------------- - - Read the documentation for your HTTP server and check with your local - system administrator to find the directory where CGI scripts should be - installed; usually this is in a directory cgi-bin in the server tree. - - Make sure that your script is readable and executable by "others"; the - Unix file mode should be 755 (use "chmod 755 filename"). Make sure - that the first line of the script contains #! starting in column 1 - followed by the pathname of the Python interpreter, for instance: - - #! /usr/local/bin/python - - Make sure the Python interpreter exists and is executable by "others". - - Note that it's probably not a good idea to use #! /usr/bin/env python - here, since the Python interpreter may not be on the default path - given to CGI scripts!!! - - Make sure that any files your script needs to read or write are - readable or writable, respectively, by "others" -- their mode should - be 644 for readable and 666 for writable. This is because, for - security reasons, the HTTP server executes your script as user - "nobody", without any special privileges. It can only read (write, - execute) files that everybody can read (write, execute). The current - directory at execution time is also different (it is usually the - server's cgi-bin directory) and the set of environment variables is - also different from what you get at login. in particular, don't count - on the shell's search path for executables ($PATH) or the Python - module search path ($PYTHONPATH) to be set to anything interesting. - - If you need to load modules from a directory which is not on Python's - default module search path, you can change the path in your script, - before importing other modules, e.g.: - - import sys - sys.path.insert(0, "/usr/home/joe/lib/python") - sys.path.insert(0, "/usr/local/lib/python") - - This way, the directory inserted last will be searched first! - - Instructions for non-Unix systems will vary; check your HTTP server's - documentation (it will usually have a section on CGI scripts). - - - Testing your CGI script - ----------------------- - - Unfortunately, a CGI script will generally not run when you try it - from the command line, and a script that works perfectly from the - command line may fail mysteriously when run from the server. There's - one reason why you should still test your script from the command - line: if it contains a syntax error, the python interpreter won't - execute it at all, and the HTTP server will most likely send a cryptic - error to the client. - - Assuming your script has no syntax errors, yet it does not work, you - have no choice but to read the next section: - - - Debugging CGI scripts - --------------------- - - First of all, check for trivial installation errors -- reading the - section above on installing your CGI script carefully can save you a - lot of time. If you wonder whether you have understood the - installation procedure correctly, try installing a copy of this module - file (cgi.py) as a CGI script. When invoked as a script, the file - will dump its environment and the contents of the form in HTML form. - Give it the right mode etc, and send it a request. If it's installed - in the standard cgi-bin directory, it should be possible to send it a - request by entering a URL into your browser of the form: - - http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home - - If this gives an error of type 404, the server cannot find the script - -- perhaps you need to install it in a different directory. If it - gives another error (e.g. 500), there's an installation problem that - you should fix before trying to go any further. If you get a nicely - formatted listing of the environment and form content (in this - example, the fields should be listed as "addr" with value "At Home" - and "name" with value "Joe Blow"), the cgi.py script has been - installed correctly. If you follow the same procedure for your own - script, you should now be able to debug it. - - The next step could be to call the cgi module's test() function from - your script: replace its main code with the single statement - - cgi.test() - - This should produce the same results as those gotten from installing - the cgi.py file itself. - - When an ordinary Python script raises an unhandled exception (e.g., - because of a typo in a module name, a file that can't be opened, - etc.), the Python interpreter prints a nice traceback and exits. - While the Python interpreter will still do this when your CGI script - raises an exception, most likely the traceback will end up in one of - the HTTP server's log file, or be discarded altogether. - - Fortunately, once you have managed to get your script to execute - *some* code, it is easy to catch exceptions and cause a traceback to - be printed. The test() function below in this module is an example. - Here are the rules: - - 1. Import the traceback module (before entering the - try-except!) - - 2. Make sure you finish printing the headers and the blank - line early - - 3. Assign sys.stderr to sys.stdout - - 3. Wrap all remaining code in a try-except statement - - 4. In the except clause, call traceback.print_exc() - - For example: - - import sys - import traceback - print "Content-type: text/html" - print - sys.stderr = sys.stdout - try: - ...your code here... - except: - print "\n\n
"
-                 traceback.print_exc()
- 
- Notes: The assignment to sys.stderr is needed because the traceback
- prints to sys.stderr.  The print "\n\n
" statement is necessary to
- disable the word wrapping in HTML.
- 
- If you suspect that there may be a problem in importing the traceback
- module, you can use an even more robust approach (which only uses
- built-in modules):
- 
-         import sys
-         sys.stderr = sys.stdout
-         print "Content-type: text/plain"
-         print
-         ...your code here...
- 
- This relies on the Python interpreter to print the traceback.  The
- content type of the output is set to plain text, which disables all
- HTML processing.  If your script works, the raw HTML will be displayed
- by your client.  If it raises an exception, most likely after the
- first two lines have been printed, a traceback will be displayed.
- Because no HTML interpretation is going on, the traceback will
- readable.
- 
- When all else fails, you may want to insert calls to log() to your
- program or even to a copy of the cgi.py file.  Note that this requires
- you to set cgi.logfile to the name of a world-writable file before the
- first call to log() is made!
- 
- Good luck!
- 
- 
- Common problems and solutions
- -----------------------------
- 
- - Most HTTP servers buffer the output from CGI scripts until the
- script is completed.  This means that it is not possible to display a
- progress report on the client's display while the script is running.
- 
- - Check the installation instructions above.
- 
- - Check the HTTP server's log files.  ("tail -f logfile" in a separate
- window may be useful!)
- 
- - Always check a script for syntax errors first, by doing something
- like "python script.py".
- 
- - When using any of the debugging techniques, don't forget to add
- "import sys" to the top of the script.
- 
- - When invoking external programs, make sure they can be found.
- Usually, this means using absolute path names -- $PATH is usually not
- set to a very useful value in a CGI script.
- 
- - When reading or writing external files, make sure they can be read
- or written by every user on the system.
- 
- - Don't try to give a CGI script a set-uid mode.  This doesn't work on
- most systems, and is a security liability as well.
- 
  """
  
! # XXX The module is getting pretty heavy with all those docstrings.
! # Perhaps there should be a slimmed version that doesn't contain all those 
! # backwards compatible and debugging classes and functions?
  
  # History
--- 5,12 ----
  This module defines a number of utilities for use by CGI scripts
  written in Python.
  """
  
! # XXX Perhaps there should be a slimmed version that doesn't contain
! # all those backwards compatible and debugging classes and functions?
  
  # History
***************
*** 593,597 ****
      r=[]
      for name_value in name_value_pairs:
!         nv = string.splitfields(name_value, '=')
          if len(nv) != 2:
              if strict_parsing:
--- 197,201 ----
      r=[]
      for name_value in name_value_pairs:
!         nv = string.splitfields(name_value, '=', 1)
          if len(nv) != 2:
              if strict_parsing:



From python-dev@python.org  Thu Aug  3 22:18:20 2000
From: python-dev@python.org (Fred L. Drake)
Date: Thu, 3 Aug 2000 14:18:20 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile.deps,1.38,1.39
Message-ID: <200008032118.OAA13507@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc
In directory slayer.i.sourceforge.net:/tmp/cvs-serv13403

Modified Files:
	Makefile.deps 
Log Message:

Break the "Python Services" chapter into two: "Python Runtime Services"
(still at the start of the manual), and "Python Language Services" (late
in the manual).  Moved "Restricted Execution" to just before "Python
Language Services."


Index: Makefile.deps
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/Makefile.deps,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -r1.38 -r1.39
*** Makefile.deps	2000/07/12 04:22:53	1.38
--- Makefile.deps	2000/08/03 21:18:16	1.39
***************
*** 192,195 ****
--- 192,196 ----
  	../lib/netdata.tex \
  	../lib/markup.tex \
+ 	../lib/language.tex \
  	../lib/libpycompile.tex \
  	../lib/libcompileall.tex \



From python-dev@python.org  Thu Aug  3 22:18:21 2000
From: python-dev@python.org (Fred L. Drake)
Date: Thu, 3 Aug 2000 14:18:21 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib language.tex,NONE,1.1 lib.tex,1.158,1.159 libpython.tex,1.13,1.14
Message-ID: <200008032118.OAA13514@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv13403/lib

Modified Files:
	lib.tex libpython.tex 
Added Files:
	language.tex 
Log Message:

Break the "Python Services" chapter into two: "Python Runtime Services"
(still at the start of the manual), and "Python Language Services" (late
in the manual).  Moved "Restricted Execution" to just before "Python
Language Services."


--- NEW FILE ---
\chapter{Python Language Services
         \label{language}}

Python provides a number of modules to assist in working with the
Python language.  These module support tokenizing, parsing, syntax
analysis, bytecode disassembly, and various other facilities.

These modules include:

\localmoduletable

Index: lib.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v
retrieving revision 1.158
retrieving revision 1.159
diff -C2 -r1.158 -r1.159
*** lib.tex	2000/07/12 04:22:53	1.158
--- lib.tex	2000/08/03 21:18:18	1.159
***************
*** 72,76 ****
  \input{libfuncs}
  
! \input{libpython}		% Python Services
  \input{libsys}
  \input{libgc}
--- 72,76 ----
  \input{libfuncs}
  
! \input{libpython}		% Python Runtime Services
  \input{libsys}
  \input{libgc}
***************
*** 88,105 ****
  \input{libimp}
  %\input{libni}
- \input{libparser}
- \input{libsymbol}
- \input{libtoken}
- \input{libkeyword}
- \input{libtokenize}
- \input{libtabnanny}
- \input{libpyclbr}
  \input{libcode}
  \input{libcodeop}
  \input{libpprint}
  \input{librepr}
- \input{libpycompile}		% really py_compile
- \input{libcompileall}
- \input{libdis}
  \input{libnew}
  \input{libsite}
--- 88,95 ----
***************
*** 244,251 ****
  \input{libpyexpat}
  
- \input{librestricted}           % Restricted Execution
- \input{librexec}
- \input{libbastion}
- 
  \input{libmm}			% Multimedia Services
  \input{libaudioop}
--- 234,237 ----
***************
*** 265,268 ****
--- 251,270 ----
  \input{libmpz}
  \input{librotor}
+ 
+ \input{librestricted}           % Restricted Execution
+ \input{librexec}
+ \input{libbastion}
+ 
+ \input{language}		% Python Language Services
+ \input{libparser}
+ \input{libsymbol}
+ \input{libtoken}
+ \input{libkeyword}
+ \input{libtokenize}
+ \input{libtabnanny}
+ \input{libpyclbr}
+ \input{libpycompile}		% really py_compile
+ \input{libcompileall}
+ \input{libdis}
  
  %\input{libamoeba}		% AMOEBA ONLY

Index: libpython.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libpython.tex,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** libpython.tex	1998/07/23 17:58:39	1.13
--- libpython.tex	2000/08/03 21:18:18	1.14
***************
*** 1,4 ****
! \chapter{Python Services}
! \label{python}
  
  The modules described in this chapter provide a wide range of services
--- 1,4 ----
! \chapter{Python Runtime Services
!          \label{python}}
  
  The modules described in this chapter provide a wide range of services



From python-dev@python.org  Thu Aug  3 22:27:08 2000
From: python-dev@python.org (Guido van Rossum)
Date: Thu, 3 Aug 2000 14:27:08 -0700
Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.1,1.1.2.2
Message-ID: <200008032127.OAA14227@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src
In directory slayer.i.sourceforge.net:/tmp/cvs-serv14210

Modified Files:
      Tag: cnri-16-start
	LICENSE 
Log Message:
Correct a few typos.


Index: LICENSE
===================================================================
RCS file: /cvsroot/python/python/dist/src/LICENSE,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -C2 -r1.1.2.1 -r1.1.2.2
*** LICENSE	2000/08/02 02:59:02	1.1.2.1
--- LICENSE	2000/08/03 21:27:05	1.1.2.2
***************
*** 39,43 ****
  
  2. Subject to the terms and conditions of this License Agreement, CNRI
! hereby grants Licensee a nonexclusive, royalty-free, world-wide
  license to reproduce, analyze, test, perform and/or display publicly,
  prepare derivative works, distribute, and otherwise use Python 1.6b1
--- 39,43 ----
  
  2. Subject to the terms and conditions of this License Agreement, CNRI
! hereby grants Licensee a non-exclusive, royalty-free, world-wide
  license to reproduce, analyze, test, perform and/or display publicly,
  prepare derivative works, distribute, and otherwise use Python 1.6b1
***************
*** 55,60 ****
  
  3. In the event Licensee prepares a derivative work that is based on
! or incorporates Python 1.6b1or any part thereof, and wants to make the
! derivative work available to the public as provided herein, then
  Licensee hereby agrees to indicate in any such work the nature of the
  modifications made to Python 1.6b1.
--- 55,60 ----
  
  3. In the event Licensee prepares a derivative work that is based on
! or incorporates Python 1.6b1 or any part thereof, and wants to make
! the derivative work available to the public as provided herein, then
  Licensee hereby agrees to indicate in any such work the nature of the
  modifications made to Python 1.6b1.



From python-dev@python.org  Thu Aug  3 22:28:25 2000
From: python-dev@python.org (Guido van Rossum)
Date: Thu, 3 Aug 2000 14:28:25 -0700
Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.2,1.1.2.3
Message-ID: <200008032128.OAA14410@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src
In directory slayer.i.sourceforge.net:/tmp/cvs-serv14402

Modified Files:
      Tag: cnri-16-start
	LICENSE 
Log Message:
Set release date to August 4 (tomorrow!) per CNRI's request.  Good omen!


Index: LICENSE
===================================================================
RCS file: /cvsroot/python/python/dist/src/LICENSE,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -C2 -r1.1.2.2 -r1.1.2.3
*** LICENSE	2000/08/03 21:27:05	1.1.2.2
--- LICENSE	2000/08/03 21:28:23	1.1.2.3
***************
*** 35,39 ****
  ("Licensee") accessing and otherwise using Python 1.6, beta 1 software
  in source or binary form and its associated documentation, as released
! at the www.python.org Internet site on August 5, 2000 ("Python
  1.6b1").
  
--- 35,39 ----
  ("Licensee") accessing and otherwise using Python 1.6, beta 1 software
  in source or binary form and its associated documentation, as released
! at the www.python.org Internet site on August 4, 2000 ("Python
  1.6b1").
  



From python-dev@python.org  Thu Aug  3 23:11:46 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Thu, 3 Aug 2000 15:11:46 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cgi,NONE,1.1
Message-ID: <200008032211.PAA25488@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test/output
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25192/output

Added Files:
	test_cgi 
Log Message:
test the non-multipart sections of the cgi module


--- NEW FILE ---
test_cgi
''
'&'
'&&'
'='
'=&='
'=a'
'&=a'
'=a&'
'=&a'
'b=a'
'b+=a'
'a=b=a'
'a=+b=a'
'&b=a'
'b&=a'
'a=a+b&b=b+c'
'a=a+b&a=b+a'
'x=1&y=2.0&z=2-3.%2b0'
'Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env'
'group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse'
Testing log
Testing initlog 1
Testing log 2



From python-dev@python.org  Thu Aug  3 23:11:46 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Thu, 3 Aug 2000 15:11:46 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cgi.py,NONE,1.1
Message-ID: <200008032211.PAA25480@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25192

Added Files:
	test_cgi.py 
Log Message:
test the non-multipart sections of the cgi module


--- NEW FILE ---
import cgi
import os
import sys

class HackedSysModule:
    # The regression test will have real values in sys.argv, which
    # will completely confuse the test of the cgi module 
    argv = []
    stdin = sys.stdin

cgi.sys = HackedSysModule()

try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO

class ComparableException:
    def __init__(self, err):
        self.err = err

    def __str__(self):
        return str(self.err)

    def __cmp__(self, anExc):
        if not isinstance(anExc, Exception):
            return -1
        x = cmp(self.err.__class__, anExc.__class__)
        if x != 0:
            return x
        return cmp(self.err.args, anExc.args)

    def __getattr__(self, attr):
        return getattr(self, self.err)

def do_test(buf, method):
    env = {}
    if method == "GET":
        fp = None
        env['REQUEST_METHOD'] = 'GET'
        env['QUERY_STRING'] = buf
    elif method == "POST":
        fp = StringIO(buf)
        env['REQUEST_METHOD'] = 'POST'
        env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
        env['CONTENT_LENGTH'] = str(len(buf))
    else:
        raise ValueError, "unknown method: %s" % method
    try:
        return cgi.parse(fp, env, strict_parsing=1)
    except StandardError, err:
        return ComparableException(err)

# A list of test cases.  Each test case is a a two-tuple that contains
# a string with the query and a dictionary with the expected result.
    
parse_test_cases = [
    ("", ValueError("bad query field: ''")),
    ("&", ValueError("bad query field: ''")),
    ("&&", ValueError("bad query field: ''")),
    # Should the next few really be valid?
    ("=", {}),
    ("=&=", {}),
    # This rest seem to make sense
    ("=a", {'': ['a']}),
    ("&=a", ValueError("bad query field: ''")),
    ("=a&", ValueError("bad query field: ''")),
    ("=&a", ValueError("bad query field: 'a'")),
    ("b=a", {'b': ['a']}),
    ("b+=a", {'b ': ['a']}),
    ("a=b=a", {'a': ['b=a']}),
    ("a=+b=a", {'a': [' b=a']}),
    ("&b=a", ValueError("bad query field: ''")),
    ("b&=a", ValueError("bad query field: 'b'")),
    ("a=a+b&b=b+c", {'a': ['a b'], 'b': ['b c']}),
    ("a=a+b&a=b+a", {'a': ['a b', 'b a']}),
    ("x=1&y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}),
    ("Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env",
     {'Hbc5161168c542333633315dee1182227:key_store_seqid': ['400006'],
      'cuyer': ['r'],
      'expire': ['964546263'],
      'kid': ['130003.300038'],
      'lobale': ['en-US'],
      'order_id': ['0bb2e248638833d48cb7fed300000f1b'],
      'ss': ['env'],
      'view': ['bustomer'],
      }),
    
    ("group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse",
     {'SUBMIT': ['Browse'],
      '_assigned_to': ['31392'],
      '_category': ['100'],
      '_status': ['1'],
      'group_id': ['5470'],
      'set': ['custom'],
      })
    ]

def norm(list):
    if type(list) == type([]):
        list.sort()
    return list

def first_elts(list):
    return map(lambda x:x[0], list)

def first_second_elts(list):
    return map(lambda p:(p[0], p[1][0]), list)

def main():
    for orig, expect in parse_test_cases:
        # Test basic parsing
        print repr(orig)
        d = do_test(orig, "GET")
        assert d == expect, "Error parsing %s" % repr(orig)
        d = do_test(orig, "POST")
        assert d == expect, "Error parsing %s" % repr(orig)

        d = {'QUERY_STRING': orig}
        fcd = cgi.FormContentDict(d)
        sd = cgi.SvFormContentDict(d)
        if type(expect) == type({}):
            # test dict interface
            assert len(expect) == len(fcd)
            assert norm(expect.keys()) == norm(fcd.keys())
            assert norm(expect.values()) == norm(fcd.values())
            assert norm(expect.items()) == norm(fcd.items())
            for key in expect.keys():
                expect_val = expect[key]
                assert fcd.has_key(key)
                assert norm(fcd[key]) == norm(expect[key])
                if len(expect_val) > 1:
                    single_value = 0
                else:
                    single_value = 1
                try:
                    val = sd[key]
                except IndexError:
                    assert not single_value
                else:
                    assert single_value
                    assert val == expect_val[0]
                assert norm(sd.getlist(key)) == norm(expect_val)
                if single_value:
                    assert norm(sd.values()) == \
                           first_elts(norm(expect.values()))
                    assert norm(sd.items()) == \
                           first_second_elts(norm(expect.items()))

    # Test the weird FormContentDict classes
    env = {'QUERY_STRING': "x=1&y=2.0&z=2-3.%2b0&1=1abc"}
    expect = {'x': 1, 'y': 2.0, 'z': '2-3.+0', '1': '1abc'}
    d = cgi.InterpFormContentDict(env)
    for k, v in expect.items():
        assert d[k] == v
    for k, v in d.items():
        assert expect[k] == v
    assert norm(expect.values()) == norm(d.values())

    print "Testing log"
    cgi.initlog()
    cgi.log("Testing")
    cgi.logfp = sys.stdout
    cgi.initlog("%s", "Testing initlog 1")
    cgi.log("%s", "Testing log 2")
    if os.path.exists("/dev/null"):
        cgi.logfp = None
        cgi.logfile = "/dev/null"
        cgi.initlog("%s", "Testing log 3")
        cgi.log("Testing log 4")

main()



From python-dev@python.org  Fri Aug  4 02:28:42 2000
From: python-dev@python.org (Greg Ward)
Date: Thu, 3 Aug 2000 18:28:42 -0700
Subject: [Python-checkins] CVS: distutils/distutils ccompiler.py,1.31,1.32 unixccompiler.py,1.29,1.30
Message-ID: <200008040128.SAA01116@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1090

Modified Files:
	ccompiler.py unixccompiler.py 
Log Message:
Added 'debug' flag to 'find_library_file()'.

Index: ccompiler.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/ccompiler.py,v
retrieving revision 1.31
retrieving revision 1.32
diff -C2 -r1.31 -r1.32
*** ccompiler.py	2000/08/02 01:38:20	1.31
--- ccompiler.py	2000/08/04 01:28:39	1.32
***************
*** 683,690 ****
          raise NotImplementedError
  
!     def find_library_file (self, dirs, lib):
          """Search the specified list of directories for a static or shared
!         library file 'lib' and return the full path to that file. Return
!         None if it wasn't found in any of the specified directories.
          """
          raise NotImplementedError
--- 683,692 ----
          raise NotImplementedError
  
!     def find_library_file (self, dirs, lib, debug=0):
          """Search the specified list of directories for a static or shared
!         library file 'lib' and return the full path to that file.  If
!         'debug' true, look for a debugging version (if that makes sense on
!         the current platform).  Return None if 'lib' wasn't found in any of
!         the specified directories.
          """
          raise NotImplementedError

Index: unixccompiler.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/unixccompiler.py,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -r1.29 -r1.30
*** unixccompiler.py	2000/07/27 01:23:19	1.29
--- unixccompiler.py	2000/08/04 01:28:39	1.30
***************
*** 318,322 ****
  
  
!     def find_library_file (self, dirs, lib):
  
          for dir in dirs:
--- 318,322 ----
  
  
!     def find_library_file (self, dirs, lib, debug=0):
  
          for dir in dirs:



From python-dev@python.org  Fri Aug  4 02:29:29 2000
From: python-dev@python.org (Greg Ward)
Date: Thu, 3 Aug 2000 18:29:29 -0700
Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.37,1.38
Message-ID: <200008040129.SAA01186@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1176

Modified Files:
	msvccompiler.py 
Log Message:
Added 'debug' flag to 'find_library_file()', and changed code to handle it.

Index: msvccompiler.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -r1.37 -r1.38
*** msvccompiler.py	2000/08/02 00:01:56	1.37
--- msvccompiler.py	2000/08/04 01:29:27	1.38
***************
*** 475,485 ****
  
  
!     def find_library_file (self, dirs, lib):
! 
          for dir in dirs:
!             libfile = os.path.join (dir, self.library_filename (lib))
!             if os.path.exists (libfile):
!                 return libfile
! 
          else:
              # Oops, didn't find it in *any* of 'dirs'
--- 475,490 ----
  
  
!     def find_library_file (self, dirs, lib, debug=0):
!         # Prefer a debugging library if found (and requested), but deal
!         # with it if we don't have one.
!         if debug:
!             try_names = [lib + "_d", lib]
!         else:
!             try_names = [lib]
          for dir in dirs:
!             for name in try_names:
!                 libfile = os.path.join(dir, self.library_filename (name))
!                 if os.path.exists(libfile):
!                     return libfile
          else:
              # Oops, didn't find it in *any* of 'dirs'



From python-dev@python.org  Fri Aug  4 02:30:06 2000
From: python-dev@python.org (Greg Ward)
Date: Thu, 3 Aug 2000 18:30:06 -0700
Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.2,1.3
Message-ID: <200008040130.SAA01330@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1235

Modified Files:
	bcppcompiler.py 
Log Message:
Rewrote 'find_library_file()' much more cleanly (and consistently with
MSVCCompiler's version, to aid in factoring common code out of the two 
classes when the time comes).

Index: bcppcompiler.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** bcppcompiler.py	2000/08/02 01:03:23	1.2
--- bcppcompiler.py	2000/08/04 01:30:03	1.3
***************
*** 358,383 ****
  
      def find_library_file (self, dirs, lib, debug=0):
!         # find library file
          # bcpp_xxx.lib is better than xxx.lib
          # and xxx_d.lib is better than xxx.lib if debug is set
          for dir in dirs:
!             if debug:
!                 libfile = os.path.join (
!                     dir, self.library_filename ("bcpp_" + lib + "_d"))
!                 if os.path.exists (libfile):
!                     return libfile
!             libfile = os.path.join (
!                 dir, self.library_filename ("bcpp_" + lib))
!             if os.path.exists (libfile):
!                 return libfile
!             if debug:
!                 libfile = os.path.join (
!                     dir, self.library_filename(lib + '_d'))
!                 if os.path.exists (libfile):
                      return libfile
-             libfile = os.path.join (dir, self.library_filename (lib))
-             if os.path.exists (libfile):
-                 return libfile
- 
          else:
              # Oops, didn't find it in *any* of 'dirs'
--- 358,381 ----
  
      def find_library_file (self, dirs, lib, debug=0):
!         # List of effective library names to try, in order of preference:
          # bcpp_xxx.lib is better than xxx.lib
          # and xxx_d.lib is better than xxx.lib if debug is set
+         #
+         # The "bcpp_" prefix is to handle a Python installation for people
+         # with multiple compilers (primarily Distutils hackers, I suspect
+         # ;-).  The idea is they'd have one static library for each
+         # compiler they care about, since (almost?) every Windows compiler
+         # seems to have a different format for static libraries.
+         if debug:
+             dlib = (lib + "_d")
+             try_names = ("bcpp_" + dlib, "bcpp_" + lib, dlib, lib)
+         else:
+             try_names = ("bcpp_" + lib, lib)
+ 
          for dir in dirs:
!             for name in try_names:
!                 libfile = os.path.join(dir, self.library_filename(name))
!                 if os.path.exists(libfile):
                      return libfile
          else:
              # Oops, didn't find it in *any* of 'dirs'



From python-dev@python.org  Fri Aug  4 02:31:15 2000
From: python-dev@python.org (Greg Ward)
Date: Thu, 3 Aug 2000 18:31:15 -0700
Subject: [Python-checkins] CVS: distutils/distutils ccompiler.py,1.32,1.33
Message-ID: <200008040131.SAA01445@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1428

Modified Files:
	ccompiler.py 
Log Message:
Added 'debug_print()'.

Index: ccompiler.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/ccompiler.py,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -r1.32 -r1.33
*** ccompiler.py	2000/08/04 01:28:39	1.32
--- ccompiler.py	2000/08/04 01:31:13	1.33
***************
*** 784,787 ****
--- 784,792 ----
              print msg
  
+     def debug_print (self, msg):
+         from distutils.core import DEBUG
+         if DEBUG:
+             print msg
+ 
      def warn (self, msg):
          sys.stderr.write ("warning: %s\n" % msg)



From python-dev@python.org  Fri Aug  4 03:34:43 2000
From: python-dev@python.org (Fred L. Drake)
Date: Thu, 3 Aug 2000 19:34:43 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects rangeobject.c,2.17,2.18
Message-ID: <200008040234.TAA13057@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv13048

Modified Files:
	rangeobject.c 
Log Message:

snprintf() is not portable, so continue to use sprintf() until a portable
snprintf() is available.


Index: rangeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v
retrieving revision 2.17
retrieving revision 2.18
diff -C2 -r2.17 -r2.18
*** rangeobject.c	2000/08/03 17:43:02	2.17
--- rangeobject.c	2000/08/04 02:34:41	2.18
***************
*** 66,71 ****
  
  	if (r->start == 0 && r->step == 1) {
! 		snprintf(buf1, sizeof(buf1), "xrange(%ld)",
! 			 r->start + r->len * r->step);
  	}
  	else {
--- 66,70 ----
  
  	if (r->start == 0 && r->step == 1) {
! 		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
  	}
  	else {
***************
*** 73,84 ****
  		if (r->step == 1)
  			fmt = "xrange(%ld, %ld)";
! 		snprintf(buf1, sizeof(buf1), fmt,
! 			 r->start,
! 			 r->start + r->len * r->step,
! 			 r->step);
  	}
  	if (r->reps != 1) {
! 		snprintf(buf2, sizeof(buf2),
! 			 "(%s * %d)", buf1, r->reps);
  	}
  	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
--- 72,82 ----
  		if (r->step == 1)
  			fmt = "xrange(%ld, %ld)";
! 		sprintf(buf1, fmt,
! 			r->start,
! 			r->start + r->len * r->step,
! 			r->step);
  	}
  	if (r->reps != 1) {
! 		sprintf(buf2, "(%s * %d)", buf1, r->reps);
  	}
  	return PyString_FromString(r->reps == 1 ? buf1 : buf2);



From python-dev@python.org  Fri Aug  4 04:05:44 2000
From: python-dev@python.org (Tim Peters)
Date: Thu, 3 Aug 2000 20:05:44 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects rangeobject.c,2.18,2.19
Message-ID: <200008040305.UAA18501@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv17496/python/dist/src/objects

Modified Files:
	rangeobject.c 
Log Message:
Boost buffer sizes in the absence of snprintf on Windows.
Ensure that # of args to sprintf always matches # of format specifiers.


Index: rangeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v
retrieving revision 2.18
retrieving revision 2.19
diff -C2 -r2.18 -r2.19
*** rangeobject.c	2000/08/04 02:34:41	2.18
--- rangeobject.c	2000/08/04 03:05:40	2.19
***************
*** 62,83 ****
  range_repr(rangeobject *r)
  {
! 	char buf1[80];
! 	char buf2[80];
  
! 	if (r->start == 0 && r->step == 1) {
  		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
! 	}
! 	else {
! 		char *fmt = "xrange(%ld, %ld, %ld)";
! 		if (r->step == 1)
! 			fmt = "xrange(%ld, %ld)";
! 		sprintf(buf1, fmt,
  			r->start,
  			r->start + r->len * r->step,
  			r->step);
! 	}
! 	if (r->reps != 1) {
  		sprintf(buf2, "(%s * %d)", buf1, r->reps);
! 	}
  	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
  }
--- 62,88 ----
  range_repr(rangeobject *r)
  {
! 	/* buffers must be big enough to hold 3 longs + an int +
! 	 * a bit of "(xrange(...) * ...)" text.
! 	 */
! 	char buf1[250];
! 	char buf2[250];
  
! 	if (r->start == 0 && r->step == 1)
  		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
! 
! 	else if (r->step == 1)
! 		sprintf(buf1, "xrange(%ld, %ld)",
! 			r->start,
! 			r->start + r->len * r->step);
! 
! 	else
! 		sprintf(buf1, "xrange(%ld, %ld, %ld)",
  			r->start,
  			r->start + r->len * r->step,
  			r->step);
! 
! 	if (r->reps != 1)
  		sprintf(buf2, "(%s * %d)", buf1, r->reps);
! 
  	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
  }
***************
*** 194,201 ****
  {
  	long num = PyInt_AsLong(obj);
! 	
  	if (num < 0 && PyErr_Occurred())
  		return -1;
! 	
  	if (num < r->start || (num - r->start) % r->step)
  		return 0;
--- 199,206 ----
  {
  	long num = PyInt_AsLong(obj);
! 
  	if (num < 0 && PyErr_Occurred())
  		return -1;
! 
  	if (num < r->start || (num - r->start) % r->step)
  		return 0;



From python-dev@python.org  Fri Aug  4 04:14:57 2000
From: python-dev@python.org (Fred L. Drake)
Date: Thu, 3 Aug 2000 20:14:57 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/xml __init__.py,1.4,1.5
Message-ID: <200008040314.UAA23348@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/xml
In directory slayer.i.sourceforge.net:/tmp/cvs-serv23335

Modified Files:
	__init__.py 
Log Message:

Remove the outer test for __name__; not necessary.


Index: __init__.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/__init__.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** __init__.py	2000/08/01 00:05:16	1.4
--- __init__.py	2000/08/04 03:14:55	1.5
***************
*** 14,23 ****
  
  
! if __name__ == "xml":
!     try:
!         import _xmlplus
!     except ImportError:
!         pass
!     else:
!         import sys
!         sys.modules[__name__] = _xmlplus
--- 14,22 ----
  
  
! try:
!     import _xmlplus
! except ImportError:
!     pass
! else:
!     import sys
!     sys.modules[__name__] = _xmlplus



From python-dev@python.org  Fri Aug  4 08:33:20 2000
From: python-dev@python.org (Eric S. Raymond)
Date: Fri, 4 Aug 2000 00:33:20 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/curses textpad.py,1.4,1.5
Message-ID: <200008040733.AAA07722@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/curses
In directory slayer.i.sourceforge.net:/tmp/cvs-serv7699/curses

Modified Files:
	textpad.py 
Log Message:
Corrected a bug in handling of ^N and ^P with stripspaces on.


Index: textpad.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/curses/textpad.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** textpad.py	2000/07/12 03:38:34	1.4
--- textpad.py	2000/08/04 07:33:18	1.5
***************
*** 21,25 ****
      Ctrl-B      Cursor left, wrapping to previous line if appropriate.
      Ctrl-D      Delete character under cursor.
!     Ctrl-E      Go to right edge (nospaces off) or end of line (nospaces on).
      Ctrl-F      Cursor right, wrapping to next line when appropriate.
      Ctrl-G      Terminate, returning the window contents.
--- 21,25 ----
      Ctrl-B      Cursor left, wrapping to previous line if appropriate.
      Ctrl-D      Delete character under cursor.
!     Ctrl-E      Go to right edge (stripspaces off) or end of line (stripspaces on).
      Ctrl-F      Cursor right, wrapping to next line when appropriate.
      Ctrl-G      Terminate, returning the window contents.
***************
*** 27,31 ****
      Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
      Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
!     Ctrl-L      Refresh screen
      Ctrl-N      Cursor down; move down one line.
      Ctrl-O      Insert a blank line at cursor location.
--- 27,31 ----
      Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
      Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
!     Ctrl-L      Refresh screen.
      Ctrl-N      Cursor down; move down one line.
      Ctrl-O      Insert a blank line at cursor location.
***************
*** 47,51 ****
          win.keypad(1)
  
!     def firstblank(self, y):
          "Go to the location of the first blank on the given line."
          last = self.maxx
--- 47,51 ----
          win.keypad(1)
  
!     def _end_of_line(self, y):
          "Go to the location of the first blank on the given line."
          last = self.maxx
***************
*** 80,84 ****
                  pass
              elif self.stripspaces:
!                 self.win.move(y-1, self.firstblank(y-1))
              else:
                  self.win.move(y-1, self.maxx)
--- 80,84 ----
                  pass
              elif self.stripspaces:
!                 self.win.move(y-1, self._end_of_line(y-1))
              else:
                  self.win.move(y-1, self.maxx)
***************
*** 89,93 ****
          elif ch == ascii.ENQ:				# ^e
              if self.stripspaces:
!                 self.win.move(y, self.firstblank(y))
              else:
                  self.win.move(y, self.maxx)
--- 89,93 ----
          elif ch == ascii.ENQ:				# ^e
              if self.stripspaces:
!                 self.win.move(y, self._end_of_line(y))
              else:
                  self.win.move(y, self.maxx)
***************
*** 107,111 ****
                  self.win.move(y+1, 0)
          elif ch == ascii.VT:				# ^k
!             if x == 0 and self.firstblank(y) == 0:
                  self.win.deleteln()
              else:
--- 107,111 ----
                  self.win.move(y+1, 0)
          elif ch == ascii.VT:				# ^k
!             if x == 0 and self._end_of_line(y) == 0:
                  self.win.deleteln()
              else:
***************
*** 116,119 ****
--- 116,121 ----
              if y < self.maxy:
                  self.win.move(y+1, x)
+                 if x > self._end_of_line(y+1):
+                     self.win.move(y+1, self._end_of_line(y+1))
          elif ch == ascii.SI:				# ^o
              self.win.insertln()
***************
*** 121,124 ****
--- 123,128 ----
              if y > 0:
                  self.win.move(y-1, x)
+                 if x > self._end_of_line(y-1):
+                     self.win.move(y-1, self._end_of_line(y-1))
          return 1
          
***************
*** 128,133 ****
          for y in range(self.maxy+1):
              self.win.move(y, 0)
!             stop = self.firstblank(y)
!             #sys.stderr.write("y=%d, firstblank(y)=%d\n" % (y, stop))
              if stop == 0 and self.stripspaces:
                  continue
--- 132,137 ----
          for y in range(self.maxy+1):
              self.win.move(y, 0)
!             stop = self._end_of_line(y)
!             #sys.stderr.write("y=%d, _end_of_line(y)=%d\n" % (y, stop))
              if stop == 0 and self.stripspaces:
                  continue



From python-dev@python.org  Fri Aug  4 08:35:43 2000
From: python-dev@python.org (Eric S. Raymond)
Date: Fri, 4 Aug 2000 00:35:43 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.12,1.13
Message-ID: <200008040735.AAA07818@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv7795

Modified Files:
	libcurses.tex 
Log Message:
Documented curses.wrapper and curses.textpad.


Index: libcurses.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** libcurses.tex	2000/07/27 21:10:02	1.12
--- libcurses.tex	2000/08/04 07:35:41	1.13
***************
*** 2,9 ****
           Screen painting and input handling for character-cell terminals}
  
! \declaremodule{extension}{curses}
  \sectionauthor{Moshe Zadka}{mzadka@geocities.com}
  \sectionauthor{Eric Raymond}{esr@thyrsus.com}
  \modulesynopsis{An interface to the curses library.}
  
  The \module{curses} module provides an interface to the curses \UNIX{}
--- 2,10 ----
           Screen painting and input handling for character-cell terminals}
  
! \declaremodule{standard}{curses}
  \sectionauthor{Moshe Zadka}{mzadka@geocities.com}
  \sectionauthor{Eric Raymond}{esr@thyrsus.com}
  \modulesynopsis{An interface to the curses library.}
+ \versionadded{1.6}
  
  The \module{curses} module provides an interface to the curses \UNIX{}
***************
*** 21,25 ****
                             characters, regardless of your locale
                             settings.}
!   \seemodule{curses.textbox}{Editable text widget for curses supporting 
  			     Emacs-like bindings.}
    \seetext{Tutorial material on using curses with Python is available
--- 22,26 ----
                             characters, regardless of your locale
                             settings.}
!   \seemodule{curses.textpad}{Editable text widget for curses supporting 
  			     Emacs-like bindings.}
    \seetext{Tutorial material on using curses with Python is available
***************
*** 1163,1165 ****
--- 1164,1294 ----
    \lineii{COLOR_YELLOW}{Yellow}
  \end{tableii}
+ 
+ \section{\module{curses.textpad} ---
+          Text input widget for curses programs}
+ 
+ \declaremodule{standard}{curses.textpad}
+ \sectionauthor{Eric Raymond}{esr@thyrsus.com}
+ \moduleauthor{Eric Raymond}{esr@thyrsus.com}
+ \modulesynopsis{Emacs-like input editing in a curses window.}
+ \versionadded{1.6}
+ 
+ The \module{curses.textpad} module provides a \class{Textbox} class
+ that handles elementary text editing in a curses window, supporting a
+ set of keybindings resembling those of Emacs (thus, also of Netscape
+ Navigator, BBedit 6.x, FrameMaker, and many other programs).  The
+ module also provides a rectangle-drawing function useful for framing
+ text boxes or for other purposes.
+ 
+ \subsection{Functions \label{curses-textpad-functions}}
+ 
+ The module \module{curses.textpad} defines the following functions:
+ 
+ \begin{funcdesc}{rectangle}{win, uly, ulx, lry, lrx}
+ Draw a rectangle.  The first argument must be a window object; the
+ remaining arguments are coordinates relative to that window.  The
+ second and third arguments are the y and x coordinates of the upper
+ left hand corner of the rectangle To be drawn; the fourth and fifth
+ arguments are the y and x coordinates of the lower right hand corner.
+ The rectangle will be drawn using VT100/IBM PC forms characters on
+ terminals that make this possible (including xterm and most other
+ software terminal emulators).  Otherwise it will be drawn with ASCII 
+ dashes, vertical bars, and plus signs.
+ \end{funcdesc}
+ 
+ \subsection{Textbox objects \label{curses-textpad-objects}}
+ 
+ You can instantiate a \class{Textbox} object as follows:
+ 
+ \classdesc{Textbox}{win}
+ Return a textbox widget object.  The win argument should be a curses
+ \class{WindowObject} in which the textbox is to be contained.  The
+ edit cursor of the textbox is initially located at the upper left
+ hand corner of the containin window, with coordinates (0,0). The
+ instance's \member{stripspaces} flag is initially on.
+ \end{classdesc}
+ 
+ Textbox objects, have the following methods:
+ 
+ \begin{methoddesc}{edit}{validator=None}
+ This is the entry point you will normally use.  It accepts editing
+ keystrokes until one of the termination keystrokes is entered.  If a
+ validator function is specified, each entered keystroke is passed to
+ it; command dispatch is done on the result. This method returns the
+ window contents as a string; whether blanks in the window are included
+ is affected by the \member{stripspaces} member.
+ \end{methoddesc}
+ 
+ \begin{methoddesc}{do_command}{ch}
+ Process a single command keystroke.  Here are the supported special
+ keystrokes: 
+ 
+ \begin{tableii}{c|l}{code}{keystroke}{action}
+   \lineii{Ctrl-A}{Go to left edge of window.}
+   \lineii{Ctrl-B}{Cursor left, wrapping to previous line if appropriate.}
+   \lineii{Ctrl-D}{Delete character under cursor.}
+   \lineii{Ctrl-E}{Go to right edge (stripspaces off) or end of line (stripspaces on).}
+   \lineii{Ctrl-F}{Cursor right, wrapping to next line when appropriate.}
+   \lineii{Ctrl-G}{Terminate, returning the window contents.}
+   \lineii{Ctrl-H}{Delete character backward.}
+   \lineii{Ctrl-J}{Terminate if the window is 1 line, otherwise insert newline.}
+   \lineii{Ctrl-K}{If line is blank, delete it, otherwise clear to end of line.}
+   \lineii{Ctrl-L}{Refresh screen.}
+   \lineii{Ctrl-N}{Cursor down; move down one line.}
+   \lineii{Ctrl-O}{Insert a blank line at cursor location.}
+   \lineii{Ctrl-P}{Cursor up; move up one line.}
+ \end{tableii}
+ 
+ Move operations do nothing if the cursor is at an edge where the
+ movement is not possible.  The following synonyms are supported where
+ possible:  KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P,
+ KEY_DOWN = Ctrl-N, KEY_BACKSPACE = Ctrl-h.
+ 
+ All other keystrokes are treated as a command to insert the given
+ character and move right (with line wrapping).
+ \end{methoddesc}
+ 
+ \begin{methoddesc}{gather}{}
+ This method returns the window contents as a string; whether blanks in
+ the window are included is affected by the \member{stripspaces}
+ member.
+ \end{methoddesc}
+ 
+ \begin{methoddesc}{stripspaces}{}
+ This data member is a flag which controls the interpretation of blanks in
+ the window.  When it is on, trailing blanks on each line are ignored;
+ any cursor motion that would land the cursor on a trailing blank goes
+ to the end of that line instead, and trailing blanks are stripped when
+ the window contents is gathered.
+ \end{methoddesc}
+ 
+ \section{\module{curses.wrapper} ---
+          Exception-handling wrapper for curses programs.}
+ 
+ \declaremodule{standard}{curses.wrapper}
+ \sectionauthor{Eric Raymond}{esr@thyrsus.com}
+ \moduleauthor{Eric Raymond}{esr@thyrsus.com}
+ \modulesynopsis{Exception-handling wrapper for curses programs.}
+ \versionadded{1.6}
+ 
+ This module supplies one function, \function{wrapper()}, which runs
+ another function which should be the rest of your curses-using
+ application.  If the application raises an exception,
+ \function{wrapper()} will restore the terminal to a sane state before
+ passing it further up the stack and generating a traceback.
+ 
+ \subsection{Functions \label{curses-wrapper-functions}}
+ 
+ \begin{funcdesc}{wrapper}{func, *rest}
+ Wrapper function that initializes curses and calls another function,
+ \function{func}, restoring normal keyboard/screen behavior on error.
+ The callable object 'func' is then passed the main window 'stdscr'
+ as its first argument, followed by any other arguments passed to
+ \function{wrapper()}.
+ \end{funcdesc}
+ 
+ Before calling the hook function, \function{wrapper()} turns on
+ cbreak mode, turns off echo, and enables the terminal keypad.  On
+ exit (whether normally or by exception) it restores cooked mode, 
+ turns on echo, and disables the terminal keypad.
  



From python-dev@python.org  Fri Aug  4 09:47:02 2000
From: python-dev@python.org (Thomas Wouters)
Date: Fri, 4 Aug 2000 01:47:02 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib whichdb.py,1.7,1.8
Message-ID: <200008040847.BAA21291@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv21242/Lib

Modified Files:
	whichdb.py 
Log Message:

Add missing 'try:'. Patch by Rob W. W. Hooft, #101071 (closed.)



Index: whichdb.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/whichdb.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** whichdb.py	2000/07/29 05:31:40	1.7
--- whichdb.py	2000/08/04 08:46:59	1.8
***************
*** 27,30 ****
--- 27,31 ----
  
      # Check for dumbdbm next -- this has a .dir and and a .dat file
+     try:
          f = open(filename + ".dat", "rb")
          f.close()



From python-dev@python.org  Fri Aug  4 13:59:43 2000
From: python-dev@python.org (Moshe Zadka)
Date: Fri, 4 Aug 2000 05:59:43 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_linuxaudiodev.py,1.1,1.2
Message-ID: <200008041259.FAA24651@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv24303/Lib/test

Modified Files:
	test_linuxaudiodev.py 
Log Message:
In case the user isn't allowed to access /dev/dsp or /dev/dsp isn't there
at all (my computer doesn't have a Sound Blaster), this doesn't mean
there's a bug in linuxaudiodev. The only error the test suite skips
is currently ImportError -- so that's what we raise. If you see a problem
with this patch, say so and I'll retract. If you think raising an ImportError
sucks, you're right -- but I ain't gonna buy a SB and I sure ain't gonna
let the test-suite fail on my machine.


Index: test_linuxaudiodev.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_linuxaudiodev.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** test_linuxaudiodev.py	2000/06/10 04:22:57	1.1
--- test_linuxaudiodev.py	2000/08/04 12:59:40	1.2
***************
*** 1,4 ****
--- 1,5 ----
  from test_support import verbose, findfile, TestFailed
  import linuxaudiodev
+ import errno
  import os
  
***************
*** 10,13 ****
--- 11,16 ----
          a = linuxaudiodev.open('w')
      except linuxaudiodev.error, msg:
+ 	if msg[0] in (errno.EACCES, errno.ENODEV):
+ 		raise ImportError, msg
          raise TestFailed, msg
      else:



From python-dev@python.org  Fri Aug  4 14:08:50 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 06:08:50 -0700
Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.3,1.1.2.4
Message-ID: <200008041308.GAA27553@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src
In directory slayer.i.sourceforge.net:/tmp/cvs-serv27528

Modified Files:
      Tag: cnri-16-start
	LICENSE 
Log Message:
Comma added at CNRI's request.  (Gosh Bob Kahn is thorough. :-)


Index: LICENSE
===================================================================
RCS file: /cvsroot/python/python/dist/src/LICENSE,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -C2 -r1.1.2.3 -r1.1.2.4
*** LICENSE	2000/08/03 21:28:23	1.1.2.3
--- LICENSE	2000/08/04 13:08:47	1.1.2.4
***************
*** 86,90 ****
  party.
  
! 8. By clicking on the "ACCEPT" button where indicated, or by copying
  installing or otherwise using Python 1.6b1, Licensee agrees to be
  bound by the terms and conditions of this License Agreement.
--- 86,90 ----
  party.
  
! 8. By clicking on the "ACCEPT" button where indicated, or by copying,
  installing or otherwise using Python 1.6b1, Licensee agrees to be
  bound by the terms and conditions of this License Agreement.



From python-dev@python.org  Fri Aug  4 14:17:55 2000
From: python-dev@python.org (Thomas Wouters)
Date: Fri, 4 Aug 2000 06:17:55 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test regrtest.py,1.20,1.21
Message-ID: <200008041317.GAA30726@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30493/Lib/test

Modified Files:
	regrtest.py 
Log Message:

Make test_support.TestSkipped errors work the same way as ImportErrors:
mark the test as 'skipped', rather than 'failed'.



Index: regrtest.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** regrtest.py	2000/08/03 15:50:37	1.20
--- regrtest.py	2000/08/04 13:17:51	1.21
***************
*** 228,232 ****
          finally:
              sys.stdout = save_stdout
!     except ImportError, msg:
          return -1
      except KeyboardInterrupt, v:
--- 228,232 ----
          finally:
              sys.stdout = save_stdout
!     except (ImportError, test_support.TestSkipped), msg:
          return -1
      except KeyboardInterrupt, v:



From python-dev@python.org  Fri Aug  4 14:18:17 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 06:18:17 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python getcopyright.c,1.6.2.1,1.6.2.2
Message-ID: <200008041318.GAA30885@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30857

Modified Files:
      Tag: cnri-16-start
	getcopyright.c 
Log Message:
Change the copyright string to match CNRI's desires.


Index: getcopyright.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/getcopyright.c,v
retrieving revision 1.6.2.1
retrieving revision 1.6.2.2
diff -C2 -r1.6.2.1 -r1.6.2.2
*** getcopyright.c	2000/08/03 16:50:36	1.6.2.1
--- getcopyright.c	2000/08/04 13:18:12	1.6.2.2
***************
*** 4,9 ****
  
  static char cprt[] = 
! "Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam\n\
! Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)";
  
  const char *
--- 4,9 ----
  
  static char cprt[] = 
! "Copyright (c) Corporation for National Research Initiatives.\n\
! Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam.";
  
  const char *



From python-dev@python.org  Fri Aug  4 14:26:07 2000
From: python-dev@python.org (Moshe Zadka)
Date: Fri, 4 Aug 2000 06:26:07 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_linuxaudiodev.py,1.2,1.3
Message-ID: <200008041326.GAA00938@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv300/Lib/test

Modified Files:
	test_linuxaudiodev.py 
Log Message:
Raise TestSkipped, not ImportError.
Honesty's the best policy.


Index: test_linuxaudiodev.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_linuxaudiodev.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** test_linuxaudiodev.py	2000/08/04 12:59:40	1.2
--- test_linuxaudiodev.py	2000/08/04 13:26:03	1.3
***************
*** 1,3 ****
! from test_support import verbose, findfile, TestFailed
  import linuxaudiodev
  import errno
--- 1,3 ----
! from test_support import verbose, findfile, TestFailed, TestSkipped
  import linuxaudiodev
  import errno
***************
*** 12,16 ****
      except linuxaudiodev.error, msg:
  	if msg[0] in (errno.EACCES, errno.ENODEV):
! 		raise ImportError, msg
          raise TestFailed, msg
      else:
--- 12,16 ----
      except linuxaudiodev.error, msg:
  	if msg[0] in (errno.EACCES, errno.ENODEV):
! 		raise TestSkipped, msg
          raise TestFailed, msg
      else:



From python-dev@python.org  Fri Aug  4 14:34:46 2000
From: python-dev@python.org (Thomas Wouters)
Date: Fri, 4 Aug 2000 06:34:46 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test README,1.2,1.3 test_binhex.py,1.4,1.5 test_dl.py,1.7,1.8 test_fork1.py,1.4,1.5 test_gl.py,1.3,1.4 test_nis.py,1.7,1.8 test_openpty.py,1.2,1.3 test_pty.py,1.3,1.4 test_signal.py,1.4,1.5 test_string.py,1.10,1.11
Message-ID: <200008041334.GAA03625@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv3456

Modified Files:
	README test_binhex.py test_dl.py test_fork1.py test_gl.py 
	test_nis.py test_openpty.py test_pty.py test_signal.py 
	test_string.py 
Log Message:

Raise 'TestSkipped' (from the test_support) module rather than 'ImportError'
to signify a test that should be marked as 'skipped' rather than 'failed'.
Also 'document' it, in README.



Index: README
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/README,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** README	2000/07/19 17:19:49	1.2
--- README	2000/08/04 13:34:43	1.3
***************
*** 13,17 ****
  expected output that is stored in .../Lib/test/output.  If the test runs to
  completion and the actual and expected outputs match, the test succeeds, if
! not, it fails.  If an ImportError is raised, the test is not run.
  
  You will be writing unit tests (isolated tests of functions and objects
--- 13,18 ----
  expected output that is stored in .../Lib/test/output.  If the test runs to
  completion and the actual and expected outputs match, the test succeeds, if
! not, it fails.  If an ImportError or test_support.TestSkipped error is
! raised, the test is not run.
  
  You will be writing unit tests (isolated tests of functions and objects

Index: test_binhex.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_binhex.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** test_binhex.py	1999/10/19 17:48:54	1.4
--- test_binhex.py	2000/08/04 13:34:43	1.5
***************
*** 7,11 ****
  import binhex
  import tempfile
! from test_support import verbose
  
  def test():
--- 7,11 ----
  import binhex
  import tempfile
! from test_support import verbose, TestSkipped
  
  def test():
***************
*** 16,20 ****
          f = open(fname1, 'w')
      except:
!         raise ImportError, "Cannot test binhex without a temp file"
  
      start = 'Jack is my hero'
--- 16,20 ----
          f = open(fname1, 'w')
      except:
!         raise TestSkipped, "Cannot test binhex without a temp file"
  
      start = 'Jack is my hero'

Index: test_dl.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_dl.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** test_dl.py	1999/02/23 17:58:48	1.7
--- test_dl.py	2000/08/04 13:34:43	1.8
***************
*** 5,9 ****
  
  import dl
! from test_support import verbose
  
  sharedlibs = [
--- 5,9 ----
  
  import dl
! from test_support import verbose,TestSkipped
  
  sharedlibs = [
***************
*** 30,32 ****
          break
  else:
!     raise ImportError, 'Could not open any shared libraries'
--- 30,32 ----
          break
  else:
!     raise TestSkipped, 'Could not open any shared libraries'

Index: test_fork1.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_fork1.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** test_fork1.py	2000/05/04 00:36:42	1.4
--- test_fork1.py	2000/08/04 13:34:43	1.5
***************
*** 10,18 ****
  
  import os, sys, time, thread
  
  try:
      os.fork
  except AttributeError:
!     raise ImportError, "os.fork not defined -- skipping test_fork1"
  
  LONGSLEEP = 2
--- 10,19 ----
  
  import os, sys, time, thread
+ from test_support import TestSkipped
  
  try:
      os.fork
  except AttributeError:
!     raise TestSkipped, "os.fork not defined -- skipping test_fork1"
  
  LONGSLEEP = 2

Index: test_gl.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gl.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** test_gl.py	1998/03/26 19:42:09	1.3
--- test_gl.py	2000/08/04 13:34:43	1.4
***************
*** 4,8 ****
      Roger E. Masse
  """
! from test_support import verbose
  import gl, GL, time
  
--- 4,8 ----
      Roger E. Masse
  """
! from test_support import verbose, TestSkipped
  import gl, GL, time
  
***************
*** 88,93 ****
          display = os.environ['DISPLAY']
      except:
!         # Raise ImportError because regrtest.py handles it specially.
!         raise ImportError, "No $DISPLAY -- skipping gl test"
  
      # touch all the attributes of gl without doing anything
--- 88,92 ----
          display = os.environ['DISPLAY']
      except:
!         raise TestSkipped, "No $DISPLAY -- skipping gl test"
  
      # touch all the attributes of gl without doing anything

Index: test_nis.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_nis.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** test_nis.py	1999/01/28 04:54:33	1.7
--- test_nis.py	2000/08/04 13:34:43	1.8
***************
*** 1,3 ****
! from test_support import verbose, TestFailed
  import nis
  
--- 1,3 ----
! from test_support import verbose, TestFailed, TestSkipped
  import nis
  
***************
*** 10,14 ****
          raise TestFailed, msg
      # only do this if running under the regression suite
!     raise ImportError, msg
  
  done = 0
--- 10,14 ----
          raise TestFailed, msg
      # only do this if running under the regression suite
!     raise TestSkipped, msg
  
  done = 0

Index: test_openpty.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_openpty.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** test_openpty.py	2000/07/19 14:51:54	1.2
--- test_openpty.py	2000/08/04 13:34:43	1.3
***************
*** 2,6 ****
  
  import os
! from test_support import verbose, TestFailed
  
  try:
--- 2,6 ----
  
  import os
! from test_support import verbose, TestFailed, TestSkipped
  
  try:
***************
*** 11,15 ****
          print "(master, slave) = (%d, %d)"%(master, slave)
  except AttributeError:
!     raise ImportError, "No openpty() available."
  
  if not os.isatty(master):
--- 11,15 ----
          print "(master, slave) = (%d, %d)"%(master, slave)
  except AttributeError:
!     raise TestSkipped, "No openpty() available."
  
  if not os.isatty(master):

Index: test_pty.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_pty.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** test_pty.py	2000/07/19 14:51:54	1.3
--- test_pty.py	2000/08/04 13:34:43	1.4
***************
*** 1,4 ****
  import pty, os, sys, string
! from test_support import verbose, TestFailed
  
  TEST_STRING_1 = "I wish to buy a fish license."
--- 1,4 ----
  import pty, os, sys, string
! from test_support import verbose, TestFailed, TestSkipped
  
  TEST_STRING_1 = "I wish to buy a fish license."
***************
*** 26,30 ****
  except OSError:
      # " An optional feature could not be imported " ... ?
!     raise ImportError, "Pseudo-terminals (seemingly) not functional."
  
  if not os.isatty(master_fd):
--- 26,30 ----
  except OSError:
      # " An optional feature could not be imported " ... ?
!     raise TestSkipped, "Pseudo-terminals (seemingly) not functional."
  
  if not os.isatty(master_fd):

Index: test_signal.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_signal.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** test_signal.py	1997/11/22 21:50:25	1.4
--- test_signal.py	2000/08/04 13:34:43	1.5
***************
*** 1,4 ****
  # Test the signal module
! from test_support import verbose
  import signal
  import os
--- 1,4 ----
  # Test the signal module
! from test_support import verbose, TestSkipped
  import signal
  import os
***************
*** 6,10 ****
  
  if sys.platform[:3] in ('win', 'os2'):
!     raise ImportError, "Can't test signal on %s" % sys.platform[:3]
  
  if verbose:
--- 6,10 ----
  
  if sys.platform[:3] in ('win', 'os2'):
!     raise TestSkipped, "Can't test signal on %s" % sys.platform[:3]
  
  if verbose:

Index: test_string.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_string.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** test_string.py	2000/07/10 17:08:42	1.10
--- test_string.py	2000/08/04 13:34:43	1.11
***************
*** 1,3 ****
! from test_support import verbose
  import string_tests
  import string, sys
--- 1,3 ----
! from test_support import verbose, TestSkipped
  import string_tests
  import string, sys
***************
*** 7,11 ****
      ''.join
  except AttributeError:
!     raise ImportError
  
  def test(name, input, output, *args):
--- 7,11 ----
      ''.join
  except AttributeError:
!     raise TestSkipped
  
  def test(name, input, output, *args):



From python-dev@python.org  Fri Aug  4 14:37:58 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Fri, 4 Aug 2000 06:37:58 -0700
Subject: [Python-checkins] CVS: python/dist/src/Tools/compiler - New directory
Message-ID: <200008041337.GAA04343@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Tools/compiler
In directory slayer.i.sourceforge.net:/tmp/cvs-serv4335/compiler

Log Message:
Directory /cvsroot/python/python/dist/src/Tools/compiler added to the repository




From python-dev@python.org  Fri Aug  4 14:59:54 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 06:59:54 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python modsupport.c,2.42.2.1,2.42.2.2
Message-ID: <200008041359.GAA07064@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv7054

Modified Files:
      Tag: cnri-16-start
	modsupport.c 
Log Message:
Add a test that Py_IsInitialized() in Py_InitModule4().  See
python-dev discussion.

This should catch future version incompatibilities on Windows.  Alas,
this doesn't help for 1.5 vs. 1.6; but it will help for 1.6 vs. 2.0.


Index: modsupport.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/modsupport.c,v
retrieving revision 2.42.2.1
retrieving revision 2.42.2.2
diff -C2 -r2.42.2.1 -r2.42.2.2
*** modsupport.c	2000/08/03 16:50:36	2.42.2.1
--- modsupport.c	2000/08/04 13:59:51	2.42.2.2
***************
*** 39,42 ****
--- 39,44 ----
  	PyObject *m, *d, *v;
  	PyMethodDef *ml;
+ 	if (!Py_IsInitialized())
+ 	    Py_FatalError("Interpreter not initialized (version mismatch?)");
  	if (module_api_version != PYTHON_API_VERSION)
  		fprintf(stderr, api_version_warning,



From python-dev@python.org  Fri Aug  4 15:00:20 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 07:00:20 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python modsupport.c,2.49,2.50
Message-ID: <200008041400.HAA07195@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv7176

Modified Files:
	modsupport.c 
Log Message:
Add a test that Py_IsInitialized() in Py_InitModule4().  See
python-dev discussion.

This should catch future version incompatibilities on Windows.  Alas,
this doesn't help for 1.5 vs. 1.6; but it will help for 1.6 vs. 2.0.


Index: modsupport.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/modsupport.c,v
retrieving revision 2.49
retrieving revision 2.50
diff -C2 -r2.49 -r2.50
*** modsupport.c	2000/07/22 18:47:25	2.49
--- modsupport.c	2000/08/04 14:00:14	2.50
***************
*** 48,51 ****
--- 48,53 ----
  	PyObject *m, *d, *v;
  	PyMethodDef *ml;
+ 	if (!Py_IsInitialized())
+ 	    Py_FatalError("Interpreter not initialized (version mismatch?)");
  	if (module_api_version != PYTHON_API_VERSION)
  		fprintf(stderr, api_version_warning,



From python-dev@python.org  Fri Aug  4 16:26:02 2000
From: python-dev@python.org (Moshe Zadka)
Date: Fri, 4 Aug 2000 08:26:02 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_linuxaudiodev.py,1.3,1.4
Message-ID: <200008041526.IAA02033@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1754

Modified Files:
	test_linuxaudiodev.py 
Log Message:
Oooopsss.....tab and space mismatch corrected.


Index: test_linuxaudiodev.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_linuxaudiodev.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** test_linuxaudiodev.py	2000/08/04 13:26:03	1.3
--- test_linuxaudiodev.py	2000/08/04 15:25:58	1.4
***************
*** 11,16 ****
          a = linuxaudiodev.open('w')
      except linuxaudiodev.error, msg:
! 	if msg[0] in (errno.EACCES, errno.ENODEV):
! 		raise TestSkipped, msg
          raise TestFailed, msg
      else:
--- 11,16 ----
          a = linuxaudiodev.open('w')
      except linuxaudiodev.error, msg:
!         if msg[0] in (errno.EACCES, errno.ENODEV):
!             raise TestSkipped, msg
          raise TestFailed, msg
      else:



From python-dev@python.org  Fri Aug  4 16:29:06 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 08:29:06 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.23,1.23.4.1
Message-ID: <200008041529.IAA04360@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv4299

Modified Files:
      Tag: cnri-16-start
	sre.py 
Log Message:
In _split(), extend() is called with m.group(), which returns a tuple.
This is OK in 2.0, but not in 1.6.

Fix it on the 1.6 branch, as an explicit list() call seems like it
would be a bit slower.


Index: sre.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v
retrieving revision 1.23
retrieving revision 1.23.4.1
diff -C2 -r1.23 -r1.23.4.1
*** sre.py	2000/08/01 22:47:48	1.23
--- sre.py	2000/08/04 15:29:03	1.23.4.1
***************
*** 156,160 ****
          append(string[i:b])
          if g and b != e:
!             extend(m.groups())
          i = e
          n = n + 1
--- 156,160 ----
          append(string[i:b])
          if g and b != e:
!             extend(list(m.groups()))
          i = e
          n = n + 1



From python-dev@python.org  Fri Aug  4 16:35:38 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 08:35:38 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python getargs.c,2.33.2.1,2.33.2.2
Message-ID: <200008041535.IAA09363@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv9274/Python

Modified Files:
      Tag: cnri-16-start
	getargs.c 
Log Message:
Reapply Marc-Andres patest patch in the 1.6 branch

Index: getargs.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v
retrieving revision 2.33.2.1
retrieving revision 2.33.2.2
diff -C2 -r2.33.2.1 -r2.33.2.2
*** getargs.c	2000/08/03 16:50:35	2.33.2.1
--- getargs.c	2000/08/04 15:35:36	2.33.2.2
***************
*** 416,420 ****
  /* Internal API needed by convertsimple1(): */
  extern 
! PyObject *_PyUnicode_AsUTF8String(PyObject *unicode,
  				  const char *errors);
  
--- 416,420 ----
  /* Internal API needed by convertsimple1(): */
  extern 
! PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode,
  				  const char *errors);
  
***************
*** 594,598 ****
  				    *p = PyString_AS_STRING(arg);
  				else if (PyUnicode_Check(arg)) {
! 				    arg = _PyUnicode_AsUTF8String(arg, NULL);
  				    if (arg == NULL)
  					return "unicode conversion error";
--- 594,599 ----
  				    *p = PyString_AS_STRING(arg);
  				else if (PyUnicode_Check(arg)) {
! 				    arg = _PyUnicode_AsDefaultEncodedString(
! 							            arg, NULL);
  				    if (arg == NULL)
  					return "unicode conversion error";
***************
*** 639,643 ****
  				  *p = PyString_AsString(arg);
  				else if (PyUnicode_Check(arg)) {
! 				  arg = _PyUnicode_AsUTF8String(arg, NULL);
  				  if (arg == NULL)
  				      return "unicode conversion error";
--- 640,645 ----
  				  *p = PyString_AsString(arg);
  				else if (PyUnicode_Check(arg)) {
! 				  arg = _PyUnicode_AsDefaultEncodedString(
! 								  arg, NULL);
  				  if (arg == NULL)
  				      return "unicode conversion error";
***************
*** 671,675 ****
  			encoding = (const char *)va_arg(*p_va, const char *);
  			if (encoding == NULL)
! 				return "(encoding is NULL)";
  			
  			/* Get 's' parameter: the output buffer to use */
--- 673,677 ----
  			encoding = (const char *)va_arg(*p_va, const char *);
  			if (encoding == NULL)
! 			    	encoding = PyUnicode_GetDefaultEncoding();
  			
  			/* Get 's' parameter: the output buffer to use */



From python-dev@python.org  Fri Aug  4 16:35:38 2000
From: python-dev@python.org (Guido van Rossum)
Date: Fri, 4 Aug 2000 08:35:38 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.54.2.1,2.54.2.2
Message-ID: <200008041535.IAA09356@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv9274/Objects

Modified Files:
      Tag: cnri-16-start
	unicodeobject.c 
Log Message:
Reapply Marc-Andres patest patch in the 1.6 branch

Index: unicodeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.54.2.1
retrieving revision 2.54.2.2
diff -C2 -r2.54.2.1 -r2.54.2.2
*** unicodeobject.c	2000/08/03 16:35:00	2.54.2.1
--- unicodeobject.c	2000/08/04 15:35:36	2.54.2.2
***************
*** 167,173 ****
   reset:
      /* Reset the object caches */
!     if (unicode->utf8str) {
!         Py_DECREF(unicode->utf8str);
!         unicode->utf8str = NULL;
      }
      unicode->hash = -1;
--- 167,173 ----
   reset:
      /* Reset the object caches */
!     if (unicode->defenc) {
!         Py_DECREF(unicode->defenc);
!         unicode->defenc = NULL;
      }
      unicode->hash = -1;
***************
*** 245,249 ****
      unicode->length = length;
      unicode->hash = -1;
!     unicode->utf8str = NULL;
      return unicode;
  
--- 245,249 ----
      unicode->length = length;
      unicode->hash = -1;
!     unicode->defenc = NULL;
      return unicode;
  
***************
*** 264,270 ****
  	    unicode->length = 0;
  	}
! 	if (unicode->utf8str) {
! 	    Py_DECREF(unicode->utf8str);
! 	    unicode->utf8str = NULL;
  	}
  	/* Add to free list */
--- 264,270 ----
  	    unicode->length = 0;
  	}
! 	if (unicode->defenc) {
! 	    Py_DECREF(unicode->defenc);
! 	    unicode->defenc = NULL;
  	}
  	/* Add to free list */
***************
*** 275,279 ****
      else {
  	PyMem_DEL(unicode->str);
! 	Py_XDECREF(unicode->utf8str);
  	PyObject_DEL(unicode);
      }
--- 275,279 ----
      else {
  	PyMem_DEL(unicode->str);
! 	Py_XDECREF(unicode->defenc);
  	PyObject_DEL(unicode);
      }
***************
*** 531,534 ****
--- 531,561 ----
  }
  
+ /* Return a Python string holding the default encoded value of the
+    Unicode object. 
+ 
+    The resulting string is cached in the Unicode object for subsequent
+    usage by this function. The cached version is needed to implement
+    the character buffer interface and will live (at least) as long as
+    the Unicode object itself.
+ 
+    The refcount of the string is *not* incremented.
+ 
+    *** Exported for internal use by the interpreter only !!! ***
+ 
+ */
+ 
+ PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode,
+ 					    const char *errors)
+ {
+     PyObject *v = ((PyUnicodeObject *)unicode)->defenc;
+ 
+     if (v)
+         return v;
+     v = PyUnicode_AsEncodedString(unicode, NULL, errors);
+     if (v && errors == NULL)
+         ((PyUnicodeObject *)unicode)->defenc = v;
+     return v;
+ }
+ 
  Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode)
  {
***************
*** 876,908 ****
  }
  
- /* Return a Python string holding the UTF-8 encoded value of the
-    Unicode object. 
- 
-    The resulting string is cached in the Unicode object for subsequent
-    usage by this function. The cached version is needed to implement
-    the character buffer interface and will live (at least) as long as
-    the Unicode object itself.
- 
-    The refcount of the string is *not* incremented.
- 
-    *** Exported for internal use by the interpreter only !!! ***
- 
- */
- 
- PyObject *_PyUnicode_AsUTF8String(PyObject *unicode,
- 				  const char *errors)
- {
-     PyObject *v = ((PyUnicodeObject *)unicode)->utf8str;
- 
-     if (v)
-         return v;
-     v = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
- 			     PyUnicode_GET_SIZE(unicode),
- 			     errors);
-     if (v && errors == NULL)
-         ((PyUnicodeObject *)unicode)->utf8str = v;
-     return v;
- }
- 
  PyObject *PyUnicode_AsUTF8String(PyObject *unicode)
  {
--- 903,906 ----
***************
*** 913,917 ****
          return NULL;
      }
!     str = _PyUnicode_AsUTF8String(unicode, NULL);
      if (str == NULL)
          return NULL;
--- 911,917 ----
          return NULL;
      }
!     str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
! 			       PyUnicode_GET_SIZE(unicode),
! 			       NULL);
      if (str == NULL)
          return NULL;
***************
*** 4521,4525 ****
          return -1;
      }
!     str = _PyUnicode_AsUTF8String((PyObject *)self, NULL);
      if (str == NULL)
  	return -1;
--- 4521,4525 ----
          return -1;
      }
!     str = _PyUnicode_AsDefaultEncodedString((PyObject *)self, NULL);
      if (str == NULL)
  	return -1;
***************
*** 5132,5136 ****
  	if (v->str)
  	    PyMem_DEL(v->str);
! 	Py_XDECREF(v->utf8str);
  	PyObject_DEL(v);
      }
--- 5132,5136 ----
  	if (v->str)
  	    PyMem_DEL(v->str);
! 	Py_XDECREF(v->defenc);
  	PyObject_DEL(v);
      }



From python-dev@python.org  Fri Aug  4 16:36:15 2000
From: python-dev@python.org (Moshe Zadka)
Date: Fri, 4 Aug 2000 08:36:15 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects bufferobject.c,2.11,2.12 object.c,2.91,2.92
Message-ID: <200008041536.IAA10077@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv4647/Objects

Modified Files:
	bufferobject.c object.c 
Log Message:
Removing warnings found by gcc -Wall


Index: bufferobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/bufferobject.c,v
retrieving revision 2.11
retrieving revision 2.12
diff -C2 -r2.11 -r2.12
*** bufferobject.c	2000/07/09 04:06:11	2.11
--- bufferobject.c	2000/08/04 15:36:13	2.12
***************
*** 142,145 ****
--- 142,146 ----
  PyBuffer_New(int size)
  {
+ 	PyObject *o;
  	PyBufferObject * b;
  
***************
*** 150,157 ****
  	}
  	/* PyObject_New is inlined */
! 	b = (PyBufferObject *) PyObject_MALLOC(sizeof(*b) + size);
! 	if ( b == NULL )
  		return PyErr_NoMemory();
! 	PyObject_INIT((PyObject *)b, &PyBuffer_Type);
  
  	b->b_base = NULL;
--- 151,158 ----
  	}
  	/* PyObject_New is inlined */
! 	o = PyObject_MALLOC(sizeof(*b) + size);
! 	if ( o == NULL )
  		return PyErr_NoMemory();
! 	b = (PyBufferObject *) PyObject_INIT(o, &PyBuffer_Type);
  
  	b->b_base = NULL;
***************
*** 163,167 ****
  #endif
  
! 	return (PyObject *) b;
  }
  
--- 164,168 ----
  #endif
  
! 	return o;
  }
  

Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.91
retrieving revision 2.92
diff -C2 -r2.91 -r2.92
*** object.c	2000/07/31 15:28:04	2.91
--- object.c	2000/08/04 15:36:13	2.92
***************
*** 1124,1127 ****
--- 1124,1131 ----
  	else if (PyTraceBack_Check(op))
  		typecode = Py_TRASHCAN_TRACEBACK;
+ 	else /* We have a bug here -- those are the only types in GC */ {
+ 		Py_FatalError("Type not supported in GC -- internal bug");
+ 		return; /* pacify compiler -- execution never here */
+ 	}
  	op->ob_refcnt = typecode;
  



From python-dev@python.org  Fri Aug  4 16:53:09 2000
From: python-dev@python.org (Moshe Zadka)
Date: Fri, 4 Aug 2000 08:53:09 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules audioop.c,1.41,1.42 tkappinit.c,1.8,1.9
Message-ID: <200008041553.IAA28799@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv24001/Modules

Modified Files:
	audioop.c tkappinit.c 
Log Message:
Removing warnings discovered by gcc -Wall


Index: audioop.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/audioop.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -r1.41 -r1.42
*** audioop.c	2000/07/31 15:28:04	1.41
--- audioop.c	2000/08/04 15:53:06	1.42
***************
*** 88,92 ****
  	56,     48,     40,     32,     24,     16,      8,      0 };
  
! /* #define ZEROTRAP    /* turn on the trap as per the MIL-STD */
  #define BIAS 0x84   /* define the add-in bias for 16 bit samples */
  #define CLIP 32635
--- 88,92 ----
  	56,     48,     40,     32,     24,     16,      8,      0 };
  
! /* #define ZEROTRAP */   /* turn on the trap as per the MIL-STD */
  #define BIAS 0x84   /* define the add-in bias for 16 bit samples */
  #define CLIP 32635

Index: tkappinit.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/tkappinit.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** tkappinit.c	2000/07/10 09:26:41	1.8
--- tkappinit.c	2000/08/04 15:53:06	1.9
***************
*** 19,23 ****
  Tcl_AppInit(Tcl_Interp *interp)
  {
! 	Tk_Window main;
  
  	if (Tcl_Init (interp) == TCL_ERROR)
--- 19,23 ----
  Tcl_AppInit(Tcl_Interp *interp)
  {
! 	Tk_Window main_window;
  
  	if (Tcl_Init (interp) == TCL_ERROR)
***************
*** 26,30 ****
  		return TCL_ERROR;
  
! 	main = Tk_MainWindow(interp);
  
  #ifdef WITH_MOREBUTTONS
--- 26,30 ----
  		return TCL_ERROR;
  
! 	main_window = Tk_MainWindow(interp);
  
  #ifdef WITH_MOREBUTTONS
***************
*** 34,40 ****
  
  		Tcl_CreateCommand(interp, "studbutton", studButtonCmd,
! 				  (ClientData) main, NULL);
  		Tcl_CreateCommand(interp, "tributton", triButtonCmd,
! 				  (ClientData) main, NULL);
  	}
  #endif
--- 34,40 ----
  
  		Tcl_CreateCommand(interp, "studbutton", studButtonCmd,
! 				  (ClientData) main_window, NULL);
  		Tcl_CreateCommand(interp, "tributton", triButtonCmd,
! 				  (ClientData) main_window, NULL);
  	}
  #endif



From python-dev@python.org  Fri Aug  4 17:54:57 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Fri, 4 Aug 2000 09:54:57 -0700
Subject: [Python-checkins] CVS: python/nondist/src/Compiler/compiler transformer.py,1.11,1.12
Message-ID: <200008041654.JAA02492@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/src/Compiler/compiler
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1877

Modified Files:
	transformer.py 
Log Message:
update my email address
fix com_call_function to cope with trailing comma in "f(a, b,)"


Index: transformer.py
===================================================================
RCS file: /cvsroot/python/python/nondist/src/Compiler/compiler/transformer.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** transformer.py	2000/08/03 17:39:13	1.11
--- transformer.py	2000/08/04 16:54:54	1.12
***************
*** 12,16 ****
  #
  # Support for ast.Node subclasses written and other revisions by
! #  Jeremy Hylton (jeremy@cnri.reston.va.us)
  #
  
--- 12,16 ----
  #
  # Support for ast.Node subclasses written and other revisions by
! #  Jeremy Hylton (jeremy@beopen.com)
  #
  
***************
*** 1002,1005 ****
--- 1002,1008 ----
      else:
          i = i + 1 # No broken by star arg, so skip the last one we processed.
+     if i < len_nodelist and nodelist[i][0] == token.COMMA:
+         # need to accept an application that looks like "f(a, b,)"
+         i = i + 1
      star_node = dstar_node = None
      while i < len_nodelist:



From python-dev@python.org  Fri Aug  4 17:56:54 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Fri, 4 Aug 2000 09:56:54 -0700
Subject: [Python-checkins] CVS: python/nondist/src/Compiler/compiler pycodegen.py,1.20,1.21
Message-ID: <200008041656.JAA04669@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/src/Compiler/compiler
In directory slayer.i.sourceforge.net:/tmp/cvs-serv3989

Modified Files:
	pycodegen.py 
Log Message:
replace most calls to emit 'SET_LINENO' will call to method set_lineno
based on bug report by Neil Schemenauer


Index: pycodegen.py
===================================================================
RCS file: /cvsroot/python/python/nondist/src/Compiler/compiler/pycodegen.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** pycodegen.py	2000/05/02 22:32:59	1.20
--- pycodegen.py	2000/08/04 16:56:51	1.21
***************
*** 106,109 ****
--- 106,125 ----
              self.emit(prefix + '_GLOBAL', name)
  
+     def set_lineno(self, node):
+         """Emit SET_LINENO if node has lineno attribute
+ 
+         Returns true if SET_LINENO was emitted.
+ 
+         There are no rules for when an AST node should have a lineno
+         attribute.  The transformer and AST code need to be reviewed
+         and a consistent policy implemented and documented.  Until
+         then, this method works around missing line numbers.
+         """
+         lineno = getattr(node, 'lineno', None)
+         if lineno is not None:
+             self.emit('SET_LINENO', lineno)
+             return 1
+         return 0
+ 
      # The first few visitor methods handle nodes that generator new
      # code objects 
***************
*** 129,133 ****
  	walk(node.code, gen)
  	gen.finish()
! 	self.emit('SET_LINENO', node.lineno)
          for default in node.defaults:
              self.visit(default)
--- 145,149 ----
  	walk(node.code, gen)
  	gen.finish()
!         self.set_lineno(node)
          for default in node.defaults:
              self.visit(default)
***************
*** 139,143 ****
          walk(node.code, gen)
          gen.finish()
!         self.emit('SET_LINENO', node.lineno)
          self.emit('LOAD_CONST', node.name)
          for base in node.bases:
--- 155,159 ----
          walk(node.code, gen)
          gen.finish()
!         self.set_lineno(node)
          self.emit('LOAD_CONST', node.name)
          for base in node.bases:
***************
*** 159,164 ****
  	for i in range(numtests):
  	    test, suite = node.tests[i]
! 	    if hasattr(test, 'lineno'):
! 		self.emit('SET_LINENO', test.lineno)
  	    self.visit(test)
  ## 	    if i == numtests - 1 and not node.else_:
--- 175,179 ----
  	for i in range(numtests):
  	    test, suite = node.tests[i]
!             self.set_lineno(test)
  	    self.visit(test)
  ## 	    if i == numtests - 1 and not node.else_:
***************
*** 179,183 ****
  
      def visitWhile(self, node):
! 	self.emit('SET_LINENO', node.lineno)
  
  	loop = self.newBlock()
--- 194,198 ----
  
      def visitWhile(self, node):
!         self.set_lineno(node)
  
  	loop = self.newBlock()
***************
*** 190,194 ****
  	self.loops.push(loop)
  
! 	self.emit('SET_LINENO', node.lineno)
  	self.visit(node.test)
  	self.emit('JUMP_IF_FALSE', else_ or after)
--- 205,209 ----
  	self.loops.push(loop)
  
!         self.set_lineno(node)
  	self.visit(node.test)
  	self.emit('JUMP_IF_FALSE', else_ or after)
***************
*** 213,222 ****
          self.loops.push(start)
  
!         self.emit('SET_LINENO', node.lineno)
  	self.emit('SETUP_LOOP', after)
          self.visit(node.list)
          self.visit(ast.Const(0))
  	self.nextBlock(start)
!         self.emit('SET_LINENO', node.lineno)
          self.emit('FOR_LOOP', anchor)
          self.visit(node.assign)
--- 228,237 ----
          self.loops.push(start)
  
!         self.set_lineno(node)
  	self.emit('SETUP_LOOP', after)
          self.visit(node.list)
          self.visit(ast.Const(0))
  	self.nextBlock(start)
!         self.set_lineno(node)
          self.emit('FOR_LOOP', anchor)
          self.visit(node.assign)
***************
*** 234,238 ****
  	    raise SyntaxError, "'break' outside loop (%s, %d)" % \
  		  (self.filename, node.lineno)
! 	self.emit('SET_LINENO', node.lineno)
  	self.emit('BREAK_LOOP')
  
--- 249,253 ----
  	    raise SyntaxError, "'break' outside loop (%s, %d)" % \
  		  (self.filename, node.lineno)
!         self.set_lineno(node)
  	self.emit('BREAK_LOOP')
  
***************
*** 242,246 ****
  		  (self.filename, node.lineno)
          l = self.loops.top()
!         self.emit('SET_LINENO', node.lineno)
          self.emit('JUMP_ABSOLUTE', l)
  	self.nextBlock()
--- 257,261 ----
  		  (self.filename, node.lineno)
          l = self.loops.top()
!         self.set_lineno(node)
          self.emit('JUMP_ABSOLUTE', l)
  	self.nextBlock()
***************
*** 292,296 ****
  	# transformation of the AST before this stage
  	end = self.newBlock()
! 	self.emit('SET_LINENO', node.lineno)
          # XXX __debug__ and AssertionError appear to be special cases
          # -- they are always loaded as globals even if there are local
--- 307,311 ----
  	# transformation of the AST before this stage
  	end = self.newBlock()
!         self.set_lineno(node)
          # XXX __debug__ and AssertionError appear to be special cases
          # -- they are always loaded as globals even if there are local
***************
*** 310,314 ****
  
      def visitRaise(self, node):
!         self.emit('SET_LINENO', node.lineno)
          n = 0
          if node.expr1:
--- 325,329 ----
  
      def visitRaise(self, node):
!         self.set_lineno(node)
          n = 0
          if node.expr1:
***************
*** 330,334 ****
          else:
              lElse = end
!         self.emit('SET_LINENO', node.lineno)
          self.emit('SETUP_EXCEPT', handlers)
          self.visit(node.body)
--- 345,349 ----
          else:
              lElse = end
!         self.set_lineno(node)
          self.emit('SETUP_EXCEPT', handlers)
          self.visit(node.body)
***************
*** 340,345 ****
          for i in range(len(node.handlers)):
              expr, target, body = node.handlers[i]
!             if hasattr(expr, 'lineno'):
!                 self.emit('SET_LINENO', expr.lineno)
              if expr:
                  self.emit('DUP_TOP')
--- 355,359 ----
          for i in range(len(node.handlers)):
              expr, target, body = node.handlers[i]
!             self.set_lineno(expr)
              if expr:
                  self.emit('DUP_TOP')
***************
*** 369,373 ****
      def visitTryFinally(self, node):
          final = self.newBlock()
!         self.emit('SET_LINENO', node.lineno)
          self.emit('SETUP_FINALLY', final)
          self.visit(node.body)
--- 383,387 ----
      def visitTryFinally(self, node):
          final = self.newBlock()
!         self.set_lineno(node)
          self.emit('SETUP_FINALLY', final)
          self.visit(node.body)
***************
*** 403,410 ****
          
      def visitPass(self, node):
!         self.emit('SET_LINENO', node.lineno)
  
      def visitImport(self, node):
!         self.emit('SET_LINENO', node.lineno)
          for name in node.names:
              self.emit('IMPORT_NAME', name)
--- 417,424 ----
          
      def visitPass(self, node):
!         self.set_lineno(node)
  
      def visitImport(self, node):
!         self.set_lineno(node)
          for name in node.names:
              self.emit('IMPORT_NAME', name)
***************
*** 412,416 ****
  
      def visitFrom(self, node):
!         self.emit('SET_LINENO', node.lineno)
          self.emit('IMPORT_NAME', node.modname)
          for name in node.names:
--- 426,430 ----
  
      def visitFrom(self, node):
!         self.set_lineno(node)
          self.emit('IMPORT_NAME', node.modname)
          for name in node.names:
***************
*** 427,431 ****
  
      def visitAssign(self, node):
!         self.emit('SET_LINENO', node.lineno)
          self.visit(node.expr)
          dups = len(node.nodes) - 1
--- 441,445 ----
  
      def visitAssign(self, node):
!         self.set_lineno(node)
          self.visit(node.expr)
          dups = len(node.nodes) - 1
***************
*** 478,483 ****
          pos = 0
          kw = 0
!         if hasattr(node, 'lineno'):
!             self.emit('SET_LINENO', node.lineno)
          self.visit(node.node)
          for arg in node.args:
--- 492,496 ----
          pos = 0
          kw = 0
!         self.set_lineno(node)
          self.visit(node.node)
          for arg in node.args:
***************
*** 497,501 ****
  
      def visitPrint(self, node):
!         self.emit('SET_LINENO', node.lineno)
          for child in node.nodes:
              self.visit(child)
--- 510,514 ----
  
      def visitPrint(self, node):
!         self.set_lineno(node)
          for child in node.nodes:
              self.visit(child)
***************
*** 507,511 ****
  
      def visitReturn(self, node):
!         self.emit('SET_LINENO', node.lineno)
          self.visit(node.value)
          self.emit('RETURN_VALUE')
--- 520,524 ----
  
      def visitReturn(self, node):
!         self.set_lineno(node)
          self.visit(node.value)
          self.emit('RETURN_VALUE')
***************
*** 638,650 ****
  
      def visitDict(self, node):
! 	# XXX is this a good general strategy?  could it be done 
! 	# separately from the general visitor
! 	lineno = getattr(node, 'lineno', None)
! 	if lineno:
! 	    self.emit('SET_LINENO', lineno)
          self.emit('BUILD_MAP', 0)
          for k, v in node.items:
  	    lineno2 = getattr(node, 'lineno', None)
! 	    if lineno != lineno2:
  		self.emit('SET_LINENO', lineno2)
  		lineno = lineno2
--- 651,661 ----
  
      def visitDict(self, node):
!         lineno = getattr(node, 'lineno', None)
!         if lineno:
!             set.emit('SET_LINENO', lineno)
          self.emit('BUILD_MAP', 0)
          for k, v in node.items:
  	    lineno2 = getattr(node, 'lineno', None)
!             if lineno2 is not None and lineno != lineno2:
  		self.emit('SET_LINENO', lineno2)
  		lineno = lineno2
***************
*** 688,692 ****
  	if func.kwargs:
  	    self.graph.setFlag(CO_VARKEYWORDS)
!         self.emit('SET_LINENO', func.lineno)
          if hasTupleArg:
              self.generateArgUnpack(func.argnames)
--- 699,703 ----
  	if func.kwargs:
  	    self.graph.setFlag(CO_VARKEYWORDS)
!         self.set_lineno(func)
          if hasTupleArg:
              self.generateArgUnpack(func.argnames)



From python-dev@python.org  Fri Aug  4 18:02:05 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Fri, 4 Aug 2000 10:02:05 -0700
Subject: [Python-checkins] CVS: python/dist/src/Tools/compiler/compiler - New directory
Message-ID: <200008041702.KAA11379@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Tools/compiler/compiler
In directory slayer.i.sourceforge.net:/tmp/cvs-serv11225/compiler

Log Message:
Directory /cvsroot/python/python/dist/src/Tools/compiler/compiler added to the repository




From python-dev@python.org  Fri Aug  4 18:04:01 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Fri, 4 Aug 2000 10:04:01 -0700
Subject: [Python-checkins] CVS: python/dist/src/Tools README,1.5,1.6
Message-ID: <200008041704.KAA14818@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Tools
In directory slayer.i.sourceforge.net:/tmp/cvs-serv14043

Modified Files:
	README 
Log Message:
add note about compiler directory
(is bgen still "still under development"?)


Index: README
===================================================================
RCS file: /cvsroot/python/python/dist/src/Tools/README,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** README	1998/04/10 20:58:53	1.5
--- README	2000/08/04 17:03:58	1.6
***************
*** 5,8 ****
--- 5,12 ----
  		description.  Still under development!
  
+ compiler        A Python source to bytecode compiler written in
+                 Python, including an interface for manipulating
+                 abstract syntax trees.  Still under development.
+ 
  faqwiz		FAQ Wizard.
  		See http://grail.cnri.reston.va.us/cgi-bin/faqw.py



From python-dev@python.org  Sat Aug  5 01:43:15 2000
From: python-dev@python.org (Greg Ward)
Date: Fri, 4 Aug 2000 17:43:15 -0700
Subject: [Python-checkins] CVS: distutils/doc/dist dist.tex,1.18,1.19
Message-ID: <200008050043.RAA27050@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/doc/dist
In directory slayer.i.sourceforge.net:/tmp/cvs-serv27040

Modified Files:
	dist.tex 
Log Message:
A bundle of wording improvements, corrections, clarifications, updates, 
and so forth.

Index: dist.tex
===================================================================
RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -r1.18 -r1.19
*** dist.tex	2000/06/30 03:36:41	1.18
--- dist.tex	2000/08/05 00:43:11	1.19
***************
*** 22,35 ****
  for installing and maintaining third-party modules.  With the
  introduction of the Python Distribution Utilities (Distutils for short)
! in Python 2.0, this situation should start to improve.
  
  This document only covers using the Distutils to distribute your Python
! modules.  Using the Distutils does not tie you to Python 2.0, though:
! the Distutils work just fine with Python 1.5, and it is reasonable (and
! expected to become commonplace) to expect users of Python 1.5 to
  download and install the Distutils separately before they can install
! your modules.  Python 2.0 users, of course, won't have to add anything
! to their Python installation in order to use the Distutils to install
! third-party modules.
  
  This document concentrates on the role of developer/distributor: if
--- 22,35 ----
  for installing and maintaining third-party modules.  With the
  introduction of the Python Distribution Utilities (Distutils for short)
! in Python 1.6, this situation should start to improve.
  
  This document only covers using the Distutils to distribute your Python
! modules.  Using the Distutils does not tie you to Python 1.6, though:
! the Distutils work just fine with Python 1.5.2, and it is reasonable
! (and expected to become commonplace) to expect users of Python 1.5.2 to
  download and install the Distutils separately before they can install
! your modules.  Python 1.6 (or later) users, of course, won't have to add
! anything to their Python installation in order to use the Distutils to
! install third-party modules.
  
  This document concentrates on the role of developer/distributor: if
***************
*** 69,75 ****
  
  The setup script is usually quite simple, although since it's written in
! Python, there are no arbitrary limits to what you can do.  If all you
! want to do is distribute a module called \module{foo}, contained in a
! file \file{foo.py}, then your setup script can be as little as this:
  \begin{verbatim}
  from distutils.core import setup
--- 69,76 ----
  
  The setup script is usually quite simple, although since it's written in
! Python, there are no arbitrary limits to what you can do with it.  If
! all you want to do is distribute a module called \module{foo}, contained
! in a file \file{foo.py}, then your setup script can be as little as
! this:
  \begin{verbatim}
  from distutils.core import setup
***************
*** 119,123 ****
  their own code occasionally).
  
- \XXX{only partially implemented}%
  If you want to make things really easy for your users, you can create
  one or more built distributions for them.  For instance, if you are
--- 120,123 ----
***************
*** 129,135 ****
  python setup.py bdist_wininst
  \end{verbatim}
! will create an executable installer, \file{Foo-1\_0.exe}, in the current
! directory.
  
  (Another way to create executable installers for Windows is with the
  \command{bdist\_wise} command, which uses Wise---the commercial
--- 129,136 ----
  python setup.py bdist_wininst
  \end{verbatim}
! will create an executable installer, \file{Foo-1.0.win32.exe}, in the
! current directory.
  
+ \XXX{not implemented yet}
  (Another way to create executable installers for Windows is with the
  \command{bdist\_wise} command, which uses Wise---the commercial
***************
*** 143,151 ****
  work; it's available from \url{http://foo/bar/baz}.)
  
! Other \command{bdist} commands exist for other platforms: for example,
! \command{bdist\_rpm} for RPM-based Linux systems, (\command{bdist\_deb})
! for Debian-based Linux systems, and so forth.  See
! section~\ref{bdist-cmds} for details on all the \command{bdist}
! commands.
  
  
--- 144,162 ----
  work; it's available from \url{http://foo/bar/baz}.)
  
! Currently (Distutils 0.9.1), the are only other useful built
! distribution format is RPM, implemented by the \command{bdist\_rpm}
! command.  For example, the following command will create an RPM file
! called \file{Foo-1.0.noarch.rpm}:
! \begin{verbatim}
! python setup.py bdist_rpm
! \end{verbatim}
! (This uses the \command{rpm} command, so has to be run on an RPM-based
! system such as Red Hat Linux, SuSE Linux, or Mandrake Linux.)
! 
! You can find out what distribution formats are available at any time by
! running
! \begin{verbatim}
! python setup.py bdist --help-formats
! \end{verbatim}
  
  
***************
*** 159,165 ****
  \begin{description}
  \item[module] the basic unit of code reusability in Python: a block of
!   code imported by some other code.  There are three types of modules
!   that concern us here: pure Python modules, extension modules, and
!   packages.
  \item[pure Python module] a module written in Python and contained in a
    single \file{.py} file (and possibly associated \file{.pyc} and/or
--- 170,175 ----
  \begin{description}
  \item[module] the basic unit of code reusability in Python: a block of
!   code imported by some other code.  Three types of modules concern us
!   here: pure Python modules, extension modules, and packages.
  \item[pure Python module] a module written in Python and contained in a
    single \file{.py} file (and possibly associated \file{.pyc} and/or
***************
*** 225,232 ****
  Here's a slightly more involved example, which we'll follow for the next
  couple of sections: the Distutils' own setup script.  (Keep in mind that
! although the Distutils are included with Python 2.0, they also have an
! independent existence so that Python 1.5 users can use them to install
! other module distributions.  The Distutils' own setup script is used to
! install the package into Python 1.5.)
  
  \begin{verbatim}
--- 235,242 ----
  Here's a slightly more involved example, which we'll follow for the next
  couple of sections: the Distutils' own setup script.  (Keep in mind that
! although the Distutils are included with Python 1.6 and later, they also
! have an independent existence so that Python 1.5.2 users can use them to
! install other module distributions.  The Distutils' own setup script,
! shown here, is used to install the package into Python 1.5.2.)
  
  \begin{verbatim}
***************
*** 237,241 ****
  setup (name = "Distutils",
         version = "1.0",
!        description = "Python Module Distribution Utilities",
         author = "Greg Ward",
         author_email = "gward@python.net",
--- 247,251 ----
  setup (name = "Distutils",
         version = "1.0",
!        description = "Python Distribution Utilities",
         author = "Greg Ward",
         author_email = "gward@python.net",
***************
*** 285,299 ****
  that's no problem: you just have to supply the \option{package\_dir}
  option to tell the Distutils about your convention.  For example, say
! you keep all Python source under \file{lib}, so that modules not in any
! package are right in \file{lib}, modules in the \module{foo} package
! are in \file{lib/foo}, and so forth.  Then you would put
  \begin{verbatim}
  package_dir = {'': 'lib'}
  \end{verbatim}
  in your setup script.  (The keys to this dictionary are package names,
! and an empty package name stands for the ``root package,'' i.e. no
! package at all.  The values are directory names relative to your
! distribution root.)  In this case, when you say
! \code{packages = ['foo']}, you are promising that the file
  \file{lib/foo/\_\_init\_\_.py} exists.
  
--- 295,309 ----
  that's no problem: you just have to supply the \option{package\_dir}
  option to tell the Distutils about your convention.  For example, say
! you keep all Python source under \file{lib}, so that modules in the
! ``root package'' (i.e., not in any package at all) are right in
! \file{lib}, modules in the \module{foo} package are in \file{lib/foo},
! and so forth.  Then you would put
  \begin{verbatim}
  package_dir = {'': 'lib'}
  \end{verbatim}
  in your setup script.  (The keys to this dictionary are package names,
! and an empty package name stands for the root package.  The values are
! directory names relative to your distribution root.)  In this case, when
! you say \code{packages = ['foo']}, you are promising that the file
  \file{lib/foo/\_\_init\_\_.py} exists.
  
***************
*** 338,343 ****
  \label{sec:describing-extensions}
  
- \XXX{be sure to describe the whole \code{build\_info} dict, including
-   \code{extra\_compile\_args} and \code{extra\_link\_args}}
  
  
--- 348,351 ----
***************
*** 345,350 ****
  \label{setup-config}
  
- \XXX{not implemented yet!}
- 
  Often, it's not possible to write down everything needed to build a
  distribution \emph{a priori}.  You need to get some information from the
--- 353,356 ----
***************
*** 492,497 ****
  \item if the manifest file, \file{MANIFEST} doesn't exist, read
    \file{MANIFEST.in} and create the manifest
! \item if \file{MANIFEST.in} is more recent than \file{MANIFEST},
!   recreate \file{MANIFEST} by reading \file{MANIFEST.in}
  \item use the list of files now in \file{MANIFEST} (either just
    generated or read in) to create the source distribution archive(s)
--- 498,504 ----
  \item if the manifest file, \file{MANIFEST} doesn't exist, read
    \file{MANIFEST.in} and create the manifest
! \item if either \file{MANIFEST.in} or the setup script (\file{setup.py})
!   are more recent than \file{MANIFEST}, recreate \file{MANIFEST} by
!   reading \file{MANIFEST.in}
  \item use the list of files now in \file{MANIFEST} (either just
    generated or read in) to create the source distribution archive(s)
***************
*** 506,511 ****
  python setup.py sdist --force-manifest
  \end{verbatim}
- \XXX{this is stupid, but is there a better way to do it without
-   reprocessing MANIFEST.in every single bloody time?}
  
  Or, you might just want to (re)generate the manifest, but not create a
--- 513,516 ----
***************
*** 563,614 ****
  in this case), does a ``fake'' installation (also in the \file{build}
  directory), and creates the default type of built distribution for my
! platform.  In Distutils 0.8, only two types of built distribution are
! supported: \code{gztar} (default on non-Linux Unix) and \code{zip}
! (default on Windows).  Thus, the above command on a Unix system creates
! \file{Distutils-0.8.built-posix.tar.gz}; unpacking this tarball from
! Python's \filevar{prefix} directory installs the Distutils just as
! though you had downloaded the source distribution and run \code{python
!   setup.py install}.  Obviously, for pure Python distributions, this
! isn't a huge win---but for non-pure distributions, which include
! extensions that would need to be compiled, it can mean the difference
! between someone being able to use your extensions or not.
  
  \XXX{filenames are inaccurate here!}
  
  The \command{bdist} command has a \longprogramopt{format} option,
! similar to the \command{sdist} command, that you can use to select which
! formats to generate: for example,
  \begin{verbatim}
  python setup.py bdist --format=zip
  \end{verbatim}
  would, when run on a Unix system, create
! \file{Distutils-0.8.built-posix.tar.gz}---again, this archive would be
! unpacked from Python's \filevar{prefix} directory to install the
! Distutils.
  
  The available formats for built distributions are:
  \begin{tableiii}{l|l|c}{code}%
    {Format}{Description}{Notes}
!   \lineiii{zip}{zip file (\file{.zip})}{(1)}
!   \lineiii{gztar}{gzipped tar file (\file{.tar.gz})}{(2)}
    \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{}
    \lineiii{tar}{tar file (\file{.tar})}{}
!   \lineiii{rpm}{RPM}{(3)}
!   \lineiii{srpm}{source RPM}{}
!   \lineiii{wise}{Wise installer for Windows}{}
  \end{tableiii}
  
  \noindent Notes:
  \begin{description}
! \item[(1)] default on Windows
! \item[(2)] default on Unix
! \item[(3)] not implemented yet; will be default on RPM-based Linux
!   systems
! \item[(5)] not implemented yet; will be default on Windows
  \end{description}
  
  You don't have to use the \command{bdist} command with the
  \longprogramopt{formats} option; you can also use the command that
! directly implements the format you're interested in.  Many of these
  \command{bdist} ``sub-commands'' actually generate several similar
  formats; for instance, the \command{bdist\_dumb} command generates all
--- 568,622 ----
  in this case), does a ``fake'' installation (also in the \file{build}
  directory), and creates the default type of built distribution for my
! platform.  Currently, the default format for built distributions is a
! ``dumb'' archive---tarball on Unix, ZIP file on Windows.  (These are
! called ``dumb'' built distributions, because they must be unpacked in a
! specific location to work.)
! 
! Thus, the above command on a Unix system creates
! \file{Distutils-0.9.1.\filevar{plat}.tar.gz}; unpacking this tarball
! from the root of the filesystemq installs the Distutils just as though
! you had downloaded the source distribution and run \code{python setup.py
!   install}.  (Assuming that the target system has their Python
! installation laid out the same as you do---another reason these are
! called ``dumb'' distributions.)  Obviously, for pure Python
! distributions, this isn't a huge win---but for non-pure distributions,
! which include extensions that would need to be compiled, it can mean the
! difference between someone being able to use your extensions or not.
  
  \XXX{filenames are inaccurate here!}
  
  The \command{bdist} command has a \longprogramopt{format} option,
! similar to the \command{sdist} command, which you can use to select the
! types of built distribution to generate: for example,
  \begin{verbatim}
  python setup.py bdist --format=zip
  \end{verbatim}
  would, when run on a Unix system, create
! \file{Distutils-0.8.\filevar{plat}.zip}---again, this archive would be
! unpacked from the root directory to install the Distutils.
  
  The available formats for built distributions are:
  \begin{tableiii}{l|l|c}{code}%
    {Format}{Description}{Notes}
!   \lineiii{zip}{zip file (\file{.zip})}{}
!   \lineiii{gztar}{gzipped tar file (\file{.tar.gz})}{(1)}
    \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{}
    \lineiii{tar}{tar file (\file{.tar})}{}
!   \lineiii{rpm}{RPM}{}
!   \lineiii{srpm}{source RPM}{\XXX{to do!}}
!   \lineiii{wininst}{self-extracting ZIP file for Windows}{(2)}
!   %\lineiii{wise}{Wise installer for Windows}{(3)}
  \end{tableiii}
  
  \noindent Notes:
  \begin{description}
! \item[(1)] default on Unix
! \item[(2)] default on Windows \XXX{to-do!}
! %\item[(3)] not implemented yet
  \end{description}
  
  You don't have to use the \command{bdist} command with the
  \longprogramopt{formats} option; you can also use the command that
! directly implements the format you're interested in.  Some of these
  \command{bdist} ``sub-commands'' actually generate several similar
  formats; for instance, the \command{bdist\_dumb} command generates all
***************
*** 621,625 ****
    \lineii{bdist\_dumb}{tar, ztar, gztar, zip}
    \lineii{bdist\_rpm}{rpm, srpm}
!   \lineii{bdist\_wise}{wise}
  \end{tableii}
  
--- 629,634 ----
    \lineii{bdist\_dumb}{tar, ztar, gztar, zip}
    \lineii{bdist\_rpm}{rpm, srpm}
!   \lineii{bdist\_wininst}{wininst}
!   %\lineii{bdist\_wise}{wise}
  \end{tableii}
  



From python-dev@python.org  Sat Aug  5 01:58:20 2000
From: python-dev@python.org (Greg Ward)
Date: Fri, 4 Aug 2000 17:58:20 -0700
Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.42,1.43
Message-ID: <200008050058.RAA28244@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/PC
In directory slayer.i.sourceforge.net:/tmp/cvs-serv28228

Modified Files:
	config.h 
Log Message:
Pragmas that instruct the linker to link against python20.lib (or
python20_d.lib) only active on MSVC++; different library formats needed
for different compilers, and it's handled by the Distutils anyways.


Index: config.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -r1.42 -r1.43
*** config.h	2000/06/30 22:17:53	1.42
--- config.h	2000/08/05 00:58:14	1.43
***************
*** 288,293 ****
  #ifdef MS_WIN32
  
! #ifndef USE_DL_EXPORT
! /* So nobody needs to specify the .lib in their Makefile any more */
  #ifdef _DEBUG
  #pragma comment(lib,"python20_d.lib")
--- 288,295 ----
  #ifdef MS_WIN32
  
! #if !defined(USE_DL_EXPORT) && defined(_MSC_VER)
! /* So nobody using MSVC needs to specify the .lib in their Makefile any
!    more (other compilers will still need to do so, but that's taken care
!    of by the Distutils, so it's not a problem). */
  #ifdef _DEBUG
  #pragma comment(lib,"python20_d.lib")



From python-dev@python.org  Sat Aug  5 02:00:23 2000
From: python-dev@python.org (Greg Ward)
Date: Fri, 4 Aug 2000 18:00:23 -0700
Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.35,1.35.2.1
Message-ID: <200008050100.SAA28520@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/PC
In directory slayer.i.sourceforge.net:/tmp/cvs-serv28486

Modified Files:
      Tag: cnri-16-start
	config.h 
Log Message:
Pragmas that instruct the linker to link against python16.lib (or
python16_d.lib) only active on MSVC++; different library formats needed
for different compilers, and it's handled by the Distutils anyways.


Index: config.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
retrieving revision 1.35
retrieving revision 1.35.2.1
diff -C2 -r1.35 -r1.35.2.1
*** config.h	2000/05/10 13:25:32	1.35
--- config.h	2000/08/05 01:00:21	1.35.2.1
***************
*** 256,261 ****
  #ifdef MS_WIN32
  
! #ifndef USE_DL_EXPORT
! /* So nobody needs to specify the .lib in their Makefile any more */
  #ifdef _DEBUG
  #pragma comment(lib,"python16_d.lib")
--- 256,263 ----
  #ifdef MS_WIN32
  
! #if !defined(USE_DL_EXPORT) && defined(_MSC_VER)
! /* So nobody using MSVC needs to specify the .lib in their Makefile any
!    more (other compilers will still need it, but that's taken care
!    of by the Distutils, so it's not a problem). */
  #ifdef _DEBUG
  #pragma comment(lib,"python16_d.lib")



From python-dev@python.org  Sat Aug  5 02:25:27 2000
From: python-dev@python.org (Greg Ward)
Date: Fri, 4 Aug 2000 18:25:27 -0700
Subject: [Python-checkins] CVS: distutils/distutils util.py,1.41,1.42
Message-ID: <200008050125.SAA05133@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv5092

Modified Files:
	util.py 
Log Message:
Drop the 'extend()' function -- old 1.5.1 compatibility hack that
  wasn't actually used anywhere.
Drop the "from xxx_util import*" backwards compability hacks.


Index: util.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/util.py,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -r1.41 -r1.42
*** util.py	2000/08/02 01:37:30	1.41
--- util.py	2000/08/05 01:25:24	1.42
***************
*** 12,35 ****
  from distutils.spawn import spawn
  
- # for backwards compatibility:
- from distutils.file_util import *
- from distutils.dir_util import *
- from distutils.dep_util import *
- from distutils.archive_util import *
- 
- 
- # More backwards compatibility hacks
- def extend (list, new_list):
-     """Appends the list 'new_list' to 'list', just like the 'extend()'
-        list method does in Python 1.5.2 -- but this works on earlier
-        versions of Python too."""
- 
-     if hasattr (list, 'extend'):
-         list.extend (new_list)
-     else:
-         list[len(list):] = new_list
- 
- # extend ()
- 
  
  def get_platform ():
--- 12,15 ----



From python-dev@python.org  Sat Aug  5 02:31:57 2000
From: python-dev@python.org (Greg Ward)
Date: Fri, 4 Aug 2000 18:31:57 -0700
Subject: [Python-checkins] CVS: distutils/distutils/command bdist_dumb.py,1.9,1.10 bdist_rpm.py,1.14,1.15 bdist_wininst.py,1.4,1.5 clean.py,1.7,1.8 install.py,1.39,1.40 install_lib.py,1.26,1.27 sdist.py,1.41,1.42
Message-ID: <200008050131.SAA05629@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils/command
In directory slayer.i.sourceforge.net:/tmp/cvs-serv5498/command

Modified Files:
	bdist_dumb.py bdist_rpm.py bdist_wininst.py clean.py 
	install.py install_lib.py sdist.py 
Log Message:
Fixed imports from '*util' modules to not just import everything from util.

Index: bdist_dumb.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/bdist_dumb.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** bdist_dumb.py	2000/07/05 03:07:37	1.9
--- bdist_dumb.py	2000/08/05 01:31:54	1.10
***************
*** 11,15 ****
  import os
  from distutils.core import Command
! from distutils.util import get_platform, create_tree, remove_tree
  from distutils.errors import *
  
--- 11,16 ----
  import os
  from distutils.core import Command
! from distutils.util import get_platform
! from distutils.dir_util import create_tree, remove_tree
  from distutils.errors import *
  

Index: bdist_rpm.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/bdist_rpm.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** bdist_rpm.py	2000/07/27 02:13:20	1.14
--- bdist_rpm.py	2000/08/05 01:31:54	1.15
***************
*** 11,15 ****
  from types import *
  from distutils.core import Command, DEBUG
! from distutils.util import get_platform, write_file
  from distutils.errors import *
  
--- 11,16 ----
  from types import *
  from distutils.core import Command, DEBUG
! from distutils.util import get_platform
! from distutils.file_util import write_file
  from distutils.errors import *
  

Index: bdist_wininst.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/bdist_wininst.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** bdist_wininst.py	2000/07/05 03:08:55	1.4
--- bdist_wininst.py	2000/08/05 01:31:54	1.5
***************
*** 10,14 ****
  import sys, os, string
  from distutils.core import Command
! from distutils.util import get_platform, create_tree, remove_tree
  from distutils.errors import *
  
--- 10,15 ----
  import sys, os, string
  from distutils.core import Command
! from distutils.util import get_platform
! from distutils.dir_util import create_tree, remove_tree
  from distutils.errors import *
  

Index: clean.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/clean.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** clean.py	2000/05/28 23:47:00	1.7
--- clean.py	2000/08/05 01:31:54	1.8
***************
*** 9,13 ****
  import os
  from distutils.core import Command
! from distutils.util import remove_tree
  
  class clean (Command):
--- 9,13 ----
  import os
  from distutils.core import Command
! from distutils.dir_util import remove_tree
  
  class clean (Command):

Index: install.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/install.py,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -r1.39 -r1.40
*** install.py	2000/06/24 17:22:39	1.39
--- install.py	2000/08/05 01:31:54	1.40
***************
*** 11,15 ****
  from distutils.core import Command, DEBUG
  from distutils import sysconfig
! from distutils.util import write_file, convert_path, subst_vars, change_root
  from distutils.errors import DistutilsOptionError
  from glob import glob
--- 11,16 ----
  from distutils.core import Command, DEBUG
  from distutils import sysconfig
! from distutils.file_util import write_file
! from distutils.util import convert_path, subst_vars, change_root
  from distutils.errors import DistutilsOptionError
  from glob import glob

Index: install_lib.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/install_lib.py,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -r1.26 -r1.27
*** install_lib.py	2000/08/02 01:34:18	1.26
--- install_lib.py	2000/08/05 01:31:54	1.27
***************
*** 5,9 ****
  import sys, os, string
  from distutils.core import Command
! from distutils.util import copy_tree
  
  class install_lib (Command):
--- 5,9 ----
  import sys, os, string
  from distutils.core import Command
! from distutils.dir_util import copy_tree
  
  class install_lib (Command):

Index: sdist.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/sdist.py,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -r1.41 -r1.42
*** sdist.py	2000/07/30 01:47:16	1.41
--- sdist.py	2000/08/05 01:31:54	1.42
***************
*** 11,17 ****
  from glob import glob
  from distutils.core import Command
! from distutils.util import \
!      create_tree, remove_tree, newer, write_file, \
!      check_archive_formats
  from distutils.text_file import TextFile
  from distutils.errors import *
--- 11,15 ----
  from glob import glob
  from distutils.core import Command
! from distutils import dir_util, dep_util, file_util, archive_util
  from distutils.text_file import TextFile
  from distutils.errors import *
***************
*** 118,122 ****
                        "on platform %s" % os.name
  
!         bad_format = check_archive_formats (self.formats)
          if bad_format:
              raise DistutilsOptionError, \
--- 116,120 ----
                        "on platform %s" % os.name
  
!         bad_format = archive_util.check_archive_formats (self.formats)
          if bad_format:
              raise DistutilsOptionError, \
***************
*** 196,200 ****
          template_exists = os.path.isfile(self.template)
          if template_exists:
!             template_newer = newer(self.template, self.manifest)
  
          # The contents of the manifest file almost certainly depend on the
--- 194,198 ----
          template_exists = os.path.isfile(self.template)
          if template_exists:
!             template_newer = dep_util.newer(self.template, self.manifest)
  
          # The contents of the manifest file almost certainly depend on the
***************
*** 205,209 ****
          # developer elects to generate a manifest some other way -- then we
          # can't regenerate the manifest, so we don't.)
!         setup_newer = newer(sys.argv[0], self.manifest)
  
          # cases:
--- 203,207 ----
          # developer elects to generate a manifest some other way -- then we
          # can't regenerate the manifest, so we don't.)
!         setup_newer = dep_util.newer(sys.argv[0], self.manifest)
  
          # cases:
***************
*** 369,373 ****
          named by 'self.manifest'.
          """
!         self.execute(write_file,
                       (self.manifest, self.filelist.files),
                       "writing manifest file '%s'" % self.manifest)
--- 367,371 ----
          named by 'self.manifest'.
          """
!         self.execute(file_util.write_file,
                       (self.manifest, self.filelist.files),
                       "writing manifest file '%s'" % self.manifest)
***************
*** 405,410 ****
          # Create all the directories under 'base_dir' necessary to
          # put 'files' there.
!         create_tree (base_dir, files,
!                      verbose=self.verbose, dry_run=self.dry_run)
  
          # And walk over the list of files, either making a hard link (if
--- 403,408 ----
          # Create all the directories under 'base_dir' necessary to
          # put 'files' there.
!         dir_util.create_tree (base_dir, files,
!                               verbose=self.verbose, dry_run=self.dry_run)
  
          # And walk over the list of files, either making a hard link (if
***************
*** 454,458 ****
  
          if not self.keep_tree:
!             remove_tree (base_dir, self.verbose, self.dry_run)
  
      def get_archive_files (self):
--- 452,456 ----
  
          if not self.keep_tree:
!             dir_util.remove_tree (base_dir, self.verbose, self.dry_run)
  
      def get_archive_files (self):



From python-dev@python.org  Sat Aug  5 22:30:02 2000
From: python-dev@python.org (Jack Jansen)
Date: Sat, 5 Aug 2000 14:30:02 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python getargs.c,2.43,2.44
Message-ID: <200008052130.OAA13967@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv10502

Modified Files:
	getargs.c 
Log Message:
Changed H specifier to mean "bitfield", i.e. any value from
-32768..65535 is acceptable. Added B specifier (with values from
-128..255). No L added (which would have completed the set) because l
already accepts any value (and the letter L is taken for quadwords).


Index: getargs.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v
retrieving revision 2.43
retrieving revision 2.44
diff -C2 -r2.43 -r2.44
*** getargs.c	2000/08/03 18:42:59	2.43
--- getargs.c	2000/08/05 21:29:58	2.44
***************
*** 410,413 ****
--- 410,434 ----
  		}
  	
+ 	case 'B': /* byte sized bitfield - both signed and unsigned values allowed */
+ 		{
+ 			char *p = va_arg(*p_va, char *);
+ 			long ival = PyInt_AsLong(arg);
+ 			if (ival == -1 && PyErr_Occurred())
+ 				return "integer";
+ 			else if (ival < SCHAR_MIN) {
+ 				PyErr_SetString(PyExc_OverflowError,
+ 			      "byte-sized integer bitfield is less than minimum");
+ 				return "integer";
+ 			}
+ 			else if (ival > UCHAR_MAX) {
+ 				PyErr_SetString(PyExc_OverflowError,
+ 			      "byte-sized integer bitfield is greater than maximum");
+ 				return "integer";
+ 			}
+ 			else
+ 				*p = (unsigned char) ival;
+ 			break;
+ 		}
+ 	
  	case 'h': /* signed short int */
  		{
***************
*** 431,435 ****
  		}
  	
! 	case 'H': /* unsigned short int */
  		{
  			unsigned short *p = va_arg(*p_va, unsigned short *);
--- 452,456 ----
  		}
  	
! 	case 'H': /* short int sized bitfield, both signed and unsigned allowed */
  		{
  			unsigned short *p = va_arg(*p_va, unsigned short *);
***************
*** 437,448 ****
  			if (ival == -1 && PyErr_Occurred())
  				return "integer";
! 			else if (ival < 0) {
  				PyErr_SetString(PyExc_OverflowError,
! 			      "unsigned short integer is less than minimum");
  				return "integer";
  			}
  			else if (ival > USHRT_MAX) {
  				PyErr_SetString(PyExc_OverflowError,
! 			      "unsigned short integer is greater than maximum");
  				return "integer";
  			}
--- 458,469 ----
  			if (ival == -1 && PyErr_Occurred())
  				return "integer";
! 			else if (ival < SHRT_MIN) {
  				PyErr_SetString(PyExc_OverflowError,
! 			      "short integer bitfield is less than minimum");
  				return "integer";
  			}
  			else if (ival > USHRT_MAX) {
  				PyErr_SetString(PyExc_OverflowError,
! 			      "short integer bitfield is greater than maximum");
  				return "integer";
  			}
***************
*** 1134,1137 ****
--- 1155,1159 ----
  	
  	case 'b': /* byte -- very short int */
+ 	case 'B': /* byte as bitfield */
  		{
  			(void) va_arg(*p_va, char *);
***************
*** 1145,1149 ****
  		}
  	
! 	case 'H': /* unsigned short int */
  		{
  			(void) va_arg(*p_va, unsigned short *);
--- 1167,1171 ----
  		}
  	
! 	case 'H': /* short int as bitfield */
  		{
  			(void) va_arg(*p_va, unsigned short *);



From python-dev@python.org  Sat Aug  5 22:37:53 2000
From: python-dev@python.org (Thomas Wouters)
Date: Sat, 5 Aug 2000 14:37:53 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.117,2.118
Message-ID: <200008052137.OAA22126@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv21345

Modified Files:
	compile.c 
Log Message:

Fix some strange indentation and grammar that have been bugging me for
weeks.



Index: compile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
retrieving revision 2.117
retrieving revision 2.118
diff -C2 -r2.117 -r2.118
*** compile.c	2000/07/22 18:47:25	2.117
--- compile.c	2000/08/05 21:37:50	2.118
***************
*** 1250,1259 ****
  	if (NCH(n) == 1) {
  		node *sub = CHILD(n, 0); /* subscript */
! 		/* Make it is a simple slice.
! 		   Should have exactly one colon. */
!         if ((TYPE(CHILD(sub, 0)) == COLON
!              || (NCH(sub) > 1 && TYPE(CHILD(sub, 1)) == COLON))
!             && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop))
! 	{
  			if (assigning == OP_APPLY)
  				op = SLICE;
--- 1250,1258 ----
  	if (NCH(n) == 1) {
  		node *sub = CHILD(n, 0); /* subscript */
! 		/* 'Basic' slice, should have exactly one colon. */
! 		if ((TYPE(CHILD(sub, 0)) == COLON
! 		     || (NCH(sub) > 1 && TYPE(CHILD(sub, 1)) == COLON))
! 		    && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop))
! 		{
  			if (assigning == OP_APPLY)
  				op = SLICE;



From python-dev@python.org  Sun Aug  6 20:30:10 2000
From: python-dev@python.org (Guido van Rossum)
Date: Sun, 6 Aug 2000 12:30:10 -0700
Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8.2.1,1.8.2.2
Message-ID: <200008061930.MAA12357@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/PCbuild
In directory slayer.i.sourceforge.net:/tmp/cvs-serv12341

Modified Files:
      Tag: cnri-16-start
	python16.wse 
Log Message:
Adaptation of 2.0 version; needs work.

Index: python16.wse
===================================================================
RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.wse,v
retrieving revision 1.8.2.1
retrieving revision 1.8.2.2
diff -C2 -r1.8.2.1 -r1.8.2.2
*** python16.wse	2000/08/01 20:30:08	1.8.2.1
--- python16.wse	2000/08/06 19:30:07	1.8.2.2
***************
*** 2,6 ****
  item: Global
    Version=5.0
!   Title=Python 1.6 alpha 2
    Flags=00010100
    Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--- 2,6 ----
  item: Global
    Version=5.0
!   Title=Python 1.6 beta 1
    Flags=00010100
    Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
***************
*** 19,36 ****
    Variable Name1=_SYS_
    Variable Description1=System directory
!   Variable Default1=C:\WINNT\SYSTEM32
    Variable Flags1=00001001
    Variable Name2=_WISE_
    Variable Description2=WISE root directory
!   Variable Default2=C:\Program Files\Wise
    Variable Flags2=00001001
    Variable Name3=_SRC_
    Variable Description3=Python source directory
!   Variable Default3=D:\src\Python-1.6
    Variable Flags3=00001001
    Variable Name4=_DOC_
    Variable Description4=HTML documentation tree directory
!   Variable Default4=D:\src\Python-1.6\html
    Variable Flags4=00001001
  end
  remarked item: Open/Close INSTALL.LOG
--- 19,40 ----
    Variable Name1=_SYS_
    Variable Description1=System directory
!   Variable Default1=C:\Windows\System
    Variable Flags1=00001001
    Variable Name2=_WISE_
    Variable Description2=WISE root directory
!   Variable Default2=C:\Wise
    Variable Flags2=00001001
    Variable Name3=_SRC_
    Variable Description3=Python source directory
!   Variable Default3=C:\src\Python-1.6
    Variable Flags3=00001001
    Variable Name4=_DOC_
    Variable Description4=HTML documentation tree directory
!   Variable Default4=C:\src\Python-1.6\html
    Variable Flags4=00001001
+   Variable Name5=_TCLMINOR_
+   Variable Description5=Tcl/Tk Minor Version (e.g. the "3" in "8.3.1")
+   Variable Default5=3
+   Variable Flags5=00001000
  end
  remarked item: Open/Close INSTALL.LOG
***************
*** 56,60 ****
  item: Set Variable
    Variable=APPTITLE
!   Value=Python 1.6 alpha 2
  end
  item: Set Variable
--- 60,64 ----
  item: Set Variable
    Variable=APPTITLE
!   Value=Python 1.6 beta 1
  end
  item: Set Variable
***************
*** 88,92 ****
    Direction Variable=DIRECTION
    Display Variable=DISPLAY
!   Bitmap Pathname=C:\Program Files\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
    X Position=9
    Y Position=10
--- 92,96 ----
    Direction Variable=DIRECTION
    Display Variable=DISPLAY
!   Bitmap Pathname=C:\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
    X Position=9
    Y Position=10
***************
*** 912,921 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=.py
    New Value=Python.File
  end
  item: Edit Registry
-   Total Keys=1
    Key=.py
    New Value=text/plain
--- 916,923 ----
***************
*** 923,947 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.File
    New Value=Python File
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.File\shell\open\command
    New Value=%MAINDIR%\python.exe "%%1" %%*
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.File\DefaultIcon
    New Value=%MAINDIR%\Py.ico
  end
  item: Edit Registry
-   Total Keys=1
    Key=.pyw
    New Value=Python.NoConFile
  end
  item: Edit Registry
-   Total Keys=1
    Key=.pyw
    New Value=text/plain
--- 925,944 ----
***************
*** 949,998 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.NoConFile
    New Value=Python File (no console)
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.NoConFile\shell\open\command
    New Value=%MAINDIR%\pythonw.exe "%%1" %%*
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.NoConFile\DefaultIcon
    New Value=%MAINDIR%\Py.ico
  end
  item: Edit Registry
-   Total Keys=1
    Key=.pyc
    New Value=Python.CompiledFile
  end
  item: Edit Registry
-   Total Keys=1
    Key=.pyo
    New Value=Python.CompiledFile
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.CompiledFile
    New Value=Compiled Python File
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.CompiledFile\shell\open\command
    New Value=%MAINDIR%\python.exe "%%1" %%*
  end
  item: Edit Registry
-   Total Keys=1
    Key=Python.CompiledFile\DefaultIcon
    New Value=%MAINDIR%\pyc.ico
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\CurrentVersion
    Root=130
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath
    New Value=%MAINDIR%
--- 946,985 ----
***************
*** 1000,1004 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath\InstallGroup
    New Value=%GROUP%
--- 987,990 ----
***************
*** 1006,1010 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\%PY_VERSION%\PythonPath
    New Value=%MAINDIR%\Lib\plat-win;%MAINDIR%\Lib;%MAINDIR%\DLLs;%MAINDIR%\Lib\lib-tk
--- 992,995 ----
***************
*** 1012,1016 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\%PY_VERSION%\Dll
    New Value=%_SYSDEST_%\Python16.dll
--- 997,1000 ----
***************
*** 1018,1027 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\%PY_VERSION%\Modules
    Root=2
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Microsoft\Windows\CurrentVersion\App Paths\Python.exe
    New Value=%MAINDIR%\Python.exe
--- 1002,1009 ----
***************
*** 1036,1040 ****
  end
  item: Edit Registry
-   Total Keys=1
    Key=Software\Python\PythonCore\%PY_VERSION%\Help\Main Python Documentation
    New Value=%MAINDIR%\Doc\index.html
--- 1018,1021 ----
***************
*** 1049,1053 ****
  end
  item: Include Script
!   Pathname=%_WISE_%\include\uninstal.wse
  end
  item: If/While Statement
--- 1030,1034 ----
  end
  item: Include Script
!   Pathname=C:\Wise\include\uninstal.wse
  end
  item: If/While Statement
***************
*** 1132,1146 ****
  end
  item: Install File
!   Source=%_SRC_%\..\tcl8.2\bin\tcl82.dll
!   Destination=%MAINDIR%\DLLs\tcl82.dll
    Flags=0000000000000010
  end
  item: Install File
!   Source=%_SRC_%\..\tcl8.2\bin\tk82.dll
!   Destination=%MAINDIR%\DLLs\tk82.dll
    Flags=0000000000000010
  end
  item: Install File
!   Source=%_SRC_%\..\tcl8.2\lib\*.*
    Destination=%MAINDIR%\tcl
    Flags=0000000100000010
--- 1113,1127 ----
  end
  item: Install File
!   Source=%_SRC_%\..\tcl\bin\tcl8%_TCLMINOR_%.dll
!   Destination=%MAINDIR%\DLLs\tcl8%_TCLMINOR_%.dll
    Flags=0000000000000010
  end
  item: Install File
!   Source=%_SRC_%\..\tcl\bin\tk8%_TCLMINOR_%.dll
!   Destination=%MAINDIR%\DLLs\tk8%_TCLMINOR_%.dll
    Flags=0000000000000010
  end
  item: Install File
!   Source=%_SRC_%\..\tcl\lib\*.*
    Destination=%MAINDIR%\tcl
    Flags=0000000100000010
***************
*** 1151,1155 ****
    Direction Variable=DIRECTION
    Display Variable=DISPLAY
!   Bitmap Pathname=C:\Program Files\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
    X Position=9
    Y Position=10
--- 1132,1136 ----
    Direction Variable=DIRECTION
    Display Variable=DISPLAY
!   Bitmap Pathname=C:\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
    X Position=9
    Y Position=10



From python-dev@python.org  Sun Aug  6 21:37:27 2000
From: python-dev@python.org (Greg Ward)
Date: Sun, 6 Aug 2000 13:37:27 -0700
Subject: [Python-checkins] CVS: distutils/doc/dist dist.tex,1.19,1.20
Message-ID: <200008062037.NAA24932@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/doc/dist
In directory slayer.i.sourceforge.net:/tmp/cvs-serv24913

Modified Files:
	dist.tex 
Log Message:
Wrote the "Describing extension modules" section.

Index: dist.tex
===================================================================
RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -r1.19 -r1.20
*** dist.tex	2000/08/05 00:43:11	1.19
--- dist.tex	2000/08/06 20:37:24	1.20
***************
*** 275,280 ****
  
  
! \subsection{Package directories}
! \label{package-dirs}
  
  The \option{packages} option tells the Distutils to process (build,
--- 275,280 ----
  
  
! \subsection{Listing whole packages}
! \label{listing-packages}
  
  The \option{packages} option tells the Distutils to process (build,
***************
*** 341,346 ****
  layout implies that these two modules can be found in \file{mod1.py} and
  \file{pkg/mod2.py}, and that \file{pkg/\_\_init\_\_.py} exists as well.
! And again, you can override the package/directory layout using the
! \option{package\_dir} option.
  
  
--- 341,346 ----
  layout implies that these two modules can be found in \file{mod1.py} and
  \file{pkg/mod2.py}, and that \file{pkg/\_\_init\_\_.py} exists as well.
! And again, you can override the package/directory correspondence using
! the \option{package\_dir} option.
  
  
***************
*** 348,351 ****
--- 348,540 ----
  \label{sec:describing-extensions}
  
+ Just as writing Python extension modules is a bit more complicated than
+ writing pure Python modules, describing them to the Distutils is a bit
+ more complicated.  Unlike pure modules, it's not enough just to list
+ modules or packages and expect the Distutils to go out and find the
+ right files; you have to specify the extension name, source file(s), and
+ any compile/link requirements (include directories, libraries to link
+ with, etc.).
+ 
+ All of this is done through another keyword argument to
+ \function{setup()}, the \option{extensions} option.  \option{extensions}
+ is just a list of \class{Extension} instances, each of which describes a
+ single extension module.  Suppose your distribution includes a single
+ extension, called \module{foo} and implemented by \file{foo.c}.  If no
+ additional instructions to the compiler/linker are needed, describing
+ this extension is quite simple:
+ \begin{verbatim}
+ Extension("foo", ["foo.c"])
+ \end{verbatim}
+ The \class{Extension} class can be imported from
+ \module{distutils.core}, along with \function{setup()}.  Thus, the setup
+ script for a module distribution that contains only this one extension
+ and nothing else might be:
+ \begin{verbatim}
+ from distutils.core import setup, Extension
+ setup(name = "foo", version = "1.0",
+       extensions = [Extension("foo", ["foo.c"])])
+ \end{verbatim}
+ 
+ The \class{Extension} class (actually, the underlying extension-building
+ machinery implemented by the \command{built\_ext} command) supports a
+ great deal of flexibility in describing Python extensions, which is
+ explained in the following sections.  
+ 
+ 
+ \subsubsection{Extension names and packages}
+ 
+ The first argument to the \class{Extension} constructor is always the
+ name of the extension, including any package names.  For example,
+ \begin{verbatim}
+ Extension("foo", ["src/foo1.c", "src/foo2.c"])
+ \end{verbatim}
+ describes an extension that lives in the root package, while
+ \begin{verbatim}
+ Extension("pkg.foo", ["src/foo1.c", "src/foo2.c"])
+ \end{verbatim}
+ describes the same extension in the \module{pkg} package.  The source
+ files and resulting object code are identical in both cases; the only
+ difference is where in the filesystem (and therefore where in Python's
+ namespace hierarchy) the resulting extension lives.
+ 
+ If you have a number of extensions all in the same package (or all under
+ the same base package), use the \option{ext\_package} keyword argument
+ to \function{setup()}.  For example,
+ \begin{verbatim}
+ setup(...
+       ext_package = "pkg",
+       extensions = [Extension("foo", ["foo.c"]),
+                     Extension("subpkg.bar", ["bar.c"])]
+      )
+ \end{verbatim}
+ will compile \file{foo.c} to the extension \module{pkg.foo}, and
+ \file{bar.c} to \module{pkg.subpkg.bar}.
+ 
+ 
+ \subsubsection{Extension source files}
+ 
+ The second argument to the \class{Extension} constructor is a list of
+ source files.  Since the Distutils currently only support C/C++
+ extensions, these are normally C/C++ source files.  (Be sure to use
+ appropriate extensions to distinguish C++ source files: \file{.cc} and
+ \file{.cpp} seem to be recognized by both Unix and Windows compilers.)
+ 
+ However, you can also include SWIG interface (\file{.i}) files in the
+ list; the \command{build\_ext} command knows how to deal with SWIG
+ extensions: it will run SWIG on the interface file and compile the
+ resulting C/C++ file into your extension.
+ 
+ \XXX{SWIG support is rough around the edges and largely untested;
+   especially SWIG support of C++ extensions!  Explain in more detail
+   here when the interface firms up.}
+ 
+ On some platforms, you can include non-source files that are processed
+ by the compiler and included in your extension.  Currently, this just
+ means Windows resource files for Visual C++.  \XXX{get more detail on
+   this feature from Thomas Heller!}
+ 
+ 
+ \subsubsection{Preprocessor options}
+ 
+ Three optional arguments to \class{Extension} will help if you need to
+ specify include directories to search or preprocessor macros to
+ define/undefine: \code{include\_dirs}, \code{define\_macros}, and
+ \code{undef\_macros}.
+ 
+ For example, if your extension requires header files in the
+ \file{include} directory under your distribution root, use the
+ \code{include\_dirs} option:
+ \begin{verbatim}
+ Extension("foo", ["foo.c"], include_dirs=["include"])
+ \end{verbatim}
+ 
+ You can specify absolute directories there; if you know that your
+ extension will only be built on Unix systems with X11R6 installed to
+ \file{/usr}, you can get away with
+ \begin{verbatim}
+ Extension("foo", ["foo.c"], include_dirs=["/usr/include/X11"])
+ \end{verbatim}
+ You should avoid this sort of non-portable usage if you plan to
+ distribute your code: it's probably better to write your code to include
+ (e.g.) \code{}.
+ 
+ If you need to include header files from some other Python extension,
+ you can take advantage of the fact that the Distutils install extension
+ header files in a consistent way.  For example, the Numerical Python
+ header files are installed (on a standard Unix installation) to
+ \file{/usr/local/include/python1.5/Numerical}.  (The exact location will
+ differ according to your platform and Python installation.)  Since the
+ Python include directory---\file{/usr/local/include/python1.5} in this
+ case---is always included in the search path when building Python
+ extensions, the best approach is to include (e.g.)
+ \code{}.  If you insist on putting the
+ \file{Numerical} include directory right into your header search path,
+ though, you can find that directory using the Distutils
+ \module{sysconfig} module:
+ \begin{verbatim}
+ from distutils.sysconfig import get_python_inc
+ incdir = os.path.join(get_python_inc(plat_specific=1), "Numerical")
+ setup(...,
+       Extension(..., include_dirs=[incdir]))
+ \end{verbatim}
+ Even though this is quite portable---it will work on any Python
+ installation, regardless of platform---it's probably easier to just
+ write your C code in the sensible way.
+ 
+ You can define and undefine pre-processor macros with the
+ \code{define\_macros} and \code{undef\_macros} options.
+ \code{define\_macros} takes a list of \code{(name, value)} tuples, where
+ \code{name} is the name of the macro to define (a string) and
+ \code{value} is its value: either a string or \code{None}.  (Defining a
+ macro \code{FOO} to \code{None} is the equivalent of a bare
+ \code{\#define FOO} in your C source: with most compilers, this sets
+ \code{FOO} to the string \code{1}.)  \code{undef\_macros} is just
+ a list of macros to undefine.
+ 
+ For example:
+ \begin{verbatim}
+ Extension(...,
+           define_macros=[('NDEBUG', '1')],
+                          ('HAVE_STRFTIME', None),
+           undef_macros=['HAVE_FOO', 'HAVE_BAR'])
+ \end{verbatim}
+ is the equivalent of having this at the top of every C source file:
+ \begin{verbatim}
+ #define NDEBUG 1
+ #define HAVE_STRFTIME
+ #undef HAVE_FOO
+ #undef HAVE_BAR
+ \end{verbatim}
+ 
+ 
+ \subsubsection{Library options}
+ 
+ You can also specify the libraries to link against when building your
+ extension, and the directories to search for those libraries.  The
+ \code{libraries} option is a list of libraries to link against,
+ \code{library\_dirs} is a list of directories to search for libraries at 
+ link-time, and \code{runtime\_library\_dirs} is a list of directories to 
+ search for shared (dynamically loaded) libraries at run-time.
+ 
+ For example, if you need to link against libraries known to be in the
+ standard library search path on target systems
+ \begin{verbatim}
+ Extension(...,
+           libraries=["gdbm", "readline"])
+ \end{verbatim}
+ 
+ If you need to link with libraries in a non-standard location, you'll
+ have to include the location in \code{library\_dirs}:
+ \begin{verbatim}
+ Extension(...,
+           library_dirs=["/usr/X11R6/lib"],
+           libraries=["X11", "Xt"])
+ \end{verbatim}
+ (Again, this sort of non-portable construct should be avoided if you
+ intend to distribute your code.)
+ 
+ \XXX{still undocumented: extra\_objects, extra\_compile\_args,
+   extra\_link\_args, export\_symbols---none of which are frequently
+   needed, some of which might be completely unnecessary!}
  
  



From python-dev@python.org  Sun Aug  6 22:18:38 2000
From: python-dev@python.org (Jack Jansen)
Date: Sun, 6 Aug 2000 14:18:38 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib macpath.py,1.23,1.24
Message-ID: <200008062118.OAA03542@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv3425

Modified Files:
	macpath.py 
Log Message:
Rewrite of normpath() by Corran Webster, so trailing :s are removed
(except for : and volume:, where they are needed).


Index: macpath.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/macpath.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -r1.23 -r1.24
*** macpath.py	2000/07/12 16:55:57	1.23
--- macpath.py	2000/08/06 21:18:35	1.24
***************
*** 180,216 ****
  
  def normpath(s):
!     """Normalize a pathname: get rid of '::' sequences by backing up,
!     e.g., 'foo:bar::bletch' becomes 'foo:bletch'.
!     Raise the exception norm_error below if backing up is impossible,
!     e.g., for '::foo'."""
!     # XXX The Unix version doesn't raise an exception but simply
!     # returns an unnormalized path.  Should do so here too.
  
!     import string
!     if ':' not in s:
!         return ':' + s
!     f = string.splitfields(s, ':')
!     pre = []
!     post = []
!     if not f[0]:
!         pre = f[:1]
!         f = f[1:]
!     if not f[len(f)-1]:
!         post = f[-1:]
!         f = f[:-1]
!     res = []
!     for seg in f:
!         if seg:
!             res.append(seg)
          else:
!             if not res: raise norm_error, 'path starts with ::'
!             del res[len(res)-1]
!             if not (pre or res):
!                 raise norm_error, 'path starts with volume::'
!     if pre: res = pre + res
!     if post: res = res + post
!     s = res[0]
!     for seg in res[1:]:
!         s = s + ':' + seg
      return s
  
--- 180,207 ----
  
  def normpath(s):
!     """Normalize a pathname.  Will return the same result for
!     equivalent paths."""
  
!     if ":" not in s:
!         return ":"+s
! 
!     comps = string.splitfields(s, ":")
!     i = 1
!     while i < len(comps)-1:
!         if comps[i] == "" and comps[i-1] != "":
!             if i > 1:
!                 del comps[i-1:i+1]
!                 i = i-1
!             else:
!                 # best way to handle this is to raise an exception
!                 raise norm_error, 'Cannot use :: immedeately after volume name'
          else:
!             i = i + 1
! 
!     s = string.join(comps, ":")
! 
!     # remove trailing ":" except for ":" and "Volume:"
!     if s[-1] == ":" and len(comps) > 2 and s != ":"*len(s):
!         s = s[:-1]
      return s
  



From python-dev@python.org  Sun Aug  6 23:45:33 2000
From: python-dev@python.org (Vladimir Marangozov)
Date: Sun, 6 Aug 2000 15:45:33 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gc.py,1.2,1.3
Message-ID: <200008062245.PAA27816@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25095/Lib/test

Modified Files:
	test_gc.py 
Log Message:
Neil Schemenauer: GC enable(), disable(), isenabled() interface.

Small stylistic changes by VM:
- is_enabled() -> isenabled()
- static ... Py_ -> static ... gc_



Index: test_gc.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gc.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** test_gc.py	2000/06/30 15:13:14	1.2
--- test_gc.py	2000/08/06 22:45:31	1.3
***************
*** 76,79 ****
--- 76,84 ----
  
  def test_all():
+ 
+     enabled = gc.isenabled()
+     gc.disable()
+     assert not gc.isenabled()
+ 
      test_list()
      test_dict()
***************
*** 84,87 ****
--- 89,99 ----
      test_finalizer()
      test_function()
+ 
+     # test gc.enable() even if GC is disabled by default
+     gc.enable()
+     assert gc.isenabled()
+     if not enabled:
+         gc.disable()
+ 
  
  test_all()



From python-dev@python.org  Sun Aug  6 23:45:33 2000
From: python-dev@python.org (Vladimir Marangozov)
Date: Sun, 6 Aug 2000 15:45:33 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.6,2.7
Message-ID: <200008062245.PAA27815@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25095/Modules

Modified Files:
	gcmodule.c 
Log Message:
Neil Schemenauer: GC enable(), disable(), isenabled() interface.

Small stylistic changes by VM:
- is_enabled() -> isenabled()
- static ... Py_ -> static ... gc_



Index: gcmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v
retrieving revision 2.6
retrieving revision 2.7
diff -C2 -r2.6 -r2.7
*** gcmodule.c	2000/07/12 05:18:36	2.6
--- gcmodule.c	2000/08/06 22:45:30	2.7
***************
*** 40,43 ****
--- 40,44 ----
  
  /* collection frequencies, XXX tune these */
+ static int enabled = 1; /* automatic collection enabled? */
  static int threshold0 = 100; /* net new containers before collection */
  static int threshold1 = 10;  /* generation0 collections before collecting 1 */
***************
*** 493,497 ****
  	}
  #endif
! 	if (threshold0 && allocated > threshold0 && !collecting) {
  		collecting++;
  		collect_generations();
--- 494,498 ----
  	}
  #endif
! 	if (allocated > threshold0 && enabled && threshold0 && !collecting) {
  		collecting++;
  		collect_generations();
***************
*** 517,522 ****
  }
  
  
! static char collect__doc__[] =
  "collect() -> n\n"
  "\n"
--- 518,576 ----
  }
  
+ static char gc_enable__doc__[] =
+ "enable() -> None\n"
+ "\n"
+ "Enable automatic garbage collection.\n"
+ ;
+ 
+ static PyObject *
+ gc_enable(PyObject *self, PyObject *args)
+ {
+ 
+ 	if (!PyArg_ParseTuple(args, ":enable"))	/* check no args */
+ 		return NULL;
+ 
+ 	enabled = 1;
+ 
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ static char gc_disable__doc__[] =
+ "disable() -> None\n"
+ "\n"
+ "Disable automatic garbage collection.\n"
+ ;
+ 
+ static PyObject *
+ gc_disable(PyObject *self, PyObject *args)
+ {
+ 
+ 	if (!PyArg_ParseTuple(args, ":disable"))	/* check no args */
+ 		return NULL;
+ 
+ 	enabled = 0;
+ 
+ 	Py_INCREF(Py_None);
+ 	return Py_None;
+ }
+ 
+ static char gc_isenabled__doc__[] =
+ "isenabled() -> status\n"
+ "\n"
+ "Returns true if automatic garbage collection is enabled.\n"
+ ;
+ 
+ static PyObject *
+ gc_isenabled(PyObject *self, PyObject *args)
+ {
+ 
+ 	if (!PyArg_ParseTuple(args, ":isenabled"))	/* check no args */
+ 		return NULL;
+ 
+ 	return Py_BuildValue("i", enabled);
+ }
  
! static char gc_collect__doc__[] =
  "collect() -> n\n"
  "\n"
***************
*** 525,529 ****
  
  static PyObject *
! Py_collect(PyObject *self, PyObject *args)
  {
  	long n;
--- 579,583 ----
  
  static PyObject *
! gc_collect(PyObject *self, PyObject *args)
  {
  	long n;
***************
*** 540,544 ****
  }
  
! static char set_debug__doc__[] = 
  "set_debug(flags) -> None\n"
  "\n"
--- 594,598 ----
  }
  
! static char gc_set_debug__doc__[] = 
  "set_debug(flags) -> None\n"
  "\n"
***************
*** 557,561 ****
  
  static PyObject *
! Py_set_debug(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, "l:get_debug", &debug))
--- 611,615 ----
  
  static PyObject *
! gc_set_debug(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, "l:get_debug", &debug))
***************
*** 566,570 ****
  }
  
! static char get_debug__doc__[] = 
  "get_debug() -> flags\n"
  "\n"
--- 620,624 ----
  }
  
! static char gc_get_debug__doc__[] = 
  "get_debug() -> flags\n"
  "\n"
***************
*** 573,577 ****
  
  static PyObject *
! Py_get_debug(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, ":get_debug"))	/* no args */
--- 627,631 ----
  
  static PyObject *
! gc_get_debug(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, ":get_debug"))	/* no args */
***************
*** 581,585 ****
  }
  
! static char set_thresh__doc__[] =
  "set_threshold(threshold0, [threhold1, threshold2]) -> None\n"
  "\n"
--- 635,639 ----
  }
  
! static char gc_set_thresh__doc__[] =
  "set_threshold(threshold0, [threhold1, threshold2]) -> None\n"
  "\n"
***************
*** 589,593 ****
  
  static PyObject *
! Py_set_thresh(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, "i|ii:set_threshold", &threshold0, 
--- 643,647 ----
  
  static PyObject *
! gc_set_thresh(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, "i|ii:set_threshold", &threshold0, 
***************
*** 599,603 ****
  }
  
! static char get_thresh__doc__[] =
  "get_threshold() -> (threshold0, threshold1, threshold2)\n"
  "\n"
--- 653,657 ----
  }
  
! static char gc_get_thresh__doc__[] =
  "get_threshold() -> (threshold0, threshold1, threshold2)\n"
  "\n"
***************
*** 606,610 ****
  
  static PyObject *
! Py_get_thresh(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, ":get_threshold"))	/* no args */
--- 660,664 ----
  
  static PyObject *
! gc_get_thresh(PyObject *self, PyObject *args)
  {
  	if (!PyArg_ParseTuple(args, ":get_threshold"))	/* no args */
***************
*** 618,621 ****
--- 672,678 ----
  "This module provides access to the garbage collector for reference cycles.\n"
  "\n"
+ "enable() -- Enable automatic garbage collection.\n"
+ "disable() -- Disable automatic garbage collection.\n"
+ "isenabled() -- Returns true if automatic collection is enabled.\n"
  "collect() -- Do a full collection right now.\n"
  "set_debug() -- Set debugging flags.\n"
***************
*** 626,634 ****
  
  static PyMethodDef GcMethods[] = {
! 	{"set_debug",		Py_set_debug,  METH_VARARGS, set_debug__doc__},
! 	{"get_debug",		Py_get_debug,  METH_VARARGS, get_debug__doc__},
! 	{"set_threshold",	Py_set_thresh, METH_VARARGS, set_thresh__doc__},
! 	{"get_threshold",	Py_get_thresh, METH_VARARGS, get_thresh__doc__},
! 	{"collect",		Py_collect,    METH_VARARGS, collect__doc__},
  	{NULL,	NULL}		/* Sentinel */
  };
--- 683,694 ----
  
  static PyMethodDef GcMethods[] = {
! 	{"enable",	   gc_enable,     METH_VARARGS, gc_enable__doc__},
! 	{"disable",	   gc_disable,    METH_VARARGS, gc_disable__doc__},
! 	{"isenabled",	   gc_isenabled,  METH_VARARGS, gc_isenabled__doc__},
! 	{"set_debug",	   gc_set_debug,  METH_VARARGS, gc_set_debug__doc__},
! 	{"get_debug",	   gc_get_debug,  METH_VARARGS, gc_get_debug__doc__},
! 	{"set_threshold",  gc_set_thresh, METH_VARARGS, gc_set_thresh__doc__},
! 	{"get_threshold",  gc_get_thresh, METH_VARARGS, gc_get_thresh__doc__},
! 	{"collect",	   gc_collect,    METH_VARARGS, gc_collect__doc__},
  	{NULL,	NULL}		/* Sentinel */
  };



From python-dev@python.org  Sun Aug  6 23:45:33 2000
From: python-dev@python.org (Vladimir Marangozov)
Date: Sun, 6 Aug 2000 15:45:33 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgc.tex,1.1,1.2
Message-ID: <200008062245.PAA27821@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25095/Doc/lib

Modified Files:
	libgc.tex 
Log Message:
Neil Schemenauer: GC enable(), disable(), isenabled() interface.

Small stylistic changes by VM:
- is_enabled() -> isenabled()
- static ... Py_ -> static ... gc_



Index: libgc.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgc.tex,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** libgc.tex	2000/07/12 04:22:53	1.1
--- libgc.tex	2000/08/06 22:45:31	1.2
***************
*** 6,20 ****
  \sectionauthor{Neil Schemenauer}{nascheme@enme.ucalgary.ca}
  
! This module provides an interface to the optional garbage collector.
! It provides the ability to disable the collector, tune the collection
  frequency, and set debugging options.  It also provides access to
! unreachable objects that the collector found but cannot free.  Since
! the collector supplements the reference counting already used in
! Python, you can disable the collector if you are sure your program
! does not create reference cycles.  The collector can be disabled by
! calling \code{gc.set_threshold(0)}.  To debug a leaking program call
  \code{gc.set_debug(gc.DEBUG_LEAK)}.
  
  The \module{gc} module provides the following functions:
  
  \begin{funcdesc}{collect}{}
--- 6,32 ----
  \sectionauthor{Neil Schemenauer}{nascheme@enme.ucalgary.ca}
  
! This module provides an interface to the optional garbage collector.  It
! provides the ability to disable the collector, tune the collection
  frequency, and set debugging options.  It also provides access to
! unreachable objects that the collector found but cannot free.  Since the
! collector supplements the reference counting already used in Python, you
! can disable the collector if you are sure your program does not create
! reference cycles.  Automatic collection can be disabled by calling
! \code{gc.disable()}.  To debug a leaking program call
  \code{gc.set_debug(gc.DEBUG_LEAK)}.
  
  The \module{gc} module provides the following functions:
+ 
+ \begin{funcdesc}{enable}{}
+ Enable automatic garbage collection.
+ \end{funcdesc}
+ 
+ \begin{funcdesc}{disable}{}
+ Disable automatic garbage collection.
+ \end{funcdesc}
+ 
+ \begin{funcdesc}{isenabled}{}
+ Returns true if automatic collection is enabled.
+ \end{funcdesc}
  
  \begin{funcdesc}{collect}{}



From python-dev@python.org  Mon Aug  7 01:45:53 2000
From: python-dev@python.org (Greg Ward)
Date: Sun, 6 Aug 2000 17:45:53 -0700
Subject: [Python-checkins] CVS: distutils/distutils fancy_getopt.py,1.14,1.15
Message-ID: <200008070045.RAA13922@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv13910

Modified Files:
	fancy_getopt.py 
Log Message:
Fix so we clear or reinitialize various data structures before populating
(allows the same FancyGetopt object to be used multiple times with different
option tables).

Index: fancy_getopt.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/fancy_getopt.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** fancy_getopt.py	2000/06/08 00:35:33	1.14
--- fancy_getopt.py	2000/08/07 00:45:51	1.15
***************
*** 94,97 ****
--- 94,98 ----
  
      def _build_index (self):
+         self.option_index.clear()
          for option in self.option_table:
              self.option_index[option[0]] = option
***************
*** 153,156 ****
--- 154,161 ----
             the option table.  Called by 'getopt()' before it can do
             anything worthwhile."""
+ 
+         self.long_opts = []
+         self.short_opts = []
+         self.short2long.clear()
  
          for option in self.option_table:



From python-dev@python.org  Mon Aug  7 01:48:06 2000
From: python-dev@python.org (Greg Ward)
Date: Sun, 6 Aug 2000 17:48:06 -0700
Subject: [Python-checkins] CVS: distutils/distutils/command install.py,1.40,1.41
Message-ID: <200008070048.RAA14090@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils/command
In directory slayer.i.sourceforge.net:/tmp/cvs-serv14074

Modified Files:
	install.py 
Log Message:
Fix so the 'install_libbase' directory -- where .pth files are installed -- 
participates in the "--root" hack, ie. it also has a new root directory
hacked on at the very last minute (essential if the .pth file is to be
included in an RPM or other smart installer!).

Index: install.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/command/install.py,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -r1.40 -r1.41
*** install.py	2000/08/05 01:31:54	1.40
--- install.py	2000/08/07 00:48:04	1.41
***************
*** 274,278 ****
          # dirs relative to it.
          if self.root is not None:
!             for name in ('lib', 'purelib', 'platlib',
                           'scripts', 'data', 'headers'):
                  attr = "install_" + name
--- 274,278 ----
          # dirs relative to it.
          if self.root is not None:
!             for name in ('libbase', 'lib', 'purelib', 'platlib',
                           'scripts', 'data', 'headers'):
                  attr = "install_" + name



From python-dev@python.org  Mon Aug  7 07:34:49 2000
From: python-dev@python.org (Moshe Zadka)
Date: Sun, 6 Aug 2000 23:34:49 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.187,2.188
Message-ID: <200008070634.XAA12685@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30715/Python

Modified Files:
	ceval.c 
Log Message:
Initialized opcode and oparg to silence a gcc -Wall warning.


Index: ceval.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v
retrieving revision 2.187
retrieving revision 2.188
diff -C2 -r2.187 -r2.188
*** ceval.c	2000/07/25 12:56:38	2.187
--- ceval.c	2000/08/07 06:34:45	2.188
***************
*** 316,321 ****
  #endif
  	register unsigned char *next_instr;
! 	register int opcode;	/* Current opcode */
! 	register int oparg;	/* Current opcode argument, if any */
  	register PyObject **stack_pointer;
  	register enum why_code why; /* Reason for block stack unwind */
--- 316,321 ----
  #endif
  	register unsigned char *next_instr;
! 	register int opcode=0;	/* Current opcode */
! 	register int oparg=0;	/* Current opcode argument, if any */
  	register PyObject **stack_pointer;
  	register enum why_code why; /* Reason for block stack unwind */



From python-dev@python.org  Mon Aug  7 13:40:03 2000
From: python-dev@python.org (Thomas Wouters)
Date: Mon, 7 Aug 2000 05:40:03 -0700
Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.3,1.4
Message-ID: <200008071240.FAA02832@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/peps
In directory slayer.i.sourceforge.net:/tmp/cvs-serv29726

Modified Files:
	pep-0203.txt 
Log Message:

Complete rewrite of the PEP, discarding the previous long explanation about
augmented assignment. Kept as short as possible, but might still be
considered wordy :-)



Index: pep-0203.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** pep-0203.txt	2000/07/16 16:07:29	1.3
--- pep-0203.txt	2000/08/07 12:40:00	1.4
***************
*** 4,11 ****
  Owner: thomas@xs4all.net (Thomas Wouters)
  Python-Version: 2.0
! Status: Incomplete
  
  
- 
  Introduction
  
--- 4,10 ----
  Owner: thomas@xs4all.net (Thomas Wouters)
  Python-Version: 2.0
! Status: Draft
  
  
  Introduction
  
***************
*** 20,150 ****
  
  
! 
! The Origin of Augmented Assignment
  
!     Augmented assignment refers to binary operators that combine two
!     existing operators: the assignment operator, and one of the binary
!     operators. Its origins lie in other programming languages, most
!     notably `C', where it was defined for performance reasons. They
!     are meant to replace the repetetive syntax of, for instance,
!     adding the number '1' to a variable:
!     
!       x = x + 1;
!       
!     with an expression that is shorter, less error-prone and easier to
!     optimize (by the compiler):
!     
!       x += 1;
!       
!     The same goes for all other binary operands, resulting in the
!     following augmented assignment operator list, based on Python's
!     current binary operator list:
! 
!       +=, -=, /=, *=, %=, **=, >>=, <<=, &=, |=, ^=
!     
!     See the documentation of each operator on what they do.
! 
!      
! 
! Augmented Assignment in Python
! 
!     The traditional reasons for augmented assignment, readability and
!     optimization, are not as obvious in Python, for several reasons.
!     
!      - Numbers are immutable, they cannot be changed. In other
!        programming languages, a variable holds a value, and altering
!        the variable changes the value it holds. In Python, variables
!        hold `references' to values, and altering an immutable value
!        means changing the variable, not what it points to.
! 
!      - Assignment is a different operation in Python. In most
!        languages, variables are containers, and assignment copies a
!        value into that container. In Python, assignment binds a value
!        to a name, it does not copy the value into a new storage space.
!        
!      - The augmented assignment operators map fairly directly into the
!        underlying hardware. Python does not deal directly with the
!        hardware it runs on, so this `natural inclusion' does not make
!        sense.
! 
!      - The augmented assigment syntax is subtly different in more
!        complex expressions. What to do, for instance, in a case such
!        as this:
!        
!        seq[i:calc(seq, i)] *= r
!        
!        It is unclear whether 'seq' gets indexed once or twice, and
!        whether 'calc' gets called once or twice.
! 
! 
! 
! Normal operators
! 
!     There are, however, good reasons to include augented assignment. 
!     One of these has to do with Python's way of handling operators. In
!     Python, a user defined class can implement one or more of the
!     binary operators by supplying a 'magic' method name. For instance,
!     for a class to support ' + ', the '__add__'
!     method should be defined. This method should return a new object,
!     which is the result of the expression.
!     
!     For the case of ' + ', where 'object' does not
!     have an '__add__' method, the class can define a '__radd__'
!     method, which then should behave exactly as '__add__'. Indeed,
!     '__radd__' is often a different name for the same method.
!     
!     For C extention types, a similar technique is available, through
!     the PyNumberMethods and PySequenceMethods members of the PyType
!     structure.
! 
!     However, the problem with this approach is that the '__add__'
!     method cannot know in what context it is called. It cannot tell
!     whether it should create a new object, or whether it is allowed to
!     modify itself. (As would be the case in 'x = x + 1') As a result,
!     the '__add__' method, and all other such 'magic' methods, should
!     always return a new object. For large objects, this can be very
!     inefficient.
!     
!     This inefficiency is often solved by adding a method that does the
!     appropriate modification 'in-place'. List objects, for instance,
!     have the 'extend' method that behaves exactly as the '+' operator,
!     except the operation is done on the list itself, instead of on a
!     copy.
! 
!     The augmented assignment syntax can support this behaviour
!     explicitly. When the magic method for 'in-place' operation are
!     missing, it can fall back to the normal methods for that
!     operation, maintaining full backward compatibility even when
!     mixing the new syntax with old objects.
! 
!     The other benifit of augmented assignment is readability. After
!     the general concept of augmented assignment is grasped, all the
!     augmented assigment operators instantly become obvious. There is
!     no need for non-obvious and non-standard method names to implement
!     efficient, in-place operations, and there is no need to check the
!     type of an object before operating on it: the augmented assignment
!     will work for all types that implement that basic operation, not
!     merely those that implement the augmented variant.
!     
!     And the last problem with augmented assignment, what to do with
!     indexes and function calls in the expression, can be solved in a
!     very Pythonic manner: if it looks like it's only called once, it
!     *is* only called once. Taking this expression:
!     
!     seq[func(x)] += x
!     
!     The function 'func' is called once, and 'seq' is indexed twice:
!     once to retrieve the value (__getitem__), and once to store it
!     (__setitem__). So the expression can be rewritten as:
      
!     tmp = func(x)
!     seq[tmp] = seq[tmp] + x
      
!     The augmented assignment form of this expression is much more
!     readable.
!     
! 
! 
! 
  
  
--- 19,213 ----
  
  
! Proposed semantics
  
!     The proposed patch that adds augmented assignment to Python
!     introduces the following new operators:
      
!        += -= *= /= %= **= <<= >>= &= ^= |=
      
!     They implement the same operator as their normal binary form, with
!     the exception that the operation is done `in-place' whenever
!     possible.
!     
!     They truly behave as augmented assignment, in that they perform
!     all of the normal load and store operations, in addition to the
!     binary operation they are intended to do. So, given the expression:
!     
!        x += y
!     
!     The object `x' is loaded, then added with 1, and the resulting
!     object is stored back in the original place. The precise action
!     performed on the two arguments depends on the type of `x', and
!     possibly of `y'.
! 
!     The idea behind augmented assignment in Python is that it isn't
!     just an easier way to write the common practice of storing the
!     result of a binary operation in its left-hand operand, but also a
!     way for the left-hand operand in question to know that it should
!     operate 'on itself', rather than creating a modified copy of
!     itself.
! 
!     To make this possible, a number of new `hooks' are added to Python
!     classes and C extention types, which are called when the object in
!     question is used as the left hand side of an augmented assignment
!     operation. If the class or type does not implement the `in-place'
!     hooks, the normal hooks for the particular binary operation are
!     used.
!     
!     So, given an instance object `x', the expression
!     
!         x += y
!     
!     tries to call x.__add_ab__(y), which is the 'in-place' variant of
!     __add__. If __add_ab__ is not present, x.__add__(y) is
!     attempted, and finally y.__radd__(x) if __add__ is missing too. 
!     There is no `right-hand-side' variant of __add_ab__, because that
!     would require for `y' to know how to in-place modify `x', which is
!     an unsafe assumption. The __add_ab__ hook should behave exactly
!     like __add__, returning the result of the operation (which could
!     be `self') which is to be stored in the variable `x'.
!  
!     For C extention types, the `hooks' are members of the
!     PyNumberMethods and PySequenceMethods structures, and are called
!     in exactly the same manner as the existing non-inplace operations,
!     including argument coercion. C methods should also take care to
!     return a new reference to the result object, whether it's the same
!     object or a new one. So if the original object is returned, it
!     should be INCREF()'d appropriately.
! 
! 
! New methods
! 
!     The proposed implementation adds the following 11 possible `hooks'
!     which Python classes can implement to overload the augmented
!     assignment operations:
!     
!         __add_ab__
!         __sub_ab__
!         __mul_ab__
!         __div_ab__
!         __mod_ab__
!         __pow_ab__
!         __lshift_ab__
!         __rshift_ab__
!         __and_ab__
!         __xor_ab__
!         __or_ab__
!     
!     The `__add_ab__' name is one proposed by Guido[1], and stands for `and
!     becomes'. Other proposed names include '__iadd__', `__add_in__'
!     `__inplace_add__'
! 
!     For C extention types, the following struct members are added:
!     
!     To PyNumberMethods:
!         binaryfunc nb_inplace_add;
!         binaryfunc nb_inplace_subtract;
!         binaryfunc nb_inplace_multiply;
!         binaryfunc nb_inplace_divide;
!         binaryfunc nb_inplace_remainder;
!         binaryfunc nb_inplace_power;
!         binaryfunc nb_inplace_lshift;
!         binaryfunc nb_inplace_rshift;
!         binaryfunc nb_inplace_and;
!         binaryfunc nb_inplace_xor;
!         binaryfunc nb_inplace_or;
! 
!     To PySequenceMethods:
!         binaryfunc sq_inplace_concat;
!         intargfunc sq_inplace_repeat;
! 
!     In order to keep binary compatibility, the tp_flags TypeObject
!     member is used to determine whether the TypeObject in question has
!     allocated room for these slots. Until a clean break in binary
!     compatibility is made (which may or may not happen before 2.0)
!     code that wants to use one of the new struct members must first
!     check that they are available with the 'PyType_HasFeature()' macro:
!     
!     if (PyType_HasFeature(x->ob_type, Py_TPFLAGS_HAVE_INPLACE_OPS) &&
!         x->ob_type->tp_as_number && x->ob_type->tp_as_number->nb_inplace_add) {
!             /* ... */
! 
!     This check must be made even before testing the method slots for
!     NULL values! The macro only tests whether the slots are available,
!     not whether they are filled with methods or not.
! 
! 
! Implementation
! 
!     The current implementation of augmented assignment[2] adds, in
!     addition to the methods and slots alread covered, 13 new bytecodes
!     and 13 new API functions.
!     
!     The API functions are simply in-place versions of the current
!     binary-operation API functions:
!     
!         PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
!         PyNumber_InPlacePower(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
!         PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
!         PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
!         PySequence_InPlaceRepeat(PyObject *o, int count);
! 
!     They call either the Python class hooks (if either of the objects
!     is a Python class instance) or the C type's number or sequence
!     methods.
! 
!     The new bytecodes are:
!         INPLACE_ADD
!         INPLACE_SUBTRACT
!         INPLACE_MULTIPLY
!         INPLACE_DIVIDE
!         INPLACE_REMAINDER
!         INPLACE_POWER
!         INPLACE_LEFTSHIFT
!         INPLACE_RIGHTSHIFT
!         INPLACE_AND
!         INPLACE_XOR
!         INPLACE_OR
!         ROT_FOUR
!         DUP_TOPX
!     
!     The INPLACE_* bytecodes mirror the BINARY_* bytecodes, except that
!     they are implemented as calls to the 'InPlace' API functions. The
!     other two bytecodes are 'utility' bytecodes: ROT_FOUR behaves like
!     ROT_THREE except that the four topmost stack items are rotated.
!     
!     DUP_TOPX is a bytecode that takes a single argument, which should
!     be an integer between 1 and 5 (inclusive) which is the number of
!     items to duplicate in one block. Given a stack like this (where
!     the left side of the list is the 'top' of the stack):
! 
!         [a, b, c, d, e, f, g]
!     
!     "DUP_TOPX 3" would duplicate the top 3 items, resulting in this
!     stack:
!     
!         [a, b, c, d, e, f, g, e, f, g]
! 
!     DUP_TOPX with an argument of 1 is the same as DUP_TOP. The limit
!     of 5 is purely an implementation limit. The implementation of
!     augmented assignment requires only DUP_TOPX with an argument of 2
!     and 3, and could do without this new opcode at the cost of a fair
!     number of DUP_TOP and ROT_*.
! 
! 
! Copyright
! 
!     This document has been placed in the public domain.
! 
! 
! References
! 
!     [1] http://www.python.org/pipermail/python-list/2000-June/059556.html
!     [2]
! http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470
  
  



From python-dev@python.org  Mon Aug  7 18:04:31 2000
From: python-dev@python.org (Jeremy Hylton)
Date: Mon, 7 Aug 2000 10:04:31 -0700
Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.6,1.7
Message-ID: <200008071704.KAA12560@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/peps
In directory slayer.i.sourceforge.net:/tmp/cvs-serv11993

Modified Files:
	pep-0200.txt 
Log Message:
some notes about test cases
couple of more small action items


Index: pep-0200.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** pep-0200.txt	2000/07/27 03:03:39	1.6
--- pep-0200.txt	2000/08/07 17:04:27	1.7
***************
*** 84,91 ****
      to fail, they serve no useful purpose.
  
!     The current test suite runs correctly on my Linux box (July 26).
!     Heard reports that test_fork1 fails on some Linux boxes and that
!     test_winreg and test_winreg32 fail on Windows.
! 
  Open items -- should be done/fixed
  
--- 84,97 ----
      to fail, they serve no useful purpose.
  
!     test case         platform   R B    date reported   note
!     test_mmap          Win32     X X    July 26, 2000
!         [believe that was fixed by Mark H.]
!     test_winreg        Win32     X X    July 26, 2000
!     test_winreg2       Win32     X X    July 26, 2000
!     test_popen2        Win32     X X    July 26, 2000   skipped
!         [believe this was fix by /F]
!     test_fork1         Linux     X      July 26, 2000   just SMP?  
!         [no clue; there are probably two bugs here]
!   
  Open items -- should be done/fixed
  
***************
*** 129,132 ****
--- 135,144 ----
  
  Open: proposed but not accepted or declined
+ 
+     * Fix xrange printing behavior
+ 
+     * Tim O'Malley's cookie module -- but need different license
+ 
+     * test harness for C code - Trent Mick
  
      * List comprehensions - Tim Peters?



From python-dev@python.org  Mon Aug  7 18:33:41 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Mon, 7 Aug 2000 10:33:41 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.32,2.33
Message-ID: <200008071733.KAA12082@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv10415/Modules

Modified Files:
	_sre.c 
Log Message:


+ if USE_STACKCHECK is defined, use PyOS_CheckStack to look
  for excessive recursion.

Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.32
retrieving revision 2.33
diff -C2 -r2.32 -r2.33
*** _sre.c	2000/08/03 16:29:50	2.32
--- _sre.c	2000/08/07 17:33:38	2.33
***************
*** 59,63 ****
--- 59,65 ----
  
  /* prevent run-away recursion (bad patterns on long strings) */
+ #if !defined(USE_STACKCHECK)
  #define USE_RECURSION_LIMIT 10000
+ #endif
  
  /* enables fast searching */
***************
*** 527,530 ****
--- 529,537 ----
  
      TRACE(("%8d: enter %d\n", PTR(ptr), level));
+ 
+ #if defined(USE_STACKCHECK)
+     if (level % 10 == 0 && PyOS_CheckStack()) {
+         return SRE_ERROR_RECURSION_LIMIT;
+ #endif
  
  #if defined(USE_RECURSION_LIMIT)



From python-dev@python.org  Mon Aug  7 20:07:54 2000
From: python-dev@python.org (Guido van Rossum)
Date: Mon, 7 Aug 2000 12:07:54 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.70.2.1,2.70.2.2
Message-ID: <200008071907.MAA20832@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv20741

Modified Files:
      Tag: cnri-16-start
	object.c 
Log Message:
In get_inprogress_dict(), there's no need to call PyErr_Clear() when
PyDict_GetItem() fails -- since this function never sets an exception.

The PyErr_Clear() was masking an exception in the parser which caused
a core dump.


Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.70.2.1
retrieving revision 2.70.2.2
diff -C2 -r2.70.2.1 -r2.70.2.2
*** object.c	2000/08/03 16:48:51	2.70.2.1
--- object.c	2000/08/07 19:07:51	2.70.2.2
***************
*** 312,316 ****
  	inprogress = PyDict_GetItem(tstate_dict, _PyCompareState_Key); 
  	if (inprogress == NULL) {
- 		PyErr_Clear();
  		inprogress = PyDict_New();
  		if (inprogress == NULL)
--- 312,315 ----



From python-dev@python.org  Mon Aug  7 20:11:43 2000
From: python-dev@python.org (Guido van Rossum)
Date: Mon, 7 Aug 2000 12:11:43 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.70.2.2,2.70.2.3
Message-ID: <200008071911.MAA22407@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv22382

Modified Files:
      Tag: cnri-16-start
	object.c 
Log Message:
As I compared the 1.6 code for get_inprogress_dict() to 2.0, I found
another difference: a memory leak.  Plug it.


Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.70.2.2
retrieving revision 2.70.2.3
diff -C2 -r2.70.2.2 -r2.70.2.3
*** object.c	2000/08/07 19:07:51	2.70.2.2
--- object.c	2000/08/07 19:11:41	2.70.2.3
***************
*** 320,323 ****
--- 320,324 ----
  		    return NULL;
  		}
+ 		Py_DECREF(inprogress);
  	}
  	return inprogress;



From python-dev@python.org  Mon Aug  7 20:15:42 2000
From: python-dev@python.org (Guido van Rossum)
Date: Mon, 7 Aug 2000 12:15:42 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.108.2.1,2.108.2.2
Message-ID: <200008071915.MAA24158@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv24122

Modified Files:
      Tag: cnri-16-start
	compile.c 
Log Message:
When returning an error from jcompile() (which is passed through by
PyNode_Compile()), make sure that an exception is actually set --
otherwise someone stomped on our error.


Index: compile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
retrieving revision 2.108.2.1
retrieving revision 2.108.2.2
diff -C2 -r2.108.2.1 -r2.108.2.2
*** compile.c	2000/08/03 16:50:35	2.108.2.1
--- compile.c	2000/08/07 19:15:40	2.108.2.2
***************
*** 3487,3490 ****
--- 3487,3498 ----
  		Py_XDECREF(name);
  	}
+ 	else if (!PyErr_Occurred()) {
+ 		/* This could happen if someone called PyErr_Clear() after an
+ 		   error was reported above.  That's not supposed to happen,
+ 		   but I just plugged one case and I'm not sure there can't be
+ 		   others.  In that case, raise SystemError so that at least
+ 		   it gets reported instead dumping core. */
+ 		PyErr_SetString(PyExc_SystemError, "lost syntax error");
+ 	}
  	com_free(&sc);
  	return co;



From python-dev@python.org  Mon Aug  7 20:18:29 2000
From: python-dev@python.org (Guido van Rossum)
Date: Mon, 7 Aug 2000 12:18:29 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python errors.c,2.50,2.51
Message-ID: <200008071918.MAA24880@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv24853

Modified Files:
	errors.c 
Log Message:
Avoid dumping core when PyErr_NormalizeException() is called without
an exception set.  This shouldn't happen, but we see it at times...


Index: errors.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v
retrieving revision 2.50
retrieving revision 2.51
diff -C2 -r2.50 -r2.51
*** errors.c	2000/07/22 18:47:25	2.50
--- errors.c	2000/08/07 19:18:27	2.51
***************
*** 137,140 ****
--- 137,146 ----
  	PyObject *inclass = NULL;
  
+ 	if (type == NULL) {
+ 		/* This is a bug.  Should never happen.  Don't dump core. */
+ 		PyErr_SetString(PyExc_SystemError,
+ 			"PyErr_NormalizeException() called without exception");
+ 	}
+ 
  	/* If PyErr_SetNone() was used, the value will have been actually
  	   set to NULL.



From python-dev@python.org  Mon Aug  7 20:22:45 2000
From: python-dev@python.org (Guido van Rossum)
Date: Mon, 7 Aug 2000 12:22:45 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.118,2.119
Message-ID: <200008071922.MAA26780@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv26753

Modified Files:
	compile.c 
Log Message:
When returning an error from jcompile() (which is passed through by
PyNode_Compile()), make sure that an exception is actually set --
otherwise someone stomped on our error.  [2.0 checkin of this fix.]


Index: compile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
retrieving revision 2.118
retrieving revision 2.119
diff -C2 -r2.118 -r2.119
*** compile.c	2000/08/05 21:37:50	2.118
--- compile.c	2000/08/07 19:22:43	2.119
***************
*** 3294,3297 ****
--- 3294,3305 ----
  		Py_XDECREF(name);
  	}
+ 	else if (!PyErr_Occurred()) {
+ 		/* This could happen if someone called PyErr_Clear() after an
+ 		   error was reported above.  That's not supposed to happen,
+ 		   but I just plugged one case and I'm not sure there can't be
+ 		   others.  In that case, raise SystemError so that at least
+ 		   it gets reported instead dumping core. */
+ 		PyErr_SetString(PyExc_SystemError, "lost syntax error");
+ 	}
  	com_free(&sc);
  	return co;



From python-dev@python.org  Mon Aug  7 20:34:45 2000
From: python-dev@python.org (Guido van Rossum)
Date: Mon, 7 Aug 2000 12:34:45 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.in,1.98,1.98.2.1
Message-ID: <200008071934.MAA29456@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv29447

Modified Files:
      Tag: cnri-16-start
	Setup.in 
Log Message:
Turn on _locale module by default.
Correct line for curses -- it's now _curses.


Index: Setup.in
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v
retrieving revision 1.98
retrieving revision 1.98.2.1
diff -C2 -r1.98 -r1.98.2.1
*** Setup.in	2000/05/03 22:34:12	1.98
--- Setup.in	2000/08/07 19:34:42	1.98.2.1
***************
*** 141,145 ****
                          # static Unicode character database
  
! #_locale _localemodule.c  # access to ISO C locale support
  
  
--- 141,145 ----
                          # static Unicode character database
  
! _locale _localemodule.c  # access to ISO C locale support
  
  
***************
*** 320,324 ****
  # -L/usr/5lib before -lcurses).
  
! #curses cursesmodule.c -lcurses -ltermcap
  
  
--- 320,324 ----
  # -L/usr/5lib before -lcurses).
  
! #_curses _cursesmodule.c -lcurses -ltermcap
  
  



From python-dev@python.org  Mon Aug  7 21:16:30 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Mon, 7 Aug 2000 13:16:30 -0700
Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.43,1.44
Message-ID: <200008072016.NAA08268@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/PC
In directory slayer.i.sourceforge.net:/tmp/cvs-serv8067/PC

Modified Files:
	config.h 
Log Message:


-- from Trent Mick: [Patch #101010] replace use of INT_PTR
   with uintptr_t (fix MSVC 5.0 build) 

Index: config.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -r1.43 -r1.44
*** config.h	2000/08/05 00:58:14	1.43
--- config.h	2000/08/07 20:16:28	1.44
***************
*** 242,247 ****
  /* End of compilers - finish up */
  
! /* define the ANSI intptr_t type for portable use of a pointer sized
!    integer */
  #if _MSC_VER >= 1200 /* This file only exists in VC 6.0 or higher */
  #include 
--- 242,246 ----
  /* End of compilers - finish up */
  
! /* define some ANSI types that are not defined in earlier Win headers */
  #if _MSC_VER >= 1200 /* This file only exists in VC 6.0 or higher */
  #include 
***************
*** 249,252 ****
--- 248,252 ----
  #if defined(MS_WINDOWS) && !defined(MS_WIN64)
  typedef long intptr_t;
+ typedef unsigned long uintptr_t;
  #endif
  



From python-dev@python.org  Mon Aug  7 21:16:31 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Mon, 7 Aug 2000 13:16:31 -0700
Subject: [Python-checkins] CVS: python/dist/src/Python thread_nt.h,2.15,2.16
Message-ID: <200008072016.NAA08272@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv8067/Python

Modified Files:
	thread_nt.h 
Log Message:


-- from Trent Mick: [Patch #101010] replace use of INT_PTR
   with uintptr_t (fix MSVC 5.0 build) 

Index: thread_nt.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/thread_nt.h,v
retrieving revision 2.15
retrieving revision 2.16
diff -C2 -r2.15 -r2.16
*** thread_nt.h	2000/07/22 18:47:25	2.15
--- thread_nt.h	2000/08/07 20:16:28	2.16
***************
*** 162,170 ****
  int PyThread_start_new_thread(void (*func)(void *), void *arg)
  {
! #if _MSC_VER >= 1200
! 	INT_PTR rv;
! #else
! 	unsigned long rv;
! #endif
  	int success = 0;
  
--- 162,166 ----
  int PyThread_start_new_thread(void (*func)(void *), void *arg)
  {
! 	uintptr_t rv;
  	int success = 0;
  



From python-dev@python.org  Mon Aug  7 21:59:08 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Mon, 7 Aug 2000 13:59:08 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.23,1.24 sre_compile.py,1.29,1.30 sre_parse.py,1.29,1.30
Message-ID: <200008072059.NAA11904@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv11293/Lib

Modified Files:
	sre.py sre_compile.py sre_parse.py 
Log Message:


-- reset marks if repeat_one tail doesn't match
   (this should fix Sjoerd's xmllib problem)
-- added skip field to INFO header
-- changed compiler to generate charset INFO header
-- changed trace messages to support post-mortem analysis


Index: sre.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -r1.23 -r1.24
*** sre.py	2000/08/01 22:47:48	1.23
--- sre.py	2000/08/07 20:59:04	1.24
***************
*** 48,61 ****
  
  def sub(pattern, repl, string, count=0):
!     return _compile(pattern).sub(repl, string, count)
  
  def subn(pattern, repl, string, count=0):
!     return _compile(pattern).subn(repl, string, count)
  
  def split(pattern, string, maxsplit=0):
!     return _compile(pattern).split(string, maxsplit)
  
  def findall(pattern, string, maxsplit=0):
!     return _compile(pattern).findall(string, maxsplit)
  
  def compile(pattern, flags=0):
--- 48,61 ----
  
  def sub(pattern, repl, string, count=0):
!     return _compile(pattern, 0).sub(repl, string, count)
  
  def subn(pattern, repl, string, count=0):
!     return _compile(pattern, 0).subn(repl, string, count)
  
  def split(pattern, string, maxsplit=0):
!     return _compile(pattern, 0).split(string, maxsplit)
  
  def findall(pattern, string, maxsplit=0):
!     return _compile(pattern, 0).findall(string, maxsplit)
  
  def compile(pattern, flags=0):
***************
*** 89,103 ****
      return string.join(seq, sep[:0])
  
! def _compile(pattern, flags=0):
      # internal: compile pattern
!     tp = type(pattern)
!     if tp not in sre_compile.STRING_TYPES:
          return pattern
-     key = (tp, pattern, flags)
      try:
-         return _cache[key]
-     except KeyError:
-         pass
-     try:
          p = sre_compile.compile(pattern, flags)
      except error, v:
--- 89,101 ----
      return string.join(seq, sep[:0])
  
! def _compile(*key):
      # internal: compile pattern
!     p = _cache.get(key)
!     if p is not None:
!         return p
!     pattern, flags = key
!     if type(pattern) not in sre_compile.STRING_TYPES:
          return pattern
      try:
          p = sre_compile.compile(pattern, flags)
      except error, v:
***************
*** 169,173 ****
      return _compile, (p.pattern, p.flags)
  
! copy_reg.pickle(type(_compile("")), _pickle, _compile)
  
  # --------------------------------------------------------------------
--- 167,171 ----
      return _compile, (p.pattern, p.flags)
  
! copy_reg.pickle(type(_compile("", 0)), _pickle, _compile)
  
  # --------------------------------------------------------------------

Index: sre_compile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -r1.29 -r1.30
*** sre_compile.py	2000/08/01 22:47:48	1.29
--- sre_compile.py	2000/08/07 20:59:04	1.30
***************
*** 15,84 ****
  MAXCODE = 65535
  
- def _charset(charset, fixup=None):
-     # internal: optimize character set
-     if not fixup:
-         fixup = lambda x: x
-     out = []
-     charmap = [0]*256
-     try:
-         for op, av in charset:
-             if op is NEGATE:
-                 out.append((op, av))
-             elif op is LITERAL:
-                 charmap[fixup(av)] = 1
-             elif op is RANGE:
-                 for i in range(fixup(av[0]), fixup(av[1])+1):
-                     charmap[i] = 1
-             elif op is CATEGORY:
-                 # FIXME: could append to charmap tail
-                 return charset # cannot compress
-     except IndexError:
-         # unicode
-         return charset
-     # compress character map
-     i = p = n = 0
-     runs = []
-     for c in charmap:
-         if c:
-             if n == 0:
-                 p = i
-             n = n + 1
-         elif n:
-             runs.append((p, n))
-             n = 0
-         i = i + 1
-     if n:
-         runs.append((p, n))
-     if len(runs) <= 2:
-         # use literal/range
-         for p, n in runs:
-             if n == 1:
-                 out.append((LITERAL, p))
-             else:
-                 out.append((RANGE, (p, p+n-1)))
-         if len(out) < len(charset):
-             return out
-     else:
-         # use bitmap
-         data = []
-         m = 1; v = 0
-         for c in charmap:
-             if c:
-                 v = v + m
-             m = m << 1
-             if m > MAXCODE:
-                 data.append(v)
-                 m = 1; v = 0
-         out.append((CHARSET, data))
-         return out
-     return charset
- 
- def _simple(av):
-     # check if av is a "simple" operator
-     lo, hi = av[2].getwidth()
-     if lo == 0:
-         raise error, "nothing to repeat"
-     return lo == hi == 1 and av[2][0][0] != SUBPATTERN
- 
  def _compile(code, pattern, flags):
      # internal: compile a (sub)pattern
--- 15,18 ----
***************
*** 100,124 ****
                  fixup = lambda x: x
              skip = len(code); emit(0)
!             for op, av in _charset(av, fixup):
!                 emit(OPCODES[op])
!                 if op is NEGATE:
!                     pass
!                 elif op is LITERAL:
!                     emit(fixup(av))
!                 elif op is RANGE:
!                     emit(fixup(av[0]))
!                     emit(fixup(av[1]))
!                 elif op is CHARSET:
!                     code.extend(av)
!                 elif op is CATEGORY:
!                     if flags & SRE_FLAG_LOCALE:
!                         emit(CHCODES[CH_LOCALE[av]])
!                     elif flags & SRE_FLAG_UNICODE:
!                         emit(CHCODES[CH_UNICODE[av]])
!                     else:
!                         emit(CHCODES[av])
!                 else:
!                     raise error, "internal: unsupported set operator"
!             emit(OPCODES[FAILURE])
              code[skip] = len(code) - skip
          elif op is ANY:
--- 34,38 ----
                  fixup = lambda x: x
              skip = len(code); emit(0)
!             _compile_charset(av, flags, code, fixup)
              code[skip] = len(code) - skip
          elif op is ANY:
***************
*** 160,163 ****
--- 74,78 ----
                  emit(OPCODES[MARK])
                  emit((av[0]-1)*2)
+             # _compile_info(code, av[1], flags)
              _compile(code, av[1], flags)
              if av[0]:
***************
*** 196,199 ****
--- 111,115 ----
              for av in av[1]:
                  skip = len(code); emit(0)
+                 # _compile_info(code, av, flags)
                  _compile(code, av, flags)
                  emit(OPCODES[JUMP])
***************
*** 220,223 ****
--- 136,230 ----
              raise ValueError, ("unsupported operand type", op)
  
+ def _compile_charset(charset, flags, code, fixup=None):
+     # compile charset subprogram
+     emit = code.append
+     if not fixup:
+         fixup = lambda x: x
+     for op, av in _optimize_charset(charset, fixup):
+         emit(OPCODES[op])
+         if op is NEGATE:
+             pass
+         elif op is LITERAL:
+             emit(fixup(av))
+         elif op is RANGE:
+             emit(fixup(av[0]))
+             emit(fixup(av[1]))
+         elif op is CHARSET:
+             code.extend(av)
+         elif op is CATEGORY:
+             if flags & SRE_FLAG_LOCALE:
+                 emit(CHCODES[CH_LOCALE[av]])
+             elif flags & SRE_FLAG_UNICODE:
+                 emit(CHCODES[CH_UNICODE[av]])
+             else:
+                 emit(CHCODES[av])
+         else:
+             raise error, "internal: unsupported set operator"
+     emit(OPCODES[FAILURE])
+ 
+ def _optimize_charset(charset, fixup):
+     # internal: optimize character set
+     out = []
+     charmap = [0]*256
+     try:
+         for op, av in charset:
+             if op is NEGATE:
+                 out.append((op, av))
+             elif op is LITERAL:
+                 charmap[fixup(av)] = 1
+             elif op is RANGE:
+                 for i in range(fixup(av[0]), fixup(av[1])+1):
+                     charmap[i] = 1
+             elif op is CATEGORY:
+                 # FIXME: could append to charmap tail
+                 return charset # cannot compress
+     except IndexError:
+         # character set contains unicode characters
+         return charset
+     # compress character map
+     i = p = n = 0
+     runs = []
+     for c in charmap:
+         if c:
+             if n == 0:
+                 p = i
+             n = n + 1
+         elif n:
+             runs.append((p, n))
+             n = 0
+         i = i + 1
+     if n:
+         runs.append((p, n))
+     if len(runs) <= 2:
+         # use literal/range
+         for p, n in runs:
+             if n == 1:
+                 out.append((LITERAL, p))
+             else:
+                 out.append((RANGE, (p, p+n-1)))
+         if len(out) < len(charset):
+             return out
+     else:
+         # use bitmap
+         data = []
+         m = 1; v = 0
+         for c in charmap:
+             if c:
+                 v = v + m
+             m = m << 1
+             if m > MAXCODE:
+                 data.append(v)
+                 m = 1; v = 0
+         out.append((CHARSET, data))
+         return out
+     return charset
+ 
+ def _simple(av):
+     # check if av is a "simple" operator
+     lo, hi = av[2].getwidth()
+     if lo == 0:
+         raise error, "nothing to repeat"
+     return lo == hi == 1 and av[2][0][0] != SUBPATTERN
+ 
  def _compile_info(code, pattern, flags):
      # internal: compile an info block.  in the current version,
***************
*** 229,239 ****
--- 236,293 ----
      # look for a literal prefix
      prefix = []
+     prefix_skip = 0
      charset = [] # not used
      if not (flags & SRE_FLAG_IGNORECASE):
+         # look for literal prefix
          for op, av in pattern.data:
              if op is LITERAL:
+                 if len(prefix) == prefix_skip:
+                     prefix_skip = prefix_skip + 1
                  prefix.append(av)
+             elif op is SUBPATTERN and len(av[1]) == 1:
+                 op, av = av[1][0]
+                 if op is LITERAL:
+                     prefix.append(av)
+                 else:
+                     break
              else:
                  break
+         # if no prefix, look for charset prefix
+         if not prefix and pattern.data:
+             op, av = pattern.data[0]
+             if op is SUBPATTERN and av[1]:
+                 op, av = av[1][0]
+                 if op is LITERAL:
+                     charset.append((op, av))
+                 elif op is BRANCH:
+                     c = []
+                     for p in av[1]:
+                         if not p:
+                             break
+                         op, av = p[0]
+                         if op is LITERAL:
+                             c.append((op, av))
+                         else:
+                             break
+                     else:
+                         charset = c
+             elif op is BRANCH:
+                 c = []
+                 for p in av[1]:
+                     if not p:
+                         break
+                     op, av = p[0]
+                     if op is LITERAL:
+                         c.append((op, av))
+                     else:
+                         break
+                 else:
+                     charset = c
+             elif op is IN:
+                 charset = av
+ ##     if prefix:
+ ##         print "*** PREFIX", prefix, prefix_skip
+ ##     if charset:
+ ##         print "*** CHARSET", charset
      # add an info block
      emit = code.append
***************
*** 244,248 ****
      if prefix:
          mask = SRE_INFO_PREFIX
!         if len(prefix) == len(pattern.data):
              mask = mask + SRE_INFO_LITERAL
      elif charset:
--- 298,302 ----
      if prefix:
          mask = SRE_INFO_PREFIX
!         if len(prefix) == prefix_skip == len(pattern.data):
              mask = mask + SRE_INFO_LITERAL
      elif charset:
***************
*** 261,280 ****
      # add literal prefix
      if prefix:
!         emit(len(prefix))
!         if prefix:
!             code.extend(prefix)
!             # generate overlap table
!             table = [-1] + ([0]*len(prefix))
!             for i in range(len(prefix)):
!                 table[i+1] = table[i]+1
!                 while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
!                     table[i+1] = table[table[i+1]-1]+1
!             code.extend(table[1:]) # don't store first entry
      elif charset:
!         # FIXME: use charset optimizer!
!         for char in charset:
!             emit(OPCODES[LITERAL])
!             emit(char)
!         emit(OPCODES[FAILURE])
      code[skip] = len(code) - skip
  
--- 315,330 ----
      # add literal prefix
      if prefix:
!         emit(len(prefix)) # length
!         emit(prefix_skip) # skip
!         code.extend(prefix)
!         # generate overlap table
!         table = [-1] + ([0]*len(prefix))
!         for i in range(len(prefix)):
!             table[i+1] = table[i]+1
!             while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
!                 table[i+1] = table[table[i+1]-1]+1
!         code.extend(table[1:]) # don't store first entry
      elif charset:
!         _compile_charset(charset, 0, code)
      code[skip] = len(code) - skip
  

Index: sre_parse.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -r1.29 -r1.30
*** sre_parse.py	2000/08/01 22:47:48	1.29
--- sre_parse.py	2000/08/07 20:59:04	1.30
***************
*** 11,16 ****
  import string, sys
  
- import _sre
- 
  from sre_constants import *
  
--- 11,14 ----
***************
*** 233,236 ****
--- 231,235 ----
      try:
          if escape[1:2] == "x":
+             # FIXME: in 2.0, \xNN must have exactly two digits
              while source.next in HEXDIGITS:
                  escape = escape + source.get()
***************
*** 557,566 ****
      return subpattern
  
! def parse(str, flags=0):
      # parse 're' pattern into list of (opcode, argument) tuples
  
      source = Tokenizer(str)
  
!     pattern = Pattern()
      pattern.flags = flags
  
--- 556,566 ----
      return subpattern
  
! def parse(str, flags=0, pattern=None):
      # parse 're' pattern into list of (opcode, argument) tuples
  
      source = Tokenizer(str)
  
!     if pattern is None:
!         pattern = Pattern()
      pattern.flags = flags
  



From python-dev@python.org  Mon Aug  7 21:59:08 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Mon, 7 Aug 2000 13:59:08 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.33,2.34
Message-ID: <200008072059.NAA11902@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv11293/Modules

Modified Files:
	_sre.c 
Log Message:


-- reset marks if repeat_one tail doesn't match
   (this should fix Sjoerd's xmllib problem)
-- added skip field to INFO header
-- changed compiler to generate charset INFO header
-- changed trace messages to support post-mortem analysis


Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.33
retrieving revision 2.34
diff -C2 -r2.33 -r2.34
*** _sre.c	2000/08/07 17:33:38	2.33
--- _sre.c	2000/08/07 20:59:04	2.34
***************
*** 14,19 ****
   * 00-07-21 fl  reset lastindex in scanner methods (0.9.6)
   * 00-08-01 fl  fixes for 1.6b1 (0.9.8)
-  * 00-08-02 fl  moved SRE_COUNT out of the match method
   * 00-08-03 fl  added recursion limit
   *
   * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
--- 14,19 ----
   * 00-07-21 fl  reset lastindex in scanner methods (0.9.6)
   * 00-08-01 fl  fixes for 1.6b1 (0.9.8)
   * 00-08-03 fl  added recursion limit
+  * 00-08-07 fl  use PyOS_CheckStack() if available
   *
   * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
***************
*** 94,99 ****
  #endif
  
- #define PTR(ptr) ((SRE_CHAR*) (ptr) - (SRE_CHAR*) state->beginning)
- 
  /* -------------------------------------------------------------------- */
  /* search engine state */
--- 94,97 ----
***************
*** 266,270 ****
      }
  
!     TRACE(("copy %d:%d to %d\n", lo, hi, state->mark_stack_base));
  
      memcpy(state->mark_stack + state->mark_stack_base, state->mark + lo,
--- 264,268 ----
      }
  
!     TRACE(("copy %d:%d to %d (%d)\n", lo, hi, state->mark_stack_base, size));
  
      memcpy(state->mark_stack + state->mark_stack_base, state->mark + lo,
***************
*** 301,305 ****
  #define SRE_AT sre_at
  #define SRE_COUNT sre_count
! #define SRE_MEMBER sre_member
  #define SRE_MATCH sre_match
  #define SRE_SEARCH sre_search
--- 299,304 ----
  #define SRE_AT sre_at
  #define SRE_COUNT sre_count
! #define SRE_CHARSET sre_charset
! #define SRE_INFO sre_info
  #define SRE_MATCH sre_match
  #define SRE_SEARCH sre_search
***************
*** 313,317 ****
  #undef SRE_SEARCH
  #undef SRE_MATCH
! #undef SRE_MEMBER
  #undef SRE_COUNT
  #undef SRE_AT
--- 312,317 ----
  #undef SRE_SEARCH
  #undef SRE_MATCH
! #undef SRE_INFO
! #undef SRE_CHARSET
  #undef SRE_COUNT
  #undef SRE_AT
***************
*** 323,327 ****
  #define SRE_AT sre_uat
  #define SRE_COUNT sre_ucount
! #define SRE_MEMBER sre_umember
  #define SRE_MATCH sre_umatch
  #define SRE_SEARCH sre_usearch
--- 323,328 ----
  #define SRE_AT sre_uat
  #define SRE_COUNT sre_ucount
! #define SRE_CHARSET sre_ucharset
! #define SRE_INFO sre_uinfo
  #define SRE_MATCH sre_umatch
  #define SRE_SEARCH sre_usearch
***************
*** 384,388 ****
  
  LOCAL(int)
! SRE_MEMBER(SRE_CODE* set, SRE_CODE ch)
  {
      /* check if character is a member of the given set */
--- 385,389 ----
  
  LOCAL(int)
! SRE_CHARSET(SRE_CODE* set, SRE_CODE ch)
  {
      /* check if character is a member of the given set */
***************
*** 454,457 ****
--- 455,459 ----
      case SRE_OP_ANY:
          /* repeated dot wildcard. */
+         TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
          while (ptr < end && !SRE_IS_LINEBREAK(*ptr))
              ptr++;
***************
*** 461,464 ****
--- 463,467 ----
          /* repeated dot wildcare.  skip to the end of the target
             string, and backtrack from there */
+         TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr));
          ptr = end;
          break;
***************
*** 467,470 ****
--- 470,474 ----
          /* repeated literal */
          chr = pattern[1];
+         TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
          while (ptr < end && (SRE_CODE) *ptr == chr)
              ptr++;
***************
*** 474,477 ****
--- 478,482 ----
          /* repeated literal */
          chr = pattern[1];
+         TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
          while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr)
              ptr++;
***************
*** 481,484 ****
--- 486,490 ----
          /* repeated non-literal */
          chr = pattern[1];
+         TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
          while (ptr < end && (SRE_CODE) *ptr != chr)
              ptr++;
***************
*** 488,491 ****
--- 494,498 ----
          /* repeated non-literal */
          chr = pattern[1];
+         TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
          while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr)
              ptr++;
***************
*** 494,498 ****
      case SRE_OP_IN:
          /* repeated set */
!         while (ptr < end && SRE_MEMBER(pattern + 2, *ptr))
              ptr++;
          break;
--- 501,506 ----
      case SRE_OP_IN:
          /* repeated set */
!         TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
!         while (ptr < end && SRE_CHARSET(pattern + 2, *ptr))
              ptr++;
          break;
***************
*** 500,503 ****
--- 508,512 ----
      default:
          /* repeated single character pattern */
+         TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
          while ((SRE_CHAR*) state->ptr < end) {
              i = SRE_MATCH(state, pattern, level);
***************
*** 507,517 ****
--- 516,555 ----
                  break;
          }
+         TRACE(("|%p|%p|COUNT %d\n", pattern, ptr,
+                (SRE_CHAR*) state->ptr - ptr));
          return (SRE_CHAR*) state->ptr - ptr;
      }
  
+     TRACE(("|%p|%p|COUNT %d\n", pattern, ptr, ptr - (SRE_CHAR*) state->ptr));
      return ptr - (SRE_CHAR*) state->ptr;
  }
  
  LOCAL(int)
+ SRE_INFO(SRE_STATE* state, SRE_CODE* pattern)
+ {
+     /* check if an SRE_OP_INFO block matches at the current position.
+        returns the number of SRE_CODE objects to skip if successful, 0
+        if no match */
+ 
+     SRE_CHAR* end = state->end;
+     SRE_CHAR* ptr = state->ptr;
+     int i;
+ 
+     /* check minimal length */
+     if (pattern[3] && (end - ptr) < pattern[3])
+         return 0;
+ 
+     /* check known prefix */
+     if (pattern[2] & SRE_INFO_PREFIX && pattern[5] > 1) {
+         /*     */
+         for (i = 0; i < pattern[5]; i++)
+             if ((SRE_CODE) ptr[i] != pattern[7 + i])
+                 return 0;
+         return pattern[0] + 2 * pattern[6];
+     }
+     return pattern[0];
+ }
+ 
+ LOCAL(int)
  SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level)
  {
***************
*** 528,532 ****
      SRE_REPEAT rep; /* FIXME:  allocate in STATE instead */
  
!     TRACE(("%8d: enter %d\n", PTR(ptr), level));
  
  #if defined(USE_STACKCHECK)
--- 566,570 ----
      SRE_REPEAT rep; /* FIXME:  allocate in STATE instead */
  
!     TRACE(("|%p|%p|ENTER %d\n", pattern, ptr, level));
  
  #if defined(USE_STACKCHECK)
***************
*** 557,566 ****
          case SRE_OP_FAILURE:
              /* immediate failure */
!             TRACE(("%8d: failure\n", PTR(ptr)));
              return 0;
  
          case SRE_OP_SUCCESS:
              /* end of pattern */
!             TRACE(("%8d: success\n", PTR(ptr)));
              state->ptr = ptr;
              return 1;
--- 595,604 ----
          case SRE_OP_FAILURE:
              /* immediate failure */
!             TRACE(("|%p|%p|FAILURE\n", pattern, ptr));
              return 0;
  
          case SRE_OP_SUCCESS:
              /* end of pattern */
!             TRACE(("|%p|%p|SUCCESS\n", pattern, ptr));
              state->ptr = ptr;
              return 1;
***************
*** 569,573 ****
              /* match at given position */
              /*   */
!             TRACE(("%8d: position %d\n", PTR(ptr), *pattern));
              if (!SRE_AT(state, ptr, *pattern))
                  return 0;
--- 607,611 ----
              /* match at given position */
              /*   */
!             TRACE(("|%p|%p|AT %d\n", pattern, ptr, *pattern));
              if (!SRE_AT(state, ptr, *pattern))
                  return 0;
***************
*** 578,586 ****
              /* match at given category */
              /*   */
!             TRACE(("%8d: category %d [category %d]\n", PTR(ptr),
!                    *ptr, *pattern));
              if (ptr >= end || !sre_category(pattern[0], ptr[0]))
                  return 0;
-             TRACE(("%8d: category ok\n", PTR(ptr)));
              pattern++;
              ptr++;
--- 616,622 ----
              /* match at given category */
              /*   */
!             TRACE(("|%p|%p|CATEGORY %d\n", pattern, ptr, *pattern));
              if (ptr >= end || !sre_category(pattern[0], ptr[0]))
                  return 0;
              pattern++;
              ptr++;
***************
*** 590,594 ****
              /* match literal string */
              /*   */
!             TRACE(("%8d: literal %c\n", PTR(ptr), pattern[0]));
              if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0])
                  return 0;
--- 626,630 ----
              /* match literal string */
              /*   */
!             TRACE(("|%p|%p|LITERAL %d\n", pattern, ptr, *pattern));
              if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0])
                  return 0;
***************
*** 600,604 ****
              /* match anything that is not literal character */
              /*   */
!             TRACE(("%8d: literal not %c\n", PTR(ptr), pattern[0]));
              if (ptr >= end || (SRE_CODE) ptr[0] == pattern[0])
                  return 0;
--- 636,640 ----
              /* match anything that is not literal character */
              /*   */
!             TRACE(("|%p|%p|NOT_LITERAL %d\n", pattern, ptr, *pattern));
              if (ptr >= end || (SRE_CODE) ptr[0] == pattern[0])
                  return 0;
***************
*** 610,614 ****
              /* match anything (except a newline) */
              /*  */
!             TRACE(("%8d: anything (except newline)\n", PTR(ptr)));
              if (ptr >= end || SRE_IS_LINEBREAK(ptr[0]))
                  return 0;
--- 646,650 ----
              /* match anything (except a newline) */
              /*  */
!             TRACE(("|%p|%p|ANY\n", pattern, ptr));
              if (ptr >= end || SRE_IS_LINEBREAK(ptr[0]))
                  return 0;
***************
*** 619,623 ****
              /* match anything */
              /*  */
!             TRACE(("%8d: anything\n", PTR(ptr)));
              if (ptr >= end)
                  return 0;
--- 655,659 ----
              /* match anything */
              /*  */
!             TRACE(("|%p|%p|ANY_ALL\n", pattern, ptr));
              if (ptr >= end)
                  return 0;
***************
*** 628,633 ****
              /* match set member (or non_member) */
              /*    */
!             TRACE(("%8d: set %c\n", PTR(ptr), *ptr));
!             if (ptr >= end || !SRE_MEMBER(pattern + 1, *ptr))
                  return 0;
              pattern += pattern[0];
--- 664,669 ----
              /* match set member (or non_member) */
              /*    */
!             TRACE(("|%p|%p|IN\n", pattern, ptr));
!             if (ptr >= end || !SRE_CHARSET(pattern + 1, *ptr))
                  return 0;
              pattern += pattern[0];
***************
*** 637,641 ****
          case SRE_OP_GROUPREF:
              /* match backreference */
!             TRACE(("%8d: group %d\n", PTR(ptr), pattern[0]));
              i = pattern[0];
              {
--- 673,677 ----
          case SRE_OP_GROUPREF:
              /* match backreference */
!             TRACE(("|%p|%p|GROUPREF %d\n", pattern, ptr, pattern[0]));
              i = pattern[0];
              {
***************
*** 655,659 ****
          case SRE_OP_GROUPREF_IGNORE:
              /* match backreference */
!             TRACE(("%8d: group ignore %d\n", PTR(ptr), pattern[0]));
              i = pattern[0];
              {
--- 691,695 ----
          case SRE_OP_GROUPREF_IGNORE:
              /* match backreference */
!             TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", pattern, ptr, pattern[0]));
              i = pattern[0];
              {
***************
*** 673,677 ****
  
          case SRE_OP_LITERAL_IGNORE:
!             TRACE(("%8d: literal lower(%c)\n", PTR(ptr), pattern[0]));
              if (ptr >= end ||
                  state->lower(*ptr) != state->lower(*pattern))
--- 709,713 ----
  
          case SRE_OP_LITERAL_IGNORE:
!             TRACE(("|%p|%p|LITERAL_IGNORE %d\n", pattern, ptr, pattern[0]));
              if (ptr >= end ||
                  state->lower(*ptr) != state->lower(*pattern))
***************
*** 682,686 ****
  
          case SRE_OP_NOT_LITERAL_IGNORE:
!             TRACE(("%8d: literal not lower(%c)\n", PTR(ptr), pattern[0]));
              if (ptr >= end ||
                  state->lower(*ptr) == state->lower(*pattern))
--- 718,722 ----
  
          case SRE_OP_NOT_LITERAL_IGNORE:
!             TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n", pattern, ptr, *pattern));
              if (ptr >= end ||
                  state->lower(*ptr) == state->lower(*pattern))
***************
*** 691,697 ****
  
          case SRE_OP_IN_IGNORE:
!             TRACE(("%8d: set lower(%c)\n", PTR(ptr), *ptr));
              if (ptr >= end
!                 || !SRE_MEMBER(pattern + 1, (SRE_CODE) state->lower(*ptr)))
                  return 0;
              pattern += pattern[0];
--- 727,733 ----
  
          case SRE_OP_IN_IGNORE:
!             TRACE(("|%p|%p|IN_IGNORE\n", pattern, ptr));
              if (ptr >= end
!                 || !SRE_CHARSET(pattern + 1, (SRE_CODE) state->lower(*ptr)))
                  return 0;
              pattern += pattern[0];
***************
*** 702,706 ****
              /* set mark */
              /*   */
!             TRACE(("%8d: set mark %d\n", PTR(ptr), pattern[0]));
              i = pattern[0];
              if (i & 1)
--- 738,742 ----
              /* set mark */
              /*   */
!             TRACE(("|%p|%p|MARK %d\n", pattern, ptr, pattern[0]));
              i = pattern[0];
              if (i & 1)
***************
*** 716,720 ****
              /* jump forward */
              /*   */
!             TRACE(("%8d: jump +%d\n", PTR(ptr), pattern[0]));
              pattern += pattern[0];
              break;
--- 752,756 ----
              /* jump forward */
              /*   */
!             TRACE(("|%p|%p|JUMP %d\n", pattern, ptr, pattern[0]));
              pattern += pattern[0];
              break;
***************
*** 723,727 ****
              /* assert subpattern */
              /*     */
!             TRACE(("%8d: assert subpattern %d\n", PTR(ptr), pattern[1]));
              state->ptr = ptr - pattern[1];
              if (state->ptr < state->beginning)
--- 759,763 ----
              /* assert subpattern */
              /*     */
!             TRACE(("|%p|%p|ASSERT %d\n", pattern, ptr, pattern[1]));
              state->ptr = ptr - pattern[1];
              if (state->ptr < state->beginning)
***************
*** 738,742 ****
              /* assert not subpattern */
              /*     */
!             TRACE(("%8d: assert not subpattern %d\n", PTR(ptr), pattern[1]));
              state->ptr = ptr - pattern[1];
              if (state->ptr < state->beginning)
--- 774,778 ----
              /* assert not subpattern */
              /*     */
!             TRACE(("|%p|%p|ASSERT_NOT %d\n", pattern, ptr, pattern[1]));
              state->ptr = ptr - pattern[1];
              if (state->ptr < state->beginning)
***************
*** 755,786 ****
              /* alternation */
              /*  <0=skip> code  ...  */
!             TRACE(("%8d: branch\n", PTR(ptr)));
              lastmark = state->lastmark;
!             while (pattern[0]) {
!                 SRE_CODE* code = pattern+1;
!                 TRACE(("%8d: try branch\n", PTR(ptr)));
!                 switch (code[0]) {
!                 case SRE_OP_IN:
!                     if (ptr >= end || !SRE_MEMBER(code + 2, ptr[0]))
!                         break;
!                     code += code[1] + 1;
!                     state->ptr = ptr + 1;
!                     goto branch;
!                 case SRE_OP_LITERAL:
!                     if (ptr >= end || (SRE_CODE) ptr[0] != code[1])
!                         break;
!                     code += 2;
!                     state->ptr = ptr + 1;
!                     goto branch;
!                 default:
!                     state->ptr = ptr;
!                 branch:
!                     i = SRE_MATCH(state, code, level + 1);
!                     if (i)
!                         return i;
!                     while (state->lastmark > lastmark)
!                         state->mark[state->lastmark--] = NULL;
                  }
-                 pattern += pattern[0];
              }
              return 0;
--- 791,814 ----
              /* alternation */
              /*  <0=skip> code  ...  */
!             TRACE(("|%p|%p|BRANCH\n", pattern, ptr));
              lastmark = state->lastmark;
!             for (; pattern[0]; pattern += pattern[0]) {
!                 if (pattern[1] == SRE_OP_LITERAL &&
!                     (ptr >= end || (SRE_CODE) *ptr != pattern[2]))
!                     continue;
!                 if (pattern[1] == SRE_OP_IN &&
!                     (ptr >= end || !SRE_CHARSET(pattern + 3, (SRE_CODE) *ptr)))
!                     continue;
!                 state->ptr = ptr;
!                 i = SRE_MATCH(state, pattern + 1, level + 1);
!                 if (i)
!                     return i;
!                 if (state->lastmark > lastmark) {
!                     memset(
!                         state->mark + lastmark + 1, 0,
!                         (state->lastmark - lastmark) * sizeof(void*)
!                         );
!                     state->lastmark = lastmark;
                  }
              }
              return 0;
***************
*** 796,800 ****
              /*   <1=min> <2=max> item  tail */
  
!             TRACE(("%8d: max repeat one {%d,%d}\n", PTR(ptr),
                     pattern[1], pattern[2]));
  
--- 824,828 ----
              /*   <1=min> <2=max> item  tail */
  
!             TRACE(("|%p|%p|REPEAT_ONE %d %d\n", pattern, ptr,
                     pattern[1], pattern[2]));
  
***************
*** 815,820 ****
                 and backtrack if not. */
  
-             TRACE(("%8d: repeat %d found\n", PTR(ptr), count));
- 
              if (count < (int) pattern[1])
                  return 0;
--- 843,846 ----
***************
*** 822,826 ****
              if (pattern[pattern[0]] == SRE_OP_SUCCESS) {
                  /* tail is empty.  we're finished */
-                 TRACE(("%8d: tail is empty\n", PTR(ptr)));
                  state->ptr = ptr;
                  return 1;
--- 848,851 ----
***************
*** 830,836 ****
                     the rest of the pattern cannot possibly match */
                  chr = pattern[pattern[0]+1];
-                 TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr));
                  for (;;) {
-                     TRACE(("%8d: scan for tail match\n", PTR(ptr)));
                      while (count >= (int) pattern[1] &&
                             (ptr >= end || *ptr != chr)) {
--- 855,859 ----
***************
*** 838,850 ****
                          count--;
                      }
-                     TRACE(("%8d: check tail\n", PTR(ptr)));
                      if (count < (int) pattern[1])
                          break;
                      state->ptr = ptr;
                      i = SRE_MATCH(state, pattern + pattern[0], level + 1);
!                     if (i > 0) {
!                         TRACE(("%8d: repeat %d picked\n", PTR(ptr), count));
                          return 1;
-                     }
                      ptr--;
                      count--;
--- 861,870 ----
                          count--;
                      }
                      if (count < (int) pattern[1])
                          break;
                      state->ptr = ptr;
                      i = SRE_MATCH(state, pattern + pattern[0], level + 1);
!                     if (i)
                          return 1;
                      ptr--;
                      count--;
***************
*** 853,868 ****
              } else {
                  /* general case */
!                 TRACE(("%8d: tail is pattern\n", PTR(ptr)));
                  while (count >= (int) pattern[1]) {
                      state->ptr = ptr;
                      i = SRE_MATCH(state, pattern + pattern[0], level + 1);
!                     if (i < 0)
!                         return i;
!                     if (i) {
!                         TRACE(("%8d: repeat %d picked\n", PTR(ptr), count));
                          return 1;
-                     }
                      ptr--;
                      count--;
                  }
              }
--- 873,891 ----
              } else {
                  /* general case */
!                 lastmark = state->lastmark;
                  while (count >= (int) pattern[1]) {
                      state->ptr = ptr;
                      i = SRE_MATCH(state, pattern + pattern[0], level + 1);
!                     if (i)
                          return 1;
                      ptr--;
                      count--;
+                     if (state->lastmark > lastmark) {
+                         memset(
+                             state->mark + lastmark + 1, 0,
+                             (state->lastmark - lastmark) * sizeof(void*)
+                             );
+                         state->lastmark = lastmark;
+                     }
                  }
              }
***************
*** 873,877 ****
                 by the UNTIL operator */
              /*   <1=min> <2=max> item  tail */
!             TRACE(("%8d: repeat {%d,%d}\n", PTR(ptr),
                     pattern[1], pattern[2]));
  
--- 896,900 ----
                 by the UNTIL operator */
              /*   <1=min> <2=max> item  tail */
!             TRACE(("|%p|%p|REPEAT %d %d\n", pattern, ptr,
                     pattern[1], pattern[2]));
  
***************
*** 905,913 ****
              count = rp->count + 1;
  
!             TRACE(("%8d: max until %d\n", PTR(ptr), count));
  
              if (count < rp->pattern[1]) {
                  /* not enough matches */
-                 TRACE(("%8d: match item (required)\n", PTR(ptr)));
                  rp->count = count;
                  /* RECURSIVE */
--- 928,935 ----
              count = rp->count + 1;
  
!             TRACE(("|%p|%p|MAX_UNTIL %d\n", pattern, ptr, count));
  
              if (count < rp->pattern[1]) {
                  /* not enough matches */
                  rp->count = count;
                  /* RECURSIVE */
***************
*** 921,925 ****
  
              if (count < rp->pattern[2] || rp->pattern[2] == 65535) {
-                 TRACE(("%8d: match item (optional)\n", PTR(ptr)));
                  /* we may have enough matches, but if we can
                     match another item, do so */
--- 943,946 ----
***************
*** 938,942 ****
              /* cannot match more repeated items here.  make sure the
                 tail matches */
-             TRACE(("%8d: match tail\n", PTR(ptr)));
              state->repeat = rp->prev;
              i = SRE_MATCH(state, pattern, level + 1);
--- 959,962 ----
***************
*** 956,960 ****
              count = rp->count + 1;
  
!             TRACE(("%8d: min until %d\n", PTR(ptr), count));
  
              state->ptr = ptr;
--- 976,980 ----
              count = rp->count + 1;
  
!             TRACE(("|%p|%p|MIN_UNTIL %d\n", pattern, ptr, count));
  
              state->ptr = ptr;
***************
*** 962,966 ****
              if (count < rp->pattern[1]) {
                  /* not enough matches */
-                 TRACE(("%8d: match item (required)\n", PTR(ptr)));
                  rp->count = count;
                  /* RECURSIVE */
--- 982,985 ----
***************
*** 974,978 ****
  
              /* see if the tail matches */
-             TRACE(("%8d: match tail\n", PTR(ptr)));
              state->repeat = rp->prev;
              i = SRE_MATCH(state, pattern, level + 1);
--- 993,996 ----
***************
*** 986,990 ****
                  return 0;
  
-             TRACE(("%8d: match item (optional)\n", PTR(ptr)));
              rp->count = count;
              /* RECURSIVE */
--- 1004,1007 ----
***************
*** 996,1000 ****
  
          default:
!             TRACE(("%8d: unknown opcode %d\n", PTR(ptr), pattern[-1]));
              return SRE_ERROR_ILLEGAL;
          }
--- 1013,1017 ----
  
          default:
!             TRACE(("|%p|%p|UNKNOWN %d\n", pattern, ptr, pattern[-1]));
              return SRE_ERROR_ILLEGAL;
          }
***************
*** 1012,1015 ****
--- 1029,1033 ----
      int status = 0;
      int prefix_len = 0;
+     int prefix_skip;
      SRE_CODE* prefix = NULL;
      SRE_CODE* charset = NULL;
***************
*** 1033,1041 ****
          if (flags & SRE_INFO_PREFIX) {
              /* pattern starts with a known prefix */
              prefix_len = pattern[5];
!             prefix = pattern + 6;
              overlap = prefix + prefix_len - 1;
          } else if (flags & SRE_INFO_CHARSET)
              /* pattern starts with a character from a known set */
              charset = pattern + 5;
  
--- 1051,1062 ----
          if (flags & SRE_INFO_PREFIX) {
              /* pattern starts with a known prefix */
+             /*     */
              prefix_len = pattern[5];
!             prefix_skip = pattern[6];
!             prefix = pattern + 7;
              overlap = prefix + prefix_len - 1;
          } else if (flags & SRE_INFO_CHARSET)
              /* pattern starts with a character from a known set */
+             /*  */
              charset = pattern + 5;
  
***************
*** 1043,1046 ****
--- 1064,1070 ----
      }
  
+     TRACE(("prefix = %p %d %d\n", prefix, prefix_len, prefix_skip));
+     TRACE(("charset = %p\n", charset));
+ 
  #if defined(USE_FAST_SEARCH)
      if (prefix_len > 1) {
***************
*** 1059,1068 ****
                      if (++i == prefix_len) {
                          /* found a potential match */
!                         TRACE(("%8d: === SEARCH === hit\n", PTR(ptr)));
!                         state->start = ptr - prefix_len + 1;
!                         state->ptr = ptr + 1;
                          if (flags & SRE_INFO_LITERAL)
                              return 1; /* we got all of it */
!                         status = SRE_MATCH(state, pattern + 2*prefix_len, 1);
                          if (status != 0)
                              return status;
--- 1083,1092 ----
                      if (++i == prefix_len) {
                          /* found a potential match */
!                         TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr));
!                         state->start = ptr + 1 - prefix_len;
!                         state->ptr = ptr + 1 - prefix_len + prefix_skip;
                          if (flags & SRE_INFO_LITERAL)
                              return 1; /* we got all of it */
!                         status = SRE_MATCH(state, pattern + 2*prefix_skip, 1);
                          if (status != 0)
                              return status;
***************
*** 1084,1087 ****
--- 1108,1112 ----
             for short prefixes, and if fast search is disabled */
          SRE_CODE chr = pattern[1];
+         end = state->end;
          for (;;) {
              while (ptr < end && (SRE_CODE) ptr[0] != chr)
***************
*** 1089,1093 ****
              if (ptr == end)
                  return 0;
!             TRACE(("%8d: === SEARCH === literal\n", PTR(ptr)));
              state->start = ptr;
              state->ptr = ++ptr;
--- 1114,1118 ----
              if (ptr == end)
                  return 0;
!             TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr));
              state->start = ptr;
              state->ptr = ++ptr;
***************
*** 1098,1107 ****
      } else if (charset) {
          /* pattern starts with a character from a known set */
          for (;;) {
!             while (ptr < end && !SRE_MEMBER(charset, ptr[0]))
                  ptr++;
              if (ptr == end)
                  return 0;
!             TRACE(("%8d: === SEARCH === charset\n", PTR(ptr)));
              state->start = ptr;
              state->ptr = ptr;
--- 1123,1133 ----
      } else if (charset) {
          /* pattern starts with a character from a known set */
+         end = state->end;
          for (;;) {
!             while (ptr < end && !SRE_CHARSET(charset, ptr[0]))
                  ptr++;
              if (ptr == end)
                  return 0;
!             TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr));
              state->start = ptr;
              state->ptr = ptr;
***************
*** 1109,1117 ****
              if (status != 0)
                  break;
          }
      } else
          /* general case */
          while (ptr <= end) {
!             TRACE(("%8d: === SEARCH ===\n", PTR(ptr))); 
              state->start = state->ptr = ptr++;
              status = SRE_MATCH(state, pattern, 1);
--- 1135,1144 ----
              if (status != 0)
                  break;
+             ptr++;
          }
      } else
          /* general case */
          while (ptr <= end) {
!             TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
              state->start = state->ptr = ptr++;
              status = SRE_MATCH(state, pattern, 1);
***************
*** 1481,1484 ****
--- 1508,1513 ----
      state.ptr = state.start;
  
+     TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
+ 
      if (state.charsize == 1) {
          status = sre_match(&state, PatternObject_GetCode(self), 1);
***************
*** 1489,1492 ****
--- 1518,1523 ----
      }
  
+     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
+ 
      state_fini(&state);
  
***************
*** 1510,1513 ****
--- 1541,1546 ----
          return NULL;
  
+     TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr));
+ 
      if (state.charsize == 1) {
          status = sre_search(&state, PatternObject_GetCode(self));
***************
*** 1517,1520 ****
--- 1550,1555 ----
  #endif
      }
+ 
+     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
  
      state_fini(&state);



From python-dev@python.org  Mon Aug  7 22:00:45 2000
From: python-dev@python.org (Jack Jansen)
Date: Mon, 7 Aug 2000 14:00:45 -0700
Subject: [Python-checkins] CVS: python/dist/src/Include pythonrun.h,2.31,2.32
Message-ID: <200008072100.OAA12232@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Include
In directory slayer.i.sourceforge.net:/tmp/cvs-serv12077

Modified Files:
	pythonrun.h 
Log Message:
Added a prototype for PyOS_CheckStack (within #ifdef USE_STACKCHECK).


Index: pythonrun.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v
retrieving revision 2.31
retrieving revision 2.32
diff -C2 -r2.31 -r2.32
*** pythonrun.h	2000/07/09 00:55:06	2.31
--- pythonrun.h	2000/08/07 21:00:42	2.32
***************
*** 88,91 ****
--- 88,94 ----
  extern DL_IMPORT(int) (*PyOS_InputHook)(void);
  extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *);
+ #ifdef USE_STACKCHECK
+ int PyOS_CheckStack(void);		/* Check that we aren't overflowing our stack */
+ #endif
  
  #ifdef __cplusplus



From python-dev@python.org  Mon Aug  7 22:02:53 2000
From: python-dev@python.org (Jack Jansen)
Date: Mon, 7 Aug 2000 14:02:53 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.34,2.35
Message-ID: <200008072102.OAA13080@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv12753

Modified Files:
	_sre.c 
Log Message:
Added a missing } in the USE_STACKCHECK code.


Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.34
retrieving revision 2.35
diff -C2 -r2.34 -r2.35
*** _sre.c	2000/08/07 20:59:04	2.34
--- _sre.c	2000/08/07 21:02:50	2.35
***************
*** 571,574 ****
--- 571,575 ----
      if (level % 10 == 0 && PyOS_CheckStack()) {
          return SRE_ERROR_RECURSION_LIMIT;
+     }
  #endif
  



From python-dev@python.org  Tue Aug  8 00:00:51 2000
From: python-dev@python.org (Barry Warsaw)
Date: Mon, 7 Aug 2000 16:00:51 -0700
Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.2,1.3
Message-ID: <200008072300.QAA06465@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/peps
In directory slayer.i.sourceforge.net:/tmp/cvs-serv6428

Modified Files:
	pep-0001.txt 
Log Message:
PEP proposals must have a title and an abstract.


Index: pep-0001.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** pep-0001.txt	2000/07/25 17:59:08	1.2
--- pep-0001.txt	2000/08/07 23:00:47	1.3
***************
*** 49,61 ****
      and specifies a location (e.g. egroups, python.org, Roundup).
  
!     The champion then emails the PEP editor describing the proposal
!     and its title.  If the PEP editor approves, he will assign the PEP
!     a number, label it as standards track or informational, give it
!     status 'draft', and create and check-in an initial template for
!     the PEP.  The PEP editor will not unreasonably deny a PEP.
!     Reasons for denying PEP status include duplication of effort,
!     being technically unsound, or not in keeping with the Python
!     philosophy; the BDFL (Benevolent Dictator for Life, Guido van
!     Rossum ) is the final arbitrator of the latter.
  
      Discussion concerning a PEP should initially be kept out of the
--- 49,63 ----
      and specifies a location (e.g. egroups, python.org, Roundup).
  
!     The champion then emails the PEP editor with a proposed title and
!     an abstract of about a paragraph in length.
! 
!     If the PEP editor approves, he will assign the PEP a number, label
!     it as standards track or informational, give it status 'draft',
!     and create and check-in an initial template for the PEP.  The PEP
!     editor will not unreasonably deny a PEP.  Reasons for denying PEP
!     status include duplication of effort, being technically unsound,
!     or not in keeping with the Python philosophy; the BDFL (Benevolent
!     Dictator for Life, Guido van Rossum ) is the
!     final arbitrator of the latter.
  
      Discussion concerning a PEP should initially be kept out of the



From python-dev@python.org  Tue Aug  8 03:30:27 2000
From: python-dev@python.org (Barry Warsaw)
Date: Mon, 7 Aug 2000 19:30:27 -0700
Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.19,1.20
Message-ID: <200008080230.TAA20553@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/peps
In directory slayer.i.sourceforge.net:/tmp/cvs-serv20545

Modified Files:
	pep-0000.txt 
Log Message:
PEP 2 added.

Conform headers to PEP 1.


Index: pep-0000.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -r1.19 -r1.20
*** pep-0000.txt	2000/08/03 15:42:42	1.19
--- pep-0000.txt	2000/08/08 02:30:24	1.20
***************
*** 2,7 ****
  Title: Index of Python Enhancement Proposals (PEPs)
  Version: $Revision$
! Owner: bwarsaw@beopen.com (Barry A. Warsaw)
  Status: Active
  
  Introduction
--- 2,10 ----
  Title: Index of Python Enhancement Proposals (PEPs)
  Version: $Revision$
! Author: bwarsaw@beopen.com (Barry A. Warsaw)
  Status: Active
+ Type: Informational
+ Created: 13-Jul-2000
+ Post-History:
  
  Introduction
***************
*** 18,21 ****
--- 21,25 ----
         0  pep-0000.txt  Index of Python Enhance Proposals    bwarsaw
         1  pep-0001.txt  PEP Guidelines                       bwarsaw, jhylton
+        2  pep-0002.txt  Procedure for Adding New Modules     esr
  
       160  pep-0160.txt  Python 1.6 Release Schedule          fdrake



From python-dev@python.org  Tue Aug  8 03:30:57 2000
From: python-dev@python.org (Barry Warsaw)
Date: Mon, 7 Aug 2000 19:30:57 -0700
Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.3,1.4
Message-ID: <200008080230.TAA20587@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/peps
In directory slayer.i.sourceforge.net:/tmp/cvs-serv20579

Modified Files:
	pep-0001.txt 
Log Message:
Informational PEPs can also have a status of Active.


Index: pep-0001.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** pep-0001.txt	2000/08/07 23:00:47	1.3
--- pep-0001.txt	2000/08/08 02:30:55	1.4
***************
*** 110,114 ****
--- 110,117 ----
          Deferred
  
+     Some informational PEPs may also have a status of `Active' if they
+     are never meant to be completed.  E.g. PEP 1.
  
+ 
  What belongs in a successful PEP?
  
***************
*** 166,170 ****
          Version: 
          Author: 
!         Status: 
          Type: 
          Created: 
--- 169,173 ----
          Version: 
          Author: 
!         Status: 
          Type: 
          Created: 



From python-dev@python.org  Tue Aug  8 03:31:27 2000
From: python-dev@python.org (Barry Warsaw)
Date: Mon, 7 Aug 2000 19:31:27 -0700
Subject: [Python-checkins] CVS: python/nondist/peps pep-0002.txt,NONE,1.1
Message-ID: <200008080231.TAA20639@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/peps
In directory slayer.i.sourceforge.net:/tmp/cvs-serv20629

Added Files:
	pep-0002.txt 
Log Message:
PEP 2, Procedure for Adding New Modules, assigned to esr.


***** Error reading new file(2, 'No such file or directory')


From python-dev@python.org  Tue Aug  8 09:04:32 2000
From: python-dev@python.org (M.-A. Lemburg)
Date: Tue, 8 Aug 2000 01:04:32 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.55,2.56
Message-ID: <200008080804.BAA25769@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25638/Objects

Modified Files:
	unicodeobject.c 
Log Message:
Removing UTF-16 aware Unicode comparison code. This kind of compare
function (together with other locale aware ones) should into a new collation
support module. See python-dev for a discussion of this removal.

Note: This patch should also be applied to the 1.6 branch.

Index: unicodeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.55
retrieving revision 2.56
diff -C2 -r2.55 -r2.56
*** unicodeobject.c	2000/08/03 18:44:28	2.55
--- unicodeobject.c	2000/08/08 08:04:29	2.56
***************
*** 3170,3173 ****
--- 3170,3179 ----
  }
  
+ #if 0
+ 
+ /* This code should go into some future Unicode collation support
+    module. The basic comparison should compare ordinals on a naive
+    basis (this is what Java does and thus JPython too).
+ 
  /* speedy UTF-16 code point order comparison */
  /* gleaned from: */
***************
*** 3213,3216 ****
--- 3219,3249 ----
      return (len1 < len2) ? -1 : (len1 != len2);
  }
+ 
+ #else
+ 
+ static int
+ unicode_compare(PyUnicodeObject *str1, PyUnicodeObject *str2)
+ {
+     register int len1, len2;
+ 
+     Py_UNICODE *s1 = str1->str;
+     Py_UNICODE *s2 = str2->str;
+ 
+     len1 = str1->length;
+     len2 = str2->length;
+     
+     while (len1 > 0 && len2 > 0) {
+ 	register long diff;
+ 
+         diff = (long)*s1++ - (long)*s2++;
+         if (diff)
+             return (diff < 0) ? -1 : (diff != 0);
+         len1--; len2--;
+     }
+ 
+     return (len1 < len2) ? -1 : (len1 != len2);
+ }
+ 
+ #endif
  
  int PyUnicode_Compare(PyObject *left,



From python-dev@python.org  Tue Aug  8 09:03:49 2000
From: python-dev@python.org (M.-A. Lemburg)
Date: Tue, 8 Aug 2000 01:03:49 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_unicode.py,1.19,1.20
Message-ID: <200008080803.BAA25293@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25220/Lib/test

Modified Files:
	test_unicode.py 
Log Message:
Removing UTF-16 aware Unicode comparison code. This kind of compare
function (together with other locale aware ones) should into a new collation
support module. See python-dev for a discussion of this removal.

Note: This patch should also be applied to the 1.6 branch.

Index: test_unicode.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_unicode.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -r1.19 -r1.20
*** test_unicode.py	2000/07/07 17:48:52	1.19
--- test_unicode.py	2000/08/08 08:03:46	1.20
***************
*** 169,222 ****
  print 'done.'
  
! print 'Testing UTF-16 code point order comparisons...',
! #No surrogates, no fixup required.
! assert u'\u0061' < u'\u20ac'
! # Non surrogate below surrogate value, no fixup required
! assert u'\u0061' < u'\ud800\udc02'
  
! # Non surrogate above surrogate value, fixup required
! def test_lecmp(s, s2):
!   assert s <  s2 , "comparison failed on %s < %s" % (s, s2)
!   
! def test_fixup(s):
!   s2 = u'\ud800\udc01'
!   test_lecmp(s, s2)
!   s2 = u'\ud900\udc01'
!   test_lecmp(s, s2)
!   s2 = u'\uda00\udc01'
!   test_lecmp(s, s2)
!   s2 = u'\udb00\udc01'
!   test_lecmp(s, s2)
!   s2 = u'\ud800\udd01'
!   test_lecmp(s, s2)
!   s2 = u'\ud900\udd01'
!   test_lecmp(s, s2)
!   s2 = u'\uda00\udd01'
!   test_lecmp(s, s2)
!   s2 = u'\udb00\udd01'
!   test_lecmp(s, s2)
!   s2 = u'\ud800\ude01'
!   test_lecmp(s, s2)
!   s2 = u'\ud900\ude01'
!   test_lecmp(s, s2)
!   s2 = u'\uda00\ude01'
!   test_lecmp(s, s2)
!   s2 = u'\udb00\ude01'
!   test_lecmp(s, s2)
!   s2 = u'\ud800\udfff'
!   test_lecmp(s, s2)
!   s2 = u'\ud900\udfff'
!   test_lecmp(s, s2)
!   s2 = u'\uda00\udfff'
!   test_lecmp(s, s2)
!   s2 = u'\udb00\udfff'
!   test_lecmp(s, s2)
  
! test_fixup(u'\ue000')
! test_fixup(u'\uff61')
  
! # Surrogates on both sides, no fixup required
! assert u'\ud800\udc02' < u'\ud84d\udc56'
! print 'done.'
  
  test('ljust', u'abc',  u'abc       ', 10)
--- 169,225 ----
  print 'done.'
  
! if 0:
!     # Move these tests to a Unicode collation module test...
  
!     print 'Testing UTF-16 code point order comparisons...',
!     #No surrogates, no fixup required.
!     assert u'\u0061' < u'\u20ac'
!     # Non surrogate below surrogate value, no fixup required
!     assert u'\u0061' < u'\ud800\udc02'
  
!     # Non surrogate above surrogate value, fixup required
!     def test_lecmp(s, s2):
!       assert s <  s2 , "comparison failed on %s < %s" % (s, s2)
  
!     def test_fixup(s):
!       s2 = u'\ud800\udc01'
!       test_lecmp(s, s2)
!       s2 = u'\ud900\udc01'
!       test_lecmp(s, s2)
!       s2 = u'\uda00\udc01'
!       test_lecmp(s, s2)
!       s2 = u'\udb00\udc01'
!       test_lecmp(s, s2)
!       s2 = u'\ud800\udd01'
!       test_lecmp(s, s2)
!       s2 = u'\ud900\udd01'
!       test_lecmp(s, s2)
!       s2 = u'\uda00\udd01'
!       test_lecmp(s, s2)
!       s2 = u'\udb00\udd01'
!       test_lecmp(s, s2)
!       s2 = u'\ud800\ude01'
!       test_lecmp(s, s2)
!       s2 = u'\ud900\ude01'
!       test_lecmp(s, s2)
!       s2 = u'\uda00\ude01'
!       test_lecmp(s, s2)
!       s2 = u'\udb00\ude01'
!       test_lecmp(s, s2)
!       s2 = u'\ud800\udfff'
!       test_lecmp(s, s2)
!       s2 = u'\ud900\udfff'
!       test_lecmp(s, s2)
!       s2 = u'\uda00\udfff'
!       test_lecmp(s, s2)
!       s2 = u'\udb00\udfff'
!       test_lecmp(s, s2)
! 
!     test_fixup(u'\ue000')
!     test_fixup(u'\uff61')
! 
!     # Surrogates on both sides, no fixup required
!     assert u'\ud800\udc02' < u'\ud84d\udc56'
!     print 'done.'
  
  test('ljust', u'abc',  u'abc       ', 10)



From python-dev@python.org  Tue Aug  8 09:04:06 2000
From: python-dev@python.org (M.-A. Lemburg)
Date: Tue, 8 Aug 2000 01:04:06 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_unicode,1.9,1.10
Message-ID: <200008080804.BAA25503@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test/output
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25447/Lib/test/output

Modified Files:
	test_unicode 
Log Message:
Removing UTF-16 aware Unicode comparison code. This kind of compare
function (together with other locale aware ones) should into a new collation
support module. See python-dev for a discussion of this removal.

Note: This patch should also be applied to the 1.6 branch.

Index: test_unicode
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_unicode,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** test_unicode	2000/07/10 15:06:06	1.9
--- test_unicode	2000/08/08 08:04:03	1.10
***************
*** 1,5 ****
  test_unicode
  Testing Unicode comparisons... done.
- Testing UTF-16 code point order comparisons... done.
  Testing Unicode contains method... done.
  Testing Unicode formatting strings... done.
--- 1,4 ----



From python-dev@python.org  Tue Aug  8 15:38:17 2000
From: python-dev@python.org (Greg Ward)
Date: Tue, 8 Aug 2000 07:38:17 -0700
Subject: [Python-checkins] CVS: distutils/distutils util.py,1.42,1.43
Message-ID: <200008081438.HAA08098@slayer.i.sourceforge.net>

Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv8087

Modified Files:
	util.py 
Log Message:
Fix so 'split_quoted()' handles any whitespace delimiter (not just space).

Index: util.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/util.py,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -r1.42 -r1.43
*** util.py	2000/08/05 01:25:24	1.42
--- util.py	2000/08/08 14:38:13	1.43
***************
*** 140,144 ****
  
  # Needed by 'split_quoted()'
! _wordchars_re = re.compile(r'[^\\\'\"\ ]*')
  _squote_re = re.compile(r"'(?:[^'\\]|\\.)*'")
  _dquote_re = re.compile(r'"(?:[^"\\]|\\.)*"')
--- 140,144 ----
  
  # Needed by 'split_quoted()'
! _wordchars_re = re.compile(r'[^\\\'\"%s ]*' % string.whitespace)
  _squote_re = re.compile(r"'(?:[^'\\]|\\.)*'")
  _dquote_re = re.compile(r'"(?:[^"\\]|\\.)*"')
***************
*** 170,174 ****
              break
  
!         if s[end] == ' ':               # unescaped, unquoted space: now
              words.append(s[:end])       # we definitely have a word delimiter
              s = string.lstrip(s[end:])
--- 170,174 ----
              break
  
!         if s[end] in string.whitespace: # unescaped, unquoted whitespace: now
              words.append(s[:end])       # we definitely have a word delimiter
              s = string.lstrip(s[end:])



From python-dev@python.org  Tue Aug  8 17:12:56 2000
From: python-dev@python.org (Guido van Rossum)
Date: Tue, 8 Aug 2000 09:12:56 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib UserDict.py,1.7,1.8
Message-ID: <200008081612.JAA03860@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv3808

Modified Files:
	UserDict.py 
Log Message:
Barry's patch to implement the new setdefault() method.


Index: UserDict.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/UserDict.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** UserDict.py	2000/02/02 15:10:14	1.7
--- UserDict.py	2000/08/08 16:12:54	1.8
***************
*** 35,36 ****
--- 35,40 ----
      def get(self, key, failobj=None):
          return self.data.get(key, failobj)
+     def setdefault(self, key, failobj=None):
+         if not self.data.has_key(key):
+             self.data[key] = failobj
+         return self.data[key]



From python-dev@python.org  Tue Aug  8 17:13:25 2000
From: python-dev@python.org (Guido van Rossum)
Date: Tue, 8 Aug 2000 09:13:25 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_types.py,1.13,1.14
Message-ID: <200008081613.JAA04937@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv4816

Modified Files:
	test_types.py 
Log Message:
Barry's patch to test the new setdefault() method.


Index: test_types.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_types.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** test_types.py	2000/02/23 22:23:17	1.13
--- test_types.py	2000/08/08 16:13:23	1.14
***************
*** 254,255 ****
--- 254,267 ----
  if d.get('a') != 1: raise TestFailed, 'present dict get, no 2nd arg'
  if d.get('a', 3) != 1: raise TestFailed, 'present dict get, w/ 2nd arg'
+ # dict.setdefault()
+ d = {}
+ if d.setdefault('key0') <> None:
+ 	raise TestFailed, 'missing {} setdefault, no 2nd arg'
+ if d.setdefault('key0') <> None:
+ 	raise TestFailed, 'present {} setdefault, no 2nd arg'
+ d.setdefault('key', []).append(3)
+ if d['key'][0] <> 3:
+ 	raise TestFailed, 'missing {} setdefault, w/ 2nd arg'
+ d.setdefault('key', []).append(4)
+ if len(d['key']) <> 2:
+ 	raise TestFailed, 'present {} setdefault, w/ 2nd arg'



From python-dev@python.org  Tue Aug  8 17:11:34 2000
From: python-dev@python.org (Guido van Rossum)
Date: Tue, 8 Aug 2000 09:11:34 -0700
Subject: [Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.61,2.62
Message-ID: <200008081611.JAA01736@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1665

Modified Files:
	dictobject.c 
Log Message:
Barry's patch to implement the new setdefault() method.


Index: dictobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v
retrieving revision 2.61
retrieving revision 2.62
diff -C2 -r2.61 -r2.62
*** dictobject.c	2000/07/22 19:25:51	2.61
--- dictobject.c	2000/08/08 16:11:31	2.62
***************
*** 951,954 ****
--- 951,989 ----
  
  static PyObject *
+ dict_setdefault(register dictobject *mp, PyObject *args)
+ {
+ 	PyObject *key;
+ 	PyObject *failobj = Py_None;
+ 	PyObject *val = NULL;
+ 	long hash;
+ 
+ 	if (!PyArg_ParseTuple(args, "O|O:setdefault", &key, &failobj))
+ 		return NULL;
+ 	if (mp->ma_table == NULL)
+ 		goto finally;
+ 
+ #ifdef CACHE_HASH
+ 	if (!PyString_Check(key) ||
+ 	    (hash = ((PyStringObject *) key)->ob_shash) == -1)
+ #endif
+ 	{
+ 		hash = PyObject_Hash(key);
+ 		if (hash == -1)
+ 			return NULL;
+ 	}
+ 	val = lookdict(mp, key, hash)->me_value;
+ 
+   finally:
+ 	if (val == NULL) {
+ 		val = failobj;
+ 		if (PyDict_SetItem((PyObject*)mp, key, failobj))
+ 			val = NULL;
+ 	}
+ 	Py_XINCREF(val);
+ 	return val;
+ }
+ 
+ 
+ static PyObject *
  dict_clear(register dictobject *mp, PyObject *args)
  {
***************
*** 994,997 ****
--- 1029,1033 ----
  	{"copy",	(PyCFunction)dict_copy},
  	{"get",         (PyCFunction)dict_get,          METH_VARARGS},
+ 	{"setdefault",  (PyCFunction)dict_setdefault,   METH_VARARGS},
  	{NULL,		NULL}		/* sentinel */
  };



From python-dev@python.org  Tue Aug  8 17:15:51 2000
From: python-dev@python.org (Guido van Rossum)
Date: Tue, 8 Aug 2000 09:15:51 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.27,1.28
Message-ID: <200008081615.JAA10277@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv10218

Modified Files:
	libstdtypes.tex 
Log Message:
Barry's patch to document the new setdefault() method.  Slightly
clarified the summary for default() in the table to indicate the side
effect.


Index: libstdtypes.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -r1.27 -r1.28
*** libstdtypes.tex	2000/08/01 00:07:17	1.27
--- libstdtypes.tex	2000/08/08 16:15:49	1.28
***************
*** 592,595 ****
--- 592,599 ----
             else \var{x}}
            {(4)}
+   \lineiii{\var{a}.setdefault(\var{k}\optional{, \var{x}})}
+           {\code{\var{a}[\var{k}]} if \code{\var{a}.has_key(\var{k})},
+            else \var{x} (also setting it)}
+           {(5)}
  \end{tableiii}
  
***************
*** 612,615 ****
--- 616,623 ----
  instead it returns \var{x}.  \var{x} is optional; when \var{x} is not
  provided and \var{k} is not in the map, \code{None} is returned.
+ 
+ \item[(5)] \function{setdefault()} is like \function{get()}, except
+ that if \var{k} is missing, \var{x} is both returned and inserted into
+ the dictionary as the value of \var{k}.
  \end{description}
  



From python-dev@python.org  Tue Aug  8 17:47:44 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Tue, 8 Aug 2000 09:47:44 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.22,1.23
Message-ID: <200008081647.JAA11560@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv9622/lib/test

Modified Files:
	test_re.py 
Log Message:


-- whitespace cleanup (more tests to be added in the next commit)

Index: test_re.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -r1.22 -r1.23
*** test_re.py	2000/08/03 12:16:29	1.22
--- test_re.py	2000/08/08 16:47:42	1.23
***************
*** 38,42 ****
  try:
      assert re.sub("(?i)b+", "x", "bbbb BBBB") == 'x x'
!     
      def bump_num(matchobj):
          int_value = int(matchobj.group(0))
--- 38,42 ----
  try:
      assert re.sub("(?i)b+", "x", "bbbb BBBB") == 'x x'
! 
      def bump_num(matchobj):
          int_value = int(matchobj.group(0))
***************
*** 45,49 ****
      assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y') == '9.3 -3 24x100y'
      assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y', 3) == '9.3 -3 23x99y'
!     
      assert re.sub('.', lambda m: r"\n", 'x') == '\\n'
      assert re.sub('.', r"\n", 'x') == '\n'
--- 45,49 ----
      assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y') == '9.3 -3 24x100y'
      assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y', 3) == '9.3 -3 23x99y'
! 
      assert re.sub('.', lambda m: r"\n", 'x') == '\\n'
      assert re.sub('.', r"\n", 'x') == '\n'
***************
*** 51,55 ****
      s = r"\1\1"
      assert re.sub('(.)', s, 'x') == 'xx'
!     assert re.sub('(.)', re.escape(s), 'x') == s 
      assert re.sub('(.)', lambda m: s, 'x') == s
  
--- 51,55 ----
      s = r"\1\1"
      assert re.sub('(.)', s, 'x') == 'xx'
!     assert re.sub('(.)', re.escape(s), 'x') == s
      assert re.sub('(.)', lambda m: s, 'x') == s
  
***************
*** 147,151 ****
  if verbose:
      print 'Running tests on re.split'
!     
  try:
      assert re.split(":", ":a:b::c") == ['', 'a', 'b', '', 'c']
--- 147,151 ----
  if verbose:
      print 'Running tests on re.split'
! 
  try:
      assert re.split(":", ":a:b::c") == ['', 'a', 'b', '', 'c']
***************
*** 166,170 ****
  
      assert re.split("(:)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']
!     assert re.split("(:*)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']    
  except AssertionError:
      raise TestFailed, "qualified re.split"
--- 166,170 ----
  
      assert re.split("(:)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']
!     assert re.split("(:*)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']
  except AssertionError:
      raise TestFailed, "qualified re.split"
***************
*** 188,201 ****
  try:
      # No groups at all
!     m = re.match('a', 'a') ; assert m.groups() == ()    
      # A single group
!     m = re.match('(a)', 'a') ; assert m.groups() == ('a',)      
  
      pat = re.compile('((a)|(b))(c)?')
!     assert pat.match('a').groups() == ('a', 'a', None, None)    
!     assert pat.match('b').groups() == ('b', None, 'b', None)    
!     assert pat.match('ac').groups() == ('a', 'a', None, 'c')    
!     assert pat.match('bc').groups() == ('b', None, 'b', 'c')    
!     assert pat.match('bc').groups("") == ('b', "", 'b', 'c')    
  except AssertionError:
      raise TestFailed, "match .groups() method"
--- 188,201 ----
  try:
      # No groups at all
!     m = re.match('a', 'a') ; assert m.groups() == ()
      # A single group
!     m = re.match('(a)', 'a') ; assert m.groups() == ('a',)
  
      pat = re.compile('((a)|(b))(c)?')
!     assert pat.match('a').groups() == ('a', 'a', None, None)
!     assert pat.match('b').groups() == ('b', None, 'b', None)
!     assert pat.match('ac').groups() == ('a', 'a', None, 'c')
!     assert pat.match('bc').groups() == ('b', None, 'b', 'c')
!     assert pat.match('bc').groups("") == ('b', "", 'b', 'c')
  except AssertionError:
      raise TestFailed, "match .groups() method"
***************
*** 203,214 ****
  try:
      # A single group
!     m = re.match('(a)', 'a') 
!     assert m.group(0) == 'a' ; assert m.group(0) == 'a' 
      assert m.group(1) == 'a' ; assert m.group(1, 1) == ('a', 'a')
  
      pat = re.compile('(?:(?Pa)|(?Pb))(?Pc)?')
!     assert pat.match('a').group(1, 2, 3) == ('a', None, None)   
!     assert pat.match('b').group('a1', 'b2', 'c3') == (None, 'b', None)  
!     assert pat.match('ac').group(1, 'b2', 3) == ('a', None, 'c')        
  except AssertionError:
      raise TestFailed, "match .group() method"
--- 203,214 ----
  try:
      # A single group
!     m = re.match('(a)', 'a')
!     assert m.group(0) == 'a' ; assert m.group(0) == 'a'
      assert m.group(1) == 'a' ; assert m.group(1, 1) == ('a', 'a')
  
      pat = re.compile('(?:(?Pa)|(?Pb))(?Pc)?')
!     assert pat.match('a').group(1, 2, 3) == ('a', None, None)
!     assert pat.match('b').group('a1', 'b2', 'c3') == (None, 'b', None)
!     assert pat.match('ac').group(1, 'b2', 3) == ('a', None, 'c')
  except AssertionError:
      raise TestFailed, "match .group() method"
***************
*** 243,248 ****
      assert re.L == re.LOCALE
      assert re.M == re.MULTILINE
!     assert re.S == re.DOTALL 
!     assert re.X == re.VERBOSE 
  except AssertionError:
      raise TestFailed, 're module constants'
--- 243,248 ----
      assert re.L == re.LOCALE
      assert re.M == re.MULTILINE
!     assert re.S == re.DOTALL
!     assert re.X == re.VERBOSE
  except AssertionError:
      raise TestFailed, 're module constants'
***************
*** 261,265 ****
      # To save time, only run the first and last 10 tests
      #tests = tests[:10] + tests[-10:]
!     pass 
  
  for t in tests:
--- 261,265 ----
      # To save time, only run the first and last 10 tests
      #tests = tests[:10] + tests[-10:]
!     pass
  
  for t in tests:
***************
*** 269,273 ****
          pattern, s, outcome, repl, expected = t
      elif len(t)==3:
!         pattern, s, outcome = t 
      else:
          raise ValueError, ('Test tuples should have 3 or 5 fields',t)
--- 269,273 ----
          pattern, s, outcome, repl, expected = t
      elif len(t)==3:
!         pattern, s, outcome = t
      else:
          raise ValueError, ('Test tuples should have 3 or 5 fields',t)
***************
*** 277,281 ****
      except re.error:
          if outcome==SYNTAX_ERROR: pass  # Expected a syntax error
!         else: 
              print '=== Syntax error:', t
      except KeyboardInterrupt: raise KeyboardInterrupt
--- 277,281 ----
      except re.error:
          if outcome==SYNTAX_ERROR: pass  # Expected a syntax error
!         else:
              print '=== Syntax error:', t
      except KeyboardInterrupt: raise KeyboardInterrupt
***************
*** 331,335 ****
              # break (because it won't match at the end or start of a
              # string), so we'll ignore patterns that feature it.
!             
              if pattern[:2]!='\\B' and pattern[-2:]!='\\B' and result!=None:
                  obj=re.compile(pattern)
--- 331,335 ----
              # break (because it won't match at the end or start of a
              # string), so we'll ignore patterns that feature it.
! 
              if pattern[:2]!='\\B' and pattern[-2:]!='\\B' and result!=None:
                  obj=re.compile(pattern)



From python-dev@python.org  Tue Aug  8 17:52:54 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Tue, 8 Aug 2000 09:52:54 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test re_tests.py,1.13,1.14
Message-ID: <200008081652.JAA16644@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv16059/lib/test

Modified Files:
	re_tests.py 
Log Message:


-- whitespace cleanup (real changes coming in next checkin)

Index: re_tests.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/re_tests.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** re_tests.py	1998/04/03 21:47:12	1.13
--- re_tests.py	2000/08/08 16:52:51	1.14
***************
*** 11,29 ****
  #
  # The benchmark suite does not test correctness, just speed.  The
! # first element of each tuple is the regex pattern; the second is a 
  # string to match it against.  The benchmarking code will embed the
! # second string inside several sizes of padding, to test how regex 
  # matching performs on large strings.
  
  benchmarks = [
!     ('Python', 'Python'),		# Simple text literal
!     ('.*Python', 'Python'),		# Bad text literal
!     ('.*Python.*', 'Python'),		# Worse text literal
!     ('.*(Python)', 'Python'),		# Bad text literal with grouping
!     
!     ('(Python|Perl|Tcl', 'Perl'),	# Alternation
!     ('(Python|Perl|Tcl)', 'Perl'),	# Grouped alternation
!     ('(Python)\\1', 'PythonPython'),	# Backreference
!     ('([0a-z][a-z]*,)+', 'a5,b7,c9,'),	# Disable the fastmap optimization
      ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets
  ]
--- 11,29 ----
  #
  # The benchmark suite does not test correctness, just speed.  The
! # first element of each tuple is the regex pattern; the second is a
  # string to match it against.  The benchmarking code will embed the
! # second string inside several sizes of padding, to test how regex
  # matching performs on large strings.
  
  benchmarks = [
!     ('Python', 'Python'),               # Simple text literal
!     ('.*Python', 'Python'),             # Bad text literal
!     ('.*Python.*', 'Python'),           # Worse text literal
!     ('.*(Python)', 'Python'),           # Bad text literal with grouping
! 
!     ('(Python|Perl|Tcl', 'Perl'),       # Alternation
!     ('(Python|Perl|Tcl)', 'Perl'),      # Grouped alternation
!     ('(Python)\\1', 'PythonPython'),    # Backreference
!     ('([0a-z][a-z]*,)+', 'a5,b7,c9,'),  # Disable the fastmap optimization
      ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets
  ]
***************
*** 48,52 ****
  # If the regex isn't expected to work, the latter two elements can be omitted.
  
! tests = [ 
      # Test ?P< and ?P= extensions
      ('(?P

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv29632/lib/test

Modified Files:
	test_re.py re_tests.py 
Log Message:


-- enabled some temporarily disabled RE tests
-- added basic unicode tests to test_re
-- added test case for Sjoerd's xmllib problem to re_tests

Index: test_re.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -r1.23 -r1.24
*** test_re.py	2000/08/08 16:47:42	1.23
--- test_re.py	2000/08/08 17:06:52	1.24
***************
*** 29,36 ****
      raise TestFailed, "re.search"
  
- # Try nasty case that overflows the straightforward recursive
- # implementation of repeated groups.
- #assert re.match('(x)*', 50000*'x').span() == (0, 50000)
- 
  if verbose:
      print 'Running tests on re.sub'
--- 29,32 ----
***************
*** 155,160 ****
      assert re.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c']
      assert re.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c']
! ##    assert re.split("(b)|(:+)", ":a:b::c") == \
! ##           ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c']
      assert re.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c']
  except AssertionError:
--- 151,156 ----
      assert re.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c']
      assert re.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c']
!     assert re.split("(b)|(:+)", ":a:b::c") == \
!            ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c']
      assert re.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c']
  except AssertionError:
***************
*** 254,257 ****
--- 250,263 ----
          print 'Exception raised on flag', flags
  
+ if verbose:
+     print 'Test engine limitations'
+ 
+ # Try nasty case that overflows the straightforward recursive
+ # implementation of repeated groups.
+ try:
+     assert re.match('(x)*', 50000*'x').span() == (0, 50000)
+ except RuntimeError, v:
+     print v
+ 
  from re_tests import *
  
***************
*** 327,330 ****
--- 333,349 ----
                  print '=== Failed incorrectly', t
  
+             # Try the match on a unicode string, and check that it
+             # still succeeds.
+             result=obj.search(unicode(s, "latin-1"))
+             if result==None:
+                 print '=== Fails on unicode match', t
+ 
+             # Try the match on a unicode pattern, and check that it
+             # still succeeds.
+             obj=re.compile(unicode(pattern, "latin-1"))
+             result=obj.search(s)
+             if result==None:
+                 print '=== Fails on unicode pattern match', t
+ 
              # Try the match with the search area limited to the extent
              # of the match and see if it still succeeds.  \B will
***************
*** 351,352 ****
--- 370,378 ----
              if result==None:
                  print '=== Fails on locale-sensitive match', t
+ 
+             # Try the match with UNICODE locale enabled, and check
+             # that it still succeeds.
+             obj=re.compile(pattern, re.UNICODE)
+             result=obj.search(s)
+             if result==None:
+                 print '=== Fails on unicode-sensitive match', t

Index: re_tests.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/re_tests.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** re_tests.py	2000/08/08 16:52:51	1.14
--- re_tests.py	2000/08/08 17:06:52	1.15
***************
*** 588,590 ****
--- 588,596 ----
      (r'\t\n\v\r\f\a', '\t\n\v\r\f\a', SUCCEED, 'found', chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)),
      (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'),
+ 
+     # additional regression tests (1.6 and later)
+ 
+     # xmllib problem
+     (r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'),
+ 
  ]



From python-dev@python.org  Tue Aug  8 18:06:56 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Tue, 8 Aug 2000 10:06:56 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_re,1.12,1.13
Message-ID: <200008081706.KAA01000@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test/output
In directory slayer.i.sourceforge.net:/tmp/cvs-serv29632/lib/test/output

Modified Files:
	test_re 
Log Message:


-- enabled some temporarily disabled RE tests
-- added basic unicode tests to test_re
-- added test case for Sjoerd's xmllib problem to re_tests

Index: test_re
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_re,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** test_re	2000/08/01 13:01:43	1.12
--- test_re	2000/08/08 17:06:53	1.13
***************
*** 1 ****
--- 1,2 ----
  test_re
+ maximum recursion limit exceeded



From python-dev@python.org  Wed Aug  9 10:14:38 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 02:14:38 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.6,1.7
Message-ID: <200008090914.CAA32078@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv31772/Lib/test

Modified Files:
	test_sre.py 
Log Message:


-- changed findall to return empty strings instead of None
   for undefined groups

Index: test_sre.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** test_sre.py	2000/08/03 16:29:50	1.6
--- test_sre.py	2000/08/09 09:14:35	1.7
***************
*** 178,181 ****
--- 178,182 ----
                                                     (":", ":"),
                                                     (":", "::")]
+     assert sre.findall("(a)|(b)", "abc") == [("a", ""), ("", "b")]
  except AssertionError:
      raise TestFailed, "sre.findall"



From python-dev@python.org  Wed Aug  9 10:14:37 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 02:14:37 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.35,2.36
Message-ID: <200008090914.CAA32072@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv31772/Modules

Modified Files:
	_sre.c 
Log Message:


-- changed findall to return empty strings instead of None
   for undefined groups

Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.35
retrieving revision 2.36
diff -C2 -r2.35 -r2.36
*** _sre.c	2000/08/07 21:02:50	2.35
--- _sre.c	2000/08/09 09:14:34	2.36
***************
*** 16,19 ****
--- 16,20 ----
   * 00-08-03 fl  added recursion limit
   * 00-08-07 fl  use PyOS_CheckStack() if available
+  * 00-08-08 fl  changed findall to return empty strings instead of None
   *
   * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
***************
*** 569,575 ****
  
  #if defined(USE_STACKCHECK)
!     if (level % 10 == 0 && PyOS_CheckStack()) {
          return SRE_ERROR_RECURSION_LIMIT;
-     }
  #endif
  
--- 570,575 ----
  
  #if defined(USE_STACKCHECK)
!     if (level % 10 == 0 && PyOS_CheckStack())
          return SRE_ERROR_RECURSION_LIMIT;
  #endif
  
***************
*** 1353,1370 ****
  state_getslice(SRE_STATE* state, int index, PyObject* string)
  {
      index = (index - 1) * 2;
  
      if (string == Py_None || !state->mark[index] || !state->mark[index+1]) {
!         Py_INCREF(Py_None);
!         return Py_None;
      }
  
!     return PySequence_GetSlice(
!         string,
!         ((char*)state->mark[index] - (char*)state->beginning) /
!         state->charsize,
!         ((char*)state->mark[index+1] - (char*)state->beginning) /
!         state->charsize
!         );
  }
  
--- 1353,1370 ----
  state_getslice(SRE_STATE* state, int index, PyObject* string)
  {
+     int i, j;
+ 
      index = (index - 1) * 2;
  
      if (string == Py_None || !state->mark[index] || !state->mark[index+1]) {
!         i = j = 0;
!     } else {
!         i = ((char*)state->mark[index] - (char*)state->beginning) /
!             state->charsize;
!         j = ((char*)state->mark[index+1] - (char*)state->beginning) /
!             state->charsize;
      }
  
!     return PySequence_GetSlice(string, i, j);
  }
  



From python-dev@python.org  Wed Aug  9 14:45:08 2000
From: python-dev@python.org (Fred L. Drake)
Date: Wed, 9 Aug 2000 06:45:08 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.78,1.79
Message-ID: <200008091345.GAA15585@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/perl
In directory slayer.i.sourceforge.net:/tmp/cvs-serv15570/perl

Modified Files:
	python.perl 
Log Message:

fix_font():  Handle one more case for the magical first column of tables.


Index: python.perl
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v
retrieving revision 1.78
retrieving revision 1.79
diff -C2 -r1.78 -r1.79
*** python.perl	2000/08/03 17:25:44	1.78
--- python.perl	2000/08/09 13:45:04	1.79
***************
*** 951,954 ****
--- 951,957 ----
          $font = 'tt class="constant"';
      }
+     elsif ($font eq 'kbd') {
+         $font = 'kbd';
+     }
      return $font;
  }



From python-dev@python.org  Wed Aug  9 15:34:51 2000
From: python-dev@python.org (Fred L. Drake)
Date: Wed, 9 Aug 2000 07:34:51 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.13,1.14
Message-ID: <200008091434.HAA26781@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv26751/lib

Modified Files:
	libcurses.tex 
Log Message:

Fix a few markup errors and lots of small consistency issues.

Add "See also" link to curses.wrapper module from curses module.


Index: libcurses.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** libcurses.tex	2000/08/04 07:35:41	1.13
--- libcurses.tex	2000/08/09 14:34:48	1.14
***************
*** 23,27 ****
                             settings.}
    \seemodule{curses.textpad}{Editable text widget for curses supporting 
! 			     Emacs-like bindings.}
    \seetext{Tutorial material on using curses with Python is available
             on the Python Web site as Andrew Kuchling's
--- 23,30 ----
                             settings.}
    \seemodule{curses.textpad}{Editable text widget for curses supporting 
! 			     \program{Emacs}-like bindings.}
!   \seemodule{curses.wrapper}{Convenience function to ensure proper
!                              terminal setup and resetting on
!                              application entry and exit.}
    \seetext{Tutorial material on using curses with Python is available
             on the Python Web site as Andrew Kuchling's
***************
*** 35,40 ****
  
  The module \module{curses} defines the following exception:
  \begin{excdesc}{error}
! Curses function returned an error status.
  \end{excdesc}
  
--- 38,44 ----
  
  The module \module{curses} defines the following exception:
+ 
  \begin{excdesc}{error}
! Exception raised when a curses library function returns an error.
  \end{excdesc}
  
***************
*** 968,973 ****
  \end{datadesc}
  
  
! \begin{tableii}{c|l}{code}{Attribute}{Meaning}
    \lineii{A_ALTCHARSET}{Alternate character set mode.}
    \lineii{A_BLINK}{Blink mode.}
--- 972,978 ----
  \end{datadesc}
  
+ Several constants are available to specify character cell attributes:
  
! \begin{tableii}{l|l}{code}{Attribute}{Meaning}
    \lineii{A_ALTCHARSET}{Alternate character set mode.}
    \lineii{A_BLINK}{Blink mode.}
***************
*** 980,989 ****
  
  Keys are referred to by integer constants with names starting with 
! \code{KEY_}.   The exact keycaps available are system dependent.
  
  % XXX this table is far too large!
  % XXX should this table be alphabetized?
  
! \begin{tableii}{c|l}{code}{Key constant}{Key}
    \lineii{KEY_MIN}{Minimum key value}
    \lineii{KEY_BREAK}{ Break key (unreliable) }
--- 985,994 ----
  
  Keys are referred to by integer constants with names starting with 
! \samp{KEY_}.   The exact keycaps available are system dependent.
  
  % XXX this table is far too large!
  % XXX should this table be alphabetized?
  
! \begin{tableii}{l|l}{code}{Key constant}{Key}
    \lineii{KEY_MIN}{Minimum key value}
    \lineii{KEY_BREAK}{ Break key (unreliable) }
***************
*** 1082,1093 ****
  \end{tableii}
  
! On VT100s and their software emulations such as X terminal emulators,
! there are normally at least four function keys (KEY_F1, KEY_F2,
! KEY_F3, KEY_F4) available and the arrow keys mapped to KEY_UP,
! KEY_DOWN, KEY_LEFT and KEY_RIGHT in the obvious way. If your machine has a PC
! keybboard, it is safe to expect arrow keys and twelve function keys; also,
! the following keypad mappings are standard:
  
! \begin{tableii}{c|l}{code}{Keycap}{code}
     \lineii{Insert}{KEY_IC}
     \lineii{Delete}{KEY_DC}
--- 1087,1100 ----
  \end{tableii}
  
! On VT100s and their software emulations, such as X terminal emulators,
! there are normally at least four function keys (\constant{KEY_F1},
! \constant{KEY_F2}, \constant{KEY_F3}, \constant{KEY_F4}) available,
! and the arrow keys mapped to \constant{KEY_UP}, \constant{KEY_DOWN},
! \constant{KEY_LEFT} and \constant{KEY_RIGHT} in the obvious way.  If
! your machine has a PC keybboard, it is safe to expect arrow keys and
! twelve function keys (older PC keyboards may have only ten function
! keys); also, the following keypad mappings are standard:
  
! \begin{tableii}{l|l}{kbd}{Keycap}{Constant}
     \lineii{Insert}{KEY_IC}
     \lineii{Delete}{KEY_DC}
***************
*** 1106,1110 ****
  been called.
  
! \begin{tableii}{c|l}{code}{ACS code}{Meaning}
    \lineii{ACS_BBSS}{alternate name for upper right corner}
    \lineii{ACS_BLOCK}{solid square block}
--- 1113,1117 ----
  been called.
  
! \begin{tableii}{l|l}{code}{ACS code}{Meaning}
    \lineii{ACS_BBSS}{alternate name for upper right corner}
    \lineii{ACS_BLOCK}{solid square block}
***************
*** 1154,1158 ****
  The following table lists the predefined colors:
  
! \begin{tableii}{c|l}{code}{Constant}{Color}
    \lineii{COLOR_BLACK}{Black}
    \lineii{COLOR_BLUE}{Blue}
--- 1161,1165 ----
  The following table lists the predefined colors:
  
! \begin{tableii}{l|l}{code}{Constant}{Color}
    \lineii{COLOR_BLACK}{Black}
    \lineii{COLOR_BLUE}{Blue}
***************
*** 1180,1187 ****
  module also provides a rectangle-drawing function useful for framing
  text boxes or for other purposes.
- 
- \subsection{Functions \label{curses-textpad-functions}}
  
! The module \module{curses.textpad} defines the following functions:
  
  \begin{funcdesc}{rectangle}{win, uly, ulx, lry, lrx}
--- 1187,1192 ----
  module also provides a rectangle-drawing function useful for framing
  text boxes or for other purposes.
  
! The module \module{curses.textpad} defines the following function:
  
  \begin{funcdesc}{rectangle}{win, uly, ulx, lry, lrx}
***************
*** 1197,1221 ****
  \end{funcdesc}
  
  \subsection{Textbox objects \label{curses-textpad-objects}}
  
  You can instantiate a \class{Textbox} object as follows:
  
! \classdesc{Textbox}{win}
! Return a textbox widget object.  The win argument should be a curses
! \class{WindowObject} in which the textbox is to be contained.  The
! edit cursor of the textbox is initially located at the upper left
! hand corner of the containin window, with coordinates (0,0). The
! instance's \member{stripspaces} flag is initially on.
  \end{classdesc}
  
! Textbox objects, have the following methods:
  
! \begin{methoddesc}{edit}{validator=None}
  This is the entry point you will normally use.  It accepts editing
! keystrokes until one of the termination keystrokes is entered.  If a
! validator function is specified, each entered keystroke is passed to
! it; command dispatch is done on the result. This method returns the
! window contents as a string; whether blanks in the window are included
! is affected by the \member{stripspaces} member.
  \end{methoddesc}
  
--- 1202,1228 ----
  \end{funcdesc}
  
+ 
  \subsection{Textbox objects \label{curses-textpad-objects}}
  
  You can instantiate a \class{Textbox} object as follows:
  
! \begin{classdesc}{Textbox}{win}
! Return a textbox widget object.  The \var{win} argument should be a
! curses \class{WindowObject} in which the textbox is to be contained.
! The edit cursor of the textbox is initially located at the upper left
! hand corner of the containin window, with coordinates \code{(0, 0)}.
! The instance's \member{stripspaces} flag is initially on.
  \end{classdesc}
  
! \class{Textbox} objects have the following methods:
  
! \begin{methoddesc}{edit}{\optional{validator}}
  This is the entry point you will normally use.  It accepts editing
! keystrokes until one of the termination keystrokes is entered.  If
! \var{validator} is supplied, it must be a function.  It will be called
! for each keystroke entered with the keystroke as a parameter; command
! dispatch is done on the result. This method returns the window
! contents as a string; whether blanks in the window are included is
! affected by the \member{stripspaces} member.
  \end{methoddesc}
  
***************
*** 1224,1228 ****
  keystrokes: 
  
! \begin{tableii}{c|l}{code}{keystroke}{action}
    \lineii{Ctrl-A}{Go to left edge of window.}
    \lineii{Ctrl-B}{Cursor left, wrapping to previous line if appropriate.}
--- 1231,1235 ----
  keystrokes: 
  
! \begin{tableii}{l|l}{kbd}{Keystroke}{Action}
    \lineii{Ctrl-A}{Go to left edge of window.}
    \lineii{Ctrl-B}{Cursor left, wrapping to previous line if appropriate.}
***************
*** 1242,1247 ****
  Move operations do nothing if the cursor is at an edge where the
  movement is not possible.  The following synonyms are supported where
! possible:  KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P,
! KEY_DOWN = Ctrl-N, KEY_BACKSPACE = Ctrl-h.
  
  All other keystrokes are treated as a command to insert the given
--- 1249,1261 ----
  Move operations do nothing if the cursor is at an edge where the
  movement is not possible.  The following synonyms are supported where
! possible:
! 
! \begin{tableii}{l|l}{constant}{Constant}{Keystroke}
!   \lineii{KEY_LEFT}{\kbd{Ctrl-B}}
!   \lineii{KEY_RIGHT}{\kbd{Ctrl-F}}
!   \lineii{KEY_UP}{\kbd{Ctrl-P}}
!   \lineii{KEY_DOWN}{\kbd{Ctrl-N}}
!   \lineii{KEY_BACKSPACE}{\kbd{Ctrl-h}}
! \end{tableii}
  
  All other keystrokes are treated as a command to insert the given
***************
*** 1255,1259 ****
  \end{methoddesc}
  
! \begin{methoddesc}{stripspaces}{}
  This data member is a flag which controls the interpretation of blanks in
  the window.  When it is on, trailing blanks on each line are ignored;
--- 1269,1273 ----
  \end{methoddesc}
  
! \begin{memberdesc}{stripspaces}
  This data member is a flag which controls the interpretation of blanks in
  the window.  When it is on, trailing blanks on each line are ignored;
***************
*** 1261,1273 ****
  to the end of that line instead, and trailing blanks are stripped when
  the window contents is gathered.
! \end{methoddesc}
  
  \section{\module{curses.wrapper} ---
!          Exception-handling wrapper for curses programs.}
  
  \declaremodule{standard}{curses.wrapper}
  \sectionauthor{Eric Raymond}{esr@thyrsus.com}
  \moduleauthor{Eric Raymond}{esr@thyrsus.com}
! \modulesynopsis{Exception-handling wrapper for curses programs.}
  \versionadded{1.6}
  
--- 1275,1288 ----
  to the end of that line instead, and trailing blanks are stripped when
  the window contents is gathered.
! \end{memberdesc}
  
+ 
  \section{\module{curses.wrapper} ---
!          Terminal handler for curses programs}
  
  \declaremodule{standard}{curses.wrapper}
  \sectionauthor{Eric Raymond}{esr@thyrsus.com}
  \moduleauthor{Eric Raymond}{esr@thyrsus.com}
! \modulesynopsis{Terminal configuration wrapper for curses programs.}
  \versionadded{1.6}
  
***************
*** 1277,1287 ****
  \function{wrapper()} will restore the terminal to a sane state before
  passing it further up the stack and generating a traceback.
- 
- \subsection{Functions \label{curses-wrapper-functions}}
  
! \begin{funcdesc}{wrapper}{func, *rest}
  Wrapper function that initializes curses and calls another function,
! \function{func}, restoring normal keyboard/screen behavior on error.
! The callable object 'func' is then passed the main window 'stdscr'
  as its first argument, followed by any other arguments passed to
  \function{wrapper()}.
--- 1292,1300 ----
  \function{wrapper()} will restore the terminal to a sane state before
  passing it further up the stack and generating a traceback.
  
! \begin{funcdesc}{wrapper}{func, \moreargs}
  Wrapper function that initializes curses and calls another function,
! \var{func}, restoring normal keyboard/screen behavior on error.
! The callable object \var{func} is then passed the main window 'stdscr'
  as its first argument, followed by any other arguments passed to
  \function{wrapper()}.



From python-dev@python.org  Wed Aug  9 15:36:13 2000
From: python-dev@python.org (Fred L. Drake)
Date: Wed, 9 Aug 2000 07:36:13 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libascii.tex,1.4,1.5
Message-ID: <200008091436.HAA27296@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv27271/lib

Modified Files:
	libascii.tex 
Log Message:

Correct version number at which the curses.ascii module was introduced.


Index: libascii.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libascii.tex,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** libascii.tex	2000/07/16 19:01:09	1.4
--- libascii.tex	2000/08/09 14:36:11	1.5
***************
*** 8,12 ****
  \sectionauthor{Eric S. Raymond}{esr@thyrsus.com}
  
! \versionadded{2.0}
  
  The \module{curses.ascii} module supplies name constants for
--- 8,12 ----
  \sectionauthor{Eric S. Raymond}{esr@thyrsus.com}
  
! \versionadded{1.6}
  
  The \module{curses.ascii} module supplies name constants for



From python-dev@python.org  Wed Aug  9 15:37:08 2000
From: python-dev@python.org (Fred L. Drake)
Date: Wed, 9 Aug 2000 07:37:08 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libreadline.tex,1.3,1.4
Message-ID: <200008091437.HAA27518@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv27508/lib

Modified Files:
	libreadline.tex 
Log Message:

Correct markup error.


Index: libreadline.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libreadline.tex,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** libreadline.tex	2000/07/19 16:56:26	1.3
--- libreadline.tex	2000/08/09 14:37:05	1.4
***************
*** 50,55 ****
  \begin{funcdesc}{set_history_length}{length}
  Set the number of lines to save in the history file.
! \func{write_history_file} uses this value to truncate the history file when
! saving.  Negative values imply unlimited history file size.
  \end{funcdesc}
  
--- 50,56 ----
  \begin{funcdesc}{set_history_length}{length}
  Set the number of lines to save in the history file.
! \function{write_history_file()} uses this value to truncate the
! history file when saving.  Negative values imply unlimited history
! file size.
  \end{funcdesc}
  



From python-dev@python.org  Wed Aug  9 15:46:24 2000
From: python-dev@python.org (Peter Schneider-Kamp)
Date: Wed, 9 Aug 2000 07:46:24 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmath.tex,1.20,1.20.2.1
Message-ID: <200008091446.HAA30832@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Doc/lib

Modified Files:
      Tag: cnri-16-start
	libmath.tex 
Log Message:

removed all occurences of rint from 1.6 (felt responsible for this one)

QUESTION: Should I do the same for 2.0?



Index: libmath.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmath.tex,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -C2 -r1.20 -r1.20.2.1
*** libmath.tex	2000/05/11 18:42:27	1.20
--- libmath.tex	2000/08/09 14:46:21	1.20.2.1
***************
*** 94,102 ****
  \end{funcdesc}
  
- \begin{funcdesc}{rint}{x, y}
- Return the integer nearest to \var{x} as a real.
- (Only available on platforms where this is in the standard C math library.)
- \end{funcdesc}
- 
  \begin{funcdesc}{sin}{x}
  Return the sine of \var{x}.
--- 94,97 ----



From python-dev@python.org  Wed Aug  9 15:46:24 2000
From: python-dev@python.org (Peter Schneider-Kamp)
Date: Wed, 9 Aug 2000 07:46:24 -0700
Subject: [Python-checkins] CVS: python/dist/src/Include mymath.h,2.9,2.9.2.1
Message-ID: <200008091446.HAA30833@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Include
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Include

Modified Files:
      Tag: cnri-16-start
	mymath.h 
Log Message:

removed all occurences of rint from 1.6 (felt responsible for this one)

QUESTION: Should I do the same for 2.0?



Index: mymath.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/mymath.h,v
retrieving revision 2.9
retrieving revision 2.9.2.1
diff -C2 -r2.9 -r2.9.2.1
*** mymath.h	2000/05/11 18:19:41	2.9
--- mymath.h	2000/08/09 14:46:21	2.9.2.1
***************
*** 49,53 ****
  #undef log10
  #undef pow
- #undef rint
  #undef sin
  #undef sinh
--- 49,52 ----
***************
*** 69,73 ****
  #define log10 log10d
  #define pow powd
- #define rint rintd
  #define sin sind
  #define sinh sinhd
--- 68,71 ----



From python-dev@python.org  Wed Aug  9 15:46:24 2000
From: python-dev@python.org (Peter Schneider-Kamp)
Date: Wed, 9 Aug 2000 07:46:24 -0700
Subject: [Python-checkins] CVS: python/dist/src/Modules mathmodule.c,2.45.2.1,2.45.2.2
Message-ID: <200008091446.HAA30844@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Modules

Modified Files:
      Tag: cnri-16-start
	mathmodule.c 
Log Message:

removed all occurences of rint from 1.6 (felt responsible for this one)

QUESTION: Should I do the same for 2.0?



Index: mathmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/mathmodule.c,v
retrieving revision 2.45.2.1
retrieving revision 2.45.2.2
diff -C2 -r2.45.2.1 -r2.45.2.2
*** mathmodule.c	2000/08/03 16:52:01	2.45.2.1
--- mathmodule.c	2000/08/09 14:46:21	2.45.2.2
***************
*** 126,133 ****
        "pow(x,y)\n\nReturn x**y.")
  #endif
- #ifdef HAVE_RINT
- FUNC1(math_rint, rint, math_rint_doc,
-       "rint(x)\n\nReturn the integer nearest to x as a real.")
- #endif
  FUNC1(math_sin, sin, math_sin_doc,
        "sin(x)\n\nReturn the sine of x.")
--- 126,129 ----
***************
*** 241,247 ****
  	{"modf",	math_modf,	0,	math_modf_doc},
  	{"pow",		math_pow,	0,	math_pow_doc},
- #ifdef HAVE_RINT
- 	{"rint",	math_rint,	0,	math_rint_doc},
- #endif
  	{"sin",		math_sin,	0,	math_sin_doc},
  	{"sinh",	math_sinh,	0,	math_sinh_doc},
--- 237,240 ----



From python-dev@python.org  Wed Aug  9 15:46:24 2000
From: python-dev@python.org (Peter Schneider-Kamp)
Date: Wed, 9 Aug 2000 07:46:24 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_math.py,1.3,1.3.2.1
Message-ID: <200008091446.HAA30837@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Lib/test

Modified Files:
      Tag: cnri-16-start
	test_math.py 
Log Message:

removed all occurences of rint from 1.6 (felt responsible for this one)

QUESTION: Should I do the same for 2.0?



Index: test_math.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_math.py,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -C2 -r1.3 -r1.3.2.1
*** test_math.py	2000/05/11 18:19:41	1.3
--- test_math.py	2000/08/09 14:46:21	1.3.2.1
***************
*** 130,139 ****
  testit('pow(2,-1)', math.pow(2,-1), 0.5)
  
- print 'rint'
- testit('rint(0.7)', math.rint(0.7), 1)
- testit('rint(-0.3)', math.rint(-0.3), 0)
- testit('rint(2.5)', math.rint(2.5), 2)
- testit('rint(3.5)', math.rint(3.5), 4) 
- 
  print 'sin'
  testit('sin(0)', math.sin(0), 0)
--- 130,133 ----



From python-dev@python.org  Wed Aug  9 15:46:24 2000
From: python-dev@python.org (Peter Schneider-Kamp)
Date: Wed, 9 Aug 2000 07:46:24 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_math,1.2,1.2.2.1
Message-ID: <200008091446.HAA30845@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/test/output
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Lib/test/output

Modified Files:
      Tag: cnri-16-start
	test_math 
Log Message:

removed all occurences of rint from 1.6 (felt responsible for this one)

QUESTION: Should I do the same for 2.0?



Index: test_math
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_math,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -C2 -r1.2 -r1.2.2.1
*** test_math	2000/05/11 18:19:41	1.2
--- test_math	2000/08/09 14:46:21	1.2.2.1
***************
*** 20,24 ****
  modf
  pow
- rint
  sin
  sinh
--- 20,23 ----



From python-dev@python.org  Wed Aug  9 19:03:17 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 11:03:17 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.141,1.142 Tkconstants.py,1.6,1.7
Message-ID: <200008091803.LAA15134@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory slayer.i.sourceforge.net:/tmp/cvs-serv14402/Lib/lib-tk

Modified Files:
	Tkinter.py Tkconstants.py 
Log Message:


-- untabification (use "diff -b" to verify)

Index: Tkinter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
retrieving revision 1.141
retrieving revision 1.142
diff -C2 -r1.141 -r1.142
*** Tkinter.py	2000/07/16 12:04:31	1.141
--- Tkinter.py	2000/08/09 18:03:11	1.142
***************
*** 32,36 ****
  import sys
  if sys.platform == "win32":
! 	import FixTk # Attempt to configure Tcl/Tk without requiring PATH
  import _tkinter # If this fails your Python may not be configured for Tk
  tkinter = _tkinter # b/w compat for export
--- 32,36 ----
  import sys
  if sys.platform == "win32":
!     import FixTk # Attempt to configure Tcl/Tk without requiring PATH
  import _tkinter # If this fails your Python may not be configured for Tk
[...6000 lines suppressed...]
!         text = text + u"\nThis should be a cedilla: \347"
!     label = Label(root, text=text)
!     label.pack()
!     test = Button(root, text="Click me!",
!               command=lambda root=root: root.test.configure(
!                   text="[%s]" % root.test['text']))
!     test.pack()
!     root.test = test
!     quit = Button(root, text="QUIT", command=root.destroy)
!     quit.pack()
!     # The following three commands are needed so the window pops
!     # up on top on Windows...
!     root.iconify()
!     root.update()
!     root.deiconify()
!     root.mainloop()
  
  if __name__ == '__main__':
!     _test()
  

Index: Tkconstants.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkconstants.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** Tkconstants.py	1998/10/01 15:54:48	1.6
--- Tkconstants.py	2000/08/09 18:03:12	1.7
***************
*** 1,3 ****
- 
  # Symbolic constants for Tk
  
--- 1,2 ----



From python-dev@python.org  Wed Aug  9 19:29:59 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 11:29:59 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.142,1.143
Message-ID: <200008091829.LAA23993@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory slayer.i.sourceforge.net:/tmp/cvs-serv21210/Lib/lib-tk

Modified Files:
	Tkinter.py 
Log Message:


-- added xview_moveto, xview_scroll, yview_moveto, yview_scroll
   to the Text method (closes Bug #110605)

Index: Tkinter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
retrieving revision 1.142
retrieving revision 1.143
diff -C2 -r1.142 -r1.143
*** Tkinter.py	2000/08/09 18:03:11	1.142
--- Tkinter.py	2000/08/09 18:29:51	1.143
***************
*** 2831,2839 ****
              return self._getdoubles(self.tk.call(self._w, 'xview'))
          self.tk.call((self._w, 'xview') + what)
!     def yview(self, *what):
          """Query and change vertical position of the view."""
!         if not what:
              return self._getdoubles(self.tk.call(self._w, 'yview'))
!         self.tk.call((self._w, 'yview') + what)
      def yview_pickplace(self, *what):
          """Obsolete function, use see."""
--- 2831,2855 ----
              return self._getdoubles(self.tk.call(self._w, 'xview'))
          self.tk.call((self._w, 'xview') + what)
!     def xview_moveto(self, fraction):
!         """Adjusts the view in the window so that FRACTION of the
!         total width of the canvas is off-screen to the left."""
!         self.tk.call(self._w, 'xview', 'moveto', fraction)
!     def xview_scroll(self, number, what):
!         """Shift the x-view according to NUMBER which is measured
!         in "units" or "pages" (WHAT)."""
!         self.tk.call(self._w, 'xview', 'scroll', number, what)
!     def yview(self, *args):
          """Query and change vertical position of the view."""
!         if not args:
              return self._getdoubles(self.tk.call(self._w, 'yview'))
!         self.tk.call((self._w, 'yview') + args)
!     def yview_moveto(self, fraction):
!         """Adjusts the view in the window so that FRACTION of the
!         total height of the canvas is off-screen to the top."""
!         self.tk.call(self._w, 'yview', 'moveto', fraction)
!     def yview_scroll(self, number, what):
!         """Shift the y-view according to NUMBER which is measured
!         in "units" or "pages" (WHAT)."""
!         self.tk.call(self._w, 'yview', 'scroll', number, what)
      def yview_pickplace(self, *what):
          """Obsolete function, use see."""



From python-dev@python.org  Wed Aug  9 19:51:04 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 11:51:04 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.143,1.144
Message-ID: <200008091851.LAA25937@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory slayer.i.sourceforge.net:/tmp/cvs-serv25615/Lib/lib-tk

Modified Files:
	Tkinter.py 
Log Message:


-- use explicit conversion instead of u-string literal in the test
   code, to make the new Tkinter.py run under 1.5.2
-- changed Text.yview argument name (for consistency with xview)

Index: Tkinter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
retrieving revision 1.143
retrieving revision 1.144
diff -C2 -r1.143 -r1.144
*** Tkinter.py	2000/08/09 18:29:51	1.143
--- Tkinter.py	2000/08/09 18:51:01	1.144
***************
*** 2839,2847 ****
          in "units" or "pages" (WHAT)."""
          self.tk.call(self._w, 'xview', 'scroll', number, what)
!     def yview(self, *args):
          """Query and change vertical position of the view."""
!         if not args:
              return self._getdoubles(self.tk.call(self._w, 'yview'))
!         self.tk.call((self._w, 'yview') + args)
      def yview_moveto(self, fraction):
          """Adjusts the view in the window so that FRACTION of the
--- 2839,2847 ----
          in "units" or "pages" (WHAT)."""
          self.tk.call(self._w, 'xview', 'scroll', number, what)
!     def yview(self, *what):
          """Query and change vertical position of the view."""
!         if not what:
              return self._getdoubles(self.tk.call(self._w, 'yview'))
!         self.tk.call((self._w, 'yview') + what)
      def yview_moveto(self, fraction):
          """Adjusts the view in the window so that FRACTION of the
***************
*** 3061,3065 ****
      text = "This is Tcl/Tk version %s" % TclVersion
      if TclVersion >= 8.1:
!         text = text + u"\nThis should be a cedilla: \347"
      label = Label(root, text=text)
      label.pack()
--- 3061,3069 ----
      text = "This is Tcl/Tk version %s" % TclVersion
      if TclVersion >= 8.1:
!         try:
!             text = text + unicode("\nThis should be a cedilla: \347",
!                                   "iso-8859-1")
!         except NameError:
!             pass # no unicode support
      label = Label(root, text=text)
      label.pack()



From python-dev@python.org  Wed Aug  9 20:12:04 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 12:12:04 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.144,1.145
Message-ID: <200008091912.MAA31666@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory slayer.i.sourceforge.net:/tmp/cvs-serv30192/Lib/lib-tk

Modified Files:
	Tkinter.py 
Log Message:


-- added optional newstate argument to Wm.state.  The newstate arg
   was added in Tk 8.3 (this fixes the first part of Bug #110605)



Index: Tkinter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
retrieving revision 1.144
retrieving revision 1.145
diff -C2 -r1.144 -r1.145
*** Tkinter.py	2000/08/09 18:51:01	1.144
--- Tkinter.py	2000/08/09 19:11:59	1.145
***************
*** 1435,1442 ****
          return self.tk.call('wm', 'sizefrom', self._w, who)
      sizefrom = wm_sizefrom
!     def wm_state(self):
!         """Return the state of this widget as one of normal,
!         icon, iconic (see wm_iconwindow) and withdrawn."""
!         return self.tk.call('wm', 'state', self._w)
      state = wm_state
      def wm_title(self, string=None):
--- 1435,1442 ----
          return self.tk.call('wm', 'sizefrom', self._w, who)
      sizefrom = wm_sizefrom
!     def wm_state(self, newstate=None):
!         """Query or set the state of this widget as one of normal, icon,
!         iconic (see wm_iconwindow), withdrawn, or zoomed (Windows only)."""
!         return self.tk.call('wm', 'state', self._w, newstate)
      state = wm_state
      def wm_title(self, string=None):



From python-dev@python.org  Wed Aug  9 20:26:50 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 12:26:50 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.145,1.146
Message-ID: <200008091926.MAA03595@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory slayer.i.sourceforge.net:/tmp/cvs-serv2757/Lib/lib-tk

Modified Files:
	Tkinter.py 
Log Message:


-- don't mess up in winfo_visualsavailable if the system only
   supports a single visual (closes bug #110603)

Index: Tkinter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
retrieving revision 1.145
retrieving revision 1.146
diff -C2 -r1.145 -r1.146
*** Tkinter.py	2000/08/09 19:11:59	1.145
--- Tkinter.py	2000/08/09 19:26:47	1.146
***************
*** 775,778 ****
--- 775,780 ----
              self.tk.call('winfo', 'visualsavailable', self._w,
                       includeids and 'includeids' or None))
+         if type(data) is StringType:
+             data = [self.tk.split(data)]
          return map(self.__winfo_parseitem, data)
      def __winfo_parseitem(self, t):



From python-dev@python.org  Wed Aug  9 20:37:20 2000
From: python-dev@python.org (Fredrik Lundh)
Date: Wed, 9 Aug 2000 12:37:20 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkconstants.py,1.7,1.8
Message-ID: <200008091937.MAA05076@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory slayer.i.sourceforge.net:/tmp/cvs-serv5038/Lib/lib-tk

Modified Files:
	Tkconstants.py 
Log Message:


-- added a couple of missing Tkinter constants (canvas item styles,
   place bordermode, etc)

Index: Tkconstants.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkconstants.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** Tkconstants.py	2000/08/09 18:03:12	1.7
--- Tkconstants.py	2000/08/09 19:37:16	1.8
***************
*** 53,56 ****
--- 53,60 ----
  BASELINE='baseline'
  
+ # -bordermode
+ INSIDE='inside'
+ OUTSIDE='outside'
+ 
  # Special tags, marks and insert positions
  SEL='sel'
***************
*** 80,81 ****
--- 84,103 ----
  MULTIPLE='multiple'
  EXTENDED='extended'
+ 
+ # Various canvas styles
+ PIESLICE='pieslice'
+ CHORD='chord'
+ ARC='arc'
+ FIRST='first'
+ LAST='last'
+ BUTT='butt'
+ PROJECTING='projecting'
+ ROUND='round'
+ BEVEL='bevel'
+ MITER='miter'
+ 
+ # Arguments to xview/yview
+ MOVETO='moveto'
+ SCROLL='scroll'
+ UNITS='units'
+ PAGES='pages'



From python-dev@python.org  Wed Aug  9 22:11:10 2000
From: python-dev@python.org (Eric S. Raymond)
Date: Wed, 9 Aug 2000 14:11:10 -0700
Subject: [Python-checkins] CVS: python/dist/src configure.in,1.141,1.142
Message-ID: <200008092111.OAA28623@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src
In directory slayer.i.sourceforge.net:/tmp/cvs-serv28543

Modified Files:
	configure.in 
Log Message:
Tweak curses.wrapper so it initializes colors if they are available.


Index: configure.in
===================================================================
RCS file: /cvsroot/python/python/dist/src/configure.in,v
retrieving revision 1.141
retrieving revision 1.142
diff -C2 -r1.141 -r1.142
*** configure.in	2000/08/05 23:28:51	1.141
--- configure.in	2000/08/09 21:11:06	1.142
***************
*** 1015,1018 ****
--- 1015,1024 ----
  # (none yet)
  
+ # Cope with the DB mess.  If we detect libdba, assume it's a version 2
+ # or later DB and should be linked first (before the DB 1.xx stuff in glibc).
+ # Also define an appropriate symbol so we can conditionalize code in the
+ # dbmmodule; the API has changed since 1.xx.
+ AC_CHECK_LIB(dba, __db_mutex_lock)
+ 
  # Linux requires this for correct f.p. operations
  AC_CHECK_FUNC(__fpu_control,



From python-dev@python.org  Wed Aug  9 22:11:10 2000
From: python-dev@python.org (Eric S. Raymond)
Date: Wed, 9 Aug 2000 14:11:10 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib/curses wrapper.py,1.4,1.5
Message-ID: <200008092111.OAA28627@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib/curses
In directory slayer.i.sourceforge.net:/tmp/cvs-serv28543/Lib/curses

Modified Files:
	wrapper.py 
Log Message:
Tweak curses.wrapper so it initializes colors if they are available.


Index: wrapper.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/curses/wrapper.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** wrapper.py	2000/07/07 21:02:22	1.4
--- wrapper.py	2000/08/09 21:11:07	1.5
***************
*** 33,36 ****
--- 33,45 ----
          stdscr.keypad(1)
  
+         # Start color, too.  Harmless if the terminal doesn't have
+         # color; user can test with has_color() later on.  The try/catch
+         # works around a minor bit of over-conscientiousness in the curses
+         # module -- the error return from C start_color() is ignorable.
+         try:
+             curses.start_color()
+         except:
+             pass
+ 
          res = apply(func, (stdscr,) + rest)
      except:



From python-dev@python.org  Wed Aug  9 22:11:10 2000
From: python-dev@python.org (Eric S. Raymond)
Date: Wed, 9 Aug 2000 14:11:10 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.14,1.15
Message-ID: <200008092111.OAA28622@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv28543/Doc/lib

Modified Files:
	libcurses.tex 
Log Message:
Tweak curses.wrapper so it initializes colors if they are available.


Index: libcurses.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** libcurses.tex	2000/08/09 14:34:48	1.14
--- libcurses.tex	2000/08/09 21:11:07	1.15
***************
*** 1301,1307 ****
  \end{funcdesc}
  
! Before calling the hook function, \function{wrapper()} turns on
! cbreak mode, turns off echo, and enables the terminal keypad.  On
! exit (whether normally or by exception) it restores cooked mode, 
! turns on echo, and disables the terminal keypad.
  
--- 1301,1308 ----
  \end{funcdesc}
  
! Before calling the hook function, \function{wrapper()} turns on cbreak
! mode, turns off echo, enables the terminal keypad, and initializes
! colors if the terminal has color support.  On exit (whether normally
! or by exception) it restores cooked mode, turns on echo, and disables
! the terminal keypad.
  



From python-dev@python.org  Wed Aug  9 22:49:34 2000
From: python-dev@python.org (Eric S. Raymond)
Date: Wed, 9 Aug 2000 14:49:34 -0700
Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.15,1.16
Message-ID: <200008092149.OAA12645@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Doc/lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv12123

Modified Files:
	libcurses.tex 
Log Message:
More on noutrefresh.


Index: libcurses.tex
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -r1.15 -r1.16
*** libcurses.tex	2000/08/09 21:11:07	1.15
--- libcurses.tex	2000/08/09 21:49:31	1.16
***************
*** 835,839 ****
  
  \begin{methoddesc}{noutrefresh}{}
! Mark for refresh but wait.
  \end{methoddesc}
  
--- 835,841 ----
  
  \begin{methoddesc}{noutrefresh}{}
! Mark for refresh but wait.  This function updates the data structure
! representing the desired state of the window, but does not force
! an update of the physical screen.
  \end{methoddesc}
  



From python-dev@python.org  Thu Aug 10 04:05:30 2000
From: python-dev@python.org (Guido van Rossum)
Date: Wed, 9 Aug 2000 20:05:30 -0700
Subject: [Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.20,1.21
Message-ID: <200008100305.UAA05018@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv5004

Modified Files:
	mailbox.py 
Log Message:
Improve MHMailbox: messages are now sorted in numerical order.
Also don't allow leading zeros in message numbers.


Index: mailbox.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/mailbox.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** mailbox.py	2000/07/09 16:44:26	1.20
--- mailbox.py	2000/08/10 03:05:26	1.21
***************
*** 156,166 ****
      def __init__(self, dirname):
          import re
!         pat = re.compile('^[0-9][0-9]*$')
          self.dirname = dirname
          files = os.listdir(self.dirname)
!         self.boxes = []
          for f in files:
              if pat.match(f):
!                 self.boxes.append(f)
  
      def next(self):
--- 156,171 ----
      def __init__(self, dirname):
          import re
!         pat = re.compile('^[1-9][0-9]*$')
          self.dirname = dirname
          files = os.listdir(self.dirname)
!         list = []
          for f in files:
              if pat.match(f):
!                 list.append(f)
!         list = map(long, list)
!         list.sort()
!         # This only works in Python 1.6 or later;
!         # before that str() added 'L':
!         self.boxes = map(str, list)
  
      def next(self):



From python-dev@python.org  Thu Aug 10 04:51:12 2000
From: python-dev@python.org (Peter Schneider-Kamp)
Date: Wed, 9 Aug 2000 20:51:12 -0700
Subject: [Python-checkins] CVS: python/nondist/sf-html sf-faq.html,1.11,1.12
Message-ID: <200008100351.UAA14446@slayer.i.sourceforge.net>

Update of /cvsroot/python/python/nondist/sf-html
In directory slayer.i.sourceforge.net:/tmp/cvs-serv14417

Modified Files:
	sf-faq.html 
Log Message:

added question about forcing a branch tag on files



Index: sf-faq.html
===================================================================
RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** sf-faq.html	2000/07/25 10:39:58	1.11
--- sf-faq.html	2000/08/10 03:51:09	1.12
***************
*** 35,38 ****
--- 35,39 ----
    
  • How to revert changes?
  • How to add binary files?
  • +
  • How to force a branch tag on a file?
  • *************** *** 342,345 **** --- 343,362 ---- cvs commit newfile.bin
    + +

    2.8.:

    + +

    Q: How to force a branch tag on a file?

    + +

    A:

    + The quickest way to force a branch tag branch_tag on a file is to + issue the command + +
    + cvs tag -F -b -r revision branch_tag file
    +
    + for each file, where revision is the revision where the tag should be + and file is the file. Note that -F means force (otherwise + you get a complaint because the tag is already defined) and -b means + branch which makes the tag a branch tag.

    3. Patches

    From python-dev@python.org Thu Aug 10 04:52:07 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 20:52:07 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.55,2.55.2.1 configure,1.113,1.113.2.1 configure.in,1.121,1.121.2.1 Message-ID: <200008100352.UAA14589@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv14550 Modified Files: Tag: cnri-16-start config.h.in configure configure.in Log Message: remove remaining occurence of rint from config* files Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.55 retrieving revision 2.55.2.1 diff -C2 -r2.55 -r2.55.2.1 *** config.h.in 2000/05/11 18:41:31 2.55 --- config.h.in 2000/08/10 03:52:03 2.55.2.1 *************** *** 382,388 **** #undef HAVE_READLINK - /* Define if you have the rint function. */ - #undef HAVE_RINT - /* Define if you have the select function. */ #undef HAVE_SELECT --- 382,385 ---- Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.113 retrieving revision 1.113.2.1 diff -C2 -r1.113 -r1.113.2.1 *** configure 2000/05/11 18:41:31 1.113 --- configure 2000/08/10 03:52:03 1.113.2.1 *************** *** 5004,5070 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - for ac_func in rint - do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 - echo "configure:5013: checking for $ac_func" >&5 - if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - /* Override any gcc2 internal prototype to avoid an error. */ - /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ - char $ac_func(); - - int main() { - - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ - #if defined (__stub_$ac_func) || defined (__stub___$ac_func) - choke me - #else - $ac_func(); - #endif - - ; return 0; } - EOF - if { (eval echo configure:5041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" - fi - rm -f conftest* - fi - - if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 - fi - done - - LIBS=$LIBS_SAVE - # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5069: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5004,5010 ---- LIBS=$LIBS_SAVE # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5009: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5074,5078 **** else cat > conftest.$ac_ext < --- 5014,5018 ---- else cat > conftest.$ac_ext < *************** *** 5086,5090 **** } EOF ! if { (eval echo configure:5089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes --- 5026,5030 ---- } EOF ! if { (eval echo configure:5029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes *************** *** 5104,5108 **** # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5107: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5044,5048 ---- # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5047: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5112,5116 **** else cat > conftest.$ac_ext < --- 5052,5056 ---- else cat > conftest.$ac_ext < *************** *** 5131,5135 **** } EOF ! if { (eval echo configure:5134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull --- 5071,5075 ---- } EOF ! if { (eval echo configure:5074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull *************** *** 5157,5171 **** ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5160: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5170: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then --- 5097,5111 ---- ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5100: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then *************** *** 5197,5206 **** usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 ! echo "configure:5200: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&6 ! echo "configure:5140: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF --- 5156,5160 ---- EOF ! if { (eval echo configure:5159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF *************** *** 5235,5239 **** # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5238: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5175,5179 ---- # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5178: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5242,5246 **** # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < --- 5182,5186 ---- # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < *************** *** 5253,5261 **** ; return 0; } EOF ! if { (eval echo configure:5256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < --- 5193,5201 ---- ; return 0; } EOF ! if { (eval echo configure:5196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < *************** *** 5268,5272 **** ; return 0; } EOF ! if { (eval echo configure:5271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes --- 5208,5212 ---- ; return 0; } EOF ! if { (eval echo configure:5211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes *************** *** 5288,5292 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no --- 5241,5245 ---- } EOF ! if { (eval echo configure:5244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no *************** *** 5327,5331 **** # Check for --with-wctype-functions echo $ac_n "checking for --with-wctype-functions""... $ac_c" 1>&6 ! echo "configure:5330: checking for --with-wctype-functions" >&5 # Check whether --with-wctype-functions or --without-wctype-functions was given. if test "${with_wctype_functions+set}" = set; then --- 5267,5271 ---- # Check for --with-wctype-functions echo $ac_n "checking for --with-wctype-functions""... $ac_c" 1>&6 ! echo "configure:5270: checking for --with-wctype-functions" >&5 # Check whether --with-wctype-functions or --without-wctype-functions was given. if test "${with_wctype_functions+set}" = set; then Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.121 retrieving revision 1.121.2.1 diff -C2 -r1.121 -r1.121.2.1 *** configure.in 2000/05/11 18:41:32 1.121 --- configure.in 2000/08/10 03:52:03 1.121.2.1 *************** *** 997,1006 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - AC_CHECK_FUNCS(rint) - LIBS=$LIBS_SAVE - # check for getopt AC_MSG_CHECKING(for genuine getopt) --- 997,1000 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmath.tex,1.22,1.23 Message-ID: <200008100423.VAA20591@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Doc/lib Modified Files: libmath.tex Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: libmath.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmath.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** libmath.tex 2000/07/03 06:38:17 1.22 --- libmath.tex 2000/08/10 04:23:29 1.23 *************** *** 98,106 **** \end{funcdesc} - \begin{funcdesc}{rint}{x, y} - Return the integer nearest to \var{x} as a real. - (Only available on platforms where this is in the standard C math library.) - \end{funcdesc} - \begin{funcdesc}{sin}{x} Return the sine of \var{x}. --- 98,101 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include mymath.h,2.13,2.14 pyport.h,2.11,2.12 Message-ID: <200008100423.VAA20596@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Include Modified Files: mymath.h pyport.h Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: mymath.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/mymath.h,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** mymath.h 2000/07/31 22:19:30 2.13 --- mymath.h 2000/08/10 04:23:29 2.14 *************** *** 56,60 **** #undef log10 #undef pow - #undef rint #undef sin #undef sinh --- 56,59 ---- *************** *** 76,80 **** #define log10 log10d #define pow powd - #define rint rintd #define sin sind #define sinh sinhd --- 75,78 ---- Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.11 retrieving revision 2.12 diff -C2 -r2.11 -r2.12 *** pyport.h 2000/08/01 18:28:44 2.11 --- pyport.h 2000/08/10 04:23:29 2.12 *************** *** 194,198 **** #undef log10 #undef pow - #undef rint #undef sin #undef sinh --- 194,197 ---- *************** *** 214,218 **** #define log10 log10d #define pow powd - #define rint rintd #define sin sind #define sinh sinhd --- 213,216 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_math.py,1.4,1.5 Message-ID: <200008100423.VAA20605@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Lib/test Modified Files: test_math.py Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: test_math.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_math.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_math.py 2000/06/01 17:59:17 1.4 --- test_math.py 2000/08/10 04:23:30 1.5 *************** *** 130,145 **** testit('pow(2,-1)', math.pow(2,-1), 0.5) - print 'rint' - try: - math.rint - except AttributeError: - # this platform does not have rint, that is fine, skip the test - pass - else: - testit('rint(0.7)', math.rint(0.7), 1) - testit('rint(-0.3)', math.rint(-0.3), 0) - testit('rint(2.5)', math.rint(2.5), 2) - testit('rint(3.5)', math.rint(3.5), 4) - print 'sin' testit('sin(0)', math.sin(0), 0) --- 130,133 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules mathmodule.c,2.52,2.53 Message-ID: <200008100423.VAA20613@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Modules Modified Files: mathmodule.c Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: mathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/mathmodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** mathmodule.c 2000/07/31 15:28:04 2.52 --- mathmodule.c 2000/08/10 04:23:30 2.53 *************** *** 130,137 **** "pow(x,y)\n\nReturn x**y.") #endif - #ifdef HAVE_RINT - FUNC1(rint, rint, - "rint(x)\n\nReturn the integer nearest to x as a real.") - #endif FUNC1(sin, sin, "sin(x)\n\nReturn the sine of x.") --- 130,133 ---- *************** *** 241,247 **** {"modf", math_modf, METH_VARARGS, math_modf_doc}, {"pow", math_pow, METH_VARARGS, math_pow_doc}, - #ifdef HAVE_RINT - {"rint", math_rint, METH_VARARGS, math_rint_doc}, - #endif {"sin", math_sin, METH_VARARGS, math_sin_doc}, {"sinh", math_sinh, METH_VARARGS, math_sinh_doc}, --- 237,240 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_math,1.2,1.3 Message-ID: <200008100423.VAA20612@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Lib/test/output Modified Files: test_math Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: test_math =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_math,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_math 2000/05/11 18:19:41 1.2 --- test_math 2000/08/10 04:23:30 1.3 *************** *** 20,24 **** modf pow - rint sin sinh --- 20,23 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib profile.py,1.23,1.24 Message-ID: <200008100423.VAA20601@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Lib Modified Files: profile.py Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: profile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/profile.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** profile.py 2000/07/16 12:04:30 1.23 --- profile.py 2000/08/10 04:23:29 1.24 *************** *** 391,395 **** # of events during sub functions) that are seen. If this were # done, then the arithmetic could be done after the fact (i.e., at ! # display time). Currintly, we track only call/return events. # These values can be deduced by examining the callees and callers # vectors for each functions. Hence we *can* almost correct the --- 391,395 ---- # of events during sub functions) that are seen. If this were # done, then the arithmetic could be done after the fact (i.e., at ! # display time). Currently, we track only call/return events. # These values can be deduced by examining the callees and callers # vectors for each functions. Hence we *can* almost correct the From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.132,1.133 configure.in,1.142,1.143 Message-ID: <200008100423.VAA20597@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310 Modified Files: configure configure.in Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.132 retrieving revision 1.133 diff -C2 -r1.132 -r1.133 *** configure 2000/08/05 23:28:51 1.132 --- configure 2000/08/10 04:23:28 1.133 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.140 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.142 # Guess values for system-dependent variables and create Makefiles. *************** *** 5085,5096 **** # (none yet) # Linux requires this for correct f.p. operations echo $ac_n "checking for __fpu_control""... $ac_c" 1>&6 ! echo "configure:5090: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 + echo "configure:5093: checking for __db_mutex_lock in -ldba" >&5 + ac_lib_var=`echo dba'_'__db_mutex_lock | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + ac_save_LIBS="$LIBS" + LIBS="-ldba $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" + fi + rm -f conftest* + LIBS="$ac_save_LIBS" + + fi + if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo dba | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 + fi + + # Linux requires this for correct f.p. operations echo $ac_n "checking for __fpu_control""... $ac_c" 1>&6 ! echo "configure:5142: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" --- 5167,5171 ---- ; return 0; } EOF ! if { (eval echo configure:5170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" *************** *** 5133,5137 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5136: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then --- 5185,5189 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5188: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then *************** *** 5141,5145 **** LIBS="-lieee $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 5204,5208 ---- ; return 0; } EOF ! if { (eval echo configure:5207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 5185,5189 **** # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5188: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then --- 5237,5241 ---- # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5240: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then *************** *** 5210,5214 **** esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5213: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then --- 5262,5266 ---- esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5265: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then *************** *** 5231,5235 **** echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5234: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then --- 5283,5287 ---- echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5286: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then *************** *** 5255,5264 **** do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5258: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5310: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 5335,5339 ---- ; return 0; } EOF ! if { (eval echo configure:5338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** *** 5311,5377 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - for ac_func in rint - do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 - echo "configure:5320: checking for $ac_func" >&5 - if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - /* Override any gcc2 internal prototype to avoid an error. */ - /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ - char $ac_func(); - - int main() { - - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ - #if defined (__stub_$ac_func) || defined (__stub___$ac_func) - choke me - #else - $ac_func(); - #endif - - ; return 0; } - EOF - if { (eval echo configure:5348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" - fi - rm -f conftest* - fi - - if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 - fi - done - - LIBS=$LIBS_SAVE - # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5376: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5363,5369 ---- LIBS=$LIBS_SAVE # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5368: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5381,5385 **** else cat > conftest.$ac_ext < --- 5373,5377 ---- else cat > conftest.$ac_ext < *************** *** 5393,5397 **** } EOF ! if { (eval echo configure:5396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes --- 5385,5389 ---- } EOF ! if { (eval echo configure:5388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes *************** *** 5411,5415 **** # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5414: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5403,5407 ---- # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5406: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5419,5423 **** else cat > conftest.$ac_ext < --- 5411,5415 ---- else cat > conftest.$ac_ext < *************** *** 5438,5442 **** } EOF ! if { (eval echo configure:5441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull --- 5430,5434 ---- } EOF ! if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull *************** *** 5464,5478 **** ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5467: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5477: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then --- 5456,5470 ---- ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5459: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then *************** *** 5504,5513 **** usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 ! echo "configure:5507: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&6 ! echo "configure:5499: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF --- 5515,5519 ---- EOF ! if { (eval echo configure:5518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF *************** *** 5542,5546 **** # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5545: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5534,5538 ---- # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5537: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5549,5553 **** # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < --- 5541,5545 ---- # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < *************** *** 5560,5568 **** ; return 0; } EOF ! if { (eval echo configure:5563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < --- 5552,5560 ---- ; return 0; } EOF ! if { (eval echo configure:5555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < *************** *** 5575,5579 **** ; return 0; } EOF ! if { (eval echo configure:5578: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes --- 5567,5571 ---- ; return 0; } EOF ! if { (eval echo configure:5570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes *************** *** 5595,5599 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no --- 5600,5604 ---- } EOF ! if { (eval echo configure:5603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no *************** *** 5635,5639 **** # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5638: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5627,5631 ---- # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5630: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5644,5648 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes --- 5645,5649 ---- EOF ! if { (eval echo configure:5648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes *************** *** 5685,5694 **** EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5688: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5677,5686 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5680: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.142 retrieving revision 1.143 diff -C2 -r1.142 -r1.143 *** configure.in 2000/08/09 21:11:06 1.142 --- configure.in 2000/08/10 04:23:29 1.143 *************** *** 1076,1085 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - AC_CHECK_FUNCS(rint) - LIBS=$LIBS_SAVE - # check for getopt AC_MSG_CHECKING(for genuine getopt) --- 1076,1079 ---- From python-dev@python.org Thu Aug 10 11:59:06 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 10 Aug 2000 12:59:06 +0200 Subject: [Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.20,1.21 In-Reply-To: Your message of Wed, 09 Aug 2000 20:05:30 -0700. <200008100305.UAA05018@slayer.i.sourceforge.net> References: <200008100305.UAA05018@slayer.i.sourceforge.net> Message-ID: <20000810105907.713B331047C@bireme.oratrix.nl> On Wed, Aug 9 2000 Guido van Rossum wrote: > files = os.listdir(self.dirname) > ! list = [] > for f in files: > if pat.match(f): > ! list.append(f) > ! list = map(long, list) > ! list.sort() Isn't this just: list = os.listdir(self.dirname) list = filter(pat.match, list) list = map(long, list) list.sort() Or even shorter: list = map(long, filter(pat.match, os.listdir(self.dirname))) list.sort() (Although I can and do see the advantage of the slightly longer version.) -- Sjoerd Mullender From python-dev@python.org Thu Aug 10 15:02:28 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Thu, 10 Aug 2000 07:02:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib smtplib.py,1.25,1.26 Message-ID: <200008101402.HAA31335@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv30398 Modified Files: smtplib.py Log Message: add better algorithm to get fully qualified domain name for localhost in smtplib.ehlo() and smtplib.helo(). closes patch #101103 closes bug #110935 Index: smtplib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/smtplib.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** smtplib.py 2000/07/16 12:04:30 1.25 --- smtplib.py 2000/08/10 14:02:23 1.26 *************** *** 99,103 **** - class SMTPDataError(SMTPResponseException): """The SMTP server didn't accept the data.""" --- 99,102 ---- *************** *** 109,112 **** --- 108,112 ---- """The server refused our HELO reply.""" + def quoteaddr(addr): """Quote a subset of the email addresses defined by RFC 821. *************** *** 134,137 **** --- 134,155 ---- re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data)) + def _get_fqdn_hostname(name): + name = string.strip(name) + if len(name) == 0: + name = socket.gethostname() + try: + hostname, aliases, ipaddrs = socket.gethostbyaddr(name) + except socket.error: + pass + else: + aliases.insert(0, hostname) + for name in aliases: + if '.' in name: + break + else: + name = hostname + return name + + class SMTP: """This class manages a connection to an SMTP or ESMTP server. *************** *** 289,300 **** host. """ ! name=string.strip(name) ! if len(name)==0: ! name = socket.gethostname() ! try: ! name = socket.gethostbyaddr(name)[0] ! except socket.error: ! pass ! self.putcmd("helo",name) (code,msg)=self.getreply() self.helo_resp=msg --- 307,311 ---- host. """ ! self.putcmd("helo", _get_fqdn_hostname(name)) (code,msg)=self.getreply() self.helo_resp=msg *************** *** 306,317 **** host. """ ! name=string.strip(name) ! if len(name)==0: ! name = socket.gethostname() ! try: ! name = socket.gethostbyaddr(name)[0] ! except socket.error: ! pass ! self.putcmd("ehlo",name) (code,msg)=self.getreply() # According to RFC1869 some (badly written) --- 317,321 ---- host. """ ! self.putcmd("ehlo", _get_fqdn_hostname(name)) (code,msg)=self.getreply() # According to RFC1869 some (badly written) From python-dev@python.org Thu Aug 10 15:49:42 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 07:49:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects listobject.c,2.69.2.1,2.69.2.2 Message-ID: <200008101449.HAA14181@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv14170 Modified Files: Tag: cnri-16-start listobject.c Log Message: Migrate Fredrik Lundh's patch to add support for arbitrary sequences to [].extend() to the 1.6 branch; this is needed to pass the regression test for the SRE code. Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.69.2.1 retrieving revision 2.69.2.2 diff -C2 -r2.69.2.1 -r2.69.2.2 *** listobject.c 2000/08/03 16:48:51 2.69.2.1 --- listobject.c 2000/08/10 14:49:39 2.69.2.2 *************** *** 593,606 **** return NULL; ! if (!PyList_Check(b)) { ! PyErr_SetString(PyExc_TypeError, ! "list.extend() argument must be a list"); return NULL; ! } ! if (PyList_GET_SIZE(b) == 0) { /* short circuit when b is empty */ ! Py_INCREF(Py_None); ! return Py_None; ! } if (self == (PyListObject*)b) { /* as in list_ass_slice() we must special case the --- 593,604 ---- return NULL; ! b = PySequence_Fast(b, "list.extend() argument must be a sequence"); ! if (!b) return NULL; ! ! if (PyObject_Length(b) == 0) /* short circuit when b is empty */ ! goto ok; ! if (self == (PyListObject*)b) { /* as in list_ass_slice() we must special case the *************** *** 610,613 **** --- 608,612 ---- * list_slice() the way list_ass_slice() does. */ + Py_DECREF(b); b = PyList_New(selflen); if (!b) *************** *** 619,649 **** } } ! else ! /* we want b to have the same refcount semantics for the ! * Py_XDECREF() in the finally clause regardless of which ! * branch in the above conditional we took. ! */ ! Py_INCREF(b); - blen = PyList_GET_SIZE(b); /* resize a using idiom */ items = self->ob_item; NRESIZE(items, PyObject*, selflen + blen); ! if (items == NULL ) { PyErr_NoMemory(); ! goto finally; } self->ob_item = items; ! /* populate the end self with b's items */ for (i = 0; i < blen; i++) { ! PyObject *o = PyList_GET_ITEM(b, i); Py_INCREF(o); PyList_SET_ITEM(self, self->ob_size++, o); } res = Py_None; Py_INCREF(res); ! finally: ! Py_XDECREF(b); return res; } --- 618,644 ---- } } ! ! blen = PyObject_Length(b); /* resize a using idiom */ items = self->ob_item; NRESIZE(items, PyObject*, selflen + blen); ! if (items == NULL) { PyErr_NoMemory(); ! goto failed; } self->ob_item = items; ! /* populate the end of self with b's items */ for (i = 0; i < blen; i++) { ! PyObject *o = PySequence_Fast_GET_ITEM(b, i); Py_INCREF(o); PyList_SET_ITEM(self, self->ob_size++, o); } + ok: res = Py_None; Py_INCREF(res); ! failed: ! Py_DECREF(b); return res; } From python-dev@python.org Thu Aug 10 19:13:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 11:13:29 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.121.2.1,1.121.2.2 configure,1.113.2.1,1.113.2.2 Message-ID: <200008101813.LAA11064@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv10958 Modified Files: Tag: cnri-16-start configure.in configure Log Message: Merged patch 1.132->1.133 into Python 1.6 branch; this avoids use of GNU Pth pthreads implementation when something else is available (such as LinuxThreads). GNU Pth is not sufficiently stable to be preferred over other implementations. Patch contributed by Gregor Hoffleit . Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.121.2.1 retrieving revision 1.121.2.2 diff -C2 -r1.121.2.1 -r1.121.2.2 *** configure.in 2000/08/10 03:52:03 1.121.2.1 --- configure.in 2000/08/10 18:13:25 1.121.2.2 *************** *** 655,662 **** AC_DEFINE(C_THREADS) LIBOBJS="$LIBOBJS thread.o"],[ - AC_CHECK_LIB(pth, pth_init, [AC_DEFINE(WITH_THREAD) - AC_DEFINE(_GNU_PTH) - LIBS="-lpth $LIBS" - LIBOBJS="$LIBOBJS thread.o"],[ AC_CHECK_LIB(pthread, pthread_create, [AC_DEFINE(WITH_THREAD) AC_DEFINE(_POSIX_THREADS) --- 655,658 ---- *************** *** 681,684 **** --- 677,684 ---- LIBS="$LIBS -lthread" LIBOBJS="$LIBOBJS thread.o"], [ + AC_CHECK_LIB(pth, pth_init, [AC_DEFINE(WITH_THREAD) + AC_DEFINE(_GNU_PTH) + LIBS="-lpth $LIBS" + LIBOBJS="$LIBOBJS thread.o"],[ AC_CHECK_LIB(cma, pthread_create, [AC_DEFINE(WITH_THREAD) AC_DEFINE(_POSIX_THREADS) Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.113.2.1 retrieving revision 1.113.2.2 diff -C2 -r1.113.2.1 -r1.113.2.2 *** configure 2000/08/10 03:52:03 1.113.2.1 --- configure 2000/08/10 18:13:25 1.113.2.2 *************** *** 1,8 **** #! /bin/sh ! # From configure.in Revision: 1.121 # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # --- 1,8 ---- #! /bin/sh [...3675 lines suppressed...] ! echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) --- 5398,5402 ---- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ! echo "$CONFIG_STATUS generated by autoconf version 2.14.1" exit 0 ;; -help | --help | --hel | --he | --h) *************** *** 5673,5676 **** chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 --- 5696,5699 ---- chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 From python-dev@python.org Thu Aug 10 19:32:07 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 11:32:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.70.2.3,2.70.2.4 Message-ID: <200008101832.LAA28292@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv28221/Objects Modified Files: Tag: cnri-16-start object.c Log Message: Merged patch 2.79->2.80 into the Python 1.6 branch; this patch causes str() and repr() to convert Unicode strings returned by __str__() and __repr__() methods to 8-bits strings in the default encoding. This is needed to pass the regression tests. Patch contributed by Marc-Andre Lemburg. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.70.2.3 retrieving revision 2.70.2.4 diff -C2 -r2.70.2.3 -r2.70.2.4 *** object.c 2000/08/07 19:11:41 2.70.2.3 --- object.c 2000/08/10 18:32:05 2.70.2.4 *************** *** 227,230 **** --- 227,238 ---- if (res == NULL) return NULL; + if (PyUnicode_Check(res)) { + PyObject* str; + str = PyUnicode_AsEncodedString(res, NULL, NULL); + if (str) { + Py_DECREF(res); + res = str; + } + } if (!PyString_Check(res)) { PyErr_Format(PyExc_TypeError, *************** *** 264,267 **** --- 272,283 ---- if (res == NULL) return NULL; + if (PyUnicode_Check(res)) { + PyObject* str; + str = PyUnicode_AsEncodedString(res, NULL, NULL); + if (str) { + Py_DECREF(res); + res = str; + } + } if (!PyString_Check(res)) { PyErr_Format(PyExc_TypeError, From python-dev@python.org Thu Aug 10 19:36:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 11:36:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.159.2.1,2.159.2.2 Message-ID: <200008101836.LAA00461@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv396/Python Modified Files: Tag: cnri-16-start bltinmodule.c Log Message: Merged patch 2.166->2.168 into the Python 1.6 branch; this patch changes the unicode() built-in function to use the PyUnicode_FromEncodedObject() API when appropriate. This is needed to pass the regression tests. Some unused variables in the unicode() implementation were removed as well. This patch contains changes contributed by Marc-Andre Lemburg and Tim Peters. Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.159.2.1 retrieving revision 2.159.2.2 diff -C2 -r2.159.2.1 -r2.159.2.2 *** bltinmodule.c 2000/08/03 16:50:35 2.159.2.1 --- bltinmodule.c 2000/08/10 18:36:25 2.159.2.2 *************** *** 136,141 **** { PyObject *v; - const void *buffer; - int len; char *encoding = NULL; char *errors = NULL; --- 136,139 ---- *************** *** 143,160 **** if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) ) return NULL; ! /* Special case: Unicode will stay Unicode */ ! if (PyUnicode_Check(v)) { ! if (encoding) { ! PyErr_SetString(PyExc_TypeError, ! "unicode() does not support decoding of Unicode objects"); ! return NULL; ! } ! Py_INCREF(v); ! return v; ! } ! /* Read raw data and decode it */ ! if (PyObject_AsReadBuffer(v, &buffer, &len)) ! return NULL; ! return PyUnicode_Decode((const char *)buffer, len, encoding, errors); } --- 141,145 ---- if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) ) return NULL; ! return PyUnicode_FromEncodedObject(v, encoding, errors); } From python-dev@python.org Thu Aug 10 21:48:51 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 13:48:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.56,2.56.2.1 Message-ID: <200008102048.NAA05532@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv5523/Objects Modified Files: Tag: cnri-16-start unicodeobject.c Log Message: Make sure we pick up the prototype for fabs(); eliminates a compiler warning. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.56 retrieving revision 2.56.2.1 diff -C2 -r2.56 -r2.56.2.1 *** unicodeobject.c 2000/08/08 08:04:29 2.56 --- unicodeobject.c 2000/08/10 20:48:48 2.56.2.1 *************** *** 68,71 **** --- 68,73 ---- #include "ucnhash.h" + #include "mymath.h" /* need fabs() */ + #if defined(HAVE_LIMITS_H) #include From python-dev@python.org Thu Aug 10 22:19:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:19:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.73.2.1,2.73.2.2 Message-ID: <200008102119.OAA16495@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv16487/Objects Modified Files: Tag: cnri-16-start fileobject.c Log Message: Merge patch 2.77->2.78 into Python 1.6 branch. This is needed to avoid symbol clashes with glibc headers when _GNU_SOURCE is defined. (glibc defines getline(), which is also used as the name of a static function in this source file.) Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.73.2.1 retrieving revision 2.73.2.2 diff -C2 -r2.73.2.1 -r2.73.2.2 *** fileobject.c 2000/08/03 16:48:51 2.73.2.1 --- fileobject.c 2000/08/10 21:19:39 2.73.2.2 *************** *** 572,576 **** static PyObject * ! getline(f, n) PyFileObject *f; int n; --- 572,576 ---- static PyObject * ! get_line(f, n) PyFileObject *f; int n; *************** *** 694,698 **** if (((PyFileObject*)f)->f_fp == NULL) return err_closed(); ! return getline((PyFileObject *)f, n); } --- 694,698 ---- if (((PyFileObject*)f)->f_fp == NULL) return err_closed(); ! return get_line((PyFileObject *)f, n); } *************** *** 714,718 **** if (n < 0) n = 0; ! return getline(f, n); } --- 714,718 ---- if (n < 0) n = 0; ! return get_line(f, n); } *************** *** 808,812 **** if (sizehint > 0) { /* Need to complete the last line */ ! PyObject *rest = getline(f, 0); if (rest == NULL) { Py_DECREF(line); --- 808,812 ---- if (sizehint > 0) { /* Need to complete the last line */ ! PyObject *rest = get_line(f, 0); if (rest == NULL) { Py_DECREF(line); From python-dev@python.org Thu Aug 10 22:28:51 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:28:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include Python.h,2.16.2.1,2.16.2.2 Message-ID: <200008102128.OAA17444@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv17437/Include Modified Files: Tag: cnri-16-start Python.h Log Message: Merge in first half of 2.19->2.20 patch to pick up as many definitions from the glibc headers as possible. The second half is omitted since it was later disabled. This is needed to prevent warnings about strptime() in Modules/timemodule.c for glibc-based platforms. Original patch contributed by Marc-Andre Lemburg. Index: Python.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/Python.h,v retrieving revision 2.16.2.1 retrieving revision 2.16.2.2 diff -C2 -r2.16.2.1 -r2.16.2.2 *** Python.h 2000/08/03 16:48:06 2.16.2.1 --- Python.h 2000/08/10 21:28:49 2.16.2.2 *************** *** 3,6 **** --- 3,12 ---- /* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ + /* Enable compiler features; switching on C lib defines doesn't work + here, because the symbols haven't necessarily been defined yet. */ + #ifndef _GNU_SOURCE + # define _GNU_SOURCE 1 + #endif + /* Include nearly all Python header files */ From python-dev@python.org Thu Aug 10 22:40:13 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:40:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.8,2.8.2.1 Message-ID: <200008102140.OAA18434@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv18419 Modified Files: Tag: cnri-16-start _localemodule.c Log Message: Clean up compiler warning exposed by GCC's -Wall option: make sure Python.h is included before standard headers since we set _GNU_SOURCE there. This ensures that strdup() is prototyped. Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.8 retrieving revision 2.8.2.1 diff -C2 -r2.8 -r2.8.2.1 *** _localemodule.c 2000/05/03 22:30:13 2.8 --- _localemodule.c 2000/08/10 21:40:10 2.8.2.1 *************** *** 9,12 **** --- 9,14 ---- ******************************************************************/ + #include "Python.h" + #include #include *************** *** 15,19 **** #include #include - #include "Python.h" #ifdef macintosh char *strdup Py_PROTO((char *)); --- 17,20 ---- From python-dev@python.org Thu Aug 10 22:41:11 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:41:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.14,2.15 Message-ID: <200008102141.OAA18495@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv18487 Modified Files: _localemodule.c Log Message: Clean up compiler warning exposed by GCC's -Wall option: make sure Python.h is included before standard headers since we set _GNU_SOURCE there. This ensures that strdup() is prototyped. Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** _localemodule.c 2000/08/03 02:06:15 2.14 --- _localemodule.c 2000/08/10 21:41:08 2.15 *************** *** 10,13 **** --- 10,15 ---- ******************************************************************/ + #include "Python.h" + #include #include *************** *** 16,21 **** #include #include - - #include "Python.h" #if defined(MS_WIN32) --- 18,21 ---- From python-dev@python.org Fri Aug 11 01:14:29 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Thu, 10 Aug 2000 17:14:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.92,2.93 Message-ID: <200008110014.RAA21386@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv19902/Objects Modified Files: object.c Log Message: Fix missing decrements of the recursive counter in PyObject_Compare(). Closes Patch #101065. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.92 retrieving revision 2.93 diff -C2 -r2.92 -r2.93 *** object.c 2000/08/04 15:36:13 2.92 --- object.c 2000/08/11 00:14:26 2.93 *************** *** 404,412 **** if (!PyInstance_Check(v)) return -PyObject_Compare(w, v); ! if (++_PyCompareState_nesting > NESTING_LIMIT) { PyObject *inprogress, *pair; inprogress = get_inprogress_dict(); if (inprogress == NULL) { return -1; } --- 404,414 ---- if (!PyInstance_Check(v)) return -PyObject_Compare(w, v); ! _PyCompareState_nesting++; ! if (_PyCompareState_nesting > NESTING_LIMIT) { PyObject *inprogress, *pair; inprogress = get_inprogress_dict(); if (inprogress == NULL) { + _PyCompareState_nesting--; return -1; } *************** *** 416,427 **** they're equal until shown otherwise */ Py_DECREF(pair); ! --_PyCompareState_nesting; return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { return -1; } res = do_cmp(v, w); - _PyCompareState_nesting--; /* XXX DelItem shouldn't fail */ PyDict_DelItem(inprogress, pair); --- 418,429 ---- they're equal until shown otherwise */ Py_DECREF(pair); ! _PyCompareState_nesting--; return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { + _PyCompareState_nesting--; return -1; } res = do_cmp(v, w); /* XXX DelItem shouldn't fail */ PyDict_DelItem(inprogress, pair); *************** *** 430,433 **** --- 432,436 ---- res = do_cmp(v, w); } + _PyCompareState_nesting--; if (res == NULL) return -1; *************** *** 487,491 **** return (v < w) ? -1 : 1; } ! if (++_PyCompareState_nesting > NESTING_LIMIT && (vtp->tp_as_mapping || (vtp->tp_as_sequence && !PyString_Check(v)))) { --- 490,495 ---- return (v < w) ? -1 : 1; } ! _PyCompareState_nesting++; ! if (_PyCompareState_nesting > NESTING_LIMIT && (vtp->tp_as_mapping || (vtp->tp_as_sequence && !PyString_Check(v)))) { *************** *** 494,497 **** --- 498,502 ---- inprogress = get_inprogress_dict(); if (inprogress == NULL) { + _PyCompareState_nesting--; return -1; } *************** *** 500,512 **** /* already comparing these objects. assume they're equal until shown otherwise */ - _PyCompareState_nesting--; Py_DECREF(pair); return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { return -1; } result = (*vtp->tp_compare)(v, w); - _PyCompareState_nesting--; PyDict_DelItem(inprogress, pair); /* XXX shouldn't fail */ Py_DECREF(pair); --- 505,517 ---- /* already comparing these objects. assume they're equal until shown otherwise */ Py_DECREF(pair); + _PyCompareState_nesting--; return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { + _PyCompareState_nesting--; return -1; } result = (*vtp->tp_compare)(v, w); PyDict_DelItem(inprogress, pair); /* XXX shouldn't fail */ Py_DECREF(pair); *************** *** 514,517 **** --- 519,523 ---- result = (*vtp->tp_compare)(v, w); } + _PyCompareState_nesting--; return result; } From python-dev@python.org Fri Aug 11 03:15:12 2000 From: python-dev@python.org (Andrew Kuchling) Date: Thu, 10 Aug 2000 22:15:12 -0400 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.141,1.142 In-Reply-To: <200008092111.OAA28623@slayer.i.sourceforge.net>; from esr@users.sourceforge.net on Wed, Aug 09, 2000 at 02:11:10PM -0700 References: <200008092111.OAA28623@slayer.i.sourceforge.net> Message-ID: <20000810221512.A455@newcnri.cnri.reston.va.us> On Wed, Aug 09, 2000 at 02:11:10PM -0700, Eric S. Raymond wrote: >*** configure.in 2000/08/05 23:28:51 1.141 >--- configure.in 2000/08/09 21:11:06 1.142 >+ # Cope with the DB mess. If we detect libdba, assume it's a version 2 >+ # or later DB and should be linked first (before the DB 1.xx stuff in glibc). This patch crept in by accident, and is unrelated to making curses.wrapper support colour. --amk From python-dev@python.org Fri Aug 11 04:54:20 2000 From: python-dev@python.org (Moshe Zadka) Date: Thu, 10 Aug 2000 20:54:20 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0206.txt,1.7,1.8 Message-ID: <200008110354.UAA17537@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606 Modified Files: pep-0206.txt Log Message: Some changes in wording, and a different division as discussed with Greg Ward . Index: pep-0206.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0206.txt,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** pep-0206.txt 2000/07/29 10:11:19 1.7 --- pep-0206.txt 2000/08/11 03:54:16 1.8 *************** *** 36,54 **** The Proposed Solution ! The proposed solution is to download a few important third-party ! libraries, and distribute them with the source distribution of ! Python. In addition, the build procedure will be changed to build ! those libraries by default, and build the Python modules which ! rely on them linked against those libraries. Individual users ! will still be able to link the Python modules against already installed libraries, or disable them completely. Additionally, some Open Source third-party Python modules will ! also be distributed together with the source distribution. The ! difference between those and external libraries is that the latter are distributed in order to make the Python distribution self ! contained, and the former are added so there will be new functionality in out-of-the-box Python. Here is the tentative list of libraries which are proposed to be dealt with in this manner, and where they can be downloaded: --- 36,67 ---- The Proposed Solution ! The proposed solution is to maintain an alternate form of distribution, ! nicknamed the "sumo" interpreter. It will be structured as a core ! interpreter + extra useful libraries. In addition, the build procedure ! will be changed to build those libraries by default, and build the Python ! modules which rely on them linked against those libraries. Individual ! users will still be able to link the Python modules against already installed libraries, or disable them completely. Additionally, some Open Source third-party Python modules will ! also be distributed in the "sumo" distribution. The ! difference between those and external libraries is that the former are distributed in order to make the Python distribution self ! contained, and the latter are added so there will be new functionality in out-of-the-box Python. + Python Advanced Library + + Since it is decided that the additions to the interpreter will live + in a seperate directory, they can even be distributed seperately, + as an additional library. This is called the "Python Advanced Library", + or PAL. This will also solve the problem of an advanced library module + failing -- the core interpreter will still be built, tested and installed. + Since the compilation of the other modules be helped by Python scripts, + it is quite possible that it will even install as many modules as it + can. + + Suggested Libraries and Modules + Here is the tentative list of libraries which are proposed to be dealt with in this manner, and where they can be downloaded: *************** *** 89,93 **** GNU General Public License and the GNU Lesser General Public License, no such sources are proposed here to be added to the ! Python interpreter. Currently, the Python interpreter is distributed under a closed-source-friendly license, which means that it is possible to include it in a closed source product. --- 102,106 ---- GNU General Public License and the GNU Lesser General Public License, no such sources are proposed here to be added to the ! sumo interpreter. Currently, the Python interpreter is distributed under a closed-source-friendly license, which means that it is possible to include it in a closed source product. *************** *** 103,107 **** What should the build procedure look like? ! What to do if compilation of a supporting library fails? ESR also mentioned libpng, but I don't know of a Python module --- 116,120 ---- What should the build procedure look like? ! How are the additional modules tested? ESR also mentioned libpng, but I don't know of a Python module From python-dev@python.org Fri Aug 11 08:48:39 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 11 Aug 2000 00:48:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.21,1.22 Message-ID: <200008110748.AAA20098@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20051 Modified Files: mailbox.py Log Message: Use built in function filter instead of doing it laboriously by hand. Index: mailbox.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/mailbox.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** mailbox.py 2000/08/10 03:05:26 1.21 --- mailbox.py 2000/08/11 07:48:36 1.22 *************** *** 158,166 **** pat = re.compile('^[1-9][0-9]*$') self.dirname = dirname ! files = os.listdir(self.dirname) ! list = [] ! for f in files: ! if pat.match(f): ! list.append(f) list = map(long, list) list.sort() --- 158,165 ---- pat = re.compile('^[1-9][0-9]*$') self.dirname = dirname ! # the three following lines could be combined into: ! # list = map(long, filter(pat.match, os.listdir(self.dirname))) ! list = os.listdir(self.dirname) ! list = filter(pat.match, list) list = map(long, list) list.sort() From python-dev@python.org Fri Aug 11 12:43:13 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 11 Aug 2000 04:43:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include unicodeobject.h,2.18,2.19 Message-ID: <200008111143.EAA04968@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv4881/Include Modified Files: unicodeobject.h Log Message: Added #fndef's to avoid compiler errors. Index: unicodeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/unicodeobject.h,v retrieving revision 2.18 retrieving revision 2.19 diff -C2 -r2.18 -r2.19 *** unicodeobject.h 2000/08/03 18:42:28 2.18 --- unicodeobject.h 2000/08/11 11:43:10 2.19 *************** *** 79,83 **** #ifdef HAVE_USABLE_WCHAR_T ! # define HAVE_WCHAR_H #endif --- 79,85 ---- #ifdef HAVE_USABLE_WCHAR_T ! # ifndef HAVE_WCHAR_H ! # define HAVE_WCHAR_H ! # endif #endif From python-dev@python.org Fri Aug 11 12:48:36 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Fri, 11 Aug 2000 04:48:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.12,2.13 Message-ID: <200008111148.EAA11300@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv8448/Include Modified Files: pyport.h Log Message: #include reordering so that extern "C" does not interfere with standard C++ specific includes. Closes patch 101061. Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** pyport.h 2000/08/10 04:23:29 2.12 --- pyport.h 2000/08/11 11:48:33 2.13 *************** *** 38,41 **** --- 38,79 ---- #endif + #include /* Moved here from the math section, before extern "C" */ + + /******************************************** + * WRAPPER FOR and/or * + ********************************************/ + + #ifdef TIME_WITH_SYS_TIME + #include + #include + #else /* !TIME_WITH_SYS_TIME */ + #ifdef HAVE_SYS_TIME_H + #include + #else /* !HAVE_SYS_TIME_H */ + #include + #endif /* !HAVE_SYS_TIME_H */ + #endif /* !TIME_WITH_SYS_TIME */ + + + /****************************** + * WRAPPER FOR * + ******************************/ + + /* NB caller must include */ + + #ifdef HAVE_SYS_SELECT_H + + #include + + #else /* !HAVE_SYS_SELECT_H */ + + #ifdef USE_GUSI1 + /* If we don't have sys/select the definition may be in unistd.h */ + #include + #endif + + #endif /* !HAVE_SYS_SELECT_H */ + + #ifdef __cplusplus /* Move this down here since some C++ #include's don't like to be included *************** *** 44,47 **** --- 82,86 ---- #endif + /* Py_ARITHMETIC_RIGHT_SHIFT * C doesn't define whether a right-shift of a signed integer sign-extends *************** *** 86,90 **** - /************************************************************************** Prototypes that are missing from the standard include files on some systems --- 125,128 ---- *************** *** 166,171 **** #endif - #include - #ifndef HAVE_HYPOT #ifdef __MWERKS__ --- 204,207 ---- *************** *** 242,280 **** - /******************************************** - * WRAPPER FOR and/or * - ********************************************/ - - #ifdef TIME_WITH_SYS_TIME - #include - #include - #else /* !TIME_WITH_SYS_TIME */ - #ifdef HAVE_SYS_TIME_H - #include - #else /* !HAVE_SYS_TIME_H */ - #include - #endif /* !HAVE_SYS_TIME_H */ - #endif /* !TIME_WITH_SYS_TIME */ - - - /****************************** - * WRAPPER FOR * - ******************************/ - - /* NB caller must include */ - - #ifdef HAVE_SYS_SELECT_H - - #include - - #else /* !HAVE_SYS_SELECT_H */ - - #ifdef USE_GUSI1 - /* If we don't have sys/select the definition may be in unistd.h */ - #include - #endif - - #endif /* !HAVE_SYS_SELECT_H */ - /* If the fd manipulation macros aren't defined, here is a set that should do the job */ --- 278,281 ---- *************** *** 307,310 **** --- 308,312 ---- #endif /* fd manipulation macros */ + #ifdef __cplusplus From python-dev@python.org Fri Aug 11 14:58:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 06:58:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules makesetup,1.26,1.27 Message-ID: <200008111358.GAA25812@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv25787/Modules Modified Files: makesetup Log Message: Add support for FreeBSD --rpath linker option; this is equivalent to -R on Solaris and -rpath on IRIX. This closes SourceForge bug #110613 (Jitterbug PR#202), reported by . Index: makesetup =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/makesetup,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** makesetup 2000/07/23 00:02:15 1.26 --- makesetup 2000/08/11 13:58:37 1.27 *************** *** 144,147 **** --- 144,148 ---- -Xlinker) libs="$libs $arg"; skip=libs;; -rpath) libs="$libs $arg"; skip=libs;; + --rpath) libs="$libs $arg"; skip=libs;; -[A-Zl]*) libs="$libs $arg";; *.a) libs="$libs $arg";; From python-dev@python.org Fri Aug 11 15:18:47 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 11 Aug 2000 07:18:47 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0211.txt,1.1,1.2 Message-ID: <200008111418.HAA01280@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1064 Modified Files: pep-0211.txt Log Message: First draft, without feedback from others. Index: pep-0211.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0211.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0211.txt 2000/07/15 23:25:49 1.1 --- pep-0211.txt 2000/08/11 14:18:44 1.2 *************** *** 1,9 **** PEP: 211 ! Title: Adding New Operators to Python Version: $Revision$ Owner: gvwilson@nevex.com (Greg Wilson) Python-Version: 2.1 ! Status: Incomplete --- 1,357 ---- PEP: 211 ! Title: Adding New Linear Algebra Operators to Python Version: $Revision$ Owner: gvwilson@nevex.com (Greg Wilson) Python-Version: 2.1 ! Created: 15-Jul-2000 ! Status: Draft ! Post-History: + + Introduction + + This PEP describes a proposal to add linear algebra operators to + Python 2.0. It discusses why such operators are desirable, and + alternatives that have been considered and discarded. This PEP + summarizes discussions held in mailing list forums, and provides + URLs for further information, where appropriate. The CVS revision + history of this file contains the definitive historical record. + + + Proposal + + Add a single new infix binary operator '@' ("across"), and + corresponding special methods "__across__()" and "__racross__()". + This operator will perform mathematical matrix multiplication on + NumPy arrays, and generate cross-products when applied to built-in + sequence types. No existing operator definitions will be changed. + + + Background + + Computers were invented to do arithmetic, as was the first + high-level programming language, Fortran. While Fortran was a + great advance on its machine-level predecessors, there was still a + very large gap between its syntax and the notation used by + mathematicians. The most influential effort to close this gap was + APL [1]: + + The language [APL] was invented by Kenneth E. Iverson while at + Harvard University. The language, originally titled "Iverson + Notation", was designed to overcome the inherent ambiguities + and points of confusion found when dealing with standard + mathematical notation. It was later described in 1962 in a + book simply titled "A Programming Language" (hence APL). + Towards the end of the sixties, largely through the efforts of + IBM, the computer community gained its first exposure to + APL. Iverson received the Turing Award in 1980 for this work. + + APL's operators supported both familiar algebraic operations, such + as vector dot product and matrix multiplication, and a wide range + of structural operations, such as stitching vectors together to + create arrays. Its notation was exceptionally cryptic: many of + its symbols did not exist on standard keyboards, and expressions + had to be read right to left. + + Most subsequent work on numerical languages, such as Fortran-90, + MATLAB, and Mathematica, has tried to provide the power of APL + without the obscurity. Python's NumPy [2] has most of the + features that users of such languages expect, but these are + provided through named functions and methods, rather than + overloaded operators. This makes NumPy clumsier than its + competitors. + + One way to make NumPy more competitive is to provide greater + syntactic support in Python itself for linear algebra. This + proposal therefore examines the requirements that new linear + algebra operators in Python must satisfy, and proposes a syntax + and semantics for those operators. + + + Requirements + + The most important requirement is that there be minimal impact on + the existing definition of Python. The proposal must not break + existing programs, except possibly those that use NumPy. + + The second most important requirement is to be able to do both + elementwise and mathematical matrix multiplication using infix + notation. The nine cases that must be handled are: + + |5 6| * 9 = |45 54| MS: matrix-scalar multiplication + |7 8| |63 72| + + 9 * |5 6| = |45 54| SM: scalar-matrix multiplication + |7 8| |63 72| + + |2 3| * |4 5| = |8 15| VE: vector elementwise multiplication + + + |2 3| * |4| = 23 VD: vector dot product + |5| + + |2| * |4 5| = | 8 10| VO: vector outer product + |3| |12 15| + + |1 2| * |5 6| = | 5 12| ME: matrix elementwise multiplication + |3 4| |7 8| |21 32| + + |1 2| * |5 6| = |19 22| MM: mathematical matrix multiplication + |3 4| |7 8| |43 50| + + |1 2| * |5 6| = |19 22| VM: vector-matrix multiplication + |7 8| + + |5 6| * |1| = |17| MV: matrix-vector multiplication + |7 8| |2| |23| + + Note that 1-dimensional vectors are treated as rows in VM, as + columns in MV, and as both in VD and VO. Both are special cases + of 2-dimensional matrices (Nx1 and 1xN respectively). It may + therefore be reasonable to define the new operator only for + 2-dimensional arrays, and provide an easy (and efficient) way for + users to convert 1-dimensional structures to 2-dimensional. + Behavior of a new multiplication operator for built-in types may + then: + + (a) be a parsing error (possible only if a constant is one of the + arguments, since names are untyped in Python); + + (b) generate a runtime error; or + + (c) be derived by plausible extension from its behavior in the + two-dimensional case. + + Third, syntactic support should be considered for three other + operations: + + T + (a) transposition: A => A[j, i] for A[i, j] + + -1 + (b) inverse: A => A' such that A' * A = I (the identity matrix) + + (c) solution: A/b => x such that A * x = b + A\b => x such that x * A = b + + With regard to (c), it is worth noting that the two syntaxes used + were invented by programmers, not mathematicians. Mathematicians + do not have a standard, widely-used notation for matrix solution. + + It is also worth noting that dozens of matrix inversion and + solution algorithms are widely used. MATLAB and its kin bind + their inversion and/or solution operators to one which is + reasonably robust in most cases, and require users to call + functions or methods to access others. + + Fourth, confusion between Python's notation and those of MATLAB + and Fortran-90 should be avoided. In particular, mathematical + matrix multiplication (case MM) should not be represented as '.*', + since: + + (a) MATLAB uses prefix-'.' forms to mean 'elementwise', and raw + forms to mean "mathematical" [4]; and + + (b) even if the Python parser can be taught how to handle dotted + forms, '1.*A' will still be visually ambiguous [4]. + + One anti-requirement is that new operators are not needed for + addition, subtraction, bitwise operations, and so on, since + mathematicians already treat them elementwise. + + + Proposal: + + The meanings of all existing operators will be unchanged. In + particular, 'A*B' will continue to be interpreted elementwise. + This takes care of the cases MS, SM, VE, and ME, and ensures + minimal impact on existing programs. + + A new operator '@' (pronounced "across") will be added to Python, + along with two special methods, "__across__()" and + "__racross__()", with the usual semantics. + + NumPy will overload "@" to perform mathematical multiplication of + arrays where shapes permit, and to throw an exception otherwise. + The matrix class's implementation of "@" will treat built-in + sequence types as if they were column vectors. This takes care of + the cases MM and MV. + + An attribute "T" will be added to the NumPy array type, such that + "m.T" is: + + (a) the transpose of "m" for a 2-dimensional array + + (b) the 1xN matrix transpose of "m" if "m" is a 1-dimensional + array; or + + (c) a runtime error for an array with rank >= 3. + + This attribute will alias the memory of the base object. NumPy's + "transpose()" function will be extended to turn built-in sequence + types into row vectors. This takes care of the VM, VD, and VO + cases. We propose an attribute because: + + (a) the resulting notation is similar to the 'superscript T' (at + least, as similar as ASCII allows), and + + (b) it signals that the transposition aliases the original object. + + No new operators will be defined to mean "solve a set of linear + equations", or "invert a matrix". Instead, NumPy will define a + value "inv", which will be recognized by the exponentiation + operator, such that "A ** inv" is the inverse of "A". This is + similar in spirit to NumPy's existing "newaxis" value. + + (Optional) When applied to sequences, the operator will return a + list of tuples containing the cross-product of their elements in + left-to-right order: + + >>> [1, 2] @ (3, 4) + [(1, 3), (1, 4), (2, 3), (2, 4)] + + >>> [1, 2] @ (3, 4) @ (5, 6) + [(1, 3, 5), (1, 3, 6), + (1, 4, 5), (1, 4, 6), + (2, 3, 5), (2, 3, 6), + (2, 4, 5), (2, 4, 6)] + + This will require the same kind of special support from the parser + as chained comparisons (such as "a>> for (i, j) in [1, 2] @ [3, 4]: + >>> print i, j + 1 3 + 1 4 + 2 3 + 2 4 + + as a short-hand for the common nested loop idiom: + + >>> for i in [1, 2]: + >>> for j in [3, 4]: + >>> print i, j + + Response to the 'lockstep loop' questionnaire [5] indicated that + newcomers would be comfortable with this (so comfortable, in fact, + that most of them interpreted most multi-loop 'zip' syntaxes [6] + as implementing single-stage nesting). + + + Alternatives: + + 01. Don't add new operators --- stick to functions and methods. + + Python is not primarily a numerical language. It is not worth + complexifying the language for this special case --- NumPy's + success is proof that users can and will use functions and methods + for linear algebra. + + On the positive side, this maintains Python's simplicity. Its + weakness is that support for real matrix multiplication (and, to a + lesser extent, other linear algebra operations) is frequently + requested, as functional forms are cumbersome for lengthy + formulas, and do not respect the operator precedence rules of + conventional mathematics. In addition, the method form is + asymmetric in its operands. + + 02. Introduce prefixed forms of existing operators, such as "@*" + or "~*", or used boxed forms, such as "[*]" or "%*%". + + There are (at least) three objections to this. First, either form + seems to imply that all operators exist in both forms. This is + more new entities than the problem merits, and would require the + addition of many new overloadable methods, such as __at_mul__. + + Second, while it is certainly possible to invent semantics for + these new operators for built-in types, this would be a case of + the tail wagging the dog, i.e. of letting the existence of a + feature "create" a need for it. + + Finally, the boxed forms make human parsing more complex, e.g.: + + A[*] = B vs. A[:] = B + + 03. (From Moshe Zadka [7], and also considered by Huaiyu Zhou [8] + in his proposal [9]) Retain the existing meaning of all + operators, but create a behavioral accessor for arrays, such + that: + + A * B + + is elementwise multiplication (ME), but: + + A.m() * B.m() + + is mathematical multiplication (MM). The method "A.m()" would + return an object that aliased A's memory (for efficiency), but + which had a different implementation of __mul__(). + + The advantage of this method is that it has no effect on the + existing implementation of Python: changes are localized in the + Numeric module. The disadvantages are: + + (a) The semantics of "A.m() * B", "A + B.m()", and so on would + have to be defined, and there is no "obvious" choice for them. + + (b) Aliasing objects to trigger different operator behavior feels + less Pythonic than either calling methods (as in the existing + Numeric module) or using a different operator. This PEP is + primarily about look and feel, and about making Python more + attractive to people who are not already using it. + + 04. (From a proposal [9] by Huaiyu Zhou [8]) Introduce a "delayed + inverse" attribute, similar to the "transpose" attribute + advocated in the third part of this proposal. The expression + "a.I" would be a delayed handle on the inverse of the matrix + "a", which would be evaluated in context as required. For + example, "a.I * b" and "b * a.I" would solve sets of linear + equations, without actually calculating the inverse. + + The main drawback of this proposal it is reliance on lazy + evaluation, and even more on "smart" lazy evaluation (i.e. the + operation performed depends on the context in which the evaluation + is done). The BDFL has so far resisted introducing LE into + Python. + + + Related Proposals + + 0203 : Augmented Assignments + + If new operators for linear algebra are introduced, it may + make sense to introduce augmented assignment forms for + them. + + 0207 : Rich Comparisons + + It may become possible to overload comparison operators + such as '<' so that an expression such as 'A < B' returns + an array, rather than a scalar value. + + 0209 : Adding Multidimensional Arrays + + Multidimensional arrays are currently an extension to + Python, rather than a built-in type. + + + Acknowledgments: + + I am grateful to Huaiyu Zhu [8] for initiating this discussion, + and for some of the ideas and terminology included below. + + + References: + + [1] http://www.acm.org/sigapl/whyapl.htm + [2] http://numpy.sourceforge.net + [3] PEP-0203.txt "Augmented Assignments". + [4] http://bevo.che.wisc.edu/octave/doc/octave_9.html#SEC69 + [5] http://www.python.org/pipermail/python-dev/2000-July/013139.html + [6] PEP-0201.txt "Lockstep Iteration" + [7] Moshe Zadka is 'moshez@math.huji.ac.il'. + [8] Huaiyu Zhu is 'hzhu@users.sourceforge.net' + [9] http://www.python.org/pipermail/python-list/2000-August/112529.html From python-dev@python.org Fri Aug 11 15:50:49 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 07:50:49 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.121.2.2,1.121.2.3 configure,1.113.2.2,1.113.2.3 Message-ID: <200008111450.HAA08677@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv8579 Modified Files: Tag: cnri-16-start configure.in configure Log Message: Merge in patch 1.121->1.122 so that socklen_t is properly checked for. This avoids a compiler warning on some systems. Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.121.2.2 retrieving revision 1.121.2.3 diff -C2 -r1.121.2.2 -r1.121.2.3 *** configure.in 2000/08/10 18:13:25 1.121.2.2 --- configure.in 2000/08/11 14:50:45 1.121.2.3 *************** *** 357,361 **** signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ ! sys/param.h sys/select.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h) AC_HEADER_DIRENT --- 357,361 ---- signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ ! sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h) AC_HEADER_DIRENT *************** *** 381,385 **** AC_TYPE_SIZE_T AC_TYPE_UID_T - AC_CHECK_TYPE(socklen_t, int) # Sizes of various common basic types --- 381,384 ---- *************** *** 1074,1077 **** --- 1073,1085 ---- fi], [AC_MSG_RESULT(no)]) + + # THIS MUST BE LAST, IT CAN BREAK OTHER TESTS! + # Add sys/socket.h to confdefs.h + cat >> confdefs.h <<\EOF + #ifdef HAVE_SYS_SOCKET_H + #include + #endif + EOF + AC_CHECK_TYPE(socklen_t, int) # generate output files Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.113.2.2 retrieving revision 1.113.2.3 diff -C2 -r1.113.2.2 -r1.113.2.3 *** configure 2000/08/10 18:13:25 1.113.2.2 --- configure 2000/08/11 14:50:45 1.113.2.3 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.121.2.1 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.121.2.2 [...2747 lines suppressed...] + egrep "(^|[^a-zA-Z_0-9])socklen_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_type_socklen_t=yes" + else + rm -rf conftest* + eval "ac_cv_type_socklen_t=no" + fi + rm -f conftest* + + fi + if eval "test \"`echo '$ac_cv_type_'socklen_t`\" = yes"; then + echo "$ac_t""yes" 1>&6 + else + echo "$ac_t""no" 1>&6 + cat >> confdefs.h < Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv10623/api Modified Files: api.tex Log Message: ANY becomes void, to reflect the requirement for ANSI C. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -r1.74 -r1.75 *** api.tex 2000/07/13 23:58:16 1.74 --- api.tex 2000/08/11 17:07:32 1.75 *************** *** 3038,3045 **** \end{cfuncdesc} ! \begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, ! int ppos, ! PyObject **pkey, ! PyObject **pvalue} \end{cfuncdesc} --- 3038,3043 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, int *ppos, ! PyObject **pkey, PyObject **pvalue} \end{cfuncdesc} *************** *** 4217,4232 **** ! \begin{ctypedesc}{ANY*} ! The type used to represent arbitrary blocks of memory. Values of this ! type should be cast to the specific type that is needed. ! \end{ctypedesc} ! ! \begin{cfuncdesc}{ANY*}{PyMem_Malloc}{size_t n} ! Allocates \var{n} bytes and returns a pointer of type \ctype{ANY*} to the allocated memory, or \NULL{} if the request fails. Requesting zero bytes returns a non-\NULL{} pointer. \end{cfuncdesc} ! \begin{cfuncdesc}{ANY*}{PyMem_Realloc}{ANY *p, size_t n} Resizes the memory block pointed to by \var{p} to \var{n} bytes. The contents will be unchanged to the minimum of the old and the new --- 4215,4225 ---- ! \begin{cfuncdesc}{void*}{PyMem_Malloc}{size_t n} ! Allocates \var{n} bytes and returns a pointer of type \ctype{void*} to the allocated memory, or \NULL{} if the request fails. Requesting zero bytes returns a non-\NULL{} pointer. \end{cfuncdesc} ! \begin{cfuncdesc}{void*}{PyMem_Realloc}{void *p, size_t n} Resizes the memory block pointed to by \var{p} to \var{n} bytes. The contents will be unchanged to the minimum of the old and the new *************** *** 4238,4242 **** \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_Free}{ANY *p} Frees the memory block pointed to by \var{p}, which must have been returned by a previous call to \cfunction{PyMem_Malloc()} or --- 4231,4235 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_Free}{void *p} Frees the memory block pointed to by \var{p}, which must have been returned by a previous call to \cfunction{PyMem_Malloc()} or *************** *** 4246,4260 **** \end{cfuncdesc} ! \begin{cfuncdesc}{ANY*}{Py_Malloc}{size_t n} Same as \cfunction{PyMem_Malloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{ANY*}{Py_Realloc}{ANY *p, size_t n} Same as \cfunction{PyMem_Realloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{void}{Py_Free}{ANY *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} --- 4239,4253 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void*}{Py_Malloc}{size_t n} Same as \cfunction{PyMem_Malloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{void*}{Py_Realloc}{void *p, size_t n} Same as \cfunction{PyMem_Realloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{void}{Py_Free}{void *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} *************** *** 4269,4273 **** \end{cfuncdesc} ! \begin{cfuncdesc}{\var{TYPE}*}{PyMem_RESIZE}{ANY *p, TYPE, size_t n} Same as \cfunction{PyMem_Realloc()}, but the memory block is resized to \code{(\var{n} * sizeof(\var{TYPE}))} bytes. Returns a pointer --- 4262,4266 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{\var{TYPE}*}{PyMem_RESIZE}{void *p, TYPE, size_t n} Same as \cfunction{PyMem_Realloc()}, but the memory block is resized to \code{(\var{n} * sizeof(\var{TYPE}))} bytes. Returns a pointer *************** *** 4275,4279 **** \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_DEL}{ANY *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} --- 4268,4272 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_DEL}{void *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} From python-dev@python.org Fri Aug 11 18:09:25 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 10:09:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ext ext.tex,1.81,1.82 Message-ID: <200008111709.KAA10798@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ext In directory slayer.i.sourceforge.net:/tmp/cvs-serv10791/ext Modified Files: ext.tex Log Message: Markup errors: \cfuntion -> \cfunction Index: ext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ext/ext.tex,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -r1.81 -r1.82 *** ext.tex 2000/08/03 19:38:07 1.81 --- ext.tex 2000/08/11 17:09:23 1.82 *************** *** 732,736 **** the default encoding is used. ! \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated --- 732,736 ---- the default encoding is used. ! \cfunction{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated *************** *** 754,758 **** If \var{*buffer} points a \NULL{} pointer, ! \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated --- 754,758 ---- If \var{*buffer} points a \NULL{} pointer, ! \cfunction{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated *************** *** 761,765 **** If \var{*buffer} points to a non-\NULL{} pointer (an already allocated ! buffer), \cfuntion{PyArg_ParseTuple()} will use this location as buffer and interpret \var{*buffer_length} as buffer size. It will then copy the encoded data into the buffer and 0-terminate it. Buffer --- 761,765 ---- If \var{*buffer} points to a non-\NULL{} pointer (an already allocated ! buffer), \cfunction{PyArg_ParseTuple()} will use this location as buffer and interpret \var{*buffer_length} as buffer size. It will then copy the encoded data into the buffer and 0-terminate it. Buffer From python-dev@python.org Fri Aug 11 18:36:24 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 10:36:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html Makefile,1.33,1.34 Message-ID: <200008111736.KAA12901@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv12894/html Modified Files: Makefile Log Message: Include the document dependencies earlier so that documents are rebuilt when they need to be. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/Makefile,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** Makefile 2000/07/31 15:55:22 1.33 --- Makefile 2000/08/11 17:36:21 1.34 *************** *** 62,65 **** --- 62,67 ---- $(TOPDIR)/tools/node2label.pl + include ../Makefile.deps + # The index.html target is at the end since it screws up font-lock. *************** *** 101,106 **** $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/dist/dist.tex - - include ../Makefile.deps $(PAPERDIR)/api.aux: $(APIFILES) --- 103,106 ---- From python-dev@python.org Fri Aug 11 18:37:36 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 10:37:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/doc doc.tex,1.23,1.24 Message-ID: <200008111737.KAA13083@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv13076/doc Modified Files: doc.tex Log Message: Added material about documenting packages, so that the use of module markup for packages is clear. Index: doc.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/doc/doc.tex,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** doc.tex 2000/07/25 19:27:17 1.23 --- doc.tex 2000/08/11 17:37:33 1.24 *************** *** 611,614 **** --- 611,634 ---- \end{verbatim} + Python packages\index{packages} --- collections of modules that can + be described as a unit --- are documented using the same markup as + modules. The name for a module in a package should be typed in + ``fully qualified'' form (i.e., it should include the package name). + For example, a module ``foo'' in package ``bar'' should be marked as + \samp{\e module\{bar.foo\}}, and the beginning of the reference + section would appear as: + + \begin{verbatim} + \section{\module{bar.foo} --- + Module from the \module{bar} package} + + \declaremodule{extension}{bar.foo} + \modulesynopsis{Nifty module from the \module{bar} package.} + \moduleauthor{Jane Doe}{jane.doe@frobnitz.org} + \end{verbatim} + + Note that the name of a package is also marked using + \macro{module}. + \begin{macrodesc}{declaremodule}{\op{key}\p{type}\p{name}} Requires two parameters: module type (\samp{standard}, From python-dev@python.org Fri Aug 11 20:03:01 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 12:03:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_largefile.py,NONE,1.1 regrtest.py,1.21,1.22 Message-ID: <200008111903.MAA00817@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv29798/Lib/test Modified Files: regrtest.py Added Files: test_largefile.py Log Message: Add largefile support for Linux64 and WIn64. Add test_largefile and some minor change to regrtest.py to allow optional running of test_largefile ('cause it's slow on Win64). This closes patches: http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100510&group_id=5470 and http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100511&group_id=5470 --- NEW FILE --- #!python #---------------------------------------------------------------------- # test largefile support on system where this makes sense # #XXX how to only run this when support is there #XXX how to only optionally run this, it will take along time #---------------------------------------------------------------------- import test_support import os, struct, stat, sys # only run if the current system support large files f = open(test_support.TESTFN, 'w') try: # 2**31 == 2147483648 f.seek(2147483649L) except OverflowError: raise test_support.TestSkipped, "platform does not have largefile support" else: f.close() # create >2GB file (2GB = 2147483648 bytes) size = 2500000000L name = test_support.TESTFN # on Windows this test comsumes large resources: # it takes a long time to build the >2GB file and takes >2GB of disk space # therefore test_support.use_large_resources must be defined to run this test if sys.platform[:3] == 'win' and not test_support.use_large_resources: raise test_support.TestSkipped, \ "test requires %s bytes and a long time to run" % str(size) def expect(got_this, expect_this): if test_support.verbose: print '%s =?= %s ...' % (`got_this`, `expect_this`), if got_this != expect_this: if test_support.verbose: print 'no' raise test_support.TestFailed, 'got %s, but expected %s' %\ (str(got_this), str(expect_this)) else: if test_support.verbose: print 'yes' # test that each file function works as expected for a large (i.e. >2GB, do # we have to check >4GB) files if test_support.verbose: print 'create large file via seek (may be sparse file) ...' f = open(name, 'w') f.seek(size) f.write('a') f.flush() expect(os.fstat(f.fileno())[stat.ST_SIZE], size+1) if test_support.verbose: print 'check file size with os.fstat' f.close() if test_support.verbose: print 'check file size with os.stat' expect(os.stat(name)[stat.ST_SIZE], size+1) if test_support.verbose: print 'play around with seek() and read() with the built largefile' f = open(name, 'r') expect(f.tell(), 0) expect(f.read(1), '\000') expect(f.tell(), 1) f.seek(0) expect(f.tell(), 0) f.seek(0, 0) expect(f.tell(), 0) f.seek(42) expect(f.tell(), 42) f.seek(42, 0) expect(f.tell(), 42) f.seek(42, 1) expect(f.tell(), 84) f.seek(0, 1) expect(f.tell(), 84) f.seek(0, 2) # seek from the end expect(f.tell(), size + 1 + 0) f.seek(-10, 2) expect(f.tell(), size + 1 - 10) f.seek(-size-1, 2) expect(f.tell(), 0) f.seek(size) expect(f.tell(), size) expect(f.read(1), 'a') # the 'a' that was written at the end of the file above f.close() if test_support.verbose: print 'play around with os.lseek() with the built largefile' f = open(name, 'r') expect(os.lseek(f.fileno(), 0, 0), 0) expect(os.lseek(f.fileno(), 42, 0), 42) expect(os.lseek(f.fileno(), 42, 1), 84) expect(os.lseek(f.fileno(), 0, 1), 84) expect(os.lseek(f.fileno(), 0, 2), size+1+0) expect(os.lseek(f.fileno(), -10, 2), size+1-10) expect(os.lseek(f.fileno(), -size-1, 2), 0) expect(os.lseek(f.fileno(), size, 0), size) expect(f.read(1), 'a') # the 'a' that was written at the end of the file above f.close() # XXX add tests for truncate if it exists # XXX has truncate ever worked on Windows? specifically on WinNT I get: # "IOError: [Errno 13] Permission denied" ##try: ## newsize = size - 10 ## f.seek(newsize) ## f.truncate() ## expect(f.tell(), newsize) ## newsize = newsize - 1 ## f.seek(0) ## f.truncate(newsize) ## expect(f.tell(), newsize) ##except AttributeError: ## pass os.unlink(name) Index: regrtest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** regrtest.py 2000/08/04 13:17:51 1.21 --- regrtest.py 2000/08/11 19:02:58 1.22 *************** *** 16,19 **** --- 16,20 ---- -r: random -- randomize test execution order -l: leakdebug -- if cycle garbage collection is enabled, run with DEBUG_LEAK + --have-resources -- run tests that require large resources (time/space) If non-option arguments are present, they are names for tests to run, *************** *** 41,45 **** def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0, leakdebug=0): """Execute a test suite. --- 42,47 ---- def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0, leakdebug=0, ! use_large_resources=0): """Execute a test suite. *************** *** 66,70 **** try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsrl') except getopt.error, msg: print msg --- 68,72 ---- try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsrl', ['have-resources']) except getopt.error, msg: print msg *************** *** 79,82 **** --- 81,85 ---- if o == '-r': randomize = 1 if o == '-l': leakdebug = 1 + if o == '--have-resources': use_large_resources = 1 if generate and verbose: print "-g and -v don't go together!" *************** *** 122,130 **** random.shuffle(tests) test_support.verbose = verbose # Tell tests to be moderately quiet save_modules = sys.modules.keys() for test in tests: if not quiet: print test ! ok = runtest(test, generate, verbose, testdir) if ok > 0: good.append(test) --- 125,134 ---- random.shuffle(tests) test_support.verbose = verbose # Tell tests to be moderately quiet + test_support.use_large_resources = use_large_resources save_modules = sys.modules.keys() for test in tests: if not quiet: print test ! ok = runtest(test, generate, verbose, quiet, testdir) if ok > 0: good.append(test) *************** *** 132,138 **** bad.append(test) else: - if not quiet: - print "test", test, - print "skipped -- an optional feature could not be imported" skipped.append(test) # Unload the newly imported modules (best effort finalization) --- 136,139 ---- *************** *** 195,199 **** return stdtests + tests ! def runtest(test, generate, verbose, testdir = None): """Run a single test. test -- the name of the test --- 196,200 ---- return stdtests + tests ! def runtest(test, generate, verbose, quiet, testdir = None): """Run a single test. test -- the name of the test *************** *** 201,204 **** --- 202,206 ---- and comparing it to a previously created output file verbose -- if true, print more messages + quiet -- if true, don't print 'skipped' messages (probably redundant) testdir -- test directory """ *************** *** 229,232 **** --- 231,237 ---- sys.stdout = save_stdout except (ImportError, test_support.TestSkipped), msg: + if not quiet: + print "test", test, + print "skipped -- ", msg return -1 except KeyboardInterrupt, v: From python-dev@python.org Fri Aug 11 20:03:01 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 12:03:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.81,2.82 Message-ID: <200008111903.MAA00826@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv29798/Objects Modified Files: fileobject.c Log Message: Add largefile support for Linux64 and WIn64. Add test_largefile and some minor change to regrtest.py to allow optional running of test_largefile ('cause it's slow on Win64). This closes patches: http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100510&group_id=5470 and http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100511&group_id=5470 Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.81 retrieving revision 2.82 diff -C2 -r2.81 -r2.82 *** fileobject.c 2000/07/13 23:56:54 2.81 --- fileobject.c 2000/08/11 19:02:59 2.82 *************** *** 43,48 **** #ifdef MS_WIN32 - #define ftruncate _chsize #define fileno _fileno #define HAVE_FTRUNCATE #endif --- 43,48 ---- #ifdef MS_WIN32 #define fileno _fileno + /* can (almost fully) duplicate with _chsize, see file_truncate */ #define HAVE_FTRUNCATE #endif *************** *** 65,68 **** --- 65,74 ---- #endif + /* define the appropriate 64-bit capable tell() function */ + #ifdef MS_WIN64 + # define TELL64 _telli64 + #endif + + typedef struct { PyObject_HEAD *************** *** 240,243 **** --- 246,320 ---- } + + /* a portable fseek() function + return 0 on success, non-zero on failure (with errno set) */ + int + _portable_fseek(fp, offset, whence) + FILE* fp; + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t offset; + #else + off_t offset; + #endif + int whence; + { + #if defined(HAVE_FSEEKO) + return fseeko(fp, offset, whence); + #elif defined(HAVE_FSEEK64) + return fseek64(fp, offset, whence); + #elif defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_FPOS_T >= 8 + /* lacking a 64-bit capable fseek() (as Win64 does) use a 64-bit capable + fsetpos() and tell() to implement fseek()*/ + fpos_t pos; + switch (whence) { + case SEEK_CUR: + if (fgetpos(fp, &pos) != 0) + return -1; + offset += pos; + break; + case SEEK_END: + /* do a "no-op" seek first to sync the buffering so that + the low-level tell() can be used correctly */ + if (fseek(fp, 0, SEEK_END) != 0) + return -1; + if ((pos = TELL64(fileno(fp))) == -1L) + return -1; + offset += pos; + break; + /* case SEEK_SET: break; */ + } + return fsetpos(fp, &offset); + #else + return fseek(fp, offset, whence); + #endif + } + + + /* a portable ftell() function + Return -1 on failure with errno set appropriately, current file + position on success */ + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t + #else + off_t + #endif + _portable_ftell(fp) + FILE* fp; + { + #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) + return ftello(fp); + #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) + return ftell64(fp); + #elif SIZEOF_FPOS_T >= 8 && defined(HAVE_LARGEFILE_SUPPORT) + fpos_t pos; + if (fgetpos(fp, &pos) != 0) + return -1; + return pos; + #else + return ftell(fp); + #endif + } + + static PyObject * file_seek(PyFileObject *f, PyObject *args) *************** *** 245,249 **** --- 322,330 ---- int whence; int ret; + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t offset, pos; + #else off_t offset; + #endif /* !MS_WIN64 */ PyObject *offobj; *************** *** 261,274 **** if (PyErr_Occurred()) return NULL; Py_BEGIN_ALLOW_THREADS errno = 0; ! #if defined(HAVE_FSEEKO) ! ret = fseeko(f->f_fp, offset, whence); ! #elif defined(HAVE_FSEEK64) ! ret = fseek64(f->f_fp, offset, whence); ! #else ! ret = fseek(f->f_fp, offset, whence); ! #endif Py_END_ALLOW_THREADS if (ret != 0) { PyErr_SetFromErrno(PyExc_IOError); --- 342,351 ---- if (PyErr_Occurred()) return NULL; + Py_BEGIN_ALLOW_THREADS errno = 0; ! ret = _portable_fseek(f->f_fp, offset, whence); Py_END_ALLOW_THREADS + if (ret != 0) { PyErr_SetFromErrno(PyExc_IOError); *************** *** 280,283 **** --- 357,361 ---- } + #ifdef HAVE_FTRUNCATE static PyObject * *************** *** 285,289 **** --- 363,371 ---- { int ret; + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t newsize; + #else off_t newsize; + #endif PyObject *newsizeobj; *************** *** 307,317 **** Py_BEGIN_ALLOW_THREADS errno = 0; ! #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) ! newsize = ftello(f->f_fp); ! #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) ! newsize = ftell64(f->f_fp); ! #else ! newsize = ftell(f->f_fp); ! #endif Py_END_ALLOW_THREADS if (newsize == -1) { --- 389,393 ---- Py_BEGIN_ALLOW_THREADS errno = 0; ! newsize = _portable_ftell(f->f_fp); Py_END_ALLOW_THREADS if (newsize == -1) { *************** *** 325,341 **** ret = fflush(f->f_fp); Py_END_ALLOW_THREADS ! if (ret == 0) { ! Py_BEGIN_ALLOW_THREADS errno = 0; ! ret = ftruncate(fileno(f->f_fp), newsize); Py_END_ALLOW_THREADS } ! if (ret != 0) { ! PyErr_SetFromErrno(PyExc_IOError); ! clearerr(f->f_fp); ! return NULL; ! } Py_INCREF(Py_None); return Py_None; } #endif /* HAVE_FTRUNCATE */ --- 401,435 ---- ret = fflush(f->f_fp); Py_END_ALLOW_THREADS ! if (ret != 0) goto onioerror; ! ! #ifdef MS_WIN32 ! /* can use _chsize; if, however, the newsize overflows 32-bits then ! _chsize is *not* adequate; in this case, an OverflowError is raised */ ! if (newsize > LONG_MAX) { ! PyErr_SetString(PyExc_OverflowError, ! "the new size is too long for _chsize (it is limited to 32-bit values)"); ! return NULL; ! } else { ! Py_BEGIN_ALLOW_THREADS errno = 0; ! ret = _chsize(fileno(f->f_fp), newsize); Py_END_ALLOW_THREADS + if (ret != 0) goto onioerror; } ! #else ! Py_BEGIN_ALLOW_THREADS ! errno = 0; ! ret = ftruncate(fileno(f->f_fp), newsize); ! Py_END_ALLOW_THREADS ! if (ret != 0) goto onioerror; ! #endif /* !MS_WIN32 */ ! Py_INCREF(Py_None); return Py_None; + + onioerror: + PyErr_SetFromErrno(PyExc_IOError); + clearerr(f->f_fp); + return NULL; } #endif /* HAVE_FTRUNCATE */ *************** *** 344,348 **** file_tell(PyFileObject *f, PyObject *args) { ! off_t offset; if (f->f_fp == NULL) return err_closed(); --- 438,447 ---- file_tell(PyFileObject *f, PyObject *args) { ! #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 ! fpos_t pos; ! #else ! off_t pos; ! #endif ! if (f->f_fp == NULL) return err_closed(); *************** *** 351,363 **** Py_BEGIN_ALLOW_THREADS errno = 0; ! #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) ! offset = ftello(f->f_fp); ! #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) ! offset = ftell64(f->f_fp); ! #else ! offset = ftell(f->f_fp); ! #endif Py_END_ALLOW_THREADS ! if (offset == -1) { PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp); --- 450,456 ---- Py_BEGIN_ALLOW_THREADS errno = 0; ! pos = _portable_ftell(f->f_fp); Py_END_ALLOW_THREADS ! if (pos == -1) { PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp); *************** *** 365,371 **** } #if !defined(HAVE_LARGEFILE_SUPPORT) ! return PyInt_FromLong(offset); #else ! return PyLong_FromLongLong(offset); #endif } --- 458,464 ---- } #if !defined(HAVE_LARGEFILE_SUPPORT) ! return PyInt_FromLong(pos); #else ! return PyLong_FromLongLong(pos); #endif } *************** *** 483,486 **** --- 576,584 ---- else buffersize = bytesrequested; + if (buffersize > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "requested number of bytes is more than a Python string can hold"); + return NULL; + } v = PyString_FromStringAndSize((char *)NULL, buffersize); if (v == NULL) *************** *** 519,523 **** { char *ptr; ! int ntodo, ndone, nnow; if (f->f_fp == NULL) --- 617,621 ---- { char *ptr; ! size_t ntodo, ndone, nnow; if (f->f_fp == NULL) *************** *** 541,545 **** ntodo -= nnow; } ! return PyInt_FromLong(ndone); } --- 639,643 ---- ntodo -= nnow; } ! return PyInt_FromLong((long)ndone); } *************** *** 558,562 **** register int c; register char *buf, *end; ! int n1, n2; PyObject *v; --- 656,660 ---- register int c; register char *buf, *end; ! size_t n1, n2; PyObject *v; *************** *** 597,600 **** --- 695,703 ---- n1 = n2; n2 += 1000; + if (n2 > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "line is longer than a Python string can hold"); + return NULL; + } Py_BLOCK_THREADS if (_PyString_Resize(&v, n2) < 0) *************** *** 736,739 **** --- 839,847 ---- nfilled += nread; buffersize *= 2; + if (buffersize > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "line is too long for a Python string"); + goto error; + } if (big_buffer == NULL) { /* Create the big buffer */ From python-dev@python.org Fri Aug 11 20:03:01 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 12:03:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_largefile,NONE,1.1 Message-ID: <200008111903.MAA00825@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv29798/Lib/test/output Added Files: test_largefile Log Message: Add largefile support for Linux64 and WIn64. Add test_largefile and some minor change to regrtest.py to allow optional running of test_largefile ('cause it's slow on Win64). This closes patches: http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100510&group_id=5470 and http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100511&group_id=5470 --- NEW FILE --- test_largefile From python-dev@python.org Fri Aug 11 20:55:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 12:55:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgetopt.tex,1.13,1.14 Message-ID: <200008111955.MAA07306@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv7295/lib Modified Files: libgetopt.tex Log Message: getopt(): revise description of long_options parameter slightly so it will be less confusing; add a paragraph separation so that comments about the options and long_options parameters don't have references that are easily misinterpreted. Adjust the interactive examples to not need the string module. Add an example showing how the module is commonly used in a script. Index: libgetopt.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgetopt.tex,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** libgetopt.tex 2000/04/03 20:13:53 1.13 --- libgetopt.tex 2000/08/11 19:55:06 1.14 *************** *** 22,44 **** \var{options} is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon ! (i.e., the same format that \UNIX{} \cfunction{getopt()} uses). If ! specified, \var{long_options} is a list of strings with the names of ! the long options which should be supported. The leading \code{'-}\code{-'} characters should not be included in the option ! name. Options which require an argument should be followed by an ! equal sign (\code{'='}). The return value consists of two elements: the first is a list of \code{(\var{option}, \var{value})} pairs; the second is the list of program arguments left after the option list was stripped (this is a ! trailing slice of the first argument). ! Each option-and-value pair returned has the option as its first ! element, prefixed with a hyphen for short options (e.g., \code{'-x'}) ! or two hyphens for long options (e.g., \code{'-}\code{-long-option'}), ! and the option argument as its second element, or an empty string if ! the option has no argument. ! The options occur in the list in the same order in which they were ! found, thus allowing multiple occurrences. Long and short options may ! be mixed. \end{funcdesc} --- 22,45 ---- \var{options} is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon ! (\character{:}; i.e., the same format that \UNIX{} ! \cfunction{getopt()} uses). ! ! \var{long_options}, if specified, must be a list of strings with the ! names of the long options which should be supported. The leading \code{'-}\code{-'} characters should not be included in the option ! name. Long options which require an argument should be followed by an ! equal sign (\character{=}). The return value consists of two elements: the first is a list of \code{(\var{option}, \var{value})} pairs; the second is the list of program arguments left after the option list was stripped (this is a ! trailing slice of \var{args}). Each option-and-value pair returned ! has the option as its first element, prefixed with a hyphen for short ! options (e.g., \code{'-x'}) or two hyphens for long options (e.g., ! \code{'-}\code{-long-option'}), and the option argument as its second ! element, or an empty string if the option has no argument. The ! options occur in the list in the same order in which they were found, ! thus allowing multiple occurrences. Long and short options may be ! mixed. \end{funcdesc} *************** *** 62,67 **** \begin{verbatim} ! >>> import getopt, string ! >>> args = string.split('-a -b -cfoo -d bar a1 a2') >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] --- 63,68 ---- \begin{verbatim} ! >>> import getopt ! >>> args = '-a -b -cfoo -d bar a1 a2'.split() >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] *************** *** 71,75 **** >>> args ['a1', 'a2'] - >>> \end{verbatim} --- 72,75 ---- *************** *** 78,82 **** \begin{verbatim} >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' ! >>> args = string.split(s) >>> args ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] --- 78,82 ---- \begin{verbatim} >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' ! >>> args = s.split() >>> args ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] *************** *** 88,91 **** >>> args ['a1', 'a2'] ! >>> \end{verbatim} --- 88,115 ---- >>> args ['a1', 'a2'] ! \end{verbatim} ! ! In a script, typical usage is something like this: ! ! \begin{verbatim} ! import getopt, sys ! ! def main(): ! try: ! opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="]) ! except getopt.GetoptError: ! # print help information and exit: ! usage() ! sys.exit(2) ! output = None ! for o, a in opts: ! if o in ("-h", "--help"): ! usage() ! sys.exit() ! if o in ("-o", "--output"): ! output = a ! # ... ! ! if __name__ == "__main__": ! main() \end{verbatim} From python-dev@python.org Fri Aug 11 21:04:24 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:04:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.79,1.80 Message-ID: <200008112004.NAA10914@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv10846/perl Modified Files: python.perl Log Message: do_env_cfuncdesc(): Push as much of the generated HTML into one place as possible for better readability. Revise a comment. Index: python.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v retrieving revision 1.79 retrieving revision 1.80 diff -C2 -r1.79 -r1.80 *** python.perl 2000/08/09 13:45:04 1.79 --- python.perl 2000/08/11 20:04:19 1.80 *************** *** 645,665 **** "$function_name()" . get_indexsubitem()); $idx =~ s/ \(.*\)//; ! $idx =~ s/\(\)//; # ???? my $result_rc = get_refcount($function_name, ''); my $rcinfo = ''; if ($result_rc eq '+1') { ! $rcinfo = 'Return value:' ! . "\n New reference."; } elsif ($result_rc eq '0') { ! $rcinfo = 'Return value:' ! . "\n Borrowed reference."; } elsif ($result_rc eq 'null') { ! $rcinfo = 'Return value:' ! . "\n Always NULL."; } if ($rcinfo ne '') { ! $rcinfo = "\n
    \n $rcinfo\n
    "; } return "
    $return_type $idx ($arg_list)\n
    " --- 645,665 ---- "$function_name()" . get_indexsubitem()); $idx =~ s/ \(.*\)//; ! $idx =~ s/\(\)//; # ???? - why both of these? my $result_rc = get_refcount($function_name, ''); my $rcinfo = ''; if ($result_rc eq '+1') { ! $rcinfo = 'New reference'; } elsif ($result_rc eq '0') { ! $rcinfo = 'Borrowed reference'; } elsif ($result_rc eq 'null') { ! $rcinfo = 'Always NULL'; } if ($rcinfo ne '') { ! $rcinfo = ( "\n
    " ! . "\n Return value:" ! . "\n $rcinfo." ! . "\n
    "); } return "
    $return_type $idx ($arg_list)\n
    " From python-dev@python.org Fri Aug 11 21:19:54 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:19:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libos.tex,1.45,1.46 Message-ID: <200008112019.NAA16861@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv16854/lib Modified Files: libos.tex Log Message: O_BINARY: Documented this constant; omission noted by David Ascher. access(): Corrected availability statement; error pointed out by Tim Peters. Index: libos.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libos.tex,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -r1.45 -r1.46 *** libos.tex 2000/07/19 17:30:58 1.45 --- libos.tex 2000/08/11 20:19:51 1.46 *************** *** 476,480 **** --- 476,487 ---- \end{datadesc} + \begin{datadesc}{O_BINARY} + Option for the \var{flag} argument to the \function{open()} function. + This can be bit-wise OR'd together with those listed above. + Availability: Macintosh, Windows. + % XXX need to check on the availability of this one. + \end{datadesc} + \subsection{Files and Directories \label{os-file-dir}} *************** *** 486,490 **** permissions. Return \code{1} if access is allowed, \code{0} if not. See the \UNIX{} man page \manpage{access}{2} for more information. ! Availability: \UNIX{}. \end{funcdesc} --- 493,497 ---- permissions. Return \code{1} if access is allowed, \code{0} if not. See the \UNIX{} man page \manpage{access}{2} for more information. ! Availability: \UNIX{}, Windows. \end{funcdesc} From python-dev@python.org Fri Aug 11 21:34:30 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:34:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libxmllib.tex,1.24,1.25 Message-ID: <200008112034.NAA17997@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17990/lib Modified Files: libxmllib.tex Log Message: Some minor clarifications and added some index entries. Index: libxmllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libxmllib.tex,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** libxmllib.tex 2000/07/16 19:01:10 1.24 --- libxmllib.tex 2000/08/11 20:34:27 1.25 *************** *** 102,110 **** \begin{methoddesc}{handle_doctype}{tag, pubid, syslit, data} ! This method is called when the \samp{} tag is processed. ! The arguments are the name of the root element, the Formal Public ! Identifier (or \code{None} if not specified), the system identifier, ! and the uninterpreted contents of the internal DTD subset as a string ! (or \code{None} if not present). \end{methoddesc} --- 102,111 ---- \begin{methoddesc}{handle_doctype}{tag, pubid, syslit, data} ! This\index{DOCTYPE declaration} method is called when the ! \samp{} declaration is processed. The arguments are the ! tag name of the root element, the Formal Public\index{Formal Public ! Identifier} Identifier (or \code{None} if not specified), the system ! identifier, and the uninterpreted contents of the internal DTD subset ! as a string (or \code{None} if not present). \end{methoddesc} *************** *** 112,126 **** This method is called to handle start tags for which a start tag handler is defined in the instance variable \member{elements}. The ! \var{tag} argument is the name of the tag, and the \var{method} ! argument is the function (method) which should be used to support semantic ! interpretation of the start tag. The \var{attributes} argument is a ! dictionary of attributes, the key being the \var{name} and the value ! being the \var{value} of the attribute found inside the tag's ! \code{<>} brackets. Character and entity references in the ! \var{value} have been interpreted. For instance, for the start tag ! \code{}, this method would be called as ! \code{handle_starttag('A', self.elements['A'][0], \{'HREF': 'http://www.cwi.nl/'\})}. ! The base implementation simply calls \var{method} with \var{attributes} ! as the only argument. \end{methoddesc} --- 113,127 ---- This method is called to handle start tags for which a start tag handler is defined in the instance variable \member{elements}. The ! \var{tag} argument is the name of the tag, and the ! \var{method} argument is the function (method) which should be used to ! support semantic interpretation of the start tag. The ! \var{attributes} argument is a dictionary of attributes, the key being ! the \var{name} and the value being the \var{value} of the attribute ! found inside the tag's \code{<>} brackets. Character and entity ! references in the \var{value} have been interpreted. For instance, ! for the start tag \code{}, this method ! would be called as \code{handle_starttag('A', self.elements['A'][0], ! \{'HREF': 'http://www.cwi.nl/'\})}. The base implementation simply ! calls \var{method} with \var{attributes} as the only argument. \end{methoddesc} *************** *** 188,195 **** \var{data} argument is a string containing the text between the \samp{} delimiters, but not the delimiters ! themselves. For example, the entity \samp{} will ! cause this method to be called with the argument \code{'ENTITY text'}. The ! default method does nothing. Note that \samp{} is ! handled separately if it is located at the start of the document. \end{methoddesc} --- 189,197 ---- \var{data} argument is a string containing the text between the \samp{} delimiters, but not the delimiters ! themselves. For example, the \index{ENTITY declaration}entity ! declaration \samp{} will cause this method to be called ! with the argument \code{'ENTITY text'}. The default method does ! nothing. Note that \samp{} is handled separately if it ! is located at the start of the document. \end{methoddesc} From python-dev@python.org Fri Aug 11 21:39:31 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:39:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api api.tex,1.75,1.76 Message-ID: <200008112039.NAA18395@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv18384/api Modified Files: api.tex Log Message: PyRun_InteractiveOne(), PyRun_InteractiveLoop(): Added descriptions. PyExc_WindowsError: Added to list of standard exceptions and added note about the right preprocessor symbol to use to protect code that uses it. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -r1.75 -r1.76 *** api.tex 2000/08/11 17:07:32 1.75 --- api.tex 2000/08/11 20:39:29 1.76 *************** *** 603,607 **** value of \cfunction{PyRun_InteractiveLoop()}, otherwise return the result of \cfunction{PyRun_SimpleFile()}. If \var{filename} is ! \NULL{}, this function uses \code{'???'} as the filename. \end{cfuncdesc} --- 603,607 ---- value of \cfunction{PyRun_InteractiveLoop()}, otherwise return the result of \cfunction{PyRun_SimpleFile()}. If \var{filename} is ! \NULL{}, this function uses \code{"???"} as the filename. \end{cfuncdesc} *************** *** 621,627 **** --- 621,640 ---- \begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *fp, char *filename} + Read and execute a single statement from a file associated with an + interactive device. If \var{filename} is \NULL, \code{"???"} is + used instead. The user will be prompted using \code{sys.ps1} and + \code{sys.ps2}. Returns \code{0} when the input was executed + successfully, \code{-1} if there was an exception, or an error code + from the \file{errcode.h} include file distributed as part of Python + in case of a parse error. (Note that \file{errcode.h} is not + included by \file{Python.h}, so must be included specifically if + needed.) \end{cfuncdesc} \begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *fp, char *filename} + Read and execute statements from a file associated with an + interactive device until \EOF{} is reached. If \var{filename} is + \NULL, \code{"???"} is used instead. The user will be prompted + using \code{sys.ps1} and \code{sys.ps2}. Returns \code{0} at \EOF. \end{cfuncdesc} *************** *** 984,995 **** \lineiii{PyExc_TypeError}{\exception{TypeError}}{} \lineiii{PyExc_ValueError}{\exception{ValueError}}{} \lineiii{PyExc_ZeroDivisionError}{\exception{ZeroDivisionError}}{} \end{tableiii} \noindent ! Note: \begin{description} \item[(1)] This is a base class for other standard exceptions. \end{description} --- 997,1013 ---- \lineiii{PyExc_TypeError}{\exception{TypeError}}{} \lineiii{PyExc_ValueError}{\exception{ValueError}}{} + \lineiii{PyExc_WindowsError}{\exception{WindowsError}}{(2)} \lineiii{PyExc_ZeroDivisionError}{\exception{ZeroDivisionError}}{} \end{tableiii} \noindent ! Notes: \begin{description} \item[(1)] This is a base class for other standard exceptions. + + \item[(2)] + Only defined on Windows; protect code that uses this by testing that + the preprocessor macro \code{MS_WINDOWS} is defined. \end{description} From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.21,1.22 Message-ID: <200008112215.PAA16823@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Lib Modified Files: dis.py Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** dis.py 2000/03/30 15:02:11 1.21 --- dis.py 2000/08/11 22:15:52 1.22 *************** *** 207,212 **** name_op('STORE_NAME', 90) # Index in name list name_op('DELETE_NAME', 91) # "" ! def_op('UNPACK_TUPLE', 92) # Number of tuple items ! def_op('UNPACK_LIST', 93) # Number of list items name_op('STORE_ATTR', 95) # Index in name list name_op('DELETE_ATTR', 96) # "" --- 207,212 ---- name_op('STORE_NAME', 90) # Index in name list name_op('DELETE_NAME', 91) # "" ! def_op('UNPACK_SEQUENCE', 92) # Number of tuple items ! name_op('STORE_ATTR', 95) # Index in name list name_op('DELETE_ATTR', 96) # "" From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.19,1.20 Message-ID: <200008112215.PAA16818@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Doc/lib Modified Files: libdis.tex Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** libdis.tex 2000/06/15 18:44:30 1.19 --- libdis.tex 2000/08/11 22:15:52 1.20 *************** *** 338,349 **** \end{opcodedesc} ! \begin{opcodedesc}{UNPACK_TUPLE}{count} Unpacks TOS into \var{count} individual values, which are put onto the stack right-to-left. \end{opcodedesc} ! \begin{opcodedesc}{UNPACK_LIST}{count} ! Unpacks TOS into \var{count} individual values. ! \end{opcodedesc} %\begin{opcodedesc}{UNPACK_ARG}{count} --- 338,349 ---- \end{opcodedesc} ! \begin{opcodedesc}{UNPACK_SEQUENCE}{count} Unpacks TOS into \var{count} individual values, which are put onto the stack right-to-left. \end{opcodedesc} ! %\begin{opcodedesc}{UNPACK_LIST}{count} ! %This opcode is obsolete. ! %\end{opcodedesc} %\begin{opcodedesc}{UNPACK_ARG}{count} From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include opcode.h,2.25,2.26 Message-ID: <200008112215.PAA16817@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Include Modified Files: opcode.h Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** opcode.h 2000/06/30 23:58:04 2.25 --- opcode.h 2000/08/11 22:15:52 2.26 *************** *** 77,82 **** #define STORE_NAME 90 /* Index in name list */ #define DELETE_NAME 91 /* "" */ ! #define UNPACK_TUPLE 92 /* Number of tuple items */ ! #define UNPACK_LIST 93 /* Number of list items */ #define STORE_ATTR 95 /* Index in name list */ #define DELETE_ATTR 96 /* "" */ --- 77,82 ---- #define STORE_NAME 90 /* Index in name list */ #define DELETE_NAME 91 /* "" */ ! #define UNPACK_SEQUENCE 92 /* Number of sequence items */ ! #define STORE_ATTR 95 /* Index in name list */ #define DELETE_ATTR 96 /* "" */ From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.188,2.189 compile.c,2.119,2.120 import.c,2.144,2.145 Message-ID: <200008112215.PAA16838@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Python Modified Files: ceval.c compile.c import.c Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.188 retrieving revision 2.189 diff -C2 -r2.188 -r2.189 *** ceval.c 2000/08/07 06:34:45 2.188 --- ceval.c 2000/08/11 22:15:52 2.189 *************** *** 1166,1171 **** #endif ! case UNPACK_TUPLE: ! case UNPACK_LIST: v = POP(); if (PyTuple_Check(v)) { --- 1166,1170 ---- #endif ! case UNPACK_SEQUENCE: v = POP(); if (PyTuple_Check(v)) { Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.119 retrieving revision 2.120 diff -C2 -r2.119 -r2.120 *** compile.c 2000/08/07 19:22:43 2.119 --- compile.c 2000/08/11 22:15:52 2.120 *************** *** 1730,1734 **** static void ! com_assign_tuple(struct compiling *c, node *n, int assigning) { int i; --- 1730,1734 ---- static void ! com_assign_sequence(struct compiling *c, node *n, int assigning) { int i; *************** *** 1737,1741 **** if (assigning) { i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_TUPLE, i); com_push(c, i-1); } --- 1737,1741 ---- if (assigning) { i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_SEQUENCE, i); com_push(c, i-1); } *************** *** 1745,1761 **** static void - com_assign_list(struct compiling *c, node *n, int assigning) - { - int i; - if (assigning) { - i = (NCH(n)+1)/2; - com_addoparg(c, UNPACK_LIST, i); - com_push(c, i-1); - } - for (i = 0; i < NCH(n); i += 2) - com_assign(c, CHILD(n, i), assigning); - } - - static void com_assign_name(struct compiling *c, node *n, int assigning) { --- 1745,1748 ---- *************** *** 1776,1780 **** case testlist: if (NCH(n) > 1) { ! com_assign_tuple(c, n, assigning); return; } --- 1763,1767 ---- case testlist: if (NCH(n) > 1) { ! com_assign_sequence(c, n, assigning); return; } *************** *** 1844,1848 **** return; } ! com_assign_list(c, n, assigning); return; case NAME: --- 1831,1835 ---- return; } ! com_assign_sequence(c, n, assigning); return; case NAME: *************** *** 2870,2874 **** else { int i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_TUPLE, i); com_push(c, i-1); for (i = 0; i < NCH(n); i += 2) --- 2857,2861 ---- else { int i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_SEQUENCE, i); com_push(c, i-1); for (i = 0; i < NCH(n); i += 2) Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.144 retrieving revision 2.145 diff -C2 -r2.144 -r2.145 *** import.c 2000/07/23 09:20:08 2.144 --- import.c 2000/08/11 22:15:52 2.145 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50428 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50811 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Fri Aug 11 23:18:07 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Fri, 11 Aug 2000 15:18:07 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.8,1.9 Message-ID: <200008112218.PAA18634@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv17808 Modified Files: pep2html.py Log Message: special case lines beginning with "[*]" as non-header add optical sugar Index: pep2html.py =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** pep2html.py 2000/07/28 06:40:10 1.8 --- pep2html.py 2000/08/11 22:18:04 1.9 *************** *** 92,96 **** break if line[0] != "\f": ! if line[0].strip(): if line.strip() == LOCALVARS: break --- 92,96 ---- break if line[0] != "\f": ! if line[0].strip() and line[:3] != '[*]': if line.strip() == LOCALVARS: break *************** *** 110,115 **** update = 1 for file in glob.glob("pep-*.txt"): ! print file, "..." ! fixfile(file, os.path.splitext(file)[0] + ".html") if len(sys.argv) > 1 and sys.argv[1] == "-n": --- 110,116 ---- update = 1 for file in glob.glob("pep-*.txt"): ! newfile = os.path.splitext(file)[0] + ".html" ! print file, "->", newfile ! fixfile(file, newfile) if len(sys.argv) > 1 and sys.argv[1] == "-n": From python-dev@python.org Fri Aug 11 23:26:38 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:26:38 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.93,1.94 Message-ID: <200008112226.PAA27714@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv25315 Modified Files: Makefile.in Log Message: 'make' in Grammar too, so graminit.h and graminit.c get re-build when necessary. Do Grammar after Parser because Grammar needs Parser, and not the other way 'round. This patch doesn't bother with dependencies because it's tricky to get right (for instance for the modules that want graminit.h, like cPickle) and other dependencies are broken to begin with. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.93 retrieving revision 1.94 diff -C2 -r1.93 -r1.94 *** Makefile.in 2000/08/03 15:52:30 1.93 --- Makefile.in 2000/08/11 22:26:35 1.94 *************** *** 127,134 **** # Subdirectories where to run make recursively ! SUBDIRS= Parser Objects Python Modules # Other subdirectories ! SUBDIRSTOO= Include Lib Misc Demo Grammar # Files and directories to be distributed --- 127,134 ---- # Subdirectories where to run make recursively ! SUBDIRS= Parser Grammar Objects Python Modules # Other subdirectories ! SUBDIRSTOO= Include Lib Misc Demo # Files and directories to be distributed *************** *** 195,198 **** --- 195,202 ---- $(SUBDIRS): Makefiles + + Grammar: + cd Grammar ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \ + prefix="$(prefix)" exec_prefix="$(exec_prefix)" all Parser: From python-dev@python.org Sat Aug 12 00:20:36 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 16:20:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild _socket.dsp,1.2,1.3 _sre.dsp,1.3,1.4 _tkinter.dsp,1.15,1.16 bsddb.dsp,1.11,1.12 mmap.dsp,1.5,1.6 parser.dsp,1.9,1.10 pyexpat.dsp,1.3,1.4 python.dsp,1.11,1.12 python20.dsp,1.5,1.6 pythonw.dsp,1.9,1.10 select.dsp,1.2,1.3 ucnhash.dsp,1.4,1.5 unicodedata.dsp,1.4,1.5 winreg.dsp,1.5,1.6 winsound.dsp,1.4,1.5 zlib.dsp,1.12,1.13 pcbuild.dsw,1.18,1.19 readme.txt,1.10,1.11 Message-ID: <200008112320.QAA25291@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv22107 Modified Files: _socket.dsp _sre.dsp _tkinter.dsp bsddb.dsp mmap.dsp parser.dsp pyexpat.dsp python.dsp python20.dsp pythonw.dsp select.dsp ucnhash.dsp unicodedata.dsp winreg.dsp winsound.dsp zlib.dsp pcbuild.dsw readme.txt Log Message: These files all used to be tagged as binary in CVS. I recently changed this so that these files are treated as normal text files (which they are). However, the files also had to be changed to be stored in CVS internally with UNIX line terminators (they had DOS line terminators internally before this commit). Index: _socket.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_socket.dsp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** _socket.dsp 2000/04/21 21:26:07 1.2 --- _socket.dsp 2000/08/11 23:20:32 1.3 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project Index: _sre.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_sre.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** _sre.dsp 2000/04/21 21:26:07 1.3 --- _sre.dsp 2000/08/11 23:20:32 1.4 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: _tkinter.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_tkinter.dsp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** _tkinter.dsp 2000/06/30 14:33:47 1.15 --- _tkinter.dsp 2000/08/11 23:20:32 1.16 *************** *** 1,197 **** ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,197 ---- ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: bsddb.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/bsddb.dsp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** bsddb.dsp 2000/07/01 03:27:22 1.11 --- bsddb.dsp 2000/08/11 23:20:32 1.12 *************** *** 1,188 **** ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,188 ---- ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: mmap.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/mmap.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** mmap.dsp 2000/07/01 03:12:59 1.5 --- mmap.dsp 2000/08/11 23:20:32 1.6 *************** *** 1,97 **** ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project --- 1,97 ---- ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project Index: parser.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/parser.dsp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** parser.dsp 2000/04/21 21:26:07 1.9 --- parser.dsp 2000/08/11 23:20:32 1.10 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pyexpat.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pyexpat.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pyexpat.dsp 2000/04/21 21:26:07 1.3 --- pyexpat.dsp 2000/08/11 23:20:32 1.4 *************** *** 1,190 **** ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project --- 1,190 ---- ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project Index: python.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python.dsp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** python.dsp 2000/04/21 21:26:07 1.11 --- python.dsp 2000/08/11 23:20:32 1.12 *************** *** 1,170 **** ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project --- 1,170 ---- ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project Index: python20.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** python20.dsp 2000/07/01 04:03:32 1.5 --- python20.dsp 2000/08/11 23:20:32 1.6 *************** *** 1,1690 **** ! # Microsoft Developer Studio Project File - Name="python20" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=python20 - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run [...3351 lines suppressed...] ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\yuvconvert.c ! ! !IF "$(CFG)" == "python20 - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pythonw.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pythonw.dsp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pythonw.dsp 2000/04/21 21:26:07 1.9 --- pythonw.dsp 2000/08/11 23:20:32 1.10 *************** *** 1,184 **** ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,184 ---- ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: select.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/select.dsp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** select.dsp 2000/04/21 21:26:07 1.2 --- select.dsp 2000/08/11 23:20:32 1.3 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project Index: ucnhash.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/ucnhash.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** ucnhash.dsp 2000/07/01 04:03:32 1.4 --- ucnhash.dsp 2000/08/11 23:20:32 1.5 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project Index: unicodedata.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/unicodedata.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** unicodedata.dsp 2000/07/01 04:03:32 1.4 --- unicodedata.dsp 2000/08/11 23:20:32 1.5 *************** *** 1,103 **** ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project --- 1,103 ---- ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project Index: winreg.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winreg.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** winreg.dsp 2000/07/01 03:12:59 1.5 --- winreg.dsp 2000/08/11 23:20:32 1.6 *************** *** 1,108 **** ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,108 ---- ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: winsound.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winsound.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** winsound.dsp 2000/07/01 04:03:32 1.4 --- winsound.dsp 2000/08/11 23:20:32 1.5 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project Index: zlib.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/zlib.dsp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** zlib.dsp 2000/05/02 12:44:22 1.12 --- zlib.dsp 2000/08/11 23:20:32 1.13 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project Index: pcbuild.dsw =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pcbuild.dsw,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** pcbuild.dsw 2000/07/01 03:15:37 1.18 --- pcbuild.dsw 2000/08/11 23:20:32 1.19 *************** *** 1,254 **** ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! --- 1,254 ---- ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! Index: readme.txt =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/readme.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** readme.txt 2000/07/01 20:38:27 1.10 --- readme.txt 2000/08/11 23:20:32 1.11 *************** *** 1,98 **** ! Building Python using VC++ 6.0 or 5.0 ! ------------------------------------- ! This directory is used to build Python for Win32 platforms, e.g. Windows ! 95, 98 and NT. It requires Microsoft Visual C++ 6.x or 5.x. ! (For other Windows platforms and compilers, see ../PC/readme.txt.) ! XXX There are still (Python 2.0b1) a few compiler warnings under VC6. ! XXX There are likely a few more under VC5. ! ! Unlike older versions, there's no longer a need to copy the project files ! from a subdirectory of PC/ to the PCbuild directory -- they come in PCbuild. ! ! All you need to do is open the workspace "pcbuild.dsw" in MSVC++, select ! the Debug or Release setting (using Build -> Set Active Configuration...), ! and build the projects. ! ! The proper order to build subprojects is: ! ! 1) python20 (this builds the main Python DLL and library files, ! python20.{dll, lib}) ! ! 2) python (this builds the main Python executable, python.exe) ! ! 3) the other subprojects, as desired or needed (note: you probably don't ! want to build most of the other subprojects, unless you're building an ! entire Python distribution from scratch, or specifically making changes ! to the subsystems they implement; see SUBPROJECTS below) ! ! When using the Debug setting, the output files have a _d added to ! their name: python20_d.dll, python_d.exe, parser_d.pyd, and so on. ! ! SUBPROJECTS ! ----------- ! These subprojects should build out of the box. Subprojects other than the ! main ones (python20, python, pythonw) generally build a DLL (renamed to ! .pyd) from a specific module so that users don't have to load the code ! supporting that module unless they import the module. ! ! python20 ! .dll and .lib ! python ! .exe ! pythonw ! pythonw.exe, a variant of python.exe that doesn't pop up a DOS box ! _socket ! socketmodule.c ! _sre ! Unicode-aware regular expression engine ! mmap ! mmapmodule.c ! parser ! the parser module ! select ! selectmodule.c ! ucnhash, unicodedata ! large tables of Unicode data ! winreg ! Windows registry API ! winsound ! play sounds (typically .wav files) under Windows ! ! The following subprojects will generally NOT build out of the box. They ! wrap code Python doesn't control, and you'll need to download the base ! packages first (study the subproject structure from within MSVC to see ! where each expects to find the unpacked packages): ! ! _tkinter ! Python wrapper for the Tk windowing system. Requires tcl831.exe from ! http://dev.scriptics.com/software/tcltk/downloadnow83.html ! ! zlib ! Python wrapper for the zlib compression library. Requires ! http://www.winimage.com/zLibDll/zlib133dll.zip ! and ! ftp://ftp.uu.net/graphics/png/src/zlib133.zip ! ! bsddb ! Python wrapper for the BSD database 1.85. Requires db.1.85.win32.zip, ! from the "bsd db" link at ! http://www.nightmare.com/software.html ! ! pyexpat ! Python wrapper for accelerated XML parsing. Requires ! ftp://ftp.jclark.com/pub/xml/expat.zip ! ! ! NOTE ON CONFIGURATIONS ! ---------------------- ! Under Build -> Configuration ..., you'll find several Alpha configurations, ! such as "Win32 Alpha Release". These do not refer to alpha versions (as in ! alpha, beta, final), but to the DEC/COMPAQ Alpha processor. Ignore them if ! you're not building on an Alpha box. ! ! ! YOUR OWN EXTENSION DLLs ! ----------------------- ! If you want to create your own extension module DLL, there's an example ! with easy-to-follow instructions in ../PC/example/; read the file ! readme.txt there first. --- 1,98 ---- ! Building Python using VC++ 6.0 or 5.0 ! ------------------------------------- ! This directory is used to build Python for Win32 platforms, e.g. Windows ! 95, 98 and NT. It requires Microsoft Visual C++ 6.x or 5.x. ! (For other Windows platforms and compilers, see ../PC/readme.txt.) ! XXX There are still (Python 2.0b1) a few compiler warnings under VC6. ! XXX There are likely a few more under VC5. ! ! Unlike older versions, there's no longer a need to copy the project files ! from a subdirectory of PC/ to the PCbuild directory -- they come in PCbuild. ! ! All you need to do is open the workspace "pcbuild.dsw" in MSVC++, select ! the Debug or Release setting (using Build -> Set Active Configuration...), ! and build the projects. ! ! The proper order to build subprojects is: ! ! 1) python20 (this builds the main Python DLL and library files, ! python20.{dll, lib}) ! ! 2) python (this builds the main Python executable, python.exe) ! ! 3) the other subprojects, as desired or needed (note: you probably don't ! want to build most of the other subprojects, unless you're building an ! entire Python distribution from scratch, or specifically making changes ! to the subsystems they implement; see SUBPROJECTS below) ! ! When using the Debug setting, the output files have a _d added to ! their name: python20_d.dll, python_d.exe, parser_d.pyd, and so on. ! ! SUBPROJECTS ! ----------- ! These subprojects should build out of the box. Subprojects other than the ! main ones (python20, python, pythonw) generally build a DLL (renamed to ! .pyd) from a specific module so that users don't have to load the code ! supporting that module unless they import the module. ! ! python20 ! .dll and .lib ! python ! .exe ! pythonw ! pythonw.exe, a variant of python.exe that doesn't pop up a DOS box ! _socket ! socketmodule.c ! _sre ! Unicode-aware regular expression engine ! mmap ! mmapmodule.c ! parser ! the parser module ! select ! selectmodule.c ! ucnhash, unicodedata ! large tables of Unicode data ! winreg ! Windows registry API ! winsound ! play sounds (typically .wav files) under Windows ! ! The following subprojects will generally NOT build out of the box. They ! wrap code Python doesn't control, and you'll need to download the base ! packages first (study the subproject structure from within MSVC to see ! where each expects to find the unpacked packages): ! ! _tkinter ! Python wrapper for the Tk windowing system. Requires tcl831.exe from ! http://dev.scriptics.com/software/tcltk/downloadnow83.html ! ! zlib ! Python wrapper for the zlib compression library. Requires ! http://www.winimage.com/zLibDll/zlib133dll.zip ! and ! ftp://ftp.uu.net/graphics/png/src/zlib133.zip ! ! bsddb ! Python wrapper for the BSD database 1.85. Requires db.1.85.win32.zip, ! from the "bsd db" link at ! http://www.nightmare.com/software.html ! ! pyexpat ! Python wrapper for accelerated XML parsing. Requires ! ftp://ftp.jclark.com/pub/xml/expat.zip ! ! ! NOTE ON CONFIGURATIONS ! ---------------------- ! Under Build -> Configuration ..., you'll find several Alpha configurations, ! such as "Win32 Alpha Release". These do not refer to alpha versions (as in ! alpha, beta, final), but to the DEC/COMPAQ Alpha processor. Ignore them if ! you're not building on an Alpha box. ! ! ! YOUR OWN EXTENSION DLLs ! ----------------------- ! If you want to create your own extension module DLL, there's an example ! with easy-to-follow instructions in ../PC/example/; read the file ! readme.txt there first. From python-dev@python.org Sat Aug 12 04:36:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 20:36:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.28,1.29 Message-ID: <200008120336.UAA14647@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14640/lib Modified Files: libstdtypes.tex Log Message: Added Marc-Andre Lemburg's documentation for string methods, with some massaging for markup consistency. This closes SourceForge patch #101063. Added Unicode strings and buffer objects to the list of sequence types. Small markup nits elsewhere. Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** libstdtypes.tex 2000/08/08 16:15:49 1.28 --- libstdtypes.tex 2000/08/12 03:36:23 1.29 *************** *** 123,130 **** \item[(1)] \code{<>} and \code{!=} are alternate spellings for the same operator. ! (I couldn't choose between \ABC{} and \C{}! :-) \index{ABC language@\ABC{} language} \index{language!ABC@\ABC{}} ! \indexii{C@\C{}}{language} \code{!=} is the preferred spelling; \code{<>} is obsolescent. --- 123,130 ---- \item[(1)] \code{<>} and \code{!=} are alternate spellings for the same operator. ! (I couldn't choose between \ABC{} and C! :-) \index{ABC language@\ABC{} language} \index{language!ABC@\ABC{}} ! \indexii{C}{language} \code{!=} is the preferred spelling; \code{<>} is obsolescent. *************** *** 255,263 **** \item[(2)] Conversion from floating point to (long or plain) integer may round or ! truncate as in \C{}; see functions \function{floor()} and \function{ceil()} in ! module \refmodule{math}\refbimodindex{math} for well-defined conversions. \withsubitem{(in module math)}{\ttindex{floor()}\ttindex{ceil()}} \indexii{numeric}{conversions} ! \indexii{C@\C{}}{language} \item[(3)] --- 255,264 ---- \item[(2)] Conversion from floating point to (long or plain) integer may round or ! truncate as in C; see functions \function{floor()} and ! \function{ceil()} in the \refmodule{math}\refbimodindex{math} module ! for well-defined conversions. \withsubitem{(in module math)}{\ttindex{floor()}\ttindex{ceil()}} \indexii{numeric}{conversions} ! \indexii{C}{language} \item[(3)] *************** *** 312,328 **** \subsection{Sequence Types \label{typesseq}} ! There are three sequence types: strings, lists and tuples. Strings literals are written in single or double quotes: \code{'xyzzy'}, \code{"frobozz"}. See chapter 2 of the ! \citetitle[../ref/ref.html]{Python Reference Manual} for more about ! string literals. Lists are constructed with square brackets, separating items with commas: \code{[a, b, c]}. Tuples are constructed by the comma operator (not within square brackets), with or without enclosing parentheses, but an empty tuple must have the enclosing parentheses, e.g., \code{a, b, c} or \code{()}. A single ! item tuple must have a trailing comma, e.g., \code{(d,)}. \indexii{sequence}{types} \indexii{string}{type} \indexii{tuple}{type} \indexii{list}{type} --- 313,336 ---- \subsection{Sequence Types \label{typesseq}} ! There are five sequence types: strings, Unicode strings, lists, ! tuples, and buffers. Strings literals are written in single or double quotes: \code{'xyzzy'}, \code{"frobozz"}. See chapter 2 of the ! \citetitle[../ref/strings.html]{Python Reference Manual} for more about ! string literals. Unicode strings are much like strings, but are ! specified in the syntax using a preceeding \character{u} character: ! \code{u'abc'}, \code{u"def"}. Lists are constructed with square brackets, separating items with commas: \code{[a, b, c]}. Tuples are constructed by the comma operator (not within square brackets), with or without enclosing parentheses, but an empty tuple must have the enclosing parentheses, e.g., \code{a, b, c} or \code{()}. A single ! item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are ! not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} \indexii{sequence}{types} \indexii{string}{type} + \indexii{Unicode}{type} + \indexii{buffer}{type} \indexii{tuple}{type} \indexii{list}{type} *************** *** 386,395 **** \end{description} ! \subsubsection{More String Operations \label{typesseq-strings}} String objects have one unique built-in operation: the \code{\%} operator (modulo) with a string left argument interprets this string ! as a \C{} \cfunction{sprintf()} format string to be applied to the right argument, and returns the string resulting from this formatting operation. --- 394,588 ---- \end{description} + + \subsubsection{String Methods \label{string-methods}} + + These are the string methods which both 8-bit strings and Unicode + objects support: + + \begin{methoddesc}[string]{capitalize}{} + Return a copy of the string with only its first character capitalized. + \end{methoddesc} + + \begin{methoddesc}[string]{center}{width} + Return centered in a string of length \var{width}. Padding is done + using spaces. + \end{methoddesc} + + \begin{methoddesc}[string]{count}{sub\optional{, start\optional{, end}}} + Return the number of occurrences of substring \var{sub} in string + S\code{[\var{start}:\var{end}]}. Optional arguments \var{start} and + \var{end} are interpreted as in slice notation. + \end{methoddesc} + + \begin{methoddesc}[string]{encode}{\optional{encoding\optional{,errors}}} + Return an encoded version of the string. Default encoding is the current + default string encoding. \var{errors} may be given to set a different + error handling scheme. The default for \var{errors} is + \code{'strict'}, meaning that encoding errors raise a + \exception{ValueError}. Other possible values are \code{'ignore'} and + \code{'replace'}. + \end{methoddesc} + + \begin{methoddesc}[string]{endswith}{suffix\optional{, start\optional{, end}}} + Return true if the string ends with the specified \var{suffix}, + otherwise return false. With optional \var{start}, test beginning at + that position. With optional \var{end}, stop comparing at that position. + \end{methoddesc} + + \begin{methoddesc}[string]{expandtabs}{\optional{tabsize}} + Return a copy of the string where all tab characters are expanded + using spaces. If \var{tabsize} is not given, a tab size of \code{8} + characters is assumed. + \end{methoddesc} + + \begin{methoddesc}[string]{find}{sub\optional{, start\optional{, end}}} + Return the lowest index in the string where substring \var{sub} is + found, such that \var{sub} is contained in the range [\var{start}, + \var{end}). Optional arguments \var{start} and \var{end} are + interpreted as in slice notation. Return \code{-1} if \var{sub} is + not found. + \end{methoddesc} + + \begin{methoddesc}[string]{index}{sub\optional{, start\optional{, end}}} + Like \method{find()}, but raise \exception{ValueError} when the + substring is not found. + \end{methoddesc} + + \begin{methoddesc}[string]{isalnum}{} + Return true if all characters in the string are alphanumeric and there + is at least one character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isalpha}{} + Return true if all characters in the string are alphabetic and there + is at least one character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isdigit}{} + Return true if there are only digit characters, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{islower}{} + Return true if all cased characters in the string are lowercase and + there is at least one cased character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isspace}{} + Return true if there are only whitespace characters in the string and + the string is not empty, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{istitle}{} + Return true if the string is a titlecased string, i.e.\ uppercase + characters may only follow uncased characters and lowercase characters + only cased ones. Return false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isupper}{} + Return true if all cased characters in the string are uppercase and + there is at least one cased character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{join}{seq} + Return a string which is the concatenation of the strings in the + sequence \var{seq}. The separator between elements is the string + providing this method. + \end{methoddesc} + + \begin{methoddesc}[string]{ljust}{width} + Return the string left justified in a string of length \var{width}. + Padding is done using spaces. The original string is returned if + \var{width} is less than \code{len(\var{s})}. + \end{methoddesc} + + \begin{methoddesc}[string]{lower}{} + Return a copy of the string converted to lowercase. + \end{methoddesc} + + \begin{methoddesc}[string]{lstrip}{} + Return a copy of the string with leading whitespace removed. + \end{methoddesc} + + \begin{methoddesc}[string]{replace}{old, new\optional{, maxsplit}} + Return a copy of the string with all occurrences of substring + \var{old} replaced by \var{new}. If the optional argument + \var{maxsplit} is given, only the first \var{maxsplit} occurrences are + replaced. + \end{methoddesc} + + \begin{methoddesc}[string]{rfind}{sub \optional{,start \optional{,end}}} + Return the highest index in the string where substring \var{sub} is + found, such that \var{sub} is contained within s[start,end]. Optional + arguments \var{start} and \var{end} are interpreted as in slice + notation. Return \code{-1} on failure. + \end{methoddesc} + + \begin{methoddesc}[string]{rindex}{sub\optional{, start\optional{, end}}} + Like \method{rfind()} but raises \exception{ValueError} when the + substring \var{sub} is not found. + \end{methoddesc} + + \begin{methoddesc}[string]{rjust}{width} + Return the string right justified in a string of length \var{width}. + Padding is done using spaces. The original string is returned if + \var{width} is less than \code{len(\var{s})}. + \end{methoddesc} + + \begin{methoddesc}[string]{rstrip}{} + Return a copy of the string with trailing whitespace removed. + \end{methoddesc} + + \begin{methoddesc}[string]{split}{\optional{sep \optional{,maxsplit}}} + Return a list of the words in the string, using \var{sep} as the + delimiter string. If \var{maxsplit} is given, at most \var{maxsplit} + splits are done. If \var{sep} is not specified or \code{None}, any + whitespace string is a separator. + \end{methoddesc} + + \begin{methoddesc}[string]{splitlines}{\optional{keepends}} + Return a list of the lines in the string, breaking at line + boundaries. Line breaks are not included in the resulting list unless + \var{keepends} is given and true. + \end{methoddesc} + + \begin{methoddesc}[string]{startswith}{prefix\optional{, start\optional{, end}}} + Return true if string starts with the \var{prefix}, otherwise + return false. With optional \var{start}, test string beginning at + that position. With optional \var{end}, stop comparing string at that + position. + \end{methoddesc} + + \begin{methoddesc}[string]{strip}{} + Return a copy of the string with leading and trailing whitespace + removed. + \end{methoddesc} + + \begin{methoddesc}[string]{swapcase}{} + Return a copy of the string with uppercase characters converted to + lowercase and vice versa. + \end{methoddesc} + + \begin{methoddesc}[string]{title}{} + Return a titlecased version of, i.e.\ words start with uppercase + characters, all remaining cased characters are lowercase. + \end{methoddesc} + + \begin{methoddesc}[string]{translate}{table\optional{, deletechars}} + Return a copy of the string where all characters occurring in the + optional argument \var{deletechars} are removed, and the remaining + characters have been mapped through the given translation table, which + must be a string of length 256. + \end{methoddesc} + + \begin{methoddesc}[string]{upper}{} + Return a copy of the string converted to uppercase. + \end{methoddesc} + ! \subsubsection{String Formatting Operations \label{typesseq-strings}} String objects have one unique built-in operation: the \code{\%} operator (modulo) with a string left argument interprets this string ! as a C \cfunction{sprintf()} format string to be applied to the right argument, and returns the string resulting from this formatting operation. *************** *** 398,403 **** required by the format string; if the string requires a single argument, the right argument may also be a single non-tuple ! object.\footnote{A tuple object in this case should be a singleton.} ! The following format characters are understood: \code{\%}, \code{c}, \code{s}, \code{i}, \code{d}, \code{u}, \code{o}, \code{x}, \code{X}, \code{e}, \code{E}, \code{f}, \code{g}, \code{G}. --- 591,596 ---- required by the format string; if the string requires a single argument, the right argument may also be a single non-tuple ! object.\footnote{A tuple object in this case should be a singleton. ! } The following format characters are understood: \code{\%}, \code{c}, \code{s}, \code{i}, \code{d}, \code{u}, \code{o}, \code{x}, \code{X}, \code{e}, \code{E}, \code{f}, \code{g}, \code{G}. *************** *** 418,423 **** avoid printing endless strings of meaningless digits without hampering correct use and without having to know the exact precision of floating ! point values on a particular machine.} ! All other errors raise exceptions. If the right argument is a dictionary (or any kind of mapping), then --- 611,616 ---- avoid printing endless strings of meaningless digits without hampering correct use and without having to know the exact precision of floating ! point values on a particular machine. ! } All other errors raise exceptions. If the right argument is a dictionary (or any kind of mapping), then *************** *** 755,766 **** \label{bltin-file-objects}} ! File objects are implemented using \C{}'s \code{stdio} ! package and can be created with the built-in function ! \function{open()}\bifuncindex{open} described in section \ref{built-in-funcs}, ``Built-in Functions.'' They are also returned by some other built-in functions and methods, e.g., ! \function{posix.popen()} and \function{posix.fdopen()} and the \method{makefile()} method of socket objects. ! \refbimodindex{posix} \refbimodindex{socket} --- 948,959 ---- \label{bltin-file-objects}} ! File objects are implemented using C's \code{stdio} package and can be ! created with the built-in function ! \function{open()}\bifuncindex{open} described in section \ref{built-in-funcs}, ``Built-in Functions.'' They are also returned by some other built-in functions and methods, e.g., ! \function{os.popen()} and \function{os.fdopen()} and the \method{makefile()} method of socket objects. ! \refstmodindex{os} \refbimodindex{socket} *************** *** 814,819 **** want to make an exact copy of a file while scanning its lines) you can tell whether the last line of a file ended in a newline ! or not (yes this happens!).} ! (but may be absent when a file ends with an incomplete line). If the \var{size} argument is present and non-negative, it is a maximum byte count (including the trailing --- 1007,1012 ---- want to make an exact copy of a file while scanning its lines) you can tell whether the last line of a file ended in a newline ! or not (yes this happens!). ! } (but may be absent when a file ends with an incomplete line). If the \var{size} argument is present and non-negative, it is a maximum byte count (including the trailing *************** *** 893,897 **** writable \member{softspace} attribute, which should be initialized to zero. This will be automatic for classes implemented in Python; types ! implemented in \C{} will have to provide a writable \member{softspace} attribute. \end{memberdesc} --- 1086,1090 ---- writable \member{softspace} attribute, which should be initialized to zero. This will be automatic for classes implemented in Python; types ! implemented in C will have to provide a writable \member{softspace} attribute. \end{memberdesc} From python-dev@python.org Sat Aug 12 04:39:49 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 20:39:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api refcounts.dat,1.12,1.13 Message-ID: <200008120339.UAA14832@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv14824/api Modified Files: refcounts.dat Log Message: Added information for PyEval_EvalCode(). Fixed a couple of typos (new references are represented by "+1", not "1"). Index: refcounts.dat =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/refcounts.dat,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** refcounts.dat 2000/07/13 23:58:16 1.12 --- refcounts.dat 2000/08/12 03:39:47 1.13 *************** *** 217,220 **** --- 217,225 ---- PyEval_SaveThread:PyThreadState*::: + PyEval_EvalCode:PyObject*::+1: + PyEval_EvalCode:PyCodeObject*:co:0: + PyEval_EvalCode:PyObject*:globals:0: + PyEval_EvalCode:PyObject*:locals:0: + PyFile_AsFile:FILE*::: PyFile_AsFile:PyFileObject*:p:0: *************** *** 650,654 **** PyRun_AnyFile:char*:filename:: ! PyRun_File:PyObject*::1:??? -- same as eval_code2() PyRun_File:FILE*:fp:: PyRun_File:char*:filename:: --- 655,659 ---- PyRun_AnyFile:char*:filename:: ! PyRun_File:PyObject*::+1:??? -- same as eval_code2() PyRun_File:FILE*:fp:: PyRun_File:char*:filename:: *************** *** 672,676 **** PyRun_SimpleString:char*:command:: ! PyRun_String:PyObject*::1:??? -- same as eval_code2() PyRun_String:char*:str:: PyRun_String:int:start:: --- 677,681 ---- PyRun_SimpleString:char*:command:: ! PyRun_String:PyObject*::+1:??? -- same as eval_code2() PyRun_String:char*:str:: PyRun_String:int:start:: From python-dev@python.org Sat Aug 12 15:45:53 2000 From: python-dev@python.org (Guido van Rossum) Date: Sat, 12 Aug 2000 07:45:53 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.94,1.95 Message-ID: <200008121445.HAA05173@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv5129 Modified Files: Makefile.in Log Message: Whoever added the Makefile rule to auto-build the Grammar didn't have his build directory in a different place than his source directory. I do, and it is supposed to be supported. The naive patch caused an endless recursion in the Make process. This should take care of that. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.94 retrieving revision 1.95 diff -C2 -r1.94 -r1.95 *** Makefile.in 2000/08/11 22:26:35 1.94 --- Makefile.in 2000/08/12 14:45:50 1.95 *************** *** 197,201 **** Grammar: ! cd Grammar ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all --- 197,202 ---- Grammar: ! P=`pwd`/Parser; cd $(srcdir)/Grammar; $(MAKE) PGENDIR=$$P \ ! OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.31,1.32 Message-ID: <200008121809.LAA11105@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Doc/ref Modified Files: ref5.tex Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: ref5.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** ref5.tex 2000/07/31 20:08:23 1.31 --- ref5.tex 2000/08/12 18:09:50 1.32 *************** *** 153,163 **** \begin{verbatim} ! list_display: "[" [expression_list] "]" \end{verbatim} ! A list display yields a new list object. If it has no expression ! list, the list object has no items. Otherwise, the elements of the ! expression list are evaluated from left to right and inserted in the ! list object in that order. \obindex{list} \indexii{empty}{list} --- 153,172 ---- \begin{verbatim} ! list_display: "[" [expression_list [list_iter]] "]" ! list_iter: list_for | list_if ! list_for: "for" expression_list "in" testlist [list_iter] ! list_if: "if" test [list_iter] \end{verbatim} ! A list display yields a new list object. Its contents are specified ! by providing either a list of expressions or a list comprehension. ! When a comma-separated list of expressions is supplied, its elements are ! evaluated from left to right and placed into the list object in that ! order. When a list comprehension is supplied, it consists of a ! single expression followed by one or more "for" or "if" clauses. In this ! case, the elements of the new list are those that would be produced ! by considering each of the "for" or "if" clauses a block, nesting from ! left to right, and evaluating the expression to produce a list element ! each time the innermost block is reached. \obindex{list} \indexii{empty}{list} From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include graminit.h,2.13,2.14 Message-ID: <200008121809.LAA11124@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Include Modified Files: graminit.h Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: graminit.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/graminit.h,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** graminit.h 1997/04/02 05:23:10 2.13 --- graminit.h 2000/08/12 18:09:51 2.14 *************** *** 45,57 **** #define power 300 #define atom 301 ! #define lambdef 302 ! #define trailer 303 ! #define subscriptlist 304 ! #define subscript 305 ! #define sliceop 306 ! #define exprlist 307 ! #define testlist 308 ! #define dictmaker 309 ! #define classdef 310 ! #define arglist 311 ! #define argument 312 --- 45,61 ---- #define power 300 #define atom 301 ! #define listmaker 302 ! #define lambdef 303 ! #define trailer 304 ! #define subscriptlist 305 ! #define subscript 306 ! #define sliceop 307 ! #define exprlist 308 ! #define testlist 309 ! #define dictmaker 310 ! #define classdef 311 ! #define arglist 312 ! #define argument 313 ! #define list_iter 314 ! #define list_for 315 ! #define list_if 316 From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.35,1.36 Message-ID: <200008121809.LAA11119@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Grammar Modified Files: Grammar Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** Grammar 2000/03/28 23:49:00 1.35 --- Grammar 2000/08/12 18:09:51 1.36 *************** *** 75,79 **** factor: ('+'|'-'|'~') factor | power power: atom trailer* ('**' factor)* ! atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME --- 75,80 ---- factor: ('+'|'-'|'~') factor | power power: atom trailer* ('**' factor)* ! atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ ! listmaker: test ( list_iter | (',' test)* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME *************** *** 89,90 **** --- 90,95 ---- arglist: (argument ',')* (argument [',']| '*' test [',' '**' test] | '**' test) argument: [test '='] test # Really [keyword '='] test + + list_iter: list_for | list_if + list_for: 'for' exprlist 'in' testlist [list_iter] + list_if: 'if' test [list_iter] From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.13,1.14 Message-ID: <200008121809.LAA11125@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Lib/test Modified Files: test_grammar.py Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** test_grammar.py 2000/03/28 23:51:13 1.13 --- test_grammar.py 2000/08/12 18:09:51 1.14 *************** *** 543,544 **** --- 543,584 ---- def meth2(self, arg): pass def meth3(self, a1, a2): pass + + # list comprehension tests + nums = [1, 2, 3, 4, 5] + strs = ["Apple", "Banana", "Coconut"] + spcs = [" Apple", " Banana ", "Coco nut "] + + print [s.strip() for s in spcs] + print [3 * x for x in nums] + print [x for x in nums if x > 2] + print [(i, s) for i in nums for s in strs] + print [(i, s) for i in nums for s in [f for f in strs if "n" in f]] + try: + eval("[i, s for i in nums for s in strs]") + print "FAIL: should have raised a SyntaxError!" + except SyntaxError: + print "good: got a SyntaxError as expected" + + suppliers = [ + (1, "Boeing"), + (2, "Ford"), + (3, "Macdonalds") + ] + + parts = [ + (10, "Airliner"), + (20, "Engine"), + (30, "Cheeseburger") + ] + + suppart = [ + (1, 10), (1, 20), (2, 20), (3, 30) + ] + + print [ + (sname, pname) + for (sno, sname) in suppliers + for (pno, pname) in parts + for (sp_sno, sp_pno) in suppart + if sno == sp_sno and pno == sp_pno + ] From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.111,1.112 Message-ID: <200008121809.LAA11120@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tut In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Doc/tut Modified Files: tut.tex Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: tut.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v retrieving revision 1.111 retrieving revision 1.112 diff -C2 -r1.111 -r1.112 *** tut.tex 2000/07/27 20:55:12 1.111 --- tut.tex 2000/08/12 18:09:50 1.112 *************** *** 1754,1757 **** --- 1754,1778 ---- \end{verbatim} + \subsection{List Comprehensions} + + List comprehensions provide a concise way to create lists without resorting + to use of the \func{map()} or \func{filter()} functions. The resulting + construct tends often to be clearer than use of those functions. + + \begin{verbatim} + >>> spcs = [" Apple", " Banana ", "Coco nut "] + >>> print [s.strip() for s in spcs] + ['Apple', 'Banana', 'Coco nut'] + >>> vec = [2, 4, 6] + >>> print [3*x for x in vec] + [6, 12, 18] + >>> vec1 = [2, 4, 6] + >>> vec2 = [4, 3, -9] + >>> print [x*y for x in vec1 for y in vec2] + [8, 6, -18, 16, 12, -36, 24, 18, -54] + >>> print [x+y for x in vec1 for y in vec2] + [6, 5, -7, 8, 7, -5, 10, 9, -3] + \end{verbatim} + \section{The \keyword{del} statement \label{del}} From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.3,1.4 Message-ID: <200008121809.LAA11133@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Lib/test/output Modified Files: test_grammar Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_grammar 2000/03/28 23:53:22 1.3 --- test_grammar 2000/08/12 18:09:51 1.4 *************** *** 46,47 **** --- 46,54 ---- atoms classdef + ['Apple', 'Banana', 'Coco nut'] + [3, 6, 9, 12, 15] + [3, 4, 5] + [(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')] + [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')] + good: got a SyntaxError as expected + [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')] From python-dev@python.org Sat Aug 12 19:09:54 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.120,2.121 graminit.c,2.23,2.24 Message-ID: <200008121809.LAA11145@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Python Modified Files: compile.c graminit.c Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.120 retrieving revision 2.121 diff -C2 -r2.120 -r2.121 *** compile.c 2000/08/11 22:15:52 2.120 --- compile.c 2000/08/12 18:09:51 2.121 *************** *** 295,298 **** --- 295,299 ---- char *c_private; /* for private name mangling */ #endif + int c_tmpname; /* temporary local name counter */ }; *************** *** 369,374 **** --- 370,377 ---- static void com_addopname(struct compiling *, int, node *); static void com_list(struct compiling *, node *, int); + static void com_list_iter(struct compiling *, node *, node *, char *); static int com_argdefs(struct compiling *, node *); static int com_newlocal(struct compiling *, char *); + static void com_assign(struct compiling *, node *, int); static PyCodeObject *icompile(struct _node *, struct compiling *); static PyCodeObject *jcompile(struct _node *, char *, *************** *** 420,423 **** --- 423,427 ---- c->c_last_line = 0; c-> c_lnotab_next = 0; + c->c_tmpname = 0; return 1; *************** *** 942,957 **** static void ! com_list_constructor(struct compiling *c, node *n) { ! int len; ! int i; ! if (TYPE(n) != testlist) ! REQ(n, exprlist); ! /* exprlist: expr (',' expr)* [',']; likewise for testlist */ ! len = (NCH(n) + 1) / 2; ! for (i = 0; i < NCH(n); i += 2) ! com_node(c, CHILD(n, i)); ! com_addoparg(c, BUILD_LIST, len); ! com_pop(c, len-1); } --- 946,1059 ---- static void ! com_list_for(struct compiling *c, node *n, node *e, char *t) { ! PyObject *v; ! int anchor = 0; ! int save_begin = c->c_begin; ! ! /* list_iter: for v in expr [list_iter] */ ! com_node(c, CHILD(n, 3)); /* expr */ ! v = PyInt_FromLong(0L); ! if (v == NULL) ! c->c_errors++; ! com_addoparg(c, LOAD_CONST, com_addconst(c, v)); ! com_push(c, 1); ! Py_XDECREF(v); ! c->c_begin = c->c_nexti; ! com_addoparg(c, SET_LINENO, n->n_lineno); ! com_addfwref(c, FOR_LOOP, &anchor); ! com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN); ! c->c_loops++; ! com_list_iter(c, n, e, t); ! c->c_loops--; ! com_addoparg(c, JUMP_ABSOLUTE, c->c_begin); ! c->c_begin = save_begin; ! com_backpatch(c, anchor); ! com_pop(c, 2); /* FOR_LOOP has popped these */ ! } ! ! static void ! com_list_if(struct compiling *c, node *n, node *e, char *t) ! { ! int anchor = 0; ! int a = 0; ! /* list_iter: 'if' test [list_iter] */ ! com_addoparg(c, SET_LINENO, n->n_lineno); ! com_node(c, CHILD(n, 1)); ! com_addfwref(c, JUMP_IF_FALSE, &a); ! com_addbyte(c, POP_TOP); ! com_pop(c, 1); ! com_list_iter(c, n, e, t); ! com_addfwref(c, JUMP_FORWARD, &anchor); ! com_backpatch(c, a); ! /* We jump here with an extra entry which we now pop */ ! com_addbyte(c, POP_TOP); ! com_backpatch(c, anchor); ! } ! ! static void ! com_list_iter(struct compiling *c, ! node *p, /* parent of list_iter node */ ! node *e, /* element expression node */ ! char *t /* name of result list temp local */) ! { ! /* list_iter is the last child in a listmaker, list_for, or list_if */ ! node *n = CHILD(p, NCH(p)-1); ! if (TYPE(n) == list_iter) { ! n = CHILD(n, 0); ! switch (TYPE(n)) { ! case list_for: ! com_list_for(c, n, e, t); ! break; ! case list_if: ! com_list_if(c, n, e, t); ! break; ! default: ! com_error(c, PyExc_SystemError, ! "invalid list_iter node type"); ! } ! } ! else { ! com_addopnamestr(c, LOAD_NAME, t); ! com_push(c, 1); ! com_node(c, e); ! com_addoparg(c, CALL_FUNCTION, 1); ! com_addbyte(c, POP_TOP); ! com_pop(c, 2); ! } ! } ! ! static void ! com_list_comprehension(struct compiling *c, node *n) ! { ! /* listmaker: test list_iter */ ! char tmpname[12]; ! sprintf(tmpname, "__%d__", ++c->c_tmpname); ! com_addoparg(c, BUILD_LIST, 0); ! com_addbyte(c, DUP_TOP); /* leave the result on the stack */ ! com_push(c, 2); ! com_addopnamestr(c, LOAD_ATTR, "append"); ! com_addopnamestr(c, STORE_NAME, tmpname); ! com_pop(c, 1); ! com_list_iter(c, n, CHILD(n, 0), tmpname); ! com_addopnamestr(c, DELETE_NAME, tmpname); ! --c->c_tmpname; ! } ! ! static void ! com_listmaker(struct compiling *c, node *n) ! { ! /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (TYPE(CHILD(n, 1)) == list_iter) ! com_list_comprehension(c, n); ! else { ! int len = 0; ! int i; ! for (i = 0; i < NCH(n); i += 2, len++) ! com_node(c, CHILD(n, i)); ! com_addoparg(c, BUILD_LIST, len); ! com_pop(c, len-1); ! } } *************** *** 991,995 **** com_node(c, CHILD(n, 1)); break; ! case LSQB: if (TYPE(CHILD(n, 1)) == RSQB) { com_addoparg(c, BUILD_LIST, 0); --- 1093,1097 ---- com_node(c, CHILD(n, 1)); break; ! case LSQB: /* '[' [listmaker] ']' */ if (TYPE(CHILD(n, 1)) == RSQB) { com_addoparg(c, BUILD_LIST, 0); *************** *** 997,1006 **** } else ! com_list_constructor(c, CHILD(n, 1)); break; case LBRACE: /* '{' [dictmaker] '}' */ com_addoparg(c, BUILD_MAP, 0); com_push(c, 1); ! if (TYPE(CHILD(n, 1)) != RBRACE) com_dictmaker(c, CHILD(n, 1)); break; --- 1099,1108 ---- } else ! com_listmaker(c, CHILD(n, 1)); break; case LBRACE: /* '{' [dictmaker] '}' */ com_addoparg(c, BUILD_MAP, 0); com_push(c, 1); ! if (TYPE(CHILD(n, 1)) == dictmaker) com_dictmaker(c, CHILD(n, 1)); break; *************** *** 1735,1738 **** --- 1837,1853 ---- if (TYPE(n) != testlist) REQ(n, exprlist); + if (assigning) { + i = (NCH(n)+1)/2; + com_addoparg(c, UNPACK_SEQUENCE, i); + com_push(c, i-1); + } + for (i = 0; i < NCH(n); i += 2) + com_assign(c, CHILD(n, i), assigning); + } + + static void + com_assign_list(struct compiling *c, node *n, int assigning) + { + int i; if (assigning) { i = (NCH(n)+1)/2; Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.23 retrieving revision 2.24 diff -C2 -r2.23 -r2.24 *** graminit.c 2000/03/28 23:49:17 2.23 --- graminit.c 2000/08/12 18:09:51 2.24 *************** *** 897,905 **** {16, 1}, {109, 2}, ! {111, 3}, ! {114, 4}, {12, 5}, ! {115, 5}, ! {116, 6}, }; static arc arcs_45_1[2] = { --- 897,905 ---- [...967 lines suppressed...] {25, 0}, {2, 0}, {3, 0}, + {314, 0}, {1, "lambda"}, ! {312, 0}, {305, 0}, {306, 0}, + {307, 0}, {1, "class"}, ! {313, 0}, ! {315, 0}, ! {316, 0}, }; grammar _PyParser_Grammar = { ! 61, dfas, ! {128, labels}, 256 }; From python-dev@python.org Sat Aug 12 19:43:05 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 12 Aug 2000 11:43:05 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.143,1.144 Message-ID: <200008121843.LAA16039@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv15418 Modified Files: configure.in Log Message: Back out ESR's erroneous commit of a DB-related change Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.143 retrieving revision 1.144 diff -C2 -r1.143 -r1.144 *** configure.in 2000/08/10 04:23:29 1.143 --- configure.in 2000/08/12 18:43:02 1.144 *************** *** 1015,1024 **** # (none yet) - # Cope with the DB mess. If we detect libdba, assume it's a version 2 - # or later DB and should be linked first (before the DB 1.xx stuff in glibc). - # Also define an appropriate symbol so we can conditionalize code in the - # dbmmodule; the API has changed since 1.xx. - AC_CHECK_LIB(dba, __db_mutex_lock) - # Linux requires this for correct f.p. operations AC_CHECK_FUNC(__fpu_control, --- 1015,1018 ---- From python-dev@python.org Sat Aug 12 20:09:18 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 12 Aug 2000 12:09:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib symbol.py,1.9,1.10 Message-ID: <200008121909.MAA12874@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12613 Modified Files: symbol.py Log Message: Updated this module after the recent grammar changes Index: symbol.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/symbol.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** symbol.py 2000/02/04 15:28:41 1.9 --- symbol.py 2000/08/12 19:09:14 1.10 *************** *** 57,71 **** power = 300 atom = 301 ! lambdef = 302 ! trailer = 303 ! subscriptlist = 304 ! subscript = 305 ! sliceop = 306 ! exprlist = 307 ! testlist = 308 ! dictmaker = 309 ! classdef = 310 ! arglist = 311 ! argument = 312 #--end constants-- --- 57,75 ---- power = 300 atom = 301 ! listmaker = 302 ! lambdef = 303 ! trailer = 304 ! subscriptlist = 305 ! subscript = 306 ! sliceop = 307 ! exprlist = 308 ! testlist = 309 ! dictmaker = 310 ! classdef = 311 ! arglist = 312 ! argument = 313 ! list_iter = 314 ! list_for = 315 ! list_if = 316 #--end constants-- From python-dev@python.org Sat Aug 12 20:37:30 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 12:37:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodectype.c,2.5,2.6 Message-ID: <200008121937.MAA21713@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv20993/Objects Modified Files: unicodectype.c Log Message: Add the current Win64 compiler to the list of those that need the huge switch statement broken up. This will probably not be necessary when the Win64 compiler matures. Index: unicodectype.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodectype.c,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -r2.5 -r2.6 *** unicodectype.c 2000/08/03 16:24:25 2.5 --- unicodectype.c 2000/08/12 19:37:27 2.6 *************** *** 15,19 **** #include "unicodeobject.h" ! #ifdef macintosh /* This probably needs to be defined for some other compilers too. It breaks the ** 5000-label switch statement up into switches with around 1000 cases each. --- 15,23 ---- #include "unicodeobject.h" ! #if defined(macintosh) || defined(MS_WIN64) ! /*XXX This was required to avoid a compiler error for an early Win64 ! * cross-compiler that was used for the port to Win64. When the platform is ! * released the MS_WIN64 inclusion here should no longer be necessary. ! */ /* This probably needs to be defined for some other compilers too. It breaks the ** 5000-label switch statement up into switches with around 1000 cases each. From python-dev@python.org Sat Aug 12 21:08:07 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 12 Aug 2000 13:08:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.112,1.113 Message-ID: <200008122008.NAA04295@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tut In directory slayer.i.sourceforge.net:/tmp/cvs-serv4208/tut Modified Files: tut.tex Log Message: Fix some markup errors that prevented formatting, and one that didn't. Index: tut.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v retrieving revision 1.112 retrieving revision 1.113 diff -C2 -r1.112 -r1.113 *** tut.tex 2000/08/12 18:09:50 1.112 --- tut.tex 2000/08/12 20:08:04 1.113 *************** *** 1756,1762 **** \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without resorting ! to use of the \func{map()} or \func{filter()} functions. The resulting ! construct tends often to be clearer than use of those functions. \begin{verbatim} --- 1756,1763 ---- \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without ! resorting to use of the \function{map()} or \function{filter()} ! functions. The resulting construct tends often to be clearer than use ! of those functions. \begin{verbatim} *************** *** 1778,1782 **** There is a way to remove an item from a list given its index instead ! of its value: the \code{del} statement. This can also be used to remove slices from a list (which we did earlier by assignment of an empty list to the slice). For example: --- 1779,1783 ---- There is a way to remove an item from a list given its index instead ! of its value: the \keyword{del} statement. This can also be used to remove slices from a list (which we did earlier by assignment of an empty list to the slice). For example: From python-dev@python.org Sat Aug 12 21:32:49 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 12 Aug 2000 13:32:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/compiler/compiler pyassem.py,1.9,1.10 pycodegen.py,1.21,1.22 visitor.py,1.3,1.4 Message-ID: <200008122032.NAA11844@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/compiler/compiler In directory slayer.i.sourceforge.net:/tmp/cvs-serv6567/compiler Modified Files: pyassem.py pycodegen.py visitor.py Log Message: Bring Tools/compiler almost up to date. Specifically: - fix tab space issues (SF patch #101167 by Neil Schemenauer) - fix co_flags for classes to include CO_NEWLOCALS (SF patch #101145 by Neil) - fix for merger of UNPACK_LIST and UNPACK_TUPLE into UNPACK_SEQUENCE, (SF patch #101168 by, well, Neil :) - Adjust bytecode MAGIC to current bytecode. TODO: teach compile.py about list comprehensions. Index: pyassem.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/pyassem.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pyassem.py 2000/05/02 22:32:59 1.9 --- pyassem.py 2000/08/12 20:32:46 1.10 *************** *** 10,69 **** class FlowGraph: def __init__(self): ! self.current = self.entry = Block() ! self.exit = Block("exit") ! self.blocks = misc.Set() ! self.blocks.add(self.entry) ! self.blocks.add(self.exit) def startBlock(self, block): ! self.current = block def nextBlock(self, block=None): ! if block is None: ! block = self.newBlock() ! # XXX think we need to specify when there is implicit transfer ! # from one block to the next ! # ! # I think this strategy works: each block has a child ! # designated as "next" which is returned as the last of the ! # children. because the nodes in a graph are emitted in ! # reverse post order, the "next" block will always be emitted ! # immediately after its parent. ! # Worry: maintaining this invariant could be tricky ! self.current.addNext(block) ! self.startBlock(block) def newBlock(self): ! b = Block() ! self.blocks.add(b) ! return b def startExitBlock(self): ! self.startBlock(self.exit) def emit(self, *inst): ! # XXX should jump instructions implicitly call nextBlock? ! if inst[0] == 'RETURN_VALUE': ! self.current.addOutEdge(self.exit) ! self.current.emit(inst) def getBlocks(self): ! """Return the blocks in reverse postorder ! i.e. each node appears before all of its successors ! """ ! # XXX make sure every node that doesn't have an explicit next ! # is set so that next points to exit ! for b in self.blocks.elements(): ! if b is self.exit: ! continue ! if not b.next: ! b.addNext(self.exit) ! order = dfs_postorder(self.entry, {}) ! order.reverse() ! # hack alert ! if not self.exit in order: ! order.append(self.exit) ! return order def dfs_postorder(b, seen): --- 10,69 ---- class FlowGraph: def __init__(self): ! self.current = self.entry = Block() ! self.exit = Block("exit") ! self.blocks = misc.Set() ! self.blocks.add(self.entry) ! self.blocks.add(self.exit) def startBlock(self, block): ! self.current = block def nextBlock(self, block=None): ! if block is None: ! block = self.newBlock() ! # XXX think we need to specify when there is implicit transfer ! # from one block to the next ! # ! # I think this strategy works: each block has a child ! # designated as "next" which is returned as the last of the ! # children. because the nodes in a graph are emitted in ! # reverse post order, the "next" block will always be emitted ! # immediately after its parent. ! # Worry: maintaining this invariant could be tricky ! self.current.addNext(block) ! self.startBlock(block) def newBlock(self): ! b = Block() ! self.blocks.add(b) ! return b def startExitBlock(self): ! self.startBlock(self.exit) def emit(self, *inst): ! # XXX should jump instructions implicitly call nextBlock? ! if inst[0] == 'RETURN_VALUE': ! self.current.addOutEdge(self.exit) ! self.current.emit(inst) def getBlocks(self): ! """Return the blocks in reverse postorder ! i.e. each node appears before all of its successors ! """ ! # XXX make sure every node that doesn't have an explicit next ! # is set so that next points to exit ! for b in self.blocks.elements(): ! if b is self.exit: ! continue ! if not b.next: ! b.addNext(self.exit) ! order = dfs_postorder(self.entry, {}) ! order.reverse() ! # hack alert ! if not self.exit in order: ! order.append(self.exit) ! return order def dfs_postorder(b, seen): *************** *** 72,78 **** seen[b] = b for c in b.children(): ! if seen.has_key(c): ! continue ! order = order + dfs_postorder(c, seen) order.append(b) return order --- 72,78 ---- seen[b] = b for c in b.children(): ! if seen.has_key(c): ! continue ! order = order + dfs_postorder(c, seen) order.append(b) return order *************** *** 82,126 **** def __init__(self, label=''): ! self.insts = [] ! self.inEdges = misc.Set() ! self.outEdges = misc.Set() ! self.label = label ! self.bid = Block._count ! self.next = [] ! Block._count = Block._count + 1 def __repr__(self): ! if self.label: ! return "" % (self.label, self.bid, ! len(self.insts)) ! else: ! return "" % (self.bid, len(self.insts)) def __str__(self): ! insts = map(str, self.insts) ! return "" % (self.label, self.bid, ! string.join(insts, '\n')) def emit(self, inst): ! op = inst[0] ! if op[:4] == 'JUMP': ! self.outEdges.add(inst[1]) ! self.insts.append(inst) def getInstructions(self): ! return self.insts def addInEdge(self, block): ! self.inEdges.add(block) def addOutEdge(self, block): ! self.outEdges.add(block) def addNext(self, block): ! self.next.append(block) ! assert len(self.next) == 1, map(str, self.next) def children(self): ! return self.outEdges.elements() + self.next # flags for code objects --- 82,126 ---- def __init__(self, label=''): ! self.insts = [] ! self.inEdges = misc.Set() ! self.outEdges = misc.Set() ! self.label = label ! self.bid = Block._count ! self.next = [] ! Block._count = Block._count + 1 def __repr__(self): ! if self.label: ! return "" % (self.label, self.bid, ! len(self.insts)) ! else: ! return "" % (self.bid, len(self.insts)) def __str__(self): ! insts = map(str, self.insts) ! return "" % (self.label, self.bid, ! string.join(insts, '\n')) def emit(self, inst): ! op = inst[0] ! if op[:4] == 'JUMP': ! self.outEdges.add(inst[1]) ! self.insts.append(inst) def getInstructions(self): ! return self.insts def addInEdge(self, block): ! self.inEdges.add(block) def addOutEdge(self, block): ! self.outEdges.add(block) def addNext(self, block): ! self.next.append(block) ! assert len(self.next) == 1, map(str, self.next) def children(self): ! return self.outEdges.elements() + self.next # flags for code objects *************** *** 140,155 **** def __init__(self, name, filename, args=(), optimized=0): ! self.super_init() ! self.name = name ! self.filename = filename ! self.docstring = None ! self.args = args # XXX ! self.argcount = getArgCount(args) ! if optimized: ! self.flags = CO_OPTIMIZED | CO_NEWLOCALS ! else: ! self.flags = 0 ! self.consts = [] ! self.names = [] self.varnames = list(args) or [] for i in range(len(self.varnames)): --- 140,155 ---- def __init__(self, name, filename, args=(), optimized=0): ! self.super_init() ! self.name = name ! self.filename = filename ! self.docstring = None ! self.args = args # XXX ! self.argcount = getArgCount(args) ! if optimized: ! self.flags = CO_OPTIMIZED | CO_NEWLOCALS ! else: ! self.flags = 0 ! self.consts = [] ! self.names = [] self.varnames = list(args) or [] for i in range(len(self.varnames)): *************** *** 164,174 **** def setFlag(self, flag): ! self.flags = self.flags | flag ! if flag == CO_VARARGS: ! self.argcount = self.argcount - 1 def getCode(self): ! """Get a Python code object""" ! if self.stage == RAW: self.flattenGraph() if self.stage == FLAT: --- 164,174 ---- def setFlag(self, flag): ! self.flags = self.flags | flag ! if flag == CO_VARARGS: ! self.argcount = self.argcount - 1 def getCode(self): ! """Get a Python code object""" ! if self.stage == RAW: self.flattenGraph() if self.stage == FLAT: *************** *** 199,227 **** def flattenGraph(self): ! """Arrange the blocks in order and resolve jumps""" ! assert self.stage == RAW ! self.insts = insts = [] ! pc = 0 ! begin = {} ! end = {} ! for b in self.getBlocks(): ! begin[b] = pc ! for inst in b.getInstructions(): ! insts.append(inst) ! if len(inst) == 1: ! pc = pc + 1 ! else: ! # arg takes 2 bytes ! pc = pc + 3 ! end[b] = pc ! pc = 0 ! for i in range(len(insts)): ! inst = insts[i] ! if len(inst) == 1: pc = pc + 1 else: pc = pc + 3 ! opname = inst[0] ! if self.hasjrel.has_elt(opname): oparg = inst[1] offset = begin[oparg] - pc --- 199,227 ---- def flattenGraph(self): ! """Arrange the blocks in order and resolve jumps""" ! assert self.stage == RAW ! self.insts = insts = [] ! pc = 0 ! begin = {} ! end = {} ! for b in self.getBlocks(): ! begin[b] = pc ! for inst in b.getInstructions(): ! insts.append(inst) ! if len(inst) == 1: ! pc = pc + 1 ! else: ! # arg takes 2 bytes ! pc = pc + 3 ! end[b] = pc ! pc = 0 ! for i in range(len(insts)): ! inst = insts[i] ! if len(inst) == 1: pc = pc + 1 else: pc = pc + 3 ! opname = inst[0] ! if self.hasjrel.has_elt(opname): oparg = inst[1] offset = begin[oparg] - pc *************** *** 229,234 **** elif self.hasjabs.has_elt(opname): insts[i] = opname, begin[inst[1]] ! self.stacksize = findDepth(self.insts) ! self.stage = FLAT hasjrel = misc.Set() --- 229,234 ---- elif self.hasjabs.has_elt(opname): insts[i] = opname, begin[inst[1]] ! self.stacksize = findDepth(self.insts) ! self.stage = FLAT hasjrel = misc.Set() *************** *** 293,297 **** _cmp = list(dis.cmp_op) def _convert_COMPARE_OP(self, arg): ! return self._cmp.index(arg) # similarly for other opcodes... --- 293,297 ---- _cmp = list(dis.cmp_op) def _convert_COMPARE_OP(self, arg): ! return self._cmp.index(arg) # similarly for other opcodes... *************** *** 315,324 **** lnotab.nextLine(oparg) hi, lo = twobyte(oparg) ! try: ! lnotab.addCode(self.opnum[opname], lo, hi) ! except ValueError: ! print opname, oparg ! print self.opnum[opname], lo, hi ! raise self.stage = DONE --- 315,324 ---- lnotab.nextLine(oparg) hi, lo = twobyte(oparg) ! try: ! lnotab.addCode(self.opnum[opname], lo, hi) ! except ValueError: ! print opname, oparg ! print self.opnum[opname], lo, hi ! raise self.stage = DONE *************** *** 355,362 **** l.append(elt) return tuple(l) ! def isJump(opname): if opname[:4] == 'JUMP': ! return 1 class TupleArg: --- 355,362 ---- l.append(elt) return tuple(l) ! def isJump(opname): if opname[:4] == 'JUMP': ! return 1 class TupleArg: *************** *** 373,380 **** argcount = len(args) if args: ! for arg in args: ! if isinstance(arg, TupleArg): ! numNames = len(misc.flatten(arg.names)) ! argcount = argcount - numNames return argcount --- 373,380 ---- argcount = len(args) if args: ! for arg in args: ! if isinstance(arg, TupleArg): ! numNames = len(misc.flatten(arg.names)) ! argcount = argcount - numNames return argcount *************** *** 514,522 **** # special cases: ! # UNPACK_TUPLE, UNPACK_LIST, BUILD_TUPLE, # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE ! def UNPACK_TUPLE(self, count): ! return count ! def UNPACK_LIST(self, count): return count def BUILD_TUPLE(self, count): --- 514,520 ---- # special cases: ! # UNPACK_SEQUENCE, BUILD_TUPLE, # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE ! def UNPACK_SEQUENCE(self, count): return count def BUILD_TUPLE(self, count): Index: pycodegen.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/pycodegen.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** pycodegen.py 2000/08/04 16:56:51 1.21 --- pycodegen.py 2000/08/12 20:32:46 1.22 *************** *** 8,12 **** from compiler import ast, parse, walk from compiler import pyassem, misc ! from compiler.pyassem import CO_VARARGS, CO_VARKEYWORDS, TupleArg callfunc_opcode_info = { --- 8,12 ---- from compiler import ast, parse, walk from compiler import pyassem, misc ! from compiler.pyassem import CO_VARARGS, CO_VARKEYWORDS, CO_NEWLOCALS, TupleArg callfunc_opcode_info = { *************** *** 30,59 **** class Module: def __init__(self, source, filename): ! self.filename = filename ! self.source = source ! self.code = None def compile(self): ! ast = parse(self.source) root, filename = os.path.split(self.filename) ! gen = ModuleCodeGenerator(filename) ! walk(ast, gen, 1) ! self.code = gen.getCode() def dump(self, f): ! f.write(self.getPycHeader()) ! marshal.dump(self.code, f) ! MAGIC = (20121 | (ord('\r')<<16) | (ord('\n')<<24)) def getPycHeader(self): ! # compile.c uses marshal to write a long directly, with ! # calling the interface that would also generate a 1-byte code ! # to indicate the type of the value. simplest way to get the ! # same effect is to call marshal and then skip the code. ! magic = marshal.dumps(self.MAGIC)[1:] ! mtime = os.stat(self.filename)[stat.ST_MTIME] ! mtime = struct.pack('i', mtime) ! return magic + mtime class CodeGenerator: --- 30,59 ---- class Module: def __init__(self, source, filename): ! self.filename = filename ! self.source = source ! self.code = None def compile(self): ! ast = parse(self.source) root, filename = os.path.split(self.filename) ! gen = ModuleCodeGenerator(filename) ! walk(ast, gen, 1) ! self.code = gen.getCode() def dump(self, f): ! f.write(self.getPycHeader()) ! marshal.dump(self.code, f) ! MAGIC = (50811 | (ord('\r')<<16) | (ord('\n')<<24)) def getPycHeader(self): ! # compile.c uses marshal to write a long directly, with ! # calling the interface that would also generate a 1-byte code ! # to indicate the type of the value. simplest way to get the ! # same effect is to call marshal and then skip the code. ! magic = marshal.dumps(self.MAGIC)[1:] ! mtime = os.stat(self.filename)[stat.ST_MTIME] ! mtime = struct.pack('i', mtime) ! return magic + mtime class CodeGenerator: *************** *** 64,85 **** ## Subclasses must define a constructor that intializes self.graph ## before calling this init function ! ## self.graph = pyassem.PyFlowGraph() ! self.filename = filename ! self.locals = misc.Stack() ! self.loops = misc.Stack() ! self.curStack = 0 ! self.maxStack = 0 ! self._setupGraphDelegation() def _setupGraphDelegation(self): ! self.emit = self.graph.emit ! self.newBlock = self.graph.newBlock ! self.startBlock = self.graph.startBlock ! self.nextBlock = self.graph.nextBlock ! self.setDocstring = self.graph.setDocstring def getCode(self): ! """Return a code object""" ! return self.graph.getCode() # Next five methods handle name access --- 64,85 ---- ## Subclasses must define a constructor that intializes self.graph ## before calling this init function ! ## self.graph = pyassem.PyFlowGraph() ! self.filename = filename ! self.locals = misc.Stack() ! self.loops = misc.Stack() ! self.curStack = 0 ! self.maxStack = 0 ! self._setupGraphDelegation() def _setupGraphDelegation(self): ! self.emit = self.graph.emit ! self.newBlock = self.graph.newBlock ! self.startBlock = self.graph.startBlock ! self.nextBlock = self.graph.nextBlock ! self.setDocstring = self.graph.setDocstring def getCode(self): ! """Return a code object""" ! return self.graph.getCode() # Next five methods handle name access *************** *** 98,106 **** def _nameOp(self, prefix, name): ! if not self.optimized: ! self.emit(prefix + '_NAME', name) ! return if self.isLocalName(name): ! self.emit(prefix + '_FAST', name) else: self.emit(prefix + '_GLOBAL', name) --- 98,106 ---- def _nameOp(self, prefix, name): ! if not self.optimized: ! self.emit(prefix + '_NAME', name) ! return if self.isLocalName(name): ! self.emit(prefix + '_FAST', name) else: self.emit(prefix + '_GLOBAL', name) *************** *** 126,148 **** def visitModule(self, node): ! lnf = walk(node.node, LocalNameFinder(), 0) ! self.locals.push(lnf.getLocals()) ! self.setDocstring(node.doc) ! self.visit(node.node) ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def visitFunction(self, node): ! self._visitFuncOrLambda(node, isLambda=0) ! self.storeName(node.name) def visitLambda(self, node): ! self._visitFuncOrLambda(node, isLambda=1) ! ## self.storeName("") def _visitFuncOrLambda(self, node, isLambda): ! gen = FunctionCodeGenerator(node, self.filename, isLambda) ! walk(node.code, gen) ! gen.finish() self.set_lineno(node) for default in node.defaults: --- 126,148 ---- def visitModule(self, node): ! lnf = walk(node.node, LocalNameFinder(), 0) ! self.locals.push(lnf.getLocals()) ! self.setDocstring(node.doc) ! self.visit(node.node) ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def visitFunction(self, node): ! self._visitFuncOrLambda(node, isLambda=0) ! self.storeName(node.name) def visitLambda(self, node): ! self._visitFuncOrLambda(node, isLambda=1) ! ## self.storeName("") def _visitFuncOrLambda(self, node, isLambda): ! gen = FunctionCodeGenerator(node, self.filename, isLambda) ! walk(node.code, gen) ! gen.finish() self.set_lineno(node) for default in node.defaults: *************** *** 171,236 **** def visitIf(self, node): ! end = self.newBlock() ! numtests = len(node.tests) ! for i in range(numtests): ! test, suite = node.tests[i] self.set_lineno(test) ! self.visit(test) ! ## if i == numtests - 1 and not node.else_: ! ## nextTest = end ! ## else: ! ## nextTest = self.newBlock() ! nextTest = self.newBlock() ! self.emit('JUMP_IF_FALSE', nextTest) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(suite) ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(nextTest) ! self.emit('POP_TOP') ! if node.else_: ! self.visit(node.else_) ! self.nextBlock(end) def visitWhile(self, node): self.set_lineno(node) ! loop = self.newBlock() ! else_ = self.newBlock() ! after = self.newBlock() ! self.emit('SETUP_LOOP', after) ! self.nextBlock(loop) ! self.loops.push(loop) self.set_lineno(node) ! self.visit(node.test) ! self.emit('JUMP_IF_FALSE', else_ or after) ! ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.body) ! self.emit('JUMP_ABSOLUTE', loop) ! ! self.startBlock(else_) # or just the POPs if not else clause ! self.emit('POP_TOP') ! self.emit('POP_BLOCK') ! if node.else_: ! self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitFor(self, node): ! start = self.newBlock() anchor = self.newBlock() ! after = self.newBlock() self.loops.push(start) self.set_lineno(node) ! self.emit('SETUP_LOOP', after) self.visit(node.list) self.visit(ast.Const(0)) ! self.nextBlock(start) self.set_lineno(node) self.emit('FOR_LOOP', anchor) --- 171,236 ---- def visitIf(self, node): ! end = self.newBlock() ! numtests = len(node.tests) ! for i in range(numtests): ! test, suite = node.tests[i] self.set_lineno(test) ! self.visit(test) ! ## if i == numtests - 1 and not node.else_: ! ## nextTest = end ! ## else: ! ## nextTest = self.newBlock() ! nextTest = self.newBlock() ! self.emit('JUMP_IF_FALSE', nextTest) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(suite) ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(nextTest) ! self.emit('POP_TOP') ! if node.else_: ! self.visit(node.else_) ! self.nextBlock(end) def visitWhile(self, node): self.set_lineno(node) ! loop = self.newBlock() ! else_ = self.newBlock() ! after = self.newBlock() ! self.emit('SETUP_LOOP', after) ! self.nextBlock(loop) ! self.loops.push(loop) self.set_lineno(node) ! self.visit(node.test) ! self.emit('JUMP_IF_FALSE', else_ or after) ! ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.body) ! self.emit('JUMP_ABSOLUTE', loop) ! ! self.startBlock(else_) # or just the POPs if not else clause ! self.emit('POP_TOP') ! self.emit('POP_BLOCK') ! if node.else_: ! self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitFor(self, node): ! start = self.newBlock() anchor = self.newBlock() ! after = self.newBlock() self.loops.push(start) self.set_lineno(node) ! self.emit('SETUP_LOOP', after) self.visit(node.list) self.visit(ast.Const(0)) ! self.nextBlock(start) self.set_lineno(node) self.emit('FOR_LOOP', anchor) *************** *** 238,326 **** self.visit(node.body) self.emit('JUMP_ABSOLUTE', start) ! self.nextBlock(anchor) self.emit('POP_BLOCK') if node.else_: self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitBreak(self, node): ! if not self.loops: ! raise SyntaxError, "'break' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) self.set_lineno(node) ! self.emit('BREAK_LOOP') def visitContinue(self, node): if not self.loops: raise SyntaxError, "'continue' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) l = self.loops.top() self.set_lineno(node) self.emit('JUMP_ABSOLUTE', l) ! self.nextBlock() def visitTest(self, node, jump): ! end = self.newBlock() for child in node.nodes[:-1]: self.visit(child) self.emit(jump, end) ! self.nextBlock() self.emit('POP_TOP') self.visit(node.nodes[-1]) ! self.nextBlock(end) def visitAnd(self, node): ! self.visitTest(node, 'JUMP_IF_FALSE') def visitOr(self, node): ! self.visitTest(node, 'JUMP_IF_TRUE') def visitCompare(self, node): ! self.visit(node.expr) ! cleanup = self.newBlock() ! for op, code in node.ops[:-1]: ! self.visit(code) ! self.emit('DUP_TOP') ! self.emit('ROT_THREE') ! self.emit('COMPARE_OP', op) ! self.emit('JUMP_IF_FALSE', cleanup) ! self.nextBlock() ! self.emit('POP_TOP') ! # now do the last comparison ! if node.ops: ! op, code = node.ops[-1] ! self.visit(code) ! self.emit('COMPARE_OP', op) ! if len(node.ops) > 1: ! end = self.newBlock() ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(cleanup) ! self.emit('ROT_TWO') ! self.emit('POP_TOP') ! self.nextBlock(end) # exception related def visitAssert(self, node): ! # XXX would be interesting to implement this via a ! # transformation of the AST before this stage ! end = self.newBlock() self.set_lineno(node) # XXX __debug__ and AssertionError appear to be special cases # -- they are always loaded as globals even if there are local # names. I guess this is a sort of renaming op. ! self.emit('LOAD_GLOBAL', '__debug__') ! self.emit('JUMP_IF_FALSE', end) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.test) ! self.emit('JUMP_IF_TRUE', end) ! self.nextBlock() ! self.emit('LOAD_GLOBAL', 'AssertionError') ! self.visit(node.fail) ! self.emit('RAISE_VARARGS', 2) ! self.nextBlock(end) ! self.emit('POP_TOP') def visitRaise(self, node): --- 238,326 ---- self.visit(node.body) self.emit('JUMP_ABSOLUTE', start) ! self.nextBlock(anchor) self.emit('POP_BLOCK') if node.else_: self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitBreak(self, node): ! if not self.loops: ! raise SyntaxError, "'break' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) self.set_lineno(node) ! self.emit('BREAK_LOOP') def visitContinue(self, node): if not self.loops: raise SyntaxError, "'continue' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) l = self.loops.top() self.set_lineno(node) self.emit('JUMP_ABSOLUTE', l) ! self.nextBlock() def visitTest(self, node, jump): ! end = self.newBlock() for child in node.nodes[:-1]: self.visit(child) self.emit(jump, end) ! self.nextBlock() self.emit('POP_TOP') self.visit(node.nodes[-1]) ! self.nextBlock(end) def visitAnd(self, node): ! self.visitTest(node, 'JUMP_IF_FALSE') def visitOr(self, node): ! self.visitTest(node, 'JUMP_IF_TRUE') def visitCompare(self, node): ! self.visit(node.expr) ! cleanup = self.newBlock() ! for op, code in node.ops[:-1]: ! self.visit(code) ! self.emit('DUP_TOP') ! self.emit('ROT_THREE') ! self.emit('COMPARE_OP', op) ! self.emit('JUMP_IF_FALSE', cleanup) ! self.nextBlock() ! self.emit('POP_TOP') ! # now do the last comparison ! if node.ops: ! op, code = node.ops[-1] ! self.visit(code) ! self.emit('COMPARE_OP', op) ! if len(node.ops) > 1: ! end = self.newBlock() ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(cleanup) ! self.emit('ROT_TWO') ! self.emit('POP_TOP') ! self.nextBlock(end) # exception related def visitAssert(self, node): ! # XXX would be interesting to implement this via a ! # transformation of the AST before this stage ! end = self.newBlock() self.set_lineno(node) # XXX __debug__ and AssertionError appear to be special cases # -- they are always loaded as globals even if there are local # names. I guess this is a sort of renaming op. ! self.emit('LOAD_GLOBAL', '__debug__') ! self.emit('JUMP_IF_FALSE', end) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.test) ! self.emit('JUMP_IF_TRUE', end) ! self.nextBlock() ! self.emit('LOAD_GLOBAL', 'AssertionError') ! self.visit(node.fail) ! self.emit('RAISE_VARARGS', 2) ! self.nextBlock(end) ! self.emit('POP_TOP') def visitRaise(self, node): *************** *** 350,354 **** self.emit('POP_BLOCK') self.emit('JUMP_FORWARD', lElse) ! self.nextBlock(handlers) last = len(node.handlers) - 1 --- 350,354 ---- self.emit('POP_BLOCK') self.emit('JUMP_FORWARD', lElse) ! self.nextBlock(handlers) last = len(node.handlers) - 1 *************** *** 362,366 **** next = self.newBlock() self.emit('JUMP_IF_FALSE', next) ! self.nextBlock() self.emit('POP_TOP') self.emit('POP_TOP') --- 362,366 ---- next = self.newBlock() self.emit('JUMP_IF_FALSE', next) ! self.nextBlock() self.emit('POP_TOP') self.emit('POP_TOP') *************** *** 373,383 **** self.emit('JUMP_FORWARD', end) if expr: ! self.nextBlock(next) self.emit('POP_TOP') self.emit('END_FINALLY') if node.else_: ! self.nextBlock(lElse) self.visit(node.else_) ! self.nextBlock(end) def visitTryFinally(self, node): --- 373,383 ---- self.emit('JUMP_FORWARD', end) if expr: ! self.nextBlock(next) self.emit('POP_TOP') self.emit('END_FINALLY') if node.else_: ! self.nextBlock(lElse) self.visit(node.else_) ! self.nextBlock(end) def visitTryFinally(self, node): *************** *** 388,392 **** self.emit('POP_BLOCK') self.emit('LOAD_CONST', None) ! self.nextBlock(final) self.visit(node.final) self.emit('END_FINALLY') --- 388,392 ---- self.emit('POP_BLOCK') self.emit('LOAD_CONST', None) ! self.nextBlock(final) self.visit(node.final) self.emit('END_FINALLY') *************** *** 395,400 **** ## def visitStmt(self, node): ! ## # nothing to do except walk the children ! ## pass def visitDiscard(self, node): --- 395,400 ---- ## def visitStmt(self, node): ! ## # nothing to do except walk the children ! ## pass def visitDiscard(self, node): *************** *** 406,415 **** def visitKeyword(self, node): ! self.emit('LOAD_CONST', node.name) ! self.visit(node.expr) def visitGlobal(self, node): # no code to generate ! pass def visitName(self, node): --- 406,415 ---- def visitKeyword(self, node): ! self.emit('LOAD_CONST', node.name) ! self.visit(node.expr) def visitGlobal(self, node): # no code to generate ! pass def visitName(self, node): *************** *** 471,475 **** def visitAssTuple(self, node): if findOp(node) != 'OP_DELETE': ! self.emit('UNPACK_TUPLE', len(node.nodes)) for child in node.nodes: self.visit(child) --- 471,475 ---- def visitAssTuple(self, node): if findOp(node) != 'OP_DELETE': ! self.emit('UNPACK_SEQUENCE', len(node.nodes)) for child in node.nodes: self.visit(child) *************** *** 656,663 **** self.emit('BUILD_MAP', 0) for k, v in node.items: ! lineno2 = getattr(node, 'lineno', None) if lineno2 is not None and lineno != lineno2: ! self.emit('SET_LINENO', lineno2) ! lineno = lineno2 self.emit('DUP_TOP') self.visit(v) --- 656,663 ---- self.emit('BUILD_MAP', 0) for k, v in node.items: ! lineno2 = getattr(node, 'lineno', None) if lineno2 is not None and lineno != lineno2: ! self.emit('SET_LINENO', lineno2) ! lineno = lineno2 self.emit('DUP_TOP') self.visit(v) *************** *** 670,676 **** def __init__(self, filename): ! # XXX is ? in compile.c ! self.graph = pyassem.PyFlowGraph("", filename) ! self.super_init(filename) class FunctionCodeGenerator(CodeGenerator): --- 670,676 ---- def __init__(self, filename): ! # XXX is ? in compile.c ! self.graph = pyassem.PyFlowGraph("", filename) ! self.super_init(filename) class FunctionCodeGenerator(CodeGenerator): *************** *** 687,702 **** else: name = func.name ! args, hasTupleArg = generateArgList(func.argnames) ! self.graph = pyassem.PyFlowGraph(name, filename, args, ! optimized=1) ! self.isLambda = isLambda ! self.super_init(filename) lnf = walk(func.code, LocalNameFinder(args), 0) self.locals.push(lnf.getLocals()) ! if func.varargs: ! self.graph.setFlag(CO_VARARGS) ! if func.kwargs: ! self.graph.setFlag(CO_VARKEYWORDS) self.set_lineno(func) if hasTupleArg: --- 687,702 ---- else: name = func.name ! args, hasTupleArg = generateArgList(func.argnames) ! self.graph = pyassem.PyFlowGraph(name, filename, args, ! optimized=1) ! self.isLambda = isLambda ! self.super_init(filename) lnf = walk(func.code, LocalNameFinder(args), 0) self.locals.push(lnf.getLocals()) ! if func.varargs: ! self.graph.setFlag(CO_VARARGS) ! if func.kwargs: ! self.graph.setFlag(CO_VARKEYWORDS) self.set_lineno(func) if hasTupleArg: *************** *** 704,711 **** def finish(self): ! self.graph.startExitBlock() ! if not self.isLambda: ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def generateArgUnpack(self, args): --- 704,711 ---- def finish(self): ! self.graph.startExitBlock() ! if not self.isLambda: ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def generateArgUnpack(self, args): *************** *** 715,742 **** self.emit('LOAD_FAST', '.nested%d' % count) count = count + 1 ! self.unpackTuple(arg) ! def unpackTuple(self, tup): ! self.emit('UNPACK_TUPLE', len(tup)) for elt in tup: if type(elt) == types.TupleType: ! self.unpackTuple(elt) else: self.emit('STORE_FAST', elt) class ClassCodeGenerator(CodeGenerator): super_init = CodeGenerator.__init__ def __init__(self, klass, filename): ! self.graph = pyassem.PyFlowGraph(klass.name, filename, ! optimized=0) self.super_init(filename) lnf = walk(klass.code, LocalNameFinder(), 0) self.locals.push(lnf.getLocals()) def finish(self): ! self.graph.startExitBlock() self.emit('LOAD_LOCALS') ! self.emit('RETURN_VALUE') --- 715,745 ---- self.emit('LOAD_FAST', '.nested%d' % count) count = count + 1 ! self.unpackSequence(arg) ! def unpackSequence(self, tup): ! self.emit('UNPACK_SEQUENCE', len(tup)) for elt in tup: if type(elt) == types.TupleType: ! self.unpackSequence(elt) else: self.emit('STORE_FAST', elt) + unpackTuple = unpackSequence + class ClassCodeGenerator(CodeGenerator): super_init = CodeGenerator.__init__ def __init__(self, klass, filename): ! self.graph = pyassem.PyFlowGraph(klass.name, filename, ! optimized=0) self.super_init(filename) lnf = walk(klass.code, LocalNameFinder(), 0) self.locals.push(lnf.getLocals()) + self.graph.setFlag(CO_NEWLOCALS) def finish(self): ! self.graph.startExitBlock() self.emit('LOAD_LOCALS') ! self.emit('RETURN_VALUE') *************** *** 747,758 **** count = 0 for elt in arglist: ! if type(elt) == types.StringType: ! args.append(elt) ! elif type(elt) == types.TupleType: ! args.append(TupleArg(count, elt)) ! count = count + 1 ! extra.extend(misc.flatten(elt)) ! else: ! raise ValueError, "unexpect argument type:", elt return args + extra, count --- 750,761 ---- count = 0 for elt in arglist: ! if type(elt) == types.StringType: ! args.append(elt) ! elif type(elt) == types.TupleType: ! args.append(TupleArg(count, elt)) ! count = count + 1 ! extra.extend(misc.flatten(elt)) ! else: ! raise ValueError, "unexpect argument type:", elt return args + extra, count *************** *** 772,776 **** def visitDict(self, node): ! pass def visitGlobal(self, node): --- 775,779 ---- def visitDict(self, node): ! pass def visitGlobal(self, node): *************** *** 782,786 **** def visitLambda(self, node): ! pass def visitImport(self, node): --- 785,789 ---- def visitLambda(self, node): ! pass def visitImport(self, node): *************** *** 817,819 **** for file in sys.argv[1:]: ! compile(file) --- 820,822 ---- for file in sys.argv[1:]: ! compile(file) Index: visitor.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/visitor.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** visitor.py 2000/03/16 20:04:16 1.3 --- visitor.py 2000/08/12 20:32:46 1.4 *************** *** 39,43 **** def __init__(self): self.node = None ! self._cache = {} def preorder(self, tree, visitor): --- 39,43 ---- def __init__(self): self.node = None ! self._cache = {} def preorder(self, tree, visitor): *************** *** 48,52 **** def _preorder(self, node, *args): ! return apply(self.dispatch, (node,) + args) def default(self, node, *args): --- 48,52 ---- def _preorder(self, node, *args): ! return apply(self.dispatch, (node,) + args) def default(self, node, *args): *************** *** 57,65 **** def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, self.default) ! self._cache[node.__class__] = meth if self.VERBOSE > 0: if self.VERBOSE == 1: --- 57,65 ---- def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, self.default) ! self._cache[node.__class__] = meth if self.VERBOSE > 0: if self.VERBOSE == 1: *************** *** 68,72 **** else: print "dispatch", className, (meth and meth.__name__ or '') ! return apply(meth, (node,) + args) class ExampleASTVisitor(ASTVisitor): --- 68,72 ---- else: print "dispatch", className, (meth and meth.__name__ or '') ! return apply(meth, (node,) + args) class ExampleASTVisitor(ASTVisitor): *************** *** 81,89 **** def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, 0) ! self._cache[node.__class__] = meth if self.VERBOSE > 1: print "dispatch", className, (meth and meth.__name__ or '') --- 81,89 ---- def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, 0) ! self._cache[node.__class__] = meth if self.VERBOSE > 1: print "dispatch", className, (meth and meth.__name__ or '') *************** *** 93,105 **** klass = node.__class__ if not self.examples.has_key(klass): ! self.examples[klass] = klass ! print ! print self.visitor ! print klass ! for attr in dir(node): ! if attr[0] != '_': ! print "\t", "%-12.12s" % attr, getattr(node, attr) ! print ! return apply(self.default, (node,) + args) _walker = ASTVisitor --- 93,105 ---- klass = node.__class__ if not self.examples.has_key(klass): ! self.examples[klass] = klass ! print ! print self.visitor ! print klass ! for attr in dir(node): ! if attr[0] != '_': ! print "\t", "%-12.12s" % attr, getattr(node, attr) ! print ! return apply(self.default, (node,) + args) _walker = ASTVisitor From python-dev@python.org Sat Aug 12 21:58:15 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 13:58:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules arraymodule.c,2.52,2.53 cPickle.c,2.49,2.50 Message-ID: <200008122058.NAA16486@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv16206 Modified Files: arraymodule.c cPickle.c Log Message: Use safer comparisons (only matters when sizeof(int) != sizeof(size_t)). fread and fwrite return size_t, so it is safer to cast up to the largest type for the comparison. I believe the cast is required at all to remove compiler warnings. Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** arraymodule.c 2000/08/01 21:00:58 2.52 --- arraymodule.c 2000/08/12 20:58:11 2.53 *************** *** 1040,1045 **** } if (self->ob_size > 0) { ! if ((int)fwrite(self->ob_item, self->ob_descr->itemsize, ! self->ob_size, fp) != self->ob_size) { PyErr_SetFromErrno(PyExc_IOError); clearerr(fp); --- 1040,1045 ---- } if (self->ob_size > 0) { ! if (fwrite(self->ob_item, self->ob_descr->itemsize, ! self->ob_size, fp) != (size_t)self->ob_size) { PyErr_SetFromErrno(PyExc_IOError); clearerr(fp); Index: cPickle.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cPickle.c,v retrieving revision 2.49 retrieving revision 2.50 diff -C2 -r2.49 -r2.50 *** cPickle.c 2000/07/31 15:28:04 2.49 --- cPickle.c 2000/08/12 20:58:11 2.50 *************** *** 408,412 **** } ! if ((int)fwrite(s, sizeof(char), n, self->fp) != n) { PyErr_SetFromErrno(PyExc_IOError); return -1; --- 408,412 ---- } ! if (fwrite(s, sizeof(char), n, self->fp) != (size_t)n) { PyErr_SetFromErrno(PyExc_IOError); return -1; *************** *** 504,508 **** } ! if ((int)fread(self->buf, sizeof(char), n, self->fp) != n) { if (feof(self->fp)) { PyErr_SetNone(PyExc_EOFError); --- 504,508 ---- } ! if (fread(self->buf, sizeof(char), n, self->fp) != (size_t)n) { if (feof(self->fp)) { PyErr_SetNone(PyExc_EOFError); From python-dev@python.org Sat Aug 12 22:35:39 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 14:35:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.174,2.175 Message-ID: <200008122135.OAA25637@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv25235/Python Modified Files: bltinmodule.c Log Message: Clean up a couple of warnings on Win64. The downcast of the strlen size_t return value to int is safe here because in each case it previouls checked that there will be no overflow. Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.174 retrieving revision 2.175 diff -C2 -r2.174 -r2.175 *** bltinmodule.c 2000/08/03 15:45:29 2.174 --- bltinmodule.c 2000/08/12 21:35:36 2.175 *************** *** 431,435 **** return NULL; s = s_buffer; ! len = strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { --- 431,435 ---- return NULL; s = s_buffer; ! len = (int)strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { From python-dev@python.org Sat Aug 12 22:37:43 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 14:37:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects floatobject.c,2.65,2.66 Message-ID: <200008122137.OAA26449@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26243/Objects Modified Files: floatobject.c Log Message: Clean up a warning on Win64. The downcast of the strlen size_t return value to int is safe here because it previously checked that there will be no overflow. Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.65 retrieving revision 2.66 diff -C2 -r2.65 -r2.66 *** floatobject.c 2000/07/31 15:28:04 2.65 --- floatobject.c 2000/08/12 21:37:39 2.66 *************** *** 154,158 **** return NULL; s = s_buffer; ! len = strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { --- 154,158 ---- return NULL; s = s_buffer; ! len = (int)strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { From python-dev@python.org Sat Aug 12 23:03:19 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 12 Aug 2000 15:03:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.121,2.122 Message-ID: <200008122203.PAA08469@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv6253/Python Modified Files: compile.c Log Message: The list comprehensions patch partly reversed the removal of UNPACK_LIST, re-introducing com_assign_list, now unused. Removed it. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.121 retrieving revision 2.122 diff -C2 -r2.121 -r2.122 *** compile.c 2000/08/12 18:09:51 2.121 --- compile.c 2000/08/12 22:03:16 2.122 *************** *** 1847,1863 **** static void - com_assign_list(struct compiling *c, node *n, int assigning) - { - int i; - if (assigning) { - i = (NCH(n)+1)/2; - com_addoparg(c, UNPACK_SEQUENCE, i); - com_push(c, i-1); - } - for (i = 0; i < NCH(n); i += 2) - com_assign(c, CHILD(n, i), assigning); - } - - static void com_assign_name(struct compiling *c, node *n, int assigning) { --- 1847,1850 ---- From python-dev@python.org Sat Aug 12 23:14:37 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 15:14:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.56,2.57 Message-ID: <200008122214.PAA23851@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv22298/Objects Modified Files: unicodeobject.c Log Message: Clean up warning from Monterey compiler. Properly end a comment block. It was terminated fine later but by a subsequent block and. It was also in #if 0. This patch is so trivial I can't believe I am talking about it. :) Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.56 retrieving revision 2.57 diff -C2 -r2.56 -r2.57 *** unicodeobject.c 2000/08/08 08:04:29 2.56 --- unicodeobject.c 2000/08/12 22:14:34 2.57 *************** *** 3174,3178 **** /* This code should go into some future Unicode collation support module. The basic comparison should compare ordinals on a naive ! basis (this is what Java does and thus JPython too). /* speedy UTF-16 code point order comparison */ --- 3174,3178 ---- /* This code should go into some future Unicode collation support module. The basic comparison should compare ordinals on a naive ! basis (this is what Java does and thus JPython too). */ /* speedy UTF-16 code point order comparison */ From python-dev@python.org Sun Aug 13 01:36:50 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:36:50 -0700 Subject: [Python-checkins] CVS: distutils/distutils cmd.py,1.21,1.22 Message-ID: <200008130036.RAA30024@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv29919 Modified Files: cmd.py Log Message: Fix references to functions formerly imported from 'util'. Index: cmd.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cmd.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** cmd.py 2000/08/02 01:37:53 1.21 --- cmd.py 2000/08/13 00:36:47 1.22 *************** *** 13,17 **** from types import * from distutils.errors import * ! from distutils import util --- 13,17 ---- from types import * from distutils.errors import * ! from distutils import util, dir_util, file_util, archive_util, dep_util *************** *** 323,328 **** def mkpath (self, name, mode=0777): ! util.mkpath (name, mode, ! self.verbose, self.dry_run) --- 323,328 ---- def mkpath (self, name, mode=0777): ! dir_util.mkpath(name, mode, ! self.verbose, self.dry_run) *************** *** 333,342 **** the latter defaults to false for commands that don't define it.)""" ! return util.copy_file (infile, outfile, ! preserve_mode, preserve_times, ! not self.force, ! link, ! self.verbose >= level, ! self.dry_run) --- 333,343 ---- the latter defaults to false for commands that don't define it.)""" ! return file_util.copy_file( ! infile, outfile, ! preserve_mode, preserve_times, ! not self.force, ! link, ! self.verbose >= level, ! self.dry_run) *************** *** 347,362 **** and force flags. """ ! return util.copy_tree (infile, outfile, ! preserve_mode,preserve_times,preserve_symlinks, ! not self.force, ! self.verbose >= level, ! self.dry_run) def move_file (self, src, dst, level=1): """Move a file respecting verbose and dry-run flags.""" ! return util.move_file (src, dst, ! self.verbose >= level, ! self.dry_run) --- 348,364 ---- and force flags. """ ! return dir_util.copy_tree( ! infile, outfile, ! preserve_mode,preserve_times,preserve_symlinks, ! not self.force, ! self.verbose >= level, ! self.dry_run) def move_file (self, src, dst, level=1): """Move a file respecting verbose and dry-run flags.""" ! return file_util.move_file (src, dst, ! self.verbose >= level, ! self.dry_run) *************** *** 371,376 **** def make_archive (self, base_name, format, root_dir=None, base_dir=None): ! return util.make_archive (base_name, format, root_dir, base_dir, ! self.verbose, self.dry_run) --- 373,379 ---- def make_archive (self, base_name, format, root_dir=None, base_dir=None): ! return archive_util.make_archive( ! base_name, format, root_dir, base_dir, ! self.verbose, self.dry_run) *************** *** 402,406 **** # exist, is out-of-date, or the 'force' flag is true) then # perform the action that presumably regenerates it ! if self.force or util.newer_group (infiles, outfile): self.execute (func, args, exec_msg, level) --- 405,409 ---- # exist, is out-of-date, or the 'force' flag is true) then # perform the action that presumably regenerates it ! if self.force or dep_util.newer_group (infiles, outfile): self.execute (func, args, exec_msg, level) From python-dev@python.org Sun Aug 13 01:39:00 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:39:00 -0700 Subject: [Python-checkins] CVS: distutils/distutils extension.py,1.3,1.4 Message-ID: <200008130039.RAA32659@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv32583 Modified Files: extension.py Log Message: Typo fix in docstring. Index: extension.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/extension.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** extension.py 2000/08/02 00:04:13 1.3 --- extension.py 2000/08/13 00:38:58 1.4 *************** *** 24,29 **** """Just a collection of attributes that describes an extension module and everything needed to build it (hopefully in a portable ! way, but there are hooks that let you can be as unportable as you ! need). Instance attributes: --- 24,28 ---- """Just a collection of attributes that describes an extension module and everything needed to build it (hopefully in a portable ! way, but there are hooks that let you be as unportable as you need). Instance attributes: From python-dev@python.org Sun Aug 13 01:41:42 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:41:42 -0700 Subject: [Python-checkins] CVS: distutils/distutils extension.py,1.4,1.5 Message-ID: <200008130041.RAA03306@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv3037 Modified Files: extension.py Log Message: Rene Liebscher: ext.export_symbols is now always a list (added 'or []'). Index: extension.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/extension.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** extension.py 2000/08/13 00:38:58 1.4 --- extension.py 2000/08/13 00:41:40 1.5 *************** *** 105,109 **** self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols # class Extension --- 105,109 ---- self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols or [] # class Extension From python-dev@python.org Sun Aug 13 01:42:37 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:42:37 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_ext.py,1.59,1.60 Message-ID: <200008130042.RAA04354@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv4230/command Modified Files: build_ext.py Log Message: get_export_symbols() changed, adds now module init function if not given by the user. Index: build_ext.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_ext.py,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -r1.59 -r1.60 *** build_ext.py 2000/08/01 23:54:29 1.59 --- build_ext.py 2000/08/13 00:42:35 1.60 *************** *** 550,561 **** """ ! # XXX what if 'export_symbols' defined but it doesn't contain ! # "init" + module_name? Should we add it? warn? or just carry ! # on doing nothing? ! ! if ext.export_symbols is None: ! return ["init" + string.split(ext.name,'.')[-1]] ! else: ! return ext.export_symbols def get_libraries (self, ext): --- 550,557 ---- """ ! initfunc_name = "init" + string.split(ext.name,'.')[-1] ! if initfunc_name not in ext.export_symbols: ! ext.export_symbols.append(initfunc_name) ! return ext.export_symbols def get_libraries (self, ext): From python-dev@python.org Sun Aug 13 01:43:18 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:43:18 -0700 Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.3,1.4 Message-ID: <200008130043.RAA05176@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv4835 Modified Files: bcppcompiler.py Log Message: Rene Liebscher: * changed some list.extend([...]) to list.append(...) * added '/g0' to compiler_options, so compiler doesn't stop after 100 warnings Index: bcppcompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** bcppcompiler.py 2000/08/04 01:30:03 1.3 --- bcppcompiler.py 2000/08/13 00:43:16 1.4 *************** *** 68,73 **** self.preprocess_options = None ! self.compile_options = ['/tWM', '/O2', '/q'] ! self.compile_options_debug = ['/tWM', '/Od', '/q'] self.ldflags_shared = ['/Tpd', '/Gn', '/q', '/x'] --- 68,73 ---- self.preprocess_options = None ! self.compile_options = ['/tWM', '/O2', '/q', '/g0'] ! self.compile_options_debug = ['/tWM', '/Od', '/q', '/g0'] self.ldflags_shared = ['/Tpd', '/Gn', '/q', '/x'] *************** *** 233,237 **** # a Borland-like one, or create one with name bcpp_python15.lib # there and remove the pragmas from config.h - #libraries.append ('mypylib') libraries.append ('import32') libraries.append ('cw32mt') --- 233,236 ---- *************** *** 258,262 **** ld_args.extend([',',output_filename]) # no map file and start libraries ! ld_args.extend([',', ',']) for lib in libraries: --- 257,261 ---- ld_args.extend([',',output_filename]) # no map file and start libraries ! ld_args.append(',,') for lib in libraries: From python-dev@python.org Sun Aug 13 01:43:58 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:43:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils cygwinccompiler.py,1.4,1.5 Message-ID: <200008130043.RAA06034@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv5461 Modified Files: cygwinccompiler.py Log Message: Rene Liebscher: * use self.debug_print() for debug messages * uses now copy.copy() to copy lists * added 'shared_lib_extension=".dll"', ... , this is necessary if you want use the compiler class outside of the standard distutils build process. * changed result type of check_config_h() from int to string Index: cygwinccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cygwinccompiler.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** cygwinccompiler.py 2000/08/02 01:31:56 1.4 --- cygwinccompiler.py 2000/08/13 00:43:56 1.5 *************** *** 45,49 **** __revision__ = "$Id$" ! import os,sys from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file --- 45,49 ---- __revision__ = "$Id$" ! import os,sys,copy from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file *************** *** 52,58 **** compiler_type = 'cygwin' ! gcc_version = None ! dllwrap_version = None ! ld_version = None def __init__ (self, --- 52,61 ---- compiler_type = 'cygwin' ! obj_extension = ".o" ! static_lib_extension = ".a" ! shared_lib_extension = ".dll" ! static_lib_format = "lib%s%s" ! shared_lib_format = "%s%s" ! exe_extension = ".exe" def __init__ (self, *************** *** 63,67 **** UnixCCompiler.__init__ (self, verbose, dry_run, force) ! if check_config_h()<=0: self.warn( "Python's config.h doesn't seem to support your compiler. " --- 66,72 ---- UnixCCompiler.__init__ (self, verbose, dry_run, force) ! check_result = check_config_h() ! self.debug_print("Python's GCC status: %s" % check_result) ! if check_result[:2] <> "OK": self.warn( "Python's config.h doesn't seem to support your compiler. " *************** *** 70,74 **** (self.gcc_version, self.ld_version, self.dllwrap_version) = \ get_versions() ! sys.stderr.write(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % (self.gcc_version, self.ld_version, --- 75,79 ---- (self.gcc_version, self.ld_version, self.dllwrap_version) = \ get_versions() ! self.debug_print(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % (self.gcc_version, self.ld_version, *************** *** 118,124 **** build_temp=None): ! # use separate copies, so can modify the lists ! extra_preargs = list(extra_preargs or []) ! libraries = list(libraries or []) # Additional libraries --- 123,129 ---- build_temp=None): ! # use separate copies, so we can modify the lists ! extra_preargs = copy.copy(extra_preargs or []) ! libraries = copy.copy(libraries or []) # Additional libraries *************** *** 242,250 **** """ # return values ! # 2: OK, python was compiled with GCC ! # 1: OK, python's config.h mentions __GCC__ ! # 0: uncertain, because we couldn't check it ! # -1: probably not OK, because we didn't found it in config.h ! # You could check check_config_h()>0 => OK from distutils import sysconfig --- 247,255 ---- """ # return values ! # "OK, python was compiled with GCC" ! # "OK, python's config.h mentions __GCC__" ! # "uncertain, because we couldn't check it" ! # "not OK, because we didn't found __GCC__ in config.h" ! # You could check check_config_h()[:2] == "OK" from distutils import sysconfig *************** *** 255,259 **** pass # go to the next test else: ! return 2 try: --- 260,264 ---- pass # go to the next test else: ! return "OK, python was compiled with GCC" try: *************** *** 266,277 **** # is somewhere a #ifdef __GNUC__ or something similar if -1 == string.find(s,"__GNUC__"): ! return -1 else: ! return 1 except IOError: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing pass ! return 0 def get_versions(): --- 271,282 ---- # is somewhere a #ifdef __GNUC__ or something similar if -1 == string.find(s,"__GNUC__"): ! return "not OK, because we didn't found __GCC__ in config.h" else: ! return "OK, python's config.h mentions __GCC__" except IOError: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing pass ! return "uncertain, because we couldn't check it" def get_versions(): From python-dev@python.org Sun Aug 13 01:54:42 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:54:42 -0700 Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.4,1.5 Message-ID: <200008130054.RAA18200@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv18103 Modified Files: bcppcompiler.py Log Message: Added a whinging comment about the ugliness of constructing the BCPP argument list. Index: bcppcompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** bcppcompiler.py 2000/08/13 00:43:16 1.4 --- bcppcompiler.py 2000/08/13 00:54:39 1.5 *************** *** 254,257 **** --- 254,267 ---- ld_args.extend(objects) # list of object files + # XXX the command-line syntax for Borland C++ is a bit wonky; + # certain filenames are jammed together in one big string, but + # comma-delimited. This doesn't mesh too well with the + # Unix-centric attitude (with a DOS/Windows quoting hack) of + # 'spawn()', so constructing the argument list is a bit + # awkward. Note that doing the obvious thing and jamming all + # the filenames and commas into one argument would be wrong, + # because 'spawn()' would quote any filenames with spaces in + # them. Arghghh!. Apparently it works fine as coded... + # name of dll file ld_args.extend([',',output_filename]) From python-dev@python.org Sun Aug 13 02:19:02 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 18:19:02 -0700 Subject: [Python-checkins] CVS: distutils/distutils cygwinccompiler.py,1.5,1.6 Message-ID: <200008130119.SAA16536@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv16184 Modified Files: cygwinccompiler.py Log Message: Overhauld 'check_config_h()': now returns a (status, details) tuple, and is much better documented to boot. Index: cygwinccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cygwinccompiler.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** cygwinccompiler.py 2000/08/13 00:43:56 1.5 --- cygwinccompiler.py 2000/08/13 01:18:55 1.6 *************** *** 66,74 **** UnixCCompiler.__init__ (self, verbose, dry_run, force) ! check_result = check_config_h() ! self.debug_print("Python's GCC status: %s" % check_result) ! if check_result[:2] <> "OK": self.warn( ! "Python's config.h doesn't seem to support your compiler. " "Compiling may fail because of undefined preprocessor macros.") --- 66,76 ---- UnixCCompiler.__init__ (self, verbose, dry_run, force) ! (status, details) = check_config_h() ! self.debug_print("Python's GCC status: %s (details: %s)" % ! (status, details)) ! if status is not CONFIG_H_OK: self.warn( ! "Python's config.h doesn't seem to support your compiler. " + ! ("Reason: %s." % details) + "Compiling may fail because of undefined preprocessor macros.") *************** *** 242,255 **** # version. def check_config_h(): ! """Checks if the GCC compiler is mentioned in config.h. If it is not, ! compiling probably doesn't work. """ ! # return values ! # "OK, python was compiled with GCC" ! # "OK, python's config.h mentions __GCC__" ! # "uncertain, because we couldn't check it" ! # "not OK, because we didn't found __GCC__ in config.h" ! # You could check check_config_h()[:2] == "OK" from distutils import sysconfig --- 244,271 ---- # version. + CONFIG_H_OK = "ok" + CONFIG_H_NOTOK = "not ok" + CONFIG_H_UNCERTAIN = "uncertain" + def check_config_h(): ! ! """Check if the current Python installation (specifically, config.h) ! appears amenable to building extensions with GCC. Returns a tuple ! (status, details), where 'status' is one of the following constants: ! CONFIG_H_OK ! all is well, go ahead and compile ! CONFIG_H_NOTOK ! doesn't look good ! CONFIG_H_UNCERTAIN ! not sure -- unable to read config.h ! 'details' is a human-readable string explaining the situation. ! ! Note there are two ways to conclude "OK": either 'sys.version' contains ! the string "GCC" (implying that this Python was built with GCC), or the ! installed "config.h" contains the string "__GNUC__". """ ! ! # XXX since this function also checks sys.version, it's not strictly a ! # "config.h" check -- should probably be renamed... from distutils import sysconfig *************** *** 257,282 **** # if sys.version contains GCC then python was compiled with # GCC, and the config.h file should be OK ! if -1 == string.find(sys.version,"GCC"): ! pass # go to the next test ! else: ! return "OK, python was compiled with GCC" try: # It would probably better to read single lines to search. # But we do this only once, and it is fast enough ! f=open(sysconfig.get_config_h_filename()) ! s=f.read() f.close() ! # is somewhere a #ifdef __GNUC__ or something similar ! if -1 == string.find(s,"__GNUC__"): ! return "not OK, because we didn't found __GCC__ in config.h" ! else: ! return "OK, python's config.h mentions __GCC__" ! except IOError: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing ! pass ! return "uncertain, because we couldn't check it" def get_versions(): --- 273,301 ---- # if sys.version contains GCC then python was compiled with # GCC, and the config.h file should be OK ! if string.find(sys.version,"GCC") >= 0: ! return (CONFIG_H_OK, "sys.version mentions 'GCC'") + fn = sysconfig.get_config_h_filename() try: # It would probably better to read single lines to search. # But we do this only once, and it is fast enough ! f = open(fn) ! s = f.read() f.close() ! except IOError, exc: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing ! return (CONFIG_H_UNCERTAIN, ! "couldn't read '%s': %s" % (fn, exc.strerror)) ! ! else: ! # "config.h" contains an "#ifdef __GNUC__" or something similar ! if string.find(s,"__GNUC__") >= 0: ! return (CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn) ! else: ! return (CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn) ! ! def get_versions(): From python-dev@python.org Sun Aug 13 12:59:11 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Sun, 13 Aug 2000 04:59:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pymem.h,2.1,2.2 Message-ID: <200008131159.EAA09228@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv6337 Modified Files: pymem.h Log Message: Fix a typo in the PyMem_Resize macro, found by Andrew Kuchling Index: pymem.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pymem.h,v retrieving revision 2.1 retrieving revision 2.2 diff -C2 -r2.1 -r2.2 *** pymem.h 2000/07/31 22:19:30 2.1 --- pymem.h 2000/08/13 11:59:08 2.2 *************** *** 115,119 **** ( (type *) PyMem_Malloc((n) * sizeof(type)) ) #define PyMem_Resize(p, type, n) \ ! ( (p) = (type *) PyMem_Realloc((n) * sizeof(type)) ) #define PyMem_Del(p) PyMem_Free(p) --- 115,119 ---- ( (type *) PyMem_Malloc((n) * sizeof(type)) ) #define PyMem_Resize(p, type, n) \ ! ( (p) = (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) #define PyMem_Del(p) PyMem_Free(p) From python-dev@python.org Sun Aug 13 18:05:20 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 13 Aug 2000 10:05:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.122,2.123 Message-ID: <200008131705.KAA01198@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv31079/Python Modified Files: compile.c Log Message: The list comp patch checked for the second child node of the 'listmaker' node, without checking if the node actually had more than one child. It can have only one node, though: '[' test ']'. This fixes it. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.122 retrieving revision 2.123 diff -C2 -r2.122 -r2.123 *** compile.c 2000/08/12 22:03:16 2.122 --- compile.c 2000/08/13 17:05:17 2.123 *************** *** 1046,1050 **** { /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (TYPE(CHILD(n, 1)) == list_iter) com_list_comprehension(c, n); else { --- 1046,1050 ---- { /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_iter) com_list_comprehension(c, n); else { From python-dev@python.org Sun Aug 13 23:47:48 2000 From: python-dev@python.org (Trent Mick) Date: Sun, 13 Aug 2000 15:47:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects listobject.c,2.83,2.84 Message-ID: <200008132247.PAA06514@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv1607/Objects Modified Files: listobject.c Log Message: Check for overflow in list object insertion and raise OverflowError. see: http://www.python.org/pipermail/python-dev/2000-August/014971.html Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.83 retrieving revision 2.84 diff -C2 -r2.83 -r2.84 *** listobject.c 2000/07/25 12:56:38 2.83 --- listobject.c 2000/08/13 22:47:45 2.84 *************** *** 135,138 **** --- 135,143 ---- return -1; } + if (self->ob_size == INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "cannot add more objects to list"); + return -1; + } items = self->ob_item; NRESIZE(items, PyObject *, self->ob_size+1); From python-dev@python.org Sun Aug 13 23:59:29 2000 From: python-dev@python.org (Trent Mick) Date: Sun, 13 Aug 2000 15:59:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild _socket.dsp,1.3,1.4 _sre.dsp,1.4,1.5 _tkinter.dsp,1.16,1.17 bsddb.dsp,1.12,1.13 mmap.dsp,1.6,1.7 parser.dsp,1.10,1.11 pyexpat.dsp,1.4,1.5 python.dsp,1.12,1.13 python20.dsp,1.6,1.7 pythonw.dsp,1.10,1.11 select.dsp,1.3,1.4 ucnhash.dsp,1.5,1.6 unicodedata.dsp,1.5,1.6 winreg.dsp,1.6,1.7 winsound.dsp,1.5,1.6 zlib.dsp,1.13,1.14 pcbuild.dsw,1.19,1.20 Message-ID: <200008132259.PAA18637@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv17145 Modified Files: _socket.dsp _sre.dsp _tkinter.dsp bsddb.dsp mmap.dsp parser.dsp pyexpat.dsp python.dsp python20.dsp pythonw.dsp select.dsp ucnhash.dsp unicodedata.dsp winreg.dsp winsound.dsp zlib.dsp pcbuild.dsw Log Message: Revert this checkin: http://www.python.org/pipermail/python-checkins/2000-August/007072.html and make PCbuild/*.dsp PCbuild/*.dsw binary again. Index: _socket.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_socket.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** _socket.dsp 2000/08/11 23:20:32 1.3 --- _socket.dsp 2000/08/13 22:59:26 1.4 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project Index: _sre.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_sre.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** _sre.dsp 2000/08/11 23:20:32 1.4 --- _sre.dsp 2000/08/13 22:59:26 1.5 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: _tkinter.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_tkinter.dsp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** _tkinter.dsp 2000/08/11 23:20:32 1.16 --- _tkinter.dsp 2000/08/13 22:59:26 1.17 *************** *** 1,197 **** ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,197 ---- ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: bsddb.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/bsddb.dsp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** bsddb.dsp 2000/08/11 23:20:32 1.12 --- bsddb.dsp 2000/08/13 22:59:26 1.13 *************** *** 1,188 **** ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,188 ---- ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: mmap.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/mmap.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** mmap.dsp 2000/08/11 23:20:32 1.6 --- mmap.dsp 2000/08/13 22:59:26 1.7 *************** *** 1,97 **** ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project --- 1,97 ---- ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project Index: parser.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/parser.dsp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** parser.dsp 2000/08/11 23:20:32 1.10 --- parser.dsp 2000/08/13 22:59:26 1.11 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pyexpat.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pyexpat.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pyexpat.dsp 2000/08/11 23:20:32 1.4 --- pyexpat.dsp 2000/08/13 22:59:26 1.5 *************** *** 1,190 **** ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project --- 1,190 ---- ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project Index: python.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python.dsp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** python.dsp 2000/08/11 23:20:32 1.12 --- python.dsp 2000/08/13 22:59:26 1.13 *************** *** 1,170 **** ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project --- 1,170 ---- ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project Index: python20.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** python20.dsp 2000/08/11 23:20:32 1.6 --- python20.dsp 2000/08/13 22:59:26 1.7 *************** *** 1,1690 **** ! # Microsoft Developer Studio Project File - Name="python20" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=python20 - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run [...3351 lines suppressed...] ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\yuvconvert.c ! ! !IF "$(CFG)" == "python20 - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pythonw.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pythonw.dsp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** pythonw.dsp 2000/08/11 23:20:32 1.10 --- pythonw.dsp 2000/08/13 22:59:26 1.11 *************** *** 1,184 **** ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,184 ---- ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: select.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/select.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** select.dsp 2000/08/11 23:20:32 1.3 --- select.dsp 2000/08/13 22:59:26 1.4 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project Index: ucnhash.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/ucnhash.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** ucnhash.dsp 2000/08/11 23:20:32 1.5 --- ucnhash.dsp 2000/08/13 22:59:26 1.6 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project Index: unicodedata.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/unicodedata.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** unicodedata.dsp 2000/08/11 23:20:32 1.5 --- unicodedata.dsp 2000/08/13 22:59:26 1.6 *************** *** 1,103 **** ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project --- 1,103 ---- ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project Index: winreg.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winreg.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** winreg.dsp 2000/08/11 23:20:32 1.6 --- winreg.dsp 2000/08/13 22:59:26 1.7 *************** *** 1,108 **** ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,108 ---- ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: winsound.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winsound.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** winsound.dsp 2000/08/11 23:20:32 1.5 --- winsound.dsp 2000/08/13 22:59:26 1.6 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project Index: zlib.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/zlib.dsp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** zlib.dsp 2000/08/11 23:20:32 1.13 --- zlib.dsp 2000/08/13 22:59:26 1.14 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project Index: pcbuild.dsw =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pcbuild.dsw,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** pcbuild.dsw 2000/08/11 23:20:32 1.19 --- pcbuild.dsw 2000/08/13 22:59:26 1.20 *************** *** 1,254 **** ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! --- 1,254 ---- ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! From python-dev@python.org Mon Aug 14 03:50:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Sun, 13 Aug 2000 19:50:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api api.tex,1.76,1.77 Message-ID: <200008140250.TAA31549@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv31542/api Modified Files: api.tex Log Message: In the section on the "Very High Level Layer", address concerns brought up by Edward K. Ream about FILE* values and incompatible C libraries in dynamically linked extensions. It is not clear (to me) how realistic the issue is, but it is better documented than not. This closes SourceForge bug #111520. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -r1.76 -r1.77 *** api.tex 2000/08/11 20:39:29 1.76 --- api.tex 2000/08/14 02:50:21 1.77 *************** *** 598,601 **** --- 598,610 ---- described following the functions which accept them as parameters. + Note also that several of these functions take \ctype{FILE*} + parameters. On particular issue which needs to be handled carefully + is that the \ctype{FILE} structure for different C libraries can be + different and incompatible. Under Windows (at least), it is possible + for dynamically linked extensions to actually use different libraries, + so care should be taken that \ctype{FILE*} parameters are only passed + to these functions if it is certain that they were created by the same + library that the Python runtime is using. + \begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *fp, char *filename} If \var{fp} refers to a file associated with an interactive device From python-dev@python.org Mon Aug 14 05:47:36 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 21:47:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.163,2.164 Message-ID: <200008140447.VAA23910@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv23896 Modified Files: posixmodule.c Log Message: Patch #101032, from David Bolen: This is an enhancement to a prior patch (100941) ... [T]his patch removes the risk of deadlock waiting for the child previously present in certain cases. It adds tracking of all file handles returned from an os.popen* call and only waits for the child process, returning the exit code, on the closure of the final file handle to that child. Index: posixmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.163 retrieving revision 2.164 diff -C2 -r2.163 -r2.164 *** posixmodule.c 2000/07/31 15:28:04 2.163 --- posixmodule.c 2000/08/14 04:47:33 2.164 *************** *** 2099,2103 **** * Written by Bill Tutt . Minor tweaks * and 2.0 integration by Fredrik Lundh ! * Return code handling by David Bolen. */ --- 2099,2103 ---- * Written by Bill Tutt . Minor tweaks * and 2.0 integration by Fredrik Lundh ! * Return code handling by David Bolen . */ *************** *** 2117,2122 **** /* * Internal dictionary mapping popen* file pointers to process handles, ! * in order to maintain a link to the process handle until the file is ! * closed, at which point the process exit code is returned to the caller. */ static PyObject *_PyPopenProcs = NULL; --- 2117,2122 ---- /* * Internal dictionary mapping popen* file pointers to process handles, ! * for use when retrieving the process exit code. See _PyPclose() below ! * for more information on this dictionary's use. */ static PyObject *_PyPopenProcs = NULL; *************** *** 2277,2284 **** static int ! _PyPopenCreateProcess(char *cmdstring, FILE *file, HANDLE hStdin, HANDLE hStdout, ! HANDLE hStderr) { PROCESS_INFORMATION piProcInfo; --- 2277,2285 ---- static int ! _PyPopenCreateProcess(char *cmdstring, HANDLE hStdin, HANDLE hStdout, ! HANDLE hStderr, ! HANDLE *hProcess) { PROCESS_INFORMATION piProcInfo; *************** *** 2355,2378 **** CloseHandle(piProcInfo.hThread); ! /* ! * Try to insert our process handle into the internal ! * dictionary so we can find it later when trying ! * to close this file. ! */ ! if (!_PyPopenProcs) ! _PyPopenProcs = PyDict_New(); ! if (_PyPopenProcs) { ! PyObject *hProcessObj, *fileObj; ! ! hProcessObj = PyLong_FromVoidPtr(piProcInfo.hProcess); ! fileObj = PyLong_FromVoidPtr(file); ! ! if (!hProcessObj || !fileObj || ! PyDict_SetItem(_PyPopenProcs, ! fileObj, hProcessObj) < 0) { ! /* Insert failure - close handle to prevent leak */ ! CloseHandle(piProcInfo.hProcess); ! } ! } return TRUE; } --- 2356,2361 ---- CloseHandle(piProcInfo.hThread); ! /* Return process handle */ ! *hProcess = piProcInfo.hProcess; return TRUE; } *************** *** 2387,2391 **** HANDLE hChildStdinRd, hChildStdinWr, hChildStdoutRd, hChildStdoutWr, hChildStderrRd, hChildStderrWr, hChildStdinWrDup, hChildStdoutRdDup, ! hChildStderrRdDup; /* hChildStdoutWrDup; */ SECURITY_ATTRIBUTES saAttr; --- 2370,2374 ---- HANDLE hChildStdinRd, hChildStdinWr, hChildStdoutRd, hChildStdoutWr, hChildStderrRd, hChildStderrWr, hChildStdinWrDup, hChildStdoutRdDup, ! hChildStderrRdDup, hProcess; /* hChildStdoutWrDup; */ SECURITY_ATTRIBUTES saAttr; *************** *** 2393,2396 **** --- 2376,2380 ---- int fd1, fd2, fd3; FILE *f1, *f2, *f3; + long file_count; PyObject *f; *************** *** 2491,2494 **** --- 2475,2479 ---- break; } + file_count = 1; break; *************** *** 2513,2517 **** p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); PyFile_SetBufSize(p1, 0); ! p2 = PyFile_FromFile(f2, cmdstring, m1, fclose); PyFile_SetBufSize(p2, 0); --- 2498,2502 ---- p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); PyFile_SetBufSize(p1, 0); ! p2 = PyFile_FromFile(f2, cmdstring, m1, _PyPclose); PyFile_SetBufSize(p2, 0); *************** *** 2520,2523 **** --- 2505,2509 ---- f = Py_BuildValue("OO",p1,p2); + file_count = 2; break; } *************** *** 2543,2552 **** f3 = _fdopen(fd3, m1); p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); ! p2 = PyFile_FromFile(f2, cmdstring, m1, fclose); ! p3 = PyFile_FromFile(f3, cmdstring, m1, fclose); PyFile_SetBufSize(p1, 0); PyFile_SetBufSize(p2, 0); PyFile_SetBufSize(p3, 0); f = Py_BuildValue("OOO",p1,p2,p3); break; } --- 2529,2539 ---- f3 = _fdopen(fd3, m1); p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); ! p2 = PyFile_FromFile(f2, cmdstring, m1, _PyPclose); ! p3 = PyFile_FromFile(f3, cmdstring, m1, _PyPclose); PyFile_SetBufSize(p1, 0); PyFile_SetBufSize(p2, 0); PyFile_SetBufSize(p3, 0); f = Py_BuildValue("OOO",p1,p2,p3); + file_count = 3; break; } *************** *** 2555,2573 **** if (n == POPEN_4) { if (!_PyPopenCreateProcess(cmdstring, - f1, hChildStdinRd, hChildStdoutWr, ! hChildStdoutWr)) return win32_error("CreateProcess", NULL); } else { if (!_PyPopenCreateProcess(cmdstring, - f1, hChildStdinRd, hChildStdoutWr, ! hChildStderrWr)) return win32_error("CreateProcess", NULL); } /* Child is launched. Close the parents copy of those pipe * handles that only the child should have open. You need to --- 2542,2645 ---- if (n == POPEN_4) { if (!_PyPopenCreateProcess(cmdstring, hChildStdinRd, hChildStdoutWr, ! hChildStdoutWr, ! &hProcess)) return win32_error("CreateProcess", NULL); } else { if (!_PyPopenCreateProcess(cmdstring, hChildStdinRd, hChildStdoutWr, ! hChildStderrWr, ! &hProcess)) return win32_error("CreateProcess", NULL); } + /* + * Insert the files we've created into the process dictionary + * all referencing the list with the process handle and the + * initial number of files (see description below in _PyPclose). + * Since if _PyPclose later tried to wait on a process when all + * handles weren't closed, it could create a deadlock with the + * child, we spend some energy here to try to ensure that we + * either insert all file handles into the dictionary or none + * at all. It's a little clumsy with the various popen modes + * and variable number of files involved. + */ + if (!_PyPopenProcs) { + _PyPopenProcs = PyDict_New(); + } + + if (_PyPopenProcs) { + PyObject *procObj, *hProcessObj, *intObj, *fileObj[3]; + int ins_rc[3]; + + fileObj[0] = fileObj[1] = fileObj[2] = NULL; + ins_rc[0] = ins_rc[1] = ins_rc[2] = 0; + + procObj = PyList_New(2); + hProcessObj = PyLong_FromVoidPtr(hProcess); + intObj = PyInt_FromLong(file_count); + + if (procObj && hProcessObj && intObj) { + PyList_SetItem(procObj,0,hProcessObj); + PyList_SetItem(procObj,1,intObj); + + fileObj[0] = PyLong_FromVoidPtr(f1); + if (fileObj[0]) { + ins_rc[0] = PyDict_SetItem(_PyPopenProcs, + fileObj[0], + procObj); + } + if (file_count >= 2) { + fileObj[1] = PyLong_FromVoidPtr(f2); + if (fileObj[1]) { + ins_rc[1] = PyDict_SetItem(_PyPopenProcs, + fileObj[1], + procObj); + } + } + if (file_count >= 3) { + fileObj[2] = PyLong_FromVoidPtr(f3); + if (fileObj[2]) { + ins_rc[2] = PyDict_SetItem(_PyPopenProcs, + fileObj[2], + procObj); + } + } + + if (ins_rc[0] < 0 || !fileObj[0] || + ins_rc[1] < 0 || (file_count > 1 && !fileObj[1]) || + ins_rc[2] < 0 || (file_count > 2 && !fileObj[2])) { + /* Something failed - remove any dictionary + * entries that did make it. + */ + if (!ins_rc[0] && fileObj[0]) { + PyDict_DelItem(_PyPopenProcs, + fileObj[0]); + } + if (!ins_rc[1] && fileObj[1]) { + PyDict_DelItem(_PyPopenProcs, + fileObj[1]); + } + if (!ins_rc[2] && fileObj[2]) { + PyDict_DelItem(_PyPopenProcs, + fileObj[2]); + } + } + } + + /* + * Clean up our localized references for the dictionary keys + * and value since PyDict_SetItem will Py_INCREF any copies + * that got placed in the dictionary. + */ + Py_XDECREF(procObj); + Py_XDECREF(fileObj[0]); + Py_XDECREF(fileObj[1]); + Py_XDECREF(fileObj[2]); + } + /* Child is launched. Close the parents copy of those pipe * handles that only the child should have open. You need to *************** *** 2591,2594 **** --- 2663,2684 ---- * Wrapper for fclose() to use for popen* files, so we can retrieve the * exit code for the child process and return as a result of the close. + * + * This function uses the _PyPopenProcs dictionary in order to map the + * input file pointer to information about the process that was + * originally created by the popen* call that created the file pointer. + * The dictionary uses the file pointer as a key (with one entry + * inserted for each file returned by the original popen* call) and a + * single list object as the value for all files from a single call. + * The list object contains the Win32 process handle at [0], and a file + * count at [1], which is initialized to the total number of file + * handles using that list. + * + * This function closes whichever handle it is passed, and decrements + * the file count in the dictionary for the process handle pointed to + * by this file. On the last close (when the file count reaches zero), + * this function will wait for the child process and then return its + * exit code as the result of the close() operation. This permits the + * files to be closed in any order - it is always the close() of the + * final handle that will return the exit code. */ static int _PyPclose(FILE *file) *************** *** 2597,2613 **** DWORD exit_code; HANDLE hProcess; ! PyObject *hProcessObj, *fileObj; /* Close the file handle first, to ensure it can't block the ! * child from exiting when we wait for it below. */ result = fclose(file); if (_PyPopenProcs) { ! fileObj = PyLong_FromVoidPtr(file); ! if (fileObj) { ! hProcessObj = PyDict_GetItem(_PyPopenProcs, fileObj); ! if (hProcessObj) { ! hProcess = PyLong_AsVoidPtr(hProcessObj); if (result != EOF && WaitForSingleObject(hProcess, INFINITE) != WAIT_FAILED && --- 2687,2715 ---- DWORD exit_code; HANDLE hProcess; ! PyObject *procObj, *hProcessObj, *intObj, *fileObj; ! long file_count; /* Close the file handle first, to ensure it can't block the ! * child from exiting if it's the last handle. */ result = fclose(file); if (_PyPopenProcs) { ! if ((fileObj = PyLong_FromVoidPtr(file)) != NULL && ! (procObj = PyDict_GetItem(_PyPopenProcs, ! fileObj)) != NULL && ! (hProcessObj = PyList_GetItem(procObj,0)) != NULL && ! (intObj = PyList_GetItem(procObj,1)) != NULL) { ! ! hProcess = PyLong_AsVoidPtr(hProcessObj); ! file_count = PyInt_AsLong(intObj); ! ! if (file_count > 1) { ! /* Still other files referencing process */ ! file_count--; ! PyList_SetItem(procObj,1, ! PyInt_FromLong(file_count)); ! } else { ! /* Last file for this process */ if (result != EOF && WaitForSingleObject(hProcess, INFINITE) != WAIT_FAILED && *************** *** 2635,2647 **** /* Free up the native handle at this point */ CloseHandle(hProcess); ! /* Remove from dictionary and flush dictionary if empty */ ! PyDict_DelItem(_PyPopenProcs, fileObj); ! if (PyDict_Size(_PyPopenProcs) == 0) { ! Py_DECREF(_PyPopenProcs); ! _PyPopenProcs = NULL; ! } ! } /* if hProcessObj */ ! } /* if fileObj */ } /* if _PyPopenProcs */ --- 2737,2753 ---- /* Free up the native handle at this point */ CloseHandle(hProcess); + } ! /* Remove this file pointer from dictionary */ ! PyDict_DelItem(_PyPopenProcs, fileObj); ! ! if (PyDict_Size(_PyPopenProcs) == 0) { ! Py_DECREF(_PyPopenProcs); ! _PyPopenProcs = NULL; ! } ! ! } /* if object retrieval ok */ ! ! Py_XDECREF(fileObj); } /* if _PyPopenProcs */ From python-dev@python.org Mon Aug 14 06:04:31 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 22:04:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC w9xpopen.c,1.1,1.2 Message-ID: <200008140504.WAA27601@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv27509 Modified Files: w9xpopen.c Log Message: Patch #101032, from David Bolen: Ensure the "proxied" command's return code bubbles back up. Index: w9xpopen.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/w9xpopen.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** w9xpopen.c 2000/07/09 11:35:36 1.1 --- w9xpopen.c 2000/08/14 05:04:28 1.2 *************** *** 28,31 **** --- 28,32 ---- STARTUPINFO si; PROCESS_INFORMATION pi; + DWORD exit_code=0; if (argc != 2) { *************** *** 51,58 **** if (bRet) { ! WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); ! return 0; } --- 52,61 ---- if (bRet) { ! if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_FAILED) { ! GetExitCodeProcess(pi.hProcess, &exit_code); ! } CloseHandle(pi.hProcess); CloseHandle(pi.hThread); ! return exit_code; } From python-dev@python.org Mon Aug 14 06:07:18 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 22:07:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild w9xpopen.dsp,NONE,1.1 pcbuild.dsw,1.20,1.21 Message-ID: <200008140507.WAA30591@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv30561 Modified Files: pcbuild.dsw Added Files: w9xpopen.dsp Log Message: Support for building the new w9xpopen.exe, which is used for reliable popen operation on Windows 9x. --- NEW FILE --- # Microsoft Developer Studio Project File - Name="w9xpopen" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=w9xpopen - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "w9xpopen.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "w9xpopen.mak" CFG="w9xpopen - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "w9xpopen - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "w9xpopen - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "w9xpopen - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "." # PROP Intermediate_Dir "x86-temp-release\w9xpopen" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 user32.lib /nologo /machine:I386 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "w9xpopen - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "." # PROP Intermediate_Dir "x86-temp-debug\w9xpopen" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 user32.lib /nologo /debug /machine:I386 /out:"./w9xpopen_d.exe" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "w9xpopen - Win32 Release" # Name "w9xpopen - Win32 Debug" # Begin Source File SOURCE=..\PC\w9xpopen.c # End Source File # End Target # End Project Index: pcbuild.dsw =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pcbuild.dsw,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** pcbuild.dsw 2000/08/13 22:59:26 1.20 --- pcbuild.dsw 2000/08/14 05:07:05 1.21 *************** *** 196,199 **** --- 196,211 ---- ############################################################################### + Project: "w9xpopen"=".\w9xpopen.dsp" - Package Owner=<4> + + Package=<5> + {{{ + }}} + + Package=<4> + {{{ + }}} + + ############################################################################### + Project: "winreg"=".\winreg.dsp" - Package Owner=<4> From python-dev@python.org Mon Aug 14 07:05:43 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 23:05:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_winreg2,1.1,1.2 Message-ID: <200008140605.XAA10176@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv10084 Modified Files: test_winreg2 Log Message: Check in the correct output - even though the module itself may not survive! Index: test_winreg2 =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_winreg2,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_winreg2 2000/06/30 19:38:16 1.1 --- test_winreg2 2000/08/14 06:05:40 1.2 *************** *** 1 **** --- 1,77 ---- test_winreg2 + Test Passed: testKeyDict_Values + Test Passed: testKeyDict_Items + Test Passed: testGetValueNames + Test Passed: testSetDwordBigEndian + Test Passed: testGetSubkeyNames + Test Passed: testResourceRequirementsListType + Test Passed: testLoad + Test Passed: testDeleteKey + Test Passed: testValueDict_Length + Test Passed: testResourceDescriptionType + Test Passed: testSetMultiSz + Test Passed: testSetFullResourceDescription + HKEY_CLASSES_ROOT + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + HKEY_PERFORMANCE_DATA + Test Passed: testHives + Test Passed: testDWordType + Test Passed: testRemote + Test Passed: testKeyDict_DelItem + Test Passed: testSetIntValue + Test Passed: testResourceLinkType + Test Passed: testNoneType + Test Passed: testValueDict_Map + Test Passed: testSetResourceList + Test Passed: testKeyDict_Length + Test Passed: testKeyDict_ClearKeys + Test Passed: testDWordBigEndianType + Test Passed: testOpen + Test Passed: testSetBinaryData + Test Passed: testGetValueNameDataAndType + Test Passed: testSetBinaryValue + Test Passed: testSetResourceRequirementsList + Test Passed: testUnicodeValueName + Test Passed: testGetValueDataFromEnum + Test Passed: testValueDict_Get + Test Passed: testValueDict_GetItem + Test Passed: testValueDict_Keys + Test Passed: testKeyDict_HasKey + Test Passed: testExpandStringType + Test Passed: testValueDict_HasKey + Test Passed: testCreateKey + Test Passed: testGetBinaryData + Test Passed: testKeyDict_Get + Test Passed: testSave + Test Passed: testValueDict_ClearKeys + Test Passed: testCmp + Test Passed: testLinkType + Test Passed: testSetExpandString + Test Passed: testKeyDict_GetItem + Test Passed: testRepr + Test Passed: testClose + Test Passed: testSetLink + Test Passed: testGetValueDataFromName + Test Passed: testUnicodeKeyName + Test Passed: testShortcuts + Test Passed: testKeyDict_Map + Test Passed: testStringType + Test Passed: testOpenFailure + Test Passed: testSetDword + Test Passed: testOpenKeyWithFlags + Test Passed: testSetNone + Test Passed: testKeyDict_Keys + Test Passed: testMultiStringType + Test Passed: testSetStringValue + Test Passed: testValueDict_Items + Test Passed: testValueDict_DelItem + Test Passed: testNonZero + Test Passed: testFlush + Test Passed: testGetSubkeys + Test Passed: testDeleteValue + Test Passed: testSetString + Test Passed: testValueDict_Values From python-dev@python.org Mon Aug 14 07:20:35 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 23:20:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib ntpath.py,1.27,1.28 Message-ID: <200008140620.XAA12854@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12847 Modified Files: ntpath.py Log Message: Fix for Bug #110673: os.abspatth() now always returns os.getcwd() on Windows, if an empty path is specified. It previously did not if an empty path was delegated to win32api.GetFullPathName()) Index: ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/ntpath.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** ntpath.py 2000/07/17 03:06:58 1.27 --- ntpath.py 2000/08/14 06:20:32 1.28 *************** *** 417,423 **** abspath = _abspath return _abspath(path) ! try: ! path = win32api.GetFullPathName(path) ! except win32api.error: ! pass # Bad path - return unchanged. return normpath(path) --- 417,426 ---- abspath = _abspath return _abspath(path) ! if path: # Empty path must return current working directory. ! try: ! path = win32api.GetFullPathName(path) ! except win32api.error: ! pass # Bad path - return unchanged. ! else: ! path = os.getcwd() return normpath(path) From python-dev@python.org Mon Aug 14 07:21:29 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 23:21:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.2,1.3 Message-ID: <200008140621.XAA12890@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12883 Modified Files: test_ntpath.py Log Message: Test for fix to bug #110673: os.abspatth() now always returns os.getcwd() on Windows, if an empty path is specified. It previously did not if an empty path was delegated to win32api.GetFullPathName()) Index: test_ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_ntpath.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_ntpath.py 1999/04/06 19:38:18 1.2 --- test_ntpath.py 2000/08/14 06:21:26 1.3 *************** *** 1,4 **** --- 1,5 ---- import ntpath import string + import os errors = 0 *************** *** 34,37 **** --- 35,42 ---- tester('ntpath.isabs("\\foo")', 1) tester('ntpath.isabs("\\foo\\bar")', 1) + + tester('ntpath.abspath("C:\\")', "C:\\") + tester('ntpath.abspath("")', os.getcwd()) + if errors: From python-dev@python.org Mon Aug 14 12:29:23 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Mon, 14 Aug 2000 04:29:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.57,2.58 Message-ID: <200008141129.EAA22813@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv22589/Objects Modified Files: unicodeobject.c Log Message: Fixed a couple of instances where a 0-length string was being resized after creation. 0-length strings are usually shared and _PyString_Resize() fails on these shared strings. Fixes [ Bug #111667 ] unicode core dump. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.57 retrieving revision 2.58 diff -C2 -r2.57 -r2.58 *** unicodeobject.c 2000/08/12 22:14:34 2.57 --- unicodeobject.c 2000/08/14 11:29:19 2.58 *************** *** 843,847 **** return NULL; if (size == 0) ! goto done; p = q = PyString_AS_STRING(v); --- 843,847 ---- return NULL; if (size == 0) ! return v; p = q = PyString_AS_STRING(v); *************** *** 893,898 **** if (_PyString_Resize(&v, p - q)) goto onError; - - done: return v; --- 893,896 ---- *************** *** 1083,1087 **** *p++ = 0xFEFF; if (size == 0) ! goto done; if (byteorder == 0 || #ifdef BYTEORDER_IS_LITTLE_ENDIAN --- 1081,1085 ---- *p++ = 0xFEFF; if (size == 0) ! return v; if (byteorder == 0 || #ifdef BYTEORDER_IS_LITTLE_ENDIAN *************** *** 1097,1101 **** *p++ = (ch >> 8) | (ch << 8); } - done: return v; } --- 1095,1098 ---- *************** *** 1564,1567 **** --- 1561,1566 ---- if (repr == NULL) return NULL; + if (size == 0) + return repr; p = q = PyString_AS_STRING(repr); *************** *** 1663,1669 **** --- 1662,1671 ---- PyObject *repr; char *s, *start; + repr = PyString_FromStringAndSize(NULL, size); if (repr == NULL) return NULL; + if (size == 0) + return repr; s = PyString_AS_STRING(repr); *************** *** 1803,1809 **** --- 1805,1814 ---- PyObject *repr; char *s, *start; + repr = PyString_FromStringAndSize(NULL, size); if (repr == NULL) return NULL; + if (size == 0) + return repr; s = PyString_AS_STRING(repr); *************** *** 1891,1895 **** if (repr == NULL) return NULL; ! if (mbcssize==0) return repr; --- 1896,1900 ---- if (repr == NULL) return NULL; ! if (mbcssize == 0) return repr; *************** *** 2068,2071 **** --- 2073,2078 ---- if (v == NULL) return NULL; + if (size == 0) + return v; s = PyString_AS_STRING(v); while (size-- > 0) { From python-dev@python.org Mon Aug 14 15:46:17 2000 From: python-dev@python.org (Fred L. Drake, Jr.) Date: Mon, 14 Aug 2000 10:46:17 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.2,1.3 In-Reply-To: <200008140621.XAA12890@slayer.i.sourceforge.net> References: <200008140621.XAA12890@slayer.i.sourceforge.net> Message-ID: <14744.1593.850598.411098@cj42289-a.reston1.va.home.com> Mark Hammond writes: > Test for fix to bug #110673: os.abspatth() now always returns > os.getcwd() on Windows, if an empty path is specified. It > previously did not if an empty path was delegated to > win32api.GetFullPathName()) ... > + tester('ntpath.abspath("")', os.getcwd()) This doesn't work. The test should pass on non-Windows platforms as well; on Linux I get this: cj42289-a(.../python/linux-beowolf); ./python ../Lib/test/test_ntpath.py error! evaluated: ntpath.abspath("") should be: /home/fdrake/projects/python/linux-beowolf returned: \home\fdrake\projects\python\linux-beowolf\ 1 errors. -Fred -- Fred L. Drake, Jr. BeOpen PythonLabs Team Member From python-dev@python.org Mon Aug 14 15:48:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 07:48:40 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0219.txt,NONE,1.1 pep-0220.txt,NONE,1.1 Message-ID: <200008141448.HAA18103@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18080 Added Files: pep-0219.txt pep-0220.txt Log Message: Gordo's new PEPs ***** Error reading new file(2, 'No such file or directory') ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Mon Aug 14 15:47:00 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 07:47:00 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.20,1.21 Message-ID: <200008141447.HAA17628@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv17612 Modified Files: pep-0000.txt Log Message: Added Gordo's PEP 219 and 220. Expanded the keys a bit (see also PEP 1 update). Modest reformating. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** pep-0000.txt 2000/08/08 02:30:24 1.20 --- pep-0000.txt 2000/08/14 14:46:56 1.21 *************** *** 17,50 **** Index ! num filename title owner ! --- ------------ ----- ----- ! 0 pep-0000.txt Index of Python Enhance Proposals bwarsaw ! 1 pep-0001.txt PEP Guidelines bwarsaw, jhylton ! 2 pep-0002.txt Procedure for Adding New Modules esr ! 160 pep-0160.txt Python 1.6 Release Schedule fdrake ! 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! [*] 201 pep-0201.txt Lockstep Iteration bwarsaw ! 202 pep-0202.txt List Comprehensions tim_one ! 203 pep-0203.txt Augmented Assignments twouters ! 204 pep-0204.txt Range Literals twouters ! 205 pep-0205.txt Weak References fdrake ! 206 pep-0206.txt 2.0 Batteries Included moshez ! 207 pep-0207.txt Rich Comparisons davida ! 208 pep-0208.txt Reworking the Coercion Model davida ! 209 pep-0209.txt Adding Multidimensional Arrays davida ! 210 pep-0210.txt Decoupling the Interpreter Loop davida ! 211 pep-0211.txt Adding New Linear Algebra Operators gvwilson ! 212 pep-0212.txt Additional Builtin Generators bwarsaw ! 213 pep-0213.txt Attribute Access Handlers prescod ! 214 pep-0214.txt Extended Print Statement bwarsaw ! 215 pep-0215.txt String Interpolation ping ! 216 pep-0216.txt Docstring Format moshez ! 217 pep-0217.txt Display Hook for Interactive Use moshez ! 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson ! [*] denotes accepted proposals. --- 17,58 ---- Index ! num filename title owner ! --- ------------ ----- ----- ! I 0 pep-0000.txt Index of Python Enhance Proposals bwarsaw ! I 1 pep-0001.txt PEP Guidelines bwarsaw, jhylton ! I 2 pep-0002.txt Procedure for Adding New Modules esr ! I 160 pep-0160.txt Python 1.6 Release Schedule fdrake ! I 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tim_one ! S 203 pep-0203.txt Augmented Assignments twouters ! S 204 pep-0204.txt Range Literals twouters ! S 205 pep-0205.txt Weak References fdrake ! I 206 pep-0206.txt 2.0 Batteries Included moshez ! S 207 pep-0207.txt Rich Comparisons davida ! S 208 pep-0208.txt Reworking the Coercion Model davida ! S 209 pep-0209.txt Adding Multidimensional Arrays davida ! S 210 pep-0210.txt Decoupling the Interpreter Loop davida ! T 211 pep-0211.txt Adding New Linear Algebra Operators gvwilson ! S 212 pep-0212.txt Additional Builtin Generators bwarsaw ! S 213 pep-0213.txt Attribute Access Handlers prescod ! S 214 pep-0214.txt Extended Print Statement bwarsaw ! S 215 pep-0215.txt String Interpolation ping ! I 216 pep-0216.txt Docstring Format moshez ! S 217 pep-0217.txt Display Hook for Interactive Use moshez ! S 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson ! T 219 pep-0219.txt Stackless Python gmcm ! I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! Key ! ! I - Informational PEP ! S - Standards Track PEP ! T - Technical PEP ! A - Accepted proposal ! R - Rejected proposal From python-dev@python.org Mon Aug 14 15:48:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 07:48:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.4,1.5 Message-ID: <200008141448.HAA18067@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18057 Modified Files: pep-0001.txt Log Message: There are now three basic types of PEPs: informational, standards track, and technical. The (new) latter type describes internal or implementation changes that don't have a direct visible effect on the Python language (e.g. Stackless). Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0001.txt 2000/08/08 02:30:55 1.4 --- pep-0001.txt 2000/08/14 14:48:20 1.5 *************** *** 31,38 **** Kinds of PEPs ! There are two kinds of PEPs. A standards track PEP describes a new feature for Python. An informational PEP describes a Python design issue, or provides general guidelines or information to the ! Python community, but does not propose a new feature. --- 31,41 ---- Kinds of PEPs ! There are three kinds of PEPs. A standards track PEP describes a new feature for Python. An informational PEP describes a Python design issue, or provides general guidelines or information to the ! Python community, but does not propose a new feature. A technical ! PEP describes a new implementation or other internal modification ! that doesn't directly expose new features to the Python ! programmer. From python-dev@python.org Mon Aug 14 16:22:56 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 14 Aug 2000 08:22:56 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.4,1.5 Message-ID: <200008141522.IAA30493@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30220 Modified Files: pep-0203.txt Log Message: Fixed some spelling errors and inconsistent quoting, rewrote some unclear parts and added a Rationale and an Open Issues section. Is this something like you had in mind when you say 'Rationale', Tim ? :-) Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0203.txt 2000/08/07 12:40:00 1.4 --- pep-0203.txt 2000/08/14 15:22:52 1.5 *************** *** 5,8 **** --- 5,10 ---- Python-Version: 2.0 Status: Draft + Created: 13-Jul-2000 + Type: Standard *************** *** 26,32 **** += -= *= /= %= **= <<= >>= &= ^= |= ! They implement the same operator as their normal binary form, with ! the exception that the operation is done `in-place' whenever ! possible. They truly behave as augmented assignment, in that they perform --- 28,35 ---- += -= *= /= %= **= <<= >>= &= ^= |= ! They implement the same operator as their normal binary form, ! except that the operation is done `in-place' when the left-hand ! side object supports it, and that the left-hand side is only ! evaluated once. They truly behave as augmented assignment, in that they perform *************** *** 36,43 **** x += y ! The object `x' is loaded, then added with 1, and the resulting ! object is stored back in the original place. The precise action ! performed on the two arguments depends on the type of `x', and ! possibly of `y'. The idea behind augmented assignment in Python is that it isn't --- 39,46 ---- x += y ! The object `x' is loaded, then `y' is added to it, and the ! resulting object is stored back in the original place. The precise ! action performed on the two arguments depends on the type of `x', ! and possibly of `y'. The idea behind augmented assignment in Python is that it isn't *************** *** 45,49 **** result of a binary operation in its left-hand operand, but also a way for the left-hand operand in question to know that it should ! operate 'on itself', rather than creating a modified copy of itself. --- 48,52 ---- result of a binary operation in its left-hand operand, but also a way for the left-hand operand in question to know that it should ! operate `on itself', rather than creating a modified copy of itself. *************** *** 59,68 **** x += y ! tries to call x.__add_ab__(y), which is the 'in-place' variant of __add__. If __add_ab__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! an unsafe assumption. The __add_ab__ hook should behave exactly like __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. --- 62,71 ---- x += y ! tries to call x.__add_ab__(y), which is the `in-place' variant of __add__. If __add_ab__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! an unsafe to say the least. The __add_ab__ hook should behave exactly like __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. *************** *** 77,80 **** --- 80,136 ---- + Rationale + + There are two main reasons for adding this feature to Python: + simplicity of expression, and support for in-place operations. The + end result is a tradeoff between simplicity of syntax and + simplicity of expression; like most new features, augmented + assignment doesn't add anything that was previously impossible. It + merely makes these things easier to do. + + Adding augmented assignment will make Pythons syntax more complex. + Instead of a single assignment operation, there are now twelve + assignment operations, eleven of which also perform an binary + operation. However, these eleven new forms of assignment are easy + to understand as the coupling between assignment and the binary + operation, and they require no large conceptual leap to + understand. Furthermore, languages that do have augmented + assignment have shown that they are a popular, much used feature. + Expressions of the form + + = + + are common enough in those languages to make the extra syntax + worthwhile, and Python does not have significantly less of those + expressions. Quite the opposite, in fact, since in Python you can + also concatenate lists with a binary operator, something that is + done quite frequently. Writing the above expression as + + = + + is both more readable and less error prone, because it is + instantly obvious to the reader that it is that is being + changed, and not that is being replaced by something almost, + but not quite, entirely unlike . + + The new in-place operations are especially useful to matrix + calculation and other applications that require large objects. In + order to efficiently deal with the available program memory, such + packages cannot blindly use the current binary operations. Because + these operations always create a new character, adding a single + item to an existing (large) object would result in copying the + entire object (which may cause the application to run out of + memory), add the single item, and then possibly delete the + original object, depending on reference count. + + To work around this problem, the packages currently have to use + methods or functions to modify an object in-place, which is + definately less readable than an augmented assignment expression. + Augmented assignment won't solve all the problems for these + packages, since some operations cannot be expressed in the limited + set of binary operators to start with, but it is a start. A + different PEP[3] is looking at adding new operators. + + New methods *************** *** 95,101 **** __or_ab__ ! The `__add_ab__' name is one proposed by Guido[1], and stands for `and ! becomes'. Other proposed names include '__iadd__', `__add_in__' ! `__inplace_add__' For C extention types, the following struct members are added: --- 151,158 ---- __or_ab__ ! The `__add_ab__' name is one proposed by Guido[1], and stands for ! `and becomes'. Other proposed names include `__iadd__', ! `__add_in__' and `__inplace_add__'. A firm decision by the BDFL is ! probably needed to finalize this issue. For C extention types, the following struct members are added: *************** *** 123,127 **** compatibility is made (which may or may not happen before 2.0) code that wants to use one of the new struct members must first ! check that they are available with the 'PyType_HasFeature()' macro: if (PyType_HasFeature(x->ob_type, Py_TPFLAGS_HAVE_INPLACE_OPS) && --- 180,185 ---- compatibility is made (which may or may not happen before 2.0) code that wants to use one of the new struct members must first ! check that they are available with the `PyType_HasFeature()' ! macro: if (PyType_HasFeature(x->ob_type, Py_TPFLAGS_HAVE_INPLACE_OPS) && *************** *** 177,182 **** The INPLACE_* bytecodes mirror the BINARY_* bytecodes, except that ! they are implemented as calls to the 'InPlace' API functions. The ! other two bytecodes are 'utility' bytecodes: ROT_FOUR behaves like ROT_THREE except that the four topmost stack items are rotated. --- 235,240 ---- The INPLACE_* bytecodes mirror the BINARY_* bytecodes, except that ! they are implemented as calls to the `InPlace' API functions. The ! other two bytecodes are `utility' bytecodes: ROT_FOUR behaves like ROT_THREE except that the four topmost stack items are rotated. *************** *** 184,195 **** be an integer between 1 and 5 (inclusive) which is the number of items to duplicate in one block. Given a stack like this (where ! the left side of the list is the 'top' of the stack): ! [a, b, c, d, e, f, g] "DUP_TOPX 3" would duplicate the top 3 items, resulting in this stack: ! [a, b, c, d, e, f, g, e, f, g] DUP_TOPX with an argument of 1 is the same as DUP_TOP. The limit --- 242,253 ---- be an integer between 1 and 5 (inclusive) which is the number of items to duplicate in one block. Given a stack like this (where ! the right side of the list is the `top' of the stack): ! [1, 2, 3, 4, 5] "DUP_TOPX 3" would duplicate the top 3 items, resulting in this stack: ! [1, 2, 3, 4, 5, 3, 4, 5] DUP_TOPX with an argument of 1 is the same as DUP_TOP. The limit *************** *** 198,201 **** --- 256,296 ---- and 3, and could do without this new opcode at the cost of a fair number of DUP_TOP and ROT_*. + + + Open Issues + + The PyNumber_InPlacePower() function only takes two arguments, not + one like PyNumber_Power(). This is because there is no way to do + an inplace three-argument-power trough the augmented assignment + syntax or the power() function. + + + Possibly a more obvious name for the Python hooks can be found. + `_ab_' is what Guido proposed[1] as a working name, and comes from + an old Algol-68 naming convention. + + + Documentation needs to be written. The reference manual, the `dis' + section of the library manual, and possibly the tutorial. + + + The DUP_TOPX bytecode is a conveniency bytecode, and is not + actually necessary. It should be considered whether this bytecode + is worth having. There seems to be no other possible use for this + bytecode at this time. + + + The standard library should be adjusted to provide augmented + assignment hooks, where sensible. + + + It is not possible to do an inplace operation in the variant of + + += + + Instead, the instance objects' __radd__ hook is called, with the + builtin type as argument. The same goes for the other operations. + It might necessary to add a right-hand version of __add_ab__ after + all, to support something like that. From python-dev@python.org Mon Aug 14 16:38:02 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 08:38:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.29,1.30 Message-ID: <200008141538.IAA32059@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv32041/Doc/lib Modified Files: libstdtypes.tex Log Message: Document the range type, as suggested by Denis S. Otkidach . Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** libstdtypes.tex 2000/08/12 03:36:23 1.29 --- libstdtypes.tex 2000/08/14 15:37:59 1.30 *************** *** 313,318 **** \subsection{Sequence Types \label{typesseq}} ! There are five sequence types: strings, Unicode strings, lists, ! tuples, and buffers. Strings literals are written in single or double quotes: --- 313,318 ---- \subsection{Sequence Types \label{typesseq}} ! There are six sequence types: strings, Unicode strings, lists, ! tuples, buffers, and ranges. Strings literals are written in single or double quotes: *************** *** 328,332 **** item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} \indexii{sequence}{types} \indexii{string}{type} --- 328,335 ---- item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} Ranges are ! similar to buffers in that there is no specific syntax to create them, ! but they are created using the \function{xrange()} ! function.\bifuncindex{xrange} \indexii{sequence}{types} \indexii{string}{type} *************** *** 631,637 **** Additional string operations are defined in standard module ! \module{string} and in built-in module \module{re}. \refstmodindex{string} \refstmodindex{re} \subsubsection{Mutable Sequence Types \label{typesseq-mutable}} --- 634,657 ---- Additional string operations are defined in standard module ! \refmodule{string} and in built-in module \refmodule{re}. \refstmodindex{string} \refstmodindex{re} + + + \subsubsection{Range Type \label{typesseq-range}} + + The range\indexii{range}{type} type is an immutable sequence which is + commonly used for looping. The advantage of the range type is that a + range object will always take the same amount of memory, no matter the + size of the range it represents. There are no consistent performance + advantages. + + Range objects behave like tuples, and offer a single method: + + \begin{methoddesc}[range]{tolist}{} + Return a list object which represents the same values as the range + object. + \end{methoddesc} + \subsubsection{Mutable Sequence Types \label{typesseq-mutable}} From python-dev@python.org Mon Aug 14 16:47:06 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 08:47:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.71,2.72 Message-ID: <200008141547.IAA00701@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv683/Python Modified Files: sysmodule.c Log Message: Add a byte_order value to the sys module. The value is "big" for big-endian machines and "little" for little-endian machines. Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.71 retrieving revision 2.72 diff -C2 -r2.71 -r2.72 *** sysmodule.c 2000/07/24 16:06:23 2.71 --- sysmodule.c 2000/08/14 15:47:03 2.72 *************** *** 457,460 **** --- 457,473 ---- v = list_builtin_module_names()); Py_XDECREF(v); + { + /* Assumes that longs are at least 2 bytes long. + Should be safe! */ + unsigned long number = 1; + + s = (char *) &number; + if (s[0] == 0) + PyDict_SetItemString(sysdict, "byte_order", + PyString_FromString("big")); + else + PyDict_SetItemString(sysdict, "byte_order", + PyString_FromString("little")); + } #ifdef MS_COREDLL PyDict_SetItemString(sysdict, "dllhandle", From python-dev@python.org Mon Aug 14 16:47:32 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 08:47:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.37,1.38 Message-ID: <200008141547.IAA00760@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv747/Doc/lib Modified Files: libsys.tex Log Message: Document the byte_order value in the sys module. Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** libsys.tex 2000/06/30 16:06:19 1.37 --- libsys.tex 2000/08/14 15:47:30 1.38 *************** *** 21,24 **** --- 21,32 ---- \end{datadesc} + \begin{datadesc}{byte_order} + An indicator of the native byte order. This will have the value + \code{'big'} on big-endian (most-signigicant byte first) platforms, + and \code{'little'} on little-endian (least-significant byte first) + platforms. + \versionadded{2.0} + \end{datadesc} + \begin{datadesc}{builtin_module_names} A tuple of strings giving the names of all modules that are compiled From python-dev@python.org Mon Aug 14 17:08:47 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 14 Aug 2000 09:08:47 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.5,1.6 Message-ID: <200008141608.JAA10182@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10077 Modified Files: pep-0203.txt Log Message: Reflect the fact I just posted this PEP to c.l.py. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** pep-0203.txt 2000/08/14 15:22:52 1.5 --- pep-0203.txt 2000/08/14 16:08:44 1.6 *************** *** 7,10 **** --- 7,11 ---- Created: 13-Jul-2000 Type: Standard + Post-History: 14-Aug-2000 From python-dev@python.org Mon Aug 14 17:35:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 09:35:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html stdabout.dat,1.2,1.3 Message-ID: <200008141635.JAA12364@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv12357 Modified Files: stdabout.dat Log Message: For bug reporting, point to the SourceForge bug tracker instead of the old Jitterbug interface. Index: stdabout.dat =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/stdabout.dat,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** stdabout.dat 1999/11/12 17:20:40 1.2 --- stdabout.dat 2000/08/14 16:35:05 1.3 *************** *** 32,37 **** >python-docs@python.org. If you find specific errors in this document, please report the bug at the Python Bugs ! List.

    --- 32,37 ---- >python-docs@python.org. If you find specific errors in this document, please report the bug at the Python Bug ! Tracker at SourceForge.

    From python-dev@python.org Mon Aug 14 17:58:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 09:58:09 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.85.2.1,1.85.2.2 Message-ID: <200008141658.JAA14442@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv14423 Modified Files: Tag: cnri-16-start README Log Message: Update the Python version number for the final release. Update the link to information about Tcl/Tk. Add a note about the Tkinter book with a link to the PSA bookstore. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.85.2.1 retrieving revision 1.85.2.2 diff -C2 -r1.85.2.1 -r1.85.2.2 *** README 2000/08/02 21:29:30 1.85.2.1 --- README 2000/08/14 16:58:06 1.85.2.2 *************** *** 1,4 **** ! This is Python version 1.6 beta 1 (1.6b1) ! ========================================= License information --- 1,4 ---- ! This is Python version 1.6 ! ========================== License information *************** *** 733,737 **** release is recommended. ! See http://sunscript.sun.com/ for more info on Tcl/Tk, including the on-line manual pages. --- 733,737 ---- release is recommended. ! See http://www.tcltk.com/ for more info on Tcl/Tk, including the on-line manual pages. *************** *** 755,758 **** --- 755,760 ---- A more recent introduction to Tkinter programming, by Fredrik Lundh, is at http://www.pythonware.com/library/tkinter/introduction/index.htm. + At least one book has been published on Tkinter; go to the PSA bookstore + for more information: http://www.python.org/psa/bookstore/. There are demos in the Demo/tkinter directory, in the subdirectories From python-dev@python.org Mon Aug 14 18:05:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 10:05:12 -0700 Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.5,1.1.2.6 Message-ID: <200008141705.KAA22868@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv22858 Modified Files: Tag: cnri-16-start LICENSE Log Message: Updated version number for the final release. Index: LICENSE =================================================================== RCS file: /cvsroot/python/python/dist/src/LICENSE,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -C2 -r1.1.2.5 -r1.1.2.6 *** LICENSE 2000/08/04 21:49:46 1.1.2.5 --- LICENSE 2000/08/14 17:05:10 1.1.2.6 *************** *** 13,22 **** ! B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING Python 1.6, beta 1 1. CNRI LICENSE AGREEMENT ! PYTHON 1.6, beta 1 CNRI OPEN SOURCE LICENSE AGREEMENT --- 13,22 ---- ! B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING Python 1.6 1. CNRI LICENSE AGREEMENT ! PYTHON 1.6 CNRI OPEN SOURCE LICENSE AGREEMENT *************** *** 26,73 **** BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, ! INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE ! DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE ! AGREEMENT. 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ! ("Licensee") accessing and otherwise using Python 1.6, beta 1 software in source or binary form and its associated documentation, as released at the www.python.org Internet site on August 4, 2000 ("Python ! 1.6b1"). 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, ! prepare derivative works, distribute, and otherwise use Python 1.6b1 alone or in any derivative version, provided, however, that CNRI's ! License Agreement is retained in Python 1.6b1, alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may ! substitute the following text (omitting the quotes): "Python 1.6, beta ! 1, is made available subject to the terms and conditions in CNRI's ! License Agreement. This Agreement may be located on the Internet ! using the following unique, persistent identifier (known as a handle): 1895.22/1011. This Agreement may also be obtained from a proxy server on the Internet using the URL:http://hdl.handle.net/1895.22/1011". 3. In the event Licensee prepares a derivative work that is based on ! or incorporates Python 1.6b1 or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work the nature of the ! modifications made to Python 1.6b1. ! 4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ! FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS ! AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. --- 26,72 ---- BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, ! INSTALLING OR OTHERWISE USING PYTHON 1.6 SOFTWARE, YOU ARE DEEMED TO ! HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT. 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ! ("Licensee") accessing and otherwise using Python 1.6 software in source or binary form and its associated documentation, as released at the www.python.org Internet site on August 4, 2000 ("Python ! 1.6"). 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, ! prepare derivative works, distribute, and otherwise use Python 1.6 alone or in any derivative version, provided, however, that CNRI's ! License Agreement is retained in Python 1.6, alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may ! substitute the following text (omitting the quotes): "Python 1.6, is ! made available subject to the terms and conditions in CNRI's License ! Agreement. This Agreement may be located on the Internet using the ! following unique, persistent identifier (known as a handle): 1895.22/1011. This Agreement may also be obtained from a proxy server on the Internet using the URL:http://hdl.handle.net/1895.22/1011". 3. In the event Licensee prepares a derivative work that is based on ! or incorporates Python 1.6 or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work the nature of the ! modifications made to Python 1.6. ! 4. CNRI is making Python 1.6 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ! FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS ! AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. *************** *** 85,90 **** 8. By clicking on the "ACCEPT" button where indicated, or by copying, ! installing or otherwise using Python 1.6b1, Licensee agrees to be ! bound by the terms and conditions of this License Agreement. ACCEPT --- 84,89 ---- 8. By clicking on the "ACCEPT" button where indicated, or by copying, ! installing or otherwise using Python 1.6, Licensee agrees to be bound ! by the terms and conditions of this License Agreement. ACCEPT From python-dev@python.org Mon Aug 14 19:15:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 11:15:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/texinputs boilerplate.tex,1.42.2.1,1.42.2.2 Message-ID: <200008141815.LAA03530@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/texinputs In directory slayer.i.sourceforge.net:/tmp/cvs-serv3523/texinputs Modified Files: Tag: cnri-16-start boilerplate.tex Log Message: Update for 1.6 release (Python 1.6 branch only!). Index: boilerplate.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/texinputs/boilerplate.tex,v retrieving revision 1.42.2.1 retrieving revision 1.42.2.2 diff -C2 -r1.42.2.1 -r1.42.2.2 *** boilerplate.tex 2000/07/31 15:11:01 1.42.2.1 --- boilerplate.tex 2000/08/14 18:15:24 1.42.2.2 *************** *** 6,9 **** } ! \date{August 1, 2000} % XXX update before release! ! \release{1.6b1} --- 6,9 ---- } ! \date{August 15, 2000} % XXX update before release! ! \release{1.6} From python-dev@python.org Mon Aug 14 19:42:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 11:42:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile,1.195.2.1,1.195.2.2 Message-ID: <200008141842.LAA05460@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv5453 Modified Files: Tag: cnri-16-start Makefile Log Message: Update for 1.6 release (Python 1.6 branch only!). Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile,v retrieving revision 1.195.2.1 retrieving revision 1.195.2.2 diff -C2 -r1.195.2.1 -r1.195.2.2 *** Makefile 2000/08/01 16:37:02 1.195.2.1 --- Makefile 2000/08/14 18:42:37 1.195.2.2 *************** *** 62,66 **** # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6b1 --- 62,66 ---- # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6 From python-dev@python.org Mon Aug 14 20:58:11 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 14 Aug 2000 12:58:11 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.6,1.7 Message-ID: <200008141958.MAA19930@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv19789 Modified Files: pep-0203.txt Log Message: Spelling fixes and semantic (both ways) corrections by Aahz Maruch, Bjorn Pettersen and Eric Jacobs. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** pep-0203.txt 2000/08/14 16:08:44 1.6 --- pep-0203.txt 2000/08/14 19:58:09 1.7 *************** *** 17,21 **** of the feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list ! forums, and provides URLs for further information, where appropriate. The CVS revision history of this file contains the definitive historical record. --- 17,21 ---- of the feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list ! forums, and provides URLs for further information where appropriate. The CVS revision history of this file contains the definitive historical record. *************** *** 53,57 **** To make this possible, a number of new `hooks' are added to Python ! classes and C extention types, which are called when the object in question is used as the left hand side of an augmented assignment operation. If the class or type does not implement the `in-place' --- 53,57 ---- To make this possible, a number of new `hooks' are added to Python ! classes and C extension types, which are called when the object in question is used as the left hand side of an augmented assignment operation. If the class or type does not implement the `in-place' *************** *** 68,76 **** There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! an unsafe to say the least. The __add_ab__ hook should behave exactly ! like __add__, returning the result of the operation (which could ! be `self') which is to be stored in the variable `x'. ! For C extention types, the `hooks' are members of the PyNumberMethods and PySequenceMethods structures, and are called in exactly the same manner as the existing non-inplace operations, --- 68,76 ---- There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add_ab__ hook should behave similar ! to __add__, returning the result of the operation (which could be ! `self') which is to be stored in the variable `x'. ! For C extension types, the `hooks' are members of the PyNumberMethods and PySequenceMethods structures, and are called in exactly the same manner as the existing non-inplace operations, *************** *** 90,94 **** merely makes these things easier to do. ! Adding augmented assignment will make Pythons syntax more complex. Instead of a single assignment operation, there are now twelve assignment operations, eleven of which also perform an binary --- 90,94 ---- merely makes these things easier to do. ! Adding augmented assignment will make Python's syntax more complex. Instead of a single assignment operation, there are now twelve assignment operations, eleven of which also perform an binary *************** *** 103,107 **** are common enough in those languages to make the extra syntax ! worthwhile, and Python does not have significantly less of those expressions. Quite the opposite, in fact, since in Python you can also concatenate lists with a binary operator, something that is --- 103,107 ---- are common enough in those languages to make the extra syntax ! worthwhile, and Python does not have significantly fewer of those expressions. Quite the opposite, in fact, since in Python you can also concatenate lists with a binary operator, something that is *************** *** 119,131 **** order to efficiently deal with the available program memory, such packages cannot blindly use the current binary operations. Because ! these operations always create a new character, adding a single ! item to an existing (large) object would result in copying the ! entire object (which may cause the application to run out of ! memory), add the single item, and then possibly delete the ! original object, depending on reference count. To work around this problem, the packages currently have to use methods or functions to modify an object in-place, which is ! definately less readable than an augmented assignment expression. Augmented assignment won't solve all the problems for these packages, since some operations cannot be expressed in the limited --- 119,131 ---- order to efficiently deal with the available program memory, such packages cannot blindly use the current binary operations. Because ! these operations always create a new object, adding a single item ! to an existing (large) object would result in copying the entire ! object (which may cause the application to run out of memory), add ! the single item, and then possibly delete the original object, ! depending on reference count. To work around this problem, the packages currently have to use methods or functions to modify an object in-place, which is ! definitely less readable than an augmented assignment expression. Augmented assignment won't solve all the problems for these packages, since some operations cannot be expressed in the limited *************** *** 157,161 **** probably needed to finalize this issue. ! For C extention types, the following struct members are added: To PyNumberMethods: --- 157,161 ---- probably needed to finalize this issue. ! For C extension types, the following struct members are added: To PyNumberMethods: *************** *** 196,200 **** The current implementation of augmented assignment[2] adds, in ! addition to the methods and slots alread covered, 13 new bytecodes and 13 new API functions. --- 196,200 ---- The current implementation of augmented assignment[2] adds, in ! addition to the methods and slots already covered, 13 new bytecodes and 13 new API functions. *************** *** 306,310 **** [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 ! --- 306,311 ---- [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 ! [3] PEP 211, Adding New Linear Algebra Operators, ! http://python.sourceforge.net/peps/pep-0211.html From python-dev@python.org Mon Aug 14 21:08:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 13:08:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0160.txt,1.4,1.5 Message-ID: <200008142008.NAA28778@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28771 Modified Files: pep-0160.txt Log Message: Small adjustments. Index: pep-0160.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0160.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0160.txt 2000/07/27 18:46:29 1.4 --- pep-0160.txt 2000/08/14 20:08:40 1.5 *************** *** 5,8 **** --- 5,10 ---- Python-Version: 1.6 Status: Incomplete + Type: Informational + Created: 25-Jul-2000 Introduction *************** *** 16,20 **** Schedule ! August 1 1.6 beta 1 release. August 15 1.6 final release. --- 18,23 ---- Schedule ! August 1 1.6 beta 1 release (planned). ! August 3 1.6 beta 1 release (actual). August 15 1.6 final release. *************** *** 34,37 **** --- 37,43 ---- of the re module. + * The curses module was in the middle of a transformation to a + package, so the final form was adopted. + Mechanism *************** *** 47,50 **** --- 53,59 ---- Patches and features will be merged to the extent required to pass regression tests in effect on 16 May 2000. + + The beta release is tagged "r16b1" in the CVS repository, and the + final Python 1.6 release is tagged "release16" in the repository. Copyright From python-dev@python.org Mon Aug 14 21:59:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 13:59:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.72,2.73 Message-ID: <200008142059.NAA00471@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv455/Python Modified Files: sysmodule.c Log Message: The attempt to protect against MS_WIN16 compilers that do not support long string literals has not been tested on an MS_WIN16 platform; the trailing ";" was inside the #ifndef MS_WIN16, which should cause an error (missing semi-colon) when compiled with that symbol #defined. Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.72 retrieving revision 2.73 diff -C2 -r2.72 -r2.73 *** sysmodule.c 2000/08/14 15:47:03 2.72 --- sysmodule.c 2000/08/14 20:59:57 2.73 *************** *** 380,385 **** setprofile() -- set the global profiling function\n\ settrace() -- set the global debug tracing function\n\ ! "; #endif PyObject * --- 380,386 ---- setprofile() -- set the global profiling function\n\ settrace() -- set the global debug tracing function\n\ ! " #endif + /* end of sys_doc */ ; PyObject * From python-dev@python.org Tue Aug 15 00:06:40 2000 From: python-dev@python.org (Mark Hammond) Date: Mon, 14 Aug 2000 16:06:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.3,1.4 Message-ID: <200008142306.QAA14161@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv14044 Modified Files: test_ntpath.py Log Message: Remove the test for abspath with an empty path - too hard to do in a cross-platform manner. Index: test_ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_ntpath.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_ntpath.py 2000/08/14 06:21:26 1.3 --- test_ntpath.py 2000/08/14 23:06:37 1.4 *************** *** 37,41 **** tester('ntpath.abspath("C:\\")', "C:\\") - tester('ntpath.abspath("")', os.getcwd()) --- 37,40 ---- From python-dev@python.org Tue Aug 15 01:37:38 2000 From: python-dev@python.org (Mark Hammond) Date: Mon, 14 Aug 2000 17:37:38 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.11,1.12 Message-ID: <200008150037.RAA06924@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv6828 Modified Files: exceptions.c Log Message: Fix the parent of WindowsError - both the comments in this source file, and the previous exceptions.py have WindowsError as a sub-class of OSError. Index: exceptions.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** exceptions.c 2000/07/22 18:45:06 1.11 --- exceptions.c 2000/08/15 00:37:32 1.12 *************** *** 884,888 **** {"OSError", &PyExc_OSError, &PyExc_EnvironmentError, OSError__doc__}, #ifdef MS_WINDOWS ! {"WindowsError", &PyExc_WindowsError, &PyExc_EnvironmentError, WindowsError__doc__}, #endif /* MS_WINDOWS */ --- 884,888 ---- {"OSError", &PyExc_OSError, &PyExc_EnvironmentError, OSError__doc__}, #ifdef MS_WINDOWS ! {"WindowsError", &PyExc_WindowsError, &PyExc_OSError, WindowsError__doc__}, #endif /* MS_WINDOWS */ From python-dev@python.org Tue Aug 15 01:46:41 2000 From: python-dev@python.org (Mark Hammond) Date: Mon, 14 Aug 2000 17:46:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.164,2.165 Message-ID: <200008150046.RAA18040@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv17883 Modified Files: posixmodule.c Log Message: Fix for bug #110670 - Win32 os.listdir raises confusing errors: The existing win32_error() function now returns the new(ish) WindowsError, ensuring we get correct error messages. Index: posixmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.164 retrieving revision 2.165 diff -C2 -r2.164 -r2.165 *** posixmodule.c 2000/08/14 04:47:33 2.164 --- posixmodule.c 2000/08/15 00:46:38 2.165 *************** *** 350,359 **** win32_error(char* function, char* filename) { ! /* XXX this could be improved */ errno = GetLastError(); if (filename) ! return PyErr_SetFromErrnoWithFilename(PyExc_OSError, filename); else ! return PyErr_SetFromErrno(PyExc_OSError); } #endif --- 350,363 ---- win32_error(char* function, char* filename) { ! /* XXX We should pass the function name along in the future. ! (_winreg.c also wants to pass the function name.) ! This would however require an additional param to the ! Windows error object, which is non-trivial. ! */ errno = GetLastError(); if (filename) ! return PyErr_SetFromWindowsErrWithFilename(errno, filename); else ! return PyErr_SetFromWindowsErr(errno); } #endif From python-dev@python.org Tue Aug 15 04:34:50 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 14 Aug 2000 20:34:50 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.13,2.14 Message-ID: <200008150334.UAA02212@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv1338/python/dist/src/Include Modified Files: pyport.h Log Message: Fix for http://sourceforge.net/bugs/?func=detailbug&bug_id=111866&group_id=5470. This was a misleading bug -- the true "bug" was that hash(x) gave an error return when x is an infinity. Fixed that. Added new Py_IS_INFINITY macro to pyport.h. Rearranged code to reduce growing duplication in hashing of float and complex numbers, pushing Trent's earlier stab at that to a logical conclusion. Fixed exceedingly rare bug where hashing of floats could return -1 even if there wasn't an error (didn't waste time trying to construct a test case, it was simply obvious from the code that it *could* happen). Improved complex hash so that hash(complex(x, y)) doesn't systematically equal hash(complex(y, x)) anymore. Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** pyport.h 2000/08/11 11:48:33 2.13 --- pyport.h 2000/08/15 03:34:48 2.14 *************** *** 104,108 **** #endif ! /* Py_FORCE_EXPANSION * "Simply" returns its argument. However, macro expansions within the * argument are evaluated. This unfortunate trickery is needed to get --- 104,108 ---- #endif ! /* Py_FORCE_EXPANSION(X) * "Simply" returns its argument. However, macro expansions within the * argument are evaluated. This unfortunate trickery is needed to get *************** *** 124,127 **** --- 124,135 ---- #endif + /* Py_IS_INFINITY(X) + * Return 1 if float or double arg is an infinity, else 0. + * Caution: + * X is evaluated more than once. + * This implementation may set the underflow flag if |X| is very small; + * it really can't be implemented correctly (& easily) before C99. + */ + #define Py_IS_INFINITY(X) ((X) && (X)*0.5 == (X)) /************************************************************************** From python-dev@python.org Tue Aug 15 04:34:51 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 14 Aug 2000 20:34:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects complexobject.c,2.29,2.30 floatobject.c,2.66,2.67 longobject.c,1.65,1.66 object.c,2.93,2.94 Message-ID: <200008150334.UAA02221@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv1338/python/dist/src/Objects Modified Files: complexobject.c floatobject.c longobject.c object.c Log Message: Fix for http://sourceforge.net/bugs/?func=detailbug&bug_id=111866&group_id=5470. This was a misleading bug -- the true "bug" was that hash(x) gave an error return when x is an infinity. Fixed that. Added new Py_IS_INFINITY macro to pyport.h. Rearranged code to reduce growing duplication in hashing of float and complex numbers, pushing Trent's earlier stab at that to a logical conclusion. Fixed exceedingly rare bug where hashing of floats could return -1 even if there wasn't an error (didn't waste time trying to construct a test case, it was simply obvious from the code that it *could* happen). Improved complex hash so that hash(complex(x, y)) doesn't systematically equal hash(complex(y, x)) anymore. Index: complexobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/complexobject.c,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** complexobject.c 2000/07/31 15:28:04 2.29 --- complexobject.c 2000/08/15 03:34:48 2.30 *************** *** 243,292 **** complex_hash(PyComplexObject *v) { ! double intpart, fractpart; ! long x; ! /* This is designed so that Python numbers with the same ! value hash to the same value, otherwise comparisons ! of mapping keys will turn out weird */ ! ! #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ ! { ! extended e; ! fractpart = modf(v->cval.real, &e); ! intpart = e; ! } ! #else ! fractpart = modf(v->cval.real, &intpart); ! #endif ! ! if (fractpart == 0.0 && v->cval.imag == 0.0) { ! if (intpart > LONG_MAX || -intpart > LONG_MAX) { ! /* Convert to long int and use its hash... */ ! PyObject *w = PyLong_FromDouble(v->cval.real); ! if (w == NULL) ! return -1; ! x = PyObject_Hash(w); ! Py_DECREF(w); ! return x; ! } ! x = (long)intpart; ! } ! else { ! x = _Py_HashDouble(v->cval.real); ! if (x == -1) ! return -1; ! ! if (v->cval.imag != 0.0) { /* Hash the imaginary part */ ! /* XXX Note that this hashes complex(x, y) ! to the same value as complex(y, x). ! Still better than it used to be :-) */ ! long y = _Py_HashDouble(v->cval.imag); ! if (y == -1) ! return -1; ! x += y; ! } ! } ! if (x == -1) ! x = -2; ! return x; } --- 243,263 ---- complex_hash(PyComplexObject *v) { ! long hashreal, hashimag, combined; ! hashreal = _Py_HashDouble(v->cval.real); ! if (hashreal == -1) ! return -1; ! hashimag = _Py_HashDouble(v->cval.imag); ! if (hashimag == -1) ! return -1; ! /* Note: if the imaginary part is 0, hashimag is 0 now, ! * so the following returns hashreal unchanged. This is ! * important because numbers of different types that ! * compare equal must have the same hash value, so that ! * hash(x + 0*j) must equal hash(x). ! */ ! combined = hashreal + 1000003 * hashimag; ! if (combined == -1) ! combined = -2; ! return combined; } Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.66 retrieving revision 2.67 diff -C2 -r2.66 -r2.67 *** floatobject.c 2000/08/12 21:37:39 2.66 --- floatobject.c 2000/08/15 03:34:48 2.67 *************** *** 327,368 **** float_hash(PyFloatObject *v) { ! double intpart, fractpart; ! long x; ! /* This is designed so that Python numbers with the same ! value hash to the same value, otherwise comparisons ! of mapping keys will turn out weird */ ! ! #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ ! { ! extended e; ! fractpart = modf(v->ob_fval, &e); ! intpart = e; ! } ! #else ! fractpart = modf(v->ob_fval, &intpart); ! #endif ! ! if (fractpart == 0.0) { ! if (intpart > LONG_MAX || -intpart > LONG_MAX) { ! /* Convert to long int and use its hash... */ ! PyObject *w = PyLong_FromDouble(v->ob_fval); ! if (w == NULL) ! return -1; ! x = PyObject_Hash(w); ! Py_DECREF(w); ! return x; ! } ! x = (long)intpart; ! } ! else { ! /* Note -- if you change this code, also change the copy ! in complexobject.c */ ! x = _Py_HashDouble(v->ob_fval); ! if (x == -1) ! return -1; ! } ! if (x == -1) ! x = -2; ! return x; } --- 327,331 ---- float_hash(PyFloatObject *v) { ! return _Py_HashDouble(v->ob_fval); } Index: longobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/longobject.c,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -r1.65 -r1.66 *** longobject.c 2000/07/31 15:28:04 1.65 --- longobject.c 2000/08/15 03:34:48 1.66 *************** *** 115,119 **** int i, ndig, expo, neg; neg = 0; ! if (dval && dval * 0.5 == dval) { PyErr_SetString(PyExc_OverflowError, "cannot convert float infinity to long"); --- 115,119 ---- int i, ndig, expo, neg; neg = 0; ! if (Py_IS_INFINITY(dval)) { PyErr_SetString(PyExc_OverflowError, "cannot convert float infinity to long"); Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.93 retrieving revision 2.94 diff -C2 -r2.93 -r2.94 *** object.c 2000/08/11 00:14:26 2.93 --- object.c 2000/08/15 03:34:48 2.94 *************** *** 533,555 **** _Py_HashDouble(double v) { ! /* Use frexp to get at the bits in the double. * Since the VAX D double format has 56 mantissa bits, which is the * most of any double format in use, each of these parts may have as * many as (but no more than) 56 significant bits. ! * So, assuming sizeof(long) >= 4, each part can be broken into two longs; ! * frexp and multiplication are used to do that. ! * Also, since the Cray double format has 15 exponent bits, which is the ! * most of any double format in use, shifting the exponent field left by ! * 15 won't overflow a long (again assuming sizeof(long) >= 4). */ ! int expo; ! long hipart; ! ! v = frexp(v, &expo); ! v = v * 2147483648.0; /* 2**31 */ ! hipart = (long)v; /* Take the top 32 bits */ ! v = (v - (double)hipart) * 2147483648.0; /* Get the next 32 bits */ ! ! return hipart + (long)v + (expo << 15); /* Combine everything */ } --- 533,595 ---- _Py_HashDouble(double v) { ! double intpart, fractpart; ! int expo; ! long hipart; ! long x; /* the final hash value */ ! /* This is designed so that Python numbers of different types ! * that compare equal hash to the same value; otherwise comparisons ! * of mapping keys will turn out weird. ! */ ! ! #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ ! { ! extended e; ! fractpart = modf(v, &e); ! intpart = e; ! } ! #else ! fractpart = modf(v, &intpart); ! #endif ! if (fractpart == 0.0) { ! /* This must return the same hash as an equal int or long. */ ! if (intpart > LONG_MAX || -intpart > LONG_MAX) { ! /* Convert to long and use its hash. */ ! PyObject *plong; /* converted to Python long */ ! if (Py_IS_INFINITY(intpart)) ! /* can't convert to long int -- arbitrary */ ! v = v < 0 ? -271828.0 : 314159.0; ! plong = PyLong_FromDouble(v); ! if (plong == NULL) ! return -1; ! x = PyObject_Hash(plong); ! Py_DECREF(plong); ! return x; ! } ! /* Fits in a C long == a Python int, so is its own hash. */ ! x = (long)intpart; ! if (x == -1) ! x = -2; ! return x; ! } ! /* The fractional part is non-zero, so we don't have to worry about ! * making this match the hash of some other type. ! * Use frexp to get at the bits in the double. * Since the VAX D double format has 56 mantissa bits, which is the * most of any double format in use, each of these parts may have as * many as (but no more than) 56 significant bits. ! * So, assuming sizeof(long) >= 4, each part can be broken into two ! * longs; frexp and multiplication are used to do that. ! * Also, since the Cray double format has 15 exponent bits, which is ! * the most of any double format in use, shifting the exponent field ! * left by 15 won't overflow a long (again assuming sizeof(long) >= 4). */ ! v = frexp(v, &expo); ! v *= 2147483648.0; /* 2**31 */ ! hipart = (long)v; /* take the top 32 bits */ ! v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */ ! x = hipart + (long)v + (expo << 15); ! if (x == -1) ! x = -2; ! return x; } From python-dev@python.org Tue Aug 15 05:24:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 21:24:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.73,2.74 Message-ID: <200008150424.VAA13042@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv13031/Python Modified Files: sysmodule.c Log Message: Guido pointed out that all names in the sys module have no underscore, Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.73 retrieving revision 2.74 diff -C2 -r2.73 -r2.74 *** sysmodule.c 2000/08/14 20:59:57 2.73 --- sysmodule.c 2000/08/15 04:24:43 2.74 *************** *** 462,473 **** Should be safe! */ unsigned long number = 1; s = (char *) &number; if (s[0] == 0) ! PyDict_SetItemString(sysdict, "byte_order", ! PyString_FromString("big")); else ! PyDict_SetItemString(sysdict, "byte_order", ! PyString_FromString("little")); } #ifdef MS_COREDLL --- 462,474 ---- Should be safe! */ unsigned long number = 1; + char *value; s = (char *) &number; if (s[0] == 0) ! value = "big"; else ! value = "little"; ! PyDict_SetItemString(sysdict, "byteorder", ! PyString_FromString(value)); } #ifdef MS_COREDLL From python-dev@python.org Tue Aug 15 05:24:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 21:24:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.38,1.39 Message-ID: <200008150424.VAA13046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13031/Doc/lib Modified Files: libsys.tex Log Message: Guido pointed out that all names in the sys module have no underscore, Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** libsys.tex 2000/08/14 15:47:30 1.38 --- libsys.tex 2000/08/15 04:24:43 1.39 *************** *** 21,25 **** \end{datadesc} ! \begin{datadesc}{byte_order} An indicator of the native byte order. This will have the value \code{'big'} on big-endian (most-signigicant byte first) platforms, --- 21,25 ---- \end{datadesc} ! \begin{datadesc}{byteorder} An indicator of the native byte order. This will have the value \code{'big'} on big-endian (most-signigicant byte first) platforms, From python-dev@python.org Tue Aug 15 05:36:25 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 21:36:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api refcounts.dat,1.13,1.14 Message-ID: <200008150436.VAA13633@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv13626/Doc/api Modified Files: refcounts.dat Log Message: Correct the reference count information for the parameters of PyErr_Restore(). Index: refcounts.dat =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/refcounts.dat,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** refcounts.dat 2000/08/12 03:39:47 1.13 --- refcounts.dat 2000/08/15 04:36:16 1.14 *************** *** 175,181 **** PyErr_Restore:void::: ! PyErr_Restore:PyObject*:type:0: ! PyErr_Restore:PyObject*:value:0: ! PyErr_Restore:PyObject*:traceback:0: PyErr_SetFromErrno:PyObject*::null: --- 175,181 ---- PyErr_Restore:void::: ! PyErr_Restore:PyObject*:type:-1: ! PyErr_Restore:PyObject*:value:-1: ! PyErr_Restore:PyObject*:traceback:-1: PyErr_SetFromErrno:PyObject*::null: From python-dev@python.org Tue Aug 15 06:53:22 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 22:53:22 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.9,1.10 Message-ID: <200008150553.WAA26332@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv26324 Modified Files: pep2html.py Log Message: Changed the sense of the default behavior. No longer installs the .html files in SF by default; you must explicitly include the -i/--install option in order to upload. Also, added -h/--help and migrated to getopt for switch parsing. Included a usage() function. Some cosmetic changes. Index: pep2html.py =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pep2html.py 2000/08/11 22:18:04 1.9 --- pep2html.py 2000/08/15 05:53:19 1.10 *************** *** 3,25 **** convert PEP's to (X)HTML - courtesy of /F ! Syntax: pep2html [-n] [sf_username] ! The user name 'sf_username' is used to upload the converted files ! to the web pages at source forge. ! If -n is given, the script doesn't actually try to install the ! generated HTML at SourceForge. """ ! import cgi, glob, os, re, sys - # this doesn't validate -- you cannot use
    and

    inside
    - # tags.  but if I change that, the result doesn't look very nice...
      
    ! HOST = "shell.sourceforge.net" # host for update
    ! HDIR = "/home/groups/python/htdocs/peps" # target host directory
      LOCALVARS = "Local Variables:"
      
      DTD = ('')
    --- 3,37 ----
      convert PEP's to (X)HTML - courtesy of /F
      
    ! Usage: %(PROGRAM)s [options] [sf_username]
      
    ! Options:
      
    !     -i/--install
    !         After generating the HTML, install it SourceForge.  In that case the
    !         user's name is used in the scp and ssh commands, unless sf_username is
    !         given (in which case, it is used instead).  Without -i, sf_username is
    !         ignored.
      
    +     -h/--help
    +         Print this help message and exit.
      """
      
    ! import sys
    ! import os
    ! import re
    ! import cgi
    ! import glob
    ! import getopt
    ! 
    ! PROGRAM = sys.argv[0]
      
      
    ! 
    ! HOST = "shell.sourceforge.net"                    # host for update
    ! HDIR = "/home/groups/python/htdocs/peps"          # target host directory
      LOCALVARS = "Local Variables:"
      
    + # The generated HTML doesn't validate -- you cannot use 
    and

    inside + #
     tags.  But if I change that, the result doesn't look very nice...
      DTD = ('')
    ***************
    *** 27,30 ****
    --- 39,55 ----
      fixpat = re.compile("((http|ftp):[-_a-zA-Z0-9/.+~:?#$=&]+)|(pep-\d+(.txt)?)|.")
      
    + 
    + 
    + def usage(code, msg=''):
    +     sys.stderr.write(__doc__ % globals() + '\n')
    +     if msg:
    +         msg = str(msg)
    +         if msg[-1] <> '\n':
    +             msg = msg + '\n'
    +         sys.stderr.write(msg)
    +     sys.exit(code)
    + 
    + 
    + 
      def fixanchor(current, match):
          text = match.group(0)
    ***************
    *** 38,41 ****
    --- 63,68 ----
          return cgi.escape(match.group(0)) # really slow, but it works...
      
    + 
    + 
      def fixfile(infile, outfile):
          # convert plain text pep to minimal XHTML markup
    ***************
    *** 107,112 ****
      
      
      def main():
    !     update = 1
          for file in glob.glob("pep-*.txt"):
              newfile = os.path.splitext(file)[0] + ".html"
    --- 134,160 ----
      
      
    + 
      def main():
    !     # defaults
    !     update = 0
    !     username = ''
    ! 
    !     try:
    !         opts, args = getopt.getopt(sys.argv[1:], 'ih', ['install', 'help'])
    !     except getopt.error, msg:
    !         usage(1, msg)
    ! 
    !     if args:
    !         username = args[0] + '@'
    !         del args[0]
    !     if args:
    !         usage(1, 'unexpected arguments')
    ! 
    !     for opt, arg in opts:
    !         if opt in ('-h', '--help'):
    !             usage(0)
    !         elif opt in ('-i', '--install'):
    !             update = 1
    ! 
          for file in glob.glob("pep-*.txt"):
              newfile = os.path.splitext(file)[0] + ".html"
    ***************
    *** 114,128 ****
              fixfile(file, newfile)
      
    -     if len(sys.argv) > 1 and sys.argv[1] == "-n":
    -         update = 0
    -         del sys.argv[1]
    - 
    -     if len(sys.argv) == 1:
    -         username = ""
    -     elif len(sys.argv) == 2:
    -         username = sys.argv[1]+"@"
    -     else:
    -         raise "Syntax: "+sys.argv[0]+" [-n] [sf_username]"
    - 
          if update:
              os.system("scp pep-*.html style.css " + username + HOST + ":" + HDIR)
    --- 162,165 ----
    ***************
    *** 130,133 ****
    --- 167,171 ----
      
      
    + 
      if __name__ == "__main__":
          main()
    
    
    
    From python-dev@python.org  Tue Aug 15 06:54:20 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 22:54:20 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.5,1.6
    Message-ID: <200008150554.WAA26373@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26365
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Added a second footnote with more information about the pep2html.py
    script.
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** pep-0001.txt	2000/08/14 14:48:20	1.5
    --- pep-0001.txt	2000/08/15 05:54:18	1.6
    ***************
    *** 163,167 ****
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web.
      
          Each PEP begins with an RFC822 style header section.  Required
    --- 163,167 ----
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web[2].
      
          Each PEP begins with an RFC822 style header section.  Required
    ***************
    *** 208,214 ****
      
      
    ! References
      
          [1] http://www.opencontent.org/openpub/
      
      
    --- 208,218 ----
      
      
    ! References and Footnotes
      
          [1] http://www.opencontent.org/openpub/
    + 
    +     [2] The script referred to here is pep2html.py, which lives in
    +     the same directory in the CVS tree as the PEPs themselves.  Try
    +     "pep2html.py --help" for details.
      
      
    
    
    
    From python-dev@python.org  Tue Aug 15 06:58:53 2000
    From: python-dev@python.org (Tim Peters)
    Date: Mon, 14 Aug 2000 22:58:53 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.7,1.8
    Message-ID: <200008150558.WAA26703@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26680
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Updated as best I could.  Help!
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** pep-0200.txt	2000/08/07 17:04:27	1.7
    --- pep-0200.txt	2000/08/15 05:58:29	1.8
    ***************
    *** 16,24 ****
          historical record.
      
      Tentative Release Schedule
      
    -     Aug. 14: All 2.0 PEPs finished / feature freeze
    -     Aug. 28: 2.0 beta 1
    -     Sep. 29: 2.0 final
      
      Guidelines for submitting patches and making changes
    --- 16,26 ----
          historical record.
      
    + 
      Tentative Release Schedule
    + 
    +     14-Aug-2000: All 2.0 PEPs finished / feature freeze
    +     28-Aug-2000: 2.0 beta 1
    +     29-Sep-2000: 2.0 final
      
      
      Guidelines for submitting patches and making changes
    ***************
    *** 31,37 ****
      
          - Discuss any controversial changes on python-dev first.  If you
    !       get a lot of +1 votes and no -1 votes, make the change.  If you 
    !       get a some -1 votes, think twice; consider asking Guido what he 
    !       thinks. 
      
          - If the change is to code you contributed, it probably makes
    --- 33,39 ----
      
          - Discuss any controversial changes on python-dev first.  If you
    !       get a lot of +1 votes and no -1 votes, make the change.  If you
    !       get a some -1 votes, think twice; consider asking Guido what he
    !       thinks.
      
          - If the change is to code you contributed, it probably makes
    ***************
    *** 75,78 ****
    --- 77,81 ----
          released this way.
      
    + 
      Failing test cases need to get fixed
      
    ***************
    *** 84,97 ****
          to fail, they serve no useful purpose.
      
    !     test case         platform   R B    date reported   note
    !     test_mmap          Win32     X X    July 26, 2000
    !         [believe that was fixed by Mark H.]
    !     test_winreg        Win32     X X    July 26, 2000
    !     test_winreg2       Win32     X X    July 26, 2000
    !     test_popen2        Win32     X X    July 26, 2000   skipped
              [believe this was fix by /F]
    !     test_fork1         Linux     X      July 26, 2000   just SMP?  
              [no clue; there are probably two bugs here]
    !   
      Open items -- should be done/fixed
      
    --- 87,126 ----
          to fail, they serve no useful purpose.
      
    !     [what are the "R" and "B" columns supposed to mean? - tim]
    ! 
    !     test case         platform   R B    date reported
    !     ---------         --------   --     -------------
    !     test_winreg2      Win32      X X    26-Jul-2000
    !         [still fails 15-Aug-2000 for me, on Win98 - tim
    !          test test_winreg2 failed -- Writing: 'Test Failed: testHives',
    !          expected: 'HKEY_PERFORMANCE_DATA\012'
    !         ]
    ! 
    !     test_popen2       Win32      X X    26-Jul-2000
              [believe this was fix by /F]
    !         [still fails 15-Aug-2000 for me, on Win98 - tim
    !          test test_popen2 crashed -- exceptions.WindowsError :
    !          [Errno 2] The system cannot find the file specified
    !         ]
    ! 
    !     test_fork1        Linux      X      26-Jul-2000     just SMP?
              [no clue; there are probably two bugs here]
    ! 
    ! 
    ! Previously failing test cases
    ! 
    !     If you find a test bouncing between this section and the previous one,
    !     the code it's testing is in trouble!
    ! 
    !     test case         platform   R B    date reported
    !     ---------         --------   --     -------------
    !     test_winreg        Win32     X X    26-Jul-2000
    !         [works 15-Aug-2000 for me, on Win98 - tim]
    ! 
    !     test_mmap          Win32     X X    26-Jul-2000
    !         [believe that was fixed by Mark H.]
    !         [works 15-Aug-2000 for me, on Win98 - tim]
    ! 
    ! 
      Open items -- should be done/fixed
      
    ***************
    *** 103,107 ****
    --- 132,144 ----
      Accepted and completed
      
    +     * Lockstep iteration ("zip" function) - Barry Warsaw
    + 
    +     * SRE - Fredrik Lundh
    +       [at least I *think* it's done, as of 15-Aug-2000 - tim]
    + 
    +     * Fix xrange printing behavior - Fred Drake
    +       [although I'm not sure what this one was talking about - tim]
      
    + 
      Accepted and in progress
      
    ***************
    *** 116,122 ****
            http://hem.passagen.se/eff/bot.htm#456806
      
    -     * SRE - Fredrik Lundh
    -       The test suite still fails on test_re.
    - 
          * PyErr_SafeFormat / snprintf - owner???
            Use snprintf to avoid buffer overflows.  Need configure hackery
    --- 153,156 ----
    ***************
    *** 133,148 ****
            Make range(1, 10, 2) == [1:10:2]
      
      
    - Open: proposed but not accepted or declined
      
    !     * Fix xrange printing behavior
      
          * Tim O'Malley's cookie module -- but need different license
      
          * test harness for C code - Trent Mick
    - 
    -     * List comprehensions - Tim Peters?
    -       Need a coherent proposal.  Lots of confusing discussion going
    -       on.
      
          * Eliminated SET_LINENO opcode - Vladimir Marangozov
    --- 167,181 ----
            Make range(1, 10, 2) == [1:10:2]
      
    +     * List comprehensions - Skip Montanaro (Tim Peters for PEP)
    +       Need a coherent proposal.  Lots of confusing discussion going
    +       on.
    +       [note: it's not confusing to Guido  - tim]
      
      
    ! Open: proposed but not accepted or declined
      
          * Tim O'Malley's cookie module -- but need different license
      
          * test harness for C code - Trent Mick
      
          * Eliminated SET_LINENO opcode - Vladimir Marangozov
    
    
    
    From python-dev@python.org  Tue Aug 15 06:59:46 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 22:59:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules md5module.c,2.22,2.23
    Message-ID: <200008150559.WAA26757@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26746
    
    Modified Files:
    	md5module.c 
    Log Message:
    md5_hexdigest(): After a brief conversation with TP, added hexdigest()
    to this module to mirror sha's hexdigest() method.
    
    
    Index: md5module.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v
    retrieving revision 2.22
    retrieving revision 2.23
    diff -C2 -r2.22 -r2.23
    *** md5module.c	2000/08/03 02:34:44	2.22
    --- md5module.c	2000/08/15 05:59:44	2.23
    ***************
    *** 82,87 ****
      md5_digest(md5object *self, PyObject *args)
      {
    ! 
    ! 	MD5_CTX mdContext;
      	unsigned char aDigest[16];
      
    --- 82,86 ----
      md5_digest(md5object *self, PyObject *args)
      {
    !  	MD5_CTX mdContext;
      	unsigned char aDigest[16];
      
    ***************
    *** 105,108 ****
    --- 104,142 ----
      
      static PyObject *
    + md5_hexdigest(md5object *self, PyObject *args)
    + {
    +  	MD5_CTX mdContext;
    + 	unsigned char digest[16];
    + 	unsigned char hexdigest[32];
    + 	int i, j;
    + 
    + 	if (!PyArg_NoArgs(args))
    + 		return NULL;
    + 
    + 	/* make a temporary copy, and perform the final */
    + 	mdContext = self->md5;
    + 	MD5Final(digest, &mdContext);
    + 
    + 	/* 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);
    + }
    + 
    + 
    + static char hexdigest_doc [] =
    + "hexdigest() -> string\n\
    + \n\
    + Like digest(), but returns the digest as a string of hexadecimal digits.";
    + 
    + 
    + static PyObject *
      md5_copy(md5object *self, PyObject *args)
      {
    ***************
    *** 127,137 ****
      
      static PyMethodDef md5_methods[] = {
    ! 	{"update",		(PyCFunction)md5_update, 
    ! 	 METH_OLDARGS, update_doc},
    ! 	{"digest",		(PyCFunction)md5_digest, 
    ! 	 METH_OLDARGS, digest_doc},
    ! 	{"copy",		(PyCFunction)md5_copy, 
    ! 	 METH_OLDARGS, copy_doc},
    ! 	{NULL,			NULL}		/* sentinel */
      };
      
    --- 161,169 ----
      
      static PyMethodDef md5_methods[] = {
    ! 	{"update",    (PyCFunction)md5_update,    METH_OLDARGS, update_doc},
    ! 	{"digest",    (PyCFunction)md5_digest,    METH_OLDARGS, digest_doc},
    ! 	{"hexdigest", (PyCFunction)md5_hexdigest, METH_OLDARGS, hexdigest_doc},
    ! 	{"copy",      (PyCFunction)md5_copy,      METH_OLDARGS, copy_doc},
    ! 	{NULL, NULL}			     /* sentinel */
      };
      
    
    
    
    From python-dev@python.org  Tue Aug 15 07:00:30 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:00:30 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmd5.tex,1.15,1.16
    Message-ID: <200008150600.XAA27250@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27175
    
    Modified Files:
    	libmd5.tex 
    Log Message:
    Added description of the md5.hexdigest() method.
    
    
    Index: libmd5.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmd5.tex,v
    retrieving revision 1.15
    retrieving revision 1.16
    diff -C2 -r1.15 -r1.16
    *** libmd5.tex	2000/07/16 19:01:09	1.15
    --- libmd5.tex	2000/08/15 06:00:28	1.16
    ***************
    *** 61,64 ****
    --- 61,69 ----
      \end{methoddesc}
      
    + \begin{methoddesc}[md5]{hexdigest}{}
    + Like \method{digest()} except the digest is returned as a string of
    + length 32, containing only hexadecimal digits.
    + \end{methoddesc}
    + 
      \begin{methoddesc}[md5]{copy}{}
      Return a copy (``clone'') of the md5 object.  This can be used to
    
    
    
    From python-dev@python.org  Tue Aug 15 07:01:39 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:01:39 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_md5.py,1.1,1.2
    Message-ID: <200008150601.XAA28617@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28526
    
    Modified Files:
    	test_md5.py 
    Log Message:
    Added a test of the md5.hexdigest() method.  Funny enough, this test
    had yet-another Python implementation of a binary-data-to-hex-digit
    encoder!
    
    
    Index: test_md5.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_md5.py,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** test_md5.py	1993/12/14 15:53:59	1.1
    --- test_md5.py	2000/08/15 06:01:36	1.2
    ***************
    *** 23,24 ****
    --- 23,30 ----
      print md5test('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
      print md5test('12345678901234567890123456789012345678901234567890123456789012345678901234567890')
    + 
    + # hexdigest is new with Python 2.0
    + m = md5('testing the hexdigest method')
    + h = m.hexdigest()
    + if hexstr(m.digest()) <> h:
    + 	print 'hexdigest() failed'
    
    
    
    From python-dev@python.org  Tue Aug 15 07:03:38 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:03:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules shamodule.c,2.9,2.10
    Message-ID: <200008150603.XAA31574@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31519
    
    Modified Files:
    	shamodule.c 
    Log Message:
    SHA_hexdigest(): A couple of small patches to this function, added
    after a brief conversation with TP.  First, the return values of the
    PyString_* function calls should be checked for errors.  Second,
    bit-manipulations should be used instead of division for spliting the
    byte up into its 4 bit digits.
    
    
    Index: shamodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/shamodule.c,v
    retrieving revision 2.9
    retrieving revision 2.10
    diff -C2 -r2.9 -r2.10
    *** shamodule.c	2000/08/01 01:26:02	2.9
    --- shamodule.c	2000/08/15 06:03:35	2.10
    ***************
    *** 423,434 ****
          /* Create a new string */
          retval = PyString_FromStringAndSize(NULL, sizeof(digest) * 2);
          hex_digest = PyString_AsString(retval);
      
          /* Make hex version of the digest */
          for(i=j=0; i9) ? c+'a'-10 : c + '0';
              hex_digest[j++] = c;
    !         c = digest[i] % 16; c = (c>9) ? c+'a'-10 : c + '0';
              hex_digest[j++] = c;
          }
    --- 423,442 ----
          /* 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> 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;
          }
    
    
    
    From python-dev@python.org  Tue Aug 15 07:08:02 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:08:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libbinascii.tex,1.17,1.18
    Message-ID: <200008150608.XAA02896@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2886
    
    Modified Files:
    	libbinascii.tex 
    Log Message:
    Describe the b2a_hex() and a2b_hex() functions (a.k.a. hexlify() and
    unhexlify() respectively).
    
    
    Index: libbinascii.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libbinascii.tex,v
    retrieving revision 1.17
    retrieving revision 1.18
    diff -C2 -r1.17 -r1.18
    *** libbinascii.tex	2000/07/16 19:01:09	1.17
    --- libbinascii.tex	2000/08/15 06:08:00	1.18
    ***************
    *** 85,88 ****
    --- 85,103 ----
      \end{funcdesc}
       
    + \begin{funcdesc}{b2a_hex}{data}
    + Return the hexadecimal representation of the binary \var{data}.  Every
    + byte of \var{data} is converted into the corresponding 2-digit hex
    + representation.  The resulting string is therefore, twice as long as
    + the length of \var{data}.  This function is also available as
    + \function{hexlify()}.
    + \end{funcdesc}
    + 
    + \begin{funcdesc}{a2b_hex}{hexstr}
    + Return the binary data represented by the hexadecimal string
    + \var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
    + \var{hexstr} must contain an even number of hexadecimal digits (which
    + can be upper or lower case), otherwise a \exception{TypeError} is
    + raised.  This function is also available as \function{unhexlify()}.
    + 
      \begin{excdesc}{Error}
      Exception raised on errors. These are usually programming errors.
    
    
    
    From python-dev@python.org  Tue Aug 15 07:07:17 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:07:17 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules binascii.c,2.23,2.24
    Message-ID: <200008150607.XAA02863@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2854
    
    Modified Files:
    	binascii.c 
    Log Message:
    After a brief conversation and code review with TP, adding two very
    commonly used functions to convert an arbitrary binary string into
    a hexadecimal digit representation and back again.  These are often
    (and often differently) implemented in Python.  Best to have one
    common fast implementation.  Specifically,
    
    binascii_hexlify(): a.k.a. b2a_hex() to return the hex representation
    of binary data.
    
    binascii_unhexlify(): a.k.a. a2b_hex() to do the inverse conversion
    (hex digits to binary data).  The argument must have an even length,
    and must contain only hex digits, otherwise a TypeError is raised.
    
    
    Index: binascii.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v
    retrieving revision 2.23
    retrieving revision 2.24
    diff -C2 -r2.23 -r2.24
    *** binascii.c	2000/08/03 02:06:15	2.23
    --- binascii.c	2000/08/15 06:07:13	2.24
    ***************
    *** 875,903 ****
      }
      
      /* List of functions defined in the module */
      
      static struct PyMethodDef binascii_module_methods[] = {
    ! 	{"a2b_uu",		binascii_a2b_uu,	
    ! 	 METH_VARARGS,	doc_a2b_uu},
    ! 	{"b2a_uu",		binascii_b2a_uu,	
    ! 	 METH_VARARGS,	doc_b2a_uu},
    ! 	{"a2b_base64",		binascii_a2b_base64,	
    ! 	 METH_VARARGS,
    ! 	 doc_a2b_base64},
    ! 	{"b2a_base64",		binascii_b2a_base64,	
    ! 	 METH_VARARGS, doc_b2a_base64},
    ! 	{"a2b_hqx",		binascii_a2b_hqx,	
    ! 	 METH_VARARGS, doc_a2b_hqx},
    ! 	{"b2a_hqx",		binascii_b2a_hqx,	
    ! 	 METH_VARARGS, doc_b2a_hqx},
    ! 	{"rlecode_hqx",		binascii_rlecode_hqx,	
    ! 	 METH_VARARGS, doc_rlecode_hqx},
    ! 	{"rledecode_hqx",	binascii_rledecode_hqx,	
    ! 	 METH_VARARGS, doc_rledecode_hqx},
    ! 	{"crc_hqx",		binascii_crc_hqx,	
    ! 	 METH_VARARGS,	doc_crc_hqx},
    ! 	{"crc32",		binascii_crc32,		
    ! 	 METH_VARARGS, doc_crc32},
    ! 	{NULL,			NULL}		/* sentinel */
      };
      
    --- 875,1007 ----
      }
      
    + 
    + static PyObject *
    + binascii_hexlify(PyObject *self, PyObject *args)
    + {
    + 	char* argbuf;
    + 	int arglen;
    + 	PyObject *retval;
    + 	char* retbuf;
    + 	int i, j;
    + 
    + 	if (!PyArg_ParseTuple(args, "t#:b2a_hex", &argbuf, &arglen))
    + 		return NULL;
    + 
    + 	retval = PyString_FromStringAndSize(NULL, arglen*2);
    + 	if (!retval)
    + 		return NULL;
    + 	retbuf = PyString_AsString(retval);
    + 	if (!retbuf)
    + 		goto finally;
    + 
    + 	/* make hex version of string, taken from shamodule.c */
    + 	for (i=j=0; i < arglen; i++) {
    + 		char c;
    + 		c = (argbuf[i] >> 4) & 0xf;
    + 		c = (c>9) ? c+'a'-10 : c + '0';
    + 		retbuf[j++] = c;
    + 		c = argbuf[i] & 0xf;
    + 		c = (c>9) ? c+'a'-10 : c + '0';
    + 		retbuf[j++] = c;
    + 	}
    + 	return retval;
    + 
    +   finally:
    + 	Py_DECREF(retval);
    + 	return NULL;
    + }
    + 
    + static char doc_hexlify[] =
    + "b2a_hex(data) -> s; Hexadecimal representation of binary data.\n\
    + \n\
    + This function is also available as \"hexlify()\".";
    + 
    + 
    + static int
    + to_int(char c) 
    + {
    + 	if (isdigit(c))
    + 		return c - '0';
    + 	else {
    + 		if (isupper(c))
    + 			c = tolower(c);
    + 		if (c >= 'a' && c <= 'f')
    + 			return c - 'a' + 10;
    + 	}
    + 	return -1;
    + }
    + 
    + 
    + static PyObject *
    + binascii_unhexlify(PyObject *self, PyObject *args)
    + {
    + 	char* argbuf;
    + 	int arglen;
    + 	PyObject *retval;
    + 	char* retbuf;
    + 	int i, j;
    + 
    + 	if (!PyArg_ParseTuple(args, "s#:a2b_hex", &argbuf, &arglen))
    + 		return NULL;
    + 
    + 	/* XXX What should we do about odd-lengthed strings?  Should we add
    + 	 * an implicit leading zero, or a trailing zero?  For now, raise an
    + 	 * exception.
    + 	 */
    + 	if (arglen % 2) {
    + 		PyErr_SetString(PyExc_TypeError, "odd lengthed string");
    + 		return NULL;
    + 	}
    + 
    + 	retval = PyString_FromStringAndSize(NULL, (arglen/2));
    + 	if (!retval)
    + 		return NULL;
    + 	retbuf = PyString_AsString(retval);
    + 	if (!retbuf)
    + 		goto finally;
    + 
    + 	for (i=j=0; i < arglen; i += 2) {
    + 		int top = to_int(Py_CHARMASK(argbuf[i]));
    + 		int bot = to_int(Py_CHARMASK(argbuf[i+1]));
    + 		if (top == -1 || bot == -1) {
    + 			PyErr_SetString(PyExc_TypeError,
    + 					"non-hexadecimal digit found");
    + 			goto finally;
    + 		}
    + 		retbuf[j++] = (top << 4) + bot;
    + 	}
    + 	return retval;
    + 
    +   finally:
    + 	Py_DECREF(retval);
    + 	return NULL;
    + }
    + 
    + static char doc_unhexlify[] =
    + "a2b_hex(hexstr) -> s; Binary data of hexadecimal representation.\n\
    + \n\
    + hexstr must contain an even number of hex digits (upper or lower case).\n\
    + This function is also available as \"unhexlify()\"";
    + 
    + 
      /* List of functions defined in the module */
      
      static struct PyMethodDef binascii_module_methods[] = {
    ! 	{"a2b_uu",     binascii_a2b_uu,     METH_VARARGS, doc_a2b_uu},
    ! 	{"b2a_uu",     binascii_b2a_uu,     METH_VARARGS, doc_b2a_uu},
    ! 	{"a2b_base64", binascii_a2b_base64, METH_VARARGS, doc_a2b_base64},
    ! 	{"b2a_base64", binascii_b2a_base64, METH_VARARGS, doc_b2a_base64},
    ! 	{"a2b_hqx",    binascii_a2b_hqx,    METH_VARARGS, doc_a2b_hqx},
    ! 	{"b2a_hqx",    binascii_b2a_hqx,    METH_VARARGS, doc_b2a_hqx},
    ! 	{"b2a_hex",    binascii_hexlify,    METH_VARARGS, doc_hexlify},
    ! 	{"a2b_hex",    binascii_unhexlify,  METH_VARARGS, doc_unhexlify},
    ! 	{"hexlify",    binascii_hexlify,    METH_VARARGS, doc_hexlify},
    ! 	{"unhexlify",  binascii_unhexlify,  METH_VARARGS, doc_unhexlify},
    ! 	{"rlecode_hqx",   binascii_rlecode_hqx, METH_VARARGS, doc_rlecode_hqx},
    ! 	{"rledecode_hqx", binascii_rledecode_hqx, METH_VARARGS,
    ! 	 doc_rledecode_hqx},
    ! 	{"crc_hqx",    binascii_crc_hqx,    METH_VARARGS, doc_crc_hqx},
    ! 	{"crc32",      binascii_crc32,      METH_VARARGS, doc_crc32},
    ! 	{NULL, NULL}			     /* sentinel */
      };
      
    
    
    
    From python-dev@python.org  Tue Aug 15 07:08:33 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:08:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_binascii.py,1.5,1.6
    Message-ID: <200008150608.XAA03017@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3009
    
    Modified Files:
    	test_binascii.py 
    Log Message:
    tests for binascii.b2a_hex() and binascii.a2b_hex().
    
    
    Index: test_binascii.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_binascii.py,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** test_binascii.py	2000/02/16 21:13:06	1.5
    --- test_binascii.py	2000/08/15 06:08:31	1.6
    ***************
    *** 92,93 ****
    --- 92,112 ----
      
      # The hqx test is in test_binhex.py
    + 
    + # test hexlification
    + s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
    + t = binascii.b2a_hex(s)
    + u = binascii.a2b_hex(t)
    + if s <> u:
    +     print 'binascii hexlification failed'
    + try:
    +     binascii.a2b_hex(t[:-1])
    + except TypeError:
    +     pass
    + else:
    +     print 'expected TypeError not raised'
    + try:
    +     binascii.a2b_hex(t[:-1] + 'q')
    + except TypeError:
    +     pass
    + else:
    +     print 'expected TypeError not raised'
    
    
    
    From python-dev@python.org  Tue Aug 15 08:00:16 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 00:00:16 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules binascii.c,2.24,2.25
    Message-ID: <200008150700.AAA05986@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5839
    
    Modified Files:
    	binascii.c 
    Log Message:
    binascii_unhexlify(): Better error message, courtesy effbot.
    
    
    Index: binascii.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v
    retrieving revision 2.24
    retrieving revision 2.25
    diff -C2 -r2.24 -r2.25
    *** binascii.c	2000/08/15 06:07:13	2.24
    --- binascii.c	2000/08/15 06:59:58	2.25
    ***************
    *** 945,954 ****
      		return NULL;
      
    ! 	/* XXX What should we do about odd-lengthed strings?  Should we add
    ! 	 * an implicit leading zero, or a trailing zero?  For now, raise an
    ! 	 * exception.
      	 */
      	if (arglen % 2) {
    ! 		PyErr_SetString(PyExc_TypeError, "odd lengthed string");
      		return NULL;
      	}
    --- 945,954 ----
      		return NULL;
      
    ! 	/* XXX What should we do about strings with an odd length?  Should
    ! 	 * we add an implicit leading zero, or a trailing zero?  For now,
    ! 	 * raise an exception.
      	 */
      	if (arglen % 2) {
    ! 		PyErr_SetString(PyExc_TypeError, "Odd-length string");
      		return NULL;
      	}
    ***************
    *** 966,970 ****
      		if (top == -1 || bot == -1) {
      			PyErr_SetString(PyExc_TypeError,
    ! 					"non-hexadecimal digit found");
      			goto finally;
      		}
    --- 966,970 ----
      		if (top == -1 || bot == -1) {
      			PyErr_SetString(PyExc_TypeError,
    ! 					"Non-hexadecimal digit found");
      			goto finally;
      		}
    
    
    
    From python-dev@python.org  Tue Aug 15 08:34:37 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 00:34:37 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.8,1.9
    Message-ID: <200008150734.AAA15988@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15965
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Updated status of test_popen2 on Windows.
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.8
    retrieving revision 1.9
    diff -C2 -r1.8 -r1.9
    *** pep-0200.txt	2000/08/15 05:58:29	1.8
    --- pep-0200.txt	2000/08/15 07:34:33	1.9
    ***************
    *** 90,94 ****
      
          test case         platform   R B    date reported
    !     ---------         --------   --     -------------
          test_winreg2      Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    --- 90,94 ----
      
          test case         platform   R B    date reported
    !     ---------         --------   - -    -------------
          test_winreg2      Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    ***************
    *** 98,105 ****
      
          test_popen2       Win32      X X    26-Jul-2000
    -         [believe this was fix by /F]
              [still fails 15-Aug-2000 for me, on Win98 - tim
    !          test test_popen2 crashed -- exceptions.WindowsError :
    !          [Errno 2] The system cannot find the file specified
              ]
      
    --- 98,107 ----
      
          test_popen2       Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    !              test test_popen2 crashed -- exceptions.AssertionError :
    !          The problem is that the test uses "cat", but there is
    !          no such thing under Windows (unless you install it).
    !          So it's the test that's broken here, not (necessarily)
    !          the code.
              ]
      
    ***************
    *** 114,118 ****
      
          test case         platform   R B    date reported
    !     ---------         --------   --     -------------
          test_winreg        Win32     X X    26-Jul-2000
              [works 15-Aug-2000 for me, on Win98 - tim]
    --- 116,120 ----
      
          test case         platform   R B    date reported
    !     ---------         --------   - -    -------------
          test_winreg        Win32     X X    26-Jul-2000
              [works 15-Aug-2000 for me, on Win98 - tim]
    
    
    
    From python-dev@python.org  Tue Aug 15 08:47:16 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 00:47:16 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.9,1.10
    Message-ID: <200008150747.AAA16620@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv16561
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    
    Add a number of proposed but not accepted or declined projects. If you feel
    these should not be in this PEP -- decline them! Also note that I put
    augmented assignment under proposed, even though Guido and Tim keep saying
    it will be in 2.0, because I still don't know whether the proposal itself is
    accepted :-)
    
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** pep-0200.txt	2000/08/15 07:34:33	1.9
    --- pep-0200.txt	2000/08/15 07:47:12	1.10
    ***************
    *** 197,200 ****
    --- 197,215 ----
            - http://www.python.org/pipermail/python-dev/1999-August/002252.html
      
    +     * Augmented assignment - Thomas Wouters
    +       Add += and family, plus Python and C hooks, and API functions.
    + 
    +     * "import as" - Thomas Wouters
    +       Extend the 'import' and 'from ... import' mechanism to enable
    +       importing a symbol as another name.
    + 
    +     * Extended slicing on lists - Michael Hudson
    +       Make lists (and other builtin types) handle extended slices.
    + 
    +     * Merge __getitem__ and __getslice__ - Thomas Wouters
    +       Move __getslice__ functionality into __getitem__, using slice objects,
    +       for normal slices as well as for extended ones. First step: use
    +       getitem if there is no getslice.
    +       
      
      Declined
    
    
    
    From python-dev@python.org  Tue Aug 15 09:05:44 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 01:05:44 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.10,1.11
    Message-ID: <200008150805.BAA25859@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25844
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    
    Add one more proposed item, and change some wording on the 'import as' item.
    
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** pep-0200.txt	2000/08/15 07:47:12	1.10
    --- pep-0200.txt	2000/08/15 08:05:42	1.11
    ***************
    *** 202,206 ****
          * "import as" - Thomas Wouters
            Extend the 'import' and 'from ... import' mechanism to enable
    !       importing a symbol as another name.
      
          * Extended slicing on lists - Michael Hudson
    --- 202,206 ----
          * "import as" - Thomas Wouters
            Extend the 'import' and 'from ... import' mechanism to enable
    !       importing a symbol as another name. (Without adding a new keyword.)
      
          * Extended slicing on lists - Michael Hudson
    ***************
    *** 212,215 ****
    --- 212,219 ----
            getitem if there is no getslice.
            
    +     * 'indexing-for' - Thomas Wouters
    +       Special syntax to give Python code access to the loop-counter in 'for'
    +       loops. (Without adding a new keyword.)
    + 
      
      Declined
    
    
    
    From python-dev@python.org  Tue Aug 15 11:35:20 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Tue, 15 Aug 2000 03:35:20 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.10,1.11
    Message-ID: <200008151035.DAA10618@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9896
    
    Modified Files:
    	pep2html.py 
    Log Message:
    
    remove superfluous special casing for lines beginning with '[*]'
    
    
    
    Index: pep2html.py
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** pep2html.py	2000/08/15 05:53:19	1.10
    --- pep2html.py	2000/08/15 10:35:17	1.11
    ***************
    *** 119,123 ****
                  break
              if line[0] != "\f":
    !             if line[0].strip() and line[:3] != '[*]':
                      if line.strip() == LOCALVARS:
                          break
    --- 119,123 ----
                  break
              if line[0] != "\f":
    !             if line[0].strip():
                      if line.strip() == LOCALVARS:
                          break
    
    
    
    From python-dev@python.org  Tue Aug 15 13:17:36 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 05:17:36 -0700
    Subject: [Python-checkins] CVS: distutils/examples numpy_setup.py,1.9,1.10
    Message-ID: <200008151217.FAA05496@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/examples
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5385/examples
    
    Modified Files:
    	numpy_setup.py 
    Log Message:
    Bumped version to 15.3 (the current NumPy release).
    
    Index: numpy_setup.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/examples/numpy_setup.py,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** numpy_setup.py	2000/05/31 02:27:23	1.9
    --- numpy_setup.py	2000/08/15 12:17:33	1.10
    ***************
    *** 21,25 ****
      
      setup (name = "Numerical",
    !        version = "15.2",
             maintainer = "Paul Dubois",
             maintainer_email = "dubois@users.sourceforge.net",
    --- 21,25 ----
      
      setup (name = "Numerical",
    !        version = "15.3",
             maintainer = "Paul Dubois",
             maintainer_email = "dubois@users.sourceforge.net",
    
    
    
    From python-dev@python.org  Tue Aug 15 14:01:28 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:01:28 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command build_py.py,1.26,1.27
    Message-ID: <200008151301.GAA26610@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26489
    
    Modified Files:
    	build_py.py 
    Log Message:
    Fix long-hidden inconsistency in internal interface: 'find_modules()' now 
    represents packages as strings, not tuples.  This allowed a simplification
    in 'get_package_dir()', too -- can now assume that 'package' is a string.
    
    Index: build_py.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/build_py.py,v
    retrieving revision 1.26
    retrieving revision 1.27
    diff -C2 -r1.26 -r1.27
    *** build_py.py	2000/06/04 13:42:52	1.26
    --- build_py.py	2000/08/15 13:01:25	1.27
    ***************
    *** 94,103 ****
                 (at least according to the 'package_dir' option, if any)."""
      
    !         if type (package) is StringType:
    !             path = string.split (package, '.')
    !         elif type (package) in (TupleType, ListType):
    !             path = list (package)
    !         else:
    !             raise TypeError, "'package' must be a string, list, or tuple"
      
              if not self.package_dir:
    --- 94,98 ----
                 (at least according to the 'package_dir' option, if any)."""
      
    !         path = string.split (package, '.')
      
              if not self.package_dir:
    ***************
    *** 221,225 ****
              for module in self.py_modules:
                  path = string.split (module, '.')
    !             package = tuple (path[0:-1])
                  module_base = path[-1]
      
    --- 216,220 ----
              for module in self.py_modules:
                  path = string.split (module, '.')
    !             package = string.join(path[0:-1], '.')
                  module_base = path[-1]
      
    
    
    
    From python-dev@python.org  Tue Aug 15 14:03:19 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:03:19 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command bdist_rpm.py,1.15,1.16
    Message-ID: <200008151303.GAA29005@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27293
    
    Modified Files:
    	bdist_rpm.py 
    Log Message:
    Added support for the '--dist-dir' option, including a mildly nasty
    hack to find the two created RPM files (source and binary) and
    move them to the "dist dir" (default "dist").
    
    
    Index: bdist_rpm.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_rpm.py,v
    retrieving revision 1.15
    retrieving revision 1.16
    diff -C2 -r1.15 -r1.16
    *** bdist_rpm.py	2000/08/05 01:31:54	1.15
    --- bdist_rpm.py	2000/08/15 13:03:16	1.16
    ***************
    *** 9,12 ****
    --- 9,13 ----
      
      import os, string
    + import glob
      from types import *
      from distutils.core import Command, DEBUG
    ***************
    *** 25,28 ****
    --- 26,32 ----
               "base directory for creating RPMs (defaults to \"rpm\" under "
               "--bdist-base; must be specified for RPM 2)"),
    +         ('dist-dir=', 'd',
    +          "directory to put final RPM files in "
    +          "(and .spec files if --spec-only)"),
              ('spec-only', None,
               "only regenerate spec file"),
    ***************
    *** 110,113 ****
    --- 114,118 ----
              self.bdist_base = None
              self.rpm_base = None
    +         self.dist_dir = None
              self.spec_only = None
              self.binary_only = None
    ***************
    *** 167,170 ****
    --- 172,176 ----
                  self.use_rpm_opt_flags = 0
      
    +         self.set_undefined_options('bdist', ('dist_dir', 'dist_dir'))
              self.finalize_package_data()
      
    ***************
    *** 227,232 ****
              # make directories
              if self.spec_only:
    !             spec_dir = "dist"
    !             self.mkpath(spec_dir)       # XXX should be configurable
              else:
                  rpm_dir = {}
    --- 233,238 ----
              # make directories
              if self.spec_only:
    !             spec_dir = self.dist_dir
    !             self.mkpath(spec_dir)
              else:
                  rpm_dir = {}
    ***************
    *** 236,241 ****
                  spec_dir = rpm_dir['SPECS']
      
    !         # Spec file goes into 'dist' directory if '--spec-only specified',
    !         # into build/rpm. otherwise.
              spec_path = os.path.join(spec_dir,
                                       "%s.spec" % self.distribution.get_name())
    --- 242,247 ----
                  spec_dir = rpm_dir['SPECS']
      
    !         # Spec file goes into 'dist_dir' if '--spec-only specified',
    !         # build/rpm. otherwise.
              spec_path = os.path.join(spec_dir,
                                       "%s.spec" % self.distribution.get_name())
    ***************
    *** 285,288 ****
    --- 291,307 ----
              rpm_args.append(spec_path)
              self.spawn(rpm_args)
    + 
    +         # XXX this is a nasty hack -- we really should have a proper way to
    +         # find out the names of the RPM files created; also, this assumes
    +         # that RPM creates exactly one source and one binary RPM.
    +         if not self.dry_run:
    +             srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
    +             rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
    +             assert len(srpms) == 1, \
    +                    "unexpected number of SRPM files found: %s" % srpms
    +             assert len(rpms) == 1, \
    +                    "unexpected number of RPM files found: %s" % rpms
    +             self.move_file(srpms[0], self.dist_dir)
    +             self.move_file(rpms[0], self.dist_dir)
      
          # run()
    
    
    
    From python-dev@python.org  Tue Aug 15 14:05:38 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:05:38 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command bdist_rpm.py,1.16,1.17
    Message-ID: <200008151305.GAA31686@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31590
    
    Modified Files:
    	bdist_rpm.py 
    Log Message:
    Fixed the move-RPM-files hack so it knows about the '--binary-only' and
    '--source-only' options.
    
    Index: bdist_rpm.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_rpm.py,v
    retrieving revision 1.16
    retrieving revision 1.17
    diff -C2 -r1.16 -r1.17
    *** bdist_rpm.py	2000/08/15 13:03:16	1.16
    --- bdist_rpm.py	2000/08/15 13:05:35	1.17
    ***************
    *** 296,307 ****
              # that RPM creates exactly one source and one binary RPM.
              if not self.dry_run:
    !             srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
    !             rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
    !             assert len(srpms) == 1, \
    !                    "unexpected number of SRPM files found: %s" % srpms
    !             assert len(rpms) == 1, \
    !                    "unexpected number of RPM files found: %s" % rpms
    !             self.move_file(srpms[0], self.dist_dir)
    !             self.move_file(rpms[0], self.dist_dir)
      
          # run()
    --- 296,310 ----
              # that RPM creates exactly one source and one binary RPM.
              if not self.dry_run:
    !             if not self.binary_only:
    !                 srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
    !                 assert len(srpms) == 1, \
    !                        "unexpected number of SRPM files found: %s" % srpms
    !                 self.move_file(srpms[0], self.dist_dir)
    ! 
    !             if not self.source_only:
    !                 rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
    !                 assert len(rpms) == 1, \
    !                        "unexpected number of RPM files found: %s" % rpms
    !                 self.move_file(rpms[0], self.dist_dir)
      
          # run()
    
    
    
    From python-dev@python.org  Tue Aug 15 14:13:47 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:13:47 -0700
    Subject: [Python-checkins] CVS: distutils CHANGES.txt,1.11,1.12
    Message-ID: <200008151313.GAA06791@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv6696
    
    Modified Files:
    	CHANGES.txt 
    Log Message:
    Changes for 0.9.1.
    
    Index: CHANGES.txt
    ===================================================================
    RCS file: /cvsroot/python/distutils/CHANGES.txt,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** CHANGES.txt	2000/06/30 02:54:00	1.11
    --- CHANGES.txt	2000/08/15 13:13:44	1.12
    ***************
    *** 1,2 ****
    --- 1,25 ----
    + Release 0.9.1 (15 August, 2000):
    + ------------------------------
    +   * added --dist-dir option to the sdist and bdist commands, to control
    +     where output files are put; all default to the "dist" directory
    + 
    +   * factored a bunch of code out of the "sdist" command, which will
    +     hopefully make it easier to use its nifty "file list template"
    +     features used in other places (thanks to Rene Liebscher)
    + 
    +   * general cleanup/improvement of compiling extensions with non-
    +     Microsoft compilers under Windows (Rene Liebscher):
    +     - fixed Borland C++ interface so it works
    +     - better handling of different GCC versions under Windows
    + 
    +   * fixed a bunch of little bugs (thanks to various people)
    + 
    +   * some documentation work: added "Describing extensions" section
    +     to the "Distributing Python Modules" manual
    + 
    +   * fixed a long-standing bug in the "build_py" command that prevented
    +     "bdist_rpm" from working in certain cases
    + 
    + 
      Release 0.9 (29 June, 2000):
      ----------------------------
    
    
    
    From python-dev@python.org  Tue Aug 15 14:14:08 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:14:08 -0700
    Subject: [Python-checkins] CVS: distutils README.txt,1.17,1.18
    Message-ID: <200008151314.GAA07164@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7063
    
    Modified Files:
    	README.txt 
    Log Message:
    Tweaks for 0.9.1 release.
    
    Index: README.txt
    ===================================================================
    RCS file: /cvsroot/python/distutils/README.txt,v
    retrieving revision 1.17
    retrieving revision 1.18
    diff -C2 -r1.17 -r1.18
    *** README.txt	2000/06/30 02:54:00	1.17
    --- README.txt	2000/08/15 13:14:04	1.18
    ***************
    *** 1,5 ****
                           Python Distribution Utilities
    !                               release 0.9
    !                              June 29, 2000
      
      
    --- 1,5 ----
                           Python Distribution Utilities
    !                              release 0.9.1
    !                             August 15, 2000
      
      
    ***************
    *** 42,46 ****
      ------------
      
    ! Release 0.9 of the Distutils requires Python 1.5.2 or later.  (If you
      absolutely must use Python 1.5.1, Distutils 0.1.5 is backwards
      compatible.  However, I have dropped plans to port the current Distutils
    --- 42,46 ----
      ------------
      
    ! This release of the Distutils requires Python 1.5.2 or later.  (If you
      absolutely must use Python 1.5.1, Distutils 0.1.5 is backwards
      compatible.  However, I have dropped plans to port the current Distutils
    ***************
    *** 50,54 ****
      To use the Distutils under Unix, you must have a *complete* Python
      installation, including the Makefile and config.h used to build Python.
    ! These should be in /lib/python1.X/config.  (
      is the value of the --exec-prefix option to Python's configure script,
      or the --prefix option if --exec-prefix wasn't supplied; if neither was
    --- 50,54 ----
      To use the Distutils under Unix, you must have a *complete* Python
      installation, including the Makefile and config.h used to build Python.
    ! These should be in /lib/pythonX.Y/config.  (
      is the value of the --exec-prefix option to Python's configure script,
      or the --prefix option if --exec-prefix wasn't supplied; if neither was
    ***************
    *** 112,116 ****
      
      The Distutils have been included with Python since 1.6a1, and Distutils
    ! 0.9 is approximately the code that will be included with Python 2.0b1
      (modulo bug fixes).  Thus, there's generally no need to install the
      Distutils under Python 1.6/2.0.  However, Distutils releases may
    --- 112,116 ----
      
      The Distutils have been included with Python since 1.6a1, and Distutils
    ! 0.9.1 is approximately the code that will be included with Python 2.0b1
      (modulo bug fixes).  Thus, there's generally no need to install the
      Distutils under Python 1.6/2.0.  However, Distutils releases may
    ***************
    *** 141,150 ****
      
      The Distutils is intended to have three user communities: developers,
    ! packagers, and installers.  Distutils 0.9 is the first release that
    ! seriously caters to all three communities: developers can use it to
    ! build and install their modules, as well as create source distributions;
    ! packagers can use it to create RPMs and executable installers for
    ! Windows; and of course installers can build and install modules from
    ! source (or just use an installer created by some kind packager).
      
      Documentation for the Distutils is under construction in the form of two
    --- 141,150 ----
      
      The Distutils is intended to have three user communities: developers,
    ! packagers, and installers.  Distutils 0.9 was the first release to cater
    ! seriously to all three communities: developers can use it to build and
    ! install their modules, as well as create source distributions; packagers
    ! can use it to create RPMs and executable installers for Windows; and of
    ! course installers can build and install modules from source (or just use
    ! an installer created by some kind packager).
      
      Documentation for the Distutils is under construction in the form of two
    ***************
    *** 202,206 ****
    --- 202,209 ----
        * run "python setup.py install" for Numerical Python as usual
      
    + Note that Numerical Python 15.3 (the current release as I write this)
    + works fine with Distutils 0.8.x and 0.9.x.
      
    + 
      EXAMPLES
      --------
    ***************
    *** 217,221 ****
      If you want to try one of the example setup scripts in the real world,
      you'll obviously have to have the appropriate module distribution
    ! available: Numerical-15.2 (numpy_setup.py), PyXML-0.5.3 (xml_setup.py),
      Imaging-1.0 (pil_setup.py), or mxDateTime-1.3.0 (mxdatetime_setup.py).
      All you have to do is:
    --- 220,224 ----
      If you want to try one of the example setup scripts in the real world,
      you'll obviously have to have the appropriate module distribution
    ! available: Numerical-15.3 (numpy_setup.py), PyXML-0.5.3 (xml_setup.py),
      Imaging-1.0 (pil_setup.py), or mxDateTime-1.3.0 (mxdatetime_setup.py).
      All you have to do is:
    
    
    
    From python-dev@python.org  Tue Aug 15 14:14:29 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:14:29 -0700
    Subject: [Python-checkins] CVS: distutils setup.py,1.18,1.19
    Message-ID: <200008151314.GAA07573@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7500
    
    Modified Files:
    	setup.py 
    Log Message:
    Bump version to 0.9.1.
    
    Index: setup.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/setup.py,v
    retrieving revision 1.18
    retrieving revision 1.19
    diff -C2 -r1.18 -r1.19
    *** setup.py	2000/07/27 02:17:39	1.18
    --- setup.py	2000/08/15 13:14:27	1.19
    ***************
    *** 12,16 ****
      
      setup (name = "Distutils",
    !        version = "0.9.1pre",
             description = "Python Distribution Utilities",
             author = "Greg Ward",
    --- 12,16 ----
      
      setup (name = "Distutils",
    !        version = "0.9.1",
             description = "Python Distribution Utilities",
             author = "Greg Ward",
    
    
    
    From python-dev@python.org  Tue Aug 15 14:14:30 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:14:30 -0700
    Subject: [Python-checkins] CVS: distutils/distutils __init__.py,1.9,1.10
    Message-ID: <200008151314.GAA07587@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7500/distutils
    
    Modified Files:
    	__init__.py 
    Log Message:
    Bump version to 0.9.1.
    
    Index: __init__.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/__init__.py,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** __init__.py	2000/07/27 02:17:40	1.9
    --- __init__.py	2000/08/15 13:14:27	1.10
    ***************
    *** 11,13 ****
      __revision__ = "$Id$"
      
    ! __version__ = "0.9.1pre"
    --- 11,13 ----
      __revision__ = "$Id$"
      
    ! __version__ = "0.9.1"
    
    
    
    From python-dev@python.org  Tue Aug 15 14:42:49 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 06:42:49 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,NONE,1.1
    Message-ID: <200008151342.GAA24084@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24004
    
    Added Files:
    	pep-0221.txt 
    Log Message:
    
    Add PEP 221: "Import As", as posted on python-dev.
    
    
    
    ***** Error reading new file(2, 'No such file or directory')
    
    
    From python-dev@python.org  Tue Aug 15 15:29:24 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 07:29:24 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.21,1.22
    Message-ID: <200008151429.HAA06951@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv6930
    
    Modified Files:
    	pep-0000.txt 
    Log Message:
    PEP 221, Import As, assigned Thomas Wouters
    
    
    Index: pep-0000.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
    retrieving revision 1.21
    retrieving revision 1.22
    diff -C2 -r1.21 -r1.22
    *** pep-0000.txt	2000/08/14 14:46:56	1.21
    --- pep-0000.txt	2000/08/15 14:29:21	1.22
    ***************
    *** 46,49 ****
    --- 46,50 ----
       T   219  pep-0219.txt  Stackless Python                      gmcm
       I   220  pep-0220.txt  Coroutines, Generators, Continuations gmcm
    +  S   221  pep-0221.txt  Import As                             twouters
      
      
    
    
    
    From python-dev@python.org  Tue Aug 15 16:49:06 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:49:06 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.105,2.106
    Message-ID: <200008151549.IAA25722@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25706/Python
    
    Modified Files:
    	pythonrun.c 
    Log Message:
    
    When raising a SyntaxError, make a best-effort attempt to set the
    filename and lineno attributes, but do not mask the SyntaxError if we
    fail.
    
    This is part of what is needed to close SoruceForge bug #110628  
    (Jitterbug PR#278).
    
    
    Index: pythonrun.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v
    retrieving revision 2.105
    retrieving revision 2.106
    diff -C2 -r2.105 -r2.106
    *** pythonrun.c	2000/07/22 18:47:25	2.105
    --- pythonrun.c	2000/08/15 15:49:03	2.106
    ***************
    *** 21,24 ****
    --- 21,25 ----
      #include "eval.h"
      #include "marshal.h"
    + #include "osdefs.h"			/* SEP */
      
      #ifdef HAVE_UNISTD_H
    ***************
    *** 1004,1010 ****
      	}
      	w = Py_BuildValue("(sO)", msg, v);
    - 	Py_XDECREF(v);
      	PyErr_SetObject(errtype, w);
      	Py_XDECREF(w);
      }
      
    --- 1005,1028 ----
      	}
      	w = Py_BuildValue("(sO)", msg, v);
      	PyErr_SetObject(errtype, w);
      	Py_XDECREF(w);
    + 
    + 	if (v != NULL) {
    + 		PyObject *exc, *tb;
    + 
    + 		PyErr_Fetch(&errtype, &exc, &tb);
    + 		PyErr_NormalizeException(&errtype, &exc, &tb);
    + 		if (PyObject_SetAttrString(exc, "filename",
    + 					   PyTuple_GET_ITEM(v, 0)))
    + 			PyErr_Clear();
    + 		if (PyObject_SetAttrString(exc, "lineno",
    + 					   PyTuple_GET_ITEM(v, 1)))
    + 			PyErr_Clear();
    + 		if (PyObject_SetAttrString(exc, "offset",
    + 					   PyTuple_GET_ITEM(v, 2)))
    + 			PyErr_Clear();
    + 		Py_DECREF(v);
    + 		PyErr_Restore(errtype, exc, tb);
    + 	}
      }
      
    
    
    
    From python-dev@python.org  Tue Aug 15 16:49:46 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:49:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.123,2.124
    Message-ID: <200008151549.IAA25768@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25760/Python
    
    Modified Files:
    	compile.c 
    Log Message:
    
    When raising a SyntaxError, make a best-effort attempt to set the
    filename and lineno attributes, but do not mask the SyntaxError if we
    fail.
    
    This is part of what is needed to close SoruceForge bug #110628  
    (Jitterbug PR#278).
    
    Wrap a long line to fit in under 80 columns.
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.123
    retrieving revision 2.124
    diff -C2 -r2.123 -r2.124
    *** compile.c	2000/08/13 17:05:17	2.123
    --- compile.c	2000/08/15 15:49:44	2.124
    ***************
    *** 32,35 ****
    --- 32,36 ----
      #include "opcode.h"
      #include "structmember.h"
    + #include "osdefs.h"			/* SEP */
      
      #include 
    ***************
    *** 305,310 ****
      {
      	size_t n = strlen(msg);
    ! 	PyObject *v;
    ! 	char buffer[30];
      	char *s;
      	c->c_errors++;
    --- 306,310 ----
      {
      	size_t n = strlen(msg);
    ! 	PyObject *v, *tb, *tmp;
      	char *s;
      	c->c_errors++;
    ***************
    *** 314,326 ****
      		return;
      	}
    ! 	sprintf(buffer, " (line %d)", c->c_lineno);
    ! 	v = PyString_FromStringAndSize((char *)NULL, n + strlen(buffer));
      	if (v == NULL)
      		return; /* MemoryError, too bad */
    - 	s = PyString_AS_STRING((PyStringObject *)v);
    - 	strcpy(s, msg);
    - 	strcat(s, buffer);
      	PyErr_SetObject(exc, v);
      	Py_DECREF(v);
      }
      
    --- 314,345 ----
      		return;
      	}
    ! 	v = PyString_FromString(msg);
      	if (v == NULL)
      		return; /* MemoryError, too bad */
      	PyErr_SetObject(exc, v);
      	Py_DECREF(v);
    + 
    + 	/* add attributes for the line number and filename for the error */
    + 	PyErr_Fetch(&exc, &v, &tb);
    + 	PyErr_NormalizeException(&exc, &v, &tb);
    + 	tmp = PyInt_FromLong(c->c_lineno);
    + 	if (tmp == NULL)
    + 		PyErr_Clear();
    + 	else {
    + 		if (PyObject_SetAttrString(v, "lineno", tmp))
    + 			PyErr_Clear();
    + 		Py_DECREF(tmp);
    + 	}
    + 	if (c->c_filename != NULL) {
    + 		tmp = PyString_FromString(c->c_filename);
    + 		if (tmp == NULL)
    + 			PyErr_Clear();
    + 		else {
    + 			if (PyObject_SetAttrString(v, "filename", tmp))
    + 				PyErr_Clear();
    + 			Py_DECREF(tmp);
    + 		}
    + 	}
    + 	PyErr_Restore(exc, v, tb);
      }
      
    ***************
    *** 1179,1183 ****
      		if (*pkeywords != NULL) {
      			com_error(c, PyExc_SyntaxError,
    ! 				   "non-keyword arg after keyword arg");
      		}
      		else {
    --- 1198,1202 ----
      		if (*pkeywords != NULL) {
      			com_error(c, PyExc_SyntaxError,
    ! 				  "non-keyword arg after keyword arg");
      		}
      		else {
    ***************
    *** 2998,3002 ****
      		}
      		if (PyDict_GetItem(c->c_locals, nameval)) {
    ! 			com_error(c, PyExc_SyntaxError,"duplicate argument in function definition");
      		}
      		com_newlocal_o(c, nameval);
    --- 3017,3022 ----
      		}
      		if (PyDict_GetItem(c->c_locals, nameval)) {
    ! 			com_error(c, PyExc_SyntaxError,
    ! 				  "duplicate argument in function definition");
      		}
      		com_newlocal_o(c, nameval);
    
    
    
    From python-dev@python.org  Tue Aug 15 16:46:20 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:46:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.12,1.13
    Message-ID: <200008151546.IAA25439@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25426/Python
    
    Modified Files:
    	exceptions.c 
    Log Message:
    
    SyntaxError__str__():  Do more formatting of the exception here, rather
    	than depending on the site that raises the exception.  If the
    	filename and lineno attributes are set on the exception object,
    	use them to augment the message displayed.
    
    This is part of what is needed to close SoruceForge bug #110628
    (Jitterbug PR#278).
    
    
    Index: exceptions.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
    retrieving revision 1.12
    retrieving revision 1.13
    diff -C2 -r1.12 -r1.13
    *** exceptions.c	2000/08/15 00:37:32	1.12
    --- exceptions.c	2000/08/15 15:46:16	1.13
    ***************
    *** 245,249 ****
          PyObject *out;
      
    !     if (!PyArg_ParseTuple(args, "O", &self))
              return NULL;
      
    --- 245,249 ----
          PyObject *out;
      
    !     if (!PyArg_ParseTuple(args, "O:__str__", &self))
              return NULL;
      
    ***************
    *** 283,287 ****
          PyObject *index;
      
    !     if (!PyArg_ParseTuple(args, "OO", &self, &index))
              return NULL;
      
    --- 283,287 ----
          PyObject *index;
      
    !     if (!PyArg_ParseTuple(args, "OO:__getitem__", &self, &index))
              return NULL;
      
    ***************
    *** 525,529 ****
          PyObject *rtnval = NULL;
      
    !     if (!PyArg_ParseTuple(args, "O", &self))
      	return NULL;
          
    --- 525,529 ----
          PyObject *rtnval = NULL;
      
    !     if (!PyArg_ParseTuple(args, "O:__str__", &self))
      	return NULL;
          
    ***************
    *** 735,748 ****
          PyObject *msg;
          PyObject *str;
      
    !     if (!PyArg_ParseTuple(args, "O", &self))
      	return NULL;
      
          if (!(msg = PyObject_GetAttrString(self, "msg")))
      	return NULL;
    !     
          str = PyObject_Str(msg);
          Py_DECREF(msg);
    !     return str;
      }
      
    --- 735,797 ----
          PyObject *msg;
          PyObject *str;
    +     PyObject *filename, *lineno, *result;
      
    !     if (!PyArg_ParseTuple(args, "O:__str__", &self))
      	return NULL;
      
          if (!(msg = PyObject_GetAttrString(self, "msg")))
      	return NULL;
    ! 
          str = PyObject_Str(msg);
          Py_DECREF(msg);
    !     result = str;
    ! 
    !     /* XXX -- do all the additional formatting with filename and
    !        lineno here */
    ! 
    !     if (PyString_Check(str)) {
    ! 	int have_filename = 0;
    ! 	int have_lineno = 0;
    ! 	char *buffer = NULL;
    ! 
    ! 	if (filename = PyObject_GetAttrString(self, "filename"))
    ! 	    have_filename = PyString_Check(filename);
    ! 	else
    ! 	    PyErr_Clear();
    ! 	if (lineno = PyObject_GetAttrString(self, "lineno"))
    ! 	    have_lineno = PyInt_Check(lineno);
    ! 	else
    ! 	    PyErr_Clear();
    ! 
    ! 	if (have_filename || have_lineno) {
    ! 	    int bufsize = (PyString_GET_SIZE(str) + 64 +
    ! 			   PyString_GET_SIZE(filename));
    ! 
    ! 	    buffer = PyMem_Malloc(bufsize);
    ! 	    if (buffer != NULL) {
    ! 		if (have_filename && have_lineno)
    ! 		    sprintf(buffer, "%s (%s, line %d)",
    ! 			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename),
    ! 			    PyInt_AsLong(lineno));
    ! 		else if (have_filename)
    ! 		    sprintf(buffer, "%s (%s)",
    ! 			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename));
    ! 		else if (have_lineno)
    ! 		    sprintf(buffer, "%s (line %d)",
    ! 			    PyString_AS_STRING(str),
    ! 			    PyInt_AsLong(lineno));
    ! 		result = PyString_FromString(buffer);
    ! 		if (result == NULL)
    ! 		    result = str;
    ! 		else
    ! 		    Py_DECREF(str);
    ! 	    }
    ! 	}
    ! 	Py_XDECREF(filename);
    ! 	Py_XDECREF(lineno);
    !     }
    !     return result;
      }
      
    
    
    
    From python-dev@python.org  Tue Aug 15 16:51:20 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:51:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_longexp,1.1,1.2
    Message-ID: <200008151551.IAA25886@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test/output
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25879/Lib/test/output
    
    Modified Files:
    	test_longexp 
    Log Message:
    
    Update test output to reflect change in SyntaxError formatting.
    
    This closes SourceForge bug #110628 (Jitterbug PR#278).
    
    
    Index: test_longexp
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_longexp,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** test_longexp	2000/06/20 19:13:27	1.1
    --- test_longexp	2000/08/15 15:51:18	1.2
    ***************
    *** 1,2 ****
      test_longexp
    ! Caught SyntaxError for long expression: expression too long
    --- 1,2 ----
      test_longexp
    ! Caught SyntaxError for long expression: expression too long (line 1)
    
    
    
    From python-dev@python.org  Tue Aug 15 17:13:40 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 09:13:40 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.124,2.125 pythonrun.c,2.106,2.107
    Message-ID: <200008151613.JAA03346@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3338
    
    Modified Files:
    	compile.c pythonrun.c 
    Log Message:
    
    Remove the osdefs.h #include; it was not needed in the final version of
    my last set of changes.
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.124
    retrieving revision 2.125
    diff -C2 -r2.124 -r2.125
    *** compile.c	2000/08/15 15:49:44	2.124
    --- compile.c	2000/08/15 16:13:37	2.125
    ***************
    *** 32,36 ****
      #include "opcode.h"
      #include "structmember.h"
    - #include "osdefs.h"			/* SEP */
      
      #include 
    --- 32,35 ----
    
    Index: pythonrun.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v
    retrieving revision 2.106
    retrieving revision 2.107
    diff -C2 -r2.106 -r2.107
    *** pythonrun.c	2000/08/15 15:49:03	2.106
    --- pythonrun.c	2000/08/15 16:13:37	2.107
    ***************
    *** 21,25 ****
      #include "eval.h"
      #include "marshal.h"
    - #include "osdefs.h"			/* SEP */
      
      #ifdef HAVE_UNISTD_H
    --- 21,24 ----
    
    
    
    From python-dev@python.org  Tue Aug 15 17:20:38 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 09:20:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.13,1.14
    Message-ID: <200008151620.JAA03951@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3942
    
    Modified Files:
    	exceptions.c 
    Log Message:
    
    my_basename():  Removes the leading path components from a path name,
    	returning a pointer to the start of the file's "base" name;
    	similar to os.path.basename().
    
    SyntaxError__str__():  Use my_basename() to keep the length of the
    	file name included in the exception message short.
    
    
    Index: exceptions.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** exceptions.c	2000/08/15 15:46:16	1.13
    --- exceptions.c	2000/08/15 16:20:36	1.14
    ***************
    *** 20,23 ****
    --- 20,24 ----
      
      #include "Python.h"
    + #include "osdefs.h"
      
      /* Caution:  MS Visual C++ 6 errors if a single string literal exceeds
    ***************
    *** 730,733 ****
    --- 731,754 ----
      
      
    + /* This is called "my_basename" instead of just "basename" to avoid name
    +    conflicts with glibc; basename is already prototyped if _GNU_SOURCE is
    +    defined, and Python does define that. */
    + static char *
    + my_basename(char *name)
    + {
    + 	char *cp = name;
    + 	char *result = name;
    + 
    + 	if (name == NULL)
    + 		return "???";
    + 	while (*cp != '\0') {
    + 		if (*cp == SEP)
    + 			result = cp + 1;
    + 		++cp;
    + 	}
    + 	return result;
    + }
    + 
    + 
      static PyObject *
      SyntaxError__str__(PyObject *self, PyObject *args)
    ***************
    *** 773,782 ****
      		    sprintf(buffer, "%s (%s, line %d)",
      			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename),
      			    PyInt_AsLong(lineno));
      		else if (have_filename)
      		    sprintf(buffer, "%s (%s)",
      			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename));
      		else if (have_lineno)
      		    sprintf(buffer, "%s (line %d)",
    --- 794,803 ----
      		    sprintf(buffer, "%s (%s, line %d)",
      			    PyString_AS_STRING(str),
    ! 			    my_basename(PyString_AS_STRING(filename)),
      			    PyInt_AsLong(lineno));
      		else if (have_filename)
      		    sprintf(buffer, "%s (%s)",
      			    PyString_AS_STRING(str),
    ! 			    my_basename(PyString_AS_STRING(filename)));
      		else if (have_lineno)
      		    sprintf(buffer, "%s (line %d)",
    
    
    
    From python-dev@python.org  Tue Aug 15 17:41:29 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 09:41:29 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules binascii.c,2.25,2.26
    Message-ID: <200008151641.JAA05707@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5453/python/dist/src/Modules
    
    Modified Files:
    	binascii.c 
    Log Message:
    Fix new compiler warnings.  Unused var in compile.c.  Argsize mismatches
    in binascii.c (only on platforms with signed chars -- although Py_CHARMASK
    is documented as returning an int, it only does so on platforms with
    signed chars).
    
    
    Index: binascii.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v
    retrieving revision 2.25
    retrieving revision 2.26
    diff -C2 -r2.25 -r2.26
    *** binascii.c	2000/08/15 06:59:58	2.25
    --- binascii.c	2000/08/15 16:41:26	2.26
    ***************
    *** 919,923 ****
      
      static int
    ! to_int(char c) 
      {
      	if (isdigit(c))
    --- 919,923 ----
      
      static int
    ! to_int(int c) 
      {
      	if (isdigit(c))
    
    
    
    From python-dev@python.org  Tue Aug 15 17:41:29 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 09:41:29 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.125,2.126
    Message-ID: <200008151641.JAA05711@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5453/python/dist/src/Python
    
    Modified Files:
    	compile.c 
    Log Message:
    Fix new compiler warnings.  Unused var in compile.c.  Argsize mismatches
    in binascii.c (only on platforms with signed chars -- although Py_CHARMASK
    is documented as returning an int, it only does so on platforms with
    signed chars).
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.125
    retrieving revision 2.126
    diff -C2 -r2.125 -r2.126
    *** compile.c	2000/08/15 16:13:37	2.125
    --- compile.c	2000/08/15 16:41:26	2.126
    ***************
    *** 306,310 ****
      	size_t n = strlen(msg);
      	PyObject *v, *tb, *tmp;
    - 	char *s;
      	c->c_errors++;
      	if (c->c_lineno <= 1) {
    --- 306,309 ----
    
    
    
    From python-dev@python.org  Tue Aug 15 18:09:23 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 10:09:23 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.11,1.12
    Message-ID: <200008151709.KAA15766@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15756
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    added gettext module under proposed section
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** pep-0200.txt	2000/08/15 08:05:42	1.11
    --- pep-0200.txt	2000/08/15 17:09:19	1.12
    ***************
    *** 216,219 ****
    --- 216,222 ----
            loops. (Without adding a new keyword.)
      
    +     * Integrated gettext module - Barry Warsaw
    +       wrapper around standard internationalization libraries
    + 
      
      Declined
    
    
    
    From python-dev@python.org  Tue Aug 15 18:47:17 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 10:47:17 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libbinascii.tex,1.18,1.19
    Message-ID: <200008151747.KAA18665@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv18655/lib
    
    Modified Files:
    	libbinascii.tex 
    Log Message:
    
    Fix markup bug that prevented formatting.
    
    Adjusted some markup for consistency with the rest of the documentation
    and creation of the proper index entries.
    
    
    Index: libbinascii.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libbinascii.tex,v
    retrieving revision 1.18
    retrieving revision 1.19
    diff -C2 -r1.18 -r1.19
    *** libbinascii.tex	2000/08/15 06:08:00	1.18
    --- libbinascii.tex	2000/08/15 17:47:09	1.19
    ***************
    *** 86,102 ****
       
      \begin{funcdesc}{b2a_hex}{data}
      Return the hexadecimal representation of the binary \var{data}.  Every
      byte of \var{data} is converted into the corresponding 2-digit hex
    ! representation.  The resulting string is therefore, twice as long as
    ! the length of \var{data}.  This function is also available as
    ! \function{hexlify()}.
      \end{funcdesc}
      
      \begin{funcdesc}{a2b_hex}{hexstr}
      Return the binary data represented by the hexadecimal string
      \var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
      \var{hexstr} must contain an even number of hexadecimal digits (which
      can be upper or lower case), otherwise a \exception{TypeError} is
    ! raised.  This function is also available as \function{unhexlify()}.
      
      \begin{excdesc}{Error}
    --- 86,104 ----
       
      \begin{funcdesc}{b2a_hex}{data}
    + \funcline{hexlify}{data}
      Return the hexadecimal representation of the binary \var{data}.  Every
      byte of \var{data} is converted into the corresponding 2-digit hex
    ! representation.  The resulting string is therefore twice as long as
    ! the length of \var{data}.
      \end{funcdesc}
      
      \begin{funcdesc}{a2b_hex}{hexstr}
    + \funcline{unhexlify}{hexstr}
      Return the binary data represented by the hexadecimal string
      \var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
      \var{hexstr} must contain an even number of hexadecimal digits (which
      can be upper or lower case), otherwise a \exception{TypeError} is
    ! raised.
    ! \end{funcdesc}
      
      \begin{excdesc}{Error}
    ***************
    *** 112,119 ****
      
      \begin{seealso}
    !   \seemodule{base64}{support for base64 encoding used in MIME email messages}
      
    !   \seemodule{binhex}{support for the binhex format used on the Macintosh}
      
    !   \seemodule{uu}{support for UU encoding used on \UNIX{}}
      \end{seealso}
    --- 114,121 ----
      
      \begin{seealso}
    !   \seemodule{base64}{Support for base64 encoding used in MIME email messages.}
      
    !   \seemodule{binhex}{Support for the binhex format used on the Macintosh.}
      
    !   \seemodule{uu}{Support for UU encoding used on \UNIX.}
      \end{seealso}
    
    
    
    From python-dev@python.org  Tue Aug 15 18:54:51 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 10:54:51 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.32,1.33
    Message-ID: <200008151754.KAA19233@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/ref
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv19223/ref
    
    Modified Files:
    	ref5.tex 
    Log Message:
    
    Thomas Wouters :
    Update the grammar to reflect the most recent changes to list
    comprehensions.
    
    
    Index: ref5.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v
    retrieving revision 1.32
    retrieving revision 1.33
    diff -C2 -r1.32 -r1.33
    *** ref5.tex	2000/08/12 18:09:50	1.32
    --- ref5.tex	2000/08/15 17:54:49	1.33
    ***************
    *** 153,157 ****
      
      \begin{verbatim}
    ! list_display:   "[" [expression_list [list_iter]] "]"
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    --- 153,158 ----
      
      \begin{verbatim}
    ! list_display:   "[" [listmaker] "]"
    ! listmaker:   expression_list ( list_iter | ( "," expression)* [","] )
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    
    
    
    From python-dev@python.org  Tue Aug 15 19:44:24 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:44:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.33,1.34
    Message-ID: <200008151844.LAA30960@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/ref
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30948/ref
    
    Modified Files:
    	ref5.tex 
    Log Message:
    
    Fix error made in applying Thomas's patch.
    
    
    Index: ref5.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v
    retrieving revision 1.33
    retrieving revision 1.34
    diff -C2 -r1.33 -r1.34
    *** ref5.tex	2000/08/15 17:54:49	1.33
    --- ref5.tex	2000/08/15 18:44:10	1.34
    ***************
    *** 154,158 ****
      \begin{verbatim}
      list_display:   "[" [listmaker] "]"
    ! listmaker:   expression_list ( list_iter | ( "," expression)* [","] )
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    --- 154,158 ----
      \begin{verbatim}
      list_display:   "[" [listmaker] "]"
    ! listmaker:   expression ( list_iter | ( "," expression)* [","] )
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    
    
    
    From python-dev@python.org  Tue Aug 15 19:52:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:52:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.165,2.166 pwdmodule.c,1.22,1.23 timemodule.c,2.100,2.101
    Message-ID: <200008151852.LAA31613@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31586/Modules
    
    Modified Files:
    	posixmodule.c pwdmodule.c timemodule.c 
    Log Message:
    
    Chris Herborth :
    Minor updates for BeOS R5.
    
    Use of OSError in test.test_fork1 changed to TestSkipped, with corresponding
    change in BeOS/README (by Fred).
    
    This closes SourceForge patch #100978.
    
    
    Index: posixmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v
    retrieving revision 2.165
    retrieving revision 2.166
    diff -C2 -r2.165 -r2.166
    *** posixmodule.c	2000/08/15 00:46:38	2.165
    --- posixmodule.c	2000/08/15 18:52:33	2.166
    ***************
    *** 3621,3629 ****
      Change or add an environment variable.";
      
    - #ifdef __BEOS__
    - /* We have putenv(), but not in the headers (as of PR2). - [cjh] */
    - int putenv( const char *str );
    - #endif
    - 
      /* Save putenv() parameters as values here, so we can collect them when they
       * get re-set with another call for the same key. */
    --- 3621,3624 ----
    
    Index: pwdmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v
    retrieving revision 1.22
    retrieving revision 1.23
    diff -C2 -r1.22 -r1.23
    *** pwdmodule.c	2000/08/03 02:34:44	1.22
    --- pwdmodule.c	2000/08/15 18:52:33	1.23
    ***************
    *** 30,40 ****
      mkpwent(struct passwd *p)
      {
    - #ifdef __BEOS__
    - 	/* For faking the GECOS field. - [cjh] */
    - 	char *be_user = NULL;
    - 
    - 	be_user = getenv( "USER" );
    - #endif
    - 
      	return Py_BuildValue(
      		"(ssllsss)",
    --- 30,33 ----
    ***************
    *** 50,59 ****
      		(long)p->pw_gid,
      #endif
    - #ifdef __BEOS__
    - /* BeOS doesn't have a GECOS field, oddly enough. - [cjh] */
    - 		be_user ? be_user : "baron",
    - #else
      		p->pw_gecos,
    - #endif
      		p->pw_dir,
      		p->pw_shell);
    --- 43,47 ----
    
    Index: timemodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v
    retrieving revision 2.100
    retrieving revision 2.101
    diff -C2 -r2.100 -r2.101
    *** timemodule.c	2000/08/03 02:34:44	2.100
    --- timemodule.c	2000/08/15 18:52:33	2.101
    ***************
    *** 71,81 ****
      
      #ifdef __BEOS__
      /* For bigtime_t, snooze(). - [cjh] */
      #include 
      #include 
    - #ifndef CLOCKS_PER_SEC
    - /* C'mon, fix the bloody headers... - [cjh] */
    - #define CLOCKS_PER_SEC 1000
    - #endif
      #endif
      
    --- 71,78 ----
      
      #ifdef __BEOS__
    + #include 
      /* For bigtime_t, snooze(). - [cjh] */
      #include 
      #include 
      #endif
      
    
    
    
    From python-dev@python.org  Tue Aug 15 19:52:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:52:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_fork1.py,1.5,1.6
    Message-ID: <200008151852.LAA31605@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31586/Lib/test
    
    Modified Files:
    	test_fork1.py 
    Log Message:
    
    Chris Herborth :
    Minor updates for BeOS R5.
    
    Use of OSError in test.test_fork1 changed to TestSkipped, with corresponding
    change in BeOS/README (by Fred).
    
    This closes SourceForge patch #100978.
    
    
    Index: test_fork1.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_fork1.py,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** test_fork1.py	2000/08/04 13:34:43	1.5
    --- test_fork1.py	2000/08/15 18:52:33	1.6
    ***************
    *** 7,14 ****
    --- 7,23 ----
      active threads survive in the child after a fork(); this is an error.
      
    + On BeOS, you CANNOT mix threads and fork(), the behaviour is undefined.
    + That's OK, fork() is a grotesque hack anyway. ;-) [cjh]
    + 
      """
      
      import os, sys, time, thread
      from test_support import TestSkipped
    + 
    + try:
    +     if os.uname()[0] == "BeOS":
    +         raise TestSkipped, "can't mix os.fork with threads on BeOS"
    + except AttributeError:
    +     pass
      
      try:
    
    
    
    From python-dev@python.org  Tue Aug 15 19:52:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:52:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/BeOS README,1.8,1.9 linkmodule,1.3,1.4
    Message-ID: <200008151852.LAA31601@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/BeOS
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31586/BeOS
    
    Modified Files:
    	README linkmodule 
    Log Message:
    
    Chris Herborth :
    Minor updates for BeOS R5.
    
    Use of OSError in test.test_fork1 changed to TestSkipped, with corresponding
    change in BeOS/README (by Fred).
    
    This closes SourceForge patch #100978.
    
    
    Index: README
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/BeOS/README,v
    retrieving revision 1.8
    retrieving revision 1.9
    diff -C2 -r1.8 -r1.9
    *** README	1999/01/12 20:30:21	1.8
    --- README	2000/08/15 18:52:33	1.9
    ***************
    *** 1,3 ****
    ! Python 1.5.x (x > 1) for BeOS
      
      This directory contains several useful things to help you build your own
    --- 1,3 ----
    ! Python for BeOS R5
      
      This directory contains several useful things to help you build your own
    ***************
    *** 46,66 ****
      
         Make sure you use _socket instead of socket for the name of the
    !    socketmodule on BeOS.
      
         If you want the modules to be built as shared libraries, instead of as
         part of the Python shared library, be sure to uncomment the #*shared*
    !    line.
      
         I've tried the following modules:
      
    !    regex pcre posix signal readline array cmath math strop struct time
    !    operator _locale fcntl pwd grp select _socket errno crypt termios
    !    audioop imageop rgbimg md5 timing rotor syslog curses new gdbm soundex
    !    binascii parser cStringIO cPickle zlib
         
    !    Note that some of these (readline, curses, gdbm, and zlib) require extra
    !    libraries that aren't supplied with Python.  If you don't have the extra
    !    libs (you can probably get them from GeekGadgets), don't try to use
    !    these modules; they won't compile.
      
      5) Make:
    --- 46,68 ----
      
         Make sure you use _socket instead of socket for the name of the
    !    socketmodule on BeOS (at least, until we get the new BONE networking).
      
         If you want the modules to be built as shared libraries, instead of as
         part of the Python shared library, be sure to uncomment the #*shared*
    !    line.  I haven't done much testing with static linking, it's not as
    !    interesting.
      
         I've tried the following modules:
      
    !    array audioop binascii cmath _codecs cPickle crypt cStringIO _curses
    !    errno fcntl gdbm grp imageop _locale math md5 new operator parser
    !    pcre posix pwd pyexpat readline regex rgbimg rotor select sha signal
    !    _socket soundex _sre strop struct syslog termios time timing ucnhash
    !    unicodedata zlib
         
    !    Note that some of these require extra libraries that aren't supplied 
    !    with Python.  If you don't have the extra libs (you can probably get 
    !    them from GeekGadgets), don't try to use these modules; they won't 
    !    compile.
      
      5) Make:
    ***************
    *** 72,86 ****
         make test
      
         Expect the following errors:
      
    !    test_grp crashed -- exceptions.KeyError : getgrnam(): name not found
    !    test_pwd failed -- Writing: 'fakename', expected: 'caught e'
    !    test_socket crashed -- exceptions.AttributeError : SOCK_RAW
      
         These are all due to either partial support for certain things (like
         sockets), or valid differences between systems.
      
    !    NOTE: On R4/x86, the pause() function is broken; expect the signal
    !          module test to crash Python!
      
      7) Install:
    --- 74,116 ----
         make test
      
    +    test_popen2 will probably hang; it's deadlocked on a semaphore.  I should
    +    probably disable popen2 support... it uses fork(), and fork() doesn't mix
    +    with threads on BeOS.  In *THEORY* you could use it in a single-threaded
    +    program, but I haven't tried.
    +    
    +    If test_popen2 does hang, you can find the semaphore it's hung on via the
    +    "ps" command.  Look for python and you'll find something like this:
    +    
    + ./python -tt ../src/Lib/test/regrtest.py (team 26922) (uid 0) (gid 0)
    +   39472               python  sem  10    3785    1500 piperd(360526)
    + ./python -tt ../src/Lib/test/regrtest.py (team 26923) (uid 0) (gid 0)
    +   39477               python  sem  10      25       4 python lock (1)(360022)
    +                                                                       ^^^^^^
    +    That last number is the semaphore the fork()'d python is stuck on
    +    (see how it's helpfully called "python lock (1)"? :-).  You can unblock
    +    that semaphore to let the tests continue using the "release" command
    +    with that semaphore number.  Be _very_ careful with "release" though,
    +    releasing the wrong semaphore can be hazardous.
    + 
         Expect the following errors:
    + 
    +    test * skipped -- an optional feature could not be imported (you'll see
    +                      quite a few of these, based on what optional modules
    +                      you've included)
    + 
    +    test test_fork1 skipped -- can't mix os.fork with  threads on BeOS
    + 
    +    test test_re failed -- Writing: '=== Failed incorrectly', expected: 
    +                           "('abc', 'abc', 0, 'fou"
    + 
    +    test test_select crashed -- select.error : (-2147459072, 'Bad file 
    +                                descriptor')
      
    !    test test_socket crashed -- exceptions.AttributeError : SOCK_RAW
      
         These are all due to either partial support for certain things (like
         sockets), or valid differences between systems.
      
    !    That test_re failure is a little worrysome though.
      
      7) Install:
    ***************
    *** 90,93 ****
      8) Enjoy!
      
    ! - Chris Herborth (chrish@beoscentral.com)
    !   January 12, 1999
    --- 120,123 ----
      8) Enjoy!
      
    ! - Chris Herborth (chrish@pobox.com)
    !   July 21, 2000
    
    Index: linkmodule
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/BeOS/linkmodule,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** linkmodule	1999/03/24 17:46:40	1.3
    --- linkmodule	2000/08/15 18:52:33	1.4
    ***************
    *** 47,51 ****
      # libs are overkill for most of the standard modules, but it makes life
      # in this shell script easier.
    ! LIBS="-L.. -lpython1.5 -lbe -lnet -lroot"
      
      case $BE_HOST_CPU in
    --- 47,51 ----
      # libs are overkill for most of the standard modules, but it makes life
      # in this shell script easier.
    ! LIBS="-L.. -lpython$VERSION -lbe -lnet -lroot"
      
      case $BE_HOST_CPU in
    
    
    
    From python-dev@python.org  Tue Aug 15 20:30:38 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 12:30:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsocket.tex,1.46,1.47
    Message-ID: <200008151930.MAA10234@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9148/Doc/lib
    
    Modified Files:
    	libsocket.tex 
    Log Message:
    
    Apply SF patch #101151, by Peter S-K, which fixes smtplib's passing of the
    'helo' and 'ehlo' message, and exports the 'make_fqdn' function. This
    function should be moved to socket.py, if that module ever gets a Python
    wrapper.
    
    
    
    Index: libsocket.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsocket.tex,v
    retrieving revision 1.46
    retrieving revision 1.47
    diff -C2 -r1.46 -r1.47
    *** libsocket.tex	2000/07/06 18:37:08	1.46
    --- libsocket.tex	2000/08/15 19:30:35	1.47
    ***************
    *** 137,140 ****
    --- 137,142 ----
      To find the fully qualified domain name, check \var{hostname} and the
      items of \var{aliaslist} for an entry containing at least one period.
    + An implementation of this algorithm can be found in the module
    + \module{smtplib} in form of the \function{make_fqdn()} function.
      \end{funcdesc}
      
    
    
    
    From python-dev@python.org  Tue Aug 15 20:30:38 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 12:30:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib smtplib.py,1.26,1.27
    Message-ID: <200008151930.MAA10238@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9148/Lib
    
    Modified Files:
    	smtplib.py 
    Log Message:
    
    Apply SF patch #101151, by Peter S-K, which fixes smtplib's passing of the
    'helo' and 'ehlo' message, and exports the 'make_fqdn' function. This
    function should be moved to socket.py, if that module ever gets a Python
    wrapper.
    
    
    
    Index: smtplib.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/smtplib.py,v
    retrieving revision 1.26
    retrieving revision 1.27
    diff -C2 -r1.26 -r1.27
    *** smtplib.py	2000/08/10 14:02:23	1.26
    --- smtplib.py	2000/08/15 19:30:36	1.27
    ***************
    *** 134,152 ****
              re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
      
    ! def _get_fqdn_hostname(name):
          name = string.strip(name)
          if len(name) == 0:
              name = socket.gethostname()
    !         try:
    !             hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
    !         except socket.error:
    !             pass
              else:
    !             aliases.insert(0, hostname)
    !             for name in aliases:
    !                 if '.' in name:
    !                     break
    !             else:
    !                 name = hostname
          return name
      
    --- 134,160 ----
              re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
      
    ! def make_fqdn(name = ''):
    !     """Get fully qualified domain name from name.
    ! 
    !     An empty argument is interpreted as meaning the local host.
    ! 
    !     First the hostname returned by socket.gethostbyaddr()
    !     is checked, then possibly existing aliases. In case
    !     no FQDN is available, hostname is returned.
    !     """
          name = string.strip(name)
          if len(name) == 0:
              name = socket.gethostname()
    !     try:
    !         hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
    !     except socket.error:
    !         pass
    !     else:
    !         aliases.insert(0, hostname)
    !         for name in aliases:
    !             if '.' in name:
    !                 break
              else:
    !             name = hostname
          return name
      
    ***************
    *** 307,311 ****
              host.
              """
    !         self.putcmd("helo", _get_fqdn_hostname(name))
              (code,msg)=self.getreply()
              self.helo_resp=msg
    --- 315,322 ----
              host.
              """
    !         if name:
    !             self.putcmd("helo", name)
    !         else:
    !             self.putcmd("helo", make_fqdn())
              (code,msg)=self.getreply()
              self.helo_resp=msg
    ***************
    *** 317,321 ****
              host.
              """
    !         self.putcmd("ehlo", _get_fqdn_hostname(name))
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    --- 328,335 ----
              host.
              """
    !         if name:
    !             self.putcmd("ehlo", name)
    !         else:
    !             self.putcmd("ehlo", make_fqdn())
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    
    
    
    From python-dev@python.org  Tue Aug 15 23:34:02 2000
    From: python-dev@python.org (Mark Hammond)
    Date: Tue, 15 Aug 2000 15:34:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.44,1.45
    Message-ID: <200008152234.PAA01319@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/PC
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1246
    
    Modified Files:
    	config.h 
    Log Message:
    From Rene Liebscher:
    This patch makes it possible to use gnu-win32 and lcc-win32 
    (http://www.cs.virginia.edu/~lcc-win32/) compilers to build 
    extension modules. It adds compiler specific sections to
    PC/config.h .
    It also extends the Borland compiler section. This has then two parts,
    one for Win32 and the other one for the rest. The Win32 part 
    should be almost complete.
    
    *** This patch is not intended to make it possible to compile
         Python with these compilers, it is intended to be able to
         use these compilers to build extension modules. ****
    
    
    Index: config.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
    retrieving revision 1.44
    retrieving revision 1.45
    diff -C2 -r1.44 -r1.45
    *** config.h	2000/08/07 20:16:28	1.44
    --- config.h	2000/08/15 22:33:59	1.45
    ***************
    *** 27,37 ****
      */
      
    - /* Suggested by Rene Liebscher  to avoid a GCC 2.91.*
    -    bug that requires structure imports.  More recent versions of the
    -    compiler don't exhibit this bug.
    - */
    - #if (__GNUC__==2) && (__GNUC_MINOR__<=91)
    - #warning "Please use an up-to-date version of gcc! (>2.91 recommended)"
    - #endif
      
      /*
    --- 27,30 ----
    ***************
    *** 231,242 ****
      #ifdef __BORLANDC__
      #define COMPILER "[Borland]"
    - #define PYTHONPATH ".;.\\lib;.\\lib\\plat-win;.\\lib\\dos-8x3"
    - #define IMPORT_8x3_NAMES
      #define HAVE_CLOCK
      #define HAVE_STRFTIME
      #ifdef USE_DL_IMPORT
      #define DL_IMPORT(RTYPE)  RTYPE __import
      #endif
      #endif /* BORLANDC */
      
      /* End of compilers - finish up */
    --- 224,379 ----
      #ifdef __BORLANDC__
      #define COMPILER "[Borland]"
      #define HAVE_CLOCK
      #define HAVE_STRFTIME
    + 
    + #ifdef _WIN32
    + 
    + /* tested with BCC 5.5 (__BORLANDC__ >= 0x0550)
    +  */
    + #define NT	/* NT is obsolete - please use MS_WIN32 instead */
    + #define MS_WIN32
    + #define MS_WINDOWS
    + 
    + /* For NT the Python core is in a DLL by default.  Test the
    + standard macro MS_COREDLL to find out.  If you have an exception
    + you must define MS_NO_COREDLL (do not test this macro) */
    + #ifndef MS_NO_COREDLL
    + #define MS_COREDLL	/* Python core is in a DLL */
    + #ifndef USE_DL_EXPORT
    + #define USE_DL_IMPORT
    + #endif /* !USE_DL_EXPORT */
    + #endif /* !MS_NO_COREDLL */
    + 
    + #define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
    + typedef int pid_t;
    + #define WORD_BIT 32
    + #include 
    + #define HAVE_STRERROR
    + #define NT_THREADS
    + #define WITH_THREAD
    + #ifndef NETSCAPE_PI
    + #define USE_SOCKET
    + #endif
    + /* BCC55 seems to understand __declspec(dllimport), it is used in its
    +    own header files (winnt.h, ...) */
    + #ifdef USE_DL_IMPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
    + #endif
    + #ifdef USE_DL_EXPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
    + #define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
    + #endif
    + 
    + #define HAVE_LONG_LONG 1
    + #define LONG_LONG __int64
    + 
    + #else /* !_WIN32 */
    + /* XXX These defines are likely incomplete, but should be easy to fix. */
    + 
    + #define PYTHONPATH ".;.\\lib;.\\lib\\plat-win;.\\lib\\dos-8x3"
    + #define IMPORT_8x3_NAMES
      #ifdef USE_DL_IMPORT
      #define DL_IMPORT(RTYPE)  RTYPE __import
      #endif
    + 
    + #endif /* !_WIN32 */
    + 
      #endif /* BORLANDC */
    + 
    + /* egcs/gnu-win32 defines __GNUC__ and _WIN32 */
    + #if defined(__GNUC__) && defined(_WIN32)
    + /* XXX These defines are likely incomplete, but should be easy to fix. 
    +    They should be complete enough to build extension modules. */
    + /* Suggested by Rene Liebscher  to avoid a GCC 2.91.*
    +    bug that requires structure imports.  More recent versions of the
    +    compiler don't exhibit this bug.
    + */
    + #if (__GNUC__==2) && (__GNUC_MINOR__<=91)
    + #warning "Please use an up-to-date version of gcc! (>2.91 recommended)"
    + #endif
    + 
    + #define NT	/* NT is obsolete - please use MS_WIN32 instead */
    + #define MS_WIN32
    + #define MS_WINDOWS
    + 
    + /* For NT the Python core is in a DLL by default.  Test the
    + standard macro MS_COREDLL to find out.  If you have an exception
    + you must define MS_NO_COREDLL (do not test this macro) */
    + #ifndef MS_NO_COREDLL
    + #define MS_COREDLL	/* Python core is in a DLL */
    + #ifndef USE_DL_EXPORT
    + #define USE_DL_IMPORT
    + #endif /* !USE_DL_EXPORT */
    + #endif /* !MS_NO_COREDLL */
    + 
    + #define COMPILER "[gcc]"
    + #define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
    + #define WORD_BIT 32
    + #define hypot _hypot
    + #include 
    + #define HAVE_CLOCK
    + #define HAVE_STRFTIME
    + #define HAVE_STRERROR
    + #define NT_THREADS
    + #define WITH_THREAD
    + #ifndef NETSCAPE_PI
    + #define USE_SOCKET
    + #endif
    + #ifdef USE_DL_IMPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
    + #endif
    + #ifdef USE_DL_EXPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
    + #define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
    + #endif
    + 
    + #define HAVE_LONG_LONG 1
    + #define LONG_LONG long long 
    + #endif /* GNUC */
    + 
    + /* lcc-win32 defines __LCC__ */
    + 
    + #if defined(__LCC__)
    + /* XXX These defines are likely incomplete, but should be easy to fix. 
    +    They should be complete enough to build extension modules. */
    + 
    + #define NT	/* NT is obsolete - please use MS_WIN32 instead */
    + #define MS_WIN32
    + #define MS_WINDOWS
    + 
    + /* For NT the Python core is in a DLL by default.  Test the
    + standard macro MS_COREDLL to find out.  If you have an exception
    + you must define MS_NO_COREDLL (do not test this macro) */
    + #ifndef MS_NO_COREDLL
    + #define MS_COREDLL	/* Python core is in a DLL */
    + #ifndef USE_DL_EXPORT
    + #define USE_DL_IMPORT
    + #endif /* !USE_DL_EXPORT */
    + #endif /* !MS_NO_COREDLL */
    + 
    + #define COMPILER "[lcc-win32]"
    + #define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
    + typedef int pid_t;
    + #define WORD_BIT 32
    + #include 
    + #define HAVE_CLOCK
    + #define HAVE_STRFTIME
    + #define HAVE_STRERROR
    + #define NT_THREADS
    + #define WITH_THREAD
    + #ifndef NETSCAPE_PI
    + #define USE_SOCKET
    + #endif
    + #ifdef USE_DL_IMPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
    + #endif
    + #ifdef USE_DL_EXPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
    + #define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
    + #endif
    + 
    + #define HAVE_LONG_LONG 1
    + #define LONG_LONG __int64
    + #endif /* LCC */
      
      /* End of compilers - finish up */
    
    
    
    From python-dev@python.org  Tue Aug 15 23:45:09 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 15:45:09 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.1,1.2
    Message-ID: <200008152245.PAA12822@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv12763
    
    Modified Files:
    	pep-0214.txt 
    Log Message:
    Updated discussion, including two open issues.  I've also changed the
    Python-Version to 2.1 since this probably needs more discussion,
    unless the BDFL pronounces favorably on it.
    
    
    Index: pep-0214.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** pep-0214.txt	2000/07/24 17:38:35	1.1
    --- pep-0214.txt	2000/08/15 22:45:06	1.2
    ***************
    *** 2,11 ****
      Title: Extended Print Statement
      Version: $Revision$
    ! Owner: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.0
      Status: Draft
      
      
    - 
      Introduction
      
    --- 2,12 ----
      Title: Extended Print Statement
      Version: $Revision$
    ! Author: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.1
      Status: Draft
    + Created: 24-Jul-2000
    + Post-History:
      
      
      Introduction
      
    ***************
    *** 21,25 ****
      
      
    - 
      Justification
      
    --- 22,25 ----
    ***************
    *** 53,58 ****
          to stdout, this output too would get redirected to the logfile.
      
      
    ! 
      Proposal
      
    --- 53,60 ----
          to stdout, this output too would get redirected to the logfile.
      
    +     This approach is also very inconvenient for interleaving prints to
    +     various output streams.
      
    ! 
      Proposal
      
    ***************
    *** 74,100 ****
              print >> sys.stdout, 'hello world'
      
      
    - 
      Reference Implementation
      
          A reference implementation, in the form of a patch against the
          Python 2.0 source tree, is available on SourceForge's patch
    !     manager[2].  The approach this patch takes is to introduce two new
    !     opcodes, one which temporarily rebinds sys.stdout to the specified
    !     file object, performs the print as normal, and then bind
    !     sys.stdout back to sys.__stdout__ (which is the real physical
    !     standard out and should not be changed).  In some ways this is
    !     equivalent to the try/finally idiom above, except that the
    !     rebinding of sys.stdout is in effect only for the duration of the
    !     print statement itself.
    ! 
    !     An alternative approach is possible, where only one new opcode is
    !     added.  This opcode would be exactly like the existing PRINT_ITEM
    !     opcode except that it would find the target file object at the top
    !     of the stack, and use this file instead of digging it out of
    !     sys.stdout.
      
      
    - 
      Alternative Approaches
      
    --- 76,116 ----
              print >> sys.stdout, 'hello world'
      
    + 
    + Open Issues
    + 
    +     What should the following do?
    + 
    +         print >> file
    +         print >> file,
    + 
    +     In the current implementation (see below), the first is a
    +     SyntaxError and the second prints nothing to file.  This is likely
    +     counterintuitive; the first should print just a newline, making
    +     these equivalent:
    + 
    +         print >> sys.stdout
    +         print
    + 
    +     The second should print just a space and no newline to file.  It
    +     doesn't have a non-extended print equivalent, since this is
    +     illegal:
    + 
    +         print ,
    + 
    +     The closes equivalent is:
    + 
    +         print '',
    +     
      
      Reference Implementation
      
          A reference implementation, in the form of a patch against the
          Python 2.0 source tree, is available on SourceForge's patch
    !     manager[2].  This approach adds two new opcodes, PRINT_ITEM_TO and
    !     PRINT_NEWLINE_TO, which simply pop the file like object off the
    !     top of the stack and use it instead of sys.stdout as the output
    !     stream.
      
      
      Alternative Approaches
      
    ***************
    *** 140,144 ****
      
      
    - 
      References
      
    --- 156,159 ----
    
    
    
    From python-dev@python.org  Wed Aug 16 04:17:21 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 20:17:21 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.12,1.13
    Message-ID: <200008160317.UAA27313@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27268/python/nondist/peps
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Record new test_longexp bug.  Move augmented assignments to "in progress".
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.12
    retrieving revision 1.13
    diff -C2 -r1.12 -r1.13
    *** pep-0200.txt	2000/08/15 17:09:19	1.12
    --- pep-0200.txt	2000/08/16 03:17:18	1.13
    ***************
    *** 91,94 ****
    --- 91,103 ----
          test case         platform   R B    date reported
          ---------         --------   - -    -------------
    +     test_longexp      Win98+?    ? ?    15-Aug-2000
    +         [fails in release build,
    +          passes in release build under verbose mode but doesn't
    +              look like it should pass,
    +          passes in debug build,
    +          passes in debug build under verbose mode and looks like
    +              it should pass
    +         ]
    + 
          test_winreg2      Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    ***************
    *** 174,177 ****
    --- 183,189 ----
            [note: it's not confusing to Guido  - tim]
      
    +     * Augmented assignment - Thomas Wouters
    +       Add += and family, plus Python and C hooks, and API functions.
    + 
      
      Open: proposed but not accepted or declined
    ***************
    *** 197,203 ****
            - http://www.python.org/pipermail/python-dev/1999-August/002252.html
      
    -     * Augmented assignment - Thomas Wouters
    -       Add += and family, plus Python and C hooks, and API functions.
    - 
          * "import as" - Thomas Wouters
            Extend the 'import' and 'from ... import' mechanism to enable
    --- 209,212 ----
    ***************
    *** 211,215 ****
            for normal slices as well as for extended ones. First step: use
            getitem if there is no getslice.
    !       
          * 'indexing-for' - Thomas Wouters
            Special syntax to give Python code access to the loop-counter in 'for'
    --- 220,224 ----
            for normal slices as well as for extended ones. First step: use
            getitem if there is no getslice.
    ! 
          * 'indexing-for' - Thomas Wouters
            Special syntax to give Python code access to the loop-counter in 'for'
    
    
    
    From python-dev@python.org  Wed Aug 16 13:22:28 2000
    From: python-dev@python.org (A.M. Kuchling)
    Date: Wed, 16 Aug 2000 05:22:28 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Include myproto.h,2.10,NONE myselect.h,2.14,NONE mytime.h,2.8,NONE mymalloc.h,2.26,NONE mymath.h,2.14,NONE
    Message-ID: <200008161222.FAA32293@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Include
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31010
    
    Removed Files:
    	myproto.h myselect.h mytime.h mymalloc.h mymath.h 
    Log Message:
    Deleted now-unused include files
    
    
    
    
    
    
    
    
    
    From python-dev@python.org  Wed Aug 16 13:24:54 2000
    From: python-dev@python.org (A.M. Kuchling)
    Date: Wed, 16 Aug 2000 05:24:54 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.94,2.95
    Message-ID: <200008161224.FAA03310@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2102
    
    Modified Files:
    	object.c 
    Log Message:
    Updated comment
    
    
    Index: object.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
    retrieving revision 2.94
    retrieving revision 2.95
    diff -C2 -r2.94 -r2.95
    *** object.c	2000/08/15 03:34:48	2.94
    --- object.c	2000/08/16 12:24:51	2.95
    ***************
    *** 1005,1009 ****
      
      
    ! /* Python's malloc wrappers (see mymalloc.h) */
      
      void *
    --- 1005,1009 ----
      
      
    ! /* Python's malloc wrappers (see pymem.h) */
      
      void *
    
    
    
    From python-dev@python.org  Wed Aug 16 13:27:26 2000
    From: python-dev@python.org (A.M. Kuchling)
    Date: Wed, 16 Aug 2000 05:27:26 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Include objimpl.h,2.25,2.26
    Message-ID: <200008161227.FAA06941@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Include
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5970
    
    Modified Files:
    	objimpl.h 
    Log Message:
    Updated comment
    
    
    Index: objimpl.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Include/objimpl.h,v
    retrieving revision 2.25
    retrieving revision 2.26
    diff -C2 -r2.25 -r2.26
    *** objimpl.h	2000/07/31 22:19:30	2.25
    --- objimpl.h	2000/08/16 12:27:23	2.26
    ***************
    *** 167,171 ****
      #define PyObject_Del(op) _PyObject_Del((PyObject *)(op))
      
    ! /* Macros trading binary compatibility for speed. See also mymalloc.h.
         Note that these macros expect non-NULL object pointers.*/
      #define PyObject_INIT(op, typeobj) \
    --- 167,171 ----
      #define PyObject_Del(op) _PyObject_Del((PyObject *)(op))
      
    ! /* Macros trading binary compatibility for speed. See also pymem.h.
         Note that these macros expect non-NULL object pointers.*/
      #define PyObject_INIT(op, typeobj) \
    
    
    
    From python-dev@python.org  Wed Aug 16 15:14:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:14:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-beos socket.py,1.1,NONE
    Message-ID: <200008161414.HAA25369@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/plat-beos
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25330/plat-beos
    
    Removed Files:
    	socket.py 
    Log Message:
    
    Revise the wrapper structure for the socket module:
    
    socket.py is used for all platforms, and it defines the additional
    classes and alternate socket() function for Windows and BeOS systems.
    
    The plat-*/socket.py files are no longer needed, since there is a
    shared socket.py.
    
    make_fqdn() is provided, but I decided to call it getfqdn() to be
    consistent with the other names in the socket module.  Since it is
    really a "get" operation and does not create a new name, this is
    the right name to give it.
    
    Move the docstring here from the _socket module.
    
    
    
    
    
    From python-dev@python.org  Wed Aug 16 15:14:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:14:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib socket.py,NONE,1.1
    Message-ID: <200008161414.HAA25359@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25330
    
    Added Files:
    	socket.py 
    Log Message:
    
    Revise the wrapper structure for the socket module:
    
    socket.py is used for all platforms, and it defines the additional
    classes and alternate socket() function for Windows and BeOS systems.
    
    The plat-*/socket.py files are no longer needed, since there is a
    shared socket.py.
    
    make_fqdn() is provided, but I decided to call it getfqdn() to be
    consistent with the other names in the socket module.  Since it is
    really a "get" operation and does not create a new name, this is
    the right name to give it.
    
    Move the docstring here from the _socket module.
    
    
    --- NEW FILE ---
    # Wrapper module for _socket, providing some additional facilities
    # implemented in Python.
    
    """\
    This module provides socket operations and some related functions.
    On Unix, it supports IP (Internet Protocol) and Unix domain sockets.
    On other systems, it only supports IP.
    
    Functions:
    
    socket() -- create a new socket object
    fromfd() -- create a socket object from an open file descriptor [*]
    gethostname() -- return the current hostname
    gethostbyname() -- map a hostname to its IP number
    gethostbyaddr() -- map an IP number or hostname to DNS info
    getservbyname() -- map a service name and a protocol name to a port number
    getprotobyname() -- mape a protocol name (e.g. 'tcp') to a number
    ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
    htons(), htonl() -- convert 16, 32 bit int from host to network byte order
    inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
    inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
    ssl() -- secure socket layer support (only available if configured)
    
     [*] not available on all platforms!
    
    Special objects:
    
    SocketType -- type object for socket objects
    error -- exception raised for I/O errors
    
    Integer constants:
    
    AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
    SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
    
    Many other constants may be defined; these may be used in calls to
    the setsockopt() and getsockopt() methods.
    """
    
    from _socket import *
    
    import os, sys
    
    if (sys.platform.lower().startswith("win")
        or os.uname()[0] == "BeOS"):
    
        # be sure this happens only once, even in the face of reload():
        try:
            _realsocketcall
        except NameError:
            _realsocketcall = socket
    
        def socket(family, type, proto=0):
            return _socketobject(_realsocketcall(family, type, proto))
    
    
    # WSA error codes
    if sys.platform.lower().startswith("win"):
        errorTab = {}
        errorTab[10004] = "The operation was interrupted."
        errorTab[10009] = "A bad file handle was passed."
        errorTab[10013] = "Permission denied."
        errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
        errorTab[10022] = "An invalid operation was attempted."
        errorTab[10035] = "The socket operation would block"
        errorTab[10036] = "A blocking operation is already in progress."
        errorTab[10048] = "The network address is in use."
        errorTab[10054] = "The connection has been reset."
        errorTab[10058] = "The network has been shut down."
        errorTab[10060] = "The operation timed out."
        errorTab[10061] = "Connection refused."
        errorTab[10063] = "The name is too long."
        errorTab[10064] = "The host is down."
        errorTab[10065] = "The host is unreachable."
    del os, sys
    
    
    def getfqdn(name=''):
        """Get fully qualified domain name from name.
    
        An empty argument is interpreted as meaning the local host.
    
        First the hostname returned by gethostbyaddr() is checked, then
        possibly existing aliases. In case no FQDN is available, hostname
        is returned.
        """
        name = name.strip()
        if len(name) == 0:
            name = gethostname()
        try:
            hostname, aliases, ipaddrs = gethostbyaddr(name)
        except error:
            pass
        else:
            aliases.insert(0, hostname)
            for name in aliases:
                if '.' in name:
                    break
            else:
                name = hostname
        return name
    
    
    #
    # These classes are used by the socket() defined on Windows and BeOS
    # platforms to provide a best-effort implementation of the cleanup
    # semantics needed when sockets can't be dup()ed.
    #
    # These are not actually used on other platforms.
    #
    
    class _socketobject:
    
        def __init__(self, sock):
            self._sock = sock
    
        def close(self):
            self._sock = 0
    
        def __del__(self):
            self.close()
    
        def accept(self):
            sock, addr = self._sock.accept()
            return _socketobject(sock), addr
    
        def dup(self):
            return _socketobject(self._sock)
    
        def makefile(self, mode='r', bufsize=-1):
            return _fileobject(self._sock, mode, bufsize)
    
        _s = "def %s(self, *args): return apply(self._sock.%s, args)\n\n"
        for _m in ('bind', 'connect', 'connect_ex', 'fileno', 'listen',
                   'getpeername', 'getsockname',
                   'getsockopt', 'setsockopt',
                   'recv', 'recvfrom', 'send', 'sendto',
                   'setblocking',
                   'shutdown'):
            exec _s % (_m, _m)
    
    
    class _fileobject:
    
        def __init__(self, sock, mode, bufsize):
            self._sock = sock
            self._mode = mode
            if bufsize < 0:
                bufsize = 512
            self._rbufsize = max(1, bufsize)
            self._wbufsize = bufsize
            self._wbuf = self._rbuf = ""
    
        def close(self):
            try:
                if self._sock:
                    self.flush()
            finally:
                self._sock = 0
    
        def __del__(self):
            self.close()
    
        def flush(self):
            if self._wbuf:
                self._sock.send(self._wbuf)
                self._wbuf = ""
    
        def fileno(self):
            return self._sock.fileno()
    
        def write(self, data):
            self._wbuf = self._wbuf + data
            if self._wbufsize == 1:
                if '\n' in data:
                    self.flush()
            else:
                if len(self._wbuf) >= self._wbufsize:
                    self.flush()
    
        def writelines(self, list):
            filter(self._sock.send, list)
            self.flush()
    
        def read(self, n=-1):
            if n >= 0:
                k = len(self._rbuf)
                if n <= k:
                    data = self._rbuf[:n]
                    self._rbuf = self._rbuf[n:]
                    return data
                n = n - k
                L = [self._rbuf]
                self._rbuf = ""
                while n > 0:
                    new = self._sock.recv(max(n, self._rbufsize))
                    if not new: break
                    k = len(new)
                    if k > n:
                        L.append(new[:n])
                        self._rbuf = new[n:]
                        break
                    L.append(new)
                    n = n - k
                return "".join(L)
            k = max(512, self._rbufsize)
            L = [self._rbuf]
            self._rbuf = ""
            while 1:
                new = self._sock.recv(k)
                if not new: break
                L.append(new)
                k = min(k*2, 1024**2)
            return "".join(L)
    
        def readline(self, limit=-1):
            data = ""
            i = self._rbuf.find('\n')
            while i < 0 and not (0 < limit <= len(self._rbuf)):
                new = self._sock.recv(self._rbufsize)
                if not new: break
                i = new.find('\n')
                if i >= 0: i = i + len(self._rbuf)
                self._rbuf = self._rbuf + new
            if i < 0: i = len(self._rbuf)
            else: i = i+1
            if 0 <= limit < len(self._rbuf): i = limit
            data, self._rbuf = self._rbuf[:i], self._rbuf[i:]
            return data
    
        def readlines(self):
            list = []
            while 1:
                line = self.readline()
                if not line: break
                list.append(line)
            return list
    
    
    
    From python-dev@python.org  Wed Aug 16 15:14:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:14:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-win socket.py,1.7,NONE
    Message-ID: <200008161414.HAA25368@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/plat-win
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25330/plat-win
    
    Removed Files:
    	socket.py 
    Log Message:
    
    Revise the wrapper structure for the socket module:
    
    socket.py is used for all platforms, and it defines the additional
    classes and alternate socket() function for Windows and BeOS systems.
    
    The plat-*/socket.py files are no longer needed, since there is a
    shared socket.py.
    
    make_fqdn() is provided, but I decided to call it getfqdn() to be
    consistent with the other names in the socket module.  Since it is
    really a "get" operation and does not create a new name, this is
    the right name to give it.
    
    Move the docstring here from the _socket module.
    
    
    
    
    
    From python-dev@python.org  Wed Aug 16 15:21:44 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:21:44 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsocket.tex,1.47,1.48
    Message-ID: <200008161421.HAA27526@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27516/Doc/lib
    
    Modified Files:
    	libsocket.tex 
    Log Message:
    
    Document socket.getfqdn().
    
    
    Index: libsocket.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsocket.tex,v
    retrieving revision 1.47
    retrieving revision 1.48
    diff -C2 -r1.47 -r1.48
    *** libsocket.tex	2000/08/15 19:30:35	1.47
    --- libsocket.tex	2000/08/16 14:21:42	1.48
    ***************
    *** 102,105 ****
    --- 102,115 ----
      \end{datadesc}
      
    + \begin{funcdesc}{getfqdn}{\optional{name}}
    + Return a fully qualified domain name for \var{name}.
    + If \var{name} is omitted or empty, it is interpreted as the local
    + host.  To find the fully qualified name, the hostname returned by
    + \function{gethostbyaddr()} is checked, then aliases for the host, if
    + available.  The first name which includes a period is selected.  In
    + case no fully qualified domain name is available, the hostname is
    + returned.
    + \end{funcdesc}
    + 
      \begin{funcdesc}{gethostbyname}{hostname}
      Translate a host name to IP address format.  The IP address is
    ***************
    *** 135,142 ****
      and \var{ipaddrlist} is a list of IP addresses for the same interface
      on the same host (most likely containing only a single address).
    ! To find the fully qualified domain name, check \var{hostname} and the
    ! items of \var{aliaslist} for an entry containing at least one period.
    ! An implementation of this algorithm can be found in the module
    ! \module{smtplib} in form of the \function{make_fqdn()} function.
      \end{funcdesc}
      
    --- 145,150 ----
      and \var{ipaddrlist} is a list of IP addresses for the same interface
      on the same host (most likely containing only a single address).
    ! To find the fully qualified domain name, use the function
    ! \function{getfqdn()}.
      \end{funcdesc}
      
    
    
    
    From python-dev@python.org  Wed Aug 16 15:18:33 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:18:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules socketmodule.c,1.126,1.127
    Message-ID: <200008161418.HAA26949@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26902/Modules
    
    Modified Files:
    	socketmodule.c 
    Log Message:
    
    Remove a lot of the confusing conditional compilation from the beginning
    of the init_socket() function.  This module is now *always* _socket.
    
    
    Index: socketmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v
    retrieving revision 1.126
    retrieving revision 1.127
    diff -C2 -r1.126 -r1.127
    *** socketmodule.c	2000/08/03 16:42:13	1.126
    --- socketmodule.c	2000/08/16 14:18:30	1.127
    ***************
    *** 2332,2369 ****
      
      static char module_doc[] =
    ! "This module provides socket operations and some related functions.\n\
    ! On Unix, it supports IP (Internet Protocol) and Unix domain sockets.\n\
    ! On other systems, it only supports IP.\n\
    ! \n\
    ! Functions:\n\
    ! \n\
    ! socket() -- create a new socket object\n\
    ! fromfd() -- create a socket object from an open file descriptor (*)\n\
    ! gethostname() -- return the current hostname\n\
    ! gethostbyname() -- map a hostname to its IP number\n\
    ! gethostbyaddr() -- map an IP number or hostname to DNS info\n\
    ! getservbyname() -- map a service name and a protocol name to a port number\n\
    ! getprotobyname() -- mape a protocol name (e.g. 'tcp') to a number\n\
    ! ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order\n\
    ! htons(), htonl() -- convert 16, 32 bit int from host to network byte order\n\
    ! inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format\n\
    ! inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)\n\
    ! ssl() -- secure socket layer support (only available if configured)\n\
    ! \n\
    ! (*) not available on all platforms!)\n\
    ! \n\
    ! Special objects:\n\
    ! \n\
    ! SocketType -- type object for socket objects\n\
    ! error -- exception raised for I/O errors\n\
    ! \n\
    ! Integer constants:\n\
    ! \n\
    ! AF_INET, AF_UNIX -- socket domains (first argument to socket() call)\n\
    ! SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)\n\
    ! \n\
    ! Many other constants may be defined; these may be used in calls to\n\
    ! the setsockopt() and getsockopt() methods.\n\
    ! ";
      
      static char sockettype_doc[] =
    --- 2332,2337 ----
      
      static char module_doc[] =
    ! "Implementation module for socket operations.  See the socket module\n\
    ! for documentation.";
      
      static char sockettype_doc[] =
    ***************
    *** 2395,2403 ****
      
      DL_EXPORT(void)
    - #if defined(MS_WINDOWS) || defined(PYOS_OS2) || defined(__BEOS__)
      init_socket(void)
    - #else
    - initsocket(void)
    - #endif
      {
      	PyObject *m, *d;
    --- 2363,2367 ----
    ***************
    *** 2405,2422 ****
      	if (!NTinit())
      		return;
    - 	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
      #else
      #if defined(__TOS_OS2__)
      	if (!OS2init())
      		return;
      	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
    - #else
    - #if defined(__BEOS__)
    - 	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
    - #else
    - 	m = Py_InitModule3("socket", PySocket_methods, module_doc);
    - #endif /* __BEOS__ */
    - #endif
    - #endif
      	d = PyModule_GetDict(m);
      	PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
    --- 2369,2379 ----
      	if (!NTinit())
      		return;
      #else
      #if defined(__TOS_OS2__)
      	if (!OS2init())
      		return;
    + #endif /* __TOS_OS2__ */
    + #endif /* MS_WINDOWS */
      	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
      	d = PyModule_GetDict(m);
      	PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
    
    
    
    From python-dev@python.org  Wed Aug 16 15:19:46 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:19:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.in,1.106,1.107
    Message-ID: <200008161419.HAA27305@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27288/Modules
    
    Modified Files:
    	Setup.in 
    Log Message:
    
    The socket module is now _socket on all platforms.
    
    
    Index: Setup.in
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v
    retrieving revision 1.106
    retrieving revision 1.107
    diff -C2 -r1.106 -r1.107
    *** Setup.in	2000/06/30 16:05:22	1.106
    --- Setup.in	2000/08/16 14:19:43	1.107
    ***************
    *** 153,158 ****
      mmap mmapmodule.c       # Memory-mapped files (also works on Win32)
      select selectmodule.c	# select(2); not on ancient System V
    ! socket socketmodule.c	# socket(2); not on ancient System V
    ! #_socket socketmodule.c	# socket(2); use this one for BeOS sockets
      
      # Socket module compiled with SSL support; you must edit the SSL variable:
    --- 153,157 ----
      mmap mmapmodule.c       # Memory-mapped files (also works on Win32)
      select selectmodule.c	# select(2); not on ancient System V
    ! _socket socketmodule.c	# socket(2)
      
      # Socket module compiled with SSL support; you must edit the SSL variable:
    
    
    
    From python-dev@python.org  Wed Aug 16 15:26:25 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:26:25 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib smtplib.py,1.27,1.28
    Message-ID: <200008161426.HAA28979@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28931/Lib
    
    Modified Files:
    	smtplib.py 
    Log Message:
    
    Use socket.getfqdn() instead of defining make_fqdn().
    
    
    Index: smtplib.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/smtplib.py,v
    retrieving revision 1.27
    retrieving revision 1.28
    diff -C2 -r1.27 -r1.28
    *** smtplib.py	2000/08/15 19:30:36	1.27
    --- smtplib.py	2000/08/16 14:26:22	1.28
    ***************
    *** 134,163 ****
              re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
      
    - def make_fqdn(name = ''):
    -     """Get fully qualified domain name from name.
      
    -     An empty argument is interpreted as meaning the local host.
    - 
    -     First the hostname returned by socket.gethostbyaddr()
    -     is checked, then possibly existing aliases. In case
    -     no FQDN is available, hostname is returned.
    -     """
    -     name = string.strip(name)
    -     if len(name) == 0:
    -         name = socket.gethostname()
    -     try:
    -         hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
    -     except socket.error:
    -         pass
    -     else:
    -         aliases.insert(0, hostname)
    -         for name in aliases:
    -             if '.' in name:
    -                 break
    -         else:
    -             name = hostname
    -     return name
    - 
    - 
      class SMTP:
          """This class manages a connection to an SMTP or ESMTP server.
    --- 134,138 ----
    ***************
    *** 318,322 ****
                  self.putcmd("helo", name)
              else:
    !             self.putcmd("helo", make_fqdn())
              (code,msg)=self.getreply()
              self.helo_resp=msg
    --- 293,297 ----
                  self.putcmd("helo", name)
              else:
    !             self.putcmd("helo", socket.getfqdn())
              (code,msg)=self.getreply()
              self.helo_resp=msg
    ***************
    *** 331,335 ****
                  self.putcmd("ehlo", name)
              else:
    !             self.putcmd("ehlo", make_fqdn())
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    --- 306,310 ----
                  self.putcmd("ehlo", name)
              else:
    !             self.putcmd("ehlo", socket.getfqdn())
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    
    
    
    From python-dev@python.org  Wed Aug 16 16:00:00 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 08:00:00 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.2,1.3
    Message-ID: <200008161500.IAA03084@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3071
    
    Modified Files:
    	pep-0214.txt 
    Log Message:
    PEP 214 completed after channeling and encouragement from Tim Peters.
    The referenced SF patch is current with this description.
    
    The proposal section is moved to before the justification.
    
    
    Index: pep-0214.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** pep-0214.txt	2000/08/15 22:45:06	1.2
    --- pep-0214.txt	2000/08/16 14:59:57	1.3
    ***************
    *** 3,10 ****
      Version: $Revision$
      Author: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.1
      Status: Draft
      Created: 24-Jul-2000
    ! Post-History:
      
      
    --- 3,10 ----
      Version: $Revision$
      Author: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.0
      Status: Draft
      Created: 24-Jul-2000
    ! Post-History: 16-Aug-2000
      
      
    ***************
    *** 22,25 ****
    --- 22,56 ----
      
      
    + Proposal
    + 
    +     This proposal introduces a syntax extension to the print
    +     statement, which allows the programmer to optionally specify the
    +     output file target.  An example usage is as follows:
    + 
    +         print >> mylogfile, 'this message goes to my log file'
    + 
    +     Formally, the syntax of the extended print statement is
    +     
    +         print_stmt: ... | '>>' test [ (',' test)+ [','] ] )
    + 
    +     where the ellipsis indicates the original print_stmt syntax
    +     unchanged.  In the extended form, the expression just after >>
    +     must yield an object with a write() method (i.e. a file-like
    +     object).  Thus these two statements are equivalent:
    + 
    + 	print 'hello world'
    +         print >> sys.stdout, 'hello world'
    + 
    +     As are these two statements:
    + 
    +         print
    +         print >> sys.stdout
    + 
    +     These two statements are syntax errors:
    + 
    +         print ,
    +         print >> sys.stdout,
    + 
    + 
      Justification
      
    ***************
    *** 41,50 ****
          than specifically standard output.  A typical idiom is
      
    - 	oldstdout = sys.stdout
              sys.stdout = mylogfile
      	try:
      	    print 'this message goes to my log file'
      	finally:
    ! 	    sys.stdout = oldstdout
      
          The problem with this approach is that the binding is global, and
    --- 72,80 ----
          than specifically standard output.  A typical idiom is
      
              sys.stdout = mylogfile
      	try:
      	    print 'this message goes to my log file'
      	finally:
    ! 	    sys.stdout = sys.__stdout__
      
          The problem with this approach is that the binding is global, and
    ***************
    *** 54,105 ****
      
          This approach is also very inconvenient for interleaving prints to
    !     various output streams.
    ! 
    ! 
    ! Proposal
      
    -     This proposal introduces a syntax change to the print statement,
    -     which allows the programmer to optionally specify the output file
    -     target.  An example usage is as follows:
    - 
    -         print >> mylogfile, 'this message goes to my log file'
    - 
    -     Formally, the syntax of the extended print statement is
    - 
    -         print_stmt: "print" [">>" expr ","] [ expr ("," expr)* [","] ]
    - 
    -     Where the the expression just after >> must yield an object with a
    -     write() method (i.e. a file-like object).  Thus these two
    -     statements are equivalent:
    - 
    - 	print 'hello world'
    -         print >> sys.stdout, 'hello world'
    - 
    - 
    - Open Issues
    - 
    -     What should the following do?
    - 
    -         print >> file
    -         print >> file,
    - 
    -     In the current implementation (see below), the first is a
    -     SyntaxError and the second prints nothing to file.  This is likely
    -     counterintuitive; the first should print just a newline, making
    -     these equivalent:
    - 
    -         print >> sys.stdout
    -         print
    - 
    -     The second should print just a space and no newline to file.  It
    -     doesn't have a non-extended print equivalent, since this is
    -     illegal:
    - 
    -         print ,
    - 
    -     The closes equivalent is:
    - 
    -         print '',
    -     
      
      Reference Implementation
    --- 84,90 ----
      
          This approach is also very inconvenient for interleaving prints to
    !     various output streams, and complicates coding in the face of
    !     legitimate try/except or try/finally clauses.
      
      
      Reference Implementation
    
    
    
    From python-dev@python.org  Wed Aug 16 16:03:56 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 08:03:56 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.13,1.14
    Message-ID: <200008161503.IAA04007@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3982
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Tim forgot to include PEP 214 feature under "proposed but not accepted
    or declined".
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** pep-0200.txt	2000/08/16 03:17:18	1.13
    --- pep-0200.txt	2000/08/16 15:03:52	1.14
    ***************
    *** 228,231 ****
    --- 228,237 ----
            wrapper around standard internationalization libraries
      
    +     * Extended print statement - Barry Warsaw
    +       PEP 214
    +       http://python.sourceforge.net/peps/pep-0214.html
    +       SF Patch #100970
    +       http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470
    + 
      
      Declined
    
    
    
    From python-dev@python.org  Wed Aug 16 20:02:09 2000
    From: python-dev@python.org (Trent Mick)
    Date: Wed, 16 Aug 2000 12:02:09 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Grammar Makefile,1.3,1.4
    Message-ID: <200008161902.MAA20095@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Grammar
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv19856/Grammar
    
    Modified Files:
    	Makefile 
    Log Message:
    add dummy 'add2lib' target to Grammar/Makefile so non-GNU makes don't bail out
    
    This closes patch:
    http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=101176&group_id=5470
    
    
    
    Index: Makefile
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Grammar/Makefile,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** Makefile	1993/12/28 19:39:13	1.3
    --- Makefile	2000/08/16 19:02:06	1.4
    ***************
    *** 7,10 ****
    --- 7,13 ----
      all:		install
      
    + # This target is used by the master Makefile to add the objects to the library
    + add2lib:
    + 
      install:	$(DESTH) $(DESTC)
      
    
    
    
    From python-dev@python.org  Wed Aug 16 20:43:19 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 12:43:19 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.14,1.15
    Message-ID: <200008161943.MAA31258@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31249
    
    Modified Files:
    	exceptions.c 
    Log Message:
    SyntaxError__str__(): Fix two memory problems discovered by Insure.
    First, the allocated buffer was never freed after using it to create
    the PyString object.  Second, it was possible that have_filename would
    be false (meaning that filename was not a PyString object), but that
    the code would still try to PyString_GET_SIZE() it.
    
    
    Index: exceptions.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
    retrieving revision 1.14
    retrieving revision 1.15
    diff -C2 -r1.14 -r1.15
    *** exceptions.c	2000/08/15 16:20:36	1.14
    --- exceptions.c	2000/08/16 19:43:17	1.15
    ***************
    *** 776,784 ****
      	char *buffer = NULL;
      
    ! 	if (filename = PyObject_GetAttrString(self, "filename"))
      	    have_filename = PyString_Check(filename);
      	else
      	    PyErr_Clear();
    ! 	if (lineno = PyObject_GetAttrString(self, "lineno"))
      	    have_lineno = PyInt_Check(lineno);
      	else
    --- 776,785 ----
      	char *buffer = NULL;
      
    ! 	if ((filename = PyObject_GetAttrString(self, "filename")) != NULL)
      	    have_filename = PyString_Check(filename);
      	else
      	    PyErr_Clear();
    ! 
    ! 	if ((lineno = PyObject_GetAttrString(self, "lineno")) != NULL)
      	    have_lineno = PyInt_Check(lineno);
      	else
    ***************
    *** 786,791 ****
      
      	if (have_filename || have_lineno) {
    ! 	    int bufsize = (PyString_GET_SIZE(str) + 64 +
    ! 			   PyString_GET_SIZE(filename));
      
      	    buffer = PyMem_Malloc(bufsize);
    --- 787,793 ----
      
      	if (have_filename || have_lineno) {
    ! 	    int bufsize = PyString_GET_SIZE(str) + 64;
    ! 	    if (have_filename)
    ! 		bufsize += PyString_GET_SIZE(filename);
      
      	    buffer = PyMem_Malloc(bufsize);
    ***************
    *** 804,808 ****
    --- 806,813 ----
      			    PyString_AS_STRING(str),
      			    PyInt_AsLong(lineno));
    + 
      		result = PyString_FromString(buffer);
    + 		PyMem_FREE(buffer);
    + 
      		if (result == NULL)
      		    result = str;
    
    
    
    From python-dev@python.org  Wed Aug 16 21:30:23 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 16 Aug 2000 13:30:23 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib BaseHTTPServer.py,1.10,1.11 ftplib.py,1.42,1.43 socket.py,1.1,1.2
    Message-ID: <200008162030.NAA10475@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10308
    
    Modified Files:
    	BaseHTTPServer.py ftplib.py socket.py 
    Log Message:
    
    updated occurences of fqdn algorithm (closes patch #101197)
    
    
    
    Index: BaseHTTPServer.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/BaseHTTPServer.py,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** BaseHTTPServer.py	2000/05/09 14:54:13	1.10
    --- BaseHTTPServer.py	2000/08/16 20:30:21	1.11
    ***************
    *** 94,110 ****
              SocketServer.TCPServer.server_bind(self)
              host, port = self.socket.getsockname()
    !         if not host or host == '0.0.0.0':
    !             host = socket.gethostname()
    !         try:
    !             hostname, hostnames, hostaddrs = socket.gethostbyaddr(host)
    !         except socket.error:
    !             hostname = host
    !         else:
    !             if '.' not in hostname:
    !                 for host in hostnames:
    !                     if '.' in host:
    !                         hostname = host
    !                         break
    !         self.server_name = hostname
              self.server_port = port
      
    --- 94,98 ----
              SocketServer.TCPServer.server_bind(self)
              host, port = self.socket.getsockname()
    !         self.server_name = socket.getfqdn(host)
              self.server_port = port
      
    ***************
    *** 418,432 ****
      
              """
    - 
    -         (host, port) = self.client_address
    -         try:
    -             name, names, addresses = socket.gethostbyaddr(host)
    -         except socket.error, msg:
    -             return host
    -         names.insert(0, name)
    -         for name in names:
    -             if '.' in name: return name
    -         return names[0]
      
      
          # Essentially static class variables
    --- 406,412 ----
      
              """
      
    +         host, port = self.client_address
    +         return socket.getfqdn(host)
      
          # Essentially static class variables
    
    Index: ftplib.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/ftplib.py,v
    retrieving revision 1.42
    retrieving revision 1.43
    diff -C2 -r1.42 -r1.43
    *** ftplib.py	2000/03/28 21:45:45	1.42
    --- ftplib.py	2000/08/16 20:30:21	1.43
    ***************
    *** 42,46 ****
      # Import SOCKS module if it exists, else standard socket module socket
      try:
    ! 	import SOCKS; socket = SOCKS
      except ImportError:
      	import socket
    --- 42,47 ----
      # Import SOCKS module if it exists, else standard socket module socket
      try:
    ! 	import SOCKS; socket = SOCKS; del SOCKS # import SOCKS as socket
    ! 	from socket import getfqdn; socket.getfqdn = getfqdn; del getfqdn
      except ImportError:
      	import socket
    ***************
    *** 292,306 ****
      		if not acct: acct = ''
      		if user == 'anonymous' and passwd in ('', '-'):
    ! 			thishost = socket.gethostname()
    ! 			# Make sure it is fully qualified
    ! 			if not '.' in thishost:
    ! 				thisaddr = socket.gethostbyname(thishost)
    ! 				firstname, names, unused = \
    ! 					   socket.gethostbyaddr(thisaddr)
    ! 				names.insert(0, firstname)
    ! 				for name in names:
    ! 					if '.' in name:
    ! 						thishost = name
    ! 						break
      			try:
      				if os.environ.has_key('LOGNAME'):
    --- 293,298 ----
      		if not acct: acct = ''
      		if user == 'anonymous' and passwd in ('', '-'):
    ! 			# get fully qualified domain name of local host
    ! 			thishost = socket.getfqdn()
      			try:
      				if os.environ.has_key('LOGNAME'):
    
    Index: socket.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/socket.py,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** socket.py	2000/08/16 14:14:31	1.1
    --- socket.py	2000/08/16 20:30:21	1.2
    ***************
    *** 86,90 ****
          """
          name = name.strip()
    !     if len(name) == 0:
              name = gethostname()
          try:
    --- 86,90 ----
          """
          name = name.strip()
    !     if not name or name == '0.0.0.0':
              name = gethostname()
          try:
    
    
    
    From python-dev@python.org  Wed Aug 16 22:44:06 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 14:44:06 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.113,1.114
    Message-ID: <200008162144.OAA25326@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/tut
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25251/tut
    
    Modified Files:
    	tut.tex 
    Log Message:
    
    Ka-Ping Yee :
    Further examples of list comprehensions.
    
    
    Index: tut.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v
    retrieving revision 1.113
    retrieving revision 1.114
    diff -C2 -r1.113 -r1.114
    *** tut.tex	2000/08/12 20:08:04	1.113
    --- tut.tex	2000/08/16 21:44:03	1.114
    ***************
    *** 1762,1776 ****
      
      \begin{verbatim}
    ! >>> spcs = ["  Apple", " Banana ", "Coco  nut  "]
    ! >>> print [s.strip() for s in spcs]
    ! ['Apple', 'Banana', 'Coco  nut']
      >>> vec = [2, 4, 6]
    ! >>> print [3*x for x in vec]
      [6, 12, 18]
      >>> vec1 = [2, 4, 6]
      >>> vec2 = [4, 3, -9]
    ! >>> print [x*y for x in vec1 for y in vec2]
      [8, 6, -18, 16, 12, -36, 24, 18, -54]
    ! >>> print [x+y for x in vec1 for y in vec2]
      [6, 5, -7, 8, 7, -5, 10, 9, -3]
      \end{verbatim}
    --- 1762,1780 ----
      
      \begin{verbatim}
    ! >>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
    ! >>> [weapon.strip() for weapon in freshfruit]
    ! ['banana', 'loganberry', 'passion fruit']
      >>> vec = [2, 4, 6]
    ! >>> [3*x for x in vec]
      [6, 12, 18]
    + >>> [3*x for x in vec if x > 3]
    + [12, 18]
    + >>> [3*x for x in vec if x < 2]
    + []
      >>> vec1 = [2, 4, 6]
      >>> vec2 = [4, 3, -9]
    ! >>> [x*y for x in vec1 for y in vec2]
      [8, 6, -18, 16, 12, -36, 24, 18, -54]
    ! >>> [x+y for x in vec1 for y in vec2]
      [6, 5, -7, 8, 7, -5, 10, 9, -3]
      \end{verbatim}
    
    
    
    From python-dev@python.org  Wed Aug 16 23:29:58 2000
    From: python-dev@python.org (Trent Mick)
    Date: Wed, 16 Aug 2000 15:29:58 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.36,2.37
    Message-ID: <200008162229.PAA08921@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5710/Modules
    
    Modified Files:
    	_sre.c 
    Log Message:
    The sre test suite currently overruns the stack on Win64, Linux64, and Monterey
    (64-bit AIX) This is because the RECURSION_LIMIT is too low. This patch lowers
    to recusion limit to 7500 such that the recusion check fires before a segfault.
    
    Fredrik suggested/approved the fix in private email, modulo sre's recusion
    limit checking no being necessary when PyOS_CheckStack is implemented for
    Windows.
    
    
    
    Index: _sre.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
    retrieving revision 2.36
    retrieving revision 2.37
    diff -C2 -r2.36 -r2.37
    *** _sre.c	2000/08/09 09:14:34	2.36
    --- _sre.c	2000/08/16 22:29:55	2.37
    ***************
    *** 59,65 ****
      /* optional features */
      
    ! /* prevent run-away recursion (bad patterns on long strings) */
      #if !defined(USE_STACKCHECK)
    ! #define USE_RECURSION_LIMIT 10000
      #endif
      
    --- 59,74 ----
      /* optional features */
      
    ! /* prevent run-away recursion (bad patterns on long strings)
    !    Require a smaller recursion limit for a number of 64-bit platforms
    !    to prevent stack overflow:
    !     Win64 - MS_WIN64, Linux64 - __LP64__, Monterey (64-bit AIX) - _LP64
    !    XXX Or maybe this should be defined for all SIZEOF_VOIDP>4 platforms?
    ! */
      #if !defined(USE_STACKCHECK)
    ! #	if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64)
    ! #		define USE_RECURSION_LIMIT 7500
    ! #	else
    ! #		define USE_RECURSION_LIMIT 10000
    ! #	endif
      #endif
      
    
    
    
    From python-dev@python.org  Thu Aug 17 00:04:01 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 16:04:01 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.74,2.75
    Message-ID: <200008162304.QAA10362@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10294
    
    Modified Files:
    	sysmodule.c 
    Log Message:
    _PySys_Init(): Fix another Insure discovered memory leak; the PyString
    created from the "big"/"little" constant needs to be decref'd.
    
    
    Index: sysmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v
    retrieving revision 2.74
    retrieving revision 2.75
    diff -C2 -r2.74 -r2.75
    *** sysmodule.c	2000/08/15 04:24:43	2.74
    --- sysmodule.c	2000/08/16 23:03:57	2.75
    ***************
    *** 470,474 ****
      			value = "little";
      		PyDict_SetItemString(sysdict, "byteorder",
    ! 				     PyString_FromString(value));
      	}
      #ifdef MS_COREDLL
    --- 470,475 ----
      			value = "little";
      		PyDict_SetItemString(sysdict, "byteorder",
    ! 				     v = PyString_FromString(value));
    ! 		Py_XDECREF(v);
      	}
      #ifdef MS_COREDLL
    
    
    
    From python-dev@python.org  Thu Aug 17 00:41:04 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 16:41:04 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects stringobject.c,2.84,2.85
    Message-ID: <200008162341.QAA16009@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15917
    
    Modified Files:
    	stringobject.c 
    Log Message:
    Insure properly identifies the `interned' dictionary as leaking at
    shutdown time, but CVS log entry for revision 2.45 explains why this
    is so.  Simply include a comment so we don't have to re-figure it out
    again 5 years from now.
    
    
    Index: stringobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v
    retrieving revision 2.84
    retrieving revision 2.85
    diff -C2 -r2.84 -r2.85
    *** stringobject.c	2000/07/31 15:28:04	2.84
    --- stringobject.c	2000/08/16 23:41:01	2.85
    ***************
    *** 2851,2854 ****
    --- 2851,2866 ----
      #ifdef INTERN_STRINGS
      
    + /* This dictionary will leak at PyString_Fini() time.  That's acceptable
    +  * because PyString_Fini() specifically frees interned strings that are
    +  * only referenced by this dictionary.  The CVS log entry for revision 2.45
    +  * says:
    +  *
    +  *    Change the Fini function to only remove otherwise unreferenced
    +  *    strings from the interned table.  There are references in
    +  *    hard-to-find static variables all over the interpreter, and it's not
    +  *    worth trying to get rid of all those; but "uninterning" isn't fair
    +  *    either and may cause subtle failures later -- so we have to keep them
    +  *    in the interned table.
    +  */
      static PyObject *interned;
      
    
    
    
    From python-dev@python.org  Thu Aug 17 03:53:02 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 19:53:02 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.6,1.7
    Message-ID: <200008170253.TAA04697@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv4685
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Two typo corrections found by Terry Reedy.
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.6
    retrieving revision 1.7
    diff -C2 -r1.6 -r1.7
    *** pep-0001.txt	2000/08/15 05:54:18	1.6
    --- pep-0001.txt	2000/08/17 02:53:00	1.7
    ***************
    *** 12,16 ****
      What is a PEP?
      
    !     PEP standards for Python Enhancement Proposal.  A PEP is a design
          document providing information to the Python community, or
          describing a new feature for Python.  The PEP should provide a
    --- 12,16 ----
      What is a PEP?
      
    !     PEP stands for Python Enhancement Proposal.  A PEP is a design
          document providing information to the Python community, or
          describing a new feature for Python.  The PEP should provide a
    ***************
    *** 185,194 ****
          list or URL where the PEP is being discussed.
      
    !     PEP heading should begin in column zero and should be capitalized.
    !     The body of each section should be indented 4 spaces.  Code
    !     samples inside body sections should be indented a further 4
    !     spaces, and other indentation can be used as required to make the
    !     text readable.  You should use two blank lines between the last
    !     line of a section's body and the next section heading.
      
          No tabs should appear in the document at all.  A PEP should
    --- 185,194 ----
          list or URL where the PEP is being discussed.
      
    !     PEP headings should begin in column zero and should be
    !     capitalized.  The body of each section should be indented 4
    !     spaces.  Code samples inside body sections should be indented a
    !     further 4 spaces, and other indentation can be used as required to
    !     make the text readable.  You should use two blank lines between
    !     the last line of a section's body and the next section heading.
      
          No tabs should appear in the document at all.  A PEP should
    
    
    
    From python-dev@python.org  Thu Aug 17 04:11:11 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 20:11:11 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.7,1.8
    Message-ID: <200008170311.UAA13598@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv13590
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Added a link to the SF CVSweb pages where the PEP histories can be
    retrieved. 
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** pep-0001.txt	2000/08/17 02:53:00	1.7
    --- pep-0001.txt	2000/08/17 03:11:08	1.8
    ***************
    *** 26,30 ****
          Because the PEPs are maintained as plain text files under CVS
          control, their revision history is the historical record of the
    !     feature proposal.
          
      
    --- 26,30 ----
          Because the PEPs are maintained as plain text files under CVS
          control, their revision history is the historical record of the
    !     feature proposal[1].
          
      
    ***************
    *** 130,134 ****
          4. Copyright/public domain -- Each PEP must either be explicitly
             labelled in the public domain or the Open Publication
    !        License[1].
      
          5. Specification -- The technical specification should describe
    --- 130,134 ----
          4. Copyright/public domain -- Each PEP must either be explicitly
             labelled in the public domain or the Open Publication
    !        License[2].
      
          5. Specification -- The technical specification should describe
    ***************
    *** 163,167 ****
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web[2].
      
          Each PEP begins with an RFC822 style header section.  Required
    --- 163,167 ----
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web[3].
      
          Each PEP begins with an RFC822 style header section.  Required
    ***************
    *** 210,218 ****
      References and Footnotes
      
    !     [1] http://www.opencontent.org/openpub/
      
    !     [2] The script referred to here is pep2html.py, which lives in
          the same directory in the CVS tree as the PEPs themselves.  Try
          "pep2html.py --help" for details.
      
      
    --- 210,226 ----
      References and Footnotes
      
    !     [1] This historical record is available by the normal CVS commands
    !     for retrieving older revisions.  For those without direct access
    !     to the CVS tree, you can browse the current and past PEP revisions
    !     via the SourceForge web site at
      
    !     http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/python/nondist/peps/?cvsroot=python
    ! 
    !     [2] http://www.opencontent.org/openpub/
    ! 
    !     [3] The script referred to here is pep2html.py, which lives in
          the same directory in the CVS tree as the PEPs themselves.  Try
          "pep2html.py --help" for details.
    + 
      
      
    
    
    
    From python-dev@python.org  Thu Aug 17 04:19:44 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 20:19:44 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.22,1.23
    Message-ID: <200008170319.UAA14063@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14055
    
    Modified Files:
    	pep-0000.txt 
    Log Message:
    Another typo caught by Terry Reedy.
    
    
    Index: pep-0000.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
    retrieving revision 1.22
    retrieving revision 1.23
    diff -C2 -r1.22 -r1.23
    *** pep-0000.txt	2000/08/15 14:29:21	1.22
    --- pep-0000.txt	2000/08/17 03:19:42	1.23
    ***************
    *** 19,23 ****
           num  filename      title                                 owner
           ---  ------------  -----                                 -----
    !  I     0  pep-0000.txt  Index of Python Enhance Proposals     bwarsaw
       I     1  pep-0001.txt  PEP Guidelines                        bwarsaw, jhylton
       I     2  pep-0002.txt  Procedure for Adding New Modules      esr
    --- 19,23 ----
           num  filename      title                                 owner
           ---  ------------  -----                                 -----
    !  I     0  pep-0000.txt  Index of Python Enhancement Proposals bwarsaw
       I     1  pep-0001.txt  PEP Guidelines                        bwarsaw, jhylton
       I     2  pep-0002.txt  Procedure for Adding New Modules      esr
    
    
    
    From python-dev@python.org  Thu Aug 17 05:26:02 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 21:26:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/texinputs python.sty,1.62,1.63
    Message-ID: <200008170426.VAA26516@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/texinputs
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26503/texinputs
    
    Modified Files:
    	python.sty 
    Log Message:
    
    \citetitle:  Format the title, not the optional URL!
    
    
    Index: python.sty
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/texinputs/python.sty,v
    retrieving revision 1.62
    retrieving revision 1.63
    diff -C2 -r1.62 -r1.63
    *** python.sty	2000/08/03 17:38:30	1.62
    --- python.sty	2000/08/17 04:25:59	1.63
    ***************
    *** 812,816 ****
      % cited titles:  \citetitle{Title of Work}
      %       online:  \citetitle[url-to-resource]{Title of Work}
    ! \newcommand{\citetitle}[2][URL]{\emph{#1}}
      
      
    --- 812,816 ----
      % cited titles:  \citetitle{Title of Work}
      %       online:  \citetitle[url-to-resource]{Title of Work}
    ! \newcommand{\citetitle}[2][URL]{\emph{#2}}
      
      
    
    
    
    From python-dev@python.org  Thu Aug 17 05:27:06 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 21:27:06 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.11,1.12
    Message-ID: <200008170427.VAA26564@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26554
    
    Modified Files:
    	pep2html.py 
    Log Message:
    Linkify the Author: fields with mailto urls.
    
    
    Index: pep2html.py
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** pep2html.py	2000/08/15 10:35:17	1.11
    --- pep2html.py	2000/08/17 04:27:04	1.12
    ***************
    *** 109,114 ****
                   '
    \n\n') for k, v in header: fo.write(" \n" ! % (cgi.escape(k), cgi.escape(v))) title = 0 fo.write("
    %s:%s
    \n
    \n
    \n" --- 109,126 ---- '
    \n\n') for k, v in header: + if k.lower() == 'author': + mailtos = [] + for addr in v.split(): + if '@' in addr: + mailtos.append( + '%s' % + (addr, pep, addr)) + else: + mailtos.append(addr) + v = ' '.join(mailtos) + else: + v = cgi.escape(v) fo.write(" \n" ! % (cgi.escape(k), v)) title = 0 fo.write("
    %s:%s
    \n
    \n
    \n" From python-dev@python.org Thu Aug 17 05:45:16 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 16 Aug 2000 21:45:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sunau.py,1.16,1.17 sunaudio.py,1.4,1.5 toaiff.py,1.6,1.7 tokenize.py,1.12,1.13 uu.py,1.11,1.12 wave.py,1.10,1.11 Message-ID: <200008170445.VAA27430@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv27416 Modified Files: sunau.py sunaudio.py toaiff.py tokenize.py uu.py wave.py Log Message: Convert some old-style string exceptions to class exceptions. Index: sunau.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sunau.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** sunau.py 2000/07/16 12:04:30 1.16 --- sunau.py 2000/08/17 04:45:13 1.17 *************** *** 129,133 **** AUDIO_FILE_ENCODING_ALAW_8] ! Error = 'sunau.Error' def _read_u32(file): --- 129,134 ---- AUDIO_FILE_ENCODING_ALAW_8] ! class Error(Exception): ! pass def _read_u32(file): Index: sunaudio.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sunaudio.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** sunaudio.py 2000/02/04 15:28:41 1.4 --- sunaudio.py 2000/08/17 04:45:13 1.5 *************** *** 3,7 **** MAGIC = '.snd' ! error = 'sunaudio sound header conversion error' --- 3,8 ---- MAGIC = '.snd' ! class error(Exception): ! pass Index: toaiff.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/toaiff.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** toaiff.py 2000/07/16 12:04:30 1.6 --- toaiff.py 2000/08/17 04:45:13 1.7 *************** *** 54,58 **** ! error = 'toaiff.error' # Exception def toaiff(filename): --- 54,59 ---- ! class error(Exception): ! pass def toaiff(filename): Index: tokenize.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tokenize.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** tokenize.py 1998/04/03 16:05:38 1.12 --- tokenize.py 2000/08/17 04:45:13 1.13 *************** *** 77,81 **** tabsize = 8 ! TokenError = 'TokenError' def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing print "%d,%d-%d,%d:\t%s\t%s" % \ --- 77,84 ---- tabsize = 8 ! ! class TokenError(Exception): ! pass ! def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing print "%d,%d-%d,%d:\t%s\t%s" % \ Index: uu.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/uu.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** uu.py 2000/02/04 15:28:42 1.11 --- uu.py 2000/08/17 04:45:13 1.12 *************** *** 36,40 **** import sys ! Error = 'uu.Error' def encode(in_file, out_file, name=None, mode=None): --- 36,41 ---- import sys ! class Error(Exception): ! pass def encode(in_file, out_file, name=None, mode=None): Index: wave.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/wave.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** wave.py 2000/07/16 12:04:30 1.10 --- wave.py 2000/08/17 04:45:13 1.11 *************** *** 74,78 **** import __builtin__ ! Error = 'wave.Error' WAVE_FORMAT_PCM = 0x0001 --- 74,79 ---- import __builtin__ ! class Error(Exception): ! pass WAVE_FORMAT_PCM = 0x0001 From python-dev@python.org Thu Aug 17 06:01:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 16 Aug 2000 22:01:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.8,1.9 Message-ID: <200008170501.WAA30339@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30241 Modified Files: pep-0001.txt Log Message: Add a link to the PEPs themselves in footnote 3, suggested by Peter Schneider-Kamp. Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** pep-0001.txt 2000/08/17 03:11:08 1.8 --- pep-0001.txt 2000/08/17 05:01:20 1.9 *************** *** 223,226 **** --- 223,229 ---- "pep2html.py --help" for details. + The URL for viewing PEPs on the web is + http://python.sourceforge.net/peps/ + From python-dev@python.org Thu Aug 17 06:06:52 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 16 Aug 2000 22:06:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib aifc.py,1.37,1.38 audiodev.py,1.8,1.9 binhex.py,1.14,1.15 copy.py,1.14,1.15 ftplib.py,1.43,1.44 multifile.py,1.10,1.11 Message-ID: <200008170506.WAA04165@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv4151 Modified Files: aifc.py audiodev.py binhex.py copy.py ftplib.py multifile.py Log Message: Convert some old-style string exceptions to class exceptions. Index: aifc.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/aifc.py,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** aifc.py 2000/07/16 12:04:30 1.37 --- aifc.py 2000/08/17 05:06:49 1.38 *************** *** 138,142 **** import __builtin__ ! Error = 'aifc.Error' _AIFC_version = 0xA2805140 # Version 1 of AIFF-C --- 138,143 ---- import __builtin__ ! class Error(Exception): ! pass _AIFC_version = 0xA2805140 # Version 1 of AIFF-C Index: audiodev.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/audiodev.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** audiodev.py 2000/02/02 15:10:14 1.8 --- audiodev.py 2000/08/17 05:06:49 1.9 *************** *** 1,5 **** """Classes for manipulating audio devices (currently only for Sun and SGI)""" ! error = 'audiodev.error' class Play_Audio_sgi: --- 1,6 ---- """Classes for manipulating audio devices (currently only for Sun and SGI)""" ! class error(Exception): ! pass class Play_Audio_sgi: Index: binhex.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/binhex.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** binhex.py 2000/07/16 12:04:30 1.14 --- binhex.py 2000/08/17 05:06:49 1.15 *************** *** 28,32 **** import binascii ! Error = 'binhex.Error' # States (what have we written) --- 28,33 ---- import binascii ! class Error(Exception): ! pass # States (what have we written) Index: copy.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/copy.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** copy.py 2000/02/04 15:39:29 1.14 --- copy.py 2000/08/17 05:06:49 1.15 *************** *** 53,58 **** import types ! error = 'copy.error' ! Error = error # backward compatibility def copy(x): --- 53,59 ---- import types ! class Error(Exception): ! pass ! error = Error # backward compatibility def copy(x): Index: ftplib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/ftplib.py,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** ftplib.py 2000/08/16 20:30:21 1.43 --- ftplib.py 2000/08/17 05:06:49 1.44 *************** *** 57,70 **** # Exception raised when an error or invalid response is received ! error_reply = 'ftplib.error_reply' # unexpected [123]xx reply ! error_temp = 'ftplib.error_temp' # 4xx errors ! error_perm = 'ftplib.error_perm' # 5xx errors ! error_proto = 'ftplib.error_proto' # response does not begin with [1-5] # All exceptions (hopefully) that may be raised here and that aren't # (always) programming errors on our side ! all_errors = (error_reply, error_temp, error_perm, error_proto, \ ! socket.error, IOError, EOFError) --- 57,70 ---- # Exception raised when an error or invalid response is received ! class Error(Exception): pass ! class error_reply(Error): pass # unexpected [123]xx reply ! class error_temp(Error): pass # 4xx errors ! class error_perm(Error): pass # 5xx errors ! class error_proto(Error): pass # response does not begin with [1-5] # All exceptions (hopefully) that may be raised here and that aren't # (always) programming errors on our side ! all_errors = (Error, socket.error, IOError, EOFError) Index: multifile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/multifile.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** multifile.py 2000/07/16 12:04:30 1.10 --- multifile.py 2000/08/17 05:06:49 1.11 *************** *** 31,35 **** import string ! Error = 'multifile.Error' class MultiFile: --- 31,36 ---- import string ! class Error(Exception): ! pass class MultiFile: From python-dev@python.org Thu Aug 17 12:38:21 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 17 Aug 2000 04:38:21 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.95,1.96 configure.in,1.144,1.145 Message-ID: <200008171138.EAA21286@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv19129 Modified Files: Makefile.in configure.in Log Message: Fix up problems when compiling in a directory other than the source directory. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.95 retrieving revision 1.96 diff -C2 -r1.95 -r1.96 *** Makefile.in 2000/08/12 14:45:50 1.95 --- Makefile.in 2000/08/17 11:38:17 1.96 *************** *** 197,202 **** Grammar: ! P=`pwd`/Parser; cd $(srcdir)/Grammar; $(MAKE) PGENDIR=$$P \ ! OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all --- 197,201 ---- Grammar: ! cd Grammar ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.144 retrieving revision 1.145 diff -C2 -r1.144 -r1.145 *** configure.in 2000/08/12 18:43:02 1.144 --- configure.in 2000/08/17 11:38:18 1.145 *************** *** 1168,1171 **** --- 1168,1172 ---- Objects/Makefile \ Parser/Makefile \ + Grammar/Makefile \ Python/Makefile \ Modules/Makefile.pre \ From python-dev@python.org Thu Aug 17 12:38:21 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 17 Aug 2000 04:38:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Makefile.in,NONE,1.1 Makefile,1.4,NONE Message-ID: <200008171138.EAA21287@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv19129/Grammar Added Files: Makefile.in Removed Files: Makefile Log Message: Fix up problems when compiling in a directory other than the source directory. --- NEW FILE --- # NOTE: Makefile.in is converted into Makefile by the configure script # in the parent directory. Once configure has run, you can recreate # the Makefile by running just config.status. # === Variables set by config.stat === VERSION= @VERSION@ srcdir= @srcdir@ VPATH= @srcdir@ CC= @CC@ RANLIB= @RANLIB@ AR= @AR@ DEFS= @DEFS@ LIBS= @LIBS@ # === Fixed definitions === TOP= .. PGENDIR= $(TOP)/Parser PGEN= $(PGENDIR)/pgen DESTH= $(srcdir)/$(TOP)/Include/graminit.h DESTC= $(srcdir)/$(TOP)/Python/graminit.c all: install # This target is used by the master Makefile to add the objects to the library add2lib: install: $(DESTH) $(DESTC) depend: $(DESTH): graminit.h cp graminit.h $(DESTH) $(DESTC): graminit.c cp graminit.c $(DESTC) graminit.c graminit.h: $(PGEN) Grammar $(PGEN) $(srcdir)/Grammar $(PGEN): cd $(PGENDIR); $(MAKE) pgen clean: -rm -f *.o core *~ [@,#]* *.old *.orig *.rej -rm -f graminit.[ch] clobber: clean -rm -f tags TAGS From python-dev@python.org Thu Aug 17 12:41:10 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 17 Aug 2000 04:41:10 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.65,2.66 configure,1.133,1.134 Message-ID: <200008171141.EAA24934@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv24466 Modified Files: config.h.in configure Log Message: Reran autoconf. Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.65 retrieving revision 2.66 diff -C2 -r2.65 -r2.66 *** config.h.in 2000/08/05 23:28:51 2.65 --- config.h.in 2000/08/17 11:41:06 2.66 *************** *** 405,411 **** #undef HAVE_READLINK - /* Define if you have the rint function. */ - #undef HAVE_RINT - /* Define if you have the select function. */ #undef HAVE_SELECT --- 405,408 ---- Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.133 retrieving revision 1.134 diff -C2 -r1.133 -r1.134 *** configure 2000/08/10 04:23:28 1.133 --- configure 2000/08/17 11:41:06 1.134 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.142 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.145 # Guess values for system-dependent variables and create Makefiles. *************** *** 5085,5148 **** # (none yet) - # Cope with the DB mess. If we detect libdba, assume it's a version 2 - # or later DB and should be linked first (before the DB 1.xx stuff in glibc). - # Also define an appropriate symbol so we can conditionalize code in the - # dbmmodule; the API has changed since 1.xx. - echo $ac_n "checking for __db_mutex_lock in -ldba""... $ac_c" 1>&6 - echo "configure:5093: checking for __db_mutex_lock in -ldba" >&5 - ac_lib_var=`echo dba'_'__db_mutex_lock | sed 'y%./+-%__p_%'` - if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - ac_save_LIBS="$LIBS" - LIBS="-ldba $LIBS" - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" - fi - rm -f conftest* - LIBS="$ac_save_LIBS" - - fi - if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo dba | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <&6 - fi - - # Linux requires this for correct f.p. operations echo $ac_n "checking for __fpu_control""... $ac_c" 1>&6 ! echo "configure:5142: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5090: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" --- 5115,5119 ---- ; return 0; } EOF ! if { (eval echo configure:5118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" *************** *** 5185,5189 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5188: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then --- 5133,5137 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5136: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then *************** *** 5193,5197 **** LIBS="-lieee $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 5152,5156 ---- ; return 0; } EOF ! if { (eval echo configure:5155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 5237,5241 **** # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5240: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then --- 5185,5189 ---- # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5188: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then *************** *** 5262,5266 **** esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5265: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then --- 5210,5214 ---- esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5213: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then *************** *** 5283,5287 **** echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5286: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then --- 5231,5235 ---- echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5234: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then *************** *** 5307,5316 **** do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5310: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5258: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 5283,5287 ---- ; return 0; } EOF ! if { (eval echo configure:5286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** *** 5365,5369 **** # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5368: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5313,5317 ---- # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5316: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5373,5377 **** else cat > conftest.$ac_ext < --- 5321,5325 ---- else cat > conftest.$ac_ext < *************** *** 5385,5389 **** } EOF ! if { (eval echo configure:5388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes --- 5333,5337 ---- } EOF ! if { (eval echo configure:5336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes *************** *** 5403,5407 **** # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5406: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5351,5355 ---- # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5354: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5411,5415 **** else cat > conftest.$ac_ext < --- 5359,5363 ---- else cat > conftest.$ac_ext < *************** *** 5430,5434 **** } EOF ! if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull --- 5378,5382 ---- } EOF ! if { (eval echo configure:5381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull *************** *** 5456,5470 **** ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5459: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then --- 5404,5418 ---- ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5407: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5417: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then *************** *** 5496,5505 **** usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 ! echo "configure:5499: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&6 ! echo "configure:5447: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF --- 5463,5467 ---- EOF ! if { (eval echo configure:5466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF *************** *** 5534,5538 **** # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5537: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5482,5486 ---- # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5485: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5541,5545 **** # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < --- 5489,5493 ---- # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < *************** *** 5552,5560 **** ; return 0; } EOF ! if { (eval echo configure:5555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < --- 5500,5508 ---- ; return 0; } EOF ! if { (eval echo configure:5503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < *************** *** 5567,5571 **** ; return 0; } EOF ! if { (eval echo configure:5570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes --- 5515,5519 ---- ; return 0; } EOF ! if { (eval echo configure:5518: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes *************** *** 5587,5591 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no --- 5548,5552 ---- } EOF ! if { (eval echo configure:5551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no *************** *** 5627,5631 **** # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5630: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5575,5579 ---- # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5578: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5636,5640 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes --- 5593,5597 ---- EOF ! if { (eval echo configure:5596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes *************** *** 5677,5686 **** EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5680: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5625,5634 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5628: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** *** 5814,5817 **** --- 5762,5766 ---- Objects/Makefile \ Parser/Makefile \ + Grammar/Makefile \ Python/Makefile \ Modules/Makefile.pre \ *************** *** 5927,5930 **** --- 5876,5880 ---- Objects/Makefile \ Parser/Makefile \ + Grammar/Makefile \ Python/Makefile \ Modules/Makefile.pre \ From python-dev@python.org Thu Aug 17 21:59:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 13:59:40 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.3,1.4 Message-ID: <200008172059.NAA08099@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv8000 Modified Files: pep-0214.txt Log Message: Based on BDFL pronouncement, this PEP will be reconsidered for Python 2.1. It will not be included in Python 2.0. Index: pep-0214.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0214.txt 2000/08/16 14:59:57 1.3 --- pep-0214.txt 2000/08/17 20:59:35 1.4 *************** *** 3,7 **** Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.0 Status: Draft Created: 24-Jul-2000 --- 3,7 ---- Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.1 Status: Draft Created: 24-Jul-2000 From python-dev@python.org Thu Aug 17 23:19:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:19:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.20,1.21 Message-ID: <200008172219.PAA20766@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20709/lib Modified Files: libdis.tex Log Message: Martin v. Loewis : Document opcodes added to support extended call syntax. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** libdis.tex 2000/08/11 22:15:52 1.20 --- libdis.tex 2000/08/17 22:19:26 1.21 *************** *** 514,515 **** --- 514,534 ---- See the \code{slice()}\bifuncindex{slice} built-in function. \end{opcodedesc} + + \begin{opcodedesc}{CALL_FUNCTION_VAR}{argc} + Calls a function. \var{argc} is interpreted as in \code{CALL_FUNCTION}. + The top element on the stack contains the variable argument list, followed + by keyword and positional arguments. + \end{opcodedesc} + + \begin{opcodedesc}{CALL_FUNCTION_KW}{argc} + Calls a function. \var{argc} is interpreted as in \code{CALL_FUNCTION}. + The top element on the stack contains the keyword arguments dictionary, + followed by explicit keyword and positional arguments. + \end{opcodedesc} + + \begin{opcodedesc}{CALL_FUNCTION_VAR_KW}{argc} + Calls a function. \var{argc} is interpreted as in + \code{CALL_FUNCTION}. The top element on the stack contains the + keyword arguments dictionary, followed by the variable-arguments + tuple, followed by explicit keyword and positional arguments. + \end{opcodedesc} From python-dev@python.org Thu Aug 17 23:29:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:29:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libexcs.tex,1.30,1.31 Message-ID: <200008172229.PAA31375@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv31321/lib Modified Files: libexcs.tex Log Message: Revise the comments about the exceptions module to not refer to source code; it is not sufficiently readable now that it in written in C, and is less likely to be available to end users. Index: libexcs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libexcs.tex,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** libexcs.tex 2000/06/30 16:06:19 1.30 --- libexcs.tex 2000/08/17 22:29:31 1.31 *************** *** 6,14 **** Exceptions can be class objects or string objects. While ! traditionally, most exceptions have been string objects, in Python 1.5, all standard exceptions have been converted to class objects, ! and users are encouraged to do the same. The source code for those ! exceptions is present in the standard library module ! \module{exceptions}; this module never needs to be imported explicitly. Two distinct string objects with the same value are considered different --- 6,14 ---- Exceptions can be class objects or string objects. While ! traditionally most exceptions have been string objects, in Python 1.5, all standard exceptions have been converted to class objects, ! and users are encouraged to do the same. The exceptions are defined ! in the module \module{exceptions}; this module never needs to be ! imported explicitly. Two distinct string objects with the same value are considered different From python-dev@python.org Thu Aug 17 23:31:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:31:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmain.tex,1.5,1.6 Message-ID: <200008172231.PAA00890@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv842/lib Modified Files: libmain.tex Log Message: A little more text, and some really minor cleanups. Index: libmain.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmain.tex,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** libmain.tex 1998/08/10 19:41:57 1.5 --- libmain.tex 2000/08/17 22:31:23 1.6 *************** *** 1,9 **** \section{\module{__main__} --- ! Top-level script environment.} ! \declaremodule[main]{builtin}{__main__} \modulesynopsis{The environment where the top-level script is run.} This module represents the (otherwise anonymous) scope in which the interpreter's main program executes --- commands read either from ! standard input or from a script file. --- 1,16 ---- \section{\module{__main__} --- ! Top-level script environment} + \declaremodule[main]{builtin}{__main__} \modulesynopsis{The environment where the top-level script is run.} This module represents the (otherwise anonymous) scope in which the interpreter's main program executes --- commands read either from ! standard input, from a script file, or from an interactive prompt. It ! is this environment in which the idiomatic ``conditional script'' ! stanza causes a script to run: ! ! \begin{verbatim} ! if __name__ == "__main__": ! main() ! \end{verbatim} From python-dev@python.org Thu Aug 17 23:32:03 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:32:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc TODO,1.29,1.30 Message-ID: <200008172232.PAA01539@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv1478 Modified Files: TODO Log Message: Remove an item that's been done. Index: TODO =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/TODO,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** TODO 2000/07/31 18:18:27 1.29 --- TODO 2000/08/17 22:32:01 1.30 *************** *** 55,60 **** update submitted by Jim Kerr . - * Update the code/codeop module documentation. - * Update the httplib documentation to match Greg Stein's HTTP/1.1 support and new classes. (Greg, this is yours!) --- 55,58 ---- From python-dev@python.org Thu Aug 17 23:30:32 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:30:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfuncs.tex,1.68,1.69 Message-ID: <200008172230.PAA32411@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv32362/lib Modified Files: libfuncs.tex Log Message: Small cleanups, and note when zip() entered the menagerie. Index: libfuncs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfuncs.tex,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -r1.68 -r1.69 *** libfuncs.tex 2000/08/03 17:29:13 1.68 --- libfuncs.tex 2000/08/17 22:30:30 1.69 *************** *** 169,173 **** >>> dir(sys) ['argv', 'exit', 'modules', 'path', 'stderr', 'stdin', 'stdout'] - >>> \end{verbatim} \end{funcdesc} --- 169,172 ---- *************** *** 516,520 **** >>> range(1, 0) [] - >>> \end{verbatim} \end{funcdesc} --- 515,518 ---- *************** *** 531,535 **** >>> s "Monty Python's Flying Circus" - >>> \end{verbatim} --- 529,532 ---- *************** *** 713,715 **** --- 710,713 ---- length, \function{zip()} is similar to \function{map()} with an initial argument of \code{None}. + \versionadded{2.0} \end{funcdesc} From python-dev@python.org Thu Aug 17 23:37:35 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.44,2.45 classobject.c,2.102,2.103 Message-ID: <200008172237.PAA06934@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Objects Modified Files: abstract.c classobject.c Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.44 retrieving revision 2.45 diff -C2 -r2.44 -r2.45 *** abstract.c 2000/08/03 16:42:14 2.44 --- abstract.c 2000/08/17 22:37:32 2.45 *************** *** 877,884 **** --- 877,903 ---- } + static PyObject * + sliceobj_from_intint(int i, int j) + { + PyObject *start, *end, *slice; + start = PyInt_FromLong((long)i); + if (!start) + return NULL; + end = PyInt_FromLong((long)j); + if (!end) { + Py_DECREF(start); + return NULL; + } + slice = PySlice_New(start, end, NULL); + Py_DECREF(start); + Py_DECREF(end); + return slice; + } + PyObject * PySequence_GetSlice(PyObject *s, int i1, int i2) { PySequenceMethods *m; + PyMappingMethods *mp; if (!s) return null_error(); *************** *** 898,901 **** --- 917,928 ---- } return m->sq_slice(s, i1, i2); + } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) { + PyObject *res; + PyObject *slice = sliceobj_from_intint(i1, i2); + if (!slice) + return NULL; + res = mp->mp_subscript(s, slice); + Py_DECREF(slice); + return res; } *************** *** 961,964 **** --- 988,992 ---- { PySequenceMethods *m; + PyMappingMethods *mp; if (s == NULL) { *************** *** 981,985 **** --- 1009,1022 ---- } return m->sq_ass_slice(s, i1, i2, o); + } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) { + int res; + PyObject *slice = sliceobj_from_intint(i1, i2); + if (!slice) + return -1; + res = mp->mp_ass_subscript(s, slice, o); + Py_DECREF(slice); + return res; } + type_error("object doesn't support slice assignment"); return -1; Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.102 retrieving revision 2.103 diff -C2 -r2.102 -r2.103 *** classobject.c 2000/07/23 22:09:59 2.102 --- classobject.c 2000/08/17 22:37:32 2.103 *************** *** 973,976 **** --- 973,997 ---- static PyObject * + sliceobj_from_intint(int i, int j) + { + PyObject *start, *end, *res; + + start = PyInt_FromLong((long)i); + if (!start) + return NULL; + + end = PyInt_FromLong((long)j); + if (!end) { + Py_DECREF(start); + return NULL; + } + res = PySlice_New(start, end, NULL); + Py_DECREF(start); + Py_DECREF(end); + return res; + } + + + static PyObject * instance_slice(PyInstanceObject *inst, int i, int j) { *************** *** 981,987 **** getslicestr = PyString_InternFromString("__getslice__"); func = instance_getattr(inst, getslicestr); ! if (func == NULL) ! return NULL; ! arg = Py_BuildValue("(ii)", i, j); if (arg == NULL) { Py_DECREF(func); --- 1002,1018 ---- getslicestr = PyString_InternFromString("__getslice__"); func = instance_getattr(inst, getslicestr); ! ! if (func == NULL) { ! PyErr_Clear(); ! ! if (getitemstr == NULL) ! getitemstr = PyString_InternFromString("__getitem__"); ! func = instance_getattr(inst, getitemstr); ! if (func == NULL) ! return NULL; ! arg = Py_BuildValue("(N)", sliceobj_from_intint(i, j)); ! } else ! arg = Py_BuildValue("(ii)", i, j); ! if (arg == NULL) { Py_DECREF(func); *************** *** 1039,1042 **** --- 1070,1086 ---- PyString_InternFromString("__delslice__"); func = instance_getattr(inst, delslicestr); + if (func == NULL) { + PyErr_Clear(); + if (delitemstr == NULL) + delitemstr = + PyString_InternFromString("__delitem__"); + func = instance_getattr(inst, delitemstr); + if (func == NULL) + return -1; + + arg = Py_BuildValue("(N)", + sliceobj_from_intint(i, j)); + } else + arg = Py_BuildValue("(ii)", i, j); } else { *************** *** 1045,1055 **** PyString_InternFromString("__setslice__"); func = instance_getattr(inst, setslicestr); } - if (func == NULL) - return -1; - if (value == NULL) - arg = Py_BuildValue("(ii)", i, j); - else - arg = Py_BuildValue("(iiO)", i, j, value); if (arg == NULL) { Py_DECREF(func); --- 1089,1106 ---- PyString_InternFromString("__setslice__"); func = instance_getattr(inst, setslicestr); + if (func == NULL) { + PyErr_Clear(); + if (setitemstr == NULL) + setitemstr = + PyString_InternFromString("__setitem__"); + func = instance_getattr(inst, setitemstr); + if (func == NULL) + return -1; + + arg = Py_BuildValue("(NO)", + sliceobj_from_intint(i, j), value); + } else + arg = Py_BuildValue("(iiO)", i, j, value); } if (arg == NULL) { Py_DECREF(func); From python-dev@python.org Thu Aug 17 23:37:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref3.tex,1.46,1.47 Message-ID: <200008172237.PAA06915@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Doc/ref Modified Files: ref3.tex Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. Index: ref3.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref3.tex,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -r1.46 -r1.47 *** ref3.tex 2000/07/16 19:05:38 1.46 --- ref3.tex 2000/08/17 22:37:31 1.47 *************** *** 1043,1051 **** sequence, the allowable keys should be the integers \var{k} for which \code{0 <= \var{k} < \var{N}} where \var{N} is the length of the ! sequence, and the method \method{__getslice__()} (see below) should be ! defined. It is also recommended that mappings provide methods ! \method{keys()}, \method{values()}, \method{items()}, ! \method{has_key()}, \method{get()}, \method{clear()}, \method{copy()}, ! and \method{update()} behaving similar to those for Python's standard dictionary objects; mutable sequences should provide methods \method{append()}, \method{count()}, \method{index()}, --- 1043,1052 ---- sequence, the allowable keys should be the integers \var{k} for which \code{0 <= \var{k} < \var{N}} where \var{N} is the length of the ! sequence, or slice objects, which define a range of items. (For backwards ! compatibility, the method \method{__getslice__()} (see below) can also be ! defined to handle simple, but not extended slices.) It is also recommended ! that mappings provide methods \method{keys()}, \method{values()}, ! \method{items()}, \method{has_key()}, \method{get()}, \method{clear()}, ! \method{copy()}, and \method{update()} behaving similar to those for Python's standard dictionary objects; mutable sequences should provide methods \method{append()}, \method{count()}, \method{index()}, *************** *** 1142,1145 **** --- 1143,1148 ---- negative. Indexes which are greater than the length of the sequence are not modified. + This method is deprecated. If no \method{__getslice__()} is found, a slice + object is created instead, and passed to \method{__getitem__()} instead. \end{methoddesc} *************** *** 1147,1150 **** --- 1150,1156 ---- Called to implement assignment to \code{\var{self}[\var{i}:\var{j}]}. Same notes for \var{i} and \var{j} as for \method{__getslice__()}. + + This method is deprecated. If no \method{__setslice__()} is found, a slice + object is created instead, and passed to \method{__setitem__()} instead. \end{methoddesc} *************** *** 1152,1161 **** Called to implement deletion of \code{\var{self}[\var{i}:\var{j}]}. Same notes for \var{i} and \var{j} as for \method{__getslice__()}. \end{methoddesc} ! Notice that these methods are only invoked when a single slice with a ! single colon is used. For slice operations involving extended slice ! notation, \method{__getitem__()}, \method{__setitem__()} ! or\method{__delitem__()} is called. --- 1158,1170 ---- Called to implement deletion of \code{\var{self}[\var{i}:\var{j}]}. Same notes for \var{i} and \var{j} as for \method{__getslice__()}. + This method is deprecated. If no \method{__delslice__()} is found, a slice + object is created instead, and passed to \method{__delitem__()} instead. \end{methoddesc} ! Notice that these methods are only invoked when a single slice with a single ! colon is used, and the slice method is available. For slice operations ! involving extended slice notation, or in absence of the slice methods, ! \method{__getitem__()}, \method{__setitem__()} or \method{__delitem__()} is ! called with a slice object as argument. From python-dev@python.org Thu Aug 17 23:37:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_class.py,NONE,1.1 Message-ID: <200008172237.PAA06918@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Lib/test Added Files: test_class.py Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. --- NEW FILE --- "Test the functionality of Python classes implementing operators." testmeths = [ # Binary operations "add", "radd", "sub", "rsub", "mul", "rmul", "div", "rdiv", "mod", "rmod", "divmod", "rdivmod", "pow", "rpow", "rshift", "rrshift", "lshift", "rlshift", "and", "rand", "or", "ror", "xor", "rxor", # List/dict operations "contains", "getitem", "getslice", "setitem", "setslice", "delitem", "delslice", # Unary operations "neg", "pos", "abs", "int", "long", "float", "oct", "hex", # generic operations "init", "del", ] # These need to return something other than None # "coerce", # "hash", # "str", # "repr", # These are separate because they can influence the test of other methods. # "getattr", # "setattr", # "delattr", class AllTests: def __coerce__(self, *args): print "__coerce__:", args return (self,) + args def __hash__(self, *args): print "__hash__:", args return id(self) def __str__(self, *args): print "__str__:", args return "AllTests" def __repr__(self, *args): print "__repr__:", args return "AllTests" def __cmp__(self, *args): print "__cmp__:", args return 0 for method in testmeths: exec("""def __%(method)s__(self, *args): print "__%(method)s__:", args """%locals(), AllTests.__dict__); # this also tests __init__ of course. testme = AllTests() # Binary operations testme + 1 1 + testme testme - 1 1 - testme testme * 1 1 * testme testme / 1 1 / testme testme % 1 1 % testme divmod(testme,1) divmod(1, testme) testme ** 1 1 ** testme testme >> 1 1 >> testme testme << 1 1 << testme testme & 1 1 & testme testme | 1 1 | testme testme ^ 1 1 ^ testme # List/dict operations 1 in testme testme[1] testme[1] = 1 del testme[1] testme[:42] testme[:42] = "The Answer" del testme[:42] testme[2:1024:10] testme[2:1024:10] = "A lot" del testme[2:1024:10] testme[:42, ..., :24:, 24, 100] testme[:42, ..., :24:, 24, 100] = "Strange" del testme[:42, ..., :24:, 24, 100] # Now remove the slice hooks to see if converting normal slices to slice # object works. del AllTests.__getslice__ del AllTests.__setslice__ del AllTests.__delslice__ testme[:42] testme[:42] = "The Answer" del testme[:42] # Unary operations -testme +testme abs(testme) int(testme) long(testme) float(testme) oct(testme) hex(testme) # And the rest... hash(testme) repr(testme) str(testme) testme == 1 testme < 1 testme > 1 testme <> 1 testme != 1 1 == testme 1 < testme 1 > testme 1 <> testme 1 != testme # This test has to be last (duh.) del testme # Interfering tests class ExtraTests: def __getattr__(self, *args): print "__getattr__:", args return "SomeVal" def __setattr__(self, *args): print "__setattr__:", args def __delattr__(self, *args): print "__delattr__:", args testme = ExtraTests() testme.spam testme.eggs = "spam, spam, spam and ham" del testme.cardinal From python-dev@python.org Thu Aug 17 23:37:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_class,NONE,1.1 Message-ID: <200008172237.PAA06923@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Lib/test/output Added Files: test_class Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. --- NEW FILE --- test_class __init__: () __coerce__: (1,) __add__: (1,) __coerce__: (1,) __radd__: (1,) __coerce__: (1,) __sub__: (1,) __coerce__: (1,) __rsub__: (1,) __coerce__: (1,) __mul__: (1,) __coerce__: (1,) __rmul__: (1,) __coerce__: (1,) __div__: (1,) __coerce__: (1,) __rdiv__: (1,) __coerce__: (1,) __mod__: (1,) __coerce__: (1,) __rmod__: (1,) __coerce__: (1,) __divmod__: (1,) __coerce__: (1,) __rdivmod__: (1,) __coerce__: (1,) __pow__: (1,) __coerce__: (1,) __rpow__: (1,) __coerce__: (1,) __rshift__: (1,) __coerce__: (1,) __rrshift__: (1,) __coerce__: (1,) __lshift__: (1,) __coerce__: (1,) __rlshift__: (1,) __coerce__: (1,) __and__: (1,) __coerce__: (1,) __rand__: (1,) __coerce__: (1,) __or__: (1,) __coerce__: (1,) __ror__: (1,) __coerce__: (1,) __xor__: (1,) __coerce__: (1,) __rxor__: (1,) __contains__: (1,) __getitem__: (1,) __setitem__: (1, 1) __delitem__: (1,) __getslice__: (0, 42) __setslice__: (0, 42, 'The Answer') __delslice__: (0, 42) __getitem__: (slice(2, 1024, 10),) __setitem__: (slice(2, 1024, 10), 'A lot') __delitem__: (slice(2, 1024, 10),) __getitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) __setitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100), 'Strange') __delitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) __getitem__: (slice(0, 42, None),) __setitem__: (slice(0, 42, None), 'The Answer') __delitem__: (slice(0, 42, None),) __neg__: () __pos__: () __abs__: () __int__: () __long__: () __float__: () __oct__: () __hex__: () __hash__: () __repr__: () __str__: () __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __del__: () __getattr__: ('spam',) __setattr__: ('eggs', 'spam, spam, spam and ham') __delattr__: ('cardinal',) From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.27,1.28 Message-ID: <200008172255.PAA25233@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Doc/ref Modified Files: ref6.tex Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** ref6.tex 2000/07/16 19:05:38 1.27 --- ref6.tex 2000/08/17 22:54:59 1.28 *************** *** 444,449 **** \begin{verbatim} ! import_stmt: "import" module ("," module)* ! | "from" module "import" identifier ("," identifier)* | "from" module "import" "*" module: (identifier ".")* identifier --- 444,450 ---- \begin{verbatim} ! import_stmt: "import" module ["as" name] ("," module ["as" name] )* ! | "from" module "import" identifier ["as" name] ! ("," identifier ["as" name] )* | "from" module "import" "*" module: (identifier ".")* identifier *************** *** 497,507 **** The first form of \keyword{import} statement binds the module name in the local namespace to the module object, and then goes on to import the ! next identifier, if any. The \keyword{from} form does not bind the ! module name: it goes through the list of identifiers, looks each one ! of them up in the module found in step (1), and binds the name in the ! local namespace to the object thus found. If a name is not found, \exception{ImportError} is raised. If the list of identifiers is replaced ! by a star (\samp{*}), all names defined in the module are bound, ! except those beginning with an underscore (\character{_}). \indexii{name}{binding} \exindex{ImportError} --- 498,511 ---- The first form of \keyword{import} statement binds the module name in the local namespace to the module object, and then goes on to import the ! next identifier, if any. If the module name is followed by \keyword{as}, ! the name following \keyword{as} is used as the local name for the module. ! The \keyword{from} form does not bind the module name: it goes through the ! list of identifiers, looks each one of them up in the module found in step ! (1), and binds the name in the local namespace to the object thus found. ! Like with the first form of \keyword{import}, an alternate local name can be ! supplied by specifying "\keyword{as} localname". If a name is not found, \exception{ImportError} is raised. If the list of identifiers is replaced ! by a star (\samp{*}), all names defined in the module are bound, except ! those beginning with an underscore (\character{_}). \indexii{name}{binding} \exindex{ImportError} From python-dev@python.org Thu Aug 17 23:55:01 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.21,1.22 Message-ID: <200008172255.PAA25232@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Doc/lib Modified Files: libdis.tex Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** libdis.tex 2000/08/17 22:19:26 1.21 --- libdis.tex 2000/08/17 22:54:59 1.22 *************** *** 302,305 **** --- 302,311 ---- \end{opcodedesc} + \begin{opcodedesc}{IMPORT_STAR}{} + Loads all symbols not starting with '_' directly from the module TOS + to the local namespace. The module is popped after loading all names. + This opcode implements 'from module import *'. + \begin{opcodedesc} + \begin{opcodedesc}{EXEC_STMT}{} Implements \code{exec TOS2,TOS1,TOS}. The compiler fills *************** *** 412,417 **** \begin{opcodedesc}{IMPORT_FROM}{namei} ! Imports the attribute \code{co_names[\var{namei}]}. The module to import ! from is found in TOS and left there. \end{opcodedesc} --- 418,424 ---- \begin{opcodedesc}{IMPORT_FROM}{namei} ! Loads the attribute \code{co_names[\var{namei}]} from the module found in ! TOS. The resulting object is pushed onto the stack, to be subsequently ! stored by a \code{STORE_FAST} instruction. \end{opcodedesc} From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.36,1.37 Message-ID: <200008172255.PAA25251@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Grammar Modified Files: Grammar Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** Grammar 2000/08/12 18:09:51 1.36 --- Grammar 2000/08/17 22:54:59 1.37 *************** *** 42,46 **** return_stmt: 'return' [testlist] raise_stmt: 'raise' [test [',' test [',' test]]] ! import_stmt: 'import' dotted_name (',' dotted_name)* | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*) dotted_name: NAME ('.' NAME)* global_stmt: 'global' NAME (',' NAME)* --- 42,48 ---- return_stmt: 'return' [testlist] raise_stmt: 'raise' [test [',' test [',' test]]] ! import_stmt: 'import' dotted_as_name (',' dotted_as_name)* | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*) ! import_as_name: NAME [NAME NAME] ! dotted_as_name: dotted_name [NAME NAME] dotted_name: NAME ('.' NAME)* global_stmt: 'global' NAME (',' NAME)* From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.22,1.23 Message-ID: <200008172255.PAA25246@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Lib Modified Files: dis.py Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** dis.py 2000/08/11 22:15:52 1.22 --- dis.py 2000/08/17 22:54:59 1.23 *************** *** 196,200 **** def_op('LOAD_LOCALS', 82) def_op('RETURN_VALUE', 83) ! def_op('EXEC_STMT', 85) --- 196,200 ---- def_op('LOAD_LOCALS', 82) def_op('RETURN_VALUE', 83) ! def_op('IMPORT_STAR', 84) def_op('EXEC_STMT', 85) From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include graminit.h,2.14,2.15 opcode.h,2.26,2.27 Message-ID: <200008172255.PAA25258@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Include Modified Files: graminit.h opcode.h Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: graminit.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/graminit.h,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** graminit.h 2000/08/12 18:09:51 2.14 --- graminit.h 2000/08/17 22:54:59 2.15 *************** *** 20,61 **** #define raise_stmt 275 #define import_stmt 276 ! #define dotted_name 277 ! #define global_stmt 278 ! #define exec_stmt 279 ! #define assert_stmt 280 ! #define compound_stmt 281 ! #define if_stmt 282 ! #define while_stmt 283 ! #define for_stmt 284 ! #define try_stmt 285 ! #define except_clause 286 ! #define suite 287 ! #define test 288 ! #define and_test 289 ! #define not_test 290 ! #define comparison 291 ! #define comp_op 292 ! #define expr 293 ! #define xor_expr 294 ! #define and_expr 295 ! #define shift_expr 296 ! #define arith_expr 297 ! #define term 298 ! #define factor 299 ! #define power 300 ! #define atom 301 ! #define listmaker 302 ! #define lambdef 303 ! #define trailer 304 ! #define subscriptlist 305 ! #define subscript 306 ! #define sliceop 307 ! #define exprlist 308 ! #define testlist 309 ! #define dictmaker 310 ! #define classdef 311 ! #define arglist 312 ! #define argument 313 ! #define list_iter 314 ! #define list_for 315 ! #define list_if 316 --- 20,63 ---- #define raise_stmt 275 #define import_stmt 276 ! #define import_as_name 277 ! #define dotted_as_name 278 ! #define dotted_name 279 ! #define global_stmt 280 ! #define exec_stmt 281 ! #define assert_stmt 282 ! #define compound_stmt 283 ! #define if_stmt 284 ! #define while_stmt 285 ! #define for_stmt 286 ! #define try_stmt 287 ! #define except_clause 288 ! #define suite 289 ! #define test 290 ! #define and_test 291 ! #define not_test 292 ! #define comparison 293 ! #define comp_op 294 ! #define expr 295 ! #define xor_expr 296 ! #define and_expr 297 ! #define shift_expr 298 ! #define arith_expr 299 ! #define term 300 ! #define factor 301 ! #define power 302 ! #define atom 303 ! #define listmaker 304 ! #define lambdef 305 ! #define trailer 306 ! #define subscriptlist 307 ! #define subscript 308 ! #define sliceop 309 ! #define exprlist 310 ! #define testlist 311 ! #define dictmaker 312 ! #define classdef 313 ! #define arglist 314 ! #define argument 315 ! #define list_iter 316 ! #define list_for 317 ! #define list_if 318 Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** opcode.h 2000/08/11 22:15:52 2.26 --- opcode.h 2000/08/17 22:54:59 2.27 *************** *** 66,70 **** #define LOAD_LOCALS 82 #define RETURN_VALUE 83 ! #define EXEC_STMT 85 --- 66,70 ---- #define LOAD_LOCALS 82 #define RETURN_VALUE 83 ! #define IMPORT_STAR 84 #define EXEC_STMT 85 From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_pkg.py,1.7,1.8 Message-ID: <200008172255.PAA25253@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Lib/test Modified Files: test_pkg.py Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: test_pkg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_pkg.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** test_pkg.py 1998/05/19 15:09:42 1.7 --- test_pkg.py 2000/08/17 22:54:59 1.8 *************** *** 166,169 **** --- 166,196 ---- print dir() """), + + ("t7", [ + ("t7.py", "print 'Importing t7.py'"), + ("t7", None), + ("t7 __init__.py", "print __name__, 'loading'"), + ("t7 sub.py", "print 'THIS SHOULD NOT BE PRINTED (sub.py)'"), + ("t7 sub", None), + ("t7 sub __init__.py", ""), + ("t7 sub subsub.py", "print 'THIS SHOULD NOT BE PRINTED (subsub.py)'"), + ("t7 sub subsub", None), + ("t7 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"), + ], + """ + t7, sub, subsub = None, None, None + import t7 as tas + print dir(tas) + assert not t7 + from t7 import sub as subpar + print dir(subpar) + assert not t7 and not sub + from t7.sub import subsub as subsubsub + print dir(subsubsub) + assert not t7 and not sub and not subsub + from t7.sub.subsub import spam as ham + print "t7.sub.subsub.spam =", ham + assert not t7 and not sub and not subsub + """), ] From python-dev@python.org Thu Aug 17 23:55:03 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.189,2.190 compile.c,2.126,2.127 graminit.c,2.24,2.25 import.c,2.145,2.146 Message-ID: <200008172255.PAA25278@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Python Modified Files: ceval.c compile.c graminit.c import.c Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.189 retrieving revision 2.190 diff -C2 -r2.189 -r2.190 *** ceval.c 2000/08/11 22:15:52 2.189 --- ceval.c 2000/08/17 22:55:00 2.190 *************** *** 67,71 **** PyObject *, PyObject *); static PyObject *cmp_outcome(int, PyObject *, PyObject *); ! static int import_from(PyObject *, PyObject *, PyObject *); static PyObject *build_class(PyObject *, PyObject *, PyObject *); static int exec_statement(PyFrameObject *, --- 67,72 ---- PyObject *, PyObject *); static PyObject *cmp_outcome(int, PyObject *, PyObject *); ! static PyObject *import_from(PyObject *, PyObject *); ! static int import_all_from(PyObject *, PyObject *); static PyObject *build_class(PyObject *, PyObject *, PyObject *); static int exec_statement(PyFrameObject *, *************** *** 1415,1421 **** break; ! case IMPORT_FROM: ! w = GETNAMEV(oparg); ! v = TOP(); PyFrame_FastToLocals(f); if ((x = f->f_locals) == NULL) { --- 1416,1421 ---- break; ! case IMPORT_STAR: ! v = POP(); PyFrame_FastToLocals(f); if ((x = f->f_locals) == NULL) { *************** *** 1424,1432 **** break; } ! err = import_from(x, v, w); PyFrame_LocalsToFast(f, 0); if (err == 0) continue; break; case JUMP_FORWARD: JUMPBY(oparg); --- 1424,1441 ---- break; } ! err = import_all_from(x, v); PyFrame_LocalsToFast(f, 0); + Py_DECREF(v); if (err == 0) continue; break; + case IMPORT_FROM: + w = GETNAMEV(oparg); + v = TOP(); + x = import_from(v, w); + PUSH(x); + if (x != NULL) continue; + break; + case JUMP_FORWARD: JUMPBY(oparg); *************** *** 2648,2653 **** } ! static int ! import_from(PyObject *locals, PyObject *v, PyObject *name) { PyObject *w, *x; --- 2657,2662 ---- } ! static PyObject * ! import_from(PyObject *v, PyObject *name) { PyObject *w, *x; *************** *** 2655,2688 **** PyErr_SetString(PyExc_TypeError, "import-from requires module object"); return -1; } ! w = PyModule_GetDict(v); ! if (PyString_AsString(name)[0] == '*') { ! int pos, err; ! PyObject *name, *value; ! pos = 0; ! while (PyDict_Next(w, &pos, &name, &value)) { ! if (!PyString_Check(name) || ! PyString_AsString(name)[0] == '_') continue; ! Py_INCREF(value); ! err = PyDict_SetItem(locals, name, value); ! Py_DECREF(value); ! if (err != 0) ! return -1; ! } ! return 0; ! } ! else { ! x = PyDict_GetItem(w, name); ! if (x == NULL) { ! PyErr_Format(PyExc_ImportError, ! "cannot import name %.230s", ! PyString_AsString(name)); return -1; - } - else - return PyDict_SetItem(locals, name, x); } } --- 2664,2705 ---- PyErr_SetString(PyExc_TypeError, "import-from requires module object"); + return NULL; + } + w = PyModule_GetDict(v); /* TDB: can this not fail ? */ + x = PyDict_GetItem(w, name); + if (x == NULL) { + PyErr_Format(PyExc_ImportError, + "cannot import name %.230s", + PyString_AsString(name)); + } else + Py_INCREF(x); + return x; + } + + static int + import_all_from(PyObject *locals, PyObject *v) + { + int pos = 0, err; + PyObject *name, *value; + PyObject *w; + + if (!PyModule_Check(v)) { + PyErr_SetString(PyExc_TypeError, + "import-from requires module object"); return -1; } ! w = PyModule_GetDict(v); /* TBD: can this not fail ? */ ! ! while (PyDict_Next(w, &pos, &name, &value)) { ! if (!PyString_Check(name) || ! PyString_AsString(name)[0] == '_') continue; ! Py_INCREF(value); ! err = PyDict_SetItem(locals, name, value); ! Py_DECREF(value); ! if (err != 0) return -1; } + return 0; } *************** *** 2826,2830 **** opcode = (*next_instr++); ! if (opcode != IMPORT_FROM) { Py_INCREF(Py_None); return Py_None; --- 2843,2847 ---- opcode = (*next_instr++); ! if (opcode != IMPORT_FROM && opcode != IMPORT_STAR) { Py_INCREF(Py_None); return Py_None; *************** *** 2834,2849 **** if (list == NULL) return NULL; ! ! do { ! oparg = (next_instr[1]<<8) + next_instr[0]; ! next_instr += 2; ! name = Getnamev(f, oparg); ! if (PyList_Append(list, name) < 0) { Py_DECREF(list); ! break; ! } ! opcode = (*next_instr++); ! } while (opcode == IMPORT_FROM); ! return list; } --- 2851,2876 ---- if (list == NULL) return NULL; ! ! if (opcode == IMPORT_STAR) { ! name = PyString_FromString("*"); ! if (!name) Py_DECREF(list); ! else { ! if (PyList_Append(list, name) < 0) ! Py_DECREF(list); ! Py_DECREF(name); ! } ! } else { ! do { ! oparg = (next_instr[1]<<8) + next_instr[0]; ! next_instr += 2; ! name = Getnamev(f, oparg); ! if (PyList_Append(list, name) < 0) { ! Py_DECREF(list); ! break; ! } ! opcode = (*next_instr++); ! } while (opcode == IMPORT_FROM); ! } return list; } Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.126 retrieving revision 2.127 diff -C2 -r2.126 -r2.127 *** compile.c 2000/08/15 16:41:26 2.126 --- compile.c 2000/08/17 22:55:00 2.127 *************** *** 2097,2100 **** --- 2097,2116 ---- static void + com_from_import(struct compiling *c, node *n) + { + com_addopname(c, IMPORT_FROM, CHILD(n, 0)); + com_push(c, 1); + if (NCH(n) > 1) { + if (strcmp(STR(CHILD(n, 1)), "as") != 0) { + com_error(c, PyExc_SyntaxError, "invalid syntax"); + return; + } + com_addopname(c, STORE_NAME, CHILD(n, 2)); + } else + com_addopname(c, STORE_NAME, CHILD(n, 0)); + com_pop(c, 1); + } + + static void com_import_stmt(struct compiling *c, node *n) { *************** *** 2108,2114 **** com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); ! for (i = 3; i < NCH(n); i += 2) ! com_addopname(c, IMPORT_FROM, CHILD(n, i)); ! com_addbyte(c, POP_TOP); com_pop(c, 1); } --- 2124,2134 ---- com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); ! if (TYPE(CHILD(n, 3)) == STAR) ! com_addbyte(c, IMPORT_STAR); ! else { ! for (i = 3; i < NCH(n); i += 2) ! com_from_import(c, CHILD(n, i)); ! com_addbyte(c, POP_TOP); ! } com_pop(c, 1); } *************** *** 2116,2123 **** /* 'import' ... */ for (i = 1; i < NCH(n); i += 2) { ! REQ(CHILD(n, i), dotted_name); ! com_addopname(c, IMPORT_NAME, CHILD(n, i)); com_push(c, 1); ! com_addopname(c, STORE_NAME, CHILD(CHILD(n, i), 0)); com_pop(c, 1); } --- 2136,2153 ---- /* 'import' ... */ for (i = 1; i < NCH(n); i += 2) { ! node *subn = CHILD(n, i); ! REQ(subn, dotted_as_name); ! com_addopname(c, IMPORT_NAME, CHILD(subn, 0)); com_push(c, 1); ! if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0) { ! com_error(c, PyExc_SyntaxError, ! "invalid syntax"); ! return; ! } ! com_addopname(c, STORE_NAME, CHILD(subn, 2)); ! } else ! com_addopname(c, STORE_NAME, ! CHILD(CHILD(subn, 0),0)); com_pop(c, 1); } *************** *** 3296,3299 **** --- 3326,3330 ---- com_addlocal_o(c, GETNAMEOBJ(oparg)); break; + case IMPORT_STAR: case EXEC_STMT: c->c_flags &= ~CO_OPTIMIZED; *************** *** 3302,3305 **** --- 3333,3337 ---- } + /* TBD: Is this still necessary ? */ if (PyDict_GetItemString(c->c_locals, "*") != NULL) c->c_flags &= ~CO_OPTIMIZED; Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -r2.24 -r2.25 *** graminit.c 2000/08/12 18:09:51 2.24 --- graminit.c 2000/08/17 22:55:00 2.25 *************** *** 364,368 **** }; static arc arcs_20_2[1] = { ! {50, 4}, }; static arc arcs_20_3[2] = { --- 364,368 ---- }; static arc arcs_20_2[1] = { ! {52, 4}, }; [...2357 lines suppressed...] {25, 0}, {2, 0}, {3, 0}, ! {316, 0}, {1, "lambda"}, ! {314, 0}, {307, 0}, + {308, 0}, + {309, 0}, {1, "class"}, {315, 0}, ! {317, 0}, ! {318, 0}, }; grammar _PyParser_Grammar = { ! 63, dfas, ! {130, labels}, 256 }; Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.145 retrieving revision 2.146 diff -C2 -r2.145 -r2.146 *** import.c 2000/08/11 22:15:52 2.145 --- import.c 2000/08/17 22:55:00 2.146 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50811 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50815 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Thu Aug 17 23:55:03 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_pkg,1.3,1.4 Message-ID: <200008172255.PAA25265@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Lib/test/output Modified Files: test_pkg Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: test_pkg =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_pkg,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_pkg 1997/09/08 16:06:20 1.3 --- test_pkg 2000/08/17 22:55:00 1.4 *************** *** 37,38 **** --- 37,45 ---- ['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'eggs', 'ham', 'spam'] ['eggs', 'ham', 'spam', 't6'] + running test t7 + t7 loading + ['__builtins__', '__doc__', '__file__', '__name__', '__path__'] + ['__builtins__', '__doc__', '__file__', '__name__', '__path__'] + t7.sub.subsub loading + ['__builtins__', '__doc__', '__file__', '__name__', '__path__', 'spam'] + t7.sub.subsub.spam = 1 From python-dev@python.org Fri Aug 18 00:08:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 16:08:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib symbol.py,1.10,1.11 Message-ID: <200008172308.QAA10452@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10358/Lib Modified Files: symbol.py Log Message: Update to reflect the recent Grammar changes. Index: symbol.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/symbol.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** symbol.py 2000/08/12 19:09:14 1.10 --- symbol.py 2000/08/17 23:08:05 1.11 *************** *** 32,75 **** raise_stmt = 275 import_stmt = 276 ! dotted_name = 277 ! global_stmt = 278 ! exec_stmt = 279 ! assert_stmt = 280 ! compound_stmt = 281 ! if_stmt = 282 ! while_stmt = 283 ! for_stmt = 284 ! try_stmt = 285 ! except_clause = 286 ! suite = 287 ! test = 288 ! and_test = 289 ! not_test = 290 ! comparison = 291 ! comp_op = 292 ! expr = 293 ! xor_expr = 294 ! and_expr = 295 ! shift_expr = 296 ! arith_expr = 297 ! term = 298 ! factor = 299 ! power = 300 ! atom = 301 ! listmaker = 302 ! lambdef = 303 ! trailer = 304 ! subscriptlist = 305 ! subscript = 306 ! sliceop = 307 ! exprlist = 308 ! testlist = 309 ! dictmaker = 310 ! classdef = 311 ! arglist = 312 ! argument = 313 ! list_iter = 314 ! list_for = 315 ! list_if = 316 #--end constants-- --- 32,77 ---- raise_stmt = 275 import_stmt = 276 ! import_as_name = 277 ! dotted_as_name = 278 ! dotted_name = 279 ! global_stmt = 280 ! exec_stmt = 281 ! assert_stmt = 282 ! compound_stmt = 283 ! if_stmt = 284 ! while_stmt = 285 ! for_stmt = 286 ! try_stmt = 287 ! except_clause = 288 ! suite = 289 ! test = 290 ! and_test = 291 ! not_test = 292 ! comparison = 293 ! comp_op = 294 ! expr = 295 ! xor_expr = 296 ! and_expr = 297 ! shift_expr = 298 ! arith_expr = 299 ! term = 300 ! factor = 301 ! power = 302 ! atom = 303 ! listmaker = 304 ! lambdef = 305 ! trailer = 306 ! subscriptlist = 307 ! subscript = 308 ! sliceop = 309 ! exprlist = 310 ! testlist = 311 ! dictmaker = 312 ! classdef = 313 ! arglist = 314 ! argument = 315 ! list_iter = 316 ! list_for = 317 ! list_if = 318 #--end constants-- From python-dev@python.org Fri Aug 18 00:15:24 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 17 Aug 2000 16:15:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libpyexpat.tex,1.3,1.4 Message-ID: <200008172315.QAA18435@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv18185 Modified Files: libpyexpat.tex Log Message: Document the returns_unicode attribute Index: libpyexpat.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libpyexpat.tex,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** libpyexpat.tex 2000/07/11 16:30:30 1.3 --- libpyexpat.tex 2000/08/17 23:15:21 1.4 *************** *** 93,100 **** \end{methoddesc} ! \class{xmlparser} objects have the following attributes, containing ! values relating to the most recent error encountered by an ! \class{xmlparser} object. These attributes will only have correct ! values once a call to \method{Parse()} or \method{ParseFile()} has raised a \exception{pyexpat.error} exception. --- 93,107 ---- \end{methoddesc} ! \class{xmlparser} objects have the following attributes. ! ! \begin{datadesc}{returns_unicode} ! If this attribute is set to 1, the handler functions will be passed ! Unicode strings. If \member{returns_unicode} is 0, 8-bit strings ! containing UTF-8 encoded data will be passed to the handlers. ! \end{datadesc} ! ! The following attributes contain values relating to the most recent ! error encountered by an \class{xmlparser} object, and will only have ! correct values once a call to \method{Parse()} or \method{ParseFile()} has raised a \exception{pyexpat.error} exception. From python-dev@python.org Fri Aug 18 03:15:58 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 19:15:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.22,1.23 Message-ID: <200008180215.TAA32598@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv32589/lib Modified Files: libdis.tex Log Message: Fix a markup error that caused formatting to fail. Lots of minor markup adjustments as well. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** libdis.tex 2000/08/17 22:54:59 1.22 --- libdis.tex 2000/08/18 02:15:55 1.23 *************** *** 279,293 **** \begin{opcodedesc}{PRINT_ITEM}{} Prints TOS. There is one such instruction for ! each item in the print statement. \end{opcodedesc} \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the ! last operation of a print statement, unless the statement ends ! with a comma. \end{opcodedesc} \begin{opcodedesc}{BREAK_LOOP}{} ! Terminates a loop due to a break statement. \end{opcodedesc} --- 279,293 ---- \begin{opcodedesc}{PRINT_ITEM}{} Prints TOS. There is one such instruction for ! each item in the \keyword{print} statement. \end{opcodedesc} \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the ! last operation of a \keyword{print} statement, unless the statement ! ends with a comma. \end{opcodedesc} \begin{opcodedesc}{BREAK_LOOP}{} ! Terminates a loop due to a \keyword{break} statement. \end{opcodedesc} *************** *** 303,314 **** \begin{opcodedesc}{IMPORT_STAR}{} ! Loads all symbols not starting with '_' directly from the module TOS to the local namespace. The module is popped after loading all names. ! This opcode implements 'from module import *'. ! \begin{opcodedesc} \begin{opcodedesc}{EXEC_STMT}{} Implements \code{exec TOS2,TOS1,TOS}. The compiler fills ! missing optional parameters with None. \end{opcodedesc} --- 303,314 ---- \begin{opcodedesc}{IMPORT_STAR}{} ! Loads all symbols not starting with \character{_} directly from the module TOS to the local namespace. The module is popped after loading all names. ! This opcode implements \code{from module import *}. ! \end{opcodedesc} \begin{opcodedesc}{EXEC_STMT}{} Implements \code{exec TOS2,TOS1,TOS}. The compiler fills ! missing optional parameters with \code{None}. \end{opcodedesc} *************** *** 319,325 **** \begin{opcodedesc}{END_FINALLY}{} ! Terminates a finally-block. The interpreter recalls whether the ! exception has to be re-raised, or whether the function returns, ! and continues with the outer-next block. \end{opcodedesc} --- 319,325 ---- \begin{opcodedesc}{END_FINALLY}{} ! Terminates a \keyword{finally} clause. The interpreter recalls ! whether the exception has to be re-raised, or whether the function ! returns, and continues with the outer-next block. \end{opcodedesc} *************** *** 397,406 **** \begin{opcodedesc}{BUILD_MAP}{zero} ! Pushes an empty dictionary object onto the stack. The argument is ignored ! and set to zero by the compiler. \end{opcodedesc} \begin{opcodedesc}{LOAD_ATTR}{namei} ! Replaces TOS with \code{getattr(TOS,co_names[\var{namei}]}. \end{opcodedesc} --- 397,406 ---- \begin{opcodedesc}{BUILD_MAP}{zero} ! Pushes a new empty dictionary object onto the stack. The argument is ! ignored and set to zero by the compiler. \end{opcodedesc} \begin{opcodedesc}{LOAD_ATTR}{namei} ! Replaces TOS with \code{getattr(TOS, co_names[\var{namei}]}. \end{opcodedesc} *************** *** 494,498 **** \begin{opcodedesc}{RAISE_VARARGS}{argc} Raises an exception. \var{argc} indicates the number of parameters ! to the raise statement, ranging from 1 to 3. The handler will find the traceback as TOS2, the parameter as TOS1, and the exception as TOS. --- 494,498 ---- \begin{opcodedesc}{RAISE_VARARGS}{argc} Raises an exception. \var{argc} indicates the number of parameters ! to the raise statement, ranging from 0 to 3. The handler will find the traceback as TOS2, the parameter as TOS1, and the exception as TOS. *************** *** 519,523 **** is 2, \code{slice(TOS1, TOS)} is pushed; if it is 3, \code{slice(TOS2, TOS1, TOS)} is pushed. ! See the \code{slice()}\bifuncindex{slice} built-in function. \end{opcodedesc} --- 519,524 ---- is 2, \code{slice(TOS1, TOS)} is pushed; if it is 3, \code{slice(TOS2, TOS1, TOS)} is pushed. ! See the \code{slice()}\bifuncindex{slice} built-in function for more ! information. \end{opcodedesc} From python-dev@python.org Fri Aug 18 03:42:16 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 19:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref3.tex,1.47,1.48 Message-ID: <200008180242.TAA01619@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv1610/ref Modified Files: ref3.tex Log Message: Adjust the way __getslice__() is marked as deprecated; this will also stand out more. Index: ref3.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref3.tex,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -r1.47 -r1.48 *** ref3.tex 2000/08/17 22:37:31 1.47 --- ref3.tex 2000/08/18 02:42:14 1.48 *************** *** 1046,1050 **** compatibility, the method \method{__getslice__()} (see below) can also be defined to handle simple, but not extended slices.) It is also recommended ! that mappings provide methods \method{keys()}, \method{values()}, \method{items()}, \method{has_key()}, \method{get()}, \method{clear()}, \method{copy()}, and \method{update()} behaving similar to those for --- 1046,1050 ---- compatibility, the method \method{__getslice__()} (see below) can also be defined to handle simple, but not extended slices.) It is also recommended ! that mappings provide the methods \method{keys()}, \method{values()}, \method{items()}, \method{has_key()}, \method{get()}, \method{clear()}, \method{copy()}, and \method{update()} behaving similar to those for *************** *** 1133,1136 **** --- 1133,1138 ---- \begin{methoddesc}[sequence object]{__getslice__}{self, i, j} + \deprecated{2.0}{Support slice objects as parameters to the + \method{__getitem__()} method.} Called to implement evaluation of \code{\var{self}[\var{i}:\var{j}]}. The returned object should be of the same type as \var{self}. Note *************** *** 1143,1147 **** negative. Indexes which are greater than the length of the sequence are not modified. ! This method is deprecated. If no \method{__getslice__()} is found, a slice object is created instead, and passed to \method{__getitem__()} instead. \end{methoddesc} --- 1145,1149 ---- negative. Indexes which are greater than the length of the sequence are not modified. ! If no \method{__getslice__()} is found, a slice object is created instead, and passed to \method{__getitem__()} instead. \end{methoddesc} From python-dev@python.org Fri Aug 18 04:12:45 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 20:12:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.30,1.31 Message-ID: <200008180312.UAA10115@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10063/lib Modified Files: libstdtypes.tex Log Message: As pointed out by Denis S. Otkidach , xrange() returns an xrange object, not a range object, despite the name of the source file they're implemented in. In the list of comparison operators, list != before <>, since <> is described as obsolescent. Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** libstdtypes.tex 2000/08/14 15:37:59 1.30 --- libstdtypes.tex 2000/08/18 03:12:38 1.31 *************** *** 106,111 **** \lineiii{>=}{greater than or equal}{} \lineiii{==}{equal}{} - \lineiii{<>}{not equal}{(1)} \lineiii{!=}{not equal}{(1)} \lineiii{is}{object identity}{} \lineiii{is not}{negated object identity}{} --- 106,111 ---- \lineiii{>=}{greater than or equal}{} \lineiii{==}{equal}{} \lineiii{!=}{not equal}{(1)} + \lineiii{<>}{not equal}{(1)} \lineiii{is}{object identity}{} \lineiii{is not}{negated object identity}{} *************** *** 314,318 **** There are six sequence types: strings, Unicode strings, lists, ! tuples, buffers, and ranges. Strings literals are written in single or double quotes: --- 314,318 ---- There are six sequence types: strings, Unicode strings, lists, ! tuples, buffers, and xrange objects. Strings literals are written in single or double quotes: *************** *** 328,334 **** item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} Ranges are ! similar to buffers in that there is no specific syntax to create them, ! but they are created using the \function{xrange()} function.\bifuncindex{xrange} \indexii{sequence}{types} --- 328,334 ---- item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} XRanges ! objects are similar to buffers in that there is no specific syntax to ! create them, but they are created using the \function{xrange()} function.\bifuncindex{xrange} \indexii{sequence}{types} *************** *** 338,341 **** --- 338,342 ---- \indexii{tuple}{type} \indexii{list}{type} + \indexii{xrange}{type} Sequence types support the following operations. The \samp{in} and *************** *** 639,654 **** ! \subsubsection{Range Type \label{typesseq-range}} ! The range\indexii{range}{type} type is an immutable sequence which is ! commonly used for looping. The advantage of the range type is that a ! range object will always take the same amount of memory, no matter the size of the range it represents. There are no consistent performance advantages. ! Range objects behave like tuples, and offer a single method: ! \begin{methoddesc}[range]{tolist}{} ! Return a list object which represents the same values as the range object. \end{methoddesc} --- 640,655 ---- ! \subsubsection{XRange Type \label{typesseq-xrange}} ! The xrange\indexii{xrange}{type} type is an immutable sequence which is ! commonly used for looping. The advantage of the xrange type is that an ! xrange object will always take the same amount of memory, no matter the size of the range it represents. There are no consistent performance advantages. ! XRange objects behave like tuples, and offer a single method: ! \begin{methoddesc}[xrange]{tolist}{} ! Return a list object which represents the same values as the xrange object. \end{methoddesc} *************** *** 1113,1118 **** See the \citetitle[../ref/ref.html]{Python Reference Manual} for this ! information. It describes code objects, stack frame objects, ! traceback objects, and slice objects. --- 1114,1119 ---- See the \citetitle[../ref/ref.html]{Python Reference Manual} for this ! information. It describes stack frame objects, traceback objects, and ! slice objects. From python-dev@python.org Fri Aug 18 05:25:36 2000 From: python-dev@python.org (Tim Peters) Date: Thu, 17 Aug 2000 21:25:36 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.14,1.15 Message-ID: <200008180425.VAA24750@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv24717/python/nondist/peps Modified Files: pep-0200.txt Log Message: Close test_longexp bug. Changes in status based on what I remember from way too much email today. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** pep-0200.txt 2000/08/16 15:03:52 1.14 --- pep-0200.txt 2000/08/18 04:25:33 1.15 *************** *** 91,103 **** test case platform R B date reported --------- -------- - - ------------- - test_longexp Win98+? ? ? 15-Aug-2000 - [fails in release build, - passes in release build under verbose mode but doesn't - look like it should pass, - passes in debug build, - passes in debug build under verbose mode and looks like - it should pass - ] - test_winreg2 Win32 X X 26-Jul-2000 [still fails 15-Aug-2000 for me, on Win98 - tim --- 91,94 ---- *************** *** 133,136 **** --- 124,143 ---- [works 15-Aug-2000 for me, on Win98 - tim] + test_longexp Win98+? ? ? 15-Aug-2000 + [fails in release build, + passes in release build under verbose mode but doesn't + look like it should pass, + passes in debug build, + passes in debug build under verbose mode and looks like + it should pass + ] + [18-Aug-2000, tim: can't reproduce, and nobody else + saw it. I believe there *is* a subtle bug in + regrtest.py when using -v, and I'll pursue that, + but can't provoke anything wrong with test_longexp + anymore; eyeballing Fred's changes didn't turn up + a suspect either + ] + Open items -- should be done/fixed *************** *** 140,143 **** --- 147,152 ---- raised during hashing or comparison. + Decide what to do about os.path.commonprefix. Then do it. + Accepted and completed *************** *** 186,196 **** Add += and family, plus Python and C hooks, and API functions. - Open: proposed but not accepted or declined * Tim O'Malley's cookie module -- but need different license * test harness for C code - Trent Mick * Eliminated SET_LINENO opcode - Vladimir Marangozov Small optimization achieved by using the code object's lnotab --- 195,229 ---- Add += and family, plus Python and C hooks, and API functions. + * "import as" - Thomas Wouters + Extend the 'import' and 'from ... import' mechanism to enable + importing a symbol as another name. (Without adding a new keyword.) + + * Merge __getitem__ and __getslice__ - Thomas Wouters + Move __getslice__ functionality into __getitem__, using slice objects, + for normal slices as well as for extended ones. First step: use + getitem if there is no getslice. + Open: proposed but not accepted or rejected + * Tim O'Malley's cookie module -- but need different license * test harness for C code - Trent Mick + * Extended slicing on lists - Michael Hudson + Make lists (and other builtin types) handle extended slices. + + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries + + + Postponed + + * Extended print statement - Barry Warsaw + PEP 214 + http://python.sourceforge.net/peps/pep-0214.html + SF Patch #100970 + http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 + * Eliminated SET_LINENO opcode - Vladimir Marangozov Small optimization achieved by using the code object's lnotab *************** *** 209,239 **** - http://www.python.org/pipermail/python-dev/1999-August/002252.html - * "import as" - Thomas Wouters - Extend the 'import' and 'from ... import' mechanism to enable - importing a symbol as another name. (Without adding a new keyword.) - - * Extended slicing on lists - Michael Hudson - Make lists (and other builtin types) handle extended slices. ! * Merge __getitem__ and __getslice__ - Thomas Wouters ! Move __getslice__ functionality into __getitem__, using slice objects, ! for normal slices as well as for extended ones. First step: use ! getitem if there is no getslice. * 'indexing-for' - Thomas Wouters Special syntax to give Python code access to the loop-counter in 'for' loops. (Without adding a new keyword.) - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - - * Extended print statement - Barry Warsaw - PEP 214 - http://python.sourceforge.net/peps/pep-0214.html - SF Patch #100970 - http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 - - - Declined --- 242,251 ---- - http://www.python.org/pipermail/python-dev/1999-August/002252.html ! Rejected * 'indexing-for' - Thomas Wouters Special syntax to give Python code access to the loop-counter in 'for' loops. (Without adding a new keyword.) From python-dev@python.org Fri Aug 18 05:48:21 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:48:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.14,2.15 Message-ID: <200008180448.VAA25993@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv25985 Modified Files: pyport.h Log Message: Moved LONG_LONG #define from longobject.h to here, since it's needed by the following. typedef in a portable way the Python name for the C9X uintptr_t type. This latter is the most portable way to spell an integral type to which a void* can be cast to and back again without losing information. Parallel checkin hacks configure to check if the platform/compiler supports the C9X name. Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** pyport.h 2000/08/15 03:34:48 2.14 --- pyport.h 2000/08/18 04:48:18 2.15 *************** *** 29,36 **** --- 29,79 ---- Meaning: Extra checks compiled in for debug mode. Used in: Py_SAFE_DOWNCAST + + HAVE_UINTPTR_T + Meaning: The C9X type uintptr_t is supported by the compiler + Used in: Py_uintptr_t + + HAVE_LONG_LONG + Meaning: The compiler supports the C type "long long" + Used in: LONG_LONG + **************************************************************************/ #define ANY void /* For API compatibility only. Obsolete, do not use. */ + + /* typedefs for some C9X-defined synonyms for integral types. + * + * The names in Python are exactly the same as the C9X names, except with a + * Py_ prefix. Until C9X is universally implemented, this is the only way + * to ensure that Python gets reliable names that don't conflict with names + * in non-Python code that are playing their own tricks to define the C9X + * names. + * + * NOTE: don't go nuts here! Python has no use for *most* of the C9X + * integral synonyms. Only define the ones we actually need. + */ + + #ifdef HAVE_LONG_LONG + #ifndef LONG_LONG + #define LONG_LONG long long + #endif + #endif /* HAVE_LONG_LONG */ + + /* uintptr_t is the C9X name for an unsigned integral type such that a + * legitimate void* can be cast to uintptr_t and then back to void* again + * without loss of information. + */ + #ifdef HAVE_UINTPTR_T + typedef uintptr_t Py_uintptr_t; + #elif SIZEOF_VOID_P <= SIZEOF_INT + typedef unsigned int Py_uintptr_t; + #elif SIZEOF_VOID_P <= SIZEOF_LONG + typedef unsigned long Py_uintptr_t; + #elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P <= SIZEOF_LONG_LONG) + typedef unsigned LONG_LONG Py_uintptr_t; + #else + # error "Python needs a typedef for Py_uintptr_t in pyport.h." + #endif /* HAVE_UINTPTR_T */ #ifdef HAVE_STDLIB_H From python-dev@python.org Fri Aug 18 05:48:58 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:48:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include longobject.h,2.16,2.17 Message-ID: <200008180448.VAA26045@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv26035 Modified Files: longobject.h Log Message: Moved LONG_LONG #define from here to pyport.h. Index: longobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/longobject.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** longobject.h 2000/07/07 15:53:28 2.16 --- longobject.h 2000/08/18 04:48:56 2.17 *************** *** 51,57 **** #define ULONGLONG_MAX 0xffffffffffffffffULL #endif - #ifndef LONG_LONG - #define LONG_LONG long long - #endif extern DL_IMPORT(PyObject *) PyLong_FromLongLong(LONG_LONG); --- 51,54 ---- From python-dev@python.org Fri Aug 18 05:50:29 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:50:29 -0700 Subject: [Python-checkins] CVS: python/dist/src acconfig.h,1.33,1.34 Message-ID: <200008180450.VAA26150@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26140 Modified Files: acconfig.h Log Message: Added #undef HAVE_UINTPTR_T for autoconf's delight. Index: acconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/acconfig.h,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** acconfig.h 2000/07/09 14:39:28 1.33 --- acconfig.h 2000/08/18 04:50:27 1.34 *************** *** 60,63 **** --- 60,66 ---- #undef HAVE_LONG_LONG + /* Define this if you have the type uintptr_t */ + #undef HAVE_UINTPTR_T + /* Define if your compiler supports function prototypes */ #undef HAVE_PROTOTYPES From python-dev@python.org Fri Aug 18 05:53:35 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:53:35 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.66,2.67 configure,1.134,1.135 configure.in,1.145,1.146 Message-ID: <200008180453.VAA26378@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26329 Modified Files: config.h.in configure configure.in Log Message: Added test for uintptr_t, the C9X acceptable way to spell "type to which I can cast void* to and back again without losing information". In pyport.h, we typedef Py_uintptr_t to mean this thing, which if the platform supports, will be uintptr_t (otherwise, other accomodations are made). Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.66 retrieving revision 2.67 diff -C2 -r2.66 -r2.67 *** config.h.in 2000/08/17 11:41:06 2.66 --- config.h.in 2000/08/18 04:53:33 2.67 *************** *** 125,128 **** --- 125,131 ---- #undef HAVE_LONG_LONG + /* Define this if you have the type uintptr_t */ + #undef HAVE_UINTPTR_T + /* Define if your compiler supports function prototypes */ #undef HAVE_PROTOTYPES *************** *** 254,257 **** --- 257,263 ---- /* The number of bytes in a short. */ #undef SIZEOF_SHORT + + /* The number of bytes in a uintptr_t. */ + #undef SIZEOF_UINTPTR_T /* The number of bytes in a void *. */ Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.134 retrieving revision 1.135 diff -C2 -r1.134 -r1.135 *** configure 2000/08/17 11:41:06 1.134 --- configure 2000/08/18 04:53:33 1.135 *************** *** 2312,2318 **** fi # Hmph. AC_CHECK_SIZEOF() doesn't include . echo $ac_n "checking size of off_t""... $ac_c" 1>&6 ! echo "configure:2317: checking size of off_t" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2312,2383 ---- fi [...2606 lines suppressed...] echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5628: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5690,5699 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5693: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.145 retrieving revision 1.146 diff -C2 -r1.145 -r1.146 *** configure.in 2000/08/17 11:38:18 1.145 --- configure.in 2000/08/18 04:53:33 1.146 *************** *** 400,403 **** --- 400,411 ---- fi + AC_MSG_CHECKING(for uintptr_t support) + have_uintptr_t=no + AC_TRY_COMPILE([], [uintptr_t x; x = (uintptr_t)0;], AC_DEFINE(HAVE_UINTPTR_T) have_uintptr_t=yes) + AC_MSG_RESULT($have_uintptr_t) + if test "$have_uintptr_t" = yes ; then + AC_CHECK_SIZEOF(uintptr_t) + fi + # Hmph. AC_CHECK_SIZEOF() doesn't include . AC_MSG_CHECKING(size of off_t) From python-dev@python.org Fri Aug 18 05:57:34 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:57:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects classobject.c,2.103,2.104 Message-ID: <200008180457.VAA26668@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26660 Modified Files: classobject.c Log Message: PyInstance_DoBinOp(): When comparing the pointers, they must be cast to integer types (i.e. Py_uintptr_t, our spelling of C9X's uintptr_t). ANSI specifies that pointer compares other than == and != to non-related structures are undefined. This quiets an Insure portability warning. Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.103 retrieving revision 2.104 diff -C2 -r2.103 -r2.104 *** classobject.c 2000/08/17 22:37:32 2.103 --- classobject.c 2000/08/18 04:57:32 2.104 *************** *** 1208,1211 **** --- 1208,1212 ---- char buf[256]; PyObject *result = NULL; + if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0) return result; *************** *** 1214,1218 **** /* Sigh -- special case for comparisons */ if (strcmp(opname, "__cmp__") == 0) { ! long c = (v < w) ? -1 : (v > w) ? 1 : 0; return PyInt_FromLong(c); } --- 1215,1221 ---- /* Sigh -- special case for comparisons */ if (strcmp(opname, "__cmp__") == 0) { ! Py_uintptr_t iv = (Py_uintptr_t)v; ! Py_uintptr_t iw = (Py_uintptr_t)w; ! long c = (iv < iw) ? -1 : (iv > iw) ? 1 : 0; return PyInt_FromLong(c); } From python-dev@python.org Fri Aug 18 06:00:05 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:00:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects floatobject.c,2.67,2.68 Message-ID: <200008180500.WAA26878@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26829 Modified Files: floatobject.c Log Message: PyFloat_FromString(): Move s_buffer[] up to the top-level function scope. Previously, s_buffer[] was defined inside the PyUnicode_Check() scope, but referred to in the outer scope via assignment to s. This quiets an Insure portability warning. Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.67 retrieving revision 2.68 diff -C2 -r2.67 -r2.68 *** floatobject.c 2000/08/15 03:34:48 2.67 --- floatobject.c 2000/08/18 05:00:03 2.68 *************** *** 134,137 **** --- 134,138 ---- double x; char buffer[256]; /* For errors */ + char s_buffer[256]; int len; *************** *** 141,146 **** } else if (PyUnicode_Check(v)) { - char s_buffer[256]; - if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) { PyErr_SetString(PyExc_ValueError, --- 142,145 ---- From python-dev@python.org Fri Aug 18 06:01:22 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:01:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.95,2.96 Message-ID: <200008180501.WAA28237@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv28173 Modified Files: object.c Log Message: make_pair(): When comparing the pointers, they must be cast to integer types (i.e. Py_uintptr_t, our spelling of C9X's uintptr_t). ANSI specifies that pointer compares other than == and != to non-related structures are undefined. This quiets an Insure portability warning. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.95 retrieving revision 2.96 diff -C2 -r2.95 -r2.96 *** object.c 2000/08/16 12:24:51 2.95 --- object.c 2000/08/18 05:01:19 2.96 *************** *** 372,375 **** --- 372,377 ---- { PyObject *pair; + Py_uintptr_t iv = (Py_uintptr_t)v; + Py_uintptr_t iw = (Py_uintptr_t)w; pair = PyTuple_New(2); *************** *** 377,381 **** return NULL; } ! if (v <= w) { PyTuple_SET_ITEM(pair, 0, PyLong_FromVoidPtr((void *)v)); PyTuple_SET_ITEM(pair, 1, PyLong_FromVoidPtr((void *)w)); --- 379,383 ---- return NULL; } ! if (iv <= iw) { PyTuple_SET_ITEM(pair, 0, PyLong_FromVoidPtr((void *)v)); PyTuple_SET_ITEM(pair, 1, PyLong_FromVoidPtr((void *)w)); *************** *** 488,492 **** } if (vtp->tp_compare == NULL) { ! return (v < w) ? -1 : 1; } _PyCompareState_nesting++; --- 490,496 ---- } if (vtp->tp_compare == NULL) { ! Py_uintptr_t iv = (Py_uintptr_t)v; ! Py_uintptr_t iw = (Py_uintptr_t)w; ! return (iv < iw) ? -1 : 1; } _PyCompareState_nesting++; From python-dev@python.org Fri Aug 18 06:05:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:05:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.15,1.16 Message-ID: <200008180505.WAA02635@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv2542 Modified Files: exceptions.c Log Message: SyntaxError__classinit__(): Slight reorg for simplicity. Index: exceptions.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** exceptions.c 2000/08/16 19:43:17 1.15 --- exceptions.c 2000/08/18 05:05:37 1.16 *************** *** 648,651 **** --- 648,652 ---- SyntaxError__classinit__(PyObject *klass) { + int retval = 0; PyObject *emptystring = PyString_FromString(""); *************** *** 658,666 **** PyObject_SetAttrString(klass, "text", Py_None)) { ! Py_XDECREF(emptystring); ! return -1; } ! Py_DECREF(emptystring); ! return 0; } --- 659,666 ---- PyObject_SetAttrString(klass, "text", Py_None)) { ! retval = -1; } ! Py_XDECREF(emptystring); ! return retval; } From python-dev@python.org Fri Aug 18 06:07:16 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:07:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.15,2.16 Message-ID: <200008180507.WAA03090@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3081 Modified Files: _localemodule.c Log Message: init_locale(): This file defines the _locale module, so the Py_FatalError() should reflect that. Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** _localemodule.c 2000/08/10 21:41:08 2.15 --- _localemodule.c 2000/08/18 05:07:12 2.16 *************** *** 455,458 **** if (PyErr_Occurred()) ! Py_FatalError("Can't initialize module locale"); } --- 455,458 ---- if (PyErr_Occurred()) ! Py_FatalError("Can't initialize module _locale"); } From python-dev@python.org Fri Aug 18 06:09:52 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:09:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.37,2.38 Message-ID: <200008180509.WAA03227@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3219 Modified Files: _sre.c Log Message: pattern_findall(): Plug small memory leak discovered by Insure. PyList_Append() always incref's the inserted item. Be sure to decref it regardless of whether the append succeeds or fails. Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.37 retrieving revision 2.38 diff -C2 -r2.37 -r2.38 *** _sre.c 2000/08/16 22:29:55 2.37 --- _sre.c 2000/08/18 05:09:50 2.38 *************** *** 1699,1706 **** } ! if (PyList_Append(list, item) < 0) { ! Py_DECREF(item); goto error; - } if (state.ptr == state.start) --- 1699,1706 ---- } ! status = PyList_Append(list, item); ! Py_DECREF(item); ! if (status < 0) goto error; if (state.ptr == state.start) From python-dev@python.org Fri Aug 18 06:02:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:02:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.175,2.176 Message-ID: <200008180502.WAA29681@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv29584 Modified Files: bltinmodule.c Log Message: comples_from_string(): Move s_buffer[] up to the top-level function scope. Previously, s_buffer[] was defined inside the PyUnicode_Check() scope, but referred to in the outer scope via assignment to s. This quiets an Insure portability warning. Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.175 retrieving revision 2.176 diff -C2 -r2.175 -r2.176 *** bltinmodule.c 2000/08/12 21:35:36 2.175 --- bltinmodule.c 2000/08/18 05:02:16 2.176 *************** *** 411,414 **** --- 411,415 ---- int sign; char buffer[256]; /* For errors */ + char s_buffer[256]; int len; *************** *** 418,423 **** } else if (PyUnicode_Check(v)) { - char s_buffer[256]; - if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) { PyErr_SetString(PyExc_ValueError, --- 419,422 ---- From python-dev@python.org Fri Aug 18 06:04:11 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:04:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser parsetok.c,2.23,2.24 Message-ID: <200008180504.WAA32383@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv32294 Modified Files: parsetok.c Log Message: PyParser_ParseString(): When the err_ret structure is initialized, the fields token and expected must also be initialized, otherwise the tests in parsetok() can generate uninitialized memory read errors. This quiets an Insure warning. Index: parsetok.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parsetok.c,v retrieving revision 2.23 retrieving revision 2.24 diff -C2 -r2.23 -r2.24 *** parsetok.c 2000/07/22 19:20:54 2.23 --- parsetok.c 2000/08/18 05:04:08 2.24 *************** *** 37,40 **** --- 37,42 ---- err_ret->offset = 0; err_ret->text = NULL; + err_ret->token = -1; + err_ret->expected = -1; if ((tok = PyTokenizer_FromString(s)) == NULL) { From python-dev@python.org Fri Aug 18 06:13:49 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:13:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules puremodule.c,2.2,2.3 Message-ID: <200008180513.WAA03566@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3556 Modified Files: puremodule.c Log Message: ANSI-fy function headers. Not much more can be done since I don't have access to Purify anymore. Index: puremodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/puremodule.c,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** puremodule.c 2000/02/29 13:59:23 2.2 --- puremodule.c 2000/08/18 05:13:47 2.3 *************** *** 61,68 **** static PyObject* ! call_voidarg_function(func, self, args) ! VoidArgFunc func; ! PyObject *self; ! PyObject *args; { int status; --- 61,65 ---- [...1073 lines suppressed...] } static PyObject* ! pure_quantify_clear_data(PyObject *self, PyObject *args) { return call_voidarg_function(quantify_clear_data, self, args); } static PyObject* ! pure_quantify_save_data(PyObject *self, PyObject *args) { return call_voidarg_function(quantify_save_data, self, args); } static PyObject* ! pure_quantify_save_data_to_file(PyObject *self, PyObject *args) { return call_stringarg_function(quantify_save_data_to_file, self, args); } static PyObject* ! pure_quantify_add_annotation(PyObject *self, PyObject *args) { return call_stringarg_function(quantify_add_annotation, self, args); From python-dev@python.org Fri Aug 18 06:10:47 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:10:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules linuxaudiodev.c,2.5,2.6 Message-ID: <200008180510.WAA03322@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3312 Modified Files: linuxaudiodev.c Log Message: lad_dealloc(): if xp->x_fd == -1, it means the descriptor's already been closed. Don't try to reclose it. Found by Insure. Index: linuxaudiodev.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/linuxaudiodev.c,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -r2.5 -r2.6 *** linuxaudiodev.c 2000/07/21 06:00:07 2.5 --- linuxaudiodev.c 2000/08/18 05:10:45 2.6 *************** *** 111,115 **** lad_dealloc(lad_t *xp) { ! close(xp->x_fd); PyObject_Del(xp); } --- 111,117 ---- lad_dealloc(lad_t *xp) { ! /* if already closed, don't reclose it */ ! if (xp->x_fd != -1) ! close(xp->x_fd); PyObject_Del(xp); } From python-dev@python.org Fri Aug 18 07:58:18 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 23:58:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.58,2.59 Message-ID: <200008180658.XAA17891@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv17882 Modified Files: unicodeobject.c Log Message: PyUnicode_AsUTF8String(): Don't need to explicitly incref str since PyUnicode_EncodeUTF8() already returns the created object with the proper reference count. This fixes an Insure reported memory leak. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.58 retrieving revision 2.59 diff -C2 -r2.58 -r2.59 *** unicodeobject.c 2000/08/14 11:29:19 2.58 --- unicodeobject.c 2000/08/18 06:58:15 2.59 *************** *** 908,918 **** return NULL; } ! str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), ! PyUnicode_GET_SIZE(unicode), ! NULL); ! if (str == NULL) ! return NULL; ! Py_INCREF(str); ! return str; } --- 908,914 ---- return NULL; } ! return PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), ! PyUnicode_GET_SIZE(unicode), ! NULL); } From python-dev@python.org Fri Aug 18 11:00:31 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 18 Aug 2000 03:00:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules cstubs,2.20,2.21 Message-ID: <200008181000.DAA04802@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv4479 Modified Files: cstubs Log Message: Removed references to Py_FPROTO. Index: cstubs =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cstubs,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** cstubs 2000/06/30 23:58:05 2.20 --- cstubs 2000/08/18 10:00:28 2.21 *************** *** 110,114 **** int i, n, width; double vec[3]; ! PyObject * (*getitem) Py_FPROTO((PyObject *, int)); if (!PyArg_GetObject(args, 1, 0, &v)) --- 110,114 ---- int i, n, width; double vec[3]; ! PyObject * (*getitem)(PyObject *, int); if (!PyArg_GetObject(args, 1, 0, &v)) *************** *** 213,217 **** int i, n; float norm[3], vec[3]; ! PyObject * (*getitem) Py_FPROTO((PyObject *, int)); if (!PyArg_GetObject(args, 1, 0, &v)) --- 213,217 ---- int i, n; float norm[3], vec[3]; ! PyObject * (*getitem)(PyObject *, int); if (!PyArg_GetObject(args, 1, 0, &v)) From python-dev@python.org Fri Aug 18 15:50:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 07:50:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_unpack.py,1.2,1.3 test_rgbimg.py,1.8,1.9 Message-ID: <200008181450.HAA22210@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv22192 Modified Files: test_unpack.py test_rgbimg.py Log Message: Convert some old-style string exceptions to class exceptions. Index: test_unpack.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_unpack.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_unpack.py 1998/03/26 19:42:58 1.2 --- test_unpack.py 2000/08/18 14:50:20 1.3 *************** *** 101,105 **** # unpacking a sequence where the test for too long raises a different # kind of error ! BozoError = 'BozoError' class BadSeq: --- 101,106 ---- # unpacking a sequence where the test for too long raises a different # kind of error ! class BozoError(Exception): ! pass class BadSeq: Index: test_rgbimg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_rgbimg.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** test_rgbimg.py 1998/04/23 20:13:23 1.8 --- test_rgbimg.py 2000/08/18 14:50:20 1.9 *************** *** 5,9 **** from test_support import verbose, unlink, findfile ! error = 'test_rgbimg.error' print 'RGBimg test suite:' --- 5,10 ---- from test_support import verbose, unlink, findfile ! class error(Exception): ! pass print 'RGBimg test suite:' From python-dev@python.org Fri Aug 18 15:59:47 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 07:59:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-irix6 flp.py,1.5,1.6 jpeg.py,1.2,1.3 readcd.py,1.1,1.2 torgb.py,1.1,1.2 Message-ID: <200008181459.HAA23244@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-irix6 In directory slayer.i.sourceforge.net:/tmp/cvs-serv23221/plat-irix6 Modified Files: flp.py jpeg.py readcd.py torgb.py Log Message: Convert some old-style string exceptions to class exceptions. Index: flp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/flp.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** flp.py 2000/06/28 14:48:01 1.5 --- flp.py 2000/08/18 14:59:32 1.6 *************** *** 13,17 **** ENDLINE = '==============================' ! error = 'flp.error' ################################################################## --- 13,18 ---- ENDLINE = '==============================' ! class error(Exception): ! pass ################################################################## Index: jpeg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/jpeg.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** jpeg.py 1998/08/07 15:28:23 1.2 --- jpeg.py 2000/08/18 14:59:33 1.3 *************** *** 6,10 **** # XXX the resulting file causes weirdness. ! error = 'jpeg.error' # Exception options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} --- 6,11 ---- # XXX the resulting file causes weirdness. ! class error(Exception): ! pass options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} Index: readcd.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/readcd.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** readcd.py 1997/01/15 19:19:15 1.1 --- readcd.py 2000/08/18 14:59:33 1.2 *************** *** 3,8 **** import cd, CD ! Error = 'Readcd.Error' ! _Stop = 'Readcd.Stop' def _doatime(self, cb_type, data): --- 3,10 ---- import cd, CD ! class Error(Exception): ! pass ! class _Stop(Exception): ! pass def _doatime(self, cb_type, data): Index: torgb.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/torgb.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** torgb.py 1997/01/15 19:19:19 1.1 --- torgb.py 2000/08/18 14:59:33 1.2 *************** *** 51,55 **** ! error = 'torgb.error' # Exception def torgb(filename): --- 51,56 ---- ! class error(Exception): ! pass def torgb(filename): From python-dev@python.org Fri Aug 18 15:57:31 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 07:57:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-irix5 flp.py,1.18,1.19 jpeg.py,1.2,1.3 readcd.py,1.10,1.11 torgb.py,1.4,1.5 Message-ID: <200008181457.HAA22927@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-irix5 In directory slayer.i.sourceforge.net:/tmp/cvs-serv22917/plat-irix5 Modified Files: flp.py jpeg.py readcd.py torgb.py Log Message: Convert some old-style string exceptions to class exceptions. Index: flp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/flp.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** flp.py 2000/06/28 14:48:01 1.18 --- flp.py 2000/08/18 14:57:26 1.19 *************** *** 13,17 **** ENDLINE = '==============================' ! error = 'flp.error' ################################################################## --- 13,18 ---- ENDLINE = '==============================' ! class error(Exception): ! pass ################################################################## Index: jpeg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/jpeg.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** jpeg.py 1998/08/07 15:28:06 1.2 --- jpeg.py 2000/08/18 14:57:26 1.3 *************** *** 6,10 **** # XXX the resulting file causes weirdness. ! error = 'jpeg.error' # Exception options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} --- 6,11 ---- # XXX the resulting file causes weirdness. ! class error(Exception): ! pass options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} Index: readcd.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/readcd.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** readcd.py 1995/02/01 14:24:32 1.10 --- readcd.py 2000/08/18 14:57:26 1.11 *************** *** 3,8 **** import cd, CD ! Error = 'Readcd.Error' ! _Stop = 'Readcd.Stop' def _doatime(self, cb_type, data): --- 3,10 ---- import cd, CD ! class Error(Exception): ! pass ! class _Stop(Exception): ! pass def _doatime(self, cb_type, data): Index: torgb.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/torgb.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** torgb.py 1993/12/17 15:25:22 1.4 --- torgb.py 2000/08/18 14:57:26 1.5 *************** *** 51,55 **** ! error = 'torgb.error' # Exception def torgb(filename): --- 51,56 ---- ! class error(Exception): ! pass def torgb(filename): From python-dev@python.org Fri Aug 18 16:21:48 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 18 Aug 2000 08:21:48 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0222.txt,NONE,1.1 pep-0000.txt,1.23,1.24 Message-ID: <200008181521.IAA00777@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv512 Modified Files: pep-0000.txt Added Files: pep-0222.txt Log Message: Added PEP 222, Web Library Enhancements, assigned to akuchlin. ***** Error reading new file(2, 'No such file or directory') Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** pep-0000.txt 2000/08/17 03:19:42 1.23 --- pep-0000.txt 2000/08/18 15:21:45 1.24 *************** *** 47,51 **** I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm S 221 pep-0221.txt Import As twouters ! Key --- 47,51 ---- I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm S 221 pep-0221.txt Import As twouters ! S 222 pep-0222.txt Web Library Enhancements akuchlin Key From python-dev@python.org Fri Aug 18 16:50:57 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 08:50:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib threading.py,1.8,1.9 Message-ID: <200008181550.IAA07349@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv7336/Lib Modified Files: threading.py Log Message: Revise to use atexit instead of monkeying with sys.exitfunc directly. Index: threading.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/threading.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** threading.py 2000/06/01 01:17:17 1.8 --- threading.py 2000/08/18 15:50:54 1.9 *************** *** 463,471 **** _active[_get_ident()] = self _active_limbo_lock.release() ! try: ! self.__oldexitfunc = _sys.exitfunc ! except AttributeError: ! self.__oldexitfunc = None ! _sys.exitfunc = self.__exitfunc def _set_daemon(self): --- 463,468 ---- _active[_get_ident()] = self _active_limbo_lock.release() ! import atexit ! atexit.register(self.__exitfunc) def _set_daemon(self): *************** *** 481,488 **** t.join() t = _pickSomeNonDaemonThread() - if self.__oldexitfunc: - if __debug__: - self._note("%s: calling exit handler", self) - self.__oldexitfunc() if __debug__: self._note("%s: exiting", self) --- 478,481 ---- From python-dev@python.org Fri Aug 18 17:04:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 09:04:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test regrtest.py,1.22,1.23 Message-ID: <200008181604.JAA11140@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv11112/Lib/test Modified Files: regrtest.py Log Message: When a KeyboardInterrupt is caught, just use the "raise" syntax to re-raise it instead of re-raising it "manually" the ugly way. Index: regrtest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** regrtest.py 2000/08/11 19:02:58 1.22 --- regrtest.py 2000/08/18 16:04:05 1.23 *************** *** 235,240 **** print "skipped -- ", msg return -1 ! except KeyboardInterrupt, v: ! raise KeyboardInterrupt, v, sys.exc_info()[2] except test_support.TestFailed, msg: print "test", test, "failed --", msg --- 235,240 ---- print "skipped -- ", msg return -1 ! except KeyboardInterrupt: ! raise except test_support.TestFailed, msg: print "test", test, "failed --", msg From python-dev@python.org Fri Aug 18 17:09:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 09:09:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.24,1.25 Message-ID: <200008181609.JAA13044@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv13013/Lib/test Modified Files: test_re.py Log Message: Better conformance to the Python Style Guide: use spaces around operators. Index: test_re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** test_re.py 2000/08/08 17:06:52 1.24 --- test_re.py 2000/08/18 16:09:56 1.25 *************** *** 1,4 **** import sys ! sys.path=['.']+sys.path from test_support import verbose, TestFailed --- 1,4 ---- import sys ! sys.path = ['.'] + sys.path from test_support import verbose, TestFailed *************** *** 271,286 **** for t in tests: sys.stdout.flush() ! pattern=s=outcome=repl=expected=None ! if len(t)==5: pattern, s, outcome, repl, expected = t ! elif len(t)==3: pattern, s, outcome = t else: ! raise ValueError, ('Test tuples should have 3 or 5 fields',t) try: ! obj=re.compile(pattern) except re.error: ! if outcome==SYNTAX_ERROR: pass # Expected a syntax error else: print '=== Syntax error:', t --- 271,286 ---- for t in tests: sys.stdout.flush() ! pattern = s = outcome = repl = expected = None ! if len(t) == 5: pattern, s, outcome, repl, expected = t ! elif len(t) == 3: pattern, s, outcome = t else: ! raise ValueError, ('Test tuples should have 3 or 5 fields', t) try: ! obj = re.compile(pattern) except re.error: ! if outcome == SYNTAX_ERROR: pass # Expected a syntax error else: print '=== Syntax error:', t *************** *** 292,305 **** else: try: ! result=obj.search(s) ! except (re.error), msg: print '=== Unexpected exception', t, repr(msg) ! if outcome==SYNTAX_ERROR: # This should have been a syntax error; forget it. pass ! elif outcome==FAIL: if result is None: pass # No match, as expected else: print '=== Succeeded incorrectly', t ! elif outcome==SUCCEED: if result is not None: # Matched, as expected, so now we compute the --- 292,305 ---- else: try: ! result = obj.search(s) ! except re.error, msg: print '=== Unexpected exception', t, repr(msg) ! if outcome == SYNTAX_ERROR: # This should have been a syntax error; forget it. pass ! elif outcome == FAIL: if result is None: pass # No match, as expected else: print '=== Succeeded incorrectly', t ! elif outcome == SUCCEED: if result is not None: # Matched, as expected, so now we compute the *************** *** 326,333 **** gi = "Error" vardict[i] = gi ! repl=eval(repl, vardict) ! if repl!=expected: print '=== grouping error', t, ! print repr(repl)+' should be '+repr(expected) else: print '=== Failed incorrectly', t --- 326,333 ---- gi = "Error" vardict[i] = gi ! repl = eval(repl, vardict) ! if repl != expected: print '=== grouping error', t, ! print repr(repl) + ' should be ' + repr(expected) else: print '=== Failed incorrectly', t *************** *** 335,340 **** # Try the match on a unicode string, and check that it # still succeeds. ! result=obj.search(unicode(s, "latin-1")) ! if result==None: print '=== Fails on unicode match', t --- 335,340 ---- # Try the match on a unicode string, and check that it # still succeeds. ! result = obj.search(unicode(s, "latin-1")) ! if result == None: print '=== Fails on unicode match', t *************** *** 342,347 **** # still succeeds. obj=re.compile(unicode(pattern, "latin-1")) ! result=obj.search(s) ! if result==None: print '=== Fails on unicode pattern match', t --- 342,347 ---- # still succeeds. obj=re.compile(unicode(pattern, "latin-1")) ! result = obj.search(s) ! if result == None: print '=== Fails on unicode pattern match', t *************** *** 351,378 **** # string), so we'll ignore patterns that feature it. ! if pattern[:2]!='\\B' and pattern[-2:]!='\\B' and result!=None: ! obj=re.compile(pattern) ! result=obj.search(s, result.start(0), result.end(0)+1) ! if result==None: print '=== Failed on range-limited match', t # Try the match with IGNORECASE enabled, and check that it # still succeeds. ! obj=re.compile(pattern, re.IGNORECASE) ! result=obj.search(s) ! if result==None: print '=== Fails on case-insensitive match', t # Try the match with LOCALE enabled, and check that it # still succeeds. ! obj=re.compile(pattern, re.LOCALE) ! result=obj.search(s) ! if result==None: print '=== Fails on locale-sensitive match', t # Try the match with UNICODE locale enabled, and check # that it still succeeds. ! obj=re.compile(pattern, re.UNICODE) ! result=obj.search(s) ! if result==None: print '=== Fails on unicode-sensitive match', t --- 351,379 ---- # string), so we'll ignore patterns that feature it. ! if pattern[:2] != '\\B' and pattern[-2:] != '\\B' \ ! and result != None: ! obj = re.compile(pattern) ! result = obj.search(s, result.start(0), result.end(0) + 1) ! if result == None: print '=== Failed on range-limited match', t # Try the match with IGNORECASE enabled, and check that it # still succeeds. ! obj = re.compile(pattern, re.IGNORECASE) ! result = obj.search(s) ! if result == None: print '=== Fails on case-insensitive match', t # Try the match with LOCALE enabled, and check that it # still succeeds. ! obj = re.compile(pattern, re.LOCALE) ! result = obj.search(s) ! if result == None: print '=== Fails on locale-sensitive match', t # Try the match with UNICODE locale enabled, and check # that it still succeeds. ! obj = re.compile(pattern, re.UNICODE) ! result = obj.search(s) ! if result == None: print '=== Fails on unicode-sensitive match', t From python-dev@python.org Fri Aug 18 19:01:09 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Fri, 18 Aug 2000 11:01:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python errors.c,2.51,2.52 Message-ID: <200008181801.LAA02631@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv1835 Modified Files: errors.c Log Message: Do not set a MemoryError exception over another MemoryError exception, thus preserving the first one that has been raised. Index: errors.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v retrieving revision 2.51 retrieving revision 2.52 diff -C2 -r2.51 -r2.52 *** errors.c 2000/08/07 19:18:27 2.51 --- errors.c 2000/08/18 18:01:06 2.52 *************** *** 239,242 **** --- 239,246 ---- PyErr_NoMemory(void) { + if (PyErr_ExceptionMatches(PyExc_MemoryError)) + /* already current */ + return NULL; + /* raise the pre-allocated instance if it still exists */ if (PyExc_MemoryErrorInst) From python-dev@python.org Fri Aug 18 20:30:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 18 Aug 2000 12:30:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.59,2.60 Message-ID: <200008181930.MAA26031@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26020 Modified Files: unicodeobject.c Log Message: PyUnicode_AsUTF8String(): /F picks up what I missed: the local var `str' is no longer necessary. Gotta turn on -Wall! Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.59 retrieving revision 2.60 diff -C2 -r2.59 -r2.60 *** unicodeobject.c 2000/08/18 06:58:15 2.59 --- unicodeobject.c 2000/08/18 19:30:40 2.60 *************** *** 902,907 **** PyObject *PyUnicode_AsUTF8String(PyObject *unicode) { - PyObject *str; - if (!PyUnicode_Check(unicode)) { PyErr_BadArgument(); --- 902,905 ---- From python-dev@python.org Fri Aug 18 20:59:22 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 18 Aug 2000 12:59:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.127,2.128 Message-ID: <200008181959.MAA28049@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv28040 Modified Files: compile.c Log Message: com_error(): Quiet gcc -Wall warning. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.127 retrieving revision 2.128 diff -C2 -r2.127 -r2.128 *** compile.c 2000/08/17 22:55:00 2.127 --- compile.c 2000/08/18 19:59:20 2.128 *************** *** 304,308 **** com_error(struct compiling *c, PyObject *exc, char *msg) { - size_t n = strlen(msg); PyObject *v, *tb, *tmp; c->c_errors++; --- 304,307 ---- From python-dev@python.org Fri Aug 18 20:53:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 12:53:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.190,2.191 exceptions.c,1.16,1.17 Message-ID: <200008181953.MAA27592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv27584 Modified Files: ceval.c exceptions.c Log Message: Remove a couple of warnings turned up by "gcc -Wall". Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.190 retrieving revision 2.191 diff -C2 -r2.190 -r2.191 *** ceval.c 2000/08/17 22:55:00 2.190 --- ceval.c 2000/08/18 19:53:25 2.191 *************** *** 2857,2862 **** Py_DECREF(list); else { ! if (PyList_Append(list, name) < 0) Py_DECREF(list); Py_DECREF(name); } --- 2857,2863 ---- Py_DECREF(list); else { ! if (PyList_Append(list, name) < 0) { Py_DECREF(list); + } Py_DECREF(name); } Index: exceptions.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** exceptions.c 2000/08/18 05:05:37 1.16 --- exceptions.c 2000/08/18 19:53:25 1.17 *************** *** 794,798 **** if (buffer != NULL) { if (have_filename && have_lineno) ! sprintf(buffer, "%s (%s, line %d)", PyString_AS_STRING(str), my_basename(PyString_AS_STRING(filename)), --- 794,798 ---- if (buffer != NULL) { if (have_filename && have_lineno) ! sprintf(buffer, "%s (%s, line %ld)", PyString_AS_STRING(str), my_basename(PyString_AS_STRING(filename)), *************** *** 803,807 **** my_basename(PyString_AS_STRING(filename))); else if (have_lineno) ! sprintf(buffer, "%s (line %d)", PyString_AS_STRING(str), PyInt_AsLong(lineno)); --- 803,807 ---- my_basename(PyString_AS_STRING(filename))); else if (have_lineno) ! sprintf(buffer, "%s (line %ld)", PyString_AS_STRING(str), PyInt_AsLong(lineno)); From python-dev@python.org Fri Aug 18 21:26:50 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 13:26:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.15,1.16 Message-ID: <200008182026.NAA05678@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv5669 Modified Files: pep-0200.txt Log Message: Clarify the what the xrange representation issue was. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** pep-0200.txt 2000/08/18 04:25:33 1.15 --- pep-0200.txt 2000/08/18 20:26:47 1.16 *************** *** 158,162 **** * Fix xrange printing behavior - Fred Drake ! [although I'm not sure what this one was talking about - tim] --- 158,167 ---- * Fix xrange printing behavior - Fred Drake ! Remove the tp_print handler for the xrange type; it produced a ! list display instead of 'xrange(...)'. The new code produces a ! minimal call to xrange(), enclosed in (... * N) when N != 1. ! This makes the repr() more human readable while making it do ! what reprs are advertised as doing. It also makes the xrange ! objects obvious when working in the interactive interpreter. From python-dev@python.org Sat Aug 19 14:01:22 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 06:01:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib Cookie.py,NONE,1.1 Message-ID: <200008191301.GAA23969@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22828 Added Files: Cookie.py Log Message: Added Tim O'Malley's Cookie.py module (master version at http://www.timo-tasi.org/python/Cookie.py) This is revision 2.26 according to Tim's RCS history. ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Sat Aug 19 15:11:44 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 19 Aug 2000 07:11:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcookie.tex,NONE,1.1 Message-ID: <200008191411.HAA12685@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12204 Added Files: libcookie.tex Log Message: Initial revision. Markup unchecked. --- NEW FILE --- \section{\module{Cookie} --- RFC2109 HTTP State Management (AKA Cookies) Support} \declaremodule{standard}{Cookie} \moduleauthor{Timothy O'Malley}{timo@alum.mit.edu} \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} \modulesynopsis{Support HTTP State Management (Cookies)} The \module{Cookie} module defines classes for abstracting the concept of Cookies, an HTTP state management mechanism. It supports both simplistic string-only cookies, and provides an abstraction for having any serializable data-type as cookie value. \subsection{Example \label{cookie-example}} The following example demonstrates how to open a can of spam using the \module{spam} module. \begin{verbatim} >>> import Cookie >>> C = Cookie.SimpleCookie() >>> C = Cookie.SerialCookie() >>> C = Cookie.SmartCookie() >>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie >>> C = Cookie.SmartCookie() >>> C["fig"] = "newton" >>> C["sugar"] = "wafer" >>> C # generate HTTP headers Set-Cookie: sugar=wafer; Set-Cookie: fig=newton; >>> C = Cookie.SmartCookie() >>> C["rocky"] = "road" >>> C["rocky"]["path"] = "/cookie" >>> print C.output(header="Cookie:") Cookie: rocky=road; Path=/cookie; >>> print C.output(attrs=[], header="Cookie:") Cookie: rocky=road; >>> C = Cookie.SmartCookie() >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header) >>> C Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; >>> C = Cookie.SmartCookie() >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') >>> C Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; >>> C = Cookie.SmartCookie() >>> C["oreo"] = "doublestuff" >>> C["oreo"]["path"] = "/" >>> C Set-Cookie: oreo="doublestuff"; Path=/; >>> C = Cookie.SmartCookie() >>> C["twix"] = "none for you" >>> C["twix"].value 'none for you' >>> C = Cookie.SimpleCookie() >>> C["number"] = 7 # equivalent to C["number"] = str(7) >>> C["string"] = "seven" >>> C["number"].value '7' >>> C["string"].value 'seven' >>> C Set-Cookie: number=7; Set-Cookie: string=seven; >>> C = Cookie.SerialCookie() >>> C["number"] = 7 >>> C["string"] = "seven" >>> C["number"].value 7 >>> C["string"].value 'seven' >>> C Set-Cookie: number="I7\012."; Set-Cookie: string="S'seven'\012p1\012."; >>> C = Cookie.SmartCookie() >>> C["number"] = 7 >>> C["string"] = "seven" >>> C["number"].value 7 >>> C["string"].value 'seven' >>> C Set-Cookie: number="I7\012."; Set-Cookie: string=seven; \end{verbatim} \begin{excdesc}{CookieError} Exception failing because of RFC2109 invalidity: incorrect attributes, incorrect \code{Set-Cookie} header, etc. \end{excdesc} %\subsection{Morsel Objects} %\label{morsel-objects} \begin{classdesc}{Morsel}{} Abstract a key/value pair, which has some RFC2109 attributes. Morsels are dictionary-like objects, whose set of keys is constant --- the valid RFC2109 attributes, which are \begin{itemize} \item \code{expires} \item \code{path} \item \code{comment} \item \code{domain} \item \code{max-age} \item \code{secure} \item \code{version} \end{itemize} \end{itemize} The keys are case-insensitive. \end{classdesc} \begin{memberdesc}[Morsel]{value} The value of the cookie. \end{methoddesc} \begin{memberdesc}[Morsel]{coded_value} The encoded value of the cookie --- this is what should be sent. \end{methoddesc} \begin{memberdesc}[Morsel]{key} The name of the cookie. \end{methoddesc} \begin{methodesc}[Morsel]{set}{key, value, coded_value} Set the \var{key}, \var{value} and \var{coded_value} members. \end{methoddesc} \begin{methoddesc}[Morsel]{isReservedKey}{K} Whether \var{K} is a member of the set of keys of a \class{Morsel}. \end{methoddesc} \begin{methoddesc}[Morsel]{output}{\opt{attrs, \opt{header}} Return a string representation of the Morsel, suitable to be sent as an HTTP header. By default, all the attributes are included, unless \var{attrs} is given, in which case it should be a list of attributes to use. \var{header} is by default \code{"Set-Cookie:"}. \end{methoddesc} \begin{methoddesc}[Morsel]{js_output}{\opt{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP header was sent. The meaning for \var{attrs} is the same as in \method{output()}. \end{methoddesc}. \begin{methoddesc}[Morsel]{OutputString}{\opt{attrs}} Return a string representing the Morsel, without any surrounding HTTP or JavaScript. The meaning for \var{attrs} is the same as in \method{output()}. \end{methoddesc} # This used to be strict parsing based on the RFC2109 and RFC2068 # specifications. I have since discovered that MSIE 3.0x doesn't # follow the character rules outlined in those specs. As a # result, the parsing rules here are less strict. \begin{classdesc}{BaseCookie}{\opt{input}} This class is a dictionary-like object whose keys are strings and whose values are \class{Morsel}s. Note that upon setting a key to a value, the value is first converted to a \class{Morsel} containing the key and the value. If \var{input} is given, it is passed to the \method{load} method. \end{classdesc} \begin{methoddesc}[BaseCookie]{value_decode}{val} Return a decoded value from a string representation. Return value can be any type. This method does nothing in \class{BaseCookie} --- it exists so it can be overridden. \end{methoddesc} \begin{methoddesc}[BaseCookie]{value_encode}{val} Return an encoded value. \var{val} can be any type, but return value must be a string. This method does nothing in \class{BaseCookie} --- it exists so it can be overridden In general, it should be the case that \method{value_encode} and \method{value_decode} are inverses on the range of \var{value_decode}. \end{methoddesc}. \begin{methoddesc}[BaseCookie]{output}{\opt{attrs\opt{, header\opt{, sep}}}} Return a string representation suitable to be sent as HTTP headers. \var{attrs} and \var{header} are sent to each \class{Morsel}'s \method{output} method. \var{sep} is used to join the headers together, and is by default a newline. \end{methoddesc} \begin{methoddesc}[BaseCookie]{js_output}{\opt{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP headers was sent. The meaning for \var{attrs} is the same as in \method{output()}. \end{methoddesc} \begin{methoddesc}[BaseCookie]{load}{rawdata} If \var{rawdata} is a string, parse it as an \code{HTTP_COOKIE} and add the values found there as \class{Morsel}s. If it is a dictionary, it is equivalent to calling \begin{verbatim} map(BaseCookie.__setitem__, rawdata.keys(), rawdata.values()) \end{varbatim} \end{methoddesc} \begin{classdesc}{SimpleCookie}{\opt{input}} This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the identity and \function{str()} respectively. \end{classdesc} \begin{classdesc}{SerialCookie}{\opt{input}} This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the \function{pickle.loads()} and \function{pickle.dumps}. Note that using this class is a security hole, as arbitrary client-code can be run on \function{pickle.loads()}. \end{classdesc} \begin{classdesc}{SmartCookie}{\opt{input}} This class derives from \class{BaseCookie}. It overrides \method{value_decode} to be \function{pickle.loads()} if it is a valid pickle, and otherwise the value itself. It overrides \method{value_encode} to be \function{pickle.dumps()} unless it is a string, in which case it returns the value itself. The same security warning from \class{SerialCookie} applies here. \end{classdesc} From python-dev@python.org Sat Aug 19 16:21:15 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 08:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cookie,NONE,1.1 Message-ID: <200008191521.IAA01091@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv963/output Added Files: test_cookie Log Message: Test case for Cookie.py --- NEW FILE --- test_cookie Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; vienna 'finger' 'finger' chips 'ahoy' 'ahoy' Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; keebler 'E=mc2; L="Loves"; fudge=\012;' 'E=mc2; L="Loves"; fudge=\012;' From python-dev@python.org Sat Aug 19 16:21:15 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 08:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cookie.py,NONE,1.1 Message-ID: <200008191521.IAA01092@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv963 Added Files: test_cookie.py Log Message: Test case for Cookie.py --- NEW FILE --- # Simple test suite for Cookie.py import Cookie # Currently this only tests SimpleCookie cases = [ ('chips=ahoy; vienna=finger', {'chips':'ahoy', 'vienna':'finger'}), ('keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;";', {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}), ] for data, dict in cases: C = Cookie.SimpleCookie() ; C.load(data) print C for k, v in dict.items(): print ' ', k, repr( C[k].value ), repr(v) assert C[k].value == v C = Cookie.SimpleCookie() C.load('Customer="WILE_E_COYOTE"; Version=1; Path=/acme') assert C['Customer'].value == 'WILE_E_COYOTE' assert C['Customer']['version'] == '1' assert C['Customer']['path'] == '/acme' From python-dev@python.org Sat Aug 19 16:36:44 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 08:36:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules xxmodule.c,2.20,2.21 Message-ID: <200008191536.IAA04063@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv4028 Modified Files: xxmodule.c Log Message: Use METH_VARARGS constant in example module. Fix comment typo Index: xxmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/xxmodule.c,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** xxmodule.c 2000/07/21 06:00:07 2.20 --- xxmodule.c 2000/08/19 15:36:41 2.21 *************** *** 10,14 **** /* Use this file as a template to start implementing a module that ! also declares objects types. All occurrences of 'Xxo' should be changed to something reasonable for your objects. After that, all other occurrences of 'xx' should be changed to something reasonable for your --- 10,14 ---- /* Use this file as a template to start implementing a module that ! also declares object types. All occurrences of 'Xxo' should be changed to something reasonable for your objects. After that, all other occurrences of 'xx' should be changed to something reasonable for your *************** *** 67,71 **** static PyMethodDef Xxo_methods[] = { ! {"demo", (PyCFunction)Xxo_demo, 1}, {NULL, NULL} /* sentinel */ }; --- 67,71 ---- static PyMethodDef Xxo_methods[] = { ! {"demo", (PyCFunction)Xxo_demo, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; *************** *** 192,199 **** static PyMethodDef xx_methods[] = { ! {"roj", xx_roj, 1}, ! {"foo", xx_foo, 1}, ! {"new", xx_new, 1}, ! {"bug", xx_bug, 1}, {NULL, NULL} /* sentinel */ }; --- 192,199 ---- static PyMethodDef xx_methods[] = { ! {"roj", xx_roj, METH_VARARGS}, ! {"foo", xx_foo, METH_VARARGS}, ! {"new", xx_new, METH_VARARGS}, ! {"bug", xx_bug, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; From python-dev@python.org Sat Aug 19 16:57:35 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 19 Aug 2000 08:57:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cookie,1.1,1.2 Message-ID: <200008191557.IAA05785@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv5727/Lib/test/output Modified Files: test_cookie Log Message: Adding tests of the "attrs" optional argument, and of the js_output functionality. Index: test_cookie =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_cookie,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_cookie 2000/08/19 15:21:12 1.1 --- test_cookie 2000/08/19 15:57:33 1.2 *************** *** 6,7 **** --- 6,22 ---- Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; keebler 'E=mc2; L="Loves"; fudge=\012;' 'E=mc2; L="Loves"; fudge=\012;' + Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme; + + + + + + From python-dev@python.org Sat Aug 19 16:57:35 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 19 Aug 2000 08:57:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cookie.py,1.1,1.2 Message-ID: <200008191557.IAA05782@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv5727/Lib/test Modified Files: test_cookie.py Log Message: Adding tests of the "attrs" optional argument, and of the js_output functionality. Index: test_cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_cookie.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_cookie.py 2000/08/19 15:21:11 1.1 --- test_cookie.py 2000/08/19 15:57:32 1.2 *************** *** 25,26 **** --- 25,31 ---- assert C['Customer']['version'] == '1' assert C['Customer']['path'] == '/acme' + + print C.output(['path']) + print C.js_output() + print C.js_output(['path']) + From python-dev@python.org Sat Aug 19 17:55:00 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 19 Aug 2000 09:55:00 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcookie.tex,1.1,1.2 Message-ID: <200008191655.JAA17670@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17651/lib Modified Files: libcookie.tex Log Message: Make it format. Adjust markup for hyperlinking to the relevant RFCs. Give it a little organization. Minor nits. Index: libcookie.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcookie.tex,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** libcookie.tex 2000/08/19 14:11:41 1.1 --- libcookie.tex 2000/08/19 16:54:57 1.2 *************** *** 1,10 **** \section{\module{Cookie} --- ! RFC2109 HTTP State Management (AKA Cookies) Support} ! \declaremodule{standard}{Cookie} \moduleauthor{Timothy O'Malley}{timo@alum.mit.edu} \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} - \modulesynopsis{Support HTTP State Management (Cookies)} The \module{Cookie} module defines classes for abstracting the concept of --- 1,10 ---- \section{\module{Cookie} --- ! HTTP state management} + \declaremodule{standard}{Cookie} + \modulesynopsis{Support for HTTP state management (cookies).} \moduleauthor{Timothy O'Malley}{timo@alum.mit.edu} \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} The \module{Cookie} module defines classes for abstracting the concept of *************** *** 13,174 **** data-type as cookie value. - \subsection{Example \label{cookie-example}} - - The following example demonstrates how to open a can of spam using the - \module{spam} module. - - \begin{verbatim} - >>> import Cookie - >>> C = Cookie.SimpleCookie() - >>> C = Cookie.SerialCookie() - >>> C = Cookie.SmartCookie() - >>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie - >>> C = Cookie.SmartCookie() - >>> C["fig"] = "newton" - >>> C["sugar"] = "wafer" - >>> C # generate HTTP headers - Set-Cookie: sugar=wafer; - Set-Cookie: fig=newton; - >>> C = Cookie.SmartCookie() - >>> C["rocky"] = "road" - >>> C["rocky"]["path"] = "/cookie" - >>> print C.output(header="Cookie:") - Cookie: rocky=road; Path=/cookie; - >>> print C.output(attrs=[], header="Cookie:") - Cookie: rocky=road; - >>> C = Cookie.SmartCookie() - >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header) - >>> C - Set-Cookie: vienna=finger; - Set-Cookie: chips=ahoy; - >>> C = Cookie.SmartCookie() - >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') - >>> C - Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; - >>> C = Cookie.SmartCookie() - >>> C["oreo"] = "doublestuff" - >>> C["oreo"]["path"] = "/" - >>> C - Set-Cookie: oreo="doublestuff"; Path=/; - >>> C = Cookie.SmartCookie() - >>> C["twix"] = "none for you" - >>> C["twix"].value - 'none for you' - >>> C = Cookie.SimpleCookie() - >>> C["number"] = 7 # equivalent to C["number"] = str(7) - >>> C["string"] = "seven" - >>> C["number"].value - '7' - >>> C["string"].value - 'seven' - >>> C - Set-Cookie: number=7; - Set-Cookie: string=seven; - >>> C = Cookie.SerialCookie() - >>> C["number"] = 7 - >>> C["string"] = "seven" - >>> C["number"].value - 7 - >>> C["string"].value - 'seven' - >>> C - Set-Cookie: number="I7\012."; - Set-Cookie: string="S'seven'\012p1\012."; - >>> C = Cookie.SmartCookie() - >>> C["number"] = 7 - >>> C["string"] = "seven" - >>> C["number"].value - 7 - >>> C["string"].value - 'seven' - >>> C - Set-Cookie: number="I7\012."; - Set-Cookie: string=seven; - \end{verbatim} \begin{excdesc}{CookieError} ! Exception failing because of RFC2109 invalidity: incorrect attributes, ! incorrect \code{Set-Cookie} header, etc. \end{excdesc} - %\subsection{Morsel Objects} - %\label{morsel-objects} ! \begin{classdesc}{Morsel}{} ! Abstract a key/value pair, which has some RFC2109 attributes. ! ! Morsels are dictionary-like objects, whose set of keys is constant --- ! the valid RFC2109 attributes, which are ! \begin{itemize} ! \item \code{expires} ! \item \code{path} ! \item \code{comment} ! \item \code{domain} ! \item \code{max-age} ! \item \code{secure} ! \item \code{version} ! \end{itemize} ! \end{itemize} ! The keys are case-insensitive. \end{classdesc} ! \begin{memberdesc}[Morsel]{value} ! The value of the cookie. ! \end{methoddesc} ! ! \begin{memberdesc}[Morsel]{coded_value} ! The encoded value of the cookie --- this is what should be sent. ! \end{methoddesc} ! ! ! \begin{memberdesc}[Morsel]{key} ! The name of the cookie. ! \end{methoddesc} ! \begin{methodesc}[Morsel]{set}{key, value, coded_value} ! Set the \var{key}, \var{value} and \var{coded_value} members. ! \end{methoddesc} ! \begin{methoddesc}[Morsel]{isReservedKey}{K} ! Whether \var{K} is a member of the set of keys of a \class{Morsel}. ! \end{methoddesc} ! \begin{methoddesc}[Morsel]{output}{\opt{attrs, \opt{header}} ! Return a string representation of the Morsel, suitable ! to be sent as an HTTP header. By default, all the attributes are included, ! unless \var{attrs} is given, in which case it should be a list of attributes ! to use. \var{header} is by default \code{"Set-Cookie:"}. ! \end{methoddesc} - \begin{methoddesc}[Morsel]{js_output}{\opt{attrs}} - Return an embeddable JavaScript snippet, which, if run on a browser which - supports JavaScript, will act the same as if the HTTP header was sent. ! The meaning for \var{attrs} is the same as in \method{output()}. ! \end{methoddesc}. - \begin{methoddesc}[Morsel]{OutputString}{\opt{attrs}} - Return a string representing the Morsel, without any surrounding HTTP - or JavaScript. ! The meaning for \var{attrs} is the same as in \method{output()}. ! \end{methoddesc} ! ! # This used to be strict parsing based on the RFC2109 and RFC2068 ! # specifications. I have since discovered that MSIE 3.0x doesn't ! # follow the character rules outlined in those specs. As a ! # result, the parsing rules here are less strict. - \begin{classdesc}{BaseCookie}{\opt{input}} - This class is a dictionary-like object whose keys are strings and - whose values are \class{Morsel}s. Note that upon setting a key to - a value, the value is first converted to a \class{Morsel} containing - the key and the value. - - If \var{input} is given, it is passed to the \method{load} method. - \end{classdesc} - \begin{methoddesc}[BaseCookie]{value_decode}{val} Return a decoded value from a string representation. Return value can --- 13,68 ---- data-type as cookie value. \begin{excdesc}{CookieError} ! Exception failing because of \rfc{2109} invalidity: incorrect ! attributes, incorrect \code{Set-Cookie} header, etc. \end{excdesc} ! This used to be strict parsing based on the \rfc{2109} and \rfc{2068} ! specifications. I have since discovered that MSIE 3.0x doesn't ! follow the character rules outlined in those specs. As a ! result, the parsing rules here are less strict. ! \begin{classdesc}{BaseCookie}{\optional{input}} ! This class is a dictionary-like object whose keys are strings and ! whose values are \class{Morsel}s. Note that upon setting a key to ! a value, the value is first converted to a \class{Morsel} containing ! the key and the value. ! If \var{input} is given, it is passed to the \method{load} method. \end{classdesc} ! \begin{classdesc}{SimpleCookie}{\optional{input}} ! This class derives from \class{BaseCookie} and overrides \method{value_decode} ! and \method{value_encode} to be the identity and \function{str()} respectively. ! \end{classdesc} ! \begin{classdesc}{SerialCookie}{\optional{input}} ! This class derives from \class{BaseCookie} and overrides \method{value_decode} ! and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. Note that using this class is a security hole, ! as arbitrary client-code can be run on \function{pickle.loads()}. ! \end{classdesc} ! \begin{classdesc}{SmartCookie}{\optional{input}} ! This class derives from \class{BaseCookie}. It overrides \method{value_decode} ! to be \function{pickle.loads()} if it is a valid pickle, and otherwise ! the value itself. It overrides \method{value_encode} to be ! \function{pickle.dumps()} unless it is a string, in which case it returns ! the value itself. ! The same security warning from \class{SerialCookie} applies here. ! \end{classdesc} ! \begin{seealso} ! \seerfc{2109}{HTTP State Management Mechanism}{This is the state ! management specification implemented by this module.} ! \end{seealso} ! \subsection{Cookie Objects \label{cookie-objects}} \begin{methoddesc}[BaseCookie]{value_decode}{val} Return a decoded value from a string representation. Return value can *************** *** 186,190 **** \end{methoddesc}. ! \begin{methoddesc}[BaseCookie]{output}{\opt{attrs\opt{, header\opt{, sep}}}} Return a string representation suitable to be sent as HTTP headers. \var{attrs} and \var{header} are sent to each \class{Morsel}'s \method{output} --- 80,84 ---- \end{methoddesc}. ! \begin{methoddesc}[BaseCookie]{output}{\optional{attrs\optional{, header\optional{, sep}}}} Return a string representation suitable to be sent as HTTP headers. \var{attrs} and \var{header} are sent to each \class{Morsel}'s \method{output} *************** *** 193,197 **** \end{methoddesc} ! \begin{methoddesc}[BaseCookie]{js_output}{\opt{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP headers was sent. --- 87,91 ---- \end{methoddesc} ! \begin{methoddesc}[BaseCookie]{js_output}{\optional{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP headers was sent. *************** *** 203,232 **** If \var{rawdata} is a string, parse it as an \code{HTTP_COOKIE} and add the values found there as \class{Morsel}s. If it is a dictionary, it ! is equivalent to calling \begin{verbatim} ! map(BaseCookie.__setitem__, rawdata.keys(), rawdata.values()) ! \end{varbatim} \end{methoddesc} - \begin{classdesc}{SimpleCookie}{\opt{input}} - This class derives from \class{BaseCookie} and overrides \method{value_decode} - and \method{value_encode} to be the identity and \function{str()} respectively. - \end{classdesc} ! \begin{classdesc}{SerialCookie}{\opt{input}} ! This class derives from \class{BaseCookie} and overrides \method{value_decode} ! and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. Note that using this class is a security hole, ! as arbitrary client-code can be run on \function{pickle.loads()}. ! \end{classdesc} ! \begin{classdesc}{SmartCookie}{\opt{input}} ! This class derives from \class{BaseCookie}. It overrides \method{value_decode} ! to be \function{pickle.loads()} if it is a valid pickle, and otherwise ! the value itself. It overrides \method{value_encode} to be ! \function{pickle.dumps()} unless it is a string, in which case it returns ! the value itself. ! The same security warning from \class{SerialCookie} applies here. \end{classdesc} --- 97,243 ---- If \var{rawdata} is a string, parse it as an \code{HTTP_COOKIE} and add the values found there as \class{Morsel}s. If it is a dictionary, it ! is equivalent to: \begin{verbatim} ! for k, v in rawdata.items(): ! cookie[k] = v ! \end{verbatim} \end{methoddesc} ! \subsection{Morsel Objects \label{morsel-objects}} ! \begin{classdesc}{Morsel}{} ! Abstract a key/value pair, which has some \rfc{2109} attributes. ! Morsels are dictionary-like objects, whose set of keys is constant --- ! the valid \rfc{2109} attributes, which are ! ! \begin{itemize} ! \item \code{expires} ! \item \code{path} ! \item \code{comment} ! \item \code{domain} ! \item \code{max-age} ! \item \code{secure} ! \item \code{version} ! \end{itemize} ! ! The keys are case-insensitive. \end{classdesc} + + \begin{memberdesc}[Morsel]{value} + The value of the cookie. + \end{memberdesc} + + \begin{memberdesc}[Morsel]{coded_value} + The encoded value of the cookie --- this is what should be sent. + \end{memberdesc} + + \begin{memberdesc}[Morsel]{key} + The name of the cookie. + \end{memberdesc} + + \begin{methoddesc}[Morsel]{set}{key, value, coded_value} + Set the \var{key}, \var{value} and \var{coded_value} members. + \end{methoddesc} + + \begin{methoddesc}[Morsel]{isReservedKey}{K} + Whether \var{K} is a member of the set of keys of a \class{Morsel}. + \end{methoddesc} + + \begin{methoddesc}[Morsel]{output}{\optional{attrs\optional{, header}}} + Return a string representation of the Morsel, suitable + to be sent as an HTTP header. By default, all the attributes are included, + unless \var{attrs} is given, in which case it should be a list of attributes + to use. \var{header} is by default \code{"Set-Cookie:"}. + \end{methoddesc} + + \begin{methoddesc}[Morsel]{js_output}{\optional{attrs}} + Return an embeddable JavaScript snippet, which, if run on a browser which + supports JavaScript, will act the same as if the HTTP header was sent. + + The meaning for \var{attrs} is the same as in \method{output()}. + \end{methoddesc}. + + \begin{methoddesc}[Morsel]{OutputString}{\optional{attrs}} + Return a string representing the Morsel, without any surrounding HTTP + or JavaScript. + + The meaning for \var{attrs} is the same as in \method{output()}. + \end{methoddesc} + + + \subsection{Example \label{cookie-example}} + + The following example demonstrates how to open a can of spam using the + \module{spam} module. + + \begin{verbatim} + >>> import Cookie + >>> C = Cookie.SimpleCookie() + >>> C = Cookie.SerialCookie() + >>> C = Cookie.SmartCookie() + >>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie + >>> C = Cookie.SmartCookie() + >>> C["fig"] = "newton" + >>> C["sugar"] = "wafer" + >>> C # generate HTTP headers + Set-Cookie: sugar=wafer; + Set-Cookie: fig=newton; + >>> C = Cookie.SmartCookie() + >>> C["rocky"] = "road" + >>> C["rocky"]["path"] = "/cookie" + >>> print C.output(header="Cookie:") + Cookie: rocky=road; Path=/cookie; + >>> print C.output(attrs=[], header="Cookie:") + Cookie: rocky=road; + >>> C = Cookie.SmartCookie() + >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header) + >>> C + Set-Cookie: vienna=finger; + Set-Cookie: chips=ahoy; + >>> C = Cookie.SmartCookie() + >>> C.load('keebler="E=everybody; L=\"Loves\"; fudge=\012;";') + >>> C + Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; + >>> C = Cookie.SmartCookie() + >>> C["oreo"] = "doublestuff" + >>> C["oreo"]["path"] = "/" + >>> C + Set-Cookie: oreo="doublestuff"; Path=/; + >>> C = Cookie.SmartCookie() + >>> C["twix"] = "none for you" + >>> C["twix"].value + 'none for you' + >>> C = Cookie.SimpleCookie() + >>> C["number"] = 7 # equivalent to C["number"] = str(7) + >>> C["string"] = "seven" + >>> C["number"].value + '7' + >>> C["string"].value + 'seven' + >>> C + Set-Cookie: number=7; + Set-Cookie: string=seven; + >>> C = Cookie.SerialCookie() + >>> C["number"] = 7 + >>> C["string"] = "seven" + >>> C["number"].value + 7 + >>> C["string"].value + 'seven' + >>> C + Set-Cookie: number="I7\012."; + Set-Cookie: string="S'seven'\012p1\012."; + >>> C = Cookie.SmartCookie() + >>> C["number"] = 7 + >>> C["string"] = "seven" + >>> C["number"].value + 7 + >>> C["string"].value + 'seven' + >>> C + Set-Cookie: number="I7\012."; + Set-Cookie: string=seven; + \end{verbatim} From python-dev@python.org Sat Aug 19 17:55:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 19 Aug 2000 09:55:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib lib.tex,1.159,1.160 Message-ID: <200008191655.JAA17815@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17798/lib Modified Files: lib.tex Log Message: Add entry for Cookie module. Index: lib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v retrieving revision 1.159 retrieving revision 1.160 diff -C2 -r1.159 -r1.160 *** lib.tex 2000/08/03 21:18:18 1.159 --- lib.tex 2000/08/19 16:55:31 1.160 *************** *** 206,209 **** --- 206,210 ---- \input{libsimplehttp} \input{libcgihttp} + \input{libcookie} \input{libasyncore} From python-dev@python.org Sat Aug 19 17:55:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 19 Aug 2000 09:55:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile.deps,1.39,1.40 Message-ID: <200008191655.JAA17811@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv17798 Modified Files: Makefile.deps Log Message: Add entry for Cookie module. Index: Makefile.deps =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile.deps,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** Makefile.deps 2000/08/03 21:18:16 1.39 --- Makefile.deps 2000/08/19 16:55:31 1.40 *************** *** 172,175 **** --- 172,176 ---- ../lib/liblocale.tex \ ../lib/libbasehttp.tex \ + ../lib/libcookie.tex \ ../lib/libcopyreg.tex \ ../lib/libsymbol.tex \ From python-dev@python.org Sat Aug 19 21:55:05 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 19 Aug 2000 13:55:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.28,1.29 Message-ID: <200008192055.NAA02143@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv2034/Doc/ref Modified Files: ref6.tex Log Message: Disallow "import mod.submod as m", because the result is ambiguous. Does it load mod.submod as m, or mod as m ? Both can be achieved differently, and unambiguously. Also attempt to document this restriction (editor appreciated!) Note that this is an artificial check during compile, because incorporating this in the grammar is hard, and then adjusting the compiler to do the right thing with the right nodes is harder. Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** ref6.tex 2000/08/17 22:54:59 1.28 --- ref6.tex 2000/08/19 20:55:01 1.29 *************** *** 499,503 **** local namespace to the module object, and then goes on to import the next identifier, if any. If the module name is followed by \keyword{as}, ! the name following \keyword{as} is used as the local name for the module. The \keyword{from} form does not bind the module name: it goes through the list of identifiers, looks each one of them up in the module found in step --- 499,508 ---- local namespace to the module object, and then goes on to import the next identifier, if any. If the module name is followed by \keyword{as}, ! the name following \keyword{as} is used as the local name for the module. To ! avoid confusion, you cannot import sub-modules 'as' a different ! local name. So 'import module as m' is legal, but 'import module.submod as ! s' is not. The latter should be written as 'from module import submod as s', ! see below. ! The \keyword{from} form does not bind the module name: it goes through the list of identifiers, looks each one of them up in the module found in step From python-dev@python.org Sat Aug 19 21:55:05 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 19 Aug 2000 13:55:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.128,2.129 Message-ID: <200008192055.NAA02149@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv2034/Python Modified Files: compile.c Log Message: Disallow "import mod.submod as m", because the result is ambiguous. Does it load mod.submod as m, or mod as m ? Both can be achieved differently, and unambiguously. Also attempt to document this restriction (editor appreciated!) Note that this is an artificial check during compile, because incorporating this in the grammar is hard, and then adjusting the compiler to do the right thing with the right nodes is harder. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.128 retrieving revision 2.129 diff -C2 -r2.128 -r2.129 *** compile.c 2000/08/18 19:59:20 2.128 --- compile.c 2000/08/19 20:55:02 2.129 *************** *** 2140,2144 **** com_push(c, 1); if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0) { com_error(c, PyExc_SyntaxError, "invalid syntax"); --- 2140,2145 ---- com_push(c, 1); if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0 || ! NCH(CHILD(subn, 0)) > 1) { com_error(c, PyExc_SyntaxError, "invalid syntax"); From python-dev@python.org Sun Aug 20 04:25:25 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 20:25:25 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.16,1.17 Message-ID: <200008200325.UAA08569@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv8332 Modified Files: pep-0200.txt Log Message: Updated all the bug entries. Rehabilitated extended print. Added latest commonprefix development. Added info about impending death of winreg.py. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** pep-0200.txt 2000/08/18 20:26:47 1.16 --- pep-0200.txt 2000/08/20 03:25:22 1.17 *************** *** 92,95 **** --- 92,101 ---- --------- -------- - - ------------- test_winreg2 Win32 X X 26-Jul-2000 + [19-Aug-2000 tim + This test will never work on Win98, because it's looking for + a part of registry that doesn't exist under W98. + The module (winreg.py) and this test case will be removed + before 2.0 for other reasons, though. + ] [still fails 15-Aug-2000 for me, on Win98 - tim test test_winreg2 failed -- Writing: 'Test Failed: testHives', *************** *** 108,111 **** --- 114,124 ---- test_fork1 Linux X 26-Jul-2000 just SMP? [no clue; there are probably two bugs here] + [19-Aug-200 tim + Charles Waldman whipped up a patch to give child processes a new + "global lock": + http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 + While this doesn't appear to address the symptoms we *saw*, it + *does* so far appear to be fixing the failing cases anyway + ] *************** *** 138,141 **** --- 151,159 ---- anymore; eyeballing Fred's changes didn't turn up a suspect either + 19-Aug-2000, tim: the "subtle bug" in regrtest.py -v is + actually a feature: -v masks *some* kinds of failures, + since it doesn't compare test output with the canned + output; this is what makes it say "test passed" even + in some cases where the test fails without -v ] *************** *** 148,151 **** --- 166,182 ---- Decide what to do about os.path.commonprefix. Then do it. + [19-Aug-2000 tim + Guido msg on Python-Dev: + - restore the old behavior on all platforms + - add to the docs that to get the common directory you use dirname() + - add testcases that check that this works on all platforms + - don't add commonpathprefix(), because dirname() already does it + ] + + Remove winreg.py and test_winreg2.py. Paul Prescod (the author) + now wants to make a registry API more like the MS .NET API. Unclear + whether that can be done in time for 2.0, but, regardless, if we + let winreg.py out the door we'll be stuck with it forever, and not + even Paul wants it anymore. *************** *** 209,212 **** --- 240,249 ---- getitem if there is no getslice. + * Extended print statement - Barry Warsaw + PEP 214 + http://python.sourceforge.net/peps/pep-0214.html + SF Patch #100970 + http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 + Open: proposed but not accepted or rejected *************** *** 224,233 **** Postponed - - * Extended print statement - Barry Warsaw - PEP 214 - http://python.sourceforge.net/peps/pep-0214.html - SF Patch #100970 - http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 * Eliminated SET_LINENO opcode - Vladimir Marangozov --- 261,264 ---- From python-dev@python.org Sun Aug 20 05:18:42 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 21:18:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_getopt,NONE,1.1 Message-ID: <200008200418.VAA19996@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv19954/output Added Files: test_getopt Log Message: David Goodger's new getopt test module (thanks, David!). https://sourceforge.net/patch/?func=detailpatch&patch_id=101110&group_id=5470 Accepted as-is, except for purging an "import *". --- NEW FILE --- test_getopt Running tests on getopt.short_has_arg Running tests on getopt.long_has_args Running tests on getopt.do_shorts Running tests on getopt.do_longs Running tests on getopt.getopt Module getopt: tests completed successfully. From python-dev@python.org Sun Aug 20 05:18:42 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 21:18:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_getopt.py,NONE,1.1 Message-ID: <200008200418.VAA19993@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv19954 Added Files: test_getopt.py Log Message: David Goodger's new getopt test module (thanks, David!). https://sourceforge.net/patch/?func=detailpatch&patch_id=101110&group_id=5470 Accepted as-is, except for purging an "import *". --- NEW FILE --- # test_getopt.py # David Goodger 2000-08-19 import getopt from getopt import GetoptError from test.test_support import verbose def expectException(teststr, expected, failure=AssertionError): """Executes a statement passed in teststr, and raises an exception (failure) if the expected exception is *not* raised.""" try: exec teststr except expected: pass else: raise failure if verbose: print 'Running tests on getopt.short_has_arg' assert getopt.short_has_arg('a', 'a:') assert not getopt.short_has_arg('a', 'a') expectException("tmp = getopt.short_has_arg('a', 'b')", GetoptError) expectException("tmp = getopt.short_has_arg('a', '')", GetoptError) if verbose: print 'Running tests on getopt.long_has_args' has_arg, option = getopt.long_has_args('abc', ['abc=']) assert has_arg assert option == 'abc' has_arg, option = getopt.long_has_args('abc', ['abc']) assert not has_arg assert option == 'abc' has_arg, option = getopt.long_has_args('abc', ['abcd']) assert not has_arg assert option == 'abcd' expectException("has_arg, option = getopt.long_has_args('abc', ['def'])", GetoptError) expectException("has_arg, option = getopt.long_has_args('abc', [])", GetoptError) expectException("has_arg, option = " + \ "getopt.long_has_args('abc', ['abcd','abcde'])", GetoptError) if verbose: print 'Running tests on getopt.do_shorts' opts, args = getopt.do_shorts([], 'a', 'a', []) assert opts == [('-a', '')] assert args == [] opts, args = getopt.do_shorts([], 'a1', 'a:', []) assert opts == [('-a', '1')] assert args == [] #opts, args = getopt.do_shorts([], 'a=1', 'a:', []) #assert opts == [('-a', '1')] #assert args == [] opts, args = getopt.do_shorts([], 'a', 'a:', ['1']) assert opts == [('-a', '1')] assert args == [] opts, args = getopt.do_shorts([], 'a', 'a:', ['1', '2']) assert opts == [('-a', '1')] assert args == ['2'] expectException("opts, args = getopt.do_shorts([], 'a1', 'a', [])", GetoptError) expectException("opts, args = getopt.do_shorts([], 'a', 'a:', [])", GetoptError) if verbose: print 'Running tests on getopt.do_longs' opts, args = getopt.do_longs([], 'abc', ['abc'], []) assert opts == [('--abc', '')] assert args == [] opts, args = getopt.do_longs([], 'abc=1', ['abc='], []) assert opts == [('--abc', '1')] assert args == [] opts, args = getopt.do_longs([], 'abc=1', ['abcd='], []) assert opts == [('--abcd', '1')] assert args == [] expectException("opts, args = getopt.do_longs([], 'abc=1', ['abc'], [])", GetoptError) expectException("opts, args = getopt.do_longs([], 'abc', ['abc='], [])", GetoptError) # note: the empty string between '-a' and '--beta' is significant: # it simulates an empty string option argument ('-a ""') on the command line. cmdline = ['-a', '1', '-b', '--alpha=2', '--beta', '-a', '3', '-a', '', '--beta', 'arg1', 'arg2'] if verbose: print 'Running tests on getopt.getopt' opts, args = getopt.getopt(cmdline, 'a:b', ['alpha=', 'beta']) assert opts == [('-a', '1'), ('-b', ''), ('--alpha', '2'), ('--beta', ''), ('-a', '3'), ('-a', ''), ('--beta', '')] # Note ambiguity of ('-b', '') and ('-a', '') above. This must be # accounted for in the code that calls getopt(). assert args == ['arg1', 'arg2'] expectException( "opts, args = getopt.getopt(cmdline, 'a:b', ['alpha', 'beta'])", GetoptError) if verbose: print "Module getopt: tests completed successfully." From python-dev@python.org Sun Aug 20 06:59:29 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 22:59:29 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.17,1.18 Message-ID: <200008200559.WAA01623@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1542 Modified Files: pep-0200.txt Log Message: Closed the "test_popen2 fails under Windows" bug -- although I'm only sure about that for Win98SE. Moved the test_fork1 bug up to the top since it's the only interesting std test failure remaining. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -r1.17 -r1.18 *** pep-0200.txt 2000/08/20 03:25:22 1.17 --- pep-0200.txt 2000/08/20 05:59:27 1.18 *************** *** 91,94 **** --- 91,104 ---- test case platform R B date reported --------- -------- - - ------------- + test_fork1 Linux X 26-Jul-2000 just SMP? + [no clue; there are probably two bugs here] + [19-Aug-200 tim + Charles Waldman whipped up a patch to give child processes a new + "global lock": + http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 + While this doesn't appear to address the symptoms we *saw*, it + *does* so far appear to be fixing the failing cases anyway + ] + test_winreg2 Win32 X X 26-Jul-2000 [19-Aug-2000 tim *************** *** 103,107 **** --- 113,134 ---- ] + + Previously failing test cases + + If you find a test bouncing between this section and the previous one, + the code it's testing is in trouble! + + test case platform R B date reported + --------- -------- - - ------------- test_popen2 Win32 X X 26-Jul-2000 + [20-Aug-2000 tim + changed the popen2.py _test function to use the "more" cmd + when os.name == "nt". This makes test_popen2 pass under + Win98SE. + HOWEVER, the Win98 "more" invents a leading newline out + of thin air, and I'm not sure that the other Windows flavors + of "more" also do that. + So, somebody please try under other Windows flavors! + ] [still fails 15-Aug-2000 for me, on Win98 - tim test test_popen2 crashed -- exceptions.AssertionError : *************** *** 112,133 **** ] - test_fork1 Linux X 26-Jul-2000 just SMP? - [no clue; there are probably two bugs here] - [19-Aug-200 tim - Charles Waldman whipped up a patch to give child processes a new - "global lock": - http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 - While this doesn't appear to address the symptoms we *saw*, it - *does* so far appear to be fixing the failing cases anyway - ] - - - Previously failing test cases - - If you find a test bouncing between this section and the previous one, - the code it's testing is in trouble! - - test case platform R B date reported - --------- -------- - - ------------- test_winreg Win32 X X 26-Jul-2000 [works 15-Aug-2000 for me, on Win98 - tim] --- 139,142 ---- From python-dev@python.org Sun Aug 20 06:57:39 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 22:57:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib popen2.py,1.12,1.13 Message-ID: <200008200557.WAA01518@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv1320/python/dist/src/lib Modified Files: popen2.py Log Message: Changed the popen2.py _test function to use the "more" cmd when os.name == "nt". This makes test_popen2 pass under Win98SE. HOWEVER, the Win98 "more" invents a leading newline out of thin air, and I'm not sure that the other Windows flavors of "more" also do that. So, somebody please try under other Windows flavors! Index: popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/popen2.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** popen2.py 2000/07/10 14:28:25 1.12 --- popen2.py 2000/08/20 05:57:36 1.13 *************** *** 141,158 **** def _test(): teststr = "abc\n" print "testing popen2..." ! r, w = popen2('cat') w.write(teststr) w.close() ! assert r.read() == teststr print "testing popen3..." try: ! r, w, e = popen3(['cat']) except: ! r, w, e = popen3('cat') w.write(teststr) w.close() ! assert r.read() == teststr assert e.read() == "" for inst in _active[:]: --- 141,163 ---- def _test(): + cmd = "cat" teststr = "abc\n" + resultstr = teststr + if os.name == "nt": + cmd = "more" + resultstr = "\n" + resultstr print "testing popen2..." ! r, w = popen2(cmd) w.write(teststr) w.close() ! assert r.read() == resultstr print "testing popen3..." try: ! r, w, e = popen3([cmd]) except: ! r, w, e = popen3(cmd) w.write(teststr) w.close() ! assert r.read() == resultstr assert e.read() == "" for inst in _active[:]: From python-dev@python.org Sun Aug 20 11:49:48 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 20 Aug 2000 03:49:48 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,1.1,1.2 Message-ID: <200008201049.DAA23187@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv22030 Modified Files: pep-0221.txt Log Message: Make the PEP conform to reality, and add the suggestion to generalize the expressions allowed after the 'as' clause. Change some markup, and mark it as Accepted (which it is, since the change has been checked in.) Barry, this should probably also change in the PEP Index PEP. Index: pep-0221.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0221.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0221.txt 2000/08/15 13:42:44 1.1 --- pep-0221.txt 2000/08/20 10:49:45 1.2 *************** *** 4,8 **** Owner: thomas@xs4all.net (Thomas Wouters) Python-Version: 2.0 ! Status: Draft Created: 15-Aug-2000 Type: Standard --- 4,8 ---- Owner: thomas@xs4all.net (Thomas Wouters) Python-Version: 2.0 ! Status: Accepted Created: 15-Aug-2000 Type: Standard *************** *** 28,47 **** round-about way has to be used to achieve this: ! import os ! real_os = os ! del os And similar for the `from ... import' statement: ! from os import fdopen, exit, stat ! os_fdopen = fdopen ! os_stat = stat ! del fdopen, stat The proposed syntax change would add an optional `as' clause to both these statements, as follows: ! import os as real_os ! from os import fdopen as os_fdopen, exit, stat as os_stat The `as' name is not intended to be a keyword, and some trickery --- 28,47 ---- round-about way has to be used to achieve this: ! import os ! real_os = os ! del os And similar for the `from ... import' statement: ! from os import fdopen, exit, stat ! os_fdopen = fdopen ! os_stat = stat ! del fdopen, stat The proposed syntax change would add an optional `as' clause to both these statements, as follows: ! import os as real_os ! from os import fdopen as os_fdopen, exit, stat as os_stat The `as' name is not intended to be a keyword, and some trickery *************** *** 49,93 **** more advanced parsers/tokenizers, however, this should not be a problem. Implementation details ! A proposed implementation of this new clause can be found in the ! SourceForge patch manager[XX]. The patch uses a NAME field in the ! grammar rather than a bare string, to avoid the keyword issue. It ! also introduces a new bytecode, IMPORT_FROM_AS, which loads an ! object from a module and pushes it onto the stack, so it can be ! stored by a normal STORE_NAME opcode. ! The special case of `from module import *' remains a special case, ! in that it cannot accomodate an `as' clause. Also, the current ! implementation does not use IMPORT_FROM_AS for the old form of ! from-import, even though it would make sense to do so. The reason ! for this is that the current IMPORT_FROM bytecode loads objects ! directly from a module into the local namespace, in one bytecode ! operation, and also handles the special case of `*'. As a result ! of moving to the IMPORT_FROM_AS bytecode, two things would happen: ! ! - Two bytecode operations would have to be performed, per symbol, ! rather than one. ! ! - The names imported through `from-import' would be susceptible to ! the `global' keyword, which they currently are not. This means ! that `from-import' outside of the `*' special case behaves more ! like the normal `import' statement, which already follows the ! `global' keyword. It also means, however, that the `*' special ! case is even more special, compared to the ordinary form of ! `from-import' ! ! However, for consistency and for simplicity of implementation, it ! is probably best to split off the special case entirely, making a ! separate bytecode `IMPORT_ALL' that handles the special case of ! `*', and handle all other forms of `from-import' the way the ! proposed `IMPORT_FROM_AS' bytecode does. ! ! This dilemma does not apply to the normal `import' statement, ! because this is alread split into two opcodes, a `LOAD_MODULE' and a ! `STORE_NAME' opcode. Supporting the `import as' syntax is a slight ! change to the compiler only. --- 49,98 ---- more advanced parsers/tokenizers, however, this should not be a problem. + + To avoid confusion, importing a submodule `as' another module is + not allowed. When importing a submodule in the normal way, + + import os.path + + The actual name stored locally is `os', not `path' (so that the + newly imported module can be referenced as `os.path'.) When + introducing the `as' keyword, it is unclear whether the `os' + module or the `path' sub-module should be stored `as' the + requested local name. Implementation details ! This PEP has been accepted, and the suggested code change has been ! checked in. The patch can still be found in the SourceForge patch ! manager[1]. Currently, a NAME field is used in the grammar rather ! than a bare string, to avoid the keyword issue. It introduces a ! new bytecode, IMPORT_STAR, which performs the `from module import ! *' behaviour, and changes the behaviour of the IMPORT_FROM ! bytecode so that it loads the requested name (which is always a ! single name) onto the stack, to be subsequently stored by a STORE ! opcode. ! The special case of `from module import *' remains a special case, ! in that it cannot accomodate an `as' clause, and that no STORE ! opcodes are generated; the objects imported are loaded directly ! into the local namespace. ! ! An additional change to this syntax has also been suggested, to ! generalize the expression given after the `as' clause. Rather than ! a single name, it could be allowed to be any expression that ! yields a valid l-value; anything that can be assigned to. The ! change to accomodate this is minimal, as the patch proves[2], and ! the resulting generalization allows a number of new constructs ! that run completely parallel with other Python assignment ! constructs. ! ! import sys as x['sys'] ! ! from MyFastcPickle import Pickler as shelve.Pickler ! ! from sys import version_info as (maj, min, pl, relnam, relno) ! ! from sys import path as mypath[-1:] *************** *** 101,104 **** --- 106,112 ---- [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=101135&group_id=5470 + + [2] + http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470 From python-dev@python.org Sun Aug 20 15:01:57 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 20 Aug 2000 07:01:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.191,2.192 Message-ID: <200008201401.HAA07198@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv6504/Python Modified Files: ceval.c Log Message: Fix the bug Sjoerd Mullender discovered, where find_from_args() wasn't trying hard enough to find out what the arguments to an import were. There is no test-case for this bug, yet, but this is what it looked like: from encodings import cp1006, cp1026 ImportError: cannot import name cp1026 '__import__' was called with only the first name in the 'arguments' list. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.191 retrieving revision 2.192 diff -C2 -r2.191 -r2.192 *** ceval.c 2000/08/18 19:53:25 2.191 --- ceval.c 2000/08/20 14:01:53 2.192 *************** *** 2865,2869 **** do { oparg = (next_instr[1]<<8) + next_instr[0]; ! next_instr += 2; name = Getnamev(f, oparg); if (PyList_Append(list, name) < 0) { --- 2865,2871 ---- do { oparg = (next_instr[1]<<8) + next_instr[0]; ! /* Jump over our own argument, the next instruction ! (which is a STORE), and its argument.*/ ! next_instr += 5; name = Getnamev(f, oparg); if (PyList_Append(list, name) < 0) { From python-dev@python.org Mon Aug 21 00:33:52 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sun, 20 Aug 2000 16:33:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcookie.tex,1.2,1.3 Message-ID: <200008202333.QAA08528@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv7304 Modified Files: libcookie.tex Log Message: Strengthen the warning against using SerialCookie and SmartCookie. (If they're security holes, should they be documented at all?) Minor rewrites. Index: libcookie.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcookie.tex,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** libcookie.tex 2000/08/19 16:54:57 1.2 --- libcookie.tex 2000/08/20 23:33:50 1.3 *************** *** 9,16 **** The \module{Cookie} module defines classes for abstracting the concept of ! Cookies, an HTTP state management mechanism. It supports both simplistic string-only cookies, and provides an abstraction for having any serializable data-type as cookie value. \begin{excdesc}{CookieError} --- 9,20 ---- The \module{Cookie} module defines classes for abstracting the concept of ! cookies, an HTTP state management mechanism. It supports both simplistic string-only cookies, and provides an abstraction for having any serializable data-type as cookie value. + The module formerly strictly applied the parsing rules described in in + the \rfc{2109} and \rfc{2068} specifications. It has since been discovered + that MSIE 3.0x doesn't follow the character rules outlined in those + specs. As a result, the parsing rules used are a bit less strict. \begin{excdesc}{CookieError} *************** *** 19,28 **** \end{excdesc} - - This used to be strict parsing based on the \rfc{2109} and \rfc{2068} - specifications. I have since discovered that MSIE 3.0x doesn't - follow the character rules outlined in those specs. As a - result, the parsing rules here are less strict. - \begin{classdesc}{BaseCookie}{\optional{input}} This class is a dictionary-like object whose keys are strings and --- 23,26 ---- *************** *** 42,47 **** This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. Note that using this class is a security hole, ! as arbitrary client-code can be run on \function{pickle.loads()}. \end{classdesc} --- 40,50 ---- This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. ! ! Do not use this class. Reading pickled values from a cookie is a ! security hole, as arbitrary client-code can be run on ! \function{pickle.loads()}. It is supported for backwards ! compatibility. ! \end{classdesc} From python-dev@python.org Mon Aug 21 00:37:07 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sun, 20 Aug 2000 16:37:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _cursesmodule.c,2.37,2.38 Message-ID: <200008202337.QAA12002@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv11200 Modified Files: _cursesmodule.c Log Message: Add alias for old function name -- removing it broke Alexei Gilchrist's cfm Index: _cursesmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_cursesmodule.c,v retrieving revision 2.37 retrieving revision 2.38 diff -C2 -r2.37 -r2.38 *** _cursesmodule.c 2000/07/27 11:58:01 2.37 --- _cursesmodule.c 2000/08/20 23:37:02 2.38 *************** *** 1271,1274 **** --- 1271,1276 ---- {"notimeout", (PyCFunction)PyCursesWindow_notimeout}, {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh}, + /* Backward compatibility alias -- remove in Python 2.1 */ + {"nooutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh}, {"putwin", (PyCFunction)PyCursesWindow_PutWin}, {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine}, From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.18,1.19 Message-ID: <200008210227.TAA02054@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/nondist/peps Modified Files: pep-0200.txt Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** pep-0200.txt 2000/08/20 05:59:27 1.18 --- pep-0200.txt 2000/08/21 02:27:22 1.19 *************** *** 101,116 **** ] - test_winreg2 Win32 X X 26-Jul-2000 - [19-Aug-2000 tim - This test will never work on Win98, because it's looking for - a part of registry that doesn't exist under W98. - The module (winreg.py) and this test case will be removed - before 2.0 for other reasons, though. - ] - [still fails 15-Aug-2000 for me, on Win98 - tim - test test_winreg2 failed -- Writing: 'Test Failed: testHives', - expected: 'HKEY_PERFORMANCE_DATA\012' - ] - Previously failing test cases --- 101,104 ---- *************** *** 167,170 **** --- 155,171 ---- ] + test_winreg2 Win32 X X 26-Jul-2000 + [20-Aug-2000 tim - the test has been removed from the project] + [19-Aug-2000 tim + This test will never work on Win98, because it's looking for + a part of registry that doesn't exist under W98. + The module (winreg.py) and this test case will be removed + before 2.0 for other reasons, though. + ] + [still fails 15-Aug-2000 for me, on Win98 - tim + test test_winreg2 failed -- Writing: 'Test Failed: testHives', + expected: 'HKEY_PERFORMANCE_DATA\012' + ] + Open items -- should be done/fixed *************** *** 183,186 **** --- 184,191 ---- ] + + Open items -- completed/fixed + + [20-Aug-2000 tim - done] Remove winreg.py and test_winreg2.py. Paul Prescod (the author) now wants to make a registry API more like the MS .NET API. Unclear From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_winreg2.py,1.2,NONE Message-ID: <200008210227.TAA02047@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/dist/src/Lib/test Removed Files: test_winreg2.py Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-win winreg.py,1.5,NONE Message-ID: <200008210227.TAA02046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-win In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/dist/src/Lib/plat-win Removed Files: winreg.py Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_winreg2,1.2,NONE Message-ID: <200008210227.TAA02048@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/dist/src/Lib/test/output Removed Files: test_winreg2 Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). From python-dev@python.org Mon Aug 21 13:25:21 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 21 Aug 2000 05:25:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar .cvsignore,1.1,1.2 Message-ID: <200008211225.FAA17078@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv16690/Grammar Modified Files: .cvsignore Log Message: Ignore Grammar/Makefile now that it's a made Makefile. Index: .cvsignore =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** .cvsignore 2000/07/27 20:31:12 1.1 --- .cvsignore 2000/08/21 12:25:17 1.2 *************** *** 1,2 **** --- 1,3 ---- graminit.h graminit.c + Makefile From python-dev@python.org Mon Aug 21 14:35:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 06:35:40 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.24,1.25 Message-ID: <200008211335.GAA27170@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv27120 Modified Files: pep-0000.txt Log Message: PEP 202, change tim's email address to tpeters -- we really need a key for these. PEP 214 and 221 are accepted, as per recent BDFL pronouncements. Added PEP 223, Changing the Meaning of \x Escapes, assigned to Tim Peters. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** pep-0000.txt 2000/08/18 15:21:45 1.24 --- pep-0000.txt 2000/08/21 13:35:37 1.25 *************** *** 27,31 **** I 200 pep-0200.txt Python 2.0 Release Schedule jhylton SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tim_one S 203 pep-0203.txt Augmented Assignments twouters S 204 pep-0204.txt Range Literals twouters --- 27,31 ---- I 200 pep-0200.txt Python 2.0 Release Schedule jhylton SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tpeters S 203 pep-0203.txt Augmented Assignments twouters S 204 pep-0204.txt Range Literals twouters *************** *** 39,43 **** S 212 pep-0212.txt Additional Builtin Generators bwarsaw S 213 pep-0213.txt Attribute Access Handlers prescod ! S 214 pep-0214.txt Extended Print Statement bwarsaw S 215 pep-0215.txt String Interpolation ping I 216 pep-0216.txt Docstring Format moshez --- 39,43 ---- S 212 pep-0212.txt Additional Builtin Generators bwarsaw S 213 pep-0213.txt Attribute Access Handlers prescod ! SA 214 pep-0214.txt Extended Print Statement bwarsaw S 215 pep-0215.txt String Interpolation ping I 216 pep-0216.txt Docstring Format moshez *************** *** 46,51 **** T 219 pep-0219.txt Stackless Python gmcm I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! S 221 pep-0221.txt Import As twouters S 222 pep-0222.txt Web Library Enhancements akuchlin Key --- 46,52 ---- T 219 pep-0219.txt Stackless Python gmcm I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! SA 221 pep-0221.txt Import As twouters S 222 pep-0222.txt Web Library Enhancements akuchlin + S 223 pep-0223.txt Change the Meaning of \x Escapes tpeters Key From python-dev@python.org Mon Aug 21 14:36:24 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 06:36:24 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.4,1.5 Message-ID: <200008211336.GAA27911@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv27846 Modified Files: pep-0214.txt Log Message: BDFL pronounces this PEP accepted for inclusion in Python 2.0 Index: pep-0214.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0214.txt 2000/08/17 20:59:35 1.4 --- pep-0214.txt 2000/08/21 13:36:22 1.5 *************** *** 3,8 **** Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.1 ! Status: Draft Created: 24-Jul-2000 Post-History: 16-Aug-2000 --- 3,8 ---- Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.0 ! Status: Accepted Created: 24-Jul-2000 Post-History: 16-Aug-2000 From python-dev@python.org Mon Aug 21 14:37:48 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 06:37:48 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0223.txt,NONE,1.1 Message-ID: <200008211337.GAA29200@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv29143 Added Files: pep-0223.txt Log Message: PEP 223, Changing the Meaning of \x Escapes, assigned to Tim Peters. This PEP is slated for Python 2.1 ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Mon Aug 21 16:34:36 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:34:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.37,1.38 Message-ID: <200008211534.IAA22469@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv22451 Modified Files: Grammar Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. This change modifies Python's grammar to include the extended print form. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** Grammar 2000/08/17 22:54:59 1.37 --- Grammar 2000/08/21 15:34:33 1.38 *************** *** 31,38 **** simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt expr_stmt: testlist ('=' testlist)* # For assignments, additional restrictions enforced by the interpreter ! print_stmt: 'print' (test ',')* [test] del_stmt: 'del' exprlist pass_stmt: 'pass' --- 31,38 ---- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt expr_stmt: testlist ('=' testlist)* # For assignments, additional restrictions enforced by the interpreter ! print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist pass_stmt: 'pass' From python-dev@python.org Mon Aug 21 16:36:30 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:36:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include opcode.h,2.27,2.28 Message-ID: <200008211536.IAA22824@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv22816 Modified Files: opcode.h Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. This adds the two new opcodes to support this feature: PRINT_ITEM_TO, PRINT_NEWLINE_TO. Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -r2.27 -r2.28 *** opcode.h 2000/08/17 22:54:59 2.27 --- opcode.h 2000/08/21 15:36:27 2.28 *************** *** 61,64 **** --- 61,66 ---- #define PRINT_ITEM 71 #define PRINT_NEWLINE 72 + #define PRINT_ITEM_TO 73 + #define PRINT_NEWLINE_TO 74 #define BREAK_LOOP 80 From python-dev@python.org Mon Aug 21 16:46:26 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:46:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.14,1.15 Message-ID: <200008211546.IAA24994@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv24962 Modified Files: test_grammar.py Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. Additional test cases for the extended print form. Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** test_grammar.py 2000/08/12 18:09:51 1.14 --- test_grammar.py 2000/08/21 15:46:24 1.15 *************** *** 261,264 **** --- 261,283 ---- print 0 or 1 + print 'extended print_stmt' # 'print' '>>' test ',' + import sys + print >> sys.stdout, 1, 2, 3 + print >> sys.stdout, 1, 2, 3, + print >> sys.stdout + print >> sys.stdout, 0 or 1, 0 or 1, + print >> sys.stdout, 0 or 1 + + # syntax errors + def check_syntax(statement): + try: + compile(statement, '', 'exec') + except SyntaxError: + pass + else: + print 'Missing SyntaxError: "%s"' % statement + check_syntax('print ,') + check_syntax('print >> x,') + print 'del_stmt' # 'del' exprlist del abc From python-dev@python.org Mon Aug 21 16:46:52 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:46:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.4,1.5 Message-ID: <200008211546.IAA25086@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv25061 Modified Files: test_grammar Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. Additional test cases for the extended print form. Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_grammar 2000/08/12 18:09:51 1.4 --- test_grammar 2000/08/21 15:46:50 1.5 *************** *** 20,23 **** --- 20,27 ---- 1 2 3 1 1 1 + extended print_stmt + 1 2 3 + 1 2 3 + 1 1 1 del_stmt pass_stmt From python-dev@python.org Mon Aug 21 16:44:04 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:44:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.192,2.193 graminit.c,2.25,2.26 Message-ID: <200008211544.IAA24500@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv23621 Modified Files: ceval.c graminit.c Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. eval_code2(): Implement new bytecodes PRINT_ITEM_TO and PRINT_NEWLINE_TO, as per accepted SF patch #100970. Also update graminit.c based on related Grammar/Grammar changes. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.192 retrieving revision 2.193 diff -C2 -r2.192 -r2.193 *** ceval.c 2000/08/20 14:01:53 2.192 --- ceval.c 2000/08/21 15:44:01 2.193 *************** *** 327,330 **** --- 327,331 ---- register PyObject *u; register PyObject *t; + register PyObject *stream = NULL; /* for PRINT opcodes */ register PyFrameObject *f; /* Current frame */ register PyObject **fastlocals; *************** *** 636,640 **** } #endif - /* Main switch on opcode */ --- 637,640 ---- *************** *** 976,980 **** if (err == 0) continue; break; ! case PRINT_EXPR: v = POP(); --- 976,980 ---- if (err == 0) continue; break; ! case PRINT_EXPR: v = POP(); *************** *** 1009,1021 **** break; case PRINT_ITEM: v = POP(); ! w = PySys_GetObject("stdout"); ! if (w == NULL) { ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! err = -1; } ! else if (PyFile_SoftSpace(w, 1)) err = PyFile_WriteString(" ", w); if (err == 0) --- 1009,1027 ---- break; + case PRINT_ITEM_TO: + w = stream = POP(); + /* fall through to PRINT_ITEM */ + case PRINT_ITEM: v = POP(); ! if (stream == NULL) { ! w = PySys_GetObject("stdout"); ! if (w == NULL) { ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! err = -1; ! } } ! if (w != NULL && PyFile_SoftSpace(w, 1)) err = PyFile_WriteString(" ", w); if (err == 0) *************** *** 1031,1047 **** } Py_DECREF(v); ! if (err == 0) continue; break; case PRINT_NEWLINE: ! x = PySys_GetObject("stdout"); ! if (x == NULL) ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! else { ! err = PyFile_WriteString("\n", x); if (err == 0) ! PyFile_SoftSpace(x, 0); } break; --- 1037,1064 ---- } Py_DECREF(v); ! Py_XDECREF(stream); ! stream = NULL; ! if (err == 0) ! continue; break; + case PRINT_NEWLINE_TO: + w = stream = POP(); + /* fall through to PRINT_NEWLINE */ + case PRINT_NEWLINE: ! if (stream == NULL) { ! w = PySys_GetObject("stdout"); ! if (w == NULL) ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! } ! if (w != NULL) { ! err = PyFile_WriteString("\n", w); if (err == 0) ! PyFile_SoftSpace(w, 0); } + Py_XDECREF(stream); + stream = NULL; break; Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** graminit.c 2000/08/17 22:55:00 2.25 --- graminit.c 2000/08/21 15:44:01 2.26 *************** *** 238,259 **** {37, 1}, }; ! static arc arcs_12_1[2] = { {21, 2}, {0, 1}, }; static arc arcs_12_2[2] = { ! {22, 1}, {0, 2}, }; [...1029 lines suppressed...] {318, "list_if", 0, 4, states_62, ! "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"}, }; static label labels[130] = { *************** *** 1512,1515 **** --- 1541,1545 ---- {282, 0}, {1, "print"}, + {35, 0}, {1, "del"}, {310, 0}, *************** *** 1574,1578 **** {299, 0}, {34, 0}, - {35, 0}, {300, 0}, {14, 0}, --- 1604,1607 ---- From python-dev@python.org Mon Aug 21 16:45:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:45:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.29,1.30 Message-ID: <200008211545.IAA24695@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv24669 Modified Files: ref6.tex Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. Document the extended print form. Fred, please double check the markup! Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** ref6.tex 2000/08/19 20:55:01 1.29 --- ref6.tex 2000/08/21 15:45:16 1.30 *************** *** 331,334 **** --- 331,346 ---- \exindex{RuntimeError} + \keyword{print} also has an extended form, defined as + + \begin{verbatim} + print_stmt: '>>' expression [ (',' expression)+ [','] ] ) + \end{verbatim} + + In this form, the first expression after the \keyword{>>} must + evaluate to a ``file-like'' object, specifically an object that has a + \method{write()} method as described above. With the extended form, + the subsequent expressions are printed to this file-like object + instead of \code{sys.stdout}. + \section{The \keyword{return} statement \label{return}} \stindex{return} From python-dev@python.org Mon Aug 21 17:35:08 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 09:35:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python import.c,2.146,2.147 Message-ID: <200008211635.JAA09187@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9126 Modified Files: import.c Log Message: Thomas reminds me to bump the MAGIC number for the extended print opcode additions. Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.146 retrieving revision 2.147 diff -C2 -r2.146 -r2.147 *** import.c 2000/08/17 22:55:00 2.146 --- import.c 2000/08/21 16:35:06 2.147 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50815 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50821 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Mon Aug 21 17:55:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 09:55:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test README,1.3,1.4 Message-ID: <200008211655.JAA12430@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12422 Modified Files: README Log Message: Add TestSkipped as another interesting item defined by test_support. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/README,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** README 2000/08/04 13:34:43 1.3 --- README 2000/08/21 16:55:57 1.4 *************** *** 146,149 **** --- 146,153 ---- failure. + * TestSkipped - raise this if the test could not be run because the + platform doesn't offer all the required facilities (like large + file support), even if all the required modules are available. + * findfile(file) - you can call this function to locate a file somewhere along sys.path or in the Lib/test tree - see test_linuxaudiodev.py for From python-dev@python.org Mon Aug 21 18:07:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 10:07:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.130,2.131 Message-ID: <200008211707.KAA15812@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv15747 Modified Files: compile.c Log Message: com_print_stmt(): Guido rightly points out that the stream expression in extended prints should only be evaluated once. This patch plays stack games (documented!) to fix this. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.130 retrieving revision 2.131 diff -C2 -r2.130 -r2.131 *** compile.c 2000/08/21 15:38:56 2.130 --- compile.c 2000/08/21 17:07:20 2.131 *************** *** 2056,2059 **** --- 2056,2062 ---- if (NCH(n) >= 2 && TYPE(CHILD(n, 1)) == RIGHTSHIFT) { stream = CHILD(n, 2); + com_node(c, stream); + /* stack: [...] => [... stream] */ + com_push(c, 1); if (NCH(n) > 3 && TYPE(CHILD(n, 3)) == COMMA) i = 4; *************** *** 2063,2075 **** for (; i < NCH(n); i += 2) { if (stream != NULL) { ! /* stack: [...] => [... obj stream] */ com_node(c, CHILD(n, i)); ! com_node(c, stream); com_addbyte(c, PRINT_ITEM_TO); com_pop(c, 2); } else { - /* stack: [...] => [... obj] */ com_node(c, CHILD(n, i)); com_addbyte(c, PRINT_ITEM); com_pop(c, 1); --- 2066,2083 ---- for (; i < NCH(n); i += 2) { if (stream != NULL) { ! com_addbyte(c, DUP_TOP); ! /* stack: [stream] => [stream stream] */ ! com_push(c, 1); com_node(c, CHILD(n, i)); ! /* stack: [stream stream] => [stream stream obj] */ ! com_addbyte(c, ROT_TWO); ! /* stack: [stream stream obj] => [stream obj stream] */ com_addbyte(c, PRINT_ITEM_TO); + /* stack: [stream obj stream] => [stream] */ com_pop(c, 2); } else { com_node(c, CHILD(n, i)); + /* stack: [...] => [... obj] */ com_addbyte(c, PRINT_ITEM); com_pop(c, 1); *************** *** 2077,2084 **** } /* XXX Alternatively, LOAD_CONST '\n' and then PRINT_ITEM */ ! if (TYPE(CHILD(n, NCH(n)-1)) != COMMA) { if (stream != NULL) { ! com_node(c, stream); com_addbyte(c, PRINT_NEWLINE_TO); com_pop(c, 1); } --- 2085,2101 ---- } /* XXX Alternatively, LOAD_CONST '\n' and then PRINT_ITEM */ ! if (TYPE(CHILD(n, NCH(n)-1)) == COMMA) { ! if (stream != NULL) { ! /* must pop the extra stream object off the stack */ ! com_addbyte(c, POP_TOP); ! /* stack: [... stream] => [...] */ ! com_pop(c, 1); ! } ! } ! else { if (stream != NULL) { ! /* this consumes the last stream object on stack */ com_addbyte(c, PRINT_NEWLINE_TO); + /* stack: [... stream] => [...] */ com_pop(c, 1); } From python-dev@python.org Mon Aug 21 18:18:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 10:18:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.23,1.24 Message-ID: <200008211718.KAA22528@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22519 Modified Files: dis.py Log Message: Add the new PRINT_ITEM_TO and PRINT_NEWLINE_TO opcodes. Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** dis.py 2000/08/17 22:54:59 1.23 --- dis.py 2000/08/21 17:18:40 1.24 *************** *** 191,194 **** --- 191,196 ---- def_op('PRINT_ITEM', 71) def_op('PRINT_NEWLINE', 72) + def_op('PRINT_ITEM_TO', 73) + def_op('PRINT_NEWLINE_TO', 74) def_op('BREAK_LOOP', 80) From python-dev@python.org Mon Aug 21 18:19:03 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 10:19:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.23,1.24 Message-ID: <200008211719.KAA22561@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22547 Modified Files: libdis.tex Log Message: Describe the new PRINT_ITEM_TO and PRINT_NEWLINE_TO opcodes. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** libdis.tex 2000/08/18 02:15:55 1.23 --- libdis.tex 2000/08/21 17:19:00 1.24 *************** *** 278,289 **** \begin{opcodedesc}{PRINT_ITEM}{} ! Prints TOS. There is one such instruction for ! each item in the \keyword{print} statement. \end{opcodedesc} \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the last operation of a \keyword{print} statement, unless the statement ends with a comma. \end{opcodedesc} --- 278,299 ---- \begin{opcodedesc}{PRINT_ITEM}{} ! Prints TOS to the file-like object bound to \code{sys.stdout}. There ! is one such instruction for each item in the \keyword{print} statement. \end{opcodedesc} + \begin{opcodedesc}{PRINT_ITEM_TO}{} + Like \code{PRINT_ITEM}, but prints the item second from TOS to the + file-like object at TOS. This is used by the extended print statement. + \end{opcodedesc} + \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the last operation of a \keyword{print} statement, unless the statement ends with a comma. + \end{opcodedesc} + + \begin{opcodedesc}{PRINT_NEWLINE_TO}{} + Like \code{PRINT_NEWLINE}, but prints the new line on the file-like + object on the TOS. This is used by the extended print statement. \end{opcodedesc} From python-dev@python.org Mon Aug 21 22:42:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 14:42:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.98,1.99 Message-ID: <200008212142.OAA15495@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv15482 Modified Files: urllib.py Log Message: Patch from Paul Schreiber : Patch description ----------------- This addresses four issues: (1) usernames and passwords in urls with special characters are now decoded properly. i.e. http://foo%2C:bar@www.whatever.com/ (2) Basic Auth support has been added to HTTPS, like it was in HTTP. (3) Version 1.92 sent the POSTed data, but did not deal with errors (HTTP responses other than 200) properly. HTTPS now behaves the same way HTTP does. (4) made URL-checking beahve the same way with HTTPS as it does with HTTP (changed == to !=). Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -r1.98 -r1.99 *** urllib.py 2000/07/26 07:04:38 1.98 --- urllib.py 2000/08/21 21:42:42 1.99 *************** *** 303,315 **** """Use HTTPS protocol.""" import httplib if type(url) is type(""): host, selector = splithost(url) ! user_passwd, host = splituser(host) else: host, selector = url urltype, rest = splittype(selector) ! if string.lower(urltype) == 'https': realhost, rest = splithost(rest) ! user_passwd, realhost = splituser(realhost) if user_passwd: selector = "%s://%s%s" % (urltype, realhost, rest) --- 303,324 ---- """Use HTTPS protocol.""" import httplib + user_passwd = None if type(url) is type(""): host, selector = splithost(url) ! if host: ! user_passwd, host = splituser(host) ! host = unquote(host) ! realhost = host else: host, selector = url urltype, rest = splittype(selector) ! url = rest ! user_passwd = None ! if string.lower(urltype) != 'https': ! realhost = None ! else: realhost, rest = splithost(rest) ! if realhost: ! user_passwd, realhost = splituser(realhost) if user_passwd: selector = "%s://%s%s" % (urltype, realhost, rest) *************** *** 332,335 **** --- 341,345 ---- h.putrequest('GET', selector) if auth: h.putheader('Authorization: Basic %s' % auth) + if realhost: h.putheader('Host', realhost) for args in self.addheaders: apply(h.putheader, args) h.endheaders() *************** *** 341,346 **** return addinfourl(fp, headers, url) else: ! return self.http_error(url, fp, errcode, errmsg, headers) ! def open_gopher(self, url): """Use Gopher protocol.""" --- 351,359 ---- return addinfourl(fp, headers, url) else: ! if data is None: ! return self.http_error(url, fp, errcode, errmsg, headers) ! else: ! return self.http_error(url, fp, errcode, errmsg, headers, data) ! def open_gopher(self, url): """Use Gopher protocol.""" *************** *** 873,877 **** match = _userprog.match(host) ! if match: return match.group(1, 2) return None, host --- 886,890 ---- match = _userprog.match(host) ! if match: return map(unquote, match.group(1, 2)) return None, host From python-dev@python.org Mon Aug 21 22:47:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 14:47:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib UserString.py,1.3,1.4 Message-ID: <200008212147.OAA16021@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv16002 Modified Files: UserString.py Log Message: Denis S. Otkidach : Let UserString.translate() method work with unicode data. This closes SourceForge patch #101246. Index: UserString.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserString.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** UserString.py 2000/07/10 17:07:17 1.3 --- UserString.py 2000/08/21 21:47:20 1.4 *************** *** 105,110 **** def swapcase(self): return self.__class__(self.data.swapcase()) def title(self): return self.__class__(self.data.title()) ! def translate(self, table, deletechars=""): ! return self.__class__(self.data.translate(table, deletechars)) def upper(self): return self.__class__(self.data.upper()) --- 105,110 ---- def swapcase(self): return self.__class__(self.data.swapcase()) def title(self): return self.__class__(self.data.title()) ! def translate(self, *args): ! return self.__class__(self.data.translate(*args)) def upper(self): return self.__class__(self.data.upper()) From python-dev@python.org Mon Aug 21 23:24:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 15:24:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.49,2.50 Message-ID: <200008212224.PAA22732@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv22665/Modules Modified Files: parsermodule.c Log Message: Update to reflect recent grammar changes (list comprehensions, extended print statement), and fix up the extended call syntax support. Minor stylistic cleanups. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.49 retrieving revision 2.50 diff -C2 -r2.49 -r2.50 *** parsermodule.c 2000/07/24 15:49:08 2.49 --- parsermodule.c 2000/08/21 22:24:43 2.50 *************** *** 59,63 **** static char* ! parser_version_string = "0.4"; --- 59,63 ---- static char* ! parser_version_string = "0.5"; *************** *** 889,896 **** VALIDATER(expr_stmt); VALIDATER(power); VALIDATER(print_stmt); VALIDATER(del_stmt); ! VALIDATER(return_stmt); VALIDATER(raise_stmt); VALIDATER(import_stmt); ! VALIDATER(global_stmt); ! VALIDATER(assert_stmt); VALIDATER(exec_stmt); VALIDATER(compound_stmt); VALIDATER(while); VALIDATER(for); --- 889,896 ---- VALIDATER(expr_stmt); VALIDATER(power); VALIDATER(print_stmt); VALIDATER(del_stmt); ! VALIDATER(return_stmt); VALIDATER(list_iter); VALIDATER(raise_stmt); VALIDATER(import_stmt); ! VALIDATER(global_stmt); VALIDATER(list_if); ! VALIDATER(assert_stmt); VALIDATER(list_for); VALIDATER(exec_stmt); VALIDATER(compound_stmt); VALIDATER(while); VALIDATER(for); *************** *** 907,910 **** --- 907,911 ---- VALIDATER(exprlist); VALIDATER(dictmaker); VALIDATER(arglist); VALIDATER(argument); + VALIDATER(listmaker); *************** *** 987,991 **** ! /* VALIDATE(class) * * classdef: --- 988,992 ---- ! /* validate_class() * * classdef: *************** *** 1079,1083 **** ! /* VALIDATE(suite) * * suite: --- 1080,1084 ---- ! /* validate_suite() * * suite: *************** *** 1121,1133 **** ! /* VALIDATE(varargslist) * * varargslist: - * (fpdef ['=' test] ',')* ('*' NAME [',' '*' '*' NAME] | '*' '*' NAME) - * | fpdef ['=' test] (',' fpdef ['=' test])* [','] - * * (fpdef ['=' test] ',')* ! * ('*' NAME [',' ('**'|'*' '*') NAME] ! * | ('**'|'*' '*') NAME) * | fpdef ['=' test] (',' fpdef ['=' test])* [','] * --- 1122,1170 ---- ! /* '*' NAME [',' '**' NAME] | '**' NAME ! */ ! static int ! validate_varargslist_trailer(node *tree, int start) ! { ! int nch = NCH(tree); ! int res = 0; ! int sym; ! ! if (nch <= start) { ! err_string("expected variable argument trailer for varargslist"); ! return 0; ! } ! sym = TYPE(CHILD(tree, start)); ! if (sym == STAR) { ! /* ! * ('*' NAME [',' '**' NAME] ! */ ! if (nch-start == 2) ! res = validate_name(CHILD(tree, start+1), NULL); ! else if (nch-start == 5) ! res = (validate_name(CHILD(tree, start+1), NULL) ! && validate_comma(CHILD(tree, start+2)) ! && validate_doublestar(CHILD(tree, start+3)) ! && validate_name(CHILD(tree, start+4), NULL)); ! } ! else if (sym == DOUBLESTAR) { ! /* ! * '**' NAME ! */ ! if (nch-start == 2) ! res = validate_name(CHILD(tree, start+1), NULL); ! } ! if (!res) ! err_string("illegal variable argument trailer for varargslist"); ! return res; ! } ! ! ! /* validate_varargslist() * * varargslist: * (fpdef ['=' test] ',')* ! * ('*' NAME [',' '**' NAME] ! * | '**' NAME) * | fpdef ['=' test] (',' fpdef ['=' test])* [','] * *************** *** 1138,1232 **** int nch = NCH(tree); int res = validate_ntype(tree, varargslist) && (nch != 0); ! if (res && (nch >= 2) && (TYPE(CHILD(tree, nch - 1)) == NAME)) { ! /* (fpdef ['=' test] ',')* ! * ('*' NAME [',' '*' '*' NAME] | '*' '*' NAME) ! */ ! int pos = 0; ! int remaining = nch; ! while (res && (TYPE(CHILD(tree, pos)) == fpdef)) { ! res = validate_fpdef(CHILD(tree, pos)); ! if (res) { ! if (TYPE(CHILD(tree, pos + 1)) == EQUAL) { ! res = validate_test(CHILD(tree, pos + 2)); ! pos += 2; } - res = res && validate_comma(CHILD(tree, pos + 1)); - pos += 2; } } ! if (res) { ! remaining = nch - pos; ! res = ((remaining == 2) || (remaining == 3) ! || (remaining == 5) || (remaining == 6)); ! if (!res) ! (void) validate_numnodes(tree, 2, "varargslist"); ! else if (TYPE(CHILD(tree, pos)) == DOUBLESTAR) ! return ((remaining == 2) ! && validate_ntype(CHILD(tree, pos+1), NAME)); ! else { ! res = validate_star(CHILD(tree, pos++)); ! --remaining; } ! } ! if (res) { ! if (remaining == 2) { ! res = (validate_star(CHILD(tree, pos)) ! && validate_ntype(CHILD(tree, pos + 1), NAME)); } ! else { ! res = validate_ntype(CHILD(tree, pos++), NAME); ! if (res && (remaining >= 4)) { ! res = validate_comma(CHILD(tree, pos)); ! if (--remaining == 3) ! res = (validate_star(CHILD(tree, pos + 1)) ! && validate_star(CHILD(tree, pos + 2))); ! else ! res = validate_ntype(CHILD(tree, pos + 1), DOUBLESTAR); } - } - } - if (!res && !PyErr_Occurred()) - err_string("Incorrect validation of variable arguments list."); - } - else if (res) { - /* fpdef ['=' test] (',' fpdef ['=' test])* [','] */ - if (TYPE(CHILD(tree, nch - 1)) == COMMA) - --nch; - - /* fpdef ['=' test] (',' fpdef ['=' test])* */ - res = (is_odd(nch) - && validate_fpdef(CHILD(tree, 0))); - - if (res && (nch > 1)) { - int pos = 1; - if (TYPE(CHILD(tree, 1)) == EQUAL) { - res = validate_test(CHILD(tree, 2)); - pos += 2; } ! /* ... (',' fpdef ['=' test])* */ ! for ( ; res && (pos < nch); pos += 2) { ! /* ',' fpdef */ ! res = (validate_comma(CHILD(tree, pos)) ! && validate_fpdef(CHILD(tree, pos + 1))); ! if (res ! && ((nch - pos) > 2) ! && (TYPE(CHILD(tree, pos + 2)) == EQUAL)) { ! /* ['=' test] */ ! res = validate_test(CHILD(tree, pos + 3)); ! pos += 2; ! } } } } ! else { ! err_string("Improperly formed argument list."); ! } ! return (res); } ! /* VALIDATE(fpdef) * * fpdef: --- 1175,1322 ---- int nch = NCH(tree); int res = validate_ntype(tree, varargslist) && (nch != 0); + int sym; ! if (nch < 1) { ! err_string("varargslist missing child nodes"); ! return 0; ! } ! sym = TYPE(CHILD(tree, 0)); ! if (sym == STAR || sym == DOUBLESTAR) ! res = validate_varargslist_trailer(tree, 0); ! else if (sym == fpdef) { ! int i = 0; ! sym = TYPE(CHILD(tree, nch-1)); ! if (sym == NAME) { ! /* ! * (fpdef ['=' test] ',')+ ! * ('*' NAME [',' '**' NAME] ! * | '**' NAME) ! */ ! /* skip over (fpdef ['=' test] ',')+ */ ! while (res && (i+2 <= nch)) { ! res = validate_fpdef(CHILD(tree, i)); ! ++i; ! if (res && TYPE(CHILD(tree, i)) == EQUAL && (i+2 <= nch)) { ! res = (validate_equal(CHILD(tree, i)) ! && validate_test(CHILD(tree, i+1))); ! if (res) ! i += 2; ! } ! if (res && i < nch) { ! res = validate_comma(CHILD(tree, i)); ! if (res) ! ++i; } } + /* handle '*' NAME [',' '**' NAME] | '**' NAME */ + if (res) + res = validate_varargslist_trailer(tree, i); } ! else { ! /* ! * fpdef ['=' test] (',' fpdef ['=' test])* [','] ! */ ! if (sym == COMMA) { ! res = validate_comma(CHILD(tree, nch-1)); ! if (!res) ! return 0; ! --nch; } ! /* ! * fpdef ['=' test] (',' fpdef ['=' test])* ! */ ! res = validate_fpdef(CHILD(tree, 0)); ! ++i; ! if (res && (i+2 < nch) && TYPE(CHILD(tree, 1)) == EQUAL) { ! res = (validate_equal(CHILD(tree, 1)) ! && validate_test(CHILD(tree, 2))); ! i += 2; } ! /* ! * ... (',' fpdef ['=' test])* ! * i ---^^^ ! */ ! while (res && (nch - i) >= 2) { ! res = (validate_comma(CHILD(tree, i)) ! && validate_fpdef(CHILD(tree, i+1))); ! i += 2; ! if (res && (nch - i) >= 2 ! && TYPE(CHILD(tree, i)) == COMMA) { ! res = (validate_comma(CHILD(tree, i)) ! && validate_test(CHILD(tree, i+1))); ! if (res) ! i += 2; } } ! if (res && nch - i != 0) { ! res = 0; ! err_string("illegal formation for varargslist"); } } } ! return res; ! } ! ! ! /* list_iter: list_for | list_if ! */ ! static int ! validate_list_iter(node *tree) ! { ! int res = (validate_ntype(tree, list_iter) ! && validate_numnodes(tree, 1, "list_iter")); ! if (res && TYPE(CHILD(tree, 0)) == list_for) ! res = validate_list_for(CHILD(tree, 0)); ! else ! res = validate_list_if(CHILD(tree, 0)); ! ! return res; ! } ! ! /* list_for: 'for' exprlist 'in' testlist [list_iter] ! */ ! static int ! validate_list_for(node *tree) ! { ! int nch = NCH(tree); ! int res; ! ! if (nch == 5) ! res = validate_list_iter(CHILD(tree, 4)); ! else ! res = validate_numnodes(tree, 4, "list_for"); ! ! if (res) ! res = (validate_name(CHILD(tree, 0), "for") ! && validate_exprlist(CHILD(tree, 1)) ! && validate_name(CHILD(tree, 2), "in") ! && validate_testlist(CHILD(tree, 3))); ! ! return res; } + /* list_if: 'if' test [list_iter] + */ + static int + validate_list_if(node *tree) + { + int nch = NCH(tree); + int res; + + if (nch == 3) + res = validate_list_iter(CHILD(tree, 2)); + else + res = validate_numnodes(tree, 2, "list_if"); + + if (res) + res = (validate_name(CHILD(tree, 0), "if") + && validate_test(CHILD(tree, 1))); + + return res; + } ! ! /* validate_fpdef() * * fpdef: *************** *** 1387,1393 **** /* print_stmt: - * - * 'print' (test ',')* [test] * */ static int --- 1477,1483 ---- /* print_stmt: * + * 'print' ( [ test (',' test)* [','] ] + * | '>>' test [ (',' test)+ [','] ] ) */ static int *************** *** 1397,1413 **** int nch = NCH(tree); int res = (validate_ntype(tree, print_stmt) ! && (nch != 0) && validate_name(CHILD(tree, 0), "print")); ! if (res && is_even(nch)) { ! res = validate_test(CHILD(tree, nch - 1)); ! --nch; ! } ! else if (!res && !PyErr_Occurred()) ! (void) validate_numnodes(tree, 1, "print_stmt"); ! for (j = 1; res && (j < nch); j += 2) ! res = (validate_test(CHILD(tree, j)) ! && validate_ntype(CHILD(tree, j + 1), COMMA)); return (res); } --- 1487,1524 ---- int nch = NCH(tree); int res = (validate_ntype(tree, print_stmt) ! && (nch > 0) && validate_name(CHILD(tree, 0), "print")); ! if (res && nch > 1) { ! int sym = TYPE(CHILD(tree, 1)); ! int i = 1; ! int allow_trailing_comma = 1; + if (sym == test) + res = validate_test(CHILD(tree, i++)); + else { + if (nch < 3) + res = validate_numnodes(tree, 3, "print_stmt"); + else { + res = (validate_ntype(CHILD(tree, i), RIGHTSHIFT) + && validate_test(CHILD(tree, i+1))); + i += 2; + allow_trailing_comma = 0; + } + } + if (res) { + /* ... (',' test)* [','] */ + while (res && i+2 <= nch) { + res = (validate_comma(CHILD(tree, i)) + && validate_test(CHILD(tree, i+1))); + allow_trailing_comma = 1; + i += 2; + } + if (res && !allow_trailing_comma) + res = validate_numnodes(tree, i, "print_stmt"); + else if (res && i < nch) + res = validate_comma(CHILD(tree, i)); + } + } return (res); } *************** *** 1467,1474 **** /* import_stmt: * ! * 'import' dotted_name (',' dotted_name)* ! * | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*) */ static int --- 1578,1629 ---- + static int + validate_import_as_name(node *tree) + { + int nch = NCH(tree); + int ok = validate_ntype(tree, import_as_name); + + if (ok) { + if (nch == 1) + ok = validate_name(CHILD(tree, 0), NULL); + else if (nch == 3) + ok = (validate_name(CHILD(tree, 0), NULL) + && validate_name(CHILD(tree, 1), "as") + && validate_name(CHILD(tree, 2), NULL)); + else + ok = validate_numnodes(tree, 3, "import_as_name"); + } + return ok; + } + + + /* dotted_as_name: dotted_name [NAME NAME] + */ + static int + validate_dotted_as_name(node *tree) + { + int nch = NCH(tree); + int res = validate_ntype(tree, dotted_as_name); + + if (res) { + if (nch == 1) + res = validate_ntype(CHILD(tree, 0), dotted_name); + else if (nch == 3) + res = (validate_ntype(CHILD(tree, 0), dotted_name) + && validate_name(CHILD(tree, 1), "as") + && validate_name(CHILD(tree, 2), NULL)); + else { + res = 0; + err_string("Illegal number of children for dotted_as_name."); + } + } + return res; + } + + /* import_stmt: * ! * 'import' dotted_as_name (',' dotted_as_name)* ! * | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*) */ static int *************** *** 1478,1507 **** int res = (validate_ntype(tree, import_stmt) && (nch >= 2) && is_even(nch) ! && validate_ntype(CHILD(tree, 0), NAME) ! && validate_ntype(CHILD(tree, 1), dotted_name)); if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) { int j; for (j = 2; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) && validate_ntype(CHILD(tree, j + 1), dotted_name)); } ! else if (res && validate_name(CHILD(tree, 0), "from")) { res = ((nch >= 4) && is_even(nch) ! && validate_name(CHILD(tree, 2), "import")); if (nch == 4) { ! res = ((TYPE(CHILD(tree, 3)) == NAME) ! || (TYPE(CHILD(tree, 3)) == STAR)); ! if (!res) ! err_string("Illegal import statement."); } else { ! /* 'from' NAME 'import' NAME (',' NAME)+ */ int j; ! res = validate_ntype(CHILD(tree, 3), NAME); for (j = 4; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) ! && validate_ntype(CHILD(tree, j + 1), NAME)); } } --- 1633,1665 ---- int res = (validate_ntype(tree, import_stmt) && (nch >= 2) && is_even(nch) ! && validate_ntype(CHILD(tree, 0), NAME)); if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) { int j; + res = validate_dotted_as_name(CHILD(tree, 1)); for (j = 2; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) && validate_ntype(CHILD(tree, j + 1), dotted_name)); } ! else if (res && (res = validate_name(CHILD(tree, 0), "from"))) { res = ((nch >= 4) && is_even(nch) ! && validate_name(CHILD(tree, 2), "import") ! && validate_dotted_as_name(CHILD(tree, 1))); if (nch == 4) { ! if (TYPE(CHILD(tree, 3)) == import_as_name) ! res = validate_import_as_name(CHILD(tree, 3)); ! else ! res = validate_star(CHILD(tree, 3)); } else { ! /* 'from' dotted_name 'import' import_as_name ! * (',' import_as_name)+ ! */ int j; ! res = validate_import_as_name(CHILD(tree, 3)); for (j = 4; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) ! && validate_import_as_name(CHILD(tree, j + 1))); } } *************** *** 1984,1989 **** int pos; int nch = NCH(tree); ! int res = validate_ntype(tree, atom) && (nch >= 1); if (res) { switch (TYPE(CHILD(tree, 0))) { --- 2142,2149 ---- int pos; int nch = NCH(tree); ! int res = validate_ntype(tree, atom); + if (res && nch < 1) + res = validate_numnodes(tree, nch+1, "atom"); if (res) { switch (TYPE(CHILD(tree, 0))) { *************** *** 1996,2004 **** break; case LSQB: ! res = ((nch <= 3) ! && validate_ntype(CHILD(tree, nch - 1), RSQB)); ! ! if (res && (nch == 3)) ! res = validate_testlist(CHILD(tree, 1)); break; case LBRACE: --- 2156,2168 ---- break; case LSQB: ! if (nch == 2) ! res = validate_ntype(CHILD(tree, 1), RSQB); ! else if (nch == 3) ! res = (validate_listmaker(CHILD(tree, 1)) ! && validate_ntype(CHILD(tree, 2), RSQB)); ! else { ! res = 0; ! err_string("illegal list display atom"); ! } break; case LBRACE: *************** *** 2031,2034 **** --- 2195,2230 ---- + static int + validate_listmaker(node *tree) + { + int nch = NCH(tree); + int ok = nch; + + if (nch == 0) + err_string("missing child nodes of listmaker"); + else + ok = validate_test(CHILD(tree, 0)); + + /* + * list_iter | (',' test)* [','] + */ + if (nch == 2 && TYPE(CHILD(tree, 1)) == list_iter) + ok = validate_list_iter(CHILD(tree, 1)); + else { + /* (',' test)* [','] */ + int i = 1; + while (ok && nch - i >= 2) { + ok = (validate_comma(CHILD(tree, i)) + && validate_test(CHILD(tree, i+1))); + if (ok) + i += 2; + } + if (ok && nch-i) + ok = validate_comma(CHILD(tree, nch-1)); + } + return ok; + } + + /* funcdef: * 'def' NAME parameters ':' suite *************** *** 2069,2073 **** /* arglist: * ! * (argument ',')* (argument* [','] | '*' test [',' '**' test] | '**' test) */ static int --- 2265,2269 ---- /* arglist: * ! * (argument ',')* (argument [','] | '*' test [',' '**' test] | '**' test) */ static int *************** *** 2075,2080 **** { int nch = NCH(tree); ! int i, ok = 1; ! node *last; if (nch <= 0) --- 2271,2276 ---- { int nch = NCH(tree); ! int i = 0; ! int ok = 1; if (nch <= 0) *************** *** 2082,2147 **** return validate_numnodes(tree, nch + 1, "arglist"); ! last = CHILD(tree, nch - 1); ! if (TYPE(last) == test) { ! /* Extended call syntax introduced in Python 1.6 has been used; ! * validate and strip that off and continue; ! * adjust nch to perform the cut, and ensure resulting nch is even ! * (validation of the first part doesn't require that). */ ! if (nch < 2) { ! validate_numnodes(tree, nch + 1, "arglist"); ! return 0; ! } ! ok = validate_test(last); ! if (ok) { ! node *prev = CHILD(tree, nch - 2); ! /* next must be '*' or '**' */ ! if (validate_doublestar(prev)) { ! nch -= 2; ! if (nch >= 3) { ! /* may include: '*' test ',' */ ! last = CHILD(tree, nch - 1); ! prev = CHILD(tree, nch - 2); ! if (TYPE(prev) == test) { ! ok = validate_comma(last) ! && validate_test(prev) ! && validate_star(CHILD(tree, nch - 3)); ! if (ok) ! nch -= 3; ! } ! /* otherwise, nothing special */ ! } } else { ! /* must be only: '*' test */ ! PyErr_Clear(); ! ok = validate_star(prev); ! nch -= 2; } ! if (ok && is_odd(nch)) { ! /* Illegal number of nodes before extended call syntax; ! * validation of the "normal" arguments does not require ! * a trailing comma, but requiring an even number of ! * children will effect the same requirement. ! */ ! return validate_numnodes(tree, nch + 1, "arglist"); } } ! } ! /* what remains must be: (argument ",")* [argument [","]] */ ! i = 0; ! while (ok && nch - i >= 2) { ! ok = validate_argument(CHILD(tree, i)) ! && validate_comma(CHILD(tree, i + 1)); ! i += 2; ! } ! if (ok && i < nch) { ! ok = validate_comma(CHILD(tree, i)); ! ++i; ! } ! if (i != nch) { ! /* internal error! */ ! ok = 0; ! err_string("arglist: internal error; nch != i"); } return (ok); --- 2278,2332 ---- return validate_numnodes(tree, nch + 1, "arglist"); ! while (ok && nch-i >= 2) { ! /* skip leading (argument ',') */ ! ok = (validate_argument(CHILD(tree, i)) ! && validate_comma(CHILD(tree, i+1))); ! if (ok) ! i += 2; ! else ! PyErr_Clear(); ! } ! ok = 1; ! if (nch-i > 0) { ! /* ! * argument | '*' test [',' '**' test] | '**' test */ ! int sym = TYPE(CHILD(tree, i)); ! ! if (sym == argument) { ! ok = validate_argument(CHILD(tree, i)); ! if (ok && i+1 != nch) { ! err_string("illegal arglist specification" ! " (extra stuff on end)"); ! ok = 0; } + } + else if (sym == STAR) { + ok = validate_star(CHILD(tree, i)); + if (ok && (nch-i == 2)) + ok = validate_test(CHILD(tree, i+1)); + else if (ok && (nch-i == 5)) + ok = (validate_test(CHILD(tree, i+1)) + && validate_comma(CHILD(tree, i+2)) + && validate_doublestar(CHILD(tree, i+3)) + && validate_test(CHILD(tree, i+4))); else { ! err_string("illegal use of '*' in arglist"); ! ok = 0; } ! } ! else if (sym == DOUBLESTAR) { ! if (nch-i == 2) ! ok = (validate_doublestar(CHILD(tree, i)) ! && validate_test(CHILD(tree, i+1))); ! else { ! err_string("illegal use of '**' in arglist"); ! ok = 0; } } ! else { ! err_string("illegal arglist specification"); ! ok = 0; ! } } return (ok); From python-dev@python.org Mon Aug 21 23:30:55 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 15:30:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_parser.py,NONE,1.1 Message-ID: <200008212230.PAA29080@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv29025/Lib/test Added Files: test_parser.py Log Message: Add a minimal test suite for the parser module. --- NEW FILE --- import parser import pprint import sys from parser import expr, suite, sequence2ast from test_support import verbose # # First, we test that we can generate trees from valid source fragments, # and that these valid trees are indeed allowed by the tree-loading side # of the parser module. # def roundtrip(f, s): print s st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) print "Expressions:" roundtrip(expr, "foo(1)") roundtrip(expr, "[1, 2, 3]") roundtrip(expr, "[x**3 for x in range(20)]") roundtrip(expr, "[x**3 for x in range(20) if x % 3]") roundtrip(expr, "foo(*args)") roundtrip(expr, "foo(*args, **kw)") roundtrip(expr, "foo(**kw)") roundtrip(expr, "foo(key=value)") roundtrip(expr, "foo(key=value, *args)") roundtrip(expr, "foo(key=value, *args, **kw)") roundtrip(expr, "foo(key=value, **kw)") roundtrip(expr, "foo(a, b, c, *args)") roundtrip(expr, "foo(a, b, c, *args, **kw)") roundtrip(expr, "foo(a, b, c, **kw)") roundtrip(expr, "foo + bar") print print "Statements:" roundtrip(suite, "print") roundtrip(suite, "print 1") roundtrip(suite, "print 1,") roundtrip(suite, "print >>fp") roundtrip(suite, "print >>fp, 1") roundtrip(suite, "print >>fp, 1,") # # Second, we take *invalid* trees and make sure we get ParserError # rejections for them. # print print "Invalid parse trees:" def check_bad_tree(tree, label): print print label try: sequence2ast(tree) except parser.ParserError: print "caught expected exception for invalid tree" pass else: print "test failed: did not properly detect invalid tree:" pprint.pprint(tree) # not even remotely valid: check_bad_tree((1, 2, 3), "") # print >>fp, tree = \ (257, (264, (265, (266, (268, (1, 'print'), (35, '>>'), (290, (291, (292, (293, (295, (296, (297, (298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))), (12, ','))), (4, ''))), (0, '')) check_bad_tree(tree, "print >>fp,") # a,,c tree = \ (258, (311, (290, (291, (292, (293, (295, (296, (297, (298, (299, (300, (301, (302, (303, (1, 'a')))))))))))))), (12, ','), (12, ','), (290, (291, (292, (293, (295, (296, (297, (298, (299, (300, (301, (302, (303, (1, 'c'))))))))))))))), (4, ''), (0, '')) check_bad_tree(tree, "a,,c") From python-dev@python.org Mon Aug 21 23:30:55 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 15:30:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_parser,NONE,1.1 Message-ID: <200008212230.PAA29079@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv29025/Lib/test/output Added Files: test_parser Log Message: Add a minimal test suite for the parser module. --- NEW FILE --- test_parser Expressions: foo(1) [1, 2, 3] [x**3 for x in range(20)] [x**3 for x in range(20) if x % 3] foo(*args) foo(*args, **kw) foo(**kw) foo(key=value) foo(key=value, *args) foo(key=value, *args, **kw) foo(key=value, **kw) foo(a, b, c, *args) foo(a, b, c, *args, **kw) foo(a, b, c, **kw) foo + bar Statements: print print 1 print 1, print >>fp print >>fp, 1 print >>fp, 1, Invalid parse trees: caught expected exception for invalid tree print >>fp, caught expected exception for invalid tree a,,c caught expected exception for invalid tree From python-dev@python.org Mon Aug 21 23:59:31 2000 From: python-dev@python.org (Guido van Rossum) Date: Mon, 21 Aug 2000 15:59:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_getopt.py,1.1,1.2 Message-ID: <200008212259.PAA24222@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv23751 Modified Files: test_getopt.py Log Message: Don't reference a module named test.test_support. Always use plain test_support. Also fixed the expected output. Index: test_getopt.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_getopt.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_getopt.py 2000/08/20 04:18:40 1.1 --- test_getopt.py 2000/08/21 22:59:26 1.2 *************** *** 4,8 **** import getopt from getopt import GetoptError ! from test.test_support import verbose def expectException(teststr, expected, failure=AssertionError): --- 4,8 ---- import getopt from getopt import GetoptError ! from test_support import verbose def expectException(teststr, expected, failure=AssertionError): From python-dev@python.org Mon Aug 21 23:59:31 2000 From: python-dev@python.org (Guido van Rossum) Date: Mon, 21 Aug 2000 15:59:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_getopt,1.1,1.2 Message-ID: <200008212259.PAA24226@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv23751/output Modified Files: test_getopt Log Message: Don't reference a module named test.test_support. Always use plain test_support. Also fixed the expected output. Index: test_getopt =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_getopt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_getopt 2000/08/20 04:18:40 1.1 --- test_getopt 2000/08/21 22:59:29 1.2 *************** *** 1,7 **** test_getopt - Running tests on getopt.short_has_arg - Running tests on getopt.long_has_args - Running tests on getopt.do_shorts - Running tests on getopt.do_longs - Running tests on getopt.getopt - Module getopt: tests completed successfully. --- 1 ---- From python-dev@python.org Tue Aug 22 02:44:20 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 21 Aug 2000 18:44:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.50,2.51 Message-ID: <200008220144.SAA14367@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13523/python/dist/src/modules Modified Files: parsermodule.c Log Message: Nuked unused variable. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.50 retrieving revision 2.51 diff -C2 -r2.50 -r2.51 *** parsermodule.c 2000/08/21 22:24:43 2.50 --- parsermodule.c 2000/08/22 01:44:16 2.51 *************** *** 1484,1488 **** validate_print_stmt(node *tree) { - int j; int nch = NCH(tree); int res = (validate_ntype(tree, print_stmt) --- 1484,1487 ---- From python-dev@python.org Tue Aug 22 02:48:56 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 21 Aug 2000 18:48:56 -0700 Subject: [Python-checkins] CVS: distutils/distutils archive_util.py,1.7,1.8 Message-ID: <200008220148.SAA19536@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv19444 Modified Files: archive_util.py Log Message: Ensure destination directory exists before trying to create a tarball or ZIP file. Index: archive_util.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/archive_util.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** archive_util.py 2000/06/24 00:23:20 1.7 --- archive_util.py 2000/08/22 01:48:54 1.8 *************** *** 11,16 **** from distutils.errors import DistutilsExecError from distutils.spawn import spawn - def make_tarball (base_name, base_dir, compress="gzip", verbose=0, dry_run=0): --- 11,16 ---- from distutils.errors import DistutilsExecError from distutils.spawn import spawn + from distutils.dir_util import mkpath def make_tarball (base_name, base_dir, compress="gzip", verbose=0, dry_run=0): *************** *** 43,46 **** --- 43,47 ---- archive_name = base_name + ".tar" + mkpath(os.path.dirname(archive_name), verbose=verbose, dry_run=dry_run) cmd = ["tar", "-cf", archive_name, base_dir] spawn (cmd, verbose=verbose, dry_run=dry_run) *************** *** 69,72 **** --- 70,74 ---- zip_filename = base_name + ".zip" + mkpath(os.path.dirname(zip_filename), verbose=verbose, dry_run=dry_run) try: spawn (["zip", "-rq", zip_filename, base_dir], *************** *** 115,119 **** 'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"), 'tar': (make_tarball, [('compress', None)], "uncompressed tar file"), ! 'zip': (make_zipfile, [],"zip-file") } --- 117,121 ---- 'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"), 'tar': (make_tarball, [('compress', None)], "uncompressed tar file"), ! 'zip': (make_zipfile, [],"ZIP file") } From python-dev@python.org Tue Aug 22 02:49:44 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 21 Aug 2000 18:49:44 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command sdist.py,1.42,1.43 Message-ID: <200008220149.SAA20401@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv20279/command Modified Files: sdist.py Log Message: Don't bother to 'mkpath()' the 'dist_dir' -- that's now taken care of in archive_util.py. Index: sdist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/sdist.py,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** sdist.py 2000/08/05 01:31:54 1.42 --- sdist.py 2000/08/22 01:49:41 1.43 *************** *** 443,448 **** self.make_release_tree (base_dir, self.filelist.files) archive_files = [] # remember names of files we create - if self.dist_dir: - self.mkpath(self.dist_dir) for fmt in self.formats: file = self.make_archive (base_name, fmt, base_dir=base_dir) --- 443,446 ---- From python-dev@python.org Tue Aug 22 03:04:49 2000 From: python-dev@python.org (Guido van Rossum) Date: Mon, 21 Aug 2000 19:04:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib traceback.py,1.16,1.17 Message-ID: <200008220204.TAA28084@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv28019 Modified Files: traceback.py Log Message: Patch by Toby Dickenson: don't die when an error occurs during string conversion in an exception, but instead display where %s is the type name. Index: traceback.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/traceback.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** traceback.py 2000/07/16 12:04:30 1.16 --- traceback.py 2000/08/22 02:04:46 1.17 *************** *** 167,172 **** list.append('%s^\n' % s) value = msg ! list.append('%s: %s\n' % (str(stype), str(value))) return list --- 167,178 ---- list.append('%s^\n' % s) value = msg ! list.append('%s: %s\n' % (str(stype), _some_str(value))) return list + + def _some_str(value): + try: + return str(value) + except: + return '' % type(value).__name__ From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.38,1.39 Message-ID: <200008220243.TAA04367@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Grammar Modified Files: Grammar Log Message: require list comprehensions to start with a for clause Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** Grammar 2000/08/21 15:34:33 1.38 --- Grammar 2000/08/22 02:43:07 1.39 *************** *** 78,82 **** power: atom trailer* ('**' factor)* atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ ! listmaker: test ( list_iter | (',' test)* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME --- 78,82 ---- power: atom trailer* ('**' factor)* atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ ! listmaker: test ( list_for | (',' test)* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.34,1.35 Message-ID: <200008220243.TAA04360@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Doc/ref Modified Files: ref5.tex Log Message: require list comprehensions to start with a for clause Index: ref5.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** ref5.tex 2000/08/15 18:44:10 1.34 --- ref5.tex 2000/08/22 02:43:06 1.35 *************** *** 154,158 **** \begin{verbatim} list_display: "[" [listmaker] "]" ! listmaker: expression ( list_iter | ( "," expression)* [","] ) list_iter: list_for | list_if list_for: "for" expression_list "in" testlist [list_iter] --- 154,158 ---- \begin{verbatim} list_display: "[" [listmaker] "]" ! listmaker: expression ( list_for | ( "," expression)* [","] ) list_iter: list_for | list_if list_for: "for" expression_list "in" testlist [list_iter] *************** *** 165,169 **** evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by one or more "for" or "if" clauses. In this case, the elements of the new list are those that would be produced by considering each of the "for" or "if" clauses a block, nesting from --- 165,170 ---- evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by at least one "for" clause and zero or more ! "for" or "if" clauses. In this case, the elements of the new list are those that would be produced by considering each of the "for" or "if" clauses a block, nesting from From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.114,1.115 Message-ID: <200008220243.TAA04374@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tut In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Doc/tut Modified Files: tut.tex Log Message: require list comprehensions to start with a for clause Index: tut.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v retrieving revision 1.114 retrieving revision 1.115 diff -C2 -r1.114 -r1.115 *** tut.tex 2000/08/16 21:44:03 1.114 --- tut.tex 2000/08/22 02:43:06 1.115 *************** *** 1756,1763 **** \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without ! resorting to use of the \function{map()} or \function{filter()} ! functions. The resulting construct tends often to be clearer than use ! of those functions. \begin{verbatim} --- 1756,1768 ---- \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without resorting ! to use of \function{map()}, \function{filter()} and/or \keyword{lambda}. ! The resulting list definition tends often to be clearer than lists built ! using those constructs. Each list comprehension consists of an expression ! following by a \keyword{for} clause, then zero or more \keyword{for} or ! \keyword{if} clauses. The result will be a list resulting from evaluating ! the expression in the context of the \keyword{for} and \keyword{if} clauses ! which follow it. If the expression would evaluate to a tuple, it must be ! parenthesized. \begin{verbatim} *************** *** 1772,1775 **** --- 1777,1791 ---- >>> [3*x for x in vec if x < 2] [] + >>> [{x: x**2} for x in vec] + [{2: 4}, {4: 16}, {6: 36}] + >>> [[x,x**2] for x in vec] + [[2, 4], [4, 16], [6, 36]] + >>> [x, x**2 for x in vec] # error - parens required for tuples + File "", line 1 + [x, x**2 for x in vec] + ^ + SyntaxError: invalid syntax + >>> [(x, x**2) for x in vec] + [(2, 4), (4, 16), (6, 36)] >>> vec1 = [2, 4, 6] >>> vec2 = [4, 3, -9] From python-dev@python.org Tue Aug 22 03:43:10 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.131,2.132 graminit.c,2.26,2.27 Message-ID: <200008220243.TAA04389@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Python Modified Files: compile.c graminit.c Log Message: require list comprehensions to start with a for clause Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.131 retrieving revision 2.132 diff -C2 -r2.131 -r2.132 *** compile.c 2000/08/21 17:07:20 2.131 --- compile.c 2000/08/22 02:43:07 2.132 *************** *** 1044,1048 **** com_list_comprehension(struct compiling *c, node *n) { ! /* listmaker: test list_iter */ char tmpname[12]; sprintf(tmpname, "__%d__", ++c->c_tmpname); --- 1044,1048 ---- com_list_comprehension(struct compiling *c, node *n) { ! /* listmaker: test list_for */ char tmpname[12]; sprintf(tmpname, "__%d__", ++c->c_tmpname); *************** *** 1053,1057 **** com_addopnamestr(c, STORE_NAME, tmpname); com_pop(c, 1); ! com_list_iter(c, n, CHILD(n, 0), tmpname); com_addopnamestr(c, DELETE_NAME, tmpname); --c->c_tmpname; --- 1053,1057 ---- com_addopnamestr(c, STORE_NAME, tmpname); com_pop(c, 1); ! com_list_for(c, CHILD(n, 1), CHILD(n, 0), tmpname); com_addopnamestr(c, DELETE_NAME, tmpname); --c->c_tmpname; *************** *** 1061,1066 **** com_listmaker(struct compiling *c, node *n) { ! /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_iter) com_list_comprehension(c, n); else { --- 1061,1066 ---- com_listmaker(struct compiling *c, node *n) { ! /* listmaker: test ( list_for | (',' test)* [','] ) */ ! if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_for) com_list_comprehension(c, n); else { Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** graminit.c 2000/08/21 15:44:01 2.26 --- graminit.c 2000/08/22 02:43:07 2.27 *************** *** 1318,1322 **** }; static arc arcs_60_0[2] = { ! {128, 1}, {129, 1}, }; --- 1318,1322 ---- }; static arc arcs_60_0[2] = { ! {120, 1}, {129, 1}, }; *************** *** 1341,1345 **** }; static arc arcs_61_4[2] = { ! {120, 5}, {0, 4}, }; --- 1341,1345 ---- }; static arc arcs_61_4[2] = { ! {128, 5}, {0, 4}, }; *************** *** 1362,1366 **** }; static arc arcs_62_2[2] = { ! {120, 3}, {0, 2}, }; --- 1362,1366 ---- }; static arc arcs_62_2[2] = { ! {128, 3}, {0, 2}, }; *************** *** 1623,1627 **** {2, 0}, {3, 0}, ! {316, 0}, {1, "lambda"}, {314, 0}, --- 1623,1627 ---- {2, 0}, {3, 0}, ! {317, 0}, {1, "lambda"}, {314, 0}, *************** *** 1631,1635 **** {1, "class"}, {315, 0}, ! {317, 0}, {318, 0}, }; --- 1631,1635 ---- {1, "class"}, {315, 0}, ! {316, 0}, {318, 0}, }; From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.15,1.16 Message-ID: <200008220243.TAA04373@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Lib/test Modified Files: test_grammar.py Log Message: require list comprehensions to start with a for clause Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** test_grammar.py 2000/08/21 15:46:24 1.15 --- test_grammar.py 2000/08/22 02:43:07 1.16 *************** *** 579,582 **** --- 579,588 ---- print "good: got a SyntaxError as expected" + try: + eval("[x if y]") + print "FAIL: should have raised a SyntaxError!" + except SyntaxError: + print "good: got a SyntaxError as expected" + suppliers = [ (1, "Boeing"), From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.5,1.6 Message-ID: <200008220243.TAA04378@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Lib/test/output Modified Files: test_grammar Log Message: require list comprehensions to start with a for clause Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** test_grammar 2000/08/21 15:46:50 1.5 --- test_grammar 2000/08/22 02:43:07 1.6 *************** *** 56,58 **** --- 56,59 ---- [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')] good: got a SyntaxError as expected + good: got a SyntaxError as expected [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')] From python-dev@python.org Tue Aug 22 04:00:56 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 20:00:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.99,1.100 Message-ID: <200008220300.UAA06534@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv6280 Modified Files: urllib.py Log Message: * added doc strings to urlopen and unquote_plus * fixed type in doc string for quote Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.99 retrieving revision 1.100 diff -C2 -r1.99 -r1.100 *** urllib.py 2000/08/21 21:42:42 1.99 --- urllib.py 2000/08/22 03:00:52 1.100 *************** *** 54,57 **** --- 54,58 ---- _urlopener = None def urlopen(url, data=None): + """urlopen(url [, data]) -> open file-like object""" global _urlopener if not _urlopener: *************** *** 1004,1007 **** --- 1005,1009 ---- def unquote_plus(s): + """unquote('%7e/abc+def') -> '~/abc def'""" if '+' in s: # replace '+' with ' ' *************** *** 1011,1015 **** always_safe = string.letters + string.digits + '_,.-' def quote(s, safe = '/'): ! """quote('abc def') -> 'abc%20def').""" # XXX Can speed this up an order of magnitude safe = always_safe + safe --- 1013,1017 ---- always_safe = string.letters + string.digits + '_,.-' def quote(s, safe = '/'): ! """quote('abc def') -> 'abc%20def'.""" # XXX Can speed this up an order of magnitude safe = always_safe + safe From python-dev@python.org Tue Aug 22 05:42:22 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 21 Aug 2000 21:42:22 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.19,1.20 pep-0223.txt,1.1,1.2 Message-ID: <200008220442.VAA28531@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28465 Modified Files: pep-0200.txt pep-0223.txt Log Message: Assorted updates in 200. Repaired PEPTzar's conservatism in 223. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** pep-0200.txt 2000/08/21 02:27:22 1.19 --- pep-0200.txt 2000/08/22 04:42:19 1.20 *************** *** 178,182 **** [19-Aug-2000 tim Guido msg on Python-Dev: ! - restore the old behavior on all platforms - add to the docs that to get the common directory you use dirname() - add testcases that check that this works on all platforms --- 178,182 ---- [19-Aug-2000 tim Guido msg on Python-Dev: ! - restore the old behavior on all platforms - Skip volunteered for this - add to the docs that to get the common directory you use dirname() - add testcases that check that this works on all platforms *************** *** 184,188 **** --- 184,219 ---- ] + 2.0b1: Get all patches out of Open. + 2.0b1: Get all patches out of Accepted. + + 2.0b1: Decide on a license. + + 2.0b1 Windows: Look for registry info in HKCU before HKLM - Mark + Hammond. + + 2.0b1 Windows installer: If HKLM isn't writable, back off to HKCU (so + Python can be installed on NT & 2000 without admin privileges). + + 2.0b1 Windows installer: Install w9xpopen.exe only under Win95/98. + + 2.0b1 Windows ME: Don't know anything about it. Will the installer + even run? Does it need the w9xpopen hack? + + 2.0b1 Win98 Guido: popen is hanging on Guido, and even freezing the + whole machine. No clue yet. + + 2.0: Decide on a license. + + 2.0: Finish writing the PEPs for the features that went out + with 2.0b1(! sad, but realistic -- we'll get better with practice). + + 2.0: Major effort to whittle the bug database down to size. I've (tim) + seen this before: if you can keep all the open bugs fitting on one + screen, people will generally keep it that way. But let it slobber + over a screen for a month, & it just goes to hell (no "visible + progress" indeed!). + + Open items -- completed/fixed *************** *** 210,214 **** --- 241,251 ---- objects obvious when working in the interactive interpreter. + * Extended print statement - Barry Warsaw + PEP 214 + http://python.sourceforge.net/peps/pep-0214.html + SF Patch #100970 + http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 + Accepted and in progress *************** *** 254,262 **** getitem if there is no getslice. ! * Extended print statement - Barry Warsaw ! PEP 214 ! http://python.sourceforge.net/peps/pep-0214.html ! SF Patch #100970 ! http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 --- 291,297 ---- getitem if there is no getslice. ! * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? ! ! * Add \U1234678 escapes in u"" strings - Fredrik Lundh? *************** *** 265,270 **** * Tim O'Malley's cookie module -- but need different license - * test harness for C code - Trent Mick - * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. --- 300,303 ---- *************** *** 291,294 **** --- 324,329 ---- - http://www.python.org/pipermail/python-dev/1999-August/002252.html + + * test harness for C code - Trent Mick Index: pep-0223.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0223.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0223.txt 2000/08/21 13:37:45 1.1 --- pep-0223.txt 2000/08/22 04:42:19 1.2 *************** *** 3,10 **** Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Python-Version: 2.1 Status: Draft Created: 20-Aug-2000 ! Post-History: --- 3,10 ---- Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Python-Version: 2.0 Status: Draft Created: 20-Aug-2000 ! Post-History: From python-dev@python.org Tue Aug 22 06:14:52 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 22:14:52 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.25,1.26 Message-ID: <200008220514.WAA06546@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv6537 Modified Files: pep-0000.txt Log Message: List PEP owners by last name, and give a key to their email address as used in the PEP. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** pep-0000.txt 2000/08/21 13:35:37 1.25 --- pep-0000.txt 2000/08/22 05:14:50 1.26 *************** *** 17,53 **** Index ! num filename title owner ! --- ------------ ----- ----- ! I 0 pep-0000.txt Index of Python Enhancement Proposals bwarsaw ! I 1 pep-0001.txt PEP Guidelines bwarsaw, jhylton ! I 2 pep-0002.txt Procedure for Adding New Modules esr ! ! I 160 pep-0160.txt Python 1.6 Release Schedule fdrake ! ! I 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tpeters ! S 203 pep-0203.txt Augmented Assignments twouters ! S 204 pep-0204.txt Range Literals twouters ! S 205 pep-0205.txt Weak References fdrake ! I 206 pep-0206.txt 2.0 Batteries Included moshez ! S 207 pep-0207.txt Rich Comparisons davida ! S 208 pep-0208.txt Reworking the Coercion Model davida ! S 209 pep-0209.txt Adding Multidimensional Arrays davida ! S 210 pep-0210.txt Decoupling the Interpreter Loop davida ! T 211 pep-0211.txt Adding New Linear Algebra Operators gvwilson ! S 212 pep-0212.txt Additional Builtin Generators bwarsaw ! S 213 pep-0213.txt Attribute Access Handlers prescod ! SA 214 pep-0214.txt Extended Print Statement bwarsaw ! S 215 pep-0215.txt String Interpolation ping ! I 216 pep-0216.txt Docstring Format moshez ! S 217 pep-0217.txt Display Hook for Interactive Use moshez ! S 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson ! T 219 pep-0219.txt Stackless Python gmcm ! I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! SA 221 pep-0221.txt Import As twouters ! S 222 pep-0222.txt Web Library Enhancements akuchlin ! S 223 pep-0223.txt Change the Meaning of \x Escapes tpeters Key --- 17,54 ---- Index ! num filename title owner ! --- ------------ ----- ----- ! I 0 pep-0000.txt Index of Python Enhancement Proposals Warsaw ! I 1 pep-0001.txt PEP Guidelines Warsaw, Hylton ! I 2 pep-0002.txt Procedure for Adding New Modules Raymond + I 160 pep-0160.txt Python 1.6 Release Schedule Drake + + I 200 pep-0200.txt Python 2.0 Release Schedule Hylton + SA 201 pep-0201.txt Lockstep Iteration Warsaw + S 202 pep-0202.txt List Comprehensions Peters + S 203 pep-0203.txt Augmented Assignments Wouters + S 204 pep-0204.txt Range Literals Wouters + S 205 pep-0205.txt Weak References Drake + I 206 pep-0206.txt 2.0 Batteries Included Zadka + S 207 pep-0207.txt Rich Comparisons Ascher + S 208 pep-0208.txt Reworking the Coercion Model Ascher + S 209 pep-0209.txt Adding Multidimensional Arrays Ascher + S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher + T 211 pep-0211.txt Adding New Linear Algebra Operators Wilson + S 212 pep-0212.txt Additional Builtin Generators Warsaw + S 213 pep-0213.txt Attribute Access Handlers Prescod + SA 214 pep-0214.txt Extended Print Statement Warsaw + S 215 pep-0215.txt String Interpolation Yee + I 216 pep-0216.txt Docstring Format Zadka + S 217 pep-0217.txt Display Hook for Interactive Use Zadka + S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson + T 219 pep-0219.txt Stackless Python McMillan + I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan + SA 221 pep-0221.txt Import As Wouters + S 222 pep-0222.txt Web Library Enhancements Kuchling + S 223 pep-0223.txt Change the Meaning of \x Escapes Peters + + Key *************** *** 57,60 **** --- 58,80 ---- A - Accepted proposal R - Rejected proposal + + + Owners + + name email address + ---------------- ------------- + Ascher, David davida@activestate.com + Drake, Fred fdrake@beopen.com + Hylton, Jeremy jeremy@beopen.com + Kuchling, Andrew akuchlin@mems-exchange.org + McMillan, Gordon gmcm@hypernet.com + Peters, Tim tpeters@beopen.com + Prescod, Paul paul@prescod.net + Raymond, Eric esr@snark.thyrsus.com + Warsaw, Barry bwarsaw@beopen.com + Wilson, Greg gvwilson@nevex.com + Wouters, Thomas thomas@xs4all.net + Yee, Ka-Ping ping@lfw.org + Zadka, Moshe moshez@math.huji.ac.il From python-dev@python.org Tue Aug 22 06:15:53 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 22:15:53 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0222.txt,1.1,1.2 Message-ID: <200008220515.WAA06609@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv6601 Modified Files: pep-0222.txt Log Message: Added Andrew's name. Index: pep-0222.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0222.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0222.txt 2000/08/18 15:21:45 1.1 --- pep-0222.txt 2000/08/22 05:15:51 1.2 *************** *** 2,6 **** Title: Web Library Enhancements Version: $Revision$ ! Author: akuchlin@mems-exchange.org Status: Active Type: Standards Track --- 2,6 ---- Title: Web Library Enhancements Version: $Revision$ ! Author: akuchlin@mems-exchange.org (Andrew Kuchling) Status: Active Type: Standards Track From python-dev@python.org Tue Aug 22 12:20:25 2000 From: python-dev@python.org (Mark Hammond) Date: Tue, 22 Aug 2000 04:20:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC import_nt.c,1.13,1.14 Message-ID: <200008221120.EAA32592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv32480 Modified Files: import_nt.c Log Message: Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override. Index: import_nt.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/import_nt.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** import_nt.c 2000/07/03 23:51:17 1.13 --- import_nt.c 2000/08/22 11:20:21 1.14 *************** *** 35,39 **** struct filedescr *fdp = NULL; FILE *fp; ! HKEY keyBase = HKEY_LOCAL_MACHINE; int modNameSize; long regStat; --- 35,39 ---- struct filedescr *fdp = NULL; FILE *fp; ! HKEY keyBase = HKEY_CURRENT_USER; int modNameSize; long regStat; *************** *** 57,62 **** modNameSize = pathLen; regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize); ! if (regStat != ERROR_SUCCESS) ! return NULL; /* use the file extension to locate the type entry. */ for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { --- 57,71 ---- modNameSize = pathLen; regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize); ! if (regStat != ERROR_SUCCESS) { ! /* No user setting - lookup in machine settings */ ! keyBase = HKEY_LOCAL_MACHINE; ! /* be anal - failure may have reset size param */ ! modNameSize = pathLen; ! regStat = RegQueryValue(keyBase, moduleKey, ! pathBuf, &modNameSize); ! ! if (regStat != ERROR_SUCCESS) ! return NULL; ! } /* use the file extension to locate the type entry. */ for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { From python-dev@python.org Tue Aug 22 13:10:05 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 05:10:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python20.wse,1.6,1.7 Message-ID: <200008221210.FAA25857@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv25776 Modified Files: python20.wse Log Message: Thomas Heller noticed that the wrong registry entry was written for the DLL. Replace %_SYSDEST_%\Python20.dll with %_DLLDEST_%\Python20.dll. Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** python20.wse 2000/08/01 15:50:09 1.6 --- python20.wse 2000/08/22 12:10:02 1.7 *************** *** 998,1002 **** item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_SYSDEST_%\Python20.dll Root=2 end --- 998,1002 ---- item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_DLLDEST_%\Python20.dll Root=2 end From python-dev@python.org Tue Aug 22 13:38:55 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 05:38:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8.2.2,1.8.2.2.2.1 Message-ID: <200008221238.FAA30718@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv30659 Modified Files: Tag: cnri-16-start python16.wse Log Message: Thomas Heller noticed that the wrong registry entry was written for the DLL. Replace %_SYSDEST_%\Python16.dll with %_DLLDEST_%\Python16.dll. Index: python16.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.wse,v retrieving revision 1.8.2.2 retrieving revision 1.8.2.2.2.1 diff -C2 -r1.8.2.2 -r1.8.2.2.2.1 *** python16.wse 2000/08/06 19:30:07 1.8.2.2 --- python16.wse 2000/08/22 12:38:52 1.8.2.2.2.1 *************** *** 998,1002 **** item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_SYSDEST_%\Python16.dll Root=2 end --- 998,1002 ---- item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_DLLDEST_%\Python16.dll Root=2 end From python-dev@python.org Tue Aug 22 14:01:56 2000 From: python-dev@python.org (Skip Montanaro) Date: Tue, 22 Aug 2000 06:01:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib posixpath.py,1.34,1.35 ntpath.py,1.28,1.29 dospath.py,1.16,1.17 Message-ID: <200008221301.GAA21005@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20607 Modified Files: posixpath.py ntpath.py dospath.py Log Message: revert semantics of commonprefix to work character-by-character Index: posixpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/posixpath.py,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** posixpath.py 2000/07/19 17:09:51 1.34 --- posixpath.py 2000/08/22 13:01:53 1.35 *************** *** 119,128 **** "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! n = m[:] ! for i in range(len(n)): ! n[i] = n[i].split("/") ! ! prefix = n[0] ! for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: --- 119,124 ---- "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! prefix = m[0] ! for item in m: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: *************** *** 130,134 **** if i == 0: return '' break ! return "/".join(prefix) --- 126,130 ---- if i == 0: return '' break ! return prefix Index: ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/ntpath.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** ntpath.py 2000/08/14 06:20:32 1.28 --- ntpath.py 2000/08/22 13:01:53 1.29 *************** *** 9,13 **** import stat import string - import re --- 9,12 ---- *************** *** 160,169 **** "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! n = map(string.lower, m) ! for i in range(len(n)): ! n[i] = re.split(r"[/\\]", n[i]) ! ! prefix = n[0] ! for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: --- 159,164 ---- "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! prefix = m[0] ! for item in m: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: *************** *** 171,175 **** if i == 0: return '' break ! return "\\".join(prefix) --- 166,170 ---- if i == 0: return '' break ! return prefix Index: dospath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dospath.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** dospath.py 2000/07/17 03:06:26 1.16 --- dospath.py 2000/08/22 13:01:53 1.17 *************** *** 4,8 **** import stat import string - import re --- 4,7 ---- *************** *** 104,118 **** - # Return the longest prefix of all list elements. - def commonprefix(m): ! "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! n = map(string.lower, m) ! for i in range(len(n)): ! n[i] = re.split(r"[/\\]", n[i]) ! ! prefix = n[0] ! for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: --- 103,112 ---- def commonprefix(m): ! """Return the longest prefix of all list elements.""" ! if not m: return '' ! prefix = m[0] ! for item in m: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: *************** *** 120,124 **** if i == 0: return '' break ! return "\\".join(prefix) --- 114,118 ---- if i == 0: return '' break ! return prefix From python-dev@python.org Tue Aug 22 15:04:27 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 07:04:27 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python20.wse,1.7,1.8 Message-ID: <200008221404.HAA12963@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv12878 Modified Files: python20.wse Log Message: At Mark Hammond's request, removing registry key Software\Python\PythonCore\2.0\Dll\Python20.dll -- it's no longer needed according to him. Note: not yet tested! Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** python20.wse 2000/08/22 12:10:02 1.7 --- python20.wse 2000/08/22 14:04:24 1.8 *************** *** 997,1005 **** end item: Edit Registry - Key=Software\Python\PythonCore\%PY_VERSION%\Dll - New Value=%_DLLDEST_%\Python20.dll - Root=2 - end - item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Modules Root=2 --- 997,1000 ---- From python-dev@python.org Tue Aug 22 15:13:02 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 07:13:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8.2.2.2.1,1.8.2.2.2.2 Message-ID: <200008221413.HAA20046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv19968 Modified Files: Tag: cnri-16-start python16.wse Log Message: At Mark Hammond's request, removing registry key Software\Python\PythonCore\*\Dll\Python*.dll -- it's no longer needed according to him. Note: not yet tested! Index: python16.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.wse,v retrieving revision 1.8.2.2.2.1 retrieving revision 1.8.2.2.2.2 diff -C2 -r1.8.2.2.2.1 -r1.8.2.2.2.2 *** python16.wse 2000/08/22 12:38:52 1.8.2.2.2.1 --- python16.wse 2000/08/22 14:12:58 1.8.2.2.2.2 *************** *** 997,1005 **** end item: Edit Registry - Key=Software\Python\PythonCore\%PY_VERSION%\Dll - New Value=%_DLLDEST_%\Python16.dll - Root=2 - end - item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Modules Root=2 --- 997,1000 ---- From python-dev@python.org Tue Aug 22 22:51:24 2000 From: python-dev@python.org (Jack Jansen) Date: Tue, 22 Aug 2000 14:51:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.82,2.83 listobject.c,2.84,2.85 Message-ID: <200008222151.OAA08030@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv7972 Modified Files: fileobject.c listobject.c Log Message: Added include for limits.h Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.82 retrieving revision 2.83 diff -C2 -r2.82 -r2.83 *** fileobject.c 2000/08/11 19:02:59 2.82 --- fileobject.c 2000/08/22 21:51:22 2.83 *************** *** 14,17 **** --- 14,21 ---- #include "structmember.h" + #ifdef HAVE_LIMITS_H + #include + #endif + #ifndef DONT_HAVE_SYS_TYPES_H #include Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.84 retrieving revision 2.85 diff -C2 -r2.84 -r2.85 *** listobject.c 2000/08/13 22:47:45 2.84 --- listobject.c 2000/08/22 21:51:22 2.85 *************** *** 18,21 **** --- 18,24 ---- #include /* For size_t */ #endif + #ifdef HAVE_LIMITS_H + #include + #endif #define ROUNDUP(n, PyTryBlock) \ *************** *** 259,262 **** --- 262,266 ---- { int i; + for (i = 0; i < v->ob_size && i < w->ob_size; i++) { int cmp = PyObject_Compare(v->ob_item[i], w->ob_item[i]); From python-dev@python.org Tue Aug 22 22:52:54 2000 From: python-dev@python.org (Jack Jansen) Date: Tue, 22 Aug 2000 14:52:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.96,2.97 Message-ID: <200008222152.OAA08218@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv8039 Modified Files: object.c Log Message: Added PyOS_CheckStack call to PyObject_Compare Lowered the recursion limit on compares to 60 (one recursion depth can take a whopping 2K of stack space when running test_b1!) Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.96 retrieving revision 2.97 diff -C2 -r2.96 -r2.97 *** object.c 2000/08/18 05:01:19 2.96 --- object.c 2000/08/22 21:52:51 2.97 *************** *** 12,15 **** --- 12,18 ---- #include "Python.h" + #ifdef HAVE_LIMITS_H + #include + #endif #ifdef macintosh *************** *** 340,344 **** --- 343,351 ---- nesting limit, enable code to detect circular data structures. */ + #ifdef macintosh + #define NESTING_LIMIT 60 + #else #define NESTING_LIMIT 500 + #endif int _PyCompareState_nesting = 0; *************** *** 395,398 **** --- 402,411 ---- int result; + #if defined(USE_STACKCHECK) + if (PyOS_CheckStack() < 0) { + PyErr_SetString(PyExc_MemoryError, "Stack overflow"); + return -1; + } + #endif if (v == NULL || w == NULL) { PyErr_BadInternalCall(); From python-dev@python.org Wed Aug 23 04:38:56 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 20:38:56 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.20,1.21 Message-ID: <200008230338.UAA09605@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9566 Modified Files: pep-0200.txt Log Message: Recorded new test failures on Windows. If Jeremy doesn't object, I'll keep the Windows bugs part of this PEP up-to-date for him. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** pep-0200.txt 2000/08/22 04:42:19 1.20 --- pep-0200.txt 2000/08/23 03:38:53 1.21 *************** *** 91,94 **** --- 91,101 ---- test case platform R B date reported --------- -------- - - ------------- + test_parser Windows ? ? 22-Aug-2000 + [probably all platforms] + + test_posixpath Windows ? ? 22-Aug-2000 + [probably all platforms; think it's because Skip backed out + commonpathprefix changes but didn't change the tests] + test_fork1 Linux X 26-Jul-2000 just SMP? [no clue; there are probably two bugs here] From python-dev@python.org Wed Aug 23 04:58:48 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 20:58:48 -0700 Subject: [Python-checkins] CVS: python/nondist/sf-html sf-faq.html,1.12,1.13 Message-ID: <200008230358.UAA10978@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/sf-html In directory slayer.i.sourceforge.net:/tmp/cvs-serv10958 Modified Files: sf-faq.html Log Message: Update Patch Manager Guidlines, wrt de facto meanings of Open & Rejected. Index: sf-faq.html =================================================================== RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** sf-faq.html 2000/08/10 03:51:09 1.12 --- sf-faq.html 2000/08/23 03:58:46 1.13 *************** *** 64,68 ****

    A. Appendix

      !
    1. Patch Manager Guidelines [09.07.2000]
    2. Python Patch Submission Guidelines [29.06.2000]
    --- 64,68 ----

    A. Appendix

      !
    1. Patch Manager Guidelines [22.08.2000]
    2. Python Patch Submission Guidelines [29.06.2000]
    *************** *** 547,551 ****
    The initial status of all patches.
    ! The patch is under consideration, but has not been reviewed yet.
    The status will normally change to Accepted or Rejected next.
    The person submitting the patch should (if they can) assign it to the person --- 547,552 ----
    The initial status of all patches.
    ! The patch is under consideration, but has not been reviewed yet, or ! is under review but not yet Accepted or Rejected.
    The status will normally change to Accepted or Rejected next.
    The person submitting the patch should (if they can) assign it to the person *************** *** 557,561 **** Discussion of major patches is carried out on the Python-Dev mailing list. For simple patches, the SourceForge comment mechanism should be sufficient. ! [xxx an email gateway would be great, ditto Ping's Roundup]

    Accepted

    --- 558,572 ---- Discussion of major patches is carried out on the Python-Dev mailing list. For simple patches, the SourceForge comment mechanism should be sufficient. ! [xxx an email gateway would be great, ditto Ping's Roundup]
    ! For the reviewer: If you're certain the patch should be applied, ! change the status to Accepted and assign it back to the submitter (if ! possible) for checkin. If you're certain the patch should never be ! accepted, change the status to Rejected and assign it to None. If you ! have specific complaints that would cause you to change your mind, ! explain them clearly in a comment, leave the status Open, and reassign ! back to the submitter. If you're uncertain, leave the status Open, explain ! your uncertainies in a comment, and reassign the patch to someone ! you believe can address your remaining questions; or leave the status ! Open and bring it up on Python-Dev.

    Accepted

    *************** *** 574,579 **** The patch has been accepted and applied.
    The previous status was Accepted, or possibly Open if the submitter was ! Guido (or moral equivalent in some particular area of ! expertise).

    Rejected

    --- 585,589 ---- The patch has been accepted and applied.
    The previous status was Accepted, or possibly Open if the submitter was ! Guido (or moral equivalent in some particular area of expertise).

    Rejected

    *************** *** 581,591 ****
    The patch has been reviewed and rejected.
    ! When the objections are addressed, the status may change to Open again.
    ! The person changing the status to Rejected should assign the patch back to ! the submitter, or if it's clear the patch will never be accepted, assign it ! to None.
    ! Note that SourceForge allows the submitter to overwrite the patch with a new ! version.

    Out of date

    --- 591,597 ----
    The patch has been reviewed and rejected.
    ! There are generally no transitions out of this state: the patch is dead.
    ! The person changing the status to Rejected should assign it to None.
    !

    Out of date

    From python-dev@python.org Wed Aug 23 05:25:00 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 21:25:00 -0700 Subject: [Python-checkins] CVS: python/nondist/sf-html sf-faq.html,1.13,1.14 Message-ID: <200008230425.VAA21352@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/sf-html In directory slayer.i.sourceforge.net:/tmp/cvs-serv21320 Modified Files: sf-faq.html Log Message: Updated Patch Guidelines revision numbers. Index: sf-faq.html =================================================================== RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** sf-faq.html 2000/08/23 03:58:46 1.13 --- sf-faq.html 2000/08/23 04:24:58 1.14 *************** *** 519,524 ****

    Intended use of SourceForge patch status & "assigned to" fields

    ! Revision 2
    ! 09-Jul-2000

    In general, the status field should be close to self-explanatory, and the --- 519,524 ----

    Intended use of SourceForge patch status & "assigned to" fields

    ! Revision 3
    ! 22-Aug-2000

    In general, the status field should be close to self-explanatory, and the From python-dev@python.org Wed Aug 23 06:04:15 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:04:15 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.26,1.27 Message-ID: <200008230504.WAA31963@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv31955 Modified Files: pep-0000.txt Log Message: Get rid of the `Technical' PEP category. PEPs are either Standards Track or Informational. PEP 211 and 219 become Standards Track. PEP 212 is hijacked, and renamed "Loop Counter Iteration". It is assigned to Peter Schneider-Kamp. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** pep-0000.txt 2000/08/22 05:14:50 1.26 --- pep-0000.txt 2000/08/23 05:04:12 1.27 *************** *** 36,41 **** S 209 pep-0209.txt Adding Multidimensional Arrays Ascher S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! T 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! S 212 pep-0212.txt Additional Builtin Generators Warsaw S 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw --- 36,41 ---- S 209 pep-0209.txt Adding Multidimensional Arrays Ascher S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! S 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! S 212 pep-0212.txt Loop Counter Iteration Schneider-Kamp S 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw *************** *** 44,48 **** S 217 pep-0217.txt Display Hook for Interactive Use Zadka S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! T 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters --- 44,48 ---- S 217 pep-0217.txt Display Hook for Interactive Use Zadka S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! S 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters *************** *** 55,59 **** I - Informational PEP S - Standards Track PEP - T - Technical PEP A - Accepted proposal R - Rejected proposal --- 55,58 ---- *************** *** 62,80 **** Owners ! name email address ! ---------------- ------------- ! Ascher, David davida@activestate.com ! Drake, Fred fdrake@beopen.com ! Hylton, Jeremy jeremy@beopen.com ! Kuchling, Andrew akuchlin@mems-exchange.org ! McMillan, Gordon gmcm@hypernet.com ! Peters, Tim tpeters@beopen.com ! Prescod, Paul paul@prescod.net ! Raymond, Eric esr@snark.thyrsus.com ! Warsaw, Barry bwarsaw@beopen.com ! Wilson, Greg gvwilson@nevex.com ! Wouters, Thomas thomas@xs4all.net ! Yee, Ka-Ping ping@lfw.org ! Zadka, Moshe moshez@math.huji.ac.il --- 61,80 ---- Owners ! name email address ! ---------------- ------------- ! Ascher, David davida@activestate.com ! Drake, Fred fdrake@beopen.com ! Hylton, Jeremy jeremy@beopen.com ! Kuchling, Andrew akuchlin@mems-exchange.org ! McMillan, Gordon gmcm@hypernet.com ! Peters, Tim tpeters@beopen.com ! Prescod, Paul paul@prescod.net ! Raymond, Eric esr@snark.thyrsus.com ! Schneider-Kamp, Peter nownder@nowonder.de ! Warsaw, Barry bwarsaw@beopen.com ! Wilson, Greg gvwilson@nevex.com ! Wouters, Thomas thomas@xs4all.net ! Yee, Ka-Ping ping@lfw.org ! Zadka, Moshe moshez@math.huji.ac.il From python-dev@python.org Wed Aug 23 06:06:25 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:06:25 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0212.txt,1.2,1.3 Message-ID: <200008230506.WAA32064@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32056 Modified Files: pep-0212.txt Log Message: PEP 212 is hijacked, and renamed "Loop Counter Iteration". It is assigned to Peter Schneider-Kamp. Based on recent discussions with the BDFL and the Python 2.0 release manager, this PEP is deferred until Python 2.1. Some minor editorial and formating modifications were performed on the text supplied by Peter. Editor also added footnotes. Index: pep-0212.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0212.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0212.txt 2000/07/22 15:13:23 1.2 --- pep-0212.txt 2000/08/23 05:06:22 1.3 *************** *** 1,41 **** PEP: 212 ! Title: Additional Builtin Generators Version: $Revision$ ! Owner: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.0 ! Status: Incomplete - Introduction ! This PEP describes some proposed additional generator-creating ! builtin functions for Python 2.0. This PEP tracks the status and ! ownership of this feature, slated for introduction in Python 2.0. ! It contains a description of the feature and outlines changes ! necessary to support the feature. This PEP summarizes discussions ! held in mailing list forums, and provides URLs for further ! information, where appropriate. The CVS revision history of this ! file contains the definitive historical record. ! ! New functions ! irange() ! tuples() ! lists() ! dict() - - Reference Implementation ! Copyright This document has been placed in the public domain. --- 1,116 ---- PEP: 212 ! Title: Loop Counter Iteration Version: $Revision$ ! Author: nowonder@nowonder.de (Peter Schneider-Kamp) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 22-Aug-2000 Introduction ! This PEP describes the often proposed feature of exposing the loop ! counter in for-loops. This PEP tracks the status and ownership of ! this feature. It contains a description of the feature and ! outlines changes necessary to support the feature. This PEP ! summarizes discussions held in mailing list forums, and provides ! URLs for further information, where appropriate. The CVS revision ! history of this file contains the definitive historical record. ! Motivation ! Standard for-loops in Python iterate over the elements of a ! sequence[1]. Often it is desirable to loop over the indices or ! both the elements and the indices instead. + The common idioms used to accomplish this are unintuitive. This + PEP proposes two different ways of exposing the indices. + Loop counter iteration + The current idiom for looping over the indices makes use of the + built-in 'range' function: ! for i in range(len(sequence)): ! # work with index i ! ! Looping over both elements and indices can be achieved either by the ! old idiom or by using the new 'zip' built-in function[2]: ! ! for i in range(len(sequence)): ! e = sequence[i] ! # work with index i and element e ! ! or ! ! for i, e in zip(range(len(sequence)), sequence): ! # work with index i and element e ! ! ! The Proposed Solutions ! ! There are two solutions that have been discussed. One adds a ! non-reserved keyword, the other adds two built-in functions. ! ! A third solution would have been the addition of 'keys', 'items' ! and 'values' methods to sequences, which enable looping over ! indices only, both indices and elements, and elements only ! respectively. ! ! ! Non-reserved keyword 'indexing' ! ! This solution would extend the syntax of the for-loop by adding ! an optional ' indexing' clause which can also be used ! instead of the ' in' clause.. ! ! Looping over the indices of a sequence would thus become: ! ! for i indexing sequence: ! # work with index i ! ! Looping over both indices and elements would similarly be: ! ! for i indexing e in sequence: ! # work with index i and element e ! ! ! Built-in functions 'indices' and 'irange' ! ! This solution adds two built-in functions 'indices' and 'irange'. ! The semantics of these can be described as follows: ! ! def indices(sequence): ! return range(len(sequence)) ! ! def irange(sequence): ! return zip(range(len(sequence)), sequence) ! ! These functions could be implemented either eagerly or lazily and ! should be easy to extend in order to accept more than one sequence ! argument. ! ! The use of these functions would simplify the idioms for looping ! over the indices and over both elements and indices: ! ! for i in indices(sequence): ! # work with index i ! ! for i, e in irange(sequence): ! # work with index i and element e ! ! Copyright This document has been placed in the public domain. + + + References + + [1] http://www.python.org/doc/current/ref/for.html + [2] Lockstep Iteration, pep-0201.txt From python-dev@python.org Wed Aug 23 06:04:45 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:04:45 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.9,1.10 Message-ID: <200008230504.WAA31986@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv31978 Modified Files: pep-0001.txt Log Message: Get rid of the `Technical' PEP category. PEPs are either Standards Track or Informational. Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pep-0001.txt 2000/08/17 05:01:20 1.9 --- pep-0001.txt 2000/08/23 05:04:42 1.10 *************** *** 31,41 **** Kinds of PEPs ! There are three kinds of PEPs. A standards track PEP describes a ! new feature for Python. An informational PEP describes a Python ! design issue, or provides general guidelines or information to the ! Python community, but does not propose a new feature. A technical ! PEP describes a new implementation or other internal modification ! that doesn't directly expose new features to the Python ! programmer. --- 31,39 ---- Kinds of PEPs ! There are two kinds of PEPs. A standards track PEP describes a ! new feature or implementation for Python. An informational PEP ! describes a Python design issue, or provides general guidelines or ! information to the Python community, but does not propose a new ! feature. From python-dev@python.org Wed Aug 23 06:10:00 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:10:00 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.27,1.28 Message-ID: <200008230510.WAA32291@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32283 Modified Files: pep-0000.txt Log Message: Added the `D'eferred flag, and marked as deferred all standards track PEPs pushed back past 2.0: 205, 207-213, 215, 217-219, 222. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** pep-0000.txt 2000/08/23 05:04:12 1.27 --- pep-0000.txt 2000/08/23 05:09:57 1.28 *************** *** 30,51 **** S 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters ! S 205 pep-0205.txt Weak References Drake I 206 pep-0206.txt 2.0 Batteries Included Zadka ! S 207 pep-0207.txt Rich Comparisons Ascher ! S 208 pep-0208.txt Reworking the Coercion Model Ascher ! S 209 pep-0209.txt Adding Multidimensional Arrays Ascher ! S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! S 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! S 212 pep-0212.txt Loop Counter Iteration Schneider-Kamp ! S 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw ! S 215 pep-0215.txt String Interpolation Yee I 216 pep-0216.txt Docstring Format Zadka ! S 217 pep-0217.txt Display Hook for Interactive Use Zadka ! S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! S 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters ! S 222 pep-0222.txt Web Library Enhancements Kuchling S 223 pep-0223.txt Change the Meaning of \x Escapes Peters --- 30,51 ---- S 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters ! SD 205 pep-0205.txt Weak References Drake I 206 pep-0206.txt 2.0 Batteries Included Zadka ! SD 207 pep-0207.txt Rich Comparisons Ascher ! SD 208 pep-0208.txt Reworking the Coercion Model Ascher ! SD 209 pep-0209.txt Adding Multidimensional Arrays Ascher ! SD 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! SD 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! SD 212 pep-0212.txt Loop Counter Iteration Schneider-Kamp ! SD 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw ! SD 215 pep-0215.txt String Interpolation Yee I 216 pep-0216.txt Docstring Format Zadka ! SD 217 pep-0217.txt Display Hook for Interactive Use Zadka ! SD 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! SD 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters ! SD 222 pep-0222.txt Web Library Enhancements Kuchling S 223 pep-0223.txt Change the Meaning of \x Escapes Peters *************** *** 57,60 **** --- 57,61 ---- A - Accepted proposal R - Rejected proposal + D - Deferred proposal From python-dev@python.org Wed Aug 23 06:12:58 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:12:58 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0201.txt,1.14,1.15 Message-ID: <200008230512.WAA32523@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32514 Modified Files: pep-0201.txt Log Message: Added Type: header, and rearranged other headers a bit. Index: pep-0201.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0201.txt,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** pep-0201.txt 2000/08/03 15:41:47 1.14 --- pep-0201.txt 2000/08/23 05:12:55 1.15 *************** *** 3,8 **** Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) - Python-Version: 2.0 Status: Accepted Created: 13-Jul-2000 Post-History: 27-Jul-2000 --- 3,9 ---- Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) Status: Accepted + Type: Standards Track + Python-Version: 2.0 Created: 13-Jul-2000 Post-History: 27-Jul-2000 From python-dev@python.org Wed Aug 23 06:19:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:19:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0202.txt,1.4,1.5 Message-ID: <200008230519.WAA00454@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv446 Modified Files: pep-0202.txt Log Message: Minor editorial clean ups: - conform the headers - `standard' paragraph wrapping (i.e. how the Editor's editor wraps 'em :) - move the URL for the patch to the (new) References section - added reference to PEP 201 Tim, should this be marked Accepted now? Index: pep-0202.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0202.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0202.txt 2000/07/27 20:13:39 1.4 --- pep-0202.txt 2000/08/23 05:19:21 1.5 *************** *** 2,30 **** Title: List Comprehensions Version: $Revision$ ! Owner: tpeters@beopen.com (Tim Peters) Python-Version: 2.0 ! Status: Incomplete Introduction ! This PEP describes a proposed syntactical extension to Python, list ! comprehensions. - The Proposed Solution ! It is proposed to allow conditional construction of list literals using ! for and if clauses. They would nest in the same way for loops and if ! statements nest now. - Rationale List comprehensions provide a more concise way to create lists in ! situations where map() and filter() and/or nested loops would currently ! be used. --- 2,31 ---- Title: List Comprehensions Version: $Revision$ ! Author: tpeters@beopen.com (Tim Peters) ! Status: Draft ! Type: Standards Track Python-Version: 2.0 ! Created: 13-Jul-2000 ! Post-History: Introduction ! This PEP describes a proposed syntactical extension to Python, ! list comprehensions. The Proposed Solution ! It is proposed to allow conditional construction of list literals ! using for and if clauses. They would nest in the same way for ! loops and if statements nest now. Rationale List comprehensions provide a more concise way to create lists in ! situations where map() and filter() and/or nested loops would ! currently be used. *************** *** 59,68 **** Reference Implementation - - Please refer to - - https://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 ! for a patch that adds list comprehensions to Python. --- 60,65 ---- Reference Implementation ! SourceForge contains a patch that adds list comprehensions to Python[1]. *************** *** 75,82 **** - The form [x, y for ...] should be disallowed; one should be ! required to write [(x, y) for ...]. - The form [... for x... for y...] nests, with the last index ! varying fastest, just like nested for loops. --- 72,79 ---- - The form [x, y for ...] should be disallowed; one should be ! required to write [(x, y) for ...]. - The form [... for x... for y...] nests, with the last index ! varying fastest, just like nested for loops. *************** *** 85,91 **** Syntax ! Several people proposed connecting or separating syntax between the ! various clauses, for example, requiring a semicolon between them to ! set them apart: [i,f; for i in nums; for f in fruit; if f[0]=="P"; if i%2==1] --- 82,88 ---- Syntax ! Several people proposed connecting or separating syntax ! between the various clauses, for example, requiring a ! semicolon between them to set them apart: [i,f; for i in nums; for f in fruit; if f[0]=="P"; if i%2==1] *************** *** 114,129 **** map(None, nums, fruit) ! It's not clear that this is necessary. The newly proposed zip() ! builtin takes care of that case. Stability of the Implementation ! The current reference implementation is simply an adaptation of Greg ! Ewing's original demonstration of the concept. Other than tracking ! changes to the source code to keep it a valid patch, reindenting the ! code and switching to function prototypes, nothing has been done to ! it. This obviously raises some questions about how stable the code ! is. It has not had a lot of exercise, though the patch does include ! a few test cases. --- 111,133 ---- map(None, nums, fruit) ! It's not clear that this is necessary. The newly proposed ! zip() builtin[2] takes care of that case. Stability of the Implementation + + The current reference implementation is simply an adaptation + of Greg Ewing's original demonstration of the concept. Other + than tracking changes to the source code to keep it a valid + patch, reindenting the code and switching to function + prototypes, nothing has been done to it. This obviously + raises some questions about how stable the code is. It has + not had a lot of exercise, though the patch does include a few + test cases. + + + References ! [1] https://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 ! [2] Lockstep Iteration, pep-0201.txt From python-dev@python.org Wed Aug 23 06:22:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:22:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.7,1.8 Message-ID: <200008230522.WAA00674@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv661 Modified Files: pep-0203.txt Log Message: Rearranged a few headers. Thomas, should this PEP's status be changed to Accepted? Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** pep-0203.txt 2000/08/14 19:58:09 1.7 --- pep-0203.txt 2000/08/23 05:22:41 1.8 *************** *** 2,10 **** Title: Augmented Assignments Version: $Revision$ ! Owner: thomas@xs4all.net (Thomas Wouters) ! Python-Version: 2.0 Status: Draft Created: 13-Jul-2000 - Type: Standard Post-History: 14-Aug-2000 --- 2,10 ---- Title: Augmented Assignments Version: $Revision$ ! Author: thomas@xs4all.net (Thomas Wouters) Status: Draft + Type: Standards Track + Python-Version: 2.0 Created: 13-Jul-2000 Post-History: 14-Aug-2000 *************** *** 308,311 **** --- 308,312 ---- [3] PEP 211, Adding New Linear Algebra Operators, http://python.sourceforge.net/peps/pep-0211.html + From python-dev@python.org Wed Aug 23 06:28:48 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 22:28:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test README,1.4,1.5 autotest.py,1.10,1.11 Message-ID: <200008230528.WAA01240@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv1084/python/dist/src/lib/test Modified Files: README autotest.py Log Message: Rehabilitate autotest.py. In README: Write up (Guido's) rules for intra-test imports; warn against asserts; document test_support.use_large_resources. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/README,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** README 2000/08/21 16:55:57 1.4 --- README 2000/08/23 05:28:45 1.5 *************** *** 137,141 **** --- 137,151 ---- raising TestFailed. + * Use "assert" sparingly, if at all. It's usually better to just print + what you got, and rely on regrtest's got-vs-expected comparison to + catch deviations from what you expect. assert statements aren't + executed at all when regrtest is run in -O mode; and, because they + cause the test to stop immediately, can lead to a long & tedious + test-fix, test-fix, test-fix, ... cycle when things are badly broken + (and note that "badly broken" often includes running the test suite + for the first time on new platforms or under new implementations of + the language). + Miscellaneous *************** *** 158,164 **** --- 168,200 ---- lots of examples. + * use_large_resources - true iff tests requiring large time or space + should be run. + * fcmp(x,y) - you can call this function to compare two floating point numbers when you expect them to only be approximately equal withing a fuzz factor (test_support.FUZZ, which defaults to 1e-6). + + NOTE: Always import something from test_support like so: + + from test_support import verbose + + or like so: + + import test_support + ... use test_support.verbose in the code ... + + Never import anything from test_support like this: + + from test.test_support import verbose + + "test" is a package already, so can refer to modules it contains without + "test." qualification. If you do an explicit "test.xxx" qualification, that + can fool Python into believing test.xxx is a module distinct from the xxx + in the current package, and you can end up importing two distinct copies of + xxx. This is especially bad if xxx=test_support, as regrtest.py can (and + routinely does) overwrite its "verbose" and "use_large_resources" + attributes: if you get a second copy of test_support loaded, it may not + have the same values for those as regrtest intended. + Python and C statement coverage results are currently available at Index: autotest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/autotest.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** autotest.py 1997/03/07 21:05:41 1.10 --- autotest.py 2000/08/23 05:28:45 1.11 *************** *** 1,3 **** ! # Backward compatibility -- you should use regrtest instead of this module. import regrtest regrtest.main() --- 1,6 ---- ! # This should be equivalent to running regrtest.py from the cmdline. ! # It can be especially handy if you're in an interactive shell, e.g., ! # from test import autotest. ! import regrtest regrtest.main() From python-dev@python.org Wed Aug 23 06:42:00 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:42:00 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0204.txt,1.3,1.4 Message-ID: <200008230542.WAA02168@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2158 Modified Files: pep-0204.txt Log Message: Editorial review, including: - Rearrange and standardize headers - Removed ^L's - Spellchecked - Indentation and formatting - Added reference to PEP 202 Thomas, if the open issues have been decided, they can be `closed' in this PEP, and then it should probably be marked as Accepted. Index: pep-0204.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0204.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0204.txt 2000/07/26 04:11:22 1.3 --- pep-0204.txt 2000/08/23 05:41:57 1.4 *************** *** 2,17 **** Title: Range Literals Version: $Revision$ ! Owner: thomas@xs4all.net (Thomas Wouters) ! Python-Version: 2.0 Status: Draft - Introduction ! This PEP describes the `range literal' proposal for Python 2.0. This PEP tracks the status and ownership of this feature, slated for introduction in Python 2.0. It contains a description of the ! feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list forums, and provides URLs for further information, where appropriate. The CVS --- 2,19 ---- Title: Range Literals Version: $Revision$ ! Author: thomas@xs4all.net (Thomas Wouters) Status: Draft + Type: Standards Track + Python-Version: 2.0 + Created: 14-Jul-2000 + Post-History: Introduction ! This PEP describes the `range literal' proposal for Python 2.0. This PEP tracks the status and ownership of this feature, slated for introduction in Python 2.0. It contains a description of the ! feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list forums, and provides URLs for further information, where appropriate. The CVS *************** *** 20,24 **** - List ranges --- 22,25 ---- *************** *** 27,37 **** sequence directly: ! >>> l = ['a', 'b', 'c', 'd'] ! >>> for item in l: ! ... print item ! a ! b ! c ! d However, this solution is not always prudent. Firstly, problems --- 28,38 ---- sequence directly: ! >>> l = ['a', 'b', 'c', 'd'] ! >>> for item in l: ! ... print item ! a ! b ! c ! d However, this solution is not always prudent. Firstly, problems *************** *** 57,79 **** this: ! >>> for i in range(len(l)): ! ... print l[i] ! a ! b ! c ! d Or, to start at the second element of `l' and processing only every second element from then on: ! >>> for i in range(1, len(l), 2): ! ... print l[i] ! b ! d There are several disadvantages with this approach: ! - Clarity of purpose: Adding another functioncall, possibly with ! extra arithmatic to determine the desired length and step of the list, does not improve readability of the code. Also, it is possible to `shadow' the builtin `range' function by supplying a --- 58,80 ---- this: ! >>> for i in range(len(l)): ! ... print l[i] ! a ! b ! c ! d Or, to start at the second element of `l' and processing only every second element from then on: ! >>> for i in range(1, len(l), 2): ! ... print l[i] ! b ! d There are several disadvantages with this approach: ! - Clarity of purpose: Adding another function call, possibly with ! extra arithmetic to determine the desired length and step of the list, does not improve readability of the code. Also, it is possible to `shadow' the builtin `range' function by supplying a *************** *** 83,87 **** - Efficiency: because the `range' function can be overridden, the Python compiler cannot make assumptions about the for-loop, and ! has to maintain a seperate loop counter. - Consistency: There already is a syntax that is used to denote --- 84,88 ---- - Efficiency: because the `range' function can be overridden, the Python compiler cannot make assumptions about the for-loop, and ! has to maintain a separate loop counter. - Consistency: There already is a syntax that is used to denote *************** *** 92,96 **** - Slice Indices --- 93,96 ---- *************** *** 101,108 **** the original sequence. This is done using a `range notation': ! >>> l[2:4] ! ['c', 'd'] ! This range notation consists of zero, one or two indices seperated by a colon. The first index is the `start' index, the second the `end'. When either is left out, they default to respectively the --- 101,108 ---- the original sequence. This is done using a `range notation': ! >>> l[2:4] ! ['c', 'd'] ! This range notation consists of zero, one or two indices separated by a colon. The first index is the `start' index, the second the `end'. When either is left out, they default to respectively the *************** *** 113,126 **** by most builtin types, if it were, it would work as follows: ! >>> l[1:4:2] ! ['b', 'd'] The third `argument' to the slice syntax is exactly the same as ! the `step' argument to range(). The underlying mechanisms of ! standard and these extended slices are sufficiently different and ! inconsistent that many classes and extensions outside of mathematical packages do not implement support for the extended ! variant, and this should definately be resolved, but this is ! beyond the scope of this PEP. Extended slices do show, however, that there is already a --- 113,126 ---- by most builtin types, if it were, it would work as follows: ! >>> l[1:4:2] ! ['b', 'd'] The third `argument' to the slice syntax is exactly the same as ! the `step' argument to range(). The underlying mechanisms of the ! standard, and these extended slices, are sufficiently different ! and inconsistent that many classes and extensions outside of mathematical packages do not implement support for the extended ! variant. While this should be resolved, it is beyond the scope of ! this PEP. Extended slices do show, however, that there is already a *************** *** 133,137 **** - It is consistent with the other use of ranges in Python ! (slices.) - Because it is built-in syntax, instead of a builtin function, it --- 133,137 ---- - It is consistent with the other use of ranges in Python ! (e.g. slices). - Because it is built-in syntax, instead of a builtin function, it *************** *** 141,145 **** - The Proposed Solution --- 141,144 ---- *************** *** 148,157 **** range literals: ! >>> [1:10] ! [1, 2, 3, 4, 5, 6, 7, 8, 9] ! >>> [:5] ! [0, 1, 2, 3, 4] ! >>> [5:1:-1] ! [5, 4, 3, 2] There is one minor difference between range literals and the slice --- 147,156 ---- range literals: ! >>> [1:10] ! [1, 2, 3, 4, 5, 6, 7, 8, 9] ! >>> [:5] ! [0, 1, 2, 3, 4] ! >>> [5:1:-1] ! [5, 4, 3, 2] There is one minor difference between range literals and the slice *************** *** 162,166 **** - Reference Implementation --- 161,164 ---- *************** *** 178,268 **** calls. ! PyObject * PyList_FromRange(long start, long end, long step) ! builds a list from start, end and step, returning NULL if an error ! occurs. ! ! long PyList_GetLenOfRange(long start, long end, long step) is a ! helper function to determine the length of a range. It was ! previously a static function in bltinmodule.c, but is now ! necessary in both listobject.c and bltinmodule.c (for xrange). It ! is made non-static solely to avoid code duplication. ! Open issues ! One possible solution to the discrepancy of requiring the `end' ! argument in range literals is to allow the range syntax to create ! a `generator', rather than a list, such as the `xrange' builtin ! function does. However, a generator would not be a list, and it ! would be impossible, for instance, to assign to items in the ! generator, or append to it. ! ! The range syntax could conceivably be extended to include tuples, ! immutable lists, which could then be safely implemented as ! generators. Especially for large number arrays, this may be a ! desirable solution: generators require very little in the way of ! storage and initialization, and there is only a small performance ! impact in calculating and creating the appropriate number on ! request. (TBD: is there any at all ? Cursory testing suggests ! equal performance even in the case of ranges of length 1.) ! ! However, even if idea was adopted, would it be wise to `special ! case' the second argument, making it optional in one instance of ! the syntax, and non-optional in other cases ? ! Should it be possible to mix range syntax with normal list ! literals, creating a single list, like so: - >>> [5, 6, 1:6, 7, 9] to create - [5, 6, 1, 2, 3, 4, 5, 7, 9] ! How should range literals interact with another proposed new ! feature, `list comprehensions', PEP-202 ? In specific, should it ! be possible to create lists in list comprehensions, like so: ! >>> [x:y for x in (1,2) y in (3, 4)] ! Should this example return a single list with multiple ranges: ! [1, 2, 1, 2, 3, 2, 2, 3] ! Or a list of lists, like so: ! [[1, 2], [1, 2, 3], [2], [2, 3]] ! However, as the syntax and semantics of list comprehensions are ! still subject of hot debate, these issues are probably best ! addressed by the `list comprehensions' PEP. ! ! Range literals accept objects other than integers: it performs ! PyInt_AsLong() on the objects passed in, so as long as the objects ! can be coerced into integers, they will be accepted. The ! resulting list, however, is always composed of standard integers. ! Should range literals create a list of the passed-in type ? It ! might be desirable in the cases of other builtin types, such as ! longs and strings: ! ! >>> [ 1L : 2L<<64 : 2<<32L ] ! >>> ["a":"z":"b"] ! >>> ["a":"z":2] ! ! However, this might be too much `magic' to be obvious. It might ! also present problems with user-defined classes: even if the base ! class can be found and a new instance created, the instance may ! require additional arguments to __init__, causing the creation to ! fail. ! The PyList_FromRange() and PyList_GetLenOfRange() functions need ! to be classified: are they part of the API, or should they be made ! private functions ? ! References: [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=100902&group_id=5470 --- 176,273 ---- calls. ! PyList_FromRange() builds a list from start, end and step, ! returning NULL if an error occurs. Its prototype is: ! ! PyObject * PyList_FromRange(long start, long end, long step) ! ! PyList_GetLenOfRange() is a helper function used to determine the ! length of a range. Previously, it was a static function in ! bltinmodule.c, but is now necessary in both listobject.c and ! bltinmodule.c (for xrange). It is made non-static solely to avoid ! code duplication. Its prototype is: ! long PyList_GetLenOfRange(long start, long end, long step) ! ! Open issues ! - One possible solution to the discrepancy of requiring the `end' ! argument in range literals is to allow the range syntax to ! create a `generator', rather than a list, such as the `xrange' ! builtin function does. However, a generator would not be a ! list, and it would be impossible, for instance, to assign to ! items in the generator, or append to it. ! ! The range syntax could conceivably be extended to include tuples ! (i.e. immutable lists), which could then be safely implemented ! as generators. This may be a desirable solution, especially for ! large number arrays: generators require very little in the way ! of storage and initialization, and there is only a small ! performance impact in calculating and creating the appropriate ! number on request. (TBD: is there any at all? Cursory testing ! suggests equal performance even in the case of ranges of length ! 1) ! ! However, even if idea was adopted, would it be wise to `special ! case' the second argument, making it optional in one instance of ! the syntax, and non-optional in other cases ? + - Should it be possible to mix range syntax with normal list + literals, creating a single list? E.g.: ! >>> [5, 6, 1:6, 7, 9] to create + [5, 6, 1, 2, 3, 4, 5, 7, 9] ! - How should range literals interact with another proposed new ! feature, `list comprehensions'[2]? Specifically, should it be ! possible to create lists in list comprehensions? E.g.: ! >>> [x:y for x in (1, 2) y in (3, 4)] ! Should this example return a single list with multiple ranges: ! [1, 2, 1, 2, 3, 2, 2, 3] ! Or a list of lists, like so: ! [[1, 2], [1, 2, 3], [2], [2, 3]] ! However, as the syntax and semantics of list comprehensions are ! still subject of hot debate, these issues are probably best ! addressed by the `list comprehensions' PEP. ! ! - Range literals accept objects other than integers: it performs ! PyInt_AsLong() on the objects passed in, so as long as the ! objects can be coerced into integers, they will be accepted. ! The resulting list, however, is always composed of standard ! integers. ! ! Should range literals create a list of the passed-in type? It ! might be desirable in the cases of other builtin types, such as ! longs and strings: + >>> [ 1L : 2L<<64 : 2<<32L ] + >>> ["a":"z":"b"] + >>> ["a":"z":2] + + However, this might be too much `magic' to be obvious. It might + also present problems with user-defined classes: even if the + base class can be found and a new instance created, the instance + may require additional arguments to __init__, causing the + creation to fail. ! - The PyList_FromRange() and PyList_GetLenOfRange() functions need ! to be classified: are they part of the API, or should they be ! made private functions? ! References: [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=100902&group_id=5470 + [2] PEP 202, List Comprehensions, pep-0202.txt + From python-dev@python.org Wed Aug 23 06:43:42 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:43:42 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0209.txt,1.1,1.2 Message-ID: <200008230543.WAA02384@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2374 Modified Files: pep-0209.txt Log Message: Deferred until Python 2.1. Index: pep-0209.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0209.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0209.txt 2000/07/15 23:28:27 1.1 --- pep-0209.txt 2000/08/23 05:43:40 1.2 *************** *** 2,8 **** Title: Adding Multidimensional Arrays Version: $Revision$ ! Owner: davida@activestate.com (David Ascher) ! Python-Version: 2.0 ! Status: Incomplete --- 2,11 ---- Title: Adding Multidimensional Arrays Version: $Revision$ ! Author: davida@activestate.com (David Ascher) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 15-Jul-2000 ! Post-History: From python-dev@python.org Wed Aug 23 06:44:55 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:44:55 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0210.txt,1.1,1.2 Message-ID: <200008230544.WAA02465@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2453 Modified Files: pep-0210.txt Log Message: Deferred until Python 2.1. Index: pep-0210.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0210.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0210.txt 2000/07/15 23:28:27 1.1 --- pep-0210.txt 2000/08/23 05:44:46 1.2 *************** *** 2,8 **** Title: Decoupling the Interpreter Loop Version: $Revision$ ! Owner: davida@activestate.com (David Ascher) ! Python-Version: 2.0 ! Status: Incomplete --- 2,11 ---- Title: Decoupling the Interpreter Loop Version: $Revision$ ! Author: davida@activestate.com (David Ascher) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 15-Jul-2000 ! Post-History: From python-dev@python.org Wed Aug 23 06:47:17 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:47:17 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0213.txt,1.3,1.4 Message-ID: <200008230547.WAA02648@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2635 Modified Files: pep-0213.txt Log Message: Deferred to Python 2.1 Index: pep-0213.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0213.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0213.txt 2000/07/21 21:59:29 1.3 --- pep-0213.txt 2000/08/23 05:47:12 1.4 *************** *** 2,8 **** Title: Attribute Access Handlers Version: $Revision$ ! Owner: paul@prescod.net (Paul Prescod) ! Python-Version: 2.0 ! Status: Incomplete --- 2,11 ---- Title: Attribute Access Handlers Version: $Revision$ ! Author: paul@prescod.net (Paul Prescod) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 21-Jul-2000 ! Post-History: *************** *** 20,23 **** --- 23,27 ---- and safer to implement these handlers for Python instances. + Justification *************** *** 51,54 **** --- 55,59 ---- merely a new syntax for an existing convention. + Current Solution *************** *** 86,89 **** --- 91,95 ---- inefficient. + Proposed Syntax *************** *** 105,110 **** x.foo=fooval+5 del x.foo ! Semantics Attribute references of all three kinds should call the method. --- 111,117 ---- x.foo=fooval+5 del x.foo + ! Semantics Attribute references of all three kinds should call the method. *************** *** 126,129 **** --- 133,137 ---- goes for __del_y__. + Proposed Implementation *************** *** 170,173 **** --- 178,182 ---- of set. + Caveats *************** *** 200,203 **** --- 209,214 ---- Once again, the solution is to use a special (typically private) variable such as __XXX. + + Local Variables: From python-dev@python.org Wed Aug 23 06:49:30 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:49:30 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0216.txt,1.1,1.2 Message-ID: <200008230549.WAA02875@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2867 Modified Files: pep-0216.txt Log Message: Informational PEPs don't need a Python-Version: Index: pep-0216.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0216.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0216.txt 2000/07/31 15:05:19 1.1 --- pep-0216.txt 2000/08/23 05:49:27 1.2 *************** *** 2,9 **** Title: Docstring Format Version: $Revision$ ! Owner: moshez@math.huji.ac.il (Moshe Zadka) ! Python-Version: 2.x Status: Draft ! --- 2,9 ---- Title: Docstring Format Version: $Revision$ ! Author: moshez@math.huji.ac.il (Moshe Zadka) Status: Draft ! Type: Informational ! Created: 31-Jul-2000 From python-dev@python.org Wed Aug 23 06:50:34 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:50:34 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0217.txt,1.1,1.2 Message-ID: <200008230550.WAA02942@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2934 Modified Files: pep-0217.txt Log Message: Added Type: header Index: pep-0217.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0217.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0217.txt 2000/07/31 20:15:14 1.1 --- pep-0217.txt 2000/08/23 05:50:32 1.2 *************** *** 3,8 **** Version: $Revision$ Author: moshez@math.huji.ac.il (Moshe Zadka) - Python-Version: 2.1 Status: Draft Created: 31-Jul-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: moshez@math.huji.ac.il (Moshe Zadka) Status: Draft + Type: Standards Track + Python-Version: 2.1 Created: 31-Jul-2000 Post-History: From python-dev@python.org Wed Aug 23 06:57:50 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:57:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,1.2,1.3 Message-ID: <200008230557.WAA03359@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv3351 Modified Files: pep-0221.txt Log Message: Minor editorial changes. Index: pep-0221.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0221.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0221.txt 2000/08/20 10:49:45 1.2 --- pep-0221.txt 2000/08/23 05:57:47 1.3 *************** *** 2,18 **** Title: Import As Version: $Revision$ ! Owner: thomas@xs4all.net (Thomas Wouters) ! Python-Version: 2.0 Status: Accepted - Created: 15-Aug-2000 Type: Standard Introduction ! This PEP describes the `import as' proposal for Python 2.0. This ! PEP tracks the status and ownership of this feature. It contains a ! description of the feature and outlines changes necessary to ! support the feature. The CVS revision history of this file contains the definitive historical record. --- 2,19 ---- Title: Import As Version: $Revision$ ! Author: thomas@xs4all.net (Thomas Wouters) Status: Accepted Type: Standard + Python-Version: 2.0 + Created: 15-Aug-2000 + Post-History: Introduction ! This PEP describes the `import as' proposal for Python 2.0. This ! PEP tracks the status and ownership of this feature. It contains ! a description of the feature and outlines changes necessary to ! support the feature. The CVS revision history of this file contains the definitive historical record. *************** *** 20,30 **** Rationale ! This PEP proposes a small extention of current Python syntax ! regarding the `import' and `from import' statements. ! These statements load in a module, and either bind that module to ! a local name, or binds objects from that module to a local name. ! However, it is sometimes desirable to bind those objects to a ! different name, for instance to avoid name clashes. Currently, a ! round-about way has to be used to achieve this: import os --- 21,31 ---- Rationale ! This PEP proposes an extention of Python syntax regarding the ! `import' and `from import' statements. These statements ! load in a module, and either bind that module to a local name, or ! binds objects from that module to a local name. However, it is ! sometimes desirable to bind those objects to a different name, for ! instance to avoid name clashes. This can currently be achieved ! using the following idiom: import os *************** *** 32,36 **** del os ! And similar for the `from ... import' statement: from os import fdopen, exit, stat --- 33,37 ---- del os ! And similarly for the `from ... import' statement: from os import fdopen, exit, stat *************** *** 46,50 **** The `as' name is not intended to be a keyword, and some trickery ! has to be used to convince the CPython parser it isn't one. For more advanced parsers/tokenizers, however, this should not be a problem. --- 47,51 ---- The `as' name is not intended to be a keyword, and some trickery ! has to be used to convince the CPython parser it isn't one. For more advanced parsers/tokenizers, however, this should not be a problem. *************** *** 55,63 **** import os.path ! The actual name stored locally is `os', not `path' (so that the ! newly imported module can be referenced as `os.path'.) When ! introducing the `as' keyword, it is unclear whether the `os' ! module or the `path' sub-module should be stored `as' the ! requested local name. --- 56,63 ---- import os.path ! The actual name stored locally is `os', not `path', and the newly ! imported module can be referenced as `os.path'. When introducing ! the `as' keyword, it is unclear whether the `os' module or the ! `path' sub-module should be stored `as' the requested local name. *************** *** 65,71 **** This PEP has been accepted, and the suggested code change has been ! checked in. The patch can still be found in the SourceForge patch ! manager[1]. Currently, a NAME field is used in the grammar rather ! than a bare string, to avoid the keyword issue. It introduces a new bytecode, IMPORT_STAR, which performs the `from module import *' behaviour, and changes the behaviour of the IMPORT_FROM --- 65,71 ---- This PEP has been accepted, and the suggested code change has been ! checked in. The patch can still be found in the SourceForge patch ! manager[1]. Currently, a NAME field is used in the grammar rather ! than a bare string, to avoid the keyword issue. It introduces a new bytecode, IMPORT_STAR, which performs the `from module import *' behaviour, and changes the behaviour of the IMPORT_FROM *************** *** 80,86 **** An additional change to this syntax has also been suggested, to ! generalize the expression given after the `as' clause. Rather than ! a single name, it could be allowed to be any expression that ! yields a valid l-value; anything that can be assigned to. The change to accomodate this is minimal, as the patch proves[2], and the resulting generalization allows a number of new constructs --- 80,86 ---- An additional change to this syntax has also been suggested, to ! generalize the expression given after the `as' clause. Rather ! than a single name, it could be allowed to be any expression that ! yields a valid l-value; anything that can be assigned to. The change to accomodate this is minimal, as the patch proves[2], and the resulting generalization allows a number of new constructs *************** *** 104,112 **** References ! [1] ! http://sourceforge.net/patch/?func=detailpatch&patch_id=101135&group_id=5470 ! [2] ! http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470 --- 104,110 ---- References ! [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=101135&group_id=5470 ! [2] http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470 From python-dev@python.org Wed Aug 23 06:51:16 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:51:16 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0218.txt,1.1,1.2 Message-ID: <200008230551.WAA02981@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2969 Modified Files: pep-0218.txt Log Message: Added Type: header Index: pep-0218.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0218.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0218.txt 2000/07/31 20:20:31 1.1 --- pep-0218.txt 2000/08/23 05:51:13 1.2 *************** *** 3,8 **** Version: $Revision$ Author: gvwilson@nevex.com (Greg Wilson) - Python-Version: 2.1 Status: Draft Created: 31-Jul-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: gvwilson@nevex.com (Greg Wilson) Status: Draft + Type: Standards Track + Python-Version: 2.1 Created: 31-Jul-2000 Post-History: From python-dev@python.org Wed Aug 23 06:52:51 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:52:51 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0219.txt,1.1,1.2 Message-ID: <200008230552.WAA03151@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv3053 Modified Files: pep-0219.txt Log Message: There are now no `technical' PEPs: only standards track and informational. This one fits better as a standards track PEP. Index: pep-0219.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0219.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0219.txt 2000/08/14 14:48:38 1.1 --- pep-0219.txt 2000/08/23 05:52:49 1.2 *************** *** 3,8 **** Version: $Revision$ Author: gmcm@hypernet.com (Gordon McMillan) ! Status: Active ! Type: Technical Created: 14-Aug-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: gmcm@hypernet.com (Gordon McMillan) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 Created: 14-Aug-2000 Post-History: From python-dev@python.org Wed Aug 23 07:04:35 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 23:04:35 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0215.txt,1.1,1.2 Message-ID: <200008230604.XAA12249@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv12240 Modified Files: pep-0215.txt Log Message: Deferred until Python 2.1. Index: pep-0215.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0215.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0215.txt 2000/07/24 19:01:55 1.1 --- pep-0215.txt 2000/08/23 06:04:33 1.2 *************** *** 2,8 **** Title: String Interpolation Version: $Revision$ ! Owner: ping@lfw.org (Ka-Ping Yee) ! Python-Version: 2.0 ! Status: Incomplete --- 2,12 ---- Title: String Interpolation Version: $Revision$ ! Author: ping@lfw.org (Ka-Ping Yee) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 24-Jul-2000 ! Post-History: ! From python-dev@python.org Wed Aug 23 07:02:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 23:02:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0222.txt,1.2,1.3 Message-ID: <200008230602.XAA08482@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv8339 Modified Files: pep-0222.txt Log Message: Deferred until Python 2.1. Index: pep-0222.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0222.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0222.txt 2000/08/22 05:15:51 1.2 --- pep-0222.txt 2000/08/23 06:02:40 1.3 *************** *** 5,8 **** --- 5,9 ---- Status: Active Type: Standards Track + Python-Version: 2.1 Created: 18-Aug-2000 Post-History: From python-dev@python.org Wed Aug 23 07:03:32 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 23:03:32 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0223.txt,1.2,1.3 Message-ID: <200008230603.XAA10299@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10236 Modified Files: pep-0223.txt Log Message: Additional headers needed. Index: pep-0223.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0223.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0223.txt 2000/08/22 04:42:19 1.2 --- pep-0223.txt 2000/08/23 06:03:29 1.3 *************** *** 3,8 **** Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) - Python-Version: 2.0 Status: Draft Created: 20-Aug-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) Status: Draft + Type: Standards Track + Python-Version: 2.0 Created: 20-Aug-2000 Post-History: From python-dev@python.org Wed Aug 23 10:13:44 2000 From: python-dev@python.org (Jack Jansen) Date: Wed, 23 Aug 2000 02:13:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib macpath.py,1.24,1.25 Message-ID: <200008230913.CAA13051@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12968 Modified Files: macpath.py Log Message: Restored commonprefix() semantics. Index: macpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/macpath.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** macpath.py 2000/08/06 21:18:35 1.24 --- macpath.py 2000/08/23 09:13:40 1.25 *************** *** 90,116 **** - # Return the longest prefix of all list elements. - # XXX completely untested on Mac!!! - - def commonprefix(m): - "Given a list of pathnames, returns the longest common leading component" - if not m: return '' - n = m[:] - for i in range(len(n)): - n[i] = n[i].split(os.sep) - # if os.sep didn't have any effect, try os.altsep - if os.altsep and len(n[i]) == 1: - n[i] = n[i].split(os.altsep) - - prefix = n[0] - for item in n: - for i in range(len(prefix)): - if prefix[:i+1] <> item[:i+1]: - prefix = prefix[:i] - if i == 0: return '' - break - return os.sep.join(prefix) - - def isdir(s): """Return true if the pathname refers to an existing directory.""" --- 90,93 ---- *************** *** 167,170 **** --- 144,160 ---- return 1 + # Return the longest prefix of all list elements. + + def commonprefix(m): + "Given a list of pathnames, returns the longest common leading component" + if not m: return '' + prefix = m[0] + for item in m: + for i in range(len(prefix)): + if prefix[:i+1] <> item[:i+1]: + prefix = prefix[:i] + if i == 0: return '' + break + return prefix def expandvars(path): From python-dev@python.org Wed Aug 23 12:32:04 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 04:32:04 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.8,1.9 Message-ID: <200008231132.EAA08020@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28113 Modified Files: pep-0203.txt Log Message: Incorporate Guido's decision to go for '__iadd__' for the Python class hooks, and trim the 'open isues': PyNumber_InPlacePower() is now a trinary function, like PyNumber_Power(), and I'm working on the docs and the library. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** pep-0203.txt 2000/08/23 05:22:41 1.8 --- pep-0203.txt 2000/08/23 11:32:01 1.9 *************** *** 63,72 **** x += y ! tries to call x.__add_ab__(y), which is the `in-place' variant of ! __add__. If __add_ab__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. ! There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add_ab__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. --- 63,72 ---- x += y ! tries to call x.__iadd__(y), which is the `in-place' variant of ! __add__. If __iadd__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. ! There is no `right-hand-side' variant of __iadd__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. *************** *** 140,159 **** assignment operations: ! __add_ab__ ! __sub_ab__ ! __mul_ab__ ! __div_ab__ ! __mod_ab__ ! __pow_ab__ ! __lshift_ab__ ! __rshift_ab__ ! __and_ab__ ! __xor_ab__ ! __or_ab__ ! ! The `__add_ab__' name is one proposed by Guido[1], and stands for ! `and becomes'. Other proposed names include `__iadd__', ! `__add_in__' and `__inplace_add__'. A firm decision by the BDFL is ! probably needed to finalize this issue. For C extension types, the following struct members are added: --- 140,156 ---- assignment operations: ! __iadd__ ! __isub__ ! __imul__ ! __idiv__ ! __imod__ ! __ipow__ ! __ilshift__ ! __irshift__ ! __iand__ ! __ixor__ ! __ior__ ! ! The `i' in `__iadd__' stands for `in-place'. For C extension types, the following struct members are added: *************** *** 260,279 **** Open Issues - - The PyNumber_InPlacePower() function only takes two arguments, not - one like PyNumber_Power(). This is because there is no way to do - an inplace three-argument-power trough the augmented assignment - syntax or the power() function. - ! Possibly a more obvious name for the Python hooks can be found. ! `_ab_' is what Guido proposed[1] as a working name, and comes from ! an old Algol-68 naming convention. - Documentation needs to be written. The reference manual, the `dis' - section of the library manual, and possibly the tutorial. - - The DUP_TOPX bytecode is a conveniency bytecode, and is not actually necessary. It should be considered whether this bytecode --- 257,267 ---- Open Issues ! The PyNumber_InPlace API is only a subset of the normal PyNumber ! API: only those functions that are required to support the ! augmented assignment syntax are included. If other in-place API ! functions are needed, they can be added later. The DUP_TOPX bytecode is a conveniency bytecode, and is not actually necessary. It should be considered whether this bytecode *************** *** 282,289 **** - The standard library should be adjusted to provide augmented - assignment hooks, where sensible. - - It is not possible to do an inplace operation in the variant of --- 270,273 ---- *************** *** 304,309 **** [1] http://www.python.org/pipermail/python-list/2000-June/059556.html ! [2] ! http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 [3] PEP 211, Adding New Linear Algebra Operators, http://python.sourceforge.net/peps/pep-0211.html --- 288,292 ---- [1] http://www.python.org/pipermail/python-list/2000-June/059556.html ! [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 [3] PEP 211, Adding New Linear Algebra Operators, http://python.sourceforge.net/peps/pep-0211.html From python-dev@python.org Wed Aug 23 13:09:10 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 05:09:10 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,1.3,1.4 Message-ID: <200008231209.FAA19808@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18715 Modified Files: pep-0221.txt Log Message: Clean up a few items: the 'import os.path as p' syntax and the 'extended-as'-assignment syntax, both of which Guido has decided on. Index: pep-0221.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0221.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0221.txt 2000/08/23 05:57:47 1.3 --- pep-0221.txt 2000/08/23 12:09:07 1.4 *************** *** 4,8 **** Author: thomas@xs4all.net (Thomas Wouters) Status: Accepted ! Type: Standard Python-Version: 2.0 Created: 15-Aug-2000 --- 4,8 ---- Author: thomas@xs4all.net (Thomas Wouters) Status: Accepted ! Type: Standards Track Python-Version: 2.0 Created: 15-Aug-2000 *************** *** 50,65 **** more advanced parsers/tokenizers, however, this should not be a problem. ! ! To avoid confusion, importing a submodule `as' another module is ! not allowed. When importing a submodule in the normal way, ! import os.path ! ! The actual name stored locally is `os', not `path', and the newly ! imported module can be referenced as `os.path'. When introducing ! the `as' keyword, it is unclear whether the `os' module or the ! `path' sub-module should be stored `as' the requested local name. Implementation details --- 50,68 ---- more advanced parsers/tokenizers, however, this should not be a problem. ! ! A slightly special case exists for importing sub-modules. The ! statement ! ! import os.path ! ! stores the module `os' locally as `os', so that the imported ! submodule `path' is accessible as `os.path'. As a result, ! import os.path as p + should store `os.path', not `os', in `p'. The current + implementation does not yet support this. + Implementation details *************** *** 86,98 **** the resulting generalization allows a number of new constructs that run completely parallel with other Python assignment ! constructs. ! ! import sys as x['sys'] ! ! from MyFastcPickle import Pickler as shelve.Pickler ! ! from sys import version_info as (maj, min, pl, relnam, relno) ! ! from sys import path as mypath[-1:] --- 89,94 ---- the resulting generalization allows a number of new constructs that run completely parallel with other Python assignment ! constructs. However, this idea has been rejected by Guido, as ! `hypergeneralization'. From python-dev@python.org Wed Aug 23 13:34:05 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 05:34:05 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.9,1.10 Message-ID: <200008231234.FAA18435@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv17711 Modified Files: pep-0203.txt Log Message: Fix typo found by Peter Funk. Thanx, Peter! (Of course, I put it there on purpose, just to see if anyone was paying attention. Really! :) Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pep-0203.txt 2000/08/23 11:32:01 1.9 --- pep-0203.txt 2000/08/23 12:34:02 1.10 *************** *** 68,72 **** There is no `right-hand-side' variant of __iadd__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. --- 68,72 ---- There is no `right-hand-side' variant of __iadd__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __iadd__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. From python-dev@python.org Wed Aug 23 15:34:27 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 07:34:27 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.21,1.22 Message-ID: <200008231434.HAA26732@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv26581/peps Modified Files: pep-0200.txt Log Message: remove mystery R & B columns Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** pep-0200.txt 2000/08/23 03:38:53 1.21 --- pep-0200.txt 2000/08/23 14:34:25 1.22 *************** *** 87,102 **** to fail, they serve no useful purpose. ! [what are the "R" and "B" columns supposed to mean? - tim] ! ! test case platform R B date reported ! --------- -------- - - ------------- ! test_parser Windows ? ? 22-Aug-2000 [probably all platforms] ! test_posixpath Windows ? ? 22-Aug-2000 [probably all platforms; think it's because Skip backed out commonpathprefix changes but didn't change the tests] ! test_fork1 Linux X 26-Jul-2000 just SMP? [no clue; there are probably two bugs here] [19-Aug-200 tim --- 87,100 ---- to fail, they serve no useful purpose. ! test case platform date reported ! --------- -------- ------------- ! test_parser Windows 22-Aug-2000 [probably all platforms] ! test_posixpath Windows 22-Aug-2000 [probably all platforms; think it's because Skip backed out commonpathprefix changes but didn't change the tests] ! test_fork1 Linux 26-Jul-2000 [no clue; there are probably two bugs here] [19-Aug-200 tim *************** *** 114,120 **** the code it's testing is in trouble! ! test case platform R B date reported ! --------- -------- - - ------------- ! test_popen2 Win32 X X 26-Jul-2000 [20-Aug-2000 tim changed the popen2.py _test function to use the "more" cmd --- 112,118 ---- the code it's testing is in trouble! ! test case platform date reported ! --------- -------- ------------- ! test_popen2 Win32 26-Jul-2000 [20-Aug-2000 tim changed the popen2.py _test function to use the "more" cmd *************** *** 134,145 **** ] ! test_winreg Win32 X X 26-Jul-2000 [works 15-Aug-2000 for me, on Win98 - tim] ! test_mmap Win32 X X 26-Jul-2000 [believe that was fixed by Mark H.] [works 15-Aug-2000 for me, on Win98 - tim] ! test_longexp Win98+? ? ? 15-Aug-2000 [fails in release build, passes in release build under verbose mode but doesn't --- 132,143 ---- ] ! test_winreg Win32 26-Jul-2000 [works 15-Aug-2000 for me, on Win98 - tim] ! test_mmap Win32 26-Jul-2000 [believe that was fixed by Mark H.] [works 15-Aug-2000 for me, on Win98 - tim] ! test_longexp Win98+? 15-Aug-2000 [fails in release build, passes in release build under verbose mode but doesn't *************** *** 162,166 **** ] ! test_winreg2 Win32 X X 26-Jul-2000 [20-Aug-2000 tim - the test has been removed from the project] [19-Aug-2000 tim --- 160,164 ---- ] ! test_winreg2 Win32 26-Jul-2000 [20-Aug-2000 tim - the test has been removed from the project] [19-Aug-2000 tim From python-dev@python.org Wed Aug 23 15:44:02 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 07:44:02 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.22,1.23 Message-ID: <200008231444.HAA30802@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30626/peps Modified Files: pep-0200.txt Log Message: move os.path.commonprefix from open to completed split open items into 2.0b1 and 2.0 sections Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** pep-0200.txt 2000/08/23 14:34:25 1.22 --- pep-0200.txt 2000/08/23 14:43:59 1.23 *************** *** 174,222 **** ! Open items -- should be done/fixed ! Decoding errors when comparing strings. There is a dictionary bug ! that prevents objects from being accessible when an exception is ! raised during hashing or comparison. ! Decide what to do about os.path.commonprefix. Then do it. ! [19-Aug-2000 tim ! Guido msg on Python-Dev: ! - restore the old behavior on all platforms - Skip volunteered for this ! - add to the docs that to get the common directory you use dirname() ! - add testcases that check that this works on all platforms ! - don't add commonpathprefix(), because dirname() already does it ! ] ! 2.0b1: Get all patches out of Open. ! 2.0b1: Get all patches out of Accepted. ! 2.0b1: Decide on a license. ! ! 2.0b1 Windows: Look for registry info in HKCU before HKLM - Mark Hammond. ! 2.0b1 Windows installer: If HKLM isn't writable, back off to HKCU (so Python can be installed on NT & 2000 without admin privileges). ! 2.0b1 Windows installer: Install w9xpopen.exe only under Win95/98. ! 2.0b1 Windows ME: Don't know anything about it. Will the installer even run? Does it need the w9xpopen hack? ! 2.0b1 Win98 Guido: popen is hanging on Guido, and even freezing the whole machine. No clue yet. ! 2.0: Decide on a license. ! 2.0: Finish writing the PEPs for the features that went out ! with 2.0b1(! sad, but realistic -- we'll get better with practice). ! 2.0: Major effort to whittle the bug database down to size. I've (tim) ! seen this before: if you can keep all the open bugs fitting on one ! screen, people will generally keep it that way. But let it slobber ! over a screen for a month, & it just goes to hell (no "visible ! progress" indeed!). --- 174,214 ---- ! Open items -- Need to be resolved before 2.0b1 release ! Fix bug 112558 ! https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 ! Get all patches out of Open. ! Get all patches out of Accepted. ! Decide on a license. ! Windows: Look for registry info in HKCU before HKLM - Mark Hammond. ! Windows installer: If HKLM isn't writable, back off to HKCU (so Python can be installed on NT & 2000 without admin privileges). ! Windows installer: Install w9xpopen.exe only under Win95/98. ! Windows ME: Don't know anything about it. Will the installer even run? Does it need the w9xpopen hack? ! Win98 Guido: popen is hanging on Guido, and even freezing the whole machine. No clue yet. + + Open items -- Need to be resolved before 2.0 final release ! Decide on a license. ! Finish writing the PEPs for the features that went out with ! 2.0b1(! sad, but realistic -- we'll get better with practice). ! Major effort to whittle the bug database down to size. I've (tim) ! seen this before: if you can keep all the open bugs fitting on one ! screen, people will generally keep it that way. But let it ! slobber over a screen for a month, & it just goes to hell (no ! "visible progress" indeed!). *************** *** 232,235 **** --- 224,230 ---- Accepted and completed + + * Restore old os.path.commonprefix behavior + Do we have test cases that work on all platforms? * Lockstep iteration ("zip" function) - Barry Warsaw From python-dev@python.org Wed Aug 23 15:56:28 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 07:56:28 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.23,1.24 Message-ID: <200008231456.HAA00547@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv482/peps Modified Files: pep-0200.txt Log Message: confirm that test_parser and test_posixpath fail on Linux too Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** pep-0200.txt 2000/08/23 14:43:59 1.23 --- pep-0200.txt 2000/08/23 14:56:26 1.24 *************** *** 89,98 **** test case platform date reported --------- -------- ------------- ! test_parser Windows 22-Aug-2000 ! [probably all platforms] ! test_posixpath Windows 22-Aug-2000 ! [probably all platforms; think it's because Skip backed out ! commonpathprefix changes but didn't change the tests] test_fork1 Linux 26-Jul-2000 --- 89,97 ---- test case platform date reported --------- -------- ------------- ! test_parser all 22-Aug-2000 ! test_posixpath all 22-Aug-2000 ! [think it's because Skip backed out commonpathprefix changes ! but didn't change the tests] test_fork1 Linux 26-Jul-2000 From python-dev@python.org Wed Aug 23 16:35:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 08:35:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.51,2.52 Message-ID: <200008231535.IAA15364@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv15339/Modules Modified Files: parsermodule.c Log Message: validate_listmaker(): Revise to match Skip's latest changes to the Grammar file. This makes the test suite pass once again. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.51 retrieving revision 2.52 diff -C2 -r2.51 -r2.52 *** parsermodule.c 2000/08/22 01:44:16 2.51 --- parsermodule.c 2000/08/23 15:35:26 2.52 *************** *** 2194,2197 **** --- 2194,2200 ---- + /* listmaker: + * test ( list_for | (',' test)* [','] ) + */ static int validate_listmaker(node *tree) *************** *** 2208,2213 **** * list_iter | (',' test)* [','] */ ! if (nch == 2 && TYPE(CHILD(tree, 1)) == list_iter) ! ok = validate_list_iter(CHILD(tree, 1)); else { /* (',' test)* [','] */ --- 2211,2216 ---- * list_iter | (',' test)* [','] */ ! if (nch == 2 && TYPE(CHILD(tree, 1)) == list_for) ! ok = validate_list_for(CHILD(tree, 1)); else { /* (',' test)* [','] */ *************** *** 2216,2224 **** ok = (validate_comma(CHILD(tree, i)) && validate_test(CHILD(tree, i+1))); ! if (ok) ! i += 2; } ! if (ok && nch-i) ! ok = validate_comma(CHILD(tree, nch-1)); } return ok; --- 2219,2230 ---- ok = (validate_comma(CHILD(tree, i)) && validate_test(CHILD(tree, i+1))); ! i += 2; } ! if (ok && i == nch-1) ! ok = validate_comma(CHILD(tree, i)); ! else if (i != nch) { ! ok = 0; ! err_string("illegal trailing nodes for listmaker"); ! } } return ok; From python-dev@python.org Wed Aug 23 16:55:43 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 08:55:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.24,1.25 Message-ID: <200008231555.IAA18771@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18756/peps Modified Files: pep-0200.txt Log Message: Fred fixed the parser module Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** pep-0200.txt 2000/08/23 14:56:26 1.24 --- pep-0200.txt 2000/08/23 15:55:40 1.25 *************** *** 89,97 **** test case platform date reported --------- -------- ------------- - test_parser all 22-Aug-2000 - test_posixpath all 22-Aug-2000 [think it's because Skip backed out commonpathprefix changes ! but didn't change the tests] test_fork1 Linux 26-Jul-2000 --- 89,95 ---- test case platform date reported --------- -------- ------------- test_posixpath all 22-Aug-2000 [think it's because Skip backed out commonpathprefix changes ! but didn't change the tests; patch to fix exists] test_fork1 Linux 26-Jul-2000 From python-dev@python.org Wed Aug 23 16:45:31 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 08:45:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.39,1.40 Message-ID: <200008231545.IAA17338@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv17324/Grammar Modified Files: Grammar Log Message: Added note stating that the parser module will need updating for most changes to this file. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** Grammar 2000/08/22 02:43:07 1.39 --- Grammar 2000/08/23 15:45:28 1.40 *************** *** 1,4 **** --- 1,11 ---- # Grammar for Python + # Note: Changing the grammar specified in this file will most likely + # require corresponding changes in the parser module + # (../Modules/parsermodule.c). If you can't make the changes to + # that module yourself, please co-ordinate the required changes + # with someone who can; ask around on python-dev for help. Fred + # Drake will probably be listening there. + # Commands for Kees Blom's railroad program #diagram:token NAME From python-dev@python.org Wed Aug 23 16:57:24 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 23 Aug 2000 08:57:24 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.10,1.11 Message-ID: <200008231557.IAA18932@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18923 Modified Files: pep-0203.txt Log Message: Accepted, but also added a note about a misfeature that should be fixed. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** pep-0203.txt 2000/08/23 12:34:02 1.10 --- pep-0203.txt 2000/08/23 15:57:21 1.11 *************** *** 3,7 **** Version: $Revision$ Author: thomas@xs4all.net (Thomas Wouters) ! Status: Draft Type: Standards Track Python-Version: 2.0 --- 3,7 ---- Version: $Revision$ Author: thomas@xs4all.net (Thomas Wouters) ! Status: Accepted Type: Standards Track Python-Version: 2.0 *************** *** 80,83 **** --- 80,86 ---- should be INCREF()'d appropriately. + [XXX so I am accepting this, but I'm a bit worried about the + argument coercion. For x+=y, if x supports augmented assignment, + y should only be cast to x's type, not the other way around!] Rationale From python-dev@python.org Wed Aug 23 16:58:03 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 23 Aug 2000 08:58:03 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.28,1.29 Message-ID: <200008231558.IAA18995@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18982 Modified Files: pep-0000.txt Log Message: Accepted PEP-0203. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** pep-0000.txt 2000/08/23 05:09:57 1.28 --- pep-0000.txt 2000/08/23 15:58:00 1.29 *************** *** 28,32 **** SA 201 pep-0201.txt Lockstep Iteration Warsaw S 202 pep-0202.txt List Comprehensions Peters ! S 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters SD 205 pep-0205.txt Weak References Drake --- 28,32 ---- SA 201 pep-0201.txt Lockstep Iteration Warsaw S 202 pep-0202.txt List Comprehensions Peters ! SA 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters SD 205 pep-0205.txt Weak References Drake From python-dev@python.org Wed Aug 23 16:58:08 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 23 Aug 2000 08:58:08 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.10,1.11 Message-ID: <200008231558.IAA19020@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv19006 Modified Files: pep-0001.txt Log Message: In order to get a PEP number, you need more than just an abstract. You need a rough draft. Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** pep-0001.txt 2000/08/23 05:04:42 1.10 --- pep-0001.txt 2000/08/23 15:58:05 1.11 *************** *** 51,59 **** The champion then emails the PEP editor with a proposed title and ! an abstract of about a paragraph in length. If the PEP editor approves, he will assign the PEP a number, label it as standards track or informational, give it status 'draft', ! and create and check-in an initial template for the PEP. The PEP editor will not unreasonably deny a PEP. Reasons for denying PEP status include duplication of effort, being technically unsound, --- 51,59 ---- The champion then emails the PEP editor with a proposed title and ! a rough, but fleshed out, draft of the PEP. If the PEP editor approves, he will assign the PEP a number, label it as standards track or informational, give it status 'draft', ! and create and check-in the initial draft of the PEP. The PEP editor will not unreasonably deny a PEP. Reasons for denying PEP status include duplication of effort, being technically unsound, From python-dev@python.org Wed Aug 23 17:50:50 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 23 Aug 2000 09:50:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0224.txt,NONE,1.1 Message-ID: <200008231650.JAA02590@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2583 Added Files: pep-0224.txt Log Message: Added PEP 224, Attribute Docstrings, assigned to MAL. ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Wed Aug 23 17:51:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 23 Aug 2000 09:51:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.29,1.30 Message-ID: <200008231651.JAA02635@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2626 Modified Files: pep-0000.txt Log Message: Added PEP 224, Attribute Docstrings, assigned to MAL. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** pep-0000.txt 2000/08/23 15:58:00 1.29 --- pep-0000.txt 2000/08/23 16:51:21 1.30 *************** *** 49,52 **** --- 49,53 ---- SD 222 pep-0222.txt Web Library Enhancements Kuchling S 223 pep-0223.txt Change the Meaning of \x Escapes Peters + S 224 pep-0224.txt Attribute Docstrings Lemburg *************** *** 68,71 **** --- 69,73 ---- Hylton, Jeremy jeremy@beopen.com Kuchling, Andrew akuchlin@mems-exchange.org + Lemburg, Marc-Andre mal@lemburg.com McMillan, Gordon gmcm@hypernet.com Peters, Tim tpeters@beopen.com From python-dev@python.org Wed Aug 23 17:51:59 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:51:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_posixpath.py,1.1,1.2 Message-ID: <200008231651.JAA02667@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2657 Modified Files: test_posixpath.py Log Message: updated to correct failing test cases Index: test_posixpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_posixpath.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_posixpath.py 2000/07/12 00:20:08 1.1 --- test_posixpath.py 2000/08/23 16:51:56 1.2 *************** *** 30,36 **** tester('posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', - "/home") - tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"])', "/home/swen") tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") --- 30,36 ---- tester('posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', "/home/swen") + tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"])', + "/home/swen/") tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") From python-dev@python.org Wed Aug 23 17:55:02 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_dospath.py,NONE,1.1 Message-ID: <200008231655.JAA02930@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2909 Added Files: test_dospath.py Log Message: new test - like test_ntpath but without splitunc test cases --- NEW FILE --- import dospath import string import os errors = 0 def tester(fn, wantResult): fn = string.replace(fn, "\\", "\\\\") gotResult = eval(fn) if wantResult != gotResult: print "error!" print "evaluated: " + str(fn) print "should be: " + str(wantResult) print " returned: " + str(gotResult) print "" global errors errors = errors + 1 tester('dospath.splitdrive("c:\\foo\\bar")', ('c:', '\\foo\\bar')) tester('dospath.splitdrive("c:/foo/bar")', ('c:', '/foo/bar')) tester('dospath.split("c:\\foo\\bar")', ('c:\\foo', 'bar')) tester('dospath.split("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint\\foo', 'bar')) tester('dospath.split("c:\\")', ('c:\\', '')) tester('dospath.split("\\\\conky\\mountpoint\\")', ('\\\\conky\\mountpoint', '')) tester('dospath.split("c:/")', ('c:/', '')) tester('dospath.split("//conky/mountpoint/")', ('//conky/mountpoint', '')) tester('dospath.isabs("c:\\")', 1) tester('dospath.isabs("\\\\conky\\mountpoint\\")', 1) tester('dospath.isabs("\\foo")', 1) tester('dospath.isabs("\\foo\\bar")', 1) tester('dospath.abspath("C:\\")', "C:\\") tester('dospath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', "/home/swen") tester('dospath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])', "\\home\\swen\\") tester('dospath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") if errors: print str(errors) + " errors." else: print "No errors. Thank your lucky stars." From python-dev@python.org Wed Aug 23 17:58:42 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:58:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libposixpath.tex,1.15,1.16 Message-ID: <200008231658.JAA03111@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv3103 Modified Files: libposixpath.tex Log Message: update commonprefix doc to make sure user is aware it works character-by-character and that that behavior may result in it returning prefixes that are not valid paths Index: libposixpath.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libposixpath.tex,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** libposixpath.tex 2000/04/03 20:13:53 1.15 --- libposixpath.tex 2000/08/23 16:58:32 1.16 *************** *** 22,28 **** \begin{funcdesc}{commonprefix}{list} ! Return the longest string that is a prefix of all strings in \var{list}. If \var{list} is empty, return the empty string ! (\code{''}). \end{funcdesc} --- 22,30 ---- \begin{funcdesc}{commonprefix}{list} ! Return the longest path prefix (taken character-by-character) that is a ! prefix of all paths in \var{list}. If \var{list} is empty, return the empty string ! (\code{''}). Note that this may return invalid paths because it works a ! character at a time. \end{funcdesc} From python-dev@python.org Wed Aug 23 18:03:37 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 10:03:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.35,1.36 Message-ID: <200008231703.KAA04105@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv4080 Modified Files: ref5.tex Log Message: fix list comprehension discussion to use \keyword macro instead of simply quoting keywords. Index: ref5.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** ref5.tex 2000/08/22 02:43:06 1.35 --- ref5.tex 2000/08/23 17:03:34 1.36 *************** *** 165,172 **** evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by at least one "for" clause and zero or more ! "for" or "if" clauses. In this case, the elements of the new list are those that would be produced ! by considering each of the "for" or "if" clauses a block, nesting from left to right, and evaluating the expression to produce a list element each time the innermost block is reached. --- 165,173 ---- evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by at least one \keyword{for} clause and zero or ! more \keyword{for} or \keyword{if} clauses. In this case, the elements of the new list are those that would be produced ! by considering each of the \keyword{for} or \keyword{if} clauses a block, ! nesting from left to right, and evaluating the expression to produce a list element each time the innermost block is reached. From python-dev@python.org Wed Aug 23 17:54:30 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:54:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.4,1.5 Message-ID: <200008231654.JAA02887@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2879 Modified Files: test_ntpath.py Log Message: added commonprefix test cases Index: test_ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_ntpath.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_ntpath.py 2000/08/14 23:06:37 1.4 --- test_ntpath.py 2000/08/23 16:54:27 1.5 *************** *** 38,41 **** --- 38,47 ---- tester('ntpath.abspath("C:\\")', "C:\\") + tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', + "/home/swen") + tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])', + "\\home\\swen\\") + tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', + "/home/swen/spam") if errors: From python-dev@python.org Wed Aug 23 19:17:45 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 11:17:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser intrcheck.c,2.39,2.40 Message-ID: <200008231817.LAA26387@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv26371/Parser Modified Files: intrcheck.c Log Message: Simplified inclusions and avoid prototypes copied in from elsewhere. This also avoids a warning in anal mode. Index: intrcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/intrcheck.c,v retrieving revision 2.39 retrieving revision 2.40 diff -C2 -r2.39 -r2.40 *** intrcheck.c 2000/07/31 15:28:04 2.39 --- intrcheck.c 2000/08/23 18:17:42 2.40 *************** *** 11,26 **** /* Check for interrupts */ ! #include "config.h" ! ! /* config.h may or may not define DL_IMPORT */ ! #ifndef DL_IMPORT /* declarations for DLL import/export */ ! #define DL_IMPORT(RTYPE) RTYPE ! #endif ! ! #include "intrcheck.h" ! ! /* Copied here from ceval.h -- can't include that file. */ ! int Py_AddPendingCall(int (*func)(void *), void *arg); ! #ifdef QUICKWIN --- 11,15 ---- /* Check for interrupts */ ! #include "Python.h" #ifdef QUICKWIN From python-dev@python.org Wed Aug 23 20:01:47 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 23 Aug 2000 12:01:47 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.89,1.90 Message-ID: <200008231901.MAA31275@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv31228 Modified Files: README Log Message: Updated some URLs; removed mention of copyright (we'll have to add something in later after that discussion is over); remove explanation of 2.0 version number. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -r1.89 -r1.90 *** README 2000/07/23 21:18:08 1.89 --- README 2000/08/23 19:01:43 1.90 *************** *** 10,36 **** --------------------------- ! See http://www.pythonlabs.com/. - Why is it called version 2.0? - ----------------------------- - - While Pythoneers have grown fond of Python's exceedingly slow version - incrementing, that same quality makes parts of the rest of the world - think that Python is barely out of its first alpha test. Especially - enterprise customers are often fearful of anything that's version 1.x! - The new version number also clearly marks departure of Python's core - development team from CNRI to join BeOpen.com. - - What happened to Python 1.6? It was promoted and renamed Python 2.0. - There were two alpha releases of Python 1.6 before we decided to - increment the major version number. - - Previously, the version number 2.0 was associated with a mythical and - elusive incompatible future release. That release (still ways off, - and not as incompatible as people fear!) is now referred to as Python - 3000. - - If you don't read instructions ------------------------------ --- 10,16 ---- --------------------------- ! See http://www.pythonlabs.com/tech/python2.html . If you don't read instructions ------------------------------ *************** *** 698,703 **** -------- ! Python's own web site has URL http://www.pythonlabs.com/. Come visit ! us! --- 678,684 ---- -------- ! Python's web site is at http://www.python.org/. The Python core ! development team at BeOpen has its own website at ! http://www.pythonlabs.com/. Come visit us! *************** *** 723,731 **** Bug reports ----------- ! To report or search for bugs, please use the Python Bugs List at ! http://www.python.org/search/search_bugs.html Questions --------- --- 704,724 ---- Bug reports ----------- + + To report or search for bugs, please use the SourceForge Bugs + Tracker at http://sourceforge.net/bugs/?group_id=5470 . + ! Patches and contributions ! ------------------------- + To submit a patch or other contribution, please use the SourceForge + Patch Manager at http://sourceforge.net/patch/?group_id=5470 . + If you have a proposal to change Python, it's best to submit a Python + Enhancement Proposal (PEP) first. All current PEPs, as well as + guidelines for submitting a new PEP, are here: + http://python.sourceforge.net/peps/. + + Questions --------- *************** *** 831,842 **** E-mail: guido@beopen.com or guido@python.org - - - Copyright notice - ================ - - The Python source is copyrighted, but you can freely use and copy it - as long as you don't change or remove the copyright notice. The - copyright notice is found in the Misc/COPYRIGHT file. --- 824,827 ---- From python-dev@python.org Wed Aug 23 20:40:55 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 12:40:55 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.25,1.26 Message-ID: <200008231940.MAA09860@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9620 Modified Files: pep-0200.txt Log Message: test_parser and test_posixpath fixed Add new action items (bugs with priority higher than 7 are for 2.0b1) popen2 support (/F) mark many action items as done remove SyntaxError enhancements as accepted (Guido didn't like it and /F didn't think he was doing it). shorten descriptions of other open tasks that have patches associated Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** pep-0200.txt 2000/08/23 15:55:40 1.25 --- pep-0200.txt 2000/08/23 19:40:52 1.26 *************** *** 89,96 **** test case platform date reported --------- -------- ------------- - test_posixpath all 22-Aug-2000 - [think it's because Skip backed out commonpathprefix changes - but didn't change the tests; patch to fix exists] - test_fork1 Linux 26-Jul-2000 [no clue; there are probably two bugs here] --- 89,92 ---- *************** *** 111,114 **** --- 107,113 ---- test case platform date reported --------- -------- ------------- + test_parser all 22-Aug-2000 + test_posixpath all 22-Aug-2000 + test_popen2 Win32 26-Jul-2000 [20-Aug-2000 tim *************** *** 173,178 **** Open items -- Need to be resolved before 2.0b1 release ! Fix bug 112558 ! https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 Get all patches out of Open. --- 172,176 ---- Open items -- Need to be resolved before 2.0b1 release ! Add popen2 support for Linux -- assigned to /F Get all patches out of Open. *************** *** 180,183 **** --- 178,188 ---- Get all patches out of Accepted. + Fix bug 112558 + https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 + + Fix all other bugs with priority 7 or higher + + Review performance and frequency of garbage collection scans. + Decide on a license. *************** *** 198,201 **** --- 203,208 ---- Open items -- Need to be resolved before 2.0 final release + Improve code coverage of test suite. + Decide on a license. *************** *** 222,228 **** --- 229,244 ---- Accepted and completed + * "import as" - Thomas Wouters + Extend the 'import' and 'from ... import' mechanism to enable + importing a symbol as another name. (Without adding a new keyword.) + + * List comprehensions - Skip Montanaro + Tim Peters still needs to do PEP. + * Restore old os.path.commonprefix behavior Do we have test cases that work on all platforms? + * Tim O'Malley's cookie module with good license + * Lockstep iteration ("zip" function) - Barry Warsaw *************** *** 247,306 **** Accepted and in progress - * SyntaxError enhancements - Fredrik Lundh - http://www.python.org/pipermail/python-dev/2000-July/012981.html - * interface to poll system call - Andrew Kuchling ! An OO interface to the poll system call will be added to the ! select module. * Compression of Unicode database - Fredrik Lundh ! http://hem.passagen.se/eff/bot.htm#456806 ! * PyErr_SafeFormat / snprintf - owner??? ! Use snprintf to avoid buffer overflows. Need configure hackery ! to discovery if it is available on the current platform and a ! default implementation if it is not. ! http://www.python.org/pipermail/python-dev/2000-April/010051.html * Support for opcode arguments > 2**16 - Charles Waldman ! Source files longer than 32K and sequences with more than 32K ! elements both fail because opcode arguments are limited to ! 16-bit values. * Range literals - Thomas Wouters ! Make range(1, 10, 2) == [1:10:2] ! ! * List comprehensions - Skip Montanaro (Tim Peters for PEP) ! Need a coherent proposal. Lots of confusing discussion going ! on. ! [note: it's not confusing to Guido - tim] * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. - * "import as" - Thomas Wouters - Extend the 'import' and 'from ... import' mechanism to enable - importing a symbol as another name. (Without adding a new keyword.) - - * Merge __getitem__ and __getslice__ - Thomas Wouters - Move __getslice__ functionality into __getitem__, using slice objects, - for normal slices as well as for extended ones. First step: use - getitem if there is no getslice. - * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? * Add \U1234678 escapes in u"" strings - Fredrik Lundh? Open: proposed but not accepted or rejected - * Tim O'Malley's cookie module -- but need different license - * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - Postponed --- 263,295 ---- Accepted and in progress * interface to poll system call - Andrew Kuchling ! SF Patch 100852 * Compression of Unicode database - Fredrik Lundh ! SF Patch 100899 ! * PyErr_Format - Fredrik Lundh ! Make this function safe from buffer overflows. * Support for opcode arguments > 2**16 - Charles Waldman ! SF Patch 100893 * Range literals - Thomas Wouters ! SF Patch 100902 * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? * Add \U1234678 escapes in u"" strings - Fredrik Lundh? + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries Open: proposed but not accepted or rejected * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. Postponed From python-dev@python.org Wed Aug 23 21:07:24 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 13:07:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_dospath,NONE,1.1 Message-ID: <200008232007.NAA13841@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv13816 Added Files: test_dospath Log Message: test case output for dospath regr test --- NEW FILE --- test_dospath No errors. Thank your lucky stars. From python-dev@python.org Wed Aug 23 21:21:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 13:21:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Demo/parser test_parser.py,1.3,1.4 Message-ID: <200008232021.NAA21953@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Demo/parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv21944/Demo/parser Modified Files: test_parser.py Log Message: Sort the list of files processed before running the test on each. Index: test_parser.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/parser/test_parser.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_parser.py 1998/09/14 16:43:53 1.3 --- test_parser.py 2000/08/23 20:21:31 1.4 *************** *** 41,44 **** --- 41,45 ---- import glob args = glob.glob("*.py") + args.sort() map(testFile, args) sys.exit(_numFailed != 0) *************** *** 46,50 **** if __name__ == '__main__': test() - - # - # end of file --- 47,48 ---- From python-dev@python.org Wed Aug 23 22:16:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 14:16:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python Makefile.in,2.25,2.26 Message-ID: <200008232116.OAA02640@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv2632 Modified Files: Makefile.in Log Message: Remove the dependency information for version.o; this is not part of the sources/build process any more. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/Makefile.in,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** Makefile.in 2000/08/01 17:46:22 2.25 --- Makefile.in 2000/08/23 21:16:10 2.26 *************** *** 135,139 **** thread.o: thread.c traceback.o: traceback.c - version.o: version.c # DO NOT DELETE THIS LINE -- mkdep uses it. --- 135,138 ---- From python-dev@python.org Wed Aug 23 22:11:08 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 14:11:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_b1.py,1.24,1.25 Message-ID: <200008232111.OAA32542@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv32407/Lib/test Modified Files: test_b1.py Log Message: style nits Index: test_b1.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_b1.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** test_b1.py 2000/07/14 04:32:09 1.24 --- test_b1.py 2000/08/23 21:11:05 1.25 *************** *** 154,161 **** globals = {'a': 1, 'b': 2} locals = {'b': 200, 'c': 300} ! if eval('a', globals) <> 1: raise TestFailed, "eval(1)" ! if eval('a', globals, locals) <> 1: raise TestFailed, "eval(2)" ! if eval('b', globals, locals) <> 200: raise TestFailed, "eval(3)" ! if eval('c', globals, locals) <> 300: raise TestFailed, "eval(4)" print 'execfile' --- 154,165 ---- globals = {'a': 1, 'b': 2} locals = {'b': 200, 'c': 300} ! if eval('a', globals) <> 1: ! raise TestFailed, "eval(1) == %s" % eval('a', globals) ! if eval('a', globals, locals) <> 1: ! raise TestFailed, "eval(2)" ! if eval('b', globals, locals) <> 200: ! raise TestFailed, "eval(3)" ! if eval('c', globals, locals) <> 300: ! raise TestFailed, "eval(4)" print 'execfile' From python-dev@python.org Thu Aug 24 00:16:13 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 16:16:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.45,2.46 Message-ID: <200008232316.QAA01330@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv31334/Objects Modified Files: abstract.c Log Message: Add extra check on whether 'tp_as_number' is still non-NULL after coercion, in the PyNumber_* functions. Also, remove unnecessary tests from PyNumber_Multiply: after BINOP(), neither argument can be an instance. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.45 retrieving revision 2.46 diff -C2 -r2.45 -r2.46 *** abstract.c 2000/08/17 22:37:32 2.45 --- abstract.c 2000/08/23 23:16:10 2.46 *************** *** 295,299 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_or) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 295,300 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_or) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 314,318 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_xor) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 315,320 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_xor) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 333,337 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_and) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 335,340 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_and) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 352,356 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_lshift) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 355,360 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_lshift) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 371,375 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_rshift) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 375,380 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_rshift) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 395,399 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_add) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 400,405 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_add) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 414,418 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_subtract) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 420,425 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_subtract) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 432,437 **** BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply); if (tp->tp_as_number != NULL && ! w->ob_type->tp_as_sequence != NULL && ! !PyInstance_Check(v)) { /* number*sequence -- swap v and w */ PyObject *tmp = v; --- 439,443 ---- BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply); if (tp->tp_as_number != NULL && ! w->ob_type->tp_as_sequence != NULL) { /* number*sequence -- swap v and w */ PyObject *tmp = v; *************** *** 443,457 **** PyObject *x = NULL; PyObject * (*f)(PyObject *, PyObject *); ! if (PyInstance_Check(v)) { ! /* Instances of user-defined classes get their ! other argument uncoerced, so they may ! implement sequence*number as well as ! number*number. */ ! Py_INCREF(v); ! Py_INCREF(w); ! } ! else if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_multiply) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 449,456 ---- PyObject *x = NULL; PyObject * (*f)(PyObject *, PyObject *); ! if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_multiply) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 490,494 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_divide) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 489,494 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_divide) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 513,517 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_remainder) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 513,518 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_remainder) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 532,536 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_divmod) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 533,538 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_divmod) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 558,562 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v, w, Py_None); else --- 560,565 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v, w, Py_None); else *************** *** 595,599 **** if (PyNumber_Coerce(&w2, &z2) != 0) goto error1; ! if ((f = v1->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v1, w2, z2); else --- 598,603 ---- if (PyNumber_Coerce(&w2, &z2) != 0) goto error1; ! if (v->ob_type->tp_as_number != NULL && ! (f = v1->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v1, w2, z2); else From python-dev@python.org Thu Aug 24 00:31:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 16:31:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.46,2.47 Message-ID: <200008232331.QAA16657@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv15579/Objects Modified Files: abstract.c Log Message: Addendum to previous change: now that 'f' is not unconditionally initialized in the 'if (..)', do so manually. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.46 retrieving revision 2.47 diff -C2 -r2.46 -r2.47 *** abstract.c 2000/08/23 23:16:10 2.46 --- abstract.c 2000/08/23 23:31:34 2.47 *************** *** 292,296 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 292,296 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 312,316 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 312,316 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 332,336 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 332,336 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 352,356 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 352,356 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 372,376 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 372,376 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 397,401 **** else if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 397,401 ---- else if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 417,421 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 417,421 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 448,452 **** if (tp->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 448,452 ---- if (tp->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 486,490 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 486,490 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 510,514 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 510,514 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 530,534 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 530,534 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; From python-dev@python.org Thu Aug 24 01:37:53 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:37:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.24,1.25 Message-ID: <200008240037.RAA25700@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25645/lib Modified Files: libdis.tex Log Message: Charles G. Waldman : Update the dis module documentation to reflect the EXTENDED_ARG opcode. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** libdis.tex 2000/08/21 17:19:00 1.24 --- libdis.tex 2000/08/24 00:37:50 1.25 *************** *** 533,536 **** --- 533,543 ---- \end{opcodedesc} + \begin{opcodedesc}{EXTENDED_ARG}{ext} + Prefixes any opcode which has an argument too big to fit into the + default two bytes. \var{ext} holds two additional bytes which, taken + together with the subsequent opcode's argument, comprise a four-byte + argument, \var {ext} being the two most-significant bytes. + \end{opcodedesc} + \begin{opcodedesc}{CALL_FUNCTION_VAR}{argc} Calls a function. \var{argc} is interpreted as in \code{CALL_FUNCTION}. From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.24,1.25 Message-ID: <200008240032.RAA19736@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Lib Modified Files: dis.py Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** dis.py 2000/08/21 17:18:40 1.24 --- dis.py 2000/08/24 00:32:09 1.25 *************** *** 57,60 **** --- 57,61 ---- n = len(code) i = 0 + extended_arg = 0 while i < n: c = code[i] *************** *** 69,74 **** i = i+1 if op >= HAVE_ARGUMENT: ! oparg = ord(code[i]) + ord(code[i+1])*256 i = i+2 print string.rjust(`oparg`, 5), if op in hasconst: --- 70,78 ---- i = i+1 if op >= HAVE_ARGUMENT: ! oparg = ord(code[i]) + ord(code[i+1])*256 + extended_arg ! extended_arg = 0 i = i+2 + if op == EXTENDED_ARG: + extended_arg = oparg*65536L print string.rjust(`oparg`, 5), if op in hasconst: *************** *** 259,262 **** --- 263,268 ---- def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + def_op('EXTENDED_ARG', 143) + EXTENDED_ARG = 143 def _test(): From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include node.h,2.16,2.17 opcode.h,2.28,2.29 Message-ID: <200008240032.RAA19731@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Include Modified Files: node.h opcode.h Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: node.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/node.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** node.h 2000/07/08 23:37:28 2.16 --- node.h 2000/08/24 00:32:09 2.17 *************** *** 20,25 **** short n_type; char *n_str; ! short n_lineno; ! short n_nchildren; struct _node *n_child; } node; --- 20,25 ---- short n_type; char *n_str; ! int n_lineno; ! int n_nchildren; struct _node *n_child; } node; Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** opcode.h 2000/08/21 15:36:27 2.28 --- opcode.h 2000/08/24 00:32:09 2.29 *************** *** 131,134 **** --- 131,137 ---- #define CALL_FUNCTION_VAR_KW 142 /* #args + (#kwargs<<8) */ + /* Support for opargs more than 16 bits long */ + #define EXTENDED_ARG 143 + /* Comparison operator codes (argument to COMPARE_OP) */ enum cmp_op {LT, LE, EQ, NE, GT, GE, IN, NOT_IN, IS, IS_NOT, EXC_MATCH, BAD}; From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser node.c,2.12,2.13 Message-ID: <200008240032.RAA19740@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Parser Modified Files: node.c Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: node.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/node.c,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** node.c 2000/07/22 19:20:54 2.12 --- node.c 2000/08/24 00:32:09 2.13 *************** *** 9,13 **** --- 9,18 ---- ******************************************************************/ + #ifdef HAVE_LIMITS_H #include + #endif + #ifndef INT_MAX + #define INT_MAX 2147483647 + #endif /* Parse tree node implementation */ *************** *** 40,44 **** register int nch1 = nch+1; register node *n; ! if (nch == SHRT_MAX || nch < 0) return E_OVERFLOW; if (XXXROUNDUP(nch) < nch1) { --- 45,49 ---- register int nch1 = nch+1; register node *n; ! if (nch == INT_MAX || nch < 0) return E_OVERFLOW; if (XXXROUNDUP(nch) < nch1) { From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.193,2.194 compile.c,2.132,2.133 Message-ID: <200008240032.RAA19748@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Python Modified Files: ceval.c compile.c Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.193 retrieving revision 2.194 diff -C2 -r2.193 -r2.194 *** ceval.c 2000/08/21 15:44:01 2.193 --- ceval.c 2000/08/24 00:32:09 2.194 *************** *** 614,617 **** --- 614,618 ---- if (HAS_ARG(opcode)) oparg = NEXTARG(); + dispatch_opcode: #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS *************** *** 1751,1754 **** --- 1752,1760 ---- break; + case EXTENDED_ARG: + opcode = NEXTOP(); + oparg = oparg<<16 | NEXTARG(); + goto dispatch_opcode; + break; default: Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.132 retrieving revision 2.133 diff -C2 -r2.132 -r2.133 *** compile.c 2000/08/22 02:43:07 2.132 --- compile.c 2000/08/24 00:32:09 2.133 *************** *** 37,40 **** --- 37,43 ---- #include #endif + #ifndef INT_MAX + #define INT_MAX 2147483647 + #endif /* Three symbols from graminit.h are also defined in Python.h, with *************** *** 573,576 **** --- 576,580 ---- com_addoparg(struct compiling *c, int op, int arg) { + int extended_arg = arg >> 16; if (op == SET_LINENO) { com_set_lineno(c, arg); *************** *** 578,581 **** --- 582,590 ---- return; } + if (extended_arg){ + com_addbyte(c, EXTENDED_ARG); + com_addint(c, extended_arg); + arg &= 0xffff; + } com_addbyte(c, op); com_addint(c, arg); *************** *** 607,611 **** dist = target - (anchor+2); code[anchor] = dist & 0xff; ! code[anchor+1] = dist >> 8; if (!prev) break; --- 616,627 ---- dist = target - (anchor+2); code[anchor] = dist & 0xff; ! dist >>= 8; ! code[anchor+1] = dist; ! dist >>= 8; ! if (dist) { ! com_error(c, PyExc_SystemError, ! "com_backpatch: offset too large"); ! break; ! } if (!prev) break; *************** *** 3365,3368 **** --- 3381,3385 ---- if (HAS_ARG(opcode)) oparg = NEXTARG(); + dispatch_opcode1: switch (opcode) { case STORE_NAME: *************** *** 3375,3378 **** --- 3392,3400 ---- c->c_flags &= ~CO_OPTIMIZED; break; + case EXTENDED_ARG: + opcode = NEXTOP(); + oparg = oparg<<16 | NEXTARG(); + goto dispatch_opcode1; + break; } } *************** *** 3390,3393 **** --- 3412,3416 ---- if (HAS_ARG(opcode)) oparg = NEXTARG(); + dispatch_opcode2: if (opcode == LOAD_NAME || opcode == STORE_NAME || *************** *** 3404,3407 **** --- 3427,3432 ---- } i = PyInt_AsLong(v); + if (i >> 16) /* too big for 2 bytes */ + continue; switch (opcode) { case LOAD_NAME: cur_instr[0] = LOAD_FAST; break; *************** *** 3410,3414 **** } cur_instr[1] = i & 0xff; ! cur_instr[2] = (i>>8) & 0xff; } } --- 3435,3444 ---- } cur_instr[1] = i & 0xff; ! cur_instr[2] = i >> 8; ! } ! if (opcode == EXTENDED_ARG) { ! opcode = NEXTOP(); ! oparg = oparg<<16 | NEXTARG(); ! goto dispatch_opcode2; } } From python-dev@python.org Thu Aug 24 01:35:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:35:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_longexp,1.2,1.3 Message-ID: <200008240035.RAA23376@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv23314/Lib/test/output Modified Files: test_longexp Log Message: Charles G. Waldman : Update the test suite for the changes introduced by the EXTENDED_ARG opcode. This closes the regression test changes of SourceForge patch #100893. Index: test_longexp =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_longexp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_longexp 2000/08/15 15:51:18 1.2 --- test_longexp 2000/08/24 00:35:38 1.3 *************** *** 1,2 **** test_longexp ! Caught SyntaxError for long expression: expression too long (line 1) --- 1,2 ---- test_longexp ! 65580 From python-dev@python.org Thu Aug 24 01:35:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:35:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_longexp.py,1.1,1.2 Message-ID: <200008240035.RAA23370@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv23314/Lib/test Modified Files: test_longexp.py Log Message: Charles G. Waldman : Update the test suite for the changes introduced by the EXTENDED_ARG opcode. This closes the regression test changes of SourceForge patch #100893. Index: test_longexp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_longexp.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_longexp.py 2000/06/20 19:13:27 1.1 --- test_longexp.py 2000/08/24 00:35:38 1.2 *************** *** 1,18 **** ! REPS = 8192 ! try: ! eval("2+2+" * REPS + "+3.14159265") ! except SyntaxError, msg: ! print "Caught SyntaxError for long expression:", msg ! else: ! print "Long expression did not raise SyntaxError" ! ! ## This test prints "s_push: parser stack overflow" on stderr, ! ## which seems to confuse the test harness ! ##try: ! ## eval("(2+" * REPS + "0" + ")" * REPS) ! ##except SyntaxError: ! ## pass ! ##else: ! ## print "Deeply nested expression did not raised SyntaxError" ! --- 1,4 ---- ! REPS = 65580 ! l = eval("[" + "2," * REPS + "]") ! print len(l) From python-dev@python.org Thu Aug 24 01:50:30 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:50:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc TODO,1.30,1.31 Message-ID: <200008240050.RAA06285@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv6226/Doc Modified Files: TODO Log Message: Make sure Thomas Wouters has enough to do. ;-) (Some of this is in-progress; this also serves as a reminded to me to check this out once it is written.) Index: TODO =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/TODO,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** TODO 2000/08/17 22:32:01 1.30 --- TODO 2000/08/24 00:50:27 1.31 *************** *** 46,49 **** --- 46,53 ---- library ref.? (cmp() function). [Jeremy Hylton] + * Range literals need to be documented. [Thomas Wouters] + + * Augmented assignment. [Thomas Wouters] + Library Reference ----------------- From python-dev@python.org Thu Aug 24 02:01:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 18:01:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.100,1.101 Message-ID: <200008240101.SAA18352@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv18265 Modified Files: urllib.py Log Message: Randall Hopper >: Make it easier to use HTTP POST with urlretrieve(). Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.100 retrieving revision 1.101 diff -C2 -r1.100 -r1.101 *** urllib.py 2000/08/22 03:00:52 1.100 --- urllib.py 2000/08/24 01:01:26 1.101 *************** *** 62,70 **** else: return _urlopener.open(url, data) ! def urlretrieve(url, filename=None, reporthook=None): global _urlopener if not _urlopener: _urlopener = FancyURLopener() ! return _urlopener.retrieve(url, filename, reporthook) def urlcleanup(): if _urlopener: --- 62,70 ---- else: return _urlopener.open(url, data) ! def urlretrieve(url, filename=None, reporthook=None, data=None): global _urlopener if not _urlopener: _urlopener = FancyURLopener() ! return _urlopener.retrieve(url, filename, reporthook, data) def urlcleanup(): if _urlopener: *************** *** 187,191 **** except IOError, msg: pass ! fp = self.open(url) headers = fp.info() if not filename: --- 187,191 ---- except IOError, msg: pass ! fp = self.open(url, data) headers = fp.info() if not filename: From python-dev@python.org Thu Aug 24 02:06:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 18:06:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.24,1.25 Message-ID: <200008240106.SAA26293@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv26227/lib Modified Files: liburllib.tex Log Message: Moshe Zadka : Documentation updates for urlretrieve() and URLopener.retrieve(), to reflect Randall Hopper's patch for those functions. This closes SourceForge patch #100837. Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** liburllib.tex 2000/07/28 13:51:27 1.24 --- liburllib.tex 2000/08/24 01:06:40 1.25 *************** *** 116,119 **** --- 116,125 ---- FTP servers which do not return a file size in response to a retrieval request. + + If the \var{url} uses the \file{http:} scheme identifier, the optional + \var{data} argument may be given to specify a \code{POST} request + (normally the request type is \code{GET}). The \var{data} argument + must in standard \file{application/x-www-form-urlencoded} format; + see the \function{urlencode()} function below. \end{funcdesc} *************** *** 289,292 **** --- 295,304 ---- chunk of data is read from the network. \var{reporthook} is ignored for local URLs. + + If the \var{url} uses the \file{http:} scheme identifier, the optional + \var{data} argument may be given to specify a \code{POST} request + (normally the request type is \code{GET}). The \var{data} argument + must in standard \file{application/x-www-form-urlencoded} format; + see the \function{urlencode()} function below. \end{methoddesc} From python-dev@python.org Thu Aug 24 04:26:44 2000 From: python-dev@python.org (Tim Peters) Date: Wed, 23 Aug 2000 20:26:44 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0223.txt,1.3,1.4 Message-ID: <200008240326.UAA09275@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9254 Modified Files: pep-0223.txt Log Message: Completed, about to post. Index: pep-0223.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0223.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0223.txt 2000/08/23 06:03:29 1.3 --- pep-0223.txt 2000/08/24 03:26:42 1.4 *************** *** 3,11 **** Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Status: Draft Type: Standards Track Python-Version: 2.0 Created: 20-Aug-2000 ! Post-History: --- 3,11 ---- Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Status: Active Type: Standards Track Python-Version: 2.0 Created: 20-Aug-2000 ! Post-History: 23-Aug-2000 *************** *** 18,21 **** --- 18,199 ---- compatibility with Perl regular expressions, and with minimal risk to existing code. + + + Syntax + + The syntax of \x escapes, in all flavors of non-raw strings, becomes + + \xhh + + where h is a hex digit (0-9, a-f, A-F). The exact syntax in 1.5.2 is + not clearly specified in the Reference Manual; it says + + \xhh... + + implying "two or more" hex digits, but one-digit forms are also + accepted by the 1.5.2 compiler, and a plain \x is "expanded" to + itself (i.e., a backslash followed by the letter x). It's unclear + whether the Reference Manual intended either of the 1-digit or + 0-digit behaviors. + + + Semantics + + In an 8-bit non-raw string, + \xij + expands to the character + chr(int(ij, 16)) + Note that this is the same as in 1.6 and before. + + In a Unicode string, + \xij + acts the same as + \u00ij + i.e. it expands to the obvious Latin-1 character from the initial + segment of the Unicode space. + + An \x not followed by at least two hex digits is a compile-time error, + specifically ValueError in 8-bit strings, and UnicodeError (a subclass + of ValueError) in Unicode strings. Note that if an \x is followed by + more than two hex digits, only the first two are "consumed". In 1.6 + and before all but the *last* two were silently ignored. + + + Example + + In 1.5.2: + + >>> "\x123465" # same as "\x65" + 'e' + >>> "\x65" + 'e' + >>> "\x1" + '\001' + >>> "\x\x" + '\\x\\x' + >>> + + In 2.0: + + >>> "\x123465" # \x12 -> \022, "3456" left alone + '\0223456' + >>> "\x65" + 'e' + >>> "\x1" + [ValueError is raised] + >>> "\x\x" + [ValueError is raised] + >>> + + + History and Rationale + + \x escapes were introduced in C as a way to specify variable-width + character encodings. Exactly which encodings those were, and how many + hex digits they required, was left up to each implementation. The + language simply stated that \x "consumed" *all* hex digits following, + and left the meaning up to each implementation. So, in effect, \x in C + is a standard hook to supply platform-defined behavior. + + Because Python explicitly aims at platform independence, the \x escape + in Python (up to and including 1.6) has been treated the same way + across all platforms: all *except* the last two hex digits were + silently ignored. So the only actual use for \x escapes in Python was + to specify a single byte using hex notation. + + Larry Wall appears to have realized that this was the only real use for + \x escapes in a platform-independent language, as the proposed rule for + Python 2.0 is in fact what Perl has done from the start (although you + need to run in Perl -w mode to get warned about \x escapes with fewer + than 2 hex digits following -- it's clearly more Pythonic to insist on + 2 all the time). + + When Unicode strings were introduced to Python, \x was generalized so + as to ignore all but the last *four* hex digits in Unicode strings. + This caused a technical difficulty for the new regular expression engine: + SRE tries very hard to allow mixing 8-bit and Unicode patterns and + strings in intuitive ways, and it no longer had any way to guess what, + for example, r"\x123456" should mean as a pattern: is it asking to match + the 8-bit character \x56 or the Unicode character \u3456? + + There are hacky ways to guess, but it doesn't end there. The ISO C99 + standard also introduces 8-digit \U12345678 escapes to cover the entire + ISO 10646 character space, and it's also desired that Python 2 support + that from the start. But then what are \x escapes supposed to mean? + Do they ignore all but the last *eight* hex digits then? And if less + than 8 following in a Unicode string, all but the last 4? And if less + than 4, all but the last 2? + + This was getting messier by the minute, and the proposal cuts the + Gordian knot by making \x simpler instead of more complicated. Note + that the 4-digit generalization to \xijkl in Unicode strings was also + redundant, because it meant exactly the same thing as \uijkl in Unicode + strings. It's more Pythonic to have just one obvious way to specify a + Unicode character via hex notation. + + + Development and Discussion + + The proposal was worked out among Guido van Rossum, Fredrik Lundh and + Tim Peters in email. It was subsequently explained and disussed on + Python-Dev under subject "Go \x yourself", starting 2000-08-03. + Response was overwhelmingly positive; no objections were raised. + + + Backward Compatibility + + Changing the meaning of \x escapes does carry risk of breaking existing + code, although no instances of incompabitility have yet been discovered. + The risk is believed to be minimal. + + Tim Peters verified that, except for pieces of the standard test suite + deliberately provoking end cases, there are no instances of \xabcdef... + with fewer or more than 2 hex digits following, in either the Python + CVS development tree, or in assorted Python packages sitting on his + machine. + + It's unlikely there are any with fewer than 2, because the Reference + Manual implied they weren't legal (although this is debatable!). If + there are any with more than 2, Guido is ready to argue they were buggy + anyway <0.9 wink>. + + Guido reported that the O'Reilly Python books *already* document that + Python works the proposed way, likely due to their Perl editing + heritage (as above, Perl worked (very close to) the proposed way from + its start). + + Finn Bock reported that what JPython does with \x escapes is + unpredictable today. This proposal gives a clear meaning that can be + consistently and easily implemented across all Python implementations. + + + Effects on Other Tools + + Believed to be none. The candidates for breakage would mostly be + parsing tools, but the author knows of none that worry about the + internal structure of Python strings beyond the approximation "when + there's a backslash, swallow the next character". Tim Peters checked + python-mode.el, the std tokenize.py and pyclbr.py, and the IDLE syntax + coloring subsystem, and believes there's no need to change any of + them. Tools like tabnanny.py and checkappend.py inherit their immunity + from tokenize.py. + + + Reference Implementation + + The code changes are so simple that a separate patch will not be produced. + Fredrik Lundh is writing the code, is an expert in the area, and will + simply check the changes in before 2.0b1 is released. + + + BDFL Pronouncements + + Yes, ValueError, not SyntaxError. "Problems with literal interpretations + traditionally raise 'runtime' exceptions rather than syntax errors." + + + Copyright + + This document has been placed in the public domain. From python-dev@python.org Thu Aug 24 05:58:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 21:58:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburlparse.tex,1.16,1.17 Message-ID: <200008240458.VAA23681@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv23674/lib Modified Files: liburlparse.tex Log Message: Move references to RFCs to a "See also" section for consistency with other sections of the library reference. Index: liburlparse.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburlparse.tex,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** liburlparse.tex 2000/07/16 19:01:10 1.16 --- liburlparse.tex 2000/08/24 04:58:25 1.17 *************** *** 19,24 **** The module has been designed to match the Internet RFC on Relative Uniform Resource Locators (and discovered a bug in an earlier ! draft!). Refer to \rfc{1808} for details on relative ! URLs and \rfc{1738} for information on basic URL syntax. It defines the following functions: --- 19,23 ---- The module has been designed to match the Internet RFC on Relative Uniform Resource Locators (and discovered a bug in an earlier ! draft!). It defines the following functions: *************** *** 41,45 **** urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') \end{verbatim} ! % yields the tuple --- 40,44 ---- urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') \end{verbatim} ! yields the tuple *************** *** 47,51 **** ('http', 'www.cwi.nl:80', '/%7Eguido/Python.html', '', '', '') \end{verbatim} ! % If the \var{default_scheme} argument is specified, it gives the default addressing scheme, to be used only if the URL string does not --- 46,50 ---- ('http', 'www.cwi.nl:80', '/%7Eguido/Python.html', '', '', '') \end{verbatim} ! If the \var{default_scheme} argument is specified, it gives the default addressing scheme, to be used only if the URL string does not *************** *** 76,80 **** urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') \end{verbatim} ! % yields the string --- 75,79 ---- urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') \end{verbatim} ! yields the string *************** *** 86,87 **** --- 85,98 ---- \code{urlparse()}. \end{funcdesc} + + + \begin{seealso} + \seerfc{1738}{Uniform Resource Locators (URL)}{ + This specifies the formal syntax and semantics of absolute + URLs.} + \seerfc{1808}{Relative Uniform Resource Locators}{ + This Request For Comments includes the rules for joining an + absolute and a relative URL, including a fair normal of + ``Abnormal Examples'' which govern the treatment of border + cases.} + \end{seealso} From python-dev@python.org Thu Aug 24 12:52:36 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 04:52:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib Cookie.py,1.1,1.2 Message-ID: <200008241152.EAA28431@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv27590 Modified Files: Cookie.py Log Message: Updated version of Cookie.py (rev. 2.29) from timo Index: Cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/Cookie.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Cookie.py 2000/08/19 13:01:19 1.1 --- Cookie.py 2000/08/24 11:52:33 1.2 *************** *** 27,31 **** #### # ! # $Id$ # by Timothy O'Malley # --- 27,31 ---- #### # ! # Id: Cookie.py,v 2.29 2000/08/23 05:28:49 timo Exp # by Timothy O'Malley # *************** *** 35,39 **** # # The original idea to treat Cookies as a dictionary came from ! # Dave Mitchel (davem@magnet.com) in 1995, when he released the # first version of nscookie.py. # --- 35,39 ---- # # The original idea to treat Cookies as a dictionary came from ! # Dave Mitchell (davem@magnet.com) in 1995, when he released the # first version of nscookie.py. # *************** *** 70,74 **** >>> C["fig"] = "newton" >>> C["sugar"] = "wafer" ! >>> C Set-Cookie: sugar=wafer; Set-Cookie: fig=newton; --- 70,74 ---- >>> C["fig"] = "newton" >>> C["sugar"] = "wafer" ! >>> print C Set-Cookie: sugar=wafer; Set-Cookie: fig=newton; *************** *** 93,97 **** >>> C = Cookie.SmartCookie() >>> C.load("chips=ahoy; vienna=finger") ! >>> C Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; --- 93,97 ---- >>> C = Cookie.SmartCookie() >>> C.load("chips=ahoy; vienna=finger") ! >>> print C Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; *************** *** 103,107 **** >>> C = Cookie.SmartCookie() >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') ! >>> C Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; --- 103,107 ---- >>> C = Cookie.SmartCookie() >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') ! >>> print C Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; *************** *** 113,117 **** >>> C["oreo"] = "doublestuff" >>> C["oreo"]["path"] = "/" ! >>> C Set-Cookie: oreo="doublestuff"; Path=/; --- 113,117 ---- >>> C["oreo"] = "doublestuff" >>> C["oreo"]["path"] = "/" ! >>> print C Set-Cookie: oreo="doublestuff"; Path=/; *************** *** 145,149 **** >>> C["string"].value 'seven' ! >>> C Set-Cookie: number=7; Set-Cookie: string=seven; --- 145,149 ---- >>> C["string"].value 'seven' ! >>> print C Set-Cookie: number=7; Set-Cookie: string=seven; *************** *** 166,170 **** >>> C["string"].value 'seven' ! >>> C Set-Cookie: number="I7\012."; Set-Cookie: string="S'seven'\012p1\012."; --- 166,170 ---- >>> C["string"].value 'seven' ! >>> print C Set-Cookie: number="I7\012."; Set-Cookie: string="S'seven'\012p1\012."; *************** *** 191,195 **** >>> C["string"].value 'seven' ! >>> C Set-Cookie: number="I7\012."; Set-Cookie: string=seven; --- 191,195 ---- >>> C["string"].value 'seven' ! >>> print C Set-Cookie: number="I7\012."; Set-Cookie: string=seven; *************** *** 310,314 **** def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, --- 310,314 ---- def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, *************** *** 318,324 **** # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote --- 318,324 ---- # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote *************** *** 441,445 **** def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey --- 441,445 ---- def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey *************** *** 463,468 **** return "%s %s" % ( header, self.OutputString(attrs) ) ! __repr__ = output def js_output(self, attrs=None): # Print javascript --- 463,472 ---- return "%s %s" % ( header, self.OutputString(attrs) ) ! __str__ = output + def __repr__(self): + return '<%s: %s=%s>' % (self.__class__.__name__, + self.key, repr(self.value) ) + def js_output(self, attrs=None): # Print javascript *************** *** 489,493 **** attrs = self._reserved_keys for K,V in self.items(): ! if not V: continue if K not in attrs: continue if K == "expires" and type(V) == type(1): --- 493,497 ---- attrs = self._reserved_keys for K,V in self.items(): ! if V == "": continue if K not in attrs: continue if K == "expires" and type(V) == type(1): *************** *** 586,591 **** # end output ! __repr__ = output ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" --- 590,601 ---- # end output ! __str__ = output ! ! def __repr__(self): ! L = [] ! for K,V in self.items(): ! L.append( '%s=%s' % (K,repr(V.value) ) ) ! return '<%s: %s>' % (self.__class__.__name__, string.join(L)) ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" *************** *** 631,635 **** elif string.lower(K) in Morsel._reserved_keys: if M: ! M[ K ] = V else: rval, cval = self.value_decode(V) --- 641,645 ---- elif string.lower(K) in Morsel._reserved_keys: if M: ! M[ K ] = _unquote(V) else: rval, cval = self.value_decode(V) *************** *** 637,641 **** M = self[K] ! return # end __ParseString # end BaseCookie class --- 647,651 ---- M = self[K] ! return # end __ParseString # end BaseCookie class *************** *** 717,718 **** --- 727,732 ---- # should add a test routine? # + + #Local Variables: + #tab-width: 4 + #end: From python-dev@python.org Thu Aug 24 12:56:40 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 04:56:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cookie,1.2,1.3 Message-ID: <200008241156.EAA32267@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv31489/output Modified Files: test_cookie Log Message: Updated test suite: test repr() and str() of cookies, and test metadata fields with quoted values (as in Path="/acme") Index: test_cookie =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_cookie,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_cookie 2000/08/19 15:57:33 1.2 --- test_cookie 2000/08/24 11:56:19 1.3 *************** *** 1,9 **** --- 1,14 ---- test_cookie + Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; vienna 'finger' 'finger' + Set-Cookie: vienna=finger; chips 'ahoy' 'ahoy' + Set-Cookie: chips=ahoy; + Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; keebler 'E=mc2; L="Loves"; fudge=\012;' 'E=mc2; L="Loves"; fudge=\012;' + Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme; From python-dev@python.org Thu Aug 24 12:56:40 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 04:56:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cookie.py,1.2,1.3 Message-ID: <200008241156.EAA32295@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv31489 Modified Files: test_cookie.py Log Message: Updated test suite: test repr() and str() of cookies, and test metadata fields with quoted values (as in Path="/acme") Index: test_cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_cookie.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_cookie.py 2000/08/19 15:57:32 1.2 --- test_cookie.py 2000/08/24 11:56:18 1.3 *************** *** 14,21 **** for data, dict in cases: C = Cookie.SimpleCookie() ; C.load(data) ! print C for k, v in dict.items(): print ' ', k, repr( C[k].value ), repr(v) assert C[k].value == v C = Cookie.SimpleCookie() --- 14,23 ---- for data, dict in cases: C = Cookie.SimpleCookie() ; C.load(data) ! print repr(C) ! print str(C) for k, v in dict.items(): print ' ', k, repr( C[k].value ), repr(v) assert C[k].value == v + print C[k] C = Cookie.SimpleCookie() *************** *** 29,31 **** --- 31,40 ---- print C.js_output() print C.js_output(['path']) + + # Try cookie with quoted meta-data + C = Cookie.SimpleCookie() + C.load('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"') + assert C['Customer'].value == 'WILE_E_COYOTE' + assert C['Customer']['version'] == '1' + assert C['Customer']['path'] == '/acme' From python-dev@python.org Thu Aug 24 15:16:13 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 24 Aug 2000 07:16:13 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0224.txt,1.1,1.2 Message-ID: <200008241416.HAA13818@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9223 Modified Files: pep-0224.txt Log Message: Completed final thought and bumped the Python version number to 2.1. The great thing about this PEP is that it is forward compatible :-) Index: pep-0224.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0224.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0224.txt 2000/08/23 16:50:47 1.1 --- pep-0224.txt 2000/08/24 14:16:10 1.2 *************** *** 5,9 **** Status: Draft Type: Standards Track ! Python-Version: 2.0 Created: 23-Aug-2000 Post-History: --- 5,9 ---- Status: Draft Type: Standards Track ! Python-Version: 2.1 Created: 23-Aug-2000 Post-History: *************** *** 106,110 **** --- 106,113 ---- C.__doc__b__ == "attribute C.b doc-string (2)" + A patch to the current CVS version of Python 2.0 which implements + the above is available on SourceForge at [1]. + Caveats of the Implementation *************** *** 131,135 **** Since the definition of method "x" currently does not reset the used assignment name variable, it is still valid when the compiler ! reaches [TBD: please finish your thought!] --- 134,142 ---- Since the definition of method "x" currently does not reset the used assignment name variable, it is still valid when the compiler ! reaches the docstring "b's doc string" and thus assigns the string ! to __doc__b__. ! ! A possible solution to this problem would be resetting the name ! variable for all non-expression nodes. *************** *** 141,145 **** References ! [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=XXX&group_id=5470 --- 148,152 ---- References ! [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=101264&group_id=5470 From python-dev@python.org Thu Aug 24 15:40:38 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 07:40:38 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib Cookie.py,1.2,1.3 Message-ID: <200008241440.HAA29334@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv29318 Modified Files: Cookie.py Log Message: Whitespace cleanup; now passes the regression test (the last checkin made it fail on a TabError (inconsistent tab/space usage)). Removed a comment about including a test since there is a regression test for this module. Index: Cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/Cookie.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Cookie.py 2000/08/24 11:52:33 1.2 --- Cookie.py 2000/08/24 14:40:35 1.3 *************** *** 310,314 **** def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, --- 310,314 ---- def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, *************** *** 318,324 **** # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote --- 318,324 ---- # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote *************** *** 340,344 **** # Remove the "s str = str[1:-1] ! # Check for special sequences. Examples: # \012 --> \n --- 340,344 ---- # Remove the "s str = str[1:-1] ! # Check for special sequences. Examples: # \012 --> \n *************** *** 422,426 **** } _reserved_keys = _reserved.keys() ! def __init__(self): # Set defaults --- 422,426 ---- } _reserved_keys = _reserved.keys() ! def __init__(self): # Set defaults *************** *** 441,445 **** def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey --- 441,445 ---- def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey *************** *** 468,472 **** return '<%s: %s=%s>' % (self.__class__.__name__, self.key, repr(self.value) ) ! def js_output(self, attrs=None): # Print javascript --- 468,472 ---- return '<%s: %s=%s>' % (self.__class__.__name__, self.key, repr(self.value) ) ! def js_output(self, attrs=None): # Print javascript *************** *** 485,489 **** result = [] RA = result.append ! # First, the key=value pair RA("%s=%s;" % (self.key, self.coded_value)) --- 485,489 ---- result = [] RA = result.append ! # First, the key=value pair RA("%s=%s;" % (self.key, self.coded_value)) *************** *** 503,507 **** else: RA("%s=%s;" % (self._reserved[K], V)) ! # Return the result return string.join(result, " ") --- 503,507 ---- else: RA("%s=%s;" % (self._reserved[K], V)) ! # Return the result return string.join(result, " ") *************** *** 543,547 **** # A container class for a set of Morsels # ! def value_decode(self, val): """real_value, coded_value = value_decode(STRING) --- 543,547 ---- # A container class for a set of Morsels # ! def value_decode(self, val): """real_value, coded_value = value_decode(STRING) *************** *** 563,567 **** return strval, strval # end value_encode ! def __init__(self, input=None): UserDict.__init__(self) --- 563,567 ---- return strval, strval # end value_encode ! def __init__(self, input=None): UserDict.__init__(self) *************** *** 597,601 **** L.append( '%s=%s' % (K,repr(V.value) ) ) return '<%s: %s>' % (self.__class__.__name__, string.join(L)) ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" --- 597,601 ---- L.append( '%s=%s' % (K,repr(V.value) ) ) return '<%s: %s>' % (self.__class__.__name__, string.join(L)) ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" *************** *** 618,622 **** return # end load() ! def __ParseString(self, str, patt=_CookiePattern): i = 0 # Our starting point --- 618,622 ---- return # end load() ! def __ParseString(self, str, patt=_CookiePattern): i = 0 # Our starting point *************** *** 646,651 **** self.__set(K, rval, cval) M = self[K] - - return # end __ParseString # end BaseCookie class --- 646,649 ---- *************** *** 675,679 **** Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! --- 673,677 ---- Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! *************** *** 695,699 **** Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! --- 693,697 ---- Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! *************** *** 723,730 **** - - # - # should add a test routine? - # #Local Variables: --- 721,724 ---- From python-dev@python.org Thu Aug 24 17:18:07 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 24 Aug 2000 09:18:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.101,1.102 Message-ID: <200008241618.JAA25491@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25459 Modified Files: urllib.py Log Message: Promote the server version from a local variable to a class variable, so that a subclass can override it. This partly addresses Bug #112634 -- but the documentation is still wrong, since it suggests that you can set self.version *after* calling the base class __init__. In fact it must be done *before*. I'll fix that too. Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.101 retrieving revision 1.102 diff -C2 -r1.101 -r1.102 *** urllib.py 2000/08/24 01:01:26 1.101 --- urllib.py 2000/08/24 16:18:04 1.102 *************** *** 29,33 **** ! __version__ = '1.12' # XXX This version is not always updated :-( MAXFTPCACHE = 10 # Trim the ftp cache beyond this size --- 29,33 ---- ! __version__ = '1.13' # XXX This version is not always updated :-( MAXFTPCACHE = 10 # Trim the ftp cache beyond this size *************** *** 83,86 **** --- 83,88 ---- __tempfiles = None + version = "Python-urllib/%s" % __version__ + # Constructor def __init__(self, proxies=None, **x509): *************** *** 91,96 **** self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') ! server_version = "Python-urllib/%s" % __version__ ! self.addheaders = [('User-agent', server_version)] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() --- 93,97 ---- self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') ! self.addheaders = [('User-agent', self.version)] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() From python-dev@python.org Thu Aug 24 17:20:35 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 24 Aug 2000 09:20:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.25,1.26 Message-ID: <200008241620.JAA26854@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv26819 Modified Files: liburllib.tex Log Message: Addresses the other half of Bug #112634 -- the documentation suggested that you can set self.version *after* calling the base class __init__. In fact it must be done *before*. (Fred, maybe the version class variable should be documented now?) Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** liburllib.tex 2000/08/24 01:06:40 1.25 --- liburllib.tex 2000/08/24 16:20:32 1.26 *************** *** 177,182 **** class AppURLopener(urllib.FancyURLopener): def __init__(self, *args): - apply(urllib.FancyURLopener.__init__, (self,) + args) self.version = "App/1.7" urllib._urlopener = AppURLopener() --- 177,182 ---- class AppURLopener(urllib.FancyURLopener): def __init__(self, *args): self.version = "App/1.7" + apply(urllib.FancyURLopener.__init__, (self,) + args) urllib._urlopener = AppURLopener() From python-dev@python.org Thu Aug 24 19:11:24 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 11:11:24 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.96,1.97 Message-ID: <200008241811.LAA19183@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv19156 Modified Files: Makefile.in Log Message: Rene Liebscher : Install the scripts in the BeOS directory, allowing use from the distutils on BeOS systems. The target location has been adjusted to match that used for the AIX helper scripts. This closes SourceForge patch #101207. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.96 retrieving revision 1.97 diff -C2 -r1.96 -r1.97 *** Makefile.in 2000/08/17 11:38:17 1.96 --- Makefile.in 2000/08/24 18:11:21 1.97 *************** *** 406,409 **** --- 406,426 ---- else true; \ fi + @if [ "$(MACHDEP)" == "beos" ] ; then \ + echo; echo "Installing support files for building shared extension modules on BeOS:"; \ + $(INSTALL_DATA) BeOS/README $(LIBPL)/README; \ + echo; echo "$(LIBPL)/README"; \ + $(INSTALL_DATA) BeOS/README.readline-2.2 $(LIBPL)/README.readline-2.2; \ + echo "$(LIBPL)/README.readline-2.2"; \ + $(INSTALL_DATA) BeOS/dl_export.h $(LIBPL)/dl_export.h; \ + echo "$(LIBPL)/dl_export.h"; \ + $(INSTALL_PROGRAM) BeOS/ar-fake $(LIBPL)/ar-fake; \ + echo "$(LIBPL)/ar-fake"; \ + $(INSTALL_PROGRAM) BeOS/linkcc $(LIBPL)/linkcc; \ + echo "$(LIBPL)/linkcc"; \ + $(INSTALL_PROGRAM) BeOS/linkmodule $(LIBPL)/linkmodule; \ + echo "$(LIBPL)/linkmodule"; \ + echo; echo "See BeOS/README for details."; \ + else true; \ + fi # Install the dynamically loadable modules *************** *** 570,571 **** --- 587,589 ---- -o -name MANIFEST \ -o -print + # IF YOU PUT ANYTHING HERE IT WILL GO AWAY From python-dev@python.org Thu Aug 24 21:06:07 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:06:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.25,1.26 Message-ID: <200008242006.NAA12727@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12418/lib Modified Files: libdis.tex Log Message: Rough and incomplete documentation on augmented assignment, which follows shortly. Markup also needs checking. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** libdis.tex 2000/08/24 00:37:50 1.25 --- libdis.tex 2000/08/24 20:06:03 1.26 *************** *** 131,134 **** --- 131,139 ---- \end{opcodedesc} + \begin{opcodedesc}{ROT_FOUR}{} + Lifts second, third and forth stack item one position up, moves top down to + position four. + \end{opcodedesc} + \begin{opcodedesc}{DUP_TOP}{} Duplicates the reference on top of the stack. *************** *** 210,213 **** --- 215,267 ---- \end{opcodedesc} + In-place operations are like binary operations, in that they remove TOS and + TOS1, and push the result back on the stack, but the operation is done + in-place when TOS1 supports it, and the resulting TOS may be (but does not + have to be) the original TOS1. + + \begin{opcodedesc}{INPLACE_POWER}{} + Implements in-place \code{TOS = TOS1 ** TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_MULTIPLY}{} + Implements in-place \code{TOS = TOS1 * TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_DIVIDE}{} + Implements in-place \code{TOS = TOS1 / TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_MODULO}{} + Implements in-place \code{TOS = TOS1 \%{} TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_ADD}{} + Implements in-place \code{TOS = TOS1 + TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_SUBTRACT}{} + Implements in-place \code{TOS = TOS1 - TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_LSHIFT}{} + Implements in-place \code{TOS = TOS1 << TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_RSHIFT}{} + Implements in-place \code{TOS = TOS1 >> TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_AND}{} + Implements in-place \code{TOS = TOS1 \&\ TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_XOR}{} + Implements in-place \code{TOS = TOS1 \^\ TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_OR}{} + Implements in-place \code{TOS = TOS1 | TOS}. + \end{opcodedesc} + The slice opcodes take up to three parameters. *************** *** 366,369 **** --- 420,428 ---- %This opcode is obsolete. %\end{opcodedesc} + + \begin{opcodedesc}{DUP_TOPX}{count} + Duplicate \var{count} items, keeping them in the same order. Due to + implementation limits, \var{count} should be between 1 and 5 inclusive. + \end{opcodedesc} \begin{opcodedesc}{STORE_ATTR}{namei} From python-dev@python.org Thu Aug 24 21:06:07 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:06:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref2.tex,1.18,1.19 ref3.tex,1.48,1.49 Message-ID: <200008242006.NAA12730@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv12418/ref Modified Files: ref2.tex ref3.tex Log Message: Rough and incomplete documentation on augmented assignment, which follows shortly. Markup also needs checking. Index: ref2.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref2.tex,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** ref2.tex 2000/04/03 04:41:18 1.18 --- ref2.tex 2000/08/24 20:06:04 1.19 *************** *** 524,531 **** --- 524,535 ---- ( ) [ ] { } , : . ` = ; + += -= *= /= %= **= + &= |= ^= >>= <<= \end{verbatim} The period can also occur in floating-point and imaginary literals. A sequence of three periods has a special meaning as an ellipsis in slices. + The second half of the list, the augmented assignment operators, serve + lexically as delimiters, but also perform an operation. The following printing ASCII characters have special meaning as part Index: ref3.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref3.tex,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -r1.48 -r1.49 *** ref3.tex 2000/08/18 02:42:14 1.48 --- ref3.tex 2000/08/24 20:06:04 1.49 *************** *** 1055,1061 **** sequence types should implement addition (meaning concatenation) and multiplication (meaning repetition) by defining the methods ! \method{__add__()}, \method{__radd__()}, \method{__mul__()} and ! \method{__rmul__()} described below; they should not define ! \method{__coerce__()} or other numerical operators. \withsubitem{(mapping object method)}{ \ttindex{keys()} --- 1055,1062 ---- sequence types should implement addition (meaning concatenation) and multiplication (meaning repetition) by defining the methods ! \method{__add__()}, \method{__radd__()}, \method{__iadd__()}, ! \method{__mul__()}, \method{__rmul__()} and \method{__imul__()} described ! below; they should not define \method{__coerce__()} or other numerical ! operators. \withsubitem{(mapping object method)}{ \ttindex{keys()} *************** *** 1078,1083 **** \ttindex{__add__()} \ttindex{__radd__()} \ttindex{__mul__()} ! \ttindex{__rmul__()}} \withsubitem{(numeric object method)}{\ttindex{__coerce__()}} --- 1079,1086 ---- \ttindex{__add__()} \ttindex{__radd__()} + \ttindex{__iadd__()} \ttindex{__mul__()} ! \ttindex{__rmul__()} ! \ttindex{__imul__()}} \withsubitem{(numeric object method)}{\ttindex{__coerce__()}} From python-dev@python.org Thu Aug 24 21:09:49 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:09:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include abstract.h,2.26,2.27 classobject.h,2.31,2.32 graminit.h,2.15,2.16 object.h,2.63,2.64 opcode.h,2.29,2.30 token.h,2.15,2.16 Message-ID: <200008242009.NAA13442@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv13301/Include Modified Files: abstract.h classobject.h graminit.h object.h opcode.h token.h Log Message: The real suport for augmented assignment: new opcodes, new PyNumber and PySequence methods and functions, new tokens. Index: abstract.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/abstract.h,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** abstract.h 2000/08/03 16:42:14 2.26 --- abstract.h 2000/08/24 20:09:45 2.27 *************** *** 665,669 **** --- 665,771 ---- */ + /* In-place variants of (some of) the above number protocol functions */ + DL_IMPORT(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); + + /* + Returns the result of adding o2 to o1, possibly in-place, or null + on failure. This is the equivalent of the Python expression: + o1 += o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); + + /* + Returns the result of subtracting o2 from o1, possibly in-place or + null on failure. This is the equivalent of the Python expression: + o1 -= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); + + /* + Returns the result of multiplying o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 *= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2); + + /* + Returns the result of dividing o1 by o2, possibly in-place, or null + on failure. This is the equivalent of the Python expression: + o1 /= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); + + /* + Returns the remainder of dividing o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 %= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, + PyObject *o3); + + /* + Returns the result of raising o1 to the power of o2, possibly + in-place, or null on failure. This is the equivalent of the Python + expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); + + /* + Returns the result of left shifting o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 <<= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); + + /* + Returns the result of right shifting o1 by o2, possibly in-place or + null on failure. This is the equivalent of the Python expression: + o1 >>= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); + + /* + Returns the result of bitwise and of o1 and o2, possibly in-place, + or null on failure. This is the equivalent of the Python + expression: o1 &= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); + + /* + Returns the bitwise exclusive or of o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 ^= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); + + /* + Returns the result of bitwise or or o1 and o2, possibly in-place, + or null on failure. This is the equivalent of the Python + expression: o1 |= o2. + + */ + + /* Sequence protocol:*/ *************** *** 823,826 **** --- 925,948 ---- return -1. This is equivalent to the Python expression: o.index(value). + */ + + /* In-place versions of some of the above Sequence functions. */ + + DL_IMPORT(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); + + /* + Append o2 to o1, in-place when possible. Return the resulting + object, which could be o1, or NULL on failure. This is the + equivalent of the Python expression: o1 += o2. + + */ + + DL_IMPORT(PyObject *) PySequence_InPlaceRepeat(PyObject *o, int count); + + /* + Repeat o1 by count, in-place when possible. Return the resulting + object, which could be o1, or NULL on failure. This is the + equivalent of the Python expression: o1 *= count. + */ Index: classobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/classobject.h,v retrieving revision 2.31 retrieving revision 2.32 diff -C2 -r2.31 -r2.32 *** classobject.h 2000/07/09 00:20:36 2.31 --- classobject.h 2000/08/24 20:09:45 2.32 *************** *** 74,77 **** --- 74,81 ---- PyObject *)); + extern DL_IMPORT(int) + PyInstance_HalfBinOp(PyObject *, PyObject *, char *, PyObject **, + PyObject * (*)(PyObject *, PyObject *), int); + #ifdef __cplusplus } Index: graminit.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/graminit.h,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** graminit.h 2000/08/17 22:54:59 2.15 --- graminit.h 2000/08/24 20:09:45 2.16 *************** *** 11,63 **** #define small_stmt 266 #define expr_stmt 267 ! #define print_stmt 268 ! #define del_stmt 269 ! #define pass_stmt 270 ! #define flow_stmt 271 ! #define break_stmt 272 ! #define continue_stmt 273 ! #define return_stmt 274 ! #define raise_stmt 275 ! #define import_stmt 276 ! #define import_as_name 277 ! #define dotted_as_name 278 ! #define dotted_name 279 ! #define global_stmt 280 ! #define exec_stmt 281 ! #define assert_stmt 282 ! #define compound_stmt 283 ! #define if_stmt 284 ! #define while_stmt 285 ! #define for_stmt 286 ! #define try_stmt 287 ! #define except_clause 288 ! #define suite 289 ! #define test 290 ! #define and_test 291 ! #define not_test 292 ! #define comparison 293 ! #define comp_op 294 ! #define expr 295 ! #define xor_expr 296 ! #define and_expr 297 ! #define shift_expr 298 ! #define arith_expr 299 ! #define term 300 ! #define factor 301 ! #define power 302 ! #define atom 303 ! #define listmaker 304 ! #define lambdef 305 ! #define trailer 306 ! #define subscriptlist 307 ! #define subscript 308 ! #define sliceop 309 ! #define exprlist 310 ! #define testlist 311 ! #define dictmaker 312 ! #define classdef 313 ! #define arglist 314 ! #define argument 315 ! #define list_iter 316 ! #define list_for 317 ! #define list_if 318 --- 11,64 ---- #define small_stmt 266 #define expr_stmt 267 ! #define augassign 268 ! #define print_stmt 269 ! #define del_stmt 270 ! #define pass_stmt 271 ! #define flow_stmt 272 ! #define break_stmt 273 ! #define continue_stmt 274 ! #define return_stmt 275 ! #define raise_stmt 276 ! #define import_stmt 277 ! #define import_as_name 278 ! #define dotted_as_name 279 ! #define dotted_name 280 ! #define global_stmt 281 ! #define exec_stmt 282 ! #define assert_stmt 283 ! #define compound_stmt 284 ! #define if_stmt 285 ! #define while_stmt 286 ! #define for_stmt 287 ! #define try_stmt 288 ! #define except_clause 289 ! #define suite 290 ! #define test 291 ! #define and_test 292 ! #define not_test 293 ! #define comparison 294 ! #define comp_op 295 ! #define expr 296 ! #define xor_expr 297 ! #define and_expr 298 ! #define shift_expr 299 ! #define arith_expr 300 ! #define term 301 ! #define factor 302 ! #define power 303 ! #define atom 304 ! #define listmaker 305 ! #define lambdef 306 ! #define trailer 307 ! #define subscriptlist 308 ! #define subscript 309 ! #define sliceop 310 ! #define exprlist 311 ! #define testlist 312 ! #define dictmaker 313 ! #define classdef 314 ! #define arglist 315 ! #define argument 316 ! #define list_iter 317 ! #define list_for 318 ! #define list_if 319 Index: object.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/object.h,v retrieving revision 2.63 retrieving revision 2.64 diff -C2 -r2.63 -r2.64 *** object.h 2000/07/16 12:04:30 2.63 --- object.h 2000/08/24 20:09:45 2.64 *************** *** 152,155 **** --- 152,166 ---- unaryfunc nb_oct; unaryfunc nb_hex; + binaryfunc nb_inplace_add; + binaryfunc nb_inplace_subtract; + binaryfunc nb_inplace_multiply; + binaryfunc nb_inplace_divide; + binaryfunc nb_inplace_remainder; + ternaryfunc nb_inplace_power; + binaryfunc nb_inplace_lshift; + binaryfunc nb_inplace_rshift; + binaryfunc nb_inplace_and; + binaryfunc nb_inplace_xor; + binaryfunc nb_inplace_or; } PyNumberMethods; *************** *** 163,166 **** --- 174,179 ---- intintobjargproc sq_ass_slice; objobjproc sq_contains; + binaryfunc sq_inplace_concat; + intargfunc sq_inplace_repeat; } PySequenceMethods; *************** *** 316,321 **** #endif #define Py_TPFLAGS_DEFAULT (Py_TPFLAGS_HAVE_GETCHARBUFFER | \ ! Py_TPFLAGS_HAVE_SEQUENCE_IN) #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) --- 329,338 ---- #endif + /* PySequenceMethods and PyNumberMethods contain in-place operators */ + #define Py_TPFLAGS_HAVE_INPLACEOPS (1L<<3) + #define Py_TPFLAGS_DEFAULT (Py_TPFLAGS_HAVE_GETCHARBUFFER | \ ! Py_TPFLAGS_HAVE_SEQUENCE_IN | \ ! Py_TPFLAGS_HAVE_INPLACEOPS) #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** opcode.h 2000/08/24 00:32:09 2.29 --- opcode.h 2000/08/24 20:09:45 2.30 *************** *** 22,25 **** --- 22,26 ---- #define ROT_THREE 3 #define DUP_TOP 4 + #define ROT_FOUR 5 #define UNARY_POSITIVE 10 *************** *** 48,51 **** --- 49,57 ---- /* Also uses 51-53 */ + #define INPLACE_ADD 55 + #define INPLACE_SUBTRACT 56 + #define INPLACE_MULTIPLY 57 + #define INPLACE_DIVIDE 58 + #define INPLACE_MODULO 59 #define STORE_SUBSCR 60 #define DELETE_SUBSCR 61 *************** *** 56,61 **** #define BINARY_XOR 65 #define BINARY_OR 66 - #define PRINT_EXPR 70 #define PRINT_ITEM 71 --- 62,67 ---- #define BINARY_XOR 65 #define BINARY_OR 66 + #define INPLACE_POWER 67 #define PRINT_EXPR 70 #define PRINT_ITEM 71 *************** *** 63,67 **** #define PRINT_ITEM_TO 73 #define PRINT_NEWLINE_TO 74 ! #define BREAK_LOOP 80 --- 69,77 ---- #define PRINT_ITEM_TO 73 #define PRINT_NEWLINE_TO 74 ! #define INPLACE_LSHIFT 75 ! #define INPLACE_RSHIFT 76 ! #define INPLACE_AND 77 ! #define INPLACE_XOR 78 ! #define INPLACE_OR 79 #define BREAK_LOOP 80 *************** *** 85,89 **** #define STORE_GLOBAL 97 /* "" */ #define DELETE_GLOBAL 98 /* "" */ ! #define LOAD_CONST 100 /* Index in const list */ #define LOAD_NAME 101 /* Index in name list */ --- 95,99 ---- #define STORE_GLOBAL 97 /* "" */ #define DELETE_GLOBAL 98 /* "" */ ! #define DUP_TOPX 99 /* number of items to duplicate */ #define LOAD_CONST 100 /* Index in const list */ #define LOAD_NAME 101 /* Index in name list */ Index: token.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/token.h,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** token.h 2000/07/09 00:55:06 2.15 --- token.h 2000/08/24 20:09:45 2.16 *************** *** 54,61 **** #define RIGHTSHIFT 35 #define DOUBLESTAR 36 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ ! #define OP 37 ! #define ERRORTOKEN 38 ! #define N_TOKENS 39 /* Special definitions for cooperation with parser */ --- 54,72 ---- #define RIGHTSHIFT 35 #define DOUBLESTAR 36 + #define PLUSEQUAL 37 + #define MINEQUAL 38 + #define STAREQUAL 39 + #define SLASHEQUAL 40 + #define PERCENTEQUAL 41 + #define AMPEREQUAL 42 + #define VBAREQUAL 43 + #define CIRCUMFLEXEQUAL 44 + #define LEFTSHIFTEQUAL 45 + #define RIGHTSHIFTEQUAL 46 + #define DOUBLESTAREQUAL 47 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ ! #define OP 48 ! #define ERRORTOKEN 49 ! #define N_TOKENS 50 /* Special definitions for cooperation with parser */ From python-dev@python.org Thu Aug 24 21:14:13 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:14:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_augassign.py,NONE,1.1 Message-ID: <200008242014.NAA14340@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv14095/Lib/test Added Files: test_augassign.py Log Message: Support for augmented assignment in the UserList, UserDict, UserString and rfc822 (Addresslist) modules. Also a preliminary testcase for augmented assignment, which should actually be merged with the test_class testcase I added last week. --- NEW FILE --- # Augmented assignment test. x = 2 x += 1 x *= 2 x **= 2 x -= 8 x /= 2 x %= 12 x &= 2 x |= 5 x ^= 1 print x x = [2] x[0] += 1 x[0] *= 2 x[0] **= 2 x[0] -= 8 x[0] /= 2 x[0] %= 12 x[0] &= 2 x[0] |= 5 x[0] ^= 1 print x x = {0: 2} x[0] += 1 x[0] *= 2 x[0] **= 2 x[0] -= 8 x[0] /= 2 x[0] %= 12 x[0] &= 2 x[0] |= 5 x[0] ^= 1 print x[0] x = [1,2] x += [3,4] x *= 2 print x x = [1, 2, 3] y = x x[1:2] *= 2 y[1:2] += [1] print x print x is y class aug_test: def __init__(self, value): self.val = value def __radd__(self, val): return self.val + val def __add__(self, val): return aug_test(self.val + val) class aug_test2(aug_test): def __iadd__(self, val): self.val = self.val + val return self class aug_test3(aug_test): def __iadd__(self, val): return aug_test3(self.val + val) x = aug_test(1) y = x x += 10 print isinstance(x, aug_test) print y is not x print x.val x = aug_test2(2) y = x x += 10 print y is x print x.val x = aug_test3(3) y = x x += 10 print isinstance(x, aug_test3) print y is not x print x.val class testall: def __add__(self, val): print "__add__ called" def __radd__(self, val): print "__radd__ called" def __iadd__(self, val): print "__iadd__ called" return self def __sub__(self, val): print "__sub__ called" def __rsub__(self, val): print "__rsub__ called" def __isub__(self, val): print "__isub__ called" return self def __mul__(self, val): print "__mul__ called" def __rmul__(self, val): print "__rmul__ called" def __imul__(self, val): print "__imul__ called" return self def __div__(self, val): print "__div__ called" def __rdiv__(self, val): print "__rdiv__ called" def __idiv__(self, val): print "__idiv__ called" return self def __mod__(self, val): print "__mod__ called" def __rmod__(self, val): print "__rmod__ called" def __imod__(self, val): print "__imod__ called" return self def __pow__(self, val): print "__pow__ called" def __rpow__(self, val): print "__rpow__ called" def __ipow__(self, val): print "__ipow__ called" return self def __or__(self, val): print "__or__ called" def __ror__(self, val): print "__ror__ called" def __ior__(self, val): print "__ior__ called" return self def __and__(self, val): print "__and__ called" def __rand__(self, val): print "__rand__ called" def __iand__(self, val): print "__iand__ called" return self def __xor__(self, val): print "__xor__ called" def __rxor__(self, val): print "__rxor__ called" def __ixor__(self, val): print "__ixor__ called" return self def __rshift__(self, val): print "__rshift__ called" def __rrshift__(self, val): print "__rrshift__ called" def __irshift__(self, val): print "__irshift__ called" return self def __lshift__(self, val): print "__lshift__ called" def __rlshift__(self, val): print "__rlshift__ called" def __ilshift__(self, val): print "__ilshift__ called" return self x = testall() x + 1 1 + x x += 1 x - 1 1 - x x -= 1 x * 1 1 * x x *= 1 x / 1 1 / x x /= 1 x % 1 1 % x x %= 1 x ** 1 1 ** x x **= 1 x | 1 1 | x x |= 1 x & 1 1 & x x &= 1 x ^ 1 1 ^ x x ^= 1 x >> 1 1 >> x x >>= 1 x << 1 1 << x x <<= 1 From python-dev@python.org Thu Aug 24 21:14:14 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:14:14 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_augassign,NONE,1.1 Message-ID: <200008242014.NAA14347@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv14095/Lib/test/output Added Files: test_augassign Log Message: Support for augmented assignment in the UserList, UserDict, UserString and rfc822 (Addresslist) modules. Also a preliminary testcase for augmented assignment, which should actually be merged with the test_class testcase I added last week. --- NEW FILE --- test_augassign 6 [6] 6 [1, 2, 3, 4, 1, 2, 3, 4] [1, 2, 1, 2, 3] 1 1 1 11 1 12 1 1 13 __add__ called __radd__ called __iadd__ called __sub__ called __rsub__ called __isub__ called __mul__ called __rmul__ called __imul__ called __div__ called __rdiv__ called __idiv__ called __mod__ called __rmod__ called __imod__ called __pow__ called __rpow__ called __ipow__ called __or__ called __ror__ called __ior__ called __and__ called __rand__ called __iand__ called __xor__ called __rxor__ called __ixor__ called __rshift__ called __rrshift__ called __irshift__ called __lshift__ called __rlshift__ called __ilshift__ called From python-dev@python.org Thu Aug 24 21:14:14 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:14:14 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib UserList.py,1.10,1.11 UserString.py,1.4,1.5 dis.py,1.25,1.26 rfc822.py,1.47,1.48 Message-ID: <200008242014.NAA14346@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14095/Lib Modified Files: UserList.py UserString.py dis.py rfc822.py Log Message: Support for augmented assignment in the UserList, UserDict, UserString and rfc822 (Addresslist) modules. Also a preliminary testcase for augmented assignment, which should actually be merged with the test_class testcase I added last week. Index: UserList.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserList.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** UserList.py 2000/07/16 12:04:30 1.10 --- UserList.py 2000/08/24 20:14:09 1.11 *************** *** 52,58 **** --- 52,69 ---- else: return self.__class__(list(other) + self.data) + def __iadd__(self, other): + if isinstance(other, UserList): + self.data += other.data + elif isinstance(other, type(self.data)): + self.data += other + else: + self.data += list(other) + return self def __mul__(self, n): return self.__class__(self.data*n) __rmul__ = __mul__ + def __imul__(self, n): + self.data *= n + return self def append(self, item): self.data.append(item) def insert(self, i, item): self.data.insert(i, item) Index: UserString.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserString.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** UserString.py 2000/08/21 21:47:20 1.4 --- UserString.py 2000/08/24 20:14:09 1.5 *************** *** 51,57 **** --- 51,68 ---- else: return self.__class__(str(other) + self.data) + def __iadd__(self, other): + if isinstance(other, UserString): + self.data += other.data + elif isinstance(other, StringType) or isinstance(other, UnicodeType): + self.data += other + else + self.data += str(other) + return self def __mul__(self, n): return self.__class__(self.data*n) __rmul__ = __mul__ + def __imull__(self, n): + self.data += n + return self # the following methods are defined in alphabetical order: Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** dis.py 2000/08/24 00:32:09 1.25 --- dis.py 2000/08/24 20:14:09 1.26 *************** *** 183,186 **** --- 183,191 ---- def_op('DELETE_SLICE+3', 53) + def_op('INPLACE_ADD', 55) + def_op('INPLACE_SUBTRACT', 56) + def_op('INPLACE_MULTIPLY', 57) + def_op('INPLACE_DIVIDE', 58) + def_op('INPLACE_MODULO', 59) def_op('STORE_SUBSCR', 60) def_op('DELETE_SUBSCR', 61) *************** *** 191,194 **** --- 196,200 ---- def_op('BINARY_XOR', 65) def_op('BINARY_OR', 66) + def_op('INPLACE_POWER', 67) def_op('PRINT_EXPR', 70) *************** *** 197,201 **** def_op('PRINT_ITEM_TO', 73) def_op('PRINT_NEWLINE_TO', 74) ! def_op('BREAK_LOOP', 80) --- 203,211 ---- def_op('PRINT_ITEM_TO', 73) def_op('PRINT_NEWLINE_TO', 74) ! def_op('INPLACE_LSHIFT', 75) ! def_op('INPLACE_RSHIFT', 76) ! def_op('INPLACE_AND', 77) ! def_op('INPLACE_XOR', 78) ! def_op('INPLACE_OR', 79) def_op('BREAK_LOOP', 80) Index: rfc822.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/rfc822.py,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -r1.47 -r1.48 *** rfc822.py 2000/07/16 12:04:30 1.47 --- rfc822.py 2000/08/24 20:14:09 1.48 *************** *** 764,767 **** --- 764,774 ---- return newaddr + def __iadd__(self, other): + # Set union, in-place + for x in other.addresslist: + if not x in self.addresslist: + self.addresslist.append(x) + return self + def __sub__(self, other): # Set difference *************** *** 771,774 **** --- 778,788 ---- newaddr.addresslist.append(x) return newaddr + + def __isub__(self, other): + # Set difference, in-place + for x in other.addresslist: + if x in self.addresslist: + self.addresslist.remove(x) + return self def __getitem__(self, index): From python-dev@python.org Thu Aug 24 21:08:23 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:08:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.47,2.48 classobject.c,2.104,2.105 listobject.c,2.85,2.86 Message-ID: <200008242008.NAA13215@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv12866/Objects Modified Files: abstract.c classobject.c listobject.c Log Message: Support for the in-place operations introduced by augmented assignment. Only the list object supports this currently, but other candidates are gladly accepted (like arraymodule and such.) Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.47 retrieving revision 2.48 diff -C2 -r2.47 -r2.48 *** abstract.c 2000/08/23 23:31:34 2.47 --- abstract.c 2000/08/24 20:08:19 2.48 *************** *** 615,618 **** --- 615,1098 ---- } + /* Binary in-place operators */ + + /* The in-place operators are defined to fall back to the 'normal', + non in-place operations, if the in-place methods are not in place, and to + take class instances into account. This is how it is supposed to work: + + - If the left-hand-side object (the first argument) is an + instance object, try to let PyInstance_HalfBinOp() handle it. Pass the + non in-place variant of the function as callback, because it will only + be used if the left-hand object is changed by coercion. + + - Otherwise, if the left hand object is not an instance object, it has + the appropriate struct members, and they are filled, call the + appropriate function and return the result. No coercion is done on the + arguments; the left-hand object is the one the operation is performed + on, and it's up to the function to deal with the right-hand object. + + - Otherwise, in-place modification is not supported. Handle it exactly as + a non in-place operation of the same kind: + + - If either object is an instance, let PyInstance_DoBinOp() handle it. + + - Otherwise, both arguments are C types. If the left-hand object has + the appropriate struct members filled, coerce, call the + appropriate function, and return the result. + + - Otherwise, we are out of options: raise a type error specific to + augmented assignment. + + */ + + #define HASINPLACE(t) PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS) + + PyObject * + PyNumber_InPlaceOr(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ior__", &x, PyNumber_Or, + 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_or) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__or__", "__ror__", PyNumber_Or); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_or) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for |="); + } + + PyObject * + PyNumber_InPlaceXor(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ixor__", &x, PyNumber_Xor, + 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_xor) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__xor__", "__rxor__", PyNumber_Xor); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_xor) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for ^="); + } + + PyObject * + PyNumber_InPlaceAnd(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__iand__", &x, PyNumber_And, + 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_and) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__and__", "__rand__", PyNumber_And); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_and) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for &="); + } + + PyObject * + PyNumber_InPlaceLshift(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ilshift__", &x, + PyNumber_Lshift, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_lshift) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__lshift__", "__rlshift__", PyNumber_Lshift); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_lshift) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for <<="); + } + + PyObject * + PyNumber_InPlaceRshift(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__irshift__", &x, + PyNumber_Rshift, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_rshift) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__rshift__", "__rrshift__", PyNumber_Rshift); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_rshift) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for >>="); + } + + PyObject * + PyNumber_InPlaceAdd(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__iadd__", &x, + PyNumber_Add, 0) <= 0) + return x; + } else if (HASINPLACE(v) && (v->ob_type->tp_as_sequence != NULL && + (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL) || + (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL)) + return (*f)(v, w); + + BINOP(v, w, "__add__", "__radd__", PyNumber_Add); + + if (v->ob_type->tp_as_sequence != NULL && + (f = v->ob_type->tp_as_sequence->sq_concat) != NULL) + return (*f)(v, w); + else if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_add) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for +="); + } + + PyObject * + PyNumber_InPlaceSubtract(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__isub__", &x, + PyNumber_Subtract, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_subtract) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__sub__", "__rsub__", PyNumber_Subtract); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_subtract) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for -="); + } + + PyObject * + PyNumber_InPlaceMultiply(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject * (*f2)(PyObject *, int) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__imul__", &x, + PyNumber_Multiply, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_multiply) != NULL) + return (*f)(v, w); + else if (v->ob_type->tp_as_sequence != NULL && HASINPLACE(v) && + (f2 = v->ob_type->tp_as_sequence->sq_inplace_repeat) != NULL) { + long mul_value; + + if (PyInt_Check(w)) { + mul_value = PyInt_AsLong(w); + } + else if (PyLong_Check(w)) { + mul_value = PyLong_AsLong(w); + if (mul_value == -1 && PyErr_Occurred()) + return NULL; + } + else { + return type_error( + "can't multiply sequence with non-int"); + } + return (*f2)(v, (int)mul_value); + } + BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply); + + /* if (tp->tp_as_number != NULL && + w->ob_type->tp_as_sequence != NULL) { */ + /* number*sequence -- swap v and w */ + /* PyObject *tmp = v; + v = w; + w = tmp; + tp = v->ob_type; + } */ + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_multiply) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } else if (v->ob_type->tp_as_sequence != NULL && + (f2 = v->ob_type->tp_as_sequence->sq_repeat) != NULL) { + long mul_value; + + if (PyInt_Check(w)) { + mul_value = PyInt_AsLong(w); + } + else if (PyLong_Check(w)) { + mul_value = PyLong_AsLong(w); + if (mul_value == -1 && PyErr_Occurred()) + return NULL; + } + else { + return type_error( + "can't multiply sequence with non-int"); + } + return (*f2)(v, (int)mul_value); + } + return type_error("bad operand type(s) for *="); + } + + PyObject * + PyNumber_InPlaceDivide(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__idiv__", &x, + PyNumber_Divide, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_divide) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__div__", "__rdiv__", PyNumber_Divide); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_divide) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for /="); + } + + PyObject * + PyNumber_InPlaceRemainder(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__imod__", &x, + PyNumber_Remainder, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_remainder) != NULL) + return (*f)(v, w); + + if (PyString_Check(v)) + return PyString_Format(v, w); + else if (PyUnicode_Check(v)) + return PyUnicode_Format(v, w); + + BINOP(v, w, "__mod__", "__rmod__", PyNumber_Remainder); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if ((f = v->ob_type->tp_as_number->nb_remainder) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for %="); + } + + + /* In-place Power (binary or ternary, for API consistency) */ + + static PyObject * + do_inplace_pow(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ipow__", &x, do_pow, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_power) != NULL) + return (*f)(v, w, Py_None); + + BINOP(v, w, "__pow__", "__rpow__", do_pow); + + if (v->ob_type->tp_as_number == NULL || + w->ob_type->tp_as_number == NULL) { + return type_error("bad operand type(s) for **="); + } + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if ((f = v->ob_type->tp_as_number->nb_power) != NULL) + x = (*f)(v, w, Py_None); + else + x = type_error("bad operand type(s) for **="); + Py_DECREF(v); + Py_DECREF(w); + return x; + } + + PyObject * + PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z) + { + PyObject *res; + PyObject *v1, *z1, *w2, *z2, *oldv; + PyObject * (*f)(PyObject *, PyObject *, PyObject *); + + if (z == Py_None) + return do_inplace_pow(v, w); + /* XXX The ternary version doesn't do class instance coercions */ + if (PyInstance_Check(v)) + return v->ob_type->tp_as_number->nb_inplace_power(v, w, z); + if (v->ob_type->tp_as_number == NULL || + z->ob_type->tp_as_number == NULL || + w->ob_type->tp_as_number == NULL) { + return type_error("(inplace) pow(x, y, z) requires numeric arguments"); + } + oldv = v; + Py_INCREF(oldv); + res = NULL; + if (PyNumber_Coerce(&v, &w) != 0) + goto error3; + v1 = v; + z1 = z; + if (PyNumber_Coerce(&v1, &z1) != 0) + goto error2; + w2 = w; + z2 = z1; + if (PyNumber_Coerce(&w2, &z2) != 0) + goto error1; + if (oldv == v1 && HASINPLACE(v1) && v->ob_type->tp_as_number != NULL && + (f = v1->ob_type->tp_as_number->nb_inplace_power) != NULL) + res = (*f)(v1, w2, z2); + else if (v1->ob_type->tp_as_number != NULL && + (f = v1->ob_type->tp_as_number->nb_power) != NULL) + res = (*f)(v1, w2, z2); + else + res = type_error( + "(inplace) pow(x, y, z) not defined for these operands"); + Py_DECREF(w2); + Py_DECREF(z2); + error1: + Py_DECREF(v1); + Py_DECREF(z1); + error2: + Py_DECREF(v); + Py_DECREF(w); + error3: + Py_DECREF(oldv); + return res; + } + + /* Unary operators and functions */ *************** *** 851,854 **** --- 1331,1368 ---- m = o->ob_type->tp_as_sequence; + if (m && m->sq_repeat) + return m->sq_repeat(o, count); + + return type_error("object can't be repeated"); + } + + PyObject * + PySequence_InPlaceConcat(PyObject *s, PyObject *o) + { + PySequenceMethods *m; + + if (s == NULL || o == NULL) + return null_error(); + + m = s->ob_type->tp_as_sequence; + if (m && HASINPLACE(s) && m->sq_inplace_concat) + return m->sq_inplace_concat(s, o); + if (m && m->sq_concat) + return m->sq_concat(s, o); + + return type_error("object can't be concatenated"); + } + + PyObject * + PySequence_InPlaceRepeat(PyObject *o, int count) + { + PySequenceMethods *m; + + if (o == NULL) + return null_error(); + + m = o->ob_type->tp_as_sequence; + if (m && HASINPLACE(o) && m->sq_inplace_repeat) + return m->sq_inplace_repeat(o, count); if (m && m->sq_repeat) return m->sq_repeat(o, count); Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.104 retrieving revision 2.105 diff -C2 -r2.104 -r2.105 *** classobject.c 2000/08/18 04:57:32 2.104 --- classobject.c 2000/08/24 20:08:19 2.105 *************** *** 1194,1203 **** - /* Forward */ - static int - halfbinop(PyObject *, PyObject *, char *, PyObject **, - PyObject * (*)(PyObject *, PyObject *), int); - - /* Implement a binary operator involving at least one class instance. */ --- 1194,1197 ---- *************** *** 1209,1215 **** PyObject *result = NULL; ! if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0) return result; ! if (halfbinop(w, v, ropname, &result, thisfunc, 1) <= 0) return result; /* Sigh -- special case for comparisons */ --- 1203,1209 ---- PyObject *result = NULL; ! if (PyInstance_HalfBinOp(v, w, opname, &result, thisfunc, 0) <= 0) return result; ! if (PyInstance_HalfBinOp(w, v, ropname, &result, thisfunc, 1) <= 0) return result; /* Sigh -- special case for comparisons */ *************** *** 1235,1241 **** static PyObject *coerce_obj; ! static int ! halfbinop(PyObject *v, PyObject *w, char *opname, PyObject **r_result, ! PyObject * (*thisfunc)(PyObject *, PyObject *), int swapped) { PyObject *func; --- 1229,1235 ---- static PyObject *coerce_obj; ! int ! PyInstance_HalfBinOp(PyObject *v, PyObject *w, char *opname, PyObject **r_result, ! PyObject * (*thisfunc)(PyObject *, PyObject *), int swapped) { PyObject *func; *************** *** 1452,1455 **** --- 1446,1478 ---- } + static PyObject * + instance_inplace_pow(PyObject *v, PyObject *w, PyObject *z) + { + /* XXX Doesn't do coercions... */ + PyObject *func; + PyObject *args; + PyObject *result; + static PyObject *ipowstr; + + if (ipowstr == NULL) + ipowstr = PyString_InternFromString("__ipow__"); + func = PyObject_GetAttr(v, ipowstr); + if (func == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) + return NULL; + return instance_pow(v, w, z); + } + args = Py_BuildValue("(OO)", w, z); + if (args == NULL) { + Py_DECREF(func); + return NULL; + } + result = PyEval_CallObject(func, args); + Py_DECREF(func); + Py_DECREF(args); + return result; + } + + static PyNumberMethods instance_as_number = { 0, /*nb_add*/ *************** *** 1476,1479 **** --- 1499,1513 ---- (unaryfunc)instance_oct, /*nb_oct*/ (unaryfunc)instance_hex, /*nb_hex*/ + 0, /*nb_inplace_add*/ + 0, /*nb_inplace_subtract*/ + 0, /*nb_inplace_multiply*/ + 0, /*nb_inplace_divide*/ + 0, /*nb_inplace_remainder*/ + (ternaryfunc)instance_inplace_pow, /*nb_inplace_power*/ + 0, /*nb_inplace_lshift*/ + 0, /*nb_inplace_rshift*/ + 0, /*nb_inplace_and*/ + 0, /*nb_inplace_xor*/ + 0, /*nb_inplace_or*/ }; Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.85 retrieving revision 2.86 diff -C2 -r2.85 -r2.86 *** listobject.c 2000/08/22 21:51:22 2.85 --- listobject.c 2000/08/24 20:08:19 2.86 *************** *** 497,500 **** --- 497,544 ---- } + static PyObject * + list_inplace_repeat(PyListObject *self, int n) + { + PyObject **items; + int size, i, j; + + + size = PyList_GET_SIZE(self); + if (size == 0) { + Py_INCREF(self); + return (PyObject *)self; + } + + items = self->ob_item; + + if (n < 1) { + self->ob_item = NULL; + self->ob_size = 0; + for (i = 0; i < size; i++) + Py_XDECREF(items[i]); + PyMem_DEL(items); + Py_INCREF(self); + return (PyObject *)self; + } + + NRESIZE(items, PyObject*, size*n); + if (items == NULL) { + PyErr_NoMemory(); + goto finally; + } + self->ob_item = items; + for (i = 1; i < n; i++) { /* Start counting at 1, not 0 */ + for (j = 0; j < size; j++) { + PyObject *o = PyList_GET_ITEM(self, j); + Py_INCREF(o); + PyList_SET_ITEM(self, self->ob_size++, o); + } + } + Py_INCREF(self); + return (PyObject *)self; + finally: + return NULL; + } + static int list_ass_item(PyListObject *a, int i, PyObject *v) *************** *** 557,564 **** } ! static PyObject * ! listextend(PyListObject *self, PyObject *args) { - PyObject *b = NULL, *res = NULL; PyObject **items; int selflen = PyList_GET_SIZE(self); --- 601,607 ---- } ! static int ! listextend_internal(PyListObject *self, PyObject *b) { PyObject **items; int selflen = PyList_GET_SIZE(self); *************** *** 566,579 **** register int i; - if (!PyArg_ParseTuple(args, "O:extend", &b)) - return NULL; - - b = PySequence_Fast(b, "list.extend() argument must be a sequence"); - if (!b) - return NULL; - if (PyObject_Size(b) == 0) /* short circuit when b is empty */ ! goto ok; if (self == (PyListObject*)b) { --- 609,615 ---- register int i; if (PyObject_Size(b) == 0) /* short circuit when b is empty */ ! return 0; if (self == (PyListObject*)b) { *************** *** 587,591 **** b = PyList_New(selflen); if (!b) ! return NULL; for (i = 0; i < selflen; i++) { PyObject *o = PyList_GET_ITEM(self, i); --- 623,627 ---- b = PyList_New(selflen); if (!b) ! return -1; for (i = 0; i < selflen; i++) { PyObject *o = PyList_GET_ITEM(self, i); *************** *** 602,607 **** if (items == NULL) { PyErr_NoMemory(); ! goto failed; } self->ob_item = items; --- 638,645 ---- if (items == NULL) { PyErr_NoMemory(); ! Py_DECREF(b); ! return -1; } + self->ob_item = items; *************** *** 612,623 **** PyList_SET_ITEM(self, self->ob_size++, o); } - ok: - res = Py_None; - Py_INCREF(res); - failed: Py_DECREF(b); ! return res; } static PyObject * --- 650,691 ---- PyList_SET_ITEM(self, self->ob_size++, o); } Py_DECREF(b); ! return 0; ! } ! ! ! static PyObject * ! list_inplace_concat(PyListObject *self, PyObject *other) ! { ! other = PySequence_Fast(other, "argument to += must be a sequence"); ! if (!other) ! return NULL; ! ! if (listextend_internal(self, other) < 0) ! return NULL; ! ! Py_INCREF(self); ! return (PyObject *)self; } + static PyObject * + listextend(PyListObject *self, PyObject *args) + { + + PyObject *b; + + if (!PyArg_ParseTuple(args, "O:extend", &b)) + return NULL; + + b = PySequence_Fast(b, "list.extend() argument must be a sequence"); + if (!b) + return NULL; + + if (listextend_internal(self, b) < 0) + return NULL; + + Py_INCREF(Py_None); + return Py_None; + } static PyObject * *************** *** 1408,1411 **** --- 1476,1481 ---- (intintobjargproc)list_ass_slice, /*sq_ass_slice*/ (objobjproc)list_contains, /*sq_contains*/ + (binaryfunc)list_inplace_concat, /*sq_inplace_concat*/ + (intargfunc)list_inplace_repeat, /*sq_inplace_repeat*/ }; From python-dev@python.org Thu Aug 24 21:11:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:11:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.40,1.41 Message-ID: <200008242011.NAA13782@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Grammar Modified Files: Grammar Log Message: Support for three-token characters (**=, >>=, <<=) which was written by Michael Hudson, and support in general for the augmented assignment syntax. The graminit.c patch is large! Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** Grammar 2000/08/23 15:45:28 1.40 --- Grammar 2000/08/24 20:11:30 1.41 *************** *** 38,44 **** simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt ! expr_stmt: testlist ('=' testlist)* ! # For assignments, additional restrictions enforced by the interpreter print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist --- 38,45 ---- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt ! expr_stmt: testlist (augassign testlist | ('=' testlist)*) ! augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' ! # For normal assignments, additional restrictions enforced by the interpreter print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist From python-dev@python.org Thu Aug 24 21:11:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:11:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser grammar.c,2.17,2.18 tokenizer.c,2.47,2.48 Message-ID: <200008242011.NAA13785@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Parser Modified Files: grammar.c tokenizer.c Log Message: Support for three-token characters (**=, >>=, <<=) which was written by Michael Hudson, and support in general for the augmented assignment syntax. The graminit.c patch is large! Index: grammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/grammar.c,v retrieving revision 2.17 retrieving revision 2.18 diff -C2 -r2.17 -r2.18 *** grammar.c 2000/07/22 19:20:54 2.17 --- grammar.c 2000/08/24 20:11:31 2.18 *************** *** 212,215 **** --- 212,227 ---- lb->lb_str); } + else if (lb->lb_str[2] && lb->lb_str[3] && lb->lb_str[4] == lb->lb_str[0]) { + int type = (int) PyToken_ThreeChars(lb->lb_str[1], + lb->lb_str[2], + lb->lb_str[3]); + if (type != OP) { + lb->lb_type = type; + lb->lb_str = NULL; + } + else + printf("Unknown OP label %s\n", + lb->lb_str); + } else printf("Can't translate STRING label %s\n", Index: tokenizer.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.c,v retrieving revision 2.47 retrieving revision 2.48 diff -C2 -r2.47 -r2.48 *** tokenizer.c 2000/07/22 19:20:54 2.47 --- tokenizer.c 2000/08/24 20:11:31 2.48 *************** *** 79,82 **** --- 79,93 ---- "RIGHTSHIFT", "DOUBLESTAR", + "PLUSEQUAL", + "MINEQUAL", + "STAREQUAL", + "SLASHEQUAL", + "PERCENTEQUAL", + "AMPEREQUAL", + "VBAREQUAL", + "CIRCUMFLEXEQUAL", + "LEFTSHIFTEQUAL", + "RIGHTSHIFTEQUAL", + "DOUBLESTAREQUAL", /* This table must match the #defines in token.h! */ "OP", *************** *** 389,401 **** --- 400,488 ---- } break; + case '+': + switch (c2) { + case '=': return PLUSEQUAL; + } + break; + case '-': + switch (c2) { + case '=': return MINEQUAL; + } + break; case '*': switch (c2) { case '*': return DOUBLESTAR; + case '=': return STAREQUAL; } break; + case '/': + switch (c2) { + case '=': return SLASHEQUAL; + } + break; + case '|': + switch (c2) { + case '=': return VBAREQUAL; + } + break; + case '%': + switch (c2) { + case '=': return PERCENTEQUAL; + } + break; + case '&': + switch (c2) { + case '=': return AMPEREQUAL; + } + break; + case '^': + switch (c2) { + case '=': return CIRCUMFLEXEQUAL; + } + break; } return OP; } + int + PyToken_ThreeChars(int c1, int c2, int c3) + { + switch (c1) { + case '<': + switch (c2) { + case '<': + switch (c3) { + case '=': + return LEFTSHIFTEQUAL; + break; + } + break; + } + break; + case '>': + switch (c2) { + case '>': + switch (c3) { + case '=': + return RIGHTSHIFTEQUAL; + break; + } + break; + } + break; + case '*': + switch (c2) { + case '*': + switch (c3) { + case '=': + return DOUBLESTAREQUAL; + break; + } + break; + } + break; + } + return OP; + } static int *************** *** 771,774 **** --- 858,868 ---- int token = PyToken_TwoChars(c, c2); if (token != OP) { + int c3 = tok_nextc(tok); + int token3 = PyToken_ThreeChars(c, c2, c3); + if (token3 != OP) { + token = token3; + } else { + tok_backup(tok, c3); + } *p_start = tok->start; *p_end = tok->cur; From python-dev@python.org Thu Aug 24 21:11:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:11:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.194,2.195 compile.c,2.133,2.134 graminit.c,2.27,2.28 import.c,2.147,2.148 Message-ID: <200008242011.NAA13792@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Python Modified Files: ceval.c compile.c graminit.c import.c Log Message: Support for three-token characters (**=, >>=, <<=) which was written by Michael Hudson, and support in general for the augmented assignment syntax. The graminit.c patch is large! Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.194 retrieving revision 2.195 diff -C2 -r2.194 -r2.195 *** ceval.c 2000/08/24 00:32:09 2.194 --- ceval.c 2000/08/24 20:11:31 2.195 *************** *** 670,673 **** --- 670,684 ---- continue; + case ROT_FOUR: + u = POP(); + v = POP(); + w = POP(); + x = POP(); + PUSH(u); + PUSH(x); + PUSH(w); + PUSH(v); + continue; + case DUP_TOP: v = TOP(); *************** *** 676,679 **** --- 687,736 ---- continue; + case DUP_TOPX: + switch (oparg) { + case 5: + case 4: + case 3: + case 2: + case 1: + x = POP(); + if (oparg == 1) break; + w = POP(); + if (oparg == 2) break; + v = POP(); + if (oparg == 3) break; + u = POP(); + if (oparg == 4) break; + t = POP(); + break; + default: + fprintf(stderr, "Invalid argument to DUP_TOPX: %d!\n", oparg); + PyErr_SetString(PyExc_SystemError, + "invalid argument to DUP_TOPX"); + x = NULL; + } + if (x == NULL) + break; + switch (oparg) { + case 5: PUSH(t); + Py_INCREF(t); /* Fallthrough */ + case 4: PUSH(u); + Py_INCREF(u); /* Fallthrough */ + case 3: PUSH(v); + Py_INCREF(v); /* Fallthrough */ + case 2: PUSH(w); + Py_INCREF(w); /* Fallthrough */ + case 1: PUSH(x); + Py_INCREF(x); /* Fallthrough */ + } + switch (oparg) { + case 5: PUSH(t); /* Fallthrough */ + case 4: PUSH(u); /* Fallthrough */ + case 3: PUSH(v); /* Fallthrough */ + case 2: PUSH(w); /* Fallthrough */ + case 1: PUSH(x); /* Fallthrough */ + } + continue; + case UNARY_POSITIVE: v = POP(); *************** *** 891,895 **** --- 948,1092 ---- if (x != NULL) continue; break; + + case INPLACE_POWER: + w = POP(); + v = POP(); + x = PyNumber_InPlacePower(v, w, Py_None); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_MULTIPLY: + w = POP(); + v = POP(); + x = PyNumber_InPlaceMultiply(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_DIVIDE: + w = POP(); + v = POP(); + x = PyNumber_InPlaceDivide(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_MODULO: + w = POP(); + v = POP(); + x = PyNumber_InPlaceRemainder(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + case INPLACE_ADD: + w = POP(); + v = POP(); + if (PyInt_Check(v) && PyInt_Check(w)) { + /* INLINE: int + int */ + register long a, b, i; + a = PyInt_AS_LONG(v); + b = PyInt_AS_LONG(w); + i = a + b; + if ((i^a) < 0 && (i^b) < 0) { + PyErr_SetString(PyExc_OverflowError, + "integer addition"); + x = NULL; + } + else + x = PyInt_FromLong(i); + } + else + x = PyNumber_InPlaceAdd(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_SUBTRACT: + w = POP(); + v = POP(); + if (PyInt_Check(v) && PyInt_Check(w)) { + /* INLINE: int - int */ + register long a, b, i; + a = PyInt_AS_LONG(v); + b = PyInt_AS_LONG(w); + i = a - b; + if ((i^a) < 0 && (i^~b) < 0) { + PyErr_SetString(PyExc_OverflowError, + "integer subtraction"); + x = NULL; + } + else + x = PyInt_FromLong(i); + } + else + x = PyNumber_InPlaceSubtract(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_LSHIFT: + w = POP(); + v = POP(); + x = PyNumber_InPlaceLshift(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_RSHIFT: + w = POP(); + v = POP(); + x = PyNumber_InPlaceRshift(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_AND: + w = POP(); + v = POP(); + x = PyNumber_InPlaceAnd(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_XOR: + w = POP(); + v = POP(); + x = PyNumber_InPlaceXor(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_OR: + w = POP(); + v = POP(); + x = PyNumber_InPlaceOr(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + case SLICE+0: case SLICE+1: *************** *** 1064,1067 **** --- 1261,1268 ---- break; + + #ifdef CASE_TOO_BIG + default: switch (opcode) { + #endif case BREAK_LOOP: why = WHY_BREAK; *************** *** 1181,1188 **** break; - #ifdef CASE_TOO_BIG - default: switch (opcode) { - #endif - case UNPACK_SEQUENCE: v = POP(); --- 1382,1385 ---- Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.133 retrieving revision 2.134 diff -C2 -r2.133 -r2.134 *** compile.c 2000/08/24 00:32:09 2.133 --- compile.c 2000/08/24 20:11:31 2.134 *************** *** 392,396 **** static int com_argdefs(struct compiling *, node *); static int com_newlocal(struct compiling *, char *); ! static void com_assign(struct compiling *, node *, int); static PyCodeObject *icompile(struct _node *, struct compiling *); static PyCodeObject *jcompile(struct _node *, char *, --- 392,397 ---- static int com_argdefs(struct compiling *, node *); static int com_newlocal(struct compiling *, char *); ! static void com_assign(struct compiling *, node *, int, node *); ! static void com_assign_name(struct compiling *, node *, int); static PyCodeObject *icompile(struct _node *, struct compiling *); static PyCodeObject *jcompile(struct _node *, char *, *************** *** 398,401 **** --- 399,403 ---- static PyObject *parsestrplus(node *); static PyObject *parsestr(char *); + static node *get_rawdocstring(node *); static int *************** *** 996,1000 **** com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN); c->c_loops++; com_list_iter(c, n, e, t); --- 998,1002 ---- com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN, NULL); c->c_loops++; com_list_iter(c, n, e, t); *************** *** 1204,1207 **** --- 1206,1262 ---- static void + com_augassign_slice(struct compiling *c, node *n, int opcode, node *augn) + { + if (NCH(n) == 1) { + com_addbyte(c, DUP_TOP); + com_push(c, 1); + com_addbyte(c, SLICE); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_TWO); + com_addbyte(c, STORE_SLICE); + com_pop(c, 2); + } else if (NCH(n) == 2 && TYPE(CHILD(n, 0)) != COLON) { + com_node(c, CHILD(n, 0)); + com_addoparg(c, DUP_TOPX, 2); + com_push(c, 2); + com_addbyte(c, SLICE+1); + com_pop(c, 1); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_THREE); + com_addbyte(c, STORE_SLICE+1); + com_pop(c, 3); + } else if (NCH(n) == 2) { + com_node(c, CHILD(n, 1)); + com_addoparg(c, DUP_TOPX, 2); + com_push(c, 2); + com_addbyte(c, SLICE+2); + com_pop(c, 1); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_THREE); + com_addbyte(c, STORE_SLICE+2); + com_pop(c, 3); + } else { + com_node(c, CHILD(n, 0)); + com_node(c, CHILD(n, 2)); + com_addoparg(c, DUP_TOPX, 3); + com_push(c, 3); + com_addbyte(c, SLICE+3); + com_pop(c, 2); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_FOUR); + com_addbyte(c, STORE_SLICE+3); + com_pop(c, 4); + } + } + + static void com_argument(struct compiling *c, node *n, PyObject **pkeywords) { *************** *** 1377,1381 **** static void ! com_subscriptlist(struct compiling *c, node *n, int assigning) { int i, op; --- 1432,1436 ---- static void ! com_subscriptlist(struct compiling *c, node *n, int assigning, node *augn) { int i, op; *************** *** 1389,1397 **** && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop)) { ! if (assigning == OP_APPLY) op = SLICE; ! else ! op = ((assigning == OP_ASSIGN) ? ! STORE_SLICE : DELETE_SLICE); com_slice(c, sub, op); if (op == STORE_SLICE) --- 1444,1461 ---- && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop)) { ! switch (assigning) { ! case OP_DELETE: ! op = DELETE_SLICE; ! break; ! case OP_ASSIGN: ! op = STORE_SLICE; ! break; ! case OP_APPLY: op = SLICE; ! break; ! default: ! com_augassign_slice(c, sub, assigning, augn); ! return; ! } com_slice(c, sub, op); if (op == STORE_SLICE) *************** *** 1411,1425 **** com_pop(c, i-1); } ! if (assigning == OP_APPLY) { ! op = BINARY_SUBSCR; ! i = 1; ! } ! else if (assigning == OP_ASSIGN) { op = STORE_SUBSCR; i = 3; } ! else { ! op = DELETE_SUBSCR; ! i = 2; } com_addbyte(c, op); --- 1475,1502 ---- com_pop(c, i-1); } ! switch (assigning) { ! case OP_DELETE: ! op = DELETE_SUBSCR; ! i = 2; ! break; ! default: ! case OP_ASSIGN: op = STORE_SUBSCR; i = 3; + break; + case OP_APPLY: + op = BINARY_SUBSCR; + i = 1; + break; } ! if (assigning > OP_APPLY) { ! com_addoparg(c, DUP_TOPX, 2); ! com_push(c, 2); ! com_addbyte(c, BINARY_SUBSCR); ! com_pop(c, 1); ! com_node(c, augn); ! com_addbyte(c, assigning); ! com_pop(c, 1); ! com_addbyte(c, ROT_THREE); } com_addbyte(c, op); *************** *** 1439,1443 **** break; case LSQB: ! com_subscriptlist(c, CHILD(n, 1), OP_APPLY); break; default: --- 1516,1520 ---- break; case LSQB: ! com_subscriptlist(c, CHILD(n, 1), OP_APPLY, NULL); break; default: *************** *** 1833,1840 **** /* Begin of assignment compilation */ - static void com_assign_name(struct compiling *, node *, int); - static void com_assign(struct compiling *, node *, int); static void com_assign_attr(struct compiling *c, node *n, int assigning) { --- 1910,1930 ---- /* Begin of assignment compilation */ static void + com_augassign_attr(struct compiling *c, node *n, int opcode, node *augn) + { + com_addbyte(c, DUP_TOP); + com_push(c, 1); + com_addopname(c, LOAD_ATTR, n); + com_pop(c, 1); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_TWO); + com_addopname(c, STORE_ATTR, n); + com_pop(c, 2); + } + + static void com_assign_attr(struct compiling *c, node *n, int assigning) { *************** *** 1844,1848 **** static void ! com_assign_trailer(struct compiling *c, node *n, int assigning) { REQ(n, trailer); --- 1934,1938 ---- static void ! com_assign_trailer(struct compiling *c, node *n, int assigning, node *augn) { REQ(n, trailer); *************** *** 1853,1860 **** break; case DOT: /* '.' NAME */ ! com_assign_attr(c, CHILD(n, 1), assigning); break; case LSQB: /* '[' subscriptlist ']' */ ! com_subscriptlist(c, CHILD(n, 1), assigning); break; default: --- 1943,1953 ---- break; case DOT: /* '.' NAME */ ! if (assigning > OP_APPLY) ! com_augassign_attr(c, CHILD(n, 1), assigning, augn); ! else ! com_assign_attr(c, CHILD(n, 1), assigning); break; case LSQB: /* '[' subscriptlist ']' */ ! com_subscriptlist(c, CHILD(n, 1), assigning, augn); break; default: *************** *** 1875,1879 **** } for (i = 0; i < NCH(n); i += 2) ! com_assign(c, CHILD(n, i), assigning); } --- 1968,1984 ---- } for (i = 0; i < NCH(n); i += 2) ! com_assign(c, CHILD(n, i), assigning, NULL); ! } ! ! static void ! com_augassign_name(struct compiling *c, node *n, int opcode, node *augn) ! { ! REQ(n, NAME); ! com_addopname(c, LOAD_NAME, n); ! com_push(c, 1); ! com_node(c, augn); ! com_addbyte(c, opcode); ! com_pop(c, 1); ! com_assign_name(c, n, OP_ASSIGN); } *************** *** 1888,1892 **** static void ! com_assign(struct compiling *c, node *n, int assigning) { /* Loop to avoid trivial recursion */ --- 1993,1997 ---- static void ! com_assign(struct compiling *c, node *n, int assigning, node *augn) { /* Loop to avoid trivial recursion */ *************** *** 1897,1900 **** --- 2002,2010 ---- case testlist: if (NCH(n) > 1) { + if (assigning > OP_APPLY) { + com_error(c, PyExc_SyntaxError, + "augmented assign to tuple not possible"); + return; + } com_assign_sequence(c, n, assigning); return; *************** *** 1941,1945 **** } /* NB i is still alive */ com_assign_trailer(c, ! CHILD(n, i), assigning); return; } --- 2051,2055 ---- } /* NB i is still alive */ com_assign_trailer(c, ! CHILD(n, i), assigning, augn); return; } *************** *** 1957,1960 **** --- 2067,2075 ---- return; } + if (assigning > OP_APPLY) { + com_error(c, PyExc_SyntaxError, + "augmented assign to tuple not possible"); + return; + } break; case LSQB: *************** *** 1965,1972 **** return; } com_assign_sequence(c, n, assigning); return; case NAME: ! com_assign_name(c, CHILD(n, 0), assigning); return; default: --- 2080,2097 ---- return; } + if (assigning > OP_APPLY) { + com_error(c, PyExc_SyntaxError, + "augmented assign to list not possible"); + return; + } com_assign_sequence(c, n, assigning); return; case NAME: ! if (assigning > OP_APPLY) ! com_augassign_name(c, CHILD(n, 0), ! assigning, augn); ! else ! com_assign_name(c, CHILD(n, 0), ! assigning); return; default: *************** *** 1992,2006 **** } ! /* Forward */ static node *get_rawdocstring(node *); static void com_expr_stmt(struct compiling *c, node *n) { ! REQ(n, expr_stmt); /* testlist ('=' testlist)* */ /* Forget it if we have just a doc string here */ if (!c->c_interactive && NCH(n) == 1 && get_rawdocstring(n) != NULL) return; ! com_node(c, CHILD(n, NCH(n)-1)); ! if (NCH(n) == 1) { if (c->c_interactive) com_addbyte(c, PRINT_EXPR); --- 2117,2158 ---- } ! static void ! com_augassign(struct compiling *c, node *n) ! { ! int opcode; ! ! switch (STR(CHILD(CHILD(n, 1), 0))[0]) { ! case '+': opcode = INPLACE_ADD; break; ! case '-': opcode = INPLACE_SUBTRACT; break; ! case '/': opcode = INPLACE_DIVIDE; break; ! case '%': opcode = INPLACE_MODULO; break; ! case '<': opcode = INPLACE_LSHIFT; break; ! case '>': opcode = INPLACE_RSHIFT; break; ! case '&': opcode = INPLACE_AND; break; ! case '^': opcode = INPLACE_XOR; break; ! case '|': opcode = INPLACE_OR; break; ! case '*': ! if (STR(CHILD(CHILD(n, 1), 0))[1] == '*') ! opcode = INPLACE_POWER; ! else ! opcode = INPLACE_MULTIPLY; ! break; ! default: ! com_error(c, PyExc_SystemError, "com_augassign: bad operator"); ! return; ! } ! com_assign(c, CHILD(n, 0), opcode, CHILD(n, 2)); ! } static void com_expr_stmt(struct compiling *c, node *n) { ! REQ(n, expr_stmt); ! /* testlist (('=' testlist)* | augassign testlist) */ /* Forget it if we have just a doc string here */ if (!c->c_interactive && NCH(n) == 1 && get_rawdocstring(n) != NULL) return; ! if (NCH(n) == 1) { ! com_node(c, CHILD(n, NCH(n)-1)); if (c->c_interactive) com_addbyte(c, PRINT_EXPR); *************** *** 2009,2014 **** --- 2161,2169 ---- com_pop(c, 1); } + else if (TYPE(CHILD(n,1)) == augassign) + com_augassign(c, n); else { int i; + com_node(c, CHILD(n, NCH(n)-1)); for (i = 0; i < NCH(n)-2; i+=2) { if (i+2 < NCH(n)-2) { *************** *** 2016,2020 **** com_push(c, 1); } ! com_assign(c, CHILD(n, i), OP_ASSIGN); } } --- 2171,2175 ---- com_push(c, 1); } ! com_assign(c, CHILD(n, i), OP_ASSIGN, NULL); } } *************** *** 2473,2477 **** com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN); c->c_loops++; com_node(c, CHILD(n, 5)); --- 2628,2632 ---- com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN, NULL); c->c_loops++; com_node(c, CHILD(n, 5)); *************** *** 2595,2599 **** com_pop(c, 1); if (NCH(ch) > 3) ! com_assign(c, CHILD(ch, 3), OP_ASSIGN); else { com_addbyte(c, POP_TOP); --- 2750,2754 ---- com_pop(c, 1); if (NCH(ch) > 3) ! com_assign(c, CHILD(ch, 3), OP_ASSIGN, NULL); else { com_addbyte(c, POP_TOP); *************** *** 2941,2945 **** break; case del_stmt: /* 'del' exprlist */ ! com_assign(c, CHILD(n, 1), OP_DELETE); break; case pass_stmt: --- 3096,3100 ---- break; case del_stmt: /* 'del' exprlist */ ! com_assign(c, CHILD(n, 1), OP_DELETE, NULL); break; case pass_stmt: Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -r2.27 -r2.28 *** graminit.c 2000/08/22 02:43:07 2.27 --- graminit.c 2000/08/24 20:11:32 2.28 *************** *** 227,312 **** {9, 1}, }; ! static arc arcs_11_1[2] = { ! {20, 0}, {0, 1}, }; ! static state states_11[2] = { {1, arcs_11_0}, ! {2, arcs_11_1}, }; [...2766 lines suppressed...] {25, 0}, {2, 0}, {3, 0}, ! {318, 0}, {1, "lambda"}, ! {315, 0}, {308, 0}, {309, 0}, + {310, 0}, {1, "class"}, {316, 0}, ! {317, 0}, ! {319, 0}, }; grammar _PyParser_Grammar = { ! 64, dfas, ! {142, labels}, 256 }; Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.147 retrieving revision 2.148 diff -C2 -r2.147 -r2.148 *** import.c 2000/08/21 16:35:06 2.147 --- import.c 2000/08/24 20:11:32 2.148 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50821 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50822 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Thu Aug 24 22:08:42 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 14:08:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib token.py,1.7,1.8 symbol.py,1.11,1.12 Message-ID: <200008242108.OAA27682@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv27109/Lib Modified Files: token.py symbol.py Log Message: Update for augmented assignment. Index: token.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/token.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** token.py 2000/02/04 15:28:41 1.7 --- token.py 2000/08/24 21:08:39 1.8 *************** *** 48,54 **** RIGHTSHIFT = 35 DOUBLESTAR = 36 ! OP = 37 ! ERRORTOKEN = 38 ! N_TOKENS = 39 NT_OFFSET = 256 #--end constants-- --- 48,65 ---- RIGHTSHIFT = 35 DOUBLESTAR = 36 ! PLUSEQUAL = 37 ! MINEQUAL = 38 ! STAREQUAL = 39 ! SLASHEQUAL = 40 ! PERCENTEQUAL = 41 ! AMPEREQUAL = 42 ! VBAREQUAL = 43 ! CIRCUMFLEXEQUAL = 44 ! LEFTSHIFTEQUAL = 45 ! RIGHTSHIFTEQUAL = 46 ! DOUBLESTAREQUAL = 47 ! OP = 48 ! ERRORTOKEN = 49 ! N_TOKENS = 50 NT_OFFSET = 256 #--end constants-- Index: symbol.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/symbol.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** symbol.py 2000/08/17 23:08:05 1.11 --- symbol.py 2000/08/24 21:08:39 1.12 *************** *** 23,77 **** small_stmt = 266 expr_stmt = 267 ! print_stmt = 268 ! del_stmt = 269 ! pass_stmt = 270 ! flow_stmt = 271 ! break_stmt = 272 ! continue_stmt = 273 ! return_stmt = 274 ! raise_stmt = 275 ! import_stmt = 276 ! import_as_name = 277 ! dotted_as_name = 278 ! dotted_name = 279 ! global_stmt = 280 ! exec_stmt = 281 ! assert_stmt = 282 ! compound_stmt = 283 ! if_stmt = 284 ! while_stmt = 285 ! for_stmt = 286 ! try_stmt = 287 ! except_clause = 288 ! suite = 289 ! test = 290 ! and_test = 291 ! not_test = 292 ! comparison = 293 ! comp_op = 294 ! expr = 295 ! xor_expr = 296 ! and_expr = 297 ! shift_expr = 298 ! arith_expr = 299 ! term = 300 ! factor = 301 ! power = 302 ! atom = 303 ! listmaker = 304 ! lambdef = 305 ! trailer = 306 ! subscriptlist = 307 ! subscript = 308 ! sliceop = 309 ! exprlist = 310 ! testlist = 311 ! dictmaker = 312 ! classdef = 313 ! arglist = 314 ! argument = 315 ! list_iter = 316 ! list_for = 317 ! list_if = 318 #--end constants-- --- 23,78 ---- small_stmt = 266 expr_stmt = 267 ! augassign = 268 ! print_stmt = 269 ! del_stmt = 270 ! pass_stmt = 271 ! flow_stmt = 272 ! break_stmt = 273 ! continue_stmt = 274 ! return_stmt = 275 ! raise_stmt = 276 ! import_stmt = 277 ! import_as_name = 278 ! dotted_as_name = 279 ! dotted_name = 280 ! global_stmt = 281 ! exec_stmt = 282 ! assert_stmt = 283 ! compound_stmt = 284 ! if_stmt = 285 ! while_stmt = 286 ! for_stmt = 287 ! try_stmt = 288 ! except_clause = 289 ! suite = 290 ! test = 291 ! and_test = 292 ! not_test = 293 ! comparison = 294 ! comp_op = 295 ! expr = 296 ! xor_expr = 297 ! and_expr = 298 ! shift_expr = 299 ! arith_expr = 300 ! term = 301 ! factor = 302 ! power = 303 ! atom = 304 ! listmaker = 305 ! lambdef = 306 ! trailer = 307 ! subscriptlist = 308 ! subscript = 309 ! sliceop = 310 ! exprlist = 311 ! testlist = 312 ! dictmaker = 313 ! classdef = 314 ! arglist = 315 ! argument = 316 ! list_iter = 317 ! list_for = 318 ! list_if = 319 #--end constants-- From python-dev@python.org Thu Aug 24 22:17:36 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 24 Aug 2000 14:17:36 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.26,1.27 Message-ID: <200008242117.OAA30649@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30622 Modified Files: pep-0200.txt Log Message: The popen problem is "solved". Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** pep-0200.txt 2000/08/23 19:40:52 1.26 --- pep-0200.txt 2000/08/24 21:17:33 1.27 *************** *** 198,204 **** even run? Does it need the w9xpopen hack? - Win98 Guido: popen is hanging on Guido, and even freezing the - whole machine. No clue yet. - Open items -- Need to be resolved before 2.0 final release --- 198,201 ---- *************** *** 225,228 **** --- 222,230 ---- let winreg.py out the door we'll be stuck with it forever, and not even Paul wants it anymore. + + [24-Aug-2000 tim+guido - done] + Win98 Guido: popen is hanging on Guido, and even freezing the + whole machine. Was caused by Norton Antivirus 2000 (6.10.20) on + Windows 9x. Resolution: disable virus protection. From python-dev@python.org Thu Aug 24 22:44:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 14:44:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib tokenize.py,1.13,1.14 Message-ID: <200008242144.OAA05099@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv4997/Lib Modified Files: tokenize.py Log Message: Update for augmented assignment, tested & approved by Guido. Index: tokenize.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tokenize.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** tokenize.py 2000/08/17 04:45:13 1.13 --- tokenize.py 2000/08/24 21:44:52 1.14 *************** *** 55,60 **** '[rR]?"' + any(r'[^\n"\\]', r'\\.') + '"') ! Operator = group('\+', '\-', '\*\*', '\*', '\^', '~', '/', '%', '&', '\|', ! '<<', '>>', '==', '<=', '<>', '!=', '>=', '=', '<', '>') Bracket = '[][(){}]' Special = group(r'\r?\n', r'[:;.,`]') --- 55,63 ---- '[rR]?"' + any(r'[^\n"\\]', r'\\.') + '"') ! Operator = group('\+=', '\-=', '\*=', '%=', '/=', '\*\*=', '&=', '\|=', ! '\^=', '>>=', '<<=', '\+', '\-', '\*\*', '\*', '\^', '~', ! '/', '%', '&', '\|', '<<', '>>', '==', '<=', '<>', '!=', ! '>=', '=', '<', '>') ! Bracket = '[][(){}]' Special = group(r'\r?\n', r'[:;.,`]') From python-dev@python.org Thu Aug 24 22:46:56 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 24 Aug 2000 14:46:56 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.27,1.28 Message-ID: <200008242146.OAA05542@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv5485 Modified Files: pep-0200.txt Log Message: update release schedule Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** pep-0200.txt 2000/08/24 21:17:33 1.27 --- pep-0200.txt 2000/08/24 21:46:53 1.28 *************** *** 18,25 **** Tentative Release Schedule 14-Aug-2000: All 2.0 PEPs finished / feature freeze ! 28-Aug-2000: 2.0 beta 1 ! 29-Sep-2000: 2.0 final --- 18,27 ---- Tentative Release Schedule + [revised 24 Aug 2000] 14-Aug-2000: All 2.0 PEPs finished / feature freeze ! 5-Sep-2000: 2.0 beta 1 ! mid-Sep-2000: beta 2 if necessary ! 6-Oct-2000: 2.0 final *************** *** 172,176 **** Open items -- Need to be resolved before 2.0b1 release ! Add popen2 support for Linux -- assigned to /F Get all patches out of Open. --- 174,178 ---- Open items -- Need to be resolved before 2.0b1 release ! Add popen2 support for Linux -- Fred Drake Get all patches out of Open. *************** *** 200,203 **** --- 202,208 ---- Open items -- Need to be resolved before 2.0 final release + Update Tools/compiler so that it is compatible with list + comprehensions, import as, and any other new language features. + Improve code coverage of test suite. *************** *** 214,217 **** --- 219,229 ---- + Open: proposed but not accepted or rejected + + * Problems reported with Tkinter, Tk 8.3.2,axs and Unicode + + * Extended slicing on lists - Michael Hudson + Make lists (and other builtin types) handle extended slices. + Open items -- completed/fixed *************** *** 289,297 **** * Integrated gettext module - Barry Warsaw wrapper around standard internationalization libraries - - Open: proposed but not accepted or rejected - - * Extended slicing on lists - Michael Hudson - Make lists (and other builtin types) handle extended slices. Postponed --- 301,304 ---- From python-dev@python.org Thu Aug 24 22:47:36 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Thu, 24 Aug 2000 14:47:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib UserString.py,1.5,1.6 Message-ID: <200008242147.OAA05606@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv5582 Modified Files: UserString.py Log Message: simple typo that makes regression test test_userstring fail Index: UserString.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserString.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** UserString.py 2000/08/24 20:14:09 1.5 --- UserString.py 2000/08/24 21:47:34 1.6 *************** *** 56,60 **** elif isinstance(other, StringType) or isinstance(other, UnicodeType): self.data += other ! else self.data += str(other) return self --- 56,60 ---- elif isinstance(other, StringType) or isinstance(other, UnicodeType): self.data += other ! else: self.data += str(other) return self From python-dev@python.org Thu Aug 24 22:57:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 14:57:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pyexpat.c,2.12,2.13 Message-ID: <200008242157.OAA06909@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv6898 Modified Files: pyexpat.c Log Message: Remove the Py_FatalError() from initpyexpat(); the Guido has decreed that this is not appropriate. Made somewhat more robust in the face of reload() (exception is not rebuilt, etc.). Made the exception a class exception. Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** pyexpat.c 2000/07/22 16:34:15 2.12 --- pyexpat.c 2000/08/24 21:57:43 2.13 *************** *** 864,868 **** /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); ! ErrorObject = PyString_FromString("pyexpat.error"); PyDict_SetItemString(d, "error", ErrorObject); --- 864,869 ---- /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); ! if (ErrorObject == NULL) ! ErrorObject = PyErr_NewException("pyexpat.error", NULL, NULL); PyDict_SetItemString(d, "error", ErrorObject); *************** *** 871,879 **** strlen(rev+11)-2)); - sys_modules = PySys_GetObject("modules"); - errors_module = PyModule_New("pyexpat.errors"); - PyDict_SetItemString(d, "errors", errors_module); - PyDict_SetItemString(sys_modules, "pyexpat.errors", errors_module); - /* XXX When Expat supports some way of figuring out how it was compiled, this should check and set native_encoding --- 872,875 ---- *************** *** 882,885 **** --- 878,901 ---- PyDict_SetItemString(d, "native_encoding", PyString_FromString("UTF-8")); + + sys_modules = PySys_GetObject("modules"); + { + PyObject *errmod_name = PyString_FromString("pyexpat.errors"); + + if (errmod_name != NULL) { + errors_module = PyDict_GetItem(errmod_name); + if (errors_module == NULL) { + errors_module = PyModule_New("pyexpat.errors"); + if (errors_module != NULL) { + PyDict_SetItemString(d, "errors", errors_module); + PyDict_SetItem(sys_modules, errmod_name, errors_module); + } + } + PyDECREF(errmod_name); + if (errors_module == NULL) + /* Don't code dump later! */ + return; + } + } errors_dict = PyModule_GetDict(errors_module); *************** *** 907,914 **** MYCONST(XML_ERROR_UNKNOWN_ENCODING); MYCONST(XML_ERROR_INCORRECT_ENCODING); - - /* Check for errors */ - if (PyErr_Occurred()) - Py_FatalError("can't initialize module pyexpat"); } --- 923,926 ---- From python-dev@python.org Thu Aug 24 23:27:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 15:27:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pyexpat.c,2.13,2.14 Message-ID: <200008242227.PAA12592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12566 Modified Files: pyexpat.c Log Message: Fix the evil booboos. ;( Causes discussed with Jeremy offline. Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** pyexpat.c 2000/08/24 21:57:43 2.13 --- pyexpat.c 2000/08/24 22:27:02 2.14 *************** *** 884,888 **** if (errmod_name != NULL) { ! errors_module = PyDict_GetItem(errmod_name); if (errors_module == NULL) { errors_module = PyModule_New("pyexpat.errors"); --- 884,888 ---- if (errmod_name != NULL) { ! errors_module = PyDict_GetItem(d, errmod_name); if (errors_module == NULL) { errors_module = PyModule_New("pyexpat.errors"); *************** *** 892,896 **** } } ! PyDECREF(errmod_name); if (errors_module == NULL) /* Don't code dump later! */ --- 892,896 ---- } } ! Py_DECREF(errmod_name); if (errors_module == NULL) /* Don't code dump later! */ From python-dev@python.org Thu Aug 24 23:44:56 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 15:44:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.26,1.27 Message-ID: <200008242244.PAA29912@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv29413/Lib Modified Files: dis.py Log Message: Add missing opcodes. Thanx to jeremy for reminding me ;) Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** dis.py 2000/08/24 20:14:09 1.26 --- dis.py 2000/08/24 22:44:53 1.27 *************** *** 151,154 **** --- 151,155 ---- def_op('ROT_THREE', 3) def_op('DUP_TOP', 4) + def_op('ROT_FOUR', 5) def_op('UNARY_POSITIVE', 10) *************** *** 229,233 **** name_op('STORE_GLOBAL', 97) # "" name_op('DELETE_GLOBAL', 98) # "" ! def_op('LOAD_CONST', 100) # Index in const list hasconst.append(100) --- 230,234 ---- name_op('STORE_GLOBAL', 97) # "" name_op('DELETE_GLOBAL', 98) # "" ! def_op('DUP_TOPX', 99) # number of items to duplicate def_op('LOAD_CONST', 100) # Index in const list hasconst.append(100) From python-dev@python.org Thu Aug 24 23:54:56 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 15:54:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.in,1.107,1.108 Message-ID: <200008242254.PAA08781@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv8506/Modules Modified Files: Setup.in Log Message: Adjust the name for the socket module in the SSL line. Index: Setup.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v retrieving revision 1.107 retrieving revision 1.108 diff -C2 -r1.107 -r1.108 *** Setup.in 2000/08/16 14:19:43 1.107 --- Setup.in 2000/08/24 22:54:53 1.108 *************** *** 157,161 **** # Socket module compiled with SSL support; you must edit the SSL variable: #SSL=/usr/local/ssl ! #socket socketmodule.c \ # -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ # -L$(SSL)/lib -lssl -lcrypto --- 157,161 ---- # Socket module compiled with SSL support; you must edit the SSL variable: #SSL=/usr/local/ssl ! #_socket socketmodule.c \ # -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ # -L$(SSL)/lib -lssl -lcrypto From python-dev@python.org Thu Aug 24 23:38:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 15:38:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyerrors.h,2.38,2.39 Message-ID: <200008242238.PAA23641@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv23579/Include Modified Files: pyerrors.h Log Message: Improve the exceptions raised by PyErr_BadInternalCall(); adding the filename and line number of the call site to allow esier debugging. This closes SourceForge patch #101214. Index: pyerrors.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyerrors.h,v retrieving revision 2.38 retrieving revision 2.39 diff -C2 -r2.38 -r2.39 *** pyerrors.h 2000/07/08 17:25:55 2.38 --- pyerrors.h 2000/08/24 22:38:39 2.39 *************** *** 83,87 **** --- 83,92 ---- #endif + /* Export the old function so that the existing API remains available: */ extern DL_IMPORT(void) PyErr_BadInternalCall(void); + extern DL_IMPORT(void) _PyErr_BadInternalCall(char *filename, int lineno); + /* Mask the old API with a call to the new API for code compiled under + Python 2.0: */ + #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) /* Function to create a new exception */ From python-dev@python.org Thu Aug 24 23:38:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 15:38:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python errors.c,2.52,2.53 Message-ID: <200008242238.PAA23646@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv23579/Python Modified Files: errors.c Log Message: Improve the exceptions raised by PyErr_BadInternalCall(); adding the filename and line number of the call site to allow esier debugging. This closes SourceForge patch #101214. Index: errors.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** errors.c 2000/08/18 18:01:06 2.52 --- errors.c 2000/08/24 22:38:39 2.53 *************** *** 370,378 **** void PyErr_BadInternalCall(void) { ! PyErr_SetString(PyExc_SystemError, ! "bad argument to internal function"); } --- 370,391 ---- void + _PyErr_BadInternalCall(char *filename, int lineno) + { + PyErr_Format(PyExc_SystemError, + "%s:%d: bad argument to internal function", + filename, lineno); + } + + /* Remove the preprocessor macro for PyErr_BadInternalCall() so that we can + export the entry point for existing object code: */ + #undef PyErr_BadInternalCall + void PyErr_BadInternalCall(void) { ! PyErr_Format(PyExc_SystemError, ! "bad argument to internal function"); } + #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) + From python-dev@python.org Fri Aug 25 02:14:12 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:14:12 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.147,1.148 config.h.in,2.68,2.69 configure,1.136,1.137 Message-ID: <200008250114.SAA13196@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv11924 Modified Files: configure.in config.h.in configure Log Message: Add configure tests for poll() (SF patch #100852) Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.147 retrieving revision 1.148 diff -C2 -r1.147 -r1.148 *** configure.in 2000/08/23 21:33:04 1.147 --- configure.in 2000/08/25 01:14:07 1.148 *************** *** 368,372 **** # checks for header files AC_HEADER_STDC ! AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ --- 368,372 ---- # checks for header files AC_HEADER_STDC ! AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ *************** *** 873,877 **** getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock pthread_init \ putenv readlink \ select setegid seteuid setgid \ --- 873,877 ---- getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid \ Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.68 retrieving revision 2.69 diff -C2 -r2.68 -r2.69 *** config.h.in 2000/08/23 21:33:04 2.68 --- config.h.in 2000/08/25 01:14:08 2.69 *************** *** 405,408 **** --- 405,411 ---- #undef HAVE_PLOCK + /* Define if you have the poll function. */ + #undef HAVE_POLL + /* Define if you have the pthread_init function. */ #undef HAVE_PTHREAD_INIT *************** *** 536,539 **** --- 539,545 ---- /* Define if you have the header file. */ #undef HAVE_NDIR_H + + /* Define if you have the header file. */ + #undef HAVE_POLL_H /* Define if you have the header file. */ Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.136 retrieving revision 1.137 diff -C2 -r1.136 -r1.137 *** configure 2000/08/23 21:33:04 1.136 --- configure 2000/08/25 01:14:08 1.137 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.146 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.147 # Guess values for system-dependent variables and create Makefiles. *************** *** 1537,1541 **** fi ! for ac_hdr in dlfcn.h fcntl.h limits.h locale.h ncurses.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ --- 1537,1541 ---- fi ! for ac_hdr in dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ *************** *** 3799,3803 **** getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock pthread_init \ putenv readlink \ select setegid seteuid setgid \ --- 3799,3803 ---- getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid \ From python-dev@python.org Fri Aug 25 02:15:37 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:15:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules selectmodule.c,2.42,2.43 Message-ID: <200008250115.SAA14471@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13765 Modified Files: selectmodule.c Log Message: Add interface to poll() system call (SF patch #100852) Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.42 retrieving revision 2.43 diff -C2 -r2.42 -r2.43 *** selectmodule.c 2000/07/31 15:28:04 2.42 --- selectmodule.c 2000/08/25 01:15:33 2.43 *************** *** 25,28 **** --- 25,31 ---- #include #endif + #ifdef HAVE_POLL_H + #include + #endif #ifdef __sgi *************** *** 300,303 **** --- 303,584 ---- } + #ifdef HAVE_POLL + /* + * poll() support + */ + + typedef struct { + PyObject_HEAD + PyObject *dict; + int ufd_uptodate; + int ufd_len; + struct pollfd *ufds; + } pollObject; + + staticforward PyTypeObject poll_Type; + + /* Update the malloc'ed array of pollfds to match the dictionary + contained within a pollObject. Return 1 on success, 0 on an error. + */ + + static int + update_ufd_array(pollObject *self) + { + int i, j, pos; + PyObject *key, *value; + + self->ufd_len = PyDict_Size(self->dict); + PyMem_Resize(self->ufds, struct pollfd, self->ufd_len); + if (self->ufds == NULL) { + PyErr_NoMemory(); + return 0; + } + + i = pos = 0; + while ((j = PyDict_Next(self->dict, &pos, &key, &value))) { + self->ufds[i].fd = PyInt_AsLong(key); + self->ufds[i].events = PyInt_AsLong(value); + i++; + } + self->ufd_uptodate = 1; + return 1; + } + + static char poll_register_doc[] = + "register(fd [, eventmask] ) -> None\n\n\ + Register a file descriptor with the polling object.\n\ + fd -- either an integer, or an object with a fileno() method returning an int.\n\ + events -- an optional bitmask describing the type of events to check for"; + + static PyObject * + poll_register(pollObject *self, PyObject *args) + { + PyObject *o, *key, *value; + int fd, events = POLLIN | POLLPRI | POLLOUT; + + if (!PyArg_ParseTuple(args, "O|i", &o, &events)) { + return NULL; + } + + fd = PyObject_AsFileDescriptor(o); + if (fd == -1) return NULL; + + /* Add entry to the internal dictionary: the key is the + file descriptor, and the value is the event mask. */ + if ( (NULL == (key = PyInt_FromLong(fd))) || + (NULL == (value = PyInt_FromLong(events))) || + (PyDict_SetItem(self->dict, key, value)) == -1) { + return NULL; + } + self->ufd_uptodate = 0; + + Py_INCREF(Py_None); + return Py_None; + } + + static char poll_unregister_doc[] = + "unregister(fd) -> None\n\n\ + Remove a file descriptor being tracked by the polling object."; + + static PyObject * + poll_unregister(pollObject *self, PyObject *args) + { + PyObject *o, *key; + int fd; + + if (!PyArg_ParseTuple(args, "O", &o)) { + return NULL; + } + + fd = PyObject_AsFileDescriptor( o ); + if (fd == -1) + return NULL; + + /* Check whether the fd is already in the array */ + key = PyInt_FromLong(fd); + if (key == NULL) + return NULL; + + if (PyDict_DelItem(self->dict, key) == -1) { + Py_DECREF(key); + /* This will simply raise the KeyError set by PyDict_DelItem + if the file descriptor isn't registered. */ + return NULL; + } + + Py_DECREF(key); + self->ufd_uptodate = 0; + + Py_INCREF(Py_None); + return Py_None; + } + + static char poll_poll_doc[] = + "poll( [timeout] ) -> list of (fd, event) 2-tuples\n\n\ + Polls the set of registered file descriptors, returning a list containing \n\ + any descriptors that have events or errors to report."; + + static PyObject * + poll_poll(pollObject *self, PyObject *args) + { + PyObject *result_list = NULL, *tout = NULL; + int timeout = 0, poll_result, i, j; + PyObject *value = NULL, *num = NULL; + + if (!PyArg_ParseTuple(args, "|O", &tout)) { + return NULL; + } + + /* Check values for timeout */ + if (tout == NULL || tout == Py_None) + timeout = -1; + else if (!PyArg_Parse(tout, "i", &timeout)) { + PyErr_SetString(PyExc_TypeError, + "timeout must be an integer or None"); + return NULL; + } + + /* Ensure the ufd array is up to date */ + if (!self->ufd_uptodate) + if (update_ufd_array(self) == 0) + return NULL; + + /* call poll() */ + Py_BEGIN_ALLOW_THREADS; + poll_result = poll(self->ufds, self->ufd_len, timeout); + Py_END_ALLOW_THREADS; + + if (poll_result < 0) { + PyErr_SetFromErrno(SelectError); + return NULL; + } + + /* build the result list */ + + result_list = PyList_New(poll_result); + if (!result_list) + return NULL; + else { + for (i = 0, j = 0; j < poll_result; j++) { + /* skip to the next fired descriptor */ + while (!self->ufds[i].revents) { + i++; + } + /* if we hit a NULL return, set value to NULL + and break out of loop; code at end will + clean up result_list */ + value = PyTuple_New(2); + if (value == NULL) + goto error; + num = PyInt_FromLong(self->ufds[i].fd); + if (num == NULL) { + Py_DECREF(value); + goto error; + } + PyTuple_SET_ITEM(value, 0, num); + + num = PyInt_FromLong(self->ufds[i].revents); + if (num == NULL) { + Py_DECREF(value); + goto error; + } + PyTuple_SET_ITEM(value, 1, num); + if ((PyList_SetItem(result_list, j, value)) == -1) { + Py_DECREF(value); + goto error; + } + i++; + } + } + return result_list; + + error: + Py_DECREF(result_list); + return NULL; + } + + static PyMethodDef poll_methods[] = { + {"register", (PyCFunction)poll_register, + METH_VARARGS, poll_register_doc}, + {"unregister", (PyCFunction)poll_unregister, + METH_VARARGS, poll_unregister_doc}, + {"poll", (PyCFunction)poll_poll, + METH_VARARGS, poll_poll_doc}, + {NULL, NULL} /* sentinel */ + }; + + static pollObject * + newPollObject() + { + pollObject *self; + self = PyObject_New(pollObject, &poll_Type); + if (self == NULL) + return NULL; + /* ufd_uptodate is a Boolean, denoting whether the + array pointed to by ufds matches the contents of the dictionary. */ + self->ufd_uptodate = 0; + self->ufds = NULL; + self->dict = PyDict_New(); + if (self->dict == NULL) { + Py_DECREF(self); + return NULL; + } + return self; + } + + static void + poll_dealloc(pollObject *self) + { + if (self->ufds != NULL) + PyMem_DEL(self->ufds); + Py_XDECREF(self->dict); + PyObject_Del(self); + } + + static PyObject * + poll_getattr(pollObject *self, char *name) + { + return Py_FindMethod(poll_methods, (PyObject *)self, name); + } + + statichere PyTypeObject poll_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "poll", /*tp_name*/ + sizeof(pollObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)poll_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)poll_getattr, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + }; + + static char poll_doc[] = + "Returns a polling object, which supports registering and\n\ + unregistering file descriptors, and then polling them for I/O events."; + + static PyObject * + select_poll(PyObject *self, PyObject *args) + { + pollObject *rv; + + if (!PyArg_ParseTuple(args, ":poll")) + return NULL; + rv = newPollObject(); + if ( rv == NULL ) + return NULL; + return (PyObject *)rv; + } + #endif /* HAVE_POLL */ + static char select_doc[] = "select(rlist, wlist, xlist[, timeout]) -> (rlist, wlist, xlist)\n\ *************** *** 323,329 **** On Windows, only sockets are supported; on Unix, all file descriptors."; - static PyMethodDef select_methods[] = { ! {"select", select_select, 1, select_doc}, {0, 0}, /* sentinel */ }; --- 604,612 ---- On Windows, only sockets are supported; on Unix, all file descriptors."; static PyMethodDef select_methods[] = { ! {"select", select_select, METH_VARARGS, select_doc}, ! #ifdef HAVE_POLL ! {"poll", select_poll, METH_VARARGS, poll_doc}, ! #endif /* HAVE_POLL */ {0, 0}, /* sentinel */ }; *************** *** 335,338 **** --- 618,640 ---- On Windows, only sockets are supported; on Unix, all file descriptors."; + /* + * Convenience routine to export an integer value. + * For simplicity, errors (which are unlikely anyway) are ignored. + */ + + static void + insint(PyObject *d, char *name, int value) + { + PyObject *v = PyInt_FromLong((long) value); + if (v == NULL) { + /* Don't bother reporting this error */ + PyErr_Clear(); + } + else { + PyDict_SetItemString(d, name, v); + Py_DECREF(v); + } + } + DL_EXPORT(void) initselect(void) *************** *** 343,345 **** --- 645,662 ---- SelectError = PyErr_NewException("select.error", NULL, NULL); PyDict_SetItemString(d, "error", SelectError); + #ifdef HAVE_POLL + poll_Type.ob_type = &PyType_Type; + insint(d, "POLLIN", POLLIN); + insint(d, "POLLPRI", POLLPRI); + insint(d, "POLLOUT", POLLOUT); + insint(d, "POLLERR", POLLERR); + insint(d, "POLLHUP", POLLHUP); + insint(d, "POLLNVAL", POLLNVAL); + + insint(d, "POLLRDNORM", POLLRDNORM); + insint(d, "POLLRDBAND", POLLRDBAND); + insint(d, "POLLWRNORM", POLLWRNORM); + insint(d, "POLLWRBAND", POLLWRBAND); + insint(d, "POLLMSG", POLLMSG); + #endif /* HAVE_POLL */ } From python-dev@python.org Fri Aug 25 02:18:48 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:18:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_poll.py,NONE,1.1 Message-ID: <200008250118.SAA16970@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv16234 Added Files: test_poll.py Log Message: Test suite for poll() interface (SF patch #100852) --- NEW FILE --- # Test case for the os.poll() function import sys, os, select, random from test.test_support import verbose, TestSkipped, TESTFN try: select.poll except AttributeError: raise TestSkipped, "select.poll not defined -- skipping test_poll" def find_ready_matching(ready, flag): match = [] for fd, mode in ready: if mode & flag: match.append(fd) return match def test_poll1(): """Basic functional test of poll object Create a bunch of pipe and test that poll works with them. """ print 'Running poll test 1' p = select.poll() NUM_PIPES = 12 MSG = " This is a test." MSG_LEN = len(MSG) readers = [] writers = [] r2w = {} w2r = {} for i in range(NUM_PIPES): rd, wr = os.pipe() p.register(rd, select.POLLIN) p.register(wr, select.POLLOUT) readers.append(rd) writers.append(wr) r2w[rd] = wr w2r[wr] = rd while writers: ready = p.poll() ready_writers = find_ready_matching(ready, select.POLLOUT) if not ready_writers: raise RuntimeError, "no pipes ready for writing" wr = random.choice(ready_writers) os.write(wr, MSG) ready = p.poll() ready_readers = find_ready_matching(ready, select.POLLIN) if not ready_readers: raise RuntimeError, "no pipes ready for reading" rd = random.choice(ready_readers) buf = os.read(rd, MSG_LEN) assert len(buf) == MSG_LEN print buf os.close(r2w[rd]) writers.remove(r2w[rd]) poll_unit_tests() print 'Poll test 1 complete' def poll_unit_tests(): # returns NVAL for invalid file descriptor FD = 42 try: os.close(FD) except OSError: pass p = select.poll() p.register(FD) r = p.poll() assert r[0] == (FD, select.POLLNVAL) f = open(TESTFN, 'w') fd = f.fileno() p = select.poll() p.register(f) r = p.poll() assert r[0][0] == fd f.close() r = p.poll() assert r[0] == (fd, select.POLLNVAL) os.unlink(TESTFN) # type error for invalid arguments p = select.poll() try: p.register(p) except TypeError: pass else: print "Bogus register call did not raise TypeError" try: p.unregister(p) except TypeError: pass else: print "Bogus unregister call did not raise TypeError" # can't unregister non-existent object p = select.poll() try: p.unregister(3) except KeyError: pass else: print "Bogus unregister call did not raise KeyError" # Test error cases pollster = select.poll() class Nope: pass class Almost: def fileno(self): return 'fileno' try: pollster.register( Nope(), 0 ) except TypeError: pass else: print 'expected TypeError exception, not raised' try: pollster.register( Almost(), 0 ) except TypeError: pass else: print 'expected TypeError exception, not raised' # Another test case for poll(). This is copied from the test case for # select(), modified to use poll() instead. def test_poll2(): print 'Running poll test 2' cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') pollster = select.poll() pollster.register( p, select.POLLIN ) for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10: if verbose: print 'timeout =', tout fdlist = pollster.poll(tout) if (fdlist == []): continue if fdlist[0] == (p.fileno(),select.POLLHUP): line = p.readline() if line != "": print 'error: pipe seems to be closed, but still returns data' continue elif fdlist[0] == (p.fileno(),select.POLLIN): line = p.readline() if verbose: print `line` if not line: if verbose: print 'EOF' break continue else: print 'Unexpected return value from select.poll:', fdlist p.close() print 'Poll test 2 complete' test_poll1() test_poll2() From python-dev@python.org Fri Aug 25 02:18:48 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:18:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_poll,NONE,1.1 Message-ID: <200008250118.SAA16974@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv16234/output Added Files: test_poll Log Message: Test suite for poll() interface (SF patch #100852) --- NEW FILE --- test_poll Running poll test 1 This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. Poll test 1 complete Running poll test 2 timeout = 0 timeout = 1000 'testing...\012' timeout = 2000 'testing...\012' timeout = 4000 'testing...\012' timeout = 8000 'testing...\012' timeout = 16000 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 timeout = -1 timeout = -1 timeout = -1 timeout = -1 Poll test 2 complete From python-dev@python.org Fri Aug 25 02:21:31 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:21:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libselect.tex,1.15,1.16 Message-ID: <200008250121.SAA19189@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17684 Modified Files: libselect.tex Log Message: Documentation for poll() interface (SF patch #100852) Index: libselect.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libselect.tex,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** libselect.tex 2000/04/03 20:13:54 1.15 --- libselect.tex 2000/08/25 01:21:28 1.16 *************** *** 6,10 **** ! This module provides access to the function \cfunction{select()} available in most operating systems. Note that on Windows, it only works for sockets; on other operating systems, it also works for other --- 6,11 ---- ! This module provides access to the \cfunction{select()} ! and \cfunction{poll()} functions available in most operating systems. Note that on Windows, it only works for sockets; on other operating systems, it also works for other *************** *** 22,25 **** --- 23,34 ---- \end{excdesc} + \begin{funcdesc}{poll}{} + (Not supported by all operating systems.) Returns a polling object, + which supports registering and unregistering file descriptors, and + then polling them for I/O events; + see section~\ref{poll-objects} below for the methods supported by + polling objects. + \end{funcdesc} + \begin{funcdesc}{select}{iwtd, owtd, ewtd\optional{, timeout}} This is a straightforward interface to the \UNIX{} \cfunction{select()} *************** *** 53,54 **** --- 62,129 ---- file descriptor, not just a random integer). \end{funcdesc} + + \subsection{Polling Objects + \label{poll-objects}} + + The \cfunction{poll()} system call, supported on most Unix systems, + provides better scalability for network servers that service many, + many clients at the same time. + \cfunction{poll()} scales better because the system call only + requires listing the file descriptors of interest, while \cfunction{select()} + builds a bitmap, turns on bits for the fds of interest, and then + afterward the whole bitmap has to be linearly scanned again. + \cfunction{select()} is O(highest file descriptor), while + \cfunction{poll()} is O(number of file descriptors). + + \begin{methoddesc}{register}{fd\optional{, eventmask}} + Register a file descriptor with the polling object. Future calls to + the \method{poll()} method will then check whether the file descriptor + has any pending I/O events. \var{fd} can be either an integer, or an + object with a \method{fileno()} method that returns an integer. File + objects implement + \method{fileno()}, so they can also be used as the argument. + + \var{eventmask} is an optional bitmask describing the type of events you + want to check for, and can be a combination of the constants + \constant{POLLIN}, \constant{POLLPRI}, and \constant{POLLOUT}, + described in the table below. If not specified, the default value + used will check for all 3 types of events. + + \begin{tableii}{l|l}{code}{Constant}{Meaning} + \lineii{POLLIN}{There is data to read} + \lineii{POLLPRI}{There is urgent data to read} + \lineii{POLLOUT}{Ready for output: writing will not block} + \lineii{POLLERR}{Error condition of some sort} + \lineii{POLLHUP}{Hung up} + \lineii{POLLNVAL}{Invalid request: descriptor not open} + \end{tableii} + + Registering a file descriptor that's already registered is not an + error, and has the same effect as registering the descriptor exactly + once. + + \end{methoddesc} + + \begin{methoddesc}{unregister}{fd} + Remove a file descriptor being tracked by a polling object. Just like + the \method{register()} method, \var{fd} can be an integer or an + object with a \method{fileno()} method that returns an integer. + + Attempting to remove a file descriptor that was never registered + causes a \exception{KeyError} exception to be raised. + \end{methoddesc} + + \begin{methoddesc}{poll}{\optional{timeout}} + Polls the set of registered file descriptors, and returns a + possibly-empty list containing \code{(\var{fd}, \var{event})} 2-tuples + for the descriptors that have events or errors to report. + \var{fd} is the file descriptor, and \var{event} is a bitmask + with bits set for the reported events for that descriptor + --- \constant{POLLIN} for waiting input, + \constant{POLLOUT} to indicate that the descriptor can be written to, and + so forth. + An empty list indicates that the call timed out and no file + descriptors had any events to report. + \end{methoddesc} + + From python-dev@python.org Fri Aug 25 06:13:45 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 22:13:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.26,1.27 Message-ID: <200008250513.WAA02781@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2772/lib Modified Files: liburllib.tex Log Message: Revised documentation relevant to SourceForge patch #100837 (simplify making HTTP POST requests). Added documentation of URLopener.version and how it can be overridden. Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** liburllib.tex 2000/08/24 16:20:32 1.26 --- liburllib.tex 2000/08/25 05:13:42 1.27 *************** *** 1,4 **** \section{\module{urllib} --- ! Open an arbitrary resource by URL} \declaremodule{standard}{urllib} --- 1,4 ---- \section{\module{urllib} --- ! Open arbitrary resources by URL} \declaremodule{standard}{urllib} *************** *** 165,174 **** \end{funcdesc} ! The public functions \function{urlopen()} and \function{urlretrieve()} ! create an instance of the \class{FancyURLopener} class and use it to perform ! their requested actions. To override this functionality, programmers can ! create a subclass of \class{URLopener} or \class{FancyURLopener}, then ! assign that class to the \var{urllib._urlopener} variable before calling the ! desired function. For example, applications may want to specify a different \code{user-agent} header than \class{URLopener} defines. This can be accomplished with the following code: --- 165,176 ---- \end{funcdesc} ! The public functions \function{urlopen()} and ! \function{urlretrieve()} create an instance of the ! \class{FancyURLopener} class and use it to perform their requested ! actions. To override this functionality, programmers can create a ! subclass of \class{URLopener} or \class{FancyURLopener}, then assign ! that an instance of that class to the ! \code{urllib._urlopener} variable before calling the desired function. ! For example, applications may want to specify a different \code{user-agent} header than \class{URLopener} defines. This can be accomplished with the following code: *************** *** 194,198 **** define their own \code{user-agent} header by subclassing \class{URLopener} or \class{FancyURLopener} and setting the instance ! attribute \var{version} to an appropriate string value before the \method{open()} method is called. --- 196,200 ---- define their own \code{user-agent} header by subclassing \class{URLopener} or \class{FancyURLopener} and setting the instance ! attribute \member{version} to an appropriate string value before the \method{open()} method is called. *************** *** 268,274 **** \class{URLopener} and \class{FancyURLopener} objects have the ! following methods. ! \begin{methoddesc}{open}{fullurl\optional{, data}} Open \var{fullurl} using the appropriate protocol. This method sets up cache and proxy information, then calls the appropriate open method with --- 270,276 ---- \class{URLopener} and \class{FancyURLopener} objects have the ! following attributes. ! \begin{methoddesc}[URLopener]{open}{fullurl\optional{, data}} Open \var{fullurl} using the appropriate protocol. This method sets up cache and proxy information, then calls the appropriate open method with *************** *** 278,286 **** \end{methoddesc} ! \begin{methoddesc}{open_unknown}{fullurl\optional{, data}} Overridable interface to open unknown URL types. \end{methoddesc} ! \begin{methoddesc}{retrieve}{url\optional{, filename\optional{, reporthook}}} Retrieves the contents of \var{url} and places it in \var{filename}. The return value is a tuple consisting of a local filename and either a --- 280,290 ---- \end{methoddesc} ! \begin{methoddesc}[URLopener]{open_unknown}{fullurl\optional{, data}} Overridable interface to open unknown URL types. \end{methoddesc} ! \begin{methoddesc}[URLopener]{retrieve}{url\optional{, ! filename\optional{, ! reporthook\optional{, data}}}} Retrieves the contents of \var{url} and places it in \var{filename}. The return value is a tuple consisting of a local filename and either a *************** *** 302,305 **** --- 306,316 ---- see the \function{urlencode()} function below. \end{methoddesc} + + \begin{memberdesc}[URLopener]{version} + Variable that specifies the user agent of the opener object. To get + \refmodule{urllib} to tell servers that it is a particular user agent, + set this in a subclass as a class variable or in the constructor + before calling the base constructor. + \end{memberdesc} From python-dev@python.org Fri Aug 25 06:41:17 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 22:41:17 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.134,2.135 Message-ID: <200008250541.WAA04793@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv4570/Python Modified Files: compile.c Log Message: Fix allowable node-types for assignment, need to add 'listmaker'. (This fix is a bit broken, just as the test already was: the test for testlist and listmaker are done always, whereas the test for exprlist and the actual abort() are only done if Py_DEBUG is defined. Suggestions welcome, I guess ;) Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.134 retrieving revision 2.135 diff -C2 -r2.134 -r2.135 *** compile.c 2000/08/24 20:11:31 2.134 --- compile.c 2000/08/25 05:41:11 2.135 *************** *** 1960,1964 **** { int i; ! if (TYPE(n) != testlist) REQ(n, exprlist); if (assigning) { --- 1960,1964 ---- { int i; ! if (TYPE(n) != testlist && TYPE(n) != listmaker) REQ(n, exprlist); if (assigning) { From python-dev@python.org Fri Aug 25 07:52:47 2000 From: python-dev@python.org (Tim Peters) Date: Thu, 24 Aug 2000 23:52:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild _tkinter.dsp,1.17,1.18 python20.wse,1.8,1.9 readme.txt,1.11,1.12 Message-ID: <200008250652.XAA18208@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv17945/python/dist/src/pcbuild Modified Files: _tkinter.dsp python20.wse readme.txt Log Message: In readme.txt, make what's needed to build the "optional" subprojects much more explicit. Also document that we're moving to Tcl/Tk 8.3.2. Simplify .dsp files by getting rid of useless include paths. .wse file changed to reflect that my setup is different than Guido's: if you *build* a Python distro using python20.wse, beware! Index: _tkinter.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_tkinter.dsp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -r1.17 -r1.18 *** _tkinter.dsp 2000/08/13 22:59:26 1.17 --- _tkinter.dsp 2000/08/25 06:52:44 1.18 *************** *** 110,114 **** CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 --- 110,114 ---- CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 *************** *** 141,145 **** CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 --- 141,145 ---- CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** python20.wse 2000/08/22 14:04:24 1.8 --- python20.wse 2000/08/25 06:52:44 1.9 *************** *** 27,35 **** Variable Name3=_SRC_ Variable Description3=Python source directory ! Variable Default3=C:\src\Python-2.0 Variable Flags3=00001001 Variable Name4=_DOC_ Variable Description4=HTML documentation tree directory ! Variable Default4=C:\src\Python-2.0\html Variable Flags4=00001001 Variable Name5=_TCLMINOR_ --- 27,35 ---- Variable Name3=_SRC_ Variable Description3=Python source directory ! Variable Default3=C:\code\python\dist\src Variable Flags3=00001001 Variable Name4=_DOC_ Variable Description4=HTML documentation tree directory ! Variable Default4=C:\python16\doc Variable Flags4=00001001 Variable Name5=_TCLMINOR_ Index: readme.txt =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/readme.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** readme.txt 2000/08/11 23:20:32 1.11 --- readme.txt 2000/08/25 06:52:44 1.12 *************** *** 61,70 **** The following subprojects will generally NOT build out of the box. They wrap code Python doesn't control, and you'll need to download the base ! packages first (study the subproject structure from within MSVC to see ! where each expects to find the unpacked packages): _tkinter ! Python wrapper for the Tk windowing system. Requires tcl831.exe from http://dev.scriptics.com/software/tcltk/downloadnow83.html zlib --- 61,73 ---- The following subprojects will generally NOT build out of the box. They wrap code Python doesn't control, and you'll need to download the base ! packages first and unpack them into siblings of PCbuilds's parent ! directory; for example, if your PCbuild is .......\dist\src\PCbuild\, ! unpack into new subdirectories of dist\. _tkinter ! Python wrapper for the Tk windowing system. Requires tcl832.exe from http://dev.scriptics.com/software/tcltk/downloadnow83.html + Run the installer, forcing installation into dist\Tcl. + Be sure to install everything, including the Tcl/Tk header files. zlib *************** *** 73,76 **** --- 76,81 ---- and ftp://ftp.uu.net/graphics/png/src/zlib133.zip + Unpack the former into dist\zlib113dll. + Uppack the latter into dist\zlib113. bsddb *************** *** 78,85 **** --- 83,97 ---- from the "bsd db" link at http://www.nightmare.com/software.html + Unpack into dist\bsddb. + You then need to compile it: cd to dist\bsddb\Port\win32, and run + nmake -f makefile_nt.msc + This builds bsddb\Port\win32\db.lib, which the MSVC project links in. + Note that if you're running Win9X, you'll need to run vcvars32.bat + before running nmake (this batch file is in your MSVC installation). pyexpat Python wrapper for accelerated XML parsing. Requires ftp://ftp.jclark.com/pub/xml/expat.zip + Unpack into dist\expat. From python-dev@python.org Fri Aug 25 08:55:51 2000 From: python-dev@python.org (Tim Peters) Date: Fri, 25 Aug 2000 00:55:51 -0700 Subject: [Python-checkins] CVS: python/nondist/sf-html winssh.txt,NONE,1.1 sf-faq.html,1.14,1.15 Message-ID: <200008250755.AAA30921@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/sf-html In directory slayer.i.sourceforge.net:/tmp/cvs-serv30751 Modified Files: sf-faq.html Added Files: winssh.txt Log Message: Replaced the Windows cmdline CVS/SSH instructions with Andy Robinson's -- which work great. --- NEW FILE --- Setting up a cmdline CVS to work with SourceForge under Windows --------------------------------------------------------------- 28-Jun-2000 Original by Andy Robinson (andy@reportlab.com) 03-Jul-2000 Modified by Tim Peters (tim_one@msn.com) 16-Aug-2000 Modified by Riaan Booysen (riaan@e.co.za) 25-Aug-2000 Modified by Tim Peters (tim_one@msn.com) 1. Get ftp.reportlab.com/tools/cvs-1.10-win.zip ftp.reportlab.com/tools/ssh-1.2.14-win32bin.zip (copied from somewhere obscure for safety, I forget where) 2. Unzip these to a location on your path. Type 'cvs' and 'ssh' from somewhere else to verify. 3. Choose where to keep your CVS projects; let's assume C:\Code 4. Create a subdirectory C:\Code\.ssh (yes, dot-ssh) 5. (see #8 for an alternative) Create two environment variables: HOME=C:\Code CVS_RSH=ssh HOME must point to the directory above your .ssh directory. On Win9x, this can be done in a batch file or autoexec.bat; e.g., set HOME=c:\Code set CVS_RSH=ssh Run the batch file, or reboot if you're using autoexec.bat. On NT or 2000, go to Control Panel | System | Environment and set them at either user or machine level. 6. If not done so, get a Sourceforge account and a project you can log in to. 7. OPTIONAL (& if you skip this now, you can do it later if you change your mind). If you want to avoid typing in your SourceForge password before every CVS operation, generate the ssh public and private identity keys like this: ssh-keygen -C $KEY -f C:\Code\.ssh\identity where $KEY is just some identifier (like your name or email address; this is not used for authentication, it's just stored in the public identity file as a reminder to you why you created this key). Note that you must use -f! ssh-keygen fails to work without it on Windows. When asked for a passphrase, security experts will tell you to choose a long and hard-to-guess string. But then you have to type *that* all the time instead of your SourceForge password. If you just hit ENTER (leave the passphrase empty), you won't be bothered with SourceForge passwords or ssh passphrases again. This is a security tradeoff only you can make. If in doubt, ChOOzAl0Ng&HaRDtoGUessSTr1Ng. ssh-keygen creates two files under .ssh\: identity This is your private key, and is a binary file. NEVER reveal it to anyone. Do NOT share your .ssh directory across a network either. The scheme is only as secure as this file. identity.pub This is your public key, a text file, full of lots of digits and the mnemonic $KEY you gave to ssh-keygen. This file can be shared freely, and indeed must be shared for the scheme to be of any use. On your SourceForge account page, in the 'Shell Account Information' section click the [Edit Keys] link. Copy/paste the contents of the generated identity.pub file as one line into the Authorized Keys text box. After the next cron job (max 6 hours) your information should be updated. 8. Teach SSH about your project's home, by doing ssh -l $USERNAME $MYPROJECT.sourceforge.net where $USERNAME is your SourceForge login name and $MYPROJECT your SourceForge project name. You'll see Host "$MYPROJECT.sourceforge.net" added to the list of known hosts. and then Creating random seed file ~/.ssh/random_seed This may take a while. After a while it will prompt for a password. Type your SourceForge password and hit ENTER. After some SourceForge msgs scroll by, you'll be left at a SourceForge shell prompt. Type exit and hit ENTER. Now you're back at the DOS prompt. 9. You will need either a lengthy command line or a batch file for each sourceforge project. I set cvsroot in a batch file in my 'c:\code' directory, and have one such file for each CVS project I use (about ten of them!): set CVSROOT=:ext:$USERNAME@cvs.$MYPROJECT.sourceforge.net:/cvsroot/$DIRNAME where $USERNAME and $MYPROJECT are again your SourceForge login and project names, and $DIRNAME is the top-level directory in the SourceForge CVS tree; a project can have several, but usually there is just one. Note: you can keep HOME and CVS_RSH out of your permanent environment (see #5) by adding those definitions to this batch file instead. 10. Execute this batch file. You can now go to C:\Code and do cvs -z7 checkout $MYPROJECT (z7 means 'compress network traffic', handy over dialup lines) 11. From now on, just use CVS normally, running this batch file first each time you bring up a DOS box you're going to use for CVS work. Note: If you did not follow step 7, you'll be asked for your password each time you enter a CVS command. I wouldn't survive without Karl Fogel's book "Open Source Development with CVS", Coriolis Press. The CVS reference material (about 225 printed pages!) from this book is available for free download from http://cvsbook.red-bean.com/ Footnote: for anonymous checkout, I think you just omit the 'my_user_name@' part from the CVSROOT variable. I hope this helps; let me know if people have any problems with the instructions. - Andy Robinson ReportLab Index: sf-faq.html =================================================================== RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** sf-faq.html 2000/08/23 04:24:58 1.14 --- sf-faq.html 2000/08/25 07:55:48 1.15 *************** *** 47,52 ****

    4. Windows

      !
    1. How to install ssh?
    2. !
    3. How to install cvs to use ssh?
    --- 47,51 ----

    4. Windows

      !
    1. How to install cvs and ssh?
    *************** *** 420,476 ****

    4.1.:

    !

    Q: How to install ssh?

    A:

    ! Download the following file and unzip it to C:\BIN: ! !
    ! ftp://ftp.cs.hut.fi/pub/ssh/contrib/ssh-1.2.14-win32bin.zip
    ! Create a home directory (e.g. C:\HOME\SF_USERNAME) and ! C:\ETC and place a passwd file in C:\ETC: ! !
    ! mkdir C:\HOME
    ! mkdir C:\HOME\SF_USERNAME
    ! mkdir C:\ETC
    ! echo sf_username:x:1:10:Name, ! Real:/home/sf_username:/windows/command.com > ! C:\ETC\passwd
    ! Add the following entries to your environment. This can be automated e.g. by ! putting them into AUTOEXEC.BAT on Win9x. ! !
    ! SET PATH=%PATH%;C:\BIN
    ! SET HOME=\HOME\SF_USERNAME
    ! SET HOMEPATH=\HOME\SF_USERNAME
    ! SET HOMEDRIVE=C:
    ! SET USERNAME=sf_username
    ! After the environment is updated you should be able to use ssh. Try this: ! !
    ! ssh -l sf_username shell.sourceforge.net
    ! !

    4.2.:

    ! !

    Q: How to install cvs to use ssh?

    ! !

    A:

    ! Download the following file and unzip it to C:\BIN: ! !
    ! ftp://download.cyclic.com/pub/cvs-1.10/windows/cvs-1.10-win.zip
    ! Add the following entries to your environment. This can be automated e.g. by ! putting them into AUTOEXEC.BAT on Win9x. ! !
    ! SET CVS_RSH=ssh
    ! SET ! CVSROOT=:ext:sf_username@cvs.python.sourceforge.net:/cvsroot/python
    ! After the environment is updated you should be able to use cvs/ssh: Try this: ! !
    ! cvs co python

    5. Macintosh

    --- 419,431 ----

    4.1.:

    !

    Q: How to install cvs and ssh

    A:

    ! Here's a link to text instructions for ! setting up a cmdline CVS using SSH under Windows, ! originally developed by Andy Robinson. ! Tim Peters is too lazy to change it into HTML every time it's updated. ! All the Windows folks at Reportlab and PythonLabs swear by this scheme -- ! and all the others we've tried are broken.

    5. Macintosh

    From python-dev@python.org Fri Aug 25 11:47:49 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 25 Aug 2000 03:47:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects classobject.c,2.105,2.106 Message-ID: <200008251047.DAA21345@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv20722/Objects Modified Files: classobject.c Log Message: Call PyErr_Clear() to clear the AttributeError raised by GetAttr. Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.105 retrieving revision 2.106 diff -C2 -r2.105 -r2.106 *** classobject.c 2000/08/24 20:08:19 2.105 --- classobject.c 2000/08/25 10:47:46 2.106 *************** *** 1461,1464 **** --- 1461,1465 ---- if (!PyErr_ExceptionMatches(PyExc_AttributeError)) return NULL; + PyErr_Clear(); return instance_pow(v, w, z); } From python-dev@python.org Fri Aug 25 12:11:31 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 25 Aug 2000 04:11:31 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.11,1.12 Message-ID: <200008251111.EAA13270@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10423 Modified Files: pep-0203.txt Log Message: Update PEP to reflect reality. Explain the current mechanism the InPlace functions use to find the right function to call, and when to coerce or not. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** pep-0203.txt 2000/08/23 15:57:21 1.11 --- pep-0203.txt 2000/08/25 11:11:25 1.12 *************** *** 64,87 **** tries to call x.__iadd__(y), which is the `in-place' variant of ! __add__. If __iadd__ is not present, x.__add__(y) is ! attempted, and finally y.__radd__(x) if __add__ is missing too. ! There is no `right-hand-side' variant of __iadd__, because that ! would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __iadd__ hook should behave similar ! to __add__, returning the result of the operation (which could be ! `self') which is to be stored in the variable `x'. For C extension types, the `hooks' are members of the ! PyNumberMethods and PySequenceMethods structures, and are called ! in exactly the same manner as the existing non-inplace operations, ! including argument coercion. C methods should also take care to ! return a new reference to the result object, whether it's the same ! object or a new one. So if the original object is returned, it ! should be INCREF()'d appropriately. ! ! [XXX so I am accepting this, but I'm a bit worried about the ! argument coercion. For x+=y, if x supports augmented assignment, ! y should only be cast to x's type, not the other way around!] Rationale --- 64,138 ---- tries to call x.__iadd__(y), which is the `in-place' variant of ! __add__. If __iadd__ is not present, x.__add__(y) is attempted, ! and finally y.__radd__(x) if __add__ is missing too. There is no ! `right-hand-side' variant of __iadd__, because that would require ! for `y' to know how to in-place modify `x', which is unsafe to say ! the least. The __iadd__ hook should behave similar to __add__, ! returning the result of the operation (which could be `self') ! which is to be assigned to the variable `x'. For C extension types, the `hooks' are members of the ! PyNumberMethods and PySequenceMethods structures. Some special ! semantics apply to make the use of these methods, and the mixing ! of Python instance objects and C types, as unsurprising as ! possible. ! ! In the generic case of `x y' (or a similar case using the ! PyNumber_InPlace API functions) the principal object being ! operated on is `x'. This differs from normal binary operations, ! where `x' and `y' could be considered `co-operating', because ! unlike in binary operations, the operands in an in-place operation ! cannot be swapped. However, in-place operations do fall back to ! normal binary operations when in-place modification is not ! supported, resuling in the following rules: ! ! - If the left-hand object (`x') is an instance object, and it ! has a `__coerce__' method, call that function with `y' as the ! argument. If coercion succeeds, and the resulting left-hand ! object is a different object than `x', stop processing it as ! in-place and call the appropriate function for the normal binary ! operation, with the coerced `x' and `y' as arguments. The result ! of the operation is whatever that function returns. ! ! If coercion does not yield a different object for `x', or `x' ! does not define a `__coerce__' method, and `x' has the ! appropriate `__ihook__' for this operation, call that method ! with `y' as the argument, and the result of the operation is ! whatever that method returns. ! ! - Otherwise, if the left-hand object is not an instance object, ! but its type does define the in-place function for this ! operation, call that function with `x' and `y' as the arguments, ! and the result of the operation is whatever that function ! returns. ! ! Note that no coercion on either `x' or `y' is done in this case, ! and it's perfectly valid for a C type to receive an instance ! object as the second argument; that is something that cannot ! happen with normal binary operations. ! ! - Otherwise, process it exactly as a normal binary operation (not ! in-place), including argument coercion. In short, if either ! argument is an instance object, resolve the operation through ! `__coerce__', `__hook__' and `__rhook__'. Otherwise, both ! objects are C types, and they are coerced and passed to the ! appropriate function. ! ! - If no way to process the operation can be found, raise a ! TypeError with an error message specific to the operation. ! ! - Some special casing exists to account for the case of `+' and ! `*', which have a special meaning for sequences: for `+', ! sequence concatenation, no coercion what so ever is done if a C ! type defines sq_concat or sq_inplace_concat. For `*', sequence ! repeating, `y' is converted to a C integer before calling either ! sq_inplace_repeat and sq_repeat. This is done even if `y' is an ! instance, though not if `x' is an instance. ! ! The in-place function should always return a new reference, either ! to the old `x' object if the operation was indeed performed ! in-place, or to a new object. + Rationale *************** *** 134,138 **** packages, since some operations cannot be expressed in the limited set of binary operators to start with, but it is a start. A ! different PEP[3] is looking at adding new operators. --- 185,189 ---- packages, since some operations cannot be expressed in the limited set of binary operators to start with, but it is a start. A ! different PEP[2] is looking at adding new operators. *************** *** 195,199 **** Implementation ! The current implementation of augmented assignment[2] adds, in addition to the methods and slots already covered, 13 new bytecodes and 13 new API functions. --- 246,250 ---- Implementation ! The current implementation of augmented assignment[1] adds, in addition to the methods and slots already covered, 13 new bytecodes and 13 new API functions. *************** *** 272,285 **** bytecode at this time. - - It is not possible to do an inplace operation in the variant of - - += - - Instead, the instance objects' __radd__ hook is called, with the - builtin type as argument. The same goes for the other operations. - It might necessary to add a right-hand version of __add_ab__ after - all, to support something like that. - Copyright --- 323,326 ---- From python-dev@python.org Fri Aug 25 12:23:43 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 25 Aug 2000 04:23:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.102,1.103 Message-ID: <200008251123.EAA28112@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25778 Modified Files: urllib.py Log Message: Pass data on to retrieve method. Don't people *test* their changes? Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.102 retrieving revision 1.103 diff -C2 -r1.102 -r1.103 *** urllib.py 2000/08/24 16:18:04 1.102 --- urllib.py 2000/08/25 11:23:36 1.103 *************** *** 173,177 **** # External interface ! def retrieve(self, url, filename=None, reporthook=None): """retrieve(url) returns (filename, None) for a local object or (tempfilename, headers) for a remote object.""" --- 173,177 ---- # External interface ! def retrieve(self, url, filename=None, reporthook=None, data=None): """retrieve(url) returns (filename, None) for a local object or (tempfilename, headers) for a remote object.""" From python-dev@python.org Fri Aug 25 14:44:29 2000 From: python-dev@python.org (Jeremy Hylton) Date: Fri, 25 Aug 2000 06:44:29 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.28,1.29 Message-ID: <200008251344.GAA16623@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv16425 Modified Files: pep-0200.txt Log Message: bring up to date Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** pep-0200.txt 2000/08/24 21:46:53 1.28 --- pep-0200.txt 2000/08/25 13:44:26 1.29 *************** *** 189,195 **** Decide on a license. - Windows: Look for registry info in HKCU before HKLM - Mark - Hammond. - Windows installer: If HKLM isn't writable, back off to HKCU (so Python can be installed on NT & 2000 without admin privileges). --- 189,192 ---- *************** *** 221,231 **** Open: proposed but not accepted or rejected - * Problems reported with Tkinter, Tk 8.3.2,axs and Unicode - * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. Open items -- completed/fixed [20-Aug-2000 tim - done] Remove winreg.py and test_winreg2.py. Paul Prescod (the author) --- 218,253 ---- Open: proposed but not accepted or rejected * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. + * Problems reported with Tkinter, Tk 8.3.2, and Unicode (?) + + Accepted and in progress + + * Compression of Unicode database - Fredrik Lundh + SF Patch 100899 + + * PyErr_Format - Fredrik Lundh + Make this function safe from buffer overflows. + + * Support for opcode arguments > 2**16 - Charles Waldman + SF Patch 100893 + + * Range literals - Thomas Wouters + SF Patch 100902 + + * Change meaning of \x escapes - PEP 223 - Fredrik Lundh + + * Add \U1234678 escapes in u"" strings - Fredrik Lundh + + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries + Open items -- completed/fixed + [23-Aug-2000 jeremy - tim reports "completed recently"] + Windows: Look for registry info in HKCU before HKLM - Mark + Hammond. + [20-Aug-2000 tim - done] Remove winreg.py and test_winreg2.py. Paul Prescod (the author) *************** *** 274,304 **** http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 - - Accepted and in progress - * interface to poll system call - Andrew Kuchling SF Patch 100852 - * Compression of Unicode database - Fredrik Lundh - SF Patch 100899 - - * PyErr_Format - Fredrik Lundh - Make this function safe from buffer overflows. - - * Support for opcode arguments > 2**16 - Charles Waldman - SF Patch 100893 - - * Range literals - Thomas Wouters - SF Patch 100902 - * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. - * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? - - * Add \U1234678 escapes in u"" strings - Fredrik Lundh? - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries Postponed --- 296,305 ---- From python-dev@python.org Fri Aug 25 14:59:21 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 25 Aug 2000 06:59:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules selectmodule.c,2.43,2.44 Message-ID: <200008251359.GAA28398@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv27851 Modified Files: selectmodule.c Log Message: Not every OS that support poll seems to support POLLMSG. Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.43 retrieving revision 2.44 diff -C2 -r2.43 -r2.44 *** selectmodule.c 2000/08/25 01:15:33 2.43 --- selectmodule.c 2000/08/25 13:59:18 2.44 *************** *** 658,662 **** --- 658,664 ---- insint(d, "POLLWRNORM", POLLWRNORM); insint(d, "POLLWRBAND", POLLWRBAND); + #ifdef POLLMSG insint(d, "POLLMSG", POLLMSG); + #endif #endif /* HAVE_POLL */ } From python-dev@python.org Fri Aug 25 14:59:35 2000 From: python-dev@python.org (Jeremy Hylton) Date: Fri, 25 Aug 2000 06:59:35 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.29,1.30 Message-ID: <200008251359.GAA28582@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28393 Modified Files: pep-0200.txt Log Message: support for opcode args > 2**16 is finished Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** pep-0200.txt 2000/08/25 13:44:26 1.29 --- pep-0200.txt 2000/08/25 13:59:33 1.30 *************** *** 231,237 **** Make this function safe from buffer overflows. - * Support for opcode arguments > 2**16 - Charles Waldman - SF Patch 100893 - * Range literals - Thomas Wouters SF Patch 100902 --- 231,234 ---- *************** *** 264,267 **** --- 261,267 ---- Accepted and completed + + * Support for opcode arguments > 2**16 - Charles Waldman + SF Patch 100893 * "import as" - Thomas Wouters From python-dev@python.org Fri Aug 25 15:15:52 2000 From: python-dev@python.org (Guido van Rossum) Date: Fri, 25 Aug 2000 07:15:52 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.5,1.6 Message-ID: <200008251415.HAA12385@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv12339 Modified Files: pep-0214.txt Log Message: Added the essence of my post to c.l.py in defense of the new syntax. Index: pep-0214.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** pep-0214.txt 2000/08/21 13:36:22 1.5 --- pep-0214.txt 2000/08/25 14:15:49 1.6 *************** *** 141,144 **** --- 141,256 ---- + More Justification by the BDFL + + The proposal has been challenged on the newsgroup. One series of + challenges doesn't like '>>' and would rather see some other + symbol. + + Challenge: Why not one of these? + + print in stderr items,.... + print + stderr items,....... + print[stderr] items,..... + print to stderr items,..... + + Response: If we want to use a special symbol (print + expression), the Python parser requires that it is not already a + symbol that can start an expression -- otherwise it can't decide + which form of print statement is used. (The Python parser is a + simple LL(1) or recursive descent parser.) + + This means that we can't use the "keyword only in context trick" + that was used for "import as", because an identifier can start an + expression. This rules out +stderr, [sterr], and to stderr. It + leaves us with binary operator symbols and other miscellaneous + symbols that are currently illegal here, such as 'import'. + + If I had to choose between 'print in file' and 'print >> file' I + would definitely choose '>>'. In part because 'in' would be a new + invention (I know of no other language that uses it, while '>>' is + used in sh, awk, Perl, and C++), in part because '>>', being + non-alphabetic, stands out more so is more likely to catch the + reader's attention. + + Challenge: Why does there have to be a comma between the file and + the rest? + + Response: The comma separating the file from the following expression is + necessary! Of course you want the file to be an arbitrary + expression, not just a single word. (You definitely want to be + able to write print >>sys.stderr.) Without the expression the + parser would't be able to distinguish where that expression ends + and where the next one begins, e.g. + + print >>i +1, 2 + print >>a [1], 2 + print >>f (1), 2 + + Challenge: Why do you need a syntax extension? Why not + writeln(file, item, ...)? + + Response: First of all, this is lacking a feature of the print + statement: the trailing comma to print which suppresses the final + newline. Note that 'print a,' still isn't equivalent to + 'sys.stdout.write(a)' -- print inserts a space between items, and + takes arbitrary objects as arguments; write() doesn't insert a + space and requires a single string. + + When you are considering an extension for the print statement, + it's not right to add a function or method that adds a new feature + in one dimension (where the output goes) but takes away in another + dimension (spaces between items, and the choice of trailing + newline or not). We could add a whole slew of methods or + functions to deal with the various cases but that seems to add + more confusion than necessary, and would only make sense if we + were to deprecate the print statement altogether. + + I feel that this debate is really about whether print should have + been a function or method rather than a statement. If you are in + the function camp, of course adding special syntax to the existing + print statement is not something you like. I suspect the + objection to the new syntax comes mostly from people who already + think that the print statement was a bad idea. Am I right? + + About 10 years ago I debated with myself whether to make the most + basic from of output a function or a statement; basically I was + trying to decide between "print(item, ...)" and "print item, ...". + I chose to make it a statement because printing needs to be taught + very early on, and is very important in the programs that + beginners write. Also, because ABC, which lead the way for so + many things, made it a statement. In a move that's typical for + the interaction between ABC and Python, I changed the name from + WRITE to print, and reversed the convention for adding newlines + from requiring extra syntax to add a newline (ABC used trailing + slashes to indicate newlines) to requiring extra syntax (the + trailing comma) to suppress the newline. I kept the feature that + items are separated by whitespace on output. + + Full example: in ABC, + + WRITE 1 + WRITE 2/ + + has the same effect as + + print 1, + print 2 + + has in Python, outputting in effect "1 2\n". + + I'm not 100% sure that the choice for a statement was right (ABC + had the compelling reason that it used statement syntax for + anything with side effects, but Python doesn't have this + convention), but I'm also not convinced that it's wrong. I + certainly like the economy of the print statement. (I'm a rabid + Lisp-hater -- syntax-wise, not semantics-wise! -- and excessive + parentheses in syntax annoy me. Don't ever write return(i) or + if(x==y): in your Python code! :-) + + Anyway, I'm not ready to deprecate the print statement, and over + the years we've had many requests for an option to specify the + file. + + References From python-dev@python.org Fri Aug 25 16:38:44 2000 From: python-dev@python.org (Jeremy Hylton) Date: Fri, 25 Aug 2000 08:38:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Demo/sockets finger.py,1.4,1.5 ftp.py,1.4,1.5 rpythond.py,1.2,1.3 telnet.py,1.4,1.5 throughput.py,1.5,1.6 udpecho.py,1.4,1.5 Message-ID: <200008251538.IAA18829@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Demo/sockets In directory slayer.i.sourceforge.net:/tmp/cvs-serv18640 Modified Files: finger.py ftp.py rpythond.py telnet.py throughput.py udpecho.py Log Message: update demo scripts to use addr tuples for bind and connect closes bug #111928 Index: finger.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/finger.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** finger.py 1996/11/27 19:50:39 1.4 --- finger.py 2000/08/25 15:38:41 1.5 *************** *** 24,28 **** def finger(host, args): s = socket(AF_INET, SOCK_STREAM) ! s.connect(host, FINGER_PORT) s.send(args + '\n') while 1: --- 24,28 ---- def finger(host, args): s = socket(AF_INET, SOCK_STREAM) ! s.connect((host, FINGER_PORT)) s.send(args + '\n') while 1: Index: ftp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/ftp.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** ftp.py 1995/01/12 12:42:09 1.4 --- ftp.py 2000/08/25 15:38:41 1.5 *************** *** 49,53 **** # s = socket(AF_INET, SOCK_STREAM) ! s.connect(hostname, FTP_PORT) f = s.makefile('r') # Reading the replies is easier from a file... # --- 49,53 ---- # s = socket(AF_INET, SOCK_STREAM) ! s.connect((hostname, FTP_PORT)) f = s.makefile('r') # Reading the replies is easier from a file... # *************** *** 80,84 **** nextport = (nextport+1) % 16 r = socket(AF_INET, SOCK_STREAM) ! r.bind(gethostbyname(gethostname()), port) r.listen(1) sendportcmd(s, f, port) --- 80,84 ---- nextport = (nextport+1) % 16 r = socket(AF_INET, SOCK_STREAM) ! r.bind((gethostbyname(gethostname()), port)) r.listen(1) sendportcmd(s, f, port) Index: rpythond.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/rpythond.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** rpythond.py 1996/11/27 19:50:44 1.2 --- rpythond.py 2000/08/25 15:38:41 1.3 *************** *** 20,24 **** port = PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind('', port) s.listen(1) while 1: --- 20,24 ---- port = PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind(('', port)) s.listen(1) while 1: Index: telnet.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/telnet.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** telnet.py 1996/11/27 19:50:46 1.4 --- telnet.py 2000/08/25 15:38:41 1.5 *************** *** 52,56 **** # try: ! s.connect(host, port) except error, msg: sys.stderr.write('connect failed: ' + `msg` + '\n') --- 52,56 ---- # try: ! s.connect((host, port)) except error, msg: sys.stderr.write('connect failed: ' + `msg` + '\n') Index: throughput.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/throughput.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** throughput.py 1996/11/27 19:50:47 1.5 --- throughput.py 2000/08/25 15:38:41 1.6 *************** *** 45,49 **** port = MY_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind('', port) s.listen(1) print 'Server ready...' --- 45,49 ---- port = MY_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind(('', port)) s.listen(1) print 'Server ready...' *************** *** 73,77 **** s = socket(AF_INET, SOCK_STREAM) t2 = time.time() ! s.connect(host, port) t3 = time.time() i = 0 --- 73,77 ---- s = socket(AF_INET, SOCK_STREAM) t2 = time.time() ! s.connect((host, port)) t3 = time.time() i = 0 Index: udpecho.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/udpecho.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** udpecho.py 1996/11/27 19:50:49 1.4 --- udpecho.py 2000/08/25 15:38:41 1.5 *************** *** 34,38 **** port = ECHO_PORT s = socket(AF_INET, SOCK_DGRAM) ! s.bind('', port) print 'udp echo server ready' while 1: --- 34,38 ---- port = ECHO_PORT s = socket(AF_INET, SOCK_DGRAM) ! s.bind(('', port)) print 'udp echo server ready' while 1: *************** *** 51,55 **** addr = host, port s = socket(AF_INET, SOCK_DGRAM) ! s.bind('', 0) print 'udp echo client ready, reading stdin' while 1: --- 51,55 ---- addr = host, port s = socket(AF_INET, SOCK_DGRAM) ! s.bind(('', 0)) print 'udp echo client ready, reading stdin' while 1: From python-dev@python.org Fri Aug 25 17:03:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 09:03:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Demo/sockets echosvr.py,1.6,1.7 Message-ID: <200008251603.JAA24024@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Demo/sockets In directory slayer.i.sourceforge.net:/tmp/cvs-serv23996 Modified Files: echosvr.py Log Message: Jeremy missed a bind() call when updating these demos. ;) Index: echosvr.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/echosvr.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** echosvr.py 1996/11/27 19:50:37 1.6 --- echosvr.py 2000/08/25 16:03:27 1.7 *************** *** 19,23 **** port = ECHO_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind('', port) s.listen(1) conn, (remotehost, remoteport) = s.accept() --- 19,23 ---- port = ECHO_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind(('', port)) s.listen(1) conn, (remotehost, remoteport) = s.accept() From python-dev@python.org Fri Aug 25 18:29:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 10:29:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburlparse.tex,1.17,1.18 Message-ID: <200008251729.KAA17614@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17607/lib Modified Files: liburlparse.tex Log Message: Add reference to RFC 2396 in "See also" section. Minor cleanups. Index: liburlparse.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburlparse.tex,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -r1.17 -r1.18 *** liburlparse.tex 2000/08/24 04:58:25 1.17 --- liburlparse.tex 2000/08/25 17:29:35 1.18 *************** *** 1,4 **** \section{\module{urlparse} --- ! Parse URLs into components.} \declaremodule{standard}{urlparse} --- 1,4 ---- \section{\module{urlparse} --- ! Parse URLs into components} \declaremodule{standard}{urlparse} *************** *** 12,19 **** ! This module defines a standard interface to break URL strings up in ! components (addressing scheme, network location, path etc.), to combine ! the components back into a URL string, and to convert a ``relative ! URL'' to an absolute URL given a ``base URL.'' The module has been designed to match the Internet RFC on Relative --- 12,20 ---- ! This module defines a standard interface to break Uniform Resource ! Locator (URL) strings up in components (addressing scheme, network ! location, path etc.), to combine the components back into a URL ! string, and to convert a ``relative URL'' to an absolute URL given a ! ``base URL.'' The module has been designed to match the Internet RFC on Relative *************** *** 81,85 **** 'http://www.cwi.nl/%7Eguido/FAQ.html' \end{verbatim} ! % The \var{allow_fragments} argument has the same meaning as for \code{urlparse()}. --- 82,86 ---- 'http://www.cwi.nl/%7Eguido/FAQ.html' \end{verbatim} ! The \var{allow_fragments} argument has the same meaning as for \code{urlparse()}. *************** *** 96,98 **** --- 97,103 ---- ``Abnormal Examples'' which govern the treatment of border cases.} + \seerfc{2396}{Uniform Resource Identifiers (URI): Generic Syntax}{ + Document describing the generic syntactic requirements for + both Uniform Resource Names (URNs) and Uniform Resource + Locators (URLs).} \end{seealso} From python-dev@python.org Fri Aug 25 19:03:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 11:03:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pyexpat.c,2.14,2.15 Message-ID: <200008251803.LAA21478@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv21427/Modules Modified Files: pyexpat.c Log Message: initpyexpat(): Code cleanup; makes it more robust and reduces warnings. Added prototype to remove yet another warning. Make a number of the handlers and helpers "static" since they are not used in other C source files. This also reduces the number of warnings. Make a lot of the code "more Python". (Need to get the style guide done!) Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** pyexpat.c 2000/08/24 22:27:02 2.14 --- pyexpat.c 2000/08/25 18:03:30 2.15 *************** *** 58,62 **** staticforward PyTypeObject Xmlparsetype; ! typedef void (*xmlhandlersetter)( XML_Parser *self, void *meth ); typedef void* xmlhandler; --- 58,62 ---- staticforward PyTypeObject Xmlparsetype; ! typedef void (*xmlhandlersetter)(XML_Parser *self, void *meth); typedef void* xmlhandler; *************** *** 179,185 **** return Py_None; } ! return PyUnicode_DecodeUTF8((const char *)str, ! len, ! "strict"); } #endif --- 179,183 ---- return Py_None; } ! return PyUnicode_DecodeUTF8((const char *)str, len, "strict"); } #endif *************** *** 188,218 **** Returns None if str is a null pointer. */ ! static PyObject *conv_string_to_utf8( XML_Char *str ) { ! /* XXX currently this code assumes that XML_Char is 8-bit, ! and hence in UTF-8. */ ! /* UTF-8 from Expat, UTF-8 desired */ ! if (str == NULL) {Py_INCREF(Py_None); return Py_None;} ! return PyString_FromString( (const char *)str ); ! } ! ! static PyObject *conv_string_len_to_utf8( const XML_Char *str, ! int len ) ! { ! /* XXX currently this code assumes that XML_Char is 8-bit, ! and hence in UTF-8. */ ! /* UTF-8 from Expat, UTF-8 desired */ ! if (str == NULL) {Py_INCREF(Py_None); return Py_None;} ! return PyString_FromStringAndSize( (const char *)str, len ); } /* Callback routines */ ! static void clear_handlers( xmlparseobject *self ); ! static void flag_error( xmlparseobject *self ){ ! clear_handlers(self); } ! #define RC_HANDLER( RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \ RETURN, GETUSERDATA) \ \ --- 186,226 ---- Returns None if str is a null pointer. */ ! static PyObject * ! conv_string_to_utf8(XML_Char *str) ! { ! /* XXX currently this code assumes that XML_Char is 8-bit, ! and hence in UTF-8. */ ! /* UTF-8 from Expat, UTF-8 desired */ ! if (str == NULL) { ! Py_INCREF(Py_None); ! return Py_None; ! } ! return PyString_FromString((const char *)str); } + static PyObject * + conv_string_len_to_utf8(const XML_Char *str, int len) + { + /* XXX currently this code assumes that XML_Char is 8-bit, + and hence in UTF-8. */ + /* UTF-8 from Expat, UTF-8 desired */ + if (str == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + return PyString_FromStringAndSize((const char *)str, len); + } + /* Callback routines */ ! static void clear_handlers(xmlparseobject *self); ! static void ! flag_error(xmlparseobject *self) ! { ! clear_handlers(self); } ! #define RC_HANDLER(RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \ RETURN, GETUSERDATA) \ \ *************** *** 230,234 **** Py_DECREF(args); \ if (rv == NULL) { \ ! flag_error( self ); \ return RETURN; \ } \ --- 238,242 ---- Py_DECREF(args); \ if (rv == NULL) { \ ! flag_error(self); \ return RETURN; \ } \ *************** *** 247,297 **** #endif ! #define VOID_HANDLER( NAME, PARAMS, PARAM_FORMAT ) \ ! RC_HANDLER( void, NAME, PARAMS, ;, PARAM_FORMAT, ;, ;,\ ! (xmlparseobject *)userData ) ! ! #define INT_HANDLER( NAME, PARAMS, PARAM_FORMAT )\ ! RC_HANDLER( int, NAME, PARAMS, int rc=0;, PARAM_FORMAT, \ ! rc = PyInt_AsLong( rv );, rc, \ ! (xmlparseobject *)userData ) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER( StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts ), ("(O&O&)", STRING_CONV_FUNC, name, conv_atts_using_string, atts ) ) #else /* Python 1.6 and later */ ! VOID_HANDLER( StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts ), ("(O&O&)", STRING_CONV_FUNC, name, (self->returns_unicode ? conv_atts_using_unicode ! : conv_atts_using_string), atts ) ) #endif ! VOID_HANDLER( EndElement, ! (void *userData, const XML_Char *name ), ! ("(O&)", STRING_CONV_FUNC, name) ) ! VOID_HANDLER( ProcessingInstruction, (void *userData, const XML_Char *target, const XML_Char *data), ! ("(O&O&)",STRING_CONV_FUNC,target, STRING_CONV_FUNC,data )) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER( CharacterData, (void *userData, const XML_Char *data, int len), ! ("(O)", conv_string_len_to_utf8(data,len) ) ) #else ! VOID_HANDLER( CharacterData, (void *userData, const XML_Char *data, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(data,len) ! : conv_string_len_to_utf8(data,len) ) ) ) #endif ! VOID_HANDLER( UnparsedEntityDecl, (void *userData, const XML_Char *entityName, --- 255,305 ---- #endif ! #define VOID_HANDLER(NAME, PARAMS, PARAM_FORMAT) \ ! RC_HANDLER(void, NAME, PARAMS, ;, PARAM_FORMAT, ;, ;,\ ! (xmlparseobject *)userData) ! ! #define INT_HANDLER(NAME, PARAMS, PARAM_FORMAT)\ ! RC_HANDLER(int, NAME, PARAMS, int rc=0;, PARAM_FORMAT, \ ! rc = PyInt_AsLong(rv);, rc, \ ! (xmlparseobject *)userData) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER(StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts), ("(O&O&)", STRING_CONV_FUNC, name, conv_atts_using_string, atts ) ) #else /* Python 1.6 and later */ ! VOID_HANDLER(StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts), ("(O&O&)", STRING_CONV_FUNC, name, (self->returns_unicode ? conv_atts_using_unicode ! : conv_atts_using_string), atts)) #endif ! VOID_HANDLER(EndElement, ! (void *userData, const XML_Char *name), ! ("(O&)", STRING_CONV_FUNC, name)) ! VOID_HANDLER(ProcessingInstruction, (void *userData, const XML_Char *target, const XML_Char *data), ! ("(O&O&)",STRING_CONV_FUNC,target, STRING_CONV_FUNC,data)) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER(CharacterData, (void *userData, const XML_Char *data, int len), ! ("(O)", conv_string_len_to_utf8(data,len))) #else ! VOID_HANDLER(CharacterData, (void *userData, const XML_Char *data, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(data,len) ! : conv_string_len_to_utf8(data,len)))) #endif ! VOID_HANDLER(UnparsedEntityDecl, (void *userData, const XML_Char *entityName, *************** *** 305,309 **** STRING_CONV_FUNC,notationName)) ! VOID_HANDLER( NotationDecl, (void *userData, const XML_Char *notationName, --- 313,317 ---- STRING_CONV_FUNC,notationName)) ! VOID_HANDLER(NotationDecl, (void *userData, const XML_Char *notationName, *************** *** 315,368 **** STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId)) ! VOID_HANDLER( StartNamespaceDecl, (void *userData, const XML_Char *prefix, const XML_Char *uri), ! ("(O&O&)", STRING_CONV_FUNC,prefix, STRING_CONV_FUNC,uri )) ! VOID_HANDLER( EndNamespaceDecl, (void *userData, const XML_Char *prefix), ! ("(O&)", STRING_CONV_FUNC,prefix )) ! VOID_HANDLER( Comment, (void *userData, const XML_Char *prefix), ("(O&)", STRING_CONV_FUNC,prefix)) ! VOID_HANDLER( StartCdataSection, (void *userData), ! ("()" )) ! VOID_HANDLER( EndCdataSection, (void *userData), ! ("()" )) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER( Default, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len) ) ) ! VOID_HANDLER( DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len) ) ) #else ! VOID_HANDLER( Default, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len) ) ) ) ! VOID_HANDLER( DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len) ) ) ) #endif ! INT_HANDLER( NotStandalone, (void *userData), ("()")) ! RC_HANDLER( int, ExternalEntityRef, (XML_Parser parser, const XML_Char *context, --- 323,376 ---- STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId)) ! VOID_HANDLER(StartNamespaceDecl, (void *userData, const XML_Char *prefix, const XML_Char *uri), ! ("(O&O&)", STRING_CONV_FUNC,prefix, STRING_CONV_FUNC,uri)) ! VOID_HANDLER(EndNamespaceDecl, (void *userData, const XML_Char *prefix), ! ("(O&)", STRING_CONV_FUNC,prefix)) ! VOID_HANDLER(Comment, (void *userData, const XML_Char *prefix), ("(O&)", STRING_CONV_FUNC,prefix)) ! VOID_HANDLER(StartCdataSection, (void *userData), ! ("()")) ! VOID_HANDLER(EndCdataSection, (void *userData), ! ("()")) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER(Default, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len))) ! VOID_HANDLER(DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len))) #else ! VOID_HANDLER(Default, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len)))) ! VOID_HANDLER(DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len)))) #endif ! INT_HANDLER(NotStandalone, (void *userData), ("()")) ! RC_HANDLER(int, ExternalEntityRef, (XML_Parser parser, const XML_Char *context, *************** *** 373,379 **** ("(O&O&O&O&)", STRING_CONV_FUNC,context, STRING_CONV_FUNC,base, ! STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId ), ! rc = PyInt_AsLong( rv );, rc, ! XML_GetUserData( parser ) ) --- 381,387 ---- ("(O&O&O&O&)", STRING_CONV_FUNC,context, STRING_CONV_FUNC,base, ! STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId), ! rc = PyInt_AsLong(rv);, rc, ! XML_GetUserData(parser)) *************** *** 478,482 **** /* XXX what to do if it returns a Unicode string? */ ! UNLESS(PyString_Check( str )) { PyErr_Format(PyExc_TypeError, "read() did not return a string object (type=%.400s)", --- 486,490 ---- /* XXX what to do if it returns a Unicode string? */ ! UNLESS(PyString_Check(str)) { PyErr_Format(PyExc_TypeError, "read() did not return a string object (type=%.400s)", *************** *** 719,723 **** } ! static int sethandler(xmlparseobject *self, const char *name, PyObject* v) { int handlernum = handlername2int(name); --- 727,732 ---- } ! static int ! sethandler(xmlparseobject *self, const char *name, PyObject* v) { int handlernum = handlername2int(name); *************** *** 734,767 **** static int ! xmlparse_setattr( xmlparseobject *self, char *name, PyObject *v) { ! /* Set attribute 'name' to value 'v'. v==NULL means delete */ ! if (v==NULL) { ! PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); ! return -1; ! } ! ! if (strcmp(name, "returns_unicode") == 0) { ! PyObject *intobj = PyNumber_Int(v); ! if (intobj == NULL) return -1; ! if (PyInt_AsLong(intobj)) { #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! PyErr_SetString(PyExc_ValueError, ! "Cannot return Unicode strings in Python 1.5"); ! return -1; #else ! self->returns_unicode = 1; #endif ! } ! else self->returns_unicode = 0; ! Py_DECREF(intobj); ! return 0; ! } ! if( sethandler( self, name, v ) ){ ! return 0; ! } ! ! PyErr_SetString( PyExc_AttributeError, name ); ! return -1; } --- 743,775 ---- static int ! xmlparse_setattr(xmlparseobject *self, char *name, PyObject *v) { ! /* Set attribute 'name' to value 'v'. v==NULL means delete */ ! if (v==NULL) { ! PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); ! return -1; ! } ! if (strcmp(name, "returns_unicode") == 0) { ! PyObject *intobj = PyNumber_Int(v); ! if (intobj == NULL) return -1; ! if (PyInt_AsLong(intobj)) { #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! PyErr_SetString(PyExc_ValueError, ! "Cannot return Unicode strings in Python 1.5"); ! return -1; #else ! self->returns_unicode = 1; #endif ! } ! else ! self->returns_unicode = 0; ! Py_DECREF(intobj); ! return 0; ! } ! if (sethandler(self, name, v)) { ! return 0; ! } ! PyErr_SetString(PyExc_AttributeError, name); ! return -1; } *************** *** 846,858 **** /* Initialization function for the module */ ! void initpyexpat(void) { PyObject *m, *d; char *rev = "$Revision$"; PyObject *errors_module, *errors_dict; PyObject *sys_modules; Xmlparsetype.ob_type = &PyType_Type; --- 854,872 ---- /* Initialization function for the module */ + + DL_IMPORT(void) initpyexpat(void); ! DL_EXPORT(void) initpyexpat(void) { PyObject *m, *d; char *rev = "$Revision$"; + PyObject *errmod_name = PyString_FromString("pyexpat.errors"); PyObject *errors_module, *errors_dict; PyObject *sys_modules; + if (errmod_name == NULL) + return; + Xmlparsetype.ob_type = &PyType_Type; *************** *** 879,901 **** PyString_FromString("UTF-8")); ! sys_modules = PySys_GetObject("modules"); ! { ! PyObject *errmod_name = PyString_FromString("pyexpat.errors"); ! ! if (errmod_name != NULL) { ! errors_module = PyDict_GetItem(d, errmod_name); ! if (errors_module == NULL) { ! errors_module = PyModule_New("pyexpat.errors"); ! if (errors_module != NULL) { ! PyDict_SetItemString(d, "errors", errors_module); ! PyDict_SetItem(sys_modules, errmod_name, errors_module); ! } ! } ! Py_DECREF(errmod_name); ! if (errors_module == NULL) ! /* Don't code dump later! */ ! return; } } errors_dict = PyModule_GetDict(errors_module); --- 893,910 ---- PyString_FromString("UTF-8")); ! errors_module = PyDict_GetItem(d, errmod_name); ! if (errors_module == NULL) { ! errors_module = PyModule_New("pyexpat.errors"); ! if (errors_module != NULL) { ! sys_modules = PySys_GetObject("modules"); ! PyDict_SetItemString(d, "errors", errors_module); ! PyDict_SetItem(sys_modules, errmod_name, errors_module); } } + Py_DECREF(errmod_name); + if (errors_module == NULL) + /* Don't code dump later! */ + return; + errors_dict = PyModule_GetDict(errors_module); *************** *** 925,929 **** } ! void clear_handlers(xmlparseobject *self) { int i = 0; --- 934,939 ---- } ! static void ! clear_handlers(xmlparseobject *self) { int i = 0; *************** *** 931,944 **** for (; handler_info[i].name!=NULL; i++) { self->handlers[i]=NULL; ! handler_info[i].setter( self->itself, NULL ); } } ! typedef void (*pairsetter)( XML_Parser, void *handler1, void *handler2 ); ! void pyxml_UpdatePairedHandlers(xmlparseobject *self, ! int startHandler, ! int endHandler, ! pairsetter setter) { void *start_handler=NULL; --- 941,955 ---- for (; handler_info[i].name!=NULL; i++) { self->handlers[i]=NULL; ! handler_info[i].setter(self->itself, NULL); } } ! typedef void (*pairsetter)(XML_Parser, void *handler1, void *handler2); ! static void ! pyxml_UpdatePairedHandlers(xmlparseobject *self, ! int startHandler, ! int endHandler, ! pairsetter setter) { void *start_handler=NULL; *************** *** 956,960 **** } ! void pyxml_SetStartElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 967,972 ---- } ! static void ! pyxml_SetStartElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 963,967 **** } ! void pyxml_SetEndElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 975,980 ---- } ! static void ! pyxml_SetEndElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 970,974 **** } ! void pyxml_SetStartNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 983,988 ---- } ! static void ! pyxml_SetStartNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 977,981 **** } ! void pyxml_SetEndNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 991,996 ---- } ! static void ! pyxml_SetEndNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 984,988 **** } ! void pyxml_SetStartCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 999,1004 ---- } ! static void ! pyxml_SetStartCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 991,995 **** } ! void pyxml_SetEndCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 1007,1012 ---- } ! static void ! pyxml_SetEndCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), From python-dev@python.org Fri Aug 25 20:13:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:13:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,NONE,1.1 Message-ID: <200008251913.MAA10374@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10364 Added Files: gettext.py Log Message: Initial revision of gettext support for Python. This will undergo some changes. --- NEW FILE --- """Internationalization and localization support. This module provides internationalization (I18N) and localization (L10N) support for your Python programs by providing an interface to the GNU gettext message catalog library. I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once internationalized, to the local language and cultural habits. In order to provide multilingual messages for your Python programs, you need to take the following steps: - prepare your program by specially marking translatable strings - run a suite of tools over your marked program files to generate raw messages catalogs - create language specific translations of the message catalogs - use this module so that message strings are properly translated In order to prepare your program for I18N, you need to look at all the strings in your program. Any string that needs to be translated should be marked by wrapping it in _('...') -- i.e. a call to the function `_'. For example: filename = 'mylog.txt' message = _('writing a log message') fp = open(filename, 'w') fp.write(message) fp.close() In this example, the string `writing a log message' is marked as a candidate for translation, while the strings `mylog.txt' and `w' are not. The GNU gettext package provides a tool, called xgettext, that scans C and C++ source code looking for these specially marked strings. xgettext generates what are called `.pot' files, essentially structured human readable files which contain every marked string in the source code. These .pot files are copied and handed over to translators who write language-specific versions for every supported language. For I18N Python programs however, xgettext won't work; it doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called pygettext that does though (found in the Tools/i18n directory). This is a command line script that supports a similar interface as xgettext; see its documentation for details. Once you've used pygettext to create your .pot files, you can use the standard GNU gettext tools to generate your machine-readable .mo files, which are what's used by this module. In the simple case, to use this module then, you need only add the following bit of code to the main driver file of your application: import gettext gettext.install() This sets everything up so that your _('...') function calls Just Work. In other words, it installs `_' in the builtins namespace for convenience. You can skip this step and do it manually by the equivalent code: import gettext import __builtin__ __builtin__['_'] = gettext.gettext Once you've done this, you probably want to call bindtextdomain() and textdomain() to get the domain set up properly. Again, for convenience, you can pass the domain and localedir to install to set everything up in one fell swoop: import gettext gettext.install('mydomain', '/my/locale/dir') If your program needs to support many languages at the same time, you will want to create Translation objects explicitly, like so: import gettext gettext.install() lang1 = gettext.Translations(open('/path/to/my/lang1/messages.mo')) lang2 = gettext.Translations(open('/path/to/my/lang2/messages.mo')) lang3 = gettext.Translations(open('/path/to/my/lang3/messages.mo')) gettext.set(lang1) # all _() will now translate to language 1 gettext.set(lang2) # all _() will now translate to language 2 Currently, only GNU gettext format binary .mo files are supported. """ # This module represents the integration of work from the following authors: # # Martin von Loewis, who wrote the initial implementation of the underlying # C-based libintlmodule (later renamed _gettext), along with a skeletal # gettext.py implementation. # # Peter Funk, who wrote fintl.py, a fairly complete wrapper around intlmodule, # which also included a pure-Python implementation to read .mo files if # intlmodule wasn't available. # # James Henstridge, who also wrote a gettext.py module, which has some # interesting, but currently unsupported experimental features: the notion of # a Catalog class and instances, and the ability to add to a catalog file via # a Python API. # # Barry Warsaw integrated these modules, wrote the .install() API and code, # and conformed all C and Python code to Python's coding standards. import os import sys import struct from UserDict import UserDict # globals _translations = {} _current_translation = None _current_domain = 'messages' # Domain to directory mapping, for use by bindtextdomain() _localedirs = {} class GNUTranslations(UserDict): # Magic number of .mo files MAGIC = 0x950412de def __init__(self, fp): if fp is None: d = {} else: d = self._parse(fp) UserDict.__init__(self, d) def _parse(self, fp): """Override this method to support alternative .mo formats.""" unpack = struct.unpack filename = getattr(fp, 'name', '') # Parse the .mo file header, which consists of 5 little endian 32 # bit words. catalog = {} buf = fp.read() magic, version, msgcount, masteridx, transidx = unpack( '<5i', buf[:20]) if magic <> self.MAGIC: raise IOError(0, 'Bad magic number', filename) # # Now put all messages from the .mo file buffer into the catalog # dictionary. for i in xrange(0, msgcount): mstart = unpack(' Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv10426 Added Files: test_gettext.py Log Message: Test suite for new gettext.py module. --- NEW FILE --- import os import gettext def get_qualified_path(name): """Return a more qualified path to name""" import sys import os path = sys.path try: path = [os.path.dirname(__file__)] + path except NameError: pass for dir in path: fullname = os.path.join(dir, name) if os.path.exists(fullname): return fullname return name # Test basic interface os.environ['LANGUAGE'] = 'xx' mofile = get_qualified_path('xx') localedir = os.path.dirname(mofile) print 'installing gettext' gettext.install() print _('calling bindtextdomain with localedir %s') % localedir print gettext.bindtextdomain('gettext', localedir) print gettext.bindtextdomain() print gettext.textdomain('gettext') print gettext.textdomain() # test some translations print _(u'mullusk') print _(r'Raymond Luxury Yach-t') print _(ur'nudge nudge') # double quotes print _(u"mullusk") print _(r"Raymond Luxury Yach-t") print _(ur"nudge nudge") # triple single quotes print _(u'''mullusk''') print _(r'''Raymond Luxury Yach-t''') print _(ur'''nudge nudge''') # triple double quotes print _(u"""mullusk""") print _(r"""Raymond Luxury Yach-t""") print _(ur"""nudge nudge""") # multiline strings print _('''This module provides internationalization and localization support for your Python programs by providing an interface to the GNU gettext message catalog library.''') print gettext.dgettext('gettext', 'nudge nudge') # dcgettext ##import locale ##if gettext.dcgettext('gettext', 'nudge nudge', ## locale.LC_MESSAGES) <> 'wink wink': ## print _('dcgettext failed') # test the alternative interface fp = open(os.path.join(mofile, 'LC_MESSAGES', 'gettext.mo'), 'rb') t = gettext.GNUTranslations(fp) fp.close() gettext.set(t) print t == gettext.get() print _('nudge nudge') From python-dev@python.org Fri Aug 25 20:15:02 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:15:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_gettext,NONE,1.1 Message-ID: <200008251915.MAA10517@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv10496 Added Files: test_gettext Log Message: output from test_gettext.py test suite --- NEW FILE --- test_gettext gettext installed calling bindtextdomain with localdir Lib/test calling textdomain From python-dev@python.org Fri Aug 25 20:49:32 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:49:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_gettext,1.1,1.2 Message-ID: <200008251949.MAA13305@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv13297 Modified Files: test_gettext Log Message: updated test output Index: test_gettext =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_gettext,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_gettext 2000/08/25 19:15:00 1.1 --- test_gettext 2000/08/25 19:49:28 1.2 *************** *** 1,4 **** test_gettext ! gettext installed ! calling bindtextdomain with localdir Lib/test ! calling textdomain --- 1,25 ---- test_gettext ! installing gettext ! calling bindtextdomain with localedir . ! . ! None ! gettext ! gettext ! bacon ! Throatwobbler Mangrove ! wink wink ! bacon ! Throatwobbler Mangrove ! wink wink ! bacon ! Throatwobbler Mangrove ! wink wink ! bacon ! Throatwobbler Mangrove ! wink wink ! Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba ! fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH ! trggrkg zrffntr pngnybt yvoenel. ! wink wink ! 1 ! wink wink From python-dev@python.org Fri Aug 25 20:50:41 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:50:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.1,1.2 Message-ID: <200008251950.MAA13409@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv13401 Modified Files: test_gettext.py Log Message: Set this test up so that we don't have to create xx/LC_MESSAGES in the cvs tree. It creates the directory and gettext.mo file on the fly, from the base64 encode binary data. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_gettext.py 2000/08/25 19:14:25 1.1 --- test_gettext.py 2000/08/25 19:50:38 1.2 *************** *** 1,76 **** import os import gettext ! def get_qualified_path(name): ! """Return a more qualified path to name""" ! import sys ! import os ! path = sys.path ! try: ! path = [os.path.dirname(__file__)] + path ! except NameError: ! pass ! for dir in path: ! fullname = os.path.join(dir, name) ! if os.path.exists(fullname): ! return fullname ! return name ! ! # Test basic interface ! os.environ['LANGUAGE'] = 'xx' ! ! mofile = get_qualified_path('xx') ! localedir = os.path.dirname(mofile) ! ! print 'installing gettext' ! gettext.install() ! ! print _('calling bindtextdomain with localedir %s') % localedir ! print gettext.bindtextdomain('gettext', localedir) ! print gettext.bindtextdomain() ! ! print gettext.textdomain('gettext') ! print gettext.textdomain() ! ! # test some translations ! print _(u'mullusk') ! print _(r'Raymond Luxury Yach-t') ! print _(ur'nudge nudge') ! ! # double quotes ! print _(u"mullusk") ! print _(r"Raymond Luxury Yach-t") ! print _(ur"nudge nudge") ! ! # triple single quotes ! print _(u'''mullusk''') ! print _(r'''Raymond Luxury Yach-t''') ! print _(ur'''nudge nudge''') ! ! # triple double quotes ! print _(u"""mullusk""") ! print _(r"""Raymond Luxury Yach-t""") ! print _(ur"""nudge nudge""") ! # multiline strings ! print _('''This module provides internationalization and localization support for your Python programs by providing an interface to the GNU gettext message catalog library.''') ! print gettext.dgettext('gettext', 'nudge nudge') ! # dcgettext ! ##import locale ! ##if gettext.dcgettext('gettext', 'nudge nudge', ! ## locale.LC_MESSAGES) <> 'wink wink': ! ## print _('dcgettext failed') ! ! # test the alternative interface ! fp = open(os.path.join(mofile, 'LC_MESSAGES', 'gettext.mo'), 'rb') ! t = gettext.GNUTranslations(fp) ! fp.close() ! ! gettext.set(t) ! print t == gettext.get() ! ! print _('nudge nudge') --- 1,330 ---- import os + import base64 import gettext ! def test(localedir, mofile): ! # Test basic interface ! os.environ['LANGUAGE'] = 'xx' ! ! print 'installing gettext' ! gettext.install() ! ! print _('calling bindtextdomain with localedir %s') % localedir ! print gettext.bindtextdomain('gettext', localedir) ! print gettext.bindtextdomain() ! ! print gettext.textdomain('gettext') ! print gettext.textdomain() ! ! # test some translations ! print _(u'mullusk') ! print _(r'Raymond Luxury Yach-t') ! print _(ur'nudge nudge') ! ! # double quotes ! print _(u"mullusk") ! print _(r"Raymond Luxury Yach-t") ! print _(ur"nudge nudge") ! ! # triple single quotes ! print _(u'''mullusk''') ! print _(r'''Raymond Luxury Yach-t''') ! print _(ur'''nudge nudge''') ! ! # triple double quotes ! print _(u"""mullusk""") ! print _(r"""Raymond Luxury Yach-t""") ! print _(ur"""nudge nudge""") ! # multiline strings ! print _('''This module provides internationalization and localization support for your Python programs by providing an interface to the GNU gettext message catalog library.''') ! print gettext.dgettext('gettext', 'nudge nudge') ! # dcgettext ! ##import locale ! ##if gettext.dcgettext('gettext', 'nudge nudge', ! ## locale.LC_MESSAGES) <> 'wink wink': ! ## print _('dcgettext failed') ! ! # test the alternative interface ! fp = open(os.path.join(mofile), 'rb') ! t = gettext.GNUTranslations(fp) ! fp.close() ! ! gettext.set(t) ! print t == gettext.get() ! ! print _('nudge nudge') ! ! GNU_MO_DATA = '''\ ! 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB ! AQAACwAAAEkBAAAWAQAAVQEAABYAAABsAgAAoQAAAIMCAAAFAAAAJQMAAAkAAAArAwAAAQAAAAQA ! AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg ! cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv ! ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH ! TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ ! cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiBGcmkgQXVnIDE4IDIwOjQ1 ! OjAzIDIwMDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJyeSBXYXJzYXcgPGJ3YXJzYXdAYmVvcGVuLmNv ! bT4KTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz4KTUlNRS1WZXJzaW9u ! OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWVuCkNvbnRlbnQtVHJhbnNm ! ZXItRW5jb2Rpbmc6IG5vbmUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4xCgBUaHJvYXR3 ! b2JibGVyIE1hbmdyb3ZlAEd1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJh ! IG5hcSB5YnBueXZtbmd2YmEKZmhjY2JlZyBzYmUgbGJoZSBDbGd1YmEgY2VidGVuemYgb2wgY2Vi ! aXZxdmF0IG5hIHZhZ3Jlc25wciBnYiBndXIgVEFICnRyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2 ! b2VuZWwuAGJhY29uAHdpbmsgd2luawA= ! ''' ! ! SOLARIS_MO_DATA = '''\ ! AAAACAAAABEAAAIXAAAB0gAAARD///+d////nQAAAAAAAAAAAAAAAAAAAAIAAAAkAAAAAf///53/ ! //+dAAAAQgAAAAIAAAABAAAABQAAAGgAAAAD////nf///50AAAB0AAAADQAAAAQAAAAGAAAAmAAA ! AA7///+dAAAABwAAAKAAAAAU////nf///50AAAC5AAAAFQAAAAMAAAAMAAAAywAAABb///+d//// ! nQAAANsAAAAXAAAACQAAAAsAAADsAAAAGP///53///+dAAAA/wAAABkAAAAKAAAADgAAAScAAAAa ! ////nf///50AAAFDAAAAGwAAAA0AAAAPAAABXgAAABz///+dAAAAEAAAAgAAAAC+////nf///50A ! AAIWAAAA1XRleHQgZG9tYWluIGRpZG4ndCBnZXQgc2V0IHByb3Blcmx5AHJhdyBzdHJpbmcgdHJh ! bnNsYXRpb24gZmFpbGVkAHJhdyBVbmljb2RlIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbnVk ! Z2UgbnVkZ2UAbXVsdGlsaW5lIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbXVsbHVzawBnb3Qg ! dW5leHBlY3RlZCBsb2NhbGVkaXIAZ2V0dGV4dCBpbnN0YWxsZWQAZGdldHRleHQgZmFpbGVkAGRj ! Z2V0dGV4dCBmYWlsZWQAY2FsbGluZyB0ZXh0ZG9tYWluAGNhbGxpbmcgYmluZHRleHRkb21haW4g ! d2l0aCBsb2NhbGRpciAlcwBiaW5kdGV4dGRvbWFpbihOb25lKSBmYWlsZWQAVW5pY29kZSB0cmFu ! c2xhdGlvbiBmYWlsZWQAVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24g ! YW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZvciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92 ! aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBHTlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGli ! cmFyeS4AUmF5bW9uZCBMdXh1cnkgWWFjaC10AAAAAAB3aW5rIHdpbmsAAGJhY29uAAAAAAAAAAAA ! R3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3Zi ! YQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVz ! bnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AVGhyb2F0d29i ! YmxlciBNYW5ncm92ZQBQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTgpQTy1SZXZp ! c2lvbi1EYXRlOiAyMDAwLTA4LTE4IDIxOjAxLTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBO ! QU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpN ! SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNF ! VApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElORwoA ! ''' ! ! LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') ! MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') ! ! def setup(): ! os.makedirs(LOCALEDIR) ! fp = open(MOFILE, 'w') ! fp.write(base64.decodestring(GNU_MO_DATA)) ! fp.close() ! ! def teardown(): ! os.unlink(MOFILE) ! os.removedirs(LOCALEDIR) ! ! ! ! try: ! setup() ! test('.', MOFILE) ! finally: ! teardown() ! pass ! ! ! ! # For reference, here's the .pot and .po files used to created the .mo data ! # above. The .pot file was generated by pygettext. ! ! # =============================== messages.pot ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" ! ! # =============================== messages.po ! ! ### Dummy translation for Python's test_gettext.py module. ! ### Copyright (C) 2000 BeOpen.com ! ### Barry Warsaw , 2000. ! ### ! ###, fuzzy ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: 2000-08-18 21:01-04:00\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: 2.0\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: Barry Warsaw \n" ! ##"Language-Team: XX \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=en\n" ! ##"Content-Transfer-Encoding: none\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "Throatwobbler Mangrove" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "bacon" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "wink wink" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" ! ##"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" ! ##"trggrkg zrffntr pngnybt yvoenel." ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" From python-dev@python.org Fri Aug 25 20:53:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:53:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.1,1.2 Message-ID: <200008251953.MAA13584@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13575 Modified Files: gettext.py Log Message: Group consensus is that supporting alternative locale categories is useless. So the category argument on _find() is removed, as is the dcgettext() function. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** gettext.py 2000/08/25 19:13:37 1.1 --- gettext.py 2000/08/25 19:53:17 1.2 *************** *** 169,173 **** # Locate a .mo file using the gettext strategy ! def _find(localedir=None, languages=None, category=None, domain=None): global _current_domain global _localedirs --- 169,173 ---- # Locate a .mo file using the gettext strategy ! def _find(localedir=None, languages=None, domain=None): global _current_domain global _localedirs *************** *** 176,181 **** if domain is None: domain = _current_domain - if category is None: - category = 'LC_MESSAGES' if localedir is None: localedir = _localedirs.get( --- 176,179 ---- *************** *** 200,204 **** if lang == 'C': break ! mofile = os.path.join(localedir, lang, category, '%s.mo' % domain) # see if it's in the cache mo = _translations.get(mofile) --- 198,202 ---- if lang == 'C': break ! mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain) # see if it's in the cache mo = _translations.get(mofile) *************** *** 250,270 **** """Like gettext(), but look up message in specified domain.""" return _find(domain=domain).get(message, message) - - - def dcgettext(domain, message, category): - try: - from locale import LC_CTYPE, LC_TIME, LC_COLLATE - from locale import LC_MONETARY, LC_MESSAGES, LC_NUMERIC - except ImportError: - return message - categories = { - LC_CTYPE : 'LC_CTYPE', - LC_TIME : 'LC_TIME', - LC_COLLATE : 'LC_COLLATE', - LC_MONETARY : 'LC_MONETARY', - LC_MESSAGES : 'LC_MESSAGES', - LC_NUMERIC : 'LC_NUMERIC' - } - return _find(domain=domain, category=category).get(message, message) --- 248,251 ---- From python-dev@python.org Fri Aug 25 20:53:53 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:53:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.2,1.3 Message-ID: <200008251953.MAA13708@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv13691 Modified Files: test_gettext.py Log Message: Group consensus is that supporting alternative locale categories is useless. So the test of the dcgettext() function is removed. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_gettext.py 2000/08/25 19:50:38 1.2 --- test_gettext.py 2000/08/25 19:53:51 1.3 *************** *** 44,53 **** print gettext.dgettext('gettext', 'nudge nudge') - # dcgettext - ##import locale - ##if gettext.dcgettext('gettext', 'nudge nudge', - ## locale.LC_MESSAGES) <> 'wink wink': - ## print _('dcgettext failed') - # test the alternative interface fp = open(os.path.join(mofile), 'rb') --- 44,47 ---- From python-dev@python.org Fri Aug 25 21:26:45 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 13:26:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.2,1.3 Message-ID: <200008252026.NAA25075@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25063 Modified Files: gettext.py Log Message: _expand_lang(), _find(): Added support for unaliasing and expanded the language found in the environment variable, contributed by James Henstridge. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** gettext.py 2000/08/25 19:53:17 1.2 --- gettext.py 2000/08/25 20:26:43 1.3 *************** *** 87,91 **** """ ! # This module represents the integration of work from the following authors: # # Martin von Loewis, who wrote the initial implementation of the underlying --- 87,92 ---- """ ! # This module represents the integration of work, contributions, feedback, and ! # suggestions from the following people: # # Martin von Loewis, who wrote the initial implementation of the underlying *************** *** 122,125 **** --- 123,169 ---- + def _expand_lang(locale): + from locale import normalize + locale = normalize(locale) + COMPONENT_CODESET = 1 << 0 + COMPONENT_TERRITORY = 1 << 1 + COMPONENT_MODIFIER = 1 << 2 + # split up the locale into its base components + mask = 0 + pos = locale.find('@') + if pos >= 0: + modifier = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_MODIFIER + else: + modifier = '' + pos = locale.find('.') + if pos >= 0: + codeset = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_CODESET + else: + codeset = '' + pos = locale.find('_') + if pos >= 0: + territory = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_TERRITORY + else: + territory = '' + language = locale + ret = [] + for i in range(mask+1): + if not (i & ~mask): # if all components for this combo exist ... + val = language + if i & COMPONENT_TERRITORY: val += territory + if i & COMPONENT_CODESET: val += codeset + if i & COMPONENT_MODIFIER: val += modifier + ret.append(val) + ret.reverse() + return ret + + + class GNUTranslations(UserDict): # Magic number of .mo files *************** *** 159,164 **** # # advance to next entry in the seek tables ! masteridx = masteridx + 8 ! transidx = transidx + 8 return catalog --- 203,208 ---- # # advance to next entry in the seek tables ! masteridx += 8 ! transidx += 8 return catalog *************** *** 172,176 **** global _current_domain global _localedirs - # Get some reasonable defaults for arguments that were not supplied if domain is None: --- 216,219 ---- *************** *** 194,197 **** --- 237,246 ---- if 'C' not in languages: languages.append('C') + # now normalize and expand the languages + langdict = {} + for lang in languages: + for nelang in _expand_lang(lang): + langdict[nelang] = nelang + languages = langdict.keys() # select a language for lang in languages: From python-dev@python.org Fri Aug 25 22:00:48 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 14:00:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.107,2.108 Message-ID: <200008252100.OAA28046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv27965 Modified Files: pythonrun.c Log Message: Fix to [ Bug #111165 ] doc-string removal masked by PYTHONOPTIMIZE Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.107 retrieving revision 2.108 diff -C2 -r2.107 -r2.108 *** pythonrun.c 2000/08/15 16:13:37 2.107 --- pythonrun.c 2000/08/25 21:00:46 2.108 *************** *** 109,117 **** if ((p = getenv("PYTHONDEBUG")) && *p != '\0') ! Py_DebugFlag = 1; if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') ! Py_VerboseFlag = 1; if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0') ! Py_OptimizeFlag = 1; interp = PyInterpreterState_New(); --- 109,117 ---- if ((p = getenv("PYTHONDEBUG")) && *p != '\0') ! Py_DebugFlag = Py_DebugFlag ? Py_DebugFlag : 1; if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') ! Py_VerboseFlag = Py_VerboseFlag ? Py_VerboseFlag : 1; if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0') ! Py_OptimizeFlag = Py_OptimizeFlag ? Py_OptimizeFlag : 1; interp = PyInterpreterState_New(); From python-dev@python.org Fri Aug 25 22:47:58 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 25 Aug 2000 14:47:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cgi.py,1.1,1.2 Message-ID: <200008252147.OAA08561@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv8221/Lib/test Modified Files: test_cgi.py Log Message: Closing patch #101120 -- After everyone agreed. Index: test_cgi.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_cgi.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_cgi.py 2000/08/03 22:11:42 1.1 --- test_cgi.py 2000/08/25 21:47:56 1.2 *************** *** 117,123 **** assert d == expect, "Error parsing %s" % repr(orig) ! d = {'QUERY_STRING': orig} ! fcd = cgi.FormContentDict(d) ! sd = cgi.SvFormContentDict(d) if type(expect) == type({}): # test dict interface --- 117,124 ---- assert d == expect, "Error parsing %s" % repr(orig) ! env = {'QUERY_STRING': orig} ! fcd = cgi.FormContentDict(env) ! sd = cgi.SvFormContentDict(env) ! fs = cgi.FieldStorage(environ=env) if type(expect) == type({}): # test dict interface *************** *** 126,133 **** --- 127,141 ---- assert norm(expect.values()) == norm(fcd.values()) assert norm(expect.items()) == norm(fcd.items()) + assert fcd.get("nonexistent field", "default") == "default" + assert len(sd) == len(fs) + assert norm(sd.keys()) == norm(fs.keys()) + assert fs.getvalue("nonexistent field", "default") == "default" + # test individual fields for key in expect.keys(): expect_val = expect[key] assert fcd.has_key(key) assert norm(fcd[key]) == norm(expect[key]) + assert fcd.get(key, "default") == fcd[key] + assert fs.has_key(key) if len(expect_val) > 1: single_value = 0 *************** *** 138,144 **** --- 146,154 ---- except IndexError: assert not single_value + assert fs.getvalue(key) == expect_val else: assert single_value assert val == expect_val[0] + assert fs.getvalue(key) == expect_val[0] assert norm(sd.getlist(key)) == norm(expect_val) if single_value: From python-dev@python.org Fri Aug 25 22:47:58 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 25 Aug 2000 14:47:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcgi.tex,1.27,1.28 Message-ID: <200008252147.OAA08563@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv8221/Doc/lib Modified Files: libcgi.tex Log Message: Closing patch #101120 -- After everyone agreed. Index: libcgi.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcgi.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** libcgi.tex 2000/07/16 19:01:09 1.27 --- libcgi.tex 2000/08/25 21:47:55 1.28 *************** *** 46,50 **** \begin{verbatim} ! print "Content-type: text/html" # HTML is following print # blank line, end of headers \end{verbatim} --- 46,50 ---- \begin{verbatim} ! print "Content-Type: text/html" # HTML is following print # blank line, end of headers \end{verbatim} *************** *** 60,66 **** \end{verbatim} - (It may not be fully legal HTML according to the letter of the - standard, but any browser will understand it.) - \subsection{Using the cgi module} \nodename{Using the cgi module} --- 60,63 ---- *************** *** 77,84 **** standard). Since it may consume standard input, it should be instantiated only once. ! The \class{FieldStorage} instance can be accessed as if it were a Python ! dictionary. For instance, the following code (which assumes that the ! \code{content-type} header and blank line have already been printed) checks that the fields \code{name} and \code{addr} are both set to a non-empty string: --- 74,88 ---- standard). Since it may consume standard input, it should be instantiated only once. + + The \class{FieldStorage} instance can be indexed like a Python + dictionary, and also supports the standard dictionary methods + \function{has_key()} and \function{keys()}. + Form fields containing empty strings are ignored + and do not appear in the dictionary; to keep such values, provide + the optional \samp{keep_blank_values} argument when creating the + \class {FieldStorage} instance. ! For instance, the following code (which assumes that the ! \code{Content-Type} header and blank line have already been printed) checks that the fields \code{name} and \code{addr} are both set to a non-empty string: *************** *** 88,97 **** form_ok = 0 if form.has_key("name") and form.has_key("addr"): ! if form["name"].value != "" and form["addr"].value != "": ! form_ok = 1 if not form_ok: print "

    Error

    " print "Please fill in the name and addr fields." return ...further form processing here... \end{verbatim} --- 92,102 ---- form_ok = 0 if form.has_key("name") and form.has_key("addr"): ! form_ok = 1 if not form_ok: print "

    Error

    " print "Please fill in the name and addr fields." return + print "

    name:", form["name"].value + print "

    addr:", form["addr"].value ...further form processing here... \end{verbatim} *************** *** 100,108 **** themselves instances of \class{FieldStorage} (or \class{MiniFieldStorage}, depending on the form encoding). If the submitted form data contains more than one field with the same name, the object retrieved by \samp{form[\var{key}]} is not a \class{FieldStorage} or \class{MiniFieldStorage} ! instance but a list of such instances. If you expect this possibility (i.e., when your HTML form contains multiple fields with the same name), use the \function{type()} function to determine whether you --- 105,119 ---- themselves instances of \class{FieldStorage} (or \class{MiniFieldStorage}, depending on the form encoding). + The \member{value} attribute of the instance yields the string value + of the field. The \function{getvalue()} method returns this string value + directly; it also accepts an optional second argument as a default to + return if the requested key is not present. If the submitted form data contains more than one field with the same name, the object retrieved by \samp{form[\var{key}]} is not a \class{FieldStorage} or \class{MiniFieldStorage} ! instance but a list of such instances. Similarly, in this situation, ! \samp{form.getvalue(\var{key})} would return a list of strings. ! If you expect this possibility (i.e., when your HTML form contains multiple fields with the same name), use the \function{type()} function to determine whether you *************** *** 112,136 **** \begin{verbatim} ! username = form["username"] ! if type(username) is type([]): # Multiple username fields specified ! usernames = "" ! for item in username: ! if usernames: ! # Next item -- insert comma ! usernames = usernames + "," + item.value ! else: ! # First item -- don't insert comma ! usernames = item.value else: ! # Single username field specified ! usernames = username.value \end{verbatim} ! If a field represents an uploaded file, the value attribute reads the entire file in memory as a string. This may not be what you want. ! You can test for an uploaded file by testing either the filename ! attribute or the file attribute. You can then read the data at ! leisure from the file attribute: \begin{verbatim} --- 123,141 ---- \begin{verbatim} ! value = form.getvalue("username", "") ! if type(value) is type([]): # Multiple username fields specified ! usernames = ",".join(value) else: ! # Single or no username field specified ! usernames = value \end{verbatim} ! If a field represents an uploaded file, accessing the value via the ! \member{value} attribute or the \function{getvalue()} method reads the entire file in memory as a string. This may not be what you want. ! You can test for an uploaded file by testing either the \member{filename} ! attribute or the \member{file} attribute. You can then read the data at ! leisure from the \member{file} attribute: \begin{verbatim} *************** *** 158,162 **** \mimetype{application/x-www-form-urlencoded}), the items will actually be instances of the class \class{MiniFieldStorage}. In this case, the ! list, file and filename attributes are always \code{None}. --- 163,168 ---- \mimetype{application/x-www-form-urlencoded}), the items will actually be instances of the class \class{MiniFieldStorage}. In this case, the ! \member{list}, \member{file}, and \member{filename} attributes are ! always \code{None}. *************** *** 234,239 **** Parse input of type \mimetype{multipart/form-data} (for file uploads). Arguments are \var{fp} for the input file and ! \var{pdict} for the dictionary containing other parameters of ! \code{content-type} header Returns a dictionary just like \function{parse_qs()} keys are the --- 240,245 ---- Parse input of type \mimetype{multipart/form-data} (for file uploads). Arguments are \var{fp} for the input file and ! \var{pdict} for a dictionary containing other parameters in ! the \code{Content-Type} header. Returns a dictionary just like \function{parse_qs()} keys are the *************** *** 241,246 **** easy to use but not much good if you are expecting megabytes to be uploaded --- in that case, use the \class{FieldStorage} class instead ! which is much more flexible. Note that \code{content-type} is the ! raw, unparsed contents of the \code{content-type} header. Note that this does not parse nested multipart parts --- use --- 247,251 ---- easy to use but not much good if you are expecting megabytes to be uploaded --- in that case, use the \class{FieldStorage} class instead ! which is much more flexible. Note that this does not parse nested multipart parts --- use *************** *** 249,254 **** \begin{funcdesc}{parse_header}{string} ! Parse a header like \code{content-type} into a main ! content-type and a dictionary of parameters. \end{funcdesc} --- 254,259 ---- \begin{funcdesc}{parse_header}{string} ! Parse a MIME header (such as \code{Content-Type}) into a main ! value and a dictionary of parameters. \end{funcdesc} *************** *** 433,437 **** import sys import traceback ! print "Content-type: text/html" print sys.stderr = sys.stdout --- 438,442 ---- import sys import traceback ! print "Content-Type: text/html" print sys.stderr = sys.stdout *************** *** 455,459 **** import sys sys.stderr = sys.stdout ! print "Content-type: text/plain" print ...your code here... --- 460,464 ---- import sys sys.stderr = sys.stdout ! print "Content-Type: text/plain" print ...your code here... From python-dev@python.org Fri Aug 25 22:47:58 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 25 Aug 2000 14:47:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib cgi.py,1.49,1.50 Message-ID: <200008252147.OAA08554@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv8221/Lib Modified Files: cgi.py Log Message: Closing patch #101120 -- After everyone agreed. Index: cgi.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/cgi.py,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -r1.49 -r1.50 *** cgi.py 2000/08/03 20:57:44 1.49 --- cgi.py 2000/08/25 21:47:55 1.50 *************** *** 20,24 **** # ! __version__ = "2.2" --- 20,24 ---- # ! __version__ = "2.3" *************** *** 32,35 **** --- 32,36 ---- import mimetools import rfc822 + import UserDict from StringIO import StringIO *************** *** 167,175 **** dict = {} for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): ! if len(value) or keep_blank_values: ! if dict.has_key(name): ! dict[name].append(value) ! else: ! dict[name] = [value] return dict --- 168,175 ---- dict = {} for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): ! if dict.has_key(name): ! dict[name].append(value) ! else: ! dict[name] = [value] return dict *************** *** 202,208 **** raise ValueError, "bad query field: %s" % `name_value` continue ! name = urllib.unquote(string.replace(nv[0], '+', ' ')) ! value = urllib.unquote(string.replace(nv[1], '+', ' ')) ! r.append((name, value)) return r --- 202,209 ---- raise ValueError, "bad query field: %s" % `name_value` continue ! if len(nv[1]) or keep_blank_values: ! name = urllib.unquote(string.replace(nv[0], '+', ' ')) ! value = urllib.unquote(string.replace(nv[1], '+', ' ')) ! r.append((name, value)) return r *************** *** 538,541 **** --- 539,553 ---- return found + def getvalue(self, key, default=None): + """Dictionary style get() method, including 'value' lookup.""" + if self.has_key(key): + value = self[key] + if type(value) is type([]): + return map(lambda v: v.value, value) + else: + return value.value + else: + return default + def keys(self): """Dictionary style keys() method.""" *************** *** 707,711 **** # =============================== ! class FormContentDict: """Basic (multiple values per field) form content as dictionary. --- 719,723 ---- # =============================== ! class FormContentDict(UserDict.UserDict): """Basic (multiple values per field) form content as dictionary. *************** *** 721,738 **** """ def __init__(self, environ=os.environ): ! self.dict = parse(environ=environ) self.query_string = environ['QUERY_STRING'] - def __getitem__(self,key): - return self.dict[key] - def keys(self): - return self.dict.keys() - def has_key(self, key): - return self.dict.has_key(key) - def values(self): - return self.dict.values() - def items(self): - return self.dict.items() - def __len__( self ): - return len(self.dict) --- 733,738 ---- """ def __init__(self, environ=os.environ): ! self.dict = self.data = parse(environ=environ) self.query_string = environ['QUERY_STRING'] From python-dev@python.org Fri Aug 25 23:37:33 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:37:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_file.py,NONE,1.1 Message-ID: <200008252237.PAA20408@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20349/Lib/test Added Files: test_file.py Log Message: New test suite for file objects by Jeremy Hilton. This will need to be extended somewhat -- right now it only tests the .writelines() method. --- NEW FILE --- from test_support import TESTFN from UserList import UserList # verify writelines with instance sequence l = UserList(['1', '2']) f = open(TESTFN, 'wb') f.writelines(l) f.close() f = open(TESTFN, 'rb') buf = f.read() f.close() assert buf == '12' # verify writelines with integers f = open(TESTFN, 'wb') try: f.writelines([1, 2, 3]) except TypeError: pass else: print "writelines accepted sequence of integers" f.close() # verify writelines with integers in UserList f = open(TESTFN, 'wb') l = UserList([1,2,3]) try: f.writelines(l) except TypeError: pass else: print "writelines accepted sequence of integers" f.close() # verify writelines with non-string object class NonString: pass f = open(TESTFN, 'wb') try: f.writelines([NonString(), NonString()]) except TypeError: pass else: print "writelines accepted sequence of non-string objects" f.close() From python-dev@python.org Fri Aug 25 23:37:53 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:37:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_file,NONE,1.1 Message-ID: <200008252237.PAA20751@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv20700/Lib/test/output Added Files: test_file Log Message: Output of the new test --- NEW FILE --- test_file From python-dev@python.org Fri Aug 25 23:39:53 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:39:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.83,2.84 Message-ID: <200008252239.PAA22850@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv22692/Objects Modified Files: fileobject.c Log Message: Fix to bug [ Bug #111860 ] file.writelines() crashes. file.writelines() now tries to emulate the behaviour of file.write() as closely as possible. Due to the problems with releasing the interpreter lock the solution isn't exactly optimal, but still better than not supporting the file.write() semantics at all. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.83 retrieving revision 2.84 diff -C2 -r2.83 -r2.84 *** fileobject.c 2000/08/22 21:51:22 2.83 --- fileobject.c 2000/08/25 22:39:50 2.84 *************** *** 981,986 **** if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) ! { PyErr_Clear(); break; --- 981,985 ---- if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) { PyErr_Clear(); break; *************** *** 990,999 **** goto error; } - if (!PyString_Check(line)) { - Py_DECREF(line); - PyErr_SetString(PyExc_TypeError, - "writelines() requires sequences of strings"); - goto error; - } PyList_SetItem(list, j, line); } --- 989,992 ---- *************** *** 1002,1010 **** break; Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), --- 995,1035 ---- break; + /* Check that all entries are indeed strings. If not, + apply the same rules as for file.write() and + convert the results to strings. This is slow, but + seems to be the only way since all conversion APIs + could potentially execute Python code. */ + for (i = 0; i < j; i++) { + PyObject *v = PyList_GET_ITEM(list, i); + if (!PyString_Check(v)) { + const char *buffer; + int len; + if (((f->f_binary && + PyObject_AsReadBuffer(v, + (const void**)&buffer, + &len)) || + PyObject_AsCharBuffer(v, + &buffer, + &len))) { + PyErr_SetString(PyExc_TypeError, + "writelines() requires sequences of strings"); + goto error; + } + line = PyString_FromStringAndSize(buffer, + len); + if (line == NULL) + goto error; + Py_DECREF(v); + PyList_SET_ITEM(list, i, v); + } + } + + /* Since we are releasing the global lock, the + following code may *not* execute Python code. */ Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), From python-dev@python.org Fri Aug 25 23:42:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 15:42:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_parser,1.1,1.2 Message-ID: <200008252242.PAA25744@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv25671/Lib/test/output Modified Files: test_parser Log Message: Update the parser module to support augmented assignment. Add some test cases. Index: test_parser =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_parser,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_parser 2000/08/21 22:30:53 1.1 --- test_parser 2000/08/25 22:42:40 1.2 *************** *** 1,27 **** test_parser Expressions: ! foo(1) ! [1, 2, 3] ! [x**3 for x in range(20)] ! [x**3 for x in range(20) if x % 3] ! foo(*args) ! foo(*args, **kw) ! foo(**kw) ! foo(key=value) ! foo(key=value, *args) ! foo(key=value, *args, **kw) ! foo(key=value, **kw) ! foo(a, b, c, *args) ! foo(a, b, c, *args, **kw) ! foo(a, b, c, **kw) ! foo + bar Statements: ! print ! print 1 ! print 1, ! print >>fp ! print >>fp, 1 ! print >>fp, 1, Invalid parse trees: --- 1,41 ---- test_parser Expressions: ! expr: foo(1) ! expr: [1, 2, 3] ! expr: [x**3 for x in range(20)] ! expr: [x**3 for x in range(20) if x % 3] ! expr: foo(*args) ! expr: foo(*args, **kw) ! expr: foo(**kw) ! expr: foo(key=value) ! expr: foo(key=value, *args) ! expr: foo(key=value, *args, **kw) ! expr: foo(key=value, **kw) ! expr: foo(a, b, c, *args) ! expr: foo(a, b, c, *args, **kw) ! expr: foo(a, b, c, **kw) ! expr: foo + bar Statements: ! suite: print ! suite: print 1 ! suite: print 1, ! suite: print >>fp ! suite: print >>fp, 1 ! suite: print >>fp, 1, ! suite: a ! suite: a = b ! suite: a = b = c = d = e ! suite: a += b ! suite: a -= b ! suite: a *= b ! suite: a /= b ! suite: a %= b ! suite: a &= b ! suite: a |= b ! suite: a ^= b ! suite: a <<= b ! suite: a >>= b ! suite: a **= b Invalid parse trees: *************** *** 34,36 **** --- 48,53 ---- a,,c + caught expected exception for invalid tree + + a $= b caught expected exception for invalid tree From python-dev@python.org Fri Aug 25 23:42:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 15:42:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_parser.py,1.1,1.2 Message-ID: <200008252242.PAA25743@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv25671/Lib/test Modified Files: test_parser.py Log Message: Update the parser module to support augmented assignment. Add some test cases. Index: test_parser.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_parser.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_parser.py 2000/08/21 22:30:52 1.1 --- test_parser.py 2000/08/25 22:42:40 1.2 *************** *** 1,2 **** --- 1,3 ---- + import os.path import parser import pprint *************** *** 13,48 **** def roundtrip(f, s): - print s st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) print "Expressions:" ! roundtrip(expr, "foo(1)") ! roundtrip(expr, "[1, 2, 3]") ! roundtrip(expr, "[x**3 for x in range(20)]") ! roundtrip(expr, "[x**3 for x in range(20) if x % 3]") ! roundtrip(expr, "foo(*args)") ! roundtrip(expr, "foo(*args, **kw)") ! roundtrip(expr, "foo(**kw)") ! roundtrip(expr, "foo(key=value)") ! roundtrip(expr, "foo(key=value, *args)") ! roundtrip(expr, "foo(key=value, *args, **kw)") ! roundtrip(expr, "foo(key=value, **kw)") ! roundtrip(expr, "foo(a, b, c, *args)") ! roundtrip(expr, "foo(a, b, c, *args, **kw)") ! roundtrip(expr, "foo(a, b, c, **kw)") ! roundtrip(expr, "foo + bar") print print "Statements:" ! roundtrip(suite, "print") ! roundtrip(suite, "print 1") ! roundtrip(suite, "print 1,") ! roundtrip(suite, "print >>fp") ! roundtrip(suite, "print >>fp, 1") ! roundtrip(suite, "print >>fp, 1,") # --- 14,79 ---- def roundtrip(f, s): st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) + def roundtrip_fromfile(filename): + roundtrip(suite, open(filename).read()) + def test_expr(s): + print "expr:", s + roundtrip(expr, s) + + def test_suite(s): + print "suite:", s + roundtrip(suite, s) + + print "Expressions:" ! test_expr("foo(1)") ! test_expr("[1, 2, 3]") ! test_expr("[x**3 for x in range(20)]") ! test_expr("[x**3 for x in range(20) if x % 3]") ! test_expr("foo(*args)") ! test_expr("foo(*args, **kw)") ! test_expr("foo(**kw)") ! test_expr("foo(key=value)") ! test_expr("foo(key=value, *args)") ! test_expr("foo(key=value, *args, **kw)") ! test_expr("foo(key=value, **kw)") ! test_expr("foo(a, b, c, *args)") ! test_expr("foo(a, b, c, *args, **kw)") ! test_expr("foo(a, b, c, **kw)") ! test_expr("foo + bar") print print "Statements:" ! test_suite("print") ! test_suite("print 1") ! test_suite("print 1,") ! test_suite("print >>fp") ! test_suite("print >>fp, 1") ! test_suite("print >>fp, 1,") ! ! # expr_stmt ! test_suite("a") ! test_suite("a = b") ! test_suite("a = b = c = d = e") ! test_suite("a += b") ! test_suite("a -= b") ! test_suite("a *= b") ! test_suite("a /= b") ! test_suite("a %= b") ! test_suite("a &= b") ! test_suite("a |= b") ! test_suite("a ^= b") ! test_suite("a <<= b") ! test_suite("a >>= b") ! test_suite("a **= b") ! ! #d = os.path.dirname(os.__file__) ! #roundtrip_fromfile(os.path.join(d, "os.py")) ! #roundtrip_fromfile(os.path.join(d, "test", "test_parser.py")) # *************** *** 115,116 **** --- 146,178 ---- check_bad_tree(tree, "a,,c") + + # a $= b + tree = \ + (257, + (264, + (265, + (266, + (267, + (312, + (291, + (292, + (293, + (294, + (296, + (297, + (298, + (299, (300, (301, (302, (303, (304, (1, 'a'))))))))))))))), + (268, (37, '$=')), + (312, + (291, + (292, + (293, + (294, + (296, + (297, + (298, + (299, (300, (301, (302, (303, (304, (1, 'b'))))))))))))))))), + (4, ''))), + (0, '')) + + check_bad_tree(tree, "a $= b") From python-dev@python.org Fri Aug 25 23:42:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 15:42:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.52,2.53 Message-ID: <200008252242.PAA25733@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv25671/Modules Modified Files: parsermodule.c Log Message: Update the parser module to support augmented assignment. Add some test cases. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** parsermodule.c 2000/08/23 15:35:26 2.52 --- parsermodule.c 2000/08/25 22:42:40 2.53 *************** *** 1468,1475 **** && validate_testlist(CHILD(tree, 0))); ! for (j = 1; res && (j < nch); j += 2) ! res = (validate_equal(CHILD(tree, j)) ! && validate_testlist(CHILD(tree, j + 1))); return (res); } --- 1468,1499 ---- && validate_testlist(CHILD(tree, 0))); ! if (res && nch == 3 ! && TYPE(CHILD(tree, 1)) == augassign) { ! res = (validate_numnodes(CHILD(tree, 1), 1, "augassign") ! && validate_testlist(CHILD(tree, 2))); + if (res) { + char *s = STR(CHILD(CHILD(tree, 1), 0)); + + res = (strcmp(s, "+=") == 0 + || strcmp(s, "-=") == 0 + || strcmp(s, "*=") == 0 + || strcmp(s, "/=") == 0 + || strcmp(s, "%=") == 0 + || strcmp(s, "&=") == 0 + || strcmp(s, "|=") == 0 + || strcmp(s, "^=") == 0 + || strcmp(s, "<<=") == 0 + || strcmp(s, ">>=") == 0 + || strcmp(s, "**=") == 0); + if (!res) + err_string("illegal augmmented assignment operator"); + } + } + else { + for (j = 1; res && (j < nch); j += 2) + res = (validate_equal(CHILD(tree, j)) + && validate_testlist(CHILD(tree, j + 1))); + } return (res); } *************** *** 2823,2829 **** DL_EXPORT(void) initparser(void) ! { PyObject* module; PyObject* dict; --- 2847,2855 ---- + DL_IMPORT(void) initparser(void); + DL_EXPORT(void) initparser(void) ! { PyObject* module; PyObject* dict; *************** *** 2835,2840 **** if (parser_error == 0) parser_error = PyErr_NewException("parser.ParserError", NULL, NULL); - else - puts("parser module initialized more than once!"); if ((parser_error == 0) --- 2861,2864 ---- From python-dev@python.org Fri Aug 25 23:49:07 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:49:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.84,2.85 Message-ID: <200008252249.PAA32049@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv31955/Objects Modified Files: fileobject.c Log Message: Fixed a serious typo. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.84 retrieving revision 2.85 diff -C2 -r2.84 -r2.85 *** fileobject.c 2000/08/25 22:39:50 2.84 --- fileobject.c 2000/08/25 22:49:05 2.85 *************** *** 1021,1025 **** goto error; Py_DECREF(v); ! PyList_SET_ITEM(list, i, v); } } --- 1021,1025 ---- goto error; Py_DECREF(v); ! PyList_SET_ITEM(list, i, line); } } From python-dev@python.org Sat Aug 26 03:21:58 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:21:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_ext.py,1.60,1.61 Message-ID: <200008260221.TAA02695@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv2593 Modified Files: build_ext.py Log Message: In 'check_extensions_list()': when converting old-style 'buildinfo' dict, don't assign None to any attributes of the Extension object. Index: build_ext.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_ext.py,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -r1.60 -r1.61 *** build_ext.py 2000/08/13 00:42:35 1.60 --- build_ext.py 2000/08/26 02:21:55 1.61 *************** *** 279,283 **** 'extra_compile_args', 'extra_link_args'): ! setattr(ext, key, build_info.get(key)) # Medium-easy stuff: same syntax/semantics, different names. --- 279,285 ---- 'extra_compile_args', 'extra_link_args'): ! val = build_info.get(key) ! if val is not None: ! setattr(ext, key, val) # Medium-easy stuff: same syntax/semantics, different names. From python-dev@python.org Sat Aug 26 03:37:10 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:37:10 -0700 Subject: [Python-checkins] CVS: distutils/distutils __init__.py,1.10,1.11 Message-ID: <200008260237.TAA17503@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv17429/distutils Modified Files: __init__.py Log Message: Bumped version to 0.9.2pre. Index: __init__.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/__init__.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** __init__.py 2000/08/15 13:14:27 1.10 --- __init__.py 2000/08/26 02:37:07 1.11 *************** *** 11,13 **** __revision__ = "$Id$" ! __version__ = "0.9.1" --- 11,13 ---- __revision__ = "$Id$" ! __version__ = "0.9.2pre" From python-dev@python.org Sat Aug 26 03:37:10 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:37:10 -0700 Subject: [Python-checkins] CVS: distutils setup.py,1.19,1.20 Message-ID: <200008260237.TAA17497@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv17429 Modified Files: setup.py Log Message: Bumped version to 0.9.2pre. Index: setup.py =================================================================== RCS file: /cvsroot/python/distutils/setup.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** setup.py 2000/08/15 13:14:27 1.19 --- setup.py 2000/08/26 02:37:06 1.20 *************** *** 12,16 **** setup (name = "Distutils", ! version = "0.9.1", description = "Python Distribution Utilities", author = "Greg Ward", --- 12,16 ---- setup (name = "Distutils", ! version = "0.9.2pre", description = "Python Distribution Utilities", author = "Greg Ward", From python-dev@python.org Sat Aug 26 03:40:18 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:40:18 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command bdist_wininst.py,1.5,1.6 Message-ID: <200008260240.TAA20030@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv19394/distutils/command Modified Files: bdist_wininst.py Log Message: New release of the Windows installer from Thomas Heller. The known bug (bogus error message when an empty file is extracted) is fixed. Other changes: - The target-compile and target-optimize flags of bdist_wininst are gone. It is no longer possible to compile the python files during installation. - The zlib module is no longer required or used by bdist_wininst. - I moved the decompression/extraction code into a separate file (extract.c). - The installer stub is now compressed by UPX (see http://upx.tsx.org/). This reduces the size of the exe (and thus the overhead of the final installer program) from 40 kB to 16 kB. - The installer displays a more uptodate user wizard-like user interface, also containing a graphic: Just's Python Powered logo. (I could not convince myself to use one of the BeOpen logos). - The installation progress bar now moves correctly. Index: bdist_wininst.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/bdist_wininst.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** bdist_wininst.py 2000/08/05 01:31:54 1.5 --- bdist_wininst.py 2000/08/26 02:40:10 1.6 *************** *** 1,450 **** ! """distutils.command.bdist_wininst ! ! Implements the Distutils 'bdist_wininst' command: create a windows installer ! exe-program.""" ! ! # created 2000/06/02, Thomas Heller ! ! __revision__ = "$Id$" ! ! import sys, os, string ! from distutils.core import Command ! from distutils.util import get_platform ! from distutils.dir_util import create_tree, remove_tree ! from distutils.errors import * ! ! class bdist_wininst (Command): ! ! description = "create an executable installer for MS Windows" ! ! user_options = [('bdist-dir=', 'd', ! "temporary directory for creating the distribution"), ! ('keep-tree', 'k', ! "keep the pseudo-installation tree around after " + ! "creating the distribution archive"), ! ('target-compile', 'c', ! "compile to .pyc on the target system"), ! ('target-optimize', 'o', ! "compile to .pyo on the target system"), ! ('target-version=', 'v', ! "require a specific python version" + ! " on the target system (1.5 or 1.6/2.0)"), ! ('dist-dir=', 'd', ! "directory to put final built distributions in"), ! ] ! ! def initialize_options (self): ! self.bdist_dir = None ! self.keep_tree = 0 ! self.target_compile = 0 ! self.target_optimize = 0 ! self.target_version = None ! self.dist_dir = None ! ! # initialize_options() ! ! ! def finalize_options (self): ! if self.bdist_dir is None: ! bdist_base = self.get_finalized_command('bdist').bdist_base ! self.bdist_dir = os.path.join(bdist_base, 'wininst') ! if not self.target_version: ! self.target_version = "" ! else: ! if not self.target_version in ("1.5", "1.6", "2.0"): ! raise DistutilsOptionError ( ! "target version must be 1.5, 1.6, or 2.0") ! if self.distribution.has_ext_modules(): ! short_version = sys.version[:3] ! if self.target_version and self.target_version != short_version: ! raise DistutilsOptionError ("target version can only be" + ! short_version) ! self.target_version = short_version ! ! self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) ! ! # finalize_options() ! ! ! def run (self): ! ! self.run_command ('build') ! ! install = self.reinitialize_command('install') ! install.root = self.bdist_dir ! ! install_lib = self.reinitialize_command('install_lib') ! install_lib.compile = 0 ! install_lib.optimize = 0 ! ! # The packager can choose if .pyc and .pyo files should be created ! # on the TARGET system instead at the SOURCE system. ! ! ## # The compilation can only be done on the SOURCE system for one ! ## # python version (assuming 1.6/2.0 and 1.5 have incompatible ! ## # byte-codes). ! ## short_version = sys.version[:3] ! ## if self.target_version == short_version: ! ## if not self.target_compile: ! ## install_lib.compile = 1 ! ## if not self.target_optimize: ! ## install_lib.optimize = 1 ! ! install_lib.ensure_finalized() ! ! self.announce ("installing to %s" % self.bdist_dir) ! install.ensure_finalized() ! install.run() ! ! # And make an archive relative to the root of the ! # pseudo-installation tree. ! fullname = self.distribution.get_fullname() ! archive_basename = os.path.join(self.bdist_dir, ! "%s.win32" % fullname) ! ! # XXX hack! Our archive MUST be relative to sys.prefix ! # XXX What about .install_data, .install_scripts, ...? ! # [Perhaps require that all installation dirs be under sys.prefix ! # on Windows? this will be acceptable until we start dealing ! # with Python applications, at which point we should zip up ! # the application directory -- and again everything can be ! # under one dir --GPW] ! root_dir = install.install_lib ! arcname = self.make_archive (archive_basename, "zip", ! root_dir=root_dir) ! self.create_exe (arcname, fullname) ! ! if not self.keep_tree: ! remove_tree (self.bdist_dir, self.verbose, self.dry_run) ! ! # run() ! ! def create_inifile (self): ! # Create an inifile containing data describing the installation. ! # This could be done without creating a real file, but ! # a file is (at least) useful for debugging bdist_wininst. ! ! metadata = self.distribution.metadata ! ini_name = "%s.ini" % metadata.get_fullname() ! ! self.announce ("creating %s" % ini_name) ! inifile = open (ini_name, "w") ! ! # Write the [metadata] section. Values are written with ! # repr()[1:-1], so they do not contain unprintable characters, and ! # are not surrounded by quote chars. ! inifile.write ("[metadata]\n") ! ! # 'info' will be displayed in the installer's dialog box, ! # describing the items to be installed. ! info = metadata.long_description + '\n' ! ! for name in dir (metadata): ! if (name != 'long_description'): ! data = getattr (metadata, name) ! if data: ! info = info + ("\n %s: %s" % \ ! (string.capitalize (name), data)) ! inifile.write ("%s=%s\n" % (name, repr (data)[1:-1])) ! ! # The [setup] section contains entries controlling ! # the installer runtime. ! inifile.write ("\n[Setup]\n") ! inifile.write ("info=%s\n" % repr (info)[1:-1]) ! inifile.write ("pthname=%s.%s\n" % (metadata.name, metadata.version)) ! inifile.write ("pyc_compile=%d\n" % self.target_compile) ! inifile.write ("pyo_compile=%d\n" % self.target_optimize) ! if self.target_version: ! vers_minor = string.split (self.target_version, '.')[1] ! inifile.write ("vers_minor=%s\n" % vers_minor) ! ! title = self.distribution.get_fullname() ! inifile.write ("title=%s\n" % repr (title)[1:-1]) ! inifile.close() ! return ini_name ! ! # create_inifile() ! ! def create_exe (self, arcname, fullname): ! import struct, zlib ! ! cfgdata = open (self.create_inifile()).read() ! ! comp_method = zlib.DEFLATED ! co = zlib.compressobj (zlib.Z_DEFAULT_COMPRESSION, comp_method, -15) ! zcfgdata = co.compress (cfgdata) + co.flush() ! ! installer_name = os.path.join(self.dist_dir, ! "%s.win32.exe" % fullname) ! self.announce ("creating %s" % installer_name) ! ! file = open (installer_name, "wb") ! file.write (self.get_exe_bytes ()) ! file.write (zcfgdata) ! crc32 = zlib.crc32 (cfgdata) ! header = struct.pack (" Update of /cvsroot/python/distutils/misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv19394/misc Modified Files: install.c install.rc resource.h wininst.dsp wininst.dsw Added Files: PythonPowered.bmp archive.h extract.c wininst.exe Log Message: New release of the Windows installer from Thomas Heller. The known bug (bogus error message when an empty file is extracted) is fixed. Other changes: - The target-compile and target-optimize flags of bdist_wininst are gone. It is no longer possible to compile the python files during installation. - The zlib module is no longer required or used by bdist_wininst. - I moved the decompression/extraction code into a separate file (extract.c). - The installer stub is now compressed by UPX (see http://upx.tsx.org/). This reduces the size of the exe (and thus the overhead of the final installer program) from 40 kB to 16 kB. - The installer displays a more uptodate user wizard-like user interface, also containing a graphic: Just's Python Powered logo. (I could not convince myself to use one of the BeOpen logos). - The installation progress bar now moves correctly. --- NEW FILE --- BM --- NEW FILE --- #pragma pack(1) /* zip-archive headers * See: http://www.pkware.com/appnote.html */ struct eof_cdir { long tag; /* must be 0x06054b50 */ short disknum; short firstdisk; short nTotalCDirThis; short nTotalCDir; long nBytesCDir; long ofsCDir; short commentlen; }; struct cdir { long tag; /* must be 0x02014b50 */ short version_made; short version_extract; short gp_bitflag; short comp_method; short last_mod_file_time; short last_mod_file_date; long crc32; long comp_size; long uncomp_size; short fname_length; short extra_length; short comment_length; short disknum_start; short int_file_attr; long ext_file_attr; long ofs_local_header; }; struct fhdr { long tag; /* must be 0x04034b50 */ short version_needed; short flags; short method; short last_mod_file_time; short last_mod_file_date; long crc32; long comp_size; long uncomp_size; short fname_length; short extra_length; }; struct meta_data_hdr { int tag; int uncomp_size; }; #pragma pack() typedef int (*NOTIFYPROC)(int code, LPSTR text, ...); extern BOOL extract_file (char *dst, struct fhdr *phdr, char *src, NOTIFYPROC callback); extern BOOL unzip_archive (char *dirname, char *data, DWORD size, NOTIFYPROC callback); extern char *map_new_file (DWORD flags, char *filename, char *pathname_part, struct fhdr *pfhdr, NOTIFYPROC callback); extern BOOL ensure_directory (char *pathname, char *new_part, NOTIFYPROC callback); #define DIR_CREATED 1 #define CAN_OVERWRITE 2 #define FILE_CREATED 3 #define ZLIB_ERROR 4 #define SYSTEM_ERROR 5 #define NUM_FILES 6 #define FILE_OVERWRITTEN 7 --- NEW FILE --- #include #include #include #include "resource.h" #define ZLIB_DLL #include "zlib/zlib.h" #include #include #include "archive.h" /* Convert unix-path to dos-path */ static void fixpath (char *path) { while (path && *path) { if (*path == '/') *path = '\\'; ++path; } } BOOL ensure_directory (char *pathname, char *new_part, NOTIFYPROC notify) { while (new_part && *new_part && (new_part = strchr (new_part, '\\'))) { DWORD attr; *new_part = '\0'; attr = GetFileAttributes (pathname); if (attr == -1) { /* nothing found */ if (!CreateDirectory (pathname, NULL) && notify) notify (SYSTEM_ERROR, "CreateDirectory (%s)", pathname); } if (attr & FILE_ATTRIBUTE_DIRECTORY) { ; } else { SetLastError (183); if (notify) notify (SYSTEM_ERROR, "CreateDirectory (%s)", pathname); } *new_part = '\\'; ++new_part; } return TRUE; } /* XXX Should better explicitely specify * uncomp_size and file_times instead of pfhdr! */ char *map_new_file (DWORD flags, char *filename, char *pathname_part, struct fhdr *pfhdr, NOTIFYPROC notify) { HANDLE hFile, hFileMapping; char *dst; int size = pfhdr->uncomp_size; FILETIME ft; try_again: if (!flags) flags = CREATE_NEW; hFile = CreateFile (filename, GENERIC_WRITE | GENERIC_READ, 0, NULL, flags, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { DWORD x = GetLastError(); switch (x) { case ERROR_FILE_EXISTS: if (notify && notify (CAN_OVERWRITE, filename)) hFile = CreateFile (filename, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); else { if (notify) notify (FILE_OVERWRITTEN, filename); return NULL; } break; case ERROR_PATH_NOT_FOUND: if (ensure_directory (filename, pathname_part, notify)) goto try_again; else return FALSE; break; default: SetLastError (x); break; } } if (hFile == INVALID_HANDLE_VALUE) { if (notify) notify (SYSTEM_ERROR, "CreateFile (%s)", filename); return NULL; } if (notify) notify (FILE_CREATED, filename); DosDateTimeToFileTime (pfhdr->last_mod_file_date, pfhdr->last_mod_file_time, &ft); SetFileTime (hFile, &ft, &ft, &ft); if (size == 0) { /* We cannot map a zero-length file (Also it makes no sense */ CloseHandle (hFile); return NULL; } hFileMapping = CreateFileMapping (hFile, NULL, PAGE_READWRITE, 0, size, NULL); CloseHandle (hFile); if (hFileMapping == INVALID_HANDLE_VALUE) { if (notify) notify (SYSTEM_ERROR, "CreateFileMapping (%s)", filename); return NULL; } dst = MapViewOfFile (hFileMapping, FILE_MAP_WRITE, 0, 0, 0); CloseHandle (hFileMapping); if (!dst) { if (notify) notify (SYSTEM_ERROR, "MapViewOfFile (%s)", filename); return NULL; } return dst; } BOOL extract_file (char *dst, struct fhdr *phdr, char *src, NOTIFYPROC notify) { z_stream zstream; int result; if (phdr->method == Z_DEFLATED) { int x; long crc = 0; memset (&zstream, 0, sizeof (zstream)); zstream.next_in = src; zstream.avail_in = phdr->comp_size+1; zstream.next_out = dst; zstream.avail_out = phdr->uncomp_size; /* Apparently an undocumented feature of zlib: Set windowsize to negative values to supress the gzip header and be compatible with zip! */ result = TRUE; if (Z_OK != (x = inflateInit2(&zstream, -15))) { if (notify) notify (ZLIB_ERROR, "inflateInit2 returns %d", x); result = FALSE; goto cleanup; } if (Z_STREAM_END != (x = inflate(&zstream, Z_FINISH))) { if (notify) notify (ZLIB_ERROR, "inflate returns %d", x); result = FALSE; } cleanup: if (Z_OK != (x = inflateEnd(&zstream))) { if (notify) notify (ZLIB_ERROR, "inflateEnd returns %d", x); result = FALSE; } } else if (phdr->method == 0) { memcpy(dst, src, phdr->uncomp_size); result = TRUE; } else result = FALSE; UnmapViewOfFile(dst); return result; } /* Open a zip-compatible archive and extract all files * into the specified directory (which is assumed to exist) */ BOOL unzip_archive (char *dirname, char *data, DWORD size, NOTIFYPROC notify) { int n; char pathname[MAX_PATH]; char *new_part; /* read the end of central directory record */ struct eof_cdir *pe = (struct eof_cdir *)&data[size - sizeof (struct eof_cdir)]; int arc_start = size - sizeof (struct eof_cdir) - pe->nBytesCDir - pe->ofsCDir; /* set position to start of central directory */ int pos = arc_start + pe->ofsCDir; /* make sure this is a zip file */ if (pe->tag != 0x06054b50) return FALSE; /* Loop through the central directory, reading all entries */ for (n = 0; n < pe->nTotalCDir; ++n) { char *fname; char *pcomp; char *dst; struct cdir *pcdir = (struct cdir *)&data[pos]; struct fhdr *pfhdr = (struct fhdr *)&data[pcdir->ofs_local_header + arc_start]; if (pcdir->tag != 0x02014b50) return FALSE; if (pfhdr->tag != 0x04034b50) return FALSE; pos += sizeof (struct cdir); fname = (char *)&data[pos]; /* This is not null terminated! */ pos += pcdir->fname_length + pcdir->extra_length + pcdir->comment_length; pcomp = &data[pcdir->ofs_local_header + sizeof (struct fhdr) + arc_start + pfhdr->fname_length + pfhdr->extra_length]; strcpy (pathname, dirname); strcat (pathname, "\\"); new_part = &pathname[lstrlen (pathname)]; strncat (pathname, fname, pfhdr->fname_length); fixpath (pathname); if (pathname[strlen(pathname)-1] != '\\') { dst = map_new_file (0, pathname, new_part, pfhdr, notify); if (dst) { if (!extract_file (dst, pfhdr, pcomp, notify)) return FALSE; } /* else ??? */ } if (notify) notify (NUM_FILES, new_part, (int)pe->nTotalCDir, (int)n+1); } return TRUE; } --- NEW FILE --- MZ $ *–{.º4Î’¦ Aë±Pt P™ý±m{ë/\ñS jÿU…µÙ²ñÀ.gfÖðdìu%.ÂhT0éS·ûžïô;Yü$t í]áÈEKÜf‹H ÃÞ‡î@ Q{€J}ü¯{3 P„;øu ˆ¡tß ‡VjVd„¾y‹=ˆ†h8l·¶ù‰<ë&¬+S*h¾ßÚÖS®%v;Æu'64ƒy(„•3Àmá'|[É8S‹]R‹!ö°ð·W¡Ff= ýŽ3+‹Íöûÿ‹L*4ó.+ïøl·> 7Ç.’îo·í¿XMðP @ÓÇ~µöÛí< FVÈvT#4~¹Šì…èþ]Tlùºg h°îPÌN™ÞÍô\„ t ›ÛLP% ;ó»ìV|9ƒÄí:–¸ø@ÁüÒ PkÛØ8jA!ÿ8œÜî9ŒÏWÒš¥ï¶Þ\ë÷‹DŠ„Éý};ãÿ€ù/uÆ ÀWP$QÍVp<óqJ jßfËÿ ™Y÷ù3Éh´`Q Ó©3gº× _8Ÿžkl­™ôñöÂ>Ú¶w߶¸ qt‡ïo¶ ÁèHošj0llåîh”xå,a@@ @šîïhЋþþVHH^¡ÀA£cìë]­½p½û¸ƒûÌ5´±,þÓˆc8íí€9DЊuó²öëf.(¿vë$E/„ìoj€h™<%Whï’a3g0 ÀÆÅpÝ-‰ëEâ 8»=Àþ3ÿWW€u|ënDBøZµV¯ådÁ²[ÙáíÆ´ôS3Û  tÑöA["‘"P¿{ðÌ@…ÔÂìP‘Ý"‡HP^ˆ¹xÒd˜\’+ð+£KÒðV÷jd¸gno|¥ÖÜ‹¤…Â[‡ ¹¡g“tIé·M½EtCtBj#togækc b7Ötßÿ·•ÁIƒáA‹Á£Bë.žïÇÇÜ^“Àoj$hŒbË@è§ë,þ^÷ØÀ@ ŒdÙ €‹3A,ŸäÌt®«ÖÑ Äh ÷àdæ`"ëÛuAÇ6ä‰h'·=(Bz¥¶:¢¹A2!që%/owuÈ]t–j Y}ÄàÖíF‚ó«ô‰««¶}Ú`Dî «Œ5Ü2ð¿ hЀV/ö='`Šxxl­Z³ÊîñiP£Îò ¬¥‰wV¡¡7Ã…‡ÏŽ•R”PÄP4õW;‹ðUÛÛ¿ŒO\uDŠH@0|è3ÛÿSË~n7ruÙÆ FëÓ ']w-ô'jQè<¿¹_‹ GˆR­ˆF@ÆS+Á맲}Q½SÏ€WÏV&ð‰1:€îx­øƒJl4ï+üŒà€ÆEñ?@StÚЂtiÅh Æš A XQ?'œÎl \TíÌÿ¿b l‡°¯aë^¸Õÿ –?&Œ[º­Ä(:©$ Ç Ü¶í¾™Zì÷u ?â°d ‰~þ†·Ö:` 8~(9~$uºÒÎÜ$0j[„ &éÚæÒ'‰†>üL¾°Ð ú‰x_Vωz öïw §´÷ÙÇ@ xù|Y¶ö_÷T¸Óà‰JR×Qnÿ7ÚÒP÷Òâà6eRV4ì¶x áˆAOAz[vˆ­Ä3nÉfÝãLy VÉ',á_¸úiqS” PžU»›mw;v ù¡> #ƒƒú¿û•Ã·‡öïK½Áãû‰\‰È þćÄq$0(¶ØÚF³=ˆI‰ ·ñ­µ-/‹Š5ѺÅÆEBì‚s¾.tÇOUÝlöÝ-óÔdlë¢"‹PÁé(&vãÁ]v$ÀÏ×ÚXN½ÛZ4H¨Žf@v=n[{‹^ y‰½ÿ.°‰6CÁ÷õ…Òtº˜{ï!ÇV”ÑÝ_¨æ6>yhöÁ %c)8bÃÎ&Ø? kÚœY¤!Ø÷\ýu£UóméìDm,…’’¥6»m"Ois 3¹HµèRͶŽÍDT ù Ø 90g^òã-cä·æ^íáJÜÁáH-ÙÚs äI4 k7 Ù;ƒHB‰:·®PH7âÉ%öʉH9 ¾\2$ „nÌÍ–6?9H4†Ë6ëåÁl3YéC¶¤hܲôu ‹ÇW§gYhçrjc¤P°;“GnÇ9HÒpKO7Š P#gËáÑ>V“IÒ %Œ°C‰(³!¶ !xN0ó,#Ùk¸ø;ifÃ4,€p Ds+ÁHë,çò\Œƒø  u¿ÁÁ…L@~ƒýsPÞ(<‰®fì9óµï\Xq7äÀbaø]¼u‡ýXÎ s,©ú-Ðpnú ?L,O»Â=—ö|@'"rÔ¼+5ñ‹Ö‹Î‚árê3ÑÚÛ ¯¢8í‹Á;Åú‰l\1ì ÝK&‹‰é&:·-LÒ¼*Ç ߵÅ|D;Öu#¿‹ï¿Å{(-t‹×;±s+ÂǶ …HWd+òs‰5ug¾Ðu´LAHS‰S4î‹­•7G0jÖ£´ o³L:1+ÊIÿK,F¾Ûs>Uu b÷ÖmróAòN‹Î‹Ȥ†aÂ^° ¡{ƒ…ÉvÂ;ÁÁ>—Ø ¦DÑóðø…Ê-ß+Ðó¤ÚFÛÞî\%DR K]†Îtíð+ ‰x)&Ø\ h]dû<ÆA*–s8WÉ2’ÍÑ}ÈÒ%ÿ?%È ˜†¾e‹‡ÖÐ<ÝÜú òmø[}F„â³tswH(ùPao<Ÿ HÇCnÆÞ¦‰ðë®qS…F7š’ ƒb-•üÎÓshY2¾4ia2,NO-ѱ‹ü€WK Å+´Û‘a†jý°{˜gr˜0¸¡Ès!ð^›ì<4Ç1i5´n® 7 rßp$ –¾oCSQR4WmgÓæñãPQ0L…l›Ùð…!ûæ>|…OeÐ4â7vâí,5]ƒ{ÒYö~<ú;ès3ãJ;ëúhùJ˜öôùéXsCú.ù͋ɵwðw0x¹#ÆæTÁæ»­Í4v´U—4s‚km·É+êÑ E„n;\Êq@¤7 #¹Çã ýÍt3òƒèÍYý%w‰+$ø À ;és;Ö-‡™à0µG#éÉì|¯ÑïÎwU‹ ©#Î&ã½VkbÔ×Îe„Sጠ½Þ­ŸÐ;*‡©uÓj”XÊ*9é™7sð‚“ ÚŠüðí¥Âë kÏe Yv˜g@5¬$¢“¦ÇL$6ûpàÓÊ%4Ïwö= ¸=Ÿ< +yž;†ÀP¤N„Wl Y)H¢µ°Às^k<0—_·ºØØÐ+8VL´šƒèÎMîúçQ|I±•hæÙ{@tV]àâÅÙ¶T ;„ 阠— A&!‘Scí« O°þECH7žÂ^*Cÿô)í*r¹\n`+‹,:-!.Ù4Ëåp05~ÂX*˜›fvØY1ø¸¤ï ¢ j ‹ zì º\ùïß½Û†ïUû°™Ãr¸ÜÅ+Ø‚Œ¡­èÁíQˆß¢ÛaŠƒÆä³w¬VñùòóC9ôõöC9ä÷øù9äúûüýlçCþÿM¢¼dŸi+õ¶uFHuô± »ocw¹ñò÷ñL¿‹5÷÷Úº[më‹õ‡1][&Áá­ü_ ÁŸBÙ?•Pn=ðP]¾æöÖT£ã¡7Üjì…"ŠO£EˆPÐwZ ˆHu ôÁ‰3M:ßµ^qþl@›G …Î #gm ’l(FzØÊÕò,‰~;Œ)+µ­–"{­ù…‰ôE\*eÜU„RŽv"MOUw8œV2»§êÈ£~¸HÛ\gº( @®ü£¿F0r¥tluøI÷ÙÉ#ƒÁïMTí¹_a(½fc‘‚W,µœM¶E²«bøsD@\Å.ž‹ºµí0 ,rÕ}g£¼®…ø# ¿F-VÈI`Óèôk„G¸nÁE+øEâ-¸@ŠÅ‹I£ÇL³•¯¨t»b­Dw஋¯"¶Û&é@¯Eè  9sÐã'}æ΂ÚB¯H7,`ïÜyÐçØ3'ɾ‹L¹Zkí}MÈέ‘°Ô·µ™ér×Ó@õ`04EÌe^–0Šä–D¤ad D…ðn Re ÁˆäBAØC (0o~Ý€ckÕuÂ+çLMê7@Öíl¼B´#–± –JüxÊV—ÔN,-”6Û§Žu!>0;Á'•T-) ûN¶ëg†šDi#R…r2dFFb< mƒÜ@b]ca"-‘r^bž> #ÄÛBó ˆJÿ>çþAH;PŽŽçN fIa†4h¿7° ˆ BHD½ÀpEöÏ‹+ctË âÇC+Í"dÍ@ª|3ÝIôÃJ 0f@#ðbPej+Ì òý+ÍSVPIÈBe› l QvÕÍ ÑgØÛu ýã£c¡[Yu²VU‹l7P· ºSë RUôD¥+zôü¢­¶L¢Óþ7âDí_[SRÇGdwŠW ~{—4]^Lûtƒ}梦[ï @¾Â0OX,,)Ïìð¶®r¢Œ$ôü´ßé¨ÕWÏDH¦iš¦LPTX\š¦iš`dhlptȼix|‰¬$iö %62ï~\„DDݺôCJ‰ºí9uqþ+_”nÀ‰)‰*ŒÄ¾[xœ¹/l §˜;C9(=AƒÀ´A7€&vóvùì»ñøÍsšbº+´x.nô9.uJƒî;Õ;ú¥ÿ6Û,v%Tú¾Q‰;Óæ¯s»·ÿ\ŒD+3x%SÃÑròoáfˆÐ•£… D£^ [+ñº@yàëN6¢Îåˆ, ÝÜßÚöJ‡3ÛLHI匊F§ûuïÝo·Fú´ÍÿŒ„lWÑ= Œ Cáñv‰\xB‰{ÛñMC;ÙrÅW‹ß÷BŒN³‘±5”‰!]ãt q$‹„R·Óu¦ÇªÿÄ<(4>â34e‡½ÀC‘ ¹ ;I…Òo›[àì+> ý;MŽYä`{`8Ö,ÿ,¹-ølº8ß+ÓE–è™èÏ;×ð&×O:ê I˸},ÑLÿ;Çv'ƒÏÿ÷-Ç,,à6nA®}¾ÅóÖÝ-mà+Çrî„$$Ô—íX¿;狱|øÿ‡36rˆØï& +z°÷Ó,Â/”„Ø6‰8‹õ©¹?t8CˆL¶_DØ ´„,Öˈ1üz‰&½Æ׋Jüï‹õcá[-ÓÁC+ð‰;tŸÃ{Owë J(àðúbÿZŒnŠÐ Ÿn{*Óˆ=1‹ ‘r¢ÛØÀÆÀëŸ7) …ÿ軓ñsþÉÒƒâ öÔ•Ý`ˆqë âwkÓ}æŠ1 €ÂK41!/Zn‹±ö‡±µ‘…$Gºâ¼´;[t6s·Å $ò@+!_£a8¤ÇhdNà _f4UÕã$ d4RÓAϼØh€RVÆöØURp…ö×ÓEo!X`>8ûÆ ÑÎdgL(H8{7ºs;LxSV¨RÞú=°QKu$'ƒ:ýÀ ïnÊ]œ‰”Ç@Ç@vÆ逇@ÈQí c«lÀk×{ÀvmûqjýÁwv,ã ×{ï;èX¿ít2ü‘†­ ÷ê V+ÅÕ‚…ÚJæ0V–8nTˆ_p‹KbYʦÅj;Ç¿K,ý¢ u~Anѹ­D( ‘us4 [Øêš+9åäWGWV-ÔXG0|Í^ø°÷Z‹„{‚䌊0œzQaZ(¾R]T‰Qr5^½xÁÌY n7ù‹iœQ ;q078?»Q;îQA9s +ÕR]ÝõNÄÎI1Íé&”{6´Í%¾¤, ƒø<"‹IØê¨A‹¥ÈÞîK”a ÖGrâXø¼Å¢W0#ÊÈŠÎ4ÎÀ;Ç,„ŽÂ2NÓêh]”+gï9ðƒ¾#k `^ |;ßv‹ X Ú*Z~Dm«x >‰°ÐŽ8½áìN ‰MˆÅüY#l/¸.ÿuˆä›àx##cÜÔĺnì[[º25¬Ã#[ ’ ¦iš¦  ¦éš ?ûû inflate 1.3 Copyrightfÿß}995-8 Mark Adler K{ï½÷Wco{ƒ{é¾÷Þwk_§³¦iš¦#+3š¦iš;CScsƒž¦i£Ãã%!²‹’!’²e§ Ì Wizar\wq¿¹7`lÿstax on yÿßn·o@ c)puSr. Click Nexµ¶íÚt Ýnt.u€èÖmï­KcelihíÃ`ÝS}p[.No[k­µybNÚ‚º†våchg3…Ex[y*G@cí†Âs =gs,*oB„!´aaMÔ¾„wGErr`%ÂÃ6ûtÊ Ov㣽íwr/e5iPfD°ý¶? P´s„mÿ½JYESoALWAY o.¡ðŽ=, p-NO,hPûS™+CANCEL\SK° 6di#duy.—„.8™ÿ‚Sh%ºÍuŸ1Wz?5d wÌ}®kl QtÍmnì%-oy…}®kºr cmu)y.×u]×C/ik Nx>wf6)t/n ]uëƾçQGCÁcl+ì ö%9i;h+ÿ=aC¶·.ì±]6rÓï)‚ /Nam/OuÄöÛtpDebug,rV·,ˆ»UnmHI:kQmlsšBT8D‹½+ °ndA[M:[s?·0At\c,s]‚x6¾SìÑn%LadcVÜ'ì qDosDØ{» \To! ?Ù„ö² Cl$6ÌUpSr½þ;°Öø jP¥ƒðnnv_of5 ¹† O9BkÕlP!" îObjD=Ø¿MBqS"Ü©aòCMûÌÍZ  @BoxCrY°DXGY¡MJ¤b*¬ñ²#Up£Sˆ1›‘: äµÒ°ÖšÃÁä-Y¡S<Çeek æn¼Tr!sl?‚xAD€߈õ[¯CursÕA° ELw@̾„M‰¦9C KA Ù@˜ ý.rK˜#Ž S³{Íe@.& ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! ! CFG=wininst - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak" CFG="wininst - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "wininst - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "wininst - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "wininst - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-release" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /O1 /I "zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "NDEBUG" ! # ADD RSC /l 0x407 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"LIBC" /libpath:"zlib\static32" ! ! !ELSEIF "$(CFG)" == "wininst - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-debug" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c ! # ADD CPP /nologo /MD /W3 /Z7 /Od /I "zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "_DEBUG" ! # ADD RSC /l 0x407 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 /nodefaultlib:"LIBC" /out:"./wininst_d.exe" /libpath:"zlib\static32" ! ! !ENDIF ! ! # Begin Target ! ! # Name "wininst - Win32 Release" ! # Name "wininst - Win32 Debug" ! # Begin Group "Source Files" ! ! # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" ! # Begin Source File ! ! SOURCE=.\install.c ! # End Source File ! # Begin Source File ! ! SOURCE=.\install.rc ! # End Source File ! # End Group ! # Begin Group "Header Files" ! ! # PROP Default_Filter "h;hpp;hxx;hm;inl" ! # End Group ! # Begin Group "Resource Files" ! ! # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" ! # End Group ! # End Target ! # End Project --- 1,127 ---- ! # Microsoft Developer Studio Project File - Name="wininst" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! ! CFG=wininst - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak" CFG="wininst - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "wininst - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "wininst - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "wininst - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-release" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /O1 /I "zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "NDEBUG" ! # ADD RSC /l 0x407 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"LIBC" /libpath:"zlib\static32" ! # Begin Special Build Tool ! SOURCE="$(InputPath)" ! PostBuild_Cmds=c:\util\upx.exe --best wininst.exe ! # End Special Build Tool ! ! !ELSEIF "$(CFG)" == "wininst - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-debug" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c ! # ADD CPP /nologo /MD /W3 /Z7 /Od /I "zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FR /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "_DEBUG" ! # ADD RSC /l 0x407 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 /nodefaultlib:"LIBC" /out:"./wininst_d.exe" /libpath:"zlib\static32" ! ! !ENDIF ! ! # Begin Target ! ! # Name "wininst - Win32 Release" ! # Name "wininst - Win32 Debug" ! # Begin Group "Source Files" ! ! # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" ! # Begin Source File ! ! SOURCE=.\extract.c ! # End Source File ! # Begin Source File ! ! SOURCE=.\install.c ! # End Source File ! # Begin Source File ! ! SOURCE=.\install.rc ! # End Source File ! # End Group ! # Begin Group "Header Files" ! ! # PROP Default_Filter "h;hpp;hxx;hm;inl" ! # Begin Source File ! ! SOURCE=.\archive.h ! # End Source File ! # End Group ! # Begin Group "Resource Files" ! ! # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" ! # Begin Source File ! ! SOURCE=.\PythonPowered.bmp ! # End Source File ! # End Group ! # End Target ! # End Project Index: wininst.dsw =================================================================== RCS file: /cvsroot/python/distutils/misc/wininst.dsw,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** wininst.dsw 2000/06/28 02:04:01 1.1 --- wininst.dsw 2000/08/26 02:40:11 1.2 *************** *** 1,29 **** ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "wininst"=.\wininst.dsp - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! --- 1,29 ---- ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "wininst"=.\wininst.dsp - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! From python-dev@python.org Sat Aug 26 08:38:09 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 26 Aug 2000 00:38:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.53,2.54 pyexpat.c,2.15,2.16 Message-ID: <200008260738.AAA29847@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv29627/python/dist/src/modules Modified Files: parsermodule.c pyexpat.c Log Message: Try to supply a prototype for the module init function but avoid Windows "inconsistent linkage" warnings at the same time. I agree with Mark Hammond that the whole DL_IMPORT/DL_EXPORT macro system needs an overhaul; this is just an expedient hack until then. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** parsermodule.c 2000/08/25 22:42:40 2.53 --- parsermodule.c 2000/08/26 07:38:06 2.54 *************** *** 2847,2851 **** ! DL_IMPORT(void) initparser(void); DL_EXPORT(void) --- 2847,2851 ---- ! DL_EXPORT(void) initparser(void); /* supply a prototype */ DL_EXPORT(void) Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** pyexpat.c 2000/08/25 18:03:30 2.15 --- pyexpat.c 2000/08/26 07:38:06 2.16 *************** *** 855,859 **** /* Initialization function for the module */ ! DL_IMPORT(void) initpyexpat(void); DL_EXPORT(void) --- 855,859 ---- /* Initialization function for the module */ ! DL_EXPORT(void) initpyexpat(void); /* supply a prototype */ DL_EXPORT(void) From python-dev@python.org Sat Aug 26 09:24:21 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 26 Aug 2000 01:24:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_poll.py,1.1,1.2 Message-ID: <200008260824.BAA08369@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv8037/python/dist/src/lib/test Modified Files: test_poll.py Log Message: Another new test using "from test.test_support import ...", causing subtle breakage on Windows (the test is skipped here, but the TestSkipped exception wasn't recognized as such, because of duplicate copies of test_support got loaded; so the test looks like a failure under Windows instead of a skip). Repaired the import, but THIS TEST *WILL* FAIL ON OTHER SYSTEMS NOW! Again due to the duplicate copies of test_support, the checked-in "expected output" file actually contains verbose-mode output. I can't generate the *correct* non-verbose output on my system. So, somebody please do that. Index: test_poll.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_poll.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_poll.py 2000/08/25 01:18:45 1.1 --- test_poll.py 2000/08/26 08:24:18 1.2 *************** *** 1,7 **** - # Test case for the os.poll() function import sys, os, select, random ! from test.test_support import verbose, TestSkipped, TESTFN try: --- 1,6 ---- # Test case for the os.poll() function import sys, os, select, random ! from test_support import verbose, TestSkipped, TESTFN try: *************** *** 169,171 **** test_poll1() test_poll2() - --- 168,169 ---- From python-dev@python.org Sat Aug 26 10:59:04 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 26 Aug 2000 02:59:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_poll,1.1,1.2 Message-ID: <200008260959.CAA25970@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv25424 Modified Files: test_poll Log Message: Tim Peters: Again due to the duplicate copies of test_support, the checked-in "expected output" file actually contains verbose-mode output. Index: test_poll =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_poll,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_poll 2000/08/25 01:18:45 1.1 --- test_poll 2000/08/26 09:59:01 1.2 *************** *** 15,43 **** Poll test 1 complete Running poll test 2 - timeout = 0 - timeout = 1000 - 'testing...\012' - timeout = 2000 - 'testing...\012' - timeout = 4000 - 'testing...\012' - timeout = 8000 - 'testing...\012' - timeout = 16000 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - timeout = -1 - timeout = -1 - timeout = -1 - timeout = -1 Poll test 2 complete --- 15,17 ---- From python-dev@python.org Sat Aug 26 11:49:01 2000 From: python-dev@python.org (Guido van Rossum) Date: Sat, 26 Aug 2000 03:49:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.73.2.2,2.73.2.3 Message-ID: <200008261049.DAA18855@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv18792 Modified Files: Tag: cnri-16-start fileobject.c Log Message: Apply Marc-Andre Lemburg's 2.0b1 fix for writelines() here -- lists of non-strings weren't always caught in time to prevent dumping core. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.73.2.2 retrieving revision 2.73.2.3 diff -C2 -r2.73.2.2 -r2.73.2.3 *** fileobject.c 2000/08/10 21:19:39 2.73.2.2 --- fileobject.c 2000/08/26 10:48:58 2.73.2.3 *************** *** 900,905 **** if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) ! { PyErr_Clear(); break; --- 900,904 ---- if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) { PyErr_Clear(); break; *************** *** 909,918 **** goto error; } - if (!PyString_Check(line)) { - Py_DECREF(line); - PyErr_SetString(PyExc_TypeError, - "writelines() requires sequences of strings"); - goto error; - } PyList_SetItem(list, j, line); } --- 908,911 ---- *************** *** 921,929 **** break; Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), --- 914,954 ---- break; + /* Check that all entries are indeed strings. If not, + apply the same rules as for file.write() and + convert the results to strings. This is slow, but + seems to be the only way since all conversion APIs + could potentially execute Python code. */ + for (i = 0; i < j; i++) { + PyObject *v = PyList_GET_ITEM(list, i); + if (!PyString_Check(v)) { + const char *buffer; + int len; + if (((f->f_binary && + PyObject_AsReadBuffer(v, + (const void**)&buffer, + &len)) || + PyObject_AsCharBuffer(v, + &buffer, + &len))) { + PyErr_SetString(PyExc_TypeError, + "writelines() requires sequences of strings"); + goto error; + } + line = PyString_FromStringAndSize(buffer, + len); + if (line == NULL) + goto error; + Py_DECREF(v); + PyList_SET_ITEM(list, i, line); + } + } + + /* Since we are releasing the global lock, the + following code may *not* execute Python code. */ Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), From python-dev@python.org Sat Aug 26 12:33:46 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 26 Aug 2000 04:33:46 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.137,1.138 configure.in,1.148,1.149 Message-ID: <200008261133.EAA05009@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv4068 Modified Files: configure configure.in Log Message: Don't enable the 'thread' module if threads are not possible. Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.137 retrieving revision 1.138 diff -C2 -r1.137 -r1.138 *** configure 2000/08/25 01:14:08 1.137 --- configure 2000/08/26 11:33:43 1.138 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.147 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.148 [...1793 lines suppressed...] echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5776: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5777,5786 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5780: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.148 retrieving revision 1.149 diff -C2 -r1.148 -r1.149 *** configure.in 2000/08/25 01:14:07 1.148 --- configure.in 2000/08/26 11:33:43 1.149 *************** *** 766,778 **** AC_DEFINE(_POSIX_THREADS) LIBS="$LIBS -lcma" ! LIBOBJS="$LIBOBJS thread.o"]) ])])])])])])])]) AC_CHECK_LIB(mpc, usconfig, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lmpc" ! LIBOBJS="$LIBOBJS thread.o"]) AC_CHECK_LIB(thread, thr_create, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lthread" ! LIBOBJS="$LIBOBJS thread.o"]) fi --- 766,781 ---- AC_DEFINE(_POSIX_THREADS) LIBS="$LIBS -lcma" ! LIBOBJS="$LIBOBJS thread.o"],[ ! USE_THREAD_MODULE="#"]) ])])])])])])])]) AC_CHECK_LIB(mpc, usconfig, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lmpc" ! LIBOBJS="$LIBOBJS thread.o" ! USE_THREAD_MODULE=""]) AC_CHECK_LIB(thread, thr_create, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lthread" ! LIBOBJS="$LIBOBJS thread.o" ! USE_THREAD_MODULE=""]) fi From python-dev@python.org Sat Aug 26 12:34:40 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 26 Aug 2000 04:34:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.config.in,1.1,1.2 Message-ID: <200008261134.EAA05913@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv5712/Modules Modified Files: Setup.config.in Log Message: Fixed this problem. Index: Setup.config.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.config.in,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Setup.config.in 2000/06/30 16:12:15 1.1 --- Setup.config.in 2000/08/26 11:34:29 1.2 *************** *** 5,12 **** # garbage collection support are the only two modules so enabled. - # *NOTE*: if the configure script decides it can't support threads, - # the thread module will still be enabled and cause compile errors. - # The solution is to use --without-threads on platforms that don't - # support threads. @USE_THREAD_MODULE@thread threadmodule.c --- 5,8 ---- From python-dev@python.org Sat Aug 26 22:01:31 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 26 Aug 2000 14:01:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.3,1.4 Message-ID: <200008262101.OAA20570@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20195 Modified Files: test_gettext.py Log Message: Open binary files in binary mode. Fixes test failure under Windows. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_gettext.py 2000/08/25 19:53:51 1.3 --- test_gettext.py 2000/08/26 21:01:27 1.4 *************** *** 103,107 **** def setup(): os.makedirs(LOCALEDIR) ! fp = open(MOFILE, 'w') fp.write(base64.decodestring(GNU_MO_DATA)) fp.close() --- 103,107 ---- def setup(): os.makedirs(LOCALEDIR) ! fp = open(MOFILE, 'wb') fp.write(base64.decodestring(GNU_MO_DATA)) fp.close() From python-dev@python.org Sun Aug 27 18:33:19 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 10:33:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.195,2.196 Message-ID: <200008271733.KAA04152@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv4141 Modified Files: ceval.c Log Message: Charles Waldman's patch to reinitialize the interpreter lock after a fork. This solves the test_fork1 problem. (ceval.c, signalmodule.c, intrcheck.c) SourceForge: [ Patch #101226 ] make threading fork-safe Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.195 retrieving revision 2.196 diff -C2 -r2.195 -r2.196 *** ceval.c 2000/08/24 20:11:31 2.195 --- ceval.c 2000/08/27 17:33:16 2.196 *************** *** 143,146 **** --- 143,165 ---- PyThread_release_lock(interpreter_lock); } + + /* This function is called from PyOS_AfterFork to ensure that newly + created child processes don't hold locks referring to threads which + are not running in the child process. (This could also be done using + pthread_atfork mechanism, at least for the pthreads implementation.) */ + + void + PyEval_ReInitThreads(void) + { + if (!interpreter_lock) + return; + /*XXX Can't use PyThread_free_lock here because it does too + much error-checking. Doing this cleanly would require + adding a new function to each thread_*.h. Instead, just + create a new lock and waste a little bit of memory */ + interpreter_lock = PyThread_allocate_lock(); + PyThread_acquire_lock(interpreter_lock, 1); + main_thread = PyThread_get_thread_ident(); + } #endif From python-dev@python.org Sun Aug 27 18:33:45 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 10:33:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules signalmodule.c,2.53,2.54 Message-ID: <200008271733.KAA04194@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv4182 Modified Files: signalmodule.c Log Message: Charles Waldman's patch to reinitialize the interpreter lock after a fork. This solves the test_fork1 problem. (ceval.c, signalmodule.c, intrcheck.c) SourceForge: [ Patch #101226 ] make threading fork-safe Index: signalmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/signalmodule.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** signalmodule.c 2000/08/03 02:34:44 2.53 --- signalmodule.c 2000/08/27 17:33:43 2.54 *************** *** 668,671 **** --- 668,672 ---- { #ifdef WITH_THREAD + PyEval_ReInitThreads(); main_thread = PyThread_get_thread_ident(); main_pid = getpid(); From python-dev@python.org Sun Aug 27 18:34:09 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 10:34:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser intrcheck.c,2.40,2.41 Message-ID: <200008271734.KAA04240@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv4231 Modified Files: intrcheck.c Log Message: Charles Waldman's patch to reinitialize the interpreter lock after a fork. This solves the test_fork1 problem. (ceval.c, signalmodule.c, intrcheck.c) SourceForge: [ Patch #101226 ] make threading fork-safe Index: intrcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/intrcheck.c,v retrieving revision 2.40 retrieving revision 2.41 diff -C2 -r2.40 -r2.41 *** intrcheck.c 2000/08/23 18:17:42 2.40 --- intrcheck.c 2000/08/27 17:34:07 2.41 *************** *** 196,198 **** --- 196,201 ---- PyOS_AfterFork(void) { + #ifdef WITH_THREAD + PyEval_ReInitThreads(); + #endif } From python-dev@python.org Sun Aug 27 20:01:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 27 Aug 2000 12:01:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.135,2.136 Message-ID: <200008271901.MAA23510@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv22946/Python Modified Files: compile.c Log Message: Oops, one pop too many. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.135 retrieving revision 2.136 diff -C2 -r2.135 -r2.136 *** compile.c 2000/08/25 05:41:11 2.135 --- compile.c 2000/08/27 19:01:33 2.136 *************** *** 1917,1921 **** com_push(c, 1); com_addopname(c, LOAD_ATTR, n); - com_pop(c, 1); com_node(c, augn); com_addbyte(c, opcode); --- 1917,1920 ---- From python-dev@python.org Sun Aug 27 20:15:33 2000 From: python-dev@python.org (Fredrik Lundh) Date: Sun, 27 Aug 2000 12:15:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pythonrun.h,2.32,2.33 Message-ID: <200008271915.MAA28651@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv28530/Include Modified Files: pythonrun.h Log Message: implements PyOS_CheckStack for Windows and MSVC. this fixes a couple of potential stack overflows, including bug #110615. closes patch #101238 Index: pythonrun.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v retrieving revision 2.32 retrieving revision 2.33 diff -C2 -r2.32 -r2.33 *** pythonrun.h 2000/08/07 21:00:42 2.32 --- pythonrun.h 2000/08/27 19:15:30 2.33 *************** *** 88,93 **** extern DL_IMPORT(int) (*PyOS_InputHook)(void); extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *); #ifdef USE_STACKCHECK ! int PyOS_CheckStack(void); /* Check that we aren't overflowing our stack */ #endif --- 88,105 ---- extern DL_IMPORT(int) (*PyOS_InputHook)(void); extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *); + + /* Stack size, in "pointers" (so we get extra safety margins + on 64-bit platforms). On a 32-bit platform, this translates + to a 8k margin. */ + #define PYOS_STACK_MARGIN 2048 + + #if defined(WIN32) && defined(_MSC_VER) + /* Enable stack checking under Microsoft C */ + #define USE_STACKCHECK + #endif + #ifdef USE_STACKCHECK ! /* Check that we aren't overflowing our stack */ ! DL_IMPORT(int) PyOS_CheckStack(void); #endif From python-dev@python.org Sun Aug 27 20:15:33 2000 From: python-dev@python.org (Fredrik Lundh) Date: Sun, 27 Aug 2000 12:15:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.108,2.109 Message-ID: <200008271915.MAA28655@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv28530/Python Modified Files: pythonrun.c Log Message: implements PyOS_CheckStack for Windows and MSVC. this fixes a couple of potential stack overflows, including bug #110615. closes patch #101238 Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.108 retrieving revision 2.109 diff -C2 -r2.108 -r2.109 *** pythonrun.c 2000/08/25 21:00:46 2.108 --- pythonrun.c 2000/08/27 19:15:31 2.109 *************** *** 1166,1167 **** --- 1166,1196 ---- (strcmp(filename, "???") == 0); } + + + #if defined(USE_STACKCHECK) + #if defined(WIN32) && defined(_MSC_VER) + + /* Stack checking for Microsoft C */ + + #include + #include + + int + PyOS_CheckStack() + { + __try { + /* _alloca throws a stack overflow exception if there's + not enough space left on the stack */ + _alloca(PYOS_STACK_MARGIN * sizeof(void*)); + return 0; + } __except (EXCEPTION_EXECUTE_HANDLER) { + /* just ignore all errors */ + } + return 1; + } + + #endif /* WIN32 && _MSC_VER */ + + /* Alternate implementations can be added here... */ + + #endif /* USE_STACKCHECK */ From python-dev@python.org Sun Aug 27 20:19:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:19:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pythonrun.h,2.33,2.34 Message-ID: <200008271919.MAA28964@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv28955 Modified Files: pythonrun.h Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: pythonrun.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v retrieving revision 2.33 retrieving revision 2.34 diff -C2 -r2.33 -r2.34 *** pythonrun.h 2000/08/27 19:15:30 2.33 --- pythonrun.h 2000/08/27 19:19:26 2.34 *************** *** 30,36 **** --- 30,38 ---- DL_IMPORT(int) PyRun_AnyFile(FILE *, char *); + DL_IMPORT(int) PyRun_AnyFileEx(FILE *, char *, int); DL_IMPORT(int) PyRun_SimpleString(char *); DL_IMPORT(int) PyRun_SimpleFile(FILE *, char *); + DL_IMPORT(int) PyRun_SimpleFileEx(FILE *, char *, int); DL_IMPORT(int) PyRun_InteractiveOne(FILE *, char *); DL_IMPORT(int) PyRun_InteractiveLoop(FILE *, char *); *************** *** 41,44 **** --- 43,48 ---- DL_IMPORT(PyObject *) PyRun_String(char *, int, PyObject *, PyObject *); DL_IMPORT(PyObject *) PyRun_File(FILE *, char *, int, PyObject *, PyObject *); + DL_IMPORT(PyObject *) PyRun_FileEx(FILE *, char *, int, + PyObject *, PyObject *, int); DL_IMPORT(PyObject *) Py_CompileString(char *, char *, int); From python-dev@python.org Sun Aug 27 20:20:34 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:20:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.109,2.110 Message-ID: <200008271920.MAA29064@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv29055 Modified Files: pythonrun.c Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.109 retrieving revision 2.110 diff -C2 -r2.109 -r2.110 *** pythonrun.c 2000/08/27 19:15:31 2.109 --- pythonrun.c 2000/08/27 19:20:31 2.110 *************** *** 451,460 **** PyRun_AnyFile(FILE *fp, char *filename) { if (filename == NULL) filename = "???"; ! if (Py_FdIsInteractive(fp, filename)) ! return PyRun_InteractiveLoop(fp, filename); else ! return PyRun_SimpleFile(fp, filename); } --- 451,470 ---- PyRun_AnyFile(FILE *fp, char *filename) { + return PyRun_AnyFileEx(fp, filename, 0); + } + + int + PyRun_AnyFileEx(FILE *fp, char *filename, int closeit) + { if (filename == NULL) filename = "???"; ! if (Py_FdIsInteractive(fp, filename)) { ! int err = PyRun_InteractiveLoop(fp, filename); ! if (closeit) ! fclose(fp); ! return err; ! } else ! return PyRun_SimpleFileEx(fp, filename, closeit); } *************** *** 543,546 **** --- 553,562 ---- PyRun_SimpleFile(FILE *fp, char *filename) { + return PyRun_SimpleFileEx(fp, filename, 0); + } + + int + PyRun_SimpleFileEx(FILE *fp, char *filename, int closeit) + { PyObject *m, *d, *v; char *ext; *************** *** 559,563 **** ) { /* Try to run a pyc file. First, re-open in binary */ ! /* Don't close, done in main: fclose(fp); */ if( (fp = fopen(filename, "rb")) == NULL ) { fprintf(stderr, "python: Can't reopen .pyc file\n"); --- 575,580 ---- ) { /* Try to run a pyc file. First, re-open in binary */ ! if (closeit) ! fclose(fp); if( (fp = fopen(filename, "rb")) == NULL ) { fprintf(stderr, "python: Can't reopen .pyc file\n"); *************** *** 569,573 **** v = run_pyc_file(fp, filename, d, d); } else { ! v = PyRun_File(fp, filename, Py_file_input, d, d); } if (v == NULL) { --- 586,590 ---- v = run_pyc_file(fp, filename, d, d); } else { ! v = PyRun_FileEx(fp, filename, Py_file_input, d, d, closeit); } if (v == NULL) { *************** *** 845,851 **** PyRun_File(FILE *fp, char *filename, int start, PyObject *globals, PyObject *locals) { ! return run_err_node(PyParser_SimpleParseFile(fp, filename, start), ! filename, globals, locals); } --- 862,877 ---- PyRun_File(FILE *fp, char *filename, int start, PyObject *globals, PyObject *locals) + { + PyRun_FileEx(fp, filename, start, globals, locals, 0); + } + + PyObject * + PyRun_FileEx(FILE *fp, char *filename, int start, PyObject *globals, + PyObject *locals, int closeit) { ! node *n = PyParser_SimpleParseFile(fp, filename, start); ! if (closeit) ! fclose(fp); ! return run_err_node(n, filename, globals, locals); } From python-dev@python.org Sun Aug 27 20:21:54 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:21:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.176,2.177 Message-ID: <200008271921.MAA29247@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv29234 Modified Files: bltinmodule.c Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.176 retrieving revision 2.177 diff -C2 -r2.176 -r2.177 *** bltinmodule.c 2000/08/18 05:02:16 2.176 --- bltinmodule.c 2000/08/27 19:21:52 2.177 *************** *** 816,823 **** return NULL; } ! res = PyRun_File(fp, filename, Py_file_input, globals, locals); ! Py_BEGIN_ALLOW_THREADS ! fclose(fp); ! Py_END_ALLOW_THREADS return res; } --- 816,820 ---- return NULL; } ! res = PyRun_FileEx(fp, filename, Py_file_input, globals, locals, 1); return res; } From python-dev@python.org Sun Aug 27 20:21:07 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:21:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules main.c,1.41,1.42 Message-ID: <200008271921.MAA29196@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv29178 Modified Files: main.c Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: main.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/main.c,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -r1.41 -r1.42 *** main.c 2000/07/09 20:42:34 1.41 --- main.c 2000/08/27 19:21:04 1.42 *************** *** 269,277 **** } } ! sts = PyRun_AnyFile( fp, ! filename == NULL ? "" : filename) != 0; ! if (filename != NULL) ! fclose(fp); } --- 269,276 ---- } } ! sts = PyRun_AnyFileEx( fp, ! filename == NULL ? "" : filename, ! filename != NULL) != 0; } From python-dev@python.org Sun Aug 27 21:00:37 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 27 Aug 2000 13:00:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include ceval.h,2.36,2.37 Message-ID: <200008272000.NAA32013@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv31797/Include Modified Files: ceval.h Log Message: The new PyEval_ReInitThreads wasn't declared in ceval.h; compiler wngs. Index: ceval.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/ceval.h,v retrieving revision 2.36 retrieving revision 2.37 diff -C2 -r2.36 -r2.37 *** ceval.h 2000/07/25 12:56:37 2.36 --- ceval.h 2000/08/27 20:00:35 2.37 *************** *** 100,103 **** --- 100,104 ---- extern DL_IMPORT(void) PyEval_AcquireThread(PyThreadState *tstate); extern DL_IMPORT(void) PyEval_ReleaseThread(PyThreadState *tstate); + extern DL_IMPORT(void) PyEval_ReInitThreads(void); #define Py_BEGIN_ALLOW_THREADS { \ From python-dev@python.org Sun Aug 27 21:16:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 27 Aug 2000 13:16:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.136,2.137 Message-ID: <200008272016.NAA09206@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9068/Python Modified Files: compile.c Log Message: Re-allow 'import mod.submod as s', and change its meaning to what it should mean; the same as 'from mod import submod as s'. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.136 retrieving revision 2.137 diff -C2 -r2.136 -r2.137 *** compile.c 2000/08/27 19:01:33 2.136 --- compile.c 2000/08/27 20:16:32 2.137 *************** *** 2355,2364 **** com_push(c, 1); if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0 || ! NCH(CHILD(subn, 0)) > 1) { com_error(c, PyExc_SyntaxError, "invalid syntax"); return; } com_addopname(c, STORE_NAME, CHILD(subn, 2)); } else --- 2355,2367 ---- com_push(c, 1); if (NCH(subn) > 1) { ! int j; ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0) { com_error(c, PyExc_SyntaxError, "invalid syntax"); return; } + for (j=2 ; j < NCH(CHILD(subn, 0)); j += 2) + com_addopname(c, LOAD_ATTR, + CHILD(CHILD(subn, 0), j)); com_addopname(c, STORE_NAME, CHILD(subn, 2)); } else From python-dev@python.org Sun Aug 27 21:18:20 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 27 Aug 2000 13:18:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.110,2.111 Message-ID: <200008272018.NAA09356@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9282/python/dist/src/python Modified Files: pythonrun.c Log Message: Hard to believe Guido compiled this! Function lacked a return stmt. Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.110 retrieving revision 2.111 diff -C2 -r2.110 -r2.111 *** pythonrun.c 2000/08/27 19:20:31 2.110 --- pythonrun.c 2000/08/27 20:18:17 2.111 *************** *** 863,867 **** PyObject *locals) { ! PyRun_FileEx(fp, filename, start, globals, locals, 0); } --- 863,867 ---- PyObject *locals) { ! return PyRun_FileEx(fp, filename, start, globals, locals, 0); } From python-dev@python.org Sun Aug 27 21:31:30 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 27 Aug 2000 13:31:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.196,2.197 compile.c,2.137,2.138 import.c,2.148,2.149 Message-ID: <200008272031.NAA10511@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv10284/Python Modified Files: ceval.c compile.c import.c Log Message: Replace the run-time 'future-bytecode-stream-inspection' hack to find out how 'import' was called with a compiletime mechanism: create either a tuple of the import arguments, or None (in the case of a normal import), add it to the code-block constants, and load it onto the stack before calling IMPORT_NAME. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.196 retrieving revision 2.197 diff -C2 -r2.196 -r2.197 *** ceval.c 2000/08/27 17:33:16 2.196 --- ceval.c 2000/08/27 20:31:27 2.197 *************** *** 72,76 **** static int exec_statement(PyFrameObject *, PyObject *, PyObject *, PyObject *); - static PyObject *find_from_args(PyFrameObject *, int); static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *); static void reset_exc_info(PyThreadState *); --- 72,75 ---- *************** *** 1628,1636 **** break; } ! u = find_from_args(f, INSTR_OFFSET()); ! if (u == NULL) { ! x = u; ! break; ! } w = Py_BuildValue("(OOOO)", w, --- 1627,1631 ---- break; } ! u = POP(); w = Py_BuildValue("(OOOO)", w, *************** *** 3067,3119 **** Py_DECREF(v); return 0; - } - - /* Hack for ni.py */ - static PyObject * - find_from_args(PyFrameObject *f, int nexti) - { - int opcode; - int oparg; - PyObject *list, *name; - unsigned char *next_instr; - - _PyCode_GETCODEPTR(f->f_code, &next_instr); - next_instr += nexti; - - opcode = (*next_instr++); - if (opcode != IMPORT_FROM && opcode != IMPORT_STAR) { - Py_INCREF(Py_None); - return Py_None; - } - - list = PyList_New(0); - if (list == NULL) - return NULL; - - if (opcode == IMPORT_STAR) { - name = PyString_FromString("*"); - if (!name) - Py_DECREF(list); - else { - if (PyList_Append(list, name) < 0) { - Py_DECREF(list); - } - Py_DECREF(name); - } - } else { - do { - oparg = (next_instr[1]<<8) + next_instr[0]; - /* Jump over our own argument, the next instruction - (which is a STORE), and its argument.*/ - next_instr += 5; - name = Getnamev(f, oparg); - if (PyList_Append(list, name) < 0) { - Py_DECREF(list); - break; - } - opcode = (*next_instr++); - } while (opcode == IMPORT_FROM); - } - return list; } --- 3062,3065 ---- Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.137 retrieving revision 2.138 diff -C2 -r2.137 -r2.138 *** compile.c 2000/08/27 20:16:32 2.137 --- compile.c 2000/08/27 20:31:27 2.138 *************** *** 2330,2333 **** --- 2330,2334 ---- { int i; + PyObject *tup; REQ(n, import_stmt); /* 'import' dotted_name (',' dotted_name)* | *************** *** 2336,2341 **** /* 'from' dotted_name 'import' ... */ REQ(CHILD(n, 1), dotted_name); ! com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); if (TYPE(CHILD(n, 3)) == STAR) com_addbyte(c, IMPORT_STAR); --- 2337,2354 ---- /* 'from' dotted_name 'import' ... */ REQ(CHILD(n, 1), dotted_name); ! ! if (TYPE(CHILD(n, 3)) == STAR) { ! tup = Py_BuildValue("(s)", "*"); ! } else { ! tup = PyTuple_New((NCH(n) - 2)/2); ! for (i = 3; i < NCH(n); i += 2) { ! PyTuple_SET_ITEM(tup, (i-3)/2, ! PyString_FromString(STR( ! CHILD(CHILD(n, i), 0)))); ! } ! } ! com_addoparg(c, LOAD_CONST, com_addconst(c, tup)); com_push(c, 1); + com_addopname(c, IMPORT_NAME, CHILD(n, 1)); if (TYPE(CHILD(n, 3)) == STAR) com_addbyte(c, IMPORT_STAR); *************** *** 2352,2357 **** node *subn = CHILD(n, i); REQ(subn, dotted_as_name); ! com_addopname(c, IMPORT_NAME, CHILD(subn, 0)); com_push(c, 1); if (NCH(subn) > 1) { int j; --- 2365,2371 ---- node *subn = CHILD(n, i); REQ(subn, dotted_as_name); ! com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); + com_addopname(c, IMPORT_NAME, CHILD(subn, 0)); if (NCH(subn) > 1) { int j; Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.148 retrieving revision 2.149 diff -C2 -r2.148 -r2.149 *** import.c 2000/08/24 20:11:32 2.148 --- import.c 2000/08/27 20:31:27 2.149 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50822 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50823 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the *************** *** 1402,1406 **** static PyObject *fromlist = NULL; if (fromlist == NULL && strchr(name, '.') != NULL) { ! fromlist = Py_BuildValue("[s]", "*"); if (fromlist == NULL) return NULL; --- 1402,1406 ---- static PyObject *fromlist = NULL; if (fromlist == NULL && strchr(name, '.') != NULL) { ! fromlist = Py_BuildValue("(s)", "*"); if (fromlist == NULL) return NULL; From python-dev@python.org Sun Aug 27 21:44:17 2000 From: python-dev@python.org (Greg Ward) Date: Sun, 27 Aug 2000 13:44:17 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command bdist_wininst.py,1.6,1.7 Message-ID: <200008272044.NAA11468@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv11434 Modified Files: bdist_wininst.py Log Message: Fix line-endings. Fix bad operator precedence: should be "(metadata or '') + '\n'". Index: bdist_wininst.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/bdist_wininst.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** bdist_wininst.py 2000/08/26 02:40:10 1.6 --- bdist_wininst.py 2000/08/27 20:44:13 1.7 *************** *** 1,463 **** ! """distutils.command.bdist_wininst ! ! Implements the Distutils 'bdist_wininst' command: create a windows installer ! exe-program.""" ! ! # created 2000/06/02, Thomas Heller ! ! __revision__ = "$Id$" ! ! import sys, os, string ! from distutils.core import Command ! from distutils.util import get_platform ! from distutils.dir_util import create_tree, remove_tree ! from distutils.errors import * ! ! class bdist_wininst (Command): ! ! description = "create an executable installer for MS Windows" ! ! user_options = [('bdist-dir=', 'd', ! "temporary directory for creating the distribution"), ! ('keep-tree', 'k', ! "keep the pseudo-installation tree around after " + ! "creating the distribution archive"), ! ('target-version=', 'v', ! "require a specific python version" + ! " on the target system"), ! ('dist-dir=', 'd', ! "directory to put final built distributions in"), ! ] ! ! def initialize_options (self): ! self.bdist_dir = None ! self.keep_tree = 0 ! self.target_compile = 0 ! self.target_optimize = 0 ! self.target_version = None ! self.dist_dir = None ! ! # initialize_options() ! ! ! def finalize_options (self): ! if self.bdist_dir is None: ! bdist_base = self.get_finalized_command('bdist').bdist_base ! self.bdist_dir = os.path.join(bdist_base, 'wininst') ! if not self.target_version: ! self.target_version = "" ! else: ! if not self.target_version in ("1.5", "1.6", "2.0"): ! raise DistutilsOptionError ( ! "target version must be 1.5, 1.6, or 2.0") ! if self.distribution.has_ext_modules(): ! short_version = sys.version[:3] ! if self.target_version and self.target_version != short_version: ! raise DistutilsOptionError ("target version can only be" + ! short_version) ! self.target_version = short_version ! ! self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) ! ! # finalize_options() ! ! ! def run (self): ! ! self.run_command ('build') ! ! install = self.reinitialize_command('install') ! install.root = self.bdist_dir ! ! install_lib = self.reinitialize_command('install_lib') ! # we do not want to include pyc or pyo files ! install_lib.compile = 0 ! install_lib.optimize = 0 ! ! install_lib.ensure_finalized() ! ! self.announce ("installing to %s" % self.bdist_dir) ! install.ensure_finalized() ! install.run() ! ! # And make an archive relative to the root of the ! # pseudo-installation tree. ! fullname = self.distribution.get_fullname() ! archive_basename = os.path.join(self.bdist_dir, ! "%s.win32" % fullname) ! ! # XXX hack! Our archive MUST be relative to sys.prefix ! # XXX What about .install_data, .install_scripts, ...? ! # [Perhaps require that all installation dirs be under sys.prefix ! # on Windows? this will be acceptable until we start dealing ! # with Python applications, at which point we should zip up ! # the application directory -- and again everything can be ! # under one dir --GPW] ! root_dir = install.install_lib ! arcname = self.make_archive (archive_basename, "zip", ! root_dir=root_dir) ! self.create_exe (arcname, fullname) ! ! if not self.keep_tree: ! remove_tree (self.bdist_dir, self.verbose, self.dry_run) ! ! # run() ! ! def create_inifile (self): ! # Create an inifile containing data describing the installation. ! # This could be done without creating a real file, but ! # a file is (at least) useful for debugging bdist_wininst. ! ! metadata = self.distribution.metadata ! ini_name = "%s.ini" % metadata.get_fullname() ! ! self.announce ("creating %s" % ini_name) ! inifile = open (ini_name, "w") ! ! # Write the [metadata] section. Values are written with ! # repr()[1:-1], so they do not contain unprintable characters, and ! # are not surrounded by quote chars. ! inifile.write ("[metadata]\n") ! ! # 'info' will be displayed in the installer's dialog box, ! # describing the items to be installed. ! info = metadata.long_description or '' + '\n' ! ! for name in dir (metadata): ! if (name != 'long_description'): ! data = getattr (metadata, name) ! if data: ! info = info + ("\n %s: %s" % \ ! (string.capitalize (name), data)) ! inifile.write ("%s=%s\n" % (name, repr (data)[1:-1])) ! ! # The [setup] section contains entries controlling ! # the installer runtime. ! inifile.write ("\n[Setup]\n") ! inifile.write ("info=%s\n" % repr (info)[1:-1]) ! inifile.write ("pthname=%s.%s\n" % (metadata.name, metadata.version)) ! if self.target_version: ! inifile.write ("target_version=%s\n" % self.target_version) ! ! title = self.distribution.get_fullname() ! inifile.write ("title=%s\n" % repr (title)[1:-1]) ! inifile.close() ! return ini_name ! ! # create_inifile() ! ! def create_exe (self, arcname, fullname): ! import struct#, zlib ! ! cfgdata = open (self.create_inifile()).read() ! ! installer_name = os.path.join(self.dist_dir, ! "%s.win32.exe" % fullname) ! self.announce ("creating %s" % installer_name) ! ! file = open (installer_name, "wb") ! file.write (self.get_exe_bytes ()) ! file.write (cfgdata) ! header = struct.pack (" Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12637/Modules Modified Files: _sre.c Log Message: don't mistake memory errors (including reaching the recursion limit) with success. also, check return values from the mark functions. this addresses (but doesn't really solve) bug #112693, and low-memory problems reported by jack jansen. Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.38 retrieving revision 2.39 diff -C2 -r2.38 -r2.39 *** _sre.c 2000/08/18 05:09:50 2.38 --- _sre.c 2000/08/27 20:59:47 2.39 *************** *** 17,20 **** --- 17,21 ---- * 00-08-07 fl use PyOS_CheckStack() if available * 00-08-08 fl changed findall to return empty strings instead of None + * 00-08-27 fl properly propagate memory errors * * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. *************** *** 59,75 **** /* optional features */ ! /* prevent run-away recursion (bad patterns on long strings) ! Require a smaller recursion limit for a number of 64-bit platforms ! to prevent stack overflow: ! Win64 - MS_WIN64, Linux64 - __LP64__, Monterey (64-bit AIX) - _LP64 ! XXX Or maybe this should be defined for all SIZEOF_VOIDP>4 platforms? ! */ #if !defined(USE_STACKCHECK) ! # if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64) ! # define USE_RECURSION_LIMIT 7500 ! # else ! # define USE_RECURSION_LIMIT 10000 ! # endif #endif /* enables fast searching */ --- 60,75 ---- /* optional features */ ! /* prevent run-away recursion (bad patterns on long strings) */ ! #if !defined(USE_STACKCHECK) ! #if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64) ! /* require smaller recursion limit for a number of 64-bit platforms: ! Win64 (MS_WIN64), Linux64 (__LP64__), Monterey (64-bit AIX) (_LP64) */ ! /* FIXME: maybe the limit should be 40000 / sizeof(void*) ? */ ! #define USE_RECURSION_LIMIT 7500 ! #else ! #define USE_RECURSION_LIMIT 10000 #endif + #endif /* enables fast searching */ *************** *** 535,538 **** --- 535,539 ---- } + #if 0 /* not used in this release */ LOCAL(int) SRE_INFO(SRE_STATE* state, SRE_CODE* pattern) *************** *** 560,563 **** --- 561,565 ---- return pattern[0]; } + #endif LOCAL(int) *************** *** 876,880 **** i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return 1; ptr--; count--; --- 878,882 ---- i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return i; ptr--; count--; *************** *** 888,892 **** i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return 1; ptr--; count--; --- 890,894 ---- i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return i; ptr--; count--; *************** *** 957,966 **** rp->count = count; lastmark = state->lastmark; ! mark_save(state, 0, lastmark); /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; - mark_restore(state, 0, lastmark); rp->count = count - 1; state->ptr = ptr; --- 959,972 ---- rp->count = count; lastmark = state->lastmark; ! i = mark_save(state, 0, lastmark); ! if (i < 0) ! return i; /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) + return i; + i = mark_restore(state, 0, lastmark); + if (i < 0) return i; rp->count = count - 1; state->ptr = ptr; *************** *** 1699,1706 **** } ! status = PyList_Append(list, item); ! Py_DECREF(item); ! if (status < 0) goto error; if (state.ptr == state.start) --- 1705,1712 ---- } ! if (PyList_Append(list, item) < 0) { ! Py_DECREF(item); goto error; + } if (state.ptr == state.start) From python-dev@python.org Sun Aug 27 22:32:50 2000 From: python-dev@python.org (Fredrik Lundh) Date: Sun, 27 Aug 2000 14:32:50 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.39,2.40 Message-ID: <200008272132.OAA23965@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv23689/Modules Modified Files: _sre.c Log Message: oops. accidentally reintroduced a memory leak. put the bugfix back. Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.39 retrieving revision 2.40 diff -C2 -r2.39 -r2.40 *** _sre.c 2000/08/27 20:59:47 2.39 --- _sre.c 2000/08/27 21:32:46 2.40 *************** *** 1705,1712 **** } ! if (PyList_Append(list, item) < 0) { ! Py_DECREF(item); goto error; - } if (state.ptr == state.start) --- 1705,1713 ---- } ! status = PyList_Append(list, item); ! Py_DECREF(item); ! ! if (status < 0) goto error; if (state.ptr == state.start) From python-dev@python.org Mon Aug 28 16:47:06 2000 From: python-dev@python.org (Jeremy Hylton) Date: Mon, 28 Aug 2000 08:47:06 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.30,1.31 Message-ID: <200008281547.IAA10951@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10873 Modified Files: pep-0200.txt Log Message: test_fork1 now works, thanks to Charles Waldman's patch Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** pep-0200.txt 2000/08/25 13:59:33 1.30 --- pep-0200.txt 2000/08/28 15:47:00 1.31 *************** *** 91,104 **** test case platform date reported --------- -------- ------------- ! test_fork1 Linux 26-Jul-2000 ! [no clue; there are probably two bugs here] ! [19-Aug-200 tim ! Charles Waldman whipped up a patch to give child processes a new ! "global lock": ! http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 ! While this doesn't appear to address the symptoms we *saw*, it ! *does* so far appear to be fixing the failing cases anyway ! ] ! Previously failing test cases --- 91,95 ---- test case platform date reported --------- -------- ------------- ! [None currently failing.] Previously failing test cases *************** *** 109,112 **** --- 100,114 ---- test case platform date reported --------- -------- ------------- + test_fork1 Linux 26-Jul-2000 + [28-aug-2000 fixed by cgw; solution is to create copies of + lock in child process] + [19-Aug-2000 tim + Charles Waldman whipped up a patch to give child processes a new + "global lock": + http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 + While this doesn't appear to address the symptoms we *saw*, it + *does* so far appear to be fixing the failing cases anyway + ] + test_parser all 22-Aug-2000 test_posixpath all 22-Aug-2000 From python-dev@python.org Mon Aug 28 17:00:51 2000 From: python-dev@python.org (Jeremy Hylton) Date: Mon, 28 Aug 2000 09:00:51 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.12,1.13 Message-ID: <200008281600.JAA14217@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv13884 Modified Files: pep2html.py Log Message: new usage to support conversion of only specified PEPs Usage: %(PROGRAM)s [options] [peps] Notes: The optional argument peps can be either pep numbers or .txt files. Options: -u/--user SF username [rest is the same] Index: pep2html.py =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** pep2html.py 2000/08/17 04:27:04 1.12 --- pep2html.py 2000/08/28 16:00:49 1.13 *************** *** 3,10 **** convert PEP's to (X)HTML - courtesy of /F ! Usage: %(PROGRAM)s [options] [sf_username] Options: -i/--install After generating the HTML, install it SourceForge. In that case the --- 3,17 ---- convert PEP's to (X)HTML - courtesy of /F ! Usage: %(PROGRAM)s [options] [peps] + Notes: + + The optional argument peps can be either pep numbers or .txt files. + Options: + -u/--user + SF username + -i/--install After generating the HTML, install it SourceForge. In that case the *************** *** 145,148 **** --- 152,168 ---- os.chmod(outfile, 0664) + + def find_pep(pep_str): + """Find the .txt file indicated by a cmd line argument""" + if os.path.exists(pep_str): + return pep_str + num = int(pep_str) + return "pep-%04d.txt" % num + + def make_html(file): + newfile = os.path.splitext(file)[0] + ".html" + print file, "->", newfile + fixfile(file, newfile) + return newfile *************** *** 157,166 **** usage(1, msg) - if args: - username = args[0] + '@' - del args[0] - if args: - usage(1, 'unexpected arguments') - for opt, arg in opts: if opt in ('-h', '--help'): --- 177,180 ---- *************** *** 168,179 **** elif opt in ('-i', '--install'): update = 1 ! for file in glob.glob("pep-*.txt"): ! newfile = os.path.splitext(file)[0] + ".html" ! print file, "->", newfile ! fixfile(file, newfile) if update: - os.system("scp pep-*.html style.css " + username + HOST + ":" + HDIR) os.system("ssh " + username + HOST + " chmod 664 " + HDIR + "/*") --- 182,205 ---- elif opt in ('-i', '--install'): update = 1 + elif opt in ('-u', '--user'): + username = arg + "@" ! if args: ! html = [] ! for pep in args: ! file = find_pep(pep) ! newfile = make_html(file) ! html.append(newfile) ! os.system("scp %s style.css " % " ".join(html) \ ! + username + HOST + ":" + HDIR) ! else: ! # do them all ! for file in glob.glob("pep-*.txt"): ! make_html(file) ! if update: ! os.system("scp pep-*.html style.css " + \ ! username + HOST + ":" + HDIR) if update: os.system("ssh " + username + HOST + " chmod 664 " + HDIR + "/*") From python-dev@python.org Mon Aug 28 18:20:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 10:20:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib os.py,1.36,1.37 popen2.py,1.13,1.14 Message-ID: <200008281720.KAA09128@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv9081/Lib Modified Files: os.py popen2.py Log Message: Added os.popen2() and os.popen3() for non-Windows platforms. Index: os.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/os.py,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** os.py 2000/07/25 15:16:40 1.36 --- os.py 2000/08/28 17:20:04 1.37 *************** *** 455,456 **** --- 455,469 ---- + if not _exists("popen2"): + def popen2(cmd, mode="t", bufsize=-1): + assert mode[:1] in ("b", "t") + import popen2 + stdout, stdin = popen2.popen2(cmd, bufsize) + return stdin, stdout + + if not _exists("popen3"): + def popen3(cmd, mode="t", bufsize=-1): + assert mode[:1] in ("b", "t") + import popen2 + stdout, stdin, stderr = popen2.popen3(cmd, bufsize) + return stdin, stdout, stderr Index: popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/popen2.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** popen2.py 2000/08/20 05:57:36 1.13 --- popen2.py 2000/08/28 17:20:04 1.14 *************** *** 90,94 **** return self.sts ! if hasattr(os, "popen2"): def popen2(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is --- 90,95 ---- return self.sts ! ! if sys.platform[:3] == "win": def popen2(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is *************** *** 110,114 **** return inst.fromchild, inst.tochild ! if hasattr(os, "popen3"): def popen3(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is --- 111,115 ---- return inst.fromchild, inst.tochild ! if sys.platform[:3] == "win": def popen3(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is *************** *** 130,134 **** return inst.fromchild, inst.tochild, inst.childerr ! if hasattr(os, "popen4"): def popen4(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is --- 131,135 ---- return inst.fromchild, inst.tochild, inst.childerr ! if sys.platform[:3] == "win": def popen4(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is *************** *** 139,142 **** --- 140,144 ---- else: pass # not yet on unix + def _test(): From python-dev@python.org Mon Aug 28 18:20:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 10:20:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_popen2.py,1.2,1.3 Message-ID: <200008281720.KAA09139@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv9081/Lib/test Modified Files: test_popen2.py Log Message: Added os.popen2() and os.popen3() for non-Windows platforms. Index: test_popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_popen2.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_popen2.py 2000/07/27 07:42:43 1.2 --- test_popen2.py 2000/08/28 17:20:05 1.3 *************** *** 4,7 **** --- 4,9 ---- """ + import os + # popen2 contains its own testing routine # which is especially useful to see if open files *************** *** 10,13 **** --- 12,16 ---- def main(): + print "Test popen2 module:" try: from os import popen *************** *** 20,23 **** popen2._test() - main() --- 23,56 ---- popen2._test() + def _test(): + # same test as popen2._test(), but using the os.popen*() API + print "Testing os module:" + import popen2 + cmd = "cat" + teststr = "abc\n" + resultstr = teststr + if os.name == "nt": + cmd = "more" + resultstr = "\n" + resultstr + print "testing popen2..." + w, r = os.popen2(cmd) + w.write(teststr) + w.close() + assert r.read() == resultstr + print "testing popen3..." + try: + w, r, e = os.popen3([cmd]) + except: + w, r, e = os.popen3(cmd) + w.write(teststr) + w.close() + assert r.read() == resultstr + assert e.read() == "" + for inst in popen2._active[:]: + inst.wait() + assert not popen2._active + print "All OK" + + main() + _test() From python-dev@python.org Mon Aug 28 18:20:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 10:20:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_popen2,1.2,1.3 Message-ID: <200008281720.KAA09138@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv9081/Lib/test/output Modified Files: test_popen2 Log Message: Added os.popen2() and os.popen3() for non-Windows platforms. Index: test_popen2 =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_popen2,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_popen2 2000/07/11 15:15:31 1.2 --- test_popen2 2000/08/28 17:20:05 1.3 *************** *** 1,3 **** --- 1,8 ---- test_popen2 + Test popen2 module: + testing popen2... + testing popen3... + All OK + Testing os module: testing popen2... testing popen3... From python-dev@python.org Tue Aug 29 02:15:21 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 28 Aug 2000 18:15:21 -0700 Subject: [Python-checkins] CVS: distutils/distutils core.py,1.43,1.44 dist.py,1.33,1.34 Message-ID: <200008290115.SAA23519@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv21957 Modified Files: core.py dist.py Log Message: Added 'script_name' and 'script_args' instance attributes to Distribution. Changed 'core.setup()' so it sets them to reasonable defaults. Tweaked how the "usage" string is generated: 'core' now provides 'gen_usage()', which is used instead of 'USAGE'. Modified "build_py" and "sdist" commands to refer to 'self.distribution.script_name' rather than 'sys.argv[0]'. Index: core.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/core.py,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** core.py 2000/06/21 02:59:14 1.43 --- core.py 2000/08/29 01:15:18 1.44 *************** *** 26,35 **** # is generated with various --help options: global help, list commands, # and per-command help. ! usage = """\ ! usage: %s [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] ! or: %s --help [cmd1 cmd2 ...] ! or: %s --help-commands ! or: %s cmd --help ! """ % ((os.path.basename(sys.argv[0]),) * 4) --- 26,35 ---- # is generated with various --help options: global help, list commands, # and per-command help. ! USAGE = """\ ! usage: %(script)s [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] ! or: %(script)s --help [cmd1 cmd2 ...] ! or: %(script)s --help-commands ! or: %(script)s cmd --help ! """ *************** *** 38,49 **** DEBUG = os.environ.get('DISTUTILS_DEBUG') def setup (**attrs): """The gateway to the Distutils: do everything your setup script needs to do, in a highly flexible and user-driven way. Briefly: create a Distribution instance; find and parse config files; parse the command ! line; run each of those commands using the options supplied to ! 'setup()' (as keyword arguments), in config files, and on the command ! line. The Distribution instance might be an instance of a class supplied via --- 38,53 ---- DEBUG = os.environ.get('DISTUTILS_DEBUG') + def gen_usage (script_name): + script = os.path.basename(script_name) + return USAGE % vars() + def setup (**attrs): """The gateway to the Distutils: do everything your setup script needs to do, in a highly flexible and user-driven way. Briefly: create a Distribution instance; find and parse config files; parse the command ! line; run each Distutils command found there, customized by the options ! supplied to 'setup()' (as keyword arguments), in config files, and on ! the command line. The Distribution instance might be an instance of a class supplied via *************** *** 80,83 **** --- 84,92 ---- klass = Distribution + if not attrs.has_key('script_name'): + attrs['script_name'] = sys.argv[0] + if not attrs.has_key('script_args'): + attrs['script_args'] = sys.argv[1:] + # Create the Distribution instance, using the remaining arguments # (ie. everything except distclass) to initialize it *************** *** 98,105 **** # fault, so turn them into SystemExit to suppress tracebacks. try: ! ok = dist.parse_command_line (sys.argv[1:]) except DistutilsArgError, msg: ! sys.stderr.write (usage + "\n") ! raise SystemExit, "error: %s" % msg if DEBUG: --- 107,115 ---- # fault, so turn them into SystemExit to suppress tracebacks. try: ! ok = dist.parse_command_line() except DistutilsArgError, msg: ! script = os.path.basename(dist.script_name) ! raise SystemExit, \ ! gen_usage(dist.script_name) + "\nerror: %s" % msg if DEBUG: Index: dist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/dist.py,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** dist.py 2000/07/27 02:13:19 1.33 --- dist.py 2000/08/29 01:15:18 1.34 *************** *** 132,135 **** --- 132,141 ---- self.cmdclass = {} + # 'script_name' and 'script_args' are usually set to sys.argv[0] + # and sys.argv[1:], but they can be overridden when the caller is + # not necessarily a setup script run from the command-line. + self.script_name = None + self.script_args = None + # 'command_options' is where we store command options between # parsing them (from config files, the command-line, etc.) and when *************** *** 327,348 **** # -- Command-line parsing methods ---------------------------------- ! def parse_command_line (self, args): ! """Parse the setup script's command line. 'args' must be a list ! of command-line arguments, most likely 'sys.argv[1:]' (see the ! 'setup()' function). This list is first processed for "global ! options" -- options that set attributes of the Distribution ! instance. Then, it is alternately scanned for Distutils ! commands and options for that command. Each new command ! terminates the options for the previous command. The allowed ! options for a command are determined by the 'user_options' ! attribute of the command class -- thus, we have to be able to ! load command classes in order to parse the command line. Any ! error in that 'options' attribute raises DistutilsGetoptError; ! any error on the command-line raises DistutilsArgError. If no ! Distutils commands were found on the command line, raises ! DistutilsArgError. Return true if command-line were ! successfully parsed and we should carry on with executing ! commands; false if no errors but we shouldn't execute commands ! (currently, this only happens if user asks for help). """ # We have to parse the command line a bit at a time -- global --- 333,354 ---- # -- Command-line parsing methods ---------------------------------- ! def parse_command_line (self): ! """Parse the setup script's command line, taken from the ! 'script_args' instance attribute (which defaults to 'sys.argv[1:]' ! -- see 'setup()' in core.py). This list is first processed for ! "global options" -- options that set attributes of the Distribution ! instance. Then, it is alternately scanned for Distutils commands ! and options for that command. Each new command terminates the ! options for the previous command. The allowed options for a ! command are determined by the 'user_options' attribute of the ! command class -- thus, we have to be able to load command classes ! in order to parse the command line. Any error in that 'options' ! attribute raises DistutilsGetoptError; any error on the ! command-line raises DistutilsArgError. If no Distutils commands ! were found on the command line, raises DistutilsArgError. Return ! true if command-line were successfully parsed and we should carry ! on with executing commands; false if no errors but we shouldn't ! execute commands (currently, this only happens if user asks for ! help). """ # We have to parse the command line a bit at a time -- global *************** *** 357,361 **** parser.set_negative_aliases (self.negative_opt) parser.set_aliases ({'license': 'licence'}) ! args = parser.getopt (object=self) option_order = parser.get_option_order() --- 363,367 ---- parser.set_negative_aliases (self.negative_opt) parser.set_aliases ({'license': 'licence'}) ! args = parser.getopt (args=self.script_args, object=self) option_order = parser.get_option_order() *************** *** 507,511 **** """ # late import because of mutual dependence between these modules ! from distutils.core import usage from distutils.cmd import Command --- 513,517 ---- """ # late import because of mutual dependence between these modules ! from distutils.core import gen_usage from distutils.cmd import Command *************** *** 536,540 **** print ! print usage return --- 542,546 ---- print ! print gen_usage(self.script_name) return *************** *** 548,552 **** false. """ ! from distutils.core import usage # User just wants a list of commands -- we'll print it out and stop --- 554,558 ---- false. """ ! from distutils.core import gen_usage # User just wants a list of commands -- we'll print it out and stop *************** *** 556,560 **** self.print_commands () print ! print usage return 1 --- 562,566 ---- self.print_commands () print ! print gen_usage(self.script_name) return 1 From python-dev@python.org Tue Aug 29 02:15:21 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 28 Aug 2000 18:15:21 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_py.py,1.27,1.28 sdist.py,1.43,1.44 Message-ID: <200008290115.SAA23521@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv21957/command Modified Files: build_py.py sdist.py Log Message: Added 'script_name' and 'script_args' instance attributes to Distribution. Changed 'core.setup()' so it sets them to reasonable defaults. Tweaked how the "usage" string is generated: 'core' now provides 'gen_usage()', which is used instead of 'USAGE'. Modified "build_py" and "sdist" commands to refer to 'self.distribution.script_name' rather than 'sys.argv[0]'. Index: build_py.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_py.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** build_py.py 2000/08/15 13:01:25 1.27 --- build_py.py 2000/08/29 01:15:18 1.28 *************** *** 178,182 **** module_files = glob (os.path.join (package_dir, "*.py")) modules = [] ! setup_script = os.path.abspath (sys.argv[0]) for f in module_files: --- 178,182 ---- module_files = glob (os.path.join (package_dir, "*.py")) modules = [] ! setup_script = os.path.abspath(self.distribution.script_name) for f in module_files: *************** *** 185,188 **** --- 185,190 ---- module = os.path.splitext (os.path.basename (f))[0] modules.append ((package, module, f)) + else: + self.debug_print("excluding %s" % setup_script) return modules Index: sdist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/sdist.py,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** sdist.py 2000/08/22 01:49:41 1.43 --- sdist.py 2000/08/29 01:15:18 1.44 *************** *** 203,207 **** # developer elects to generate a manifest some other way -- then we # can't regenerate the manifest, so we don't.) ! setup_newer = dep_util.newer(sys.argv[0], self.manifest) # cases: --- 203,210 ---- # developer elects to generate a manifest some other way -- then we # can't regenerate the manifest, so we don't.) ! self.debug_print("checking if %s newer than %s" % ! (self.distribution.script_name, self.manifest)) ! setup_newer = dep_util.newer(self.distribution.script_name, ! self.manifest) # cases: From python-dev@python.org Tue Aug 29 05:56:17 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:56:17 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.197,2.198 Message-ID: <200008290456.VAA31648@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv31640 Modified Files: ceval.c Log Message: eval_code2(): Guido provides this patch for his suggested elaboration of extended print. If the file object being printed to is None, then sys.stdout is used. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.197 retrieving revision 2.198 diff -C2 -r2.197 -r2.198 *** ceval.c 2000/08/27 20:31:27 2.197 --- ceval.c 2000/08/29 04:56:13 2.198 *************** *** 1231,1235 **** case PRINT_ITEM: v = POP(); ! if (stream == NULL) { w = PySys_GetObject("stdout"); if (w == NULL) { --- 1231,1235 ---- case PRINT_ITEM: v = POP(); ! if (stream == NULL || stream == Py_None) { w = PySys_GetObject("stdout"); if (w == NULL) { *************** *** 1264,1268 **** case PRINT_NEWLINE: ! if (stream == NULL) { w = PySys_GetObject("stdout"); if (w == NULL) --- 1264,1268 ---- case PRINT_NEWLINE: ! if (stream == NULL || stream == Py_None) { w = PySys_GetObject("stdout"); if (w == NULL) From python-dev@python.org Tue Aug 29 05:56:48 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:56:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.16,1.17 Message-ID: <200008290456.VAA31687@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv31678 Modified Files: test_grammar.py Log Message: Added tests of "print >> None" Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** test_grammar.py 2000/08/22 02:43:07 1.16 --- test_grammar.py 2000/08/29 04:56:46 1.17 *************** *** 269,272 **** --- 269,297 ---- print >> sys.stdout, 0 or 1 + # test print >> None + class Gulp: + def write(self, msg): pass + + def driver(): + oldstdout = sys.stdout + sys.stdout = Gulp() + try: + tellme(Gulp()) + tellme() + finally: + sys.stdout = oldstdout + + # we should see this once + def tellme(file=sys.stdout): + print >> file, 'hello world' + + driver() + + # we should not see this at all + def tellme(file=None): + print >> file, 'goodbye universe' + + driver() + # syntax errors def check_syntax(statement): From python-dev@python.org Tue Aug 29 05:57:36 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:57:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.30,1.31 Message-ID: <200008290457.VAA31761@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv31753 Modified Files: ref6.tex Log Message: Document "print >> None" Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** ref6.tex 2000/08/21 15:45:16 1.30 --- ref6.tex 2000/08/29 04:57:34 1.31 *************** *** 339,345 **** In this form, the first expression after the \keyword{>>} must evaluate to a ``file-like'' object, specifically an object that has a ! \method{write()} method as described above. With the extended form, ! the subsequent expressions are printed to this file-like object ! instead of \code{sys.stdout}. \section{The \keyword{return} statement \label{return}} --- 339,346 ---- In this form, the first expression after the \keyword{>>} must evaluate to a ``file-like'' object, specifically an object that has a ! \method{write()} method as described above. With this extended form, ! the subsequent expressions are printed to this file object. If the ! first expression evaluates to \code{None}, then \code{sys.stdout} is ! used as the file for output. \section{The \keyword{return} statement \label{return}} From python-dev@python.org Tue Aug 29 05:57:12 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:57:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.6,1.7 Message-ID: <200008290457.VAA31736@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv31728 Modified Files: test_grammar Log Message: Added tests of "print >> None" Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** test_grammar 2000/08/22 02:43:07 1.6 --- test_grammar 2000/08/29 04:57:10 1.7 *************** *** 24,27 **** --- 24,28 ---- 1 2 3 1 1 1 + hello world del_stmt pass_stmt From python-dev@python.org Tue Aug 29 07:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml catalog,1.2,NONE python.dtd,1.3,NONE version.ent,1.1,NONE Message-ID: <200008290607.XAA19547@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml In directory slayer.i.sourceforge.net:/tmp/cvs-serv19441 Removed Files: catalog python.dtd version.ent Log Message: These files are not part of the current plan. --- catalog DELETED --- --- python.dtd DELETED --- --- version.ent DELETED --- From python-dev@python.org Tue Aug 29 07:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml/iso ISOamsa,1.1,NONE ISOamsb,1.1,NONE ISOamsc,1.1,NONE ISOamsn,1.1,NONE ISOamso,1.1,NONE ISOamsr,1.1,NONE ISObox,1.1,NONE ISOcyr1,1.1,NONE ISOcyr2,1.1,NONE ISOdia,1.1,NONE ISOgrk1,1.1,NONE ISOgrk2,1.1,NONE ISOgrk3,1.1,NONE ISOgrk4,1.1,NONE ISOlat1,1.1,NONE ISOlat2,1.1,NONE ISOnum,1.1,NONE ISOpub,1.1,NONE ISOtech,1.1,NONE Message-ID: <200008290607.XAA19557@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml/iso In directory slayer.i.sourceforge.net:/tmp/cvs-serv19441/iso Removed Files: ISOamsa ISOamsb ISOamsc ISOamsn ISOamso ISOamsr ISObox ISOcyr1 ISOcyr2 ISOdia ISOgrk1 ISOgrk2 ISOgrk3 ISOgrk4 ISOlat1 ISOlat2 ISOnum ISOpub ISOtech Log Message: These files are not part of the current plan. --- ISOamsa DELETED --- --- ISOamsb DELETED --- --- ISOamsc DELETED --- --- ISOamsn DELETED --- --- ISOamso DELETED --- --- ISOamsr DELETED --- --- ISObox DELETED --- --- ISOcyr1 DELETED --- --- ISOcyr2 DELETED --- --- ISOdia DELETED --- --- ISOgrk1 DELETED --- --- ISOgrk2 DELETED --- --- ISOgrk3 DELETED --- --- ISOgrk4 DELETED --- --- ISOlat1 DELETED --- --- ISOlat2 DELETED --- --- ISOnum DELETED --- --- ISOpub DELETED --- --- ISOtech DELETED --- From python-dev@python.org Tue Aug 29 07:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml/oasis catalog,1.1,NONE exchange.txt,1.1,NONE Message-ID: <200008290607.XAA19558@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml/oasis In directory slayer.i.sourceforge.net:/tmp/cvs-serv19441/oasis Removed Files: catalog exchange.txt Log Message: These files are not part of the current plan. --- catalog DELETED --- --- exchange.txt DELETED --- From python-dev@python.org Tue Aug 29 07:08:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:08:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml/iso catalog,1.1,NONE Message-ID: <200008290608.XAA21149@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml/iso In directory slayer.i.sourceforge.net:/tmp/cvs-serv21137 Removed Files: catalog Log Message: These files are not part of the current plan. --- catalog DELETED --- From python-dev@python.org Tue Aug 29 15:55:06 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 07:55:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib tempfile.py,1.21,1.22 Message-ID: <200008291455.HAA11799@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv11762 Modified Files: tempfile.py Log Message: Patch by tg@FreeBSD.org to try /var/tmp first. This helps on 4.4BSD-based systems. Index: tempfile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tempfile.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** tempfile.py 2000/04/24 13:28:02 1.21 --- tempfile.py 2000/08/29 14:55:03 1.22 *************** *** 24,28 **** except (AttributeError, os.error): pwd = os.curdir ! attempdirs = ['/usr/tmp', '/tmp', pwd] if os.name == 'nt': attempdirs.insert(0, 'C:\\TEMP') --- 24,28 ---- except (AttributeError, os.error): pwd = os.curdir ! attempdirs = ['/var/tmp', '/usr/tmp', '/tmp', pwd] if os.name == 'nt': attempdirs.insert(0, 'C:\\TEMP') From python-dev@python.org Tue Aug 29 15:56:24 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 07:56:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_fcntl.py,1.8,1.9 Message-ID: <200008291456.HAA12933@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12879 Modified Files: test_fcntl.py Log Message: Add support for FreeBSD-[45]. -- tg@FreeBSD.org Index: test_fcntl.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_fcntl.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** test_fcntl.py 1999/04/19 17:22:12 1.8 --- test_fcntl.py 2000/08/29 14:56:21 1.9 *************** *** 18,22 **** if sys.platform in ('netbsd1', ! 'freebsd2', 'freebsd3', 'bsdos2', 'bsdos3', 'bsdos4', 'openbsd', 'openbsd2'): --- 18,22 ---- if sys.platform in ('netbsd1', ! 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'bsdos2', 'bsdos3', 'bsdos4', 'openbsd', 'openbsd2'): From python-dev@python.org Tue Aug 29 15:57:30 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 07:57:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib posixfile.py,1.13,1.14 Message-ID: <200008291457.HAA13952@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13916 Modified Files: posixfile.py Log Message: Add support for FreeBSD-[45]. -- tg@FreeBSD.org Index: posixfile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/posixfile.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** posixfile.py 2000/02/04 15:10:34 1.13 --- posixfile.py 2000/08/29 14:57:27 1.14 *************** *** 177,181 **** if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'bsdos2', 'bsdos3', 'bsdos4'): flock = struct.pack('lxxxxlxxxxlhh', \ --- 177,181 ---- if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'bsdos2', 'bsdos3', 'bsdos4'): flock = struct.pack('lxxxxlxxxxlhh', \ *************** *** 193,197 **** if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'bsdos2', 'bsdos3', 'bsdos4'): l_start, l_len, l_pid, l_type, l_whence = \ --- 193,197 ---- if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'bsdos2', 'bsdos3', 'bsdos4'): l_start, l_len, l_pid, l_type, l_whence = \ From python-dev@python.org Tue Aug 29 16:00:15 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 08:00:15 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.97,1.98 Message-ID: <200008291500.IAA16964@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv16891 Modified Files: Makefile.in Log Message: "tg@FreeBSD.org" writes: Our (FreeBSD's) security officer doesn't like group-writable directories and sent a patch; don't install *.orig. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.97 retrieving revision 1.98 diff -C2 -r1.97 -r1.98 *** Makefile.in 2000/08/24 18:11:21 1.97 --- Makefile.in 2000/08/29 15:00:11 1.98 *************** *** 104,110 **** # Modes for directories, executables and data files created by the ! # install process. Default to group-writable directories but ! # user-only-writable for executables and data files. ! DIRMODE= 775 EXEMODE= 755 FILEMODE= 644 --- 104,109 ---- # Modes for directories, executables and data files created by the ! # install process. Default to user-only-writable for all file types. ! DIRMODE= 755 EXEMODE= 755 FILEMODE= 644 *************** *** 319,322 **** --- 318,322 ---- *CVS) ;; \ *.py[co]) ;; \ + *.orig) ;; \ *~) ;; \ *) \ From python-dev@python.org Tue Aug 29 16:01:36 2000 From: python-dev@python.org (Jeremy Hylton) Date: Tue, 29 Aug 2000 08:01:36 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.31,1.32 Message-ID: <200008291501.IAA18394@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18001 Modified Files: pep-0200.txt Log Message: move range literals and unicode database to postponed rearrange the sections a bit Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** pep-0200.txt 2000/08/28 15:47:00 1.31 --- pep-0200.txt 2000/08/29 15:01:34 1.32 *************** *** 93,96 **** --- 93,158 ---- [None currently failing.] + Open items -- Need to be resolved before 2.0b1 release + + Add popen2 support for Linux -- Fred Drake + + Get all patches out of Open. + + Get all patches out of Accepted. + + Fix bug 112558 + https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 + + Fix all other bugs with priority 7 or higher + + Review performance and frequency of garbage collection scans. + + Decide on a license. + + Windows installer: If HKLM isn't writable, back off to HKCU (so + Python can be installed on NT & 2000 without admin privileges). + + Windows installer: Install w9xpopen.exe only under Win95/98. + + Windows ME: Don't know anything about it. Will the installer + even run? Does it need the w9xpopen hack? + + Open items -- Need to be resolved before 2.0 final release + + Update Tools/compiler so that it is compatible with list + comprehensions, import as, and any other new language features. + + Improve code coverage of test suite. + + Decide on a license. + + Finish writing the PEPs for the features that went out with + 2.0b1(! sad, but realistic -- we'll get better with practice). + + Major effort to whittle the bug database down to size. I've (tim) + seen this before: if you can keep all the open bugs fitting on one + screen, people will generally keep it that way. But let it + slobber over a screen for a month, & it just goes to hell (no + "visible progress" indeed!). + + Accepted and in progress + + * PyErr_Format - Fredrik Lundh + Make this function safe from buffer overflows. + + * Change meaning of \x escapes - PEP 223 - Fredrik Lundh + + * Add \U1234678 escapes in u"" strings - Fredrik Lundh + + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries + + Open: proposed but not accepted or rejected + + * Extended slicing on lists - Michael Hudson + Make lists (and other builtin types) handle extended slices. + + * Problems reported with Tkinter, Tk 8.3.2, and Unicode (?) + Previously failing test cases *************** *** 174,246 **** - Open items -- Need to be resolved before 2.0b1 release - - Add popen2 support for Linux -- Fred Drake - - Get all patches out of Open. - - Get all patches out of Accepted. - - Fix bug 112558 - https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 - - Fix all other bugs with priority 7 or higher - - Review performance and frequency of garbage collection scans. - - Decide on a license. - - Windows installer: If HKLM isn't writable, back off to HKCU (so - Python can be installed on NT & 2000 without admin privileges). - - Windows installer: Install w9xpopen.exe only under Win95/98. - - Windows ME: Don't know anything about it. Will the installer - even run? Does it need the w9xpopen hack? - - Open items -- Need to be resolved before 2.0 final release - - Update Tools/compiler so that it is compatible with list - comprehensions, import as, and any other new language features. - - Improve code coverage of test suite. - - Decide on a license. - - Finish writing the PEPs for the features that went out with - 2.0b1(! sad, but realistic -- we'll get better with practice). - - Major effort to whittle the bug database down to size. I've (tim) - seen this before: if you can keep all the open bugs fitting on one - screen, people will generally keep it that way. But let it - slobber over a screen for a month, & it just goes to hell (no - "visible progress" indeed!). - - - Open: proposed but not accepted or rejected - - * Extended slicing on lists - Michael Hudson - Make lists (and other builtin types) handle extended slices. - - * Problems reported with Tkinter, Tk 8.3.2, and Unicode (?) - - Accepted and in progress - - * Compression of Unicode database - Fredrik Lundh - SF Patch 100899 - - * PyErr_Format - Fredrik Lundh - Make this function safe from buffer overflows. - - * Range literals - Thomas Wouters - SF Patch 100902 - - * Change meaning of \x escapes - PEP 223 - Fredrik Lundh - - * Add \U1234678 escapes in u"" strings - Fredrik Lundh - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - Open items -- completed/fixed --- 236,239 ---- *************** *** 306,309 **** --- 299,310 ---- Postponed + + * Compression of Unicode database - Fredrik Lundh + SF Patch 100899 + At least for 2.0b1. May be included in 2.0 as a bug fix. + + * Range literals - Thomas Wouters + SF Patch 100902 + We ended up having a lot of doubt about the proposal. * Eliminated SET_LINENO opcode - Vladimir Marangozov From python-dev@python.org Tue Aug 29 16:06:59 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 08:06:59 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.138,1.139 configure.in,1.149,1.150 Message-ID: <200008291506.IAA21882@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv18539 Modified Files: configure configure.in Log Message: Some cleanup for FreeBSD. This gets rid of version numbers and figures out old (a.out) and newer (ELF) systems, similar to NetBSD. (I'm assuming this is also by tg@FreeBSD.org.) Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.138 retrieving revision 1.139 diff -C2 -r1.138 -r1.139 *** configure 2000/08/26 11:33:43 1.138 --- configure 2000/08/29 15:06:47 1.139 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.148 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.150 [...2471 lines suppressed...] echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5780: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5782,5791 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5785: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.149 retrieving revision 1.150 diff -C2 -r1.149 -r1.150 *** configure.in 2000/08/26 11:33:43 1.149 --- configure.in 2000/08/29 15:06:49 1.150 *************** *** 576,581 **** dgux*) LDSHARED="ld -G";; BSD/OS*/4*) LDSHARED="gcc -shared";; ! FreeBSD*/[[34]]*) LDSHARED="gcc -shared";; ! FreeBSD*|OpenBSD*) LDSHARED="ld -Bshareable";; NetBSD*) if [[ "`$CC -dM -E - Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv13191 Modified Files: Makefile Log Message: Add a comment noting that the dependency information is stored in Makefile.deps. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile,v retrieving revision 1.197 retrieving revision 1.198 diff -C2 -r1.197 -r1.198 *** Makefile 2000/07/01 02:37:37 1.197 --- Makefile 2000/08/29 16:30:21 1.198 *************** *** 49,52 **** --- 49,55 ---- # in the info/ directory; please send patches to python-docs@python.org. + # This Makefile only includes information on how to perform builds; for + # dependency information, see Makefile.deps. + # Customizations -- you *may* have to edit these From python-dev@python.org Tue Aug 29 17:53:37 2000 From: python-dev@python.org (A.M. Kuchling) Date: Tue, 29 Aug 2000 09:53:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_poll.py,1.2,1.3 Message-ID: <200008291653.JAA21617@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20481 Modified Files: test_poll.py Log Message: Fix for two problems on FreeBSD: In test_poll1(), unregister file descriptors as they're closed, and also close the read end of the pipe In test_poll2(), make the code assume less about the combinations of flag bits that will be returned Index: test_poll.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_poll.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_poll.py 2000/08/26 08:24:18 1.2 --- test_poll.py 2000/08/29 16:53:34 1.3 *************** *** 58,62 **** assert len(buf) == MSG_LEN print buf ! os.close(r2w[rd]) writers.remove(r2w[rd]) --- 58,64 ---- assert len(buf) == MSG_LEN print buf ! os.close(r2w[rd]) ; os.close( rd ) ! p.unregister( r2w[rd] ) ! p.unregister( rd ) writers.remove(r2w[rd]) *************** *** 146,150 **** if (fdlist == []): continue ! if fdlist[0] == (p.fileno(),select.POLLHUP): line = p.readline() if line != "": --- 148,153 ---- if (fdlist == []): continue ! fd, flags = fdlist[0] ! if flags & select.POLLHUP: line = p.readline() if line != "": *************** *** 152,156 **** continue ! elif fdlist[0] == (p.fileno(),select.POLLIN): line = p.readline() if verbose: --- 155,159 ---- continue ! elif flags & select.POLLIN: line = p.readline() if verbose: From python-dev@python.org Tue Aug 29 18:40:39 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 10:40:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl l2hinit.perl,1.43,1.43.2.1 Message-ID: <200008291740.KAA10375@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv10361/perl Modified Files: Tag: cnri-16-start l2hinit.perl Log Message: Make sure we still use the GIF images here, since there are still a few browsers that do not support PNG images, or do not do so reliably. Index: l2hinit.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/l2hinit.perl,v retrieving revision 1.43 retrieving revision 1.43.2.1 diff -C2 -r1.43 -r1.43.2.1 *** l2hinit.perl 2000/07/31 17:53:45 1.43 --- l2hinit.perl 2000/08/29 17:40:37 1.43.2.1 *************** *** 19,22 **** --- 19,23 ---- $ICONSERVER = '../icons'; + $IMAGE_TYPE = 'gif'; # Control where the navigation bars should show up: From python-dev@python.org Tue Aug 29 19:15:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 11:15:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkhowto,1.11,1.12 Message-ID: <200008291815.LAA22067@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv22029/tools Modified Files: mkhowto Log Message: Add a --style option to allow specifying an alternate CSS style sheet for HTML generation; the machinery was there but no option to set it was defined. Simplify some of the path-math since we can assume a recent version of Python. Index: mkhowto =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tools/mkhowto,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** mkhowto 2000/07/31 17:47:49 1.11 --- mkhowto 2000/08/29 18:15:05 1.12 *************** *** 21,24 **** --- 21,26 ---- --numeric Don't rename the HTML files; just keep node#.html for the filenames. + --style Specify the CSS file to use for the output (filename, + not a URL). Other options: *************** *** 43,48 **** ! MYDIR = os.path.normpath(os.path.join(os.getcwd(), sys.path[0])) ! TOPDIR = os.path.normpath(os.path.join(MYDIR, os.pardir)) ISTFILE = os.path.join(TOPDIR, "texinputs", "python.ist") --- 45,50 ---- ! MYDIR = os.path.abspath(sys.path[0]) ! TOPDIR = os.path.dirname(MYDIR) ISTFILE = os.path.join(TOPDIR, "texinputs", "python.ist") *************** *** 110,114 **** "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric"] + list(self.ALL_FORMATS)) for opt, arg in opts: --- 112,116 ---- "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric", "style="] + list(self.ALL_FORMATS)) for opt, arg in opts: *************** *** 145,151 **** # always make this absolute: self.about_file = os.path.normpath( ! os.path.join(os.getcwd(), arg)) elif opt == "--numeric": self.numeric = 1 # # Format specifiers: --- 147,155 ---- # always make this absolute: self.about_file = os.path.normpath( ! os.path.abspath(arg)) elif opt == "--numeric": self.numeric = 1 + elif opt == "--style": + self.style_file = os.path.abspath(arg) # # Format specifiers: From python-dev@python.org Tue Aug 29 22:36:42 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 14:36:42 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.91,1.92 Message-ID: <200008292136.OAA08476@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv8463 Modified Files: README Log Message: Various tweaks and improvements by Thomas Wouters (who apparently lost the patch or forgot about it -- this is easier than reminding him). Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.91 retrieving revision 1.92 diff -C2 -r1.91 -r1.92 *** README 2000/08/23 21:33:04 1.91 --- README 2000/08/29 21:36:40 1.92 *************** *** 20,24 **** To start building right away (on UNIX): type "./configure" in the current directory and when it finishes, type "make". The section ! Build Instructions below is still recommended reading. :-) --- 20,25 ---- To start building right away (on UNIX): type "./configure" in the current directory and when it finishes, type "make". The section ! Build Instructions below is still recommended reading, especially the ! part on customizing Modules/Setup. *************** *** 68,73 **** system configuration and creates several Makefiles. (It takes a minute or two -- please be patient!) When it's done, you are ready to ! run make. You may want to pass options to the configure script -- see ! the section below on configuration options and variables. To build Python, you normally type "make" in the toplevel directory. --- 69,75 ---- system configuration and creates several Makefiles. (It takes a minute or two -- please be patient!) When it's done, you are ready to ! run make. You may want to pass options to the configure script, or ! edit the Setup file -- see the section below on configuration options ! and variables. To build Python, you normally type "make" in the toplevel directory. *************** *** 114,117 **** --- 116,130 ---- the OPT variable. + If you get failures in test_long, or sys.maxint gets set to -1, you + are probably experiencing compiler bugs, usually related to + optimization. This is a common problem with some versions of gcc and + egcs, and some vendor-supplied compilers, which can sometimes be + worked around by turning off optimization. Consider switching to + stable versions (gcc 2.7.2.3, egcs 1.1.2, or contact your vendor.) + + From Python 2.0 onward, all Python C code is ANSI C. Compiling using + old K&R-C-only compilers is no longer possible. ANSI C compilers are + available for all modern systems, either in the form of updated + compilers from the vendor, or one of the free compilers (gcc, egcs). Platform specific notes *************** *** 133,173 **** script). ! Linux: On Linux version 1.x, once you've built Python, use it to run ! the regen script in the Lib/linux1 directory. Apparently ! the files as distributed don't match the system headers on ! some Linux versions. (The "h2py" command refers to ! Tools/scripts/h2py.py.) The modules distributed for Linux 2.x ! should be okay. Shared library support now works by default ! on ELF-based x86 Linux systems. (Note: when you change the ! status of a module from static to shared, you must remove its ! .o file or do a "make clean".) ! ! Under RedHat Linux 5.0, if upgraded from a previous version, ! remove the LinuxThreads packages. This is needed because ! LinuxThreads conflicts with the new thread support provided by ! glibc. Before running Python's configure script, use the ! following commands as root (version numbers may differ; these ! are from a stock 4.2 install): ! ! % rpm -qa | grep ^linuxthread ! linuxthreads-0.5-1 ! linuxthreads-devel-0.5-1 ! % rpm -e linuxthreads linuxthreads-devel ! ! While Python only needs this to be done to allow thread ! support to be included, the conflicts these packages create ! with the new glibc may cause other packages which use threads ! to fail as well, so their removal is a good idea regardless of ! how you configure python. ! ! More recently, a problem with threads and fork() was tracked ! down to a bug in the pthreads code in glibc version 2.0.5; ! glibc version 2.0.7 solves the problem. This causes the ! popen2 test to fail; problem and solution reported by Pablo ! Bleyer. ! ! Also under RedHat Linux 5.0, the crypt module now needs the ! -lcrypt option. Uncomment this flag in Modules/Setup, or ! comment out the crypt module in the same file. FreeBSD 3.x and probably platforms with NCurses that use libmytinfo or --- 146,158 ---- script). ! Linux: A problem with threads and fork() was tracked down to a bug in ! the pthreads code in glibc version 2.0.5; glibc version 2.0.7 ! solves the problem. This causes the popen2 test to fail; ! problem and solution reported by Pablo Bleyer. ! ! Under Linux systems using GNU libc 2 (aka libc6), the crypt ! module now needs the -lcrypt option. Uncomment this flag in ! Modules/Setup, or comment out the crypt module in the same ! file. Most modern Linux systems use glibc2. FreeBSD 3.x and probably platforms with NCurses that use libmytinfo or *************** *** 180,188 **** automatically, but not necessarily in the correct order. ! DEC Unix: When enabling threads, use --with-dec-threads, not ! --with-thread. When using GCC, it is possible to get an ! internal compiler error if optimization is used. This was ! reported for GCC 2.7.2.3 on selectmodule.c. Manually compile ! the affected file without optimization to solve the problem. DEC Ultrix: compile with GCC to avoid bugs in the native compiler, --- 165,180 ---- automatically, but not necessarily in the correct order. ! BSDI: BSDI versions before 4.1 have known problems with threads, ! which can cause strange errors in a number of modules (for ! instance, the 'test_signal' test script will hang forever.) ! Turning off threads (with --with-threads=no) or upgrading to ! BSDI 4.1 solves this problem. ! ! DEC Unix: Run configure with --with-dec-threads, or with ! --with-threads=no if no threads are desired (threads are on by ! default). When using GCC, it is possible to get an internal ! compiler error if optimization is used. This was reported for ! GCC 2.7.2.3 on selectmodule.c. Manually compile the affected ! file without optimization to solve the problem. DEC Ultrix: compile with GCC to avoid bugs in the native compiler, *************** *** 219,229 **** LIBS=' -lsocket -lcrypt_i' ! SunOS 4.x: When using the standard "cc" compiler, certain modules may ! not be compilable because they use non-K&R syntax. You should ! be able to get a basic Python interpreter by commenting out ! such modules in the Modules/Setup file, but I really recommend ! using gcc. ! ! When using the SunPro C compiler, you may want to use the '-Xa' option instead of '-Xc', to enable some needed non-ANSI Sunisms. --- 211,215 ---- LIBS=' -lsocket -lcrypt_i' ! SunOS 4.x: When using the SunPro C compiler, you may want to use the '-Xa' option instead of '-Xc', to enable some needed non-ANSI Sunisms. *************** *** 279,283 **** that the Cray assembler doesn't like. Cray's cc seems to work fine. ! 2) Uncomment modules md5 (won't compile) and audioop (will crash the interpreter during the test suite). If you run the test suite, two tests will fail (rotate and --- 265,269 ---- that the Cray assembler doesn't like. Cray's cc seems to work fine. ! 2) Comment out modules md5 (won't compile) and audioop (will crash the interpreter during the test suite). If you run the test suite, two tests will fail (rotate and *************** *** 293,306 **** smake will be invoked by make (likewise for GNU make). - A bug in the MIPSpro 7.1 compiler's optimizer seems to break - Modules/pypcre.c. The short term solution is to compile it - without optimization. The bug is fixed in version 7.2.1 of - the compiler. - - A bug in gcc-2.8.1 sets sys.maxint to -1 which *also* seems to - break Modules/pypcre.c. The egcs versions of gcc fix this - problem. Or use configure --without-gcc to compile with SGI's - compiler, if you have it. (Raj Srinivasan, Kelvin Chu) - OS/2: If you are running Warp3 or Warp4 and have IBM's VisualAge C/C++ compiler installed, just change into the pc\os2vacpp directory --- 279,282 ---- *************** *** 320,334 **** ------------------- ! The main switch to configure threads is to run the configure script ! (see below) with the --with-thread switch (on DEC, use ! --with-dec-threads). Unfortunately, on some platforms, additional ! compiler and/or linker options are required. Below is a table of ! those options, collected by Bill Janssen. I would love to automate ! this process more, but the information below is not enough to write a ! patch for the configure.in file, so manual intervention is required. ! If you patch the configure.in file and are confident that the patch ! works, please send me the patch. (Don't bother patching the configure ! script itself -- it is regenerated each the configure.in file ! changes.) Compiler switches for threads --- 296,310 ---- ------------------- ! As of Python 2.0, threads are enabled by default. If you wish to ! compile without threads, or if your thread support is broken, pass the ! --with-threads=no switch to configure. Unfortunately, on some ! platforms, additional compiler and/or linker options are required for ! threads to work properly. Below is a table of those options, ! collected by Bill Janssen. I would love to automate this process ! more, but the information below is not enough to write a patch for the ! configure.in file, so manual intervention is required. If you patch ! the configure.in file and are confident that the patch works, please ! send me the patch. (Don't bother patching the configure script itself ! -- it is regenerated each the configure.in file changes.) Compiler switches for threads *************** *** 398,402 **** For SunOS and Solaris, enable module "sunaudiodev" to support the ! audio device. In addition to the file Setup, you can also edit the file Setup.local. --- 374,378 ---- For SunOS and Solaris, enable module "sunaudiodev" to support the ! audio device. Likewise, for Linux systems, enable "linuxaudiodev". In addition to the file Setup, you can also edit the file Setup.local. *************** *** 521,534 **** readline, enable module "readline" in the Modules/Setup file. ! --with-thread: On most Unix systems, you can now use multiple threads. ! To enable this, pass --with-thread. (--with-threads is an ! alias.) If the library required for threads lives in a ! peculiar place, you can use --with-thread=DIRECTORY. NOTE: ! you must also enable the thread module by uncommenting it in ! the Modules/Setup file. (Threads aren't enabled automatically ! because there are run-time penalties when support for them is ! compiled in even if you don't use them.) IMPORTANT: run "make ! clean" after changing (either enabling or disabling) this ! option, or you will get link errors! Note: for DEC Unix use --with-dec-threads instead. --- 497,507 ---- readline, enable module "readline" in the Modules/Setup file. ! --with-threads: On most Unix systems, you can now use multiple ! threads, and support for this is enabled by default. To ! disable this, pass --with-threads=no. If the library required ! for threads lives in a peculiar place, you can use ! --with-thread=DIRECTORY. IMPORTANT: run "make clean" after ! changing (either enabling or disabling) this option, or you ! will get link errors! Note: for DEC Unix use --with-dec-threads instead. From python-dev@python.org Tue Aug 29 22:57:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 14:57:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html style.css,1.5,1.6 Message-ID: <200008292157.OAA10670@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv10662 Modified Files: style.css Log Message: Move a little more here. Index: style.css =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/style.css,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** style.css 2000/03/29 22:41:52 1.5 --- style.css 2000/08/29 21:57:34 1.6 *************** *** 40,43 **** --- 40,46 ---- .navigation .title { font-family: avantgarde, sans-serif; font-size: 110% } + .navigation td { background-color: #99ccff; } + + .titlegraphic { vertical-align: top; } .verbatim { color: #00008b } From python-dev@python.org Wed Aug 30 04:25:54 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:25:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile.deps,1.40,1.41 Message-ID: <200008300325.UAA22570@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv22562 Modified Files: Makefile.deps Log Message: Added libgettext.tex Index: Makefile.deps =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile.deps,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** Makefile.deps 2000/08/19 16:55:31 1.40 --- Makefile.deps 2000/08/30 03:25:51 1.41 *************** *** 171,174 **** --- 171,175 ---- ../lib/libqueue.tex \ ../lib/liblocale.tex \ + ../lib/libgettext.tex \ ../lib/libbasehttp.tex \ ../lib/libcookie.tex \ From python-dev@python.org Wed Aug 30 04:26:20 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:26:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib lib.tex,1.160,1.161 Message-ID: <200008300326.UAA22616@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22608 Modified Files: lib.tex Log Message: Added libgettext.tex Index: lib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v retrieving revision 1.160 retrieving revision 1.161 diff -C2 -r1.160 -r1.161 *** lib.tex 2000/08/19 16:55:31 1.160 --- lib.tex 2000/08/30 03:26:17 1.161 *************** *** 146,149 **** --- 146,150 ---- \input{libshutil} \input{liblocale} + \input{libgettext} \input{libmutex} From python-dev@python.org Wed Aug 30 04:27:12 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:27:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgettext.tex,NONE,1.1 Message-ID: <200008300327.UAA22767@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22760 Added Files: libgettext.tex Log Message: Documentation for the gettext module. --- NEW FILE --- \section{\module{gettext} --- Multilingual internationalization services} \declaremodule{standard}{gettext} \modulesynopsis{Multilingual internationalization services.} \moduleauthor{Barry A. Warsaw}{bwarsaw@beopen.com} \sectionauthor{Barry A. Warsaw}{bwarsaw@beopen.com} The \module{gettext} module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. It supports both the GNU \program{gettext} message catalog API and a higher level, class-based API that may be more appropriate for Python files. The interface described below allows you to write your module and application messages in one natural language, and provide a catalog of translated messages for running under different natural languages. Some hints on localizing your Python modules and applications are also given. \subsection{GNU \program{gettext} API} The \module{gettext} module defines the following API, which is very similar to the GNU \program{gettext} API. If you use this API you will affect the translation of your entire application globally. Often this is what you want if your application is monolingual, with the choice of language dependent on the locale of your user. If you are localizing a Python module, or if your application needs to switch languages on the fly, you probably want to use the class-based API instead. \begin{funcdesc}{bindtextdomain}{domain, localedir\code{=None}} Bind the \var{domain} to the locale directory \var{localedir}. More concretely, \module{gettext} will look for binary \file{.mo} files for the given domain using the path (on Unix): \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo}, where \var{languages} is searched for in the environment variables \code{LANGUAGE}, \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG} respectively. If \var{localedir} is \code{None}, then the current binding for \var{domain} is returned\footnote{The default locale directory is system dependent; e.g. on standard RedHat Linux it is \file{/usr/share/locale}, but on Solaris it is \file{/usr/lib/locale}. The \module{gettext} module does not try to support these system dependent defaults; instead its default is \file{\code{sys.prefix}/share/locale}. For this reason, it is always best to call \code{gettext.bindtextdomain()} with an explicit absolute path at the start of your application.}. \end{funcdesc} \begin{funcdesc}{textdomain}{domain\code{=None}} Change or query the current global domain. If \var{domain} is \code{None}, then the current global domain is returned, otherwise the global domain is set to \var{domain}, which is returned. \end{funcdesc} \begin{funcdesc}{gettext}{message} Return the localized translation of \var{message}, based on the current global domain, language, and locale directory. This function is usually aliased as \function{_} in the local namespace (see examples below). \end{funcdesc} \begin{funcdesc}{dgettext}{domain, message} Like \function{gettext()}, but look the message up in the specified \var{domain}. \end{funcdesc} Note that GNU \program{gettext} also defines a \function{dcgettext()} method, but this was deemed not useful and so it is currently unimplemented. Here's an example of typical usage for this API: \begin{verbatim} import gettext gettext.bindtextdomain('myapplication', '/path/to/my/language/directory') gettext.textdomain('myapplication') _ = gettext.gettext # ... print _('This is a translatable string.') \end{verbatim} \subsection{Class-based API} The class-based API of the \module{gettext} module gives you more flexibility and greater convenience than the GNU \program{gettext} API. It is the recommended way of localizing your Python applications and modules. \module{gettext} defines a ``translations'' class which implements the parsing of GNU \file{.mo} format files, and has methods for returning either standard 8-bit strings or Unicode strings. Translations instances can also install themselves in the built-in namespace as the function \function{_()}. \begin{funcdesc}{find}{domain, localedir\code{=None}, languages\code{=None}} This function implements the standard \file{.mo} file search algorithm. It takes a \var{domain}, identical to what \function{textdomain()} takes, and optionally a \var{localedir} (as in \function{bindtextdomain()}), and a list of languages. All arguments are strings. If \var{localedir} is not given, then the default system locale directory is used\footnote{See the footnote for \function{bindtextdomain()} above.}. If \var{languages} is not given, then the following environment variables are searched: \code{LANGUAGE}, \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG}. The first one returning a non-empty value is used for the \var{languages} variable. The environment variables can contain a colon separated list of languages, which will be split. \function{find()} then expands and normalizes the languages, and then iterates through them, searching for an existing file built of these components: \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo} The first such file name that exists is returned by \function{find()}. If no such file is found, then \code{None} is returned. \end{funcdesc} \begin{funcdesc}{translation}{domain, localedir\code{=None}, languages\code{=None}, class_\code{=None}} Return a \class{Translations} instance based on the \var{domain}, \var{localedir}, and \var{languages}, which are first passed to \function{find()} to get the associated \file{.mo} file path. Instances with identical \file{.mo} file names are cached. The actual class instantiated is either \var{class_} if provided, otherwise \class{GNUTranslations}. The class's constructor must take a single file object argument. If no \file{.mo} file is found, this function raises \exception{IOError}. \end{funcdesc} \begin{funcdesc}{install}{domain, localedir\code{=None}, unicode\code{=0}} This installs the function \function{_} in Python's builtin namespace, based on \var{domain}, and \var{localedir} which are passed to the function \function{translation()}. The \var{unicode} flag is passed to the resulting translation object's \method{install} method. As seen below, you usually mark the strings in your application that are candidates for translation, by wrapping them in a call to the function \function{_()}, e.g. \begin{verbatim} print _('This string will be translated.') \end{verbatim} For convenience, you want the \function{_()} function to be installed in Python's builtin namespace, so it is easily accessible in all modules of your application. \end{funcdesc} \subsubsection{The \class{NullTranslations} class} Translation classes are what actually implement the translation of original source file message strings to translated message strings. The base class used by all translation classes is \class{NullTranslations}; this provides the basic interface you can use to write your own specialized translation classes. Here are the methods of \class{NullTranslations}: \begin{methoddesc}[NullTranslations]{__init__}{fp\code{=None}} Takes an optional file object \var{fp}, which is ignored by the base class. Initializes ``protected'' instance variables \var{_info} and \var{_charset} which are set by derived classes. It then calls \code{self._parse(fp)} if \var{fp} is not \code{None}. \end{methoddesc} \begin{methoddesc}[NullTranslations]{_parse}{fp} No-op'd in the base class, this method takes file object \var{fp}, and reads the data from the file, initializing its message catalog. If you have an unsupported message catalog file format, you should override this method to parse your format. \end{methoddesc} \begin{methoddesc}[NullTranslations]{gettext}{message} Return the translated message. Overridden in derived classes. \end{methoddesc} \begin{methoddesc}[NullTranslations]{ugettext}{message} Return the translated message as a Unicode string. Overridden in derived classes. \end{methoddesc} \begin{methoddesc}[NullTranslations]{info}{} Return the ``protected'' \var{_info} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{charset}{} Return the ``protected'' \var{_charset} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{install}{unicode\code{=0}} If the \var{unicode} flag is false, this method installs \code{self.gettext} into the built-in namespace, binding it to \function{_}. If \var{unicode} is true, it binds \code{self.ugettext} instead. Note that this is only one way, albeit the most convenient way, to make the \function{_} function available to your application. Because it affects the entire application globally, and specifically the built-in namespace, localized modules should never install \function{_}. Instead, they should use this code to make \function{_} available to their module: \begin{verbatim} import gettext t = gettext.translation('mymodule', ...) _ = t.gettext \end{verbatim} This puts \function{_} only in the module's global namespace and so only affects calls within this module. \end{methoddesc} \subsubsection{The \class{GNUTranslations} class} The \module{gettext} module provides one additional class derived from \class{NullTranslations}: \class{GNUTranslations}. This class overrides \method{_parse()} to enable reading GNU \program{gettext} format \file{.mo} files in both big-endian and little-endian format. It also parses optional meta-data out of the translation catalog. It is convention with GNU \program{gettext} to include meta-data as the translation for the empty string. This meta-data is in RFC822-style \code{key: value} pairs. If the key \code{Content-Type:} is found, then the \code{charset} property is used to initialize the ``protected'' \code{_charset} instance variable. The entire set of key/value pairs are placed into a dictionary and set as the ``protected'' \code{_info} instance variable. If the \file{.mo} file's magic number is invalid, or if other problems occur while reading the file, instantiating a \class{GNUTranslations} class can raise \exception{IOError}. The other usefully overridden method is \method{ugettext()}, which returns a Unicode string by passing both the translated message string and the value of the ``protected'' \code{_charset} variable to the builtin \function{unicode()} function. \subsubsection{Solaris \file{.mo} file support} The Solaris operating system defines its own binary \file{.mo} file format, but since no documentation can be found on this format, it is not supported at this time. \subsubsection{The Catalog constructor} GNOME uses a version of the \module{gettext} module by James Henstridge, but this version has a slightly different API. Its documented usage was: \begin{verbatim} import gettext cat = gettext.Catalog(domain, localedir) _ = cat.gettext print _('hello world') \end{verbatim} For compatibility with this older module, the function \function{Catalog()} is an alias for the the \function{translation()} function described above. One difference between this module and Henstridge's: his catalog objects supported access through a mapping API, but this appears to be unused and so is not currently supported. \subsection{Internationalizing your programs and modules} Internationalization (I18N) refers to the operation by which a program is made aware of multiple languages. Localization (L10N) refers to the adaptation of your program, once internationalized, to the local language and cultural habits. In order to provide multilingual messages for your Python programs, you need to take the following steps: \begin{enumerate} \item prepare your program or module by specially marking translatable strings \item run a suite of tools over your marked files to generate raw messages catalogs \item create language specific translations of the message catalogs \item use the \module{gettext} module so that message strings are properly translated \end{enumerate} In order to prepare your code for I18N, you need to look at all the strings in your files. Any string that needs to be translated should be marked by wrapping it in \code{_('...')} -- i.e. a call to the function \function{_()}. For example: \begin{verbatim} filename = 'mylog.txt' message = _('writing a log message') fp = open(filename, 'w') fp.write(message) fp.close() \end{verbatim} In this example, the string ``\code{writing a log message}'' is marked as a candidate for translation, while the strings ``\code{mylog.txt}'' and ``\code{w}'' are not. The GNU \program{gettext} package provides a tool, called \program{xgettext}, that scans C and C++ source code looking for these specially marked strings. \program{xgettext} generates what are called \file{.pot} files, essentially structured human readable files which contain every marked string in the source code. These \file{.pot} files are copied and handed over to human translators who write language-specific versions for every supported natural language. For I18N Python programs however, \program{xgettext} won't work; it doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called \program{pygettext} that does though (found in the \file{Tools/i18n} directory)\footnote{Fran\c cois Pinard has written a program called \program{xpot} which does a similar job. It is distributed separately from the Python distribution.}. This is a command line script that supports a similar interface as \program{xgettext}; see its documentation for details. Once you've used \program{pygettext} to create your \file{.pot} files, you can use the standard GNU \program{gettext} tools to generate your machine-readable \file{.mo} files, which are readable by the \class{GNUTranslations} class. How you use the \module{gettext} module in your code depends on whether you are internationalizing your entire application or a single module. \subsubsection{Localizing your module} If you are localizing your module, you must take care not to make global changes, e.g. to the built-in namespace. You should not use the GNU \program{gettext} API but instead the class-based API. Let's say your module is called ``spam'' and the module's various natural language translation \file{.mo} files reside in \file{/usr/share/locale} in GNU \program{gettext} format. Here's what you would put at the top of your module: \begin{verbatim} import gettext t = gettext.translation('spam', '/usr/share/locale') _ = t.gettext \end{verbatim} If your translators were providing you with Unicode strings in their \file{.po} files, you'd instead do: \begin{verbatim} import gettext t = gettext.translation('spam', '/usr/share/locale') _ = t.ugettext \end{verbatim} \subsubsection{Localizing your application} If you are localizing your application, you can install the \function{_()} function globally into the built-in namespace, usually in the main driver file of your application. This will let all your application-specific files just use \code{_('...')} without having to explicitly install it in each file. In the simple case then, you need only add the following bit of code to the main driver file of your application: \begin{verbatim} import gettext gettext.install('myapplication') \end{verbatim} If you need to set the locale directory or the \code{unicode} flag, you can pass these into the \function{install()} function: \begin{verbatim} import gettext gettext.install('myapplication', '/usr/share/locale', unicode=1) \end{verbatim} \subsubsection{Changing languages on the fly} If your program needs to support many languages at the same time, you may want to create multiple translation instances and then switch between them explicitly, like so: \begin{verbatim} import gettext lang1 = gettext.translation(languages=['en']) lang2 = gettext.translation(languages=['fr']) lang3 = gettext.translation(languages=['de']) # start by using language1 lang1.install() # ... time goes by, user selects language 2 lang2.install() # ... more time goes by, user selects language 3 lang3.install() \end{verbatim} \subsubsection{Deferred translations} In most coding situations, strings are translated were they are coded. Occasionally however, you need to mark strings for translation, but defer actual translation until later. A classic example is: \begin{verbatim} animals = ['mollusk', 'albatross', 'rat', 'penguin', 'python', ] # ... for a in animals: print a \end{verbatim} Here, you want to mark the strings in the \code{animals} list as being translatable, but you don't actually want to translate them until they are printed. Here is one way you can handle this situation: \begin{verbatim} def _(message): return message animals = [_('mollusk'), _('albatross'), _('rat'), _('penguin'), _('python'), ] del _ # ... for a in animals: print _(a) \end{verbatim} This works because the dummy definition of \function{_()} simply returns the string unchanged. And this dummy definition will temporarily override any definition of \function{_()} in the built-in namespace (until the \code{del} command). Take care, though if you have a previous definition of \function{_} in the local namespace. Note that the second use of \function{_()} will not identify ``a'' as being translatable to the \program{pygettext} program, since it is not a string. Another way to handle this is with the following example: \begin{verbatim} def N_(message): return message animals = [N_('mollusk'), N_('albatross'), N_('rat'), N_('penguin'), N_('python'), ] # ... for a in animals: print _(a) \end{verbatim} In this case, you are marking translatable strings with the function \function{N_()}\footnote{The choice of \function{N_()} here is totally arbitrary; it could have just as easily been \function{MarkThisStringForTranslation()}.}, which won't conflict with any definition of \function{_()}. However, you will need to teach your message extraction program to look for translatable strings marked with \function{N_()}. \program{pygettext} and \program{xpot} both support this through the use of command line switches. \subsection{Acknowledgements} The following people contributed code, feedback, design suggestions, previous implementations, and valuable experience to the creation of this module: \begin{itemize} \item Peter Funk \item James Henstridge \item Mark-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard \item Barry Warsaw \end{itemize} From python-dev@python.org Wed Aug 30 04:30:01 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:30:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.3,1.4 Message-ID: <200008300330.UAA22960@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22945 Modified Files: gettext.py Log Message: Finalize this module for Python 2.0 based on feedback and input from Martin von Loewis, Peter Funk, James Henstridge, Francois Pinard, and Marc-Andre Lemburg. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** gettext.py 2000/08/25 20:26:43 1.3 --- gettext.py 2000/08/30 03:29:58 1.4 *************** *** 7,88 **** I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once ! internationalized, to the local language and cultural habits. In order to ! provide multilingual messages for your Python programs, you need to take the ! following steps: ! ! - prepare your program by specially marking translatable strings ! - run a suite of tools over your marked program files to generate raw ! messages catalogs ! - create language specific translations of the message catalogs ! - use this module so that message strings are properly translated ! ! In order to prepare your program for I18N, you need to look at all the strings ! in your program. Any string that needs to be translated should be marked by ! wrapping it in _('...') -- i.e. a call to the function `_'. For example: ! ! filename = 'mylog.txt' ! message = _('writing a log message') ! fp = open(filename, 'w') ! fp.write(message) ! fp.close() ! ! In this example, the string `writing a log message' is marked as a candidate ! for translation, while the strings `mylog.txt' and `w' are not. ! ! The GNU gettext package provides a tool, called xgettext, that scans C and C++ ! source code looking for these specially marked strings. xgettext generates ! what are called `.pot' files, essentially structured human readable files ! which contain every marked string in the source code. These .pot files are ! copied and handed over to translators who write language-specific versions for ! every supported language. ! ! For I18N Python programs however, xgettext won't work; it doesn't understand ! the myriad of string types support by Python. The standard Python ! distribution provides a tool called pygettext that does though (found in the ! Tools/i18n directory). This is a command line script that supports a similar ! interface as xgettext; see its documentation for details. Once you've used ! pygettext to create your .pot files, you can use the standard GNU gettext ! tools to generate your machine-readable .mo files, which are what's used by ! this module. ! ! In the simple case, to use this module then, you need only add the following ! bit of code to the main driver file of your application: ! ! import gettext ! gettext.install() ! ! This sets everything up so that your _('...') function calls Just Work. In ! other words, it installs `_' in the builtins namespace for convenience. You ! can skip this step and do it manually by the equivalent code: ! ! import gettext ! import __builtin__ ! __builtin__['_'] = gettext.gettext ! ! Once you've done this, you probably want to call bindtextdomain() and ! textdomain() to get the domain set up properly. Again, for convenience, you ! can pass the domain and localedir to install to set everything up in one fell ! swoop: ! ! import gettext ! gettext.install('mydomain', '/my/locale/dir') ! ! If your program needs to support many languages at the same time, you will ! want to create Translation objects explicitly, like so: ! ! import gettext ! gettext.install() ! ! lang1 = gettext.Translations(open('/path/to/my/lang1/messages.mo')) ! lang2 = gettext.Translations(open('/path/to/my/lang2/messages.mo')) ! lang3 = gettext.Translations(open('/path/to/my/lang3/messages.mo')) ! ! gettext.set(lang1) ! # all _() will now translate to language 1 ! gettext.set(lang2) ! # all _() will now translate to language 2 - Currently, only GNU gettext format binary .mo files are supported. - """ --- 7,12 ---- I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once ! internationalized, to the local language and cultural habits. """ *************** *** 105,123 **** # Barry Warsaw integrated these modules, wrote the .install() API and code, # and conformed all C and Python code to Python's coding standards. import os import sys import struct ! from UserDict import UserDict ! ! ! ! # globals ! _translations = {} ! _current_translation = None ! _current_domain = 'messages' ! # Domain to directory mapping, for use by bindtextdomain() ! _localedirs = {} --- 29,53 ---- # Barry Warsaw integrated these modules, wrote the .install() API and code, # and conformed all C and Python code to Python's coding standards. + # + # Francois Pinard and Marc-Andre Lemburg also contributed valuably to this + # module. + # + # TODO: + # - Lazy loading of .mo files. Currently the entire catalog is loaded into + # memory, but that's probably bad for large translated programs. Instead, + # the lexical sort of original strings in GNU .mo files should be exploited + # to do binary searches and lazy initializations. Or you might want to use + # the undocumented double-hash algorithm for .mo files with hash tables, but + # you'll need to study the GNU gettext code to do this. + # + # - Support Solaris .mo file formats. Unfortunately, we've been unable to + # find this format documented anywhere. import os import sys import struct ! from errno import ENOENT ! _default_localedir = os.path.join(sys.prefix, 'share', 'locale') *************** *** 166,180 **** ! class GNUTranslations(UserDict): ! # Magic number of .mo files ! MAGIC = 0x950412de ! def __init__(self, fp): ! if fp is None: ! d = {} ! else: ! d = self._parse(fp) ! UserDict.__init__(self, d) def _parse(self, fp): """Override this method to support alternative .mo formats.""" --- 96,131 ---- ! class NullTranslations: ! def __init__(self, fp=None): ! self._info = {} ! self._charset = None ! if fp: ! self._parse(fp) ! def _parse(self, fp): ! pass ! ! def gettext(self, message): ! return message ! ! def ugettext(self, message): ! return unicode(message) ! ! def info(self): ! return self._info ! ! def charset(self): ! return self._charset ! ! def install(self, unicode=0): ! import __builtin__ ! __builtin__.__dict__['_'] = unicode and self.ugettext or self.gettext + + class GNUTranslations(NullTranslations): + # Magic number of .mo files + LE_MAGIC = 0x950412de + BE_MAGIC = struct.unpack('>i', struct.pack(' self.MAGIC: raise IOError(0, 'Bad magic number', filename) # --- 134,148 ---- # Parse the .mo file header, which consists of 5 little endian 32 # bit words. ! self._catalog = catalog = {} buf = fp.read() ! # Are we big endian or little endian? ! magic = unpack('4i', buf[4:20]) ! ii = '>ii' ! else: raise IOError(0, 'Bad magic number', filename) # *************** *** 193,231 **** # dictionary. for i in xrange(0, msgcount): ! mstart = unpack(' Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv23026 Modified Files: ACKS Log Message: Added James Henstridge Index: ACKS =================================================================== RCS file: /cvsroot/python/python/dist/src/Misc/ACKS,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -r1.58 -r1.59 *** ACKS 2000/06/29 12:45:50 1.58 --- ACKS 2000/08/30 03:30:28 1.59 *************** *** 142,145 **** --- 142,146 ---- Lance Finn Helsten Jonathan Hendry + James Henstridge Chris Herborth Ivan Herman From python-dev@python.org Wed Aug 30 04:30:42 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 20:30:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html index.html.in,1.7,1.8 Message-ID: <200008300330.UAA23059@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv23048 Modified Files: index.html.in Log Message: Added a couple of links to online documentation. Reasonable since this file is not used in the online documentation. Index: index.html.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/index.html.in,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** index.html.in 2000/06/30 15:30:33 1.7 --- index.html.in 2000/08/30 03:30:40 1.8 *************** *** 5,8 **** --- 5,9 ---- *************** *** 83,86 **** --- 84,105 ---- + + +   +

    + + +   + + + From python-dev@python.org Wed Aug 30 04:31:47 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:31:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.4,1.5 Message-ID: <200008300331.UAA23249@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv23239 Modified Files: test_gettext.py Log Message: Expand the test suite to test both the GNU gettext and translation class-based APIs. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_gettext.py 2000/08/26 21:01:27 1.4 --- test_gettext.py 2000/08/30 03:31:45 1.5 *************** *** 3,21 **** import gettext ! def test(localedir, mofile): # Test basic interface os.environ['LANGUAGE'] = 'xx' print 'installing gettext' ! gettext.install() - print _('calling bindtextdomain with localedir %s') % localedir - print gettext.bindtextdomain('gettext', localedir) - print gettext.bindtextdomain() - - print gettext.textdomain('gettext') - print gettext.textdomain() - # test some translations print _(u'mullusk') print _(r'Raymond Luxury Yach-t') --- 3,18 ---- import gettext ! ! def test_api_1(localedir, mofile): ! print 'test api 1' ! # Test basic interface os.environ['LANGUAGE'] = 'xx' print 'installing gettext' ! gettext.install('gettext', localedir) # test some translations + print _('albatross') print _(u'mullusk') print _(r'Raymond Luxury Yach-t') *************** *** 23,26 **** --- 20,24 ---- # double quotes + print _("albatross") print _(u"mullusk") print _(r"Raymond Luxury Yach-t") *************** *** 28,31 **** --- 26,30 ---- # triple single quotes + print _('''albatross''') print _(u'''mullusk''') print _(r'''Raymond Luxury Yach-t''') *************** *** 33,36 **** --- 32,36 ---- # triple double quotes + print _("""albatross""") print _(u"""mullusk""") print _(r"""Raymond Luxury Yach-t""") *************** *** 42,47 **** gettext message catalog library.''') - print gettext.dgettext('gettext', 'nudge nudge') - # test the alternative interface fp = open(os.path.join(mofile), 'rb') --- 42,45 ---- *************** *** 49,101 **** fp.close() ! gettext.set(t) ! print t == gettext.get() print _('nudge nudge') GNU_MO_DATA = '''\ 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB ! AQAACwAAAEkBAAAWAQAAVQEAABYAAABsAgAAoQAAAIMCAAAFAAAAJQMAAAkAAAArAwAAAQAAAAQA AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ ! cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiBGcmkgQXVnIDE4IDIwOjQ1 ! OjAzIDIwMDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJyeSBXYXJzYXcgPGJ3YXJzYXdAYmVvcGVuLmNv ! bT4KTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz4KTUlNRS1WZXJzaW9u ! OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWVuCkNvbnRlbnQtVHJhbnNm ! ZXItRW5jb2Rpbmc6IG5vbmUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4xCgBUaHJvYXR3 ! b2JibGVyIE1hbmdyb3ZlAEd1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJh ! IG5hcSB5YnBueXZtbmd2YmEKZmhjY2JlZyBzYmUgbGJoZSBDbGd1YmEgY2VidGVuemYgb2wgY2Vi ! aXZxdmF0IG5hIHZhZ3Jlc25wciBnYiBndXIgVEFICnRyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2 ! b2VuZWwuAGJhY29uAHdpbmsgd2luawA= ! ''' ! ! SOLARIS_MO_DATA = '''\ ! AAAACAAAABEAAAIXAAAB0gAAARD///+d////nQAAAAAAAAAAAAAAAAAAAAIAAAAkAAAAAf///53/ ! //+dAAAAQgAAAAIAAAABAAAABQAAAGgAAAAD////nf///50AAAB0AAAADQAAAAQAAAAGAAAAmAAA ! AA7///+dAAAABwAAAKAAAAAU////nf///50AAAC5AAAAFQAAAAMAAAAMAAAAywAAABb///+d//// ! nQAAANsAAAAXAAAACQAAAAsAAADsAAAAGP///53///+dAAAA/wAAABkAAAAKAAAADgAAAScAAAAa ! ////nf///50AAAFDAAAAGwAAAA0AAAAPAAABXgAAABz///+dAAAAEAAAAgAAAAC+////nf///50A ! AAIWAAAA1XRleHQgZG9tYWluIGRpZG4ndCBnZXQgc2V0IHByb3Blcmx5AHJhdyBzdHJpbmcgdHJh ! bnNsYXRpb24gZmFpbGVkAHJhdyBVbmljb2RlIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbnVk ! Z2UgbnVkZ2UAbXVsdGlsaW5lIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbXVsbHVzawBnb3Qg ! dW5leHBlY3RlZCBsb2NhbGVkaXIAZ2V0dGV4dCBpbnN0YWxsZWQAZGdldHRleHQgZmFpbGVkAGRj ! Z2V0dGV4dCBmYWlsZWQAY2FsbGluZyB0ZXh0ZG9tYWluAGNhbGxpbmcgYmluZHRleHRkb21haW4g ! d2l0aCBsb2NhbGRpciAlcwBiaW5kdGV4dGRvbWFpbihOb25lKSBmYWlsZWQAVW5pY29kZSB0cmFu ! c2xhdGlvbiBmYWlsZWQAVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24g ! YW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZvciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92 ! aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBHTlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGli ! cmFyeS4AUmF5bW9uZCBMdXh1cnkgWWFjaC10AAAAAAB3aW5rIHdpbmsAAGJhY29uAAAAAAAAAAAA ! R3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3Zi ! YQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVz ! bnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AVGhyb2F0d29i ! YmxlciBNYW5ncm92ZQBQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTgpQTy1SZXZp ! c2lvbi1EYXRlOiAyMDAwLTA4LTE4IDIxOjAxLTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBO ! QU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpN ! SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNF ! VApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElORwoA ''' LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') --- 47,128 ---- fp.close() ! t.install() print _('nudge nudge') + # try unicode return type + t.install(unicode=1) + + print _('mullusk') + + + + def test_api_2(localedir, mofile): + print 'test api 2' + + gettext.bindtextdomain('gettext', localedir) + print gettext.bindtextdomain('gettext') == localedir + + gettext.textdomain('gettext') + # should return 'gettext' + print gettext.textdomain() + + # local function override builtin + _ = gettext.gettext + + # test some translations + print _('albatross') + print _(u'mullusk') + print _(r'Raymond Luxury Yach-t') + print _(ur'nudge nudge') + + # double quotes + print _("albatross") + print _(u"mullusk") + print _(r"Raymond Luxury Yach-t") + print _(ur"nudge nudge") + + # triple single quotes + print _('''albatross''') + print _(u'''mullusk''') + print _(r'''Raymond Luxury Yach-t''') + print _(ur'''nudge nudge''') + + # triple double quotes + print _("""albatross""") + print _(u"""mullusk""") + print _(r"""Raymond Luxury Yach-t""") + print _(ur"""nudge nudge""") + + # multiline strings + print _('''This module provides internationalization and localization + support for your Python programs by providing an interface to the GNU + gettext message catalog library.''') + + # Now test dgettext() + def _(message): + return gettext.dgettext('gettext') + + + GNU_MO_DATA = '''\ 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB ! AQAACwAAAEkBAAAbAQAAVQEAABYAAABxAgAAoQAAAIgCAAAFAAAAKgMAAAkAAAAwAwAAAQAAAAQA AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ ! cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiAyMDAwLTA4LTI5IDEyOjE5 ! LTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogQmFycnkgQS4gV2Fyc2F3IDxid2Fyc2F3QGJlb3Blbi5j ! b20+Ckxhbmd1YWdlLVRlYW06IFhYIDxweXRob24tZGV2QHB5dGhvbi5vcmc+Ck1JTUUtVmVyc2lv ! bjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1rb2k4X3IKQ29udGVudC1U ! cmFuc2Zlci1FbmNvZGluZzogbm9uZQpHZW5lcmF0ZWQtQnk6IHB5Z2V0dGV4dC5weSAxLjEKAFRo ! cm9hdHdvYmJsZXIgTWFuZ3JvdmUAR3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZt ! bmd2YmEgbmFxIHlicG55dm1uZ3ZiYQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBv ! bCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255 ! YnQgeXZvZW5lbC4AYmFjb24Ad2luayB3aW5rAA== ''' + LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') *************** *** 112,119 **** - try: setup() ! test('.', MOFILE) finally: teardown() --- 139,146 ---- try: setup() ! test_api_1('.', MOFILE) ! test_api_2('.', MOFILE) finally: teardown() *************** *** 122,324 **** ! # For reference, here's the .pot and .po files used to created the .mo data ! # above. The .pot file was generated by pygettext. ! # =============================== messages.pot ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" ! ! # =============================== messages.po ! ! ### Dummy translation for Python's test_gettext.py module. ! ### Copyright (C) 2000 BeOpen.com ! ### Barry Warsaw , 2000. ! ### ! ###, fuzzy ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: 2000-08-18 21:01-04:00\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: 2.0\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: Barry Warsaw \n" ! ##"Language-Team: XX \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=en\n" ! ##"Content-Transfer-Encoding: none\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "Throatwobbler Mangrove" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "bacon" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "wink wink" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" ! ##"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" ! ##"trggrkg zrffntr pngnybt yvoenel." ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" --- 149,200 ---- ! # For reference, here's the .po file used to created the .mo data above. ! ''' ! # Dummy translation for Python's test_gettext.py module. ! # Copyright (C) 2000 BeOpen.com ! # Barry Warsaw , 2000. ! # ! msgid "" ! msgstr "" ! "Project-Id-Version: 2.0\n" ! "PO-Revision-Date: 2000-08-29 12:19-04:00\n" ! "Last-Translator: Barry A. Warsaw \n" ! "Language-Team: XX \n" ! "MIME-Version: 1.0\n" ! "Content-Type: text/plain; charset=koi8_r\n" ! "Content-Transfer-Encoding: none\n" ! "Generated-By: pygettext.py 1.1\n" ! ! #: test_gettext.py:19 test_gettext.py:25 test_gettext.py:31 test_gettext.py:37 ! #: test_gettext.py:51 test_gettext.py:80 test_gettext.py:86 test_gettext.py:92 ! #: test_gettext.py:98 ! msgid "nudge nudge" ! msgstr "wink wink" ! ! #: test_gettext.py:16 test_gettext.py:22 test_gettext.py:28 test_gettext.py:34 ! #: test_gettext.py:77 test_gettext.py:83 test_gettext.py:89 test_gettext.py:95 ! msgid "albatross" ! msgstr "" ! ! #: test_gettext.py:18 test_gettext.py:24 test_gettext.py:30 test_gettext.py:36 ! #: test_gettext.py:79 test_gettext.py:85 test_gettext.py:91 test_gettext.py:97 ! msgid "Raymond Luxury Yach-t" ! msgstr "Throatwobbler Mangrove" ! ! #: test_gettext.py:17 test_gettext.py:23 test_gettext.py:29 test_gettext.py:35 ! #: test_gettext.py:56 test_gettext.py:78 test_gettext.py:84 test_gettext.py:90 ! #: test_gettext.py:96 ! msgid "mullusk" ! msgstr "bacon" ! ! #: test_gettext.py:40 test_gettext.py:101 ! msgid "" ! "This module provides internationalization and localization\n" ! "support for your Python programs by providing an interface to the GNU\n" ! "gettext message catalog library." ! msgstr "" ! "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" ! "fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" ! "trggrkg zrffntr pngnybt yvoenel." ! ''' From python-dev@python.org Wed Aug 30 04:28:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:28:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgettext.tex,1.1,1.2 Message-ID: <200008300328.UAA22849@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22838 Modified Files: libgettext.tex Log Message: Oops, spell MAL's name right. Index: libgettext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgettext.tex,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** libgettext.tex 2000/08/30 03:27:10 1.1 --- libgettext.tex 2000/08/30 03:28:17 1.2 *************** *** 489,493 **** \item Peter Funk \item James Henstridge ! \item Mark-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard --- 489,493 ---- \item Peter Funk \item James Henstridge ! \item Marc-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard From python-dev@python.org Wed Aug 30 04:32:09 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:32:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_gettext,1.2,1.3 Message-ID: <200008300332.UAA23296@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv23284 Modified Files: test_gettext Log Message: Expand the test suite to test both the GNU gettext and translation class-based APIs. Index: test_gettext =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_gettext,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_gettext 2000/08/25 19:49:28 1.2 --- test_gettext 2000/08/30 03:32:07 1.3 *************** *** 1,18 **** test_gettext installing gettext ! calling bindtextdomain with localedir . ! . ! None ! gettext ! gettext bacon Throatwobbler Mangrove wink wink bacon Throatwobbler Mangrove wink wink bacon Throatwobbler Mangrove wink wink bacon Throatwobbler Mangrove --- 1,18 ---- test_gettext + test api 1 installing gettext ! albatross bacon Throatwobbler Mangrove wink wink + albatross bacon Throatwobbler Mangrove wink wink + albatross bacon Throatwobbler Mangrove wink wink + albatross bacon Throatwobbler Mangrove *************** *** 22,25 **** --- 22,46 ---- trggrkg zrffntr pngnybt yvoenel. wink wink + bacon + test api 2 1 + gettext + albatross + bacon + Throatwobbler Mangrove + wink wink + albatross + bacon + Throatwobbler Mangrove wink wink + albatross + bacon + Throatwobbler Mangrove + wink wink + albatross + bacon + Throatwobbler Mangrove + wink wink + Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba + fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH + trggrkg zrffntr pngnybt yvoenel. From python-dev@python.org Wed Aug 30 05:19:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 21:19:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgettext.tex,1.2,1.3 Message-ID: <200008300419.VAA02890@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2882/lib Modified Files: libgettext.tex Log Message: Markup revisions. Nothing was actually required to be able to format it, but many conventions were broken. Index: libgettext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgettext.tex,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** libgettext.tex 2000/08/30 03:28:17 1.2 --- libgettext.tex 2000/08/30 04:19:20 1.3 *************** *** 10,14 **** The \module{gettext} module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. ! It supports both the GNU \program{gettext} message catalog API and a higher level, class-based API that may be more appropriate for Python files. The interface described below allows you to write your --- 10,14 ---- The \module{gettext} module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. ! It supports both the GNU \code{gettext} message catalog API and a higher level, class-based API that may be more appropriate for Python files. The interface described below allows you to write your *************** *** 31,55 **** instead. ! \begin{funcdesc}{bindtextdomain}{domain, localedir\code{=None}} Bind the \var{domain} to the locale directory \var{localedir}. More concretely, \module{gettext} will look for ! binary \file{.mo} files for the given domain using the path (on Unix): \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo}, where \var{languages} is searched for in the environment variables ! \code{LANGUAGE}, \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG} ! respectively. ! If \var{localedir} is \code{None}, then the current binding for ! \var{domain} is returned\footnote{The default locale directory is system ! dependent; e.g. on standard RedHat Linux it is ! \file{/usr/share/locale}, but on Solaris it is ! \file{/usr/lib/locale}. The \module{gettext} module does not try to ! support these system dependent defaults; instead its default is ! \file{\code{sys.prefix}/share/locale}. For this reason, it is always ! best to call \code{gettext.bindtextdomain()} with an explicit absolute ! path at the start of your application.}. \end{funcdesc} ! \begin{funcdesc}{textdomain}{domain\code{=None}} Change or query the current global domain. If \var{domain} is \code{None}, then the current global domain is returned, otherwise the --- 31,56 ---- instead. ! \begin{funcdesc}{bindtextdomain}{domain\optional{, localedir}} Bind the \var{domain} to the locale directory \var{localedir}. More concretely, \module{gettext} will look for ! binary \file{.mo} files for the given domain using the path (on \UNIX): \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo}, where \var{languages} is searched for in the environment variables ! \envvar{LANGUAGE}, \envvar{LC_ALL}, \envvar{LC_MESSAGES}, and ! \envvar{LANG} respectively. ! If \var{localedir} is omitted or \code{None}, then the current binding ! for \var{domain} is returned.\footnote{ ! The default locale directory is system dependent; e.g.\ on ! RedHat Linux it is \file{/usr/share/locale}, but on Solaris it ! is \file{/usr/lib/locale}. The \module{gettext} module does ! not try to support these system dependent defaults; instead ! its default is \file{\code{sys.prefix}/share/locale}. For ! this reason, it is always best to call ! \function{bindtextdomain()} with an explicit absolute path at ! the start of your application.} \end{funcdesc} ! \begin{funcdesc}{textdomain}{\optional{domain}} Change or query the current global domain. If \var{domain} is \code{None}, then the current global domain is returned, otherwise the *************** *** 95,99 **** namespace as the function \function{_()}. ! \begin{funcdesc}{find}{domain, localedir\code{=None}, languages\code{=None}} This function implements the standard \file{.mo} file search algorithm. It takes a \var{domain}, identical to what --- 96,100 ---- namespace as the function \function{_()}. ! \begin{funcdesc}{find}{domain\optional{, localedir\optional{, languages}}} This function implements the standard \file{.mo} file search algorithm. It takes a \var{domain}, identical to what *************** *** 103,110 **** If \var{localedir} is not given, then the default system locale ! directory is used\footnote{See the footnote for ! \function{bindtextdomain()} above.}. If \var{languages} is not given, ! then the following environment variables are searched: \code{LANGUAGE}, ! \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG}. The first one returning a non-empty value is used for the \var{languages} variable. The environment variables can contain a colon separated list of --- 104,111 ---- If \var{localedir} is not given, then the default system locale ! directory is used.\footnote{See the footnote for ! \function{bindtextdomain()} above.} If \var{languages} is not given, ! then the following environment variables are searched: \envvar{LANGUAGE}, ! \envvar{LC_ALL}, \envvar{LC_MESSAGES}, and \envvar{LANG}. The first one returning a non-empty value is used for the \var{languages} variable. The environment variables can contain a colon separated list of *************** *** 121,126 **** \end{funcdesc} ! \begin{funcdesc}{translation}{domain, localedir\code{=None}, ! languages\code{=None}, class_\code{=None}} Return a \class{Translations} instance based on the \var{domain}, \var{localedir}, and \var{languages}, which are first passed to --- 122,127 ---- \end{funcdesc} ! \begin{funcdesc}{translation}{domain\optional{, localedir\optional{, ! languages\optional{, class_}}}} Return a \class{Translations} instance based on the \var{domain}, \var{localedir}, and \var{languages}, which are first passed to *************** *** 134,138 **** \end{funcdesc} ! \begin{funcdesc}{install}{domain, localedir\code{=None}, unicode\code{=0}} This installs the function \function{_} in Python's builtin namespace, based on \var{domain}, and \var{localedir} which are passed to the --- 135,139 ---- \end{funcdesc} ! \begin{funcdesc}{install}{domain\optional{, localedir\optional{, unicode}}} This installs the function \function{_} in Python's builtin namespace, based on \var{domain}, and \var{localedir} which are passed to the *************** *** 161,165 **** methods of \class{NullTranslations}: ! \begin{methoddesc}[NullTranslations]{__init__}{fp\code{=None}} Takes an optional file object \var{fp}, which is ignored by the base class. Initializes ``protected'' instance variables \var{_info} and --- 162,166 ---- methods of \class{NullTranslations}: ! \begin{methoddesc}[NullTranslations]{__init__}{\optional{fp}} Takes an optional file object \var{fp}, which is ignored by the base class. Initializes ``protected'' instance variables \var{_info} and *************** *** 185,200 **** \begin{methoddesc}[NullTranslations]{info}{} ! Return the ``protected'' \var{_info} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{charset}{} ! Return the ``protected'' \var{_charset} variable. \end{methoddesc} ! \begin{methoddesc}[NullTranslations]{install}{unicode\code{=0}} If the \var{unicode} flag is false, this method installs ! \code{self.gettext} into the built-in namespace, binding it to ! \function{_}. If \var{unicode} is true, it binds \code{self.ugettext} ! instead. Note that this is only one way, albeit the most convenient way, to --- 186,201 ---- \begin{methoddesc}[NullTranslations]{info}{} ! Return the ``protected'' \member{_info} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{charset}{} ! Return the ``protected'' \member{_charset} variable. \end{methoddesc} ! \begin{methoddesc}[NullTranslations]{install}{\optional{unicode}} If the \var{unicode} flag is false, this method installs ! \method{self.gettext()} into the built-in namespace, binding it to ! \samp{_}. If \var{unicode} is true, it binds \method{self.ugettext()} ! instead. By default, \var{unicode} is false. Note that this is only one way, albeit the most convenient way, to *************** *** 224,233 **** It also parses optional meta-data out of the translation catalog. It is convention with GNU \program{gettext} to include meta-data as the ! translation for the empty string. This meta-data is in RFC822-style ! \code{key: value} pairs. If the key \code{Content-Type:} is found, then the \code{charset} property is used to initialize the ! ``protected'' \code{_charset} instance variable. The entire set of key/value pairs are placed into a dictionary and set as the ! ``protected'' \code{_info} instance variable. If the \file{.mo} file's magic number is invalid, or if other problems --- 225,234 ---- It also parses optional meta-data out of the translation catalog. It is convention with GNU \program{gettext} to include meta-data as the ! translation for the empty string. This meta-data is in \rfc{822}-style ! \code{key: value} pairs. If the key \code{Content-Type} is found, then the \code{charset} property is used to initialize the ! ``protected'' \member{_charset} instance variable. The entire set of key/value pairs are placed into a dictionary and set as the ! ``protected'' \member{_info} instance variable. If the \file{.mo} file's magic number is invalid, or if other problems *************** *** 237,241 **** The other usefully overridden method is \method{ugettext()}, which returns a Unicode string by passing both the translated message string ! and the value of the ``protected'' \code{_charset} variable to the builtin \function{unicode()} function. --- 238,242 ---- The other usefully overridden method is \method{ugettext()}, which returns a Unicode string by passing both the translated message string ! and the value of the ``protected'' \member{_charset} variable to the builtin \function{unicode()} function. *************** *** 298,307 **** \end{verbatim} ! In this example, the string ``\code{writing a log message}'' is marked as ! a candidate for translation, while the strings ``\code{mylog.txt}'' and ! ``\code{w}'' are not. ! The GNU \program{gettext} package provides a tool, called ! \program{xgettext}, that scans C and C++ source code looking for these specially marked strings. \program{xgettext} generates what are called \file{.pot} files, essentially structured human readable files --- 299,308 ---- \end{verbatim} ! In this example, the string \code{'writing a log message'} is marked as ! a candidate for translation, while the strings \code{'mylog.txt'} and ! \code{'w'} are not. ! The GNU \code{gettext} package provides a tool, called ! \program{xgettext}, that scans C and \Cpp{} source code looking for these specially marked strings. \program{xgettext} generates what are called \file{.pot} files, essentially structured human readable files *************** *** 313,320 **** doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called ! \program{pygettext} that does though (found in the \file{Tools/i18n} ! directory)\footnote{Fran\c cois Pinard has written a program called \program{xpot} which does a similar job. It is distributed separately ! from the Python distribution.}. This is a command line script that supports a similar interface as \program{xgettext}; see its documentation for details. Once you've used \program{pygettext} to --- 314,322 ---- doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called ! \program{pygettext} that does though (found in the \file{Tools/i18n/} ! directory).\footnote{Fran\c cois Pinard has written a program called \program{xpot} which does a similar job. It is distributed separately ! from the Python distribution. ! } This is a command line script that supports a similar interface as \program{xgettext}; see its documentation for details. Once you've used \program{pygettext} to *************** *** 331,341 **** If you are localizing your module, you must take care not to make global changes, e.g. to the built-in namespace. You should not use ! the GNU \program{gettext} API but instead the class-based API. Let's say your module is called ``spam'' and the module's various natural language translation \file{.mo} files reside in ! \file{/usr/share/locale} in GNU ! \program{gettext} format. Here's what you would put at the top of ! your module: \begin{verbatim} --- 333,342 ---- If you are localizing your module, you must take care not to make global changes, e.g. to the built-in namespace. You should not use ! the GNU \code{gettext} API but instead the class-based API. Let's say your module is called ``spam'' and the module's various natural language translation \file{.mo} files reside in ! \file{/usr/share/locale} in GNU \program{gettext} format. Here's what ! you would put at the top of your module: \begin{verbatim} *************** *** 370,374 **** \end{verbatim} ! If you need to set the locale directory or the \code{unicode} flag, you can pass these into the \function{install()} function: --- 371,375 ---- \end{verbatim} ! If you need to set the locale directory or the \var{unicode} flag, you can pass these into the \function{install()} function: *************** *** 445,449 **** the string unchanged. And this dummy definition will temporarily override any definition of \function{_()} in the built-in namespace ! (until the \code{del} command). Take care, though if you have a previous definition of \function{_} in the local namespace. --- 446,450 ---- the string unchanged. And this dummy definition will temporarily override any definition of \function{_()} in the built-in namespace ! (until the \keyword{del} command). Take care, though if you have a previous definition of \function{_} in the local namespace. *************** *** 471,478 **** In this case, you are marking translatable strings with the function ! \function{N_()}\footnote{The choice of \function{N_()} here is totally arbitrary; it could have just as easily been ! \function{MarkThisStringForTranslation()}.}, ! which won't conflict with any definition of \function{_()}. However, you will need to teach your message extraction program to look for translatable strings marked with \function{N_()}. --- 472,479 ---- In this case, you are marking translatable strings with the function ! \function{N_()},\footnote{The choice of \function{N_()} here is totally arbitrary; it could have just as easily been ! \function{MarkThisStringForTranslation()}. ! } which won't conflict with any definition of \function{_()}. However, you will need to teach your message extraction program to look for translatable strings marked with \function{N_()}. *************** *** 489,493 **** \item Peter Funk \item James Henstridge ! \item Marc-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard --- 490,494 ---- \item Peter Funk \item James Henstridge ! \item Marc-Andr\'e Lemburg \item Martin von L\"owis \item Fran\c cois Pinard From python-dev@python.org Wed Aug 30 10:08:20 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Wed, 30 Aug 2000 02:08:20 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0224.txt,1.2,1.3 Message-ID: <200008300908.CAA30719@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30693 Modified Files: pep-0224.txt Log Message: Changed the name mangling from __doc____ to __doc___ and added comments about possible problems. Index: pep-0224.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0224.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0224.txt 2000/08/24 14:16:10 1.2 --- pep-0224.txt 2000/08/30 09:08:16 1.3 *************** *** 85,89 **** The following name mangling scheme achieves all of the above: ! __doc____ To keep track of the last assigned name, the byte code compiler --- 85,89 ---- The following name mangling scheme achieves all of the above: ! __doc___ To keep track of the last assigned name, the byte code compiler *************** *** 103,108 **** attributes to be created: ! C.__doc__a__ == "attribute C.a doc-string (1)" ! C.__doc__b__ == "attribute C.b doc-string (2)" A patch to the current CVS version of Python 2.0 which implements --- 103,108 ---- attributes to be created: ! C.__doc_a__ == "attribute C.a doc-string (1)" ! C.__doc_b__ == "attribute C.b doc-string (2)" A patch to the current CVS version of Python 2.0 which implements *************** *** 135,142 **** used assignment name variable, it is still valid when the compiler reaches the docstring "b's doc string" and thus assigns the string ! to __doc__b__. A possible solution to this problem would be resetting the name ! variable for all non-expression nodes. --- 135,171 ---- used assignment name variable, it is still valid when the compiler reaches the docstring "b's doc string" and thus assigns the string ! to __doc_b__. A possible solution to this problem would be resetting the name ! variable for all non-expression nodes in the compiler. ! ! ! Possible Problems ! ! Even though highly unlikely, attribute docstrings could get ! accidentally concatenated to the attribute's value: ! ! class C: ! x = "text" \ ! "x's docstring" ! ! The trailing slash would cause the Python compiler to concatenate ! the attribute value and the docstring. ! ! A modern syntax highlighting editor would easily make this ! accident visible, though, and by simply inserting emtpy lines ! between the attribute definition and the docstring you can avoid ! the possible concatenation completely, so the problem is ! negligible. ! ! Another possible problem is that of using triple quoted strings as ! a way to uncomment parts of your code. ! ! If there happens to be an assignment just before the start of the ! comment string, then the compiler will treat the comment as ! docstring attribute and apply the above logic to it. ! ! Besides generating a docstring for an otherwise undocumented ! attribute there is no breakage. From python-dev@python.org Wed Aug 30 15:01:32 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 30 Aug 2000 07:01:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib calendar.py,1.16,1.17 Message-ID: <200008301401.HAA24847@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24801 Modified Files: calendar.py Log Message: patches from David Goodger. Closes patch 101085. * deletes cache * adds firstweekday and setfirstweekday functions that allow user to control which day of the week is first when displaying calendars * adds month, week, calendar functions that return their results instead of printing them * adds symbolic constants MONDAY, ..., SUNDAY so users need not remember the ordinal values of the weekdays Index: calendar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/calendar.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** calendar.py 2000/06/28 14:48:01 1.16 --- calendar.py 2000/08/30 14:01:28 1.17 *************** *** 1,4 **** ! """Calendar printing functions""" # Revision 2: uses functions from built-in time module --- 1,9 ---- ! """Calendar printing functions + Note when comparing these calendars to the ones printed by cal(1): By + default, these calendars have Monday as the first day of the week, and + Sunday as the last (the European convention). Use setfirstweekday() to + set the first day of the week (0=Monday, 6=Sunday).""" + # Revision 2: uses functions from built-in time module *************** *** 9,16 **** error = ValueError - # Note when comparing these calendars to the ones printed by cal(1): - # My calendars have Monday as the first day of the week, and Sunday as - # the last! (I believe this is the European convention.) - # Constants for months referenced later January = 1 --- 14,17 ---- *************** *** 32,35 **** --- 33,52 ---- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + # Constants for weekdays + (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) + + _firstweekday = 0 # 0 = Monday, 6 = Sunday + + def firstweekday(): + return _firstweekday + + def setfirstweekday(weekday): + """Set weekday (Monday=0, Sunday=6) to start each week.""" + global _firstweekday + if not MONDAY <= weekday <= SUNDAY: + raise ValueError, \ + 'bad weekday number; must be 0 (Monday) to 6 (Sunday)' + _firstweekday = weekday + def isleap(year): """Return 1 for leap years, 0 for non-leap years.""" *************** *** 38,46 **** def leapdays(y1, y2): """Return number of leap years in range [y1, y2). ! Assume y1 <= y2 and no funny (non-leap century) years.""" return (y2+3)/4 - (y1+3)/4 def weekday(year, month, day): ! """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31).""" secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0)) tuple = localtime(secs) --- 55,64 ---- def leapdays(y1, y2): """Return number of leap years in range [y1, y2). ! Assume y1 <= y2 and no funny (non-leap century) years.""" return (y2+3)/4 - (y1+3)/4 def weekday(year, month, day): ! """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), ! day (1-31).""" secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0)) tuple = localtime(secs) *************** *** 48,64 **** def monthrange(year, month): ! """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.""" ! if not 1 <= month <= 12: raise ValueError, 'bad month number' day1 = weekday(year, month, 1) ndays = mdays[month] + (month == February and isleap(year)) return day1, ndays ! def _monthcalendar(year, month): """Return a matrix representing a month's calendar. ! Each row represents a week; days outside this month are zero.""" day1, ndays = monthrange(year, month) rows = [] r7 = range(7) ! day = 1 - day1 while day <= ndays: row = [0, 0, 0, 0, 0, 0, 0] --- 66,84 ---- def monthrange(year, month): ! """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for ! year, month.""" ! if not 1 <= month <= 12: ! raise ValueError, 'bad month number' day1 = weekday(year, month, 1) ndays = mdays[month] + (month == February and isleap(year)) return day1, ndays ! def monthcalendar(year, month): """Return a matrix representing a month's calendar. ! Each row represents a week; days outside this month are zero.""" day1, ndays = monthrange(year, month) rows = [] r7 = range(7) ! day = (_firstweekday - day1 + 6) % 7 - 5 # for leading 0's in first week while day <= ndays: row = [0, 0, 0, 0, 0, 0, 0] *************** *** 69,153 **** return rows - _mc_cache = {} - def monthcalendar(year, month): - """Caching interface to _monthcalendar.""" - key = (year, month) - if _mc_cache.has_key(key): - return _mc_cache[key] - else: - _mc_cache[key] = ret = _monthcalendar(year, month) - return ret - def _center(str, width): """Center a string in a field.""" n = width - len(str) ! if n <= 0: return str return ' '*((n+1)/2) + str + ' '*((n)/2) - - # XXX The following code knows that print separates items with space! ! def prweek(week, width): """Print a single week (no newline).""" ! for day in week: ! if day == 0: s = '' ! else: s = `day` ! print _center(s, width), def weekheader(width): """Return a header for a week.""" ! str = '' ! if width >= 9: names = day_name ! else: names = day_abbr ! for i in range(7): ! if str: str = str + ' ' ! str = str + _center(names[i%7][:width], width) ! return str ! def prmonth(year, month, w = 0, l = 0): """Print a month's calendar.""" w = max(2, w) l = max(1, l) ! print _center(month_name[month] + ' ' + `year`, 7*(w+1) - 1), ! print '\n'*l, ! print weekheader(w), ! print '\n'*l, ! for week in monthcalendar(year, month): ! prweek(week, w) ! print '\n'*l, ! # Spacing of month columns _colwidth = 7*3 - 1 # Amount printed by prweek() ! _spacing = ' '*4 # Spaces between columns ! def format3c(a, b, c): ! """3-column formatting for year calendars""" ! print _center(a, _colwidth), ! print _spacing, ! print _center(b, _colwidth), ! print _spacing, ! print _center(c, _colwidth) ! def prcal(year): """Print a year's calendar.""" ! header = weekheader(2) ! format3c('', `year`, '') for q in range(January, January+12, 3): ! print ! format3c(month_name[q], month_name[q+1], month_name[q+2]) ! format3c(header, header, header) data = [] height = 0 ! for month in range(q, q+3): ! cal = monthcalendar(year, month) ! if len(cal) > height: height = len(cal) data.append(cal) for i in range(height): for cal in data: if i >= len(cal): ! print ' '*_colwidth, else: ! prweek(cal[i], 2) ! print _spacing, ! print EPOCH = 1970 --- 89,188 ---- return rows def _center(str, width): """Center a string in a field.""" n = width - len(str) ! if n <= 0: ! return str return ' '*((n+1)/2) + str + ' '*((n)/2) ! def prweek(theweek, width): """Print a single week (no newline).""" ! print week(theweek, width), + def week(theweek, width): + """Returns a single week in a string (no newline).""" + days = [] + for day in theweek: + if day == 0: + s = '' + else: + s = '%2i' % day # right-align single-digit days + days.append(_center(s, width)) + return ' '.join(days) + def weekheader(width): """Return a header for a week.""" ! if width >= 9: ! names = day_name ! else: ! names = day_abbr ! days = [] ! for i in range(_firstweekday, _firstweekday + 7): ! days.append(_center(names[i%7][:width], width)) ! return ' '.join(days) ! def prmonth(theyear, themonth, w=0, l=0): """Print a month's calendar.""" + print month(theyear, themonth, w, l), + + def month(theyear, themonth, w=0, l=0): + """Return a month's calendar string (multi-line).""" w = max(2, w) l = max(1, l) ! s = (_center(month_name[themonth] + ' ' + `theyear`, ! 7 * (w + 1) - 1).rstrip() + ! '\n' * l + weekheader(w).rstrip() + '\n' * l) ! for aweek in monthcalendar(theyear, themonth): ! s = s + week(aweek, w).rstrip() + '\n' * l ! return s[:-l] + '\n' ! # Spacing of month columns for 3-column year calendar _colwidth = 7*3 - 1 # Amount printed by prweek() ! _spacing = 6 # Number of spaces between columns ! def format3c(a, b, c, colwidth=_colwidth, spacing=_spacing): ! """Prints 3-column formatting for year calendars""" ! print format3cstring(a, b, c, colwidth, spacing) ! ! def format3cstring(a, b, c, colwidth=_colwidth, spacing=_spacing): ! """Returns a string formatted from 3 strings, centered within 3 columns.""" ! return (_center(a, colwidth) + ' ' * spacing + _center(b, colwidth) + ! ' ' * spacing + _center(c, colwidth)) ! def prcal(year, w=0, l=0, c=_spacing): """Print a year's calendar.""" ! print calendar(year, w, l, c), ! ! def calendar(year, w=0, l=0, c=_spacing): ! """Returns a year's calendar as a multi-line string.""" ! w = max(2, w) ! l = max(1, l) ! c = max(2, c) ! colwidth = (w + 1) * 7 - 1 ! s = _center(`year`, colwidth * 3 + c * 2).rstrip() + '\n' * l ! header = weekheader(w) ! header = format3cstring(header, header, header, colwidth, c).rstrip() for q in range(January, January+12, 3): ! s = (s + '\n' * l + ! format3cstring(month_name[q], month_name[q+1], month_name[q+2], ! colwidth, c).rstrip() + ! '\n' * l + header + '\n' * l) data = [] height = 0 ! for amonth in range(q, q + 3): ! cal = monthcalendar(year, amonth) ! if len(cal) > height: ! height = len(cal) data.append(cal) for i in range(height): + weeks = [] for cal in data: if i >= len(cal): ! weeks.append('') else: ! weeks.append(week(cal[i], w)) ! s = s + format3cstring(weeks[0], weeks[1], weeks[2], ! colwidth, c).rstrip() + '\n' * l ! return s[:-l] + '\n' EPOCH = 1970 From python-dev@python.org Wed Aug 30 15:02:27 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 30 Aug 2000 07:02:27 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcalendar.tex,1.7,1.8 Message-ID: <200008301402.HAA25827@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25767 Modified Files: libcalendar.tex Log Message: doc changes to parallel changes to calendar.py module Index: libcalendar.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcalendar.tex,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** libcalendar.tex 2000/04/03 20:13:52 1.7 --- libcalendar.tex 2000/08/30 14:02:25 1.8 *************** *** 10,14 **** This module allows you to output calendars like the \UNIX{} \program{cal} program, and provides additional useful functions ! related to the calendar. \begin{funcdesc}{isleap}{year} --- 10,34 ---- This module allows you to output calendars like the \UNIX{} \program{cal} program, and provides additional useful functions ! related to the calendar. By default, these calendars have Monday as ! the first day of the week, and Sunday as the last (the European ! convention). Use \function{setfirstweekday()} to set the first day of the ! week to Sunday (6) or to any other weekday. ! ! \begin{funcdesc}{setfirstweekday}{weekday} ! Sets the weekday (\code{0} is Monday, \code{6} is Sunday) to start ! each week. The values \constant{MONDAY}, \constant{TUESDAY}, ! \constant{WEDNESDAY}, \constant{THURSDAY}, \constant{FRIDAY}, ! \constant{SATURDAY}, and \constant{SUNDAY} are provided for ! convenience. For example, to set the first weekday to Sunday: ! ! \begin{verbatim} ! import calendar ! calendar.setfirstweekday(calendar.SUNDAY) ! \end{verbatim} ! \end{funcdesc} ! ! \begin{funcdesc}{firstweekday}{} ! Returns the current setting for the weekday to start each week. ! \end{funcdesc} \begin{funcdesc}{isleap}{year} *************** *** 16,22 **** \end{funcdesc} ! \begin{funcdesc}{leapdays}{year1, year2} ! Return the number of leap years in the range ! [\var{year1}\ldots\var{year2}]. \end{funcdesc} --- 36,42 ---- \end{funcdesc} ! \begin{funcdesc}{leapdays}{y1, y2} ! Returns the number of leap years in the range ! [\var{y1}\ldots\var{y2}]. \end{funcdesc} *************** *** 35,49 **** Returns a matrix representing a month's calendar. Each row represents a week; days outside of the month a represented by zeros. \end{funcdesc} ! \begin{funcdesc}{prmonth}{year, month\optional{, width\optional{, length}}} ! Prints a month's calendar. If \var{width} is provided, it specifies ! the width of the columns that the numbers are centered in. If ! \var{length} is given, it specifies the number of lines that each ! week will use. \end{funcdesc} ! \begin{funcdesc}{prcal}{year} ! Prints the calendar for the year \var{year}. \end{funcdesc} --- 55,84 ---- Returns a matrix representing a month's calendar. Each row represents a week; days outside of the month a represented by zeros. + Each week begins with Monday unless set by \function{setfirstweekday()}. + \end{funcdesc} + + \begin{funcdesc}{prmonth}{theyear, themonth\optional{, w\optional{, l}}} + Prints a month's calendar as returned by \function{month()}. + \end{funcdesc} + + \begin{funcdesc}{month}{theyear, themonth\optional{, w\optional{, l}}} + Returns a month's calendar in a multi-line string. If \var{w} is + provided, it specifies the width of the date columns, which are + centered. If \var{l} is given, it specifies the number of lines that + each week will use. Depends on the first weekday as set by + \function{setfirstweekday()}. \end{funcdesc} ! \begin{funcdesc}{prcal}{year\optional{, w\optional{, l\optional{c}}}} ! Prints the calendar for an entire year as returned by ! \function{calendar()}. \end{funcdesc} ! \begin{funcdesc}{calendar}{year\optional{, w\optional{, l\optional{c}}}} ! Returns a 3-column calendar for an entire year as a multi-line string. ! Optional parameters \var{w}, \var{l}, and \var{c} are for date column ! width, lines per week, and number of spaces between month columns, ! respectively. Depends on the first weekday as set by ! \function{setfirstweekday()}. \end{funcdesc} From python-dev@python.org Wed Aug 30 15:33:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 07:33:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/mac libmacui.tex,1.14,1.15 Message-ID: <200008301433.HAA23524@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/mac In directory slayer.i.sourceforge.net:/tmp/cvs-serv23471/mac Modified Files: libmacui.tex Log Message: Remove the reference to stdwin. The comment was still true, but no longer meaningful to a new user, since stdwin is long gone. Index: libmacui.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/mac/libmacui.tex,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** libmacui.tex 1999/03/02 16:36:37 1.14 --- libmacui.tex 2000/08/30 14:33:02 1.15 *************** *** 8,17 **** The \module{EasyDialogs} module contains some simple dialogs for ! the Macintosh, modelled after the ! \module{stdwin}\refbimodindex{stdwin} dialogs with similar names. All ! routines have an optional parameter \var{id} with which you can ! override the DLOG resource used for the dialog, as long as the item ! numbers correspond. See the source for details. ! The \module{EasyDialogs} module defines the following functions: --- 8,15 ---- The \module{EasyDialogs} module contains some simple dialogs for ! the Macintosh. All routines have an optional parameter \var{id} with ! which you can override the DLOG resource used for the dialog, as long ! as the item numbers correspond. See the source for details. ! The \module{EasyDialogs} module defines the following functions: From python-dev@python.org Wed Aug 30 16:02:16 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 08:02:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html style.css,1.6,1.7 Message-ID: <200008301502.IAA16289@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv16224/html Modified Files: style.css Log Message: Push a little more here to avoid style information in the generation scripts as much as possible. Index: style.css =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/style.css,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** style.css 2000/08/29 21:57:34 1.6 --- style.css 2000/08/30 15:02:13 1.7 *************** *** 52,55 **** --- 52,58 ---- .file { font-family: avantgarde, sans-serif } + .tableheader td { background-color: #99ccff; } + .tableheader th { background-color: #99ccff; } + .refcount-info { font-style: italic } .refcount-info .value { font-weight: bold; From python-dev@python.org Wed Aug 30 16:53:53 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 30 Aug 2000 08:53:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.97,2.98 Message-ID: <200008301553.IAA07925@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv7811 Modified Files: object.c Log Message: PyOS_CheckStack() returns 1 when failing, not -1. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.97 retrieving revision 2.98 diff -C2 -r2.97 -r2.98 *** object.c 2000/08/22 21:52:51 2.97 --- object.c 2000/08/30 15:53:50 2.98 *************** *** 403,407 **** #if defined(USE_STACKCHECK) ! if (PyOS_CheckStack() < 0) { PyErr_SetString(PyExc_MemoryError, "Stack overflow"); return -1; --- 403,407 ---- #if defined(USE_STACKCHECK) ! if (PyOS_CheckStack()) { PyErr_SetString(PyExc_MemoryError, "Stack overflow"); return -1; From python-dev@python.org Wed Aug 30 18:16:30 2000 From: python-dev@python.org (Greg Ward) Date: Wed, 30 Aug 2000 10:16:30 -0700 Subject: [Python-checkins] CVS: distutils/distutils fancy_getopt.py,1.15,1.16 Message-ID: <200008301716.KAA01474@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv1435 Modified Files: fancy_getopt.py Log Message: Added docstring for 'wrap()' function. Index: fancy_getopt.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/fancy_getopt.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** fancy_getopt.py 2000/08/07 00:45:51 1.15 --- fancy_getopt.py 2000/08/30 17:16:27 1.16 *************** *** 413,416 **** --- 413,421 ---- def wrap_text (text, width): + """wrap_text(text : string, width : int) -> [string] + + Split 'text' into multiple lines of no more than 'width' characters + each, and return the list of strings that results. + """ if text is None: From python-dev@python.org Wed Aug 30 18:32:27 2000 From: python-dev@python.org (Greg Ward) Date: Wed, 30 Aug 2000 10:32:27 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.38,1.39 Message-ID: <200008301732.KAA06764@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv6731 Modified Files: msvccompiler.py Log Message: Add ".cxx" to the list of known C++ extensions. Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** msvccompiler.py 2000/08/04 01:29:27 1.38 --- msvccompiler.py 2000/08/30 17:32:24 1.39 *************** *** 178,182 **** # Private class data (need to distinguish C from C++ source for compiler) _c_extensions = ['.c'] ! _cpp_extensions = ['.cc','.cpp'] # Needed for the filename generation methods provided by the --- 178,182 ---- # Private class data (need to distinguish C from C++ source for compiler) _c_extensions = ['.c'] ! _cpp_extensions = ['.cc', '.cpp', '.cxx'] # Needed for the filename generation methods provided by the From python-dev@python.org Wed Aug 30 21:25:05 2000 From: python-dev@python.org (Paul Prescod) Date: Wed, 30 Aug 2000 13:25:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.198,2.199 Message-ID: <200008302025.NAA18460@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv17839 Modified Files: ceval.c Log Message: Better error message with UnboundLocalError Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.198 retrieving revision 2.199 diff -C2 -r2.198 -r2.199 *** ceval.c 2000/08/29 04:56:13 2.198 --- ceval.c 2000/08/30 20:25:01 2.199 *************** *** 74,78 **** --- 74,83 ---- static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *); static void reset_exc_info(PyThreadState *); + static void format_exc_check_arg(PyObject *, char *, PyObject *); + #define NAME_ERROR_MSG \ + "There is no variable named '%s'" + #define UNBOUNDLOCAL_ERROR_MSG \ + "Local variable '%.200s' referenced before assignment" /* Dynamic execution profile */ *************** *** 1397,1401 **** } if ((err = PyDict_DelItem(x, w)) != 0) ! PyErr_SetObject(PyExc_NameError, w); break; --- 1402,1407 ---- } if ((err = PyDict_DelItem(x, w)) != 0) ! format_exc_check_arg(PyExc_NameError, ! NAME_ERROR_MSG ,w); break; *************** *** 1472,1476 **** w = GETNAMEV(oparg); if ((err = PyDict_DelItem(f->f_globals, w)) != 0) ! PyErr_SetObject(PyExc_NameError, w); break; --- 1478,1483 ---- w = GETNAMEV(oparg); if ((err = PyDict_DelItem(f->f_globals, w)) != 0) ! format_exc_check_arg( ! PyExc_NameError, NAME_ERROR_MSG ,w); break; *************** *** 1494,1499 **** x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! PyErr_SetObject( ! PyExc_NameError, w); break; } --- 1501,1507 ---- x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! format_exc_check_arg( ! PyExc_NameError, ! NAME_ERROR_MSG ,w); break; } *************** *** 1510,1514 **** x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! PyErr_SetObject(PyExc_NameError, w); break; } --- 1518,1524 ---- x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! format_exc_check_arg( ! PyExc_NameError, ! NAME_ERROR_MSG ,w); break; } *************** *** 1521,1527 **** x = GETLOCAL(oparg); if (x == NULL) { ! PyErr_SetObject(PyExc_UnboundLocalError, ! PyTuple_GetItem(co->co_varnames, ! oparg)); break; } --- 1531,1539 ---- x = GETLOCAL(oparg); if (x == NULL) { ! format_exc_check_arg( ! PyExc_UnboundLocalError, ! UNBOUNDLOCAL_ERROR_MSG, ! PyTuple_GetItem(co->co_varnames, oparg) ! ); break; } *************** *** 1539,1545 **** x = GETLOCAL(oparg); if (x == NULL) { ! PyErr_SetObject(PyExc_UnboundLocalError, ! PyTuple_GetItem(co->co_varnames, ! oparg)); break; } --- 1551,1559 ---- x = GETLOCAL(oparg); if (x == NULL) { ! format_exc_check_arg( ! PyExc_UnboundLocalError, ! UNBOUNDLOCAL_ERROR_MSG, ! PyTuple_GetItem(co->co_varnames, oparg) ! ); break; } *************** *** 3064,3067 **** --- 3078,3095 ---- } + static void + format_exc_check_arg(PyObject *exc, char *format_str, PyObject *obj) + { + char *obj_str; + + if (!obj) + return; + + obj_str = PyString_AsString(obj); + if (!obj_str) + return; + + PyErr_Format(exc, format_str, obj_str); + } #ifdef DYNAMIC_EXECUTION_PROFILE From python-dev@python.org Wed Aug 30 23:29:51 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 30 Aug 2000 15:29:51 -0700 Subject: [Python-checkins] CVS: python/dist/src acconfig.h,1.35,1.36 config.h.in,2.69,2.70 configure,1.139,1.140 configure.in,1.150,1.151 Message-ID: <200008302229.PAA23195@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv22625 Modified Files: acconfig.h config.h.in configure configure.in Log Message: adds support for --with-pydebug configure option Index: acconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/acconfig.h,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** acconfig.h 2000/08/23 21:33:04 1.35 --- acconfig.h 2000/08/30 22:29:47 1.36 *************** *** 152,155 **** --- 152,158 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to build an interpreter with many run-time checks */ + #undef Py_DEBUG + /* The number of bytes in an off_t. */ #undef SIZEOF_OFF_T Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.69 retrieving revision 2.70 diff -C2 -r2.69 -r2.70 *** config.h.in 2000/08/25 01:14:08 2.69 --- config.h.in 2000/08/30 22:29:47 2.70 *************** *** 211,214 **** --- 211,217 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to build an interpreter with many run-time checks */ + #undef Py_DEBUG + /* The number of bytes in an off_t. */ #undef SIZEOF_OFF_T *************** *** 267,273 **** #undef SIZEOF_VOID_P - /* Define if you have the _getpty function. */ - #undef HAVE__GETPTY - /* Define if you have the alarm function. */ #undef HAVE_ALARM --- 270,273 ---- *************** *** 356,359 **** --- 356,362 ---- /* Define if you have the getpid function. */ #undef HAVE_GETPID + + /* Define if you have the _getpty function. */ + #undef HAVE__GETPTY /* Define if you have the getpwent function. */ Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.139 retrieving revision 1.140 diff -C2 -r1.139 -r1.140 *** configure 2000/08/29 15:06:47 1.139 --- configure 2000/08/30 22:29:47 1.140 *************** *** 4,8 **** # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # --- 4,8 ---- # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.14.1 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. [...4611 lines suppressed...] ! echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) --- 5952,5956 ---- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ! echo "$CONFIG_STATUS generated by autoconf version 2.14.1" exit 0 ;; -help | --help | --hel | --he | --h) *************** *** 6207,6210 **** chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 --- 6253,6256 ---- chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.150 retrieving revision 1.151 diff -C2 -r1.150 -r1.151 *** configure.in 2000/08/29 15:06:49 1.150 --- configure.in 2000/08/30 22:29:48 1.151 *************** *** 659,662 **** --- 659,672 ---- AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX + # Check for --with-pydebug + AC_MSG_CHECKING(for --with-pydebug) + AC_ARG_WITH(pydebug, + [ --with-pydebug build with Py_DEBUG defined], [ + if test "$withval" != no + then AC_DEFINE(Py_DEBUG) AC_MSG_RESULT(yes) + else AC_MSG_RESULT(no) + fi], + [AC_MSG_RESULT(no)]) + # checks for system dependent C++ extensions support case "$ac_sys_system" in From python-dev@python.org Thu Aug 31 01:31:10 2000 From: python-dev@python.org (Greg Ward) Date: Wed, 30 Aug 2000 17:31:10 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.39,1.40 Message-ID: <200008310031.RAA20053@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv19958 Modified Files: msvccompiler.py Log Message: Add /GX to 'compile_options'. This is definitely needed for C++ source; according to the MS docs it enables exception-handling, and (according to Alex Martelli ) is needed to compile without getting warnings from standard C++ library headers. Apparently it doesn't cause any problems with C code, so I haven't bothered conditionalizing the use of /GX. Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** msvccompiler.py 2000/08/30 17:32:24 1.39 --- msvccompiler.py 2000/08/31 00:31:07 1.40 *************** *** 220,225 **** self.preprocess_options = None ! self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3' ] ! self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/Z7', '/D_DEBUG'] self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] --- 220,226 ---- self.preprocess_options = None ! self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ] ! self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX', ! '/Z7', '/D_DEBUG'] self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] From python-dev@python.org Thu Aug 31 03:35:53 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:35:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd4 - New directory Message-ID: <200008310235.TAA23597@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd4 In directory slayer.i.sourceforge.net:/tmp/cvs-serv23517/Lib/plat-freebsd4 Log Message: Directory /cvsroot/python/python/dist/src/Lib/plat-freebsd4 added to the repository From python-dev@python.org Thu Aug 31 03:35:53 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:35:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd5 - New directory Message-ID: <200008310235.TAA23600@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd5 In directory slayer.i.sourceforge.net:/tmp/cvs-serv23517/Lib/plat-freebsd5 Log Message: Directory /cvsroot/python/python/dist/src/Lib/plat-freebsd5 added to the repository From python-dev@python.org Thu Aug 31 03:42:16 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd4 FCNTL.py,NONE,1.1 IN.py,NONE,1.1 SOCKET.py,NONE,1.1 TERMIOS.py,NONE,1.1 regen,NONE,1.1 Message-ID: <200008310242.TAA27355@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd4 In directory slayer.i.sourceforge.net:/tmp/cvs-serv26872/Lib/plat-freebsd4 Added Files: FCNTL.py IN.py SOCKET.py TERMIOS.py regen Log Message: tg@freebsd.org close SF patch #101354 --- NEW FILE --- # Generated by h2py from /usr/include/fcntl.h # Included from sys/types.h # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/inttypes.h # Included from machine/ansi.h _BSD_CLOCKID_T_ = int _BSD_PTRDIFF_T_ = int _BSD_SSIZE_T_ = int _BSD_TIME_T_ = long _BSD_TIMER_T_ = int _BSD_CT_RUNE_T_ = int _BSD_PID_T_ = int _BSD_CLK_TCK_ = 128 _BSD_CLOCKS_PER_SEC_ = 128 # Included from machine/types.h def major(x): return ((int)(((u_int)(x) >> 8)&0xff)) def minor(x): return ((int)((x)&0xffff00ff)) # Included from machine/endian.h _QUAD_HIGHWORD = 1 _QUAD_LOWWORD = 0 LITTLE_ENDIAN = 1234 BIG_ENDIAN = 4321 PDP_ENDIAN = 3412 BYTE_ORDER = LITTLE_ENDIAN def __word_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_word(x): return \ ntohl = __byte_swap_long ntohs = __byte_swap_word htonl = __byte_swap_long htons = __byte_swap_word NBBY = 8 FD_SETSIZE = 1024 O_RDONLY = 0x0000 O_WRONLY = 0x0001 O_RDWR = 0x0002 O_ACCMODE = 0x0003 FREAD = 0x0001 FWRITE = 0x0002 O_NONBLOCK = 0x0004 O_APPEND = 0x0008 O_SHLOCK = 0x0010 O_EXLOCK = 0x0020 O_ASYNC = 0x0040 O_FSYNC = 0x0080 O_NOFOLLOW = 0x0100 O_CREAT = 0x0200 O_TRUNC = 0x0400 O_EXCL = 0x0800 FMARK = 0x1000 FDEFER = 0x2000 FHASLOCK = 0x4000 O_NOCTTY = 0x8000 def FFLAGS(oflags): return ((oflags) + 1) def OFLAGS(fflags): return ((fflags) - 1) FAPPEND = O_APPEND FASYNC = O_ASYNC FFSYNC = O_FSYNC FNONBLOCK = O_NONBLOCK FNDELAY = O_NONBLOCK O_NDELAY = O_NONBLOCK F_DUPFD = 0 F_GETFD = 1 F_SETFD = 2 F_GETFL = 3 F_SETFL = 4 F_GETOWN = 5 F_SETOWN = 6 F_GETLK = 7 F_SETLK = 8 F_SETLKW = 9 FD_CLOEXEC = 1 F_RDLCK = 1 F_UNLCK = 2 F_WRLCK = 3 F_WAIT = 0x010 F_FLOCK = 0x020 F_POSIX = 0x040 LOCK_SH = 0x01 LOCK_EX = 0x02 LOCK_NB = 0x04 LOCK_UN = 0x08 --- NEW FILE --- # Generated by h2py from /usr/include/netinet/in.h IPPROTO_IP = 0 IPPROTO_HOPOPTS = 0 IPPROTO_ICMP = 1 IPPROTO_IGMP = 2 IPPROTO_GGP = 3 IPPROTO_IPV4 = 4 IPPROTO_IPIP = IPPROTO_IPV4 IPPROTO_TCP = 6 IPPROTO_ST = 7 IPPROTO_EGP = 8 IPPROTO_PIGP = 9 IPPROTO_RCCMON = 10 IPPROTO_NVPII = 11 IPPROTO_PUP = 12 IPPROTO_ARGUS = 13 IPPROTO_EMCON = 14 IPPROTO_XNET = 15 IPPROTO_CHAOS = 16 IPPROTO_UDP = 17 IPPROTO_MUX = 18 IPPROTO_MEAS = 19 IPPROTO_HMP = 20 IPPROTO_PRM = 21 IPPROTO_IDP = 22 IPPROTO_TRUNK1 = 23 IPPROTO_TRUNK2 = 24 IPPROTO_LEAF1 = 25 IPPROTO_LEAF2 = 26 IPPROTO_RDP = 27 IPPROTO_IRTP = 28 IPPROTO_TP = 29 IPPROTO_BLT = 30 IPPROTO_NSP = 31 IPPROTO_INP = 32 IPPROTO_SEP = 33 IPPROTO_3PC = 34 IPPROTO_IDPR = 35 IPPROTO_XTP = 36 IPPROTO_DDP = 37 IPPROTO_CMTP = 38 IPPROTO_TPXX = 39 IPPROTO_IL = 40 IPPROTO_IPV6 = 41 IPPROTO_SDRP = 42 IPPROTO_ROUTING = 43 IPPROTO_FRAGMENT = 44 IPPROTO_IDRP = 45 IPPROTO_RSVP = 46 IPPROTO_GRE = 47 IPPROTO_MHRP = 48 IPPROTO_BHA = 49 IPPROTO_ESP = 50 IPPROTO_AH = 51 IPPROTO_INLSP = 52 IPPROTO_SWIPE = 53 IPPROTO_NHRP = 54 IPPROTO_ICMPV6 = 58 IPPROTO_NONE = 59 IPPROTO_DSTOPTS = 60 IPPROTO_AHIP = 61 IPPROTO_CFTP = 62 IPPROTO_HELLO = 63 IPPROTO_SATEXPAK = 64 IPPROTO_KRYPTOLAN = 65 IPPROTO_RVD = 66 IPPROTO_IPPC = 67 IPPROTO_ADFS = 68 IPPROTO_SATMON = 69 IPPROTO_VISA = 70 IPPROTO_IPCV = 71 IPPROTO_CPNX = 72 IPPROTO_CPHB = 73 IPPROTO_WSN = 74 IPPROTO_PVP = 75 IPPROTO_BRSATMON = 76 IPPROTO_ND = 77 IPPROTO_WBMON = 78 IPPROTO_WBEXPAK = 79 IPPROTO_EON = 80 IPPROTO_VMTP = 81 IPPROTO_SVMTP = 82 IPPROTO_VINES = 83 IPPROTO_TTP = 84 IPPROTO_IGP = 85 IPPROTO_DGP = 86 IPPROTO_TCF = 87 IPPROTO_IGRP = 88 IPPROTO_OSPFIGP = 89 IPPROTO_SRPC = 90 IPPROTO_LARP = 91 IPPROTO_MTP = 92 IPPROTO_AX25 = 93 IPPROTO_IPEIP = 94 IPPROTO_MICP = 95 IPPROTO_SCCSP = 96 IPPROTO_ETHERIP = 97 IPPROTO_ENCAP = 98 IPPROTO_APES = 99 IPPROTO_GMTP = 100 IPPROTO_IPCOMP = 108 IPPROTO_PIM = 103 IPPROTO_PGM = 113 IPPROTO_DIVERT = 254 IPPROTO_RAW = 255 IPPROTO_MAX = 256 IPPROTO_DONE = 257 IPPORT_RESERVED = 1024 IPPORT_USERRESERVED = 5000 IPPORT_HIFIRSTAUTO = 49152 IPPORT_HILASTAUTO = 65535 IPPORT_RESERVEDSTART = 600 def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) IN_CLASSA_NET = 0xff000000 IN_CLASSA_NSHIFT = 24 IN_CLASSA_HOST = 0x00ffffff IN_CLASSA_MAX = 128 def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) IN_CLASSB_NET = 0xffff0000 IN_CLASSB_NSHIFT = 16 IN_CLASSB_HOST = 0x0000ffff IN_CLASSB_MAX = 65536 def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) IN_CLASSC_NET = 0xffffff00 IN_CLASSC_NSHIFT = 8 IN_CLASSC_HOST = 0x000000ff def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) IN_CLASSD_NET = 0xf0000000 IN_CLASSD_NSHIFT = 28 IN_CLASSD_HOST = 0x0fffffff def IN_MULTICAST(i): return IN_CLASSD(i) def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) INADDR_NONE = 0xffffffff IN_LOOPBACKNET = 127 INET_ADDRSTRLEN = 16 IP_OPTIONS = 1 IP_HDRINCL = 2 IP_TOS = 3 IP_TTL = 4 IP_RECVOPTS = 5 IP_RECVRETOPTS = 6 IP_RECVDSTADDR = 7 IP_RETOPTS = 8 IP_MULTICAST_IF = 9 IP_MULTICAST_TTL = 10 IP_MULTICAST_LOOP = 11 IP_ADD_MEMBERSHIP = 12 IP_DROP_MEMBERSHIP = 13 IP_MULTICAST_VIF = 14 IP_RSVP_ON = 15 IP_RSVP_OFF = 16 IP_RSVP_VIF_ON = 17 IP_RSVP_VIF_OFF = 18 IP_PORTRANGE = 19 IP_RECVIF = 20 IP_IPSEC_POLICY = 21 IP_FAITH = 22 IP_FW_ADD = 50 IP_FW_DEL = 51 IP_FW_FLUSH = 52 IP_FW_ZERO = 53 IP_FW_GET = 54 IP_FW_RESETLOG = 55 IP_DUMMYNET_CONFIGURE = 60 IP_DUMMYNET_DEL = 61 IP_DUMMYNET_FLUSH = 62 IP_DUMMYNET_GET = 64 IP_DEFAULT_MULTICAST_TTL = 1 IP_DEFAULT_MULTICAST_LOOP = 1 IP_MAX_MEMBERSHIPS = 20 IP_PORTRANGE_DEFAULT = 0 IP_PORTRANGE_HIGH = 1 IP_PORTRANGE_LOW = 2 IPPROTO_MAXID = (IPPROTO_AH + 1) IPCTL_FORWARDING = 1 IPCTL_SENDREDIRECTS = 2 IPCTL_DEFTTL = 3 IPCTL_DEFMTU = 4 IPCTL_RTEXPIRE = 5 IPCTL_RTMINEXPIRE = 6 IPCTL_RTMAXCACHE = 7 IPCTL_SOURCEROUTE = 8 IPCTL_DIRECTEDBROADCAST = 9 IPCTL_INTRQMAXLEN = 10 IPCTL_INTRQDROPS = 11 IPCTL_STATS = 12 IPCTL_ACCEPTSOURCEROUTE = 13 IPCTL_FASTFORWARDING = 14 IPCTL_KEEPFAITH = 15 IPCTL_GIF_TTL = 16 IPCTL_MAXID = 17 # Included from netinet6/in6.h # Included from sys/queue.h def SLIST_HEAD_INITIALIZER(head): return \ def SLIST_ENTRY(type): return \ def STAILQ_HEAD_INITIALIZER(head): return \ def STAILQ_ENTRY(type): return \ def LIST_HEAD_INITIALIZER(head): return \ def LIST_ENTRY(type): return \ def TAILQ_HEAD_INITIALIZER(head): return \ def TAILQ_ENTRY(type): return \ def CIRCLEQ_ENTRY(type): return \ __KAME_VERSION = "20000701/FreeBSD-current" IPV6PORT_RESERVED = 1024 IPV6PORT_ANONMIN = 49152 IPV6PORT_ANONMAX = 65535 IPV6PORT_RESERVEDMIN = 600 IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) INET6_ADDRSTRLEN = 46 IPV6_ADDR_INT32_ONE = 1 IPV6_ADDR_INT32_TWO = 2 IPV6_ADDR_INT32_MNL = 0xff010000 IPV6_ADDR_INT32_MLL = 0xff020000 IPV6_ADDR_INT32_SMP = 0x0000ffff IPV6_ADDR_INT16_ULL = 0xfe80 IPV6_ADDR_INT16_USL = 0xfec0 IPV6_ADDR_INT16_MLL = 0xff02 IPV6_ADDR_INT32_ONE = 0x01000000 IPV6_ADDR_INT32_TWO = 0x02000000 IPV6_ADDR_INT32_MNL = 0x000001ff IPV6_ADDR_INT32_MLL = 0x000002ff IPV6_ADDR_INT32_SMP = 0xffff0000 IPV6_ADDR_INT16_ULL = 0x80fe IPV6_ADDR_INT16_USL = 0xc0fe IPV6_ADDR_INT16_MLL = 0x02ff def IN6_IS_ADDR_UNSPECIFIED(a): return \ def IN6_IS_ADDR_LOOPBACK(a): return \ def IN6_IS_ADDR_V4COMPAT(a): return \ def IN6_IS_ADDR_V4MAPPED(a): return \ IPV6_ADDR_SCOPE_NODELOCAL = 0x01 IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 IPV6_ADDR_SCOPE_SITELOCAL = 0x05 IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 IPV6_ADDR_SCOPE_GLOBAL = 0x0e __IPV6_ADDR_SCOPE_NODELOCAL = 0x01 __IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 __IPV6_ADDR_SCOPE_SITELOCAL = 0x05 __IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 __IPV6_ADDR_SCOPE_GLOBAL = 0x0e def IN6_IS_ADDR_LINKLOCAL(a): return \ def IN6_IS_ADDR_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_SCOPE_LINKLOCAL(a): return \ IPV6_OPTIONS = 1 IPV6_RECVOPTS = 5 IPV6_RECVRETOPTS = 6 IPV6_RECVDSTADDR = 7 IPV6_RETOPTS = 8 IPV6_SOCKOPT_RESERVED1 = 3 IPV6_UNICAST_HOPS = 4 IPV6_MULTICAST_IF = 9 IPV6_MULTICAST_HOPS = 10 IPV6_MULTICAST_LOOP = 11 IPV6_JOIN_GROUP = 12 IPV6_LEAVE_GROUP = 13 IPV6_PORTRANGE = 14 ICMP6_FILTER = 18 IPV6_PKTINFO = 19 IPV6_HOPLIMIT = 20 IPV6_NEXTHOP = 21 IPV6_HOPOPTS = 22 IPV6_DSTOPTS = 23 IPV6_RTHDR = 24 IPV6_PKTOPTIONS = 25 IPV6_CHECKSUM = 26 IPV6_BINDV6ONLY = 27 IPV6_IPSEC_POLICY = 28 IPV6_FAITH = 29 IPV6_FW_ADD = 30 IPV6_FW_DEL = 31 IPV6_FW_FLUSH = 32 IPV6_FW_ZERO = 33 IPV6_FW_GET = 34 IPV6_RTHDR_LOOSE = 0 IPV6_RTHDR_STRICT = 1 IPV6_RTHDR_TYPE_0 = 0 IPV6_DEFAULT_MULTICAST_HOPS = 1 IPV6_DEFAULT_MULTICAST_LOOP = 1 IPV6_PORTRANGE_DEFAULT = 0 IPV6_PORTRANGE_HIGH = 1 IPV6_PORTRANGE_LOW = 2 IPV6PROTO_MAXID = (IPPROTO_PIM + 1) IPV6CTL_FORWARDING = 1 IPV6CTL_SENDREDIRECTS = 2 IPV6CTL_DEFHLIM = 3 IPV6CTL_DEFMTU = 4 IPV6CTL_FORWSRCRT = 5 IPV6CTL_STATS = 6 IPV6CTL_MRTSTATS = 7 IPV6CTL_MRTPROTO = 8 IPV6CTL_MAXFRAGPACKETS = 9 IPV6CTL_SOURCECHECK = 10 IPV6CTL_SOURCECHECK_LOGINT = 11 IPV6CTL_ACCEPT_RTADV = 12 IPV6CTL_KEEPFAITH = 13 IPV6CTL_LOG_INTERVAL = 14 IPV6CTL_HDRNESTLIMIT = 15 IPV6CTL_DAD_COUNT = 16 IPV6CTL_AUTO_FLOWLABEL = 17 IPV6CTL_DEFMCASTHLIM = 18 IPV6CTL_GIF_HLIM = 19 IPV6CTL_KAME_VERSION = 20 IPV6CTL_USE_DEPRECATED = 21 IPV6CTL_RR_PRUNE = 22 IPV6CTL_MAPPED_ADDR = 23 IPV6CTL_BINDV6ONLY = 24 IPV6CTL_RTEXPIRE = 25 IPV6CTL_RTMINEXPIRE = 26 IPV6CTL_RTMAXCACHE = 27 IPV6CTL_MAXID = 28 --- NEW FILE --- # Generated by h2py from /usr/include/sys/socket.h SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 SO_DEBUG = 0x0001 SO_ACCEPTCONN = 0x0002 SO_REUSEADDR = 0x0004 SO_KEEPALIVE = 0x0008 SO_DONTROUTE = 0x0010 SO_BROADCAST = 0x0020 SO_USELOOPBACK = 0x0040 SO_LINGER = 0x0080 SO_OOBINLINE = 0x0100 SO_REUSEPORT = 0x0200 SO_TIMESTAMP = 0x0400 SO_ACCEPTFILTER = 0x1000 SO_SNDBUF = 0x1001 SO_RCVBUF = 0x1002 SO_SNDLOWAT = 0x1003 SO_RCVLOWAT = 0x1004 SO_SNDTIMEO = 0x1005 SO_RCVTIMEO = 0x1006 SO_ERROR = 0x1007 SO_TYPE = 0x1008 SOL_SOCKET = 0xffff AF_UNSPEC = 0 AF_LOCAL = 1 AF_UNIX = AF_LOCAL AF_INET = 2 AF_IMPLINK = 3 AF_PUP = 4 AF_CHAOS = 5 AF_NS = 6 AF_ISO = 7 AF_OSI = AF_ISO AF_ECMA = 8 AF_DATAKIT = 9 AF_CCITT = 10 AF_SNA = 11 AF_DECnet = 12 AF_DLI = 13 AF_LAT = 14 AF_HYLINK = 15 AF_APPLETALK = 16 AF_ROUTE = 17 AF_LINK = 18 pseudo_AF_XTP = 19 AF_COIP = 20 AF_CNT = 21 pseudo_AF_RTIP = 22 AF_IPX = 23 AF_SIP = 24 pseudo_AF_PIP = 25 AF_ISDN = 26 AF_E164 = AF_ISDN pseudo_AF_KEY = 27 AF_INET6 = 28 AF_NATM = 29 AF_ATM = 30 pseudo_AF_HDRCMPLT = 31 AF_NETGRAPH = 32 AF_MAX = 33 SOCK_MAXADDRLEN = 255 _SS_MAXSIZE = 128 PF_UNSPEC = AF_UNSPEC PF_LOCAL = AF_LOCAL PF_UNIX = PF_LOCAL PF_INET = AF_INET PF_IMPLINK = AF_IMPLINK PF_PUP = AF_PUP PF_CHAOS = AF_CHAOS PF_NS = AF_NS PF_ISO = AF_ISO PF_OSI = AF_ISO PF_ECMA = AF_ECMA PF_DATAKIT = AF_DATAKIT PF_CCITT = AF_CCITT PF_SNA = AF_SNA PF_DECnet = AF_DECnet PF_DLI = AF_DLI PF_LAT = AF_LAT PF_HYLINK = AF_HYLINK PF_APPLETALK = AF_APPLETALK PF_ROUTE = AF_ROUTE PF_LINK = AF_LINK PF_XTP = pseudo_AF_XTP PF_COIP = AF_COIP PF_CNT = AF_CNT PF_SIP = AF_SIP PF_IPX = AF_IPX PF_RTIP = pseudo_AF_RTIP PF_PIP = pseudo_AF_PIP PF_ISDN = AF_ISDN PF_KEY = pseudo_AF_KEY PF_INET6 = AF_INET6 PF_NATM = AF_NATM PF_ATM = AF_ATM PF_NETGRAPH = AF_NETGRAPH PF_MAX = AF_MAX NET_MAXID = AF_MAX NET_RT_DUMP = 1 NET_RT_FLAGS = 2 NET_RT_IFLIST = 3 NET_RT_MAXID = 4 SOMAXCONN = 128 MSG_OOB = 0x1 MSG_PEEK = 0x2 MSG_DONTROUTE = 0x4 MSG_EOR = 0x8 MSG_TRUNC = 0x10 MSG_CTRUNC = 0x20 MSG_WAITALL = 0x40 MSG_DONTWAIT = 0x80 MSG_EOF = 0x100 MSG_COMPAT = 0x8000 CMGROUP_MAX = 16 SCM_RIGHTS = 0x01 SCM_TIMESTAMP = 0x02 SCM_CREDS = 0x03 SHUT_RD = 0 SHUT_WR = 1 SHUT_RDWR = 2 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) --- NEW FILE --- # Generated by h2py from /usr/include/termios.h VEOF = 0 VEOL = 1 VEOL2 = 2 VERASE = 3 VWERASE = 4 VKILL = 5 VREPRINT = 6 VINTR = 8 VQUIT = 9 VSUSP = 10 VDSUSP = 11 VSTART = 12 VSTOP = 13 VLNEXT = 14 VDISCARD = 15 VMIN = 16 VTIME = 17 VSTATUS = 18 NCCS = 20 _POSIX_VDISABLE = 0xff IGNBRK = 0x00000001 BRKINT = 0x00000002 IGNPAR = 0x00000004 PARMRK = 0x00000008 INPCK = 0x00000010 ISTRIP = 0x00000020 INLCR = 0x00000040 IGNCR = 0x00000080 ICRNL = 0x00000100 IXON = 0x00000200 IXOFF = 0x00000400 IXANY = 0x00000800 IMAXBEL = 0x00002000 OPOST = 0x00000001 ONLCR = 0x00000002 OXTABS = 0x00000004 ONOEOT = 0x00000008 CIGNORE = 0x00000001 CSIZE = 0x00000300 CS5 = 0x00000000 CS6 = 0x00000100 CS7 = 0x00000200 CS8 = 0x00000300 CSTOPB = 0x00000400 CREAD = 0x00000800 PARENB = 0x00001000 PARODD = 0x00002000 HUPCL = 0x00004000 CLOCAL = 0x00008000 CCTS_OFLOW = 0x00010000 CRTS_IFLOW = 0x00020000 CDTR_IFLOW = 0x00040000 CDSR_OFLOW = 0x00080000 CCAR_OFLOW = 0x00100000 MDMBUF = 0x00100000 ECHOKE = 0x00000001 ECHOE = 0x00000002 ECHOK = 0x00000004 ECHO = 0x00000008 ECHONL = 0x00000010 ECHOPRT = 0x00000020 ECHOCTL = 0x00000040 ISIG = 0x00000080 ICANON = 0x00000100 ALTWERASE = 0x00000200 IEXTEN = 0x00000400 EXTPROC = 0x00000800 TOSTOP = 0x00400000 FLUSHO = 0x00800000 NOKERNINFO = 0x02000000 PENDIN = 0x20000000 NOFLSH = 0x80000000 TCSANOW = 0 TCSADRAIN = 1 TCSAFLUSH = 2 TCSASOFT = 0x10 B0 = 0 B50 = 50 B75 = 75 B110 = 110 B134 = 134 B150 = 150 B200 = 200 B300 = 300 B600 = 600 B1200 = 1200 B1800 = 1800 B2400 = 2400 B4800 = 4800 B9600 = 9600 B19200 = 19200 B38400 = 38400 B7200 = 7200 B14400 = 14400 B28800 = 28800 B57600 = 57600 B76800 = 76800 B115200 = 115200 B230400 = 230400 EXTA = 19200 EXTB = 38400 TCIFLUSH = 1 TCOFLUSH = 2 TCIOFLUSH = 3 TCOOFF = 1 TCOON = 2 TCIOFF = 3 TCION = 4 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/ttycom.h # Included from sys/ioccom.h IOCPARM_MASK = 0x1fff def IOCPARM_LEN(x): return (((x) >> 16) & IOCPARM_MASK) def IOCBASECMD(x): return ((x) & ~(IOCPARM_MASK << 16)) def IOCGROUP(x): return (((x) >> 8) & 0xff) IOC_VOID = 0x20000000 IOC_OUT = 0x40000000 IOC_IN = 0x80000000 IOC_INOUT = (IOC_IN|IOC_OUT) IOC_DIRMASK = 0xe0000000 TIOCM_LE = 0001 TIOCM_DTR = 0002 TIOCM_RTS = 0004 TIOCM_ST = 0010 TIOCM_SR = 0020 TIOCM_CTS = 0040 TIOCM_CAR = 0100 TIOCM_CD = TIOCM_CAR TIOCM_RNG = 0200 TIOCM_RI = TIOCM_RNG TIOCM_DSR = 0400 TIOCPKT_DATA = 0x00 TIOCPKT_FLUSHREAD = 0x01 TIOCPKT_FLUSHWRITE = 0x02 TIOCPKT_STOP = 0x04 TIOCPKT_START = 0x08 TIOCPKT_NOSTOP = 0x10 TIOCPKT_DOSTOP = 0x20 TIOCPKT_IOCTL = 0x40 def UIOCCMD(n): return _IO(ord('u'), n) TTYDISC = 0 SLIPDISC = 4 PPPDISC = 5 NETGRAPHDISC = 6 # Included from sys/ttydefaults.h TTYDEF_IFLAG = (BRKINT | ICRNL | IMAXBEL | IXON | IXANY) TTYDEF_OFLAG = (OPOST | ONLCR) TTYDEF_LFLAG = (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) TTYDEF_CFLAG = (CREAD | CS8 | HUPCL) TTYDEF_SPEED = (B9600) def CTRL(x): return (x&037) CEOF = CTRL(ord('d')) CEOL = 0xff CERASE = 0177 CINTR = CTRL(ord('c')) CSTATUS = CTRL(ord('t')) CKILL = CTRL(ord('u')) CMIN = 1 CQUIT = 034 CSUSP = CTRL(ord('z')) CTIME = 0 CDSUSP = CTRL(ord('y')) CSTART = CTRL(ord('q')) CSTOP = CTRL(ord('s')) CLNEXT = CTRL(ord('v')) CDISCARD = CTRL(ord('o')) CWERASE = CTRL(ord('w')) CREPRINT = CTRL(ord('r')) CEOT = CEOF CBRK = CEOL CRPRNT = CREPRINT CFLUSH = CDISCARD --- NEW FILE --- #! /bin/sh set -v python ../../Tools/scripts/h2py.py /usr/include/fcntl.h python ../../Tools/scripts/h2py.py /usr/include/sys/socket.h python ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h python ../../Tools/scripts/h2py.py /usr/include/termios.h From python-dev@python.org Thu Aug 31 03:42:17 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:42:17 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd5 FCNTL.py,NONE,1.1 IN.py,NONE,1.1 SOCKET.py,NONE,1.1 TERMIOS.py,NONE,1.1 regen,NONE,1.1 Message-ID: <200008310242.TAA27356@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd5 In directory slayer.i.sourceforge.net:/tmp/cvs-serv26872/Lib/plat-freebsd5 Added Files: FCNTL.py IN.py SOCKET.py TERMIOS.py regen Log Message: tg@freebsd.org close SF patch #101354 --- NEW FILE --- # Generated by h2py from /usr/include/fcntl.h # Included from sys/types.h # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/inttypes.h # Included from machine/ansi.h _BSD_CLOCKID_T_ = int _BSD_PTRDIFF_T_ = int _BSD_SSIZE_T_ = int _BSD_TIME_T_ = long _BSD_TIMER_T_ = int _BSD_CT_RUNE_T_ = int _BSD_PID_T_ = int _BSD_CLK_TCK_ = 128 _BSD_CLOCKS_PER_SEC_ = 128 # Included from machine/types.h def major(x): return ((int)(((u_int)(x) >> 8)&0xff)) def minor(x): return ((int)((x)&0xffff00ff)) # Included from machine/endian.h _QUAD_HIGHWORD = 1 _QUAD_LOWWORD = 0 LITTLE_ENDIAN = 1234 BIG_ENDIAN = 4321 PDP_ENDIAN = 3412 BYTE_ORDER = LITTLE_ENDIAN def __word_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_word(x): return \ ntohl = __byte_swap_long ntohs = __byte_swap_word htonl = __byte_swap_long htons = __byte_swap_word NBBY = 8 FD_SETSIZE = 1024 O_RDONLY = 0x0000 O_WRONLY = 0x0001 O_RDWR = 0x0002 O_ACCMODE = 0x0003 FREAD = 0x0001 FWRITE = 0x0002 O_NONBLOCK = 0x0004 O_APPEND = 0x0008 O_SHLOCK = 0x0010 O_EXLOCK = 0x0020 O_ASYNC = 0x0040 O_FSYNC = 0x0080 O_NOFOLLOW = 0x0100 O_CREAT = 0x0200 O_TRUNC = 0x0400 O_EXCL = 0x0800 FMARK = 0x1000 FDEFER = 0x2000 FHASLOCK = 0x4000 O_NOCTTY = 0x8000 def FFLAGS(oflags): return ((oflags) + 1) def OFLAGS(fflags): return ((fflags) - 1) FAPPEND = O_APPEND FASYNC = O_ASYNC FFSYNC = O_FSYNC FNONBLOCK = O_NONBLOCK FNDELAY = O_NONBLOCK O_NDELAY = O_NONBLOCK FPOSIXSHM = O_NOFOLLOW F_DUPFD = 0 F_GETFD = 1 F_SETFD = 2 F_GETFL = 3 F_SETFL = 4 F_GETOWN = 5 F_SETOWN = 6 F_GETLK = 7 F_SETLK = 8 F_SETLKW = 9 FD_CLOEXEC = 1 F_RDLCK = 1 F_UNLCK = 2 F_WRLCK = 3 F_WAIT = 0x010 F_FLOCK = 0x020 F_POSIX = 0x040 LOCK_SH = 0x01 LOCK_EX = 0x02 LOCK_NB = 0x04 LOCK_UN = 0x08 --- NEW FILE --- # Generated by h2py from /usr/include/netinet/in.h IPPROTO_IP = 0 IPPROTO_HOPOPTS = 0 IPPROTO_ICMP = 1 IPPROTO_IGMP = 2 IPPROTO_GGP = 3 IPPROTO_IPV4 = 4 IPPROTO_IPIP = IPPROTO_IPV4 IPPROTO_TCP = 6 IPPROTO_ST = 7 IPPROTO_EGP = 8 IPPROTO_PIGP = 9 IPPROTO_RCCMON = 10 IPPROTO_NVPII = 11 IPPROTO_PUP = 12 IPPROTO_ARGUS = 13 IPPROTO_EMCON = 14 IPPROTO_XNET = 15 IPPROTO_CHAOS = 16 IPPROTO_UDP = 17 IPPROTO_MUX = 18 IPPROTO_MEAS = 19 IPPROTO_HMP = 20 IPPROTO_PRM = 21 IPPROTO_IDP = 22 IPPROTO_TRUNK1 = 23 IPPROTO_TRUNK2 = 24 IPPROTO_LEAF1 = 25 IPPROTO_LEAF2 = 26 IPPROTO_RDP = 27 IPPROTO_IRTP = 28 IPPROTO_TP = 29 IPPROTO_BLT = 30 IPPROTO_NSP = 31 IPPROTO_INP = 32 IPPROTO_SEP = 33 IPPROTO_3PC = 34 IPPROTO_IDPR = 35 IPPROTO_XTP = 36 IPPROTO_DDP = 37 IPPROTO_CMTP = 38 IPPROTO_TPXX = 39 IPPROTO_IL = 40 IPPROTO_IPV6 = 41 IPPROTO_SDRP = 42 IPPROTO_ROUTING = 43 IPPROTO_FRAGMENT = 44 IPPROTO_IDRP = 45 IPPROTO_RSVP = 46 IPPROTO_GRE = 47 IPPROTO_MHRP = 48 IPPROTO_BHA = 49 IPPROTO_ESP = 50 IPPROTO_AH = 51 IPPROTO_INLSP = 52 IPPROTO_SWIPE = 53 IPPROTO_NHRP = 54 IPPROTO_ICMPV6 = 58 IPPROTO_NONE = 59 IPPROTO_DSTOPTS = 60 IPPROTO_AHIP = 61 IPPROTO_CFTP = 62 IPPROTO_HELLO = 63 IPPROTO_SATEXPAK = 64 IPPROTO_KRYPTOLAN = 65 IPPROTO_RVD = 66 IPPROTO_IPPC = 67 IPPROTO_ADFS = 68 IPPROTO_SATMON = 69 IPPROTO_VISA = 70 IPPROTO_IPCV = 71 IPPROTO_CPNX = 72 IPPROTO_CPHB = 73 IPPROTO_WSN = 74 IPPROTO_PVP = 75 IPPROTO_BRSATMON = 76 IPPROTO_ND = 77 IPPROTO_WBMON = 78 IPPROTO_WBEXPAK = 79 IPPROTO_EON = 80 IPPROTO_VMTP = 81 IPPROTO_SVMTP = 82 IPPROTO_VINES = 83 IPPROTO_TTP = 84 IPPROTO_IGP = 85 IPPROTO_DGP = 86 IPPROTO_TCF = 87 IPPROTO_IGRP = 88 IPPROTO_OSPFIGP = 89 IPPROTO_SRPC = 90 IPPROTO_LARP = 91 IPPROTO_MTP = 92 IPPROTO_AX25 = 93 IPPROTO_IPEIP = 94 IPPROTO_MICP = 95 IPPROTO_SCCSP = 96 IPPROTO_ETHERIP = 97 IPPROTO_ENCAP = 98 IPPROTO_APES = 99 IPPROTO_GMTP = 100 IPPROTO_IPCOMP = 108 IPPROTO_PIM = 103 IPPROTO_PGM = 113 IPPROTO_DIVERT = 254 IPPROTO_RAW = 255 IPPROTO_MAX = 256 IPPROTO_DONE = 257 IPPORT_RESERVED = 1024 IPPORT_USERRESERVED = 5000 IPPORT_HIFIRSTAUTO = 49152 IPPORT_HILASTAUTO = 65535 IPPORT_RESERVEDSTART = 600 def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) IN_CLASSA_NET = 0xff000000 IN_CLASSA_NSHIFT = 24 IN_CLASSA_HOST = 0x00ffffff IN_CLASSA_MAX = 128 def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) IN_CLASSB_NET = 0xffff0000 IN_CLASSB_NSHIFT = 16 IN_CLASSB_HOST = 0x0000ffff IN_CLASSB_MAX = 65536 def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) IN_CLASSC_NET = 0xffffff00 IN_CLASSC_NSHIFT = 8 IN_CLASSC_HOST = 0x000000ff def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) IN_CLASSD_NET = 0xf0000000 IN_CLASSD_NSHIFT = 28 IN_CLASSD_HOST = 0x0fffffff def IN_MULTICAST(i): return IN_CLASSD(i) def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) INADDR_NONE = 0xffffffff IN_LOOPBACKNET = 127 INET_ADDRSTRLEN = 16 IP_OPTIONS = 1 IP_HDRINCL = 2 IP_TOS = 3 IP_TTL = 4 IP_RECVOPTS = 5 IP_RECVRETOPTS = 6 IP_RECVDSTADDR = 7 IP_RETOPTS = 8 IP_MULTICAST_IF = 9 IP_MULTICAST_TTL = 10 IP_MULTICAST_LOOP = 11 IP_ADD_MEMBERSHIP = 12 IP_DROP_MEMBERSHIP = 13 IP_MULTICAST_VIF = 14 IP_RSVP_ON = 15 IP_RSVP_OFF = 16 IP_RSVP_VIF_ON = 17 IP_RSVP_VIF_OFF = 18 IP_PORTRANGE = 19 IP_RECVIF = 20 IP_IPSEC_POLICY = 21 IP_FAITH = 22 IP_FW_ADD = 50 IP_FW_DEL = 51 IP_FW_FLUSH = 52 IP_FW_ZERO = 53 IP_FW_GET = 54 IP_FW_RESETLOG = 55 IP_DUMMYNET_CONFIGURE = 60 IP_DUMMYNET_DEL = 61 IP_DUMMYNET_FLUSH = 62 IP_DUMMYNET_GET = 64 IP_DEFAULT_MULTICAST_TTL = 1 IP_DEFAULT_MULTICAST_LOOP = 1 IP_MAX_MEMBERSHIPS = 20 IP_PORTRANGE_DEFAULT = 0 IP_PORTRANGE_HIGH = 1 IP_PORTRANGE_LOW = 2 IPPROTO_MAXID = (IPPROTO_AH + 1) IPCTL_FORWARDING = 1 IPCTL_SENDREDIRECTS = 2 IPCTL_DEFTTL = 3 IPCTL_DEFMTU = 4 IPCTL_RTEXPIRE = 5 IPCTL_RTMINEXPIRE = 6 IPCTL_RTMAXCACHE = 7 IPCTL_SOURCEROUTE = 8 IPCTL_DIRECTEDBROADCAST = 9 IPCTL_INTRQMAXLEN = 10 IPCTL_INTRQDROPS = 11 IPCTL_STATS = 12 IPCTL_ACCEPTSOURCEROUTE = 13 IPCTL_FASTFORWARDING = 14 IPCTL_KEEPFAITH = 15 IPCTL_GIF_TTL = 16 IPCTL_MAXID = 17 # Included from netinet6/in6.h # Included from sys/queue.h def SLIST_HEAD_INITIALIZER(head): return \ def SLIST_ENTRY(type): return \ def STAILQ_HEAD_INITIALIZER(head): return \ def STAILQ_ENTRY(type): return \ def LIST_HEAD_INITIALIZER(head): return \ def LIST_ENTRY(type): return \ def TAILQ_HEAD_INITIALIZER(head): return \ def TAILQ_ENTRY(type): return \ def CIRCLEQ_ENTRY(type): return \ __KAME_VERSION = "20000701/FreeBSD-current" IPV6PORT_RESERVED = 1024 IPV6PORT_ANONMIN = 49152 IPV6PORT_ANONMAX = 65535 IPV6PORT_RESERVEDMIN = 600 IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) INET6_ADDRSTRLEN = 46 IPV6_ADDR_INT32_ONE = 1 IPV6_ADDR_INT32_TWO = 2 IPV6_ADDR_INT32_MNL = 0xff010000 IPV6_ADDR_INT32_MLL = 0xff020000 IPV6_ADDR_INT32_SMP = 0x0000ffff IPV6_ADDR_INT16_ULL = 0xfe80 IPV6_ADDR_INT16_USL = 0xfec0 IPV6_ADDR_INT16_MLL = 0xff02 IPV6_ADDR_INT32_ONE = 0x01000000 IPV6_ADDR_INT32_TWO = 0x02000000 IPV6_ADDR_INT32_MNL = 0x000001ff IPV6_ADDR_INT32_MLL = 0x000002ff IPV6_ADDR_INT32_SMP = 0xffff0000 IPV6_ADDR_INT16_ULL = 0x80fe IPV6_ADDR_INT16_USL = 0xc0fe IPV6_ADDR_INT16_MLL = 0x02ff def IN6_IS_ADDR_UNSPECIFIED(a): return \ def IN6_IS_ADDR_LOOPBACK(a): return \ def IN6_IS_ADDR_V4COMPAT(a): return \ def IN6_IS_ADDR_V4MAPPED(a): return \ IPV6_ADDR_SCOPE_NODELOCAL = 0x01 IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 IPV6_ADDR_SCOPE_SITELOCAL = 0x05 IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 IPV6_ADDR_SCOPE_GLOBAL = 0x0e __IPV6_ADDR_SCOPE_NODELOCAL = 0x01 __IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 __IPV6_ADDR_SCOPE_SITELOCAL = 0x05 __IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 __IPV6_ADDR_SCOPE_GLOBAL = 0x0e def IN6_IS_ADDR_LINKLOCAL(a): return \ def IN6_IS_ADDR_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_SCOPE_LINKLOCAL(a): return \ IPV6_OPTIONS = 1 IPV6_RECVOPTS = 5 IPV6_RECVRETOPTS = 6 IPV6_RECVDSTADDR = 7 IPV6_RETOPTS = 8 IPV6_SOCKOPT_RESERVED1 = 3 IPV6_UNICAST_HOPS = 4 IPV6_MULTICAST_IF = 9 IPV6_MULTICAST_HOPS = 10 IPV6_MULTICAST_LOOP = 11 IPV6_JOIN_GROUP = 12 IPV6_LEAVE_GROUP = 13 IPV6_PORTRANGE = 14 ICMP6_FILTER = 18 IPV6_PKTINFO = 19 IPV6_HOPLIMIT = 20 IPV6_NEXTHOP = 21 IPV6_HOPOPTS = 22 IPV6_DSTOPTS = 23 IPV6_RTHDR = 24 IPV6_PKTOPTIONS = 25 IPV6_CHECKSUM = 26 IPV6_BINDV6ONLY = 27 IPV6_IPSEC_POLICY = 28 IPV6_FAITH = 29 IPV6_FW_ADD = 30 IPV6_FW_DEL = 31 IPV6_FW_FLUSH = 32 IPV6_FW_ZERO = 33 IPV6_FW_GET = 34 IPV6_RTHDR_LOOSE = 0 IPV6_RTHDR_STRICT = 1 IPV6_RTHDR_TYPE_0 = 0 IPV6_DEFAULT_MULTICAST_HOPS = 1 IPV6_DEFAULT_MULTICAST_LOOP = 1 IPV6_PORTRANGE_DEFAULT = 0 IPV6_PORTRANGE_HIGH = 1 IPV6_PORTRANGE_LOW = 2 IPV6PROTO_MAXID = (IPPROTO_PIM + 1) IPV6CTL_FORWARDING = 1 IPV6CTL_SENDREDIRECTS = 2 IPV6CTL_DEFHLIM = 3 IPV6CTL_DEFMTU = 4 IPV6CTL_FORWSRCRT = 5 IPV6CTL_STATS = 6 IPV6CTL_MRTSTATS = 7 IPV6CTL_MRTPROTO = 8 IPV6CTL_MAXFRAGPACKETS = 9 IPV6CTL_SOURCECHECK = 10 IPV6CTL_SOURCECHECK_LOGINT = 11 IPV6CTL_ACCEPT_RTADV = 12 IPV6CTL_KEEPFAITH = 13 IPV6CTL_LOG_INTERVAL = 14 IPV6CTL_HDRNESTLIMIT = 15 IPV6CTL_DAD_COUNT = 16 IPV6CTL_AUTO_FLOWLABEL = 17 IPV6CTL_DEFMCASTHLIM = 18 IPV6CTL_GIF_HLIM = 19 IPV6CTL_KAME_VERSION = 20 IPV6CTL_USE_DEPRECATED = 21 IPV6CTL_RR_PRUNE = 22 IPV6CTL_MAPPED_ADDR = 23 IPV6CTL_BINDV6ONLY = 24 IPV6CTL_RTEXPIRE = 25 IPV6CTL_RTMINEXPIRE = 26 IPV6CTL_RTMAXCACHE = 27 IPV6CTL_MAXID = 28 --- NEW FILE --- # Generated by h2py from /usr/include/sys/socket.h SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 SO_DEBUG = 0x0001 SO_ACCEPTCONN = 0x0002 SO_REUSEADDR = 0x0004 SO_KEEPALIVE = 0x0008 SO_DONTROUTE = 0x0010 SO_BROADCAST = 0x0020 SO_USELOOPBACK = 0x0040 SO_LINGER = 0x0080 SO_OOBINLINE = 0x0100 SO_REUSEPORT = 0x0200 SO_TIMESTAMP = 0x0400 SO_ACCEPTFILTER = 0x1000 SO_SNDBUF = 0x1001 SO_RCVBUF = 0x1002 SO_SNDLOWAT = 0x1003 SO_RCVLOWAT = 0x1004 SO_SNDTIMEO = 0x1005 SO_RCVTIMEO = 0x1006 SO_ERROR = 0x1007 SO_TYPE = 0x1008 SOL_SOCKET = 0xffff AF_UNSPEC = 0 AF_LOCAL = 1 AF_UNIX = AF_LOCAL AF_INET = 2 AF_IMPLINK = 3 AF_PUP = 4 AF_CHAOS = 5 AF_NS = 6 AF_ISO = 7 AF_OSI = AF_ISO AF_ECMA = 8 AF_DATAKIT = 9 AF_CCITT = 10 AF_SNA = 11 AF_DECnet = 12 AF_DLI = 13 AF_LAT = 14 AF_HYLINK = 15 AF_APPLETALK = 16 AF_ROUTE = 17 AF_LINK = 18 pseudo_AF_XTP = 19 AF_COIP = 20 AF_CNT = 21 pseudo_AF_RTIP = 22 AF_IPX = 23 AF_SIP = 24 pseudo_AF_PIP = 25 AF_ISDN = 26 AF_E164 = AF_ISDN pseudo_AF_KEY = 27 AF_INET6 = 28 AF_NATM = 29 AF_ATM = 30 pseudo_AF_HDRCMPLT = 31 AF_NETGRAPH = 32 AF_MAX = 33 SOCK_MAXADDRLEN = 255 _SS_MAXSIZE = 128 PF_UNSPEC = AF_UNSPEC PF_LOCAL = AF_LOCAL PF_UNIX = PF_LOCAL PF_INET = AF_INET PF_IMPLINK = AF_IMPLINK PF_PUP = AF_PUP PF_CHAOS = AF_CHAOS PF_NS = AF_NS PF_ISO = AF_ISO PF_OSI = AF_ISO PF_ECMA = AF_ECMA PF_DATAKIT = AF_DATAKIT PF_CCITT = AF_CCITT PF_SNA = AF_SNA PF_DECnet = AF_DECnet PF_DLI = AF_DLI PF_LAT = AF_LAT PF_HYLINK = AF_HYLINK PF_APPLETALK = AF_APPLETALK PF_ROUTE = AF_ROUTE PF_LINK = AF_LINK PF_XTP = pseudo_AF_XTP PF_COIP = AF_COIP PF_CNT = AF_CNT PF_SIP = AF_SIP PF_IPX = AF_IPX PF_RTIP = pseudo_AF_RTIP PF_PIP = pseudo_AF_PIP PF_ISDN = AF_ISDN PF_KEY = pseudo_AF_KEY PF_INET6 = AF_INET6 PF_NATM = AF_NATM PF_ATM = AF_ATM PF_NETGRAPH = AF_NETGRAPH PF_MAX = AF_MAX NET_MAXID = AF_MAX NET_RT_DUMP = 1 NET_RT_FLAGS = 2 NET_RT_IFLIST = 3 NET_RT_MAXID = 4 SOMAXCONN = 128 MSG_OOB = 0x1 MSG_PEEK = 0x2 MSG_DONTROUTE = 0x4 MSG_EOR = 0x8 MSG_TRUNC = 0x10 MSG_CTRUNC = 0x20 MSG_WAITALL = 0x40 MSG_DONTWAIT = 0x80 MSG_EOF = 0x100 MSG_COMPAT = 0x8000 CMGROUP_MAX = 16 SCM_RIGHTS = 0x01 SCM_TIMESTAMP = 0x02 SCM_CREDS = 0x03 SHUT_RD = 0 SHUT_WR = 1 SHUT_RDWR = 2 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) --- NEW FILE --- # Generated by h2py from /usr/include/termios.h VEOF = 0 VEOL = 1 VEOL2 = 2 VERASE = 3 VWERASE = 4 VKILL = 5 VREPRINT = 6 VINTR = 8 VQUIT = 9 VSUSP = 10 VDSUSP = 11 VSTART = 12 VSTOP = 13 VLNEXT = 14 VDISCARD = 15 VMIN = 16 VTIME = 17 VSTATUS = 18 NCCS = 20 _POSIX_VDISABLE = 0xff IGNBRK = 0x00000001 BRKINT = 0x00000002 IGNPAR = 0x00000004 PARMRK = 0x00000008 INPCK = 0x00000010 ISTRIP = 0x00000020 INLCR = 0x00000040 IGNCR = 0x00000080 ICRNL = 0x00000100 IXON = 0x00000200 IXOFF = 0x00000400 IXANY = 0x00000800 IMAXBEL = 0x00002000 OPOST = 0x00000001 ONLCR = 0x00000002 OXTABS = 0x00000004 ONOEOT = 0x00000008 CIGNORE = 0x00000001 CSIZE = 0x00000300 CS5 = 0x00000000 CS6 = 0x00000100 CS7 = 0x00000200 CS8 = 0x00000300 CSTOPB = 0x00000400 CREAD = 0x00000800 PARENB = 0x00001000 PARODD = 0x00002000 HUPCL = 0x00004000 CLOCAL = 0x00008000 CCTS_OFLOW = 0x00010000 CRTS_IFLOW = 0x00020000 CDTR_IFLOW = 0x00040000 CDSR_OFLOW = 0x00080000 CCAR_OFLOW = 0x00100000 MDMBUF = 0x00100000 ECHOKE = 0x00000001 ECHOE = 0x00000002 ECHOK = 0x00000004 ECHO = 0x00000008 ECHONL = 0x00000010 ECHOPRT = 0x00000020 ECHOCTL = 0x00000040 ISIG = 0x00000080 ICANON = 0x00000100 ALTWERASE = 0x00000200 IEXTEN = 0x00000400 EXTPROC = 0x00000800 TOSTOP = 0x00400000 FLUSHO = 0x00800000 NOKERNINFO = 0x02000000 PENDIN = 0x20000000 NOFLSH = 0x80000000 TCSANOW = 0 TCSADRAIN = 1 TCSAFLUSH = 2 TCSASOFT = 0x10 B0 = 0 B50 = 50 B75 = 75 B110 = 110 B134 = 134 B150 = 150 B200 = 200 B300 = 300 B600 = 600 B1200 = 1200 B1800 = 1800 B2400 = 2400 B4800 = 4800 B9600 = 9600 B19200 = 19200 B38400 = 38400 B7200 = 7200 B14400 = 14400 B28800 = 28800 B57600 = 57600 B76800 = 76800 B115200 = 115200 B230400 = 230400 EXTA = 19200 EXTB = 38400 TCIFLUSH = 1 TCOFLUSH = 2 TCIOFLUSH = 3 TCOOFF = 1 TCOON = 2 TCIOFF = 3 TCION = 4 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/ttycom.h # Included from sys/ioccom.h IOCPARM_MASK = 0x1fff def IOCPARM_LEN(x): return (((x) >> 16) & IOCPARM_MASK) def IOCBASECMD(x): return ((x) & ~(IOCPARM_MASK << 16)) def IOCGROUP(x): return (((x) >> 8) & 0xff) IOC_VOID = 0x20000000 IOC_OUT = 0x40000000 IOC_IN = 0x80000000 IOC_INOUT = (IOC_IN|IOC_OUT) IOC_DIRMASK = 0xe0000000 TIOCM_LE = 0001 TIOCM_DTR = 0002 TIOCM_RTS = 0004 TIOCM_ST = 0010 TIOCM_SR = 0020 TIOCM_CTS = 0040 TIOCM_CAR = 0100 TIOCM_CD = TIOCM_CAR TIOCM_RNG = 0200 TIOCM_RI = TIOCM_RNG TIOCM_DSR = 0400 TIOCPKT_DATA = 0x00 TIOCPKT_FLUSHREAD = 0x01 TIOCPKT_FLUSHWRITE = 0x02 TIOCPKT_STOP = 0x04 TIOCPKT_START = 0x08 TIOCPKT_NOSTOP = 0x10 TIOCPKT_DOSTOP = 0x20 TIOCPKT_IOCTL = 0x40 def UIOCCMD(n): return _IO(ord('u'), n) TTYDISC = 0 SLIPDISC = 4 PPPDISC = 5 NETGRAPHDISC = 6 # Included from sys/ttydefaults.h TTYDEF_IFLAG = (BRKINT | ICRNL | IMAXBEL | IXON | IXANY) TTYDEF_OFLAG = (OPOST | ONLCR) TTYDEF_LFLAG = (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) TTYDEF_CFLAG = (CREAD | CS8 | HUPCL) TTYDEF_SPEED = (B9600) def CTRL(x): return (x&037) CEOF = CTRL(ord('d')) CEOL = 0xff CERASE = 0177 CINTR = CTRL(ord('c')) CSTATUS = CTRL(ord('t')) CKILL = CTRL(ord('u')) CMIN = 1 CQUIT = 034 CSUSP = CTRL(ord('z')) CTIME = 0 CDSUSP = CTRL(ord('y')) CSTART = CTRL(ord('q')) CSTOP = CTRL(ord('s')) CLNEXT = CTRL(ord('v')) CDISCARD = CTRL(ord('o')) CWERASE = CTRL(ord('w')) CREPRINT = CTRL(ord('r')) CEOT = CEOF CBRK = CEOL CRPRNT = CREPRINT CFLUSH = CDISCARD --- NEW FILE --- #! /bin/sh set -v python ../../Tools/scripts/h2py.py /usr/include/fcntl.h python ../../Tools/scripts/h2py.py /usr/include/sys/socket.h python ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h python ../../Tools/scripts/h2py.py /usr/include/termios.h From python-dev@python.org Thu Aug 31 06:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules audioop.c,1.42,1.43 Message-ID: <200008310507.WAA09048@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv9041/Modules Modified Files: audioop.c Log Message: Remove one compiler warning found with -Wstrict-prototypes. Index: audioop.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/audioop.c,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** audioop.c 2000/08/04 15:53:06 1.42 --- audioop.c 2000/08/31 05:07:19 1.43 *************** *** 41,45 **** } while ( 0 ) ! static unsigned char st_linear_to_ulaw( /* int sample */ ); /* --- 41,45 ---- } while ( 0 ) ! static unsigned char st_linear_to_ulaw(int sample); /* From python-dev@python.org Thu Aug 31 06:08:02 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:08:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc TODO,1.31,1.32 Message-ID: <200008310508.WAA09076@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv9065/Doc Modified Files: TODO Log Message: Added note about documenting the SSL support in the socket module. Index: TODO =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/TODO,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** TODO 2000/08/24 00:50:27 1.31 --- TODO 2000/08/31 05:08:00 1.32 *************** *** 62,65 **** --- 62,67 ---- support and new classes. (Greg, this is yours!) + * SSL support in the socket module is not documented. + Tutorial -------- From python-dev@python.org Thu Aug 31 06:09:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:09:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include token.h,2.16,2.17 Message-ID: <200008310509.WAA09244@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv9237/Include Modified Files: token.h Log Message: Added prototype for PyToken_ThreeChars(), to remove compiler warning in Parser/grammar.c. Index: token.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/token.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** token.h 2000/08/24 20:09:45 2.16 --- token.h 2000/08/31 05:09:57 2.17 *************** *** 82,85 **** --- 82,86 ---- extern DL_IMPORT(int) PyToken_OneChar(int); extern DL_IMPORT(int) PyToken_TwoChars(int, int); + extern DL_IMPORT(int) PyToken_ThreeChars(int, int, int); #ifdef __cplusplus From python-dev@python.org Thu Aug 31 06:11:51 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:11:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser Makefile.in,2.10,2.11 Message-ID: <200008310511.WAA09368@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv9361/Parser Modified Files: Makefile.in Log Message: Added a little more dependency information. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/Makefile.in,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** Makefile.in 1998/10/07 22:51:55 2.10 --- Makefile.in 2000/08/31 05:11:48 2.11 *************** *** 93,97 **** bitset.o: bitset.c firstsets.o: firstsets.c ! grammar.o: grammar.c metagrammar.o: metagrammar.c pgen.o: pgen.c --- 93,97 ---- bitset.o: bitset.c firstsets.o: firstsets.c ! grammar.o: grammar.c assert.h ../Include/token.h ../Include/grammar.h metagrammar.o: metagrammar.c pgen.o: pgen.c From python-dev@python.org Thu Aug 31 06:15:47 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:15:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.48,2.49 Message-ID: <200008310515.WAA09623@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv9615/Objects Modified Files: abstract.c Log Message: Removed compiler warning about wanting explicit grouping around && expression next to a || expression; this is a readability-inspired warning from GCC. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.48 retrieving revision 2.49 diff -C2 -r2.48 -r2.49 *** abstract.c 2000/08/24 20:08:19 2.48 --- abstract.c 2000/08/31 05:15:44 2.49 *************** *** 813,820 **** PyNumber_Add, 0) <= 0) return x; ! } else if (HASINPLACE(v) && (v->ob_type->tp_as_sequence != NULL && ! (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL) || ! (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL)) return (*f)(v, w); --- 813,822 ---- PyNumber_Add, 0) <= 0) return x; ! } ! else if ((HASINPLACE(v) ! && (v->ob_type->tp_as_sequence != NULL && ! (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL)) ! || (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL)) return (*f)(v, w); From python-dev@python.org Thu Aug 31 06:18:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:18:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.85,2.86 Message-ID: <200008310518.WAA09781@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv9766/Objects Modified Files: fileobject.c Log Message: Peter Schneider-Kamp : Remove some of GCC's warning in -Wstrict-prototypes mode. This closes SourceForge patch #101342. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.85 retrieving revision 2.86 diff -C2 -r2.85 -r2.86 *** fileobject.c 2000/08/25 22:49:05 2.85 --- fileobject.c 2000/08/31 05:18:54 2.86 *************** *** 254,265 **** return 0 on success, non-zero on failure (with errno set) */ int - _portable_fseek(fp, offset, whence) - FILE* fp; #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 ! fpos_t offset; #else ! off_t offset; #endif - int whence; { #if defined(HAVE_FSEEKO) --- 254,262 ---- return 0 on success, non-zero on failure (with errno set) */ int #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 ! _portable_fseek(FILE *fp, fpos_t offset, int whence) #else ! _portable_fseek(FILE *fp, off_t offset, int whence) #endif { #if defined(HAVE_FSEEKO) *************** *** 303,308 **** off_t #endif ! _portable_ftell(fp) ! FILE* fp; { #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) --- 300,304 ---- off_t #endif ! _portable_ftell(FILE* fp) { #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) From python-dev@python.org Thu Aug 31 06:18:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:18:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules arraymodule.c,2.53,2.54 readline.c,2.28,2.29 selectmodule.c,2.44,2.45 Message-ID: <200008310518.WAA09778@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv9766/Modules Modified Files: arraymodule.c readline.c selectmodule.c Log Message: Peter Schneider-Kamp : Remove some of GCC's warning in -Wstrict-prototypes mode. This closes SourceForge patch #101342. Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** arraymodule.c 2000/08/12 20:58:11 2.53 --- arraymodule.c 2000/08/31 05:18:53 2.54 *************** *** 789,795 **** static PyObject * ! array_extend(self, args) ! arrayobject *self; ! PyObject *args; { int size; --- 789,793 ---- static PyObject * ! array_extend(arrayobject *self, PyObject *args) { int size; Index: readline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/readline.c,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** readline.c 2000/08/04 22:31:42 2.28 --- readline.c 2000/08/31 05:18:53 2.29 *************** *** 28,38 **** #include /* You may need to add an -I option to Setup */ ! extern int rl_parse_and_bind(); ! extern int rl_read_init_file(); ! extern int rl_insert_text(); ! extern int rl_bind_key(); ! extern int rl_bind_key_in_map(); ! extern int rl_initialize(); ! extern int add_history(); extern Function *rl_event_hook; #endif --- 28,38 ---- #include /* You may need to add an -I option to Setup */ ! extern int rl_parse_and_bind(char *); ! extern int rl_read_init_file(char *); ! extern int rl_insert_text(char *); ! extern int rl_bind_key(int, Function *); ! extern int rl_bind_key_in_map(int, Function *, Keymap); ! extern int rl_initialize(void); ! extern int add_history(char *); extern Function *rl_event_hook; #endif Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.44 retrieving revision 2.45 diff -C2 -r2.44 -r2.45 *** selectmodule.c 2000/08/25 13:59:18 2.44 --- selectmodule.c 2000/08/31 05:18:53 2.45 *************** *** 509,513 **** static pollObject * ! newPollObject() { pollObject *self; --- 509,513 ---- static pollObject * ! newPollObject(void) { pollObject *self; From python-dev@python.org Thu Aug 31 06:38:42 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:38:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.111,2.112 Message-ID: <200008310538.WAA11038@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv11027/Python Modified Files: pythonrun.c Log Message: Add a comment explaining the return value of PyOS_CheckStack(). Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.111 retrieving revision 2.112 diff -C2 -r2.111 -r2.112 *** pythonrun.c 2000/08/27 20:18:17 2.111 --- pythonrun.c 2000/08/31 05:38:39 2.112 *************** *** 904,908 **** PyObject *v; long magic; ! long PyImport_GetMagicNumber(); magic = PyMarshal_ReadLongFromFile(fp); --- 904,908 ---- PyObject *v; long magic; ! long PyImport_GetMagicNumber(void); magic = PyMarshal_ReadLongFromFile(fp); *************** *** 1202,1205 **** --- 1202,1208 ---- #include + /* + * Return non-zero when we run out of memory on the stack; zero otherwise. + */ int PyOS_CheckStack() From python-dev@python.org Thu Aug 31 06:50:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:50:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api api.tex,1.77,1.78 Message-ID: <200008310550.WAA11900@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv11891/api Modified Files: api.tex Log Message: Document PyOS_CheckStack(). Fix a couple of really minor markup nits. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -r1.77 -r1.78 *** api.tex 2000/08/14 02:50:21 1.77 --- api.tex 2000/08/31 05:50:40 1.78 *************** *** 851,855 **** \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyErr_Restore}{PyObject *type, PyObject *value, PyObject *traceback} Set the error indicator from the three objects. If the error indicator is already set, it is cleared first. If the objects are --- 851,856 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyErr_Restore}{PyObject *type, PyObject *value, ! PyObject *traceback} Set the error indicator from the three objects. If the error indicator is already set, it is cleared first. If the objects are *************** *** 859,863 **** that class. Do not pass an invalid exception type or value. (Violating these rules will cause subtle problems later.) This call ! takes away a reference to each object, i.e. you must own a reference to each object before the call and after the call you no longer own these references. (If you don't understand this, don't use this --- 860,864 ---- that class. Do not pass an invalid exception type or value. (Violating these rules will cause subtle problems later.) This call ! takes away a reference to each object, i.e.\ you must own a reference to each object before the call and after the call you no longer own these references. (If you don't understand this, don't use this *************** *** 1061,1064 **** --- 1062,1074 ---- continue to be used. If a new executable is loaded into the new process, this function does not need to be called. + \end{cfuncdesc} + + \begin{cfuncdesc}{int}{PyOS_CheckStack}{} + Return true when the interpreter runs out of stack space. This is a + reliable check, but is only available when \code{USE_STACKCHECK} is + defined (currently on Windows using the Microsoft Visual C++ compiler + and on the Macintosh). \code{USE_CHECKSTACK} will be defined + automatically; you should never change the definition in your own + code. \end{cfuncdesc} From python-dev@python.org Thu Aug 31 06:52:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:52:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.112,2.113 Message-ID: <200008310552.WAA11992@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv11985/Python Modified Files: pythonrun.c Log Message: PyOS_CheckStack(): Better ANSI'fy this while we're at it. Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.112 retrieving revision 2.113 diff -C2 -r2.112 -r2.113 *** pythonrun.c 2000/08/31 05:38:39 2.112 --- pythonrun.c 2000/08/31 05:52:44 2.113 *************** *** 1206,1210 **** */ int ! PyOS_CheckStack() { __try { --- 1206,1210 ---- */ int ! PyOS_CheckStack(void) { __try { From python-dev@python.org Thu Aug 31 07:09:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:09:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib lib.tex,1.161,1.162 Message-ID: <200008310609.XAA21565@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv21558/lib Modified Files: lib.tex Log Message: Relocate the popen2 documentation since it is now substantially more portable. Index: lib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v retrieving revision 1.161 retrieving revision 1.162 diff -C2 -r1.161 -r1.162 *** lib.tex 2000/08/30 03:26:17 1.161 --- lib.tex 2000/08/31 06:09:26 1.162 *************** *** 132,135 **** --- 132,136 ---- \input{libstatvfs} \input{libfilecmp} + \input{libpopen2} %\input{libcmp} %\input{libcmpcache} *************** *** 183,187 **** \input{libnis} \input{libsyslog} - \input{libpopen2} \input{libcommands} --- 184,187 ---- From python-dev@python.org Thu Aug 31 07:12:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:12:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/paper-letter Makefile,1.15,1.16 Message-ID: <200008310612.XAA21839@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/paper-letter In directory slayer.i.sourceforge.net:/tmp/cvs-serv21826/paper-letter Modified Files: Makefile Log Message: Centralize the processing logic for LaTeX documents into the mkhowto script; do not use mkdvi.sh or mkhtl.sh any more. This slows down building all versions of the documentation, but if you are only building one format, it does not matter. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/paper-letter/Makefile,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** Makefile 2000/04/28 16:53:36 1.15 --- Makefile 2000/08/31 06:12:35 1.16 *************** *** 3,20 **** # Where are the various programs? - LATEX= latex - PDFLATEX= pdflatex DVIPS= dvips -N0 -t $(PAPER) - MAKEINDEX= makeindex -s ../texinputs/python.ist PYTHON= python TOOLSDIR= ../tools - TEXINPUTS= .:../texinputs: ! MKDVI= TEXINPUTS=$(TEXINPUTS) $(TOOLSDIR)/mkdvi.sh ! # The --keep option is needed to keep the intermediate files for generating ! # the HTML global module index. ! MKHOWTO= $(TOOLSDIR)/mkhowto --keep ! MKPDF= TEXINPUTS=$(TEXINPUTS) $(TOOLSDIR)/mkdvi.sh --pdf --- 3,14 ---- # Where are the various programs? DVIPS= dvips -N0 -t $(PAPER) PYTHON= python TOOLSDIR= ../tools ! MKHOWTO= $(TOOLSDIR)/mkhowto ! MKDVI= $(MKHOWTO) --dvi ! MKPDF= $(MKHOWTO) --pdf *************** *** 37,51 **** ! SCRIPTS: ../tools/fix_hack ../tools/mkdvi.sh ../tools/indfix.py ! $(DVIFILES): $(SCRIPTS) ! $(PDFFILES): $(SCRIPTS) - $(HOWTODVIFILES): ../tools/mkhowto - $(HOWTOPDFFILES): ../tools/mkhowto - # Rules to build PostScript and PDF formats ! .SUFFIXES: .dvi .ps .pdf .dvi.ps: --- 31,42 ---- ! SCRIPTS: ../tools/indfix.py ! $(DVIFILES): $(SCRIPTS) $(MKHOWTO) ! $(PDFFILES): $(SCRIPTS) $(MKHOWTO) # Rules to build PostScript and PDF formats ! .SUFFIXES: .dvi .ps .dvi.ps: *************** *** 65,72 **** # Python/C API Reference Manual api.dvi: api.tex $(APIFILES) ! $(MKDVI) api api.pdf: api.tex $(APIFILES) ! $(MKPDF) api api.tex: ../api/api.tex ../api/refcounts.dat ../tools/anno-api.py --- 56,63 ---- # Python/C API Reference Manual api.dvi: api.tex $(APIFILES) ! $(MKDVI) ../api/api.tex api.pdf: api.tex $(APIFILES) ! $(MKPDF) ../api/api.tex api.tex: ../api/api.tex ../api/refcounts.dat ../tools/anno-api.py *************** *** 75,82 **** # Distributing Python Modules dist.dvi: $(DISTFILES) ! $(MKHOWTO) --dvi ../dist/dist.tex dist.pdf: $(DISTFILES) ! $(MKHOWTO) --pdf ../dist/dist.tex # Documenting Python --- 66,73 ---- # Distributing Python Modules dist.dvi: $(DISTFILES) ! $(MKDVI) ../dist/dist.tex dist.pdf: $(DISTFILES) ! $(MKPDF) ../dist/dist.tex # Documenting Python *************** *** 89,96 **** # Extending and Embedding the Python Interpreter ext.dvi: $(EXTFILES) ! $(MKDVI) ext ext.pdf: $(EXTFILES) ! $(MKPDF) ext # Installing Python Modules --- 80,87 ---- # Extending and Embedding the Python Interpreter ext.dvi: $(EXTFILES) ! $(MKDVI) ../ext/ext.tex ext.pdf: $(EXTFILES) ! $(MKPDF) ../ext/ext.tex # Installing Python Modules *************** *** 103,110 **** # Python Library Reference lib.dvi: $(LIBFILES) ! $(MKDVI) lib lib.pdf: $(LIBFILES) ! $(MKPDF) lib # Macintosh Library Modules --- 94,101 ---- # Python Library Reference lib.dvi: $(LIBFILES) ! $(MKDVI) ../lib/lib.tex lib.pdf: $(LIBFILES) ! $(MKPDF) ../lib/lib.tex # Macintosh Library Modules *************** *** 117,131 **** # Python Reference Manual ref.dvi: $(REFFILES) ! $(MKDVI) ref ref.pdf: $(REFFILES) ! $(MKPDF) ref # Python Tutorial tut.dvi: $(TUTFILES) ! $(MKDVI) tut tut.pdf: $(TUTFILES) ! $(MKPDF) tut --- 108,122 ---- # Python Reference Manual ref.dvi: $(REFFILES) ! $(MKDVI) ../ref/ref.tex ref.pdf: $(REFFILES) ! $(MKPDF) ../ref/ref.tex # Python Tutorial tut.dvi: $(TUTFILES) ! $(MKDVI) ../tut/tut.tex tut.pdf: $(TUTFILES) ! $(MKPDF) ../tut/tut.tex From python-dev@python.org Thu Aug 31 07:12:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:12:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html Makefile,1.34,1.35 Message-ID: <200008310612.XAA21835@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv21826/html Modified Files: Makefile Log Message: Centralize the processing logic for LaTeX documents into the mkhowto script; do not use mkdvi.sh or mkhtl.sh any more. This slows down building all versions of the documentation, but if you are only building one format, it does not matter. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/Makefile,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** Makefile 2000/08/11 17:36:21 1.34 --- Makefile 2000/08/31 06:12:35 1.35 *************** *** 1,8 **** ! # Convenience Makefile for building HTML documentation. You probably need to ! # set TEXINPUTS from the command line for this to be useful, unless you ! # actually build the .dvi files in the top level directory. ! # ! # Note that the .dvi files must already be built and TEXINPUTS must include the ! # directory where latex's working files (esp. *.aux) are kept. PAPER=letter --- 1,5 ---- ! # Convenience Makefile for building HTML documentation. You probably ! # need to set TEXINPUTS from the command line for this to be useful, ! # unless you actually build the .dvi files in the top level directory. PAPER=letter *************** *** 16,29 **** PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! WCNEW=$(PYTHON) $(TOPDIR)/../Tools/webchecker/wcnew.py ! MKAUX= PAPER=$(PAPER) TEXINPUTS=$(TEXINPUTS) $(TOOLSDIR)/mkdvi.sh --aux ! MKHTML= PAPER=$(PAPER) $(TOOLSDIR)/mkhtml.sh ! KPSEWHICH= TEXINPUTS=$(TEXINPUTS) kpsewhich tex BUILDINDEX=$(TOOLSDIR)/buildindex.py - # make it clear to l2h, since our support only generates HTML 4.0 - L2HARGS= -html_version 4.0 - PYTHONDOCS='
    See About this document... for information on suggesting changes.' HTMLBASE= file:`pwd` --- 13,20 ---- PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! MKHOWTO= $(TOOLSDIR)/mkhowto BUILDINDEX=$(TOOLSDIR)/buildindex.py PYTHONDOCS='
    See About this document... for information on suggesting changes.' HTMLBASE= file:`pwd` *************** *** 71,123 **** lib/modindex.html mac/modindex.html ! api/api.html: $(PAPERDIR)/api.aux $(BUILDINDEX) $(TOOLSDIR)/mkhtml.sh ! $(MKHTML) api $(L2HARGS) -split 5 ! doc/doc.html: $(DOCFILES) $(BUILDINDEX) $(TOPDIR)/perl/ltxmarkup.perl ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/doc/doc.tex - - ext/ext.html: $(PAPERDIR)/ext.aux $(TOOLSDIR)/mkhtml.sh - $(MKHTML) ext $(L2HARGS) -split 5 ! lib/lib.html: $(PAPERDIR)/lib.aux $(BUILDINDEX) $(TOOLSDIR)/mkhtml.sh ! $(TOOLSDIR)/fix_libaux.sed <`$(KPSEWHICH) lib.aux` >lib1.aux ! mv lib1.aux `$(KPSEWHICH) lib.aux` ! $(MKHTML) lib $(L2HARGS) -split 5 mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/mac/mac.tex - - ref/ref.html: $(PAPERDIR)/ref.aux $(BUILDINDEX) $(TOOLSDIR)/mkhtml.sh - $(MKHTML) ref $(L2HARGS) -split 5 ! tut/tut.html: $(PAPERDIR)/tut.aux $(TOOLSDIR)/mkhtml.sh ! $(MKHTML) --numeric tut $(L2HARGS) -split 3 ! inst/inst.html:$(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/dist/dist.tex - $(PAPERDIR)/api.aux: $(APIFILES) - (cd $(PAPERDIR); $(MKAUX) api) - - $(PAPERDIR)/ext.aux: $(EXTFILES) - (cd $(PAPERDIR); $(MKAUX) ext) - - $(PAPERDIR)/lib.aux: $(LIBFILES) - (cd $(PAPERDIR); $(MKAUX) lib) - - $(PAPERDIR)/ref.aux: $(REFFILES) - (cd $(PAPERDIR); $(MKAUX) ref) - - $(PAPERDIR)/tut.aux: $(TUTFILES) - (cd $(PAPERDIR); $(MKAUX) tut) - - webcheck: all $(WEBCHECKER) $(HTMLBASE)/api/ --- 62,102 ---- lib/modindex.html mac/modindex.html ! api/api.html: $(APIFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/api/api.tex ! doc/doc.html: $(DOCFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/doc/doc.tex ! ext/ext.html: $(EXTFILES) ! echo $(EXTFILES) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ext/ext.tex ! ! lib/lib.html: $(LIBFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/lib/lib.tex mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/mac/mac.tex ! ref/ref.html: $(REFFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ref/ref.tex ! ! tut/tut.html: $(TUTFILES) $(TOOLSDIR)/mkhowto ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html --numeric --split 3 $(TOPDIR)/tut/tut.tex ! inst/inst.html: $(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/dist/dist.tex webcheck: all $(WEBCHECKER) $(HTMLBASE)/api/ *************** *** 131,144 **** $(WEBCHECKER) $(HTMLBASE)/inst/ - wcnew: all - $(WCNEW) $(HTMLBASE)/api/ - $(WCNEW) $(HTMLBASE)/doc/ - $(WCNEW) $(HTMLBASE)/ext/ - $(WCNEW) -m290000 $(HTMLBASE)/lib/ - $(WCNEW) $(HTMLBASE)/mac/ - $(WCNEW) $(HTMLBASE)/ref/ - $(WCNEW) $(HTMLBASE)/tut/ - - clean: rm -rf @webchecker.pickle --- 110,113 ---- *************** *** 155,159 **** BOILERPLATE=$(TOPDIR)/texinputs/boilerplate.tex ! index.html: index.html.in $(BOILERPLATE) REL=`grep '\\release{' $(BOILERPLATE) | sed 's/.*\\release{\(.*\)}.*$$/\1/'`; \ REL=`echo "$$REL" | sed 's/[$$]//g'`; \ --- 124,128 ---- BOILERPLATE=$(TOPDIR)/texinputs/boilerplate.tex ! index.html: $(TOPDIR)/html/index.html.in $(BOILERPLATE) REL=`grep '\\release{' $(BOILERPLATE) | sed 's/.*\\release{\(.*\)}.*$$/\1/'`; \ REL=`echo "$$REL" | sed 's/[$$]//g'`; \ *************** *** 163,165 **** sed "s/@DATE@/$$DATE/g" TEMP >$@ rm -f TEMP - --- 132,133 ---- From python-dev@python.org Thu Aug 31 07:14:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:14:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkhowto,1.12,1.13 Message-ID: <200008310614.XAA21940@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv21931/tools Modified Files: mkhowto Log Message: Add --l2h-init option, which can augment the standard LaTeX2HTML initialization with additional Perl files. This can be given more than once. Index: mkhowto =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tools/mkhowto,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** mkhowto 2000/08/29 18:15:05 1.12 --- mkhowto 2000/08/31 06:14:38 1.13 *************** *** 98,101 **** --- 98,102 ---- def __init__(self): self.formats = [] + self.l2h_init_files = [] def __getitem__(self, key): *************** *** 109,113 **** opts, args = getopt.getopt(args, "Hi:a:s:lDkqr:", ["all", "postscript", "help", "iconserver=", ! "address=", "a4", "letter", "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", --- 110,114 ---- opts, args = getopt.getopt(args, "Hi:a:s:lDkqr:", ["all", "postscript", "help", "iconserver=", ! "address=", "a4", "letter", "l2h-init=", "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", *************** *** 152,155 **** --- 153,158 ---- elif opt == "--style": self.style_file = os.path.abspath(arg) + elif opt == "--l2h-init": + self.l2h_init_files.append(os.path.abspath(arg)) # # Format specifiers: *************** *** 304,308 **** def use_latex_manual(self, binary): ! pass def process_synopsis_files(self): --- 307,311 ---- def use_latex_manual(self, binary): ! self.use_latex_howto(binary) def process_synopsis_files(self): *************** *** 365,368 **** --- 368,372 ---- def write_l2h_aux_init_file(self): + options = self.options fp = open(self.l2h_aux_init_file, "w") d = string_to_perl(os.path.dirname(L2H_INIT_FILE)) *************** *** 372,375 **** --- 376,384 ---- % (d, d)) fp.write(open(L2H_INIT_FILE).read()) + for filename in options.l2h_init_files: + fp.write("\n# initialization code incorporated from:\n# ") + fp.write(filename) + fp.write("\n") + fp.write(open(filename).read()) fp.write("\n" "# auxillary init file for latex2html\n" *************** *** 377,381 **** "$NO_AUTO_LINK = 1;\n" ) - options = self.options l2hoption(fp, "ABOUT_FILE", options.about_file) l2hoption(fp, "ICONSERVER", options.icon_server) --- 386,389 ---- From python-dev@python.org Thu Aug 31 07:15:32 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:15:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkdvi.sh,1.8,NONE mkhtml.sh,1.13,NONE newind.py,1.3,NONE Message-ID: <200008310615.XAA22077@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv22068 Removed Files: mkdvi.sh mkhtml.sh newind.py Log Message: Remove obsolete scripts. --- mkdvi.sh DELETED --- --- mkhtml.sh DELETED --- --- newind.py DELETED --- From python-dev@python.org Thu Aug 31 07:22:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:22:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.80,1.81 Message-ID: <200008310622.XAA22772@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv22765/perl Modified Files: python.perl Log Message: Push some table header formatting to the style sheet; this also helps separate some of the ties between l2hinit.perl and python.perl. Revamp the "title page" construction to allow more flexibility. Index: python.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v retrieving revision 1.80 retrieving revision 1.81 diff -C2 -r1.80 -r1.81 *** python.perl 2000/08/11 20:04:19 1.80 --- python.perl 2000/08/31 06:22:54 1.81 *************** *** 933,938 **** @col_aligns = ('', '', '', ''); - $TABLE_HEADER_BGCOLOR = $NAV_BGCOLOR; - sub fix_font{ # do a little magic on a font name to get the right behavior in the first --- 933,936 ---- *************** *** 1011,1015 **** return '' . "\n " ! . "\n " . "\n $th1$h1\ " . "\n $th2$h2\ " --- 1009,1013 ---- return '
    ' . "\n " ! . "\n " . "\n $th1$h1\ " . "\n $th2$h2\ " *************** *** 1136,1145 **** } ! sub do_cmd_maketitle { ! local($_) = @_; ! my $the_title = "\n
    "; if ($t_title) { $the_title .= "\n

    $t_title

    "; ! } else { write_warnings("\nThis document has no title."); } if ($t_author) { if ($t_authorURL) { --- 1134,1164 ---- } ! ! # These can be used to control the title page appearance; ! # they need a little bit of documentation. ! # ! # If $TITLE_PAGE_GRAPHIC is set, it should be the name of a file in the ! # $ICONSERVER directory, or include path information (other than "./"). The ! # default image type will be assumed if an extension is not provided. ! # ! # If specified, the "title page" will contain two colums: one containing the ! # title/author/etc., and the other containing the graphic. Use the other ! # four variables listed here to control specific details of the layout; all ! # are optional. ! # ! # $TITLE_PAGE_GRAPHIC = "my-company-logo"; ! # $TITLE_PAGE_GRAPHIC_COLWIDTH = "30%"; ! # $TITLE_PAGE_GRAPHIC_WIDTH = 150; ! # $TITLE_PAGE_GRAPHIC_HEIGHT = 150; ! # $TITLE_PAGE_GRAPHIC_ON_RIGHT = 0; ! ! sub make_my_titlepage() { ! my $the_title = ""; if ($t_title) { $the_title .= "\n

    $t_title

    "; ! } ! else { ! write_warnings("\nThis document has no title."); ! } if ($t_author) { if ($t_authorURL) { *************** *** 1148,1173 **** "$t_author"); $the_title .= "\n

    $href

    "; ! } else { $the_title .= ("\n

    $t_author

    "); } ! } else { write_warnings("\nThere is no author for this document."); } if ($t_institute) { ! $the_title .= "\n

    $t_institute

    ";} if ($DEVELOPER_ADDRESS) { ! $the_title .= "\n

    $DEVELOPER_ADDRESS

    ";} if ($t_affil) { ! $the_title .= "\n

    $t_affil

    ";} if ($t_date) { $the_title .= "\n

    $t_date"; if ($PYTHON_VERSION) { ! $the_title .= "
    Release $PYTHON_VERSION";} $the_title .= "

    " } if ($t_address) { $the_title .= "\n

    $t_address

    "; ! } else { $the_title .= "\n

    "} if ($t_email) { $the_title .= "\n

    $t_email

    "; ! }# else { $the_title .= "

    " } $the_title .= "\n
    "; return $the_title . $_ ; --- 1167,1255 ---- "$t_author"); $the_title .= "\n

    $href

    "; ! } ! else { $the_title .= ("\n

    $t_author

    "); } ! } ! else { ! write_warnings("\nThere is no author for this document."); ! } if ($t_institute) { ! $the_title .= "\n

    $t_institute

    "; ! } if ($DEVELOPER_ADDRESS) { ! $the_title .= "\n

    $DEVELOPER_ADDRESS

    "; ! } if ($t_affil) { ! $the_title .= "\n

    $t_affil

    "; ! } if ($t_date) { $the_title .= "\n

    $t_date"; if ($PYTHON_VERSION) { ! $the_title .= "
    Release $PYTHON_VERSION"; ! } $the_title .= "

    " } if ($t_address) { $the_title .= "\n

    $t_address

    "; ! } ! else { ! $the_title .= "\n

    "; ! } if ($t_email) { $the_title .= "\n

    $t_email

    "; ! } ! return $the_title; ! } ! ! use File::Basename; ! ! sub make_my_titlegraphic() { ! my($myname, $mydir, $myext) = fileparse($TITLE_PAGE_GRAPHIC, '\..*'); ! chop $mydir; ! if ($mydir eq '.') { ! $mydir = $ICONSERVER; ! } ! $myext = ".$IMAGE_TYPE" ! unless $myext; ! my $graphic = "\n"; ! return $graphic; ! } ! ! sub do_cmd_maketitle { ! local($_) = @_; ! my $the_title = "\n
    "; ! if ($TITLE_PAGE_GRAPHIC) { ! if ($TITLE_PAGE_GRAPHIC_ON_RIGHT) { ! $the_title .= ("\n
    " ! . "\n\n" ! . make_my_titlegraphic() ! . "\n
    " ! . make_my_titlepage() ! . "
    "); ! } ! else { ! $the_title .= ("\n\n" ! . make_my_titlegraphic() ! . "\n
    " ! . make_my_titlepage() ! . "
    "); ! } ! } ! else { ! $the_title .= ("\n
    " ! . make_my_titlepage() ! . "\n
    "); ! } ! $the_title .= "\n"; ! return $the_title . $_; $the_title .= "\n"; return $the_title . $_ ; From python-dev@python.org Thu Aug 31 07:58:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:58:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkhowto,1.13,1.14 Message-ID: <200008310658.XAA25294@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv25287/tools Modified Files: mkhowto Log Message: Add --up-link and --up-title parameters to allow linking the top level of the generated document to an external index. These correspond to the -up_url and -up_title parameters of LaTeX2HTML. Index: mkhowto =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tools/mkhowto,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** mkhowto 2000/08/31 06:14:38 1.13 --- mkhowto 2000/08/31 06:58:34 1.14 *************** *** 23,26 **** --- 23,28 ---- --style Specify the CSS file to use for the output (filename, not a URL). + --up-link URL to a parent document. + --up-title Title of a parent document. Other options: *************** *** 92,95 **** --- 94,99 ---- style_file = os.path.join(TOPDIR, "html", "style.css") about_file = os.path.join(TOPDIR, "html", "about.dat") + up_link = None + up_title = None # DEFAULT_FORMATS = ("pdf",) *************** *** 113,117 **** "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric", "style="] + list(self.ALL_FORMATS)) for opt, arg in opts: --- 117,122 ---- "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric", "style=", ! "up-link=", "up-title="] + list(self.ALL_FORMATS)) for opt, arg in opts: *************** *** 155,158 **** --- 160,167 ---- elif opt == "--l2h-init": self.l2h_init_files.append(os.path.abspath(arg)) + elif opt == "--up-link": + self.up_link = arg + elif opt == "--up-title": + self.up_title = arg # # Format specifiers: *************** *** 392,395 **** --- 401,406 ---- l2hoption(fp, "MAX_LINK_DEPTH", options.max_link_depth) l2hoption(fp, "MAX_SPLIT_DEPTH", options.max_split_depth) + l2hoption(fp, "EXTERNAL_UP_LINK", options.up_link) + l2hoption(fp, "EXTERNAL_UP_TITLE", options.up_title) fp.write("1;\n") fp.close() From python-dev@python.org Thu Aug 31 08:00:20 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 00:00:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html Makefile,1.35,1.36 Message-ID: <200008310700.AAA26393@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv26119/html Modified Files: Makefile Log Message: Move common parameters to mkhowto to a variable, add up-link from the generated documents to the document index. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/Makefile,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** Makefile 2000/08/31 06:12:35 1.35 --- Makefile 2000/08/31 07:00:17 1.36 *************** *** 13,17 **** PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! MKHOWTO= $(TOOLSDIR)/mkhowto BUILDINDEX=$(TOOLSDIR)/buildindex.py --- 13,20 ---- PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! MKHOWTO= $(TOOLSDIR)/mkhowto --about $(TOPDIR)/html/stdabout.dat \ ! --up-link ../index.html --up-title "Document Index" \ ! --address $(PYTHONDOCS) ! MKHTML= $(MKHOWTO) --html BUILDINDEX=$(TOOLSDIR)/buildindex.py *************** *** 63,101 **** api/api.html: $(APIFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/api/api.tex doc/doc.html: $(DOCFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/doc/doc.tex ext/ext.html: $(EXTFILES) echo $(EXTFILES) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ext/ext.tex lib/lib.html: $(LIBFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/lib/lib.tex mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/mac/mac.tex ref/ref.html: $(REFFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ref/ref.tex tut/tut.html: $(TUTFILES) $(TOOLSDIR)/mkhowto ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html --numeric --split 3 $(TOPDIR)/tut/tut.tex inst/inst.html: $(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/dist/dist.tex webcheck: all --- 66,95 ---- api/api.html: $(APIFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/api/api.tex doc/doc.html: $(DOCFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/doc/doc.tex ext/ext.html: $(EXTFILES) echo $(EXTFILES) ! $(MKHTML) $(TOPDIR)/ext/ext.tex lib/lib.html: $(LIBFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/lib/lib.tex mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/mac/mac.tex ref/ref.html: $(REFFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/ref/ref.tex tut/tut.html: $(TUTFILES) $(TOOLSDIR)/mkhowto ! $(MKHTML) --numeric --split 3 $(TOPDIR)/tut/tut.tex inst/inst.html: $(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHTML) $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHTML) $(TOPDIR)/dist/dist.tex webcheck: all From python-dev@python.org Thu Aug 31 08:02:28 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 31 Aug 2000 00:02:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.49,2.50 Message-ID: <200008310702.AAA32318@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv29018/Objects Modified Files: abstract.c Log Message: Fix grouping: this is how I intended it, misguided as I was in boolean operator associativity. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.49 retrieving revision 2.50 diff -C2 -r2.49 -r2.50 *** abstract.c 2000/08/31 05:15:44 2.49 --- abstract.c 2000/08/31 07:02:19 2.50 *************** *** 814,819 **** return x; } ! else if ((HASINPLACE(v) ! && (v->ob_type->tp_as_sequence != NULL && (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL)) || (v->ob_type->tp_as_number != NULL && --- 814,819 ---- return x; } ! else if (HASINPLACE(v) ! && ((v->ob_type->tp_as_sequence != NULL && (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL)) || (v->ob_type->tp_as_number != NULL && From python-dev@python.org Thu Aug 31 08:15:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 00:15:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html style.css,1.7,1.8 Message-ID: <200008310715.AAA02945@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv2938/html Modified Files: style.css Log Message: Always room to remove more formatting from the HTML! Index: style.css =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/style.css,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** style.css 2000/08/30 15:02:13 1.7 --- style.css 2000/08/31 07:15:57 1.8 *************** *** 38,44 **** font-weight: normal } ! .navigation .title { font-family: avantgarde, sans-serif; font-size: 110% } - .navigation td { background-color: #99ccff; } .titlegraphic { vertical-align: top; } --- 38,45 ---- font-weight: normal } ! .navigation td { background-color: #99ccff; ! font-weight: bold; ! font-family: avantgarde, sans-serif; font-size: 110% } .titlegraphic { vertical-align: top; } From python-dev@python.org Thu Aug 31 08:19:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 00:19:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl l2hinit.perl,1.44,1.45 Message-ID: <200008310719.AAA03118@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv3109/perl Modified Files: l2hinit.perl Log Message: Be a little more careful to avoid including style information in the generated markup. Don't be careless with the navigation icons! We should use the blank icon where there is not anyplace to go for a particular position in the navigation bar. Index: l2hinit.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/l2hinit.perl,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -r1.44 -r1.45 *** l2hinit.perl 2000/07/31 20:13:23 1.44 --- l2hinit.perl 2000/08/31 07:19:07 1.45 *************** *** 19,22 **** --- 19,23 ---- $ICONSERVER = '../icons'; + $IMAGE_TYPE = 'gif'; # Control where the navigation bars should show up: *************** *** 94,98 **** $CUSTOM_BUTTONS = ''; - $NAV_BGCOLOR = " bgcolor=\"#99CCFF\""; sub make_nav_sectref { --- 95,98 ---- *************** *** 112,116 **** } ! $BLANK_ICON = make_my_icon("blank", ""); @my_icons = (); --- 112,116 ---- } ! $BLANK_ICON = make_my_icon('blank', ''); @my_icons = (); *************** *** 118,131 **** $my_icons{'previous_page_inactive'} = $BLANK_ICON; $my_icons{'up_page_inactive'} = $BLANK_ICON; ! $x = make_my_icon("next", "Next Page"); $my_icons{'next_page'} = $x; $my_icons{'next'} = $x; ! $x = make_my_icon("previous", "Previous Page"); $my_icons{'previous_page'} = $x; $my_icons{'previous'} = $x; ! $my_icons{'up'} = make_my_icon("up", "Up One Level"); ! $my_icons{'contents'} = make_my_icon("contents", "Contents"); ! $my_icons{'index'} = make_my_icon("index", "Index"); ! $my_icons{'modules'} = make_my_icon("modules", "Module Index"); --- 118,131 ---- $my_icons{'previous_page_inactive'} = $BLANK_ICON; $my_icons{'up_page_inactive'} = $BLANK_ICON; ! $x = make_my_icon('next', 'Next Page'); $my_icons{'next_page'} = $x; $my_icons{'next'} = $x; ! $x = make_my_icon('previous', 'Previous Page'); $my_icons{'previous_page'} = $x; $my_icons{'previous'} = $x; ! $my_icons{'up'} = make_my_icon('up', 'Up One Level'); ! $my_icons{'contents'} = make_my_icon('contents', 'Contents'); ! $my_icons{'index'} = make_my_icon('index', 'Index'); ! $my_icons{'modules'} = make_my_icon('modules', 'Module Index'); *************** *** 138,144 **** sub make_nav_panel { my $s; ! $NEXT = use_my_icon("$NEXT"); ! $UP = use_my_icon("$UP"); ! $PREVIOUS = use_my_icon("$PREVIOUS"); $CONTENTS = use_my_icon("$CONTENTS"); $INDEX = $INDEX ? use_my_icon("$INDEX") : $BLANK_ICON; --- 138,144 ---- sub make_nav_panel { my $s; ! $NEXT = $NEXT_TITLE ? use_my_icon("$NEXT") : $BLANK_ICON; ! $UP = $UP_TITLE ? use_my_icon("$UP") : $BLANK_ICON; ! $PREVIOUS = $PREVIOUS_TITLE ? use_my_icon("$PREVIOUS") : $BLANK_ICON; $CONTENTS = use_my_icon("$CONTENTS"); $INDEX = $INDEX ? use_my_icon("$INDEX") : $BLANK_ICON; *************** *** 153,158 **** . "\n$NEXT" # title box ! . "\n" ! . "\n $t_title" # right-hand side . "\n$CONTENTS" --- 153,157 ---- . "\n$NEXT" # title box ! . "\n$t_title" # right-hand side . "\n$CONTENTS" From python-dev@python.org Thu Aug 31 11:27:02 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 31 Aug 2000 03:27:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib xmllib.py,1.22,1.23 Message-ID: <200008311027.DAA23531@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv21576/Lib Modified Files: xmllib.py Log Message: New method getnamespace. Since the application never gets to see the namespace abbreviation used in the XML document, but some applications may need to know them, we provide this method. Index: xmllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/xmllib.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** xmllib.py 2000/07/16 12:04:30 1.22 --- xmllib.py 2000/08/31 10:26:52 1.23 *************** *** 223,226 **** --- 223,233 ---- i = s + len(str) + # Interface - return a dictionary of all namespaces currently valid + def getnamespace(self): + nsdict = {} + for t, d, nst in self.stack: + nsdict.update(d) + return nsdict + # Internal -- handle data as far as reasonable. May leave state # and data to be processed by a subsequent call. If 'end' is From python-dev@python.org Thu Aug 31 11:27:02 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 31 Aug 2000 03:27:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libxmllib.tex,1.25,1.26 Message-ID: <200008311027.DAA23530@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv21576/Doc/lib Modified Files: libxmllib.tex Log Message: New method getnamespace. Since the application never gets to see the namespace abbreviation used in the XML document, but some applications may need to know them, we provide this method. Index: libxmllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libxmllib.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** libxmllib.tex 2000/08/11 20:34:27 1.25 --- libxmllib.tex 2000/08/31 10:27:00 1.26 *************** *** 93,96 **** --- 93,101 ---- \end{methoddesc} + \begin{methoddesc}{getnamespace}{} + Return a mapping of namespace abbreviations to namespace URIs that are + currently in effect. + \end{methoddesc} + \begin{methoddesc}{handle_xml}{encoding, standalone} This method is called when the \samp{} tag is processed. From python-dev@python.org Thu Aug 31 11:45:56 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 31 Aug 2000 03:45:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.4,1.5 Message-ID: <200008311045.DAA11356@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv11272 Modified Files: gettext.py Log Message: GNUTranslations.BE_MAGIC: don't be so clever in calculating this from LE_MAGIC; it breaks on Tru64. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** gettext.py 2000/08/30 03:29:58 1.4 --- gettext.py 2000/08/31 10:45:54 1.5 *************** *** 126,130 **** # Magic number of .mo files LE_MAGIC = 0x950412de ! BE_MAGIC = struct.unpack('>i', struct.pack(' Update of /cvsroot/python/distutils/doc/dist In directory slayer.i.sourceforge.net:/tmp/cvs-serv27409/dist Modified Files: dist.tex Log Message: Get rid of "sec:" prefix that slipped into a couple of \label's. Index: dist.tex =================================================================== RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** dist.tex 2000/08/06 20:37:24 1.20 --- dist.tex 2000/08/31 14:47:05 1.21 *************** *** 346,350 **** \subsection{Describing extension modules} ! \label{sec:describing-extensions} Just as writing Python extension modules is a bit more complicated than --- 346,350 ---- \subsection{Describing extension modules} ! \label{describing-extensions} Just as writing Python extension modules is a bit more complicated than *************** *** 888,899 **** \subsubsection{\protect\command{install\_lib}} ! \label{sec:install-lib-cmd} \subsubsection{\protect\command{install\_data}} ! \label{sec:install-data-cmd} This command installs all data files provided with the distribution. \subsubsection{\protect\command{install\_scripts}} ! \label{sec:install-scripts-cmd} This command installs all (Python) scripts in the distribution. --- 888,899 ---- \subsubsection{\protect\command{install\_lib}} ! \label{install-lib-cmd} \subsubsection{\protect\command{install\_data}} ! \label{install-data-cmd} This command installs all data files provided with the distribution. \subsubsection{\protect\command{install\_scripts}} ! \label{install-scripts-cmd} This command installs all (Python) scripts in the distribution. From python-dev@python.org Thu Aug 31 16:10:31 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:10:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.7,2.8 Message-ID: <200008311510.IAA14878@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13569/Modules Modified Files: gcmodule.c Log Message: apply patch #101362 by Vladimir Marangozov also initial static debug variable to 0 Index: gcmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v retrieving revision 2.7 retrieving revision 2.8 diff -C2 -r2.7 -r2.8 *** gcmodule.c 2000/08/06 22:45:30 2.7 --- gcmodule.c 2000/08/31 15:10:24 2.8 *************** *** 58,62 **** DEBUG_INSTANCES | \ DEBUG_OBJECTS ! static int debug; /* list of uncollectable objects */ --- 58,62 ---- DEBUG_INSTANCES | \ DEBUG_OBJECTS ! static int debug = 0; /* list of uncollectable objects */ *************** *** 223,229 **** PyGC_Head *next; PyGC_Head *gc = unreachable->gc_next; ! static PyObject *delstr; if (delstr == NULL) { delstr = PyString_InternFromString("__del__"); } for (; gc != unreachable; gc=next) { --- 223,231 ---- PyGC_Head *next; PyGC_Head *gc = unreachable->gc_next; ! static PyObject *delstr = NULL; if (delstr == NULL) { delstr = PyString_InternFromString("__del__"); + if (delstr == NULL) + Py_FatalError("PyGC: can't initialize __del__ string"); } for (; gc != unreachable; gc=next) { *************** *** 269,275 **** static void ! debug_instance(PyObject *output, char *msg, PyInstanceObject *inst) { - char buf[200]; char *cname; /* be careful not to create new dictionaries */ --- 271,276 ---- static void ! debug_instance(char *msg, PyInstanceObject *inst) { char *cname; /* be careful not to create new dictionaries */ *************** *** 279,296 **** else cname = "?"; ! sprintf(buf, "gc: %s<%.100s instance at %p>\n", msg, cname, inst); ! PyFile_WriteString(buf, output); } static void ! debug_cycle(PyObject *output, char *msg, PyObject *op) { if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) { ! debug_instance(output, msg, (PyInstanceObject *)op); } else if (debug & DEBUG_OBJECTS) { ! char buf[200]; ! sprintf(buf, "gc: %s<%.100s %p>\n", msg, ! op->ob_type->tp_name, op); ! PyFile_WriteString(buf, output); } } --- 280,295 ---- else cname = "?"; ! PySys_WriteStderr("gc: %.100s <%.100s instance at %p>\n", ! msg, cname, inst); } static void ! debug_cycle(char *msg, PyObject *op) { if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) { ! debug_instance(msg, (PyInstanceObject *)op); } else if (debug & DEBUG_OBJECTS) { ! PySys_WriteStderr("gc: %.100s <%.100s %p>\n", ! msg, op->ob_type->tp_name, op); } } *************** *** 358,375 **** PyGC_Head finalizers; PyGC_Head *gc; - PyObject *output = NULL; - if (debug) { - output = PySys_GetObject("stderr"); - } if (debug & DEBUG_STATS) { ! char buf[100]; ! sprintf(buf, "gc: collecting generation %d...\n", generation); ! PyFile_WriteString(buf,output); ! sprintf(buf, "gc: objects in each generation: %ld %ld %ld\n", gc_list_size(&generation0), gc_list_size(&generation1), gc_list_size(&generation2)); - PyFile_WriteString(buf,output); } --- 357,369 ---- PyGC_Head finalizers; PyGC_Head *gc; if (debug & DEBUG_STATS) { ! PySys_WriteStderr( ! "gc: collecting generation %d...\n" ! "gc: objects in each generation: %ld %ld %ld\n", ! generation, gc_list_size(&generation0), gc_list_size(&generation1), gc_list_size(&generation2)); } *************** *** 409,414 **** gc = gc->gc_next) { m++; ! if (output != NULL && (debug & DEBUG_COLLECTABLE)) { ! debug_cycle(output, "collectable ", PyObject_FROM_GC(gc)); } } --- 403,408 ---- gc = gc->gc_next) { m++; ! if (debug & DEBUG_COLLECTABLE) { ! debug_cycle("collectable", PyObject_FROM_GC(gc)); } } *************** *** 423,439 **** gc = gc->gc_next) { n++; ! if (output != NULL && (debug & DEBUG_UNCOLLECTABLE)) { ! debug_cycle(output, "uncollectable ", PyObject_FROM_GC(gc)); } } ! if (output != NULL && (debug & DEBUG_STATS)) { if (m == 0 && n == 0) { ! PyFile_WriteString("gc: done.\n", output); } else { ! char buf[200]; ! sprintf(buf, ! "gc: done, %ld unreachable, %ld uncollectable.\n", ! n+m, n); ! PyFile_WriteString(buf, output); } } --- 417,431 ---- gc = gc->gc_next) { n++; ! if (debug & DEBUG_UNCOLLECTABLE) { ! debug_cycle("uncollectable", PyObject_FROM_GC(gc)); } } ! if (debug & DEBUG_STATS) { if (m == 0 && n == 0) { ! PySys_WriteStderr("gc: done.\n"); } else { ! PySys_WriteStderr( ! "gc: done, %ld unreachable, %ld uncollectable.\n", ! n+m, n); } } *************** *** 445,449 **** allocated = 0; - PyErr_Clear(); /* in case writing to sys.stderr failed */ return n+m; } --- 437,440 ---- From python-dev@python.org Thu Aug 31 16:21:15 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 08:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.75,2.76 Message-ID: <200008311521.IAA24764@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv24711/Python Modified Files: sysmodule.c Log Message: _PySys_Init(): When setting up sys.version_info, use #if/#elif.../#endif instead of four #if/#endif blocks. This shortens the code and improves readability. Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.75 retrieving revision 2.76 diff -C2 -r2.75 -r2.76 *** sysmodule.c 2000/08/16 23:03:57 2.75 --- sysmodule.c 2000/08/31 15:21:11 2.76 *************** *** 421,432 **** #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_ALPHA s = "alpha"; ! #endif ! #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_BETA s = "beta"; ! #endif ! #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_GAMMA s = "candidate"; ! #endif ! #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_FINAL s = "final"; #endif --- 421,429 ---- #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_ALPHA s = "alpha"; ! #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_BETA s = "beta"; ! #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_GAMMA s = "candidate"; ! #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_FINAL s = "final"; #endif From python-dev@python.org Thu Aug 31 16:29:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 08:29:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc README,1.40,1.41 Message-ID: <200008311529.IAA32571@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv32560/Doc Modified Files: README Log Message: Update some version information for tools based on prodding from Greg Ward. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/README,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** README 2000/07/31 17:56:58 1.40 --- README 2000/08/31 15:29:38 1.41 *************** *** 78,88 **** The simplest way to get the rest of the tools in the configuration we ! used is to install the teTeX TeX distribution, version 0.4 or 0.9. More ! information is available on teTeX at . ! This is a Unix-only TeX distribution at this time. Note that the 0.9 ! release is still in testing; this documentation release was tested ! with the 9 Feb 1999 release. We'll be upgrading to the final version ! when it becomes available. Except for the PDF generation, there are ! no known problems with using the ("stable") teTeX 0.4 release. If you don't want to get teTeX, here is what you'll need: --- 78,87 ---- The simplest way to get the rest of the tools in the configuration we ! used is to install the teTeX TeX distribution, versions 0.9 or newer. ! More information is available on teTeX at . ! This is a Unix-only TeX distribution at this time. This documentation ! release was tested with the 1.0.7 release, but there have been no ! substantial changes since late in the 0.9 series, which we used ! extensively for previous versions without any difficulty. If you don't want to get teTeX, here is what you'll need: *************** *** 98,106 **** To create PDF files: ! - pdflatex. We used the one in the teTeX 0.9 distribution ! (pdfTeX version 3.14159-13b (Web2C 7.3beta4) at the time of ! this writing). Versions even a couple of patchlevels ! earlier are highly likely to fail due to syntax changes for ! some of the pdftex primitives. To create PostScript files: --- 97,105 ---- To create PDF files: ! - pdflatex. We used the one in the teTeX distribution (pdfTeX ! version 3.14159-13d (Web2C 7.3.1) at the time of this ! writing). Versions even a couple of patchlevels earlier are ! highly likely to fail due to syntax changes for some of the ! pdftex primitives. To create PostScript files: From python-dev@python.org Thu Aug 31 16:48:12 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:48:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_urllib.py,NONE,1.1 Message-ID: <200008311548.IAA03056@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2765/Lib/test Added Files: test_urllib.py Log Message: fixes bug #111951 applies patch #101369 by Moshe Zadke use explicit list of always safe characters instead of string.letters add test case --- NEW FILE --- # Minimal test of the quote function import urllib chars = 'abcdefghijklmnopqrstuvwxyz'\ '\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356' \ '\357\360\361\362\363\364\365\366\370\371\372\373\374\375\376\377' \ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \ '\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317' \ '\320\321\322\323\324\325\326\330\331\332\333\334\335\336' expected = 'abcdefghijklmnopqrstuvwxyz%df%e0%e1%e2%e3%e4%e5%e6%e7%e8%e9%ea%eb%ec%ed%ee%ef%f0%f1%f2%f3%f4%f5%f6%f8%f9%fa%fb%fc%fd%fe%ffABCDEFGHIJKLMNOPQRSTUVWXYZ%c0%c1%c2%c3%c4%c5%c6%c7%c8%c9%ca%cb%cc%cd%ce%cf%d0%d1%d2%d3%d4%d5%d6%d8%d9%da%db%dc%dd%de' test = urllib.quote(chars) assert test == expected, "urllib.quote problem" From python-dev@python.org Thu Aug 31 16:48:12 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:48:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_urllib,NONE,1.1 Message-ID: <200008311548.IAA03060@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv2765/Lib/test/output Added Files: test_urllib Log Message: fixes bug #111951 applies patch #101369 by Moshe Zadke use explicit list of always safe characters instead of string.letters add test case --- NEW FILE --- test_urllib From python-dev@python.org Thu Aug 31 16:48:12 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:48:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.103,1.104 Message-ID: <200008311548.IAA03057@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2765/Lib Modified Files: urllib.py Log Message: fixes bug #111951 applies patch #101369 by Moshe Zadke use explicit list of always safe characters instead of string.letters add test case Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.103 retrieving revision 1.104 diff -C2 -r1.103 -r1.104 *** urllib.py 2000/08/25 11:23:36 1.103 --- urllib.py 2000/08/31 15:48:09 1.104 *************** *** 1012,1016 **** return unquote(s) ! always_safe = string.letters + string.digits + '_,.-' def quote(s, safe = '/'): """quote('abc def') -> 'abc%20def'.""" --- 1012,1018 ---- return unquote(s) ! always_safe = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' ! 'abcdefghijklmnopqrstuvwxyz' ! '0123456789' '_,.-') def quote(s, safe = '/'): """quote('abc def') -> 'abc%20def'.""" *************** *** 1043,1047 **** l.append(k + '=' + v) return string.join(l, '&') - # Proxy handling --- 1045,1048 ---- From python-dev@python.org Thu Aug 31 17:11:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:11:10 -0700 Subject: [Python-checkins] CVS: python/dist/src acconfig.h,1.36,1.37 configure.in,1.151,1.152 Message-ID: <200008311611.JAA07916@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv7894 Modified Files: acconfig.h configure.in Log Message: Skip Montanaro : Update the build structures to automatically detect the presence of BSD db, including the proper name of the header file to include. Has all the expected niceties associated with yet-more-configure-options. ;) This checkin includes changes for non-generated files only; subsequent checkin will catch those. This is part of SourceForge patch #101272. Index: acconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/acconfig.h,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** acconfig.h 2000/08/30 22:29:47 1.36 --- acconfig.h 2000/08/31 16:11:07 1.37 *************** *** 152,155 **** --- 152,158 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to use BSD db. */ + #undef WITH_LIBDB + /* Define if you want to build an interpreter with many run-time checks */ #undef Py_DEBUG Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.151 retrieving revision 1.152 diff -C2 -r1.151 -r1.152 *** configure.in 2000/08/30 22:29:48 1.151 --- configure.in 2000/08/31 16:11:07 1.152 *************** *** 370,374 **** AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ ! sys/audioio.h sys/file.h sys/lock.h \ sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h) --- 370,374 ---- AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ ! sys/audioio.h sys/file.h sys/lock.h db_185.h db.h \ sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h) *************** *** 812,815 **** --- 812,839 ---- fi AC_MSG_RESULT($with_cycle_gc) + + # Check for LIBDB support + # either --with-libdb or, in its absence, the presence of db.h + AC_SUBST(USE_BSDDB_MODULE) + USE_BSDDB_MODULE="" + AC_MSG_CHECKING(for --with-libdb) + AC_ARG_WITH(libdb, + [ --with(out)-libdb disable/enable bsddb module]) + + # default is enabled + if test -z "$with_libdb" + then with_libdb="yes" + fi + # if we found db.h, enable, unless with_libdb is expressly set to "no" + if test "$ac_cv_header_db_h" = "yes" -a "$with_libdb" != "no" + then with_libdb="yes" + fi + if test "$with_libdb" = "no" + then + USE_BSDDB_MODULE="#" + else + AC_DEFINE(WITH_LIBDB) + fi + AC_MSG_RESULT($with_libdb) # Check for --with-wctype-functions From python-dev@python.org Thu Aug 31 17:11:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:11:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.config.in,1.2,1.3 Setup.in,1.108,1.109 bsddbmodule.c,1.23,1.24 Message-ID: <200008311611.JAA07917@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv7894/Modules Modified Files: Setup.config.in Setup.in bsddbmodule.c Log Message: Skip Montanaro : Update the build structures to automatically detect the presence of BSD db, including the proper name of the header file to include. Has all the expected niceties associated with yet-more-configure-options. ;) This checkin includes changes for non-generated files only; subsequent checkin will catch those. This is part of SourceForge patch #101272. Index: Setup.config.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.config.in,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Setup.config.in 2000/08/26 11:34:29 1.2 --- Setup.config.in 2000/08/31 16:11:07 1.3 *************** *** 9,10 **** --- 9,19 ---- # Garbage collection enabled with --with-cycle-gc @USE_GC_MODULE@gc gcmodule.c + + # You may want this to be built as a dynamically loaded module; uncomment + # the following line in that case: + + #*shared* + + # bsddb module enabled by --with-libdb or presence of db.h + @USE_BSDDB_MODULE@bsddb bsddbmodule.c -ldb + Index: Setup.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v retrieving revision 1.108 retrieving revision 1.109 diff -C2 -r1.108 -r1.109 *** Setup.in 2000/08/24 22:54:53 1.108 --- Setup.in 2000/08/31 16:11:07 1.109 *************** *** 362,365 **** --- 362,368 ---- # BSD DB 2.1.0.) + # Note: If a db.h file is found by configure, bsddb will be enabled + # automatically via Setup.config.in + #DB=/depot/sundry/src/berkeley-db/db.1.85 #DBPORT=$(DB)/PORT/irix.5.3 Index: bsddbmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/bsddbmodule.c,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** bsddbmodule.c 2000/07/24 14:43:34 1.23 --- bsddbmodule.c 2000/08/31 16:11:07 1.24 *************** *** 31,36 **** #include #include ! /* If using Berkeley DB 2.0 or newer, change this include to : */ #include /* Please don't include internal header files of the Berkeley db package (it messes up the info required in the Setup file) */ --- 31,39 ---- #include #include ! #ifdef HAVE_DB_185_H ! #include ! #else #include + #endif /* Please don't include internal header files of the Berkeley db package (it messes up the info required in the Setup file) */ From python-dev@python.org Thu Aug 31 17:13:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:13:26 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.140,1.141 config.h.in,2.70,2.71 Message-ID: <200008311613.JAA08305@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv8284 Modified Files: configure config.h.in Log Message: Skip Montanaro : Update the generated files related to the autoconf support for BSD db. This closes SourceForge patch #101272. Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.140 retrieving revision 1.141 diff -C2 -r1.140 -r1.141 *** configure 2000/08/30 22:29:47 1.140 --- configure 2000/08/31 16:13:19 1.141 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.150 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.151 [...3994 lines suppressed...] #include --- 5860,5869 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5863: checking for socklen_t" >&5 if eval "test \"\${ac_cv_type_socklen_t+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** *** 6025,6028 **** --- 6059,6063 ---- s%@LDLAST@%$LDLAST%g s%@USE_GC_MODULE@%$USE_GC_MODULE%g + s%@USE_BSDDB_MODULE@%$USE_BSDDB_MODULE%g s%@DLINCLDIR@%$DLINCLDIR%g s%@DYNLOADFILE@%$DYNLOADFILE%g Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.70 retrieving revision 2.71 diff -C2 -r2.70 -r2.71 *** config.h.in 2000/08/30 22:29:47 2.70 --- config.h.in 2000/08/31 16:13:20 2.71 *************** *** 211,214 **** --- 211,217 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to use BSD db. */ + #undef WITH_LIBDB + /* Define if you want to build an interpreter with many run-time checks */ #undef Py_DEBUG *************** *** 518,521 **** --- 521,530 ---- /* Define if you have the waitpid function. */ #undef HAVE_WAITPID + + /* Define if you have the header file. */ + #undef HAVE_DB_185_H + + /* Define if you have the header file. */ + #undef HAVE_DB_H /* Define if you have the header file. */ From python-dev@python.org Thu Aug 31 17:26:39 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:26:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.26,1.27 Message-ID: <200008311626.JAA10856@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10830/Doc/lib Modified Files: libdis.tex Log Message: UNARY_NEG is supposed to be UNARY_NEGATIVE (spotted by Charles Waldman ). Fix minor problem with EXTENDED_ARG description markup.. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** libdis.tex 2000/08/24 20:06:03 1.26 --- libdis.tex 2000/08/31 16:26:35 1.27 *************** *** 147,151 **** \end{opcodedesc} ! \begin{opcodedesc}{UNARY_NEG}{} Implements \code{TOS = -TOS}. \end{opcodedesc} --- 147,151 ---- \end{opcodedesc} ! \begin{opcodedesc}{UNARY_NEGATIVE}{} Implements \code{TOS = -TOS}. \end{opcodedesc} *************** *** 596,600 **** default two bytes. \var{ext} holds two additional bytes which, taken together with the subsequent opcode's argument, comprise a four-byte ! argument, \var {ext} being the two most-significant bytes. \end{opcodedesc} --- 596,600 ---- default two bytes. \var{ext} holds two additional bytes which, taken together with the subsequent opcode's argument, comprise a four-byte ! argument, \var{ext} being the two most-significant bytes. \end{opcodedesc} From python-dev@python.org Thu Aug 31 17:36:33 2000 From: python-dev@python.org (Greg Ward) Date: Thu, 31 Aug 2000 09:36:33 -0700 Subject: [Python-checkins] CVS: distutils/doc/dist dist.tex,1.21,1.22 Message-ID: <200008311636.JAA13649@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/doc/dist In directory slayer.i.sourceforge.net:/tmp/cvs-serv13636/dist Modified Files: dist.tex Log Message: Added abstract. Index: dist.tex =================================================================== RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** dist.tex 2000/08/31 14:47:05 1.21 --- dist.tex 2000/08/31 16:36:30 1.22 *************** *** 9,16 **** --- 9,26 ---- \authoraddress{E-mail: \email{gward@python.net}} + \makeindex \begin{document} \maketitle + \begin{abstract} + \noindent + This document describes the Python Distribution Utilities + (``Distutils'') from the module developer's point-of-view, describing + how to use the Distutils to make Python modules and extensions easily + available to a wider audience with very little overhead for + build/release/install mechanics. + \end{abstract} + \tableofcontents From python-dev@python.org Thu Aug 31 17:36:33 2000 From: python-dev@python.org (Greg Ward) Date: Thu, 31 Aug 2000 09:36:33 -0700 Subject: [Python-checkins] CVS: distutils/doc/inst inst.tex,1.16,1.17 Message-ID: <200008311636.JAA13656@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/doc/inst In directory slayer.i.sourceforge.net:/tmp/cvs-serv13636/inst Modified Files: inst.tex Log Message: Added abstract. Index: inst.tex =================================================================== RCS file: /cvsroot/python/distutils/doc/inst/inst.tex,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** inst.tex 2000/06/30 03:36:41 1.16 --- inst.tex 2000/08/31 16:36:31 1.17 *************** *** 25,28 **** --- 25,29 ---- \authoraddress{E-mail: \email{gward@python.net}} + \makeindex \begin{document} *************** *** 30,33 **** --- 31,42 ---- \maketitle + \begin{abstract} + \noindent + This document describes the Python Distribution Utilities + (``Distutils'') from the end-user's point-of-view, describing how to + extend the capabilities of a standard Python installation by building + and installing third-party Python modules and extensions. + \end{abstract} + %\begin{abstract} %\noindent *************** *** 664,669 **** \section{Distutils Configuration Files} \label{config-files} - - \XXX{not even implemented yet, much less documented!} --- 673,676 ---- From python-dev@python.org Thu Aug 31 17:40:11 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Thu, 31 Aug 2000 09:40:11 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.152,1.153 configure,1.141,1.142 Message-ID: <200008311640.JAA14950@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv14704 Modified Files: configure.in configure Log Message: Remove obsolete --with(out)-readline configure option Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.152 retrieving revision 1.153 diff -C2 -r1.152 -r1.153 *** configure.in 2000/08/31 16:11:07 1.152 --- configure.in 2000/08/31 16:40:08 1.153 *************** *** 703,713 **** ], AC_MSG_RESULT(no)) - AC_MSG_CHECKING(for --with(out)-readline) - AC_ARG_WITH(readline, - [ --with(out)-readline obsolete, edit Modules/Setup instead], - [AC_MSG_RESULT($withval) - AC_ERROR(--with(out)-readline is obsolete, edit Modules/Setup instead)], - [AC_MSG_RESULT(not specified.)]) - AC_SUBST(USE_THREAD_MODULE) USE_THREAD_MODULE="" --- 703,706 ---- Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.141 retrieving revision 1.142 diff -C2 -r1.141 -r1.142 *** configure 2000/08/31 16:13:19 1.141 --- configure 2000/08/31 16:40:08 1.142 *************** *** 1,8 **** #! /bin/sh ! # From configure.in Revision: 1.151 # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.14.1 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # --- 1,8 ---- #! /bin/sh [...4625 lines suppressed...] ! echo "$CONFIG_STATUS generated by autoconf version 2.14.1" exit 0 ;; -help | --help | --hel | --he | --h) --- 5947,5951 ---- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ! echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) *************** *** 6288,6291 **** chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 --- 6249,6252 ---- chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 From python-dev@python.org Thu Aug 31 18:23:38 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 10:23:38 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.27,1.28 Message-ID: <200008311723.KAA28668@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv28633/lib Modified Files: liburllib.tex Log Message: Document the limitation that urllib does not work with proxies which require authenication. This is an implementation limitation rather than required behavior, and may be fixed in the future. This closes SourceForge bug #111725. Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** liburllib.tex 2000/08/25 05:13:42 1.27 --- liburllib.tex 2000/08/31 17:23:35 1.28 *************** *** 63,71 **** see the \function{urlencode()} function below. ! The \function{urlopen()} function works transparently with proxies. ! In a \UNIX{} or Windows environment, set the \envvar{http_proxy}, ! \envvar{ftp_proxy} or \envvar{gopher_proxy} environment variables to a ! URL that identifies the proxy server before starting the Python ! interpreter. For example (the \character{\%} is the command prompt): \begin{verbatim} --- 63,72 ---- see the \function{urlencode()} function below. ! The \function{urlopen()} function works transparently with proxies ! whicd do not require authentication. In a \UNIX{} or Windows ! environment, set the \envvar{http_proxy}, \envvar{ftp_proxy} or ! \envvar{gopher_proxy} environment variables to a URL that identifies ! the proxy server before starting the Python interpreter. For example ! (the \character{\%} is the command prompt): \begin{verbatim} *************** *** 78,81 **** --- 79,85 ---- In a Macintosh environment, \function{urlopen()} will retrieve proxy information from Internet\index{Internet Config} Config. + + Proxies which require authentication for use are not currently + supported; this is considered an implementation limitation. The \function{urlopen()} function works transparently with proxies. From python-dev@python.org Thu Aug 31 18:45:38 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 10:45:38 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.153,1.154 configure,1.142,1.143 Message-ID: <200008311745.KAA04719@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv4623 Modified Files: configure.in configure Log Message: patch #101733: fix glitch in FreeBSD conf Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.153 retrieving revision 1.154 diff -C2 -r1.153 -r1.154 *** configure.in 2000/08/31 16:40:08 1.153 --- configure.in 2000/08/31 17:45:35 1.154 *************** *** 585,589 **** fi;; FreeBSD*) ! if [ "`$CC -dM -E - Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv20652/Modules Modified Files: Makefile.pre.in Log Message: If Setup is older than Setup.in, issue a bold warning that the Setup may need to be checked to make sure all the latest information is present. This closes SourceForge patch #101275. Index: Makefile.pre.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Makefile.pre.in,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -r1.63 -r1.64 *** Makefile.pre.in 2000/06/30 16:04:18 1.63 --- Makefile.pre.in 2000/08/31 16:56:15 1.64 *************** *** 161,166 **** done ! Setup: ! cp $(srcdir)/Setup.in Setup Setup.local: --- 161,175 ---- done ! Setup: $(srcdir)/Setup.in ! @if [ -f Setup ] ; then \ ! echo; \ ! echo "-------------------------------------------"; \ ! echo "$(srcdir)/Setup.in is newer than Setup;"; \ ! echo "check to make sure you have all the updates"; \ ! echo "you need in your Setup file."; \ ! echo "-------------------------------------------"; \ ! echo; \ ! else (set -x; cp $(srcdir)/Setup.in Setup); fi ! Setup.local: From python-dev@python.org Thu Aug 31 19:11:16 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 11:11:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules linuxaudiodev.c,2.6,2.7 Message-ID: <200008311811.LAA10681@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv10203/Modules Modified Files: linuxaudiodev.c Log Message: This module has a poor name, since it can be used under FreeBSD and Linux. Perhaps winaudio would be better, as it would offend both parties equally. tg@freebsd.org: allow this module to compile under FreeBSD (he suggests voxwareaudio) Index: linuxaudiodev.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/linuxaudiodev.c,v retrieving revision 2.6 retrieving revision 2.7 diff -C2 -r2.6 -r2.7 *** linuxaudiodev.c 2000/08/18 05:10:45 2.6 --- linuxaudiodev.c 2000/08/31 18:11:07 2.7 *************** *** 28,34 **** --- 28,44 ---- #include + #if defined(linux) #include typedef unsigned long uint32_t; + + #elif defined(__FreeBSD__) + #include + + #ifndef SNDCTL_DSP_CHANNELS + #define SNDCTL_DSP_CHANNELS SOUND_PCM_WRITE_CHANNELS + #endif + + #endif typedef struct { From python-dev@python.org Thu Aug 31 20:04:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:04:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.62,2.63 Message-ID: <200008311904.MAA25678@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv25656 Modified Files: dictobject.c Log Message: Clear errors raised by PyObject_Compare() without losing any existing exception context. This avoids improperly propogating errors raised by a user-defined __cmp__() by a subsequent lookup operation. This patch does *not* include the performance enhancement patch for dictionaries with string keys only; that will be checked in separately. This closes SourceForge patch #101277 and bug #112558. Index: dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.62 retrieving revision 2.63 diff -C2 -r2.62 -r2.63 *** dictobject.c 2000/08/08 16:11:31 2.62 --- dictobject.c 2000/08/31 19:04:07 2.63 *************** *** 140,143 **** --- 140,147 ---- dictentry *ep0 = mp->ma_table; register dictentry *ep; + register int restore_error = 0; + register int checked_error = 0; + register int cmp; + PyObject *err_type, *err_value, *err_tb; /* We must come up with (i, incr) such that 0 <= i < ma_size and 0 < incr < ma_size and both are a function of hash */ *************** *** 152,163 **** freeslot = ep; else { ! if (ep->me_hash == hash && ! PyObject_Compare(ep->me_key, key) == 0) ! { ! return ep; } freeslot = NULL; } - /* XXX What if PyObject_Compare returned an exception? */ /* Derive incr from hash, just to make it more arbitrary. Note that incr must not be 0, or we will get into an infinite loop.*/ --- 156,178 ---- freeslot = ep; else { ! if (ep->me_hash == hash) { ! /* error can't have been checked yet */ ! checked_error = 1; ! if (PyErr_Occurred()) { ! restore_error = 1; ! PyErr_Fetch(&err_type, &err_value, &err_tb); ! } ! cmp = PyObject_Compare(ep->me_key, key); ! if (PyErr_Occurred()) ! PyErr_Clear(); ! else if (cmp == 0) { ! if (restore_error) ! PyErr_Restore(err_type, err_value, ! err_tb); ! return ep; ! } } freeslot = NULL; } /* Derive incr from hash, just to make it more arbitrary. Note that incr must not be 0, or we will get into an infinite loop.*/ *************** *** 168,171 **** --- 183,188 ---- ep = &ep0[(i+incr)&mask]; if (ep->me_key == NULL) { + if (restore_error) + PyErr_Restore(err_type, err_value, err_tb); if (freeslot != NULL) return freeslot; *************** *** 177,186 **** freeslot = ep; } ! else if (ep->me_key == key || ! (ep->me_hash == hash && ! PyObject_Compare(ep->me_key, key) == 0)) { return ep; } - /* XXX What if PyObject_Compare returned an exception? */ /* Cycle through GF(2^n)-{0} */ incr = incr << 1; --- 194,221 ---- freeslot = ep; } ! else if (ep->me_key == key) { ! if (restore_error) ! PyErr_Restore(err_type, err_value, err_tb); return ep; + } + else if (ep->me_hash == hash) { + if (!checked_error) { + checked_error = 1; + if (PyErr_Occurred()) { + restore_error = 1; + PyErr_Fetch(&err_type, &err_value, + &err_tb); + } + } + cmp = PyObject_Compare(ep->me_key, key); + if (PyErr_Occurred()) + PyErr_Clear(); + else if (cmp == 0) { + if (restore_error) + PyErr_Restore(err_type, err_value, + err_tb); + return ep; + } } /* Cycle through GF(2^n)-{0} */ incr = incr << 1; From python-dev@python.org Thu Aug 31 20:23:04 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:23:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.45,1.46 Message-ID: <200008311923.MAA02263@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv961/PC Modified Files: config.h Log Message: add user-modifiable recursion_limit ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit Index: config.h =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/config.h,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -r1.45 -r1.46 *** config.h 2000/08/15 22:33:59 1.45 --- config.h 2000/08/31 19:23:01 1.46 *************** *** 444,454 **** #define SIZEOF_LONG_LONG 8 - /* Smaller stack size limit. (9500 would work too, but we're conservative.) */ - - #ifndef MAX_RECURSION_DEPTH - #define MAX_RECURSION_DEPTH 5000 - #endif - - /* EXPERIMENTAL FEATURE: When CHECK_IMPORT_CASE is defined, check case of imported modules against case of file; this causes "import String" to fail --- 444,447 ---- From python-dev@python.org Thu Aug 31 20:23:04 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:23:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.39,1.40 Message-ID: <200008311923.MAA02261@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv961/Doc/lib Modified Files: libsys.tex Log Message: add user-modifiable recursion_limit ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** libsys.tex 2000/08/15 04:24:43 1.39 --- libsys.tex 2000/08/31 19:22:59 1.40 *************** *** 149,152 **** --- 149,159 ---- \end{funcdesc} + \begin{funcdesc}{getrecursionlimit}{} + Return the current value of the recursion limit, the maximum depth of + the Python interpreter stack. This limit prevents infinite recursion + from causing an overflow of the C stack and crashing Python. It can + be set by \function{setrecursionlimit}. + \end{funcdesc} + \begin{datadesc}{hexversion} The version number encoded as a single integer. This is guaranteed to *************** *** 275,278 **** --- 282,296 ---- \index{profile function} \index{profiler} + + \begin{funcdesc}{setrecursionlimit}{limit} + Set the maximum depth of the Python interpreter stack to \var{limit}. + This limit prevents infinite recursion from causing an overflow of the + C stack and crashing Python. + + The highest possible limit is platform-dependent. A user may need to + set the limit higher when she has a program that requires deep + recursion and a platform that supports a higher limit. This should be + done with care, because a too-high limit can lead to a crash. + \edn{funcdesc} \begin{funcdesc}{settrace}{tracefunc} From python-dev@python.org Thu Aug 31 20:23:04 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:23:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.199,2.200 sysmodule.c,2.76,2.77 Message-ID: <200008311923.MAA02272@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv961/Python Modified Files: ceval.c sysmodule.c Log Message: add user-modifiable recursion_limit ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.199 retrieving revision 2.200 diff -C2 -r2.199 -r2.200 *** ceval.c 2000/08/30 20:25:01 2.199 --- ceval.c 2000/08/31 19:23:01 2.200 *************** *** 299,302 **** --- 299,316 ---- + /* The interpreter's recursion limit */ + + static int recursion_limit = 2500; + + int Py_GetRecursionLimit(void) + { + return recursion_limit; + } + + void Py_SetRecursionLimit(int new_limit) + { + recursion_limit = new_limit; + } + /* Status code for main loop (reason for stack unwind) */ *************** *** 327,334 **** /* Interpreter main loop */ - #ifndef MAX_RECURSION_DEPTH - #define MAX_RECURSION_DEPTH 10000 - #endif - static PyObject * eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals, --- 341,344 ---- *************** *** 566,570 **** } ! if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) { --tstate->recursion_depth; PyErr_SetString(PyExc_RuntimeError, --- 576,580 ---- } ! if (++tstate->recursion_depth > recursion_limit) { --tstate->recursion_depth; PyErr_SetString(PyExc_RuntimeError, Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.76 retrieving revision 2.77 diff -C2 -r2.76 -r2.77 *** sysmodule.c 2000/08/31 15:21:11 2.76 --- sysmodule.c 2000/08/31 19:23:01 2.77 *************** *** 200,203 **** --- 200,242 ---- n instructions. This also affects how often thread switches occur."; + static PyObject * + sys_setrecursionlimit(PyObject *self, PyObject *args) + { + int new_limit; + if (!PyArg_ParseTuple(args, "i:setrecursionlimit", &new_limit)) + return NULL; + if (new_limit <= 0) { + PyErr_SetString(PyExc_ValueError, + "recursion limit must be positive"); + return NULL; + } + Py_SetRecursionLimit(new_limit); + Py_INCREF(Py_None); + return Py_None; + } + + static char setrecursionlimit_doc[] = + "setrecursionlimit(n)\n\ + \n\ + Set the maximum depth of the Python interpreter stack to n. This\n\ + limit prevents infinite recursion from causing an overflow of the C\n\ + stack and crashing Python. The highest possible limit is platform-\n\ + dependent."; + + static PyObject * + sys_getrecursionlimit(PyObject *self, PyObject *args) + { + if (!PyArg_ParseTuple(args, ":getrecursionlimit")) + return NULL; + return PyInt_FromLong(Py_GetRecursionLimit()); + } + + static char getrecursionlimit_doc[] = + "getrecursionlimit()\n\ + \n\ + Return the current value of the recursion limit, the maximum depth\n\ + of the Python interpreter stack. This limit prevents infinite\n\ + recursion from causing an overflow of the C stack and crashing Python."; + #ifdef USE_MALLOPT /* Link with -lmalloc (or -lmpc) on an SGI */ *************** *** 269,273 **** {"exc_info", sys_exc_info, 1, exc_info_doc}, {"exit", sys_exit, 0, exit_doc}, ! {"getdefaultencoding", sys_getdefaultencoding, 1, getdefaultencoding_doc}, #ifdef COUNT_ALLOCS {"getcounts", sys_getcounts, 1}, --- 308,313 ---- {"exc_info", sys_exc_info, 1, exc_info_doc}, {"exit", sys_exit, 0, exit_doc}, ! {"getdefaultencoding", sys_getdefaultencoding, 1, ! getdefaultencoding_doc}, #ifdef COUNT_ALLOCS {"getcounts", sys_getcounts, 1}, *************** *** 281,290 **** #endif {"getrefcount", sys_getrefcount, 1, getrefcount_doc}, #ifdef USE_MALLOPT {"mdebug", sys_mdebug, 1}, #endif ! {"setdefaultencoding", sys_setdefaultencoding, 1, setdefaultencoding_doc}, ! {"setcheckinterval", sys_setcheckinterval, 1, setcheckinterval_doc}, {"setprofile", sys_setprofile, 0, setprofile_doc}, {"settrace", sys_settrace, 0, settrace_doc}, {NULL, NULL} /* sentinel */ --- 321,336 ---- #endif {"getrefcount", sys_getrefcount, 1, getrefcount_doc}, + {"getrecursionlimit", sys_getrecursionlimit, 1, + getrecursionlimit_doc}, #ifdef USE_MALLOPT {"mdebug", sys_mdebug, 1}, #endif ! {"setdefaultencoding", sys_setdefaultencoding, 1, ! setdefaultencoding_doc}, ! {"setcheckinterval", sys_setcheckinterval, 1, ! setcheckinterval_doc}, {"setprofile", sys_setprofile, 0, setprofile_doc}, + {"setrecursionlimit", sys_setrecursionlimit, 1, + setrecursionlimit_doc}, {"settrace", sys_settrace, 0, settrace_doc}, {NULL, NULL} /* sentinel */ *************** *** 377,382 **** --- 423,430 ---- exit() -- exit the interpreter by raising SystemExit\n\ getrefcount() -- return the reference count for an object (plus one :-)\n\ + getrecursionlimit() -- return the max recursion depth for the interpreter\n\ setcheckinterval() -- control how often the interpreter checks for events\n\ setprofile() -- set the global profiling function\n\ + setrecursionlimit() -- set the max recursion depth for the interpreter\n\ settrace() -- set the global debug tracing function\n\ " From python-dev@python.org Thu Aug 31 20:24:20 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:24:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Misc find_recursionlimit.py,NONE,1.1 Message-ID: <200008311924.MAA03080@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv2867/Misc Added Files: find_recursionlimit.py Log Message: script that reports a fairly safe recursionlimit for a specific platform --- NEW FILE --- #! /usr/bin/env python """Find the maximum recursion limit that prevents core dumps This script finds the maximum safe recursion limit on a particular platform. If you need to change the recursion limit on your system, this script will tell you a safe upper bound. To use the new limit, call sys.setrecursionlimit. This module implements several ways to create infinite recursion in Python. Different implementations end up pushing different numbers of C stack frames, depending on how many calls through Python's abstract C API occur. After each round of tests, it prints a message Limit of NNNN is fine. It ends when Python causes a segmentation fault because the limit is too high. On platforms like Mac and Windows, it should exit with a MemoryError. NB: A program that does not use __methods__ can set a higher limit. """ import sys class RecursiveBlowup1: def __init__(self): self.__init__() def test_init(): return RecursiveBlowup1() class RecursiveBlowup2: def __repr__(self): return repr(self) def test_repr(): return repr(RecursiveBlowup2()) class RecursiveBlowup4: def __add__(self, x): return x + self def test_add(): return RecursiveBlowup4() + RecursiveBlowup4() class RecursiveBlowup5: def __getattr__(self, attr): return getattr(self, attr) def test_getattr(): return RecursiveBlowup5().attr class RecursiveBlowup6: def __getitem__(self, item): return self[item - 2] + self[item - 1] def test_getitem(): return RecursiveBlowup6()[5] def test_recurse(): return test_recurse() def check_limit(n, test_func_name): sys.setrecursionlimit(n) if test_func_name.startswith("test_"): print test_func_name[5:] else: print test_func_name test_func = globals()[test_func_name] try: test_func() except RuntimeError: pass else: print "Yikes!" limit = 1000 while 1: check_limit(limit, "test_recurse") check_limit(limit, "test_add") check_limit(limit, "test_repr") check_limit(limit, "test_init") check_limit(limit, "test_getattr") check_limit(limit, "test_getitem") print "Limit of %d is fine" % limit limit = limit + 100 From python-dev@python.org Thu Aug 31 20:31:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:31:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.63,2.64 Message-ID: <200008311931.MAA03789@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv3780/Objects Modified Files: dictobject.c Log Message: Slight performance hack that also avoids requiring the existence of thread state for dictionaries that have only been indexed by string keys. See the comments in SourceForge for more. This closes SourceForge patch #101309. Index: dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.63 retrieving revision 2.64 diff -C2 -r2.63 -r2.64 *** dictobject.c 2000/08/31 19:04:07 2.63 --- dictobject.c 2000/08/31 19:31:38 2.64 *************** *** 20,23 **** --- 20,26 ---- #define MINSIZE 4 + /* define this out if you don't want conversion statistics on exit */ + #undef SHOW_CONVERSION_COUNTS + /* Table of irreducible polynomials to efficiently cycle through *************** *** 83,87 **** when it is more than half filled. */ ! typedef struct { PyObject_HEAD int ma_fill; --- 86,91 ---- when it is more than half filled. */ ! typedef struct dictobject dictobject; ! struct dictobject { PyObject_HEAD int ma_fill; *************** *** 90,94 **** int ma_poly; dictentry *ma_table; ! } dictobject; PyObject * --- 94,116 ---- int ma_poly; dictentry *ma_table; ! dictentry *(*ma_lookup)(dictobject *mp, PyObject *key, long hash); ! }; ! ! /* forward declarations */ ! static dictentry * ! lookdict_string(dictobject *mp, PyObject *key, long hash); ! ! #ifdef SHOW_CONVERSION_COUNTS ! static long created = 0L; ! static long converted = 0L; ! ! static void ! show_counts(void) ! { ! fprintf(stderr, "created %ld string dicts\n", created); ! fprintf(stderr, "converted %ld to normal dicts\n", converted); ! fprintf(stderr, "%.2f%% conversion rate\n", (100.0*converted)/created); ! } ! #endif PyObject * *************** *** 100,103 **** --- 122,128 ---- if (dummy == NULL) return NULL; + #ifdef SHOW_CONVERSION_COUNTS + Py_AtExit(show_counts); + #endif } mp = PyObject_NEW(dictobject, &PyDict_Type); *************** *** 109,112 **** --- 134,141 ---- mp->ma_fill = 0; mp->ma_used = 0; + mp->ma_lookup = lookdict_string; + #ifdef SHOW_CONVERSION_COUNTS + ++created; + #endif PyObject_GC_Init(mp); return (PyObject *)mp; *************** *** 130,133 **** --- 159,166 ---- (This version is due to Reimer Behrends, some ideas are also due to Jyrki Alakuijala and Vladimir Marangozov.) + + This function must never return NULL; failures are indicated by returning + a dictentry* for which the me_value field is NULL. Exceptions are never + reported by this function, and outstanding exceptions are maintained. */ static dictentry * *************** *** 227,230 **** --- 260,340 ---- /* + * Hacked up version of lookdict which can assume keys are always strings; + * this assumption allows testing for errors during PyObject_Compare() to + * be dropped; string-string comparisons never raise exceptions. This also + * means we don't need to go through PyObject_Compare(); we can always use + * the tp_compare slot of the string type object directly. + * + * This really only becomes meaningful if proper error handling in lookdict() + * is too expensive. + */ + static dictentry * + lookdict_string(dictobject *mp, PyObject *key, register long hash) + { + register int i; + register unsigned incr; + register dictentry *freeslot; + register unsigned int mask = mp->ma_size-1; + dictentry *ep0 = mp->ma_table; + register dictentry *ep; + cmpfunc compare = PyString_Type.tp_compare; + + /* make sure this function doesn't have to handle non-string keys */ + if (!PyString_Check(key)) { + #ifdef SHOW_CONVERSION_COUNTS + ++converted; + #endif + mp->ma_lookup = lookdict; + return lookdict(mp, key, hash); + } + /* We must come up with (i, incr) such that 0 <= i < ma_size + and 0 < incr < ma_size and both are a function of hash */ + i = (~hash) & mask; + /* We use ~hash instead of hash, as degenerate hash functions, such + as for ints , can have lots of leading zeros. It's not + really a performance risk, but better safe than sorry. */ + ep = &ep0[i]; + if (ep->me_key == NULL || ep->me_key == key) + return ep; + if (ep->me_key == dummy) + freeslot = ep; + else { + if (ep->me_hash == hash + && compare(ep->me_key, key) == 0) { + return ep; + } + freeslot = NULL; + } + /* Derive incr from hash, just to make it more arbitrary. Note that + incr must not be 0, or we will get into an infinite loop.*/ + incr = (hash ^ ((unsigned long)hash >> 3)) & mask; + if (!incr) + incr = mask; + for (;;) { + ep = &ep0[(i+incr)&mask]; + if (ep->me_key == NULL) { + if (freeslot != NULL) + return freeslot; + else + return ep; + } + if (ep->me_key == dummy) { + if (freeslot == NULL) + freeslot = ep; + } + else if (ep->me_key == key + || (ep->me_hash == hash + && compare(ep->me_key, key) == 0)) { + return ep; + } + /* Cycle through GF(2^n)-{0} */ + incr = incr << 1; + if (incr > mask) + incr ^= mp->ma_poly; /* This will implicitly clear + the highest bit */ + } + } + + /* Internal routine to insert a new item into the table. Used both by the internal resize routine and by the public insert routine. *************** *** 236,240 **** PyObject *old_value; register dictentry *ep; ! ep = lookdict(mp, key, hash); if (ep->me_value != NULL) { old_value = ep->me_value; --- 346,350 ---- PyObject *old_value; register dictentry *ep; ! ep = (mp->ma_lookup)(mp, key, hash); if (ep->me_value != NULL) { old_value = ep->me_value; *************** *** 313,320 **** { long hash; if (!PyDict_Check(op)) { return NULL; } ! if (((dictobject *)op)->ma_table == NULL) return NULL; #ifdef CACHE_HASH --- 423,431 ---- { long hash; + dictobject *mp = (dictobject *)op; if (!PyDict_Check(op)) { return NULL; } ! if (mp->ma_table == NULL) return NULL; #ifdef CACHE_HASH *************** *** 329,333 **** } } ! return lookdict((dictobject *)op, key, hash) -> me_value; } --- 440,444 ---- } } ! return (mp->ma_lookup)(mp, key, hash)->me_value; } *************** *** 401,405 **** if (((dictobject *)op)->ma_table == NULL) goto empty; ! ep = lookdict(mp, key, hash); if (ep->me_value == NULL) { empty: --- 512,516 ---- if (((dictobject *)op)->ma_table == NULL) goto empty; ! ep = (mp->ma_lookup)(mp, key, hash); if (ep->me_value == NULL) { empty: *************** *** 584,588 **** return NULL; } ! v = lookdict(mp, key, hash) -> me_value; if (v == NULL) PyErr_SetObject(PyExc_KeyError, key); --- 695,699 ---- return NULL; } ! v = (mp->ma_lookup)(mp, key, hash) -> me_value; if (v == NULL) PyErr_SetObject(PyExc_KeyError, key); *************** *** 913,918 **** PyErr_Clear(); /* Don't want errors here */ } ! aval = lookdict(a, akey, ahash) -> me_value; ! bval = lookdict(b, bkey, bhash) -> me_value; res = PyObject_Compare(aval, bval); if (res != 0) --- 1024,1029 ---- PyErr_Clear(); /* Don't want errors here */ } ! aval = (a->ma_lookup)(a, akey, ahash) -> me_value; ! bval = (b->ma_lookup)(b, bkey, bhash) -> me_value; res = PyObject_Compare(aval, bval); if (res != 0) *************** *** 949,953 **** return NULL; } ! ok = mp->ma_size != 0 && lookdict(mp, key, hash)->me_value != NULL; return PyInt_FromLong(ok); } --- 1060,1065 ---- return NULL; } ! ok = (mp->ma_size != 0 ! && (mp->ma_lookup)(mp, key, hash)->me_value != NULL); return PyInt_FromLong(ok); } *************** *** 975,979 **** return NULL; } ! val = lookdict(mp, key, hash)->me_value; finally: --- 1087,1091 ---- return NULL; } ! val = (mp->ma_lookup)(mp, key, hash)->me_value; finally: *************** *** 1007,1011 **** return NULL; } ! val = lookdict(mp, key, hash)->me_value; finally: --- 1119,1123 ---- return NULL; } ! val = (mp->ma_lookup)(mp, key, hash)->me_value; finally: From python-dev@python.org Thu Aug 31 20:35:58 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:35:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.40,1.41 Message-ID: <200008311935.MAA04158@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv4148/Doc/lib Modified Files: libsys.tex Log Message: Fix markup error and minor consistency nit. Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** libsys.tex 2000/08/31 19:22:59 1.40 --- libsys.tex 2000/08/31 19:35:56 1.41 *************** *** 153,157 **** the Python interpreter stack. This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python. It can ! be set by \function{setrecursionlimit}. \end{funcdesc} --- 153,157 ---- the Python interpreter stack. This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python. It can ! be set by \function{setrecursionlimit()}. \end{funcdesc} *************** *** 292,296 **** recursion and a platform that supports a higher limit. This should be done with care, because a too-high limit can lead to a crash. ! \edn{funcdesc} \begin{funcdesc}{settrace}{tracefunc} --- 292,296 ---- recursion and a platform that supports a higher limit. This should be done with care, because a too-high limit can lead to a crash. ! \end{funcdesc} \begin{funcdesc}{settrace}{tracefunc} From python-dev@python.org Thu Aug 31 20:48:54 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:48:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_operations,1.1,1.2 Message-ID: <200008311948.MAA05401@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv5388/Lib/test/output Modified Files: test_operations Log Message: Test case to exercise fix for error propogation bug in dictionarys. Index: test_operations =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_operations,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_operations 1996/12/10 23:20:01 1.1 --- test_operations 2000/08/31 19:48:52 1.2 *************** *** 1,3 **** test_operations 3. Operations ! XXX Not yet implemented --- 1,6 ---- test_operations 3. Operations ! XXX Mostly not yet implemented ! 3.1 Dictionary lookups succeed even if __cmp__() raises an exception ! raising error ! No exception passed through. From python-dev@python.org Thu Aug 31 20:48:54 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:48:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_operations.py,1.1,1.2 Message-ID: <200008311948.MAA05397@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv5388/Lib/test Modified Files: test_operations.py Log Message: Test case to exercise fix for error propogation bug in dictionarys. Index: test_operations.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_operations.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_operations.py 1992/01/27 16:56:04 1.1 --- test_operations.py 2000/08/31 19:48:51 1.2 *************** *** 3,5 **** print '3. Operations' ! print 'XXX Not yet implemented' --- 3,28 ---- print '3. Operations' ! print 'XXX Mostly not yet implemented' ! ! ! print '3.1 Dictionary lookups succeed even if __cmp__() raises an exception' ! ! # SourceForge bug #112558: ! # http://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 ! ! class BadDictKey: ! def __hash__(self): ! return hash(self.__class__) ! ! def __cmp__(self, other): ! if isinstance(other, self.__class__): ! print "raising error" ! raise RuntimeError, "gotcha" ! return other ! ! d = {} ! x1 = BadDictKey() ! x2 = BadDictKey() ! d[x1] = 1 ! d[x2] = 2 ! print "No exception passed through." From python-dev@python.org Thu Aug 31 21:03:57 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 31 Aug 2000 13:03:57 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.71,2.72 Message-ID: <200008312003.NAA07761@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv7711 Modified Files: config.h.in Log Message: After rerunning autoheader, two symbols (HAVE__GETPTY and WITH_LIBDB) appear in a different place. Oh well. Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.71 retrieving revision 2.72 diff -C2 -r2.71 -r2.72 *** config.h.in 2000/08/31 16:13:20 2.71 --- config.h.in 2000/08/31 20:03:54 2.72 *************** *** 273,276 **** --- 273,279 ---- #undef SIZEOF_VOID_P + /* Define if you have the _getpty function. */ + #undef HAVE__GETPTY + /* Define if you have the alarm function. */ #undef HAVE_ALARM *************** *** 360,366 **** #undef HAVE_GETPID - /* Define if you have the _getpty function. */ - #undef HAVE__GETPTY - /* Define if you have the getpwent function. */ #undef HAVE_GETPWENT --- 363,366 ---- *************** *** 522,530 **** #undef HAVE_WAITPID - /* Define if you have the header file. */ - #undef HAVE_DB_185_H - /* Define if you have the header file. */ #undef HAVE_DB_H /* Define if you have the header file. */ --- 522,530 ---- #undef HAVE_WAITPID /* Define if you have the header file. */ #undef HAVE_DB_H + + /* Define if you have the header file. */ + #undef HAVE_DB_185_H /* Define if you have the header file. */ From python-dev@python.org Thu Aug 31 21:55:32 2000 From: python-dev@python.org (Barry A. Warsaw) Date: Thu, 31 Aug 2000 16:55:32 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Modules Makefile.pre.in,1.63,1.64 References: <200008311656.JAA20666@slayer.i.sourceforge.net> Message-ID: <14766.50756.893007.253356@anthem.concentric.net> >>>>> "Fred" == Fred L Drake writes: Fred> If Setup is older than Setup.in, issue a bold warning that Fred> the Setup may need to be checked to make sure all the latest Fred> information is present. Fred> This closes SourceForge patch #101275. Not quite. When I run make in the top-level directory, I see this message: ------------------------------------------- ./Setup.in is newer than Setup; check to make sure you have all the updates you need in your Setup file. ------------------------------------------- I have to hunt around in my compile output to notice that, oh, make cd'd into Modules so it must be talking about /that/ Setup file. "Then why did it say ./Setup.in"? :) The warning should say Modules/Setup.in is newer than Modules/Setup. -Barry From python-dev@python.org Thu Aug 31 22:14:59 2000 From: python-dev@python.org (Barry A. Warsaw) Date: Thu, 31 Aug 2000 17:14:59 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Misc find_recursionlimit.py,NONE,1.1 References: <200008311924.MAA03080@slayer.i.sourceforge.net> Message-ID: <14766.51923.685753.319113@anthem.concentric.net> I wonder if find_recursionlimit.py shouldn't go in Tools and perhaps be run as a separate rule in the Makefile (with a corresponding cleanup of the inevitable core file, and a printing of the last reasonable value returned). Or you can write a simple Python wrapper around find_recursionlimit.py that did the parenthetical tasks. -Barry From python-dev@python.org Thu Aug 31 22:24:26 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 31 Aug 2000 14:24:26 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.32,1.33 Message-ID: <200008312124.OAA32251@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32241 Modified Files: pep-0200.txt Log Message: The gettext.py module is complete. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -r1.32 -r1.33 *** pep-0200.txt 2000/08/29 15:01:34 1.32 --- pep-0200.txt 2000/08/31 21:24:20 1.33 *************** *** 145,151 **** * Add \U1234678 escapes in u"" strings - Fredrik Lundh - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - Open: proposed but not accepted or rejected --- 145,148 ---- *************** *** 296,299 **** --- 293,298 ---- * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. + + * gettext.py module - Barry Warsaw From python-dev@python.org Thu Aug 31 22:53:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 14:53:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Makefile.pre.in,1.64,1.65 Message-ID: <200008312153.OAA03214@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3200/Modules Modified Files: Makefile.pre.in Log Message: Minor adjustment to Setup.in message, based on comment from Barry Warsaw. Index: Makefile.pre.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Makefile.pre.in,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -r1.64 -r1.65 *** Makefile.pre.in 2000/08/31 16:56:15 1.64 --- Makefile.pre.in 2000/08/31 21:53:03 1.65 *************** *** 163,173 **** Setup: $(srcdir)/Setup.in @if [ -f Setup ] ; then \ ! echo; \ ! echo "-------------------------------------------"; \ ! echo "$(srcdir)/Setup.in is newer than Setup;"; \ ! echo "check to make sure you have all the updates"; \ ! echo "you need in your Setup file."; \ ! echo "-------------------------------------------"; \ ! echo; \ else (set -x; cp $(srcdir)/Setup.in Setup); fi --- 163,173 ---- Setup: $(srcdir)/Setup.in @if [ -f Setup ] ; then \ ! echo; \ ! echo "----------------------------------------------"; \ ! echo "Modules/Setup.in is newer than Moodules/Setup;"; \ ! echo "check to make sure you have all the updates"; \ ! echo "you need in your Setup file."; \ ! echo "----------------------------------------------"; \ ! echo; \ else (set -x; cp $(srcdir)/Setup.in Setup); fi From python-dev@python.org Thu Aug 31 23:02:49 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 15:02:49 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.98,1.99 Message-ID: <200008312202.PAA05140@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv5097 Modified Files: Makefile.in Log Message: Fix BeOS check in the libainstall target; noted by Mark Favas . Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -r1.98 -r1.99 *** Makefile.in 2000/08/29 15:00:11 1.98 --- Makefile.in 2000/08/31 22:02:46 1.99 *************** *** 406,410 **** else true; \ fi ! @if [ "$(MACHDEP)" == "beos" ] ; then \ echo; echo "Installing support files for building shared extension modules on BeOS:"; \ $(INSTALL_DATA) BeOS/README $(LIBPL)/README; \ --- 406,410 ---- else true; \ fi ! @if [ "$(MACHDEP)" = "beos" ] ; then \ echo; echo "Installing support files for building shared extension modules on BeOS:"; \ $(INSTALL_DATA) BeOS/README $(LIBPL)/README; \ From python-dev@python.org Thu Aug 31 23:57:57 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 31 Aug 2000 15:57:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test re_tests.py,1.15,1.16 Message-ID: <200008312257.PAA22873@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv19734/Lib/test Modified Files: re_tests.py Log Message: closes bug #112468 (and all the other bugs that surfaced when I fixed the a bug in the regression test harness...) Index: re_tests.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/re_tests.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** re_tests.py 2000/08/08 17:06:52 1.15 --- re_tests.py 2000/08/31 22:57:55 1.16 *************** *** 17,20 **** --- 17,32 ---- benchmarks = [ + + # test common prefix + ('Python|Perl', 'Perl'), # Alternation + ('(Python|Perl)', 'Perl'), # Grouped alternation + + ('Python|Perl|Tcl', 'Perl'), # Alternation + ('(Python|Perl|Tcl)', 'Perl'), # Grouped alternation + + ('(Python)\\1', 'PythonPython'), # Backreference + ('([0a-z][a-z0-9]*,)+', 'a5,b7,c9,'), # Disable the fastmap optimization + ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,'), # A few sets + ('Python', 'Python'), # Simple text literal ('.*Python', 'Python'), # Bad text literal *************** *** 22,30 **** ('.*(Python)', 'Python'), # Bad text literal with grouping - ('(Python|Perl|Tcl', 'Perl'), # Alternation - ('(Python|Perl|Tcl)', 'Perl'), # Grouped alternation - ('(Python)\\1', 'PythonPython'), # Backreference - ('([0a-z][a-z]*,)+', 'a5,b7,c9,'), # Disable the fastmap optimization - ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets ] --- 34,37 ---- *************** *** 80,89 **** (r'\a[\b]\f\n\r\t\v', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), (r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), ! (r'\u', '', SYNTAX_ERROR), # A Perl escape (r'\c\e\g\h\i\j\k\m\o\p\q\y\z', 'ceghijkmopqyz', SUCCEED, 'found', 'ceghijkmopqyz'), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! (r'\x00ffffffffffffff', '\377', SUCCEED, 'found', chr(255)), ! (r'\x00f', '\017', SUCCEED, 'found', chr(15)), ! (r'\x00fe', '\376', SUCCEED, 'found', chr(254)), (r"^\w+=(\\[\000-\277]|[^\n\\])*", "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c", --- 87,101 ---- (r'\a[\b]\f\n\r\t\v', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), (r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), ! # NOTE: not an error under PCRE/PRE: ! # (r'\u', '', SYNTAX_ERROR), # A Perl escape (r'\c\e\g\h\i\j\k\m\o\p\q\y\z', 'ceghijkmopqyz', SUCCEED, 'found', 'ceghijkmopqyz'), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! # new \x semantics ! (r'\x00ffffffffffffff', '\377', FAIL, 'found', chr(255)), ! (r'\x00f', '\017', FAIL, 'found', chr(15)), ! (r'\x00fe', '\376', FAIL, 'found', chr(254)), ! # (r'\x00ffffffffffffff', '\377', SUCCEED, 'found', chr(255)), ! # (r'\x00f', '\017', SUCCEED, 'found', chr(15)), ! # (r'\x00fe', '\376', SUCCEED, 'found', chr(254)), (r"^\w+=(\\[\000-\277]|[^\n\\])*", "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c", *************** *** 139,143 **** ('a[-b]', 'a-', SUCCEED, 'found', 'a-'), ('a[\\-b]', 'a-', SUCCEED, 'found', 'a-'), ! ('a[b-]', 'a-', SYNTAX_ERROR), ('a[]b', '-', SYNTAX_ERROR), ('a[', '-', SYNTAX_ERROR), --- 151,156 ---- ('a[-b]', 'a-', SUCCEED, 'found', 'a-'), ('a[\\-b]', 'a-', SUCCEED, 'found', 'a-'), ! # NOTE: not an error under PCRE/PRE: ! # ('a[b-]', 'a-', SYNTAX_ERROR), ('a[]b', '-', SYNTAX_ERROR), ('a[', '-', SYNTAX_ERROR), *************** *** 544,548 **** # Check odd placement of embedded pattern modifiers ! ('w(?i)', 'W', SYNTAX_ERROR), # Comments using the x embedded pattern modifier --- 557,563 ---- # Check odd placement of embedded pattern modifiers ! # not an error under PCRE/PRE: ! ('w(?i)', 'W', SUCCEED, 'found', 'W'), ! # ('w(?i)', 'W', SYNTAX_ERROR), # Comments using the x embedded pattern modifier *************** *** 578,587 **** ('[\\D]+', '1234abc5678', SUCCEED, 'found', 'abc'), ('[\\da-fA-F]+', '123abc', SUCCEED, 'found', '123abc'), ! ('[\\d-x]', '-', SYNTAX_ERROR), (r'([\s]*)([\S]*)([\s]*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'(\s*)(\S*)(\s*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! (r'\x00ff', '\377', SUCCEED, 'found', chr(255)), (r'\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), ('\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), --- 593,605 ---- ('[\\D]+', '1234abc5678', SUCCEED, 'found', 'abc'), ('[\\da-fA-F]+', '123abc', SUCCEED, 'found', '123abc'), ! # not an error under PCRE/PRE: ! # ('[\\d-x]', '-', SYNTAX_ERROR), (r'([\s]*)([\S]*)([\s]*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'(\s*)(\S*)(\s*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! # new \x semantics ! (r'\x00ff', '\377', FAIL, 'found', chr(255)), ! # (r'\x00ff', '\377', SUCCEED, 'found', chr(255)), (r'\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), ('\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), *************** *** 589,596 **** (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'), ! # additional regression tests (1.6 and later) # xmllib problem (r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'), ! ] --- 607,619 ---- (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'), ! # ! # post-1.5.2 additions # xmllib problem (r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'), ! # bug 111869 (PRE/PCRE fails on this one, SRE doesn't) ! (r'.*d', 'abc\nabd', SUCCEED, 'found', 'abd'), ! # bug 112468 ! ('(', '', SYNTAX_ERROR), ! ('[\\41]', '!', SUCCEED, 'found', '!'), ] From python-dev@python.org Thu Aug 31 23:57:57 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 31 Aug 2000 15:57:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre_parse.py,1.30,1.31 Message-ID: <200008312257.PAA22866@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv19734/Lib Modified Files: sre_parse.py Log Message: closes bug #112468 (and all the other bugs that surfaced when I fixed the a bug in the regression test harness...) Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** sre_parse.py 2000/08/07 20:59:04 1.30 --- sre_parse.py 2000/08/31 22:57:54 1.31 *************** *** 15,22 **** MAXREPEAT = 65535 - # FIXME: the following might change in 2.0 final. but for now, this - # seems to be the best way to be compatible with 1.5.2 - CHARMASK = 0xff - SPECIAL_CHARS = ".\\[{()*+?^$|" REPEAT_CHARS = "*+?{" --- 15,18 ---- *************** *** 182,188 **** self.index = self.index + len(char) self.next = char ! def match(self, char): if char == self.next: ! self.__next() return 1 return 0 --- 178,185 ---- self.index = self.index + len(char) self.next = char ! def match(self, char, skip=1): if char == self.next: ! if skip: ! self.__next() return 1 return 0 *************** *** 231,244 **** try: if escape[1:2] == "x": ! # FIXME: in 2.0, \xNN must have exactly two digits ! while source.next in HEXDIGITS: escape = escape + source.get() escape = escape[2:] ! return LITERAL, int(escape[-4:], 16) & CHARMASK elif str(escape[1:2]) in OCTDIGITS: ! while source.next in OCTDIGITS: escape = escape + source.get() escape = escape[1:] ! return LITERAL, int(escape[-6:], 8) & CHARMASK if len(escape) == 2: return LITERAL, ord(escape[1]) --- 228,244 ---- try: if escape[1:2] == "x": ! # hexadecimal escape (exactly two digits) ! while source.next in HEXDIGITS and len(escape) < 4: escape = escape + source.get() escape = escape[2:] ! if len(escape) != 2: ! raise error, "bogus escape: %s" % repr("\\" + escape) ! return LITERAL, int(escape, 16) & 0xff elif str(escape[1:2]) in OCTDIGITS: ! # octal escape (up to three digits) ! while source.next in OCTDIGITS and len(escape) < 5: escape = escape + source.get() escape = escape[1:] ! return LITERAL, int(escape, 8) & 0xff if len(escape) == 2: return LITERAL, ord(escape[1]) *************** *** 257,278 **** try: if escape[1:2] == "x": ! while source.next in HEXDIGITS: escape = escape + source.get() escape = escape[2:] ! return LITERAL, int(escape[-4:], 16) & CHARMASK elif escape[1:2] in DIGITS: ! while 1: ! group = _group(escape, state.groups) ! if group: ! if (not source.next or ! not _group(escape + source.next, state.groups)): ! return GROUPREF, group ! escape = escape + source.get() ! elif source.next in OCTDIGITS: escape = escape + source.get() ! else: ! break ! escape = escape[1:] ! return LITERAL, int(escape[-6:], 8) & CHARMASK if len(escape) == 2: return LITERAL, ord(escape[1]) --- 257,286 ---- try: if escape[1:2] == "x": ! # hexadecimal escape ! while source.next in HEXDIGITS and len(escape) < 4: escape = escape + source.get() escape = escape[2:] ! if len(escape) != 2: ! raise error, "bogus escape: %s" % repr("\\" + escape) ! return LITERAL, int(escape, 16) & 0xff ! elif escape[1:2] == "0": ! # octal escape ! while source.next in OCTDIGITS and len(escape) < 5: ! escape = escape + source.get() ! return LITERAL, int(escape[1:], 8) & 0xff elif escape[1:2] in DIGITS: ! # octal escape *or* decimal group reference (sigh) ! here = source.tell() ! if source.next in DIGITS: ! escape = escape + source.get() ! if escape[2] in OCTDIGITS and source.next in OCTDIGITS: ! # got three octal digits; this is an octal escape escape = escape + source.get() ! return LITERAL, int(escape[1:], 8) & 0xff ! # got at least one decimal digit; this is a group reference ! group = _group(escape, state.groups) ! if group: ! return GROUPREF, group ! raise error, "bogus escape: %s" % repr(escape) if len(escape) == 2: return LITERAL, ord(escape[1]) *************** *** 291,295 **** if not nested: break ! if not source.next or source.match(")"): break else: --- 299,303 ---- if not nested: break ! if not source.next or source.match(")", 0): break else: *************** *** 396,400 **** if code1[0] != LITERAL or code2[0] != LITERAL: raise error, "illegal range" ! set.append((RANGE, (code1[1], code2[1]))) else: if code1[0] is IN: --- 404,412 ---- if code1[0] != LITERAL or code2[0] != LITERAL: raise error, "illegal range" ! lo = code1[1] ! hi = code2[1] ! if hi < lo: ! raise error, "illegal range" ! set.append((RANGE, (lo, hi))) else: if code1[0] is IN: *************** *** 506,509 **** --- 518,524 ---- break source.get() + if not source.match(")"): + raise error, "unbalanced parenthesis" + continue elif source.next in ("=", "!", "<"): # lookahead assertions *************** *** 516,519 **** --- 531,536 ---- char = source.get() p = _parse_sub(source, state) + if not source.match(")"): + raise error, "unbalanced parenthesis" if char == "=": subpattern.append((ASSERT, (dir, p))) *************** *** 533,536 **** --- 550,555 ---- group = state.getgroup(name) p = _parse_sub(source, state) + if not source.match(")"): + raise error, "unbalanced parenthesis" subpattern.append((SUBPATTERN, (group, p))) else: *************** *** 626,630 **** if not code: this = this[1:] ! code = LITERAL, int(this[-6:], 8) & CHARMASK a(code) else: --- 645,649 ---- if not code: this = this[1:] ! code = LITERAL, int(this[-6:], 8) & 0xff a(code) else: From python-dev@python.org Thu Aug 31 23:12:23 2000 From: python-dev@python.org (Barry A. Warsaw) Date: Thu, 31 Aug 2000 18:12:23 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Modules Makefile.pre.in,1.64,1.65 References: <200008312153.OAA03214@slayer.i.sourceforge.net> Message-ID: <14766.55367.854732.727671@anthem.concentric.net> >>>>> "Fred" == Fred L Drake writes: Fred> "Modules/Setup.in is newer than Moodules/Setup;"; \ ! echo ------------------------------------------^^^ who let the cows in here? From python-dev@python.org Tue Aug 1 00:42:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:42:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.25,1.26 Message-ID: <200007312342.QAA24864@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24857/Doc/lib Modified Files: libstdtypes.tex Log Message: Stop lying about [].pop() being experimental! There is no backing it out at this point. Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** libstdtypes.tex 2000/07/31 20:52:21 1.25 --- libstdtypes.tex 2000/07/31 23:42:23 1.26 *************** *** 507,514 **** \var{s}. ! \item[(4)] The \method{pop()} method is experimental and at the moment ! only supported by the list and array types. The optional argument ! \var{i} defaults to \code{-1}, so that by default the last item is ! removed and returned. \item[(5)] The \method{sort()} and \method{reverse()} methods modify the --- 507,513 ---- \var{s}. ! \item[(4)] The \method{pop()} method only supported by the list and ! array types. The optional argument \var{i} defaults to \code{-1}, ! so that by default the last item is removed and returned. \item[(5)] The \method{sort()} and \method{reverse()} methods modify the From python-dev@python.org Tue Aug 1 00:54:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:54:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml/parsers - New directory Message-ID: <200007312354.QAA25943@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml/parsers In directory slayer.i.sourceforge.net:/tmp/cvs-serv25935/parsers Log Message: Directory /cvsroot/python/python/dist/src/Lib/xml/parsers added to the repository From python-dev@python.org Tue Aug 1 00:59:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:59:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml/parser __init__.py,1.2,NONE Message-ID: <200007312359.QAA26404@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml/parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv26394/parser Removed Files: __init__.py Log Message: Rename the "parser" package to "parsers" to be compatible with the PyXML project. From python-dev@python.org Tue Aug 1 00:59:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 16:59:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml/parsers __init__.py,NONE,1.1 Message-ID: <200007312359.QAA26407@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml/parsers In directory slayer.i.sourceforge.net:/tmp/cvs-serv26394/parsers Added Files: __init__.py Log Message: Rename the "parser" package to "parsers" to be compatible with the PyXML project. --- NEW FILE --- """Python interfaces to XML parsers. This package contains one module: expat -- Python wrapper for James Clark's Expat parser, with namespace support. """ From python-dev@python.org Tue Aug 1 01:05:18 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 31 Jul 2000 17:05:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/xml __init__.py,1.3,1.4 Message-ID: <200008010005.RAA27941@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/xml In directory slayer.i.sourceforge.net:/tmp/cvs-serv27883 Modified Files: __init__.py Log Message: Add magic to replace the xml package with _xmlplus at import time. Update docstring to reflect change of name for the parsers subpackage. Index: __init__.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/xml/__init__.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** __init__.py 2000/07/02 13:52:21 1.3 --- __init__.py 2000/08/01 00:05:16 1.4 *************** *** 6,10 **** Namespaces. ! parser -- Python wrappers for XML parsers (currently only supports Expat). sax -- The Simple API for XML, developed by XML-Dev, led by David --- 6,10 ---- Namespaces. ! parsers -- Python wrappers for XML parsers (currently only supports Expat). sax -- The Simple API for XML, developed by XML-Dev, led by David *************** *** 12,13 **** --- 12,23 ---- supports the SAX 2 API. """ + + + if __name__ == "xml": + try: + import _xmlplus + except ImportError: + pass + else: + import sys + sys.modules[__name__] = _xmlplus From python-dev@python.org Tue Aug 1 01:07:21 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Mon, 31 Jul 2000 17:07:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.26,1.27 Message-ID: <200008010007.RAA28516@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv28392 Modified Files: libstdtypes.tex Log Message: fixing a minor spelling mistake Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** libstdtypes.tex 2000/07/31 23:42:23 1.26 --- libstdtypes.tex 2000/08/01 00:07:17 1.27 *************** *** 507,511 **** \var{s}. ! \item[(4)] The \method{pop()} method only supported by the list and array types. The optional argument \var{i} defaults to \code{-1}, so that by default the last item is removed and returned. --- 507,511 ---- \var{s}. ! \item[(4)] The \method{pop()} method is only supported by the list and array types. The optional argument \var{i} defaults to \code{-1}, so that by default the last item is removed and returned. From python-dev@python.org Tue Aug 1 02:21:15 2000 From: python-dev@python.org (A.M. Kuchling) Date: Mon, 31 Jul 2000 18:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/curses has_key.py,NONE,1.1 __init__.py,1.2,1.3 Message-ID: <200008010121.SAA14986@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/curses In directory slayer.i.sourceforge.net:/tmp/cvs-serv14935 Modified Files: __init__.py Added Files: has_key.py Log Message: Added Python function to emulate the ncurses has_key() function. --- NEW FILE --- # # Emulation of has_key() function for platforms that don't use ncurses # import _curses # Table mapping curses keys to the terminfo capability name _capability_names = { _curses.KEY_A1: 'ka1', _curses.KEY_A3: 'ka3', _curses.KEY_B2: 'kb2', _curses.KEY_BACKSPACE: 'kbs', _curses.KEY_BEG: 'kbeg', _curses.KEY_BTAB: 'kcbt', _curses.KEY_C1: 'kc1', _curses.KEY_C3: 'kc3', _curses.KEY_CANCEL: 'kcan', _curses.KEY_CATAB: 'ktbc', _curses.KEY_CLEAR: 'kclr', _curses.KEY_CLOSE: 'kclo', _curses.KEY_COMMAND: 'kcmd', _curses.KEY_COPY: 'kcpy', _curses.KEY_CREATE: 'kcrt', _curses.KEY_CTAB: 'kctab', _curses.KEY_DC: 'kdch1', _curses.KEY_DL: 'kdl1', _curses.KEY_DOWN: 'kcud1', _curses.KEY_EIC: 'krmir', _curses.KEY_END: 'kend', _curses.KEY_ENTER: 'kent', _curses.KEY_EOL: 'kel', _curses.KEY_EOS: 'ked', _curses.KEY_EXIT: 'kext', _curses.KEY_F0: 'kf0', _curses.KEY_F1: 'kf1', _curses.KEY_F10: 'kf10', _curses.KEY_F11: 'kf11', _curses.KEY_F12: 'kf12', _curses.KEY_F13: 'kf13', _curses.KEY_F14: 'kf14', _curses.KEY_F15: 'kf15', _curses.KEY_F16: 'kf16', _curses.KEY_F17: 'kf17', _curses.KEY_F18: 'kf18', _curses.KEY_F19: 'kf19', _curses.KEY_F2: 'kf2', _curses.KEY_F20: 'kf20', _curses.KEY_F21: 'kf21', _curses.KEY_F22: 'kf22', _curses.KEY_F23: 'kf23', _curses.KEY_F24: 'kf24', _curses.KEY_F25: 'kf25', _curses.KEY_F26: 'kf26', _curses.KEY_F27: 'kf27', _curses.KEY_F28: 'kf28', _curses.KEY_F29: 'kf29', _curses.KEY_F3: 'kf3', _curses.KEY_F30: 'kf30', _curses.KEY_F31: 'kf31', _curses.KEY_F32: 'kf32', _curses.KEY_F33: 'kf33', _curses.KEY_F34: 'kf34', _curses.KEY_F35: 'kf35', _curses.KEY_F36: 'kf36', _curses.KEY_F37: 'kf37', _curses.KEY_F38: 'kf38', _curses.KEY_F39: 'kf39', _curses.KEY_F4: 'kf4', _curses.KEY_F40: 'kf40', _curses.KEY_F41: 'kf41', _curses.KEY_F42: 'kf42', _curses.KEY_F43: 'kf43', _curses.KEY_F44: 'kf44', _curses.KEY_F45: 'kf45', _curses.KEY_F46: 'kf46', _curses.KEY_F47: 'kf47', _curses.KEY_F48: 'kf48', _curses.KEY_F49: 'kf49', _curses.KEY_F5: 'kf5', _curses.KEY_F50: 'kf50', _curses.KEY_F51: 'kf51', _curses.KEY_F52: 'kf52', _curses.KEY_F53: 'kf53', _curses.KEY_F54: 'kf54', _curses.KEY_F55: 'kf55', _curses.KEY_F56: 'kf56', _curses.KEY_F57: 'kf57', _curses.KEY_F58: 'kf58', _curses.KEY_F59: 'kf59', _curses.KEY_F6: 'kf6', _curses.KEY_F60: 'kf60', _curses.KEY_F61: 'kf61', _curses.KEY_F62: 'kf62', _curses.KEY_F63: 'kf63', _curses.KEY_F7: 'kf7', _curses.KEY_F8: 'kf8', _curses.KEY_F9: 'kf9', _curses.KEY_FIND: 'kfnd', _curses.KEY_HELP: 'khlp', _curses.KEY_HOME: 'khome', _curses.KEY_IC: 'kich1', _curses.KEY_IL: 'kil1', _curses.KEY_LEFT: 'kcub1', _curses.KEY_LL: 'kll', _curses.KEY_MARK: 'kmrk', _curses.KEY_MESSAGE: 'kmsg', _curses.KEY_MOVE: 'kmov', _curses.KEY_NEXT: 'knxt', _curses.KEY_NPAGE: 'knp', _curses.KEY_OPEN: 'kopn', _curses.KEY_OPTIONS: 'kopt', _curses.KEY_PPAGE: 'kpp', _curses.KEY_PREVIOUS: 'kprv', _curses.KEY_PRINT: 'kprt', _curses.KEY_REDO: 'krdo', _curses.KEY_REFERENCE: 'kref', _curses.KEY_REFRESH: 'krfr', _curses.KEY_REPLACE: 'krpl', _curses.KEY_RESTART: 'krst', _curses.KEY_RESUME: 'kres', _curses.KEY_RIGHT: 'kcuf1', _curses.KEY_SAVE: 'ksav', _curses.KEY_SBEG: 'kBEG', _curses.KEY_SCANCEL: 'kCAN', _curses.KEY_SCOMMAND: 'kCMD', _curses.KEY_SCOPY: 'kCPY', _curses.KEY_SCREATE: 'kCRT', _curses.KEY_SDC: 'kDC', _curses.KEY_SDL: 'kDL', _curses.KEY_SELECT: 'kslt', _curses.KEY_SEND: 'kEND', _curses.KEY_SEOL: 'kEOL', _curses.KEY_SEXIT: 'kEXT', _curses.KEY_SF: 'kind', _curses.KEY_SFIND: 'kFND', _curses.KEY_SHELP: 'kHLP', _curses.KEY_SHOME: 'kHOM', _curses.KEY_SIC: 'kIC', _curses.KEY_SLEFT: 'kLFT', _curses.KEY_SMESSAGE: 'kMSG', _curses.KEY_SMOVE: 'kMOV', _curses.KEY_SNEXT: 'kNXT', _curses.KEY_SOPTIONS: 'kOPT', _curses.KEY_SPREVIOUS: 'kPRV', _curses.KEY_SPRINT: 'kPRT', _curses.KEY_SR: 'kri', _curses.KEY_SREDO: 'kRDO', _curses.KEY_SREPLACE: 'kRPL', _curses.KEY_SRIGHT: 'kRIT', _curses.KEY_SRSUME: 'kRES', _curses.KEY_SSAVE: 'kSAV', _curses.KEY_SSUSPEND: 'kSPD', _curses.KEY_STAB: 'khts', _curses.KEY_SUNDO: 'kUND', _curses.KEY_SUSPEND: 'kspd', _curses.KEY_UNDO: 'kund', _curses.KEY_UP: 'kcuu1' } def has_key(ch): if type(ch) == type( '' ): ch = ord(ch) # Figure out the correct capability name for the keycode. capability_name = _capability_names[ch] #Check the current terminal description for that capability; #if present, return true, else return false. if _curses.tigetstr( capability_name ): return 1 else: return 0 if __name__ == '__main__': # Compare the output of this implementation and the ncurses has_key, # on platforms where has_key is already available import _curses try: L = [] _curses.initscr() for key in _capability_names.keys(): system = _curses.has_key(key) python = has_key(key) if system != python: L.append( 'Mismatch for key %s, system=%i, Python=%i' % (_curses.keyname( key ), system, python) ) finally: _curses.endwin() for i in L: print i Index: __init__.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/curses/__init__.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** __init__.py 2000/06/26 23:54:03 1.2 --- __init__.py 2000/08/01 01:21:11 1.3 *************** *** 33,34 **** --- 33,41 ---- return stdscr + # Import Python has_key() implementation if _curses doesn't contain has_key() + + try: + has_key + except NameError: + from has_key import has_key + From python-dev@python.org Tue Aug 1 02:26:04 2000 From: python-dev@python.org (A.M. Kuchling) Date: Mon, 31 Jul 2000 18:26:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules shamodule.c,2.8,2.9 Message-ID: <200008010126.SAA15273@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv15247 Modified Files: shamodule.c Log Message: Update e-mail address Index: shamodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/shamodule.c,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** shamodule.c 2000/07/21 06:00:07 2.8 --- shamodule.c 2000/08/01 01:26:02 2.9 *************** *** 22,26 **** based upon. Additional work performed by: ! Andrew Kuchling (amk1@erols.com) Greg Stein (gstein@lyra.org) */ --- 22,26 ---- based upon. Additional work performed by: ! Andrew Kuchling (amk1@bigfoot.com) Greg Stein (gstein@lyra.org) */ From python-dev@python.org Tue Aug 1 14:01:46 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 06:01:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.3,1.4 Message-ID: <200008011301.GAA10270@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv10022/Lib/test Modified Files: test_sre.py Log Message: -- SRE 0.9.8: updated test scripts Index: test_sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_sre.py 2000/07/03 18:44:21 1.3 --- test_sre.py 2000/08/01 13:01:34 1.4 *************** *** 153,159 **** assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! # FIXME: group problem ! # assert sre.split("(b)|(:+)", ":a:b::c") == \ ! # ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: --- 153,160 ---- assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! ## print sre.split("(b)|(:+)", ":a:b::c") ! ## print ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] ! ## assert sre.split("(b)|(:+)", ":a:b::c") == \ ! ## ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: *************** *** 378,383 **** print '=== Fails on locale-sensitive match', t ! # Try the match with UNICODE enabled, and check that it ! # still succeeds. obj=sre.compile(pattern, sre.UNICODE) result=obj.search(s) --- 379,384 ---- print '=== Fails on locale-sensitive match', t ! # Try the match with UNICODE locale enabled, and check ! # that it still succeeds. obj=sre.compile(pattern, sre.UNICODE) result=obj.search(s) From python-dev@python.org Tue Aug 1 14:01:46 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 06:01:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_sre,1.7,1.8 test_re,1.11,1.12 Message-ID: <200008011301.GAA10275@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv10022/Lib/test/output Modified Files: test_sre test_re Log Message: -- SRE 0.9.8: updated test scripts Index: test_sre =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_sre,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** test_sre 2000/07/23 21:46:17 1.7 --- test_sre 2000/08/01 13:01:43 1.8 *************** *** 1,6 **** test_sre - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Failed incorrectly ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === grouping error ('(a)(b)c|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None') 'ab-None-b' should be 'ab-None-None' - === grouping error ('(a)+b|aac', 'aac', 0, 'found+"-"+g1', 'aac-None') 'aac-a' should be 'aac-None' - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') --- 1 ---- Index: test_re =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_re,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** test_re 2000/07/24 22:35:11 1.11 --- test_re 2000/08/01 13:01:43 1.12 *************** *** 1,12 **** test_re - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on case-insensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on locale-sensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Failed incorrectly ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === Fails on case-insensitive match ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === Fails on locale-sensitive match ('(a+)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a') - === grouping error ('(a)(b)c|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None') 'ab-None-b' should be 'ab-None-None' - === grouping error ('(a)+b|aac', 'aac', 0, 'found+"-"+g1', 'aac-None') 'aac-a' should be 'aac-None' - === Failed incorrectly ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on case-insensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') - === Fails on locale-sensitive match ('^(.+)?B', 'AB', 0, 'g1', 'A') --- 1 ---- From python-dev@python.org Tue Aug 1 14:16:58 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 06:16:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.4,1.5 Message-ID: <200008011316.GAA15551@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv14481/Lib/test Modified Files: test_sre.py Log Message: -- SRE 0.9.8: now that the bug is fixed, I might as well enable the test again... Index: test_sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_sre.py 2000/08/01 13:01:34 1.4 --- test_sre.py 2000/08/01 13:16:55 1.5 *************** *** 153,160 **** assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! ## print sre.split("(b)|(:+)", ":a:b::c") ! ## print ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] ! ## assert sre.split("(b)|(:+)", ":a:b::c") == \ ! ## ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: --- 153,158 ---- assert sre.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c'] assert sre.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c'] ! assert sre.split("(b)|(:+)", ":a:b::c") == \ ! ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c'] assert sre.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c'] except AssertionError: From python-dev@python.org Tue Aug 1 16:50:12 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 08:50:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python20.wse,1.5,1.6 Message-ID: <200008011550.IAA15659@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv15642 Modified Files: python20.wse Log Message: somehow the 'Total Keys=1' disappears. No other changes. Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** python20.wse 2000/06/30 14:55:26 1.5 --- python20.wse 2000/08/01 15:50:09 1.6 *************** *** 1,1249 **** ! Document Type: WSE ! item: Global ! Version=5.0 ! Title=Python 2.0 beta 1 ! Flags=00010100 ! Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ! Japanese Font Name=MS Gothic ! Japanese Font Size=10 ! Start Gradient=0 0 255 ! End Gradient=0 0 0 [...2446 lines suppressed...] ! Text=%APPTITLE% has been successfully installed. ! Text= ! Text=Press the Finish button to exit this installation. ! Text French=%APPTITLE% est maintenant installé. ! Text French= ! Text French=Cliquez sur le bouton Fin pour quitter l'installation. ! Text German=%APPTITLE% wurde erfolgreich installiert. ! Text German= ! Text German=Klicken Sie auf "Weiter", um die Installation zu beenden. ! Text Spanish=%APPTITLE% se ha instalado con éxito. ! Text Spanish= ! Text Spanish=Presione el botón Terminar para salir de esta instalación. ! Text Italian=L'installazione %APPTITLE% è stata portata a termine con successo. ! Text Italian= ! Text Italian=Premere il pulsante Fine per uscire dall'installazione. ! end ! end ! end ! item: End Block ! end From python-dev@python.org Tue Aug 1 17:37:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 09:37:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile,1.195,1.195.2.1 Message-ID: <200008011637.JAA26634@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv26624 Modified Files: Tag: cnri-16-start Makefile Log Message: Update the release number for the 1.6 branch only. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile,v retrieving revision 1.195 retrieving revision 1.195.2.1 diff -C2 -r1.195 -r1.195.2.1 *** Makefile 2000/04/28 17:09:17 1.195 --- Makefile 2000/08/01 16:37:02 1.195.2.1 *************** *** 62,66 **** # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6a2 --- 62,66 ---- # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6b1 From python-dev@python.org Tue Aug 1 17:42:35 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 09:42:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include patchlevel.h,2.35,2.35.2.1 Message-ID: <200008011642.JAA27103@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv27093 Modified Files: Tag: cnri-16-start patchlevel.h Log Message: Update the release number for the 1.6 branch only. Index: patchlevel.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/patchlevel.h,v retrieving revision 2.35 retrieving revision 2.35.2.1 diff -C2 -r2.35 -r2.35.2.1 *** patchlevel.h 2000/04/06 15:01:30 2.35 --- patchlevel.h 2000/08/01 16:42:32 2.35.2.1 *************** *** 53,64 **** #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 0 ! #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA ! #define PY_RELEASE_SERIAL 2 /* Version as a string */ ! #define PY_VERSION "1.6a2" /* Historic */ ! #define PATCHLEVEL "1.6a2" /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. --- 53,64 ---- #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 0 ! #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_BETA ! #define PY_RELEASE_SERIAL 1 /* Version as a string */ ! #define PY_VERSION "1.6b1" /* Historic */ ! #define PATCHLEVEL "1.6b1" /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. From python-dev@python.org Tue Aug 1 17:53:47 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Tue, 1 Aug 2000 09:53:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.9,2.10 Message-ID: <200008011653.JAA28273@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv28218 Modified Files: pyport.h Log Message: Guido said this is food for the beta-testers Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.9 retrieving revision 2.10 diff -C2 -r2.9 -r2.10 *** pyport.h 2000/07/31 22:19:30 2.9 --- pyport.h 2000/08/01 16:53:44 2.10 *************** *** 282,285 **** --- 282,287 ---- here is a set that should do the job */ + #ifdef 0 /* disabled and probably obsolete */ + #ifndef FD_SETSIZE #define FD_SETSIZE 256 *************** *** 305,308 **** --- 307,313 ---- #endif /* FD_SET */ + + #endif /* fd manipulation macros */ + #ifdef __cplusplus } From python-dev@python.org Tue Aug 1 18:33:35 2000 From: python-dev@python.org (Jeremy Hylton) Date: Tue, 1 Aug 2000 10:33:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib httplib.py,1.18,1.19 Message-ID: <200008011733.KAA06829@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv6655 Modified Files: httplib.py Log Message: add support for HTTPS Modify HTTP to use delegation instead of inheritance. The _connection_class attribute of the class defines what class to delegate to. The HTTPS class is a subclass of HTTP that redefines _connection_class. Index: httplib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/httplib.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** httplib.py 2000/07/18 09:09:47 1.18 --- httplib.py 2000/08/01 17:33:32 1.19 *************** *** 1,7 **** - # - # HTTP/1.1 client library - # - - # ### this may as well go into a doc string... """HTTP/1.1 client library --- 1,2 ---- *************** *** 72,76 **** """ - import socket import string --- 67,70 ---- *************** *** 600,604 **** ! class HTTP(HTTPConnection): "Compatibility class with httplib.py from 1.5." --- 594,598 ---- ! class HTTP: "Compatibility class with httplib.py from 1.5." *************** *** 608,611 **** --- 602,607 ---- debuglevel = 0 + _connection_class = HTTPConnection + def __init__(self, host='', port=None, **x509): "Provide a default host, since the superclass requires one." *************** *** 618,622 **** # an error when we attempt to connect. Presumably, the client code # will call connect before then, with a proper host. ! HTTPConnection.__init__(self, host, port) # we never actually use these for anything, but we keep them here for --- 614,622 ---- # an error when we attempt to connect. Presumably, the client code # will call connect before then, with a proper host. ! self._conn = self._connection_class(host, port) ! # set up delegation to flesh out interface ! self.send = self._conn.send ! self.putrequest = self._conn.putrequest ! self.endheaders = self._conn.endheaders # we never actually use these for anything, but we keep them here for *************** *** 631,636 **** if host is not None: ! self._set_hostport(host, port) ! HTTPConnection.connect(self) def set_debuglevel(self, debuglevel): --- 631,636 ---- if host is not None: ! self._conn._set_hostport(host, port) ! self._conn.connect() def set_debuglevel(self, debuglevel): *************** *** 644,649 **** def putheader(self, header, *values): "The superclass allows only one value argument." ! HTTPConnection.putheader(self, header, ! string.joinfields(values, '\r\n\t')) def getreply(self): --- 644,649 ---- def putheader(self, header, *values): "The superclass allows only one value argument." ! self._conn.putheader(header, ! string.joinfields(values, '\r\n\t')) def getreply(self): *************** *** 656,660 **** """ try: ! response = self.getresponse() except BadStatusLine, e: ### hmm. if getresponse() ever closes the socket on a bad request, --- 656,660 ---- """ try: ! response = self._conn.getresponse() except BadStatusLine, e: ### hmm. if getresponse() ever closes the socket on a bad request, *************** *** 663,667 **** ### should we keep this behavior? do people use it? # keep the socket open (as a file), and return it ! self.file = self.sock.makefile('rb', 0) # close our socket -- we want to restart after any protocol error --- 663,667 ---- ### should we keep this behavior? do people use it? # keep the socket open (as a file), and return it ! self.file = self._conn.sock.makefile('rb', 0) # close our socket -- we want to restart after any protocol error *************** *** 676,680 **** def close(self): ! HTTPConnection.close(self) # note that self.file == response.fp, which gets closed by the --- 676,680 ---- def close(self): ! self._conn.close() # note that self.file == response.fp, which gets closed by the *************** *** 685,688 **** --- 685,699 ---- self.file = None + if hasattr(socket, 'ssl'): + class HTTPS(HTTP): + """Compatibility with 1.5 httplib interface + + Python 1.5.2 did not have an HTTPS class, but it defined an + interface for sending http requests that is also useful for + https. + """ + + _connection_class = HTTPSConnection + class HTTPException(Exception): *************** *** 765,769 **** if hasattr(socket, 'ssl'): ! host = 'www.c2.net' hs = HTTPS() hs.connect(host) --- 776,780 ---- if hasattr(socket, 'ssl'): ! host = 'sourceforge.net' hs = HTTPS() hs.connect(host) From python-dev@python.org Tue Aug 1 18:46:25 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 10:46:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python Makefile.in,2.24,2.25 Message-ID: <200008011746.KAA08023@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv8008/Python Modified Files: Makefile.in Log Message: Include the dependence of sysmodule on the patchlevel.h include, so that sys.version_info will be built properly. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/Makefile.in,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -r2.24 -r2.25 *** Makefile.in 2000/05/26 19:04:27 2.24 --- Makefile.in 2000/08/01 17:46:22 2.25 *************** *** 132,136 **** strtod.o: strtod.c structmember.o: structmember.c ! sysmodule.o: sysmodule.c thread.o: thread.c traceback.o: traceback.c --- 132,136 ---- strtod.o: strtod.c structmember.o: structmember.c ! sysmodule.o: sysmodule.c ../Include/patchlevel.h thread.o: thread.c traceback.o: traceback.c From python-dev@python.org Tue Aug 1 19:20:10 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 11:20:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.28,2.29 sre.h,2.15,2.16 sre_constants.h,2.7,2.8 Message-ID: <200008011820.LAA14089@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13106/Modules Modified Files: _sre.c sre.h sre_constants.h Log Message: SRE 0.9.8: passes the entire test suite -- reverted REPEAT operator to use "repeat context" strategy (from 0.8.X), but done right this time. -- got rid of backtracking stack; use nested SRE_MATCH calls instead (should probably put it back again in 0.9.9 ;-) -- properly reset state in scanner mode -- don't use aggressive inlining by default Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** _sre.c 2000/07/23 21:46:17 2.28 --- _sre.c 2000/08/01 18:20:07 2.29 *************** *** 6,22 **** * partial history: * 99-10-24 fl created (based on existing template matcher code) - * 99-11-13 fl added categories, branching, and more (0.2) - * 99-11-16 fl some tweaks to compile on non-Windows platforms - * 99-12-18 fl non-literals, generic maximizing repeat (0.3) - * 00-02-28 fl tons of changes (not all to the better ;-) (0.4) * 00-03-06 fl first alpha, sort of (0.5) - * 00-03-14 fl removed most compatibility stuff (0.6) - * 00-05-10 fl towards third alpha (0.8.2) - * 00-05-13 fl added experimental scanner stuff (0.8.3) [...1355 lines suppressed...] int status; ! state_reset(state); ! state->ptr = state->start; *************** *** 2122,2126 **** int status; ! state->lastindex = -1; state->ptr = state->start; --- 1968,1973 ---- int status; ! state_reset(state); ! state->ptr = state->start; Index: sre.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre.h,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** sre.h 2000/07/23 21:46:17 2.15 --- sre.h 2000/08/01 18:20:07 2.16 *************** *** 1,4 **** /* - * * Secret Labs' Regular Expression Engine * --- 1,3 ---- *************** *** 45,60 **** typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch); - typedef struct { - /* stack elements */ - SRE_CODE* pattern; - void* ptr; - int mark; - void* mark0; - void* mark1; - } SRE_STACK; - /* FIXME: shouldn't be a constant, really... */ #define SRE_MARK_SIZE 200 typedef struct { /* string pointers */ --- 44,56 ---- typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch); /* FIXME: shouldn't be a constant, really... */ #define SRE_MARK_SIZE 200 + typedef struct SRE_REPEAT_T { + int count; + SRE_CODE* pattern; /* points to REPEAT operator arguments */ + struct SRE_REPEAT_T *prev; /* points to previous repeat context */ + } SRE_REPEAT; + typedef struct { /* string pointers */ *************** *** 72,79 **** int lastmark; void* mark[SRE_MARK_SIZE]; ! /* backtracking stack */ ! SRE_STACK* stack; ! int stacksize; ! int stackbase; /* hooks */ SRE_TOLOWER_HOOK lower; --- 68,76 ---- int lastmark; void* mark[SRE_MARK_SIZE]; ! /* dynamically allocated stuff */ ! void** mark_stack; ! int mark_stack_size; ! int mark_stack_base; ! SRE_REPEAT *repeat; /* current repeat context */ /* hooks */ SRE_TOLOWER_HOOK lower; *************** *** 81,85 **** typedef struct { - /* scanner (internal helper object) */ PyObject_HEAD PyObject* pattern; --- 78,81 ---- Index: sre_constants.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre_constants.h,v retrieving revision 2.7 retrieving revision 2.8 diff -C2 -r2.7 -r2.8 *** sre_constants.h 2000/07/02 17:33:27 2.7 --- sre_constants.h 2000/08/01 18:20:07 2.8 *************** *** 22,43 **** #define SRE_OP_CATEGORY 8 #define SRE_OP_CHARSET 9 ! #define SRE_OP_GROUP 10 ! #define SRE_OP_GROUP_IGNORE 11 ! #define SRE_OP_INDEX 12 ! #define SRE_OP_IN 13 ! #define SRE_OP_IN_IGNORE 14 ! #define SRE_OP_INFO 15 ! #define SRE_OP_JUMP 16 ! #define SRE_OP_LITERAL 17 ! #define SRE_OP_LITERAL_IGNORE 18 ! #define SRE_OP_MARK 19 ! #define SRE_OP_MAX_REPEAT 20 ! #define SRE_OP_MAX_REPEAT_ONE 21 ! #define SRE_OP_MIN_REPEAT 22 ! #define SRE_OP_NOT_LITERAL 23 ! #define SRE_OP_NOT_LITERAL_IGNORE 24 ! #define SRE_OP_NEGATE 25 ! #define SRE_OP_RANGE 26 ! #define SRE_OP_REPEAT 27 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 --- 22,43 ---- #define SRE_OP_CATEGORY 8 #define SRE_OP_CHARSET 9 ! #define SRE_OP_GROUPREF 10 ! #define SRE_OP_GROUPREF_IGNORE 11 ! #define SRE_OP_IN 12 ! #define SRE_OP_IN_IGNORE 13 ! #define SRE_OP_INFO 14 ! #define SRE_OP_JUMP 15 ! #define SRE_OP_LITERAL 16 ! #define SRE_OP_LITERAL_IGNORE 17 ! #define SRE_OP_MARK 18 ! #define SRE_OP_MAX_UNTIL 19 ! #define SRE_OP_MIN_UNTIL 20 ! #define SRE_OP_NOT_LITERAL 21 ! #define SRE_OP_NOT_LITERAL_IGNORE 22 ! #define SRE_OP_NEGATE 23 ! #define SRE_OP_RANGE 24 ! #define SRE_OP_REPEAT 25 ! #define SRE_OP_REPEAT_ONE 26 ! #define SRE_OP_SUBPATTERN 27 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 From python-dev@python.org Tue Aug 1 19:20:10 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 11:20:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.21,1.22 sre_compile.py,1.26,1.27 sre_constants.py,1.18,1.19 sre_parse.py,1.26,1.27 Message-ID: <200008011820.LAA14083@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13106/Lib Modified Files: sre.py sre_compile.py sre_constants.py sre_parse.py Log Message: SRE 0.9.8: passes the entire test suite -- reverted REPEAT operator to use "repeat context" strategy (from 0.8.X), but done right this time. -- got rid of backtracking stack; use nested SRE_MATCH calls instead (should probably put it back again in 0.9.9 ;-) -- properly reset state in scanner mode -- don't use aggressive inlining by default Index: sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** sre.py 2000/07/23 21:46:17 1.21 --- sre.py 2000/08/01 18:20:06 1.22 *************** *** 6,11 **** # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and # other compatibility work. # --- 6,15 ---- # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # + # This version of the SRE library can be redistributed under CNRI's + # Python 1.6 license. For any other use, please contact Secret Labs + # AB (info@pythonware.com). + # # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 1.6 integration and # other compatibility work. # *************** *** 25,29 **** X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE ! # sre extensions (may or may not be in 2.0 final) T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE U = UNICODE = sre_compile.SRE_FLAG_UNICODE --- 29,33 ---- X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE ! # sre extensions (may or may not be in 1.6/2.0 final) T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE U = UNICODE = sre_compile.SRE_FLAG_UNICODE *************** *** 169,173 **** class Scanner: def __init__(self, lexicon): ! from sre_constants import BRANCH, SUBPATTERN, INDEX self.lexicon = lexicon # combine phrases into a compound pattern --- 173,177 ---- class Scanner: def __init__(self, lexicon): ! from sre_constants import BRANCH, SUBPATTERN self.lexicon = lexicon # combine phrases into a compound pattern *************** *** 176,181 **** for phrase, action in lexicon: p.append(sre_parse.SubPattern(s, [ ! (SUBPATTERN, (None, sre_parse.parse(phrase))), ! (INDEX, len(p)) ])) p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) --- 180,184 ---- for phrase, action in lexicon: p.append(sre_parse.SubPattern(s, [ ! (SUBPATTERN, (len(p), sre_parse.parse(phrase))), ])) p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) Index: sre_compile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** sre_compile.py 2000/07/23 21:46:17 1.26 --- sre_compile.py 2000/08/01 18:20:06 1.27 *************** *** 6,12 **** # Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. # ! # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and ! # other compatibility work. # --- 6,10 ---- # Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. # ! # See the sre.py file for information on usage and redistribution. # *************** *** 125,128 **** --- 123,127 ---- elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT): if flags & SRE_FLAG_TEMPLATE: + raise error, "internal: unsupported template operator" emit(OPCODES[REPEAT]) skip = len(code); emit(0) *************** *** 137,143 **** raise error, "nothing to repeat" if 0 and lo == hi == 1 and op is MAX_REPEAT: ! # FIXME: need a better way to figure out when ! # it's safe to use this one (in the parser, probably) ! emit(OPCODES[MAX_REPEAT_ONE]) skip = len(code); emit(0) emit(av[0]) --- 136,141 ---- raise error, "nothing to repeat" if 0 and lo == hi == 1 and op is MAX_REPEAT: ! # FIXME: fast and wrong (but we'll fix that) ! emit(OPCODES[REPEAT_ONE]) skip = len(code); emit(0) emit(av[0]) *************** *** 147,173 **** code[skip] = len(code) - skip else: ! emit(OPCODES[op]) skip = len(code); emit(0) emit(av[0]) emit(av[1]) - mark = MAXCODE - if av[2][0][0] == SUBPATTERN: - # repeated subpattern - gid, foo = av[2][0][1] - if gid: - mark = (gid-1)*2 - emit(mark) _compile(code, av[2], flags) - emit(OPCODES[SUCCESS]) code[skip] = len(code) - skip elif op is SUBPATTERN: ! gid = av[0] ! if gid: emit(OPCODES[MARK]) ! emit((gid-1)*2) _compile(code, av[1], flags) ! if gid: emit(OPCODES[MARK]) ! emit((gid-1)*2+1) elif op in (SUCCESS, FAILURE): emit(OPCODES[op]) --- 145,166 ---- code[skip] = len(code) - skip else: ! emit(OPCODES[REPEAT]) skip = len(code); emit(0) emit(av[0]) emit(av[1]) _compile(code, av[2], flags) code[skip] = len(code) - skip + if op == MAX_REPEAT: + emit(OPCODES[MAX_UNTIL]) + else: + emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: ! if av[0]: emit(OPCODES[MARK]) ! emit((av[0]-1)*2) _compile(code, av[1], flags) ! if av[0]: emit(OPCODES[MARK]) ! emit((av[0]-1)*2+1) elif op in (SUCCESS, FAILURE): emit(OPCODES[op]) *************** *** 198,206 **** emit(ATCODES[av]) elif op is BRANCH: tail = [] for av in av[1]: - emit(OPCODES[op]) skip = len(code); emit(0) - emit(MAXCODE) # save mark _compile(code, av, flags) emit(OPCODES[JUMP]) --- 191,198 ---- emit(ATCODES[av]) elif op is BRANCH: + emit(OPCODES[op]) tail = [] for av in av[1]: skip = len(code); emit(0) _compile(code, av, flags) emit(OPCODES[JUMP]) *************** *** 224,230 **** emit(OPCODES[op]) emit(av-1) - elif op in (MARK, INDEX): - emit(OPCODES[op]) - emit(av) else: raise ValueError, ("unsupported operand type", op) --- 216,219 ---- *************** *** 295,309 **** pass ! def compile(p, flags=0): ! # internal: convert pattern list to internal format - # compile, as necessary - if type(p) in STRING_TYPES: - import sre_parse - pattern = p - p = sre_parse.parse(p, flags) - else: - pattern = None - flags = p.pattern.flags | flags code = [] --- 284,289 ---- pass ! def _compile1(p, flags): flags = p.pattern.flags | flags code = [] *************** *** 316,319 **** --- 296,313 ---- code.append(OPCODES[SUCCESS]) + + return code + + def compile(p, flags=0): + # internal: convert pattern list to internal format + + if type(p) in STRING_TYPES: + import sre_parse + pattern = p + p = sre_parse.parse(p, flags) + else: + pattern = None + + code = _compile1(p, flags) # print code Index: sre_constants.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_constants.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** sre_constants.py 2000/07/23 21:46:17 1.18 --- sre_constants.py 2000/08/01 18:20:06 1.19 *************** *** 7,13 **** # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and ! # other compatibility work. # --- 7,11 ---- # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # See the sre.py file for information on usage and redistribution. # *************** *** 34,38 **** IN = "in" IN_IGNORE = "in_ignore" - INDEX = "index" INFO = "info" JUMP = "jump" --- 32,35 ---- *************** *** 41,46 **** MARK = "mark" MAX_REPEAT = "max_repeat" ! MAX_REPEAT_ONE = "max_repeat_one" MIN_REPEAT = "min_repeat" NEGATE = "negate" NOT_LITERAL = "not_literal" --- 38,44 ---- MARK = "mark" MAX_REPEAT = "max_repeat" ! MAX_UNTIL = "max_until" MIN_REPEAT = "min_repeat" + MIN_UNTIL = "min_until" NEGATE = "negate" NOT_LITERAL = "not_literal" *************** *** 92,96 **** CHARSET, GROUPREF, GROUPREF_IGNORE, - INDEX, IN, IN_IGNORE, INFO, --- 90,93 ---- *************** *** 98,108 **** LITERAL, LITERAL_IGNORE, MARK, ! MAX_REPEAT, ! MAX_REPEAT_ONE, ! MIN_REPEAT, NOT_LITERAL, NOT_LITERAL_IGNORE, NEGATE, RANGE, ! REPEAT ] --- 95,106 ---- LITERAL, LITERAL_IGNORE, MARK, ! MAX_UNTIL, ! MIN_UNTIL, NOT_LITERAL, NOT_LITERAL_IGNORE, NEGATE, RANGE, ! REPEAT, ! REPEAT_ONE, ! SUBPATTERN ] Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** sre_parse.py 2000/07/23 21:46:17 1.26 --- sre_parse.py 2000/08/01 18:20:06 1.27 *************** *** 6,12 **** # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # Portions of this engine have been developed in cooperation with ! # CNRI. Hewlett-Packard provided funding for 2.0 integration and ! # other compatibility work. # --- 6,10 ---- # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # ! # See the sre.py file for information on usage and redistribution. # *************** *** 537,542 **** p = _parse_sub(source, state) subpattern.append((SUBPATTERN, (group, p))) - if group is not None: - p.append((INDEX, group)) else: while 1: --- 535,538 ---- From python-dev@python.org Tue Aug 1 19:28:47 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 11:28:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.10,2.11 Message-ID: <200008011828.LAA16142@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv16132 Modified Files: pyport.h Log Message: Of course, you meant "#if 0" and not "#ifdef 0". :) Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** pyport.h 2000/08/01 16:53:44 2.10 --- pyport.h 2000/08/01 18:28:44 2.11 *************** *** 282,286 **** here is a set that should do the job */ ! #ifdef 0 /* disabled and probably obsolete */ #ifndef FD_SETSIZE --- 282,286 ---- here is a set that should do the job */ ! #if 0 /* disabled and probably obsolete */ #ifndef FD_SETSIZE From python-dev@python.org Tue Aug 1 21:28:36 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 13:28:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib re.py,1.37,1.38 Message-ID: <200008012028.NAA10085@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10073 Modified Files: re.py Log Message: Replace the jitterbug page with the SF Bug Tracker page. Index: re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/re.py,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** re.py 2000/06/30 22:01:36 1.37 --- re.py 2000/08/01 20:28:33 1.38 *************** *** 9,13 **** # page: # ! # http://www.python.org/search/search_bugs.html # # or send a mail to SRE's author: --- 9,13 ---- # page: # ! # http://sourceforge.net/bugs/?group_id=5470 # # or send a mail to SRE's author: *************** *** 21,26 **** # ! engine = "sre" ! # engine = "pre" if engine == "sre": --- 21,26 ---- # ! # engine = "sre" ! engine = "pre" if engine == "sre": From python-dev@python.org Tue Aug 1 21:30:11 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 1 Aug 2000 13:30:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8,1.8.2.1 python16.dsp,1.8,1.8.2.1 Message-ID: <200008012030.NAA10334@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv10313 Added Files: Tag: cnri-16-start python16.wse python16.dsp Log Message: Attempt to resurrect the Python 1.6 installer and MSVC project file. From python-dev@python.org Tue Aug 1 21:36:51 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 13:36:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.dsp,1.8.2.1,1.8.2.2 Message-ID: <200008012036.NAA10834@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv10822 Modified Files: Tag: cnri-16-start python16.dsp Log Message: restore CRLF line endings -- poke-n-hope Index: python16.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.dsp,v retrieving revision 1.8.2.1 retrieving revision 1.8.2.2 diff -C2 -r1.8.2.1 -r1.8.2.2 *** python16.dsp 2000/08/01 20:30:08 1.8.2.1 --- python16.dsp 2000/08/01 20:36:48 1.8.2.2 *************** *** 672,676 **** !ENDIF ! # End Source File # Begin Source File --- 672,676 ---- !ENDIF ! # End Source File # Begin Source File From python-dev@python.org Tue Aug 1 22:01:02 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 1 Aug 2000 14:01:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules arraymodule.c,2.51,2.52 Message-ID: <200008012101.OAA13954@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12853/python/dist/src/modules Modified Files: arraymodule.c Log Message: Removed decl of unreferenced vrbl. Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.51 retrieving revision 2.52 diff -C2 -r2.51 -r2.52 *** arraymodule.c 2000/07/31 21:57:30 2.51 --- arraymodule.c 2000/08/01 21:00:58 2.52 *************** *** 795,799 **** int size; PyObject *bb; - arrayobject *np; if (!PyArg_ParseTuple(args, "O:extend", &bb)) --- 795,798 ---- From python-dev@python.org Tue Aug 1 22:05:44 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 14:05:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre_compile.py,1.27,1.28 sre_parse.py,1.27,1.28 Message-ID: <200008012105.OAA19618@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12762/Lib Modified Files: sre_compile.py sre_parse.py Log Message: -- fixed width calculations for alternations -- fixed literal check in branch operator (this broke test_tokenize, as reported by Mark Favas) -- added REPEAT_ONE operator (still not enabled, though) -- added some debugging stuff (maxlevel) Index: sre_compile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** sre_compile.py 2000/08/01 18:20:06 1.27 --- sre_compile.py 2000/08/01 21:05:40 1.28 *************** *** 271,274 **** --- 271,275 ---- code.extend(table[1:]) # don't store first entry elif charset: + # FIXME: use charset optimizer! for char in charset: emit(OPCODES[LITERAL]) *************** *** 284,288 **** pass ! def _compile1(p, flags): flags = p.pattern.flags | flags --- 285,289 ---- pass ! def _code(p, flags): flags = p.pattern.flags | flags *************** *** 309,313 **** pattern = None ! code = _compile1(p, flags) # print code --- 310,314 ---- pattern = None ! code = _code(p, flags) # print code Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** sre_parse.py 2000/08/01 18:20:06 1.27 --- sre_parse.py 2000/08/01 21:05:40 1.28 *************** *** 138,147 **** for op, av in self.data: if op is BRANCH: ! l = sys.maxint ! h = 0 for av in av[1]: ! i, j = av.getwidth() ! l = min(l, i) ! h = min(h, j) lo = lo + i hi = hi + j --- 138,147 ---- for op, av in self.data: if op is BRANCH: ! i = sys.maxint ! j = 0 for av in av[1]: ! l, h = av.getwidth() ! i = min(i, l) ! j = min(j, h) lo = lo + i hi = hi + j From python-dev@python.org Tue Aug 1 22:05:44 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 14:05:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.29,2.30 sre.h,2.16,2.17 Message-ID: <200008012105.OAA19622@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12762/Modules Modified Files: _sre.c sre.h Log Message: -- fixed width calculations for alternations -- fixed literal check in branch operator (this broke test_tokenize, as reported by Mark Favas) -- added REPEAT_ONE operator (still not enabled, though) -- added some debugging stuff (maxlevel) Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** _sre.c 2000/08/01 18:20:07 2.29 --- _sre.c 2000/08/01 21:05:41 2.30 *************** *** 220,223 **** --- 220,231 ---- mark_fini(SRE_STATE* state) { + #if 0 + /* FIXME: debugging */ + if (state->maxlevel > 0) + printf("max %d\n", state->maxlevel); + if (state->mark_stack_base > 0) + printf("mark stack %d\n", state->mark_stack_base); + #endif + if (state->mark_stack) free(state->mark_stack); *************** *** 431,435 **** LOCAL(int) ! SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern) { /* check if string matches the given pattern. returns -1 for --- 439,443 ---- LOCAL(int) ! SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level) { /* check if string matches the given pattern. returns -1 for *************** *** 444,448 **** SRE_REPEAT rep; /* FIXME: allocate in STATE instead */ ! TRACE(("%8d: enter\n", PTR(ptr))); if (pattern[0] == SRE_OP_INFO) { --- 452,456 ---- SRE_REPEAT rep; /* FIXME: allocate in STATE instead */ ! TRACE(("%8d: enter %d\n", PTR(ptr), level)); if (pattern[0] == SRE_OP_INFO) { *************** *** 457,460 **** --- 465,472 ---- } + /* FIXME: debugging */ + if (level > state->maxlevel) + state->maxlevel = level; + for (;;) { *************** *** 624,628 **** if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2); if (i <= 0) return i; --- 636,640 ---- if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2, level + 1); if (i <= 0) return i; *************** *** 639,643 **** if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2); if (i < 0) return i; --- 651,655 ---- if (state->ptr < state->beginning) return 0; ! i = SRE_MATCH(state, pattern + 2, level + 1); if (i < 0) return i; *************** *** 657,664 **** while (pattern[0]) { TRACE(("%8d: try branch\n", PTR(ptr))); ! if (pattern[2] != SRE_OP_LITERAL || ! (ptr < end && (SRE_CODE) ptr[0] == pattern[3])) { state->ptr = ptr; ! i = SRE_MATCH(state, pattern + 1); if (i) return i; --- 669,676 ---- while (pattern[0]) { TRACE(("%8d: try branch\n", PTR(ptr))); ! if (pattern[1] != SRE_OP_LITERAL || ! (ptr < end && (SRE_CODE) ptr[0] == pattern[2])) { state->ptr = ptr; ! i = SRE_MATCH(state, pattern + 1, level + 1); if (i) return i; *************** *** 671,674 **** --- 683,835 ---- return 0; + case SRE_OP_REPEAT_ONE: + /* match repeated sequence (maximizing regexp) */ + + /* this operator only works if the repeated item is + exactly one character wide, and we're not already + collecting backtracking points. for other cases, + use the MAX_REPEAT operator instead */ + + /* <1=min> <2=max> item tail */ + + TRACE(("%8d: max repeat one {%d,%d}\n", PTR(ptr), + pattern[1], pattern[2])); + + count = 0; + + if (pattern[3] == SRE_OP_ANY) { + /* repeated wildcard. skip to the end of the target + string, and backtrack from there */ + /* FIXME: must look for line endings */ + if (ptr + pattern[1] > end) + return 0; /* cannot match */ + count = pattern[2]; + if (count > end - ptr) + count = end - ptr; + ptr += count; + + } else if (pattern[3] == SRE_OP_LITERAL) { + /* repeated literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) ptr[0] != chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_LITERAL_IGNORE) { + /* repeated literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_NOT_LITERAL) { + /* repeated non-literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) ptr[0] == chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_NOT_LITERAL_IGNORE) { + /* repeated non-literal */ + SRE_CODE chr = pattern[4]; + while (count < (int) pattern[2]) { + if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) + break; + ptr++; + count++; + } + + } else if (pattern[3] == SRE_OP_IN) { + /* repeated set */ + while (count < (int) pattern[2]) { + if (ptr >= end || !SRE_MEMBER(pattern + 5, *ptr)) + break; + ptr++; + count++; + } + + } else { + /* repeated single character pattern */ + state->ptr = ptr; + while (count < (int) pattern[2]) { + i = SRE_MATCH(state, pattern + 3, level + 1); + if (i < 0) + return i; + if (!i) + break; + count++; + } + state->ptr = ptr; + ptr += count; + } + + /* when we arrive here, count contains the number of + matches, and ptr points to the tail of the target + string. check if the rest of the pattern matches, + and backtrack if not. */ + + TRACE(("%8d: repeat %d found\n", PTR(ptr), count)); + + if (count < (int) pattern[1]) + return 0; + + if (pattern[pattern[0]] == SRE_OP_SUCCESS) { + /* tail is empty. we're finished */ + TRACE(("%8d: tail is empty\n", PTR(ptr))); + state->ptr = ptr; + return 1; + + } else if (pattern[pattern[0]] == SRE_OP_LITERAL) { + /* tail starts with a literal. skip positions where + the rest of the pattern cannot possibly match */ + SRE_CODE chr = pattern[pattern[0]+1]; + TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr)); + for (;;) { + TRACE(("%8d: scan for tail match\n", PTR(ptr))); + while (count >= (int) pattern[1] && + (ptr >= end || *ptr != chr)) { + ptr--; + count--; + } + TRACE(("%8d: check tail\n", PTR(ptr))); + if (count < (int) pattern[1]) + break; + state->ptr = ptr; + i = SRE_MATCH(state, pattern + pattern[0], level + 1); + if (i > 0) { + TRACE(("%8d: repeat %d picked\n", PTR(ptr), count)); + return 1; + } + ptr--; + count--; + } + + } else { + /* general case */ + TRACE(("%8d: tail is pattern\n", PTR(ptr))); + while (count >= (int) pattern[1]) { + state->ptr = ptr; + i = SRE_MATCH(state, pattern + pattern[0], level + 1); + if (i < 0) + return i; + if (i) { + TRACE(("%8d: repeat %d picked\n", PTR(ptr), count)); + return 1; + } + ptr--; + count--; + } + } + return 0; + case SRE_OP_REPEAT: /* create repeat context. all the hard work is done *************** *** 678,683 **** pattern[1], pattern[2])); - state->ptr = ptr; - rep.count = -1; rep.pattern = pattern; --- 839,842 ---- *************** *** 687,694 **** state->repeat = &rep; ! i = SRE_MATCH(state, pattern + pattern[0]); state->repeat = rep.prev; - /* free(rp); */ return i; --- 846,853 ---- state->repeat = &rep; ! state->ptr = ptr; ! i = SRE_MATCH(state, pattern + pattern[0], level + 1); state->repeat = rep.prev; return i; *************** *** 715,719 **** TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 874,878 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 730,734 **** lastmark = state->lastmark; mark_save(state, 0, lastmark); ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 889,893 ---- lastmark = state->lastmark; mark_save(state, 0, lastmark); ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 742,750 **** TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern); ! if (i) { ! /* free(rp); */ return i; - } state->repeat = rp; return 0; --- 901,907 ---- TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern, level + 1); ! if (i) return i; state->repeat = rp; return 0; *************** *** 768,772 **** TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 925,929 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 779,783 **** TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern); if (i) { /* free(rp); */ --- 936,940 ---- TRACE(("%8d: match tail\n", PTR(ptr))); state->repeat = rp->prev; ! i = SRE_MATCH(state, pattern, level + 1); if (i) { /* free(rp); */ *************** *** 791,795 **** TRACE(("%8d: match item (optional)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3); if (i) return i; --- 948,952 ---- TRACE(("%8d: match item (optional)\n", PTR(ptr))); rp->count = count; ! i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; *************** *** 866,870 **** if (flags & SRE_INFO_LITERAL) return 1; /* we got all of it */ ! status = SRE_MATCH(state, pattern + 2*prefix_len); if (status != 0) return status; --- 1023,1027 ---- if (flags & SRE_INFO_LITERAL) return 1; /* we got all of it */ ! status = SRE_MATCH(state, pattern + 2*prefix_len, 1); if (status != 0) return status; *************** *** 894,898 **** state->start = ptr; state->ptr = ++ptr; ! status = SRE_MATCH(state, pattern + 2); if (status != 0) break; --- 1051,1055 ---- state->start = ptr; state->ptr = ++ptr; ! status = SRE_MATCH(state, pattern + 2, 1); if (status != 0) break; *************** *** 908,912 **** state->start = ptr; state->ptr = ptr; ! status = SRE_MATCH(state, pattern); if (status != 0) break; --- 1065,1069 ---- state->start = ptr; state->ptr = ptr; ! status = SRE_MATCH(state, pattern, 1); if (status != 0) break; *************** *** 917,921 **** TRACE(("%8d: === SEARCH ===\n", PTR(ptr))); state->start = state->ptr = ptr++; ! status = SRE_MATCH(state, pattern); if (status != 0) break; --- 1074,1078 ---- TRACE(("%8d: === SEARCH ===\n", PTR(ptr))); state->start = state->ptr = ptr++; ! status = SRE_MATCH(state, pattern, 1); if (status != 0) break; *************** *** 1033,1036 **** --- 1190,1196 ---- state->repeat = NULL; + /* FIXME: debugging */ + state->maxlevel = 0; + mark_fini(state); } *************** *** 1111,1114 **** --- 1271,1275 ---- state->mark_stack = NULL; + state->mark_stack_base = 0; state_reset(state); *************** *** 1263,1270 **** if (state.charsize == 1) { ! status = sre_match(&state, PatternObject_GetCode(self)); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(&state, PatternObject_GetCode(self)); #endif } --- 1424,1431 ---- if (state.charsize == 1) { ! status = sre_match(&state, PatternObject_GetCode(self), 1); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(&state, PatternObject_GetCode(self), 1); #endif } *************** *** 1942,1949 **** if (state->charsize == 1) { ! status = sre_match(state, PatternObject_GetCode(self->pattern)); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(state, PatternObject_GetCode(self->pattern)); #endif } --- 2103,2110 ---- if (state->charsize == 1) { ! status = sre_match(state, PatternObject_GetCode(self->pattern), 1); } else { #if defined(HAVE_UNICODE) ! status = sre_umatch(state, PatternObject_GetCode(self->pattern), 1); #endif } Index: sre.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** sre.h 2000/08/01 18:20:07 2.16 --- sre.h 2000/08/01 21:05:41 2.17 *************** *** 75,78 **** --- 75,80 ---- /* hooks */ SRE_TOLOWER_HOOK lower; + /* debugging */ + int maxlevel; } SRE_STATE; From python-dev@python.org Tue Aug 1 22:22:20 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 14:22:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib re.py,1.38,1.39 Message-ID: <200008012122.OAA22327@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22316 Modified Files: re.py Log Message: My fix to the URL accidentally also switched back to the "pre" module. Undo that! Index: re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/re.py,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** re.py 2000/08/01 20:28:33 1.38 --- re.py 2000/08/01 21:22:16 1.39 *************** *** 21,26 **** # ! # engine = "sre" ! engine = "pre" if engine == "sre": --- 21,26 ---- # ! engine = "sre" ! # engine = "pre" if engine == "sre": From python-dev@python.org Tue Aug 1 23:47:51 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 15:47:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.22,1.23 sre_compile.py,1.28,1.29 sre_constants.py,1.19,1.20 sre_parse.py,1.28,1.29 Message-ID: <200008012247.PAA10592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10513/Lib Modified Files: sre.py sre_compile.py sre_constants.py sre_parse.py Log Message: final 0.9.8 updates: -- added REPEAT_ONE operator -- added ANY_ALL operator (used to represent "(?s).") Index: sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** sre.py 2000/08/01 18:20:06 1.22 --- sre.py 2000/08/01 22:47:48 1.23 *************** *** 99,103 **** except KeyError: pass ! p = sre_compile.compile(pattern, flags) if len(_cache) >= _MAXCACHE: _cache.clear() --- 99,106 ---- except KeyError: pass ! try: ! p = sre_compile.compile(pattern, flags) ! except error, v: ! raise error, v # invalid expression if len(_cache) >= _MAXCACHE: _cache.clear() Index: sre_compile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** sre_compile.py 2000/08/01 21:05:40 1.28 --- sre_compile.py 2000/08/01 22:47:48 1.29 *************** *** 74,77 **** --- 74,84 ---- return charset + def _simple(av): + # check if av is a "simple" operator + lo, hi = av[2].getwidth() + if lo == 0: + raise error, "nothing to repeat" + return lo == hi == 1 and av[2][0][0] != SUBPATTERN + def _compile(code, pattern, flags): # internal: compile a (sub)pattern *************** *** 117,124 **** elif op is ANY: if flags & SRE_FLAG_DOTALL: ! emit(OPCODES[op]) else: ! emit(OPCODES[CATEGORY]) ! emit(CHCODES[CATEGORY_NOT_LINEBREAK]) elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT): if flags & SRE_FLAG_TEMPLATE: --- 124,130 ---- elif op is ANY: if flags & SRE_FLAG_DOTALL: ! emit(OPCODES[ANY_ALL]) else: ! emit(OPCODES[ANY]) elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT): if flags & SRE_FLAG_TEMPLATE: *************** *** 131,158 **** emit(OPCODES[SUCCESS]) code[skip] = len(code) - skip else: ! lo, hi = av[2].getwidth() ! if lo == 0: ! raise error, "nothing to repeat" ! if 0 and lo == hi == 1 and op is MAX_REPEAT: ! # FIXME: fast and wrong (but we'll fix that) ! emit(OPCODES[REPEAT_ONE]) ! skip = len(code); emit(0) ! emit(av[0]) ! emit(av[1]) ! _compile(code, av[2], flags) ! emit(OPCODES[SUCCESS]) ! code[skip] = len(code) - skip else: ! emit(OPCODES[REPEAT]) ! skip = len(code); emit(0) ! emit(av[0]) ! emit(av[1]) ! _compile(code, av[2], flags) ! code[skip] = len(code) - skip ! if op == MAX_REPEAT: ! emit(OPCODES[MAX_UNTIL]) ! else: ! emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: if av[0]: --- 137,159 ---- emit(OPCODES[SUCCESS]) code[skip] = len(code) - skip + elif _simple(av) and op == MAX_REPEAT: + emit(OPCODES[REPEAT_ONE]) + skip = len(code); emit(0) + emit(av[0]) + emit(av[1]) + _compile(code, av[2], flags) + emit(OPCODES[SUCCESS]) + code[skip] = len(code) - skip else: ! emit(OPCODES[REPEAT]) ! skip = len(code); emit(0) ! emit(av[0]) ! emit(av[1]) ! _compile(code, av[2], flags) ! code[skip] = len(code) - skip ! if op == MAX_REPEAT: ! emit(OPCODES[MAX_UNTIL]) else: ! emit(OPCODES[MIN_UNTIL]) elif op is SUBPATTERN: if av[0]: Index: sre_constants.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_constants.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** sre_constants.py 2000/08/01 18:20:06 1.19 --- sre_constants.py 2000/08/01 22:47:48 1.20 *************** *** 21,24 **** --- 21,25 ---- ANY = "any" + ANY_ALL = "any_all" ASSERT = "assert" ASSERT_NOT = "assert_not" *************** *** 82,86 **** FAILURE, SUCCESS, ! ANY, ASSERT, ASSERT_NOT, AT, --- 83,87 ---- FAILURE, SUCCESS, ! ANY, ANY_ALL, ASSERT, ASSERT_NOT, AT, Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** sre_parse.py 2000/08/01 21:05:40 1.28 --- sre_parse.py 2000/08/01 22:47:48 1.29 *************** *** 143,147 **** l, h = av.getwidth() i = min(i, l) ! j = min(j, h) lo = lo + i hi = hi + j --- 143,147 ---- l, h = av.getwidth() i = min(i, l) ! j = max(j, h) lo = lo + i hi = hi + j From python-dev@python.org Tue Aug 1 23:47:51 2000 From: python-dev@python.org (Fredrik Lundh) Date: Tue, 1 Aug 2000 15:47:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.30,2.31 sre_constants.h,2.8,2.9 Message-ID: <200008012247.PAA10594@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv10513/Modules Modified Files: _sre.c sre_constants.h Log Message: final 0.9.8 updates: -- added REPEAT_ONE operator -- added ANY_ALL operator (used to represent "(?s).") Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.30 retrieving revision 2.31 diff -C2 -r2.30 -r2.31 *** _sre.c 2000/08/01 21:05:41 2.30 --- _sre.c 2000/08/01 22:47:49 2.31 *************** *** 449,452 **** --- 449,453 ---- SRE_REPEAT* rp; int lastmark; + SRE_CODE chr; SRE_REPEAT rep; /* FIXME: allocate in STATE instead */ *************** *** 526,531 **** case SRE_OP_ANY: ! /* match anything */ /* */ TRACE(("%8d: anything\n", PTR(ptr))); if (ptr >= end) --- 527,541 ---- case SRE_OP_ANY: ! /* match anything (except a newline) */ /* */ + TRACE(("%8d: anything (except newline)\n", PTR(ptr))); + if (ptr >= end || SRE_IS_LINEBREAK(ptr[0])) + return 0; + ptr++; + break; + + case SRE_OP_ANY_ALL: + /* match anything */ + /* */ TRACE(("%8d: anything\n", PTR(ptr))); if (ptr >= end) *************** *** 696,705 **** pattern[1], pattern[2])); count = 0; ! if (pattern[3] == SRE_OP_ANY) { /* repeated wildcard. skip to the end of the target string, and backtrack from there */ - /* FIXME: must look for line endings */ if (ptr + pattern[1] > end) return 0; /* cannot match */ --- 706,729 ---- pattern[1], pattern[2])); + if (ptr + pattern[1] > end) + return 0; /* cannot match */ + count = 0; + + switch (pattern[3]) { ! case SRE_OP_ANY: ! /* repeated wildcard. */ ! while (count < (int) pattern[2]) { ! if (ptr >= end || SRE_IS_LINEBREAK(ptr[0])) ! break; ! ptr++; ! count++; ! } ! break; ! ! case SRE_OP_ANY_ALL: /* repeated wildcard. skip to the end of the target string, and backtrack from there */ if (ptr + pattern[1] > end) return 0; /* cannot match */ *************** *** 708,715 **** count = end - ptr; ptr += count; ! } else if (pattern[3] == SRE_OP_LITERAL) { /* repeated literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] != chr) --- 732,740 ---- count = end - ptr; ptr += count; + break; ! case SRE_OP_LITERAL: /* repeated literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] != chr) *************** *** 718,725 **** count++; } ! } else if (pattern[3] == SRE_OP_LITERAL_IGNORE) { /* repeated literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) --- 743,751 ---- count++; } + break; ! case SRE_OP_LITERAL_IGNORE: /* repeated literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) *************** *** 728,735 **** count++; } ! } else if (pattern[3] == SRE_OP_NOT_LITERAL) { /* repeated non-literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] == chr) --- 754,762 ---- count++; } + break; ! case SRE_OP_NOT_LITERAL: /* repeated non-literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) ptr[0] == chr) *************** *** 738,745 **** count++; } ! ! } else if (pattern[3] == SRE_OP_NOT_LITERAL_IGNORE) { /* repeated non-literal */ ! SRE_CODE chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) --- 765,773 ---- count++; } ! break; ! ! case SRE_OP_NOT_LITERAL_IGNORE: /* repeated non-literal */ ! chr = pattern[4]; while (count < (int) pattern[2]) { if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) *************** *** 748,753 **** count++; } ! } else if (pattern[3] == SRE_OP_IN) { /* repeated set */ while (count < (int) pattern[2]) { --- 776,782 ---- count++; } + break; ! case SRE_OP_IN: /* repeated set */ while (count < (int) pattern[2]) { *************** *** 757,762 **** count++; } ! } else { /* repeated single character pattern */ state->ptr = ptr; --- 786,792 ---- count++; } + break; ! default: /* repeated single character pattern */ state->ptr = ptr; *************** *** 771,774 **** --- 801,805 ---- state->ptr = ptr; ptr += count; + break; } *************** *** 792,796 **** /* tail starts with a literal. skip positions where the rest of the pattern cannot possibly match */ ! SRE_CODE chr = pattern[pattern[0]+1]; TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr)); for (;;) { --- 823,827 ---- /* tail starts with a literal. skip positions where the rest of the pattern cannot possibly match */ ! chr = pattern[pattern[0]+1]; TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr)); for (;;) { Index: sre_constants.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre_constants.h,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** sre_constants.h 2000/08/01 18:20:07 2.8 --- sre_constants.h 2000/08/01 22:47:49 2.9 *************** *** 15,43 **** #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 ! #define SRE_OP_ASSERT 3 ! #define SRE_OP_ASSERT_NOT 4 ! #define SRE_OP_AT 5 ! #define SRE_OP_BRANCH 6 ! #define SRE_OP_CALL 7 ! #define SRE_OP_CATEGORY 8 ! #define SRE_OP_CHARSET 9 ! #define SRE_OP_GROUPREF 10 ! #define SRE_OP_GROUPREF_IGNORE 11 ! #define SRE_OP_IN 12 ! #define SRE_OP_IN_IGNORE 13 ! #define SRE_OP_INFO 14 ! #define SRE_OP_JUMP 15 ! #define SRE_OP_LITERAL 16 ! #define SRE_OP_LITERAL_IGNORE 17 ! #define SRE_OP_MARK 18 ! #define SRE_OP_MAX_UNTIL 19 ! #define SRE_OP_MIN_UNTIL 20 ! #define SRE_OP_NOT_LITERAL 21 ! #define SRE_OP_NOT_LITERAL_IGNORE 22 ! #define SRE_OP_NEGATE 23 ! #define SRE_OP_RANGE 24 ! #define SRE_OP_REPEAT 25 ! #define SRE_OP_REPEAT_ONE 26 ! #define SRE_OP_SUBPATTERN 27 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 --- 15,44 ---- #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 ! #define SRE_OP_ANY_ALL 3 ! #define SRE_OP_ASSERT 4 ! #define SRE_OP_ASSERT_NOT 5 ! #define SRE_OP_AT 6 ! #define SRE_OP_BRANCH 7 ! #define SRE_OP_CALL 8 ! #define SRE_OP_CATEGORY 9 ! #define SRE_OP_CHARSET 10 ! #define SRE_OP_GROUPREF 11 ! #define SRE_OP_GROUPREF_IGNORE 12 ! #define SRE_OP_IN 13 ! #define SRE_OP_IN_IGNORE 14 ! #define SRE_OP_INFO 15 ! #define SRE_OP_JUMP 16 ! #define SRE_OP_LITERAL 17 ! #define SRE_OP_LITERAL_IGNORE 18 ! #define SRE_OP_MARK 19 ! #define SRE_OP_MAX_UNTIL 20 ! #define SRE_OP_MIN_UNTIL 21 ! #define SRE_OP_NOT_LITERAL 22 ! #define SRE_OP_NOT_LITERAL_IGNORE 23 ! #define SRE_OP_NEGATE 24 ! #define SRE_OP_RANGE 25 ! #define SRE_OP_REPEAT 26 ! #define SRE_OP_REPEAT_ONE 27 ! #define SRE_OP_SUBPATTERN 28 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 From python-dev@python.org Wed Aug 2 00:49:52 2000 From: python-dev@python.org (Mark Hammond) Date: Tue, 1 Aug 2000 16:49:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libwinreg.tex,1.4,1.5 Message-ID: <200008012349.QAA22857@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22846 Modified Files: libwinreg.tex Log Message: As requested by Fred - mention that in the future a winreg module may make a comeback. Index: libwinreg.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libwinreg.tex,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** libwinreg.tex 2000/07/06 04:38:37 1.4 --- libwinreg.tex 2000/08/01 23:49:50 1.5 *************** *** 15,20 **** This module exposes a very low-level interface to the Windows ! registry; for a more object-oriented interface, use the ! \module{winreg} module. This module offers the following functions: --- 15,21 ---- This module exposes a very low-level interface to the Windows ! registry; it is expected that in the future a new \code{winreg} ! module will be created offering a higher-level interface to the ! registry API. This module offers the following functions: From python-dev@python.org Wed Aug 2 00:54:31 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 16:54:31 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_ext.py,1.58,1.59 Message-ID: <200008012354.QAA23245@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv23103/command Modified Files: build_ext.py Log Message: Patch from Rene Liebscher, tweaked by me: - 'export_symbol_file' (and corresponding 'def_file' in the old "build info" dict) are gone; warn if we see 'def_file' in the dict - the MSVC "pre-link hack" is gone -- all that stuff is now handled elsewhere (eg. by using 'export_symbols', etc.) - add 'get_export_symbols()' and 'get_libraries()' methods -- needed because on Windows, both of those things are a tad more complicated than fetching them from the Extension instance Index: build_ext.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_ext.py,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -r1.58 -r1.59 *** build_ext.py 2000/07/27 02:13:20 1.58 --- build_ext.py 2000/08/01 23:54:29 1.59 *************** *** 85,89 **** ('help-compiler', None, "list available compilers", show_compilers), ! ] def initialize_options (self): --- 85,89 ---- ('help-compiler', None, "list available compilers", show_compilers), ! ] def initialize_options (self): *************** *** 283,287 **** # Medium-easy stuff: same syntax/semantics, different names. ext.runtime_library_dirs = build_info.get('rpath') ! ext.export_symbol_file = build_info.get('def_file') # Non-trivial stuff: 'macros' split into 'define_macros' --- 283,289 ---- # Medium-easy stuff: same syntax/semantics, different names. ext.runtime_library_dirs = build_info.get('rpath') ! if build_info.has_key('def_file'): ! self.warn("'def_file' element of build info dict " ! "no longer supported") # Non-trivial stuff: 'macros' split into 'define_macros' *************** *** 421,434 **** extra_args = ext.extra_link_args or [] - # Bunch of fixing-up we have to do for Microsoft's linker. - if self.compiler.compiler_type == 'msvc': - self.msvc_prelink_hack(sources, ext, extra_args) self.compiler.link_shared_object ( objects, ext_filename, ! libraries=ext.libraries, library_dirs=ext.library_dirs, runtime_library_dirs=ext.runtime_library_dirs, extra_postargs=extra_args, debug=self.debug, build_temp=self.build_temp) --- 423,434 ---- extra_args = ext.extra_link_args or [] self.compiler.link_shared_object ( objects, ext_filename, ! libraries=self.get_libraries(ext), library_dirs=ext.library_dirs, runtime_library_dirs=ext.runtime_library_dirs, extra_postargs=extra_args, + export_symbols=self.get_export_symbols(ext), debug=self.debug, build_temp=self.build_temp) *************** *** 512,553 **** # find_swig () - - # -- Hooks 'n hacks ------------------------------------------------ - - def msvc_prelink_hack (self, sources, ext, extra_args): - - # XXX this is a kludge! Knowledge of specific compilers or - # platforms really doesn't belong here; in an ideal world, the - # CCompiler interface would provide access to everything in a - # compiler/linker system needs to build Python extensions, and - # we would just do everything nicely and cleanly through that - # interface. However, this is a not an ideal world and the - # CCompiler interface doesn't handle absolutely everything. - # Thus, kludges like this slip in occasionally. (This is no - # excuse for committing more platform- and compiler-specific - # kludges; they are to be avoided if possible!) - - def_file = ext.export_symbol_file - - if def_file is not None: - extra_args.append ('/DEF:' + def_file) - else: - modname = string.split (ext.name, '.')[-1] - extra_args.append('/export:init%s' % modname) - - # The MSVC linker generates .lib and .exp files, which cannot be - # suppressed by any linker switches. The .lib files may even be - # needed! Make sure they are generated in the temporary build - # directory. Since they have different names for debug and release - # builds, they can go into the same directory. - implib_file = os.path.join ( - self.implib_dir, - self.get_ext_libname (ext.name)) - extra_args.append ('/IMPLIB:' + implib_file) - self.mkpath (os.path.dirname (implib_file)) - - # msvc_prelink_hack () - - # -- Name generators ----------------------------------------------- # (extension names, filenames, whatever) --- 512,515 ---- *************** *** 579,582 **** --- 541,579 ---- return apply (os.path.join, ext_path) + '_d.lib' return apply (os.path.join, ext_path) + '.lib' + + + def get_export_symbols (self, ext): + """Return the list of symbols that a shared extension has to + export. This either uses 'ext.export_symbols' or, if it's not + provided, "init" + module_name. Only relevant on Windows, where + the .pyd file (DLL) must export the module "init" function. + """ + + # XXX what if 'export_symbols' defined but it doesn't contain + # "init" + module_name? Should we add it? warn? or just carry + # on doing nothing? + + if ext.export_symbols is None: + return ["init" + string.split(ext.name,'.')[-1]] + else: + return ext.export_symbols + + def get_libraries (self, ext): + """Return the list of libraries to link against when building a + shared extension. On most platforms, this is just 'ext.libraries'; + on Windows, we add the Python library (eg. python20.dll). + """ + # The python library is always needed on Windows. For MSVC, this + # is redundant, since the library is mentioned in a pragma in + # config.h that MSVC groks. The other Windows compilers all seem + # to need it mentioned explicitly, though, so that's what we do. + if sys.platform == "win32": + pythonlib = ("python%d%d" % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + # don't extend ext.libraries, it may be shared with other + # extensions, it is a reference to the original list + return ext.libraries + [pythonlib] + else: + return ext.libraries # class build_ext From python-dev@python.org Wed Aug 2 01:00:33 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:00:33 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.35,1.36 Message-ID: <200008020000.RAA25307@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv25004 Modified Files: msvccompiler.py Log Message: Patch from Rene Liebscher: generate an /IMPLIB: option to ensure that the linker leaves the (temporary) .lib file in the temporary dir. (Moved from 'msvc_prelink_hack()' method in build_ext.py.) Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** msvccompiler.py 2000/06/30 19:37:59 1.35 --- msvccompiler.py 2000/08/02 00:00:30 1.36 *************** *** 381,388 **** objects + ['/OUT:' + output_filename]) if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend (extra_postargs) print "link_shared_object():" --- 381,400 ---- objects + ['/OUT:' + output_filename]) + # The MSVC linker generates .lib and .exp files, which cannot be + # suppressed by any linker switches. The .lib files may even be + # needed! Make sure they are generated in the temporary build + # directory. Since they have different names for debug and release + # builds, they can go into the same directory. + (dll_name, dll_ext) = os.path.splitext( + os.path.basename(output_filename)) + implib_file = os.path.join( + os.path.dirname(objects[0]), + self.library_filename(dll_name)) + ld_args.append ('/IMPLIB:' + implib_file) + if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend(extra_postargs) print "link_shared_object():" From python-dev@python.org Wed Aug 2 01:01:58 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:01:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.36,1.37 Message-ID: <200008020001.RAA29477@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv29217 Modified Files: msvccompiler.py Log Message: Ditched some debugging prints. Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** msvccompiler.py 2000/08/02 00:00:30 1.36 --- msvccompiler.py 2000/08/02 00:01:56 1.37 *************** *** 398,404 **** ld_args.extend(extra_postargs) - print "link_shared_object():" - print " output_filename =", output_filename - print " mkpath'ing:", os.path.dirname (output_filename) self.mkpath (os.path.dirname (output_filename)) try: --- 398,401 ---- From python-dev@python.org Wed Aug 2 01:04:16 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:04:16 -0700 Subject: [Python-checkins] CVS: distutils/distutils extension.py,1.2,1.3 Message-ID: <200008020004.RAA31389@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv31375 Modified Files: extension.py Log Message: Removed 'export_symbol_file'. 'export_symbols' can be None (not sure this is a good idea: it's inconsistent with every other instance attribute of Extension). Index: extension.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/extension.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** extension.py 2000/06/24 00:18:24 1.2 --- extension.py 2000/08/02 00:04:13 1.3 *************** *** 74,82 **** extensions, which typically export exactly one symbol: "init" + extension_name. - export_symbol_file : string - name of file that lists symbols to export; the format of this - file is platform- and compiler-specific. This is even more - gratuitous and unnecessary than 'export_symbols'; I'll be happy - when it goes away forever. """ --- 74,77 ---- *************** *** 92,96 **** extra_link_args=None, export_symbols=None, - export_symbol_file=None, ): --- 87,90 ---- *************** *** 112,117 **** self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols or [] ! self.export_symbol_file = export_symbol_file # class Extension --- 106,110 ---- self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols # class Extension From python-dev@python.org Wed Aug 2 01:37:36 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 17:37:36 -0700 Subject: [Python-checkins] CVS: distutils/distutils util.py,1.39,1.40 Message-ID: <200008020037.RAA00993@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv985 Modified Files: util.py Log Message: Ditched 'abspath()' -- don't need 1.5.1 compatability hacks anymore. Index: util.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/util.py,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** util.py 2000/07/27 02:13:19 1.39 --- util.py 2000/08/02 00:37:32 1.40 *************** *** 19,32 **** - # Need to define 'abspath()', because it was new with Python 1.5.2 - if hasattr (os.path, 'abspath'): - abspath = os.path.abspath - else: - def abspath(path): - if not os.path.isabs(path): - path = os.path.join(os.getcwd(), path) - return os.path.normpath(path) - - # More backwards compatibility hacks def extend (list, new_list): --- 19,22 ---- From python-dev@python.org Wed Aug 2 02:03:27 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:03:27 -0700 Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.1,1.2 Message-ID: <200008020103.SAA06206@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv2567 Modified Files: bcppcompiler.py Log Message: Patch from Rene Liebscher. Some ugly changes, but supposedly this makes it so BCPPCompiler actually works, so I'm provisionally accepting it -- ugly and working is better than not working! Major changes: - normalize paths (apparently BC++ doesn't like slashes) - overhauled how we search for and specify libraries on the linker command-line - hacked up 'find_library_file()' so it knows about "debug" library naming convention as well as "bcpp_xxx.lib" -- the question is, is this a well-established and sensible convention? Also: - change to use 'util.write_file()' to write the .def file Index: bcppcompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** bcppcompiler.py 2000/06/28 01:20:35 1.1 --- bcppcompiler.py 2000/08/02 01:03:23 1.2 *************** *** 12,26 **** # WindowsCCompiler! --GPW - # XXX Lyle reports that this doesn't quite work yet: - # """...but this is what I've got so far. The compile step works fine but - # when it runs the link step I get an "out of memory" failure. Since - # spawn() echoes the command it's trying to spawn, I can type the link line - # verbatim at the DOS prompt and it links the Windows DLL correctly -- so - # the syntax is correct. There's just some weird interaction going on when - # it tries to "spawn" the link process from within the setup.py script. I'm - # not really sure how to debug this one right off-hand; obviously there's - # nothing wrong with the "spawn()" function since it's working properly for - # the compile stage.""" - __revision__ = "$Id$" --- 12,15 ---- *************** *** 32,35 **** --- 21,25 ---- from distutils.ccompiler import \ CCompiler, gen_preprocess_options, gen_lib_options + from distutils.file_util import write_file *************** *** 124,135 **** input_opt = "-P" output_opt = "-o" + obj ! ! self.mkpath (os.path.dirname (obj)) # Compiler command line syntax is: "bcc32 [options] file(s)". # Note that the source file names must appear at the end of # the command line. - try: self.spawn ([self.cc] + compile_opts + pp_opts + --- 114,126 ---- input_opt = "-P" + src = os.path.normpath(src) + obj = os.path.normpath(obj) + output_opt = "-o" + obj ! self.mkpath(os.path.dirname(obj)) # Compiler command line syntax is: "bcc32 [options] file(s)". # Note that the source file names must appear at the end of # the command line. try: self.spawn ([self.cc] + compile_opts + pp_opts + *************** *** 213,216 **** --- 204,210 ---- build_temp=None): + # XXX this ignores 'build_temp'! should follow the lead of + # msvccompiler.py + (objects, output_dir) = self._fix_object_args (objects, output_dir) (libraries, library_dirs, runtime_library_dirs) = \ *************** *** 227,237 **** if debug: ! ldflags = self.ldflags_shared_debug else: ! ldflags = self.ldflags_shared startup_obj = 'c0d32' ! libraries.append ('mypylib') libraries.append ('import32') libraries.append ('cw32mt') --- 221,237 ---- if debug: ! ld_args = self.ldflags_shared_debug[:] else: ! ld_args = self.ldflags_shared[:] + # Borland C++ has problems with '/' in paths + objects = map(os.path.normpath, objects) startup_obj = 'c0d32' + objects.insert(0, startup_obj) ! # either exchange python15.lib in the python libs directory against ! # a Borland-like one, or create one with name bcpp_python15.lib ! # there and remove the pragmas from config.h ! #libraries.append ('mypylib') libraries.append ('import32') libraries.append ('cw32mt') *************** *** 240,257 **** head, tail = os.path.split (output_filename) modname, ext = os.path.splitext (tail) ! def_file = os.path.join (build_temp, '%s.def' % modname) ! f = open (def_file, 'w') ! f.write ('EXPORTS\n') for sym in (export_symbols or []): ! f.write (' %s=_%s\n' % (sym, sym)) ! ! ld_args = ldflags + [startup_obj] + objects + \ ! [',%s,,' % output_filename] + \ ! libraries + [',' + def_file] if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend (extra_postargs) self.mkpath (os.path.dirname (output_filename)) --- 240,281 ---- head, tail = os.path.split (output_filename) modname, ext = os.path.splitext (tail) ! temp_dir = os.path.dirname(objects[0]) # preserve tree structure ! def_file = os.path.join (temp_dir, '%s.def' % modname) ! contents = ['EXPORTS'] for sym in (export_symbols or []): ! contents.append(' %s=_%s' % (sym, sym)) ! self.execute(write_file, (def_file, contents), ! "writing %s" % def_file) ! ! # Start building command line flags and options. ! ! for l in library_dirs: ! ld_args.append("/L%s" % os.path.normpath(l)) ! ! ld_args.extend(objects) # list of object files ! ! # name of dll file ! ld_args.extend([',',output_filename]) ! # no map file and start libraries ! ld_args.extend([',', ',']) ! ! for lib in libraries: ! # see if we find it and if there is a bcpp specific lib ! # (bcpp_xxx.lib) ! libfile = self.find_library_file(library_dirs, lib, debug) ! if libfile is None: ! ld_args.append(lib) ! # probably a BCPP internal library -- don't warn ! # self.warn('library %s not found.' % lib) ! else: ! # full name which prefers bcpp_xxx.lib over xxx.lib ! ld_args.append(libfile) ! # def file for export symbols ! ld_args.extend([',',def_file]) if extra_preargs: ld_args[:0] = extra_preargs if extra_postargs: ! ld_args.extend(extra_postargs) self.mkpath (os.path.dirname (output_filename)) *************** *** 326,338 **** def runtime_library_dir_option (self, dir): raise DistutilsPlatformError, \ ! "don't know how to set runtime library search path for MSVC++" def library_option (self, lib): return self.library_filename (lib) - - def find_library_file (self, dirs, lib): for dir in dirs: libfile = os.path.join (dir, self.library_filename (lib)) if os.path.exists (libfile): --- 350,379 ---- def runtime_library_dir_option (self, dir): raise DistutilsPlatformError, \ ! ("don't know how to set runtime library search path " ! "for Borland C++") def library_option (self, lib): return self.library_filename (lib) + def find_library_file (self, dirs, lib, debug=0): + # find library file + # bcpp_xxx.lib is better than xxx.lib + # and xxx_d.lib is better than xxx.lib if debug is set for dir in dirs: + if debug: + libfile = os.path.join ( + dir, self.library_filename ("bcpp_" + lib + "_d")) + if os.path.exists (libfile): + return libfile + libfile = os.path.join ( + dir, self.library_filename ("bcpp_" + lib)) + if os.path.exists (libfile): + return libfile + if debug: + libfile = os.path.join ( + dir, self.library_filename(lib + '_d')) + if os.path.exists (libfile): + return libfile libfile = os.path.join (dir, self.library_filename (lib)) if os.path.exists (libfile): From python-dev@python.org Wed Aug 2 02:08:04 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:08:04 -0700 Subject: [Python-checkins] CVS: distutils/distutils spawn.py,1.8,1.9 Message-ID: <200008020108.SAA10405@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv10389 Modified Files: spawn.py Log Message: Rene Liebscher: factor 'find_executable()' out of '_spawn_nt()'. Index: spawn.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/spawn.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** spawn.py 2000/03/26 21:47:00 1.8 --- spawn.py 2000/08/02 01:08:02 1.9 *************** *** 2,6 **** Provides the 'spawn()' function, a front-end to various platform- ! specific functions for launching another program in a sub-process.""" # created 1999/07/24, Greg Ward --- 2,8 ---- Provides the 'spawn()' function, a front-end to various platform- ! specific functions for launching another program in a sub-process. ! Also provides the 'find_executable()' to search the path for a given ! executable name. """ # created 1999/07/24, Greg Ward *************** *** 66,80 **** cmd = _nt_quote_args (cmd) if search_path: ! paths = string.split( os.environ['PATH'], os.pathsep) ! base,ext = os.path.splitext(executable) ! if (ext != '.exe'): ! executable = executable + '.exe' ! if not os.path.isfile(executable): ! paths.reverse() # go over the paths and keep the last one ! for p in paths: ! f = os.path.join( p, executable ) ! if os.path.isfile ( f ): ! # the file exists, we have a shot at spawn working ! executable = f if verbose: print string.join ([executable] + cmd[1:], ' ') --- 68,73 ---- cmd = _nt_quote_args (cmd) if search_path: ! # either we find one or it stays the same ! executable = find_executable(executable) or executable if verbose: print string.join ([executable] + cmd[1:], ' ') *************** *** 92,96 **** "command '%s' failed with exit status %d" % (cmd[0], rc) - def _spawn_posix (cmd, --- 85,88 ---- *************** *** 148,149 **** --- 140,166 ---- (cmd[0], status) # _spawn_posix () + + + def find_executable(executable, path=None): + """Try to find 'executable' in the directories listed in 'path' (a + string listing directories separated by 'os.pathsep'; defaults to + os.environ['PATH']). Returns the complete filename or None if not + found. + """ + if path is None: + path = os.environ['PATH'] + paths = string.split(path, os.pathsep) + (base, ext) = os.path.splitext(executable) + if (sys.platform == 'win32') and (ext != '.exe'): + executable = executable + '.exe' + if not os.path.isfile(executable): + for p in paths: + f = os.path.join(p, executable) + if os.path.isfile(f): + # the file exists, we have a shot at spawn working + return f + return None + else: + return executable + + # find_executable() From python-dev@python.org Wed Aug 2 02:09:13 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:09:13 -0700 Subject: [Python-checkins] CVS: distutils/distutils sysconfig.py,1.22,1.23 Message-ID: <200008020109.SAA10455@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv10445 Modified Files: sysconfig.py Log Message: Rene Liebscher: deleted unneeded hard-coded assignments of CC, RANLIB, etc. in '_init_nt()' (they were kludges for CygwinCCompiler and no longer needed). Index: sysconfig.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/sysconfig.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** sysconfig.py 2000/06/27 01:59:43 1.22 --- sysconfig.py 2000/08/02 01:09:11 1.23 *************** *** 268,289 **** g['SO'] = '.pyd' - g['exec_prefix'] = EXEC_PREFIX - - # These are needed for the CygwinCCompiler and Mingw32CCompiler - # classes, which are just UnixCCompiler classes that happen to work on - # Windows. UnixCCompiler expects to find these values in sysconfig, so - # here they are. The fact that other Windows compilers don't need - # these values is pure luck (hmmm). - - # XXX I think these are now unnecessary... - - g['CC'] = "cc" # not gcc? - g['RANLIB'] = "ranlib" - g['AR'] = "ar" - g['OPT'] = "-O2" - g['SO'] = ".pyd" - g['LDSHARED'] = "ld" - g['CCSHARED'] = "" g['EXE'] = ".exe" --- 268,273 ---- g['SO'] = '.pyd' g['EXE'] = ".exe" + g['exec_prefix'] = EXEC_PREFIX From python-dev@python.org Wed Aug 2 02:31:58 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:31:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils cygwinccompiler.py,1.3,1.4 Message-ID: <200008020131.SAA12174@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv11708 Modified Files: cygwinccompiler.py Log Message: Latest version from Rene Liebscher; major changes: - added big comment describing possible problems - look for and react to versions of gcc, ld, and dlltool; mainly this is done by the 'get_versions()' function and the CygwinCCompiler and Mingw32CCompiler constructors - move 'check_config_h()' to end of file and defer calling it until we need to (ie. in the CygwinCCompiler constructor) - lots of changes in 'link_shared_object()' -- mostly seems to be library and DLL stuff, but I don't follow it entirely Index: cygwinccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cygwinccompiler.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** cygwinccompiler.py 2000/07/27 02:13:19 1.3 --- cygwinccompiler.py 2000/08/02 01:31:56 1.4 *************** *** 7,57 **** """ # created 2000/05/05, Rene Liebscher __revision__ = "$Id$" ! import os,sys,string ! from distutils import sysconfig from distutils.unixccompiler import UnixCCompiler - # Because these compilers aren't configured in Python's config.h file by - # default we should at least warn the user if he is using a unmodified - # version. - - def check_config_h(): - """Checks if the GCC compiler is mentioned in config.h. If it is not, - compiling probably doesn't work, so print a warning to stderr. - """ - - # XXX the result of the check should be returned! - - from distutils import sysconfig - import string,sys - try: - # It would probably better to read single lines to search. - # But we do this only once, and it is fast enough - f=open(sysconfig.get_config_h_filename()) - s=f.read() - f.close() - try: - # is somewhere a #ifdef __GNUC__ or something similar - string.index(s,"__GNUC__") - except ValueError: - sys.stderr.write ("warning: "+ - "Python's config.h doesn't seem to support your compiler.\n") - except IOError: - # if we can't read this file, we cannot say it is wrong - # the compiler will complain later about this file as missing - pass - - - # This is called when the module is imported, so we make this check only once - # XXX why not make it only when the compiler is needed? - check_config_h() - - class CygwinCCompiler (UnixCCompiler): compiler_type = 'cygwin' def __init__ (self, --- 7,58 ---- """ + # problems: + # + # * if you use a msvc compiled python version (1.5.2) + # 1. you have to insert a __GNUC__ section in its config.h + # 2. you have to generate a import library for its dll + # - create a def-file for python??.dll + # - create a import library using + # dlltool --dllname python15.dll --def python15.def \ + # --output-lib libpython15.a + # + # see also http://starship.python.net/crew/kernr/mingw32/Notes.html + # + # * We use put export_symbols in a def-file, and don't use + # --export-all-symbols because it doesn't worked reliable in some + # tested configurations. And because other windows compilers also + # need their symbols specified this no serious problem. + # + # tested configurations: + # + # * cygwin gcc 2.91.57/ld 2.9.4/dllwrap 0.2.4 works + # (after patching python's config.h and for C++ some other include files) + # see also http://starship.python.net/crew/kernr/mingw32/Notes.html + # * mingw32 gcc 2.95.2/ld 2.9.4/dllwrap 0.2.4 works + # (ld doesn't support -shared, so we use dllwrap) + # * cygwin gcc 2.95.2/ld 2.10.90/dllwrap 2.10.90 works now + # - its dllwrap doesn't work, there is a bug in binutils 2.10.90 + # see also ..... + # - using gcc -mdll instead dllwrap doesn't work without -static because + # it tries to link against dlls instead their import libraries. (If + # it finds the dll first.) + # By specifying -static we force ld to link against the import libraries, + # this is windows standard and there are normally not the necessary symbols + # in the dlls. + # created 2000/05/05, Rene Liebscher __revision__ = "$Id$" ! import os,sys from distutils.unixccompiler import UnixCCompiler + from distutils.file_util import write_file class CygwinCCompiler (UnixCCompiler): compiler_type = 'cygwin' + gcc_version = None + dllwrap_version = None + ld_version = None def __init__ (self, *************** *** 62,81 **** UnixCCompiler.__init__ (self, verbose, dry_run, force) # Hard-code GCC because that's what this is all about. # XXX optimization, warnings etc. should be customizable. ! self.set_executables(compiler='gcc -O -Wall', ! compiler_so='gcc -O -Wall', ! linker_exe='gcc', ! linker_so='dllwrap --target=i386-cygwin32') # cygwin and mingw32 need different sets of libraries ! self.dll_libraries=[ ! # cygwin shouldn't need msvcrt, ! # but without the dll's will crash ! # ( gcc version 2.91.57 ) ! # perhaps something about initialization ! # mingw32 needs it in all cases ! "msvcrt" ! ] # __init__ () --- 63,105 ---- UnixCCompiler.__init__ (self, verbose, dry_run, force) + if check_config_h()<=0: + self.warn( + "Python's config.h doesn't seem to support your compiler. " + "Compiling may fail because of undefined preprocessor macros.") + + (self.gcc_version, self.ld_version, self.dllwrap_version) = \ + get_versions() + sys.stderr.write(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % + (self.gcc_version, + self.ld_version, + self.dllwrap_version) ) + + # ld_version >= "2.10.90" should also be able to use + # gcc -mdll instead of dllwrap + # Older dllwraps had own version numbers, newer ones use the + # same as the rest of binutils ( also ld ) + # dllwrap 2.10.90 is buggy + if self.ld_version >= "2.10.90": + self.linker = "gcc" + else: + self.linker = "dllwrap" + # Hard-code GCC because that's what this is all about. # XXX optimization, warnings etc. should be customizable. ! self.set_executables(compiler='gcc -mcygwin -O -Wall', ! compiler_so='gcc -mcygwin -mdll -O -Wall', ! linker_exe='gcc -mcygwin', ! linker_so=('%s -mcygwin -mdll -static' % ! self.linker)) # cygwin and mingw32 need different sets of libraries ! if self.gcc_version == "2.91.57": ! # cygwin shouldn't need msvcrt, but without the dlls will crash ! # (gcc version 2.91.57) -- perhaps something about initialization ! self.dll_libraries=["msvcrt"] ! self.warn( ! "Consider upgrading to a newer version of gcc") ! else: ! self.dll_libraries=[] # __init__ () *************** *** 94,155 **** build_temp=None): ! if libraries == None: ! libraries = [] ! # Additional libraries: the python library is always needed on ! # Windows we need the python version without the dot, eg. '15' ! ! pythonlib = ("python%d%d" % ! (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) ! libraries.append(pythonlib) libraries.extend(self.dll_libraries) ! # name of extension ! # XXX WRONG WRONG WRONG ! # this is NOT the place to make guesses about Python namespaces; ! # that MUST be done in build_ext.py ! ! if not debug: ! ext_name = os.path.basename(output_filename)[:-len(".pyd")] ! else: ! ext_name = os.path.basename(output_filename)[:-len("_d.pyd")] ! ! def_file = os.path.join(build_temp, ext_name + ".def") ! #exp_file = os.path.join(build_temp, ext_name + ".exp") ! #lib_file = os.path.join(build_temp, 'lib' + ext_name + ".a") ! ! # Make .def file ! # (It would probably better to check if we really need this, ! # but for this we had to insert some unchanged parts of ! # UnixCCompiler, and this is not what we want.) ! f = open(def_file,"w") ! f.write("EXPORTS\n") # intro ! if export_symbols == None: ! # export a function "init" + ext_name ! f.write("init" + ext_name + "\n") else: ! # if there are more symbols to export write them into f for sym in export_symbols: ! f.write(sym+"\n") ! f.close() ! ! if extra_preargs == None: ! extra_preargs = [] ! ! extra_preargs = extra_preargs + [ ! #"--verbose", ! #"--output-exp",exp_file, ! #"--output-lib",lib_file, ! "--def",def_file ! ] ! # who wants symbols and a many times larger output file # should explicitly switch the debug mode on ! # otherwise we let dllwrap strip the output file # (On my machine unstripped_file = stripped_file + 254KB # 10KB < stripped_file < ??100KB ) if not debug: ! extra_preargs = extra_preargs + ["-s"] UnixCCompiler.link_shared_object(self, --- 118,182 ---- build_temp=None): ! # use separate copies, so can modify the lists ! extra_preargs = list(extra_preargs or []) ! libraries = list(libraries or []) ! # Additional libraries libraries.extend(self.dll_libraries) + + # we want to put some files in the same directory as the + # object files are, build_temp doesn't help much ! # where are the object files ! temp_dir = os.path.dirname(objects[0]) ! # name of dll to give the helper files (def, lib, exp) the same name ! (dll_name, dll_extension) = os.path.splitext( ! os.path.basename(output_filename)) ! ! # generate the filenames for these files ! def_file = None # this will be done later, if necessary ! exp_file = os.path.join(temp_dir, dll_name + ".exp") ! lib_file = os.path.join(temp_dir, 'lib' + dll_name + ".a") ! ! #extra_preargs.append("--verbose") ! if self.linker == "dllwrap": ! extra_preargs.extend([#"--output-exp",exp_file, ! "--output-lib",lib_file, ! ]) else: ! # doesn't work: bfd_close build\...\libfoo.a: Invalid operation ! extra_preargs.extend([#"-Wl,--out-implib,%s" % lib_file, ! ]) ! ! # check what we got in export_symbols ! if export_symbols is not None: ! # Make .def file ! # (It would probably better to check if we really need this, ! # but for this we had to insert some unchanged parts of ! # UnixCCompiler, and this is not what we want.) ! def_file = os.path.join(temp_dir, dll_name + ".def") ! contents = [ ! "LIBRARY %s" % os.path.basename(output_filename), ! "EXPORTS"] for sym in export_symbols: ! contents.append(sym) ! self.execute(write_file, (def_file, contents), ! "writing %s" % def_file) ! ! if def_file: ! if self.linker == "dllwrap": ! # for dllwrap we have to use a special option ! extra_preargs.append("--def") ! # for gcc/ld it is specified as any other object file ! extra_preargs.append(def_file) ! # who wants symbols and a many times larger output file # should explicitly switch the debug mode on ! # otherwise we let dllwrap/ld strip the output file # (On my machine unstripped_file = stripped_file + 254KB # 10KB < stripped_file < ??100KB ) if not debug: ! extra_preargs.append("-s") UnixCCompiler.link_shared_object(self, *************** *** 160,164 **** library_dirs, runtime_library_dirs, ! None, # export_symbols, we do this with our def-file debug, extra_preargs, --- 187,191 ---- library_dirs, runtime_library_dirs, ! None, # export_symbols, we do this in our def-file debug, extra_preargs, *************** *** 182,199 **** CygwinCCompiler.__init__ (self, verbose, dry_run, force) self.set_executables(compiler='gcc -mno-cygwin -O -Wall', ! compiler_so='gcc -mno-cygwin -O -Wall', linker_exe='gcc -mno-cygwin', ! linker_so='dllwrap' ! + ' --target=i386-mingw32' ! + ' --entry _DllMain@12') ! # mingw32 doesn't really need 'target' and cygwin too (it seems, ! # it is enough to specify a different entry point) ! ! # no additional libraries need ! # (only msvcrt, which is already added by CygwinCCompiler) ! # __init__ () ! # class Mingw32CCompiler --- 209,322 ---- CygwinCCompiler.__init__ (self, verbose, dry_run, force) + + # A real mingw32 doesn't need to specify a different entry point, + # but cygwin 2.91.57 in no-cygwin-mode needs it. + if self.gcc_version <= "2.91.57": + entry_point = '--entry _DllMain@12' + else: + entry_point = '' self.set_executables(compiler='gcc -mno-cygwin -O -Wall', ! compiler_so='gcc -mno-cygwin -mdll -O -Wall', linker_exe='gcc -mno-cygwin', ! linker_so='%s -mno-cygwin -mdll -static %s' ! % (self.linker, entry_point)) ! # Maybe we should also append -mthreads, but then the finished ! # dlls need another dll (mingwm10.dll see Mingw32 docs) ! # (-mthreads: Support thread-safe exception handling on `Mingw32') ! ! # no additional libraries needed ! self.dll_libraries=[] ! # __init__ () ! # class Mingw32CCompiler + + # Because these compilers aren't configured in Python's config.h file by + # default, we should at least warn the user if he is using a unmodified + # version. + + def check_config_h(): + """Checks if the GCC compiler is mentioned in config.h. If it is not, + compiling probably doesn't work. + """ + # return values + # 2: OK, python was compiled with GCC + # 1: OK, python's config.h mentions __GCC__ + # 0: uncertain, because we couldn't check it + # -1: probably not OK, because we didn't found it in config.h + # You could check check_config_h()>0 => OK + + from distutils import sysconfig + import string,sys + # if sys.version contains GCC then python was compiled with + # GCC, and the config.h file should be OK + if -1 == string.find(sys.version,"GCC"): + pass # go to the next test + else: + return 2 + + try: + # It would probably better to read single lines to search. + # But we do this only once, and it is fast enough + f=open(sysconfig.get_config_h_filename()) + s=f.read() + f.close() + + # is somewhere a #ifdef __GNUC__ or something similar + if -1 == string.find(s,"__GNUC__"): + return -1 + else: + return 1 + except IOError: + # if we can't read this file, we cannot say it is wrong + # the compiler will complain later about this file as missing + pass + return 0 + + def get_versions(): + """ Try to find out the versions of gcc, ld and dllwrap. + If not possible it returns None for it. + """ + from distutils.version import StrictVersion + from distutils.spawn import find_executable + import re + + gcc_exe = find_executable('gcc') + if gcc_exe: + out = os.popen(gcc_exe + ' -dumpversion','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+\.\d+)',out_string) + if result: + gcc_version = StrictVersion(result.group(1)) + else: + gcc_version = None + else: + gcc_version = None + ld_exe = find_executable('ld') + if ld_exe: + out = os.popen(ld_exe + ' -v','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+\.\d+)',out_string) + if result: + ld_version = StrictVersion(result.group(1)) + else: + ld_version = None + else: + ld_version = None + dllwrap_exe = find_executable('dllwrap') + if dllwrap_exe: + out = os.popen(dllwrap_exe + ' --version','r') + out_string = out.read() + out.close() + result = re.search(' (\d+\.\d+\.\d+)',out_string) + if result: + dllwrap_version = StrictVersion(result.group(1)) + else: + dllwrap_version = None + else: + dllwrap_version = None + return (gcc_version, ld_version, dllwrap_version) + From python-dev@python.org Wed Aug 2 02:34:21 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:34:21 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command install_lib.py,1.25,1.26 Message-ID: <200008020134.SAA12324@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv12313/command Modified Files: install_lib.py Log Message: Rene Liebscher: fix 'skipping byte-compilation' message for grammatical consistency. Index: install_lib.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/install_lib.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** install_lib.py 2000/05/27 17:27:23 1.25 --- install_lib.py 2000/08/02 01:34:18 1.26 *************** *** 75,79 **** compile_msg = "byte-compiling %s to %s" % \ (f, os.path.basename (out_fn)) ! skip_msg = "byte-compilation of %s skipped" % f self.make_file (f, out_fn, compile, (f,), compile_msg, skip_msg) --- 75,79 ---- compile_msg = "byte-compiling %s to %s" % \ (f, os.path.basename (out_fn)) ! skip_msg = "skipping byte-compilation of %s" % f self.make_file (f, out_fn, compile, (f,), compile_msg, skip_msg) From python-dev@python.org Wed Aug 2 02:37:33 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:37:33 -0700 Subject: [Python-checkins] CVS: distutils/distutils util.py,1.40,1.41 Message-ID: <200008020137.SAA12539@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12526 Modified Files: util.py Log Message: Added the 'execute()' function (moved here from cmd.py with minor tweakage). Index: util.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/util.py,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** util.py 2000/08/02 00:37:32 1.40 --- util.py 2000/08/02 01:37:30 1.41 *************** *** 224,225 **** --- 224,251 ---- # split_quoted () + + + def execute (func, args, msg=None, verbose=0, dry_run=0): + """Perform some action that affects the outside world (eg. by writing + to the filesystem). Such actions are special because they are disabled + by the 'dry_run' flag, and announce themselves if 'verbose' is true. + This method takes care of all that bureaucracy for you; all you have to + do is supply the function to call and an argument tuple for it (to + embody the "external action" being performed), and an optional message + to print. + """ + # Generate a message if we weren't passed one + if msg is None: + msg = "%s%s" % (func.__name__, `args`) + if msg[-2:] == ',)': # correct for singleton tuple + msg = msg[0:-2] + ')' + + # Print it if verbosity level is high enough + if verbose: + print msg + + # And do it, as long as we're not in dry-run mode + if not dry_run: + apply(func, args) + + # execute() From python-dev@python.org Wed Aug 2 02:37:55 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:37:55 -0700 Subject: [Python-checkins] CVS: distutils/distutils cmd.py,1.20,1.21 Message-ID: <200008020137.SAA12560@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12552 Modified Files: cmd.py Log Message: Replaced 'execute()' method with a thin wrapper around 'util.execute()'. Index: cmd.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cmd.py,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** cmd.py 2000/07/27 02:13:19 1.20 --- cmd.py 2000/08/02 01:37:53 1.21 *************** *** 319,347 **** def execute (self, func, args, msg=None, level=1): ! """Perform some action that affects the outside world (eg. by ! writing to the filesystem). Such actions are special because they ! should be disabled by the "dry run" flag, and should announce ! themselves if the current verbosity level is high enough. This ! method takes care of all that bureaucracy for you; all you have to ! do is supply the function to call and an argument tuple for it (to ! embody the "external action" being performed), a message to print ! if the verbosity level is high enough, and an optional verbosity ! threshold. ! """ ! ! # Generate a message if we weren't passed one ! if msg is None: ! msg = "%s %s" % (func.__name__, `args`) ! if msg[-2:] == ',)': # correct for singleton tuple ! msg = msg[0:-2] + ')' ! ! # Print it if verbosity level is high enough ! self.announce (msg, level) ! ! # And do it, as long as we're not in dry-run mode ! if not self.dry_run: ! apply (func, args) ! ! # execute() --- 319,323 ---- def execute (self, func, args, msg=None, level=1): ! util.execute(func, args, msg, self.verbose >= level, self.dry_run) From python-dev@python.org Wed Aug 2 02:38:23 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:38:23 -0700 Subject: [Python-checkins] CVS: distutils/distutils ccompiler.py,1.30,1.31 Message-ID: <200008020138.SAA12590@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12580 Modified Files: ccompiler.py Log Message: Added 'execute()' method, a thin wrapper around 'util.execute() (just like the one in cmd.py). Index: ccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/ccompiler.py,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** ccompiler.py 2000/07/27 02:13:19 1.30 --- ccompiler.py 2000/08/02 01:38:20 1.31 *************** *** 16,20 **** from distutils.dir_util import mkpath from distutils.dep_util import newer_pairwise, newer_group ! from distutils.util import split_quoted --- 16,20 ---- from distutils.dir_util import mkpath from distutils.dep_util import newer_pairwise, newer_group ! from distutils.util import split_quoted, execute *************** *** 784,787 **** --- 784,790 ---- def warn (self, msg): sys.stderr.write ("warning: %s\n" % msg) + + def execute (self, func, args, msg=None, level=1): + execute(func, args, msg, self.verbose >= level, self.dry_run) def spawn (self, cmd): From python-dev@python.org Wed Aug 2 02:42:14 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:42:14 -0700 Subject: [Python-checkins] CVS: distutils mksnap,1.6,1.7 Message-ID: <200008020142.SAA12922@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv12910 Modified Files: mksnap Log Message: Source distributions now go in 'dist' directory, so expect them there. Index: mksnap =================================================================== RCS file: /cvsroot/python/distutils/mksnap,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** mksnap 2000/06/08 01:19:18 1.6 --- mksnap 2000/08/02 01:42:11 1.7 *************** *** 1,3 **** #!/bin/sh ./snapshot_setup.py sdist ! mv distutils-*.{tar,zip}* www/download --- 1,3 ---- #!/bin/sh ./snapshot_setup.py sdist ! mv dist/distutils-*.{tar,zip}* www/download From python-dev@python.org Wed Aug 2 02:44:47 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:44:47 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command bdist.py,1.15,1.16 Message-ID: <200008020144.SAA13026@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv13015 Modified Files: bdist.py Log Message: Added 'wininst' to the 'format_commands' list, so it's included in the --help-formats output. Also moved that list up so it's more obvious when adding formats. Index: bdist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/bdist.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** bdist.py 2000/07/05 03:07:18 1.15 --- bdist.py 2000/08/02 01:44:44 1.16 *************** *** 53,56 **** --- 53,61 ---- 'nt': 'zip', } + # Establish the preferred order (for the --help-formats option). + format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar', + 'wininst', 'zip'] + + # And the real information. format_command = { 'rpm': ('bdist_rpm', "RPM distribution"), 'gztar': ('bdist_dumb', "gzip'ed tar file"), *************** *** 58,67 **** 'ztar': ('bdist_dumb', "compressed tar file"), 'tar': ('bdist_dumb', "tar file"), - 'zip': ('bdist_dumb', "ZIP file"), 'wininst': ('bdist_wininst', "Windows executable installer"), } - # establish the preferred order - format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar', 'zip'] --- 63,70 ---- 'ztar': ('bdist_dumb', "compressed tar file"), 'tar': ('bdist_dumb', "tar file"), 'wininst': ('bdist_wininst', "Windows executable installer"), + 'zip': ('bdist_dumb', "ZIP file"), } From python-dev@python.org Wed Aug 2 02:49:43 2000 From: python-dev@python.org (Greg Ward) Date: Tue, 1 Aug 2000 18:49:43 -0700 Subject: [Python-checkins] CVS: distutils/distutils sysconfig.py,1.23,1.24 Message-ID: <200008020149.SAA13303@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv13293 Modified Files: sysconfig.py Log Message: Typo fix. Index: sysconfig.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/sysconfig.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** sysconfig.py 2000/08/02 01:09:11 1.23 --- sysconfig.py 2000/08/02 01:49:40 1.24 *************** *** 78,82 **** elif os.name == "mac": ! if platform_specific: if standard_lib: return os.path.join(EXEC_PREFIX, "Mac", "Plugins") --- 78,82 ---- elif os.name == "mac": ! if plat_specific: if standard_lib: return os.path.join(EXEC_PREFIX, "Mac", "Plugins") From python-dev@python.org Wed Aug 2 03:35:10 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 19:35:10 -0700 Subject: [Python-checkins] CVS: python/dist/src LICENSE,NONE,1.1 Message-ID: <200008020235.TAA23800@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv23792 Added Files: LICENSE Log Message: Adding a LICENSE file so we can have it in the 1.6 release. --- NEW FILE --- # Placeholder for license information. From python-dev@python.org Wed Aug 2 03:59:04 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 1 Aug 2000 19:59:04 -0700 Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1,1.1.2.1 Message-ID: <200008020259.TAA25379@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv25370 Modified Files: Tag: cnri-16-start LICENSE Log Message: License ext as Bob Kahn wants it. Index: LICENSE =================================================================== RCS file: /cvsroot/python/python/dist/src/LICENSE,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -r1.1 -r1.1.2.1 *** LICENSE 2000/08/02 02:35:08 1.1 --- LICENSE 2000/08/02 02:59:02 1.1.2.1 *************** *** 1 **** ! # Placeholder for license information. --- 1,117 ---- ! A. HISTORY OF THE SOFTWARE ! ! Python originated in 1991 at Stichting Mathematisch Centrum (CWI) in ! the Netherlands as an outgrowth of a language called ABC. Its ! principal author was Guido van Rossum, although it included smaller ! contributions from others at CWI and elsewhere. The last version of ! Python issued by CWI was Python 1.2. In 1995, Mr. van Rossum ! continued his work on Python at the Corporation for National Research ! Initiatives (CNRI) in Reston, Virginia where several versions of the ! software were generated. Python 1.6 is the last of the versions ! developed at CNRI. ! ! ! ! B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING Python 1.6, beta 1 ! ! ! 1. CNRI LICENSE AGREEMENT ! ! PYTHON 1.6, beta 1 ! ! CNRI OPEN SOURCE LICENSE AGREEMENT ! ! ! IMPORTANT: PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY. ! ! BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, ! INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE ! DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE ! AGREEMENT. ! ! 1. This LICENSE AGREEMENT is between the Corporation for National ! Research Initiatives, having an office at 1895 Preston White Drive, ! Reston, VA 20191 ("CNRI"), and the Individual or Organization ! ("Licensee") accessing and otherwise using Python 1.6, beta 1 software ! in source or binary form and its associated documentation, as released ! at the www.python.org Internet site on August 5, 2000 ("Python ! 1.6b1"). ! ! 2. Subject to the terms and conditions of this License Agreement, CNRI ! hereby grants Licensee a nonexclusive, royalty-free, world-wide ! license to reproduce, analyze, test, perform and/or display publicly, ! prepare derivative works, distribute, and otherwise use Python 1.6b1 ! alone or in any derivative version, provided, however, that CNRI's ! License Agreement is retained in Python 1.6b1, alone or in any ! derivative version prepared by Licensee. ! ! Alternately, in lieu of CNRI's License Agreement, Licensee may ! substitute the following text (omitting the quotes): "Python 1.6, beta ! 1, is made available subject to the terms and conditions in CNRI's ! License Agreement. This Agreement may be located on the Internet ! using the following unique, persistent identifier (known as a handle): ! 1895.22/1011. This Agreement may also be obtained from a proxy server ! on the Internet using the URL:http://hdl.handle.net/1895.22/1011". ! ! 3. In the event Licensee prepares a derivative work that is based on ! or incorporates Python 1.6b1or any part thereof, and wants to make the ! derivative work available to the public as provided herein, then ! Licensee hereby agrees to indicate in any such work the nature of the ! modifications made to Python 1.6b1. ! ! 4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS" ! basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR ! IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND ! DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ! FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1 WILL NOT ! INFRINGE ANY THIRD PARTY RIGHTS. ! ! 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE ! SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS ! AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1, OR ANY ! DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME ! STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY SO THE ! ABOVE DISCLAIMER MAY NOT APPLY TO LICENSEE. ! ! 6. This License Agreement will automatically terminate upon a material ! breach of its terms and conditions. ! ! 7. This License Agreement shall be governed by and interpreted in all ! respects by the law of the State of Virginia, excluding conflict of ! law provisions. Nothing in this License Agreement shall be deemed to ! create any relationship of agency, partnership, or joint venture ! between CNRI and Licensee. This License Agreement does not grant ! permission to use CNRI trademarks or trade name in a trademark sense ! to endorse or promote products or services of Licensee, or any third ! party. ! ! 8. By clicking on the "ACCEPT" button where indicated, or by copying ! installing or otherwise using Python 1.6b1, Licensee agrees to be ! bound by the terms and conditions of this License Agreement. ! ! ACCEPT ! ! ! ! 2. CWI PERMISSIONS STATEMENT AND DISCLAIMER ! ! Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, ! The Netherlands. All rights reserved. ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the name of Stichting Mathematisch ! Centrum or CWI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO ! THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND ! FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE ! FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT ! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! From python-dev@python.org Wed Aug 2 14:41:21 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 06:41:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pypcre.c,2.21,2.22 Message-ID: <200008021341.GAA15122@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv14555 Modified Files: pypcre.c Log Message: Fix for bug #110651 (Jitterbug PR#343): only use the low 8 bits of an octal escape, as documented in the comment for the check_escape() function Index: pypcre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pypcre.c,v retrieving revision 2.21 retrieving revision 2.22 diff -C2 -r2.21 -r2.22 *** pypcre.c 2000/07/31 15:28:04 2.21 --- pypcre.c 2000/08/02 13:41:18 2.22 *************** *** 1033,1037 **** { if (( pcre_ctypes[ ptr[i] ] & ctype_odigit) != 0) ! c = c * 8 + ptr[i]-'0'; else break; /* Non-octal character--break out of the loop */ --- 1033,1037 ---- { if (( pcre_ctypes[ ptr[i] ] & ctype_odigit) != 0) ! c = (c * 8 + ptr[i]-'0') & 255; else break; /* Non-octal character--break out of the loop */ From python-dev@python.org Wed Aug 2 21:46:54 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 2 Aug 2000 13:46:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules fcntlmodule.c,2.23,2.24 Message-ID: <200008022046.NAA14885@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv14876 Modified Files: fcntlmodule.c Log Message: Rob Hooft (Patch #101046): use PyArg_ParseTuple everywhere. Index: fcntlmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/fcntlmodule.c,v retrieving revision 2.23 retrieving revision 2.24 diff -C2 -r2.23 -r2.24 *** fcntlmodule.c 2000/07/21 06:00:07 2.23 --- fcntlmodule.c 2000/08/02 20:46:51 2.24 *************** *** 38,42 **** char buf[1024]; ! if (PyArg_Parse(args, "(iis#)", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, --- 38,42 ---- char buf[1024]; ! if (PyArg_ParseTuple(args, "iis#:fcntl", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, *************** *** 56,65 **** PyErr_Clear(); ! if (PyArg_Parse(args, "(ii)", &fd, &code)) ! arg = 0; ! else { ! PyErr_Clear(); ! if (!PyArg_Parse(args, "(iii)", &fd, &code, &arg)) ! return NULL; } Py_BEGIN_ALLOW_THREADS --- 56,63 ---- PyErr_Clear(); ! arg = 0; ! if (!PyArg_ParseTuple(args, "ii|i;fcntl requires 2 integers and optionally a third integer or a string", ! &fd, &code, &arg)) { ! return NULL; } Py_BEGIN_ALLOW_THREADS *************** *** 80,84 **** is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module FCNTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string."; --- 78,87 ---- is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module FCNTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string. If arg is\n\ ! given as a string, the return value of fcntl is a string of that length,\n\ ! containing the resulting value put in the arg buffer by the operating system.\n\ ! The length of the arg string is not allowed to exceed 1024 bytes. If the arg\n\ ! given is an integer or if none is specified, the result value is an integer\n\ ! corresponding to the return value of the fcntl call in the C code."; *************** *** 96,100 **** char buf[1024]; ! if (PyArg_Parse(args, "(iis#)", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, --- 99,103 ---- char buf[1024]; ! if (PyArg_ParseTuple(args, "iis#:ioctl", &fd, &code, &str, &len)) { if (len > sizeof buf) { PyErr_SetString(PyExc_ValueError, *************** *** 114,123 **** PyErr_Clear(); ! if (PyArg_Parse(args, "(ii)", &fd, &code)) ! arg = 0; ! else { ! PyErr_Clear(); ! if (!PyArg_Parse(args, "(iii)", &fd, &code, &arg)) ! return NULL; } Py_BEGIN_ALLOW_THREADS --- 117,124 ---- PyErr_Clear(); ! arg = 0; ! if (!PyArg_ParseTuple(args, "ii|i;ioctl requires 2 integers and optionally a third integer or a string", ! &fd, &code, &arg)) { ! return NULL; } Py_BEGIN_ALLOW_THREADS *************** *** 137,141 **** is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module IOCTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string."; --- 138,147 ---- is defined by op and is operating system dependent. Typically these\n\ codes can be retrieved from the library module IOCTL. The argument arg\n\ ! is optional, and defaults to 0; it may be an int or a string. If arg is\n\ ! given as a string, the return value of ioctl is a string of that length,\n\ ! containing the resulting value put in the arg buffer by the operating system.\n\ ! The length of the arg string is not allowed to exceed 1024 bytes. If the arg\n\ ! given is an integer or if none is specified, the result value is an integer\n\ ! corresponding to the return value of the ioctl call in the C code."; *************** *** 149,153 **** int ret; ! if (!PyArg_Parse(args, "(ii)", &fd, &code)) return NULL; --- 155,159 ---- int ret; ! if (!PyArg_ParseTuple(args, "ii:flock", &fd, &code)) return NULL; *************** *** 274,281 **** static PyMethodDef fcntl_methods[] = { ! {"fcntl", fcntl_fcntl, 0, fcntl_doc}, ! {"ioctl", fcntl_ioctl, 0, ioctl_doc}, ! {"flock", fcntl_flock, 0, flock_doc}, ! {"lockf", fcntl_lockf, 1, lockf_doc}, {NULL, NULL} /* sentinel */ }; --- 280,287 ---- static PyMethodDef fcntl_methods[] = { ! {"fcntl", fcntl_fcntl, METH_VARARGS, fcntl_doc}, ! {"ioctl", fcntl_ioctl, METH_VARARGS, ioctl_doc}, ! {"flock", fcntl_flock, METH_VARARGS, flock_doc}, ! {"lockf", fcntl_lockf, METH_VARARGS, lockf_doc}, {NULL, NULL} /* sentinel */ }; From python-dev@python.org Wed Aug 2 21:53:53 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 2 Aug 2000 13:53:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfcntl.tex,1.22,1.23 Message-ID: <200008022053.NAA15397@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv15381/lib Modified Files: libfcntl.tex Log Message: Rob Hooft : Description of fcntl(): Added description of what can go wrong. Index: libfcntl.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfcntl.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** libfcntl.tex 2000/04/03 20:13:53 1.22 --- libfcntl.tex 2000/08/02 20:53:51 1.23 *************** *** 31,36 **** data is copied to a buffer whose address is passed to the C \cfunction{fcntl()} call. The return value after a successful call ! is the contents of the buffer, converted to a string object. In ! case the \cfunction{fcntl()} fails, an \exception{IOError} is raised. \end{funcdesc} --- 31,42 ---- data is copied to a buffer whose address is passed to the C \cfunction{fcntl()} call. The return value after a successful call ! is the contents of the buffer, converted to a string object. The length ! of the returned string will be the same as the length of the \var{arg} ! argument. This is limited to 1024 bytes. If the information returned ! in the buffer by the operating system is larger than 1024 bytes, ! this is most likely to result in a segmentation violation or a more ! subtle data corruption. ! ! If the \cfunction{fcntl()} fails, an \exception{IOError} is raised. \end{funcdesc} From python-dev@python.org Wed Aug 2 22:29:33 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 2 Aug 2000 14:29:33 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.85,1.85.2.1 Message-ID: <200008022129.OAA26057@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26035 Modified Files: Tag: cnri-16-start README Log Message: Changes pertaining to the new license, changed email addresses, and so on. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.85 retrieving revision 1.85.2.1 diff -C2 -r1.85 -r1.85.2.1 *** README 2000/04/11 17:11:09 1.85 --- README 2000/08/02 21:29:30 1.85.2.1 *************** *** 1,8 **** ! This is Python version 1.6 ! ========================== ! There are various alpha and beta versions -- these are distinguishable ! through Include/patchlevel.h or by the name of the top-level directory ! and the tar file. --- 1,14 ---- ! This is Python version 1.6 beta 1 (1.6b1) ! ========================================= ! License information ! ------------------- ! ! Copyright (c) 1991-1995, Stichting Mathematisch Centrum. ! All rights reserved. ! ! See the file "LICENSE" for information on terms & conditions for ! accessing and otherwise using Python 1.6b1 and for a DISCLAIMER OF ALL ! WARRANTIES. *************** *** 31,49 **** - A modest plug - ------------- - - ************************************************************************ - * Without your support, I won't be able to continue to work on Python! * - ************************************************************************ - - If you use Python, please consider joining the Python Software - Activity (PSA). See http://www.python.org/psa/. - - Organizations that make heavy use of Python are especially encouraged - to become corporate members -- or better still, to join the Python - Consortium (see http://www.python.org/consortium/). - - How do I learn Python? ---------------------- --- 37,40 ---- *************** *** 57,71 **** - Copyright issues - ---------------- - - Python is COPYRIGHTED but free to use for all. See the full copyright - notice at the end of this file and in the file Misc/COPYRIGHT. - - The Python distribution is *not* affected by the GNU Public Licence - (GPL). There are interfaces to some GNU code but these are entirely - optional and no GNU code is distributed with Python. - - Build instructions ================== --- 48,51 ---- *************** *** 680,684 **** Misc/python-mode.el. Originally written by the famous Tim Peters, it is now maintained by the equally famous Barry Warsaw ! . The latest version, along with various other contributed Python-related Emacs goodies, is online at . And if you are planning to --- 660,664 ---- Misc/python-mode.el. Originally written by the famous Tim Peters, it is now maintained by the equally famous Barry Warsaw ! . The latest version, along with various other contributed Python-related Emacs goodies, is online at . And if you are planning to *************** *** 723,734 **** ! Bug reports ! ----------- ! Bugs are best reported to the comp.lang.python newsgroup (or the ! Python mailing list) -- see the section "Newsgroups" above. Before ! posting, check the newsgroup archives (see above) to see if your bug ! has already been reported! If you don't want to go public, send them ! to me: . --- 703,711 ---- ! Bug reports and patches ! ----------------------- ! To report a bug or contribute a patch, use the Python project at ! SourceForge: http://sourceforge.net/projects/python. *************** *** 836,889 **** tags, TAGS Tags files for vi and Emacs - - Author's address - ================ - - Guido van Rossum - CNRI - 1895 Preston White Drive - Reston, VA 20191 - USA - - E-mail: guido@cnri.reston.va.us or guido@python.org - - - - Copyright notice - ================ - - The Python source is copyrighted, but you can freely use and copy it - as long as you don't change or remove the copyright notice: - - ---------------------------------------------------------------------- - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ---------------------------------------------------------------------- ! --Guido van Rossum (home page: http://www.python.org/~guido/) --- 813,820 ---- tags, TAGS Tags files for vi and Emacs ! That's all, folks! ! ------------------ ! --Guido van Rossum (home page: http://www.pythonlabs.com/~guido/) From python-dev@python.org Thu Aug 3 03:04:08 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:04:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules zlibmodule.c,2.34,2.35 Message-ID: <200008030204.TAA19199@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv17704 Modified Files: zlibmodule.c Log Message: Use METH_VARARGS instead of numeric constant 1 Index: zlibmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/zlibmodule.c,v retrieving revision 2.34 retrieving revision 2.35 diff -C2 -r2.34 -r2.35 *** zlibmodule.c 2000/07/21 06:00:07 2.34 --- zlibmodule.c 2000/08/03 02:04:05 2.35 *************** *** 611,615 **** PyObject *RetVal; ! if (!PyArg_NoArgs(args)) return NULL; if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) --- 611,615 ---- PyObject *RetVal; ! if (!PyArg_ParseTuple(args, "")) return NULL; if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) *************** *** 676,681 **** static PyMethodDef comp_methods[] = { ! {"compress", (binaryfunc)PyZlib_objcompress, 1, comp_compress__doc__}, ! {"flush", (binaryfunc)PyZlib_flush, 1, comp_flush__doc__}, {NULL, NULL} }; --- 676,683 ---- static PyMethodDef comp_methods[] = { ! {"compress", (binaryfunc)PyZlib_objcompress, ! METH_VARARGS, comp_compress__doc__}, ! {"flush", (binaryfunc)PyZlib_flush, ! METH_VARARGS, comp_flush__doc__}, {NULL, NULL} }; *************** *** 683,688 **** static PyMethodDef Decomp_methods[] = { ! {"decompress", (binaryfunc)PyZlib_objdecompress, 1, decomp_decompress__doc__}, ! {"flush", (binaryfunc)PyZlib_unflush, 0, decomp_flush__doc__}, {NULL, NULL} }; --- 685,692 ---- static PyMethodDef Decomp_methods[] = { ! {"decompress", (binaryfunc)PyZlib_objdecompress, ! METH_VARARGS, decomp_decompress__doc__}, ! {"flush", (binaryfunc)PyZlib_unflush, ! METH_VARARGS, decomp_flush__doc__}, {NULL, NULL} }; *************** *** 751,761 **** static PyMethodDef zlib_methods[] = { ! {"adler32", (PyCFunction)PyZlib_adler32, 1, adler32__doc__}, ! {"compress", (PyCFunction)PyZlib_compress, 1, compress__doc__}, ! {"compressobj", (PyCFunction)PyZlib_compressobj, 1, compressobj__doc__}, ! {"crc32", (PyCFunction)PyZlib_crc32, 1, crc32__doc__}, ! {"decompress", (PyCFunction)PyZlib_decompress, 1, decompress__doc__}, ! {"decompressobj", (PyCFunction)PyZlib_decompressobj, 1, decompressobj__doc__}, ! {NULL, NULL} }; --- 755,771 ---- static PyMethodDef zlib_methods[] = { ! {"adler32", (PyCFunction)PyZlib_adler32, ! METH_VARARGS, adler32__doc__}, ! {"compress", (PyCFunction)PyZlib_compress, ! METH_VARARGS, compress__doc__}, ! {"compressobj", (PyCFunction)PyZlib_compressobj, ! METH_VARARGS, compressobj__doc__}, ! {"crc32", (PyCFunction)PyZlib_crc32, ! METH_VARARGS, crc32__doc__}, ! {"decompress", (PyCFunction)PyZlib_decompress, ! METH_VARARGS, decompress__doc__}, ! {"decompressobj", (PyCFunction)PyZlib_decompressobj, ! METH_VARARGS, decompressobj__doc__}, ! {NULL, NULL} }; From python-dev@python.org Thu Aug 3 03:06:48 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:06:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.20,1.21 Message-ID: <200008030206.TAA20060@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20021 Modified Files: test_re.py Log Message: Add nasty test case that overflows the stack with a repeated group Index: test_re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** test_re.py 2000/06/30 16:25:20 1.20 --- test_re.py 2000/08/03 02:06:45 1.21 *************** *** 29,32 **** --- 29,36 ---- raise TestFailed, "re.search" + # Try nasty case that overflows the straightforward recursive + # implementation of repeated groups. + assert re.match('(x)*', 50000*'x').span() == (0, 50000) + if verbose: print 'Running tests on re.sub' From python-dev@python.org Thu Aug 3 03:06:19 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:06:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.13,2.14 binascii.c,2.22,2.23 cStringIO.c,2.24,2.25 cmathmodule.c,2.19,2.20 md5module.c,2.20,2.21 newmodule.c,2.25,2.26 readline.c,2.25,2.26 socketmodule.c,1.124,1.125 soundex.c,2.8,2.9 stropmodule.c,2.70,2.71 threadmodule.c,2.35,2.36 timemodule.c,2.98,2.99 Message-ID: <200008030206.TAA20036@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv19973 Modified Files: _localemodule.c binascii.c cStringIO.c cmathmodule.c md5module.c newmodule.c readline.c socketmodule.c soundex.c stropmodule.c threadmodule.c timemodule.c Log Message: Use METH_VARARGS instead of numeric constant 1 in method def. tables Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** _localemodule.c 2000/07/21 06:00:07 2.13 --- _localemodule.c 2000/08/03 02:06:15 2.14 *************** *** 390,397 **** static struct PyMethodDef PyLocale_Methods[] = { ! {"setlocale", (PyCFunction) PyLocale_setlocale, 1, setlocale__doc__}, ! {"localeconv", (PyCFunction) PyLocale_localeconv, 0, localeconv__doc__}, ! {"strcoll", (PyCFunction) PyLocale_strcoll, 1, strcoll__doc__}, ! {"strxfrm", (PyCFunction) PyLocale_strxfrm, 1, strxfrm__doc__}, #if defined(MS_WIN32) || defined(macintosh) {"_getdefaultlocale", (PyCFunction) PyLocale_getdefaultlocale, 0}, --- 390,401 ---- static struct PyMethodDef PyLocale_Methods[] = { ! {"setlocale", (PyCFunction) PyLocale_setlocale, ! METH_VARARGS, setlocale__doc__}, ! {"localeconv", (PyCFunction) PyLocale_localeconv, ! 0, localeconv__doc__}, ! {"strcoll", (PyCFunction) PyLocale_strcoll, ! METH_VARARGS, strcoll__doc__}, ! {"strxfrm", (PyCFunction) PyLocale_strxfrm, ! METH_VARARGS, strxfrm__doc__}, #if defined(MS_WIN32) || defined(macintosh) {"_getdefaultlocale", (PyCFunction) PyLocale_getdefaultlocale, 0}, Index: binascii.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v retrieving revision 2.22 retrieving revision 2.23 diff -C2 -r2.22 -r2.23 *** binascii.c 2000/07/21 06:00:07 2.22 --- binascii.c 2000/08/03 02:06:15 2.23 *************** *** 878,895 **** static struct PyMethodDef binascii_module_methods[] = { ! {"a2b_uu", binascii_a2b_uu, 1, doc_a2b_uu}, ! {"b2a_uu", binascii_b2a_uu, 1, doc_b2a_uu}, ! {"a2b_base64", binascii_a2b_base64, 1, doc_a2b_base64}, ! {"b2a_base64", binascii_b2a_base64, 1, ! doc_b2a_base64}, ! {"a2b_hqx", binascii_a2b_hqx, 1, doc_a2b_hqx}, ! {"b2a_hqx", binascii_b2a_hqx, 1, doc_b2a_hqx}, ! {"rlecode_hqx", binascii_rlecode_hqx, 1, ! doc_rlecode_hqx}, ! {"rledecode_hqx", binascii_rledecode_hqx, 1, ! doc_rledecode_hqx}, ! {"crc_hqx", binascii_crc_hqx, 1, doc_crc_hqx}, ! {"crc32", binascii_crc32, 1, doc_crc32}, {NULL, NULL} /* sentinel */ }; --- 878,902 ---- static struct PyMethodDef binascii_module_methods[] = { ! {"a2b_uu", binascii_a2b_uu, ! METH_VARARGS, doc_a2b_uu}, ! {"b2a_uu", binascii_b2a_uu, ! METH_VARARGS, doc_b2a_uu}, ! {"a2b_base64", binascii_a2b_base64, ! METH_VARARGS, doc_a2b_base64}, ! {"b2a_base64", binascii_b2a_base64, ! METH_VARARGS, doc_b2a_base64}, ! {"a2b_hqx", binascii_a2b_hqx, ! METH_VARARGS, doc_a2b_hqx}, ! {"b2a_hqx", binascii_b2a_hqx, ! METH_VARARGS, doc_b2a_hqx}, ! {"rlecode_hqx", binascii_rlecode_hqx, ! METH_VARARGS, doc_rlecode_hqx}, ! {"rledecode_hqx", binascii_rledecode_hqx, ! METH_VARARGS, doc_rledecode_hqx}, ! {"crc_hqx", binascii_crc_hqx, ! METH_VARARGS, doc_crc_hqx}, ! {"crc32", binascii_crc32, ! METH_VARARGS, doc_crc32}, {NULL, NULL} /* sentinel */ }; Index: cStringIO.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cStringIO.c,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -r2.24 -r2.25 *** cStringIO.c 2000/07/24 14:43:35 2.24 --- cStringIO.c 2000/08/03 02:06:16 2.25 *************** *** 618,622 **** static struct PyMethodDef IO_methods[] = { ! {"StringIO", (PyCFunction)IO_StringIO, 1, IO_StringIO__doc__}, {NULL, NULL} /* sentinel */ }; --- 618,623 ---- static struct PyMethodDef IO_methods[] = { ! {"StringIO", (PyCFunction)IO_StringIO, ! METH_VARARGS, IO_StringIO__doc__}, {NULL, NULL} /* sentinel */ }; Index: cmathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cmathmodule.c,v retrieving revision 2.19 retrieving revision 2.20 diff -C2 -r2.19 -r2.20 *** cmathmodule.c 2000/07/31 15:28:04 2.19 --- cmathmodule.c 2000/08/03 02:06:16 2.20 *************** *** 373,392 **** static PyMethodDef cmath_methods[] = { ! {"acos", cmath_acos, 1, c_acos_doc}, ! {"acosh", cmath_acosh, 1, c_acosh_doc}, ! {"asin", cmath_asin, 1, c_asin_doc}, ! {"asinh", cmath_asinh, 1, c_asinh_doc}, ! {"atan", cmath_atan, 1, c_atan_doc}, ! {"atanh", cmath_atanh, 1, c_atanh_doc}, ! {"cos", cmath_cos, 1, c_cos_doc}, ! {"cosh", cmath_cosh, 1, c_cosh_doc}, ! {"exp", cmath_exp, 1, c_exp_doc}, ! {"log", cmath_log, 1, c_log_doc}, ! {"log10", cmath_log10, 1, c_log10_doc}, ! {"sin", cmath_sin, 1, c_sin_doc}, ! {"sinh", cmath_sinh, 1, c_sinh_doc}, ! {"sqrt", cmath_sqrt, 1, c_sqrt_doc}, ! {"tan", cmath_tan, 1, c_tan_doc}, ! {"tanh", cmath_tanh, 1, c_tanh_doc}, {NULL, NULL} /* sentinel */ }; --- 373,408 ---- static PyMethodDef cmath_methods[] = { ! {"acos", cmath_acos, ! METH_VARARGS, c_acos_doc}, ! {"acosh", cmath_acosh, ! METH_VARARGS, c_acosh_doc}, ! {"asin", cmath_asin, ! METH_VARARGS, c_asin_doc}, ! {"asinh", cmath_asinh, ! METH_VARARGS, c_asinh_doc}, ! {"atan", cmath_atan, ! METH_VARARGS, c_atan_doc}, ! {"atanh", cmath_atanh, ! METH_VARARGS, c_atanh_doc}, ! {"cos", cmath_cos, ! METH_VARARGS, c_cos_doc}, ! {"cosh", cmath_cosh, ! METH_VARARGS, c_cosh_doc}, ! {"exp", cmath_exp, ! METH_VARARGS, c_exp_doc}, ! {"log", cmath_log, ! METH_VARARGS, c_log_doc}, ! {"log10", cmath_log10, ! METH_VARARGS, c_log10_doc}, ! {"sin", cmath_sin, ! METH_VARARGS, c_sin_doc}, ! {"sinh", cmath_sinh, ! METH_VARARGS, c_sinh_doc}, ! {"sqrt", cmath_sqrt, ! METH_VARARGS, c_sqrt_doc}, ! {"tan", cmath_tan, ! METH_VARARGS, c_tan_doc}, ! {"tanh", cmath_tanh, ! METH_VARARGS, c_tanh_doc}, {NULL, NULL} /* sentinel */ }; Index: md5module.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** md5module.c 2000/07/21 06:00:07 2.20 --- md5module.c 2000/08/03 02:06:16 2.21 *************** *** 228,233 **** static PyMethodDef md5_functions[] = { ! {"new", (PyCFunction)MD5_new, 1, new_doc}, ! {"md5", (PyCFunction)MD5_new, 1, new_doc}, /* Backward compatibility */ {NULL, NULL} /* Sentinel */ }; --- 228,233 ---- static PyMethodDef md5_functions[] = { ! {"new", (PyCFunction)MD5_new, METH_VARARGS, new_doc}, ! {"md5", (PyCFunction)MD5_new, METH_VARARGS, new_doc}, /* Backward compatibility */ {NULL, NULL} /* Sentinel */ }; Index: newmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/newmodule.c,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** newmodule.c 2000/07/21 06:00:07 2.25 --- newmodule.c 2000/08/03 02:06:16 2.26 *************** *** 181,190 **** static PyMethodDef new_methods[] = { ! {"instance", new_instance, 1, new_instance_doc}, ! {"instancemethod", new_instancemethod, 1, new_im_doc}, ! {"function", new_function, 1, new_function_doc}, ! {"code", new_code, 1, new_code_doc}, ! {"module", new_module, 1, new_module_doc}, ! {"classobj", new_class, 1, new_class_doc}, {NULL, NULL} /* sentinel */ }; --- 181,196 ---- static PyMethodDef new_methods[] = { ! {"instance", new_instance, ! METH_VARARGS, new_instance_doc}, ! {"instancemethod", new_instancemethod, ! METH_VARARGS, new_im_doc}, ! {"function", new_function, ! METH_VARARGS, new_function_doc}, ! {"code", new_code, ! METH_VARARGS, new_code_doc}, ! {"module", new_module, ! METH_VARARGS, new_module_doc}, ! {"classobj", new_class, ! METH_VARARGS, new_class_doc}, {NULL, NULL} /* sentinel */ }; Index: readline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/readline.c,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** readline.c 2000/07/23 21:18:09 2.25 --- readline.c 2000/08/03 02:06:16 2.26 *************** *** 324,336 **** static struct PyMethodDef readline_methods[] = { ! {"parse_and_bind", parse_and_bind, 1, doc_parse_and_bind}, {"get_line_buffer", get_line_buffer, 0, doc_get_line_buffer}, ! {"insert_text", insert_text, 1, doc_insert_text}, ! {"read_init_file", read_init_file, 1, doc_read_init_file}, ! {"read_history_file", read_history_file, 1, doc_read_history_file}, ! {"write_history_file", write_history_file, 1, doc_write_history_file}, ! {"set_history_length", set_history_length, 1, set_history_length_doc}, ! {"get_history_length", get_history_length, 1, get_history_length_doc}, ! {"set_completer", set_completer, 1, doc_set_completer}, {"get_begidx", get_begidx, 0, doc_get_begidx}, {"get_endidx", get_endidx, 0, doc_get_endidx}, --- 324,340 ---- static struct PyMethodDef readline_methods[] = { ! {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, {"get_line_buffer", get_line_buffer, 0, doc_get_line_buffer}, ! {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, ! {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, ! {"read_history_file", read_history_file, ! METH_VARARGS, doc_read_history_file}, ! {"write_history_file", write_history_file, ! METH_VARARGS, doc_write_history_file}, ! {"set_history_length", set_history_length, ! METH_VARARGS, set_history_length_doc}, ! {"get_history_length", get_history_length, ! METH_VARARGS, get_history_length_doc}, ! {"set_completer", set_completer, METH_VARARGS, doc_set_completer}, {"get_begidx", get_begidx, 0, doc_get_begidx}, {"get_endidx", get_endidx, 0, doc_get_endidx}, Index: socketmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v retrieving revision 1.124 retrieving revision 1.125 diff -C2 -r1.124 -r1.125 *** socketmodule.c 2000/07/31 15:28:04 1.124 --- socketmodule.c 2000/08/03 02:06:16 1.125 *************** *** 1345,1391 **** static PyMethodDef PySocketSock_methods[] = { ! {"accept", (PyCFunction)PySocketSock_accept, 1, accept_doc}, ! {"bind", (PyCFunction)PySocketSock_bind, 1, bind_doc}, ! {"close", (PyCFunction)PySocketSock_close, 1, close_doc}, ! {"connect", (PyCFunction)PySocketSock_connect, 1, connect_doc}, ! {"connect_ex", (PyCFunction)PySocketSock_connect_ex, 1, connect_ex_doc}, #ifndef NO_DUP ! {"dup", (PyCFunction)PySocketSock_dup, 1, dup_doc}, #endif ! {"fileno", (PyCFunction)PySocketSock_fileno, 1, fileno_doc}, #ifdef HAVE_GETPEERNAME ! {"getpeername", (PyCFunction)PySocketSock_getpeername, 1, getpeername_doc}, #endif ! {"getsockname", (PyCFunction)PySocketSock_getsockname, 1, getsockname_doc}, ! {"getsockopt", (PyCFunction)PySocketSock_getsockopt, 1, getsockopt_doc}, ! {"listen", (PyCFunction)PySocketSock_listen, 1, listen_doc}, #ifndef NO_DUP ! {"makefile", (PyCFunction)PySocketSock_makefile, 1, makefile_doc}, #endif ! {"recv", (PyCFunction)PySocketSock_recv, 1, recv_doc}, ! {"recvfrom", (PyCFunction)PySocketSock_recvfrom, 1, recvfrom_doc}, ! {"send", (PyCFunction)PySocketSock_send, 1, send_doc}, ! {"sendto", (PyCFunction)PySocketSock_sendto, 1, sendto_doc}, ! {"setblocking", (PyCFunction)PySocketSock_setblocking, 1, setblocking_doc}, ! {"setsockopt", (PyCFunction)PySocketSock_setsockopt, 1, setsockopt_doc}, ! {"shutdown", (PyCFunction)PySocketSock_shutdown, 1, shutdown_doc}, {NULL, NULL} /* sentinel */ --- 1345,1391 ---- static PyMethodDef PySocketSock_methods[] = { ! {"accept", (PyCFunction)PySocketSock_accept, METH_VARARGS, accept_doc}, ! {"bind", (PyCFunction)PySocketSock_bind, METH_VARARGS, bind_doc}, ! {"close", (PyCFunction)PySocketSock_close, METH_VARARGS, close_doc}, ! {"connect", (PyCFunction)PySocketSock_connect, METH_VARARGS, connect_doc}, ! {"connect_ex", (PyCFunction)PySocketSock_connect_ex, METH_VARARGS, connect_ex_doc}, #ifndef NO_DUP ! {"dup", (PyCFunction)PySocketSock_dup, METH_VARARGS, dup_doc}, #endif ! {"fileno", (PyCFunction)PySocketSock_fileno, METH_VARARGS, fileno_doc}, #ifdef HAVE_GETPEERNAME ! {"getpeername", (PyCFunction)PySocketSock_getpeername, METH_VARARGS, getpeername_doc}, #endif ! {"getsockname", (PyCFunction)PySocketSock_getsockname, METH_VARARGS, getsockname_doc}, ! {"getsockopt", (PyCFunction)PySocketSock_getsockopt, METH_VARARGS, getsockopt_doc}, ! {"listen", (PyCFunction)PySocketSock_listen, METH_VARARGS, listen_doc}, #ifndef NO_DUP ! {"makefile", (PyCFunction)PySocketSock_makefile, METH_VARARGS, makefile_doc}, #endif ! {"recv", (PyCFunction)PySocketSock_recv, METH_VARARGS, recv_doc}, ! {"recvfrom", (PyCFunction)PySocketSock_recvfrom, METH_VARARGS, recvfrom_doc}, ! {"send", (PyCFunction)PySocketSock_send, METH_VARARGS, send_doc}, ! {"sendto", (PyCFunction)PySocketSock_sendto, METH_VARARGS, sendto_doc}, ! {"setblocking", (PyCFunction)PySocketSock_setblocking, METH_VARARGS, setblocking_doc}, ! {"setsockopt", (PyCFunction)PySocketSock_setsockopt, METH_VARARGS, setsockopt_doc}, ! {"shutdown", (PyCFunction)PySocketSock_shutdown, METH_VARARGS, shutdown_doc}, {NULL, NULL} /* sentinel */ *************** *** 2200,2221 **** static PyMethodDef PySocket_methods[] = { ! {"gethostbyname", PySocket_gethostbyname, 1, gethostbyname_doc}, ! {"gethostbyname_ex", PySocket_gethostbyname_ex, 1, ghbn_ex_doc}, ! {"gethostbyaddr", PySocket_gethostbyaddr, 1, gethostbyaddr_doc}, ! {"gethostname", PySocket_gethostname, 1, gethostname_doc}, ! {"getservbyname", PySocket_getservbyname, 1, getservbyname_doc}, ! {"getprotobyname", PySocket_getprotobyname, 1,getprotobyname_doc}, ! {"socket", PySocket_socket, 1, socket_doc}, #ifndef NO_DUP ! {"fromfd", PySocket_fromfd, 1, fromfd_doc}, #endif ! {"ntohs", PySocket_ntohs, 1, ntohs_doc}, ! {"ntohl", PySocket_ntohl, 1, ntohl_doc}, ! {"htons", PySocket_htons, 1, htons_doc}, ! {"htonl", PySocket_htonl, 1, htonl_doc}, ! {"inet_aton", PySocket_inet_aton, 1, inet_aton_doc}, ! {"inet_ntoa", PySocket_inet_ntoa, 1, inet_ntoa_doc}, #ifdef USE_SSL ! {"ssl", PySocket_ssl, 1, ssl_doc}, #endif /* USE_SSL */ {NULL, NULL} /* Sentinel */ --- 2200,2236 ---- static PyMethodDef PySocket_methods[] = { ! {"gethostbyname", PySocket_gethostbyname, ! METH_VARARGS, gethostbyname_doc}, ! {"gethostbyname_ex", PySocket_gethostbyname_ex, ! METH_VARARGS, ghbn_ex_doc}, ! {"gethostbyaddr", PySocket_gethostbyaddr, ! METH_VARARGS, gethostbyaddr_doc}, ! {"gethostname", PySocket_gethostname, ! METH_VARARGS, gethostname_doc}, ! {"getservbyname", PySocket_getservbyname, ! METH_VARARGS, getservbyname_doc}, ! {"getprotobyname", PySocket_getprotobyname, ! METH_VARARGS,getprotobyname_doc}, ! {"socket", PySocket_socket, ! METH_VARARGS, socket_doc}, #ifndef NO_DUP ! {"fromfd", PySocket_fromfd, ! METH_VARARGS, fromfd_doc}, #endif ! {"ntohs", PySocket_ntohs, ! METH_VARARGS, ntohs_doc}, ! {"ntohl", PySocket_ntohl, ! METH_VARARGS, ntohl_doc}, ! {"htons", PySocket_htons, ! METH_VARARGS, htons_doc}, ! {"htonl", PySocket_htonl, ! METH_VARARGS, htonl_doc}, ! {"inet_aton", PySocket_inet_aton, ! METH_VARARGS, inet_aton_doc}, ! {"inet_ntoa", PySocket_inet_ntoa, ! METH_VARARGS, inet_ntoa_doc}, #ifdef USE_SSL ! {"ssl", PySocket_ssl, ! METH_VARARGS, ssl_doc}, #endif /* USE_SSL */ {NULL, NULL} /* Sentinel */ Index: soundex.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/soundex.c,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** soundex.c 2000/07/21 06:00:07 2.8 --- soundex.c 2000/08/03 02:06:16 2.9 *************** *** 158,165 **** static PyMethodDef SoundexMethods[] = { ! {"sound_similar", sound_similar, 1, soundex_sound_similar__doc__}, ! {"get_soundex", get_soundex, 1, soundex_get_soundex__doc__}, ! {NULL, NULL } /* sentinel */ }; --- 158,167 ---- static PyMethodDef SoundexMethods[] = { ! {"sound_similar", sound_similar, ! METH_VARARGS, soundex_sound_similar__doc__}, ! {"get_soundex", get_soundex, ! METH_VARARGS, soundex_get_soundex__doc__}, ! {NULL, NULL } /* sentinel */ }; Index: stropmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/stropmodule.c,v retrieving revision 2.70 retrieving revision 2.71 diff -C2 -r2.70 -r2.71 *** stropmodule.c 2000/07/21 06:00:07 2.70 --- stropmodule.c 2000/08/03 02:06:16 2.71 *************** *** 1155,1178 **** static PyMethodDef strop_methods[] = { ! {"atof", strop_atof, 1, atof__doc__}, ! {"atoi", strop_atoi, 1, atoi__doc__}, ! {"atol", strop_atol, 1, atol__doc__}, {"capitalize", strop_capitalize, 0, capitalize__doc__}, ! {"count", strop_count, 1, count__doc__}, ! {"expandtabs", strop_expandtabs, 1, expandtabs__doc__}, ! {"find", strop_find, 1, find__doc__}, ! {"join", strop_joinfields, 1, joinfields__doc__}, ! {"joinfields", strop_joinfields, 1, joinfields__doc__}, {"lstrip", strop_lstrip, 0, lstrip__doc__}, {"lower", strop_lower, 0, lower__doc__}, ! {"maketrans", strop_maketrans, 1, maketrans__doc__}, ! {"replace", strop_replace, 1, replace__doc__}, ! {"rfind", strop_rfind, 1, rfind__doc__}, {"rstrip", strop_rstrip, 0, rstrip__doc__}, ! {"split", strop_splitfields, 1, splitfields__doc__}, ! {"splitfields", strop_splitfields, 1, splitfields__doc__}, {"strip", strop_strip, 0, strip__doc__}, {"swapcase", strop_swapcase, 0, swapcase__doc__}, ! {"translate", strop_translate, 1, translate__doc__}, {"upper", strop_upper, 0, upper__doc__}, {NULL, NULL} /* sentinel */ --- 1155,1192 ---- static PyMethodDef strop_methods[] = { ! {"atof", strop_atof, ! METH_VARARGS, atof__doc__}, ! {"atoi", strop_atoi, ! METH_VARARGS, atoi__doc__}, ! {"atol", strop_atol, ! METH_VARARGS, atol__doc__}, {"capitalize", strop_capitalize, 0, capitalize__doc__}, ! {"count", strop_count, ! METH_VARARGS, count__doc__}, ! {"expandtabs", strop_expandtabs, ! METH_VARARGS, expandtabs__doc__}, ! {"find", strop_find, ! METH_VARARGS, find__doc__}, ! {"join", strop_joinfields, ! METH_VARARGS, joinfields__doc__}, ! {"joinfields", strop_joinfields, ! METH_VARARGS, joinfields__doc__}, {"lstrip", strop_lstrip, 0, lstrip__doc__}, {"lower", strop_lower, 0, lower__doc__}, ! {"maketrans", strop_maketrans, ! METH_VARARGS, maketrans__doc__}, ! {"replace", strop_replace, ! METH_VARARGS, replace__doc__}, ! {"rfind", strop_rfind, ! METH_VARARGS, rfind__doc__}, {"rstrip", strop_rstrip, 0, rstrip__doc__}, ! {"split", strop_splitfields, ! METH_VARARGS, splitfields__doc__}, ! {"splitfields", strop_splitfields, ! METH_VARARGS, splitfields__doc__}, {"strip", strop_strip, 0, strip__doc__}, {"swapcase", strop_swapcase, 0, swapcase__doc__}, ! {"translate", strop_translate, ! METH_VARARGS, translate__doc__}, {"upper", strop_upper, 0, upper__doc__}, {NULL, NULL} /* sentinel */ Index: threadmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/threadmodule.c,v retrieving revision 2.35 retrieving revision 2.36 diff -C2 -r2.35 -r2.36 *** threadmodule.c 2000/07/21 06:00:07 2.35 --- threadmodule.c 2000/08/03 02:06:16 2.36 *************** *** 338,344 **** static PyMethodDef thread_methods[] = { ! {"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread, 1, start_new_doc}, ! {"start_new", (PyCFunction)thread_PyThread_start_new_thread, 1, start_new_doc}, {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, 0, --- 338,346 ---- static PyMethodDef thread_methods[] = { ! {"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread, ! METH_VARARGS, start_new_doc}, ! {"start_new", (PyCFunction)thread_PyThread_start_new_thread, ! METH_VARARGS, start_new_doc}, {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, 0, Index: timemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v retrieving revision 2.98 retrieving revision 2.99 diff -C2 -r2.98 -r2.99 *** timemodule.c 2000/07/31 15:28:04 2.98 --- timemodule.c 2000/08/03 02:06:16 2.99 *************** *** 499,512 **** {"gmtime", time_gmtime, 0, gmtime_doc}, {"localtime", time_localtime, 0, localtime_doc}, ! {"asctime", time_asctime, 1, asctime_doc}, {"ctime", time_ctime, 0, ctime_doc}, #ifdef HAVE_MKTIME ! {"mktime", time_mktime, 1, mktime_doc}, #endif #ifdef HAVE_STRFTIME ! {"strftime", time_strftime, 1, strftime_doc}, #endif #ifdef HAVE_STRPTIME ! {"strptime", time_strptime, 1, strptime_doc}, #endif {NULL, NULL} /* sentinel */ --- 499,512 ---- {"gmtime", time_gmtime, 0, gmtime_doc}, {"localtime", time_localtime, 0, localtime_doc}, ! {"asctime", time_asctime, METH_VARARGS, asctime_doc}, {"ctime", time_ctime, 0, ctime_doc}, #ifdef HAVE_MKTIME ! {"mktime", time_mktime, METH_VARARGS, mktime_doc}, #endif #ifdef HAVE_STRFTIME ! {"strftime", time_strftime, METH_VARARGS, strftime_doc}, #endif #ifdef HAVE_STRPTIME ! {"strptime", time_strptime, METH_VARARGS, strptime_doc}, #endif {NULL, NULL} /* sentinel */ From python-dev@python.org Thu Aug 3 03:28:57 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:28:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include methodobject.h,2.20,2.21 Message-ID: <200008030228.TAA21382@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv21360 Modified Files: methodobject.h Log Message: Added #define for oldest version of argument calling Index: methodobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/methodobject.h,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** methodobject.h 2000/07/09 03:09:55 2.20 --- methodobject.h 2000/08/03 02:28:54 2.21 *************** *** 51,54 **** --- 51,55 ---- /* Flag passed to newmethodobject */ + #define METH_OLDARGS 0x0000 #define METH_VARARGS 0x0001 #define METH_KEYWORDS 0x0002 From python-dev@python.org Thu Aug 3 03:34:47 2000 From: python-dev@python.org (A.M. Kuchling) Date: Wed, 2 Aug 2000 19:34:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules cryptmodule.c,2.9,2.10 md5module.c,2.21,2.22 pwdmodule.c,1.21,1.22 readline.c,2.26,2.27 signalmodule.c,2.52,2.53 stropmodule.c,2.71,2.72 termios.c,2.13,2.14 threadmodule.c,2.36,2.37 timemodule.c,2.99,2.100 Message-ID: <200008030234.TAA21870@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv21741 Modified Files: cryptmodule.c md5module.c pwdmodule.c readline.c signalmodule.c stropmodule.c termios.c threadmodule.c timemodule.c Log Message: Use METH_OLDARGS instead of numeric constant 0 in method def. tables Index: cryptmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cryptmodule.c,v retrieving revision 2.9 retrieving revision 2.10 diff -C2 -r2.9 -r2.10 *** cryptmodule.c 2000/07/22 23:57:55 2.9 --- cryptmodule.c 2000/08/03 02:34:44 2.10 *************** *** 32,36 **** static PyMethodDef crypt_methods[] = { ! {"crypt", crypt_crypt, 0, crypt_crypt__doc__}, {NULL, NULL} /* sentinel */ }; --- 32,36 ---- static PyMethodDef crypt_methods[] = { ! {"crypt", crypt_crypt, METH_OLDARGS, crypt_crypt__doc__}, {NULL, NULL} /* sentinel */ }; Index: md5module.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v retrieving revision 2.21 retrieving revision 2.22 diff -C2 -r2.21 -r2.22 *** md5module.c 2000/08/03 02:06:16 2.21 --- md5module.c 2000/08/03 02:34:44 2.22 *************** *** 127,133 **** static PyMethodDef md5_methods[] = { ! {"update", (PyCFunction)md5_update, 0, update_doc}, ! {"digest", (PyCFunction)md5_digest, 0, digest_doc}, ! {"copy", (PyCFunction)md5_copy, 0, copy_doc}, {NULL, NULL} /* sentinel */ }; --- 127,136 ---- static PyMethodDef md5_methods[] = { ! {"update", (PyCFunction)md5_update, ! METH_OLDARGS, update_doc}, ! {"digest", (PyCFunction)md5_digest, ! METH_OLDARGS, digest_doc}, ! {"copy", (PyCFunction)md5_copy, ! METH_OLDARGS, copy_doc}, {NULL, NULL} /* sentinel */ }; Index: pwdmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** pwdmodule.c 2000/07/21 06:00:07 1.21 --- pwdmodule.c 2000/08/03 02:34:44 1.22 *************** *** 129,136 **** static PyMethodDef pwd_methods[] = { ! {"getpwuid", pwd_getpwuid, 0, pwd_getpwuid__doc__}, ! {"getpwnam", pwd_getpwnam, 0, pwd_getpwnam__doc__}, #ifdef HAVE_GETPWENT ! {"getpwall", pwd_getpwall, 0, pwd_getpwall__doc__}, #endif {NULL, NULL} /* sentinel */ --- 129,136 ---- static PyMethodDef pwd_methods[] = { ! {"getpwuid", pwd_getpwuid, METH_OLDARGS, pwd_getpwuid__doc__}, ! {"getpwnam", pwd_getpwnam, METH_OLDARGS, pwd_getpwnam__doc__}, #ifdef HAVE_GETPWENT ! {"getpwall", pwd_getpwall, METH_OLDARGS, pwd_getpwall__doc__}, #endif {NULL, NULL} /* sentinel */ Index: readline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/readline.c,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** readline.c 2000/08/03 02:06:16 2.26 --- readline.c 2000/08/03 02:34:44 2.27 *************** *** 325,329 **** { {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, ! {"get_line_buffer", get_line_buffer, 0, doc_get_line_buffer}, {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, --- 325,330 ---- { {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind}, ! {"get_line_buffer", get_line_buffer, ! METH_OLDARGS, doc_get_line_buffer}, {"insert_text", insert_text, METH_VARARGS, doc_insert_text}, {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file}, *************** *** 337,347 **** METH_VARARGS, get_history_length_doc}, {"set_completer", set_completer, METH_VARARGS, doc_set_completer}, ! {"get_begidx", get_begidx, 0, doc_get_begidx}, ! {"get_endidx", get_endidx, 0, doc_get_endidx}, ! {"set_completer_delims", set_completer_delims, METH_VARARGS, ! doc_set_completer_delims}, ! {"get_completer_delims", get_completer_delims, 0, ! doc_get_completer_delims}, {0, 0} }; --- 338,348 ---- METH_VARARGS, get_history_length_doc}, {"set_completer", set_completer, METH_VARARGS, doc_set_completer}, ! {"get_begidx", get_begidx, METH_OLDARGS, doc_get_begidx}, ! {"get_endidx", get_endidx, METH_OLDARGS, doc_get_endidx}, ! {"set_completer_delims", set_completer_delims, ! METH_VARARGS, doc_set_completer_delims}, ! {"get_completer_delims", get_completer_delims, ! METH_OLDARGS, doc_get_completer_delims}, {0, 0} }; Index: signalmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/signalmodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** signalmodule.c 2000/07/25 12:56:37 2.52 --- signalmodule.c 2000/08/03 02:34:44 2.53 *************** *** 281,293 **** static PyMethodDef signal_methods[] = { #ifdef HAVE_ALARM ! {"alarm", signal_alarm, 0, alarm_doc}, #endif ! {"signal", signal_signal, 0, signal_doc}, ! {"getsignal", signal_getsignal, 0, getsignal_doc}, #ifdef HAVE_PAUSE ! {"pause", signal_pause, 0, pause_doc}, #endif ! {"default_int_handler", signal_default_int_handler, 0, ! default_int_handler_doc}, {NULL, NULL} /* sentinel */ }; --- 281,293 ---- static PyMethodDef signal_methods[] = { #ifdef HAVE_ALARM ! {"alarm", signal_alarm, METH_OLDARGS, alarm_doc}, #endif ! {"signal", signal_signal, METH_OLDARGS, signal_doc}, ! {"getsignal", signal_getsignal, METH_OLDARGS, getsignal_doc}, #ifdef HAVE_PAUSE ! {"pause", signal_pause, METH_OLDARGS, pause_doc}, #endif ! {"default_int_handler", signal_default_int_handler, ! METH_OLDARGS, default_int_handler_doc}, {NULL, NULL} /* sentinel */ }; Index: stropmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/stropmodule.c,v retrieving revision 2.71 retrieving revision 2.72 diff -C2 -r2.71 -r2.72 *** stropmodule.c 2000/08/03 02:06:16 2.71 --- stropmodule.c 2000/08/03 02:34:44 2.72 *************** *** 1161,1165 **** {"atol", strop_atol, METH_VARARGS, atol__doc__}, ! {"capitalize", strop_capitalize, 0, capitalize__doc__}, {"count", strop_count, METH_VARARGS, count__doc__}, --- 1161,1166 ---- {"atol", strop_atol, METH_VARARGS, atol__doc__}, ! {"capitalize", strop_capitalize, ! METH_OLDARGS, capitalize__doc__}, {"count", strop_count, METH_VARARGS, count__doc__}, *************** *** 1172,1177 **** {"joinfields", strop_joinfields, METH_VARARGS, joinfields__doc__}, ! {"lstrip", strop_lstrip, 0, lstrip__doc__}, ! {"lower", strop_lower, 0, lower__doc__}, {"maketrans", strop_maketrans, METH_VARARGS, maketrans__doc__}, --- 1173,1180 ---- {"joinfields", strop_joinfields, METH_VARARGS, joinfields__doc__}, ! {"lstrip", strop_lstrip, ! METH_OLDARGS, lstrip__doc__}, ! {"lower", strop_lower, ! METH_OLDARGS, lower__doc__}, {"maketrans", strop_maketrans, METH_VARARGS, maketrans__doc__}, *************** *** 1180,1193 **** {"rfind", strop_rfind, METH_VARARGS, rfind__doc__}, ! {"rstrip", strop_rstrip, 0, rstrip__doc__}, {"split", strop_splitfields, METH_VARARGS, splitfields__doc__}, {"splitfields", strop_splitfields, METH_VARARGS, splitfields__doc__}, ! {"strip", strop_strip, 0, strip__doc__}, ! {"swapcase", strop_swapcase, 0, swapcase__doc__}, {"translate", strop_translate, METH_VARARGS, translate__doc__}, ! {"upper", strop_upper, 0, upper__doc__}, {NULL, NULL} /* sentinel */ }; --- 1183,1200 ---- {"rfind", strop_rfind, METH_VARARGS, rfind__doc__}, ! {"rstrip", strop_rstrip, ! METH_OLDARGS, rstrip__doc__}, {"split", strop_splitfields, METH_VARARGS, splitfields__doc__}, {"splitfields", strop_splitfields, METH_VARARGS, splitfields__doc__}, ! {"strip", strop_strip, ! METH_OLDARGS, strip__doc__}, ! {"swapcase", strop_swapcase, ! METH_OLDARGS, swapcase__doc__}, {"translate", strop_translate, METH_VARARGS, translate__doc__}, ! {"upper", strop_upper, ! METH_OLDARGS, upper__doc__}, {NULL, NULL} /* sentinel */ }; Index: termios.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/termios.c,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** termios.c 2000/07/21 06:00:07 2.13 --- termios.c 2000/08/03 02:34:44 2.14 *************** *** 279,288 **** static PyMethodDef termios_methods[] = { ! {"tcgetattr", termios_tcgetattr, 0, termios_tcgetattr__doc__}, ! {"tcsetattr", termios_tcsetattr, 0, termios_tcsetattr__doc__}, ! {"tcsendbreak", termios_tcsendbreak, 0, termios_tcsendbreak__doc__}, ! {"tcdrain", termios_tcdrain, 0, termios_tcdrain__doc__}, ! {"tcflush", termios_tcflush, 0, termios_tcflush__doc__}, ! {"tcflow", termios_tcflow, 0, termios_tcflow__doc__}, {NULL, NULL} }; --- 279,294 ---- static PyMethodDef termios_methods[] = { ! {"tcgetattr", termios_tcgetattr, ! METH_OLDARGS, termios_tcgetattr__doc__}, ! {"tcsetattr", termios_tcsetattr, ! METH_OLDARGS, termios_tcsetattr__doc__}, ! {"tcsendbreak", termios_tcsendbreak, ! METH_OLDARGS, termios_tcsendbreak__doc__}, ! {"tcdrain", termios_tcdrain, ! METH_OLDARGS, termios_tcdrain__doc__}, ! {"tcflush", termios_tcflush, ! METH_OLDARGS, termios_tcflush__doc__}, ! {"tcflow", termios_tcflow, ! METH_OLDARGS, termios_tcflow__doc__}, {NULL, NULL} }; Index: threadmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/threadmodule.c,v retrieving revision 2.36 retrieving revision 2.37 diff -C2 -r2.36 -r2.37 *** threadmodule.c 2000/08/03 02:06:16 2.36 --- threadmodule.c 2000/08/03 02:34:44 2.37 *************** *** 142,151 **** static PyMethodDef lock_methods[] = { ! {"acquire_lock", (PyCFunction)lock_PyThread_acquire_lock, 0, acquire_doc}, ! {"acquire", (PyCFunction)lock_PyThread_acquire_lock, 0, acquire_doc}, ! {"release_lock", (PyCFunction)lock_PyThread_release_lock, 0, release_doc}, ! {"release", (PyCFunction)lock_PyThread_release_lock, 0, release_doc}, ! {"locked_lock", (PyCFunction)lock_locked_lock, 0, locked_doc}, ! {"locked", (PyCFunction)lock_locked_lock, 0, locked_doc}, {NULL, NULL} /* sentinel */ }; --- 142,157 ---- static PyMethodDef lock_methods[] = { ! {"acquire_lock", (PyCFunction)lock_PyThread_acquire_lock, ! METH_OLDARGS, acquire_doc}, ! {"acquire", (PyCFunction)lock_PyThread_acquire_lock, ! METH_OLDARGS, acquire_doc}, ! {"release_lock", (PyCFunction)lock_PyThread_release_lock, ! METH_OLDARGS, release_doc}, ! {"release", (PyCFunction)lock_PyThread_release_lock, ! METH_OLDARGS, release_doc}, ! {"locked_lock", (PyCFunction)lock_locked_lock, ! METH_OLDARGS, locked_doc}, ! {"locked", (PyCFunction)lock_locked_lock, ! METH_OLDARGS, locked_doc}, {NULL, NULL} /* sentinel */ }; *************** *** 344,357 **** METH_VARARGS, start_new_doc}, ! {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, 0, ! allocate_doc}, ! {"allocate", (PyCFunction)thread_PyThread_allocate_lock, 0, ! allocate_doc}, ! {"exit_thread", (PyCFunction)thread_PyThread_exit_thread, 0, ! exit_doc}, ! {"exit", (PyCFunction)thread_PyThread_exit_thread, 0, ! exit_doc}, ! {"get_ident", (PyCFunction)thread_get_ident, 0, ! get_ident_doc}, #ifndef NO_EXIT_PROG {"exit_prog", (PyCFunction)thread_PyThread_exit_prog}, --- 350,363 ---- METH_VARARGS, start_new_doc}, ! {"allocate_lock", (PyCFunction)thread_PyThread_allocate_lock, ! METH_OLDARGS, allocate_doc}, ! {"allocate", (PyCFunction)thread_PyThread_allocate_lock, ! METH_OLDARGS, allocate_doc}, ! {"exit_thread", (PyCFunction)thread_PyThread_exit_thread, ! METH_OLDARGS, exit_doc}, ! {"exit", (PyCFunction)thread_PyThread_exit_thread, ! METH_OLDARGS, exit_doc}, ! {"get_ident", (PyCFunction)thread_get_ident, ! METH_OLDARGS, get_ident_doc}, #ifndef NO_EXIT_PROG {"exit_prog", (PyCFunction)thread_PyThread_exit_prog}, Index: timemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v retrieving revision 2.99 retrieving revision 2.100 diff -C2 -r2.99 -r2.100 *** timemodule.c 2000/08/03 02:06:16 2.99 --- timemodule.c 2000/08/03 02:34:44 2.100 *************** *** 492,504 **** static PyMethodDef time_methods[] = { ! {"time", time_time, 0, time_doc}, #ifdef HAVE_CLOCK ! {"clock", time_clock, 0, clock_doc}, #endif ! {"sleep", time_sleep, 0, sleep_doc}, ! {"gmtime", time_gmtime, 0, gmtime_doc}, ! {"localtime", time_localtime, 0, localtime_doc}, {"asctime", time_asctime, METH_VARARGS, asctime_doc}, ! {"ctime", time_ctime, 0, ctime_doc}, #ifdef HAVE_MKTIME {"mktime", time_mktime, METH_VARARGS, mktime_doc}, --- 492,504 ---- static PyMethodDef time_methods[] = { ! {"time", time_time, METH_OLDARGS, time_doc}, #ifdef HAVE_CLOCK ! {"clock", time_clock, METH_OLDARGS, clock_doc}, #endif ! {"sleep", time_sleep, METH_OLDARGS, sleep_doc}, ! {"gmtime", time_gmtime, METH_OLDARGS, gmtime_doc}, ! {"localtime", time_localtime, METH_OLDARGS, localtime_doc}, {"asctime", time_asctime, METH_VARARGS, asctime_doc}, ! {"ctime", time_ctime, METH_OLDARGS, ctime_doc}, #ifdef HAVE_MKTIME {"mktime", time_mktime, METH_VARARGS, mktime_doc}, From python-dev@python.org Thu Aug 3 04:59:48 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 2 Aug 2000 20:59:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.dsp,1.8.2.2,1.8.2.3 Message-ID: <200008030359.UAA01889@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv1869 Modified Files: Tag: cnri-16-start python16.dsp Log Message: Removed gcmodule.c and exceptions.c -- these files aren't in 1.6. Index: python16.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.dsp,v retrieving revision 1.8.2.2 retrieving revision 1.8.2.3 diff -C2 -r1.8.2.2 -r1.8.2.3 *** python16.dsp 2000/08/01 20:36:48 1.8.2.2 --- python16.dsp 2000/08/03 03:59:45 1.8.2.3 *************** *** 541,559 **** # Begin Source File - SOURCE=..\Python\exceptions.c - - !IF "$(CFG)" == "python16 - Win32 Release" - - !ELSEIF "$(CFG)" == "python16 - Win32 Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Release" - - !ENDIF - - # End Source File - # Begin Source File - SOURCE=..\Objects\fileobject.c --- 541,544 ---- *************** *** 647,664 **** SOURCE=..\Objects\funcobject.c - - !IF "$(CFG)" == "python16 - Win32 Release" - - !ELSEIF "$(CFG)" == "python16 - Win32 Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Debug" - - !ELSEIF "$(CFG)" == "python16 - Win32 Alpha Release" - - !ENDIF - - # End Source File - # Begin Source File - SOURCE=..\Modules\gcmodule.c !IF "$(CFG)" == "python16 - Win32 Release" --- 632,635 ---- From python-dev@python.org Thu Aug 3 13:16:33 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 3 Aug 2000 05:16:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.21,1.22 Message-ID: <200008031216.FAA15766@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv15596 Modified Files: test_re.py Log Message: Comment out repeated-group test for the moment Index: test_re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** test_re.py 2000/08/03 02:06:45 1.21 --- test_re.py 2000/08/03 12:16:29 1.22 *************** *** 31,35 **** # Try nasty case that overflows the straightforward recursive # implementation of repeated groups. ! assert re.match('(x)*', 50000*'x').span() == (0, 50000) if verbose: --- 31,35 ---- # Try nasty case that overflows the straightforward recursive # implementation of repeated groups. ! #assert re.match('(x)*', 50000*'x').span() == (0, 50000) if verbose: From python-dev@python.org Thu Aug 3 16:41:50 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:41:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0201.txt,1.13,1.14 Message-ID: <200008031541.IAA01490@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1479 Modified Files: pep-0201.txt Log Message: This proposal has been accepted by the BDFL. Index: pep-0201.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0201.txt,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** pep-0201.txt 2000/07/31 16:52:52 1.13 --- pep-0201.txt 2000/08/03 15:41:47 1.14 *************** *** 4,8 **** Author: bwarsaw@beopen.com (Barry A. Warsaw) Python-Version: 2.0 ! Status: Draft Created: 13-Jul-2000 Post-History: 27-Jul-2000 --- 4,8 ---- Author: bwarsaw@beopen.com (Barry A. Warsaw) Python-Version: 2.0 ! Status: Accepted Created: 13-Jul-2000 Post-History: 27-Jul-2000 From python-dev@python.org Thu Aug 3 16:42:45 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:42:45 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.18,1.19 Message-ID: <200008031542.IAA01557@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1547 Modified Files: pep-0000.txt Log Message: PEP 201 has been accepted by the BDFL. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** pep-0000.txt 2000/07/31 20:20:52 1.18 --- pep-0000.txt 2000/08/03 15:42:42 1.19 *************** *** 22,26 **** 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! 201 pep-0201.txt Lockstep Iteration bwarsaw 202 pep-0202.txt List Comprehensions tim_one 203 pep-0203.txt Augmented Assignments twouters --- 22,26 ---- 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! [*] 201 pep-0201.txt Lockstep Iteration bwarsaw 202 pep-0202.txt List Comprehensions tim_one 203 pep-0203.txt Augmented Assignments twouters *************** *** 40,43 **** --- 40,46 ---- 217 pep-0217.txt Display Hook for Interactive Use moshez 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson + + + [*] denotes accepted proposals. From python-dev@python.org Thu Aug 3 16:45:33 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:45:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.173,2.174 Message-ID: <200008031545.IAA01906@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv1893 Modified Files: bltinmodule.c Log Message: Both PEP 201 Lockstep Iteration and SF patch #101030 have been accepted by the BDFL. builtin_zip(): New function to implement the zip() function described in the above proposal. zip_doc[]: Docstring for zip(). builtin_methods[]: added entry for zip() Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.173 retrieving revision 2.174 diff -C2 -r2.173 -r2.174 *** bltinmodule.c 2000/07/31 15:28:04 2.173 --- bltinmodule.c 2000/08/03 15:45:29 2.174 *************** *** 2151,2154 **** --- 2151,2209 ---- + static PyObject* + builtin_zip(PyObject *self, PyObject *args) + { + PyObject *ret; + int itemsize = PySequence_Length(args); + int i, j; + + if (itemsize < 1) { + PyErr_SetString(PyExc_TypeError, + "at least one sequence is required"); + return NULL; + } + /* args must be a tuple */ + assert(PyTuple_Check(args)); + + if ((ret = PyList_New(0)) == NULL) + return NULL; + + for (i = 0;; i++) { + PyObject *next = PyTuple_New(itemsize); + if (!next) { + Py_DECREF(ret); + return NULL; + } + for (j = 0; j < itemsize; j++) { + PyObject *seq = PyTuple_GET_ITEM(args, j); + PyObject *item = PySequence_GetItem(seq, i); + + if (!item) { + if (PyErr_ExceptionMatches(PyExc_IndexError)) { + PyErr_Clear(); + Py_DECREF(next); + return ret; + } + Py_DECREF(next); + Py_DECREF(ret); + return NULL; + } + PyTuple_SET_ITEM(next, j, item); + } + PyList_Append(ret, next); + Py_DECREF(next); + } + /* no return */ + } + + + static char zip_doc[] = + "zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]\n\ + \n\ + Return a list of tuples, where each tuple contains the i-th element\n\ + from each of the argument sequences. The returned list is truncated\n\ + in length to the length of the shortest argument sequence."; + + static PyMethodDef builtin_methods[] = { {"__import__", builtin___import__, 1, import_doc}, *************** *** 2208,2211 **** --- 2263,2267 ---- {"vars", builtin_vars, 1, vars_doc}, {"xrange", builtin_xrange, 1, xrange_doc}, + {"zip", builtin_zip, 1, zip_doc}, {NULL, NULL}, }; From python-dev@python.org Thu Aug 3 16:46:20 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:46:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfuncs.tex,1.66,1.67 Message-ID: <200008031546.IAA01956@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv1947 Modified Files: libfuncs.tex Log Message: Both PEP 201 Lockstep Iteration and SF patch #101030 have been accepted by the BDFL. Added documentation for zip() builtin. Index: libfuncs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfuncs.tex,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -r1.66 -r1.67 *** libfuncs.tex 2000/06/30 16:06:19 1.66 --- libfuncs.tex 2000/08/03 15:46:17 1.67 *************** *** 704,705 **** --- 704,714 ---- used (e.g. when the loop is usually terminated with \keyword{break}). \end{funcdesc} + + \begin{funcdesc}{zip}{seq1\optional{, seq2\optional{, ...}}} + This function returns a list of tuples, where each tuple contains the + i-th element from each of the argument sequences. At least one + sequence is required, otherwise a \exception{TypeError} is raised. + The returned list is truncated in length to the length of the shortest + argument sequence. When the argument sequences are all of the same + length, \function{zip} is similar to \function{map} with an initial + None argument. From python-dev@python.org Thu Aug 3 16:48:10 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:48:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_b2.py,1.15,1.16 Message-ID: <200008031548.IAA02053@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2044 Modified Files: test_b2.py Log Message: Added testsuite for new zip() builtin. Index: test_b2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_b2.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** test_b2.py 1999/12/23 15:36:42 1.15 --- test_b2.py 2000/08/03 15:48:07 1.16 *************** *** 256,259 **** --- 256,295 ---- raise TestFailed, 'xrange(0,10,2)' + print 'zip' + a = (1, 2, 3) + b = (4, 5, 6) + t = [(1, 4), (2, 5), (3, 6)] + if zip(a, b) <> t: raise TestFailed, 'zip(a, b) - same size, both tuples' + b = [4, 5, 6] + if zip(a, b) <> t: raise TestFailed, 'zip(a, b) - same size, tuple/list' + b = (4, 5, 6, 7) + if zip(a, b) <> t: raise TestFailed, 'zip(a, b) - b is longer' + class I: + def __getitem__(self, i): + if i < 0 or i > 2: raise IndexError + return i + 4 + if zip(a, I()) <> t: raise TestFailed, 'zip(a, b) - b is instance' + exc = 0 + try: + zip() + except TypeError: + exc = 1 + except: + e = sys.exc_info()[0] + raise TestFailed, 'zip() - no args, expected TypeError, got', e + if not exc: + raise TestFailed, 'zip() - no args, missing expected TypeError' + + exc = 0 + try: + zip(None) + except TypeError: + exc = 1 + except: + e = sys.exc_info()[0] + raise TestFailed, 'zip(None) - expected TypeError, got', e + if not exc: + raise TestFailed, 'zip(None) - missing expected TypeError' + # Epilogue -- unlink the temp file From python-dev@python.org Thu Aug 3 16:48:33 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:48:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_builtin,1.3,1.4 Message-ID: <200008031548.IAA02087@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv2077 Modified Files: test_builtin Log Message: Added output for testsuite for new zip() builtin. Index: test_builtin =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_builtin,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_builtin 1997/08/22 21:27:40 1.3 --- test_builtin 2000/08/03 15:48:31 1.4 *************** *** 50,51 **** --- 50,52 ---- vars xrange + zip From python-dev@python.org Thu Aug 3 16:50:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:50:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test regrtest.py,1.19,1.20 Message-ID: <200008031550.IAA02360@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2351 Modified Files: regrtest.py Log Message: Added a -l/--leakdebug option which turns on DEBUG_LEAK if the gc module is importable. Index: regrtest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** regrtest.py 2000/07/16 12:04:31 1.19 --- regrtest.py 2000/08/03 15:50:37 1.20 *************** *** 9,18 **** Command line options: ! -v: verbose -- run tests in verbose mode with output to stdout ! -q: quiet -- don't print anything except if a test fails ! -g: generate -- write the output file for a test instead of comparing it ! -x: exclude -- arguments are tests to *exclude* ! -s: single -- run only a single test (see below) ! -r: random -- randomize test execution order If non-option arguments are present, they are names for tests to run, --- 9,19 ---- Command line options: ! -v: verbose -- run tests in verbose mode with output to stdout ! -q: quiet -- don't print anything except if a test fails ! -g: generate -- write the output file for a test instead of comparing it ! -x: exclude -- arguments are tests to *exclude* ! -s: single -- run only a single test (see below) ! -r: random -- randomize test execution order ! -l: leakdebug -- if cycle garbage collection is enabled, run with DEBUG_LEAK If non-option arguments are present, they are names for tests to run, *************** *** 40,44 **** def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0): """Execute a test suite. --- 41,45 ---- def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0, leakdebug=0): """Execute a test suite. *************** *** 57,68 **** files beginning with test_ will be used. ! The other six default arguments (verbose, quiet, generate, exclude, ! single, and randomize) allow programmers calling main() directly to ! set the values that would normally be set by flags on the command ! line. """ try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsr') except getopt.error, msg: print msg --- 58,70 ---- files beginning with test_ will be used. ! The other seven default arguments (verbose, quiet, generate, exclude, ! single, randomize, and leakdebug) allow programmers calling main() ! directly to set the values that would normally be set by flags on the ! command line. ! """ try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsrl') except getopt.error, msg: print msg *************** *** 76,79 **** --- 78,82 ---- if o == '-s': single = 1 if o == '-r': randomize = 1 + if o == '-l': leakdebug = 1 if generate and verbose: print "-g and -v don't go together!" *************** *** 82,85 **** --- 85,96 ---- bad = [] skipped = [] + + if leakdebug: + try: + import gc + except ImportError: + print 'cycle garbage collection not available' + else: + gc.set_debug(gc.DEBUG_LEAK) if single: From python-dev@python.org Thu Aug 3 16:52:32 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 3 Aug 2000 08:52:32 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.92,1.93 Message-ID: <200008031552.IAA02483@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv2473 Modified Files: Makefile.in Log Message: TESTOPTS: Since gc is enabled by default now (this may change for the final release), run "make test" with gc's LEAK_DEBUG enabled. This uses the new -l flag to regrtest. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.92 retrieving revision 1.93 diff -C2 -r1.92 -r1.93 *** Makefile.in 2000/07/31 18:26:35 1.92 --- Makefile.in 2000/08/03 15:52:30 1.93 *************** *** 213,217 **** # Test the interpreter (twice, once without .pyc files, once with) ! TESTOPTS= TESTPROG= $(srcdir)/Lib/test/regrtest.py TESTPYTHON= ./python$(EXE) -tt --- 213,217 ---- # Test the interpreter (twice, once without .pyc files, once with) ! TESTOPTS= -l TESTPROG= $(srcdir)/Lib/test/regrtest.py TESTPYTHON= ./python$(EXE) -tt From python-dev@python.org Thu Aug 3 17:24:27 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:27 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include codecs.h,2.2,2.3 unicodeobject.h,2.16,2.17 Message-ID: <200008031624.JAA13125@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Include Modified Files: codecs.h unicodeobject.h Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: codecs.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/codecs.h,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** codecs.h 2000/05/09 19:51:10 2.2 --- codecs.h 2000/08/03 16:24:24 2.3 *************** *** 12,16 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 12,16 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/unicodeobject.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** unicodeobject.h 2000/07/22 23:30:03 2.16 --- unicodeobject.h 2000/08/03 16:24:24 2.17 *************** *** 8,12 **** Unicode Integration Proposal (see file Misc/unicode.txt). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. --- 8,12 ---- Unicode Integration Proposal (see file Misc/unicode.txt). ! Copyright (c) Corporation for National Research Initiatives. From python-dev@python.org Thu Aug 3 17:24:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python codecs.c,2.11,2.12 Message-ID: <200008031624.JAA13141@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Python Modified Files: codecs.c Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: codecs.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/codecs.c,v retrieving revision 2.11 retrieving revision 2.12 diff -C2 -r2.11 -r2.12 *** codecs.c 2000/07/22 18:47:25 2.11 --- codecs.c 2000/08/03 16:24:25 2.12 *************** *** 5,9 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 5,9 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ From python-dev@python.org Thu Aug 3 17:24:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _codecsmodule.c,2.4,2.5 unicodedata.c,2.3,2.4 unicodedatabase.c,2.2,2.3 unicodedatabase.h,2.2,2.3 Message-ID: <200008031624.JAA13150@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Modules Modified Files: _codecsmodule.c unicodedata.c unicodedatabase.c unicodedatabase.h Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: _codecsmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_codecsmodule.c,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** _codecsmodule.c 2000/07/21 06:00:06 2.4 --- _codecsmodule.c 2000/08/03 16:24:24 2.5 *************** *** 32,36 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 32,36 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodedata.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/unicodedata.c,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** unicodedata.c 2000/07/21 06:00:07 2.3 --- unicodedata.c 2000/08/03 16:24:24 2.4 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodedatabase.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/unicodedatabase.c,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** unicodedatabase.c 2000/03/31 17:26:09 2.2 --- unicodedatabase.c 2000/08/03 16:24:24 2.3 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ Index: unicodedatabase.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/unicodedatabase.h,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** unicodedatabase.h 2000/03/31 17:26:12 2.2 --- unicodedatabase.h 2000/08/03 16:24:25 2.3 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. ------------------------------------------------------------------------ */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ From python-dev@python.org Thu Aug 3 17:24:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:24:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodectype.c,2.4,2.5 unicodeobject.c,2.53,2.54 Message-ID: <200008031624.JAA13145@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv12880/Objects Modified Files: unicodectype.c unicodeobject.c Log Message: Changing the CNRI copyright notice according to CNRI's instructions. This is a notice without a date, which apparently is not a claim to copyright but only advice to the reader. IANAL. :-) Index: unicodectype.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodectype.c,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** unicodectype.c 2000/07/06 13:57:38 2.4 --- unicodectype.c 2000/08/03 16:24:25 2.5 *************** *** 7,11 **** Written by Marc-Andre Lemburg (mal@lemburg.com). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. */ --- 7,11 ---- Written by Marc-Andre Lemburg (mal@lemburg.com). ! Copyright (c) Corporation for National Research Initiatives. */ Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** unicodeobject.c 2000/07/31 15:28:04 2.53 --- unicodeobject.c 2000/08/03 16:24:25 2.54 *************** *** 5,9 **** Unicode Integration Proposal (see file Misc/unicode.txt). ! (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. --- 5,9 ---- Unicode Integration Proposal (see file Misc/unicode.txt). ! Copyright (c) Corporation for National Research Initiatives. From python-dev@python.org Thu Aug 3 17:29:53 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 3 Aug 2000 09:29:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.5,1.6 Message-ID: <200008031629.JAA13749@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12492/Lib/test Modified Files: test_sre.py Log Message: -- added recursion limit (currently ~10,000 levels) -- improved error messages -- factored out SRE_COUNT; the same code is used by SRE_OP_REPEAT_ONE_TEMPLATE -- minor cleanups Index: test_sre.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** test_sre.py 2000/08/01 13:16:55 1.5 --- test_sre.py 2000/08/03 16:29:50 1.6 *************** *** 265,268 **** --- 265,278 ---- print 'Exception raised on flag', flags + if verbose: + print 'Test engine limitations' + + # Try nasty case that overflows the straightforward recursive + # implementation of repeated groups. + try: + assert sre.match('(x)*', 50000*'x').span() == (0, 50000) + except RuntimeError, v: + print v + from re_tests import * From python-dev@python.org Thu Aug 3 17:29:53 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 3 Aug 2000 09:29:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.31,2.32 sre.h,2.17,2.18 Message-ID: <200008031629.JAA13751@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12492/Modules Modified Files: _sre.c sre.h Log Message: -- added recursion limit (currently ~10,000 levels) -- improved error messages -- factored out SRE_COUNT; the same code is used by SRE_OP_REPEAT_ONE_TEMPLATE -- minor cleanups Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.31 retrieving revision 2.32 diff -C2 -r2.31 -r2.32 *** _sre.c 2000/08/01 22:47:49 2.31 --- _sre.c 2000/08/03 16:29:50 2.32 *************** *** 14,17 **** --- 14,19 ---- * 00-07-21 fl reset lastindex in scanner methods (0.9.6) * 00-08-01 fl fixes for 1.6b1 (0.9.8) + * 00-08-02 fl moved SRE_COUNT out of the match method + * 00-08-03 fl added recursion limit * * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. *************** *** 56,59 **** --- 58,64 ---- /* optional features */ + /* prevent run-away recursion (bad patterns on long strings) */ + #define USE_RECURSION_LIMIT 10000 + /* enables fast searching */ #define USE_FAST_SEARCH *************** *** 78,81 **** --- 83,87 ---- #define SRE_ERROR_ILLEGAL -1 /* illegal opcode */ #define SRE_ERROR_STATE -2 /* illegal state */ + #define SRE_ERROR_RECURSION_LIMIT -3 /* runaway recursion */ #define SRE_ERROR_MEMORY -9 /* out of memory */ *************** *** 211,234 **** static void - mark_init(SRE_STATE* state) - { - state->mark_stack = NULL; - state->mark_stack_size = state->mark_stack_base = 0; - } - - static void mark_fini(SRE_STATE* state) { ! #if 0 ! /* FIXME: debugging */ ! if (state->maxlevel > 0) ! printf("max %d\n", state->maxlevel); ! if (state->mark_stack_base > 0) ! printf("mark stack %d\n", state->mark_stack_base); ! #endif ! ! if (state->mark_stack) free(state->mark_stack); ! mark_init(state); } --- 217,227 ---- static void mark_fini(SRE_STATE* state) { ! if (state->mark_stack) { free(state->mark_stack); ! state->mark_stack = NULL; ! } ! state->mark_stack_size = state->mark_stack_base = 0; } *************** *** 305,308 **** --- 298,302 ---- #define SRE_CHAR unsigned char #define SRE_AT sre_at + #define SRE_COUNT sre_count #define SRE_MEMBER sre_member #define SRE_MATCH sre_match *************** *** 318,321 **** --- 312,316 ---- #undef SRE_MATCH #undef SRE_MEMBER + #undef SRE_COUNT #undef SRE_AT #undef SRE_CHAR *************** *** 325,328 **** --- 320,324 ---- #define SRE_CHAR Py_UNICODE #define SRE_AT sre_uat + #define SRE_COUNT sre_ucount #define SRE_MEMBER sre_umember #define SRE_MATCH sre_umatch *************** *** 395,405 **** switch (*set++) { - case SRE_OP_NEGATE: - ok = !ok; - break; - - case SRE_OP_FAILURE: - return !ok; - case SRE_OP_LITERAL: /* */ --- 391,394 ---- *************** *** 430,433 **** --- 419,429 ---- break; + case SRE_OP_NEGATE: + ok = !ok; + break; + + case SRE_OP_FAILURE: + return !ok; + default: /* internal error -- there's not much we can do about it *************** *** 438,445 **** } LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level) { ! /* check if string matches the given pattern. returns -1 for error, 0 for failure, and 1 for success */ --- 434,518 ---- } + LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level); + LOCAL(int) + SRE_COUNT(SRE_STATE* state, SRE_CODE* pattern, int maxcount, int level) + { + SRE_CODE chr; + SRE_CHAR* ptr = state->ptr; + SRE_CHAR* end = state->end; + int i; + + /* adjust end */ + if (maxcount < end - ptr && maxcount != 65535) + end = ptr + maxcount; + + switch (pattern[0]) { + + case SRE_OP_ANY: + /* repeated dot wildcard. */ + while (ptr < end && !SRE_IS_LINEBREAK(*ptr)) + ptr++; + break; + + case SRE_OP_ANY_ALL: + /* repeated dot wildcare. skip to the end of the target + string, and backtrack from there */ + ptr = end; + break; + + case SRE_OP_LITERAL: + /* repeated literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) *ptr == chr) + ptr++; + break; + + case SRE_OP_LITERAL_IGNORE: + /* repeated literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr) + ptr++; + break; + + case SRE_OP_NOT_LITERAL: + /* repeated non-literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) *ptr != chr) + ptr++; + break; + + case SRE_OP_NOT_LITERAL_IGNORE: + /* repeated non-literal */ + chr = pattern[1]; + while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr) + ptr++; + break; + + case SRE_OP_IN: + /* repeated set */ + while (ptr < end && SRE_MEMBER(pattern + 2, *ptr)) + ptr++; + break; + + default: + /* repeated single character pattern */ + while ((SRE_CHAR*) state->ptr < end) { + i = SRE_MATCH(state, pattern, level); + if (i < 0) + return i; + if (!i) + break; + } + return (SRE_CHAR*) state->ptr - ptr; + } + + return ptr - (SRE_CHAR*) state->ptr; + } + + LOCAL(int) SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level) { ! /* check if string matches the given pattern. returns <0 for error, 0 for failure, and 1 for success */ *************** *** 455,458 **** --- 528,536 ---- TRACE(("%8d: enter %d\n", PTR(ptr), level)); + #if defined(USE_RECURSION_LIMIT) + if (level > USE_RECURSION_LIMIT) + return SRE_ERROR_RECURSION_LIMIT; + #endif + if (pattern[0] == SRE_OP_INFO) { /* optimization info block */ *************** *** 466,473 **** } - /* FIXME: debugging */ - if (level > state->maxlevel) - state->maxlevel = level; - for (;;) { --- 544,547 ---- *************** *** 612,616 **** TRACE(("%8d: set lower(%c)\n", PTR(ptr), *ptr)); if (ptr >= end ! || !SRE_MEMBER(pattern+1, (SRE_CODE) state->lower(*ptr))) return 0; pattern += pattern[0]; --- 686,690 ---- TRACE(("%8d: set lower(%c)\n", PTR(ptr), *ptr)); if (ptr >= end ! || !SRE_MEMBER(pattern + 1, (SRE_CODE) state->lower(*ptr))) return 0; pattern += pattern[0]; *************** *** 675,693 **** /* <0=skip> code ... */ TRACE(("%8d: branch\n", PTR(ptr))); ! { ! lastmark = state->lastmark; ! while (pattern[0]) { ! TRACE(("%8d: try branch\n", PTR(ptr))); ! if (pattern[1] != SRE_OP_LITERAL || ! (ptr < end && (SRE_CODE) ptr[0] == pattern[2])) { ! state->ptr = ptr; ! i = SRE_MATCH(state, pattern + 1, level + 1); ! if (i) ! return i; ! } while (state->lastmark > lastmark) state->mark[state->lastmark--] = NULL; - pattern += pattern[0]; } } return 0; --- 749,779 ---- /* <0=skip> code ... */ TRACE(("%8d: branch\n", PTR(ptr))); ! lastmark = state->lastmark; ! while (pattern[0]) { ! SRE_CODE* code = pattern+1; ! TRACE(("%8d: try branch\n", PTR(ptr))); ! switch (code[0]) { ! case SRE_OP_IN: ! if (ptr >= end || !SRE_MEMBER(code + 2, ptr[0])) ! break; ! code += code[1] + 1; ! state->ptr = ptr + 1; ! goto branch; ! case SRE_OP_LITERAL: ! if (ptr >= end || (SRE_CODE) ptr[0] != code[1]) ! break; ! code += 2; ! state->ptr = ptr + 1; ! goto branch; ! default: ! state->ptr = ptr; ! branch: ! i = SRE_MATCH(state, code, level + 1); ! if (i) ! return i; while (state->lastmark > lastmark) state->mark[state->lastmark--] = NULL; } + pattern += pattern[0]; } return 0; *************** *** 708,806 **** if (ptr + pattern[1] > end) return 0; /* cannot match */ - - count = 0; - - switch (pattern[3]) { - - case SRE_OP_ANY: - /* repeated wildcard. */ - while (count < (int) pattern[2]) { - if (ptr >= end || SRE_IS_LINEBREAK(ptr[0])) - break; - ptr++; - count++; - } - break; - - case SRE_OP_ANY_ALL: - /* repeated wildcard. skip to the end of the target - string, and backtrack from there */ - if (ptr + pattern[1] > end) - return 0; /* cannot match */ - count = pattern[2]; - if (count > end - ptr) - count = end - ptr; - ptr += count; - break; - - case SRE_OP_LITERAL: - /* repeated literal */ - chr = pattern[4]; - while (count < (int) pattern[2]) { - if (ptr >= end || (SRE_CODE) ptr[0] != chr) - break; - ptr++; - count++; - } - break; - - case SRE_OP_LITERAL_IGNORE: - /* repeated literal */ - chr = pattern[4]; - while (count < (int) pattern[2]) { - if (ptr >= end || (SRE_CODE) state->lower(*ptr) != chr) - break; - ptr++; - count++; - } - break; ! case SRE_OP_NOT_LITERAL: ! /* repeated non-literal */ ! chr = pattern[4]; ! while (count < (int) pattern[2]) { ! if (ptr >= end || (SRE_CODE) ptr[0] == chr) ! break; ! ptr++; ! count++; ! } ! break; ! ! case SRE_OP_NOT_LITERAL_IGNORE: ! /* repeated non-literal */ ! chr = pattern[4]; ! while (count < (int) pattern[2]) { ! if (ptr >= end || (SRE_CODE) state->lower(ptr[0]) == chr) ! break; ! ptr++; ! count++; ! } ! break; ! case SRE_OP_IN: ! /* repeated set */ ! while (count < (int) pattern[2]) { ! if (ptr >= end || !SRE_MEMBER(pattern + 5, *ptr)) ! break; ! ptr++; ! count++; ! } ! break; ! default: ! /* repeated single character pattern */ ! state->ptr = ptr; ! while (count < (int) pattern[2]) { ! i = SRE_MATCH(state, pattern + 3, level + 1); ! if (i < 0) ! return i; ! if (!i) ! break; ! count++; ! } ! state->ptr = ptr; ! ptr += count; ! break; ! } /* when we arrive here, count contains the number of --- 794,805 ---- if (ptr + pattern[1] > end) return 0; /* cannot match */ ! state->ptr = ptr; ! count = SRE_COUNT(state, pattern + 3, pattern[2], level + 1); ! if (count < 0) ! return count; ! ptr += count; /* when we arrive here, count contains the number of *************** *** 905,908 **** --- 904,908 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 920,923 **** --- 920,924 ---- lastmark = state->lastmark; mark_save(state, 0, lastmark); + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 956,959 **** --- 957,961 ---- TRACE(("%8d: match item (required)\n", PTR(ptr))); rp->count = count; + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 979,982 **** --- 981,985 ---- TRACE(("%8d: match item (optional)\n", PTR(ptr))); rp->count = count; + /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) *************** *** 995,999 **** } ! static int SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern) { --- 998,1002 ---- } ! LOCAL(int) SRE_SEARCH(SRE_STATE* state, SRE_CODE* pattern) { *************** *** 1221,1227 **** state->repeat = NULL; - /* FIXME: debugging */ - state->maxlevel = 0; - mark_fini(state); } --- 1224,1227 ---- *************** *** 1237,1240 **** --- 1237,1244 ---- void* ptr; + memset(state, 0, sizeof(SRE_STATE)); + + state->lastindex = -1; + /* get pointer to string buffer */ buffer = string->ob_type->tp_as_buffer; *************** *** 1301,1309 **** state->lower = sre_lower; - state->mark_stack = NULL; - state->mark_stack_base = 0; - - state_reset(state); - return string; } --- 1305,1308 ---- *************** *** 1335,1338 **** --- 1334,1359 ---- } + static void + pattern_error(int status) + { + switch (status) { + case SRE_ERROR_RECURSION_LIMIT: + PyErr_SetString( + PyExc_RuntimeError, + "maximum recursion limit exceeded" + ); + break; + case SRE_ERROR_MEMORY: + PyErr_NoMemory(); + break; + default: + /* other error codes indicate compiler/engine bugs */ + PyErr_SetString( + PyExc_RuntimeError, + "internal error in regular expression engine" + ); + } + } + static PyObject* pattern_new_match(PatternObject* pattern, SRE_STATE* state, int status) *************** *** 1384,1399 **** return (PyObject*) match; ! } else if (status < 0) { ! /* internal error */ ! PyErr_SetString( ! PyExc_RuntimeError, "internal error in regular expression engine" ! ); ! return NULL; } ! Py_INCREF(Py_None); ! return Py_None; } --- 1405,1419 ---- return (PyObject*) match; ! } else if (status == 0) { ! /* no match */ ! Py_INCREF(Py_None); ! return Py_None; } ! /* internal error */ ! pattern_error(status); ! return NULL; } *************** *** 1642,1650 **** break; ! /* internal error */ ! PyErr_SetString( ! PyExc_RuntimeError, ! "internal error in regular expression engine" ! ); goto error; --- 1662,1666 ---- break; ! pattern_error(status); goto error; Index: sre.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sre.h,v retrieving revision 2.17 retrieving revision 2.18 diff -C2 -r2.17 -r2.18 *** sre.h 2000/08/01 21:05:41 2.17 --- sre.h 2000/08/03 16:29:50 2.18 *************** *** 75,80 **** /* hooks */ SRE_TOLOWER_HOOK lower; - /* debugging */ - int maxlevel; } SRE_STATE; --- 75,78 ---- From python-dev@python.org Thu Aug 3 17:29:53 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 3 Aug 2000 09:29:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_sre,1.8,1.9 Message-ID: <200008031629.JAA13756@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv12492/Lib/test/output Modified Files: test_sre Log Message: -- added recursion limit (currently ~10,000 levels) -- improved error messages -- factored out SRE_COUNT; the same code is used by SRE_OP_REPEAT_ONE_TEMPLATE -- minor cleanups Index: test_sre =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_sre,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** test_sre 2000/08/01 13:01:43 1.8 --- test_sre 2000/08/03 16:29:50 1.9 *************** *** 1 **** --- 1,2 ---- test_sre + maximum recursion limit exceeded From python-dev@python.org Thu Aug 3 17:35:03 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:35:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.54,2.54.2.1 Message-ID: <200008031635.JAA14253@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv14231 Modified Files: Tag: cnri-16-start unicodeobject.c Log Message: Add back #include "mymath.h" on the 1.6 branch because pyport.h doesn't yet exist in 1.6. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.54 retrieving revision 2.54.2.1 diff -C2 -r2.54 -r2.54.2.1 *** unicodeobject.c 2000/08/03 16:24:25 2.54 --- unicodeobject.c 2000/08/03 16:35:00 2.54.2.1 *************** *** 65,68 **** --- 65,69 ---- #include "Python.h" + #include "mymath.h" #include "unicodeobject.h" #include "ucnhash.h" From python-dev@python.org Thu Aug 3 17:42:16 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include abstract.h,2.25,2.26 Message-ID: <200008031642.JAA14860@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv14777/Include Modified Files: abstract.h Log Message: Remobe beopen/cnri/cwi copyrights, according to CNRI instructions. This doesn't change the copyright status for these files -- just the markings! Doing it on the main branch for these three files for which the HEAD revision was pushed back into 1.6. Index: abstract.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/abstract.h,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** abstract.h 2000/07/17 09:22:26 2.25 --- abstract.h 2000/08/03 16:42:14 2.26 *************** *** 5,18 **** #endif - /*********************************************************** - Copyright (c) 2000, BeOpen.com. - Copyright (c) 1995-2000, Corporation for National Research Initiatives. - Copyright (c) 1990-1995, Stichting Mathematisch Centrum. - All rights reserved. - - See the file "Misc/COPYRIGHT" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. - ******************************************************************/ - /* Abstract Object Interface (many thanks to Jim Fulton) */ --- 5,8 ---- From python-dev@python.org Thu Aug 3 17:42:16 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules socketmodule.c,1.125,1.126 Message-ID: <200008031642.JAA14852@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv14777/Modules Modified Files: socketmodule.c Log Message: Remobe beopen/cnri/cwi copyrights, according to CNRI instructions. This doesn't change the copyright status for these files -- just the markings! Doing it on the main branch for these three files for which the HEAD revision was pushed back into 1.6. Index: socketmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v retrieving revision 1.125 retrieving revision 1.126 diff -C2 -r1.125 -r1.126 *** socketmodule.c 2000/08/03 02:06:16 1.125 --- socketmodule.c 2000/08/03 16:42:13 1.126 *************** *** 1,12 **** - /*********************************************************** - Copyright (c) 2000, BeOpen.com. - Copyright (c) 1995-2000, Corporation for National Research Initiatives. - Copyright (c) 1990-1995, Stichting Mathematisch Centrum. - All rights reserved. - - See the file "Misc/COPYRIGHT" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. - ******************************************************************/ - /* Socket module */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:42:16 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.43,2.44 Message-ID: <200008031642.JAA14856@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv14777/Objects Modified Files: abstract.c Log Message: Remobe beopen/cnri/cwi copyrights, according to CNRI instructions. This doesn't change the copyright status for these files -- just the markings! Doing it on the main branch for these three files for which the HEAD revision was pushed back into 1.6. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.43 retrieving revision 2.44 diff -C2 -r2.43 -r2.44 *** abstract.c 2000/07/22 23:59:32 2.43 --- abstract.c 2000/08/03 16:42:14 2.44 *************** *** 1,12 **** - /*********************************************************** - Copyright (c) 2000, BeOpen.com. - Copyright (c) 1995-2000, Corporation for National Research Initiatives. - Copyright (c) 1990-1995, Stichting Mathematisch Centrum. - All rights reserved. - - See the file "Misc/COPYRIGHT" for information on usage and - redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. - ******************************************************************/ - /* Abstract Object Interface (many thanks to Jim Fulton) */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:48:10 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:48:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include Python.h,2.16,2.16.2.1 bitset.h,2.9,2.9.4.1 bufferobject.h,2.2,2.2.4.1 ceval.h,2.31,2.31.2.1 classobject.h,2.28,2.28.4.1 cobject.h,2.5,2.5.4.1 compile.h,2.19,2.19.4.1 dictobject.h,2.16,2.16.2.1 errcode.h,2.8,2.8.4.1 eval.h,2.10,2.10.4.1 fileobject.h,2.17,2.17.4.1 floatobject.h,2.13,2.13.2.1 frameobject.h,2.24,2.24.4.1 funcobject.h,2.16,2.16.4.1 grammar.h,2.10,2.10.4.1 import.h,2.22,2.22.4.1 intobject.h,2.17,2.17.2.1 intrcheck.h,2.5,2.5.4.1 listobject.h,2.17,2.17.2.1 longintrepr.h,2.5,2.5.4.1 longobject.h,2.13,2.13.2.1 marshal.h,2.6,2.6.4.1 metagrammar.h,2.7,2.7.4.1 methodobject.h,2.16,2.16.4.1 modsupport.h,2.28,2.28.2.1 moduleobject.h,2.13,2.13.4.1 mymalloc.h,2.19,2.19.2.1 myproto.h,2.6,2.6.4.1 myselect.h,2.10,2.10.2.1 mytime.h,2.4,2.4.4.1 node.h,2.12,2.12.4.1 object.h,2.54,2.54.2.1 objimpl.h,2.15,2.15.2.1 opcode.h,2.23,2.23.2.1 osdefs.h,2.10,2.10.4.1 parsetok.h,2.10,2.10.4.1 patchlevel.h,2.35.2.1,2.35.2.2 pgenheaders.h,2.17,2.17.4.1 pyd! ebug.h,2.11,2.11.2.1 pyerrors.h,2.35,2.35.2.1 pystate.h,2.9,2.9.4.1 pythonrun.h,2.26,2.26.4.1 pythread.h,2.13,2.13.4.1 rangeobject.h,2.11,2.11.4.1 stringobject.h,2.17,2.17.4.1 structmember.h,2.12,2.12.4.1 sysmodule.h,2.17,2.17.4.1 token.h,2.12,2.12.4.1 traceback.h,2.14,2.14.4.1 tupleobject.h,2.20,2.20.2.1 Message-ID: <200008031648.JAA15532@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv15472 Modified Files: Tag: cnri-16-start Python.h bitset.h bufferobject.h ceval.h classobject.h cobject.h compile.h dictobject.h errcode.h eval.h fileobject.h floatobject.h frameobject.h funcobject.h grammar.h import.h intobject.h intrcheck.h listobject.h longintrepr.h longobject.h marshal.h metagrammar.h methodobject.h modsupport.h moduleobject.h mymalloc.h myproto.h myselect.h mytime.h node.h object.h objimpl.h opcode.h osdefs.h parsetok.h patchlevel.h pgenheaders.h pydebug.h pyerrors.h pystate.h pythonrun.h pythread.h rangeobject.h stringobject.h structmember.h sysmodule.h token.h traceback.h tupleobject.h Log Message: Remove CWI notice per CNRI instructions. Index: Python.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/Python.h,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** Python.h 2000/05/08 13:35:17 2.16 --- Python.h 2000/08/03 16:48:06 2.16.2.1 *************** *** 3,37 **** /* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include nearly all Python header files */ --- 3,6 ---- Index: bitset.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/bitset.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** bitset.h 1996/10/25 14:37:47 2.9 --- bitset.h 2000/08/03 16:48:06 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Bitset interface */ --- 5,8 ---- Index: bufferobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/bufferobject.h,v retrieving revision 2.2 retrieving revision 2.2.4.1 diff -C2 -r2.2 -r2.2.4.1 *** bufferobject.h 1998/12/04 18:47:51 2.2 --- bufferobject.h 2000/08/03 16:48:06 2.2.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Buffer object interface */ --- 5,8 ---- Index: ceval.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/ceval.h,v retrieving revision 2.31 retrieving revision 2.31.2.1 diff -C2 -r2.31 -r2.31.2.1 *** ceval.h 2000/05/08 14:04:54 2.31 --- ceval.h 2000/08/03 16:48:06 2.31.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface to random parts in ceval.c */ --- 5,8 ---- Index: classobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/classobject.h,v retrieving revision 2.28 retrieving revision 2.28.4.1 diff -C2 -r2.28 -r2.28.4.1 *** classobject.h 1998/12/04 18:47:53 2.28 --- classobject.h 2000/08/03 16:48:06 2.28.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Class object interface */ --- 5,8 ---- Index: cobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/cobject.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** cobject.h 1998/12/04 18:47:54 2.5 --- cobject.h 2000/08/03 16:48:06 2.5.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* C objects to be exported from one extension module to another. --- 5,8 ---- Index: compile.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/compile.h,v retrieving revision 2.19 retrieving revision 2.19.4.1 diff -C2 -r2.19 -r2.19.4.1 *** compile.h 1998/12/04 18:47:55 2.19 --- compile.h 2000/08/03 16:48:06 2.19.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Definitions for bytecode */ --- 5,8 ---- Index: dictobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/dictobject.h,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** dictobject.h 2000/03/30 22:27:28 2.16 --- dictobject.h 2000/08/03 16:48:06 2.16.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Dictionary object type -- mapping from hashable object to object */ --- 5,8 ---- Index: errcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/errcode.h,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** errcode.h 1998/04/09 21:37:20 2.8 --- errcode.h 2000/08/03 16:48:06 2.8.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Error codes passed around between file input, tokenizer, parser and interpreter. This is necessary so we can turn them into Python --- 5,8 ---- Index: eval.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/eval.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** eval.h 1998/12/04 18:47:58 2.10 --- eval.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface to execute compiled code */ --- 5,8 ---- Index: fileobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/fileobject.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** fileobject.h 1998/12/04 18:47:59 2.17 --- fileobject.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* File object interface */ --- 5,8 ---- Index: floatobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/floatobject.h,v retrieving revision 2.13 retrieving revision 2.13.2.1 diff -C2 -r2.13 -r2.13.2.1 *** floatobject.h 1999/10/12 19:54:34 2.13 --- floatobject.h 2000/08/03 16:48:06 2.13.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Float object interface */ --- 5,8 ---- Index: frameobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/frameobject.h,v retrieving revision 2.24 retrieving revision 2.24.4.1 diff -C2 -r2.24 -r2.24.4.1 *** frameobject.h 1998/12/04 18:48:01 2.24 --- frameobject.h 2000/08/03 16:48:06 2.24.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Frame object interface */ --- 5,8 ---- Index: funcobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/funcobject.h,v retrieving revision 2.16 retrieving revision 2.16.4.1 diff -C2 -r2.16 -r2.16.4.1 *** funcobject.h 1998/12/04 18:48:02 2.16 --- funcobject.h 2000/08/03 16:48:06 2.16.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Function object interface */ --- 5,8 ---- Index: grammar.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/grammar.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** grammar.h 1997/08/12 14:57:08 2.10 --- grammar.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Grammar interface */ --- 5,8 ---- Index: import.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/import.h,v retrieving revision 2.22 retrieving revision 2.22.4.1 diff -C2 -r2.22 -r2.22.4.1 *** import.h 1999/01/04 16:39:38 2.22 --- import.h 2000/08/03 16:48:06 2.22.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module definition and import interface */ --- 5,8 ---- Index: intobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/intobject.h,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** intobject.h 2000/04/05 20:11:08 2.17 --- intobject.h 2000/08/03 16:48:06 2.17.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Integer object interface */ --- 5,8 ---- Index: intrcheck.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/intrcheck.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** intrcheck.h 1998/12/04 18:48:04 2.5 --- intrcheck.h 2000/08/03 16:48:06 2.5.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - extern DL_IMPORT(int) PyOS_InterruptOccurred Py_PROTO((void)); extern DL_IMPORT(void) PyOS_InitInterrupts Py_PROTO((void)); --- 5,8 ---- Index: listobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/listobject.h,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** listobject.h 2000/03/01 15:06:53 2.17 --- listobject.h 2000/08/03 16:48:06 2.17.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* List object interface */ --- 5,8 ---- Index: longintrepr.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/longintrepr.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** longintrepr.h 1998/12/04 18:48:06 2.5 --- longintrepr.h 2000/08/03 16:48:06 2.5.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This is published for the benefit of "friend" marshal.c only. */ --- 5,8 ---- Index: longobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/longobject.h,v retrieving revision 2.13 retrieving revision 2.13.2.1 diff -C2 -r2.13 -r2.13.2.1 *** longobject.h 2000/04/05 20:11:08 2.13 --- longobject.h 2000/08/03 16:48:06 2.13.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Long (arbitrary precision) integer object interface */ --- 5,8 ---- Index: marshal.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/marshal.h,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** marshal.h 1998/12/04 18:48:07 2.6 --- marshal.h 2000/08/03 16:48:06 2.6.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface for marshal.c */ --- 5,8 ---- Index: metagrammar.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/metagrammar.h,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** metagrammar.h 1996/10/25 14:38:29 2.7 --- metagrammar.h 2000/08/03 16:48:06 2.7.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #define MSTART 256 #define RULE 257 --- 5,8 ---- Index: methodobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/methodobject.h,v retrieving revision 2.16 retrieving revision 2.16.4.1 diff -C2 -r2.16 -r2.16.4.1 *** methodobject.h 1998/12/04 18:48:08 2.16 --- methodobject.h 2000/08/03 16:48:06 2.16.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Method object interface */ --- 5,8 ---- Index: modsupport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/modsupport.h,v retrieving revision 2.28 retrieving revision 2.28.2.1 diff -C2 -r2.28 -r2.28.2.1 *** modsupport.h 2000/03/29 01:46:45 2.28 --- modsupport.h 2000/08/03 16:48:06 2.28.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module support interface */ --- 5,8 ---- Index: moduleobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/moduleobject.h,v retrieving revision 2.13 retrieving revision 2.13.4.1 diff -C2 -r2.13 -r2.13.4.1 *** moduleobject.h 1999/02/15 14:43:11 2.13 --- moduleobject.h 2000/08/03 16:48:06 2.13.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module object interface */ --- 5,8 ---- Index: mymalloc.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/mymalloc.h,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** mymalloc.h 2000/05/05 15:36:09 2.19 --- mymalloc.h 2000/08/03 16:48:06 2.19.2.1 *************** *** 1,35 **** #ifndef Py_MYMALLOC_H #define Py_MYMALLOC_H - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Lowest-level memory allocation interface */ --- 1,4 ---- Index: myproto.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/myproto.h,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** myproto.h 1997/05/07 23:50:40 2.6 --- myproto.h 2000/08/03 16:48:06 2.6.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifdef HAVE_PROTOTYPES #define Py_PROTO(x) x --- 5,8 ---- Index: myselect.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/myselect.h,v retrieving revision 2.10 retrieving revision 2.10.2.1 diff -C2 -r2.10 -r2.10.2.1 *** myselect.h 2000/04/24 15:12:54 2.10 --- myselect.h 2000/08/03 16:48:06 2.10.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include file for users of select() */ --- 5,8 ---- Index: mytime.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/mytime.h,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** mytime.h 1996/10/25 14:38:42 2.4 --- mytime.h 2000/08/03 16:48:06 2.4.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include file instead of and/or */ --- 5,8 ---- Index: node.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/node.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** node.h 1998/12/04 18:48:11 2.12 --- node.h 2000/08/03 16:48:06 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parse tree node interface */ --- 5,8 ---- Index: object.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/object.h,v retrieving revision 2.54 retrieving revision 2.54.2.1 diff -C2 -r2.54 -r2.54.2.1 *** object.h 2000/04/24 15:40:45 2.54 --- object.h 2000/08/03 16:48:06 2.54.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Object and type object interface */ --- 5,8 ---- Index: objimpl.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/objimpl.h,v retrieving revision 2.15 retrieving revision 2.15.2.1 diff -C2 -r2.15 -r2.15.2.1 *** objimpl.h 2000/05/03 23:44:23 2.15 --- objimpl.h 2000/08/03 16:48:06 2.15.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "mymalloc.h" --- 5,8 ---- Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.23 retrieving revision 2.23.2.1 diff -C2 -r2.23 -r2.23.2.1 *** opcode.h 2000/03/29 00:10:03 2.23 --- opcode.h 2000/08/03 16:48:06 2.23.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Instruction opcodes for compiled code */ --- 5,8 ---- Index: osdefs.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/osdefs.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** osdefs.h 1997/12/05 21:39:25 2.10 --- osdefs.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Operating system dependencies */ --- 5,8 ---- Index: parsetok.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/parsetok.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** parsetok.h 1998/12/04 18:48:14 2.10 --- parsetok.h 2000/08/03 16:48:06 2.10.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser-tokenizer link interface */ --- 5,8 ---- Index: patchlevel.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/patchlevel.h,v retrieving revision 2.35.2.1 retrieving revision 2.35.2.2 diff -C2 -r2.35.2.1 -r2.35.2.2 *** patchlevel.h 2000/08/01 16:42:32 2.35.2.1 --- patchlevel.h 2000/08/03 16:48:06 2.35.2.2 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Newfangled version identification scheme. --- 1,2 ---- Index: pgenheaders.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pgenheaders.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** pgenheaders.h 1998/12/04 18:48:15 2.17 --- pgenheaders.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Include files and extern declarations used by most of the parser. */ --- 5,8 ---- Index: pydebug.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pydebug.h,v retrieving revision 2.11 retrieving revision 2.11.2.1 diff -C2 -r2.11 -r2.11.2.1 *** pydebug.h 2000/05/01 17:51:41 2.11 --- pydebug.h 2000/08/03 16:48:06 2.11.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifndef Py_PYDEBUG_H #define Py_PYDEBUG_H --- 1,2 ---- Index: pyerrors.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyerrors.h,v retrieving revision 2.35 retrieving revision 2.35.2.1 diff -C2 -r2.35 -r2.35.2.1 *** pyerrors.h 2000/03/10 22:33:32 2.35 --- pyerrors.h 2000/08/03 16:48:06 2.35.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Error handling definitions */ --- 5,8 ---- Index: pystate.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pystate.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** pystate.h 1998/12/21 20:21:19 2.9 --- pystate.h 2000/08/03 16:48:06 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread and interpreter state structures and their interfaces */ --- 5,8 ---- Index: pythonrun.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v retrieving revision 2.26 retrieving revision 2.26.4.1 diff -C2 -r2.26 -r2.26.4.1 *** pythonrun.h 1998/12/04 18:48:18 2.26 --- pythonrun.h 2000/08/03 16:48:06 2.26.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interfaces to parse and execute pieces of python code */ --- 5,8 ---- Index: pythread.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythread.h,v retrieving revision 2.13 retrieving revision 2.13.4.1 diff -C2 -r2.13 -r2.13.4.1 *** pythread.h 1999/03/24 19:02:09 2.13 --- pythread.h 2000/08/03 16:48:06 2.13.4.1 *************** *** 2,36 **** #define Py_PYTHREAD_H - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #define NO_EXIT_PROG /* don't define PyThread_exit_prog() */ /* (the result is no use of signals on SGI) */ --- 2,5 ---- Index: rangeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/rangeobject.h,v retrieving revision 2.11 retrieving revision 2.11.4.1 diff -C2 -r2.11 -r2.11.4.1 *** rangeobject.h 1998/12/04 18:48:19 2.11 --- rangeobject.h 2000/08/03 16:48:06 2.11.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Range object interface */ --- 1,2 ---- Index: stringobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/stringobject.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** stringobject.h 1998/12/04 18:48:21 2.17 --- stringobject.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* String object interface */ --- 5,8 ---- Index: structmember.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/structmember.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** structmember.h 1998/12/04 18:48:22 2.12 --- structmember.h 2000/08/03 16:48:06 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Interface to map C struct members to Python object attributes */ --- 5,8 ---- Index: sysmodule.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/sysmodule.h,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** sysmodule.h 1998/12/04 18:48:22 2.17 --- sysmodule.h 2000/08/03 16:48:06 2.17.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* System module interface */ --- 5,8 ---- Index: token.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/token.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** token.h 1998/12/04 18:48:23 2.12 --- token.h 2000/08/03 16:48:06 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Token types */ --- 5,8 ---- Index: traceback.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/traceback.h,v retrieving revision 2.14 retrieving revision 2.14.4.1 diff -C2 -r2.14 -r2.14.4.1 *** traceback.h 1998/12/04 18:48:24 2.14 --- traceback.h 2000/08/03 16:48:06 2.14.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Traceback interface */ --- 5,8 ---- Index: tupleobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/tupleobject.h,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** tupleobject.h 2000/03/01 15:06:53 2.20 --- tupleobject.h 2000/08/03 16:48:06 2.20.2.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tuple object interface */ --- 5,8 ---- From python-dev@python.org Thu Aug 3 17:48:55 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:48:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects bufferobject.c,2.7,2.7.2.1 classobject.c,2.86,2.86.2.1 cobject.c,2.8,2.8.2.1 complexobject.c,2.24,2.24.2.1 dictobject.c,2.52,2.52.2.1 fileobject.c,2.73,2.73.2.1 floatobject.c,2.57,2.57.2.1 frameobject.c,2.39,2.39.2.1 funcobject.c,2.20,2.20.2.1 intobject.c,2.42,2.42.2.1 listobject.c,2.69,2.69.2.1 longobject.c,1.57,1.57.2.1 methodobject.c,2.26,2.26.2.1 moduleobject.c,2.25,2.25.2.1 object.c,2.70,2.70.2.1 rangeobject.c,2.12,2.12.2.1 stringobject.c,2.65,2.65.2.1 tupleobject.c,2.33,2.33.2.1 typeobject.c,2.12,2.12.4.1 xxobject.c,2.15,2.15.2.1 Message-ID: <200008031648.JAA15606@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv15573 Modified Files: Tag: cnri-16-start bufferobject.c classobject.c cobject.c complexobject.c dictobject.c fileobject.c floatobject.c frameobject.c funcobject.c intobject.c listobject.c longobject.c methodobject.c moduleobject.c object.c rangeobject.c stringobject.c tupleobject.c typeobject.c xxobject.c Log Message: Remove CWI notice per CNRI instructions. Index: bufferobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/bufferobject.c,v retrieving revision 2.7 retrieving revision 2.7.2.1 diff -C2 -r2.7 -r2.7.2.1 *** bufferobject.c 2000/05/03 23:44:34 2.7 --- bufferobject.c 2000/08/03 16:48:51 2.7.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Buffer object implementation */ --- 1,2 ---- Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.86 retrieving revision 2.86.2.1 diff -C2 -r2.86 -r2.86.2.1 *** classobject.c 2000/05/03 23:44:34 2.86 --- classobject.c 2000/08/03 16:48:51 2.86.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Class object implementation */ --- 1,2 ---- Index: cobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/cobject.c,v retrieving revision 2.8 retrieving revision 2.8.2.1 diff -C2 -r2.8 -r2.8.2.1 *** cobject.c 2000/05/03 23:44:34 2.8 --- cobject.c 2000/08/03 16:48:51 2.8.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Wrap void* pointers to be passed between C modules */ --- 1,2 ---- Index: complexobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/complexobject.c,v retrieving revision 2.24 retrieving revision 2.24.2.1 diff -C2 -r2.24 -r2.24.2.1 *** complexobject.c 2000/05/03 23:44:34 2.24 --- complexobject.c 2000/08/03 16:48:51 2.24.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Complex object implementation */ --- 1,2 ---- Index: dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.52 retrieving revision 2.52.2.1 diff -C2 -r2.52 -r2.52.2.1 *** dictobject.c 2000/05/03 23:44:34 2.52 --- dictobject.c 2000/08/03 16:48:51 2.52.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Dictionary object implementation using a hash table */ --- 1,2 ---- Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.73 retrieving revision 2.73.2.1 diff -C2 -r2.73 -r2.73.2.1 *** fileobject.c 2000/05/03 23:44:34 2.73 --- fileobject.c 2000/08/03 16:48:51 2.73.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* File object implementation */ --- 1,2 ---- Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.57 retrieving revision 2.57.2.1 diff -C2 -r2.57 -r2.57.2.1 *** floatobject.c 2000/05/03 23:44:34 2.57 --- floatobject.c 2000/08/03 16:48:51 2.57.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Float object implementation */ --- 1,2 ---- Index: frameobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/frameobject.c,v retrieving revision 2.39 retrieving revision 2.39.2.1 diff -C2 -r2.39 -r2.39.2.1 *** frameobject.c 2000/05/03 23:44:34 2.39 --- frameobject.c 2000/08/03 16:48:51 2.39.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Frame object implementation */ --- 1,2 ---- Index: funcobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/funcobject.c,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** funcobject.c 2000/05/03 23:44:35 2.20 --- funcobject.c 2000/08/03 16:48:51 2.20.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Function object implementation */ --- 1,2 ---- Index: intobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/intobject.c,v retrieving revision 2.42 retrieving revision 2.42.2.1 diff -C2 -r2.42 -r2.42.2.1 *** intobject.c 2000/05/09 14:27:48 2.42 --- intobject.c 2000/08/03 16:48:51 2.42.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Integer object implementation */ --- 1,2 ---- Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.69 retrieving revision 2.69.2.1 diff -C2 -r2.69 -r2.69.2.1 *** listobject.c 2000/05/03 23:44:35 2.69 --- listobject.c 2000/08/03 16:48:51 2.69.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* List object implementation */ --- 1,2 ---- Index: longobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/longobject.c,v retrieving revision 1.57 retrieving revision 1.57.2.1 diff -C2 -r1.57 -r1.57.2.1 *** longobject.c 2000/05/03 23:44:35 1.57 --- longobject.c 2000/08/03 16:48:51 1.57.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Long (arbitrary precision) integer object implementation */ --- 1,2 ---- Index: methodobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/methodobject.c,v retrieving revision 2.26 retrieving revision 2.26.2.1 diff -C2 -r2.26 -r2.26.2.1 *** methodobject.c 2000/05/03 23:44:35 2.26 --- methodobject.c 2000/08/03 16:48:51 2.26.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Method object implementation */ --- 1,2 ---- Index: moduleobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/moduleobject.c,v retrieving revision 2.25 retrieving revision 2.25.2.1 diff -C2 -r2.25 -r2.25.2.1 *** moduleobject.c 2000/05/03 23:44:35 2.25 --- moduleobject.c 2000/08/03 16:48:51 2.25.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module object implementation */ --- 1,2 ---- Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.70 retrieving revision 2.70.2.1 diff -C2 -r2.70 -r2.70.2.1 *** object.c 2000/05/03 23:44:35 2.70 --- object.c 2000/08/03 16:48:51 2.70.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Generic object operations; and implementation of None (NoObject) */ --- 1,2 ---- Index: rangeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v retrieving revision 2.12 retrieving revision 2.12.2.1 diff -C2 -r2.12 -r2.12.2.1 *** rangeobject.c 2000/05/03 23:44:35 2.12 --- rangeobject.c 2000/08/03 16:48:51 2.12.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Range object implementation */ --- 1,2 ---- Index: stringobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v retrieving revision 2.65 retrieving revision 2.65.2.1 diff -C2 -r2.65 -r2.65.2.1 *** stringobject.c 2000/05/08 14:08:05 2.65 --- stringobject.c 2000/08/03 16:48:51 2.65.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* String object implementation */ --- 1,2 ---- Index: tupleobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/tupleobject.c,v retrieving revision 2.33 retrieving revision 2.33.2.1 diff -C2 -r2.33 -r2.33.2.1 *** tupleobject.c 2000/05/03 23:44:36 2.33 --- tupleobject.c 2000/08/03 16:48:51 2.33.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tuple object implementation */ --- 1,2 ---- Index: typeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** typeobject.c 1997/06/02 14:43:07 2.12 --- typeobject.c 2000/08/03 16:48:51 2.12.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Type object implementation */ --- 1,2 ---- Index: xxobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/xxobject.c,v retrieving revision 2.15 retrieving revision 2.15.2.1 diff -C2 -r2.15 -r2.15.2.1 *** xxobject.c 2000/05/03 23:44:36 2.15 --- xxobject.c 2000/08/03 16:48:51 2.15.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Use this file as a template to start implementing a new object type. If your objects will be called foobar, start by copying this file to --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:49:24 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:49:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser acceler.c,2.12,2.12.4.1 assert.h,2.7,2.7.4.1 bitset.c,2.7,2.7.4.1 firstsets.c,2.7,2.7.4.1 grammar.c,2.13,2.13.4.1 grammar1.c,2.8,2.8.4.1 intrcheck.c,2.30,2.30.4.1 listnode.c,2.9,2.9.4.1 metagrammar.c,2.7,2.7.4.1 myreadline.c,2.17,2.17.2.1 node.c,2.7,2.7.4.1 parser.c,2.10,2.10.4.1 parser.h,2.9,2.9.4.1 parsetok.c,2.16,2.16.2.1 pgen.c,2.12,2.12.4.1 pgen.h,2.9,2.9.4.1 pgenmain.c,2.16,2.16.2.1 printgrammar.c,2.8,2.8.4.1 tokenizer.c,2.41,2.41.2.1 tokenizer.h,2.12,2.12.4.1 Message-ID: <200008031649.JAA15770@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv15733 Modified Files: Tag: cnri-16-start acceler.c assert.h bitset.c firstsets.c grammar.c grammar1.c intrcheck.c listnode.c metagrammar.c myreadline.c node.c parser.c parser.h parsetok.c pgen.c pgen.h pgenmain.c printgrammar.c tokenizer.c tokenizer.h Log Message: Remove CWI notice per CNRI instructions. Index: acceler.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/acceler.c,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** acceler.c 1997/08/02 03:02:25 2.12 --- acceler.c 2000/08/03 16:49:21 2.12.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser accelerator module */ --- 1,2 ---- Index: assert.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/assert.h,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** assert.h 1996/10/25 14:37:45 2.7 --- assert.h 2000/08/03 16:49:21 2.7.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifdef MPW /* This is for MPW's File command */ --- 5,8 ---- Index: bitset.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/bitset.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** bitset.c 1997/04/29 21:02:21 2.7 --- bitset.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Bitset primitives used by the parser generator */ --- 1,2 ---- Index: firstsets.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/firstsets.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** firstsets.c 1997/04/29 21:02:24 2.7 --- firstsets.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Computation of FIRST stets */ --- 1,2 ---- Index: grammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/grammar.c,v retrieving revision 2.13 retrieving revision 2.13.4.1 diff -C2 -r2.13 -r2.13.4.1 *** grammar.c 1998/04/10 22:09:36 2.13 --- grammar.c 2000/08/03 16:49:21 2.13.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Grammar implementation */ --- 1,2 ---- Index: grammar1.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/grammar1.c,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** grammar1.c 1997/04/29 21:02:31 2.8 --- grammar1.c 2000/08/03 16:49:21 2.8.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Grammar subroutines needed by parser */ --- 1,2 ---- Index: intrcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/intrcheck.c,v retrieving revision 2.30 retrieving revision 2.30.4.1 diff -C2 -r2.30 -r2.30.4.1 *** intrcheck.c 1998/12/04 18:50:20 2.30 --- intrcheck.c 2000/08/03 16:49:21 2.30.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Check for interrupts */ --- 1,2 ---- Index: listnode.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/listnode.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** listnode.c 1997/04/29 21:02:37 2.9 --- listnode.c 2000/08/03 16:49:21 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* List a node on a file */ --- 1,2 ---- Index: metagrammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/metagrammar.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** metagrammar.c 1997/04/29 21:02:40 2.7 --- metagrammar.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "pgenheaders.h" #include "metagrammar.h" --- 1,2 ---- Index: myreadline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/myreadline.c,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** myreadline.c 2000/05/03 23:44:37 2.17 --- myreadline.c 2000/08/03 16:49:21 2.17.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Readline interface for tokenizer.c and [raw_]input() in bltinmodule.c. By default, or when stdin is not a tty device, we have a super --- 1,2 ---- Index: node.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/node.c,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** node.c 1997/04/29 21:02:42 2.7 --- node.c 2000/08/03 16:49:21 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parse tree node implementation */ --- 1,2 ---- Index: parser.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parser.c,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** parser.c 1997/04/29 21:02:45 2.10 --- parser.c 2000/08/03 16:49:21 2.10.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser implementation */ --- 1,2 ---- Index: parser.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parser.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** parser.h 1997/04/29 21:02:47 2.9 --- parser.h 2000/08/03 16:49:21 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser interface */ --- 5,8 ---- Index: parsetok.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parsetok.c,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** parsetok.c 2000/05/03 23:44:37 2.16 --- parsetok.c 2000/08/03 16:49:21 2.16.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser-tokenizer link implementation */ --- 1,2 ---- Index: pgen.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/pgen.c,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** pgen.c 1998/04/10 22:09:39 2.12 --- pgen.c 2000/08/03 16:49:21 2.12.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser generator */ /* XXX This file is not yet fully PROTOized */ --- 1,2 ---- Index: pgen.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/pgen.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** pgen.h 1997/04/29 21:02:56 2.9 --- pgen.h 2000/08/03 16:49:21 2.9.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser generator interface */ --- 5,8 ---- Index: pgenmain.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/pgenmain.c,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** pgenmain.c 2000/05/03 23:44:37 2.16 --- pgenmain.c 2000/08/03 16:49:21 2.16.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Parser generator main program */ --- 1,2 ---- Index: printgrammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/printgrammar.c,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** printgrammar.c 1997/05/07 23:50:06 2.8 --- printgrammar.c 2000/08/03 16:49:21 2.8.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Print a bunch of C initializers that represent a grammar */ --- 1,2 ---- Index: tokenizer.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.c,v retrieving revision 2.41 retrieving revision 2.41.2.1 diff -C2 -r2.41 -r2.41.2.1 *** tokenizer.c 2000/05/03 23:44:37 2.41 --- tokenizer.c 2000/08/03 16:49:21 2.41.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tokenizer implementation */ --- 1,2 ---- Index: tokenizer.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.h,v retrieving revision 2.12 retrieving revision 2.12.4.1 diff -C2 -r2.12 -r2.12.4.1 *** tokenizer.h 1998/04/09 21:38:06 2.12 --- tokenizer.h 2000/08/03 16:49:21 2.12.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Tokenizer interface */ --- 5,8 ---- From python-dev@python.org Thu Aug 3 17:50:42 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:50:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python atof.c,2.3,2.3.4.1 bltinmodule.c,2.159,2.159.2.1 ceval.c,2.179,2.179.2.1 compile.c,2.108,2.108.2.1 dynload_aix.c,2.3,2.3.2.1 dynload_beos.c,2.2,2.2.2.1 dynload_dl.c,2.2,2.2.2.1 dynload_hpux.c,2.2,2.2.2.1 dynload_mac.c,2.4,2.4.2.1 dynload_next.c,2.3,2.3.2.1 dynload_os2.c,2.2,2.2.2.1 dynload_shlib.c,2.2,2.2.2.1 dynload_stub.c,2.1,2.1.2.1 dynload_win.c,2.2,2.2.2.1 errors.c,2.45,2.45.2.1 fmod.c,2.9,2.9.4.1 frozen.c,1.6,1.6.4.1 frozenmain.c,2.20,2.20.4.1 getargs.c,2.33,2.33.2.1 getcompiler.c,1.5,1.5.4.1 getcopyright.c,1.6,1.6.2.1 getcwd.c,1.9,1.9.4.1 getmtime.c,2.9,2.9.4.1 getplatform.c,1.4,1.4.4.1 getversion.c,1.10,1.10.4.1 import.c,2.134,2.134.2.1 importdl.c,2.64,2.64.2.1 importdl.h,2.12,2.12.2.1 marshal.c,1.47,1.47.2.1 memmove.c,2.4,2.4.4.1 modsupport.c,2.42,2.42.2.1 mystrtoul.c,2.17,2.17.4.1 pystate.c,2.9,2.9.2.1 pythonrun.c,2.96,2.96.2.1 sigcheck.c,2.4,2.4.4.1 strerror.c,2.6,2.6.4.1 structmember.c,2.14,2.14.4.1 sysmodule.c,2.63,2.63.2.1 t! hread.c,2.29,2.29.2.1 thread_beos.h,2.2,2.2.4.1 thread_cthread.h,2.8,2.8.4.1 thread_foobar.h,2.6,2.6.4.1 thread_lwp.h,2.7,2.7.4.1 thread_nt.h,2.9,2.9.2.1 thread_os2.h,2.5,2.5.4.1 thread_pth.h,2.1,2.1.2.1 thread_pthread.h,2.24,2.24.4.1 thread_sgi.h,2.9,2.9.4.1 thread_solaris.h,2.10,2.10.4.1 thread_wince.h,2.1,2.1.4.1 traceback.c,2.27,2.27.2.1 Message-ID: <200008031650.JAA15923@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv15854 Modified Files: Tag: cnri-16-start atof.c bltinmodule.c ceval.c compile.c dynload_aix.c dynload_beos.c dynload_dl.c dynload_hpux.c dynload_mac.c dynload_next.c dynload_os2.c dynload_shlib.c dynload_stub.c dynload_win.c errors.c fmod.c frozen.c frozenmain.c getargs.c getcompiler.c getcopyright.c getcwd.c getmtime.c getplatform.c getversion.c import.c importdl.c importdl.h marshal.c memmove.c modsupport.c mystrtoul.c pystate.c pythonrun.c sigcheck.c strerror.c structmember.c sysmodule.c thread.c thread_beos.h thread_cthread.h thread_foobar.h thread_lwp.h thread_nt.h thread_os2.h thread_pth.h thread_pthread.h thread_sgi.h thread_solaris.h thread_wince.h traceback.c Log Message: Remove CWI notice per CNRI instructions. Index: atof.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/atof.c,v retrieving revision 2.3 retrieving revision 2.3.4.1 diff -C2 -r2.3 -r2.3.4.1 *** atof.c 1996/10/25 14:42:36 2.3 --- atof.c 2000/08/03 16:50:35 2.3.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Just in case you haven't got an atof() around... This one doesn't check for bad syntax or overflow, --- 1,2 ---- Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.159 retrieving revision 2.159.2.1 diff -C2 -r2.159 -r2.159.2.1 *** bltinmodule.c 2000/05/09 19:55:16 2.159 --- bltinmodule.c 2000/08/03 16:50:35 2.159.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Built-in functions */ --- 1,2 ---- Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.179 retrieving revision 2.179.2.1 diff -C2 -r2.179 -r2.179.2.1 *** ceval.c 2000/05/08 14:06:50 2.179 --- ceval.c 2000/08/03 16:50:35 2.179.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Execute compiled code */ --- 1,2 ---- Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.108 retrieving revision 2.108.2.1 diff -C2 -r2.108 -r2.108.2.1 *** compile.c 2000/05/03 23:44:38 2.108 --- compile.c 2000/08/03 16:50:35 2.108.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Compile an expression node to intermediate code */ --- 1,2 ---- Index: dynload_aix.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_aix.c,v retrieving revision 2.3 retrieving revision 2.3.2.1 diff -C2 -r2.3 -r2.3.2.1 *** dynload_aix.c 1999/12/22 14:09:35 2.3 --- dynload_aix.c 2000/08/03 16:50:35 2.3.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_beos.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_beos.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_beos.c 1999/12/22 14:09:35 2.2 --- dynload_beos.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_dl.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_dl.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_dl.c 1999/12/22 14:09:35 2.2 --- dynload_dl.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_hpux.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_hpux.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_hpux.c 1999/12/22 14:09:35 2.2 --- dynload_hpux.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_mac.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_mac.c,v retrieving revision 2.4 retrieving revision 2.4.2.1 diff -C2 -r2.4 -r2.4.2.1 *** dynload_mac.c 2000/04/24 15:08:01 2.4 --- dynload_mac.c 2000/08/03 16:50:35 2.4.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_next.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_next.c,v retrieving revision 2.3 retrieving revision 2.3.2.1 diff -C2 -r2.3 -r2.3.2.1 *** dynload_next.c 2000/04/10 12:45:10 2.3 --- dynload_next.c 2000/08/03 16:50:35 2.3.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_os2.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_os2.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_os2.c 1999/12/22 14:09:35 2.2 --- dynload_os2.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_shlib.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_shlib.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_shlib.c 1999/12/22 14:09:35 2.2 --- dynload_shlib.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: dynload_stub.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_stub.c,v retrieving revision 2.1 retrieving revision 2.1.2.1 diff -C2 -r2.1 -r2.1.2.1 *** dynload_stub.c 1999/12/20 21:18:49 2.1 --- dynload_stub.c 2000/08/03 16:50:35 2.1.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This module provides the necessary stubs for when dynamic loading is not present. */ --- 1,2 ---- Index: dynload_win.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/dynload_win.c,v retrieving revision 2.2 retrieving revision 2.2.2.1 diff -C2 -r2.2 -r2.2.2.1 *** dynload_win.c 1999/12/22 14:09:35 2.2 --- dynload_win.c 2000/08/03 16:50:35 2.2.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: errors.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v retrieving revision 2.45 retrieving revision 2.45.2.1 diff -C2 -r2.45 -r2.45.2.1 *** errors.c 2000/05/02 19:27:51 2.45 --- errors.c 2000/08/03 16:50:35 2.45.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Error handling */ --- 1,2 ---- Index: fmod.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/fmod.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** fmod.c 1996/10/25 14:43:04 2.9 --- fmod.c 2000/08/03 16:50:35 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Portable fmod(x, y) implementation for systems that don't have it */ --- 1,2 ---- Index: frozen.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/frozen.c,v retrieving revision 1.6 retrieving revision 1.6.4.1 diff -C2 -r1.6 -r1.6.4.1 *** frozen.c 1998/04/03 21:10:36 1.6 --- frozen.c 2000/08/03 16:50:35 1.6.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Dummy frozen modules initializer */ --- 1,2 ---- Index: frozenmain.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/frozenmain.c,v retrieving revision 2.20 retrieving revision 2.20.4.1 diff -C2 -r2.20 -r2.20.4.1 *** frozenmain.c 1999/01/02 21:42:48 2.20 --- frozenmain.c 2000/08/03 16:50:35 2.20.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Python interpreter main program for frozen scripts */ --- 1,2 ---- Index: getargs.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v retrieving revision 2.33 retrieving revision 2.33.2.1 diff -C2 -r2.33 -r2.33.2.1 *** getargs.c 2000/05/09 21:50:00 2.33 --- getargs.c 2000/08/03 16:50:35 2.33.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* New getargs implementation */ --- 1,2 ---- Index: getcompiler.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getcompiler.c,v retrieving revision 1.5 retrieving revision 1.5.4.1 diff -C2 -r1.5 -r1.5.4.1 *** getcompiler.c 1997/07/19 19:48:41 1.5 --- getcompiler.c 2000/08/03 16:50:36 1.5.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the compiler identification, if possible. */ --- 1,2 ---- Index: getcopyright.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getcopyright.c,v retrieving revision 1.6 retrieving revision 1.6.2.1 diff -C2 -r1.6 -r1.6.2.1 *** getcopyright.c 2000/05/10 20:06:00 1.6 --- getcopyright.c 2000/08/03 16:50:36 1.6.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1996 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the copyright string. This is updated manually. */ --- 1,2 ---- Index: getcwd.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getcwd.c,v retrieving revision 1.9 retrieving revision 1.9.4.1 diff -C2 -r1.9 -r1.9.4.1 *** getcwd.c 1996/10/25 14:43:14 1.9 --- getcwd.c 2000/08/03 16:50:36 1.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Two PD getcwd() implementations. Author: Guido van Rossum, CWI Amsterdam, Jan 1991, . */ --- 1,2 ---- Index: getmtime.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getmtime.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** getmtime.c 1997/09/05 07:33:15 2.9 --- getmtime.c 2000/08/03 16:50:36 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Subroutine to get the last modification time of a file */ --- 1,2 ---- Index: getplatform.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getplatform.c,v retrieving revision 1.4 retrieving revision 1.4.4.1 diff -C2 -r1.4 -r1.4.4.1 *** getplatform.c 1997/07/19 19:48:05 1.4 --- getplatform.c 2000/08/03 16:50:36 1.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" --- 1,2 ---- Index: getversion.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getversion.c,v retrieving revision 1.10 retrieving revision 1.10.4.1 diff -C2 -r1.10 -r1.10.4.1 *** getversion.c 1999/04/22 12:03:40 1.10 --- getversion.c 2000/08/03 16:50:36 1.10.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the full version string. */ --- 1,2 ---- Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.134 retrieving revision 2.134.2.1 diff -C2 -r2.134 -r2.134.2.1 *** import.c 2000/05/03 23:44:39 2.134 --- import.c 2000/08/03 16:50:36 2.134.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module definition and import implementation */ --- 1,2 ---- Index: importdl.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/importdl.c,v retrieving revision 2.64 retrieving revision 2.64.2.1 diff -C2 -r2.64 -r2.64.2.1 *** importdl.c 1999/12/22 14:09:35 2.64 --- importdl.c 2000/08/03 16:50:36 2.64.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Support for dynamic loading of extension modules */ --- 1,2 ---- Index: importdl.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/importdl.h,v retrieving revision 2.12 retrieving revision 2.12.2.1 diff -C2 -r2.12 -r2.12.2.1 *** importdl.h 1999/12/20 22:55:03 2.12 --- importdl.h 2000/08/03 16:50:36 2.12.2.1 *************** *** 6,40 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Definitions for dynamic loading of extension modules */ enum filetype { --- 6,9 ---- Index: marshal.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/marshal.c,v retrieving revision 1.47 retrieving revision 1.47.2.1 diff -C2 -r1.47 -r1.47.2.1 *** marshal.c 2000/05/03 23:44:39 1.47 --- marshal.c 2000/08/03 16:50:36 1.47.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Write Python objects to files and read them back. This is intended for writing and reading compiled Python code only; --- 1,2 ---- Index: memmove.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/memmove.c,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** memmove.c 1996/10/25 14:43:30 2.4 --- memmove.c 2000/08/03 16:50:36 2.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* A perhaps slow but I hope correct implementation of memmove */ --- 1,2 ---- Index: modsupport.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/modsupport.c,v retrieving revision 2.42 retrieving revision 2.42.2.1 diff -C2 -r2.42 -r2.42.2.1 *** modsupport.c 2000/04/28 14:42:37 2.42 --- modsupport.c 2000/08/03 16:50:36 2.42.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module support implementation */ --- 1,2 ---- Index: mystrtoul.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/mystrtoul.c,v retrieving revision 2.17 retrieving revision 2.17.4.1 diff -C2 -r2.17 -r2.17.4.1 *** mystrtoul.c 1999/04/07 16:07:21 2.17 --- mystrtoul.c 2000/08/03 16:50:36 2.17.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" --- 1,2 ---- Index: pystate.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pystate.c,v retrieving revision 2.9 retrieving revision 2.9.2.1 diff -C2 -r2.9 -r2.9.2.1 *** pystate.c 1999/06/18 14:22:24 2.9 --- pystate.c 2000/08/03 16:50:36 2.9.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread and interpreter state structures and their interfaces */ --- 1,2 ---- Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.96 retrieving revision 2.96.2.1 diff -C2 -r2.96 -r2.96.2.1 *** pythonrun.c 2000/05/03 23:44:39 2.96 --- pythonrun.c 2000/08/03 16:50:36 2.96.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Python interpreter top-level routines, including init/exit */ --- 1,2 ---- Index: sigcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sigcheck.c,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** sigcheck.c 1997/04/29 20:08:14 2.4 --- sigcheck.c 2000/08/03 16:50:36 2.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Sigcheck is similar to intrcheck() but sets an exception when an interrupt occurs. It can't be in the intrcheck.c file since that --- 1,2 ---- Index: strerror.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/strerror.c,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** strerror.c 1996/10/25 14:43:41 2.6 --- strerror.c 2000/08/03 16:50:36 2.6.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* PD implementation of strerror() for systems that don't have it. Author: Guido van Rossum, CWI Amsterdam, Oct. 1990, . */ --- 1,2 ---- Index: structmember.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/structmember.c,v retrieving revision 2.14 retrieving revision 2.14.4.1 diff -C2 -r2.14 -r2.14.4.1 *** structmember.c 1998/05/20 22:25:32 2.14 --- structmember.c 2000/08/03 16:50:36 2.14.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Map C struct members to Python object attributes */ --- 1,2 ---- Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.63 retrieving revision 2.63.2.1 diff -C2 -r2.63 -r2.63.2.1 *** sysmodule.c 2000/05/09 19:57:01 2.63 --- sysmodule.c 2000/08/03 16:50:36 2.63.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* System module */ --- 1,2 ---- Index: thread.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread.c,v retrieving revision 2.29 retrieving revision 2.29.2.1 diff -C2 -r2.29 -r2.29.2.1 *** thread.c 2000/05/08 13:36:49 2.29 --- thread.c 2000/08/03 16:50:36 2.29.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread package. This is intended to be usable independently from Python. --- 1,2 ---- Index: thread_beos.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_beos.h,v retrieving revision 2.2 retrieving revision 2.2.4.1 diff -C2 -r2.2 -r2.2.4.1 *** thread_beos.h 1998/12/21 19:32:29 2.2 --- thread_beos.h 2000/08/03 16:50:36 2.2.4.1 *************** *** 1,31 **** /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - BeOS thread support by Chris Herborth (chrish@qnx.com) ******************************************************************/ --- 1,3 ---- Index: thread_cthread.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_cthread.h,v retrieving revision 2.8 retrieving revision 2.8.4.1 diff -C2 -r2.8 -r2.8.4.1 *** thread_cthread.h 1998/12/21 19:32:30 2.8 --- thread_cthread.h 2000/08/03 16:50:36 2.8.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include --- 1,2 ---- Index: thread_foobar.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_foobar.h,v retrieving revision 2.6 retrieving revision 2.6.4.1 diff -C2 -r2.6 -r2.6.4.1 *** thread_foobar.h 1998/12/21 19:32:30 2.6 --- thread_foobar.h 2000/08/03 16:50:36 2.6.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* * Initialization. --- 1,2 ---- Index: thread_lwp.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_lwp.h,v retrieving revision 2.7 retrieving revision 2.7.4.1 diff -C2 -r2.7 -r2.7.4.1 *** thread_lwp.h 1998/12/21 19:32:31 2.7 --- thread_lwp.h 2000/08/03 16:50:36 2.7.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include #include --- 1,2 ---- Index: thread_nt.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_nt.h,v retrieving revision 2.9 retrieving revision 2.9.2.1 diff -C2 -r2.9 -r2.9.2.1 *** thread_nt.h 2000/05/11 12:53:51 2.9 --- thread_nt.h 2000/08/03 16:50:36 2.9.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This code implemented by Dag.Gruneau@elsa.preseco.comm.se */ /* Fast NonRecursiveMutex support by Yakov Markovitch, markovitch@iso.ru */ --- 1,2 ---- Index: thread_os2.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_os2.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** thread_os2.h 1998/12/21 19:32:33 2.5 --- thread_os2.h 2000/08/03 16:50:36 2.5.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This code implemented by cvale@netcom.com */ --- 1,2 ---- Index: thread_pth.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_pth.h,v retrieving revision 2.1 retrieving revision 2.1.2.1 diff -C2 -r2.1 -r2.1.2.1 *** thread_pth.h 2000/05/08 13:36:49 2.1 --- thread_pth.h 2000/08/03 16:50:36 2.1.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* GNU pth threads interface http://www.gnu.org/software/pth --- 1,2 ---- Index: thread_pthread.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_pthread.h,v retrieving revision 2.24 retrieving revision 2.24.4.1 diff -C2 -r2.24 -r2.24.4.1 *** thread_pthread.h 1999/03/15 20:27:53 2.24 --- thread_pthread.h 2000/08/03 16:50:36 2.24.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Posix threads interface */ --- 1,2 ---- Index: thread_sgi.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_sgi.h,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** thread_sgi.h 1998/12/21 19:32:34 2.9 --- thread_sgi.h 2000/08/03 16:50:36 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifdef WITH_SGI_DL #define USE_DL --- 1,2 ---- Index: thread_solaris.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_solaris.h,v retrieving revision 2.10 retrieving revision 2.10.4.1 diff -C2 -r2.10 -r2.10.4.1 *** thread_solaris.h 1999/04/13 14:32:12 2.10 --- thread_solaris.h 2000/08/03 16:50:36 2.10.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include #include --- 1,2 ---- Index: thread_wince.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/thread_wince.h,v retrieving revision 2.1 retrieving revision 2.1.4.1 diff -C2 -r2.1 -r2.1.4.1 *** thread_wince.h 1999/04/08 13:57:06 2.1 --- thread_wince.h 2000/08/03 16:50:36 2.1.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* This code implemented by Mark Hammond (MHammond@skippinet.com.au) */ --- 1,2 ---- Index: traceback.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/traceback.c,v retrieving revision 2.27 retrieving revision 2.27.2.1 diff -C2 -r2.27 -r2.27.2.1 *** traceback.c 2000/05/03 23:44:39 2.27 --- traceback.c 2000/08/03 16:50:36 2.27.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Traceback implementation */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:52:07 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:52:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _tkinter.c,1.99,1.99.2.1 almodule.c,1.24,1.24.2.1 arraymodule.c,2.39,2.39.2.1 audioop.c,1.36,1.36.2.1 binascii.c,2.19,2.19.2.1 bsddbmodule.c,1.18,1.18.2.1 cdmodule.c,1.19,1.19.2.1 cgen.py,2.14,2.14.4.1 cgensupport.c,2.11,2.11.4.1 cgensupport.h,2.11,2.11.4.1 clmodule.c,2.20,2.20.2.1 config.c.in,1.67,1.67.4.1 cstubs,2.18,2.18.4.1 dbmmodule.c,2.17,2.17.2.1 dlmodule.c,2.7,2.7.2.1 errnomodule.c,2.9,2.9.4.1 fcntlmodule.c,2.19,2.19.2.1 flmodule.c,1.36,1.36.2.1 fmmodule.c,1.11,1.11.2.1 gdbmmodule.c,2.22,2.22.2.1 getpath.c,1.21,1.21.2.1 glmodule.c,2.3,2.3.4.1 grpmodule.c,2.9,2.9.4.1 imageop.c,2.20,2.20.4.1 imgfile.c,1.22,1.22.4.1 main.c,1.38,1.38.2.1 mathmodule.c,2.45,2.45.2.1 md5module.c,2.15,2.15.2.1 mpzmodule.c,2.23,2.23.2.1 newmodule.c,2.20,2.20.2.1 parsermodule.c,2.39,2.39.2.1 pcremodule.c,2.19,2.19.2.1 posixmodule.c,2.134,2.134.2.1 pwdmodule.c,1.17,1.17.4.1 pyexpat.c,2.4,2.4.2.1 regexmodule.c,1.34,1.34.2.1 resource.c,2.10,2.10.2.1 selectmod! ule.c,2.32,2.32.2.1 sgimodule.c,1.11,1.11.4.1 shamodule.c,2.5,2.5.2.1 signalmodule.c,2.39,2.39.4.1 stropmodule.c,2.63,2.63.2.1 structmodule.c,2.30,2.30.2.1 sunaudiodev.c,1.17,1.17.2.1 svmodule.c,2.11,2.11.2.1 threadmodule.c,2.31,2.31.2.1 timemodule.c,2.83,2.83.2.1 xxmodule.c,2.16,2.16.2.1 yuv.h,2.5,2.5.4.1 yuvconvert.c,2.4,2.4.4.1 Message-ID: <200008031652.JAA16131@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv16042 Modified Files: Tag: cnri-16-start _tkinter.c almodule.c arraymodule.c audioop.c binascii.c bsddbmodule.c cdmodule.c cgen.py cgensupport.c cgensupport.h clmodule.c config.c.in cstubs dbmmodule.c dlmodule.c errnomodule.c fcntlmodule.c flmodule.c fmmodule.c gdbmmodule.c getpath.c glmodule.c grpmodule.c imageop.c imgfile.c main.c mathmodule.c md5module.c mpzmodule.c newmodule.c parsermodule.c pcremodule.c posixmodule.c pwdmodule.c pyexpat.c regexmodule.c resource.c selectmodule.c sgimodule.c shamodule.c signalmodule.c stropmodule.c structmodule.c sunaudiodev.c svmodule.c threadmodule.c timemodule.c xxmodule.c yuv.h yuvconvert.c Log Message: Remove CWI notice per CNRI instructions. Index: _tkinter.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_tkinter.c,v retrieving revision 1.99 retrieving revision 1.99.2.1 diff -C2 -r1.99 -r1.99.2.1 *** _tkinter.c 2000/05/04 15:55:17 1.99 --- _tkinter.c 2000/08/03 16:52:00 1.99.2.1 *************** *** 1,32 **** /*********************************************************** Copyright (C) 1994 Steen Lumholt. - Copyright 1994-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ******************************************************************/ --- 1,4 ---- Index: almodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/almodule.c,v retrieving revision 1.24 retrieving revision 1.24.2.1 diff -C2 -r1.24 -r1.24.2.1 *** almodule.c 2000/05/03 23:44:31 1.24 --- almodule.c 2000/08/03 16:52:00 1.24.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #define OLD_INTERFACE /* define for pre-Irix 6 interface */ --- 1,2 ---- Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.39 retrieving revision 2.39.2.1 diff -C2 -r2.39 -r2.39.2.1 *** arraymodule.c 2000/05/03 23:44:31 2.39 --- arraymodule.c 2000/08/03 16:52:00 2.39.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Array object implementation */ --- 1,2 ---- Index: audioop.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/audioop.c,v retrieving revision 1.36 retrieving revision 1.36.2.1 diff -C2 -r1.36 -r1.36.2.1 *** audioop.c 2000/05/02 21:18:13 1.36 --- audioop.c 2000/08/03 16:52:00 1.36.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* audioopmodule - Module to detect peak values in arrays */ --- 1,2 ---- Index: binascii.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** binascii.c 2000/02/29 13:59:22 2.19 --- binascii.c 2000/08/03 16:52:00 2.19.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum, - Amsterdam, The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* ** Routines to represent binary data in ASCII and vice-versa --- 1,2 ---- Index: bsddbmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/bsddbmodule.c,v retrieving revision 1.18 retrieving revision 1.18.2.1 diff -C2 -r1.18 -r1.18.2.1 *** bsddbmodule.c 2000/05/03 23:44:31 1.18 --- bsddbmodule.c 2000/08/03 16:52:00 1.18.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Berkeley DB interface. Author: Michael McLay --- 1,2 ---- Index: cdmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cdmodule.c,v retrieving revision 1.19 retrieving revision 1.19.2.1 diff -C2 -r1.19 -r1.19.2.1 *** cdmodule.c 2000/05/03 23:44:31 1.19 --- cdmodule.c 2000/08/03 16:52:00 1.19.2.1 *************** *** 1,33 **** - /********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* CD module -- interface to Mark Callow's and Roger Chickering's */ /* CD Audio Library (CD). */ --- 1,2 ---- Index: cgen.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cgen.py,v retrieving revision 2.14 retrieving revision 2.14.4.1 diff -C2 -r2.14 -r2.14.4.1 *** cgen.py 1997/04/29 21:34:06 2.14 --- cgen.py 2000/08/03 16:52:00 2.14.4.1 *************** *** 1,32 **** - ######################################################################## - # Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - # The Netherlands. - # - # All Rights Reserved - # - # Permission to use, copy, modify, and distribute this software and its - # documentation for any purpose and without fee is hereby granted, - # provided that the above copyright notice appear in all copies and that - # both that copyright notice and this permission notice appear in - # supporting documentation, and that the names of Stichting Mathematisch - # Centrum or CWI or Corporation for National Research Initiatives or - # CNRI not be used in advertising or publicity pertaining to - # distribution of the software without specific, written prior - # permission. - # - # While CWI is the initial source for this software, a modified version - # is made available by the Corporation for National Research Initiatives - # (CNRI) at the Internet address ftp://ftp.python.org. - # - # STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - # REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - # MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - # CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - # PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - # PERFORMANCE OF THIS SOFTWARE. - ######################################################################## - # Python script to parse cstubs file for gl and generate C stubs. # usage: python cgen.py glmodule.c --- 1,2 ---- Index: cgensupport.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cgensupport.c,v retrieving revision 2.11 retrieving revision 2.11.4.1 diff -C2 -r2.11 -r2.11.4.1 *** cgensupport.c 1997/04/29 15:43:55 2.11 --- cgensupport.c 2000/08/03 16:52:00 2.11.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Functions used by cgen output */ --- 1,2 ---- Index: cgensupport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cgensupport.h,v retrieving revision 2.11 retrieving revision 2.11.4.1 diff -C2 -r2.11 -r2.11.4.1 *** cgensupport.h 1997/04/29 15:35:28 2.11 --- cgensupport.h 2000/08/03 16:52:00 2.11.4.1 *************** *** 5,39 **** #endif - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Definitions used by cgen output */ --- 5,8 ---- Index: clmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/clmodule.c,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** clmodule.c 2000/05/03 23:44:31 2.20 --- clmodule.c 2000/08/03 16:52:00 2.20.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Cl objects */ --- 1,2 ---- Index: config.c.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/config.c.in,v retrieving revision 1.67 retrieving revision 1.67.4.1 diff -C2 -r1.67 -r1.67.4.1 *** config.c.in 1997/04/29 20:31:59 1.67 --- config.c.in 2000/08/03 16:52:00 1.67.4.1 *************** *** 1,33 **** ! /* -*- C -*- *********************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ! ******************************************************************/ ! /* Module configuration */ --- 1,3 ---- ! /* -*- C -*- */ /* Module configuration */ Index: cstubs =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cstubs,v retrieving revision 2.18 retrieving revision 2.18.4.1 diff -C2 -r2.18 -r2.18.4.1 *** cstubs 1998/04/28 16:09:16 2.18 --- cstubs 2000/08/03 16:52:00 2.18.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Input used to generate the Python module "glmodule.c". --- 1,2 ---- Index: dbmmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/dbmmodule.c,v retrieving revision 2.17 retrieving revision 2.17.2.1 diff -C2 -r2.17 -r2.17.2.1 *** dbmmodule.c 2000/05/03 23:44:32 2.17 --- dbmmodule.c 2000/08/03 16:52:00 2.17.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* DBM module using dictionary interface */ --- 1,2 ---- Index: dlmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/dlmodule.c,v retrieving revision 2.7 retrieving revision 2.7.2.1 diff -C2 -r2.7 -r2.7.2.1 *** dlmodule.c 2000/05/03 23:44:32 2.7 --- dlmodule.c 2000/08/03 16:52:00 2.7.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* dl module */ --- 1,2 ---- Index: errnomodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/errnomodule.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** errnomodule.c 1999/01/27 18:04:05 2.9 --- errnomodule.c 2000/08/03 16:52:00 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Errno module */ --- 1,2 ---- Index: fcntlmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/fcntlmodule.c,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** fcntlmodule.c 2000/02/29 13:59:23 2.19 --- fcntlmodule.c 2000/08/03 16:52:00 2.19.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* fcntl module */ --- 1,2 ---- Index: flmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/flmodule.c,v retrieving revision 1.36 retrieving revision 1.36.2.1 diff -C2 -r1.36 -r1.36.2.1 *** flmodule.c 2000/05/03 23:44:32 1.36 --- flmodule.c 2000/08/03 16:52:00 1.36.2.1 *************** *** 1,33 **** - /********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* FL module -- interface to Mark Overmars' FORMS Library. */ --- 1,2 ---- Index: fmmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/fmmodule.c,v retrieving revision 1.11 retrieving revision 1.11.2.1 diff -C2 -r1.11 -r1.11.2.1 *** fmmodule.c 2000/05/03 23:44:32 1.11 --- fmmodule.c 2000/08/03 16:52:01 1.11.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Font Manager module */ --- 1,2 ---- Index: gdbmmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/gdbmmodule.c,v retrieving revision 2.22 retrieving revision 2.22.2.1 diff -C2 -r2.22 -r2.22.2.1 *** gdbmmodule.c 2000/05/03 23:44:32 2.22 --- gdbmmodule.c 2000/08/03 16:52:01 2.22.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* DBM module using dictionary interface */ /* Author: Anthony Baxter, after dbmmodule.c */ --- 1,2 ---- Index: getpath.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/getpath.c,v retrieving revision 1.21 retrieving revision 1.21.2.1 diff -C2 -r1.21 -r1.21.2.1 *** getpath.c 2000/05/03 23:44:32 1.21 --- getpath.c 2000/08/03 16:52:01 1.21.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the initial module search path. */ --- 1,2 ---- Index: glmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/glmodule.c,v retrieving revision 2.3 retrieving revision 2.3.4.1 diff -C2 -r2.3 -r2.3.4.1 *** glmodule.c 1998/10/21 16:10:40 2.3 --- glmodule.c 2000/08/03 16:52:01 2.3.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Input used to generate the Python module "glmodule.c". --- 1,2 ---- Index: grpmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/grpmodule.c,v retrieving revision 2.9 retrieving revision 2.9.4.1 diff -C2 -r2.9 -r2.9.4.1 *** grpmodule.c 1998/12/04 18:49:50 2.9 --- grpmodule.c 2000/08/03 16:52:01 2.9.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* UNIX group file access module */ --- 1,2 ---- Index: imageop.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/imageop.c,v retrieving revision 2.20 retrieving revision 2.20.4.1 diff -C2 -r2.20 -r2.20.4.1 *** imageop.c 1998/12/04 18:49:50 2.20 --- imageop.c 2000/08/03 16:52:01 2.20.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* imageopmodule - Various operations on pictures */ --- 1,2 ---- Index: imgfile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/imgfile.c,v retrieving revision 1.22 retrieving revision 1.22.4.1 diff -C2 -r1.22 -r1.22.4.1 *** imgfile.c 1997/10/01 04:26:35 1.22 --- imgfile.c 2000/08/03 16:52:01 1.22.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* IMGFILE module - Interface to sgi libimage */ --- 1,2 ---- Index: main.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/main.c,v retrieving revision 1.38 retrieving revision 1.38.2.1 diff -C2 -r1.38 -r1.38.2.1 *** main.c 2000/05/02 19:20:26 1.38 --- main.c 2000/08/03 16:52:01 1.38.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Python interpreter main program */ --- 1,2 ---- Index: mathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/mathmodule.c,v retrieving revision 2.45 retrieving revision 2.45.2.1 diff -C2 -r2.45 -r2.45.2.1 *** mathmodule.c 2000/05/11 18:40:42 2.45 --- mathmodule.c 2000/08/03 16:52:01 2.45.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Math module -- standard C math library functions, pi and e */ --- 1,2 ---- Index: md5module.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v retrieving revision 2.15 retrieving revision 2.15.2.1 diff -C2 -r2.15 -r2.15.2.1 *** md5module.c 2000/05/03 23:44:32 2.15 --- md5module.c 2000/08/03 16:52:01 2.15.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* MD5 module */ --- 1,2 ---- Index: mpzmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/mpzmodule.c,v retrieving revision 2.23 retrieving revision 2.23.2.1 diff -C2 -r2.23 -r2.23.2.1 *** mpzmodule.c 2000/05/03 23:44:32 2.23 --- mpzmodule.c 2000/08/03 16:52:01 2.23.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* MPZ module */ --- 1,2 ---- Index: newmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/newmodule.c,v retrieving revision 2.20 retrieving revision 2.20.2.1 diff -C2 -r2.20 -r2.20.2.1 *** newmodule.c 2000/05/03 23:44:32 2.20 --- newmodule.c 2000/08/03 16:52:01 2.20.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Module new -- create new objects of various types */ --- 1,2 ---- Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.39 retrieving revision 2.39.2.1 diff -C2 -r2.39 -r2.39.2.1 *** parsermodule.c 2000/05/03 23:44:32 2.39 --- parsermodule.c 2000/08/03 16:52:01 2.39.2.1 *************** *** 76,110 **** */ - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - static PyObject* node2tuple(node *n, /* node to convert */ --- 76,79 ---- Index: pcremodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pcremodule.c,v retrieving revision 2.19 retrieving revision 2.19.2.1 diff -C2 -r2.19 -r2.19.2.1 *** pcremodule.c 2000/05/03 23:44:32 2.19 --- pcremodule.c 2000/08/03 16:52:01 2.19.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1997 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Pcre objects */ --- 1,2 ---- Index: posixmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.134 retrieving revision 2.134.2.1 diff -C2 -r2.134 -r2.134.2.1 *** posixmodule.c 2000/05/03 02:44:55 2.134 --- posixmodule.c 2000/08/03 16:52:01 2.134.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* POSIX module implementation */ --- 1,2 ---- Index: pwdmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v retrieving revision 1.17 retrieving revision 1.17.4.1 diff -C2 -r1.17 -r1.17.4.1 *** pwdmodule.c 1998/12/04 18:50:00 1.17 --- pwdmodule.c 2000/08/03 16:52:01 1.17.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* UNIX password file access module */ --- 1,2 ---- Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.4 retrieving revision 2.4.2.1 diff -C2 -r2.4 -r2.4.2.1 *** pyexpat.c 2000/05/03 23:44:33 2.4 --- pyexpat.c 2000/08/03 16:52:01 2.4.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 2000 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" #include "xmlparse.h" --- 1,2 ---- Index: regexmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/regexmodule.c,v retrieving revision 1.34 retrieving revision 1.34.2.1 diff -C2 -r1.34 -r1.34.2.1 *** regexmodule.c 2000/05/03 23:44:33 1.34 --- regexmodule.c 2000/08/03 16:52:01 1.34.2.1 *************** *** 4,38 **** */ - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Regular expression objects */ /* This uses Tatu Ylonen's copyleft-free reimplementation of --- 4,7 ---- Index: resource.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/resource.c,v retrieving revision 2.10 retrieving revision 2.10.2.1 diff -C2 -r2.10 -r2.10.2.1 *** resource.c 2000/02/29 13:59:23 2.10 --- resource.c 2000/08/03 16:52:01 2.10.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "Python.h" #include "mytime.h" /* needed for SunOS4.1 */ --- 1,2 ---- Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.32 retrieving revision 2.32.2.1 diff -C2 -r2.32 -r2.32.2.1 *** selectmodule.c 2000/05/03 23:44:33 2.32 --- selectmodule.c 2000/08/03 16:52:01 2.32.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* select - Module containing unix select(2) call. Under Unix, the file descriptors are small integers. --- 1,2 ---- Index: sgimodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sgimodule.c,v retrieving revision 1.11 retrieving revision 1.11.4.1 diff -C2 -r1.11 -r1.11.4.1 *** sgimodule.c 1996/12/10 00:32:31 1.11 --- sgimodule.c 2000/08/03 16:52:01 1.11.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* SGI module -- random SGI-specific things */ --- 1,2 ---- Index: shamodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/shamodule.c,v retrieving revision 2.5 retrieving revision 2.5.2.1 diff -C2 -r2.5 -r2.5.2.1 *** shamodule.c 2000/05/03 23:44:33 2.5 --- shamodule.c 2000/08/03 16:52:01 2.5.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1999 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* SHA module */ --- 1,2 ---- Index: signalmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/signalmodule.c,v retrieving revision 2.39 retrieving revision 2.39.4.1 diff -C2 -r2.39 -r2.39.4.1 *** signalmodule.c 1998/12/21 19:32:39 2.39 --- signalmodule.c 2000/08/03 16:52:01 2.39.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Signal module -- many thanks to Lance Ellinghaus */ --- 1,2 ---- Index: stropmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/stropmodule.c,v retrieving revision 2.63 retrieving revision 2.63.2.1 diff -C2 -r2.63 -r2.63.2.1 *** stropmodule.c 2000/05/03 23:44:33 2.63 --- stropmodule.c 2000/08/03 16:52:01 2.63.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* strop module */ --- 1,2 ---- Index: structmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/structmodule.c,v retrieving revision 2.30 retrieving revision 2.30.2.1 diff -C2 -r2.30 -r2.30.2.1 *** structmodule.c 2000/02/29 13:59:24 2.30 --- structmodule.c 2000/08/03 16:52:01 2.30.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* struct module -- pack values into and (out of) strings */ --- 1,2 ---- Index: sunaudiodev.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/sunaudiodev.c,v retrieving revision 1.17 retrieving revision 1.17.2.1 diff -C2 -r1.17 -r1.17.2.1 *** sunaudiodev.c 2000/05/03 23:44:33 1.17 --- sunaudiodev.c 2000/08/03 16:52:01 1.17.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Sad objects */ --- 1,2 ---- Index: svmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/svmodule.c,v retrieving revision 2.11 retrieving revision 2.11.2.1 diff -C2 -r2.11 -r2.11.2.1 *** svmodule.c 2000/05/03 23:44:33 2.11 --- svmodule.c 2000/08/03 16:52:02 2.11.2.1 *************** *** 1,33 **** - /********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* SV module -- interface to the Indigo video board */ --- 1,2 ---- Index: threadmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/threadmodule.c,v retrieving revision 2.31 retrieving revision 2.31.2.1 diff -C2 -r2.31 -r2.31.2.1 *** threadmodule.c 2000/05/03 23:44:33 2.31 --- threadmodule.c 2000/08/03 16:52:02 2.31.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Thread module */ /* Interface to Sjoerd's portable C thread library */ --- 1,2 ---- Index: timemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v retrieving revision 2.83 retrieving revision 2.83.2.1 diff -C2 -r2.83 -r2.83.2.1 *** timemodule.c 2000/05/09 19:52:40 2.83 --- timemodule.c 2000/08/03 16:52:02 2.83.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Time module */ --- 1,2 ---- Index: xxmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/xxmodule.c,v retrieving revision 2.16 retrieving revision 2.16.2.1 diff -C2 -r2.16 -r2.16.2.1 *** xxmodule.c 2000/05/03 23:44:33 2.16 --- xxmodule.c 2000/08/03 16:52:02 2.16.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Use this file as a template to start implementing a module that also declares objects types. All occurrences of 'Xxo' should be changed --- 1,2 ---- Index: yuv.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/yuv.h,v retrieving revision 2.5 retrieving revision 2.5.4.1 diff -C2 -r2.5 -r2.5.4.1 *** yuv.h 1996/10/25 14:41:05 2.5 --- yuv.h 2000/08/03 16:52:02 2.5.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #ifndef Py_YUV_H #define Py_YUV_H --- 1,2 ---- Index: yuvconvert.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/yuvconvert.c,v retrieving revision 2.4 retrieving revision 2.4.4.1 diff -C2 -r2.4 -r2.4.4.1 *** yuvconvert.c 1996/10/25 14:41:08 2.4 --- yuvconvert.c 2000/08/03 16:52:02 2.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - #include "yuv.h" --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:55:06 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:55:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC config.c,1.22,1.22.2.1 getpathp.c,1.13,1.13.2.1 Message-ID: <200008031655.JAA16420@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv16403 Modified Files: Tag: cnri-16-start config.c getpathp.c Log Message: Remove CWI notice per CNRI instructions. Index: config.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/config.c,v retrieving revision 1.22 retrieving revision 1.22.2.1 diff -C2 -r1.22 -r1.22.2.1 *** config.c 2000/05/08 14:15:19 1.22 --- config.c 2000/08/03 16:55:03 1.22.2.1 *************** *** 1,33 **** ! /* -*- C -*- *********************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ! ******************************************************************/ ! /* Module configuration */ --- 1,3 ---- ! /* -*- C -*- */ /* Module configuration */ Index: getpathp.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/getpathp.c,v retrieving revision 1.13 retrieving revision 1.13.2.1 diff -C2 -r1.13 -r1.13.2.1 *** getpathp.c 2000/03/30 19:45:39 1.13 --- getpathp.c 2000/08/03 16:55:03 1.13.2.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the initial module search path. */ /* Used by DOS, OS/2, Windows 3.1, Windows 95/98, Windows NT. */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:55:06 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:55:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC/os2vacpp config.c,1.3,1.3.4.1 getpathp.c,1.4,1.4.4.1 Message-ID: <200008031655.JAA16424@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC/os2vacpp In directory slayer.i.sourceforge.net:/tmp/cvs-serv16403/os2vacpp Modified Files: Tag: cnri-16-start config.c getpathp.c Log Message: Remove CWI notice per CNRI instructions. Index: config.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/os2vacpp/config.c,v retrieving revision 1.3 retrieving revision 1.3.4.1 diff -C2 -r1.3 -r1.3.4.1 *** config.c 1998/09/28 22:02:36 1.3 --- config.c 2000/08/03 16:55:04 1.3.4.1 *************** *** 1,33 **** ! /* -*- C -*- *********************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ! ******************************************************************/ ! /* Module configuration */ --- 1,3 ---- ! /* -*- C -*- */ /* Module configuration */ Index: getpathp.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/os2vacpp/getpathp.c,v retrieving revision 1.4 retrieving revision 1.4.4.1 diff -C2 -r1.4 -r1.4.4.1 *** getpathp.c 1998/07/27 13:49:04 1.4 --- getpathp.c 2000/08/03 16:55:04 1.4.4.1 *************** *** 1,33 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ - /* Return the initial module search path. */ /* Used by DOS, OS/2, Windows 3.1. Works on NT too. */ --- 1,2 ---- From python-dev@python.org Thu Aug 3 17:56:46 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:56:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/modulator/Templates copyright,1.2,1.2.4.1 Message-ID: <200008031656.JAA16626@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/modulator/Templates In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606/Tools/modulator/Templates Modified Files: Tag: cnri-16-start copyright Log Message: Remove CWI notice per CNRI instructions. Index: copyright =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/modulator/Templates/copyright,v retrieving revision 1.2 retrieving revision 1.2.4.1 diff -C2 -r1.2 -r1.2.4.1 *** copyright 1996/10/25 14:44:06 1.2 --- copyright 2000/08/03 16:56:43 1.2.4.1 *************** *** 1,30 **** - /*********************************************************** - Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - The Netherlands. - - All Rights Reserved - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both that copyright notice and this permission notice appear in - supporting documentation, and that the names of Stichting Mathematisch - Centrum or CWI or Corporation for National Research Initiatives or - CNRI not be used in advertising or publicity pertaining to - distribution of the software without specific, written prior - permission. - - While CWI is the initial source for this software, a modified version - is made available by the Corporation for National Research Initiatives - (CNRI) at the Internet address ftp://ftp.python.org. - - STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - - ******************************************************************/ --- 0 ---- From python-dev@python.org Thu Aug 3 17:56:45 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:56:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/BeOS dl_export.h,1.1,1.1.4.1 Message-ID: <200008031656.JAA16618@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/BeOS In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606/BeOS Modified Files: Tag: cnri-16-start dl_export.h Log Message: Remove CWI notice per CNRI instructions. Index: dl_export.h =================================================================== RCS file: /cvsroot/python/python/dist/src/BeOS/dl_export.h,v retrieving revision 1.1 retrieving revision 1.1.4.1 diff -C2 -r1.1 -r1.1.4.1 *** dl_export.h 1999/01/12 20:30:23 1.1 --- dl_export.h 2000/08/03 16:56:43 1.1.4.1 *************** *** 8,35 **** * * This trivial header is released under the same license as the rest of ! * Python: ! * ! * Permission to use, copy, modify, and distribute this software and its ! * documentation for any purpose and without fee is hereby granted, ! * provided that the above copyright notice appear in all copies and that ! * both that copyright notice and this permission notice appear in ! * supporting documentation, and that the names of Stichting Mathematisch ! * Centrum or CWI or Corporation for National Research Initiatives or ! * CNRI not be used in advertising or publicity pertaining to ! * distribution of the software without specific, written prior ! * permission. ! * ! * While CWI is the initial source for this software, a modified version ! * is made available by the Corporation for National Research Initiatives ! * (CNRI) at the Internet address ftp://ftp.python.org. ! * ! * STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! * MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! * CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! * PERFORMANCE OF THIS SOFTWARE. * * - Chris Herborth (chrish@beoscentral.com) --- 8,12 ---- * * This trivial header is released under the same license as the rest of ! * Python. * * - Chris Herborth (chrish@beoscentral.com) From python-dev@python.org Thu Aug 3 17:56:56 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:56:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc README,1.38,1.38.2.1 Message-ID: <200008031656.JAA16622@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606/Doc Modified Files: Tag: cnri-16-start README Log Message: Remove CWI notice per CNRI instructions. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/README,v retrieving revision 1.38 retrieving revision 1.38.2.1 diff -C2 -r1.38 -r1.38.2.1 *** README 2000/04/28 16:53:35 1.38 --- README 2000/08/03 16:56:43 1.38.2.1 *************** *** 191,223 **** The Python source is copyrighted, but you can freely use and copy it ! as long as you don't change or remove the copyright notice: ! ! ---------------------------------------------------------------------- ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! ! All Rights Reserved ! ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI or Corporation for National Research Initiatives or ! CNRI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior ! permission. ! ! While CWI is the initial source for this software, a modified version ! is made available by the Corporation for National Research Initiatives ! (CNRI) at the Internet address ftp://ftp.python.org. ! ! STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ! REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ! MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ! CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ! DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ! PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ! TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! PERFORMANCE OF THIS SOFTWARE. ! ---------------------------------------------------------------------- --- 191,193 ---- The Python source is copyrighted, but you can freely use and copy it ! as long as you don't change or remove the copyright notice. From python-dev@python.org Thu Aug 3 17:57:42 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 09:57:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/scripts fixnotice.py,1.2,1.2.4.1 Message-ID: <200008031657.JAA16711@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/scripts In directory slayer.i.sourceforge.net:/tmp/cvs-serv16703 Modified Files: Tag: cnri-16-start fixnotice.py Log Message: Change it to remove the old CWI notice, per CNRI instructions. Index: fixnotice.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/scripts/fixnotice.py,v retrieving revision 1.2 retrieving revision 1.2.4.1 diff -C2 -r1.2 -r1.2.4.1 *** fixnotice.py 1998/03/24 05:30:22 1.2 --- fixnotice.py 2000/08/03 16:57:40 1.2.4.1 *************** *** 1,23 **** #! /usr/bin/env python ! OLD_NOTICE = """ ! Permission to use, copy, modify, and distribute this software and its ! documentation for any purpose and without fee is hereby granted, ! provided that the above copyright notice appear in all copies and that ! both that copyright notice and this permission notice appear in ! supporting documentation, and that the names of Stichting Mathematisch ! Centrum or CWI not be used in advertising or publicity pertaining to ! distribution of the software without specific, written prior permission. ! STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO ! THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND ! FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE ! FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT ! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! """ - NEW_NOTICE = """ Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, --- 1,11 ---- #! /usr/bin/env python ! OLD_NOTICE = """\ ! /*********************************************************** ! Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ! The Netherlands. ! All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, *************** *** 42,48 **** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ ! # " <-- Help Emacs import os, sys, string --- 30,39 ---- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ******************************************************************/ + """ ! NEW_NOTICE = "" import os, sys, string From python-dev@python.org Thu Aug 3 18:00:04 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 10:00:04 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.86,1.86.2.1 Message-ID: <200008031700.KAA17091@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv16961 Modified Files: Tag: cnri-16-start Makefile.in Log Message: Remove CWI notice per CNRI instructions. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.86 retrieving revision 1.86.2.1 diff -C2 -r1.86 -r1.86.2.1 *** Makefile.in 2000/04/24 14:57:21 1.86 --- Makefile.in 2000/08/03 17:00:01 1.86.2.1 *************** *** 1,32 **** - ######################################################################## - # Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, - # The Netherlands. - # - # All Rights Reserved - # - # Permission to use, copy, modify, and distribute this software and its - # documentation for any purpose and without fee is hereby granted, - # provided that the above copyright notice appear in all copies and that - # both that copyright notice and this permission notice appear in - # supporting documentation, and that the names of Stichting Mathematisch - # Centrum or CWI or Corporation for National Research Initiatives or - # CNRI not be used in advertising or publicity pertaining to - # distribution of the software without specific, written prior - # permission. - # - # While CWI is the initial source for this software, a modified version - # is made available by the Corporation for National Research Initiatives - # (CNRI) at the Internet address ftp://ftp.python.org. - # - # STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH - # REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - # MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH - # CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - # DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - # PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - # PERFORMANCE OF THIS SOFTWARE. - ######################################################################## - # Top-level Makefile for Python # --- 1,2 ---- From python-dev@python.org Thu Aug 3 18:25:47 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:25:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.77,1.78 Message-ID: <200008031725.KAA26643@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv26636/perl Modified Files: python.perl Log Message: do_cmd_moreargs(), do_cmd_unspecified(): New functions to reflect previously unused markup. do_cmd_file(): Simplified generated markup to only make use of the existing stylesheet. do_cmd_makevar(): Make the markup more stylesheet-friendly. Index: python.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -r1.77 -r1.78 *** python.perl 2000/06/28 21:06:08 1.77 --- python.perl 2000/08/03 17:25:44 1.78 *************** *** 123,127 **** sub do_cmd_pytype{ return @_[0]; } ! sub do_cmd_makevar{ return @_[0]; } sub do_cmd_code{ return use_wrappers(@_[0], '', ''); } --- 123,128 ---- sub do_cmd_pytype{ return @_[0]; } ! sub do_cmd_makevar{ ! return use_wrappers(@_[0], '', ''); } sub do_cmd_code{ return use_wrappers(@_[0], '', ''); } *************** *** 170,176 **** return use_italics(@_); } sub do_cmd_file{ ! return use_wrappers(@_[0], ! '', ! ''); } sub do_cmd_filenq{ return do_cmd_file(@_[0]); } --- 171,175 ---- return use_italics(@_); } sub do_cmd_file{ ! return use_wrappers(@_[0], '', ''); } sub do_cmd_filenq{ return do_cmd_file(@_[0]); } *************** *** 185,188 **** --- 184,192 ---- sub do_cmd_textit{ return use_wrappers(@_[0], '', ''); } + + sub do_cmd_moreargs{ + return '...' . @_[0]; } + sub do_cmd_unspecified{ + return '...' . @_[0]; } From python-dev@python.org Thu Aug 3 18:28:56 2000 From: python-dev@python.org (Moshe Zadka) Date: Thu, 3 Aug 2000 10:28:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_urlparse,NONE,1.1 Message-ID: <200008031728.KAA26850@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv26804/output Added Files: test_urlparse Log Message: Checking in empty tests for urlparse, as future place holders --- NEW FILE --- test_urlparse From python-dev@python.org Thu Aug 3 18:29:18 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:29:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfuncs.tex,1.67,1.68 Message-ID: <200008031729.KAA26900@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv26885/lib Modified Files: libfuncs.tex Log Message: int() description: Fix markup to avoid image generation for math mode. zip() description: Fix broken markup, three small markup consistency nits, and one really minor usage nit. Introduce use of \moreargs instead of hardcoding "..." with \optional. Index: libfuncs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfuncs.tex,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -r1.67 -r1.68 *** libfuncs.tex 2000/08/03 15:46:17 1.67 --- libfuncs.tex 2000/08/03 17:29:13 1.68 *************** *** 320,324 **** this behaves identical to \code{string.atoi(\var{x}\optional{, \var{radix}})}. The \var{radix} parameter gives the base for the ! conversion and may be any integer in the range $[2, 36]$. If \var{radix} is specified and \var{x} is not a string, \exception{TypeError} is raised. --- 320,324 ---- this behaves identical to \code{string.atoi(\var{x}\optional{, \var{radix}})}. The \var{radix} parameter gives the base for the ! conversion and may be any integer in the range [2, 36]. If \var{radix} is specified and \var{x} is not a string, \exception{TypeError} is raised. *************** *** 705,714 **** \end{funcdesc} ! \begin{funcdesc}{zip}{seq1\optional{, seq2\optional{, ...}}} This function returns a list of tuples, where each tuple contains the ! i-th element from each of the argument sequences. At least one sequence is required, otherwise a \exception{TypeError} is raised. The returned list is truncated in length to the length of the shortest argument sequence. When the argument sequences are all of the same ! length, \function{zip} is similar to \function{map} with an initial ! None argument. --- 705,715 ---- \end{funcdesc} ! \begin{funcdesc}{zip}{seq1, \moreargs} This function returns a list of tuples, where each tuple contains the ! \var{i}-th element from each of the argument sequences. At least one sequence is required, otherwise a \exception{TypeError} is raised. The returned list is truncated in length to the length of the shortest argument sequence. When the argument sequences are all of the same ! length, \function{zip()} is similar to \function{map()} with an ! initial argument of \code{None}. ! \end{funcdesc} From python-dev@python.org Thu Aug 3 18:28:56 2000 From: python-dev@python.org (Moshe Zadka) Date: Thu, 3 Aug 2000 10:28:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_urlparse.py,NONE,1.1 Message-ID: <200008031728.KAA26849@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv26804 Added Files: test_urlparse.py Log Message: Checking in empty tests for urlparse, as future place holders --- NEW FILE --- From python-dev@python.org Thu Aug 3 18:38:34 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:38:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/texinputs python.sty,1.61,1.62 Message-ID: <200008031738.KAA27830@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/texinputs In directory slayer.i.sourceforge.net:/tmp/cvs-serv27817/texinputs Modified Files: python.sty Log Message: \py@varvars: Merge the various definitions to be the simplist one that does everything needed, and discard the older stuff that is not being used. Index: python.sty =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/texinputs/python.sty,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -r1.61 -r1.62 *** python.sty 2000/06/30 17:57:05 1.61 --- python.sty 2000/08/03 17:38:30 1.62 *************** *** 751,761 **** \newcommand{\newsgroup}[1]{{\small\textsf{#1}}} ! %\newcommand{\py@varvars}[1]{{\def\,{\/{\char`\,}}\var{#1}}} ! \newcommand{\py@varvars}[1]{% {\let\unspecified=\py@unspecified% \let\moreargs=\py@moreargs% ! \def\,{\/{\char`\,}}\var{#1}}} ! % let's see if this breaks anything now; we may be able to simplify... ! \renewcommand{\py@varvars}[1]{\var{#1}} % I'd really like to get rid of this! --- 751,758 ---- \newcommand{\newsgroup}[1]{{\small\textsf{#1}}} ! \newcommand{\py@varvars}[1]{{% {\let\unspecified=\py@unspecified% \let\moreargs=\py@moreargs% ! \var{#1}}}} % I'd really like to get rid of this! From python-dev@python.org Thu Aug 3 18:39:23 2000 From: python-dev@python.org (Greg Stein) Date: Thu, 3 Aug 2000 10:39:23 -0700 Subject: [Python-checkins] CVS: python/nondist/src/Compiler/compiler transformer.py,1.10,1.11 Message-ID: <200008031739.KAA27908@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/src/Compiler/compiler In directory slayer.i.sourceforge.net:/tmp/cvs-serv27804 Modified Files: transformer.py Log Message: add a bit more legal junk (too lazy to paste in the whole BSD license tho; included by ref) Index: transformer.py =================================================================== RCS file: /cvsroot/python/python/nondist/src/Compiler/compiler/transformer.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** transformer.py 2000/05/02 22:32:59 1.10 --- transformer.py 2000/08/03 17:39:13 1.11 *************** *** 1,2 **** --- 1,18 ---- + # + # Copyright (C) 1997-1998 Greg Stein. All Rights Reserved. + # + # This module is provided under a BSD-ish license. See + # http://www.opensource.org/licenses/bsd-license.html + # and replace OWNER, ORGANIZATION, and YEAR as appropriate. + # + # + # Written by Greg Stein (gstein@lyra.org) + # and Bill Tutt (rassilon@lima.mudlib.org) + # February 1997. + # + # Support for ast.Node subclasses written and other revisions by + # Jeremy Hylton (jeremy@cnri.reston.va.us) + # + """Parse tree transformation module. *************** *** 9,20 **** """ - # Copyright 1997-1998 Greg Stein and Bill Tutt - # - # Written by Greg Stein (gstein@lyra.org) - # and Bill Tutt (rassilon@lima.mudlib.org) - # February 1997. - # - # Support for Node subclasses written and other revisions by - # Jeremy Hylton (jeremy@cnri.reston.va.us) # # The output tree has the following nodes: --- 25,28 ---- From python-dev@python.org Thu Aug 3 18:43:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 3 Aug 2000 10:43:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects rangeobject.c,2.16,2.17 Message-ID: <200008031743.KAA28246@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv28227 Modified Files: rangeobject.c Log Message: Remove the tp_print handler. Revise the tp_repr handler to produce a more "minimal" presentation. Make the tolist() method use PyArg_ParseTuple() and provide a docstring. Index: rangeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** rangeobject.c 2000/07/09 06:21:27 2.16 --- rangeobject.c 2000/08/03 17:43:02 2.17 *************** *** 59,92 **** } - static int - range_print(rangeobject *r, FILE *fp, int flags) - { - int i, j; - - fprintf(fp, "("); - for (i = 0; i < r->reps; ++i) - for (j = 0; j < r->len; ++j) { - if (j > 0 || i > 0) - fprintf(fp, ", "); - - fprintf(fp, "%ld", r->start + j * r->step); - } - - if (r->len == 1 && r->reps == 1) - fprintf(fp, ","); - fprintf(fp, ")"); - return 0; - } - static PyObject * range_repr(rangeobject *r) { ! char buf[80]; ! sprintf(buf, "(xrange(%ld, %ld, %ld) * %d)", ! r->start, ! r->start + r->len * r->step, ! r->step, ! r->reps); ! return PyString_FromString(buf); } --- 59,86 ---- } static PyObject * range_repr(rangeobject *r) { ! char buf1[80]; ! char buf2[80]; ! ! if (r->start == 0 && r->step == 1) { ! snprintf(buf1, sizeof(buf1), "xrange(%ld)", ! r->start + r->len * r->step); ! } ! else { ! char *fmt = "xrange(%ld, %ld, %ld)"; ! if (r->step == 1) ! fmt = "xrange(%ld, %ld)"; ! snprintf(buf1, sizeof(buf1), fmt, ! r->start, ! r->start + r->len * r->step, ! r->step); ! } ! if (r->reps != 1) { ! snprintf(buf2, sizeof(buf2), ! "(%s * %d)", buf1, r->reps); ! } ! return PyString_FromString(r->reps == 1 ? buf1 : buf2); } *************** *** 171,175 **** int len = self->len * self->reps; ! if (! PyArg_Parse(args, "")) return NULL; --- 165,169 ---- int len = self->len * self->reps; ! if (! PyArg_ParseTuple(args, ":tolist")) return NULL; *************** *** 189,193 **** { static PyMethodDef range_methods[] = { ! {"tolist", (PyCFunction)range_tolist}, {NULL, NULL} }; --- 183,189 ---- { static PyMethodDef range_methods[] = { ! {"tolist", (PyCFunction)range_tolist, METH_VARARGS, ! "tolist() -> list\n" ! "Return a list object with the same values."}, {NULL, NULL} }; *************** *** 229,237 **** 0, /* Item size for varobject */ (destructor)range_dealloc, /*tp_dealloc*/ ! (printfunc)range_print, /*tp_print*/ (getattrfunc)range_getattr, /*tp_getattr*/ 0, /*tp_setattr*/ (cmpfunc)range_compare, /*tp_compare*/ ! (reprfunc)range_repr, /*tp_repr*/ 0, /*tp_as_number*/ &range_as_sequence, /*tp_as_sequence*/ --- 225,233 ---- 0, /* Item size for varobject */ (destructor)range_dealloc, /*tp_dealloc*/ ! 0, /*tp_print*/ (getattrfunc)range_getattr, /*tp_getattr*/ 0, /*tp_setattr*/ (cmpfunc)range_compare, /*tp_compare*/ ! (reprfunc)range_repr, /*tp_repr*/ 0, /*tp_as_number*/ &range_as_sequence, /*tp_as_sequence*/ From python-dev@python.org Thu Aug 3 19:16:52 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 3 Aug 2000 11:16:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Misc COPYRIGHT,1.4,NONE Message-ID: <200008031816.LAA01468@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv1452 Removed Files: Tag: cnri-16-start COPYRIGHT Log Message: The Misc/COPYRIGHT file is superseded by the toplevel LICENSE file. From python-dev@python.org Thu Aug 3 19:42:31 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:42:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include unicodeobject.h,2.17,2.18 Message-ID: <200008031842.LAA08557@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv8534/Include Modified Files: unicodeobject.h Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: unicodeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/unicodeobject.h,v retrieving revision 2.17 retrieving revision 2.18 diff -C2 -r2.17 -r2.18 *** unicodeobject.h 2000/08/03 16:24:24 2.17 --- unicodeobject.h 2000/08/03 18:42:28 2.18 *************** *** 205,210 **** Py_UNICODE *str; /* Raw Unicode buffer */ long hash; /* Hash value; -1 if not set */ ! PyObject *utf8str; /* UTF-8 encoded version as Python string, ! or NULL */ } PyUnicodeObject; --- 205,211 ---- Py_UNICODE *str; /* Raw Unicode buffer */ long hash; /* Hash value; -1 if not set */ ! PyObject *defenc; /* (Default) Encoded version as Python ! string, or NULL; this is used for ! implementing the buffer protocol */ } PyUnicodeObject; From python-dev@python.org Thu Aug 3 19:43:01 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:43:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python getargs.c,2.42,2.43 Message-ID: <200008031843.LAA08602@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv8588/Python Modified Files: getargs.c Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: getargs.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v retrieving revision 2.42 retrieving revision 2.43 diff -C2 -r2.42 -r2.43 *** getargs.c 2000/07/22 18:47:25 2.42 --- getargs.c 2000/08/03 18:42:59 2.43 *************** *** 373,377 **** /* Internal API needed by convertsimple1(): */ extern ! PyObject *_PyUnicode_AsUTF8String(PyObject *unicode, const char *errors); --- 373,377 ---- /* Internal API needed by convertsimple1(): */ extern ! PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode, const char *errors); *************** *** 568,572 **** *p = PyString_AS_STRING(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsUTF8String(arg, NULL); if (arg == NULL) return "unicode conversion error"; --- 568,573 ---- *p = PyString_AS_STRING(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsDefaultEncodedString( ! arg, NULL); if (arg == NULL) return "unicode conversion error"; *************** *** 613,617 **** *p = PyString_AsString(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsUTF8String(arg, NULL); if (arg == NULL) return "unicode conversion error"; --- 614,619 ---- *p = PyString_AsString(arg); else if (PyUnicode_Check(arg)) { ! arg = _PyUnicode_AsDefaultEncodedString( ! arg, NULL); if (arg == NULL) return "unicode conversion error"; *************** *** 645,649 **** encoding = (const char *)va_arg(*p_va, const char *); if (encoding == NULL) ! return "(encoding is NULL)"; /* Get 's' parameter: the output buffer to use */ --- 647,651 ---- encoding = (const char *)va_arg(*p_va, const char *); if (encoding == NULL) ! encoding = PyUnicode_GetDefaultEncoding(); /* Get 's' parameter: the output buffer to use */ From python-dev@python.org Thu Aug 3 19:44:31 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:44:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.54,2.55 Message-ID: <200008031844.LAA08711@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv8693/Objects Modified Files: unicodeobject.c Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.54 retrieving revision 2.55 diff -C2 -r2.54 -r2.55 *** unicodeobject.c 2000/08/03 16:24:25 2.54 --- unicodeobject.c 2000/08/03 18:44:28 2.55 *************** *** 166,172 **** reset: /* Reset the object caches */ ! if (unicode->utf8str) { ! Py_DECREF(unicode->utf8str); ! unicode->utf8str = NULL; } unicode->hash = -1; --- 166,172 ---- reset: /* Reset the object caches */ ! if (unicode->defenc) { ! Py_DECREF(unicode->defenc); ! unicode->defenc = NULL; } unicode->hash = -1; *************** *** 244,248 **** unicode->length = length; unicode->hash = -1; ! unicode->utf8str = NULL; return unicode; --- 244,248 ---- unicode->length = length; unicode->hash = -1; ! unicode->defenc = NULL; return unicode; *************** *** 263,269 **** unicode->length = 0; } ! if (unicode->utf8str) { ! Py_DECREF(unicode->utf8str); ! unicode->utf8str = NULL; } /* Add to free list */ --- 263,269 ---- unicode->length = 0; } ! if (unicode->defenc) { ! Py_DECREF(unicode->defenc); ! unicode->defenc = NULL; } /* Add to free list */ *************** *** 274,278 **** else { PyMem_DEL(unicode->str); ! Py_XDECREF(unicode->utf8str); PyObject_DEL(unicode); } --- 274,278 ---- else { PyMem_DEL(unicode->str); ! Py_XDECREF(unicode->defenc); PyObject_DEL(unicode); } *************** *** 530,533 **** --- 530,560 ---- } + /* Return a Python string holding the default encoded value of the + Unicode object. + + The resulting string is cached in the Unicode object for subsequent + usage by this function. The cached version is needed to implement + the character buffer interface and will live (at least) as long as + the Unicode object itself. + + The refcount of the string is *not* incremented. + + *** Exported for internal use by the interpreter only !!! *** + + */ + + PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode, + const char *errors) + { + PyObject *v = ((PyUnicodeObject *)unicode)->defenc; + + if (v) + return v; + v = PyUnicode_AsEncodedString(unicode, NULL, errors); + if (v && errors == NULL) + ((PyUnicodeObject *)unicode)->defenc = v; + return v; + } + Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode) { *************** *** 875,907 **** } - /* Return a Python string holding the UTF-8 encoded value of the - Unicode object. - - The resulting string is cached in the Unicode object for subsequent - usage by this function. The cached version is needed to implement - the character buffer interface and will live (at least) as long as - the Unicode object itself. - - The refcount of the string is *not* incremented. - - *** Exported for internal use by the interpreter only !!! *** - - */ - - PyObject *_PyUnicode_AsUTF8String(PyObject *unicode, - const char *errors) - { - PyObject *v = ((PyUnicodeObject *)unicode)->utf8str; - - if (v) - return v; - v = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), - PyUnicode_GET_SIZE(unicode), - errors); - if (v && errors == NULL) - ((PyUnicodeObject *)unicode)->utf8str = v; - return v; - } - PyObject *PyUnicode_AsUTF8String(PyObject *unicode) { --- 902,905 ---- *************** *** 912,916 **** return NULL; } ! str = _PyUnicode_AsUTF8String(unicode, NULL); if (str == NULL) return NULL; --- 910,916 ---- return NULL; } ! str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), ! PyUnicode_GET_SIZE(unicode), ! NULL); if (str == NULL) return NULL; *************** *** 4520,4524 **** return -1; } ! str = _PyUnicode_AsUTF8String((PyObject *)self, NULL); if (str == NULL) return -1; --- 4520,4524 ---- return -1; } ! str = _PyUnicode_AsDefaultEncodedString((PyObject *)self, NULL); if (str == NULL) return -1; *************** *** 5131,5135 **** if (v->str) PyMem_DEL(v->str); ! Py_XDECREF(v->utf8str); PyObject_DEL(v); } --- 5131,5135 ---- if (v->str) PyMem_DEL(v->str); ! Py_XDECREF(v->defenc); PyObject_DEL(v); } From python-dev@python.org Thu Aug 3 19:46:10 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 11:46:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Misc unicode.txt,3.8,3.9 Message-ID: <200008031846.LAA08911@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv8894 Modified Files: unicode.txt Log Message: This patch finalizes the move from UTF-8 to a default encoding in the Python Unicode implementation. The internal buffer used for implementing the buffer protocol is renamed to defenc to make this change visible. It now holds the default encoded version of the Unicode object and is calculated on demand (NULL otherwise). Since the default encoding defaults to ASCII, this will mean that Unicode objects which hold non-ASCII characters will no longer work on C APIs using the "s" or "t" parser markers. C APIs must now explicitly provide Unicode support via the "u", "U" or "es"/"es#" parser markers in order to work with non-ASCII Unicode strings. (Note: this patch will also have to be applied to the 1.6 branch of the CVS tree.) Index: unicode.txt =================================================================== RCS file: /cvsroot/python/python/dist/src/Misc/unicode.txt,v retrieving revision 3.8 retrieving revision 3.9 diff -C2 -r3.8 -r3.9 *** unicode.txt 2000/06/08 17:51:33 3.8 --- unicode.txt 2000/08/03 18:46:08 3.9 *************** *** 1,4 **** ============================================================================= ! Python Unicode Integration Proposal Version: 1.4 ----------------------------------------------------------------------------- --- 1,4 ---- ============================================================================= ! Python Unicode Integration Proposal Version: 1.6 ----------------------------------------------------------------------------- *************** *** 42,56 **** by all APIs taking an encoding name as input). ! Encoding names should follow the name conventions as used by the Unicode Consortium: spaces are converted to hyphens, e.g. 'utf 16' is written as 'utf-16'. ! Codec modules should use the same names, but with hyphens converted to underscores, e.g. utf_8, utf_16, iso_8859_1. - · The should be the widely used 'utf-8' format. This - is very close to the standard 7-bit ASCII format and thus resembles the - standard used programming nowadays in most aspects. Unicode Constructors: --- 42,92 ---- by all APIs taking an encoding name as input). ! · Encoding names should follow the name conventions as used by the Unicode Consortium: spaces are converted to hyphens, e.g. 'utf 16' is written as 'utf-16'. ! · Codec modules should use the same names, but with hyphens converted to underscores, e.g. utf_8, utf_16, iso_8859_1. + Unicode Default Encoding: + ------------------------- + + The Unicode implementation has to make some assumption about the + encoding of 8-bit strings passed to it for coercion and about the + encoding to as default for conversion of Unicode to strings when no + specific encoding is given. This encoding is called + throughout this text. + + For this, the implementation maintains a global which can be set in + the site.py Python startup script. Subsequent changes are not + possible. The can be set and queried using the + two sys module APIs: + + sys.setdefaultencoding(encoding) + --> Sets the used by the Unicode implementation. + encoding has to be an encoding which is supported by the Python + installation, otherwise, a LookupError is raised. + + Note: This API is only available in site.py ! It is removed + from the sys module by site.py after usage. + + sys.getdefaultencoding() + --> Returns the current . + + If not otherwise defined or set, the defaults to + 'ascii'. This encoding is also the startup default of Python (and in + effect before site.py is executed). + + Note that the default site.py startup module contains disabled + optional code which can set the according to the + encoding defined by the current locale. The locale module is used to + extract the encoding from the locale default settings defined by the + OS environment (see locale.py). If the encoding cannot be determined, + is unkown or unsupported, the code defaults to setting the to 'ascii'. To enable this code, edit the site.py file or + place the appropriate code into the sitecustomize.py module of your + Python installation. + Unicode Constructors: *************** *** 160,165 **** encoding>. ! For the same reason, Unicode objects should return the same hash value ! as their UTF-8 equivalent strings. When compared using cmp() (or PyObject_Compare()) the implementation --- 196,203 ---- encoding>. ! Unicode objects should return the same hash value as their ASCII ! equivalent strings. Unicode strings holding non-ASCII values are not ! guaranteed to return the same hash values as the default encoded ! equivalent string representation. When compared using cmp() (or PyObject_Compare()) the implementation *************** *** 662,670 **** Unicode objects should have a pointer to a cached Python string object ! holding the object's value using the current . This is needed for performance and internal parsing (see ! Internal Argument Parsing) reasons. The buffer is filled when the ! first conversion request to the is issued on the ! object. Interning is not needed (for now), since Python identifiers are --- 700,707 ---- Unicode objects should have a pointer to a cached Python string object ! holding the object's value using the . ! This is needed for performance and internal parsing (see Internal ! Argument Parsing) reasons. The buffer is filled when the first ! conversion request to the is issued on the object. Interning is not needed (for now), since Python identifiers are *************** *** 702,710 **** ----------------- ! Implement the buffer interface using the Python string object as basis for bf_getcharbuf (corresponds to the "t#" argument parsing marker) and the internal buffer for bf_getreadbuf (corresponds to the "s#" argument parsing marker). If bf_getcharbuf is requested ! and the object does not yet exist, it is created first. This has the advantage of being able to write to output streams (which --- 739,747 ---- ----------------- ! Implement the buffer interface using the Python string object as basis for bf_getcharbuf (corresponds to the "t#" argument parsing marker) and the internal buffer for bf_getreadbuf (corresponds to the "s#" argument parsing marker). If bf_getcharbuf is requested ! and the object does not yet exist, it is created first. This has the advantage of being able to write to output streams (which *************** *** 776,781 **** "U": Check for Unicode object and return a pointer to it ! "s": For Unicode objects: auto convert them to the ! and return a pointer to the object's buffer. "s#": Access to the Unicode object via the bf_getreadbuf buffer interface --- 813,818 ---- "U": Check for Unicode object and return a pointer to it ! "s": For Unicode objects: return a pointer to the object's ! buffer (which uses the ). "s#": Access to the Unicode object via the bf_getreadbuf buffer interface *************** *** 786,791 **** "t#": Access to the Unicode object via the bf_getcharbuf buffer interface (see Buffer Interface); note that the length relates to the buffer ! length, not necessarily to the Unicode string length (this may ! be different depending on the ). "es": --- 823,827 ---- "t#": Access to the Unicode object via the bf_getcharbuf buffer interface (see Buffer Interface); note that the length relates to the buffer ! length, not necessarily to the Unicode string length. "es": *************** *** 1008,1011 **** --- 1044,1052 ---- History of this Proposal: ------------------------- + 1.6: Changed to since this is the name used in the + implementation. Added notes about the usage of in the + buffer protocol implementation. + 1.5: Added notes about setting the . Fixed some + typos (thanks to Andrew Kuchling). Changed to . 1.4: Added note about mixed type comparisons and contains tests. Changed treating of Unicode objects in format strings (if used From python-dev@python.org Thu Aug 3 20:26:25 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 3 Aug 2000 12:26:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/scripts trace.py,NONE,1.1 Message-ID: <200008031926.MAA18490@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/scripts In directory slayer.i.sourceforge.net:/tmp/cvs-serv18344 Added Files: trace.py Log Message: Python code coverage tool by Skip Montanaro and Andrew Dalke --- NEW FILE --- #!/usr/bin/env python # Copyright 2000, Mojam Media, Inc., all rights reserved. # Author: Skip Montanaro # # Copyright 1999, Bioreason, Inc., all rights reserved. # Author: Andrew Dalke # # Copyright 1995-1997, Automatrix, Inc., all rights reserved. # Author: Skip Montanaro # # Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. # # # Permission to use, copy, modify, and distribute this Python software and # its associated documentation for any purpose without fee is hereby # granted, provided that the above copyright notice appears in all copies, # and that both that copyright notice and this permission notice appear in # supporting documentation, and that the name of neither Automatrix, # Bioreason or Mojam Media be used in advertising or publicity pertaining to # distribution of the software without specific, written prior permission. # # # Summary of recent changes: # Support for files with the same basename (submodules in packages) # Expanded the idea of how to ignore files or modules # Split tracing and counting into different classes # Extracted count information and reporting from the count class # Added some ability to detect which missing lines could be executed # Added pseudo-pragma to prohibit complaining about unexecuted lines # Rewrote the main program # Summary of older changes: # Added run-time display of statements being executed # Incorporated portability and performance fixes from Greg Stein # Incorporated main program from Michael Scharf """ program/module to trace Python program or function execution Sample use, command line: trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs trace.py -t --ignore-dir '$prefix' spam.py eggs Sample use, programmatically (still more complicated than it should be) # create an Ignore option, telling it what you want to ignore ignore = trace.Ignore(dirs = [sys.prefix, sys.exec_prefix]) # create a Coverage object, telling it what to ignore coverage = trace.Coverage(ignore) # run the new command using the given trace trace.run(coverage.trace, 'main()') # make a report, telling it where you want output t = trace.create_results_log(coverage.results(), '/usr/local/Automatrix/concerts/coverage') show_missing = 1) The Trace class can be instantited instead of the Coverage class if runtime display of executable lines is desired instead of statement converage measurement. """ import sys, os, string, marshal, tempfile, copy, operator def usage(outfile): outfile.write("""Usage: %s [OPTIONS] [ARGS] Execution: --help Display this help then exit. --version Output version information then exit. -t,--trace Print the line to be executed to sys.stdout. -c,--count Count the number of times a line is executed. Results are written in the results file, if given. -r,--report Generate a report from a results file; do not execute any code. (One of `-t', `-c' or `-r' must be specified) I/O: -f,--file= File name for accumulating results over several runs. (No file name means do not archive results) -d,--logdir= Directory to use when writing annotated log files. Log files are the module __name__ with `.` replaced by os.sep and with '.pyl' added. -m,--missing Annotate all executable lines which were not executed with a '>>>>>> '. -R,--no-report Do not generate the annotated reports. Useful if you want to accumulate several over tests. Selection: Do not trace or log lines from ... --ignore-module=[string] modules with the given __name__, and submodules of that module --ignore-dir=[string] files in the stated directory (multiple directories can be joined by os.pathsep) The selection options can be listed multiple times to ignore different modules. """ % sys.argv[0]) class Ignore: def __init__(self, modules = None, dirs = None): self._mods = modules or [] self._dirs = dirs or [] self._ignore = { '': 1 } def names(self, filename, modulename): if self._ignore.has_key(modulename): return self._ignore[modulename] # haven't seen this one before, so see if the module name is # on the ignore list. Need to take some care since ignoring # "cmp" musn't mean ignoring "cmpcache" but ignoring # "Spam" must also mean ignoring "Spam.Eggs". for mod in self._mods: if mod == modulename: # Identical names, so ignore self._ignore[modulename] = 1 return 1 # check if the module is a proper submodule of something on # the ignore list n = len(mod) # (will not overflow since if the first n characters are the # same and the name has not already occured, then the size # of "name" is greater than that of "mod") if mod == modulename[:n] and modulename[n] == '.': self._ignore[modulename] = 1 return 1 # Now check that __file__ isn't in one of the directories if filename is None: # must be a built-in, so we must ignore self._ignore[modulename] = 1 return 1 # Ignore a file when it contains one of the ignorable paths for d in self._dirs: # The '+ os.sep' is to ensure that d is a parent directory, # as compared to cases like: # d = "/usr/local" # filename = "/usr/local.py" # or # d = "/usr/local.py" # filename = "/usr/local.py" if string.find(filename, d + os.sep) == 0: self._ignore[modulename] = 1 return 1 # Tried the different ways, so we don't ignore this module self._ignore[modulename] = 0 return 0 def run(trace, cmd): import __main__ dict = __main__.__dict__ sys.settrace(trace) try: exec cmd in dict, dict finally: sys.settrace(None) def runctx(trace, cmd, globals=None, locals=None): if globals is None: globals = {} if locals is None: locals = {} sys.settrace(trace) try: exec cmd in dict, dict finally: sys.settrace(None) def runfunc(trace, func, *args, **kw): result = None sys.settrace(trace) try: result = apply(func, args, kw) finally: sys.settrace(None) return result class CoverageResults: def __init__(self, counts = {}, modules = {}): self.counts = counts.copy() # map (filename, lineno) to count self.modules = modules.copy() # map filenames to modules def update(self, other): """Merge in the data from another CoverageResults""" counts = self.counts other_counts = other.counts modules = self.modules other_modules = other.modules for key in other_counts.keys(): counts[key] = counts.get(key, 0) + other_counts[key] for key in other_modules.keys(): if modules.has_key(key): # make sure they point to the same file assert modules[key] == other_modules[key], \ "Strange! filename %s has two different module names" % \ (key, modules[key], other_module[key]) else: modules[key] = other_modules[key] # Given a code string, return the SET_LINENO information def _find_LINENO_from_string(co_code): """return all of the SET_LINENO information from a code string""" import dis linenos = {} # This code was filched from the `dis' module then modified n = len(co_code) i = 0 prev_op = None prev_lineno = 0 while i < n: c = co_code[i] op = ord(c) if op == dis.SET_LINENO: if prev_op == op: # two SET_LINENO in a row, so the previous didn't # indicate anything. This occurs with triple # quoted strings (?). Remove the old one. del linenos[prev_lineno] prev_lineno = ord(co_code[i+1]) + ord(co_code[i+2])*256 linenos[prev_lineno] = 1 if op >= dis.HAVE_ARGUMENT: i = i + 3 else: i = i + 1 prev_op = op return linenos def _find_LINENO(code): """return all of the SET_LINENO information from a code object""" import types # get all of the lineno information from the code of this scope level linenos = _find_LINENO_from_string(code.co_code) # and check the constants for references to other code objects for c in code.co_consts: if type(c) == types.CodeType: # find another code object, so recurse into it linenos.update(_find_LINENO(c)) return linenos def find_executable_linenos(filename): """return a dict of the line numbers from executable statements in a file Works by finding all of the code-like objects in the module then searching the byte code for 'SET_LINENO' terms (so this won't work one -O files). """ import parser prog = open(filename).read() ast = parser.suite(prog) code = parser.compileast(ast, filename) # The only way I know to find line numbers is to look for the # SET_LINENO instructions. Isn't there some way to get it from # the AST? return _find_LINENO(code) ### XXX because os.path.commonprefix seems broken by my way of thinking... def commonprefix(dirs): "Given a list of pathnames, returns the longest common leading component" if not dirs: return '' n = copy.copy(dirs) for i in range(len(n)): n[i] = n[i].split(os.sep) prefix = n[0] for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: prefix = prefix[:i] if i == 0: return '' break return os.sep.join(prefix) def create_results_log(results, dirname = ".", show_missing = 1, save_counts = 0): import re # turn the counts data ("(filename, lineno) = count") into something # accessible on a per-file basis per_file = {} for filename, lineno in results.counts.keys(): lines_hit = per_file[filename] = per_file.get(filename, {}) lines_hit[lineno] = results.counts[(filename, lineno)] # try and merge existing counts and modules file from dirname try: counts = marshal.load(open(os.path.join(dirname, "counts"))) modules = marshal.load(open(os.path.join(dirname, "modules"))) results.update(results.__class__(counts, modules)) except IOError: pass # there are many places where this is insufficient, like a blank # line embedded in a multiline string. blank = re.compile(r'^\s*(#.*)?$') # generate file paths for the coverage files we are going to write... fnlist = [] tfdir = tempfile.gettempdir() for key in per_file.keys(): filename = key # skip some "files" we don't care about... if filename == "": continue # are these caused by code compiled using exec or something? if filename.startswith(tfdir): continue # XXX this is almost certainly not portable!!! fndir = os.path.dirname(filename) if filename[:1] == os.sep: coverpath = os.path.join(dirname, "."+fndir) else: coverpath = os.path.join(dirname, fndir) if filename.endswith(".pyc") or filename.endswith(".pyo"): filename = filename[:-1] # Get the original lines from the .py file try: lines = open(filename, 'r').readlines() except IOError, err: sys.stderr.write( "%s: Could not open %s for reading because: %s - skipping\n" % \ ("trace", `filename`, err.strerror)) continue modulename = os.path.split(results.modules[key])[1] # build list file name by appending a ".cover" to the module name # and sticking it into the specified directory listfilename = os.path.join(coverpath, modulename + ".cover") #sys.stderr.write("modulename: %(modulename)s\n" # "filename: %(filename)s\n" # "coverpath: %(coverpath)s\n" # "listfilename: %(listfilename)s\n" # "dirname: %(dirname)s\n" # % locals()) try: outfile = open(listfilename, 'w') except IOError, err: sys.stderr.write( '%s: Could not open %s for writing because: %s - skipping\n' % ("trace", `listfilename`, err.strerror)) continue # If desired, get a list of the line numbers which represent # executable content (returned as a dict for better lookup speed) if show_missing: executable_linenos = find_executable_linenos(filename) else: executable_linenos = {} lines_hit = per_file[key] for i in range(len(lines)): line = lines[i] # do the blank/comment match to try to mark more lines # (help the reader find stuff that hasn't been covered) if lines_hit.has_key(i+1): # count precedes the lines that we captured outfile.write('%5d: ' % lines_hit[i+1]) elif blank.match(line): # blank lines and comments are preceded by dots outfile.write(' . ') else: # lines preceded by no marks weren't hit # Highlight them if so indicated, unless the line contains # '#pragma: NO COVER' (it is possible to embed this into # the text as a non-comment; no easy fix) if executable_linenos.has_key(i+1) and \ string.find(lines[i], string.join(['#pragma', 'NO COVER'])) == -1: outfile.write('>>>>>> ') else: outfile.write(' '*7) outfile.write(string.expandtabs(lines[i], 8)) outfile.close() if save_counts: # try and store counts and module info into dirname try: marshal.dump(results.counts, open(os.path.join(dirname, "counts"), "w")) marshal.dump(results.modules, open(os.path.join(dirname, "modules"), "w")) except IOError, err: sys.stderr.write("cannot save counts/modules files because %s" % err.strerror) # There is a lot of code shared between these two classes even though # it is straightforward to make a super class to share code. However, # for performance reasons (remember, this is called at every step) I # wanted to keep everything to a single function call. Also, by # staying within a single scope, I don't have to temporarily nullify # sys.settrace, which would slow things down even more. class Coverage: def __init__(self, ignore = Ignore()): self.ignore = ignore self.ignore_names = ignore._ignore # access ignore's cache (speed hack) self.counts = {} # keys are (filename, linenumber) self.modules = {} # maps filename -> module name def trace(self, frame, why, arg): if why == 'line': # something is fishy about getting the file name filename = frame.f_globals.get("__file__", None) if filename is None: filename = frame.f_code.co_filename modulename = frame.f_globals["__name__"] # We do this next block to keep from having to make methods # calls, which also requires resetting the trace ignore_it = self.ignore_names.get(modulename, -1) if ignore_it == -1: # unknown filename sys.settrace(None) ignore_it = self.ignore.names(filename, modulename) sys.settrace(self.trace) # record the module name for every file self.modules[filename] = modulename if not ignore_it: lineno = frame.f_lineno # record the file name and line number of every trace key = (filename, lineno) self.counts[key] = self.counts.get(key, 0) + 1 return self.trace def results(self): return CoverageResults(self.counts, self.modules) class Trace: def __init__(self, ignore = Ignore()): self.ignore = ignore self.ignore_names = ignore._ignore # access ignore's cache (speed hack) self.files = {'': None} # stores lines from the .py file, or None def trace(self, frame, why, arg): if why == 'line': filename = frame.f_code.co_filename modulename = frame.f_globals["__name__"] # We do this next block to keep from having to make methods # calls, which also requires resetting the trace ignore_it = self.ignore_names.get(modulename, -1) if ignore_it == -1: # unknown filename sys.settrace(None) ignore_it = self.ignore.names(filename, modulename) sys.settrace(self.trace) if not ignore_it: lineno = frame.f_lineno files = self.files if filename != '' and not files.has_key(filename): files[filename] = map(string.rstrip, open(filename).readlines()) # If you want to see filenames (the original behaviour), try: # modulename = filename # or, prettier but confusing when several files have the same name # modulename = os.path.basename(filename) if files[filename] != None: print '%s(%d): %s' % (os.path.basename(filename), lineno, files[filename][lineno-1]) else: print '%s(%d): ??' % (modulename, lineno) return self.trace def _err_exit(msg): sys.stderr.write("%s: %s\n" % (sys.argv[0], msg)) sys.exit(1) def main(argv = None): import getopt if argv is None: argv = sys.argv try: opts, prog_argv = getopt.getopt(argv[1:], "tcrRf:d:m", ["help", "version", "trace", "count", "report", "no-report", "file=", "logdir=", "missing", "ignore-module=", "ignore-dir="]) except getopt.error, msg: sys.stderr.write("%s: %s\n" % (sys.argv[0], msg)) sys.stderr.write("Try `%s --help' for more information\n" % sys.argv[0]) sys.exit(1) trace = 0 count = 0 report = 0 no_report = 0 counts_file = None logdir = "." missing = 0 ignore_modules = [] ignore_dirs = [] for opt, val in opts: if opt == "--help": usage(sys.stdout) sys.exit(0) if opt == "--version": sys.stdout.write("trace 2.0\n") sys.exit(0) if opt == "-t" or opt == "--trace": trace = 1 continue if opt == "-c" or opt == "--count": count = 1 continue if opt == "-r" or opt == "--report": report = 1 continue if opt == "-R" or opt == "--no-report": no_report = 1 continue if opt == "-f" or opt == "--file": counts_file = val continue if opt == "-d" or opt == "--logdir": logdir = val continue if opt == "-m" or opt == "--missing": missing = 1 continue if opt == "--ignore-module": ignore_modules.append(val) continue if opt == "--ignore-dir": for s in string.split(val, os.pathsep): s = os.path.expandvars(s) # should I also call expanduser? (after all, could use $HOME) s = string.replace(s, "$prefix", os.path.join(sys.prefix, "lib", "python" + sys.version[:3])) s = string.replace(s, "$exec_prefix", os.path.join(sys.exec_prefix, "lib", "python" + sys.version[:3])) s = os.path.normpath(s) ignore_dirs.append(s) continue assert 0, "Should never get here" if len(prog_argv) == 0: _err_exit("missing name of file to run") if count + trace + report > 1: _err_exit("can only specify one of --trace, --count or --report") if count + trace + report == 0: _err_exit("must specify one of --trace, --count or --report") if report and counts_file is None: _err_exit("--report requires a --file") if report and no_report: _err_exit("cannot specify both --report and --no-report") if logdir is not None: # warn if the directory doesn't exist, but keep on going # (is this the correct behaviour?) if not os.path.isdir(logdir): sys.stderr.write( "trace: WARNING, --logdir directory %s is not available\n" % `logdir`) sys.argv = prog_argv progname = prog_argv[0] if eval(sys.version[:3])>1.3: sys.path[0] = os.path.split(progname)[0] # ??? # everything is ready ignore = Ignore(ignore_modules, ignore_dirs) if trace: t = Trace(ignore) try: run(t.trace, 'execfile(' + `progname` + ')') except IOError, err: _err_exit("Cannot run file %s because: %s" % \ (`sys.argv[0]`, err.strerror)) elif count: t = Coverage(ignore) try: run(t.trace, 'execfile(' + `progname` + ')') except IOError, err: _err_exit("Cannot run file %s because: %s" % \ (`sys.argv[0]`, err.strerror)) except SystemExit: pass results = t.results() # Add another lookup from the program's file name to its import name # This give the right results, but I'm not sure why ... results.modules[progname] = os.path.splitext(progname)[0] if counts_file: # add in archived data, if available try: old_counts, old_modules = marshal.load(open(counts_file, 'rb')) except IOError: pass else: results.update(CoverageResults(old_counts, old_modules)) if not no_report: create_results_log(results, logdir, missing) if counts_file: try: marshal.dump( (results.counts, results.modules), open(counts_file, 'wb')) except IOError, err: _err_exit("Cannot save counts file %s because: %s" % \ (`counts_file`, err.strerror)) elif report: old_counts, old_modules = marshal.load(open(counts_file, 'rb')) results = CoverageResults(old_counts, old_modules) create_results_log(results, logdir, missing) else: assert 0, "Should never get here" if __name__=='__main__': main() From python-dev@python.org Thu Aug 3 20:38:10 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 3 Aug 2000 12:38:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ext ext.tex,1.80,1.81 Message-ID: <200008031938.MAA21177@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ext In directory slayer.i.sourceforge.net:/tmp/cvs-serv21136/Doc/ext Modified Files: ext.tex Log Message: Added descriptions of the new parser markers for PyArg_ParseTuple(). Index: ext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ext/ext.tex,v retrieving revision 1.80 retrieving revision 1.81 diff -C2 -r1.80 -r1.81 *** ext.tex 2000/07/09 16:27:33 1.80 --- ext.tex 2000/08/03 19:38:07 1.81 *************** *** 677,710 **** \begin{description} ! \item[\samp{s} (string) {[char *]}] ! Convert a Python string to a C pointer to a character string. You ! must not provide storage for the string itself; a pointer to an ! existing string is stored into the character pointer variable whose ! address you pass. The C string is null-terminated. The Python string ! must not contain embedded null bytes; if it does, a \exception{TypeError} ! exception is raised. ! ! \item[\samp{s\#} (string) {[char *, int]}] ! This variant on \samp{s} stores into two C variables, the first one ! a pointer to a character string, the second one its length. In this ! case the Python string may contain embedded null bytes. \item[\samp{z} (string or \code{None}) {[char *]}] Like \samp{s}, but the Python object may also be \code{None}, in which case the C pointer is set to \NULL{}. ! \item[\samp{z\#} (string or \code{None}) {[char *, int]}] This is to \samp{s\#} as \samp{z} is to \samp{s}. ! \item[\samp{u} (Unicode string) {[Py_UNICODE *]}] Convert a Python Unicode object to a C pointer to a null-terminated ! buffer of Unicode (UCS-2) data. As with \samp{s}, there is no need to provide storage for the Unicode data buffer; a pointer to the existing Unicode data is stored into the Py_UNICODE pointer variable whose address you pass. ! \item[\samp{u\#} (Unicode string) {[Py_UNICODE *, int]}] This variant on \samp{u} stores into two C variables, the first one a pointer to a Unicode data buffer, the second one its length. \item[\samp{b} (integer) {[char]}] --- 677,771 ---- \begin{description} ! \item[\samp{s} (string or Unicode object) {[char *]}] ! Convert a Python string or Unicode object to a C pointer to a ! character string. You must not provide storage for the string ! itself; a pointer to an existing string is stored into the character ! pointer variable whose address you pass. The C string is ! null-terminated. The Python string must not contain embedded null ! bytes; if it does, a \exception{TypeError} exception is raised. ! Unicode objects are converted to C strings using the default ! encoding. If this conversion fails, an \exception{UnicodeError} is ! raised. + \item[\samp{s\#} (string, Unicode or any read buffer compatible object) + {[char *, int]}] + This variant on \samp{s} stores into two C variables, the first one a + pointer to a character string, the second one its length. In this + case the Python string may contain embedded null bytes. Unicode + objects and all other read buffer compatible objects pass back a + reference to the raw internal data representation. In case of Unicode + objects the pointer points to a null-terminated buffer of 16-bit + Py_UNICODE (UTF-16) data. + \item[\samp{z} (string or \code{None}) {[char *]}] Like \samp{s}, but the Python object may also be \code{None}, in which case the C pointer is set to \NULL{}. ! \item[\samp{z\#} (string or \code{None} or any read buffer compatible object) ! {[char *, int]}] This is to \samp{s\#} as \samp{z} is to \samp{s}. ! \item[\samp{u} (Unicode object) {[Py_UNICODE *]}] Convert a Python Unicode object to a C pointer to a null-terminated ! buffer of 16-bit Unicode (UTF-16) data. As with \samp{s}, there is no need to provide storage for the Unicode data buffer; a pointer to the existing Unicode data is stored into the Py_UNICODE pointer variable whose address you pass. ! \item[\samp{u\#} (Unicode object) {[Py_UNICODE *, int]}] This variant on \samp{u} stores into two C variables, the first one a pointer to a Unicode data buffer, the second one its length. + + \item[\samp{es} (string, Unicode object or character buffer compatible + object) {[const char *encoding, char **buffer]}] + This variant on \samp{s} is used for encoding Unicode and objects + convertible to Unicode into a character buffer. It only works for + encoded data without embedded \NULL{} bytes. + + The variant reads one C variable and stores into two C variables, the + first one a pointer to an encoding name string (\var{encoding}), the + second a pointer to a pointer to a character buffer (\var{**buffer}, + the buffer used for storing the encoded data) and the third one a + pointer to an integer (\var{*buffer_length}, the buffer length). + + The encoding name must map to a registered codec. If set to \NULL{}, + the default encoding is used. + + \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed + size using \cfunction{PyMem_NEW()}, copy the encoded data into this + buffer and adjust \var{*buffer} to reference the newly allocated + storage. The caller is responsible for calling + \cfunction{PyMem_Free()} to free the allocated buffer after usage. + + \item[\samp{es\#} (string, Unicode object or character buffer compatible + object) {[const char *encoding, char **buffer, int *buffer_length]}] + This variant on \samp{s\#} is used for encoding Unicode and objects + convertible to Unicode into a character buffer. It reads one C + variable and stores into two C variables, the first one a pointer to + an encoding name string (\var{encoding}), the second a pointer to a + pointer to a character buffer (\var{**buffer}, the buffer used for + storing the encoded data) and the third one a pointer to an integer + (\var{*buffer_length}, the buffer length). + + The encoding name must map to a registered codec. If set to \NULL{}, + the default encoding is used. + + There are two modes of operation: + + If \var{*buffer} points a \NULL{} pointer, + \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed + size using \cfunction{PyMem_NEW()}, copy the encoded data into this + buffer and adjust \var{*buffer} to reference the newly allocated + storage. The caller is responsible for calling + \cfunction{PyMem_Free()} to free the allocated buffer after usage. + + If \var{*buffer} points to a non-\NULL{} pointer (an already allocated + buffer), \cfuntion{PyArg_ParseTuple()} will use this location as + buffer and interpret \var{*buffer_length} as buffer size. It will then + copy the encoded data into the buffer and 0-terminate it. Buffer + overflow is signalled with an exception. + + In both cases, \var{*buffer_length} is set to the length of the + encoded data without the trailing 0-byte. \item[\samp{b} (integer) {[char]}] From python-dev@python.org Thu Aug 3 21:57:47 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 3 Aug 2000 13:57:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib cgi.py,1.48,1.49 Message-ID: <200008032057.NAA02997@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2916 Modified Files: cgi.py Log Message: Remove very long doc string (it's all in the docs) Modify parse_qsl to interpret 'a=b=c' as key 'a' and value 'b=c' (which matches Perl's CGI.pm) Index: cgi.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/cgi.py,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -r1.48 -r1.49 *** cgi.py 2000/07/16 12:04:30 1.48 --- cgi.py 2000/08/03 20:57:44 1.49 *************** *** 5,408 **** This module defines a number of utilities for use by CGI scripts written in Python. - - - Introduction - ------------ - - A CGI script is invoked by an HTTP server, usually to process user - input submitted through an HTML or element. - - Most often, CGI scripts live in the server's special cgi-bin - directory. The HTTP server places all sorts of information about the - request (such as the client's hostname, the requested URL, the query - string, and lots of other goodies) in the script's shell environment, - executes the script, and sends the script's output back to the client. - - The script's input is connected to the client too, and sometimes the - form data is read this way; at other times the form data is passed via - the "query string" part of the URL. This module (cgi.py) is intended - to take care of the different cases and provide a simpler interface to - the Python script. It also provides a number of utilities that help - in debugging scripts, and the latest addition is support for file - uploads from a form (if your browser supports it -- Grail 0.3 and - Netscape 2.0 do). - - The output of a CGI script should consist of two sections, separated - by a blank line. The first section contains a number of headers, - telling the client what kind of data is following. Python code to - generate a minimal header section looks like this: - - print "Content-type: text/html" # HTML is following - print # blank line, end of headers - - The second section is usually HTML, which allows the client software - to display nicely formatted text with header, in-line images, etc. - Here's Python code that prints a simple piece of HTML: - - print "CGI script output" - print "

    This is my first CGI script

    " - print "Hello, world!" - - It may not be fully legal HTML according to the letter of the - standard, but any browser will understand it. - - - Using the cgi module - -------------------- - - Begin by writing "import cgi". Don't use "from cgi import *" -- the - module defines all sorts of names for its own use or for backward - compatibility that you don't want in your namespace. - - It's best to use the FieldStorage class. The other classes define in this - module are provided mostly for backward compatibility. Instantiate it - exactly once, without arguments. This reads the form contents from - standard input or the environment (depending on the value of various - environment variables set according to the CGI standard). Since it may - consume standard input, it should be instantiated only once. - - The FieldStorage instance can be accessed as if it were a Python - dictionary. For instance, the following code (which assumes that the - Content-type header and blank line have already been printed) checks that - the fields "name" and "addr" are both set to a non-empty string: - - form = cgi.FieldStorage() - form_ok = 0 - if form.has_key("name") and form.has_key("addr"): - if form["name"].value != "" and form["addr"].value != "": - form_ok = 1 - if not form_ok: - print "

    Error

    " - print "Please fill in the name and addr fields." - return - ...further form processing here... - - Here the fields, accessed through form[key], are themselves instances - of FieldStorage (or MiniFieldStorage, depending on the form encoding). - - If the submitted form data contains more than one field with the same - name, the object retrieved by form[key] is not a (Mini)FieldStorage - instance but a list of such instances. If you are expecting this - possibility (i.e., when your HTML form contains multiple fields with - the same name), use the type() function to determine whether you have - a single instance or a list of instances. For example, here's code - that concatenates any number of username fields, separated by commas: - - username = form["username"] - if type(username) is type([]): - # Multiple username fields specified - usernames = "" - for item in username: - if usernames: - # Next item -- insert comma - usernames = usernames + "," + item.value - else: - # First item -- don't insert comma - usernames = item.value - else: - # Single username field specified - usernames = username.value - - If a field represents an uploaded file, the value attribute reads the - entire file in memory as a string. This may not be what you want. You can - test for an uploaded file by testing either the filename attribute or the - file attribute. You can then read the data at leisure from the file - attribute: - - fileitem = form["userfile"] - if fileitem.file: - # It's an uploaded file; count lines - linecount = 0 - while 1: - line = fileitem.file.readline() - if not line: break - linecount = linecount + 1 - - The file upload draft standard entertains the possibility of uploading - multiple files from one field (using a recursive multipart/* - encoding). When this occurs, the item will be a dictionary-like - FieldStorage item. This can be determined by testing its type - attribute, which should have the value "multipart/form-data" (or - perhaps another string beginning with "multipart/"). It this case, it - can be iterated over recursively just like the top-level form object. - - When a form is submitted in the "old" format (as the query string or as a - single data part of type application/x-www-form-urlencoded), the items - will actually be instances of the class MiniFieldStorage. In this case, - the list, file and filename attributes are always None. - - - Old classes - ----------- - - These classes, present in earlier versions of the cgi module, are still - supported for backward compatibility. New applications should use the - FieldStorage class. - - SvFormContentDict: single value form content as dictionary; assumes each - field name occurs in the form only once. - - FormContentDict: multiple value form content as dictionary (the form - items are lists of values). Useful if your form contains multiple - fields with the same name. - - Other classes (FormContent, InterpFormContentDict) are present for - backwards compatibility with really old applications only. If you still - use these and would be inconvenienced when they disappeared from a next - version of this module, drop me a note. - - - Functions - --------- - - These are useful if you want more control, or if you want to employ - some of the algorithms implemented in this module in other - circumstances. - - parse(fp, [environ, [keep_blank_values, [strict_parsing]]]): parse a - form into a Python dictionary. - - parse_qs(qs, [keep_blank_values, [strict_parsing]]): parse a query - string (data of type application/x-www-form-urlencoded). Data are - returned as a dictionary. The dictionary keys are the unique query - variable names and the values are lists of vales for each name. - - parse_qsl(qs, [keep_blank_values, [strict_parsing]]): parse a query - string (data of type application/x-www-form-urlencoded). Data are - returned as a list of (name, value) pairs. - - parse_multipart(fp, pdict): parse input of type multipart/form-data (for - file uploads). - - parse_header(string): parse a header like Content-type into a main - value and a dictionary of parameters. - - test(): complete test program. - - print_environ(): format the shell environment in HTML. - - print_form(form): format a form in HTML. - - print_environ_usage(): print a list of useful environment variables in - HTML. - - escape(): convert the characters "&", "<" and ">" to HTML-safe - sequences. Use this if you need to display text that might contain - such characters in HTML. To translate URLs for inclusion in the HREF - attribute of an tag, use urllib.quote(). - - log(fmt, ...): write a line to a log file; see docs for initlog(). - - - Caring about security - --------------------- - - There's one important rule: if you invoke an external program (e.g. - via the os.system() or os.popen() functions), make very sure you don't - pass arbitrary strings received from the client to the shell. This is - a well-known security hole whereby clever hackers anywhere on the web - can exploit a gullible CGI script to invoke arbitrary shell commands. - Even parts of the URL or field names cannot be trusted, since the - request doesn't have to come from your form! - - To be on the safe side, if you must pass a string gotten from a form - to a shell command, you should make sure the string contains only - alphanumeric characters, dashes, underscores, and periods. - - - Installing your CGI script on a Unix system - ------------------------------------------- - - Read the documentation for your HTTP server and check with your local - system administrator to find the directory where CGI scripts should be - installed; usually this is in a directory cgi-bin in the server tree. - - Make sure that your script is readable and executable by "others"; the - Unix file mode should be 755 (use "chmod 755 filename"). Make sure - that the first line of the script contains #! starting in column 1 - followed by the pathname of the Python interpreter, for instance: - - #! /usr/local/bin/python - - Make sure the Python interpreter exists and is executable by "others". - - Note that it's probably not a good idea to use #! /usr/bin/env python - here, since the Python interpreter may not be on the default path - given to CGI scripts!!! - - Make sure that any files your script needs to read or write are - readable or writable, respectively, by "others" -- their mode should - be 644 for readable and 666 for writable. This is because, for - security reasons, the HTTP server executes your script as user - "nobody", without any special privileges. It can only read (write, - execute) files that everybody can read (write, execute). The current - directory at execution time is also different (it is usually the - server's cgi-bin directory) and the set of environment variables is - also different from what you get at login. in particular, don't count - on the shell's search path for executables ($PATH) or the Python - module search path ($PYTHONPATH) to be set to anything interesting. - - If you need to load modules from a directory which is not on Python's - default module search path, you can change the path in your script, - before importing other modules, e.g.: - - import sys - sys.path.insert(0, "/usr/home/joe/lib/python") - sys.path.insert(0, "/usr/local/lib/python") - - This way, the directory inserted last will be searched first! - - Instructions for non-Unix systems will vary; check your HTTP server's - documentation (it will usually have a section on CGI scripts). - - - Testing your CGI script - ----------------------- - - Unfortunately, a CGI script will generally not run when you try it - from the command line, and a script that works perfectly from the - command line may fail mysteriously when run from the server. There's - one reason why you should still test your script from the command - line: if it contains a syntax error, the python interpreter won't - execute it at all, and the HTTP server will most likely send a cryptic - error to the client. - - Assuming your script has no syntax errors, yet it does not work, you - have no choice but to read the next section: - - - Debugging CGI scripts - --------------------- - - First of all, check for trivial installation errors -- reading the - section above on installing your CGI script carefully can save you a - lot of time. If you wonder whether you have understood the - installation procedure correctly, try installing a copy of this module - file (cgi.py) as a CGI script. When invoked as a script, the file - will dump its environment and the contents of the form in HTML form. - Give it the right mode etc, and send it a request. If it's installed - in the standard cgi-bin directory, it should be possible to send it a - request by entering a URL into your browser of the form: - - http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home - - If this gives an error of type 404, the server cannot find the script - -- perhaps you need to install it in a different directory. If it - gives another error (e.g. 500), there's an installation problem that - you should fix before trying to go any further. If you get a nicely - formatted listing of the environment and form content (in this - example, the fields should be listed as "addr" with value "At Home" - and "name" with value "Joe Blow"), the cgi.py script has been - installed correctly. If you follow the same procedure for your own - script, you should now be able to debug it. - - The next step could be to call the cgi module's test() function from - your script: replace its main code with the single statement - - cgi.test() - - This should produce the same results as those gotten from installing - the cgi.py file itself. - - When an ordinary Python script raises an unhandled exception (e.g., - because of a typo in a module name, a file that can't be opened, - etc.), the Python interpreter prints a nice traceback and exits. - While the Python interpreter will still do this when your CGI script - raises an exception, most likely the traceback will end up in one of - the HTTP server's log file, or be discarded altogether. - - Fortunately, once you have managed to get your script to execute - *some* code, it is easy to catch exceptions and cause a traceback to - be printed. The test() function below in this module is an example. - Here are the rules: - - 1. Import the traceback module (before entering the - try-except!) - - 2. Make sure you finish printing the headers and the blank - line early - - 3. Assign sys.stderr to sys.stdout - - 3. Wrap all remaining code in a try-except statement - - 4. In the except clause, call traceback.print_exc() - - For example: - - import sys - import traceback - print "Content-type: text/html" - print - sys.stderr = sys.stdout - try: - ...your code here... - except: - print "\n\n
    "
    -                 traceback.print_exc()
    - 
    - Notes: The assignment to sys.stderr is needed because the traceback
    - prints to sys.stderr.  The print "\n\n
    " statement is necessary to
    - disable the word wrapping in HTML.
    - 
    - If you suspect that there may be a problem in importing the traceback
    - module, you can use an even more robust approach (which only uses
    - built-in modules):
    - 
    -         import sys
    -         sys.stderr = sys.stdout
    -         print "Content-type: text/plain"
    -         print
    -         ...your code here...
    - 
    - This relies on the Python interpreter to print the traceback.  The
    - content type of the output is set to plain text, which disables all
    - HTML processing.  If your script works, the raw HTML will be displayed
    - by your client.  If it raises an exception, most likely after the
    - first two lines have been printed, a traceback will be displayed.
    - Because no HTML interpretation is going on, the traceback will
    - readable.
    - 
    - When all else fails, you may want to insert calls to log() to your
    - program or even to a copy of the cgi.py file.  Note that this requires
    - you to set cgi.logfile to the name of a world-writable file before the
    - first call to log() is made!
    - 
    - Good luck!
    - 
    - 
    - Common problems and solutions
    - -----------------------------
    - 
    - - Most HTTP servers buffer the output from CGI scripts until the
    - script is completed.  This means that it is not possible to display a
    - progress report on the client's display while the script is running.
    - 
    - - Check the installation instructions above.
    - 
    - - Check the HTTP server's log files.  ("tail -f logfile" in a separate
    - window may be useful!)
    - 
    - - Always check a script for syntax errors first, by doing something
    - like "python script.py".
    - 
    - - When using any of the debugging techniques, don't forget to add
    - "import sys" to the top of the script.
    - 
    - - When invoking external programs, make sure they can be found.
    - Usually, this means using absolute path names -- $PATH is usually not
    - set to a very useful value in a CGI script.
    - 
    - - When reading or writing external files, make sure they can be read
    - or written by every user on the system.
    - 
    - - Don't try to give a CGI script a set-uid mode.  This doesn't work on
    - most systems, and is a security liability as well.
    - 
      """
      
    ! # XXX The module is getting pretty heavy with all those docstrings.
    ! # Perhaps there should be a slimmed version that doesn't contain all those 
    ! # backwards compatible and debugging classes and functions?
      
      # History
    --- 5,12 ----
      This module defines a number of utilities for use by CGI scripts
      written in Python.
      """
      
    ! # XXX Perhaps there should be a slimmed version that doesn't contain
    ! # all those backwards compatible and debugging classes and functions?
      
      # History
    ***************
    *** 593,597 ****
          r=[]
          for name_value in name_value_pairs:
    !         nv = string.splitfields(name_value, '=')
              if len(nv) != 2:
                  if strict_parsing:
    --- 197,201 ----
          r=[]
          for name_value in name_value_pairs:
    !         nv = string.splitfields(name_value, '=', 1)
              if len(nv) != 2:
                  if strict_parsing:
    
    
    
    From python-dev@python.org  Thu Aug  3 22:18:20 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Thu, 3 Aug 2000 14:18:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile.deps,1.38,1.39
    Message-ID: <200008032118.OAA13507@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv13403
    
    Modified Files:
    	Makefile.deps 
    Log Message:
    
    Break the "Python Services" chapter into two: "Python Runtime Services"
    (still at the start of the manual), and "Python Language Services" (late
    in the manual).  Moved "Restricted Execution" to just before "Python
    Language Services."
    
    
    Index: Makefile.deps
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/Makefile.deps,v
    retrieving revision 1.38
    retrieving revision 1.39
    diff -C2 -r1.38 -r1.39
    *** Makefile.deps	2000/07/12 04:22:53	1.38
    --- Makefile.deps	2000/08/03 21:18:16	1.39
    ***************
    *** 192,195 ****
    --- 192,196 ----
      	../lib/netdata.tex \
      	../lib/markup.tex \
    + 	../lib/language.tex \
      	../lib/libpycompile.tex \
      	../lib/libcompileall.tex \
    
    
    
    From python-dev@python.org  Thu Aug  3 22:18:21 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Thu, 3 Aug 2000 14:18:21 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib language.tex,NONE,1.1 lib.tex,1.158,1.159 libpython.tex,1.13,1.14
    Message-ID: <200008032118.OAA13514@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv13403/lib
    
    Modified Files:
    	lib.tex libpython.tex 
    Added Files:
    	language.tex 
    Log Message:
    
    Break the "Python Services" chapter into two: "Python Runtime Services"
    (still at the start of the manual), and "Python Language Services" (late
    in the manual).  Moved "Restricted Execution" to just before "Python
    Language Services."
    
    
    --- NEW FILE ---
    \chapter{Python Language Services
             \label{language}}
    
    Python provides a number of modules to assist in working with the
    Python language.  These module support tokenizing, parsing, syntax
    analysis, bytecode disassembly, and various other facilities.
    
    These modules include:
    
    \localmoduletable
    
    Index: lib.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v
    retrieving revision 1.158
    retrieving revision 1.159
    diff -C2 -r1.158 -r1.159
    *** lib.tex	2000/07/12 04:22:53	1.158
    --- lib.tex	2000/08/03 21:18:18	1.159
    ***************
    *** 72,76 ****
      \input{libfuncs}
      
    ! \input{libpython}		% Python Services
      \input{libsys}
      \input{libgc}
    --- 72,76 ----
      \input{libfuncs}
      
    ! \input{libpython}		% Python Runtime Services
      \input{libsys}
      \input{libgc}
    ***************
    *** 88,105 ****
      \input{libimp}
      %\input{libni}
    - \input{libparser}
    - \input{libsymbol}
    - \input{libtoken}
    - \input{libkeyword}
    - \input{libtokenize}
    - \input{libtabnanny}
    - \input{libpyclbr}
      \input{libcode}
      \input{libcodeop}
      \input{libpprint}
      \input{librepr}
    - \input{libpycompile}		% really py_compile
    - \input{libcompileall}
    - \input{libdis}
      \input{libnew}
      \input{libsite}
    --- 88,95 ----
    ***************
    *** 244,251 ****
      \input{libpyexpat}
      
    - \input{librestricted}           % Restricted Execution
    - \input{librexec}
    - \input{libbastion}
    - 
      \input{libmm}			% Multimedia Services
      \input{libaudioop}
    --- 234,237 ----
    ***************
    *** 265,268 ****
    --- 251,270 ----
      \input{libmpz}
      \input{librotor}
    + 
    + \input{librestricted}           % Restricted Execution
    + \input{librexec}
    + \input{libbastion}
    + 
    + \input{language}		% Python Language Services
    + \input{libparser}
    + \input{libsymbol}
    + \input{libtoken}
    + \input{libkeyword}
    + \input{libtokenize}
    + \input{libtabnanny}
    + \input{libpyclbr}
    + \input{libpycompile}		% really py_compile
    + \input{libcompileall}
    + \input{libdis}
      
      %\input{libamoeba}		% AMOEBA ONLY
    
    Index: libpython.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libpython.tex,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** libpython.tex	1998/07/23 17:58:39	1.13
    --- libpython.tex	2000/08/03 21:18:18	1.14
    ***************
    *** 1,4 ****
    ! \chapter{Python Services}
    ! \label{python}
      
      The modules described in this chapter provide a wide range of services
    --- 1,4 ----
    ! \chapter{Python Runtime Services
    !          \label{python}}
      
      The modules described in this chapter provide a wide range of services
    
    
    
    From python-dev@python.org  Thu Aug  3 22:27:08 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Thu, 3 Aug 2000 14:27:08 -0700
    Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.1,1.1.2.2
    Message-ID: <200008032127.OAA14227@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14210
    
    Modified Files:
          Tag: cnri-16-start
    	LICENSE 
    Log Message:
    Correct a few typos.
    
    
    Index: LICENSE
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/LICENSE,v
    retrieving revision 1.1.2.1
    retrieving revision 1.1.2.2
    diff -C2 -r1.1.2.1 -r1.1.2.2
    *** LICENSE	2000/08/02 02:59:02	1.1.2.1
    --- LICENSE	2000/08/03 21:27:05	1.1.2.2
    ***************
    *** 39,43 ****
      
      2. Subject to the terms and conditions of this License Agreement, CNRI
    ! hereby grants Licensee a nonexclusive, royalty-free, world-wide
      license to reproduce, analyze, test, perform and/or display publicly,
      prepare derivative works, distribute, and otherwise use Python 1.6b1
    --- 39,43 ----
      
      2. Subject to the terms and conditions of this License Agreement, CNRI
    ! hereby grants Licensee a non-exclusive, royalty-free, world-wide
      license to reproduce, analyze, test, perform and/or display publicly,
      prepare derivative works, distribute, and otherwise use Python 1.6b1
    ***************
    *** 55,60 ****
      
      3. In the event Licensee prepares a derivative work that is based on
    ! or incorporates Python 1.6b1or any part thereof, and wants to make the
    ! derivative work available to the public as provided herein, then
      Licensee hereby agrees to indicate in any such work the nature of the
      modifications made to Python 1.6b1.
    --- 55,60 ----
      
      3. In the event Licensee prepares a derivative work that is based on
    ! or incorporates Python 1.6b1 or any part thereof, and wants to make
    ! the derivative work available to the public as provided herein, then
      Licensee hereby agrees to indicate in any such work the nature of the
      modifications made to Python 1.6b1.
    
    
    
    From python-dev@python.org  Thu Aug  3 22:28:25 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Thu, 3 Aug 2000 14:28:25 -0700
    Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.2,1.1.2.3
    Message-ID: <200008032128.OAA14410@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14402
    
    Modified Files:
          Tag: cnri-16-start
    	LICENSE 
    Log Message:
    Set release date to August 4 (tomorrow!) per CNRI's request.  Good omen!
    
    
    Index: LICENSE
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/LICENSE,v
    retrieving revision 1.1.2.2
    retrieving revision 1.1.2.3
    diff -C2 -r1.1.2.2 -r1.1.2.3
    *** LICENSE	2000/08/03 21:27:05	1.1.2.2
    --- LICENSE	2000/08/03 21:28:23	1.1.2.3
    ***************
    *** 35,39 ****
      ("Licensee") accessing and otherwise using Python 1.6, beta 1 software
      in source or binary form and its associated documentation, as released
    ! at the www.python.org Internet site on August 5, 2000 ("Python
      1.6b1").
      
    --- 35,39 ----
      ("Licensee") accessing and otherwise using Python 1.6, beta 1 software
      in source or binary form and its associated documentation, as released
    ! at the www.python.org Internet site on August 4, 2000 ("Python
      1.6b1").
      
    
    
    
    From python-dev@python.org  Thu Aug  3 23:11:46 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Thu, 3 Aug 2000 15:11:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cgi,NONE,1.1
    Message-ID: <200008032211.PAA25488@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test/output
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25192/output
    
    Added Files:
    	test_cgi 
    Log Message:
    test the non-multipart sections of the cgi module
    
    
    --- NEW FILE ---
    test_cgi
    ''
    '&'
    '&&'
    '='
    '=&='
    '=a'
    '&=a'
    '=a&'
    '=&a'
    'b=a'
    'b+=a'
    'a=b=a'
    'a=+b=a'
    '&b=a'
    'b&=a'
    'a=a+b&b=b+c'
    'a=a+b&a=b+a'
    'x=1&y=2.0&z=2-3.%2b0'
    'Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env'
    'group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse'
    Testing log
    Testing initlog 1
    Testing log 2
    
    
    
    From python-dev@python.org  Thu Aug  3 23:11:46 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Thu, 3 Aug 2000 15:11:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cgi.py,NONE,1.1
    Message-ID: <200008032211.PAA25480@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25192
    
    Added Files:
    	test_cgi.py 
    Log Message:
    test the non-multipart sections of the cgi module
    
    
    --- NEW FILE ---
    import cgi
    import os
    import sys
    
    class HackedSysModule:
        # The regression test will have real values in sys.argv, which
        # will completely confuse the test of the cgi module 
        argv = []
        stdin = sys.stdin
    
    cgi.sys = HackedSysModule()
    
    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO
    
    class ComparableException:
        def __init__(self, err):
            self.err = err
    
        def __str__(self):
            return str(self.err)
    
        def __cmp__(self, anExc):
            if not isinstance(anExc, Exception):
                return -1
            x = cmp(self.err.__class__, anExc.__class__)
            if x != 0:
                return x
            return cmp(self.err.args, anExc.args)
    
        def __getattr__(self, attr):
            return getattr(self, self.err)
    
    def do_test(buf, method):
        env = {}
        if method == "GET":
            fp = None
            env['REQUEST_METHOD'] = 'GET'
            env['QUERY_STRING'] = buf
        elif method == "POST":
            fp = StringIO(buf)
            env['REQUEST_METHOD'] = 'POST'
            env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
            env['CONTENT_LENGTH'] = str(len(buf))
        else:
            raise ValueError, "unknown method: %s" % method
        try:
            return cgi.parse(fp, env, strict_parsing=1)
        except StandardError, err:
            return ComparableException(err)
    
    # A list of test cases.  Each test case is a a two-tuple that contains
    # a string with the query and a dictionary with the expected result.
        
    parse_test_cases = [
        ("", ValueError("bad query field: ''")),
        ("&", ValueError("bad query field: ''")),
        ("&&", ValueError("bad query field: ''")),
        # Should the next few really be valid?
        ("=", {}),
        ("=&=", {}),
        # This rest seem to make sense
        ("=a", {'': ['a']}),
        ("&=a", ValueError("bad query field: ''")),
        ("=a&", ValueError("bad query field: ''")),
        ("=&a", ValueError("bad query field: 'a'")),
        ("b=a", {'b': ['a']}),
        ("b+=a", {'b ': ['a']}),
        ("a=b=a", {'a': ['b=a']}),
        ("a=+b=a", {'a': [' b=a']}),
        ("&b=a", ValueError("bad query field: ''")),
        ("b&=a", ValueError("bad query field: 'b'")),
        ("a=a+b&b=b+c", {'a': ['a b'], 'b': ['b c']}),
        ("a=a+b&a=b+a", {'a': ['a b', 'b a']}),
        ("x=1&y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}),
        ("Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env",
         {'Hbc5161168c542333633315dee1182227:key_store_seqid': ['400006'],
          'cuyer': ['r'],
          'expire': ['964546263'],
          'kid': ['130003.300038'],
          'lobale': ['en-US'],
          'order_id': ['0bb2e248638833d48cb7fed300000f1b'],
          'ss': ['env'],
          'view': ['bustomer'],
          }),
        
        ("group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse",
         {'SUBMIT': ['Browse'],
          '_assigned_to': ['31392'],
          '_category': ['100'],
          '_status': ['1'],
          'group_id': ['5470'],
          'set': ['custom'],
          })
        ]
    
    def norm(list):
        if type(list) == type([]):
            list.sort()
        return list
    
    def first_elts(list):
        return map(lambda x:x[0], list)
    
    def first_second_elts(list):
        return map(lambda p:(p[0], p[1][0]), list)
    
    def main():
        for orig, expect in parse_test_cases:
            # Test basic parsing
            print repr(orig)
            d = do_test(orig, "GET")
            assert d == expect, "Error parsing %s" % repr(orig)
            d = do_test(orig, "POST")
            assert d == expect, "Error parsing %s" % repr(orig)
    
            d = {'QUERY_STRING': orig}
            fcd = cgi.FormContentDict(d)
            sd = cgi.SvFormContentDict(d)
            if type(expect) == type({}):
                # test dict interface
                assert len(expect) == len(fcd)
                assert norm(expect.keys()) == norm(fcd.keys())
                assert norm(expect.values()) == norm(fcd.values())
                assert norm(expect.items()) == norm(fcd.items())
                for key in expect.keys():
                    expect_val = expect[key]
                    assert fcd.has_key(key)
                    assert norm(fcd[key]) == norm(expect[key])
                    if len(expect_val) > 1:
                        single_value = 0
                    else:
                        single_value = 1
                    try:
                        val = sd[key]
                    except IndexError:
                        assert not single_value
                    else:
                        assert single_value
                        assert val == expect_val[0]
                    assert norm(sd.getlist(key)) == norm(expect_val)
                    if single_value:
                        assert norm(sd.values()) == \
                               first_elts(norm(expect.values()))
                        assert norm(sd.items()) == \
                               first_second_elts(norm(expect.items()))
    
        # Test the weird FormContentDict classes
        env = {'QUERY_STRING': "x=1&y=2.0&z=2-3.%2b0&1=1abc"}
        expect = {'x': 1, 'y': 2.0, 'z': '2-3.+0', '1': '1abc'}
        d = cgi.InterpFormContentDict(env)
        for k, v in expect.items():
            assert d[k] == v
        for k, v in d.items():
            assert expect[k] == v
        assert norm(expect.values()) == norm(d.values())
    
        print "Testing log"
        cgi.initlog()
        cgi.log("Testing")
        cgi.logfp = sys.stdout
        cgi.initlog("%s", "Testing initlog 1")
        cgi.log("%s", "Testing log 2")
        if os.path.exists("/dev/null"):
            cgi.logfp = None
            cgi.logfile = "/dev/null"
            cgi.initlog("%s", "Testing log 3")
            cgi.log("Testing log 4")
    
    main()
    
    
    
    From python-dev@python.org  Fri Aug  4 02:28:42 2000
    From: python-dev@python.org (Greg Ward)
    Date: Thu, 3 Aug 2000 18:28:42 -0700
    Subject: [Python-checkins] CVS: distutils/distutils ccompiler.py,1.31,1.32 unixccompiler.py,1.29,1.30
    Message-ID: <200008040128.SAA01116@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1090
    
    Modified Files:
    	ccompiler.py unixccompiler.py 
    Log Message:
    Added 'debug' flag to 'find_library_file()'.
    
    Index: ccompiler.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/ccompiler.py,v
    retrieving revision 1.31
    retrieving revision 1.32
    diff -C2 -r1.31 -r1.32
    *** ccompiler.py	2000/08/02 01:38:20	1.31
    --- ccompiler.py	2000/08/04 01:28:39	1.32
    ***************
    *** 683,690 ****
              raise NotImplementedError
      
    !     def find_library_file (self, dirs, lib):
              """Search the specified list of directories for a static or shared
    !         library file 'lib' and return the full path to that file. Return
    !         None if it wasn't found in any of the specified directories.
              """
              raise NotImplementedError
    --- 683,692 ----
              raise NotImplementedError
      
    !     def find_library_file (self, dirs, lib, debug=0):
              """Search the specified list of directories for a static or shared
    !         library file 'lib' and return the full path to that file.  If
    !         'debug' true, look for a debugging version (if that makes sense on
    !         the current platform).  Return None if 'lib' wasn't found in any of
    !         the specified directories.
              """
              raise NotImplementedError
    
    Index: unixccompiler.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/unixccompiler.py,v
    retrieving revision 1.29
    retrieving revision 1.30
    diff -C2 -r1.29 -r1.30
    *** unixccompiler.py	2000/07/27 01:23:19	1.29
    --- unixccompiler.py	2000/08/04 01:28:39	1.30
    ***************
    *** 318,322 ****
      
      
    !     def find_library_file (self, dirs, lib):
      
              for dir in dirs:
    --- 318,322 ----
      
      
    !     def find_library_file (self, dirs, lib, debug=0):
      
              for dir in dirs:
    
    
    
    From python-dev@python.org  Fri Aug  4 02:29:29 2000
    From: python-dev@python.org (Greg Ward)
    Date: Thu, 3 Aug 2000 18:29:29 -0700
    Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.37,1.38
    Message-ID: <200008040129.SAA01186@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1176
    
    Modified Files:
    	msvccompiler.py 
    Log Message:
    Added 'debug' flag to 'find_library_file()', and changed code to handle it.
    
    Index: msvccompiler.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v
    retrieving revision 1.37
    retrieving revision 1.38
    diff -C2 -r1.37 -r1.38
    *** msvccompiler.py	2000/08/02 00:01:56	1.37
    --- msvccompiler.py	2000/08/04 01:29:27	1.38
    ***************
    *** 475,485 ****
      
      
    !     def find_library_file (self, dirs, lib):
    ! 
              for dir in dirs:
    !             libfile = os.path.join (dir, self.library_filename (lib))
    !             if os.path.exists (libfile):
    !                 return libfile
    ! 
              else:
                  # Oops, didn't find it in *any* of 'dirs'
    --- 475,490 ----
      
      
    !     def find_library_file (self, dirs, lib, debug=0):
    !         # Prefer a debugging library if found (and requested), but deal
    !         # with it if we don't have one.
    !         if debug:
    !             try_names = [lib + "_d", lib]
    !         else:
    !             try_names = [lib]
              for dir in dirs:
    !             for name in try_names:
    !                 libfile = os.path.join(dir, self.library_filename (name))
    !                 if os.path.exists(libfile):
    !                     return libfile
              else:
                  # Oops, didn't find it in *any* of 'dirs'
    
    
    
    From python-dev@python.org  Fri Aug  4 02:30:06 2000
    From: python-dev@python.org (Greg Ward)
    Date: Thu, 3 Aug 2000 18:30:06 -0700
    Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.2,1.3
    Message-ID: <200008040130.SAA01330@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1235
    
    Modified Files:
    	bcppcompiler.py 
    Log Message:
    Rewrote 'find_library_file()' much more cleanly (and consistently with
    MSVCCompiler's version, to aid in factoring common code out of the two 
    classes when the time comes).
    
    Index: bcppcompiler.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** bcppcompiler.py	2000/08/02 01:03:23	1.2
    --- bcppcompiler.py	2000/08/04 01:30:03	1.3
    ***************
    *** 358,383 ****
      
          def find_library_file (self, dirs, lib, debug=0):
    !         # find library file
              # bcpp_xxx.lib is better than xxx.lib
              # and xxx_d.lib is better than xxx.lib if debug is set
              for dir in dirs:
    !             if debug:
    !                 libfile = os.path.join (
    !                     dir, self.library_filename ("bcpp_" + lib + "_d"))
    !                 if os.path.exists (libfile):
    !                     return libfile
    !             libfile = os.path.join (
    !                 dir, self.library_filename ("bcpp_" + lib))
    !             if os.path.exists (libfile):
    !                 return libfile
    !             if debug:
    !                 libfile = os.path.join (
    !                     dir, self.library_filename(lib + '_d'))
    !                 if os.path.exists (libfile):
                          return libfile
    -             libfile = os.path.join (dir, self.library_filename (lib))
    -             if os.path.exists (libfile):
    -                 return libfile
    - 
              else:
                  # Oops, didn't find it in *any* of 'dirs'
    --- 358,381 ----
      
          def find_library_file (self, dirs, lib, debug=0):
    !         # List of effective library names to try, in order of preference:
              # bcpp_xxx.lib is better than xxx.lib
              # and xxx_d.lib is better than xxx.lib if debug is set
    +         #
    +         # The "bcpp_" prefix is to handle a Python installation for people
    +         # with multiple compilers (primarily Distutils hackers, I suspect
    +         # ;-).  The idea is they'd have one static library for each
    +         # compiler they care about, since (almost?) every Windows compiler
    +         # seems to have a different format for static libraries.
    +         if debug:
    +             dlib = (lib + "_d")
    +             try_names = ("bcpp_" + dlib, "bcpp_" + lib, dlib, lib)
    +         else:
    +             try_names = ("bcpp_" + lib, lib)
    + 
              for dir in dirs:
    !             for name in try_names:
    !                 libfile = os.path.join(dir, self.library_filename(name))
    !                 if os.path.exists(libfile):
                          return libfile
              else:
                  # Oops, didn't find it in *any* of 'dirs'
    
    
    
    From python-dev@python.org  Fri Aug  4 02:31:15 2000
    From: python-dev@python.org (Greg Ward)
    Date: Thu, 3 Aug 2000 18:31:15 -0700
    Subject: [Python-checkins] CVS: distutils/distutils ccompiler.py,1.32,1.33
    Message-ID: <200008040131.SAA01445@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1428
    
    Modified Files:
    	ccompiler.py 
    Log Message:
    Added 'debug_print()'.
    
    Index: ccompiler.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/ccompiler.py,v
    retrieving revision 1.32
    retrieving revision 1.33
    diff -C2 -r1.32 -r1.33
    *** ccompiler.py	2000/08/04 01:28:39	1.32
    --- ccompiler.py	2000/08/04 01:31:13	1.33
    ***************
    *** 784,787 ****
    --- 784,792 ----
                  print msg
      
    +     def debug_print (self, msg):
    +         from distutils.core import DEBUG
    +         if DEBUG:
    +             print msg
    + 
          def warn (self, msg):
              sys.stderr.write ("warning: %s\n" % msg)
    
    
    
    From python-dev@python.org  Fri Aug  4 03:34:43 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Thu, 3 Aug 2000 19:34:43 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects rangeobject.c,2.17,2.18
    Message-ID: <200008040234.TAA13057@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv13048
    
    Modified Files:
    	rangeobject.c 
    Log Message:
    
    snprintf() is not portable, so continue to use sprintf() until a portable
    snprintf() is available.
    
    
    Index: rangeobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v
    retrieving revision 2.17
    retrieving revision 2.18
    diff -C2 -r2.17 -r2.18
    *** rangeobject.c	2000/08/03 17:43:02	2.17
    --- rangeobject.c	2000/08/04 02:34:41	2.18
    ***************
    *** 66,71 ****
      
      	if (r->start == 0 && r->step == 1) {
    ! 		snprintf(buf1, sizeof(buf1), "xrange(%ld)",
    ! 			 r->start + r->len * r->step);
      	}
      	else {
    --- 66,70 ----
      
      	if (r->start == 0 && r->step == 1) {
    ! 		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
      	}
      	else {
    ***************
    *** 73,84 ****
      		if (r->step == 1)
      			fmt = "xrange(%ld, %ld)";
    ! 		snprintf(buf1, sizeof(buf1), fmt,
    ! 			 r->start,
    ! 			 r->start + r->len * r->step,
    ! 			 r->step);
      	}
      	if (r->reps != 1) {
    ! 		snprintf(buf2, sizeof(buf2),
    ! 			 "(%s * %d)", buf1, r->reps);
      	}
      	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
    --- 72,82 ----
      		if (r->step == 1)
      			fmt = "xrange(%ld, %ld)";
    ! 		sprintf(buf1, fmt,
    ! 			r->start,
    ! 			r->start + r->len * r->step,
    ! 			r->step);
      	}
      	if (r->reps != 1) {
    ! 		sprintf(buf2, "(%s * %d)", buf1, r->reps);
      	}
      	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
    
    
    
    From python-dev@python.org  Fri Aug  4 04:05:44 2000
    From: python-dev@python.org (Tim Peters)
    Date: Thu, 3 Aug 2000 20:05:44 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects rangeobject.c,2.18,2.19
    Message-ID: <200008040305.UAA18501@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv17496/python/dist/src/objects
    
    Modified Files:
    	rangeobject.c 
    Log Message:
    Boost buffer sizes in the absence of snprintf on Windows.
    Ensure that # of args to sprintf always matches # of format specifiers.
    
    
    Index: rangeobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/rangeobject.c,v
    retrieving revision 2.18
    retrieving revision 2.19
    diff -C2 -r2.18 -r2.19
    *** rangeobject.c	2000/08/04 02:34:41	2.18
    --- rangeobject.c	2000/08/04 03:05:40	2.19
    ***************
    *** 62,83 ****
      range_repr(rangeobject *r)
      {
    ! 	char buf1[80];
    ! 	char buf2[80];
      
    ! 	if (r->start == 0 && r->step == 1) {
      		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
    ! 	}
    ! 	else {
    ! 		char *fmt = "xrange(%ld, %ld, %ld)";
    ! 		if (r->step == 1)
    ! 			fmt = "xrange(%ld, %ld)";
    ! 		sprintf(buf1, fmt,
      			r->start,
      			r->start + r->len * r->step,
      			r->step);
    ! 	}
    ! 	if (r->reps != 1) {
      		sprintf(buf2, "(%s * %d)", buf1, r->reps);
    ! 	}
      	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
      }
    --- 62,88 ----
      range_repr(rangeobject *r)
      {
    ! 	/* buffers must be big enough to hold 3 longs + an int +
    ! 	 * a bit of "(xrange(...) * ...)" text.
    ! 	 */
    ! 	char buf1[250];
    ! 	char buf2[250];
      
    ! 	if (r->start == 0 && r->step == 1)
      		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
    ! 
    ! 	else if (r->step == 1)
    ! 		sprintf(buf1, "xrange(%ld, %ld)",
    ! 			r->start,
    ! 			r->start + r->len * r->step);
    ! 
    ! 	else
    ! 		sprintf(buf1, "xrange(%ld, %ld, %ld)",
      			r->start,
      			r->start + r->len * r->step,
      			r->step);
    ! 
    ! 	if (r->reps != 1)
      		sprintf(buf2, "(%s * %d)", buf1, r->reps);
    ! 
      	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
      }
    ***************
    *** 194,201 ****
      {
      	long num = PyInt_AsLong(obj);
    ! 	
      	if (num < 0 && PyErr_Occurred())
      		return -1;
    ! 	
      	if (num < r->start || (num - r->start) % r->step)
      		return 0;
    --- 199,206 ----
      {
      	long num = PyInt_AsLong(obj);
    ! 
      	if (num < 0 && PyErr_Occurred())
      		return -1;
    ! 
      	if (num < r->start || (num - r->start) % r->step)
      		return 0;
    
    
    
    From python-dev@python.org  Fri Aug  4 04:14:57 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Thu, 3 Aug 2000 20:14:57 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/xml __init__.py,1.4,1.5
    Message-ID: <200008040314.UAA23348@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/xml
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv23335
    
    Modified Files:
    	__init__.py 
    Log Message:
    
    Remove the outer test for __name__; not necessary.
    
    
    Index: __init__.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/xml/__init__.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** __init__.py	2000/08/01 00:05:16	1.4
    --- __init__.py	2000/08/04 03:14:55	1.5
    ***************
    *** 14,23 ****
      
      
    ! if __name__ == "xml":
    !     try:
    !         import _xmlplus
    !     except ImportError:
    !         pass
    !     else:
    !         import sys
    !         sys.modules[__name__] = _xmlplus
    --- 14,22 ----
      
      
    ! try:
    !     import _xmlplus
    ! except ImportError:
    !     pass
    ! else:
    !     import sys
    !     sys.modules[__name__] = _xmlplus
    
    
    
    From python-dev@python.org  Fri Aug  4 08:33:20 2000
    From: python-dev@python.org (Eric S. Raymond)
    Date: Fri, 4 Aug 2000 00:33:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/curses textpad.py,1.4,1.5
    Message-ID: <200008040733.AAA07722@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/curses
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7699/curses
    
    Modified Files:
    	textpad.py 
    Log Message:
    Corrected a bug in handling of ^N and ^P with stripspaces on.
    
    
    Index: textpad.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/curses/textpad.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** textpad.py	2000/07/12 03:38:34	1.4
    --- textpad.py	2000/08/04 07:33:18	1.5
    ***************
    *** 21,25 ****
          Ctrl-B      Cursor left, wrapping to previous line if appropriate.
          Ctrl-D      Delete character under cursor.
    !     Ctrl-E      Go to right edge (nospaces off) or end of line (nospaces on).
          Ctrl-F      Cursor right, wrapping to next line when appropriate.
          Ctrl-G      Terminate, returning the window contents.
    --- 21,25 ----
          Ctrl-B      Cursor left, wrapping to previous line if appropriate.
          Ctrl-D      Delete character under cursor.
    !     Ctrl-E      Go to right edge (stripspaces off) or end of line (stripspaces on).
          Ctrl-F      Cursor right, wrapping to next line when appropriate.
          Ctrl-G      Terminate, returning the window contents.
    ***************
    *** 27,31 ****
          Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
          Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
    !     Ctrl-L      Refresh screen
          Ctrl-N      Cursor down; move down one line.
          Ctrl-O      Insert a blank line at cursor location.
    --- 27,31 ----
          Ctrl-J      Terminate if the window is 1 line, otherwise insert newline.
          Ctrl-K      If line is blank, delete it, otherwise clear to end of line.
    !     Ctrl-L      Refresh screen.
          Ctrl-N      Cursor down; move down one line.
          Ctrl-O      Insert a blank line at cursor location.
    ***************
    *** 47,51 ****
              win.keypad(1)
      
    !     def firstblank(self, y):
              "Go to the location of the first blank on the given line."
              last = self.maxx
    --- 47,51 ----
              win.keypad(1)
      
    !     def _end_of_line(self, y):
              "Go to the location of the first blank on the given line."
              last = self.maxx
    ***************
    *** 80,84 ****
                      pass
                  elif self.stripspaces:
    !                 self.win.move(y-1, self.firstblank(y-1))
                  else:
                      self.win.move(y-1, self.maxx)
    --- 80,84 ----
                      pass
                  elif self.stripspaces:
    !                 self.win.move(y-1, self._end_of_line(y-1))
                  else:
                      self.win.move(y-1, self.maxx)
    ***************
    *** 89,93 ****
              elif ch == ascii.ENQ:				# ^e
                  if self.stripspaces:
    !                 self.win.move(y, self.firstblank(y))
                  else:
                      self.win.move(y, self.maxx)
    --- 89,93 ----
              elif ch == ascii.ENQ:				# ^e
                  if self.stripspaces:
    !                 self.win.move(y, self._end_of_line(y))
                  else:
                      self.win.move(y, self.maxx)
    ***************
    *** 107,111 ****
                      self.win.move(y+1, 0)
              elif ch == ascii.VT:				# ^k
    !             if x == 0 and self.firstblank(y) == 0:
                      self.win.deleteln()
                  else:
    --- 107,111 ----
                      self.win.move(y+1, 0)
              elif ch == ascii.VT:				# ^k
    !             if x == 0 and self._end_of_line(y) == 0:
                      self.win.deleteln()
                  else:
    ***************
    *** 116,119 ****
    --- 116,121 ----
                  if y < self.maxy:
                      self.win.move(y+1, x)
    +                 if x > self._end_of_line(y+1):
    +                     self.win.move(y+1, self._end_of_line(y+1))
              elif ch == ascii.SI:				# ^o
                  self.win.insertln()
    ***************
    *** 121,124 ****
    --- 123,128 ----
                  if y > 0:
                      self.win.move(y-1, x)
    +                 if x > self._end_of_line(y-1):
    +                     self.win.move(y-1, self._end_of_line(y-1))
              return 1
              
    ***************
    *** 128,133 ****
              for y in range(self.maxy+1):
                  self.win.move(y, 0)
    !             stop = self.firstblank(y)
    !             #sys.stderr.write("y=%d, firstblank(y)=%d\n" % (y, stop))
                  if stop == 0 and self.stripspaces:
                      continue
    --- 132,137 ----
              for y in range(self.maxy+1):
                  self.win.move(y, 0)
    !             stop = self._end_of_line(y)
    !             #sys.stderr.write("y=%d, _end_of_line(y)=%d\n" % (y, stop))
                  if stop == 0 and self.stripspaces:
                      continue
    
    
    
    From python-dev@python.org  Fri Aug  4 08:35:43 2000
    From: python-dev@python.org (Eric S. Raymond)
    Date: Fri, 4 Aug 2000 00:35:43 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.12,1.13
    Message-ID: <200008040735.AAA07818@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7795
    
    Modified Files:
    	libcurses.tex 
    Log Message:
    Documented curses.wrapper and curses.textpad.
    
    
    Index: libcurses.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
    retrieving revision 1.12
    retrieving revision 1.13
    diff -C2 -r1.12 -r1.13
    *** libcurses.tex	2000/07/27 21:10:02	1.12
    --- libcurses.tex	2000/08/04 07:35:41	1.13
    ***************
    *** 2,9 ****
               Screen painting and input handling for character-cell terminals}
      
    ! \declaremodule{extension}{curses}
      \sectionauthor{Moshe Zadka}{mzadka@geocities.com}
      \sectionauthor{Eric Raymond}{esr@thyrsus.com}
      \modulesynopsis{An interface to the curses library.}
      
      The \module{curses} module provides an interface to the curses \UNIX{}
    --- 2,10 ----
               Screen painting and input handling for character-cell terminals}
      
    ! \declaremodule{standard}{curses}
      \sectionauthor{Moshe Zadka}{mzadka@geocities.com}
      \sectionauthor{Eric Raymond}{esr@thyrsus.com}
      \modulesynopsis{An interface to the curses library.}
    + \versionadded{1.6}
      
      The \module{curses} module provides an interface to the curses \UNIX{}
    ***************
    *** 21,25 ****
                                 characters, regardless of your locale
                                 settings.}
    !   \seemodule{curses.textbox}{Editable text widget for curses supporting 
      			     Emacs-like bindings.}
        \seetext{Tutorial material on using curses with Python is available
    --- 22,26 ----
                                 characters, regardless of your locale
                                 settings.}
    !   \seemodule{curses.textpad}{Editable text widget for curses supporting 
      			     Emacs-like bindings.}
        \seetext{Tutorial material on using curses with Python is available
    ***************
    *** 1163,1165 ****
    --- 1164,1294 ----
        \lineii{COLOR_YELLOW}{Yellow}
      \end{tableii}
    + 
    + \section{\module{curses.textpad} ---
    +          Text input widget for curses programs}
    + 
    + \declaremodule{standard}{curses.textpad}
    + \sectionauthor{Eric Raymond}{esr@thyrsus.com}
    + \moduleauthor{Eric Raymond}{esr@thyrsus.com}
    + \modulesynopsis{Emacs-like input editing in a curses window.}
    + \versionadded{1.6}
    + 
    + The \module{curses.textpad} module provides a \class{Textbox} class
    + that handles elementary text editing in a curses window, supporting a
    + set of keybindings resembling those of Emacs (thus, also of Netscape
    + Navigator, BBedit 6.x, FrameMaker, and many other programs).  The
    + module also provides a rectangle-drawing function useful for framing
    + text boxes or for other purposes.
    + 
    + \subsection{Functions \label{curses-textpad-functions}}
    + 
    + The module \module{curses.textpad} defines the following functions:
    + 
    + \begin{funcdesc}{rectangle}{win, uly, ulx, lry, lrx}
    + Draw a rectangle.  The first argument must be a window object; the
    + remaining arguments are coordinates relative to that window.  The
    + second and third arguments are the y and x coordinates of the upper
    + left hand corner of the rectangle To be drawn; the fourth and fifth
    + arguments are the y and x coordinates of the lower right hand corner.
    + The rectangle will be drawn using VT100/IBM PC forms characters on
    + terminals that make this possible (including xterm and most other
    + software terminal emulators).  Otherwise it will be drawn with ASCII 
    + dashes, vertical bars, and plus signs.
    + \end{funcdesc}
    + 
    + \subsection{Textbox objects \label{curses-textpad-objects}}
    + 
    + You can instantiate a \class{Textbox} object as follows:
    + 
    + \classdesc{Textbox}{win}
    + Return a textbox widget object.  The win argument should be a curses
    + \class{WindowObject} in which the textbox is to be contained.  The
    + edit cursor of the textbox is initially located at the upper left
    + hand corner of the containin window, with coordinates (0,0). The
    + instance's \member{stripspaces} flag is initially on.
    + \end{classdesc}
    + 
    + Textbox objects, have the following methods:
    + 
    + \begin{methoddesc}{edit}{validator=None}
    + This is the entry point you will normally use.  It accepts editing
    + keystrokes until one of the termination keystrokes is entered.  If a
    + validator function is specified, each entered keystroke is passed to
    + it; command dispatch is done on the result. This method returns the
    + window contents as a string; whether blanks in the window are included
    + is affected by the \member{stripspaces} member.
    + \end{methoddesc}
    + 
    + \begin{methoddesc}{do_command}{ch}
    + Process a single command keystroke.  Here are the supported special
    + keystrokes: 
    + 
    + \begin{tableii}{c|l}{code}{keystroke}{action}
    +   \lineii{Ctrl-A}{Go to left edge of window.}
    +   \lineii{Ctrl-B}{Cursor left, wrapping to previous line if appropriate.}
    +   \lineii{Ctrl-D}{Delete character under cursor.}
    +   \lineii{Ctrl-E}{Go to right edge (stripspaces off) or end of line (stripspaces on).}
    +   \lineii{Ctrl-F}{Cursor right, wrapping to next line when appropriate.}
    +   \lineii{Ctrl-G}{Terminate, returning the window contents.}
    +   \lineii{Ctrl-H}{Delete character backward.}
    +   \lineii{Ctrl-J}{Terminate if the window is 1 line, otherwise insert newline.}
    +   \lineii{Ctrl-K}{If line is blank, delete it, otherwise clear to end of line.}
    +   \lineii{Ctrl-L}{Refresh screen.}
    +   \lineii{Ctrl-N}{Cursor down; move down one line.}
    +   \lineii{Ctrl-O}{Insert a blank line at cursor location.}
    +   \lineii{Ctrl-P}{Cursor up; move up one line.}
    + \end{tableii}
    + 
    + Move operations do nothing if the cursor is at an edge where the
    + movement is not possible.  The following synonyms are supported where
    + possible:  KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P,
    + KEY_DOWN = Ctrl-N, KEY_BACKSPACE = Ctrl-h.
    + 
    + All other keystrokes are treated as a command to insert the given
    + character and move right (with line wrapping).
    + \end{methoddesc}
    + 
    + \begin{methoddesc}{gather}{}
    + This method returns the window contents as a string; whether blanks in
    + the window are included is affected by the \member{stripspaces}
    + member.
    + \end{methoddesc}
    + 
    + \begin{methoddesc}{stripspaces}{}
    + This data member is a flag which controls the interpretation of blanks in
    + the window.  When it is on, trailing blanks on each line are ignored;
    + any cursor motion that would land the cursor on a trailing blank goes
    + to the end of that line instead, and trailing blanks are stripped when
    + the window contents is gathered.
    + \end{methoddesc}
    + 
    + \section{\module{curses.wrapper} ---
    +          Exception-handling wrapper for curses programs.}
    + 
    + \declaremodule{standard}{curses.wrapper}
    + \sectionauthor{Eric Raymond}{esr@thyrsus.com}
    + \moduleauthor{Eric Raymond}{esr@thyrsus.com}
    + \modulesynopsis{Exception-handling wrapper for curses programs.}
    + \versionadded{1.6}
    + 
    + This module supplies one function, \function{wrapper()}, which runs
    + another function which should be the rest of your curses-using
    + application.  If the application raises an exception,
    + \function{wrapper()} will restore the terminal to a sane state before
    + passing it further up the stack and generating a traceback.
    + 
    + \subsection{Functions \label{curses-wrapper-functions}}
    + 
    + \begin{funcdesc}{wrapper}{func, *rest}
    + Wrapper function that initializes curses and calls another function,
    + \function{func}, restoring normal keyboard/screen behavior on error.
    + The callable object 'func' is then passed the main window 'stdscr'
    + as its first argument, followed by any other arguments passed to
    + \function{wrapper()}.
    + \end{funcdesc}
    + 
    + Before calling the hook function, \function{wrapper()} turns on
    + cbreak mode, turns off echo, and enables the terminal keypad.  On
    + exit (whether normally or by exception) it restores cooked mode, 
    + turns on echo, and disables the terminal keypad.
      
    
    
    
    From python-dev@python.org  Fri Aug  4 09:47:02 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Fri, 4 Aug 2000 01:47:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib whichdb.py,1.7,1.8
    Message-ID: <200008040847.BAA21291@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv21242/Lib
    
    Modified Files:
    	whichdb.py 
    Log Message:
    
    Add missing 'try:'. Patch by Rob W. W. Hooft, #101071 (closed.)
    
    
    
    Index: whichdb.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/whichdb.py,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** whichdb.py	2000/07/29 05:31:40	1.7
    --- whichdb.py	2000/08/04 08:46:59	1.8
    ***************
    *** 27,30 ****
    --- 27,31 ----
      
          # Check for dumbdbm next -- this has a .dir and and a .dat file
    +     try:
              f = open(filename + ".dat", "rb")
              f.close()
    
    
    
    From python-dev@python.org  Fri Aug  4 13:59:43 2000
    From: python-dev@python.org (Moshe Zadka)
    Date: Fri, 4 Aug 2000 05:59:43 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_linuxaudiodev.py,1.1,1.2
    Message-ID: <200008041259.FAA24651@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24303/Lib/test
    
    Modified Files:
    	test_linuxaudiodev.py 
    Log Message:
    In case the user isn't allowed to access /dev/dsp or /dev/dsp isn't there
    at all (my computer doesn't have a Sound Blaster), this doesn't mean
    there's a bug in linuxaudiodev. The only error the test suite skips
    is currently ImportError -- so that's what we raise. If you see a problem
    with this patch, say so and I'll retract. If you think raising an ImportError
    sucks, you're right -- but I ain't gonna buy a SB and I sure ain't gonna
    let the test-suite fail on my machine.
    
    
    Index: test_linuxaudiodev.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_linuxaudiodev.py,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** test_linuxaudiodev.py	2000/06/10 04:22:57	1.1
    --- test_linuxaudiodev.py	2000/08/04 12:59:40	1.2
    ***************
    *** 1,4 ****
    --- 1,5 ----
      from test_support import verbose, findfile, TestFailed
      import linuxaudiodev
    + import errno
      import os
      
    ***************
    *** 10,13 ****
    --- 11,16 ----
              a = linuxaudiodev.open('w')
          except linuxaudiodev.error, msg:
    + 	if msg[0] in (errno.EACCES, errno.ENODEV):
    + 		raise ImportError, msg
              raise TestFailed, msg
          else:
    
    
    
    From python-dev@python.org  Fri Aug  4 14:08:50 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 06:08:50 -0700
    Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.3,1.1.2.4
    Message-ID: <200008041308.GAA27553@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27528
    
    Modified Files:
          Tag: cnri-16-start
    	LICENSE 
    Log Message:
    Comma added at CNRI's request.  (Gosh Bob Kahn is thorough. :-)
    
    
    Index: LICENSE
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/LICENSE,v
    retrieving revision 1.1.2.3
    retrieving revision 1.1.2.4
    diff -C2 -r1.1.2.3 -r1.1.2.4
    *** LICENSE	2000/08/03 21:28:23	1.1.2.3
    --- LICENSE	2000/08/04 13:08:47	1.1.2.4
    ***************
    *** 86,90 ****
      party.
      
    ! 8. By clicking on the "ACCEPT" button where indicated, or by copying
      installing or otherwise using Python 1.6b1, Licensee agrees to be
      bound by the terms and conditions of this License Agreement.
    --- 86,90 ----
      party.
      
    ! 8. By clicking on the "ACCEPT" button where indicated, or by copying,
      installing or otherwise using Python 1.6b1, Licensee agrees to be
      bound by the terms and conditions of this License Agreement.
    
    
    
    From python-dev@python.org  Fri Aug  4 14:17:55 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Fri, 4 Aug 2000 06:17:55 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test regrtest.py,1.20,1.21
    Message-ID: <200008041317.GAA30726@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30493/Lib/test
    
    Modified Files:
    	regrtest.py 
    Log Message:
    
    Make test_support.TestSkipped errors work the same way as ImportErrors:
    mark the test as 'skipped', rather than 'failed'.
    
    
    
    Index: regrtest.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v
    retrieving revision 1.20
    retrieving revision 1.21
    diff -C2 -r1.20 -r1.21
    *** regrtest.py	2000/08/03 15:50:37	1.20
    --- regrtest.py	2000/08/04 13:17:51	1.21
    ***************
    *** 228,232 ****
              finally:
                  sys.stdout = save_stdout
    !     except ImportError, msg:
              return -1
          except KeyboardInterrupt, v:
    --- 228,232 ----
              finally:
                  sys.stdout = save_stdout
    !     except (ImportError, test_support.TestSkipped), msg:
              return -1
          except KeyboardInterrupt, v:
    
    
    
    From python-dev@python.org  Fri Aug  4 14:18:17 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 06:18:17 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python getcopyright.c,1.6.2.1,1.6.2.2
    Message-ID: <200008041318.GAA30885@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30857
    
    Modified Files:
          Tag: cnri-16-start
    	getcopyright.c 
    Log Message:
    Change the copyright string to match CNRI's desires.
    
    
    Index: getcopyright.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/getcopyright.c,v
    retrieving revision 1.6.2.1
    retrieving revision 1.6.2.2
    diff -C2 -r1.6.2.1 -r1.6.2.2
    *** getcopyright.c	2000/08/03 16:50:36	1.6.2.1
    --- getcopyright.c	2000/08/04 13:18:12	1.6.2.2
    ***************
    *** 4,9 ****
      
      static char cprt[] = 
    ! "Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam\n\
    ! Copyright 1995-2000 Corporation for National Research Initiatives (CNRI)";
      
      const char *
    --- 4,9 ----
      
      static char cprt[] = 
    ! "Copyright (c) Corporation for National Research Initiatives.\n\
    ! Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam.";
      
      const char *
    
    
    
    From python-dev@python.org  Fri Aug  4 14:26:07 2000
    From: python-dev@python.org (Moshe Zadka)
    Date: Fri, 4 Aug 2000 06:26:07 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_linuxaudiodev.py,1.2,1.3
    Message-ID: <200008041326.GAA00938@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv300/Lib/test
    
    Modified Files:
    	test_linuxaudiodev.py 
    Log Message:
    Raise TestSkipped, not ImportError.
    Honesty's the best policy.
    
    
    Index: test_linuxaudiodev.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_linuxaudiodev.py,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** test_linuxaudiodev.py	2000/08/04 12:59:40	1.2
    --- test_linuxaudiodev.py	2000/08/04 13:26:03	1.3
    ***************
    *** 1,3 ****
    ! from test_support import verbose, findfile, TestFailed
      import linuxaudiodev
      import errno
    --- 1,3 ----
    ! from test_support import verbose, findfile, TestFailed, TestSkipped
      import linuxaudiodev
      import errno
    ***************
    *** 12,16 ****
          except linuxaudiodev.error, msg:
      	if msg[0] in (errno.EACCES, errno.ENODEV):
    ! 		raise ImportError, msg
              raise TestFailed, msg
          else:
    --- 12,16 ----
          except linuxaudiodev.error, msg:
      	if msg[0] in (errno.EACCES, errno.ENODEV):
    ! 		raise TestSkipped, msg
              raise TestFailed, msg
          else:
    
    
    
    From python-dev@python.org  Fri Aug  4 14:34:46 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Fri, 4 Aug 2000 06:34:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test README,1.2,1.3 test_binhex.py,1.4,1.5 test_dl.py,1.7,1.8 test_fork1.py,1.4,1.5 test_gl.py,1.3,1.4 test_nis.py,1.7,1.8 test_openpty.py,1.2,1.3 test_pty.py,1.3,1.4 test_signal.py,1.4,1.5 test_string.py,1.10,1.11
    Message-ID: <200008041334.GAA03625@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3456
    
    Modified Files:
    	README test_binhex.py test_dl.py test_fork1.py test_gl.py 
    	test_nis.py test_openpty.py test_pty.py test_signal.py 
    	test_string.py 
    Log Message:
    
    Raise 'TestSkipped' (from the test_support) module rather than 'ImportError'
    to signify a test that should be marked as 'skipped' rather than 'failed'.
    Also 'document' it, in README.
    
    
    
    Index: README
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/README,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** README	2000/07/19 17:19:49	1.2
    --- README	2000/08/04 13:34:43	1.3
    ***************
    *** 13,17 ****
      expected output that is stored in .../Lib/test/output.  If the test runs to
      completion and the actual and expected outputs match, the test succeeds, if
    ! not, it fails.  If an ImportError is raised, the test is not run.
      
      You will be writing unit tests (isolated tests of functions and objects
    --- 13,18 ----
      expected output that is stored in .../Lib/test/output.  If the test runs to
      completion and the actual and expected outputs match, the test succeeds, if
    ! not, it fails.  If an ImportError or test_support.TestSkipped error is
    ! raised, the test is not run.
      
      You will be writing unit tests (isolated tests of functions and objects
    
    Index: test_binhex.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_binhex.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** test_binhex.py	1999/10/19 17:48:54	1.4
    --- test_binhex.py	2000/08/04 13:34:43	1.5
    ***************
    *** 7,11 ****
      import binhex
      import tempfile
    ! from test_support import verbose
      
      def test():
    --- 7,11 ----
      import binhex
      import tempfile
    ! from test_support import verbose, TestSkipped
      
      def test():
    ***************
    *** 16,20 ****
              f = open(fname1, 'w')
          except:
    !         raise ImportError, "Cannot test binhex without a temp file"
      
          start = 'Jack is my hero'
    --- 16,20 ----
              f = open(fname1, 'w')
          except:
    !         raise TestSkipped, "Cannot test binhex without a temp file"
      
          start = 'Jack is my hero'
    
    Index: test_dl.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_dl.py,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** test_dl.py	1999/02/23 17:58:48	1.7
    --- test_dl.py	2000/08/04 13:34:43	1.8
    ***************
    *** 5,9 ****
      
      import dl
    ! from test_support import verbose
      
      sharedlibs = [
    --- 5,9 ----
      
      import dl
    ! from test_support import verbose,TestSkipped
      
      sharedlibs = [
    ***************
    *** 30,32 ****
              break
      else:
    !     raise ImportError, 'Could not open any shared libraries'
    --- 30,32 ----
              break
      else:
    !     raise TestSkipped, 'Could not open any shared libraries'
    
    Index: test_fork1.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_fork1.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** test_fork1.py	2000/05/04 00:36:42	1.4
    --- test_fork1.py	2000/08/04 13:34:43	1.5
    ***************
    *** 10,18 ****
      
      import os, sys, time, thread
      
      try:
          os.fork
      except AttributeError:
    !     raise ImportError, "os.fork not defined -- skipping test_fork1"
      
      LONGSLEEP = 2
    --- 10,19 ----
      
      import os, sys, time, thread
    + from test_support import TestSkipped
      
      try:
          os.fork
      except AttributeError:
    !     raise TestSkipped, "os.fork not defined -- skipping test_fork1"
      
      LONGSLEEP = 2
    
    Index: test_gl.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gl.py,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** test_gl.py	1998/03/26 19:42:09	1.3
    --- test_gl.py	2000/08/04 13:34:43	1.4
    ***************
    *** 4,8 ****
          Roger E. Masse
      """
    ! from test_support import verbose
      import gl, GL, time
      
    --- 4,8 ----
          Roger E. Masse
      """
    ! from test_support import verbose, TestSkipped
      import gl, GL, time
      
    ***************
    *** 88,93 ****
              display = os.environ['DISPLAY']
          except:
    !         # Raise ImportError because regrtest.py handles it specially.
    !         raise ImportError, "No $DISPLAY -- skipping gl test"
      
          # touch all the attributes of gl without doing anything
    --- 88,92 ----
              display = os.environ['DISPLAY']
          except:
    !         raise TestSkipped, "No $DISPLAY -- skipping gl test"
      
          # touch all the attributes of gl without doing anything
    
    Index: test_nis.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_nis.py,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** test_nis.py	1999/01/28 04:54:33	1.7
    --- test_nis.py	2000/08/04 13:34:43	1.8
    ***************
    *** 1,3 ****
    ! from test_support import verbose, TestFailed
      import nis
      
    --- 1,3 ----
    ! from test_support import verbose, TestFailed, TestSkipped
      import nis
      
    ***************
    *** 10,14 ****
              raise TestFailed, msg
          # only do this if running under the regression suite
    !     raise ImportError, msg
      
      done = 0
    --- 10,14 ----
              raise TestFailed, msg
          # only do this if running under the regression suite
    !     raise TestSkipped, msg
      
      done = 0
    
    Index: test_openpty.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_openpty.py,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** test_openpty.py	2000/07/19 14:51:54	1.2
    --- test_openpty.py	2000/08/04 13:34:43	1.3
    ***************
    *** 2,6 ****
      
      import os
    ! from test_support import verbose, TestFailed
      
      try:
    --- 2,6 ----
      
      import os
    ! from test_support import verbose, TestFailed, TestSkipped
      
      try:
    ***************
    *** 11,15 ****
              print "(master, slave) = (%d, %d)"%(master, slave)
      except AttributeError:
    !     raise ImportError, "No openpty() available."
      
      if not os.isatty(master):
    --- 11,15 ----
              print "(master, slave) = (%d, %d)"%(master, slave)
      except AttributeError:
    !     raise TestSkipped, "No openpty() available."
      
      if not os.isatty(master):
    
    Index: test_pty.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_pty.py,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** test_pty.py	2000/07/19 14:51:54	1.3
    --- test_pty.py	2000/08/04 13:34:43	1.4
    ***************
    *** 1,4 ****
      import pty, os, sys, string
    ! from test_support import verbose, TestFailed
      
      TEST_STRING_1 = "I wish to buy a fish license."
    --- 1,4 ----
      import pty, os, sys, string
    ! from test_support import verbose, TestFailed, TestSkipped
      
      TEST_STRING_1 = "I wish to buy a fish license."
    ***************
    *** 26,30 ****
      except OSError:
          # " An optional feature could not be imported " ... ?
    !     raise ImportError, "Pseudo-terminals (seemingly) not functional."
      
      if not os.isatty(master_fd):
    --- 26,30 ----
      except OSError:
          # " An optional feature could not be imported " ... ?
    !     raise TestSkipped, "Pseudo-terminals (seemingly) not functional."
      
      if not os.isatty(master_fd):
    
    Index: test_signal.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_signal.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** test_signal.py	1997/11/22 21:50:25	1.4
    --- test_signal.py	2000/08/04 13:34:43	1.5
    ***************
    *** 1,4 ****
      # Test the signal module
    ! from test_support import verbose
      import signal
      import os
    --- 1,4 ----
      # Test the signal module
    ! from test_support import verbose, TestSkipped
      import signal
      import os
    ***************
    *** 6,10 ****
      
      if sys.platform[:3] in ('win', 'os2'):
    !     raise ImportError, "Can't test signal on %s" % sys.platform[:3]
      
      if verbose:
    --- 6,10 ----
      
      if sys.platform[:3] in ('win', 'os2'):
    !     raise TestSkipped, "Can't test signal on %s" % sys.platform[:3]
      
      if verbose:
    
    Index: test_string.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_string.py,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** test_string.py	2000/07/10 17:08:42	1.10
    --- test_string.py	2000/08/04 13:34:43	1.11
    ***************
    *** 1,3 ****
    ! from test_support import verbose
      import string_tests
      import string, sys
    --- 1,3 ----
    ! from test_support import verbose, TestSkipped
      import string_tests
      import string, sys
    ***************
    *** 7,11 ****
          ''.join
      except AttributeError:
    !     raise ImportError
      
      def test(name, input, output, *args):
    --- 7,11 ----
          ''.join
      except AttributeError:
    !     raise TestSkipped
      
      def test(name, input, output, *args):
    
    
    
    From python-dev@python.org  Fri Aug  4 14:37:58 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Fri, 4 Aug 2000 06:37:58 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Tools/compiler - New directory
    Message-ID: <200008041337.GAA04343@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Tools/compiler
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv4335/compiler
    
    Log Message:
    Directory /cvsroot/python/python/dist/src/Tools/compiler added to the repository
    
    
    
    
    From python-dev@python.org  Fri Aug  4 14:59:54 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 06:59:54 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python modsupport.c,2.42.2.1,2.42.2.2
    Message-ID: <200008041359.GAA07064@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7054
    
    Modified Files:
          Tag: cnri-16-start
    	modsupport.c 
    Log Message:
    Add a test that Py_IsInitialized() in Py_InitModule4().  See
    python-dev discussion.
    
    This should catch future version incompatibilities on Windows.  Alas,
    this doesn't help for 1.5 vs. 1.6; but it will help for 1.6 vs. 2.0.
    
    
    Index: modsupport.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/modsupport.c,v
    retrieving revision 2.42.2.1
    retrieving revision 2.42.2.2
    diff -C2 -r2.42.2.1 -r2.42.2.2
    *** modsupport.c	2000/08/03 16:50:36	2.42.2.1
    --- modsupport.c	2000/08/04 13:59:51	2.42.2.2
    ***************
    *** 39,42 ****
    --- 39,44 ----
      	PyObject *m, *d, *v;
      	PyMethodDef *ml;
    + 	if (!Py_IsInitialized())
    + 	    Py_FatalError("Interpreter not initialized (version mismatch?)");
      	if (module_api_version != PYTHON_API_VERSION)
      		fprintf(stderr, api_version_warning,
    
    
    
    From python-dev@python.org  Fri Aug  4 15:00:20 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 07:00:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python modsupport.c,2.49,2.50
    Message-ID: <200008041400.HAA07195@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7176
    
    Modified Files:
    	modsupport.c 
    Log Message:
    Add a test that Py_IsInitialized() in Py_InitModule4().  See
    python-dev discussion.
    
    This should catch future version incompatibilities on Windows.  Alas,
    this doesn't help for 1.5 vs. 1.6; but it will help for 1.6 vs. 2.0.
    
    
    Index: modsupport.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/modsupport.c,v
    retrieving revision 2.49
    retrieving revision 2.50
    diff -C2 -r2.49 -r2.50
    *** modsupport.c	2000/07/22 18:47:25	2.49
    --- modsupport.c	2000/08/04 14:00:14	2.50
    ***************
    *** 48,51 ****
    --- 48,53 ----
      	PyObject *m, *d, *v;
      	PyMethodDef *ml;
    + 	if (!Py_IsInitialized())
    + 	    Py_FatalError("Interpreter not initialized (version mismatch?)");
      	if (module_api_version != PYTHON_API_VERSION)
      		fprintf(stderr, api_version_warning,
    
    
    
    From python-dev@python.org  Fri Aug  4 16:26:02 2000
    From: python-dev@python.org (Moshe Zadka)
    Date: Fri, 4 Aug 2000 08:26:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_linuxaudiodev.py,1.3,1.4
    Message-ID: <200008041526.IAA02033@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1754
    
    Modified Files:
    	test_linuxaudiodev.py 
    Log Message:
    Oooopsss.....tab and space mismatch corrected.
    
    
    Index: test_linuxaudiodev.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_linuxaudiodev.py,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** test_linuxaudiodev.py	2000/08/04 13:26:03	1.3
    --- test_linuxaudiodev.py	2000/08/04 15:25:58	1.4
    ***************
    *** 11,16 ****
              a = linuxaudiodev.open('w')
          except linuxaudiodev.error, msg:
    ! 	if msg[0] in (errno.EACCES, errno.ENODEV):
    ! 		raise TestSkipped, msg
              raise TestFailed, msg
          else:
    --- 11,16 ----
              a = linuxaudiodev.open('w')
          except linuxaudiodev.error, msg:
    !         if msg[0] in (errno.EACCES, errno.ENODEV):
    !             raise TestSkipped, msg
              raise TestFailed, msg
          else:
    
    
    
    From python-dev@python.org  Fri Aug  4 16:29:06 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 08:29:06 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.23,1.23.4.1
    Message-ID: <200008041529.IAA04360@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv4299
    
    Modified Files:
          Tag: cnri-16-start
    	sre.py 
    Log Message:
    In _split(), extend() is called with m.group(), which returns a tuple.
    This is OK in 2.0, but not in 1.6.
    
    Fix it on the 1.6 branch, as an explicit list() call seems like it
    would be a bit slower.
    
    
    Index: sre.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v
    retrieving revision 1.23
    retrieving revision 1.23.4.1
    diff -C2 -r1.23 -r1.23.4.1
    *** sre.py	2000/08/01 22:47:48	1.23
    --- sre.py	2000/08/04 15:29:03	1.23.4.1
    ***************
    *** 156,160 ****
              append(string[i:b])
              if g and b != e:
    !             extend(m.groups())
              i = e
              n = n + 1
    --- 156,160 ----
              append(string[i:b])
              if g and b != e:
    !             extend(list(m.groups()))
              i = e
              n = n + 1
    
    
    
    From python-dev@python.org  Fri Aug  4 16:35:38 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 08:35:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python getargs.c,2.33.2.1,2.33.2.2
    Message-ID: <200008041535.IAA09363@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9274/Python
    
    Modified Files:
          Tag: cnri-16-start
    	getargs.c 
    Log Message:
    Reapply Marc-Andres patest patch in the 1.6 branch
    
    Index: getargs.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v
    retrieving revision 2.33.2.1
    retrieving revision 2.33.2.2
    diff -C2 -r2.33.2.1 -r2.33.2.2
    *** getargs.c	2000/08/03 16:50:35	2.33.2.1
    --- getargs.c	2000/08/04 15:35:36	2.33.2.2
    ***************
    *** 416,420 ****
      /* Internal API needed by convertsimple1(): */
      extern 
    ! PyObject *_PyUnicode_AsUTF8String(PyObject *unicode,
      				  const char *errors);
      
    --- 416,420 ----
      /* Internal API needed by convertsimple1(): */
      extern 
    ! PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode,
      				  const char *errors);
      
    ***************
    *** 594,598 ****
      				    *p = PyString_AS_STRING(arg);
      				else if (PyUnicode_Check(arg)) {
    ! 				    arg = _PyUnicode_AsUTF8String(arg, NULL);
      				    if (arg == NULL)
      					return "unicode conversion error";
    --- 594,599 ----
      				    *p = PyString_AS_STRING(arg);
      				else if (PyUnicode_Check(arg)) {
    ! 				    arg = _PyUnicode_AsDefaultEncodedString(
    ! 							            arg, NULL);
      				    if (arg == NULL)
      					return "unicode conversion error";
    ***************
    *** 639,643 ****
      				  *p = PyString_AsString(arg);
      				else if (PyUnicode_Check(arg)) {
    ! 				  arg = _PyUnicode_AsUTF8String(arg, NULL);
      				  if (arg == NULL)
      				      return "unicode conversion error";
    --- 640,645 ----
      				  *p = PyString_AsString(arg);
      				else if (PyUnicode_Check(arg)) {
    ! 				  arg = _PyUnicode_AsDefaultEncodedString(
    ! 								  arg, NULL);
      				  if (arg == NULL)
      				      return "unicode conversion error";
    ***************
    *** 671,675 ****
      			encoding = (const char *)va_arg(*p_va, const char *);
      			if (encoding == NULL)
    ! 				return "(encoding is NULL)";
      			
      			/* Get 's' parameter: the output buffer to use */
    --- 673,677 ----
      			encoding = (const char *)va_arg(*p_va, const char *);
      			if (encoding == NULL)
    ! 			    	encoding = PyUnicode_GetDefaultEncoding();
      			
      			/* Get 's' parameter: the output buffer to use */
    
    
    
    From python-dev@python.org  Fri Aug  4 16:35:38 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Fri, 4 Aug 2000 08:35:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.54.2.1,2.54.2.2
    Message-ID: <200008041535.IAA09356@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9274/Objects
    
    Modified Files:
          Tag: cnri-16-start
    	unicodeobject.c 
    Log Message:
    Reapply Marc-Andres patest patch in the 1.6 branch
    
    Index: unicodeobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
    retrieving revision 2.54.2.1
    retrieving revision 2.54.2.2
    diff -C2 -r2.54.2.1 -r2.54.2.2
    *** unicodeobject.c	2000/08/03 16:35:00	2.54.2.1
    --- unicodeobject.c	2000/08/04 15:35:36	2.54.2.2
    ***************
    *** 167,173 ****
       reset:
          /* Reset the object caches */
    !     if (unicode->utf8str) {
    !         Py_DECREF(unicode->utf8str);
    !         unicode->utf8str = NULL;
          }
          unicode->hash = -1;
    --- 167,173 ----
       reset:
          /* Reset the object caches */
    !     if (unicode->defenc) {
    !         Py_DECREF(unicode->defenc);
    !         unicode->defenc = NULL;
          }
          unicode->hash = -1;
    ***************
    *** 245,249 ****
          unicode->length = length;
          unicode->hash = -1;
    !     unicode->utf8str = NULL;
          return unicode;
      
    --- 245,249 ----
          unicode->length = length;
          unicode->hash = -1;
    !     unicode->defenc = NULL;
          return unicode;
      
    ***************
    *** 264,270 ****
      	    unicode->length = 0;
      	}
    ! 	if (unicode->utf8str) {
    ! 	    Py_DECREF(unicode->utf8str);
    ! 	    unicode->utf8str = NULL;
      	}
      	/* Add to free list */
    --- 264,270 ----
      	    unicode->length = 0;
      	}
    ! 	if (unicode->defenc) {
    ! 	    Py_DECREF(unicode->defenc);
    ! 	    unicode->defenc = NULL;
      	}
      	/* Add to free list */
    ***************
    *** 275,279 ****
          else {
      	PyMem_DEL(unicode->str);
    ! 	Py_XDECREF(unicode->utf8str);
      	PyObject_DEL(unicode);
          }
    --- 275,279 ----
          else {
      	PyMem_DEL(unicode->str);
    ! 	Py_XDECREF(unicode->defenc);
      	PyObject_DEL(unicode);
          }
    ***************
    *** 531,534 ****
    --- 531,561 ----
      }
      
    + /* Return a Python string holding the default encoded value of the
    +    Unicode object. 
    + 
    +    The resulting string is cached in the Unicode object for subsequent
    +    usage by this function. The cached version is needed to implement
    +    the character buffer interface and will live (at least) as long as
    +    the Unicode object itself.
    + 
    +    The refcount of the string is *not* incremented.
    + 
    +    *** Exported for internal use by the interpreter only !!! ***
    + 
    + */
    + 
    + PyObject *_PyUnicode_AsDefaultEncodedString(PyObject *unicode,
    + 					    const char *errors)
    + {
    +     PyObject *v = ((PyUnicodeObject *)unicode)->defenc;
    + 
    +     if (v)
    +         return v;
    +     v = PyUnicode_AsEncodedString(unicode, NULL, errors);
    +     if (v && errors == NULL)
    +         ((PyUnicodeObject *)unicode)->defenc = v;
    +     return v;
    + }
    + 
      Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode)
      {
    ***************
    *** 876,908 ****
      }
      
    - /* Return a Python string holding the UTF-8 encoded value of the
    -    Unicode object. 
    - 
    -    The resulting string is cached in the Unicode object for subsequent
    -    usage by this function. The cached version is needed to implement
    -    the character buffer interface and will live (at least) as long as
    -    the Unicode object itself.
    - 
    -    The refcount of the string is *not* incremented.
    - 
    -    *** Exported for internal use by the interpreter only !!! ***
    - 
    - */
    - 
    - PyObject *_PyUnicode_AsUTF8String(PyObject *unicode,
    - 				  const char *errors)
    - {
    -     PyObject *v = ((PyUnicodeObject *)unicode)->utf8str;
    - 
    -     if (v)
    -         return v;
    -     v = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
    - 			     PyUnicode_GET_SIZE(unicode),
    - 			     errors);
    -     if (v && errors == NULL)
    -         ((PyUnicodeObject *)unicode)->utf8str = v;
    -     return v;
    - }
    - 
      PyObject *PyUnicode_AsUTF8String(PyObject *unicode)
      {
    --- 903,906 ----
    ***************
    *** 913,917 ****
              return NULL;
          }
    !     str = _PyUnicode_AsUTF8String(unicode, NULL);
          if (str == NULL)
              return NULL;
    --- 911,917 ----
              return NULL;
          }
    !     str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
    ! 			       PyUnicode_GET_SIZE(unicode),
    ! 			       NULL);
          if (str == NULL)
              return NULL;
    ***************
    *** 4521,4525 ****
              return -1;
          }
    !     str = _PyUnicode_AsUTF8String((PyObject *)self, NULL);
          if (str == NULL)
      	return -1;
    --- 4521,4525 ----
              return -1;
          }
    !     str = _PyUnicode_AsDefaultEncodedString((PyObject *)self, NULL);
          if (str == NULL)
      	return -1;
    ***************
    *** 5132,5136 ****
      	if (v->str)
      	    PyMem_DEL(v->str);
    ! 	Py_XDECREF(v->utf8str);
      	PyObject_DEL(v);
          }
    --- 5132,5136 ----
      	if (v->str)
      	    PyMem_DEL(v->str);
    ! 	Py_XDECREF(v->defenc);
      	PyObject_DEL(v);
          }
    
    
    
    From python-dev@python.org  Fri Aug  4 16:36:15 2000
    From: python-dev@python.org (Moshe Zadka)
    Date: Fri, 4 Aug 2000 08:36:15 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects bufferobject.c,2.11,2.12 object.c,2.91,2.92
    Message-ID: <200008041536.IAA10077@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv4647/Objects
    
    Modified Files:
    	bufferobject.c object.c 
    Log Message:
    Removing warnings found by gcc -Wall
    
    
    Index: bufferobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/bufferobject.c,v
    retrieving revision 2.11
    retrieving revision 2.12
    diff -C2 -r2.11 -r2.12
    *** bufferobject.c	2000/07/09 04:06:11	2.11
    --- bufferobject.c	2000/08/04 15:36:13	2.12
    ***************
    *** 142,145 ****
    --- 142,146 ----
      PyBuffer_New(int size)
      {
    + 	PyObject *o;
      	PyBufferObject * b;
      
    ***************
    *** 150,157 ****
      	}
      	/* PyObject_New is inlined */
    ! 	b = (PyBufferObject *) PyObject_MALLOC(sizeof(*b) + size);
    ! 	if ( b == NULL )
      		return PyErr_NoMemory();
    ! 	PyObject_INIT((PyObject *)b, &PyBuffer_Type);
      
      	b->b_base = NULL;
    --- 151,158 ----
      	}
      	/* PyObject_New is inlined */
    ! 	o = PyObject_MALLOC(sizeof(*b) + size);
    ! 	if ( o == NULL )
      		return PyErr_NoMemory();
    ! 	b = (PyBufferObject *) PyObject_INIT(o, &PyBuffer_Type);
      
      	b->b_base = NULL;
    ***************
    *** 163,167 ****
      #endif
      
    ! 	return (PyObject *) b;
      }
      
    --- 164,168 ----
      #endif
      
    ! 	return o;
      }
      
    
    Index: object.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
    retrieving revision 2.91
    retrieving revision 2.92
    diff -C2 -r2.91 -r2.92
    *** object.c	2000/07/31 15:28:04	2.91
    --- object.c	2000/08/04 15:36:13	2.92
    ***************
    *** 1124,1127 ****
    --- 1124,1131 ----
      	else if (PyTraceBack_Check(op))
      		typecode = Py_TRASHCAN_TRACEBACK;
    + 	else /* We have a bug here -- those are the only types in GC */ {
    + 		Py_FatalError("Type not supported in GC -- internal bug");
    + 		return; /* pacify compiler -- execution never here */
    + 	}
      	op->ob_refcnt = typecode;
      
    
    
    
    From python-dev@python.org  Fri Aug  4 16:53:09 2000
    From: python-dev@python.org (Moshe Zadka)
    Date: Fri, 4 Aug 2000 08:53:09 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules audioop.c,1.41,1.42 tkappinit.c,1.8,1.9
    Message-ID: <200008041553.IAA28799@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24001/Modules
    
    Modified Files:
    	audioop.c tkappinit.c 
    Log Message:
    Removing warnings discovered by gcc -Wall
    
    
    Index: audioop.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/audioop.c,v
    retrieving revision 1.41
    retrieving revision 1.42
    diff -C2 -r1.41 -r1.42
    *** audioop.c	2000/07/31 15:28:04	1.41
    --- audioop.c	2000/08/04 15:53:06	1.42
    ***************
    *** 88,92 ****
      	56,     48,     40,     32,     24,     16,      8,      0 };
      
    ! /* #define ZEROTRAP    /* turn on the trap as per the MIL-STD */
      #define BIAS 0x84   /* define the add-in bias for 16 bit samples */
      #define CLIP 32635
    --- 88,92 ----
      	56,     48,     40,     32,     24,     16,      8,      0 };
      
    ! /* #define ZEROTRAP */   /* turn on the trap as per the MIL-STD */
      #define BIAS 0x84   /* define the add-in bias for 16 bit samples */
      #define CLIP 32635
    
    Index: tkappinit.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/tkappinit.c,v
    retrieving revision 1.8
    retrieving revision 1.9
    diff -C2 -r1.8 -r1.9
    *** tkappinit.c	2000/07/10 09:26:41	1.8
    --- tkappinit.c	2000/08/04 15:53:06	1.9
    ***************
    *** 19,23 ****
      Tcl_AppInit(Tcl_Interp *interp)
      {
    ! 	Tk_Window main;
      
      	if (Tcl_Init (interp) == TCL_ERROR)
    --- 19,23 ----
      Tcl_AppInit(Tcl_Interp *interp)
      {
    ! 	Tk_Window main_window;
      
      	if (Tcl_Init (interp) == TCL_ERROR)
    ***************
    *** 26,30 ****
      		return TCL_ERROR;
      
    ! 	main = Tk_MainWindow(interp);
      
      #ifdef WITH_MOREBUTTONS
    --- 26,30 ----
      		return TCL_ERROR;
      
    ! 	main_window = Tk_MainWindow(interp);
      
      #ifdef WITH_MOREBUTTONS
    ***************
    *** 34,40 ****
      
      		Tcl_CreateCommand(interp, "studbutton", studButtonCmd,
    ! 				  (ClientData) main, NULL);
      		Tcl_CreateCommand(interp, "tributton", triButtonCmd,
    ! 				  (ClientData) main, NULL);
      	}
      #endif
    --- 34,40 ----
      
      		Tcl_CreateCommand(interp, "studbutton", studButtonCmd,
    ! 				  (ClientData) main_window, NULL);
      		Tcl_CreateCommand(interp, "tributton", triButtonCmd,
    ! 				  (ClientData) main_window, NULL);
      	}
      #endif
    
    
    
    From python-dev@python.org  Fri Aug  4 17:54:57 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Fri, 4 Aug 2000 09:54:57 -0700
    Subject: [Python-checkins] CVS: python/nondist/src/Compiler/compiler transformer.py,1.11,1.12
    Message-ID: <200008041654.JAA02492@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/src/Compiler/compiler
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1877
    
    Modified Files:
    	transformer.py 
    Log Message:
    update my email address
    fix com_call_function to cope with trailing comma in "f(a, b,)"
    
    
    Index: transformer.py
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/src/Compiler/compiler/transformer.py,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** transformer.py	2000/08/03 17:39:13	1.11
    --- transformer.py	2000/08/04 16:54:54	1.12
    ***************
    *** 12,16 ****
      #
      # Support for ast.Node subclasses written and other revisions by
    ! #  Jeremy Hylton (jeremy@cnri.reston.va.us)
      #
      
    --- 12,16 ----
      #
      # Support for ast.Node subclasses written and other revisions by
    ! #  Jeremy Hylton (jeremy@beopen.com)
      #
      
    ***************
    *** 1002,1005 ****
    --- 1002,1008 ----
          else:
              i = i + 1 # No broken by star arg, so skip the last one we processed.
    +     if i < len_nodelist and nodelist[i][0] == token.COMMA:
    +         # need to accept an application that looks like "f(a, b,)"
    +         i = i + 1
          star_node = dstar_node = None
          while i < len_nodelist:
    
    
    
    From python-dev@python.org  Fri Aug  4 17:56:54 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Fri, 4 Aug 2000 09:56:54 -0700
    Subject: [Python-checkins] CVS: python/nondist/src/Compiler/compiler pycodegen.py,1.20,1.21
    Message-ID: <200008041656.JAA04669@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/src/Compiler/compiler
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3989
    
    Modified Files:
    	pycodegen.py 
    Log Message:
    replace most calls to emit 'SET_LINENO' will call to method set_lineno
    based on bug report by Neil Schemenauer
    
    
    Index: pycodegen.py
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/src/Compiler/compiler/pycodegen.py,v
    retrieving revision 1.20
    retrieving revision 1.21
    diff -C2 -r1.20 -r1.21
    *** pycodegen.py	2000/05/02 22:32:59	1.20
    --- pycodegen.py	2000/08/04 16:56:51	1.21
    ***************
    *** 106,109 ****
    --- 106,125 ----
                  self.emit(prefix + '_GLOBAL', name)
      
    +     def set_lineno(self, node):
    +         """Emit SET_LINENO if node has lineno attribute
    + 
    +         Returns true if SET_LINENO was emitted.
    + 
    +         There are no rules for when an AST node should have a lineno
    +         attribute.  The transformer and AST code need to be reviewed
    +         and a consistent policy implemented and documented.  Until
    +         then, this method works around missing line numbers.
    +         """
    +         lineno = getattr(node, 'lineno', None)
    +         if lineno is not None:
    +             self.emit('SET_LINENO', lineno)
    +             return 1
    +         return 0
    + 
          # The first few visitor methods handle nodes that generator new
          # code objects 
    ***************
    *** 129,133 ****
      	walk(node.code, gen)
      	gen.finish()
    ! 	self.emit('SET_LINENO', node.lineno)
              for default in node.defaults:
                  self.visit(default)
    --- 145,149 ----
      	walk(node.code, gen)
      	gen.finish()
    !         self.set_lineno(node)
              for default in node.defaults:
                  self.visit(default)
    ***************
    *** 139,143 ****
              walk(node.code, gen)
              gen.finish()
    !         self.emit('SET_LINENO', node.lineno)
              self.emit('LOAD_CONST', node.name)
              for base in node.bases:
    --- 155,159 ----
              walk(node.code, gen)
              gen.finish()
    !         self.set_lineno(node)
              self.emit('LOAD_CONST', node.name)
              for base in node.bases:
    ***************
    *** 159,164 ****
      	for i in range(numtests):
      	    test, suite = node.tests[i]
    ! 	    if hasattr(test, 'lineno'):
    ! 		self.emit('SET_LINENO', test.lineno)
      	    self.visit(test)
      ## 	    if i == numtests - 1 and not node.else_:
    --- 175,179 ----
      	for i in range(numtests):
      	    test, suite = node.tests[i]
    !             self.set_lineno(test)
      	    self.visit(test)
      ## 	    if i == numtests - 1 and not node.else_:
    ***************
    *** 179,183 ****
      
          def visitWhile(self, node):
    ! 	self.emit('SET_LINENO', node.lineno)
      
      	loop = self.newBlock()
    --- 194,198 ----
      
          def visitWhile(self, node):
    !         self.set_lineno(node)
      
      	loop = self.newBlock()
    ***************
    *** 190,194 ****
      	self.loops.push(loop)
      
    ! 	self.emit('SET_LINENO', node.lineno)
      	self.visit(node.test)
      	self.emit('JUMP_IF_FALSE', else_ or after)
    --- 205,209 ----
      	self.loops.push(loop)
      
    !         self.set_lineno(node)
      	self.visit(node.test)
      	self.emit('JUMP_IF_FALSE', else_ or after)
    ***************
    *** 213,222 ****
              self.loops.push(start)
      
    !         self.emit('SET_LINENO', node.lineno)
      	self.emit('SETUP_LOOP', after)
              self.visit(node.list)
              self.visit(ast.Const(0))
      	self.nextBlock(start)
    !         self.emit('SET_LINENO', node.lineno)
              self.emit('FOR_LOOP', anchor)
              self.visit(node.assign)
    --- 228,237 ----
              self.loops.push(start)
      
    !         self.set_lineno(node)
      	self.emit('SETUP_LOOP', after)
              self.visit(node.list)
              self.visit(ast.Const(0))
      	self.nextBlock(start)
    !         self.set_lineno(node)
              self.emit('FOR_LOOP', anchor)
              self.visit(node.assign)
    ***************
    *** 234,238 ****
      	    raise SyntaxError, "'break' outside loop (%s, %d)" % \
      		  (self.filename, node.lineno)
    ! 	self.emit('SET_LINENO', node.lineno)
      	self.emit('BREAK_LOOP')
      
    --- 249,253 ----
      	    raise SyntaxError, "'break' outside loop (%s, %d)" % \
      		  (self.filename, node.lineno)
    !         self.set_lineno(node)
      	self.emit('BREAK_LOOP')
      
    ***************
    *** 242,246 ****
      		  (self.filename, node.lineno)
              l = self.loops.top()
    !         self.emit('SET_LINENO', node.lineno)
              self.emit('JUMP_ABSOLUTE', l)
      	self.nextBlock()
    --- 257,261 ----
      		  (self.filename, node.lineno)
              l = self.loops.top()
    !         self.set_lineno(node)
              self.emit('JUMP_ABSOLUTE', l)
      	self.nextBlock()
    ***************
    *** 292,296 ****
      	# transformation of the AST before this stage
      	end = self.newBlock()
    ! 	self.emit('SET_LINENO', node.lineno)
              # XXX __debug__ and AssertionError appear to be special cases
              # -- they are always loaded as globals even if there are local
    --- 307,311 ----
      	# transformation of the AST before this stage
      	end = self.newBlock()
    !         self.set_lineno(node)
              # XXX __debug__ and AssertionError appear to be special cases
              # -- they are always loaded as globals even if there are local
    ***************
    *** 310,314 ****
      
          def visitRaise(self, node):
    !         self.emit('SET_LINENO', node.lineno)
              n = 0
              if node.expr1:
    --- 325,329 ----
      
          def visitRaise(self, node):
    !         self.set_lineno(node)
              n = 0
              if node.expr1:
    ***************
    *** 330,334 ****
              else:
                  lElse = end
    !         self.emit('SET_LINENO', node.lineno)
              self.emit('SETUP_EXCEPT', handlers)
              self.visit(node.body)
    --- 345,349 ----
              else:
                  lElse = end
    !         self.set_lineno(node)
              self.emit('SETUP_EXCEPT', handlers)
              self.visit(node.body)
    ***************
    *** 340,345 ****
              for i in range(len(node.handlers)):
                  expr, target, body = node.handlers[i]
    !             if hasattr(expr, 'lineno'):
    !                 self.emit('SET_LINENO', expr.lineno)
                  if expr:
                      self.emit('DUP_TOP')
    --- 355,359 ----
              for i in range(len(node.handlers)):
                  expr, target, body = node.handlers[i]
    !             self.set_lineno(expr)
                  if expr:
                      self.emit('DUP_TOP')
    ***************
    *** 369,373 ****
          def visitTryFinally(self, node):
              final = self.newBlock()
    !         self.emit('SET_LINENO', node.lineno)
              self.emit('SETUP_FINALLY', final)
              self.visit(node.body)
    --- 383,387 ----
          def visitTryFinally(self, node):
              final = self.newBlock()
    !         self.set_lineno(node)
              self.emit('SETUP_FINALLY', final)
              self.visit(node.body)
    ***************
    *** 403,410 ****
              
          def visitPass(self, node):
    !         self.emit('SET_LINENO', node.lineno)
      
          def visitImport(self, node):
    !         self.emit('SET_LINENO', node.lineno)
              for name in node.names:
                  self.emit('IMPORT_NAME', name)
    --- 417,424 ----
              
          def visitPass(self, node):
    !         self.set_lineno(node)
      
          def visitImport(self, node):
    !         self.set_lineno(node)
              for name in node.names:
                  self.emit('IMPORT_NAME', name)
    ***************
    *** 412,416 ****
      
          def visitFrom(self, node):
    !         self.emit('SET_LINENO', node.lineno)
              self.emit('IMPORT_NAME', node.modname)
              for name in node.names:
    --- 426,430 ----
      
          def visitFrom(self, node):
    !         self.set_lineno(node)
              self.emit('IMPORT_NAME', node.modname)
              for name in node.names:
    ***************
    *** 427,431 ****
      
          def visitAssign(self, node):
    !         self.emit('SET_LINENO', node.lineno)
              self.visit(node.expr)
              dups = len(node.nodes) - 1
    --- 441,445 ----
      
          def visitAssign(self, node):
    !         self.set_lineno(node)
              self.visit(node.expr)
              dups = len(node.nodes) - 1
    ***************
    *** 478,483 ****
              pos = 0
              kw = 0
    !         if hasattr(node, 'lineno'):
    !             self.emit('SET_LINENO', node.lineno)
              self.visit(node.node)
              for arg in node.args:
    --- 492,496 ----
              pos = 0
              kw = 0
    !         self.set_lineno(node)
              self.visit(node.node)
              for arg in node.args:
    ***************
    *** 497,501 ****
      
          def visitPrint(self, node):
    !         self.emit('SET_LINENO', node.lineno)
              for child in node.nodes:
                  self.visit(child)
    --- 510,514 ----
      
          def visitPrint(self, node):
    !         self.set_lineno(node)
              for child in node.nodes:
                  self.visit(child)
    ***************
    *** 507,511 ****
      
          def visitReturn(self, node):
    !         self.emit('SET_LINENO', node.lineno)
              self.visit(node.value)
              self.emit('RETURN_VALUE')
    --- 520,524 ----
      
          def visitReturn(self, node):
    !         self.set_lineno(node)
              self.visit(node.value)
              self.emit('RETURN_VALUE')
    ***************
    *** 638,650 ****
      
          def visitDict(self, node):
    ! 	# XXX is this a good general strategy?  could it be done 
    ! 	# separately from the general visitor
    ! 	lineno = getattr(node, 'lineno', None)
    ! 	if lineno:
    ! 	    self.emit('SET_LINENO', lineno)
              self.emit('BUILD_MAP', 0)
              for k, v in node.items:
      	    lineno2 = getattr(node, 'lineno', None)
    ! 	    if lineno != lineno2:
      		self.emit('SET_LINENO', lineno2)
      		lineno = lineno2
    --- 651,661 ----
      
          def visitDict(self, node):
    !         lineno = getattr(node, 'lineno', None)
    !         if lineno:
    !             set.emit('SET_LINENO', lineno)
              self.emit('BUILD_MAP', 0)
              for k, v in node.items:
      	    lineno2 = getattr(node, 'lineno', None)
    !             if lineno2 is not None and lineno != lineno2:
      		self.emit('SET_LINENO', lineno2)
      		lineno = lineno2
    ***************
    *** 688,692 ****
      	if func.kwargs:
      	    self.graph.setFlag(CO_VARKEYWORDS)
    !         self.emit('SET_LINENO', func.lineno)
              if hasTupleArg:
                  self.generateArgUnpack(func.argnames)
    --- 699,703 ----
      	if func.kwargs:
      	    self.graph.setFlag(CO_VARKEYWORDS)
    !         self.set_lineno(func)
              if hasTupleArg:
                  self.generateArgUnpack(func.argnames)
    
    
    
    From python-dev@python.org  Fri Aug  4 18:02:05 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Fri, 4 Aug 2000 10:02:05 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Tools/compiler/compiler - New directory
    Message-ID: <200008041702.KAA11379@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Tools/compiler/compiler
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv11225/compiler
    
    Log Message:
    Directory /cvsroot/python/python/dist/src/Tools/compiler/compiler added to the repository
    
    
    
    
    From python-dev@python.org  Fri Aug  4 18:04:01 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Fri, 4 Aug 2000 10:04:01 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Tools README,1.5,1.6
    Message-ID: <200008041704.KAA14818@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Tools
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14043
    
    Modified Files:
    	README 
    Log Message:
    add note about compiler directory
    (is bgen still "still under development"?)
    
    
    Index: README
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Tools/README,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** README	1998/04/10 20:58:53	1.5
    --- README	2000/08/04 17:03:58	1.6
    ***************
    *** 5,8 ****
    --- 5,12 ----
      		description.  Still under development!
      
    + compiler        A Python source to bytecode compiler written in
    +                 Python, including an interface for manipulating
    +                 abstract syntax trees.  Still under development.
    + 
      faqwiz		FAQ Wizard.
      		See http://grail.cnri.reston.va.us/cgi-bin/faqw.py
    
    
    
    From python-dev@python.org  Sat Aug  5 01:43:15 2000
    From: python-dev@python.org (Greg Ward)
    Date: Fri, 4 Aug 2000 17:43:15 -0700
    Subject: [Python-checkins] CVS: distutils/doc/dist dist.tex,1.18,1.19
    Message-ID: <200008050043.RAA27050@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/doc/dist
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27040
    
    Modified Files:
    	dist.tex 
    Log Message:
    A bundle of wording improvements, corrections, clarifications, updates, 
    and so forth.
    
    Index: dist.tex
    ===================================================================
    RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v
    retrieving revision 1.18
    retrieving revision 1.19
    diff -C2 -r1.18 -r1.19
    *** dist.tex	2000/06/30 03:36:41	1.18
    --- dist.tex	2000/08/05 00:43:11	1.19
    ***************
    *** 22,35 ****
      for installing and maintaining third-party modules.  With the
      introduction of the Python Distribution Utilities (Distutils for short)
    ! in Python 2.0, this situation should start to improve.
      
      This document only covers using the Distutils to distribute your Python
    ! modules.  Using the Distutils does not tie you to Python 2.0, though:
    ! the Distutils work just fine with Python 1.5, and it is reasonable (and
    ! expected to become commonplace) to expect users of Python 1.5 to
      download and install the Distutils separately before they can install
    ! your modules.  Python 2.0 users, of course, won't have to add anything
    ! to their Python installation in order to use the Distutils to install
    ! third-party modules.
      
      This document concentrates on the role of developer/distributor: if
    --- 22,35 ----
      for installing and maintaining third-party modules.  With the
      introduction of the Python Distribution Utilities (Distutils for short)
    ! in Python 1.6, this situation should start to improve.
      
      This document only covers using the Distutils to distribute your Python
    ! modules.  Using the Distutils does not tie you to Python 1.6, though:
    ! the Distutils work just fine with Python 1.5.2, and it is reasonable
    ! (and expected to become commonplace) to expect users of Python 1.5.2 to
      download and install the Distutils separately before they can install
    ! your modules.  Python 1.6 (or later) users, of course, won't have to add
    ! anything to their Python installation in order to use the Distutils to
    ! install third-party modules.
      
      This document concentrates on the role of developer/distributor: if
    ***************
    *** 69,75 ****
      
      The setup script is usually quite simple, although since it's written in
    ! Python, there are no arbitrary limits to what you can do.  If all you
    ! want to do is distribute a module called \module{foo}, contained in a
    ! file \file{foo.py}, then your setup script can be as little as this:
      \begin{verbatim}
      from distutils.core import setup
    --- 69,76 ----
      
      The setup script is usually quite simple, although since it's written in
    ! Python, there are no arbitrary limits to what you can do with it.  If
    ! all you want to do is distribute a module called \module{foo}, contained
    ! in a file \file{foo.py}, then your setup script can be as little as
    ! this:
      \begin{verbatim}
      from distutils.core import setup
    ***************
    *** 119,123 ****
      their own code occasionally).
      
    - \XXX{only partially implemented}%
      If you want to make things really easy for your users, you can create
      one or more built distributions for them.  For instance, if you are
    --- 120,123 ----
    ***************
    *** 129,135 ****
      python setup.py bdist_wininst
      \end{verbatim}
    ! will create an executable installer, \file{Foo-1\_0.exe}, in the current
    ! directory.
      
      (Another way to create executable installers for Windows is with the
      \command{bdist\_wise} command, which uses Wise---the commercial
    --- 129,136 ----
      python setup.py bdist_wininst
      \end{verbatim}
    ! will create an executable installer, \file{Foo-1.0.win32.exe}, in the
    ! current directory.
      
    + \XXX{not implemented yet}
      (Another way to create executable installers for Windows is with the
      \command{bdist\_wise} command, which uses Wise---the commercial
    ***************
    *** 143,151 ****
      work; it's available from \url{http://foo/bar/baz}.)
      
    ! Other \command{bdist} commands exist for other platforms: for example,
    ! \command{bdist\_rpm} for RPM-based Linux systems, (\command{bdist\_deb})
    ! for Debian-based Linux systems, and so forth.  See
    ! section~\ref{bdist-cmds} for details on all the \command{bdist}
    ! commands.
      
      
    --- 144,162 ----
      work; it's available from \url{http://foo/bar/baz}.)
      
    ! Currently (Distutils 0.9.1), the are only other useful built
    ! distribution format is RPM, implemented by the \command{bdist\_rpm}
    ! command.  For example, the following command will create an RPM file
    ! called \file{Foo-1.0.noarch.rpm}:
    ! \begin{verbatim}
    ! python setup.py bdist_rpm
    ! \end{verbatim}
    ! (This uses the \command{rpm} command, so has to be run on an RPM-based
    ! system such as Red Hat Linux, SuSE Linux, or Mandrake Linux.)
    ! 
    ! You can find out what distribution formats are available at any time by
    ! running
    ! \begin{verbatim}
    ! python setup.py bdist --help-formats
    ! \end{verbatim}
      
      
    ***************
    *** 159,165 ****
      \begin{description}
      \item[module] the basic unit of code reusability in Python: a block of
    !   code imported by some other code.  There are three types of modules
    !   that concern us here: pure Python modules, extension modules, and
    !   packages.
      \item[pure Python module] a module written in Python and contained in a
        single \file{.py} file (and possibly associated \file{.pyc} and/or
    --- 170,175 ----
      \begin{description}
      \item[module] the basic unit of code reusability in Python: a block of
    !   code imported by some other code.  Three types of modules concern us
    !   here: pure Python modules, extension modules, and packages.
      \item[pure Python module] a module written in Python and contained in a
        single \file{.py} file (and possibly associated \file{.pyc} and/or
    ***************
    *** 225,232 ****
      Here's a slightly more involved example, which we'll follow for the next
      couple of sections: the Distutils' own setup script.  (Keep in mind that
    ! although the Distutils are included with Python 2.0, they also have an
    ! independent existence so that Python 1.5 users can use them to install
    ! other module distributions.  The Distutils' own setup script is used to
    ! install the package into Python 1.5.)
      
      \begin{verbatim}
    --- 235,242 ----
      Here's a slightly more involved example, which we'll follow for the next
      couple of sections: the Distutils' own setup script.  (Keep in mind that
    ! although the Distutils are included with Python 1.6 and later, they also
    ! have an independent existence so that Python 1.5.2 users can use them to
    ! install other module distributions.  The Distutils' own setup script,
    ! shown here, is used to install the package into Python 1.5.2.)
      
      \begin{verbatim}
    ***************
    *** 237,241 ****
      setup (name = "Distutils",
             version = "1.0",
    !        description = "Python Module Distribution Utilities",
             author = "Greg Ward",
             author_email = "gward@python.net",
    --- 247,251 ----
      setup (name = "Distutils",
             version = "1.0",
    !        description = "Python Distribution Utilities",
             author = "Greg Ward",
             author_email = "gward@python.net",
    ***************
    *** 285,299 ****
      that's no problem: you just have to supply the \option{package\_dir}
      option to tell the Distutils about your convention.  For example, say
    ! you keep all Python source under \file{lib}, so that modules not in any
    ! package are right in \file{lib}, modules in the \module{foo} package
    ! are in \file{lib/foo}, and so forth.  Then you would put
      \begin{verbatim}
      package_dir = {'': 'lib'}
      \end{verbatim}
      in your setup script.  (The keys to this dictionary are package names,
    ! and an empty package name stands for the ``root package,'' i.e. no
    ! package at all.  The values are directory names relative to your
    ! distribution root.)  In this case, when you say
    ! \code{packages = ['foo']}, you are promising that the file
      \file{lib/foo/\_\_init\_\_.py} exists.
      
    --- 295,309 ----
      that's no problem: you just have to supply the \option{package\_dir}
      option to tell the Distutils about your convention.  For example, say
    ! you keep all Python source under \file{lib}, so that modules in the
    ! ``root package'' (i.e., not in any package at all) are right in
    ! \file{lib}, modules in the \module{foo} package are in \file{lib/foo},
    ! and so forth.  Then you would put
      \begin{verbatim}
      package_dir = {'': 'lib'}
      \end{verbatim}
      in your setup script.  (The keys to this dictionary are package names,
    ! and an empty package name stands for the root package.  The values are
    ! directory names relative to your distribution root.)  In this case, when
    ! you say \code{packages = ['foo']}, you are promising that the file
      \file{lib/foo/\_\_init\_\_.py} exists.
      
    ***************
    *** 338,343 ****
      \label{sec:describing-extensions}
      
    - \XXX{be sure to describe the whole \code{build\_info} dict, including
    -   \code{extra\_compile\_args} and \code{extra\_link\_args}}
      
      
    --- 348,351 ----
    ***************
    *** 345,350 ****
      \label{setup-config}
      
    - \XXX{not implemented yet!}
    - 
      Often, it's not possible to write down everything needed to build a
      distribution \emph{a priori}.  You need to get some information from the
    --- 353,356 ----
    ***************
    *** 492,497 ****
      \item if the manifest file, \file{MANIFEST} doesn't exist, read
        \file{MANIFEST.in} and create the manifest
    ! \item if \file{MANIFEST.in} is more recent than \file{MANIFEST},
    !   recreate \file{MANIFEST} by reading \file{MANIFEST.in}
      \item use the list of files now in \file{MANIFEST} (either just
        generated or read in) to create the source distribution archive(s)
    --- 498,504 ----
      \item if the manifest file, \file{MANIFEST} doesn't exist, read
        \file{MANIFEST.in} and create the manifest
    ! \item if either \file{MANIFEST.in} or the setup script (\file{setup.py})
    !   are more recent than \file{MANIFEST}, recreate \file{MANIFEST} by
    !   reading \file{MANIFEST.in}
      \item use the list of files now in \file{MANIFEST} (either just
        generated or read in) to create the source distribution archive(s)
    ***************
    *** 506,511 ****
      python setup.py sdist --force-manifest
      \end{verbatim}
    - \XXX{this is stupid, but is there a better way to do it without
    -   reprocessing MANIFEST.in every single bloody time?}
      
      Or, you might just want to (re)generate the manifest, but not create a
    --- 513,516 ----
    ***************
    *** 563,614 ****
      in this case), does a ``fake'' installation (also in the \file{build}
      directory), and creates the default type of built distribution for my
    ! platform.  In Distutils 0.8, only two types of built distribution are
    ! supported: \code{gztar} (default on non-Linux Unix) and \code{zip}
    ! (default on Windows).  Thus, the above command on a Unix system creates
    ! \file{Distutils-0.8.built-posix.tar.gz}; unpacking this tarball from
    ! Python's \filevar{prefix} directory installs the Distutils just as
    ! though you had downloaded the source distribution and run \code{python
    !   setup.py install}.  Obviously, for pure Python distributions, this
    ! isn't a huge win---but for non-pure distributions, which include
    ! extensions that would need to be compiled, it can mean the difference
    ! between someone being able to use your extensions or not.
      
      \XXX{filenames are inaccurate here!}
      
      The \command{bdist} command has a \longprogramopt{format} option,
    ! similar to the \command{sdist} command, that you can use to select which
    ! formats to generate: for example,
      \begin{verbatim}
      python setup.py bdist --format=zip
      \end{verbatim}
      would, when run on a Unix system, create
    ! \file{Distutils-0.8.built-posix.tar.gz}---again, this archive would be
    ! unpacked from Python's \filevar{prefix} directory to install the
    ! Distutils.
      
      The available formats for built distributions are:
      \begin{tableiii}{l|l|c}{code}%
        {Format}{Description}{Notes}
    !   \lineiii{zip}{zip file (\file{.zip})}{(1)}
    !   \lineiii{gztar}{gzipped tar file (\file{.tar.gz})}{(2)}
        \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{}
        \lineiii{tar}{tar file (\file{.tar})}{}
    !   \lineiii{rpm}{RPM}{(3)}
    !   \lineiii{srpm}{source RPM}{}
    !   \lineiii{wise}{Wise installer for Windows}{}
      \end{tableiii}
      
      \noindent Notes:
      \begin{description}
    ! \item[(1)] default on Windows
    ! \item[(2)] default on Unix
    ! \item[(3)] not implemented yet; will be default on RPM-based Linux
    !   systems
    ! \item[(5)] not implemented yet; will be default on Windows
      \end{description}
      
      You don't have to use the \command{bdist} command with the
      \longprogramopt{formats} option; you can also use the command that
    ! directly implements the format you're interested in.  Many of these
      \command{bdist} ``sub-commands'' actually generate several similar
      formats; for instance, the \command{bdist\_dumb} command generates all
    --- 568,622 ----
      in this case), does a ``fake'' installation (also in the \file{build}
      directory), and creates the default type of built distribution for my
    ! platform.  Currently, the default format for built distributions is a
    ! ``dumb'' archive---tarball on Unix, ZIP file on Windows.  (These are
    ! called ``dumb'' built distributions, because they must be unpacked in a
    ! specific location to work.)
    ! 
    ! Thus, the above command on a Unix system creates
    ! \file{Distutils-0.9.1.\filevar{plat}.tar.gz}; unpacking this tarball
    ! from the root of the filesystemq installs the Distutils just as though
    ! you had downloaded the source distribution and run \code{python setup.py
    !   install}.  (Assuming that the target system has their Python
    ! installation laid out the same as you do---another reason these are
    ! called ``dumb'' distributions.)  Obviously, for pure Python
    ! distributions, this isn't a huge win---but for non-pure distributions,
    ! which include extensions that would need to be compiled, it can mean the
    ! difference between someone being able to use your extensions or not.
      
      \XXX{filenames are inaccurate here!}
      
      The \command{bdist} command has a \longprogramopt{format} option,
    ! similar to the \command{sdist} command, which you can use to select the
    ! types of built distribution to generate: for example,
      \begin{verbatim}
      python setup.py bdist --format=zip
      \end{verbatim}
      would, when run on a Unix system, create
    ! \file{Distutils-0.8.\filevar{plat}.zip}---again, this archive would be
    ! unpacked from the root directory to install the Distutils.
      
      The available formats for built distributions are:
      \begin{tableiii}{l|l|c}{code}%
        {Format}{Description}{Notes}
    !   \lineiii{zip}{zip file (\file{.zip})}{}
    !   \lineiii{gztar}{gzipped tar file (\file{.tar.gz})}{(1)}
        \lineiii{ztar}{compressed tar file (\file{.tar.Z})}{}
        \lineiii{tar}{tar file (\file{.tar})}{}
    !   \lineiii{rpm}{RPM}{}
    !   \lineiii{srpm}{source RPM}{\XXX{to do!}}
    !   \lineiii{wininst}{self-extracting ZIP file for Windows}{(2)}
    !   %\lineiii{wise}{Wise installer for Windows}{(3)}
      \end{tableiii}
      
      \noindent Notes:
      \begin{description}
    ! \item[(1)] default on Unix
    ! \item[(2)] default on Windows \XXX{to-do!}
    ! %\item[(3)] not implemented yet
      \end{description}
      
      You don't have to use the \command{bdist} command with the
      \longprogramopt{formats} option; you can also use the command that
    ! directly implements the format you're interested in.  Some of these
      \command{bdist} ``sub-commands'' actually generate several similar
      formats; for instance, the \command{bdist\_dumb} command generates all
    ***************
    *** 621,625 ****
        \lineii{bdist\_dumb}{tar, ztar, gztar, zip}
        \lineii{bdist\_rpm}{rpm, srpm}
    !   \lineii{bdist\_wise}{wise}
      \end{tableii}
      
    --- 629,634 ----
        \lineii{bdist\_dumb}{tar, ztar, gztar, zip}
        \lineii{bdist\_rpm}{rpm, srpm}
    !   \lineii{bdist\_wininst}{wininst}
    !   %\lineii{bdist\_wise}{wise}
      \end{tableii}
      
    
    
    
    From python-dev@python.org  Sat Aug  5 01:58:20 2000
    From: python-dev@python.org (Greg Ward)
    Date: Fri, 4 Aug 2000 17:58:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.42,1.43
    Message-ID: <200008050058.RAA28244@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/PC
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28228
    
    Modified Files:
    	config.h 
    Log Message:
    Pragmas that instruct the linker to link against python20.lib (or
    python20_d.lib) only active on MSVC++; different library formats needed
    for different compilers, and it's handled by the Distutils anyways.
    
    
    Index: config.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
    retrieving revision 1.42
    retrieving revision 1.43
    diff -C2 -r1.42 -r1.43
    *** config.h	2000/06/30 22:17:53	1.42
    --- config.h	2000/08/05 00:58:14	1.43
    ***************
    *** 288,293 ****
      #ifdef MS_WIN32
      
    ! #ifndef USE_DL_EXPORT
    ! /* So nobody needs to specify the .lib in their Makefile any more */
      #ifdef _DEBUG
      #pragma comment(lib,"python20_d.lib")
    --- 288,295 ----
      #ifdef MS_WIN32
      
    ! #if !defined(USE_DL_EXPORT) && defined(_MSC_VER)
    ! /* So nobody using MSVC needs to specify the .lib in their Makefile any
    !    more (other compilers will still need to do so, but that's taken care
    !    of by the Distutils, so it's not a problem). */
      #ifdef _DEBUG
      #pragma comment(lib,"python20_d.lib")
    
    
    
    From python-dev@python.org  Sat Aug  5 02:00:23 2000
    From: python-dev@python.org (Greg Ward)
    Date: Fri, 4 Aug 2000 18:00:23 -0700
    Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.35,1.35.2.1
    Message-ID: <200008050100.SAA28520@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/PC
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28486
    
    Modified Files:
          Tag: cnri-16-start
    	config.h 
    Log Message:
    Pragmas that instruct the linker to link against python16.lib (or
    python16_d.lib) only active on MSVC++; different library formats needed
    for different compilers, and it's handled by the Distutils anyways.
    
    
    Index: config.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
    retrieving revision 1.35
    retrieving revision 1.35.2.1
    diff -C2 -r1.35 -r1.35.2.1
    *** config.h	2000/05/10 13:25:32	1.35
    --- config.h	2000/08/05 01:00:21	1.35.2.1
    ***************
    *** 256,261 ****
      #ifdef MS_WIN32
      
    ! #ifndef USE_DL_EXPORT
    ! /* So nobody needs to specify the .lib in their Makefile any more */
      #ifdef _DEBUG
      #pragma comment(lib,"python16_d.lib")
    --- 256,263 ----
      #ifdef MS_WIN32
      
    ! #if !defined(USE_DL_EXPORT) && defined(_MSC_VER)
    ! /* So nobody using MSVC needs to specify the .lib in their Makefile any
    !    more (other compilers will still need it, but that's taken care
    !    of by the Distutils, so it's not a problem). */
      #ifdef _DEBUG
      #pragma comment(lib,"python16_d.lib")
    
    
    
    From python-dev@python.org  Sat Aug  5 02:25:27 2000
    From: python-dev@python.org (Greg Ward)
    Date: Fri, 4 Aug 2000 18:25:27 -0700
    Subject: [Python-checkins] CVS: distutils/distutils util.py,1.41,1.42
    Message-ID: <200008050125.SAA05133@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5092
    
    Modified Files:
    	util.py 
    Log Message:
    Drop the 'extend()' function -- old 1.5.1 compatibility hack that
      wasn't actually used anywhere.
    Drop the "from xxx_util import*" backwards compability hacks.
    
    
    Index: util.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/util.py,v
    retrieving revision 1.41
    retrieving revision 1.42
    diff -C2 -r1.41 -r1.42
    *** util.py	2000/08/02 01:37:30	1.41
    --- util.py	2000/08/05 01:25:24	1.42
    ***************
    *** 12,35 ****
      from distutils.spawn import spawn
      
    - # for backwards compatibility:
    - from distutils.file_util import *
    - from distutils.dir_util import *
    - from distutils.dep_util import *
    - from distutils.archive_util import *
    - 
    - 
    - # More backwards compatibility hacks
    - def extend (list, new_list):
    -     """Appends the list 'new_list' to 'list', just like the 'extend()'
    -        list method does in Python 1.5.2 -- but this works on earlier
    -        versions of Python too."""
    - 
    -     if hasattr (list, 'extend'):
    -         list.extend (new_list)
    -     else:
    -         list[len(list):] = new_list
    - 
    - # extend ()
    - 
      
      def get_platform ():
    --- 12,15 ----
    
    
    
    From python-dev@python.org  Sat Aug  5 02:31:57 2000
    From: python-dev@python.org (Greg Ward)
    Date: Fri, 4 Aug 2000 18:31:57 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command bdist_dumb.py,1.9,1.10 bdist_rpm.py,1.14,1.15 bdist_wininst.py,1.4,1.5 clean.py,1.7,1.8 install.py,1.39,1.40 install_lib.py,1.26,1.27 sdist.py,1.41,1.42
    Message-ID: <200008050131.SAA05629@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5498/command
    
    Modified Files:
    	bdist_dumb.py bdist_rpm.py bdist_wininst.py clean.py 
    	install.py install_lib.py sdist.py 
    Log Message:
    Fixed imports from '*util' modules to not just import everything from util.
    
    Index: bdist_dumb.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_dumb.py,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** bdist_dumb.py	2000/07/05 03:07:37	1.9
    --- bdist_dumb.py	2000/08/05 01:31:54	1.10
    ***************
    *** 11,15 ****
      import os
      from distutils.core import Command
    ! from distutils.util import get_platform, create_tree, remove_tree
      from distutils.errors import *
      
    --- 11,16 ----
      import os
      from distutils.core import Command
    ! from distutils.util import get_platform
    ! from distutils.dir_util import create_tree, remove_tree
      from distutils.errors import *
      
    
    Index: bdist_rpm.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_rpm.py,v
    retrieving revision 1.14
    retrieving revision 1.15
    diff -C2 -r1.14 -r1.15
    *** bdist_rpm.py	2000/07/27 02:13:20	1.14
    --- bdist_rpm.py	2000/08/05 01:31:54	1.15
    ***************
    *** 11,15 ****
      from types import *
      from distutils.core import Command, DEBUG
    ! from distutils.util import get_platform, write_file
      from distutils.errors import *
      
    --- 11,16 ----
      from types import *
      from distutils.core import Command, DEBUG
    ! from distutils.util import get_platform
    ! from distutils.file_util import write_file
      from distutils.errors import *
      
    
    Index: bdist_wininst.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_wininst.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** bdist_wininst.py	2000/07/05 03:08:55	1.4
    --- bdist_wininst.py	2000/08/05 01:31:54	1.5
    ***************
    *** 10,14 ****
      import sys, os, string
      from distutils.core import Command
    ! from distutils.util import get_platform, create_tree, remove_tree
      from distutils.errors import *
      
    --- 10,15 ----
      import sys, os, string
      from distutils.core import Command
    ! from distutils.util import get_platform
    ! from distutils.dir_util import create_tree, remove_tree
      from distutils.errors import *
      
    
    Index: clean.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/clean.py,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** clean.py	2000/05/28 23:47:00	1.7
    --- clean.py	2000/08/05 01:31:54	1.8
    ***************
    *** 9,13 ****
      import os
      from distutils.core import Command
    ! from distutils.util import remove_tree
      
      class clean (Command):
    --- 9,13 ----
      import os
      from distutils.core import Command
    ! from distutils.dir_util import remove_tree
      
      class clean (Command):
    
    Index: install.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/install.py,v
    retrieving revision 1.39
    retrieving revision 1.40
    diff -C2 -r1.39 -r1.40
    *** install.py	2000/06/24 17:22:39	1.39
    --- install.py	2000/08/05 01:31:54	1.40
    ***************
    *** 11,15 ****
      from distutils.core import Command, DEBUG
      from distutils import sysconfig
    ! from distutils.util import write_file, convert_path, subst_vars, change_root
      from distutils.errors import DistutilsOptionError
      from glob import glob
    --- 11,16 ----
      from distutils.core import Command, DEBUG
      from distutils import sysconfig
    ! from distutils.file_util import write_file
    ! from distutils.util import convert_path, subst_vars, change_root
      from distutils.errors import DistutilsOptionError
      from glob import glob
    
    Index: install_lib.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/install_lib.py,v
    retrieving revision 1.26
    retrieving revision 1.27
    diff -C2 -r1.26 -r1.27
    *** install_lib.py	2000/08/02 01:34:18	1.26
    --- install_lib.py	2000/08/05 01:31:54	1.27
    ***************
    *** 5,9 ****
      import sys, os, string
      from distutils.core import Command
    ! from distutils.util import copy_tree
      
      class install_lib (Command):
    --- 5,9 ----
      import sys, os, string
      from distutils.core import Command
    ! from distutils.dir_util import copy_tree
      
      class install_lib (Command):
    
    Index: sdist.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/sdist.py,v
    retrieving revision 1.41
    retrieving revision 1.42
    diff -C2 -r1.41 -r1.42
    *** sdist.py	2000/07/30 01:47:16	1.41
    --- sdist.py	2000/08/05 01:31:54	1.42
    ***************
    *** 11,17 ****
      from glob import glob
      from distutils.core import Command
    ! from distutils.util import \
    !      create_tree, remove_tree, newer, write_file, \
    !      check_archive_formats
      from distutils.text_file import TextFile
      from distutils.errors import *
    --- 11,15 ----
      from glob import glob
      from distutils.core import Command
    ! from distutils import dir_util, dep_util, file_util, archive_util
      from distutils.text_file import TextFile
      from distutils.errors import *
    ***************
    *** 118,122 ****
                            "on platform %s" % os.name
      
    !         bad_format = check_archive_formats (self.formats)
              if bad_format:
                  raise DistutilsOptionError, \
    --- 116,120 ----
                            "on platform %s" % os.name
      
    !         bad_format = archive_util.check_archive_formats (self.formats)
              if bad_format:
                  raise DistutilsOptionError, \
    ***************
    *** 196,200 ****
              template_exists = os.path.isfile(self.template)
              if template_exists:
    !             template_newer = newer(self.template, self.manifest)
      
              # The contents of the manifest file almost certainly depend on the
    --- 194,198 ----
              template_exists = os.path.isfile(self.template)
              if template_exists:
    !             template_newer = dep_util.newer(self.template, self.manifest)
      
              # The contents of the manifest file almost certainly depend on the
    ***************
    *** 205,209 ****
              # developer elects to generate a manifest some other way -- then we
              # can't regenerate the manifest, so we don't.)
    !         setup_newer = newer(sys.argv[0], self.manifest)
      
              # cases:
    --- 203,207 ----
              # developer elects to generate a manifest some other way -- then we
              # can't regenerate the manifest, so we don't.)
    !         setup_newer = dep_util.newer(sys.argv[0], self.manifest)
      
              # cases:
    ***************
    *** 369,373 ****
              named by 'self.manifest'.
              """
    !         self.execute(write_file,
                           (self.manifest, self.filelist.files),
                           "writing manifest file '%s'" % self.manifest)
    --- 367,371 ----
              named by 'self.manifest'.
              """
    !         self.execute(file_util.write_file,
                           (self.manifest, self.filelist.files),
                           "writing manifest file '%s'" % self.manifest)
    ***************
    *** 405,410 ****
              # Create all the directories under 'base_dir' necessary to
              # put 'files' there.
    !         create_tree (base_dir, files,
    !                      verbose=self.verbose, dry_run=self.dry_run)
      
              # And walk over the list of files, either making a hard link (if
    --- 403,408 ----
              # Create all the directories under 'base_dir' necessary to
              # put 'files' there.
    !         dir_util.create_tree (base_dir, files,
    !                               verbose=self.verbose, dry_run=self.dry_run)
      
              # And walk over the list of files, either making a hard link (if
    ***************
    *** 454,458 ****
      
              if not self.keep_tree:
    !             remove_tree (base_dir, self.verbose, self.dry_run)
      
          def get_archive_files (self):
    --- 452,456 ----
      
              if not self.keep_tree:
    !             dir_util.remove_tree (base_dir, self.verbose, self.dry_run)
      
          def get_archive_files (self):
    
    
    
    From python-dev@python.org  Sat Aug  5 22:30:02 2000
    From: python-dev@python.org (Jack Jansen)
    Date: Sat, 5 Aug 2000 14:30:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python getargs.c,2.43,2.44
    Message-ID: <200008052130.OAA13967@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10502
    
    Modified Files:
    	getargs.c 
    Log Message:
    Changed H specifier to mean "bitfield", i.e. any value from
    -32768..65535 is acceptable. Added B specifier (with values from
    -128..255). No L added (which would have completed the set) because l
    already accepts any value (and the letter L is taken for quadwords).
    
    
    Index: getargs.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v
    retrieving revision 2.43
    retrieving revision 2.44
    diff -C2 -r2.43 -r2.44
    *** getargs.c	2000/08/03 18:42:59	2.43
    --- getargs.c	2000/08/05 21:29:58	2.44
    ***************
    *** 410,413 ****
    --- 410,434 ----
      		}
      	
    + 	case 'B': /* byte sized bitfield - both signed and unsigned values allowed */
    + 		{
    + 			char *p = va_arg(*p_va, char *);
    + 			long ival = PyInt_AsLong(arg);
    + 			if (ival == -1 && PyErr_Occurred())
    + 				return "integer";
    + 			else if (ival < SCHAR_MIN) {
    + 				PyErr_SetString(PyExc_OverflowError,
    + 			      "byte-sized integer bitfield is less than minimum");
    + 				return "integer";
    + 			}
    + 			else if (ival > UCHAR_MAX) {
    + 				PyErr_SetString(PyExc_OverflowError,
    + 			      "byte-sized integer bitfield is greater than maximum");
    + 				return "integer";
    + 			}
    + 			else
    + 				*p = (unsigned char) ival;
    + 			break;
    + 		}
    + 	
      	case 'h': /* signed short int */
      		{
    ***************
    *** 431,435 ****
      		}
      	
    ! 	case 'H': /* unsigned short int */
      		{
      			unsigned short *p = va_arg(*p_va, unsigned short *);
    --- 452,456 ----
      		}
      	
    ! 	case 'H': /* short int sized bitfield, both signed and unsigned allowed */
      		{
      			unsigned short *p = va_arg(*p_va, unsigned short *);
    ***************
    *** 437,448 ****
      			if (ival == -1 && PyErr_Occurred())
      				return "integer";
    ! 			else if (ival < 0) {
      				PyErr_SetString(PyExc_OverflowError,
    ! 			      "unsigned short integer is less than minimum");
      				return "integer";
      			}
      			else if (ival > USHRT_MAX) {
      				PyErr_SetString(PyExc_OverflowError,
    ! 			      "unsigned short integer is greater than maximum");
      				return "integer";
      			}
    --- 458,469 ----
      			if (ival == -1 && PyErr_Occurred())
      				return "integer";
    ! 			else if (ival < SHRT_MIN) {
      				PyErr_SetString(PyExc_OverflowError,
    ! 			      "short integer bitfield is less than minimum");
      				return "integer";
      			}
      			else if (ival > USHRT_MAX) {
      				PyErr_SetString(PyExc_OverflowError,
    ! 			      "short integer bitfield is greater than maximum");
      				return "integer";
      			}
    ***************
    *** 1134,1137 ****
    --- 1155,1159 ----
      	
      	case 'b': /* byte -- very short int */
    + 	case 'B': /* byte as bitfield */
      		{
      			(void) va_arg(*p_va, char *);
    ***************
    *** 1145,1149 ****
      		}
      	
    ! 	case 'H': /* unsigned short int */
      		{
      			(void) va_arg(*p_va, unsigned short *);
    --- 1167,1171 ----
      		}
      	
    ! 	case 'H': /* short int as bitfield */
      		{
      			(void) va_arg(*p_va, unsigned short *);
    
    
    
    From python-dev@python.org  Sat Aug  5 22:37:53 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Sat, 5 Aug 2000 14:37:53 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.117,2.118
    Message-ID: <200008052137.OAA22126@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv21345
    
    Modified Files:
    	compile.c 
    Log Message:
    
    Fix some strange indentation and grammar that have been bugging me for
    weeks.
    
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.117
    retrieving revision 2.118
    diff -C2 -r2.117 -r2.118
    *** compile.c	2000/07/22 18:47:25	2.117
    --- compile.c	2000/08/05 21:37:50	2.118
    ***************
    *** 1250,1259 ****
      	if (NCH(n) == 1) {
      		node *sub = CHILD(n, 0); /* subscript */
    ! 		/* Make it is a simple slice.
    ! 		   Should have exactly one colon. */
    !         if ((TYPE(CHILD(sub, 0)) == COLON
    !              || (NCH(sub) > 1 && TYPE(CHILD(sub, 1)) == COLON))
    !             && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop))
    ! 	{
      			if (assigning == OP_APPLY)
      				op = SLICE;
    --- 1250,1258 ----
      	if (NCH(n) == 1) {
      		node *sub = CHILD(n, 0); /* subscript */
    ! 		/* 'Basic' slice, should have exactly one colon. */
    ! 		if ((TYPE(CHILD(sub, 0)) == COLON
    ! 		     || (NCH(sub) > 1 && TYPE(CHILD(sub, 1)) == COLON))
    ! 		    && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop))
    ! 		{
      			if (assigning == OP_APPLY)
      				op = SLICE;
    
    
    
    From python-dev@python.org  Sun Aug  6 20:30:10 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Sun, 6 Aug 2000 12:30:10 -0700
    Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8.2.1,1.8.2.2
    Message-ID: <200008061930.MAA12357@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/PCbuild
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv12341
    
    Modified Files:
          Tag: cnri-16-start
    	python16.wse 
    Log Message:
    Adaptation of 2.0 version; needs work.
    
    Index: python16.wse
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.wse,v
    retrieving revision 1.8.2.1
    retrieving revision 1.8.2.2
    diff -C2 -r1.8.2.1 -r1.8.2.2
    *** python16.wse	2000/08/01 20:30:08	1.8.2.1
    --- python16.wse	2000/08/06 19:30:07	1.8.2.2
    ***************
    *** 2,6 ****
      item: Global
        Version=5.0
    !   Title=Python 1.6 alpha 2
        Flags=00010100
        Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    --- 2,6 ----
      item: Global
        Version=5.0
    !   Title=Python 1.6 beta 1
        Flags=00010100
        Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    ***************
    *** 19,36 ****
        Variable Name1=_SYS_
        Variable Description1=System directory
    !   Variable Default1=C:\WINNT\SYSTEM32
        Variable Flags1=00001001
        Variable Name2=_WISE_
        Variable Description2=WISE root directory
    !   Variable Default2=C:\Program Files\Wise
        Variable Flags2=00001001
        Variable Name3=_SRC_
        Variable Description3=Python source directory
    !   Variable Default3=D:\src\Python-1.6
        Variable Flags3=00001001
        Variable Name4=_DOC_
        Variable Description4=HTML documentation tree directory
    !   Variable Default4=D:\src\Python-1.6\html
        Variable Flags4=00001001
      end
      remarked item: Open/Close INSTALL.LOG
    --- 19,40 ----
        Variable Name1=_SYS_
        Variable Description1=System directory
    !   Variable Default1=C:\Windows\System
        Variable Flags1=00001001
        Variable Name2=_WISE_
        Variable Description2=WISE root directory
    !   Variable Default2=C:\Wise
        Variable Flags2=00001001
        Variable Name3=_SRC_
        Variable Description3=Python source directory
    !   Variable Default3=C:\src\Python-1.6
        Variable Flags3=00001001
        Variable Name4=_DOC_
        Variable Description4=HTML documentation tree directory
    !   Variable Default4=C:\src\Python-1.6\html
        Variable Flags4=00001001
    +   Variable Name5=_TCLMINOR_
    +   Variable Description5=Tcl/Tk Minor Version (e.g. the "3" in "8.3.1")
    +   Variable Default5=3
    +   Variable Flags5=00001000
      end
      remarked item: Open/Close INSTALL.LOG
    ***************
    *** 56,60 ****
      item: Set Variable
        Variable=APPTITLE
    !   Value=Python 1.6 alpha 2
      end
      item: Set Variable
    --- 60,64 ----
      item: Set Variable
        Variable=APPTITLE
    !   Value=Python 1.6 beta 1
      end
      item: Set Variable
    ***************
    *** 88,92 ****
        Direction Variable=DIRECTION
        Display Variable=DISPLAY
    !   Bitmap Pathname=C:\Program Files\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
        X Position=9
        Y Position=10
    --- 92,96 ----
        Direction Variable=DIRECTION
        Display Variable=DISPLAY
    !   Bitmap Pathname=C:\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
        X Position=9
        Y Position=10
    ***************
    *** 912,921 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=.py
        New Value=Python.File
      end
      item: Edit Registry
    -   Total Keys=1
        Key=.py
        New Value=text/plain
    --- 916,923 ----
    ***************
    *** 923,947 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.File
        New Value=Python File
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.File\shell\open\command
        New Value=%MAINDIR%\python.exe "%%1" %%*
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.File\DefaultIcon
        New Value=%MAINDIR%\Py.ico
      end
      item: Edit Registry
    -   Total Keys=1
        Key=.pyw
        New Value=Python.NoConFile
      end
      item: Edit Registry
    -   Total Keys=1
        Key=.pyw
        New Value=text/plain
    --- 925,944 ----
    ***************
    *** 949,998 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.NoConFile
        New Value=Python File (no console)
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.NoConFile\shell\open\command
        New Value=%MAINDIR%\pythonw.exe "%%1" %%*
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.NoConFile\DefaultIcon
        New Value=%MAINDIR%\Py.ico
      end
      item: Edit Registry
    -   Total Keys=1
        Key=.pyc
        New Value=Python.CompiledFile
      end
      item: Edit Registry
    -   Total Keys=1
        Key=.pyo
        New Value=Python.CompiledFile
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.CompiledFile
        New Value=Compiled Python File
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.CompiledFile\shell\open\command
        New Value=%MAINDIR%\python.exe "%%1" %%*
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Python.CompiledFile\DefaultIcon
        New Value=%MAINDIR%\pyc.ico
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\CurrentVersion
        Root=130
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath
        New Value=%MAINDIR%
    --- 946,985 ----
    ***************
    *** 1000,1004 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\%PY_VERSION%\InstallPath\InstallGroup
        New Value=%GROUP%
    --- 987,990 ----
    ***************
    *** 1006,1010 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\%PY_VERSION%\PythonPath
        New Value=%MAINDIR%\Lib\plat-win;%MAINDIR%\Lib;%MAINDIR%\DLLs;%MAINDIR%\Lib\lib-tk
    --- 992,995 ----
    ***************
    *** 1012,1016 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\%PY_VERSION%\Dll
        New Value=%_SYSDEST_%\Python16.dll
    --- 997,1000 ----
    ***************
    *** 1018,1027 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\%PY_VERSION%\Modules
        Root=2
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Microsoft\Windows\CurrentVersion\App Paths\Python.exe
        New Value=%MAINDIR%\Python.exe
    --- 1002,1009 ----
    ***************
    *** 1036,1040 ****
      end
      item: Edit Registry
    -   Total Keys=1
        Key=Software\Python\PythonCore\%PY_VERSION%\Help\Main Python Documentation
        New Value=%MAINDIR%\Doc\index.html
    --- 1018,1021 ----
    ***************
    *** 1049,1053 ****
      end
      item: Include Script
    !   Pathname=%_WISE_%\include\uninstal.wse
      end
      item: If/While Statement
    --- 1030,1034 ----
      end
      item: Include Script
    !   Pathname=C:\Wise\include\uninstal.wse
      end
      item: If/While Statement
    ***************
    *** 1132,1146 ****
      end
      item: Install File
    !   Source=%_SRC_%\..\tcl8.2\bin\tcl82.dll
    !   Destination=%MAINDIR%\DLLs\tcl82.dll
        Flags=0000000000000010
      end
      item: Install File
    !   Source=%_SRC_%\..\tcl8.2\bin\tk82.dll
    !   Destination=%MAINDIR%\DLLs\tk82.dll
        Flags=0000000000000010
      end
      item: Install File
    !   Source=%_SRC_%\..\tcl8.2\lib\*.*
        Destination=%MAINDIR%\tcl
        Flags=0000000100000010
    --- 1113,1127 ----
      end
      item: Install File
    !   Source=%_SRC_%\..\tcl\bin\tcl8%_TCLMINOR_%.dll
    !   Destination=%MAINDIR%\DLLs\tcl8%_TCLMINOR_%.dll
        Flags=0000000000000010
      end
      item: Install File
    !   Source=%_SRC_%\..\tcl\bin\tk8%_TCLMINOR_%.dll
    !   Destination=%MAINDIR%\DLLs\tk8%_TCLMINOR_%.dll
        Flags=0000000000000010
      end
      item: Install File
    !   Source=%_SRC_%\..\tcl\lib\*.*
        Destination=%MAINDIR%\tcl
        Flags=0000000100000010
    ***************
    *** 1151,1155 ****
        Direction Variable=DIRECTION
        Display Variable=DISPLAY
    !   Bitmap Pathname=C:\Program Files\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
        X Position=9
        Y Position=10
    --- 1132,1136 ----
        Direction Variable=DIRECTION
        Display Variable=DISPLAY
    !   Bitmap Pathname=C:\Wise\DIALOGS\TEMPLATE\WIZARD.BMP
        X Position=9
        Y Position=10
    
    
    
    From python-dev@python.org  Sun Aug  6 21:37:27 2000
    From: python-dev@python.org (Greg Ward)
    Date: Sun, 6 Aug 2000 13:37:27 -0700
    Subject: [Python-checkins] CVS: distutils/doc/dist dist.tex,1.19,1.20
    Message-ID: <200008062037.NAA24932@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/doc/dist
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24913
    
    Modified Files:
    	dist.tex 
    Log Message:
    Wrote the "Describing extension modules" section.
    
    Index: dist.tex
    ===================================================================
    RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v
    retrieving revision 1.19
    retrieving revision 1.20
    diff -C2 -r1.19 -r1.20
    *** dist.tex	2000/08/05 00:43:11	1.19
    --- dist.tex	2000/08/06 20:37:24	1.20
    ***************
    *** 275,280 ****
      
      
    ! \subsection{Package directories}
    ! \label{package-dirs}
      
      The \option{packages} option tells the Distutils to process (build,
    --- 275,280 ----
      
      
    ! \subsection{Listing whole packages}
    ! \label{listing-packages}
      
      The \option{packages} option tells the Distutils to process (build,
    ***************
    *** 341,346 ****
      layout implies that these two modules can be found in \file{mod1.py} and
      \file{pkg/mod2.py}, and that \file{pkg/\_\_init\_\_.py} exists as well.
    ! And again, you can override the package/directory layout using the
    ! \option{package\_dir} option.
      
      
    --- 341,346 ----
      layout implies that these two modules can be found in \file{mod1.py} and
      \file{pkg/mod2.py}, and that \file{pkg/\_\_init\_\_.py} exists as well.
    ! And again, you can override the package/directory correspondence using
    ! the \option{package\_dir} option.
      
      
    ***************
    *** 348,351 ****
    --- 348,540 ----
      \label{sec:describing-extensions}
      
    + Just as writing Python extension modules is a bit more complicated than
    + writing pure Python modules, describing them to the Distutils is a bit
    + more complicated.  Unlike pure modules, it's not enough just to list
    + modules or packages and expect the Distutils to go out and find the
    + right files; you have to specify the extension name, source file(s), and
    + any compile/link requirements (include directories, libraries to link
    + with, etc.).
    + 
    + All of this is done through another keyword argument to
    + \function{setup()}, the \option{extensions} option.  \option{extensions}
    + is just a list of \class{Extension} instances, each of which describes a
    + single extension module.  Suppose your distribution includes a single
    + extension, called \module{foo} and implemented by \file{foo.c}.  If no
    + additional instructions to the compiler/linker are needed, describing
    + this extension is quite simple:
    + \begin{verbatim}
    + Extension("foo", ["foo.c"])
    + \end{verbatim}
    + The \class{Extension} class can be imported from
    + \module{distutils.core}, along with \function{setup()}.  Thus, the setup
    + script for a module distribution that contains only this one extension
    + and nothing else might be:
    + \begin{verbatim}
    + from distutils.core import setup, Extension
    + setup(name = "foo", version = "1.0",
    +       extensions = [Extension("foo", ["foo.c"])])
    + \end{verbatim}
    + 
    + The \class{Extension} class (actually, the underlying extension-building
    + machinery implemented by the \command{built\_ext} command) supports a
    + great deal of flexibility in describing Python extensions, which is
    + explained in the following sections.  
    + 
    + 
    + \subsubsection{Extension names and packages}
    + 
    + The first argument to the \class{Extension} constructor is always the
    + name of the extension, including any package names.  For example,
    + \begin{verbatim}
    + Extension("foo", ["src/foo1.c", "src/foo2.c"])
    + \end{verbatim}
    + describes an extension that lives in the root package, while
    + \begin{verbatim}
    + Extension("pkg.foo", ["src/foo1.c", "src/foo2.c"])
    + \end{verbatim}
    + describes the same extension in the \module{pkg} package.  The source
    + files and resulting object code are identical in both cases; the only
    + difference is where in the filesystem (and therefore where in Python's
    + namespace hierarchy) the resulting extension lives.
    + 
    + If you have a number of extensions all in the same package (or all under
    + the same base package), use the \option{ext\_package} keyword argument
    + to \function{setup()}.  For example,
    + \begin{verbatim}
    + setup(...
    +       ext_package = "pkg",
    +       extensions = [Extension("foo", ["foo.c"]),
    +                     Extension("subpkg.bar", ["bar.c"])]
    +      )
    + \end{verbatim}
    + will compile \file{foo.c} to the extension \module{pkg.foo}, and
    + \file{bar.c} to \module{pkg.subpkg.bar}.
    + 
    + 
    + \subsubsection{Extension source files}
    + 
    + The second argument to the \class{Extension} constructor is a list of
    + source files.  Since the Distutils currently only support C/C++
    + extensions, these are normally C/C++ source files.  (Be sure to use
    + appropriate extensions to distinguish C++ source files: \file{.cc} and
    + \file{.cpp} seem to be recognized by both Unix and Windows compilers.)
    + 
    + However, you can also include SWIG interface (\file{.i}) files in the
    + list; the \command{build\_ext} command knows how to deal with SWIG
    + extensions: it will run SWIG on the interface file and compile the
    + resulting C/C++ file into your extension.
    + 
    + \XXX{SWIG support is rough around the edges and largely untested;
    +   especially SWIG support of C++ extensions!  Explain in more detail
    +   here when the interface firms up.}
    + 
    + On some platforms, you can include non-source files that are processed
    + by the compiler and included in your extension.  Currently, this just
    + means Windows resource files for Visual C++.  \XXX{get more detail on
    +   this feature from Thomas Heller!}
    + 
    + 
    + \subsubsection{Preprocessor options}
    + 
    + Three optional arguments to \class{Extension} will help if you need to
    + specify include directories to search or preprocessor macros to
    + define/undefine: \code{include\_dirs}, \code{define\_macros}, and
    + \code{undef\_macros}.
    + 
    + For example, if your extension requires header files in the
    + \file{include} directory under your distribution root, use the
    + \code{include\_dirs} option:
    + \begin{verbatim}
    + Extension("foo", ["foo.c"], include_dirs=["include"])
    + \end{verbatim}
    + 
    + You can specify absolute directories there; if you know that your
    + extension will only be built on Unix systems with X11R6 installed to
    + \file{/usr}, you can get away with
    + \begin{verbatim}
    + Extension("foo", ["foo.c"], include_dirs=["/usr/include/X11"])
    + \end{verbatim}
    + You should avoid this sort of non-portable usage if you plan to
    + distribute your code: it's probably better to write your code to include
    + (e.g.) \code{}.
    + 
    + If you need to include header files from some other Python extension,
    + you can take advantage of the fact that the Distutils install extension
    + header files in a consistent way.  For example, the Numerical Python
    + header files are installed (on a standard Unix installation) to
    + \file{/usr/local/include/python1.5/Numerical}.  (The exact location will
    + differ according to your platform and Python installation.)  Since the
    + Python include directory---\file{/usr/local/include/python1.5} in this
    + case---is always included in the search path when building Python
    + extensions, the best approach is to include (e.g.)
    + \code{}.  If you insist on putting the
    + \file{Numerical} include directory right into your header search path,
    + though, you can find that directory using the Distutils
    + \module{sysconfig} module:
    + \begin{verbatim}
    + from distutils.sysconfig import get_python_inc
    + incdir = os.path.join(get_python_inc(plat_specific=1), "Numerical")
    + setup(...,
    +       Extension(..., include_dirs=[incdir]))
    + \end{verbatim}
    + Even though this is quite portable---it will work on any Python
    + installation, regardless of platform---it's probably easier to just
    + write your C code in the sensible way.
    + 
    + You can define and undefine pre-processor macros with the
    + \code{define\_macros} and \code{undef\_macros} options.
    + \code{define\_macros} takes a list of \code{(name, value)} tuples, where
    + \code{name} is the name of the macro to define (a string) and
    + \code{value} is its value: either a string or \code{None}.  (Defining a
    + macro \code{FOO} to \code{None} is the equivalent of a bare
    + \code{\#define FOO} in your C source: with most compilers, this sets
    + \code{FOO} to the string \code{1}.)  \code{undef\_macros} is just
    + a list of macros to undefine.
    + 
    + For example:
    + \begin{verbatim}
    + Extension(...,
    +           define_macros=[('NDEBUG', '1')],
    +                          ('HAVE_STRFTIME', None),
    +           undef_macros=['HAVE_FOO', 'HAVE_BAR'])
    + \end{verbatim}
    + is the equivalent of having this at the top of every C source file:
    + \begin{verbatim}
    + #define NDEBUG 1
    + #define HAVE_STRFTIME
    + #undef HAVE_FOO
    + #undef HAVE_BAR
    + \end{verbatim}
    + 
    + 
    + \subsubsection{Library options}
    + 
    + You can also specify the libraries to link against when building your
    + extension, and the directories to search for those libraries.  The
    + \code{libraries} option is a list of libraries to link against,
    + \code{library\_dirs} is a list of directories to search for libraries at 
    + link-time, and \code{runtime\_library\_dirs} is a list of directories to 
    + search for shared (dynamically loaded) libraries at run-time.
    + 
    + For example, if you need to link against libraries known to be in the
    + standard library search path on target systems
    + \begin{verbatim}
    + Extension(...,
    +           libraries=["gdbm", "readline"])
    + \end{verbatim}
    + 
    + If you need to link with libraries in a non-standard location, you'll
    + have to include the location in \code{library\_dirs}:
    + \begin{verbatim}
    + Extension(...,
    +           library_dirs=["/usr/X11R6/lib"],
    +           libraries=["X11", "Xt"])
    + \end{verbatim}
    + (Again, this sort of non-portable construct should be avoided if you
    + intend to distribute your code.)
    + 
    + \XXX{still undocumented: extra\_objects, extra\_compile\_args,
    +   extra\_link\_args, export\_symbols---none of which are frequently
    +   needed, some of which might be completely unnecessary!}
      
      
    
    
    
    From python-dev@python.org  Sun Aug  6 22:18:38 2000
    From: python-dev@python.org (Jack Jansen)
    Date: Sun, 6 Aug 2000 14:18:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib macpath.py,1.23,1.24
    Message-ID: <200008062118.OAA03542@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3425
    
    Modified Files:
    	macpath.py 
    Log Message:
    Rewrite of normpath() by Corran Webster, so trailing :s are removed
    (except for : and volume:, where they are needed).
    
    
    Index: macpath.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/macpath.py,v
    retrieving revision 1.23
    retrieving revision 1.24
    diff -C2 -r1.23 -r1.24
    *** macpath.py	2000/07/12 16:55:57	1.23
    --- macpath.py	2000/08/06 21:18:35	1.24
    ***************
    *** 180,216 ****
      
      def normpath(s):
    !     """Normalize a pathname: get rid of '::' sequences by backing up,
    !     e.g., 'foo:bar::bletch' becomes 'foo:bletch'.
    !     Raise the exception norm_error below if backing up is impossible,
    !     e.g., for '::foo'."""
    !     # XXX The Unix version doesn't raise an exception but simply
    !     # returns an unnormalized path.  Should do so here too.
      
    !     import string
    !     if ':' not in s:
    !         return ':' + s
    !     f = string.splitfields(s, ':')
    !     pre = []
    !     post = []
    !     if not f[0]:
    !         pre = f[:1]
    !         f = f[1:]
    !     if not f[len(f)-1]:
    !         post = f[-1:]
    !         f = f[:-1]
    !     res = []
    !     for seg in f:
    !         if seg:
    !             res.append(seg)
              else:
    !             if not res: raise norm_error, 'path starts with ::'
    !             del res[len(res)-1]
    !             if not (pre or res):
    !                 raise norm_error, 'path starts with volume::'
    !     if pre: res = pre + res
    !     if post: res = res + post
    !     s = res[0]
    !     for seg in res[1:]:
    !         s = s + ':' + seg
          return s
      
    --- 180,207 ----
      
      def normpath(s):
    !     """Normalize a pathname.  Will return the same result for
    !     equivalent paths."""
      
    !     if ":" not in s:
    !         return ":"+s
    ! 
    !     comps = string.splitfields(s, ":")
    !     i = 1
    !     while i < len(comps)-1:
    !         if comps[i] == "" and comps[i-1] != "":
    !             if i > 1:
    !                 del comps[i-1:i+1]
    !                 i = i-1
    !             else:
    !                 # best way to handle this is to raise an exception
    !                 raise norm_error, 'Cannot use :: immedeately after volume name'
              else:
    !             i = i + 1
    ! 
    !     s = string.join(comps, ":")
    ! 
    !     # remove trailing ":" except for ":" and "Volume:"
    !     if s[-1] == ":" and len(comps) > 2 and s != ":"*len(s):
    !         s = s[:-1]
          return s
      
    
    
    
    From python-dev@python.org  Sun Aug  6 23:45:33 2000
    From: python-dev@python.org (Vladimir Marangozov)
    Date: Sun, 6 Aug 2000 15:45:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gc.py,1.2,1.3
    Message-ID: <200008062245.PAA27816@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25095/Lib/test
    
    Modified Files:
    	test_gc.py 
    Log Message:
    Neil Schemenauer: GC enable(), disable(), isenabled() interface.
    
    Small stylistic changes by VM:
    - is_enabled() -> isenabled()
    - static ... Py_ -> static ... gc_
    
    
    
    Index: test_gc.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gc.py,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** test_gc.py	2000/06/30 15:13:14	1.2
    --- test_gc.py	2000/08/06 22:45:31	1.3
    ***************
    *** 76,79 ****
    --- 76,84 ----
      
      def test_all():
    + 
    +     enabled = gc.isenabled()
    +     gc.disable()
    +     assert not gc.isenabled()
    + 
          test_list()
          test_dict()
    ***************
    *** 84,87 ****
    --- 89,99 ----
          test_finalizer()
          test_function()
    + 
    +     # test gc.enable() even if GC is disabled by default
    +     gc.enable()
    +     assert gc.isenabled()
    +     if not enabled:
    +         gc.disable()
    + 
      
      test_all()
    
    
    
    From python-dev@python.org  Sun Aug  6 23:45:33 2000
    From: python-dev@python.org (Vladimir Marangozov)
    Date: Sun, 6 Aug 2000 15:45:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.6,2.7
    Message-ID: <200008062245.PAA27815@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25095/Modules
    
    Modified Files:
    	gcmodule.c 
    Log Message:
    Neil Schemenauer: GC enable(), disable(), isenabled() interface.
    
    Small stylistic changes by VM:
    - is_enabled() -> isenabled()
    - static ... Py_ -> static ... gc_
    
    
    
    Index: gcmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v
    retrieving revision 2.6
    retrieving revision 2.7
    diff -C2 -r2.6 -r2.7
    *** gcmodule.c	2000/07/12 05:18:36	2.6
    --- gcmodule.c	2000/08/06 22:45:30	2.7
    ***************
    *** 40,43 ****
    --- 40,44 ----
      
      /* collection frequencies, XXX tune these */
    + static int enabled = 1; /* automatic collection enabled? */
      static int threshold0 = 100; /* net new containers before collection */
      static int threshold1 = 10;  /* generation0 collections before collecting 1 */
    ***************
    *** 493,497 ****
      	}
      #endif
    ! 	if (threshold0 && allocated > threshold0 && !collecting) {
      		collecting++;
      		collect_generations();
    --- 494,498 ----
      	}
      #endif
    ! 	if (allocated > threshold0 && enabled && threshold0 && !collecting) {
      		collecting++;
      		collect_generations();
    ***************
    *** 517,522 ****
      }
      
      
    ! static char collect__doc__[] =
      "collect() -> n\n"
      "\n"
    --- 518,576 ----
      }
      
    + static char gc_enable__doc__[] =
    + "enable() -> None\n"
    + "\n"
    + "Enable automatic garbage collection.\n"
    + ;
    + 
    + static PyObject *
    + gc_enable(PyObject *self, PyObject *args)
    + {
    + 
    + 	if (!PyArg_ParseTuple(args, ":enable"))	/* check no args */
    + 		return NULL;
    + 
    + 	enabled = 1;
    + 
    + 	Py_INCREF(Py_None);
    + 	return Py_None;
    + }
    + 
    + static char gc_disable__doc__[] =
    + "disable() -> None\n"
    + "\n"
    + "Disable automatic garbage collection.\n"
    + ;
    + 
    + static PyObject *
    + gc_disable(PyObject *self, PyObject *args)
    + {
    + 
    + 	if (!PyArg_ParseTuple(args, ":disable"))	/* check no args */
    + 		return NULL;
    + 
    + 	enabled = 0;
    + 
    + 	Py_INCREF(Py_None);
    + 	return Py_None;
    + }
    + 
    + static char gc_isenabled__doc__[] =
    + "isenabled() -> status\n"
    + "\n"
    + "Returns true if automatic garbage collection is enabled.\n"
    + ;
    + 
    + static PyObject *
    + gc_isenabled(PyObject *self, PyObject *args)
    + {
    + 
    + 	if (!PyArg_ParseTuple(args, ":isenabled"))	/* check no args */
    + 		return NULL;
    + 
    + 	return Py_BuildValue("i", enabled);
    + }
      
    ! static char gc_collect__doc__[] =
      "collect() -> n\n"
      "\n"
    ***************
    *** 525,529 ****
      
      static PyObject *
    ! Py_collect(PyObject *self, PyObject *args)
      {
      	long n;
    --- 579,583 ----
      
      static PyObject *
    ! gc_collect(PyObject *self, PyObject *args)
      {
      	long n;
    ***************
    *** 540,544 ****
      }
      
    ! static char set_debug__doc__[] = 
      "set_debug(flags) -> None\n"
      "\n"
    --- 594,598 ----
      }
      
    ! static char gc_set_debug__doc__[] = 
      "set_debug(flags) -> None\n"
      "\n"
    ***************
    *** 557,561 ****
      
      static PyObject *
    ! Py_set_debug(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, "l:get_debug", &debug))
    --- 611,615 ----
      
      static PyObject *
    ! gc_set_debug(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, "l:get_debug", &debug))
    ***************
    *** 566,570 ****
      }
      
    ! static char get_debug__doc__[] = 
      "get_debug() -> flags\n"
      "\n"
    --- 620,624 ----
      }
      
    ! static char gc_get_debug__doc__[] = 
      "get_debug() -> flags\n"
      "\n"
    ***************
    *** 573,577 ****
      
      static PyObject *
    ! Py_get_debug(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, ":get_debug"))	/* no args */
    --- 627,631 ----
      
      static PyObject *
    ! gc_get_debug(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, ":get_debug"))	/* no args */
    ***************
    *** 581,585 ****
      }
      
    ! static char set_thresh__doc__[] =
      "set_threshold(threshold0, [threhold1, threshold2]) -> None\n"
      "\n"
    --- 635,639 ----
      }
      
    ! static char gc_set_thresh__doc__[] =
      "set_threshold(threshold0, [threhold1, threshold2]) -> None\n"
      "\n"
    ***************
    *** 589,593 ****
      
      static PyObject *
    ! Py_set_thresh(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, "i|ii:set_threshold", &threshold0, 
    --- 643,647 ----
      
      static PyObject *
    ! gc_set_thresh(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, "i|ii:set_threshold", &threshold0, 
    ***************
    *** 599,603 ****
      }
      
    ! static char get_thresh__doc__[] =
      "get_threshold() -> (threshold0, threshold1, threshold2)\n"
      "\n"
    --- 653,657 ----
      }
      
    ! static char gc_get_thresh__doc__[] =
      "get_threshold() -> (threshold0, threshold1, threshold2)\n"
      "\n"
    ***************
    *** 606,610 ****
      
      static PyObject *
    ! Py_get_thresh(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, ":get_threshold"))	/* no args */
    --- 660,664 ----
      
      static PyObject *
    ! gc_get_thresh(PyObject *self, PyObject *args)
      {
      	if (!PyArg_ParseTuple(args, ":get_threshold"))	/* no args */
    ***************
    *** 618,621 ****
    --- 672,678 ----
      "This module provides access to the garbage collector for reference cycles.\n"
      "\n"
    + "enable() -- Enable automatic garbage collection.\n"
    + "disable() -- Disable automatic garbage collection.\n"
    + "isenabled() -- Returns true if automatic collection is enabled.\n"
      "collect() -- Do a full collection right now.\n"
      "set_debug() -- Set debugging flags.\n"
    ***************
    *** 626,634 ****
      
      static PyMethodDef GcMethods[] = {
    ! 	{"set_debug",		Py_set_debug,  METH_VARARGS, set_debug__doc__},
    ! 	{"get_debug",		Py_get_debug,  METH_VARARGS, get_debug__doc__},
    ! 	{"set_threshold",	Py_set_thresh, METH_VARARGS, set_thresh__doc__},
    ! 	{"get_threshold",	Py_get_thresh, METH_VARARGS, get_thresh__doc__},
    ! 	{"collect",		Py_collect,    METH_VARARGS, collect__doc__},
      	{NULL,	NULL}		/* Sentinel */
      };
    --- 683,694 ----
      
      static PyMethodDef GcMethods[] = {
    ! 	{"enable",	   gc_enable,     METH_VARARGS, gc_enable__doc__},
    ! 	{"disable",	   gc_disable,    METH_VARARGS, gc_disable__doc__},
    ! 	{"isenabled",	   gc_isenabled,  METH_VARARGS, gc_isenabled__doc__},
    ! 	{"set_debug",	   gc_set_debug,  METH_VARARGS, gc_set_debug__doc__},
    ! 	{"get_debug",	   gc_get_debug,  METH_VARARGS, gc_get_debug__doc__},
    ! 	{"set_threshold",  gc_set_thresh, METH_VARARGS, gc_set_thresh__doc__},
    ! 	{"get_threshold",  gc_get_thresh, METH_VARARGS, gc_get_thresh__doc__},
    ! 	{"collect",	   gc_collect,    METH_VARARGS, gc_collect__doc__},
      	{NULL,	NULL}		/* Sentinel */
      };
    
    
    
    From python-dev@python.org  Sun Aug  6 23:45:33 2000
    From: python-dev@python.org (Vladimir Marangozov)
    Date: Sun, 6 Aug 2000 15:45:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgc.tex,1.1,1.2
    Message-ID: <200008062245.PAA27821@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25095/Doc/lib
    
    Modified Files:
    	libgc.tex 
    Log Message:
    Neil Schemenauer: GC enable(), disable(), isenabled() interface.
    
    Small stylistic changes by VM:
    - is_enabled() -> isenabled()
    - static ... Py_ -> static ... gc_
    
    
    
    Index: libgc.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgc.tex,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** libgc.tex	2000/07/12 04:22:53	1.1
    --- libgc.tex	2000/08/06 22:45:31	1.2
    ***************
    *** 6,20 ****
      \sectionauthor{Neil Schemenauer}{nascheme@enme.ucalgary.ca}
      
    ! This module provides an interface to the optional garbage collector.
    ! It provides the ability to disable the collector, tune the collection
      frequency, and set debugging options.  It also provides access to
    ! unreachable objects that the collector found but cannot free.  Since
    ! the collector supplements the reference counting already used in
    ! Python, you can disable the collector if you are sure your program
    ! does not create reference cycles.  The collector can be disabled by
    ! calling \code{gc.set_threshold(0)}.  To debug a leaking program call
      \code{gc.set_debug(gc.DEBUG_LEAK)}.
      
      The \module{gc} module provides the following functions:
      
      \begin{funcdesc}{collect}{}
    --- 6,32 ----
      \sectionauthor{Neil Schemenauer}{nascheme@enme.ucalgary.ca}
      
    ! This module provides an interface to the optional garbage collector.  It
    ! provides the ability to disable the collector, tune the collection
      frequency, and set debugging options.  It also provides access to
    ! unreachable objects that the collector found but cannot free.  Since the
    ! collector supplements the reference counting already used in Python, you
    ! can disable the collector if you are sure your program does not create
    ! reference cycles.  Automatic collection can be disabled by calling
    ! \code{gc.disable()}.  To debug a leaking program call
      \code{gc.set_debug(gc.DEBUG_LEAK)}.
      
      The \module{gc} module provides the following functions:
    + 
    + \begin{funcdesc}{enable}{}
    + Enable automatic garbage collection.
    + \end{funcdesc}
    + 
    + \begin{funcdesc}{disable}{}
    + Disable automatic garbage collection.
    + \end{funcdesc}
    + 
    + \begin{funcdesc}{isenabled}{}
    + Returns true if automatic collection is enabled.
    + \end{funcdesc}
      
      \begin{funcdesc}{collect}{}
    
    
    
    From python-dev@python.org  Mon Aug  7 01:45:53 2000
    From: python-dev@python.org (Greg Ward)
    Date: Sun, 6 Aug 2000 17:45:53 -0700
    Subject: [Python-checkins] CVS: distutils/distutils fancy_getopt.py,1.14,1.15
    Message-ID: <200008070045.RAA13922@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv13910
    
    Modified Files:
    	fancy_getopt.py 
    Log Message:
    Fix so we clear or reinitialize various data structures before populating
    (allows the same FancyGetopt object to be used multiple times with different
    option tables).
    
    Index: fancy_getopt.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/fancy_getopt.py,v
    retrieving revision 1.14
    retrieving revision 1.15
    diff -C2 -r1.14 -r1.15
    *** fancy_getopt.py	2000/06/08 00:35:33	1.14
    --- fancy_getopt.py	2000/08/07 00:45:51	1.15
    ***************
    *** 94,97 ****
    --- 94,98 ----
      
          def _build_index (self):
    +         self.option_index.clear()
              for option in self.option_table:
                  self.option_index[option[0]] = option
    ***************
    *** 153,156 ****
    --- 154,161 ----
                 the option table.  Called by 'getopt()' before it can do
                 anything worthwhile."""
    + 
    +         self.long_opts = []
    +         self.short_opts = []
    +         self.short2long.clear()
      
              for option in self.option_table:
    
    
    
    From python-dev@python.org  Mon Aug  7 01:48:06 2000
    From: python-dev@python.org (Greg Ward)
    Date: Sun, 6 Aug 2000 17:48:06 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command install.py,1.40,1.41
    Message-ID: <200008070048.RAA14090@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14074
    
    Modified Files:
    	install.py 
    Log Message:
    Fix so the 'install_libbase' directory -- where .pth files are installed -- 
    participates in the "--root" hack, ie. it also has a new root directory
    hacked on at the very last minute (essential if the .pth file is to be
    included in an RPM or other smart installer!).
    
    Index: install.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/install.py,v
    retrieving revision 1.40
    retrieving revision 1.41
    diff -C2 -r1.40 -r1.41
    *** install.py	2000/08/05 01:31:54	1.40
    --- install.py	2000/08/07 00:48:04	1.41
    ***************
    *** 274,278 ****
              # dirs relative to it.
              if self.root is not None:
    !             for name in ('lib', 'purelib', 'platlib',
                               'scripts', 'data', 'headers'):
                      attr = "install_" + name
    --- 274,278 ----
              # dirs relative to it.
              if self.root is not None:
    !             for name in ('libbase', 'lib', 'purelib', 'platlib',
                               'scripts', 'data', 'headers'):
                      attr = "install_" + name
    
    
    
    From python-dev@python.org  Mon Aug  7 07:34:49 2000
    From: python-dev@python.org (Moshe Zadka)
    Date: Sun, 6 Aug 2000 23:34:49 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.187,2.188
    Message-ID: <200008070634.XAA12685@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30715/Python
    
    Modified Files:
    	ceval.c 
    Log Message:
    Initialized opcode and oparg to silence a gcc -Wall warning.
    
    
    Index: ceval.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v
    retrieving revision 2.187
    retrieving revision 2.188
    diff -C2 -r2.187 -r2.188
    *** ceval.c	2000/07/25 12:56:38	2.187
    --- ceval.c	2000/08/07 06:34:45	2.188
    ***************
    *** 316,321 ****
      #endif
      	register unsigned char *next_instr;
    ! 	register int opcode;	/* Current opcode */
    ! 	register int oparg;	/* Current opcode argument, if any */
      	register PyObject **stack_pointer;
      	register enum why_code why; /* Reason for block stack unwind */
    --- 316,321 ----
      #endif
      	register unsigned char *next_instr;
    ! 	register int opcode=0;	/* Current opcode */
    ! 	register int oparg=0;	/* Current opcode argument, if any */
      	register PyObject **stack_pointer;
      	register enum why_code why; /* Reason for block stack unwind */
    
    
    
    From python-dev@python.org  Mon Aug  7 13:40:03 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Mon, 7 Aug 2000 05:40:03 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.3,1.4
    Message-ID: <200008071240.FAA02832@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv29726
    
    Modified Files:
    	pep-0203.txt 
    Log Message:
    
    Complete rewrite of the PEP, discarding the previous long explanation about
    augmented assignment. Kept as short as possible, but might still be
    considered wordy :-)
    
    
    
    Index: pep-0203.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** pep-0203.txt	2000/07/16 16:07:29	1.3
    --- pep-0203.txt	2000/08/07 12:40:00	1.4
    ***************
    *** 4,11 ****
      Owner: thomas@xs4all.net (Thomas Wouters)
      Python-Version: 2.0
    ! Status: Incomplete
      
      
    - 
      Introduction
      
    --- 4,10 ----
      Owner: thomas@xs4all.net (Thomas Wouters)
      Python-Version: 2.0
    ! Status: Draft
      
      
      Introduction
      
    ***************
    *** 20,150 ****
      
      
    ! 
    ! The Origin of Augmented Assignment
      
    !     Augmented assignment refers to binary operators that combine two
    !     existing operators: the assignment operator, and one of the binary
    !     operators. Its origins lie in other programming languages, most
    !     notably `C', where it was defined for performance reasons. They
    !     are meant to replace the repetetive syntax of, for instance,
    !     adding the number '1' to a variable:
    !     
    !       x = x + 1;
    !       
    !     with an expression that is shorter, less error-prone and easier to
    !     optimize (by the compiler):
    !     
    !       x += 1;
    !       
    !     The same goes for all other binary operands, resulting in the
    !     following augmented assignment operator list, based on Python's
    !     current binary operator list:
    ! 
    !       +=, -=, /=, *=, %=, **=, >>=, <<=, &=, |=, ^=
    !     
    !     See the documentation of each operator on what they do.
    ! 
    !      
    ! 
    ! Augmented Assignment in Python
    ! 
    !     The traditional reasons for augmented assignment, readability and
    !     optimization, are not as obvious in Python, for several reasons.
    !     
    !      - Numbers are immutable, they cannot be changed. In other
    !        programming languages, a variable holds a value, and altering
    !        the variable changes the value it holds. In Python, variables
    !        hold `references' to values, and altering an immutable value
    !        means changing the variable, not what it points to.
    ! 
    !      - Assignment is a different operation in Python. In most
    !        languages, variables are containers, and assignment copies a
    !        value into that container. In Python, assignment binds a value
    !        to a name, it does not copy the value into a new storage space.
    !        
    !      - The augmented assignment operators map fairly directly into the
    !        underlying hardware. Python does not deal directly with the
    !        hardware it runs on, so this `natural inclusion' does not make
    !        sense.
    ! 
    !      - The augmented assigment syntax is subtly different in more
    !        complex expressions. What to do, for instance, in a case such
    !        as this:
    !        
    !        seq[i:calc(seq, i)] *= r
    !        
    !        It is unclear whether 'seq' gets indexed once or twice, and
    !        whether 'calc' gets called once or twice.
    ! 
    ! 
    ! 
    ! Normal operators
    ! 
    !     There are, however, good reasons to include augented assignment. 
    !     One of these has to do with Python's way of handling operators. In
    !     Python, a user defined class can implement one or more of the
    !     binary operators by supplying a 'magic' method name. For instance,
    !     for a class to support ' + ', the '__add__'
    !     method should be defined. This method should return a new object,
    !     which is the result of the expression.
    !     
    !     For the case of ' + ', where 'object' does not
    !     have an '__add__' method, the class can define a '__radd__'
    !     method, which then should behave exactly as '__add__'. Indeed,
    !     '__radd__' is often a different name for the same method.
    !     
    !     For C extention types, a similar technique is available, through
    !     the PyNumberMethods and PySequenceMethods members of the PyType
    !     structure.
    ! 
    !     However, the problem with this approach is that the '__add__'
    !     method cannot know in what context it is called. It cannot tell
    !     whether it should create a new object, or whether it is allowed to
    !     modify itself. (As would be the case in 'x = x + 1') As a result,
    !     the '__add__' method, and all other such 'magic' methods, should
    !     always return a new object. For large objects, this can be very
    !     inefficient.
    !     
    !     This inefficiency is often solved by adding a method that does the
    !     appropriate modification 'in-place'. List objects, for instance,
    !     have the 'extend' method that behaves exactly as the '+' operator,
    !     except the operation is done on the list itself, instead of on a
    !     copy.
    ! 
    !     The augmented assignment syntax can support this behaviour
    !     explicitly. When the magic method for 'in-place' operation are
    !     missing, it can fall back to the normal methods for that
    !     operation, maintaining full backward compatibility even when
    !     mixing the new syntax with old objects.
    ! 
    !     The other benifit of augmented assignment is readability. After
    !     the general concept of augmented assignment is grasped, all the
    !     augmented assigment operators instantly become obvious. There is
    !     no need for non-obvious and non-standard method names to implement
    !     efficient, in-place operations, and there is no need to check the
    !     type of an object before operating on it: the augmented assignment
    !     will work for all types that implement that basic operation, not
    !     merely those that implement the augmented variant.
    !     
    !     And the last problem with augmented assignment, what to do with
    !     indexes and function calls in the expression, can be solved in a
    !     very Pythonic manner: if it looks like it's only called once, it
    !     *is* only called once. Taking this expression:
    !     
    !     seq[func(x)] += x
    !     
    !     The function 'func' is called once, and 'seq' is indexed twice:
    !     once to retrieve the value (__getitem__), and once to store it
    !     (__setitem__). So the expression can be rewritten as:
          
    !     tmp = func(x)
    !     seq[tmp] = seq[tmp] + x
          
    !     The augmented assignment form of this expression is much more
    !     readable.
    !     
    ! 
    ! 
    ! 
      
      
    --- 19,213 ----
      
      
    ! Proposed semantics
      
    !     The proposed patch that adds augmented assignment to Python
    !     introduces the following new operators:
          
    !        += -= *= /= %= **= <<= >>= &= ^= |=
          
    !     They implement the same operator as their normal binary form, with
    !     the exception that the operation is done `in-place' whenever
    !     possible.
    !     
    !     They truly behave as augmented assignment, in that they perform
    !     all of the normal load and store operations, in addition to the
    !     binary operation they are intended to do. So, given the expression:
    !     
    !        x += y
    !     
    !     The object `x' is loaded, then added with 1, and the resulting
    !     object is stored back in the original place. The precise action
    !     performed on the two arguments depends on the type of `x', and
    !     possibly of `y'.
    ! 
    !     The idea behind augmented assignment in Python is that it isn't
    !     just an easier way to write the common practice of storing the
    !     result of a binary operation in its left-hand operand, but also a
    !     way for the left-hand operand in question to know that it should
    !     operate 'on itself', rather than creating a modified copy of
    !     itself.
    ! 
    !     To make this possible, a number of new `hooks' are added to Python
    !     classes and C extention types, which are called when the object in
    !     question is used as the left hand side of an augmented assignment
    !     operation. If the class or type does not implement the `in-place'
    !     hooks, the normal hooks for the particular binary operation are
    !     used.
    !     
    !     So, given an instance object `x', the expression
    !     
    !         x += y
    !     
    !     tries to call x.__add_ab__(y), which is the 'in-place' variant of
    !     __add__. If __add_ab__ is not present, x.__add__(y) is
    !     attempted, and finally y.__radd__(x) if __add__ is missing too. 
    !     There is no `right-hand-side' variant of __add_ab__, because that
    !     would require for `y' to know how to in-place modify `x', which is
    !     an unsafe assumption. The __add_ab__ hook should behave exactly
    !     like __add__, returning the result of the operation (which could
    !     be `self') which is to be stored in the variable `x'.
    !  
    !     For C extention types, the `hooks' are members of the
    !     PyNumberMethods and PySequenceMethods structures, and are called
    !     in exactly the same manner as the existing non-inplace operations,
    !     including argument coercion. C methods should also take care to
    !     return a new reference to the result object, whether it's the same
    !     object or a new one. So if the original object is returned, it
    !     should be INCREF()'d appropriately.
    ! 
    ! 
    ! New methods
    ! 
    !     The proposed implementation adds the following 11 possible `hooks'
    !     which Python classes can implement to overload the augmented
    !     assignment operations:
    !     
    !         __add_ab__
    !         __sub_ab__
    !         __mul_ab__
    !         __div_ab__
    !         __mod_ab__
    !         __pow_ab__
    !         __lshift_ab__
    !         __rshift_ab__
    !         __and_ab__
    !         __xor_ab__
    !         __or_ab__
    !     
    !     The `__add_ab__' name is one proposed by Guido[1], and stands for `and
    !     becomes'. Other proposed names include '__iadd__', `__add_in__'
    !     `__inplace_add__'
    ! 
    !     For C extention types, the following struct members are added:
    !     
    !     To PyNumberMethods:
    !         binaryfunc nb_inplace_add;
    !         binaryfunc nb_inplace_subtract;
    !         binaryfunc nb_inplace_multiply;
    !         binaryfunc nb_inplace_divide;
    !         binaryfunc nb_inplace_remainder;
    !         binaryfunc nb_inplace_power;
    !         binaryfunc nb_inplace_lshift;
    !         binaryfunc nb_inplace_rshift;
    !         binaryfunc nb_inplace_and;
    !         binaryfunc nb_inplace_xor;
    !         binaryfunc nb_inplace_or;
    ! 
    !     To PySequenceMethods:
    !         binaryfunc sq_inplace_concat;
    !         intargfunc sq_inplace_repeat;
    ! 
    !     In order to keep binary compatibility, the tp_flags TypeObject
    !     member is used to determine whether the TypeObject in question has
    !     allocated room for these slots. Until a clean break in binary
    !     compatibility is made (which may or may not happen before 2.0)
    !     code that wants to use one of the new struct members must first
    !     check that they are available with the 'PyType_HasFeature()' macro:
    !     
    !     if (PyType_HasFeature(x->ob_type, Py_TPFLAGS_HAVE_INPLACE_OPS) &&
    !         x->ob_type->tp_as_number && x->ob_type->tp_as_number->nb_inplace_add) {
    !             /* ... */
    ! 
    !     This check must be made even before testing the method slots for
    !     NULL values! The macro only tests whether the slots are available,
    !     not whether they are filled with methods or not.
    ! 
    ! 
    ! Implementation
    ! 
    !     The current implementation of augmented assignment[2] adds, in
    !     addition to the methods and slots alread covered, 13 new bytecodes
    !     and 13 new API functions.
    !     
    !     The API functions are simply in-place versions of the current
    !     binary-operation API functions:
    !     
    !         PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlacePower(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
    !         PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
    !         PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
    !         PySequence_InPlaceRepeat(PyObject *o, int count);
    ! 
    !     They call either the Python class hooks (if either of the objects
    !     is a Python class instance) or the C type's number or sequence
    !     methods.
    ! 
    !     The new bytecodes are:
    !         INPLACE_ADD
    !         INPLACE_SUBTRACT
    !         INPLACE_MULTIPLY
    !         INPLACE_DIVIDE
    !         INPLACE_REMAINDER
    !         INPLACE_POWER
    !         INPLACE_LEFTSHIFT
    !         INPLACE_RIGHTSHIFT
    !         INPLACE_AND
    !         INPLACE_XOR
    !         INPLACE_OR
    !         ROT_FOUR
    !         DUP_TOPX
    !     
    !     The INPLACE_* bytecodes mirror the BINARY_* bytecodes, except that
    !     they are implemented as calls to the 'InPlace' API functions. The
    !     other two bytecodes are 'utility' bytecodes: ROT_FOUR behaves like
    !     ROT_THREE except that the four topmost stack items are rotated.
    !     
    !     DUP_TOPX is a bytecode that takes a single argument, which should
    !     be an integer between 1 and 5 (inclusive) which is the number of
    !     items to duplicate in one block. Given a stack like this (where
    !     the left side of the list is the 'top' of the stack):
    ! 
    !         [a, b, c, d, e, f, g]
    !     
    !     "DUP_TOPX 3" would duplicate the top 3 items, resulting in this
    !     stack:
    !     
    !         [a, b, c, d, e, f, g, e, f, g]
    ! 
    !     DUP_TOPX with an argument of 1 is the same as DUP_TOP. The limit
    !     of 5 is purely an implementation limit. The implementation of
    !     augmented assignment requires only DUP_TOPX with an argument of 2
    !     and 3, and could do without this new opcode at the cost of a fair
    !     number of DUP_TOP and ROT_*.
    ! 
    ! 
    ! Copyright
    ! 
    !     This document has been placed in the public domain.
    ! 
    ! 
    ! References
    ! 
    !     [1] http://www.python.org/pipermail/python-list/2000-June/059556.html
    !     [2]
    ! http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470
      
      
    
    
    
    From python-dev@python.org  Mon Aug  7 18:04:31 2000
    From: python-dev@python.org (Jeremy Hylton)
    Date: Mon, 7 Aug 2000 10:04:31 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.6,1.7
    Message-ID: <200008071704.KAA12560@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv11993
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    some notes about test cases
    couple of more small action items
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.6
    retrieving revision 1.7
    diff -C2 -r1.6 -r1.7
    *** pep-0200.txt	2000/07/27 03:03:39	1.6
    --- pep-0200.txt	2000/08/07 17:04:27	1.7
    ***************
    *** 84,91 ****
          to fail, they serve no useful purpose.
      
    !     The current test suite runs correctly on my Linux box (July 26).
    !     Heard reports that test_fork1 fails on some Linux boxes and that
    !     test_winreg and test_winreg32 fail on Windows.
    ! 
      Open items -- should be done/fixed
      
    --- 84,97 ----
          to fail, they serve no useful purpose.
      
    !     test case         platform   R B    date reported   note
    !     test_mmap          Win32     X X    July 26, 2000
    !         [believe that was fixed by Mark H.]
    !     test_winreg        Win32     X X    July 26, 2000
    !     test_winreg2       Win32     X X    July 26, 2000
    !     test_popen2        Win32     X X    July 26, 2000   skipped
    !         [believe this was fix by /F]
    !     test_fork1         Linux     X      July 26, 2000   just SMP?  
    !         [no clue; there are probably two bugs here]
    !   
      Open items -- should be done/fixed
      
    ***************
    *** 129,132 ****
    --- 135,144 ----
      
      Open: proposed but not accepted or declined
    + 
    +     * Fix xrange printing behavior
    + 
    +     * Tim O'Malley's cookie module -- but need different license
    + 
    +     * test harness for C code - Trent Mick
      
          * List comprehensions - Tim Peters?
    
    
    
    From python-dev@python.org  Mon Aug  7 18:33:41 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Mon, 7 Aug 2000 10:33:41 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.32,2.33
    Message-ID: <200008071733.KAA12082@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10415/Modules
    
    Modified Files:
    	_sre.c 
    Log Message:
    
    
    + if USE_STACKCHECK is defined, use PyOS_CheckStack to look
      for excessive recursion.
    
    Index: _sre.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
    retrieving revision 2.32
    retrieving revision 2.33
    diff -C2 -r2.32 -r2.33
    *** _sre.c	2000/08/03 16:29:50	2.32
    --- _sre.c	2000/08/07 17:33:38	2.33
    ***************
    *** 59,63 ****
    --- 59,65 ----
      
      /* prevent run-away recursion (bad patterns on long strings) */
    + #if !defined(USE_STACKCHECK)
      #define USE_RECURSION_LIMIT 10000
    + #endif
      
      /* enables fast searching */
    ***************
    *** 527,530 ****
    --- 529,537 ----
      
          TRACE(("%8d: enter %d\n", PTR(ptr), level));
    + 
    + #if defined(USE_STACKCHECK)
    +     if (level % 10 == 0 && PyOS_CheckStack()) {
    +         return SRE_ERROR_RECURSION_LIMIT;
    + #endif
      
      #if defined(USE_RECURSION_LIMIT)
    
    
    
    From python-dev@python.org  Mon Aug  7 20:07:54 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Mon, 7 Aug 2000 12:07:54 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.70.2.1,2.70.2.2
    Message-ID: <200008071907.MAA20832@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv20741
    
    Modified Files:
          Tag: cnri-16-start
    	object.c 
    Log Message:
    In get_inprogress_dict(), there's no need to call PyErr_Clear() when
    PyDict_GetItem() fails -- since this function never sets an exception.
    
    The PyErr_Clear() was masking an exception in the parser which caused
    a core dump.
    
    
    Index: object.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
    retrieving revision 2.70.2.1
    retrieving revision 2.70.2.2
    diff -C2 -r2.70.2.1 -r2.70.2.2
    *** object.c	2000/08/03 16:48:51	2.70.2.1
    --- object.c	2000/08/07 19:07:51	2.70.2.2
    ***************
    *** 312,316 ****
      	inprogress = PyDict_GetItem(tstate_dict, _PyCompareState_Key); 
      	if (inprogress == NULL) {
    - 		PyErr_Clear();
      		inprogress = PyDict_New();
      		if (inprogress == NULL)
    --- 312,315 ----
    
    
    
    From python-dev@python.org  Mon Aug  7 20:11:43 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Mon, 7 Aug 2000 12:11:43 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.70.2.2,2.70.2.3
    Message-ID: <200008071911.MAA22407@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv22382
    
    Modified Files:
          Tag: cnri-16-start
    	object.c 
    Log Message:
    As I compared the 1.6 code for get_inprogress_dict() to 2.0, I found
    another difference: a memory leak.  Plug it.
    
    
    Index: object.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
    retrieving revision 2.70.2.2
    retrieving revision 2.70.2.3
    diff -C2 -r2.70.2.2 -r2.70.2.3
    *** object.c	2000/08/07 19:07:51	2.70.2.2
    --- object.c	2000/08/07 19:11:41	2.70.2.3
    ***************
    *** 320,323 ****
    --- 320,324 ----
      		    return NULL;
      		}
    + 		Py_DECREF(inprogress);
      	}
      	return inprogress;
    
    
    
    From python-dev@python.org  Mon Aug  7 20:15:42 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Mon, 7 Aug 2000 12:15:42 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.108.2.1,2.108.2.2
    Message-ID: <200008071915.MAA24158@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24122
    
    Modified Files:
          Tag: cnri-16-start
    	compile.c 
    Log Message:
    When returning an error from jcompile() (which is passed through by
    PyNode_Compile()), make sure that an exception is actually set --
    otherwise someone stomped on our error.
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.108.2.1
    retrieving revision 2.108.2.2
    diff -C2 -r2.108.2.1 -r2.108.2.2
    *** compile.c	2000/08/03 16:50:35	2.108.2.1
    --- compile.c	2000/08/07 19:15:40	2.108.2.2
    ***************
    *** 3487,3490 ****
    --- 3487,3498 ----
      		Py_XDECREF(name);
      	}
    + 	else if (!PyErr_Occurred()) {
    + 		/* This could happen if someone called PyErr_Clear() after an
    + 		   error was reported above.  That's not supposed to happen,
    + 		   but I just plugged one case and I'm not sure there can't be
    + 		   others.  In that case, raise SystemError so that at least
    + 		   it gets reported instead dumping core. */
    + 		PyErr_SetString(PyExc_SystemError, "lost syntax error");
    + 	}
      	com_free(&sc);
      	return co;
    
    
    
    From python-dev@python.org  Mon Aug  7 20:18:29 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Mon, 7 Aug 2000 12:18:29 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python errors.c,2.50,2.51
    Message-ID: <200008071918.MAA24880@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24853
    
    Modified Files:
    	errors.c 
    Log Message:
    Avoid dumping core when PyErr_NormalizeException() is called without
    an exception set.  This shouldn't happen, but we see it at times...
    
    
    Index: errors.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v
    retrieving revision 2.50
    retrieving revision 2.51
    diff -C2 -r2.50 -r2.51
    *** errors.c	2000/07/22 18:47:25	2.50
    --- errors.c	2000/08/07 19:18:27	2.51
    ***************
    *** 137,140 ****
    --- 137,146 ----
      	PyObject *inclass = NULL;
      
    + 	if (type == NULL) {
    + 		/* This is a bug.  Should never happen.  Don't dump core. */
    + 		PyErr_SetString(PyExc_SystemError,
    + 			"PyErr_NormalizeException() called without exception");
    + 	}
    + 
      	/* If PyErr_SetNone() was used, the value will have been actually
      	   set to NULL.
    
    
    
    From python-dev@python.org  Mon Aug  7 20:22:45 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Mon, 7 Aug 2000 12:22:45 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.118,2.119
    Message-ID: <200008071922.MAA26780@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26753
    
    Modified Files:
    	compile.c 
    Log Message:
    When returning an error from jcompile() (which is passed through by
    PyNode_Compile()), make sure that an exception is actually set --
    otherwise someone stomped on our error.  [2.0 checkin of this fix.]
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.118
    retrieving revision 2.119
    diff -C2 -r2.118 -r2.119
    *** compile.c	2000/08/05 21:37:50	2.118
    --- compile.c	2000/08/07 19:22:43	2.119
    ***************
    *** 3294,3297 ****
    --- 3294,3305 ----
      		Py_XDECREF(name);
      	}
    + 	else if (!PyErr_Occurred()) {
    + 		/* This could happen if someone called PyErr_Clear() after an
    + 		   error was reported above.  That's not supposed to happen,
    + 		   but I just plugged one case and I'm not sure there can't be
    + 		   others.  In that case, raise SystemError so that at least
    + 		   it gets reported instead dumping core. */
    + 		PyErr_SetString(PyExc_SystemError, "lost syntax error");
    + 	}
      	com_free(&sc);
      	return co;
    
    
    
    From python-dev@python.org  Mon Aug  7 20:34:45 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Mon, 7 Aug 2000 12:34:45 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.in,1.98,1.98.2.1
    Message-ID: <200008071934.MAA29456@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv29447
    
    Modified Files:
          Tag: cnri-16-start
    	Setup.in 
    Log Message:
    Turn on _locale module by default.
    Correct line for curses -- it's now _curses.
    
    
    Index: Setup.in
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v
    retrieving revision 1.98
    retrieving revision 1.98.2.1
    diff -C2 -r1.98 -r1.98.2.1
    *** Setup.in	2000/05/03 22:34:12	1.98
    --- Setup.in	2000/08/07 19:34:42	1.98.2.1
    ***************
    *** 141,145 ****
                              # static Unicode character database
      
    ! #_locale _localemodule.c  # access to ISO C locale support
      
      
    --- 141,145 ----
                              # static Unicode character database
      
    ! _locale _localemodule.c  # access to ISO C locale support
      
      
    ***************
    *** 320,324 ****
      # -L/usr/5lib before -lcurses).
      
    ! #curses cursesmodule.c -lcurses -ltermcap
      
      
    --- 320,324 ----
      # -L/usr/5lib before -lcurses).
      
    ! #_curses _cursesmodule.c -lcurses -ltermcap
      
      
    
    
    
    From python-dev@python.org  Mon Aug  7 21:16:30 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Mon, 7 Aug 2000 13:16:30 -0700
    Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.43,1.44
    Message-ID: <200008072016.NAA08268@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/PC
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv8067/PC
    
    Modified Files:
    	config.h 
    Log Message:
    
    
    -- from Trent Mick: [Patch #101010] replace use of INT_PTR
       with uintptr_t (fix MSVC 5.0 build) 
    
    Index: config.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
    retrieving revision 1.43
    retrieving revision 1.44
    diff -C2 -r1.43 -r1.44
    *** config.h	2000/08/05 00:58:14	1.43
    --- config.h	2000/08/07 20:16:28	1.44
    ***************
    *** 242,247 ****
      /* End of compilers - finish up */
      
    ! /* define the ANSI intptr_t type for portable use of a pointer sized
    !    integer */
      #if _MSC_VER >= 1200 /* This file only exists in VC 6.0 or higher */
      #include 
    --- 242,246 ----
      /* End of compilers - finish up */
      
    ! /* define some ANSI types that are not defined in earlier Win headers */
      #if _MSC_VER >= 1200 /* This file only exists in VC 6.0 or higher */
      #include 
    ***************
    *** 249,252 ****
    --- 248,252 ----
      #if defined(MS_WINDOWS) && !defined(MS_WIN64)
      typedef long intptr_t;
    + typedef unsigned long uintptr_t;
      #endif
      
    
    
    
    From python-dev@python.org  Mon Aug  7 21:16:31 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Mon, 7 Aug 2000 13:16:31 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python thread_nt.h,2.15,2.16
    Message-ID: <200008072016.NAA08272@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv8067/Python
    
    Modified Files:
    	thread_nt.h 
    Log Message:
    
    
    -- from Trent Mick: [Patch #101010] replace use of INT_PTR
       with uintptr_t (fix MSVC 5.0 build) 
    
    Index: thread_nt.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/thread_nt.h,v
    retrieving revision 2.15
    retrieving revision 2.16
    diff -C2 -r2.15 -r2.16
    *** thread_nt.h	2000/07/22 18:47:25	2.15
    --- thread_nt.h	2000/08/07 20:16:28	2.16
    ***************
    *** 162,170 ****
      int PyThread_start_new_thread(void (*func)(void *), void *arg)
      {
    ! #if _MSC_VER >= 1200
    ! 	INT_PTR rv;
    ! #else
    ! 	unsigned long rv;
    ! #endif
      	int success = 0;
      
    --- 162,166 ----
      int PyThread_start_new_thread(void (*func)(void *), void *arg)
      {
    ! 	uintptr_t rv;
      	int success = 0;
      
    
    
    
    From python-dev@python.org  Mon Aug  7 21:59:08 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Mon, 7 Aug 2000 13:59:08 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib sre.py,1.23,1.24 sre_compile.py,1.29,1.30 sre_parse.py,1.29,1.30
    Message-ID: <200008072059.NAA11904@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv11293/Lib
    
    Modified Files:
    	sre.py sre_compile.py sre_parse.py 
    Log Message:
    
    
    -- reset marks if repeat_one tail doesn't match
       (this should fix Sjoerd's xmllib problem)
    -- added skip field to INFO header
    -- changed compiler to generate charset INFO header
    -- changed trace messages to support post-mortem analysis
    
    
    Index: sre.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/sre.py,v
    retrieving revision 1.23
    retrieving revision 1.24
    diff -C2 -r1.23 -r1.24
    *** sre.py	2000/08/01 22:47:48	1.23
    --- sre.py	2000/08/07 20:59:04	1.24
    ***************
    *** 48,61 ****
      
      def sub(pattern, repl, string, count=0):
    !     return _compile(pattern).sub(repl, string, count)
      
      def subn(pattern, repl, string, count=0):
    !     return _compile(pattern).subn(repl, string, count)
      
      def split(pattern, string, maxsplit=0):
    !     return _compile(pattern).split(string, maxsplit)
      
      def findall(pattern, string, maxsplit=0):
    !     return _compile(pattern).findall(string, maxsplit)
      
      def compile(pattern, flags=0):
    --- 48,61 ----
      
      def sub(pattern, repl, string, count=0):
    !     return _compile(pattern, 0).sub(repl, string, count)
      
      def subn(pattern, repl, string, count=0):
    !     return _compile(pattern, 0).subn(repl, string, count)
      
      def split(pattern, string, maxsplit=0):
    !     return _compile(pattern, 0).split(string, maxsplit)
      
      def findall(pattern, string, maxsplit=0):
    !     return _compile(pattern, 0).findall(string, maxsplit)
      
      def compile(pattern, flags=0):
    ***************
    *** 89,103 ****
          return string.join(seq, sep[:0])
      
    ! def _compile(pattern, flags=0):
          # internal: compile pattern
    !     tp = type(pattern)
    !     if tp not in sre_compile.STRING_TYPES:
              return pattern
    -     key = (tp, pattern, flags)
          try:
    -         return _cache[key]
    -     except KeyError:
    -         pass
    -     try:
              p = sre_compile.compile(pattern, flags)
          except error, v:
    --- 89,101 ----
          return string.join(seq, sep[:0])
      
    ! def _compile(*key):
          # internal: compile pattern
    !     p = _cache.get(key)
    !     if p is not None:
    !         return p
    !     pattern, flags = key
    !     if type(pattern) not in sre_compile.STRING_TYPES:
              return pattern
          try:
              p = sre_compile.compile(pattern, flags)
          except error, v:
    ***************
    *** 169,173 ****
          return _compile, (p.pattern, p.flags)
      
    ! copy_reg.pickle(type(_compile("")), _pickle, _compile)
      
      # --------------------------------------------------------------------
    --- 167,171 ----
          return _compile, (p.pattern, p.flags)
      
    ! copy_reg.pickle(type(_compile("", 0)), _pickle, _compile)
      
      # --------------------------------------------------------------------
    
    Index: sre_compile.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/sre_compile.py,v
    retrieving revision 1.29
    retrieving revision 1.30
    diff -C2 -r1.29 -r1.30
    *** sre_compile.py	2000/08/01 22:47:48	1.29
    --- sre_compile.py	2000/08/07 20:59:04	1.30
    ***************
    *** 15,84 ****
      MAXCODE = 65535
      
    - def _charset(charset, fixup=None):
    -     # internal: optimize character set
    -     if not fixup:
    -         fixup = lambda x: x
    -     out = []
    -     charmap = [0]*256
    -     try:
    -         for op, av in charset:
    -             if op is NEGATE:
    -                 out.append((op, av))
    -             elif op is LITERAL:
    -                 charmap[fixup(av)] = 1
    -             elif op is RANGE:
    -                 for i in range(fixup(av[0]), fixup(av[1])+1):
    -                     charmap[i] = 1
    -             elif op is CATEGORY:
    -                 # FIXME: could append to charmap tail
    -                 return charset # cannot compress
    -     except IndexError:
    -         # unicode
    -         return charset
    -     # compress character map
    -     i = p = n = 0
    -     runs = []
    -     for c in charmap:
    -         if c:
    -             if n == 0:
    -                 p = i
    -             n = n + 1
    -         elif n:
    -             runs.append((p, n))
    -             n = 0
    -         i = i + 1
    -     if n:
    -         runs.append((p, n))
    -     if len(runs) <= 2:
    -         # use literal/range
    -         for p, n in runs:
    -             if n == 1:
    -                 out.append((LITERAL, p))
    -             else:
    -                 out.append((RANGE, (p, p+n-1)))
    -         if len(out) < len(charset):
    -             return out
    -     else:
    -         # use bitmap
    -         data = []
    -         m = 1; v = 0
    -         for c in charmap:
    -             if c:
    -                 v = v + m
    -             m = m << 1
    -             if m > MAXCODE:
    -                 data.append(v)
    -                 m = 1; v = 0
    -         out.append((CHARSET, data))
    -         return out
    -     return charset
    - 
    - def _simple(av):
    -     # check if av is a "simple" operator
    -     lo, hi = av[2].getwidth()
    -     if lo == 0:
    -         raise error, "nothing to repeat"
    -     return lo == hi == 1 and av[2][0][0] != SUBPATTERN
    - 
      def _compile(code, pattern, flags):
          # internal: compile a (sub)pattern
    --- 15,18 ----
    ***************
    *** 100,124 ****
                      fixup = lambda x: x
                  skip = len(code); emit(0)
    !             for op, av in _charset(av, fixup):
    !                 emit(OPCODES[op])
    !                 if op is NEGATE:
    !                     pass
    !                 elif op is LITERAL:
    !                     emit(fixup(av))
    !                 elif op is RANGE:
    !                     emit(fixup(av[0]))
    !                     emit(fixup(av[1]))
    !                 elif op is CHARSET:
    !                     code.extend(av)
    !                 elif op is CATEGORY:
    !                     if flags & SRE_FLAG_LOCALE:
    !                         emit(CHCODES[CH_LOCALE[av]])
    !                     elif flags & SRE_FLAG_UNICODE:
    !                         emit(CHCODES[CH_UNICODE[av]])
    !                     else:
    !                         emit(CHCODES[av])
    !                 else:
    !                     raise error, "internal: unsupported set operator"
    !             emit(OPCODES[FAILURE])
                  code[skip] = len(code) - skip
              elif op is ANY:
    --- 34,38 ----
                      fixup = lambda x: x
                  skip = len(code); emit(0)
    !             _compile_charset(av, flags, code, fixup)
                  code[skip] = len(code) - skip
              elif op is ANY:
    ***************
    *** 160,163 ****
    --- 74,78 ----
                      emit(OPCODES[MARK])
                      emit((av[0]-1)*2)
    +             # _compile_info(code, av[1], flags)
                  _compile(code, av[1], flags)
                  if av[0]:
    ***************
    *** 196,199 ****
    --- 111,115 ----
                  for av in av[1]:
                      skip = len(code); emit(0)
    +                 # _compile_info(code, av, flags)
                      _compile(code, av, flags)
                      emit(OPCODES[JUMP])
    ***************
    *** 220,223 ****
    --- 136,230 ----
                  raise ValueError, ("unsupported operand type", op)
      
    + def _compile_charset(charset, flags, code, fixup=None):
    +     # compile charset subprogram
    +     emit = code.append
    +     if not fixup:
    +         fixup = lambda x: x
    +     for op, av in _optimize_charset(charset, fixup):
    +         emit(OPCODES[op])
    +         if op is NEGATE:
    +             pass
    +         elif op is LITERAL:
    +             emit(fixup(av))
    +         elif op is RANGE:
    +             emit(fixup(av[0]))
    +             emit(fixup(av[1]))
    +         elif op is CHARSET:
    +             code.extend(av)
    +         elif op is CATEGORY:
    +             if flags & SRE_FLAG_LOCALE:
    +                 emit(CHCODES[CH_LOCALE[av]])
    +             elif flags & SRE_FLAG_UNICODE:
    +                 emit(CHCODES[CH_UNICODE[av]])
    +             else:
    +                 emit(CHCODES[av])
    +         else:
    +             raise error, "internal: unsupported set operator"
    +     emit(OPCODES[FAILURE])
    + 
    + def _optimize_charset(charset, fixup):
    +     # internal: optimize character set
    +     out = []
    +     charmap = [0]*256
    +     try:
    +         for op, av in charset:
    +             if op is NEGATE:
    +                 out.append((op, av))
    +             elif op is LITERAL:
    +                 charmap[fixup(av)] = 1
    +             elif op is RANGE:
    +                 for i in range(fixup(av[0]), fixup(av[1])+1):
    +                     charmap[i] = 1
    +             elif op is CATEGORY:
    +                 # FIXME: could append to charmap tail
    +                 return charset # cannot compress
    +     except IndexError:
    +         # character set contains unicode characters
    +         return charset
    +     # compress character map
    +     i = p = n = 0
    +     runs = []
    +     for c in charmap:
    +         if c:
    +             if n == 0:
    +                 p = i
    +             n = n + 1
    +         elif n:
    +             runs.append((p, n))
    +             n = 0
    +         i = i + 1
    +     if n:
    +         runs.append((p, n))
    +     if len(runs) <= 2:
    +         # use literal/range
    +         for p, n in runs:
    +             if n == 1:
    +                 out.append((LITERAL, p))
    +             else:
    +                 out.append((RANGE, (p, p+n-1)))
    +         if len(out) < len(charset):
    +             return out
    +     else:
    +         # use bitmap
    +         data = []
    +         m = 1; v = 0
    +         for c in charmap:
    +             if c:
    +                 v = v + m
    +             m = m << 1
    +             if m > MAXCODE:
    +                 data.append(v)
    +                 m = 1; v = 0
    +         out.append((CHARSET, data))
    +         return out
    +     return charset
    + 
    + def _simple(av):
    +     # check if av is a "simple" operator
    +     lo, hi = av[2].getwidth()
    +     if lo == 0:
    +         raise error, "nothing to repeat"
    +     return lo == hi == 1 and av[2][0][0] != SUBPATTERN
    + 
      def _compile_info(code, pattern, flags):
          # internal: compile an info block.  in the current version,
    ***************
    *** 229,239 ****
    --- 236,293 ----
          # look for a literal prefix
          prefix = []
    +     prefix_skip = 0
          charset = [] # not used
          if not (flags & SRE_FLAG_IGNORECASE):
    +         # look for literal prefix
              for op, av in pattern.data:
                  if op is LITERAL:
    +                 if len(prefix) == prefix_skip:
    +                     prefix_skip = prefix_skip + 1
                      prefix.append(av)
    +             elif op is SUBPATTERN and len(av[1]) == 1:
    +                 op, av = av[1][0]
    +                 if op is LITERAL:
    +                     prefix.append(av)
    +                 else:
    +                     break
                  else:
                      break
    +         # if no prefix, look for charset prefix
    +         if not prefix and pattern.data:
    +             op, av = pattern.data[0]
    +             if op is SUBPATTERN and av[1]:
    +                 op, av = av[1][0]
    +                 if op is LITERAL:
    +                     charset.append((op, av))
    +                 elif op is BRANCH:
    +                     c = []
    +                     for p in av[1]:
    +                         if not p:
    +                             break
    +                         op, av = p[0]
    +                         if op is LITERAL:
    +                             c.append((op, av))
    +                         else:
    +                             break
    +                     else:
    +                         charset = c
    +             elif op is BRANCH:
    +                 c = []
    +                 for p in av[1]:
    +                     if not p:
    +                         break
    +                     op, av = p[0]
    +                     if op is LITERAL:
    +                         c.append((op, av))
    +                     else:
    +                         break
    +                 else:
    +                     charset = c
    +             elif op is IN:
    +                 charset = av
    + ##     if prefix:
    + ##         print "*** PREFIX", prefix, prefix_skip
    + ##     if charset:
    + ##         print "*** CHARSET", charset
          # add an info block
          emit = code.append
    ***************
    *** 244,248 ****
          if prefix:
              mask = SRE_INFO_PREFIX
    !         if len(prefix) == len(pattern.data):
                  mask = mask + SRE_INFO_LITERAL
          elif charset:
    --- 298,302 ----
          if prefix:
              mask = SRE_INFO_PREFIX
    !         if len(prefix) == prefix_skip == len(pattern.data):
                  mask = mask + SRE_INFO_LITERAL
          elif charset:
    ***************
    *** 261,280 ****
          # add literal prefix
          if prefix:
    !         emit(len(prefix))
    !         if prefix:
    !             code.extend(prefix)
    !             # generate overlap table
    !             table = [-1] + ([0]*len(prefix))
    !             for i in range(len(prefix)):
    !                 table[i+1] = table[i]+1
    !                 while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
    !                     table[i+1] = table[table[i+1]-1]+1
    !             code.extend(table[1:]) # don't store first entry
          elif charset:
    !         # FIXME: use charset optimizer!
    !         for char in charset:
    !             emit(OPCODES[LITERAL])
    !             emit(char)
    !         emit(OPCODES[FAILURE])
          code[skip] = len(code) - skip
      
    --- 315,330 ----
          # add literal prefix
          if prefix:
    !         emit(len(prefix)) # length
    !         emit(prefix_skip) # skip
    !         code.extend(prefix)
    !         # generate overlap table
    !         table = [-1] + ([0]*len(prefix))
    !         for i in range(len(prefix)):
    !             table[i+1] = table[i]+1
    !             while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
    !                 table[i+1] = table[table[i+1]-1]+1
    !         code.extend(table[1:]) # don't store first entry
          elif charset:
    !         _compile_charset(charset, 0, code)
          code[skip] = len(code) - skip
      
    
    Index: sre_parse.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v
    retrieving revision 1.29
    retrieving revision 1.30
    diff -C2 -r1.29 -r1.30
    *** sre_parse.py	2000/08/01 22:47:48	1.29
    --- sre_parse.py	2000/08/07 20:59:04	1.30
    ***************
    *** 11,16 ****
      import string, sys
      
    - import _sre
    - 
      from sre_constants import *
      
    --- 11,14 ----
    ***************
    *** 233,236 ****
    --- 231,235 ----
          try:
              if escape[1:2] == "x":
    +             # FIXME: in 2.0, \xNN must have exactly two digits
                  while source.next in HEXDIGITS:
                      escape = escape + source.get()
    ***************
    *** 557,566 ****
          return subpattern
      
    ! def parse(str, flags=0):
          # parse 're' pattern into list of (opcode, argument) tuples
      
          source = Tokenizer(str)
      
    !     pattern = Pattern()
          pattern.flags = flags
      
    --- 556,566 ----
          return subpattern
      
    ! def parse(str, flags=0, pattern=None):
          # parse 're' pattern into list of (opcode, argument) tuples
      
          source = Tokenizer(str)
      
    !     if pattern is None:
    !         pattern = Pattern()
          pattern.flags = flags
      
    
    
    
    From python-dev@python.org  Mon Aug  7 21:59:08 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Mon, 7 Aug 2000 13:59:08 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.33,2.34
    Message-ID: <200008072059.NAA11902@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv11293/Modules
    
    Modified Files:
    	_sre.c 
    Log Message:
    
    
    -- reset marks if repeat_one tail doesn't match
       (this should fix Sjoerd's xmllib problem)
    -- added skip field to INFO header
    -- changed compiler to generate charset INFO header
    -- changed trace messages to support post-mortem analysis
    
    
    Index: _sre.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
    retrieving revision 2.33
    retrieving revision 2.34
    diff -C2 -r2.33 -r2.34
    *** _sre.c	2000/08/07 17:33:38	2.33
    --- _sre.c	2000/08/07 20:59:04	2.34
    ***************
    *** 14,19 ****
       * 00-07-21 fl  reset lastindex in scanner methods (0.9.6)
       * 00-08-01 fl  fixes for 1.6b1 (0.9.8)
    -  * 00-08-02 fl  moved SRE_COUNT out of the match method
       * 00-08-03 fl  added recursion limit
       *
       * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
    --- 14,19 ----
       * 00-07-21 fl  reset lastindex in scanner methods (0.9.6)
       * 00-08-01 fl  fixes for 1.6b1 (0.9.8)
       * 00-08-03 fl  added recursion limit
    +  * 00-08-07 fl  use PyOS_CheckStack() if available
       *
       * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
    ***************
    *** 94,99 ****
      #endif
      
    - #define PTR(ptr) ((SRE_CHAR*) (ptr) - (SRE_CHAR*) state->beginning)
    - 
      /* -------------------------------------------------------------------- */
      /* search engine state */
    --- 94,97 ----
    ***************
    *** 266,270 ****
          }
      
    !     TRACE(("copy %d:%d to %d\n", lo, hi, state->mark_stack_base));
      
          memcpy(state->mark_stack + state->mark_stack_base, state->mark + lo,
    --- 264,268 ----
          }
      
    !     TRACE(("copy %d:%d to %d (%d)\n", lo, hi, state->mark_stack_base, size));
      
          memcpy(state->mark_stack + state->mark_stack_base, state->mark + lo,
    ***************
    *** 301,305 ****
      #define SRE_AT sre_at
      #define SRE_COUNT sre_count
    ! #define SRE_MEMBER sre_member
      #define SRE_MATCH sre_match
      #define SRE_SEARCH sre_search
    --- 299,304 ----
      #define SRE_AT sre_at
      #define SRE_COUNT sre_count
    ! #define SRE_CHARSET sre_charset
    ! #define SRE_INFO sre_info
      #define SRE_MATCH sre_match
      #define SRE_SEARCH sre_search
    ***************
    *** 313,317 ****
      #undef SRE_SEARCH
      #undef SRE_MATCH
    ! #undef SRE_MEMBER
      #undef SRE_COUNT
      #undef SRE_AT
    --- 312,317 ----
      #undef SRE_SEARCH
      #undef SRE_MATCH
    ! #undef SRE_INFO
    ! #undef SRE_CHARSET
      #undef SRE_COUNT
      #undef SRE_AT
    ***************
    *** 323,327 ****
      #define SRE_AT sre_uat
      #define SRE_COUNT sre_ucount
    ! #define SRE_MEMBER sre_umember
      #define SRE_MATCH sre_umatch
      #define SRE_SEARCH sre_usearch
    --- 323,328 ----
      #define SRE_AT sre_uat
      #define SRE_COUNT sre_ucount
    ! #define SRE_CHARSET sre_ucharset
    ! #define SRE_INFO sre_uinfo
      #define SRE_MATCH sre_umatch
      #define SRE_SEARCH sre_usearch
    ***************
    *** 384,388 ****
      
      LOCAL(int)
    ! SRE_MEMBER(SRE_CODE* set, SRE_CODE ch)
      {
          /* check if character is a member of the given set */
    --- 385,389 ----
      
      LOCAL(int)
    ! SRE_CHARSET(SRE_CODE* set, SRE_CODE ch)
      {
          /* check if character is a member of the given set */
    ***************
    *** 454,457 ****
    --- 455,459 ----
          case SRE_OP_ANY:
              /* repeated dot wildcard. */
    +         TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
              while (ptr < end && !SRE_IS_LINEBREAK(*ptr))
                  ptr++;
    ***************
    *** 461,464 ****
    --- 463,467 ----
              /* repeated dot wildcare.  skip to the end of the target
                 string, and backtrack from there */
    +         TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr));
              ptr = end;
              break;
    ***************
    *** 467,470 ****
    --- 470,474 ----
              /* repeated literal */
              chr = pattern[1];
    +         TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
              while (ptr < end && (SRE_CODE) *ptr == chr)
                  ptr++;
    ***************
    *** 474,477 ****
    --- 478,482 ----
              /* repeated literal */
              chr = pattern[1];
    +         TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
              while (ptr < end && (SRE_CODE) state->lower(*ptr) == chr)
                  ptr++;
    ***************
    *** 481,484 ****
    --- 486,490 ----
              /* repeated non-literal */
              chr = pattern[1];
    +         TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
              while (ptr < end && (SRE_CODE) *ptr != chr)
                  ptr++;
    ***************
    *** 488,491 ****
    --- 494,498 ----
              /* repeated non-literal */
              chr = pattern[1];
    +         TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
              while (ptr < end && (SRE_CODE) state->lower(*ptr) != chr)
                  ptr++;
    ***************
    *** 494,498 ****
          case SRE_OP_IN:
              /* repeated set */
    !         while (ptr < end && SRE_MEMBER(pattern + 2, *ptr))
                  ptr++;
              break;
    --- 501,506 ----
          case SRE_OP_IN:
              /* repeated set */
    !         TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
    !         while (ptr < end && SRE_CHARSET(pattern + 2, *ptr))
                  ptr++;
              break;
    ***************
    *** 500,503 ****
    --- 508,512 ----
          default:
              /* repeated single character pattern */
    +         TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
              while ((SRE_CHAR*) state->ptr < end) {
                  i = SRE_MATCH(state, pattern, level);
    ***************
    *** 507,517 ****
    --- 516,555 ----
                      break;
              }
    +         TRACE(("|%p|%p|COUNT %d\n", pattern, ptr,
    +                (SRE_CHAR*) state->ptr - ptr));
              return (SRE_CHAR*) state->ptr - ptr;
          }
      
    +     TRACE(("|%p|%p|COUNT %d\n", pattern, ptr, ptr - (SRE_CHAR*) state->ptr));
          return ptr - (SRE_CHAR*) state->ptr;
      }
      
      LOCAL(int)
    + SRE_INFO(SRE_STATE* state, SRE_CODE* pattern)
    + {
    +     /* check if an SRE_OP_INFO block matches at the current position.
    +        returns the number of SRE_CODE objects to skip if successful, 0
    +        if no match */
    + 
    +     SRE_CHAR* end = state->end;
    +     SRE_CHAR* ptr = state->ptr;
    +     int i;
    + 
    +     /* check minimal length */
    +     if (pattern[3] && (end - ptr) < pattern[3])
    +         return 0;
    + 
    +     /* check known prefix */
    +     if (pattern[2] & SRE_INFO_PREFIX && pattern[5] > 1) {
    +         /*     */
    +         for (i = 0; i < pattern[5]; i++)
    +             if ((SRE_CODE) ptr[i] != pattern[7 + i])
    +                 return 0;
    +         return pattern[0] + 2 * pattern[6];
    +     }
    +     return pattern[0];
    + }
    + 
    + LOCAL(int)
      SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern, int level)
      {
    ***************
    *** 528,532 ****
          SRE_REPEAT rep; /* FIXME:  allocate in STATE instead */
      
    !     TRACE(("%8d: enter %d\n", PTR(ptr), level));
      
      #if defined(USE_STACKCHECK)
    --- 566,570 ----
          SRE_REPEAT rep; /* FIXME:  allocate in STATE instead */
      
    !     TRACE(("|%p|%p|ENTER %d\n", pattern, ptr, level));
      
      #if defined(USE_STACKCHECK)
    ***************
    *** 557,566 ****
              case SRE_OP_FAILURE:
                  /* immediate failure */
    !             TRACE(("%8d: failure\n", PTR(ptr)));
                  return 0;
      
              case SRE_OP_SUCCESS:
                  /* end of pattern */
    !             TRACE(("%8d: success\n", PTR(ptr)));
                  state->ptr = ptr;
                  return 1;
    --- 595,604 ----
              case SRE_OP_FAILURE:
                  /* immediate failure */
    !             TRACE(("|%p|%p|FAILURE\n", pattern, ptr));
                  return 0;
      
              case SRE_OP_SUCCESS:
                  /* end of pattern */
    !             TRACE(("|%p|%p|SUCCESS\n", pattern, ptr));
                  state->ptr = ptr;
                  return 1;
    ***************
    *** 569,573 ****
                  /* match at given position */
                  /*   */
    !             TRACE(("%8d: position %d\n", PTR(ptr), *pattern));
                  if (!SRE_AT(state, ptr, *pattern))
                      return 0;
    --- 607,611 ----
                  /* match at given position */
                  /*   */
    !             TRACE(("|%p|%p|AT %d\n", pattern, ptr, *pattern));
                  if (!SRE_AT(state, ptr, *pattern))
                      return 0;
    ***************
    *** 578,586 ****
                  /* match at given category */
                  /*   */
    !             TRACE(("%8d: category %d [category %d]\n", PTR(ptr),
    !                    *ptr, *pattern));
                  if (ptr >= end || !sre_category(pattern[0], ptr[0]))
                      return 0;
    -             TRACE(("%8d: category ok\n", PTR(ptr)));
                  pattern++;
                  ptr++;
    --- 616,622 ----
                  /* match at given category */
                  /*   */
    !             TRACE(("|%p|%p|CATEGORY %d\n", pattern, ptr, *pattern));
                  if (ptr >= end || !sre_category(pattern[0], ptr[0]))
                      return 0;
                  pattern++;
                  ptr++;
    ***************
    *** 590,594 ****
                  /* match literal string */
                  /*   */
    !             TRACE(("%8d: literal %c\n", PTR(ptr), pattern[0]));
                  if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0])
                      return 0;
    --- 626,630 ----
                  /* match literal string */
                  /*   */
    !             TRACE(("|%p|%p|LITERAL %d\n", pattern, ptr, *pattern));
                  if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0])
                      return 0;
    ***************
    *** 600,604 ****
                  /* match anything that is not literal character */
                  /*   */
    !             TRACE(("%8d: literal not %c\n", PTR(ptr), pattern[0]));
                  if (ptr >= end || (SRE_CODE) ptr[0] == pattern[0])
                      return 0;
    --- 636,640 ----
                  /* match anything that is not literal character */
                  /*   */
    !             TRACE(("|%p|%p|NOT_LITERAL %d\n", pattern, ptr, *pattern));
                  if (ptr >= end || (SRE_CODE) ptr[0] == pattern[0])
                      return 0;
    ***************
    *** 610,614 ****
                  /* match anything (except a newline) */
                  /*  */
    !             TRACE(("%8d: anything (except newline)\n", PTR(ptr)));
                  if (ptr >= end || SRE_IS_LINEBREAK(ptr[0]))
                      return 0;
    --- 646,650 ----
                  /* match anything (except a newline) */
                  /*  */
    !             TRACE(("|%p|%p|ANY\n", pattern, ptr));
                  if (ptr >= end || SRE_IS_LINEBREAK(ptr[0]))
                      return 0;
    ***************
    *** 619,623 ****
                  /* match anything */
                  /*  */
    !             TRACE(("%8d: anything\n", PTR(ptr)));
                  if (ptr >= end)
                      return 0;
    --- 655,659 ----
                  /* match anything */
                  /*  */
    !             TRACE(("|%p|%p|ANY_ALL\n", pattern, ptr));
                  if (ptr >= end)
                      return 0;
    ***************
    *** 628,633 ****
                  /* match set member (or non_member) */
                  /*    */
    !             TRACE(("%8d: set %c\n", PTR(ptr), *ptr));
    !             if (ptr >= end || !SRE_MEMBER(pattern + 1, *ptr))
                      return 0;
                  pattern += pattern[0];
    --- 664,669 ----
                  /* match set member (or non_member) */
                  /*    */
    !             TRACE(("|%p|%p|IN\n", pattern, ptr));
    !             if (ptr >= end || !SRE_CHARSET(pattern + 1, *ptr))
                      return 0;
                  pattern += pattern[0];
    ***************
    *** 637,641 ****
              case SRE_OP_GROUPREF:
                  /* match backreference */
    !             TRACE(("%8d: group %d\n", PTR(ptr), pattern[0]));
                  i = pattern[0];
                  {
    --- 673,677 ----
              case SRE_OP_GROUPREF:
                  /* match backreference */
    !             TRACE(("|%p|%p|GROUPREF %d\n", pattern, ptr, pattern[0]));
                  i = pattern[0];
                  {
    ***************
    *** 655,659 ****
              case SRE_OP_GROUPREF_IGNORE:
                  /* match backreference */
    !             TRACE(("%8d: group ignore %d\n", PTR(ptr), pattern[0]));
                  i = pattern[0];
                  {
    --- 691,695 ----
              case SRE_OP_GROUPREF_IGNORE:
                  /* match backreference */
    !             TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", pattern, ptr, pattern[0]));
                  i = pattern[0];
                  {
    ***************
    *** 673,677 ****
      
              case SRE_OP_LITERAL_IGNORE:
    !             TRACE(("%8d: literal lower(%c)\n", PTR(ptr), pattern[0]));
                  if (ptr >= end ||
                      state->lower(*ptr) != state->lower(*pattern))
    --- 709,713 ----
      
              case SRE_OP_LITERAL_IGNORE:
    !             TRACE(("|%p|%p|LITERAL_IGNORE %d\n", pattern, ptr, pattern[0]));
                  if (ptr >= end ||
                      state->lower(*ptr) != state->lower(*pattern))
    ***************
    *** 682,686 ****
      
              case SRE_OP_NOT_LITERAL_IGNORE:
    !             TRACE(("%8d: literal not lower(%c)\n", PTR(ptr), pattern[0]));
                  if (ptr >= end ||
                      state->lower(*ptr) == state->lower(*pattern))
    --- 718,722 ----
      
              case SRE_OP_NOT_LITERAL_IGNORE:
    !             TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n", pattern, ptr, *pattern));
                  if (ptr >= end ||
                      state->lower(*ptr) == state->lower(*pattern))
    ***************
    *** 691,697 ****
      
              case SRE_OP_IN_IGNORE:
    !             TRACE(("%8d: set lower(%c)\n", PTR(ptr), *ptr));
                  if (ptr >= end
    !                 || !SRE_MEMBER(pattern + 1, (SRE_CODE) state->lower(*ptr)))
                      return 0;
                  pattern += pattern[0];
    --- 727,733 ----
      
              case SRE_OP_IN_IGNORE:
    !             TRACE(("|%p|%p|IN_IGNORE\n", pattern, ptr));
                  if (ptr >= end
    !                 || !SRE_CHARSET(pattern + 1, (SRE_CODE) state->lower(*ptr)))
                      return 0;
                  pattern += pattern[0];
    ***************
    *** 702,706 ****
                  /* set mark */
                  /*   */
    !             TRACE(("%8d: set mark %d\n", PTR(ptr), pattern[0]));
                  i = pattern[0];
                  if (i & 1)
    --- 738,742 ----
                  /* set mark */
                  /*   */
    !             TRACE(("|%p|%p|MARK %d\n", pattern, ptr, pattern[0]));
                  i = pattern[0];
                  if (i & 1)
    ***************
    *** 716,720 ****
                  /* jump forward */
                  /*   */
    !             TRACE(("%8d: jump +%d\n", PTR(ptr), pattern[0]));
                  pattern += pattern[0];
                  break;
    --- 752,756 ----
                  /* jump forward */
                  /*   */
    !             TRACE(("|%p|%p|JUMP %d\n", pattern, ptr, pattern[0]));
                  pattern += pattern[0];
                  break;
    ***************
    *** 723,727 ****
                  /* assert subpattern */
                  /*     */
    !             TRACE(("%8d: assert subpattern %d\n", PTR(ptr), pattern[1]));
                  state->ptr = ptr - pattern[1];
                  if (state->ptr < state->beginning)
    --- 759,763 ----
                  /* assert subpattern */
                  /*     */
    !             TRACE(("|%p|%p|ASSERT %d\n", pattern, ptr, pattern[1]));
                  state->ptr = ptr - pattern[1];
                  if (state->ptr < state->beginning)
    ***************
    *** 738,742 ****
                  /* assert not subpattern */
                  /*     */
    !             TRACE(("%8d: assert not subpattern %d\n", PTR(ptr), pattern[1]));
                  state->ptr = ptr - pattern[1];
                  if (state->ptr < state->beginning)
    --- 774,778 ----
                  /* assert not subpattern */
                  /*     */
    !             TRACE(("|%p|%p|ASSERT_NOT %d\n", pattern, ptr, pattern[1]));
                  state->ptr = ptr - pattern[1];
                  if (state->ptr < state->beginning)
    ***************
    *** 755,786 ****
                  /* alternation */
                  /*  <0=skip> code  ...  */
    !             TRACE(("%8d: branch\n", PTR(ptr)));
                  lastmark = state->lastmark;
    !             while (pattern[0]) {
    !                 SRE_CODE* code = pattern+1;
    !                 TRACE(("%8d: try branch\n", PTR(ptr)));
    !                 switch (code[0]) {
    !                 case SRE_OP_IN:
    !                     if (ptr >= end || !SRE_MEMBER(code + 2, ptr[0]))
    !                         break;
    !                     code += code[1] + 1;
    !                     state->ptr = ptr + 1;
    !                     goto branch;
    !                 case SRE_OP_LITERAL:
    !                     if (ptr >= end || (SRE_CODE) ptr[0] != code[1])
    !                         break;
    !                     code += 2;
    !                     state->ptr = ptr + 1;
    !                     goto branch;
    !                 default:
    !                     state->ptr = ptr;
    !                 branch:
    !                     i = SRE_MATCH(state, code, level + 1);
    !                     if (i)
    !                         return i;
    !                     while (state->lastmark > lastmark)
    !                         state->mark[state->lastmark--] = NULL;
                      }
    -                 pattern += pattern[0];
                  }
                  return 0;
    --- 791,814 ----
                  /* alternation */
                  /*  <0=skip> code  ...  */
    !             TRACE(("|%p|%p|BRANCH\n", pattern, ptr));
                  lastmark = state->lastmark;
    !             for (; pattern[0]; pattern += pattern[0]) {
    !                 if (pattern[1] == SRE_OP_LITERAL &&
    !                     (ptr >= end || (SRE_CODE) *ptr != pattern[2]))
    !                     continue;
    !                 if (pattern[1] == SRE_OP_IN &&
    !                     (ptr >= end || !SRE_CHARSET(pattern + 3, (SRE_CODE) *ptr)))
    !                     continue;
    !                 state->ptr = ptr;
    !                 i = SRE_MATCH(state, pattern + 1, level + 1);
    !                 if (i)
    !                     return i;
    !                 if (state->lastmark > lastmark) {
    !                     memset(
    !                         state->mark + lastmark + 1, 0,
    !                         (state->lastmark - lastmark) * sizeof(void*)
    !                         );
    !                     state->lastmark = lastmark;
                      }
                  }
                  return 0;
    ***************
    *** 796,800 ****
                  /*   <1=min> <2=max> item  tail */
      
    !             TRACE(("%8d: max repeat one {%d,%d}\n", PTR(ptr),
                         pattern[1], pattern[2]));
      
    --- 824,828 ----
                  /*   <1=min> <2=max> item  tail */
      
    !             TRACE(("|%p|%p|REPEAT_ONE %d %d\n", pattern, ptr,
                         pattern[1], pattern[2]));
      
    ***************
    *** 815,820 ****
                     and backtrack if not. */
      
    -             TRACE(("%8d: repeat %d found\n", PTR(ptr), count));
    - 
                  if (count < (int) pattern[1])
                      return 0;
    --- 843,846 ----
    ***************
    *** 822,826 ****
                  if (pattern[pattern[0]] == SRE_OP_SUCCESS) {
                      /* tail is empty.  we're finished */
    -                 TRACE(("%8d: tail is empty\n", PTR(ptr)));
                      state->ptr = ptr;
                      return 1;
    --- 848,851 ----
    ***************
    *** 830,836 ****
                         the rest of the pattern cannot possibly match */
                      chr = pattern[pattern[0]+1];
    -                 TRACE(("%8d: tail is literal %d\n", PTR(ptr), chr));
                      for (;;) {
    -                     TRACE(("%8d: scan for tail match\n", PTR(ptr)));
                          while (count >= (int) pattern[1] &&
                                 (ptr >= end || *ptr != chr)) {
    --- 855,859 ----
    ***************
    *** 838,850 ****
                              count--;
                          }
    -                     TRACE(("%8d: check tail\n", PTR(ptr)));
                          if (count < (int) pattern[1])
                              break;
                          state->ptr = ptr;
                          i = SRE_MATCH(state, pattern + pattern[0], level + 1);
    !                     if (i > 0) {
    !                         TRACE(("%8d: repeat %d picked\n", PTR(ptr), count));
                              return 1;
    -                     }
                          ptr--;
                          count--;
    --- 861,870 ----
                              count--;
                          }
                          if (count < (int) pattern[1])
                              break;
                          state->ptr = ptr;
                          i = SRE_MATCH(state, pattern + pattern[0], level + 1);
    !                     if (i)
                              return 1;
                          ptr--;
                          count--;
    ***************
    *** 853,868 ****
                  } else {
                      /* general case */
    !                 TRACE(("%8d: tail is pattern\n", PTR(ptr)));
                      while (count >= (int) pattern[1]) {
                          state->ptr = ptr;
                          i = SRE_MATCH(state, pattern + pattern[0], level + 1);
    !                     if (i < 0)
    !                         return i;
    !                     if (i) {
    !                         TRACE(("%8d: repeat %d picked\n", PTR(ptr), count));
                              return 1;
    -                     }
                          ptr--;
                          count--;
                      }
                  }
    --- 873,891 ----
                  } else {
                      /* general case */
    !                 lastmark = state->lastmark;
                      while (count >= (int) pattern[1]) {
                          state->ptr = ptr;
                          i = SRE_MATCH(state, pattern + pattern[0], level + 1);
    !                     if (i)
                              return 1;
                          ptr--;
                          count--;
    +                     if (state->lastmark > lastmark) {
    +                         memset(
    +                             state->mark + lastmark + 1, 0,
    +                             (state->lastmark - lastmark) * sizeof(void*)
    +                             );
    +                         state->lastmark = lastmark;
    +                     }
                      }
                  }
    ***************
    *** 873,877 ****
                     by the UNTIL operator */
                  /*   <1=min> <2=max> item  tail */
    !             TRACE(("%8d: repeat {%d,%d}\n", PTR(ptr),
                         pattern[1], pattern[2]));
      
    --- 896,900 ----
                     by the UNTIL operator */
                  /*   <1=min> <2=max> item  tail */
    !             TRACE(("|%p|%p|REPEAT %d %d\n", pattern, ptr,
                         pattern[1], pattern[2]));
      
    ***************
    *** 905,913 ****
                  count = rp->count + 1;
      
    !             TRACE(("%8d: max until %d\n", PTR(ptr), count));
      
                  if (count < rp->pattern[1]) {
                      /* not enough matches */
    -                 TRACE(("%8d: match item (required)\n", PTR(ptr)));
                      rp->count = count;
                      /* RECURSIVE */
    --- 928,935 ----
                  count = rp->count + 1;
      
    !             TRACE(("|%p|%p|MAX_UNTIL %d\n", pattern, ptr, count));
      
                  if (count < rp->pattern[1]) {
                      /* not enough matches */
                      rp->count = count;
                      /* RECURSIVE */
    ***************
    *** 921,925 ****
      
                  if (count < rp->pattern[2] || rp->pattern[2] == 65535) {
    -                 TRACE(("%8d: match item (optional)\n", PTR(ptr)));
                      /* we may have enough matches, but if we can
                         match another item, do so */
    --- 943,946 ----
    ***************
    *** 938,942 ****
                  /* cannot match more repeated items here.  make sure the
                     tail matches */
    -             TRACE(("%8d: match tail\n", PTR(ptr)));
                  state->repeat = rp->prev;
                  i = SRE_MATCH(state, pattern, level + 1);
    --- 959,962 ----
    ***************
    *** 956,960 ****
                  count = rp->count + 1;
      
    !             TRACE(("%8d: min until %d\n", PTR(ptr), count));
      
                  state->ptr = ptr;
    --- 976,980 ----
                  count = rp->count + 1;
      
    !             TRACE(("|%p|%p|MIN_UNTIL %d\n", pattern, ptr, count));
      
                  state->ptr = ptr;
    ***************
    *** 962,966 ****
                  if (count < rp->pattern[1]) {
                      /* not enough matches */
    -                 TRACE(("%8d: match item (required)\n", PTR(ptr)));
                      rp->count = count;
                      /* RECURSIVE */
    --- 982,985 ----
    ***************
    *** 974,978 ****
      
                  /* see if the tail matches */
    -             TRACE(("%8d: match tail\n", PTR(ptr)));
                  state->repeat = rp->prev;
                  i = SRE_MATCH(state, pattern, level + 1);
    --- 993,996 ----
    ***************
    *** 986,990 ****
                      return 0;
      
    -             TRACE(("%8d: match item (optional)\n", PTR(ptr)));
                  rp->count = count;
                  /* RECURSIVE */
    --- 1004,1007 ----
    ***************
    *** 996,1000 ****
      
              default:
    !             TRACE(("%8d: unknown opcode %d\n", PTR(ptr), pattern[-1]));
                  return SRE_ERROR_ILLEGAL;
              }
    --- 1013,1017 ----
      
              default:
    !             TRACE(("|%p|%p|UNKNOWN %d\n", pattern, ptr, pattern[-1]));
                  return SRE_ERROR_ILLEGAL;
              }
    ***************
    *** 1012,1015 ****
    --- 1029,1033 ----
          int status = 0;
          int prefix_len = 0;
    +     int prefix_skip;
          SRE_CODE* prefix = NULL;
          SRE_CODE* charset = NULL;
    ***************
    *** 1033,1041 ****
              if (flags & SRE_INFO_PREFIX) {
                  /* pattern starts with a known prefix */
                  prefix_len = pattern[5];
    !             prefix = pattern + 6;
                  overlap = prefix + prefix_len - 1;
              } else if (flags & SRE_INFO_CHARSET)
                  /* pattern starts with a character from a known set */
                  charset = pattern + 5;
      
    --- 1051,1062 ----
              if (flags & SRE_INFO_PREFIX) {
                  /* pattern starts with a known prefix */
    +             /*     */
                  prefix_len = pattern[5];
    !             prefix_skip = pattern[6];
    !             prefix = pattern + 7;
                  overlap = prefix + prefix_len - 1;
              } else if (flags & SRE_INFO_CHARSET)
                  /* pattern starts with a character from a known set */
    +             /*  */
                  charset = pattern + 5;
      
    ***************
    *** 1043,1046 ****
    --- 1064,1070 ----
          }
      
    +     TRACE(("prefix = %p %d %d\n", prefix, prefix_len, prefix_skip));
    +     TRACE(("charset = %p\n", charset));
    + 
      #if defined(USE_FAST_SEARCH)
          if (prefix_len > 1) {
    ***************
    *** 1059,1068 ****
                          if (++i == prefix_len) {
                              /* found a potential match */
    !                         TRACE(("%8d: === SEARCH === hit\n", PTR(ptr)));
    !                         state->start = ptr - prefix_len + 1;
    !                         state->ptr = ptr + 1;
                              if (flags & SRE_INFO_LITERAL)
                                  return 1; /* we got all of it */
    !                         status = SRE_MATCH(state, pattern + 2*prefix_len, 1);
                              if (status != 0)
                                  return status;
    --- 1083,1092 ----
                          if (++i == prefix_len) {
                              /* found a potential match */
    !                         TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr));
    !                         state->start = ptr + 1 - prefix_len;
    !                         state->ptr = ptr + 1 - prefix_len + prefix_skip;
                              if (flags & SRE_INFO_LITERAL)
                                  return 1; /* we got all of it */
    !                         status = SRE_MATCH(state, pattern + 2*prefix_skip, 1);
                              if (status != 0)
                                  return status;
    ***************
    *** 1084,1087 ****
    --- 1108,1112 ----
                 for short prefixes, and if fast search is disabled */
              SRE_CODE chr = pattern[1];
    +         end = state->end;
              for (;;) {
                  while (ptr < end && (SRE_CODE) ptr[0] != chr)
    ***************
    *** 1089,1093 ****
                  if (ptr == end)
                      return 0;
    !             TRACE(("%8d: === SEARCH === literal\n", PTR(ptr)));
                  state->start = ptr;
                  state->ptr = ++ptr;
    --- 1114,1118 ----
                  if (ptr == end)
                      return 0;
    !             TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr));
                  state->start = ptr;
                  state->ptr = ++ptr;
    ***************
    *** 1098,1107 ****
          } else if (charset) {
              /* pattern starts with a character from a known set */
              for (;;) {
    !             while (ptr < end && !SRE_MEMBER(charset, ptr[0]))
                      ptr++;
                  if (ptr == end)
                      return 0;
    !             TRACE(("%8d: === SEARCH === charset\n", PTR(ptr)));
                  state->start = ptr;
                  state->ptr = ptr;
    --- 1123,1133 ----
          } else if (charset) {
              /* pattern starts with a character from a known set */
    +         end = state->end;
              for (;;) {
    !             while (ptr < end && !SRE_CHARSET(charset, ptr[0]))
                      ptr++;
                  if (ptr == end)
                      return 0;
    !             TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr));
                  state->start = ptr;
                  state->ptr = ptr;
    ***************
    *** 1109,1117 ****
                  if (status != 0)
                      break;
              }
          } else
              /* general case */
              while (ptr <= end) {
    !             TRACE(("%8d: === SEARCH ===\n", PTR(ptr))); 
                  state->start = state->ptr = ptr++;
                  status = SRE_MATCH(state, pattern, 1);
    --- 1135,1144 ----
                  if (status != 0)
                      break;
    +             ptr++;
              }
          } else
              /* general case */
              while (ptr <= end) {
    !             TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
                  state->start = state->ptr = ptr++;
                  status = SRE_MATCH(state, pattern, 1);
    ***************
    *** 1481,1484 ****
    --- 1508,1513 ----
          state.ptr = state.start;
      
    +     TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
    + 
          if (state.charsize == 1) {
              status = sre_match(&state, PatternObject_GetCode(self), 1);
    ***************
    *** 1489,1492 ****
    --- 1518,1523 ----
          }
      
    +     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
    + 
          state_fini(&state);
      
    ***************
    *** 1510,1513 ****
    --- 1541,1546 ----
              return NULL;
      
    +     TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr));
    + 
          if (state.charsize == 1) {
              status = sre_search(&state, PatternObject_GetCode(self));
    ***************
    *** 1517,1520 ****
    --- 1550,1555 ----
      #endif
          }
    + 
    +     TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
      
          state_fini(&state);
    
    
    
    From python-dev@python.org  Mon Aug  7 22:00:45 2000
    From: python-dev@python.org (Jack Jansen)
    Date: Mon, 7 Aug 2000 14:00:45 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Include pythonrun.h,2.31,2.32
    Message-ID: <200008072100.OAA12232@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Include
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv12077
    
    Modified Files:
    	pythonrun.h 
    Log Message:
    Added a prototype for PyOS_CheckStack (within #ifdef USE_STACKCHECK).
    
    
    Index: pythonrun.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v
    retrieving revision 2.31
    retrieving revision 2.32
    diff -C2 -r2.31 -r2.32
    *** pythonrun.h	2000/07/09 00:55:06	2.31
    --- pythonrun.h	2000/08/07 21:00:42	2.32
    ***************
    *** 88,91 ****
    --- 88,94 ----
      extern DL_IMPORT(int) (*PyOS_InputHook)(void);
      extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *);
    + #ifdef USE_STACKCHECK
    + int PyOS_CheckStack(void);		/* Check that we aren't overflowing our stack */
    + #endif
      
      #ifdef __cplusplus
    
    
    
    From python-dev@python.org  Mon Aug  7 22:02:53 2000
    From: python-dev@python.org (Jack Jansen)
    Date: Mon, 7 Aug 2000 14:02:53 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.34,2.35
    Message-ID: <200008072102.OAA13080@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv12753
    
    Modified Files:
    	_sre.c 
    Log Message:
    Added a missing } in the USE_STACKCHECK code.
    
    
    Index: _sre.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
    retrieving revision 2.34
    retrieving revision 2.35
    diff -C2 -r2.34 -r2.35
    *** _sre.c	2000/08/07 20:59:04	2.34
    --- _sre.c	2000/08/07 21:02:50	2.35
    ***************
    *** 571,574 ****
    --- 571,575 ----
          if (level % 10 == 0 && PyOS_CheckStack()) {
              return SRE_ERROR_RECURSION_LIMIT;
    +     }
      #endif
      
    
    
    
    From python-dev@python.org  Tue Aug  8 00:00:51 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 7 Aug 2000 16:00:51 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.2,1.3
    Message-ID: <200008072300.QAA06465@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv6428
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    PEP proposals must have a title and an abstract.
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** pep-0001.txt	2000/07/25 17:59:08	1.2
    --- pep-0001.txt	2000/08/07 23:00:47	1.3
    ***************
    *** 49,61 ****
          and specifies a location (e.g. egroups, python.org, Roundup).
      
    !     The champion then emails the PEP editor describing the proposal
    !     and its title.  If the PEP editor approves, he will assign the PEP
    !     a number, label it as standards track or informational, give it
    !     status 'draft', and create and check-in an initial template for
    !     the PEP.  The PEP editor will not unreasonably deny a PEP.
    !     Reasons for denying PEP status include duplication of effort,
    !     being technically unsound, or not in keeping with the Python
    !     philosophy; the BDFL (Benevolent Dictator for Life, Guido van
    !     Rossum ) is the final arbitrator of the latter.
      
          Discussion concerning a PEP should initially be kept out of the
    --- 49,63 ----
          and specifies a location (e.g. egroups, python.org, Roundup).
      
    !     The champion then emails the PEP editor with a proposed title and
    !     an abstract of about a paragraph in length.
    ! 
    !     If the PEP editor approves, he will assign the PEP a number, label
    !     it as standards track or informational, give it status 'draft',
    !     and create and check-in an initial template for the PEP.  The PEP
    !     editor will not unreasonably deny a PEP.  Reasons for denying PEP
    !     status include duplication of effort, being technically unsound,
    !     or not in keeping with the Python philosophy; the BDFL (Benevolent
    !     Dictator for Life, Guido van Rossum ) is the
    !     final arbitrator of the latter.
      
          Discussion concerning a PEP should initially be kept out of the
    
    
    
    From python-dev@python.org  Tue Aug  8 03:30:27 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 7 Aug 2000 19:30:27 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.19,1.20
    Message-ID: <200008080230.TAA20553@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv20545
    
    Modified Files:
    	pep-0000.txt 
    Log Message:
    PEP 2 added.
    
    Conform headers to PEP 1.
    
    
    Index: pep-0000.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
    retrieving revision 1.19
    retrieving revision 1.20
    diff -C2 -r1.19 -r1.20
    *** pep-0000.txt	2000/08/03 15:42:42	1.19
    --- pep-0000.txt	2000/08/08 02:30:24	1.20
    ***************
    *** 2,7 ****
      Title: Index of Python Enhancement Proposals (PEPs)
      Version: $Revision$
    ! Owner: bwarsaw@beopen.com (Barry A. Warsaw)
      Status: Active
      
      Introduction
    --- 2,10 ----
      Title: Index of Python Enhancement Proposals (PEPs)
      Version: $Revision$
    ! Author: bwarsaw@beopen.com (Barry A. Warsaw)
      Status: Active
    + Type: Informational
    + Created: 13-Jul-2000
    + Post-History:
      
      Introduction
    ***************
    *** 18,21 ****
    --- 21,25 ----
             0  pep-0000.txt  Index of Python Enhance Proposals    bwarsaw
             1  pep-0001.txt  PEP Guidelines                       bwarsaw, jhylton
    +        2  pep-0002.txt  Procedure for Adding New Modules     esr
      
           160  pep-0160.txt  Python 1.6 Release Schedule          fdrake
    
    
    
    From python-dev@python.org  Tue Aug  8 03:30:57 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 7 Aug 2000 19:30:57 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.3,1.4
    Message-ID: <200008080230.TAA20587@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv20579
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Informational PEPs can also have a status of Active.
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** pep-0001.txt	2000/08/07 23:00:47	1.3
    --- pep-0001.txt	2000/08/08 02:30:55	1.4
    ***************
    *** 110,114 ****
    --- 110,117 ----
              Deferred
      
    +     Some informational PEPs may also have a status of `Active' if they
    +     are never meant to be completed.  E.g. PEP 1.
      
    + 
      What belongs in a successful PEP?
      
    ***************
    *** 166,170 ****
              Version: 
              Author: 
    !         Status: 
              Type: 
              Created: 
    --- 169,173 ----
              Version: 
              Author: 
    !         Status: 
              Type: 
              Created: 
    
    
    
    From python-dev@python.org  Tue Aug  8 03:31:27 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 7 Aug 2000 19:31:27 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0002.txt,NONE,1.1
    Message-ID: <200008080231.TAA20639@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv20629
    
    Added Files:
    	pep-0002.txt 
    Log Message:
    PEP 2, Procedure for Adding New Modules, assigned to esr.
    
    
    ***** Error reading new file(2, 'No such file or directory')
    
    
    From python-dev@python.org  Tue Aug  8 09:04:32 2000
    From: python-dev@python.org (M.-A. Lemburg)
    Date: Tue, 8 Aug 2000 01:04:32 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.55,2.56
    Message-ID: <200008080804.BAA25769@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25638/Objects
    
    Modified Files:
    	unicodeobject.c 
    Log Message:
    Removing UTF-16 aware Unicode comparison code. This kind of compare
    function (together with other locale aware ones) should into a new collation
    support module. See python-dev for a discussion of this removal.
    
    Note: This patch should also be applied to the 1.6 branch.
    
    Index: unicodeobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
    retrieving revision 2.55
    retrieving revision 2.56
    diff -C2 -r2.55 -r2.56
    *** unicodeobject.c	2000/08/03 18:44:28	2.55
    --- unicodeobject.c	2000/08/08 08:04:29	2.56
    ***************
    *** 3170,3173 ****
    --- 3170,3179 ----
      }
      
    + #if 0
    + 
    + /* This code should go into some future Unicode collation support
    +    module. The basic comparison should compare ordinals on a naive
    +    basis (this is what Java does and thus JPython too).
    + 
      /* speedy UTF-16 code point order comparison */
      /* gleaned from: */
    ***************
    *** 3213,3216 ****
    --- 3219,3249 ----
          return (len1 < len2) ? -1 : (len1 != len2);
      }
    + 
    + #else
    + 
    + static int
    + unicode_compare(PyUnicodeObject *str1, PyUnicodeObject *str2)
    + {
    +     register int len1, len2;
    + 
    +     Py_UNICODE *s1 = str1->str;
    +     Py_UNICODE *s2 = str2->str;
    + 
    +     len1 = str1->length;
    +     len2 = str2->length;
    +     
    +     while (len1 > 0 && len2 > 0) {
    + 	register long diff;
    + 
    +         diff = (long)*s1++ - (long)*s2++;
    +         if (diff)
    +             return (diff < 0) ? -1 : (diff != 0);
    +         len1--; len2--;
    +     }
    + 
    +     return (len1 < len2) ? -1 : (len1 != len2);
    + }
    + 
    + #endif
      
      int PyUnicode_Compare(PyObject *left,
    
    
    
    From python-dev@python.org  Tue Aug  8 09:03:49 2000
    From: python-dev@python.org (M.-A. Lemburg)
    Date: Tue, 8 Aug 2000 01:03:49 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_unicode.py,1.19,1.20
    Message-ID: <200008080803.BAA25293@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25220/Lib/test
    
    Modified Files:
    	test_unicode.py 
    Log Message:
    Removing UTF-16 aware Unicode comparison code. This kind of compare
    function (together with other locale aware ones) should into a new collation
    support module. See python-dev for a discussion of this removal.
    
    Note: This patch should also be applied to the 1.6 branch.
    
    Index: test_unicode.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_unicode.py,v
    retrieving revision 1.19
    retrieving revision 1.20
    diff -C2 -r1.19 -r1.20
    *** test_unicode.py	2000/07/07 17:48:52	1.19
    --- test_unicode.py	2000/08/08 08:03:46	1.20
    ***************
    *** 169,222 ****
      print 'done.'
      
    ! print 'Testing UTF-16 code point order comparisons...',
    ! #No surrogates, no fixup required.
    ! assert u'\u0061' < u'\u20ac'
    ! # Non surrogate below surrogate value, no fixup required
    ! assert u'\u0061' < u'\ud800\udc02'
      
    ! # Non surrogate above surrogate value, fixup required
    ! def test_lecmp(s, s2):
    !   assert s <  s2 , "comparison failed on %s < %s" % (s, s2)
    !   
    ! def test_fixup(s):
    !   s2 = u'\ud800\udc01'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud900\udc01'
    !   test_lecmp(s, s2)
    !   s2 = u'\uda00\udc01'
    !   test_lecmp(s, s2)
    !   s2 = u'\udb00\udc01'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud800\udd01'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud900\udd01'
    !   test_lecmp(s, s2)
    !   s2 = u'\uda00\udd01'
    !   test_lecmp(s, s2)
    !   s2 = u'\udb00\udd01'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud800\ude01'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud900\ude01'
    !   test_lecmp(s, s2)
    !   s2 = u'\uda00\ude01'
    !   test_lecmp(s, s2)
    !   s2 = u'\udb00\ude01'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud800\udfff'
    !   test_lecmp(s, s2)
    !   s2 = u'\ud900\udfff'
    !   test_lecmp(s, s2)
    !   s2 = u'\uda00\udfff'
    !   test_lecmp(s, s2)
    !   s2 = u'\udb00\udfff'
    !   test_lecmp(s, s2)
      
    ! test_fixup(u'\ue000')
    ! test_fixup(u'\uff61')
      
    ! # Surrogates on both sides, no fixup required
    ! assert u'\ud800\udc02' < u'\ud84d\udc56'
    ! print 'done.'
      
      test('ljust', u'abc',  u'abc       ', 10)
    --- 169,225 ----
      print 'done.'
      
    ! if 0:
    !     # Move these tests to a Unicode collation module test...
      
    !     print 'Testing UTF-16 code point order comparisons...',
    !     #No surrogates, no fixup required.
    !     assert u'\u0061' < u'\u20ac'
    !     # Non surrogate below surrogate value, no fixup required
    !     assert u'\u0061' < u'\ud800\udc02'
      
    !     # Non surrogate above surrogate value, fixup required
    !     def test_lecmp(s, s2):
    !       assert s <  s2 , "comparison failed on %s < %s" % (s, s2)
      
    !     def test_fixup(s):
    !       s2 = u'\ud800\udc01'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud900\udc01'
    !       test_lecmp(s, s2)
    !       s2 = u'\uda00\udc01'
    !       test_lecmp(s, s2)
    !       s2 = u'\udb00\udc01'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud800\udd01'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud900\udd01'
    !       test_lecmp(s, s2)
    !       s2 = u'\uda00\udd01'
    !       test_lecmp(s, s2)
    !       s2 = u'\udb00\udd01'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud800\ude01'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud900\ude01'
    !       test_lecmp(s, s2)
    !       s2 = u'\uda00\ude01'
    !       test_lecmp(s, s2)
    !       s2 = u'\udb00\ude01'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud800\udfff'
    !       test_lecmp(s, s2)
    !       s2 = u'\ud900\udfff'
    !       test_lecmp(s, s2)
    !       s2 = u'\uda00\udfff'
    !       test_lecmp(s, s2)
    !       s2 = u'\udb00\udfff'
    !       test_lecmp(s, s2)
    ! 
    !     test_fixup(u'\ue000')
    !     test_fixup(u'\uff61')
    ! 
    !     # Surrogates on both sides, no fixup required
    !     assert u'\ud800\udc02' < u'\ud84d\udc56'
    !     print 'done.'
      
      test('ljust', u'abc',  u'abc       ', 10)
    
    
    
    From python-dev@python.org  Tue Aug  8 09:04:06 2000
    From: python-dev@python.org (M.-A. Lemburg)
    Date: Tue, 8 Aug 2000 01:04:06 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_unicode,1.9,1.10
    Message-ID: <200008080804.BAA25503@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test/output
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25447/Lib/test/output
    
    Modified Files:
    	test_unicode 
    Log Message:
    Removing UTF-16 aware Unicode comparison code. This kind of compare
    function (together with other locale aware ones) should into a new collation
    support module. See python-dev for a discussion of this removal.
    
    Note: This patch should also be applied to the 1.6 branch.
    
    Index: test_unicode
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_unicode,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** test_unicode	2000/07/10 15:06:06	1.9
    --- test_unicode	2000/08/08 08:04:03	1.10
    ***************
    *** 1,5 ****
      test_unicode
      Testing Unicode comparisons... done.
    - Testing UTF-16 code point order comparisons... done.
      Testing Unicode contains method... done.
      Testing Unicode formatting strings... done.
    --- 1,4 ----
    
    
    
    From python-dev@python.org  Tue Aug  8 15:38:17 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 8 Aug 2000 07:38:17 -0700
    Subject: [Python-checkins] CVS: distutils/distutils util.py,1.42,1.43
    Message-ID: <200008081438.HAA08098@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv8087
    
    Modified Files:
    	util.py 
    Log Message:
    Fix so 'split_quoted()' handles any whitespace delimiter (not just space).
    
    Index: util.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/util.py,v
    retrieving revision 1.42
    retrieving revision 1.43
    diff -C2 -r1.42 -r1.43
    *** util.py	2000/08/05 01:25:24	1.42
    --- util.py	2000/08/08 14:38:13	1.43
    ***************
    *** 140,144 ****
      
      # Needed by 'split_quoted()'
    ! _wordchars_re = re.compile(r'[^\\\'\"\ ]*')
      _squote_re = re.compile(r"'(?:[^'\\]|\\.)*'")
      _dquote_re = re.compile(r'"(?:[^"\\]|\\.)*"')
    --- 140,144 ----
      
      # Needed by 'split_quoted()'
    ! _wordchars_re = re.compile(r'[^\\\'\"%s ]*' % string.whitespace)
      _squote_re = re.compile(r"'(?:[^'\\]|\\.)*'")
      _dquote_re = re.compile(r'"(?:[^"\\]|\\.)*"')
    ***************
    *** 170,174 ****
                  break
      
    !         if s[end] == ' ':               # unescaped, unquoted space: now
                  words.append(s[:end])       # we definitely have a word delimiter
                  s = string.lstrip(s[end:])
    --- 170,174 ----
                  break
      
    !         if s[end] in string.whitespace: # unescaped, unquoted whitespace: now
                  words.append(s[:end])       # we definitely have a word delimiter
                  s = string.lstrip(s[end:])
    
    
    
    From python-dev@python.org  Tue Aug  8 17:12:56 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Tue, 8 Aug 2000 09:12:56 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib UserDict.py,1.7,1.8
    Message-ID: <200008081612.JAA03860@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3808
    
    Modified Files:
    	UserDict.py 
    Log Message:
    Barry's patch to implement the new setdefault() method.
    
    
    Index: UserDict.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/UserDict.py,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** UserDict.py	2000/02/02 15:10:14	1.7
    --- UserDict.py	2000/08/08 16:12:54	1.8
    ***************
    *** 35,36 ****
    --- 35,40 ----
          def get(self, key, failobj=None):
              return self.data.get(key, failobj)
    +     def setdefault(self, key, failobj=None):
    +         if not self.data.has_key(key):
    +             self.data[key] = failobj
    +         return self.data[key]
    
    
    
    From python-dev@python.org  Tue Aug  8 17:13:25 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Tue, 8 Aug 2000 09:13:25 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_types.py,1.13,1.14
    Message-ID: <200008081613.JAA04937@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv4816
    
    Modified Files:
    	test_types.py 
    Log Message:
    Barry's patch to test the new setdefault() method.
    
    
    Index: test_types.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_types.py,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** test_types.py	2000/02/23 22:23:17	1.13
    --- test_types.py	2000/08/08 16:13:23	1.14
    ***************
    *** 254,255 ****
    --- 254,267 ----
      if d.get('a') != 1: raise TestFailed, 'present dict get, no 2nd arg'
      if d.get('a', 3) != 1: raise TestFailed, 'present dict get, w/ 2nd arg'
    + # dict.setdefault()
    + d = {}
    + if d.setdefault('key0') <> None:
    + 	raise TestFailed, 'missing {} setdefault, no 2nd arg'
    + if d.setdefault('key0') <> None:
    + 	raise TestFailed, 'present {} setdefault, no 2nd arg'
    + d.setdefault('key', []).append(3)
    + if d['key'][0] <> 3:
    + 	raise TestFailed, 'missing {} setdefault, w/ 2nd arg'
    + d.setdefault('key', []).append(4)
    + if len(d['key']) <> 2:
    + 	raise TestFailed, 'present {} setdefault, w/ 2nd arg'
    
    
    
    From python-dev@python.org  Tue Aug  8 17:11:34 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Tue, 8 Aug 2000 09:11:34 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.61,2.62
    Message-ID: <200008081611.JAA01736@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1665
    
    Modified Files:
    	dictobject.c 
    Log Message:
    Barry's patch to implement the new setdefault() method.
    
    
    Index: dictobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v
    retrieving revision 2.61
    retrieving revision 2.62
    diff -C2 -r2.61 -r2.62
    *** dictobject.c	2000/07/22 19:25:51	2.61
    --- dictobject.c	2000/08/08 16:11:31	2.62
    ***************
    *** 951,954 ****
    --- 951,989 ----
      
      static PyObject *
    + dict_setdefault(register dictobject *mp, PyObject *args)
    + {
    + 	PyObject *key;
    + 	PyObject *failobj = Py_None;
    + 	PyObject *val = NULL;
    + 	long hash;
    + 
    + 	if (!PyArg_ParseTuple(args, "O|O:setdefault", &key, &failobj))
    + 		return NULL;
    + 	if (mp->ma_table == NULL)
    + 		goto finally;
    + 
    + #ifdef CACHE_HASH
    + 	if (!PyString_Check(key) ||
    + 	    (hash = ((PyStringObject *) key)->ob_shash) == -1)
    + #endif
    + 	{
    + 		hash = PyObject_Hash(key);
    + 		if (hash == -1)
    + 			return NULL;
    + 	}
    + 	val = lookdict(mp, key, hash)->me_value;
    + 
    +   finally:
    + 	if (val == NULL) {
    + 		val = failobj;
    + 		if (PyDict_SetItem((PyObject*)mp, key, failobj))
    + 			val = NULL;
    + 	}
    + 	Py_XINCREF(val);
    + 	return val;
    + }
    + 
    + 
    + static PyObject *
      dict_clear(register dictobject *mp, PyObject *args)
      {
    ***************
    *** 994,997 ****
    --- 1029,1033 ----
      	{"copy",	(PyCFunction)dict_copy},
      	{"get",         (PyCFunction)dict_get,          METH_VARARGS},
    + 	{"setdefault",  (PyCFunction)dict_setdefault,   METH_VARARGS},
      	{NULL,		NULL}		/* sentinel */
      };
    
    
    
    From python-dev@python.org  Tue Aug  8 17:15:51 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Tue, 8 Aug 2000 09:15:51 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.27,1.28
    Message-ID: <200008081615.JAA10277@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10218
    
    Modified Files:
    	libstdtypes.tex 
    Log Message:
    Barry's patch to document the new setdefault() method.  Slightly
    clarified the summary for default() in the table to indicate the side
    effect.
    
    
    Index: libstdtypes.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v
    retrieving revision 1.27
    retrieving revision 1.28
    diff -C2 -r1.27 -r1.28
    *** libstdtypes.tex	2000/08/01 00:07:17	1.27
    --- libstdtypes.tex	2000/08/08 16:15:49	1.28
    ***************
    *** 592,595 ****
    --- 592,599 ----
                 else \var{x}}
                {(4)}
    +   \lineiii{\var{a}.setdefault(\var{k}\optional{, \var{x}})}
    +           {\code{\var{a}[\var{k}]} if \code{\var{a}.has_key(\var{k})},
    +            else \var{x} (also setting it)}
    +           {(5)}
      \end{tableiii}
      
    ***************
    *** 612,615 ****
    --- 616,623 ----
      instead it returns \var{x}.  \var{x} is optional; when \var{x} is not
      provided and \var{k} is not in the map, \code{None} is returned.
    + 
    + \item[(5)] \function{setdefault()} is like \function{get()}, except
    + that if \var{k} is missing, \var{x} is both returned and inserted into
    + the dictionary as the value of \var{k}.
      \end{description}
      
    
    
    
    From python-dev@python.org  Tue Aug  8 17:47:44 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Tue, 8 Aug 2000 09:47:44 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.22,1.23
    Message-ID: <200008081647.JAA11560@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9622/lib/test
    
    Modified Files:
    	test_re.py 
    Log Message:
    
    
    -- whitespace cleanup (more tests to be added in the next commit)
    
    Index: test_re.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v
    retrieving revision 1.22
    retrieving revision 1.23
    diff -C2 -r1.22 -r1.23
    *** test_re.py	2000/08/03 12:16:29	1.22
    --- test_re.py	2000/08/08 16:47:42	1.23
    ***************
    *** 38,42 ****
      try:
          assert re.sub("(?i)b+", "x", "bbbb BBBB") == 'x x'
    !     
          def bump_num(matchobj):
              int_value = int(matchobj.group(0))
    --- 38,42 ----
      try:
          assert re.sub("(?i)b+", "x", "bbbb BBBB") == 'x x'
    ! 
          def bump_num(matchobj):
              int_value = int(matchobj.group(0))
    ***************
    *** 45,49 ****
          assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y') == '9.3 -3 24x100y'
          assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y', 3) == '9.3 -3 23x99y'
    !     
          assert re.sub('.', lambda m: r"\n", 'x') == '\\n'
          assert re.sub('.', r"\n", 'x') == '\n'
    --- 45,49 ----
          assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y') == '9.3 -3 24x100y'
          assert re.sub(r'\d+', bump_num, '08.2 -2 23x99y', 3) == '9.3 -3 23x99y'
    ! 
          assert re.sub('.', lambda m: r"\n", 'x') == '\\n'
          assert re.sub('.', r"\n", 'x') == '\n'
    ***************
    *** 51,55 ****
          s = r"\1\1"
          assert re.sub('(.)', s, 'x') == 'xx'
    !     assert re.sub('(.)', re.escape(s), 'x') == s 
          assert re.sub('(.)', lambda m: s, 'x') == s
      
    --- 51,55 ----
          s = r"\1\1"
          assert re.sub('(.)', s, 'x') == 'xx'
    !     assert re.sub('(.)', re.escape(s), 'x') == s
          assert re.sub('(.)', lambda m: s, 'x') == s
      
    ***************
    *** 147,151 ****
      if verbose:
          print 'Running tests on re.split'
    !     
      try:
          assert re.split(":", ":a:b::c") == ['', 'a', 'b', '', 'c']
    --- 147,151 ----
      if verbose:
          print 'Running tests on re.split'
    ! 
      try:
          assert re.split(":", ":a:b::c") == ['', 'a', 'b', '', 'c']
    ***************
    *** 166,170 ****
      
          assert re.split("(:)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']
    !     assert re.split("(:*)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']    
      except AssertionError:
          raise TestFailed, "qualified re.split"
    --- 166,170 ----
      
          assert re.split("(:)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']
    !     assert re.split("(:*)", ":a:b::c", 2) == ['', ':', 'a', ':', 'b::c']
      except AssertionError:
          raise TestFailed, "qualified re.split"
    ***************
    *** 188,201 ****
      try:
          # No groups at all
    !     m = re.match('a', 'a') ; assert m.groups() == ()    
          # A single group
    !     m = re.match('(a)', 'a') ; assert m.groups() == ('a',)      
      
          pat = re.compile('((a)|(b))(c)?')
    !     assert pat.match('a').groups() == ('a', 'a', None, None)    
    !     assert pat.match('b').groups() == ('b', None, 'b', None)    
    !     assert pat.match('ac').groups() == ('a', 'a', None, 'c')    
    !     assert pat.match('bc').groups() == ('b', None, 'b', 'c')    
    !     assert pat.match('bc').groups("") == ('b', "", 'b', 'c')    
      except AssertionError:
          raise TestFailed, "match .groups() method"
    --- 188,201 ----
      try:
          # No groups at all
    !     m = re.match('a', 'a') ; assert m.groups() == ()
          # A single group
    !     m = re.match('(a)', 'a') ; assert m.groups() == ('a',)
      
          pat = re.compile('((a)|(b))(c)?')
    !     assert pat.match('a').groups() == ('a', 'a', None, None)
    !     assert pat.match('b').groups() == ('b', None, 'b', None)
    !     assert pat.match('ac').groups() == ('a', 'a', None, 'c')
    !     assert pat.match('bc').groups() == ('b', None, 'b', 'c')
    !     assert pat.match('bc').groups("") == ('b', "", 'b', 'c')
      except AssertionError:
          raise TestFailed, "match .groups() method"
    ***************
    *** 203,214 ****
      try:
          # A single group
    !     m = re.match('(a)', 'a') 
    !     assert m.group(0) == 'a' ; assert m.group(0) == 'a' 
          assert m.group(1) == 'a' ; assert m.group(1, 1) == ('a', 'a')
      
          pat = re.compile('(?:(?Pa)|(?Pb))(?Pc)?')
    !     assert pat.match('a').group(1, 2, 3) == ('a', None, None)   
    !     assert pat.match('b').group('a1', 'b2', 'c3') == (None, 'b', None)  
    !     assert pat.match('ac').group(1, 'b2', 3) == ('a', None, 'c')        
      except AssertionError:
          raise TestFailed, "match .group() method"
    --- 203,214 ----
      try:
          # A single group
    !     m = re.match('(a)', 'a')
    !     assert m.group(0) == 'a' ; assert m.group(0) == 'a'
          assert m.group(1) == 'a' ; assert m.group(1, 1) == ('a', 'a')
      
          pat = re.compile('(?:(?Pa)|(?Pb))(?Pc)?')
    !     assert pat.match('a').group(1, 2, 3) == ('a', None, None)
    !     assert pat.match('b').group('a1', 'b2', 'c3') == (None, 'b', None)
    !     assert pat.match('ac').group(1, 'b2', 3) == ('a', None, 'c')
      except AssertionError:
          raise TestFailed, "match .group() method"
    ***************
    *** 243,248 ****
          assert re.L == re.LOCALE
          assert re.M == re.MULTILINE
    !     assert re.S == re.DOTALL 
    !     assert re.X == re.VERBOSE 
      except AssertionError:
          raise TestFailed, 're module constants'
    --- 243,248 ----
          assert re.L == re.LOCALE
          assert re.M == re.MULTILINE
    !     assert re.S == re.DOTALL
    !     assert re.X == re.VERBOSE
      except AssertionError:
          raise TestFailed, 're module constants'
    ***************
    *** 261,265 ****
          # To save time, only run the first and last 10 tests
          #tests = tests[:10] + tests[-10:]
    !     pass 
      
      for t in tests:
    --- 261,265 ----
          # To save time, only run the first and last 10 tests
          #tests = tests[:10] + tests[-10:]
    !     pass
      
      for t in tests:
    ***************
    *** 269,273 ****
              pattern, s, outcome, repl, expected = t
          elif len(t)==3:
    !         pattern, s, outcome = t 
          else:
              raise ValueError, ('Test tuples should have 3 or 5 fields',t)
    --- 269,273 ----
              pattern, s, outcome, repl, expected = t
          elif len(t)==3:
    !         pattern, s, outcome = t
          else:
              raise ValueError, ('Test tuples should have 3 or 5 fields',t)
    ***************
    *** 277,281 ****
          except re.error:
              if outcome==SYNTAX_ERROR: pass  # Expected a syntax error
    !         else: 
                  print '=== Syntax error:', t
          except KeyboardInterrupt: raise KeyboardInterrupt
    --- 277,281 ----
          except re.error:
              if outcome==SYNTAX_ERROR: pass  # Expected a syntax error
    !         else:
                  print '=== Syntax error:', t
          except KeyboardInterrupt: raise KeyboardInterrupt
    ***************
    *** 331,335 ****
                  # break (because it won't match at the end or start of a
                  # string), so we'll ignore patterns that feature it.
    !             
                  if pattern[:2]!='\\B' and pattern[-2:]!='\\B' and result!=None:
                      obj=re.compile(pattern)
    --- 331,335 ----
                  # break (because it won't match at the end or start of a
                  # string), so we'll ignore patterns that feature it.
    ! 
                  if pattern[:2]!='\\B' and pattern[-2:]!='\\B' and result!=None:
                      obj=re.compile(pattern)
    
    
    
    From python-dev@python.org  Tue Aug  8 17:52:54 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Tue, 8 Aug 2000 09:52:54 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test re_tests.py,1.13,1.14
    Message-ID: <200008081652.JAA16644@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv16059/lib/test
    
    Modified Files:
    	re_tests.py 
    Log Message:
    
    
    -- whitespace cleanup (real changes coming in next checkin)
    
    Index: re_tests.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/re_tests.py,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** re_tests.py	1998/04/03 21:47:12	1.13
    --- re_tests.py	2000/08/08 16:52:51	1.14
    ***************
    *** 11,29 ****
      #
      # The benchmark suite does not test correctness, just speed.  The
    ! # first element of each tuple is the regex pattern; the second is a 
      # string to match it against.  The benchmarking code will embed the
    ! # second string inside several sizes of padding, to test how regex 
      # matching performs on large strings.
      
      benchmarks = [
    !     ('Python', 'Python'),		# Simple text literal
    !     ('.*Python', 'Python'),		# Bad text literal
    !     ('.*Python.*', 'Python'),		# Worse text literal
    !     ('.*(Python)', 'Python'),		# Bad text literal with grouping
    !     
    !     ('(Python|Perl|Tcl', 'Perl'),	# Alternation
    !     ('(Python|Perl|Tcl)', 'Perl'),	# Grouped alternation
    !     ('(Python)\\1', 'PythonPython'),	# Backreference
    !     ('([0a-z][a-z]*,)+', 'a5,b7,c9,'),	# Disable the fastmap optimization
          ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets
      ]
    --- 11,29 ----
      #
      # The benchmark suite does not test correctness, just speed.  The
    ! # first element of each tuple is the regex pattern; the second is a
      # string to match it against.  The benchmarking code will embed the
    ! # second string inside several sizes of padding, to test how regex
      # matching performs on large strings.
      
      benchmarks = [
    !     ('Python', 'Python'),               # Simple text literal
    !     ('.*Python', 'Python'),             # Bad text literal
    !     ('.*Python.*', 'Python'),           # Worse text literal
    !     ('.*(Python)', 'Python'),           # Bad text literal with grouping
    ! 
    !     ('(Python|Perl|Tcl', 'Perl'),       # Alternation
    !     ('(Python|Perl|Tcl)', 'Perl'),      # Grouped alternation
    !     ('(Python)\\1', 'PythonPython'),    # Backreference
    !     ('([0a-z][a-z]*,)+', 'a5,b7,c9,'),  # Disable the fastmap optimization
          ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets
      ]
    ***************
    *** 48,52 ****
      # If the regex isn't expected to work, the latter two elements can be omitted.
      
    ! tests = [ 
          # Test ?P< and ?P= extensions
          ('(?P
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv29632/lib/test
    
    Modified Files:
    	test_re.py re_tests.py 
    Log Message:
    
    
    -- enabled some temporarily disabled RE tests
    -- added basic unicode tests to test_re
    -- added test case for Sjoerd's xmllib problem to re_tests
    
    Index: test_re.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v
    retrieving revision 1.23
    retrieving revision 1.24
    diff -C2 -r1.23 -r1.24
    *** test_re.py	2000/08/08 16:47:42	1.23
    --- test_re.py	2000/08/08 17:06:52	1.24
    ***************
    *** 29,36 ****
          raise TestFailed, "re.search"
      
    - # Try nasty case that overflows the straightforward recursive
    - # implementation of repeated groups.
    - #assert re.match('(x)*', 50000*'x').span() == (0, 50000)
    - 
      if verbose:
          print 'Running tests on re.sub'
    --- 29,32 ----
    ***************
    *** 155,160 ****
          assert re.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c']
          assert re.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c']
    ! ##    assert re.split("(b)|(:+)", ":a:b::c") == \
    ! ##           ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c']
          assert re.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c']
      except AssertionError:
    --- 151,156 ----
          assert re.split("(:)*", ":a:b::c") == ['', ':', 'a', ':', 'b', ':', 'c']
          assert re.split("([b:]+)", ":a:b::c") == ['', ':', 'a', ':b::', 'c']
    !     assert re.split("(b)|(:+)", ":a:b::c") == \
    !            ['', None, ':', 'a', None, ':', '', 'b', None, '', None, '::', 'c']
          assert re.split("(?:b)|(?::+)", ":a:b::c") == ['', 'a', '', '', 'c']
      except AssertionError:
    ***************
    *** 254,257 ****
    --- 250,263 ----
              print 'Exception raised on flag', flags
      
    + if verbose:
    +     print 'Test engine limitations'
    + 
    + # Try nasty case that overflows the straightforward recursive
    + # implementation of repeated groups.
    + try:
    +     assert re.match('(x)*', 50000*'x').span() == (0, 50000)
    + except RuntimeError, v:
    +     print v
    + 
      from re_tests import *
      
    ***************
    *** 327,330 ****
    --- 333,349 ----
                      print '=== Failed incorrectly', t
      
    +             # Try the match on a unicode string, and check that it
    +             # still succeeds.
    +             result=obj.search(unicode(s, "latin-1"))
    +             if result==None:
    +                 print '=== Fails on unicode match', t
    + 
    +             # Try the match on a unicode pattern, and check that it
    +             # still succeeds.
    +             obj=re.compile(unicode(pattern, "latin-1"))
    +             result=obj.search(s)
    +             if result==None:
    +                 print '=== Fails on unicode pattern match', t
    + 
                  # Try the match with the search area limited to the extent
                  # of the match and see if it still succeeds.  \B will
    ***************
    *** 351,352 ****
    --- 370,378 ----
                  if result==None:
                      print '=== Fails on locale-sensitive match', t
    + 
    +             # Try the match with UNICODE locale enabled, and check
    +             # that it still succeeds.
    +             obj=re.compile(pattern, re.UNICODE)
    +             result=obj.search(s)
    +             if result==None:
    +                 print '=== Fails on unicode-sensitive match', t
    
    Index: re_tests.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/re_tests.py,v
    retrieving revision 1.14
    retrieving revision 1.15
    diff -C2 -r1.14 -r1.15
    *** re_tests.py	2000/08/08 16:52:51	1.14
    --- re_tests.py	2000/08/08 17:06:52	1.15
    ***************
    *** 588,590 ****
    --- 588,596 ----
          (r'\t\n\v\r\f\a', '\t\n\v\r\f\a', SUCCEED, 'found', chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)),
          (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'),
    + 
    +     # additional regression tests (1.6 and later)
    + 
    +     # xmllib problem
    +     (r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'),
    + 
      ]
    
    
    
    From python-dev@python.org  Tue Aug  8 18:06:56 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Tue, 8 Aug 2000 10:06:56 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_re,1.12,1.13
    Message-ID: <200008081706.KAA01000@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test/output
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv29632/lib/test/output
    
    Modified Files:
    	test_re 
    Log Message:
    
    
    -- enabled some temporarily disabled RE tests
    -- added basic unicode tests to test_re
    -- added test case for Sjoerd's xmllib problem to re_tests
    
    Index: test_re
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_re,v
    retrieving revision 1.12
    retrieving revision 1.13
    diff -C2 -r1.12 -r1.13
    *** test_re	2000/08/01 13:01:43	1.12
    --- test_re	2000/08/08 17:06:53	1.13
    ***************
    *** 1 ****
    --- 1,2 ----
      test_re
    + maximum recursion limit exceeded
    
    
    
    From python-dev@python.org  Wed Aug  9 10:14:38 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 02:14:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_sre.py,1.6,1.7
    Message-ID: <200008090914.CAA32078@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31772/Lib/test
    
    Modified Files:
    	test_sre.py 
    Log Message:
    
    
    -- changed findall to return empty strings instead of None
       for undefined groups
    
    Index: test_sre.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_sre.py,v
    retrieving revision 1.6
    retrieving revision 1.7
    diff -C2 -r1.6 -r1.7
    *** test_sre.py	2000/08/03 16:29:50	1.6
    --- test_sre.py	2000/08/09 09:14:35	1.7
    ***************
    *** 178,181 ****
    --- 178,182 ----
                                                         (":", ":"),
                                                         (":", "::")]
    +     assert sre.findall("(a)|(b)", "abc") == [("a", ""), ("", "b")]
      except AssertionError:
          raise TestFailed, "sre.findall"
    
    
    
    From python-dev@python.org  Wed Aug  9 10:14:37 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 02:14:37 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.35,2.36
    Message-ID: <200008090914.CAA32072@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31772/Modules
    
    Modified Files:
    	_sre.c 
    Log Message:
    
    
    -- changed findall to return empty strings instead of None
       for undefined groups
    
    Index: _sre.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
    retrieving revision 2.35
    retrieving revision 2.36
    diff -C2 -r2.35 -r2.36
    *** _sre.c	2000/08/07 21:02:50	2.35
    --- _sre.c	2000/08/09 09:14:34	2.36
    ***************
    *** 16,19 ****
    --- 16,20 ----
       * 00-08-03 fl  added recursion limit
       * 00-08-07 fl  use PyOS_CheckStack() if available
    +  * 00-08-08 fl  changed findall to return empty strings instead of None
       *
       * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
    ***************
    *** 569,575 ****
      
      #if defined(USE_STACKCHECK)
    !     if (level % 10 == 0 && PyOS_CheckStack()) {
              return SRE_ERROR_RECURSION_LIMIT;
    -     }
      #endif
      
    --- 570,575 ----
      
      #if defined(USE_STACKCHECK)
    !     if (level % 10 == 0 && PyOS_CheckStack())
              return SRE_ERROR_RECURSION_LIMIT;
      #endif
      
    ***************
    *** 1353,1370 ****
      state_getslice(SRE_STATE* state, int index, PyObject* string)
      {
          index = (index - 1) * 2;
      
          if (string == Py_None || !state->mark[index] || !state->mark[index+1]) {
    !         Py_INCREF(Py_None);
    !         return Py_None;
          }
      
    !     return PySequence_GetSlice(
    !         string,
    !         ((char*)state->mark[index] - (char*)state->beginning) /
    !         state->charsize,
    !         ((char*)state->mark[index+1] - (char*)state->beginning) /
    !         state->charsize
    !         );
      }
      
    --- 1353,1370 ----
      state_getslice(SRE_STATE* state, int index, PyObject* string)
      {
    +     int i, j;
    + 
          index = (index - 1) * 2;
      
          if (string == Py_None || !state->mark[index] || !state->mark[index+1]) {
    !         i = j = 0;
    !     } else {
    !         i = ((char*)state->mark[index] - (char*)state->beginning) /
    !             state->charsize;
    !         j = ((char*)state->mark[index+1] - (char*)state->beginning) /
    !             state->charsize;
          }
      
    !     return PySequence_GetSlice(string, i, j);
      }
      
    
    
    
    From python-dev@python.org  Wed Aug  9 14:45:08 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 9 Aug 2000 06:45:08 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.78,1.79
    Message-ID: <200008091345.GAA15585@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/perl
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15570/perl
    
    Modified Files:
    	python.perl 
    Log Message:
    
    fix_font():  Handle one more case for the magical first column of tables.
    
    
    Index: python.perl
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v
    retrieving revision 1.78
    retrieving revision 1.79
    diff -C2 -r1.78 -r1.79
    *** python.perl	2000/08/03 17:25:44	1.78
    --- python.perl	2000/08/09 13:45:04	1.79
    ***************
    *** 951,954 ****
    --- 951,957 ----
              $font = 'tt class="constant"';
          }
    +     elsif ($font eq 'kbd') {
    +         $font = 'kbd';
    +     }
          return $font;
      }
    
    
    
    From python-dev@python.org  Wed Aug  9 15:34:51 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 9 Aug 2000 07:34:51 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.13,1.14
    Message-ID: <200008091434.HAA26781@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26751/lib
    
    Modified Files:
    	libcurses.tex 
    Log Message:
    
    Fix a few markup errors and lots of small consistency issues.
    
    Add "See also" link to curses.wrapper module from curses module.
    
    
    Index: libcurses.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** libcurses.tex	2000/08/04 07:35:41	1.13
    --- libcurses.tex	2000/08/09 14:34:48	1.14
    ***************
    *** 23,27 ****
                                 settings.}
        \seemodule{curses.textpad}{Editable text widget for curses supporting 
    ! 			     Emacs-like bindings.}
        \seetext{Tutorial material on using curses with Python is available
                 on the Python Web site as Andrew Kuchling's
    --- 23,30 ----
                                 settings.}
        \seemodule{curses.textpad}{Editable text widget for curses supporting 
    ! 			     \program{Emacs}-like bindings.}
    !   \seemodule{curses.wrapper}{Convenience function to ensure proper
    !                              terminal setup and resetting on
    !                              application entry and exit.}
        \seetext{Tutorial material on using curses with Python is available
                 on the Python Web site as Andrew Kuchling's
    ***************
    *** 35,40 ****
      
      The module \module{curses} defines the following exception:
      \begin{excdesc}{error}
    ! Curses function returned an error status.
      \end{excdesc}
      
    --- 38,44 ----
      
      The module \module{curses} defines the following exception:
    + 
      \begin{excdesc}{error}
    ! Exception raised when a curses library function returns an error.
      \end{excdesc}
      
    ***************
    *** 968,973 ****
      \end{datadesc}
      
      
    ! \begin{tableii}{c|l}{code}{Attribute}{Meaning}
        \lineii{A_ALTCHARSET}{Alternate character set mode.}
        \lineii{A_BLINK}{Blink mode.}
    --- 972,978 ----
      \end{datadesc}
      
    + Several constants are available to specify character cell attributes:
      
    ! \begin{tableii}{l|l}{code}{Attribute}{Meaning}
        \lineii{A_ALTCHARSET}{Alternate character set mode.}
        \lineii{A_BLINK}{Blink mode.}
    ***************
    *** 980,989 ****
      
      Keys are referred to by integer constants with names starting with 
    ! \code{KEY_}.   The exact keycaps available are system dependent.
      
      % XXX this table is far too large!
      % XXX should this table be alphabetized?
      
    ! \begin{tableii}{c|l}{code}{Key constant}{Key}
        \lineii{KEY_MIN}{Minimum key value}
        \lineii{KEY_BREAK}{ Break key (unreliable) }
    --- 985,994 ----
      
      Keys are referred to by integer constants with names starting with 
    ! \samp{KEY_}.   The exact keycaps available are system dependent.
      
      % XXX this table is far too large!
      % XXX should this table be alphabetized?
      
    ! \begin{tableii}{l|l}{code}{Key constant}{Key}
        \lineii{KEY_MIN}{Minimum key value}
        \lineii{KEY_BREAK}{ Break key (unreliable) }
    ***************
    *** 1082,1093 ****
      \end{tableii}
      
    ! On VT100s and their software emulations such as X terminal emulators,
    ! there are normally at least four function keys (KEY_F1, KEY_F2,
    ! KEY_F3, KEY_F4) available and the arrow keys mapped to KEY_UP,
    ! KEY_DOWN, KEY_LEFT and KEY_RIGHT in the obvious way. If your machine has a PC
    ! keybboard, it is safe to expect arrow keys and twelve function keys; also,
    ! the following keypad mappings are standard:
      
    ! \begin{tableii}{c|l}{code}{Keycap}{code}
         \lineii{Insert}{KEY_IC}
         \lineii{Delete}{KEY_DC}
    --- 1087,1100 ----
      \end{tableii}
      
    ! On VT100s and their software emulations, such as X terminal emulators,
    ! there are normally at least four function keys (\constant{KEY_F1},
    ! \constant{KEY_F2}, \constant{KEY_F3}, \constant{KEY_F4}) available,
    ! and the arrow keys mapped to \constant{KEY_UP}, \constant{KEY_DOWN},
    ! \constant{KEY_LEFT} and \constant{KEY_RIGHT} in the obvious way.  If
    ! your machine has a PC keybboard, it is safe to expect arrow keys and
    ! twelve function keys (older PC keyboards may have only ten function
    ! keys); also, the following keypad mappings are standard:
      
    ! \begin{tableii}{l|l}{kbd}{Keycap}{Constant}
         \lineii{Insert}{KEY_IC}
         \lineii{Delete}{KEY_DC}
    ***************
    *** 1106,1110 ****
      been called.
      
    ! \begin{tableii}{c|l}{code}{ACS code}{Meaning}
        \lineii{ACS_BBSS}{alternate name for upper right corner}
        \lineii{ACS_BLOCK}{solid square block}
    --- 1113,1117 ----
      been called.
      
    ! \begin{tableii}{l|l}{code}{ACS code}{Meaning}
        \lineii{ACS_BBSS}{alternate name for upper right corner}
        \lineii{ACS_BLOCK}{solid square block}
    ***************
    *** 1154,1158 ****
      The following table lists the predefined colors:
      
    ! \begin{tableii}{c|l}{code}{Constant}{Color}
        \lineii{COLOR_BLACK}{Black}
        \lineii{COLOR_BLUE}{Blue}
    --- 1161,1165 ----
      The following table lists the predefined colors:
      
    ! \begin{tableii}{l|l}{code}{Constant}{Color}
        \lineii{COLOR_BLACK}{Black}
        \lineii{COLOR_BLUE}{Blue}
    ***************
    *** 1180,1187 ****
      module also provides a rectangle-drawing function useful for framing
      text boxes or for other purposes.
    - 
    - \subsection{Functions \label{curses-textpad-functions}}
      
    ! The module \module{curses.textpad} defines the following functions:
      
      \begin{funcdesc}{rectangle}{win, uly, ulx, lry, lrx}
    --- 1187,1192 ----
      module also provides a rectangle-drawing function useful for framing
      text boxes or for other purposes.
      
    ! The module \module{curses.textpad} defines the following function:
      
      \begin{funcdesc}{rectangle}{win, uly, ulx, lry, lrx}
    ***************
    *** 1197,1221 ****
      \end{funcdesc}
      
      \subsection{Textbox objects \label{curses-textpad-objects}}
      
      You can instantiate a \class{Textbox} object as follows:
      
    ! \classdesc{Textbox}{win}
    ! Return a textbox widget object.  The win argument should be a curses
    ! \class{WindowObject} in which the textbox is to be contained.  The
    ! edit cursor of the textbox is initially located at the upper left
    ! hand corner of the containin window, with coordinates (0,0). The
    ! instance's \member{stripspaces} flag is initially on.
      \end{classdesc}
      
    ! Textbox objects, have the following methods:
      
    ! \begin{methoddesc}{edit}{validator=None}
      This is the entry point you will normally use.  It accepts editing
    ! keystrokes until one of the termination keystrokes is entered.  If a
    ! validator function is specified, each entered keystroke is passed to
    ! it; command dispatch is done on the result. This method returns the
    ! window contents as a string; whether blanks in the window are included
    ! is affected by the \member{stripspaces} member.
      \end{methoddesc}
      
    --- 1202,1228 ----
      \end{funcdesc}
      
    + 
      \subsection{Textbox objects \label{curses-textpad-objects}}
      
      You can instantiate a \class{Textbox} object as follows:
      
    ! \begin{classdesc}{Textbox}{win}
    ! Return a textbox widget object.  The \var{win} argument should be a
    ! curses \class{WindowObject} in which the textbox is to be contained.
    ! The edit cursor of the textbox is initially located at the upper left
    ! hand corner of the containin window, with coordinates \code{(0, 0)}.
    ! The instance's \member{stripspaces} flag is initially on.
      \end{classdesc}
      
    ! \class{Textbox} objects have the following methods:
      
    ! \begin{methoddesc}{edit}{\optional{validator}}
      This is the entry point you will normally use.  It accepts editing
    ! keystrokes until one of the termination keystrokes is entered.  If
    ! \var{validator} is supplied, it must be a function.  It will be called
    ! for each keystroke entered with the keystroke as a parameter; command
    ! dispatch is done on the result. This method returns the window
    ! contents as a string; whether blanks in the window are included is
    ! affected by the \member{stripspaces} member.
      \end{methoddesc}
      
    ***************
    *** 1224,1228 ****
      keystrokes: 
      
    ! \begin{tableii}{c|l}{code}{keystroke}{action}
        \lineii{Ctrl-A}{Go to left edge of window.}
        \lineii{Ctrl-B}{Cursor left, wrapping to previous line if appropriate.}
    --- 1231,1235 ----
      keystrokes: 
      
    ! \begin{tableii}{l|l}{kbd}{Keystroke}{Action}
        \lineii{Ctrl-A}{Go to left edge of window.}
        \lineii{Ctrl-B}{Cursor left, wrapping to previous line if appropriate.}
    ***************
    *** 1242,1247 ****
      Move operations do nothing if the cursor is at an edge where the
      movement is not possible.  The following synonyms are supported where
    ! possible:  KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P,
    ! KEY_DOWN = Ctrl-N, KEY_BACKSPACE = Ctrl-h.
      
      All other keystrokes are treated as a command to insert the given
    --- 1249,1261 ----
      Move operations do nothing if the cursor is at an edge where the
      movement is not possible.  The following synonyms are supported where
    ! possible:
    ! 
    ! \begin{tableii}{l|l}{constant}{Constant}{Keystroke}
    !   \lineii{KEY_LEFT}{\kbd{Ctrl-B}}
    !   \lineii{KEY_RIGHT}{\kbd{Ctrl-F}}
    !   \lineii{KEY_UP}{\kbd{Ctrl-P}}
    !   \lineii{KEY_DOWN}{\kbd{Ctrl-N}}
    !   \lineii{KEY_BACKSPACE}{\kbd{Ctrl-h}}
    ! \end{tableii}
      
      All other keystrokes are treated as a command to insert the given
    ***************
    *** 1255,1259 ****
      \end{methoddesc}
      
    ! \begin{methoddesc}{stripspaces}{}
      This data member is a flag which controls the interpretation of blanks in
      the window.  When it is on, trailing blanks on each line are ignored;
    --- 1269,1273 ----
      \end{methoddesc}
      
    ! \begin{memberdesc}{stripspaces}
      This data member is a flag which controls the interpretation of blanks in
      the window.  When it is on, trailing blanks on each line are ignored;
    ***************
    *** 1261,1273 ****
      to the end of that line instead, and trailing blanks are stripped when
      the window contents is gathered.
    ! \end{methoddesc}
      
      \section{\module{curses.wrapper} ---
    !          Exception-handling wrapper for curses programs.}
      
      \declaremodule{standard}{curses.wrapper}
      \sectionauthor{Eric Raymond}{esr@thyrsus.com}
      \moduleauthor{Eric Raymond}{esr@thyrsus.com}
    ! \modulesynopsis{Exception-handling wrapper for curses programs.}
      \versionadded{1.6}
      
    --- 1275,1288 ----
      to the end of that line instead, and trailing blanks are stripped when
      the window contents is gathered.
    ! \end{memberdesc}
      
    + 
      \section{\module{curses.wrapper} ---
    !          Terminal handler for curses programs}
      
      \declaremodule{standard}{curses.wrapper}
      \sectionauthor{Eric Raymond}{esr@thyrsus.com}
      \moduleauthor{Eric Raymond}{esr@thyrsus.com}
    ! \modulesynopsis{Terminal configuration wrapper for curses programs.}
      \versionadded{1.6}
      
    ***************
    *** 1277,1287 ****
      \function{wrapper()} will restore the terminal to a sane state before
      passing it further up the stack and generating a traceback.
    - 
    - \subsection{Functions \label{curses-wrapper-functions}}
      
    ! \begin{funcdesc}{wrapper}{func, *rest}
      Wrapper function that initializes curses and calls another function,
    ! \function{func}, restoring normal keyboard/screen behavior on error.
    ! The callable object 'func' is then passed the main window 'stdscr'
      as its first argument, followed by any other arguments passed to
      \function{wrapper()}.
    --- 1292,1300 ----
      \function{wrapper()} will restore the terminal to a sane state before
      passing it further up the stack and generating a traceback.
      
    ! \begin{funcdesc}{wrapper}{func, \moreargs}
      Wrapper function that initializes curses and calls another function,
    ! \var{func}, restoring normal keyboard/screen behavior on error.
    ! The callable object \var{func} is then passed the main window 'stdscr'
      as its first argument, followed by any other arguments passed to
      \function{wrapper()}.
    
    
    
    From python-dev@python.org  Wed Aug  9 15:36:13 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 9 Aug 2000 07:36:13 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libascii.tex,1.4,1.5
    Message-ID: <200008091436.HAA27296@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27271/lib
    
    Modified Files:
    	libascii.tex 
    Log Message:
    
    Correct version number at which the curses.ascii module was introduced.
    
    
    Index: libascii.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libascii.tex,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** libascii.tex	2000/07/16 19:01:09	1.4
    --- libascii.tex	2000/08/09 14:36:11	1.5
    ***************
    *** 8,12 ****
      \sectionauthor{Eric S. Raymond}{esr@thyrsus.com}
      
    ! \versionadded{2.0}
      
      The \module{curses.ascii} module supplies name constants for
    --- 8,12 ----
      \sectionauthor{Eric S. Raymond}{esr@thyrsus.com}
      
    ! \versionadded{1.6}
      
      The \module{curses.ascii} module supplies name constants for
    
    
    
    From python-dev@python.org  Wed Aug  9 15:37:08 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 9 Aug 2000 07:37:08 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libreadline.tex,1.3,1.4
    Message-ID: <200008091437.HAA27518@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27508/lib
    
    Modified Files:
    	libreadline.tex 
    Log Message:
    
    Correct markup error.
    
    
    Index: libreadline.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libreadline.tex,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** libreadline.tex	2000/07/19 16:56:26	1.3
    --- libreadline.tex	2000/08/09 14:37:05	1.4
    ***************
    *** 50,55 ****
      \begin{funcdesc}{set_history_length}{length}
      Set the number of lines to save in the history file.
    ! \func{write_history_file} uses this value to truncate the history file when
    ! saving.  Negative values imply unlimited history file size.
      \end{funcdesc}
      
    --- 50,56 ----
      \begin{funcdesc}{set_history_length}{length}
      Set the number of lines to save in the history file.
    ! \function{write_history_file()} uses this value to truncate the
    ! history file when saving.  Negative values imply unlimited history
    ! file size.
      \end{funcdesc}
      
    
    
    
    From python-dev@python.org  Wed Aug  9 15:46:24 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 9 Aug 2000 07:46:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmath.tex,1.20,1.20.2.1
    Message-ID: <200008091446.HAA30832@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Doc/lib
    
    Modified Files:
          Tag: cnri-16-start
    	libmath.tex 
    Log Message:
    
    removed all occurences of rint from 1.6 (felt responsible for this one)
    
    QUESTION: Should I do the same for 2.0?
    
    
    
    Index: libmath.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmath.tex,v
    retrieving revision 1.20
    retrieving revision 1.20.2.1
    diff -C2 -r1.20 -r1.20.2.1
    *** libmath.tex	2000/05/11 18:42:27	1.20
    --- libmath.tex	2000/08/09 14:46:21	1.20.2.1
    ***************
    *** 94,102 ****
      \end{funcdesc}
      
    - \begin{funcdesc}{rint}{x, y}
    - Return the integer nearest to \var{x} as a real.
    - (Only available on platforms where this is in the standard C math library.)
    - \end{funcdesc}
    - 
      \begin{funcdesc}{sin}{x}
      Return the sine of \var{x}.
    --- 94,97 ----
    
    
    
    From python-dev@python.org  Wed Aug  9 15:46:24 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 9 Aug 2000 07:46:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Include mymath.h,2.9,2.9.2.1
    Message-ID: <200008091446.HAA30833@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Include
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Include
    
    Modified Files:
          Tag: cnri-16-start
    	mymath.h 
    Log Message:
    
    removed all occurences of rint from 1.6 (felt responsible for this one)
    
    QUESTION: Should I do the same for 2.0?
    
    
    
    Index: mymath.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Include/mymath.h,v
    retrieving revision 2.9
    retrieving revision 2.9.2.1
    diff -C2 -r2.9 -r2.9.2.1
    *** mymath.h	2000/05/11 18:19:41	2.9
    --- mymath.h	2000/08/09 14:46:21	2.9.2.1
    ***************
    *** 49,53 ****
      #undef log10
      #undef pow
    - #undef rint
      #undef sin
      #undef sinh
    --- 49,52 ----
    ***************
    *** 69,73 ****
      #define log10 log10d
      #define pow powd
    - #define rint rintd
      #define sin sind
      #define sinh sinhd
    --- 68,71 ----
    
    
    
    From python-dev@python.org  Wed Aug  9 15:46:24 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 9 Aug 2000 07:46:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules mathmodule.c,2.45.2.1,2.45.2.2
    Message-ID: <200008091446.HAA30844@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Modules
    
    Modified Files:
          Tag: cnri-16-start
    	mathmodule.c 
    Log Message:
    
    removed all occurences of rint from 1.6 (felt responsible for this one)
    
    QUESTION: Should I do the same for 2.0?
    
    
    
    Index: mathmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/mathmodule.c,v
    retrieving revision 2.45.2.1
    retrieving revision 2.45.2.2
    diff -C2 -r2.45.2.1 -r2.45.2.2
    *** mathmodule.c	2000/08/03 16:52:01	2.45.2.1
    --- mathmodule.c	2000/08/09 14:46:21	2.45.2.2
    ***************
    *** 126,133 ****
            "pow(x,y)\n\nReturn x**y.")
      #endif
    - #ifdef HAVE_RINT
    - FUNC1(math_rint, rint, math_rint_doc,
    -       "rint(x)\n\nReturn the integer nearest to x as a real.")
    - #endif
      FUNC1(math_sin, sin, math_sin_doc,
            "sin(x)\n\nReturn the sine of x.")
    --- 126,129 ----
    ***************
    *** 241,247 ****
      	{"modf",	math_modf,	0,	math_modf_doc},
      	{"pow",		math_pow,	0,	math_pow_doc},
    - #ifdef HAVE_RINT
    - 	{"rint",	math_rint,	0,	math_rint_doc},
    - #endif
      	{"sin",		math_sin,	0,	math_sin_doc},
      	{"sinh",	math_sinh,	0,	math_sinh_doc},
    --- 237,240 ----
    
    
    
    From python-dev@python.org  Wed Aug  9 15:46:24 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 9 Aug 2000 07:46:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_math.py,1.3,1.3.2.1
    Message-ID: <200008091446.HAA30837@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Lib/test
    
    Modified Files:
          Tag: cnri-16-start
    	test_math.py 
    Log Message:
    
    removed all occurences of rint from 1.6 (felt responsible for this one)
    
    QUESTION: Should I do the same for 2.0?
    
    
    
    Index: test_math.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_math.py,v
    retrieving revision 1.3
    retrieving revision 1.3.2.1
    diff -C2 -r1.3 -r1.3.2.1
    *** test_math.py	2000/05/11 18:19:41	1.3
    --- test_math.py	2000/08/09 14:46:21	1.3.2.1
    ***************
    *** 130,139 ****
      testit('pow(2,-1)', math.pow(2,-1), 0.5)
      
    - print 'rint'
    - testit('rint(0.7)', math.rint(0.7), 1)
    - testit('rint(-0.3)', math.rint(-0.3), 0)
    - testit('rint(2.5)', math.rint(2.5), 2)
    - testit('rint(3.5)', math.rint(3.5), 4) 
    - 
      print 'sin'
      testit('sin(0)', math.sin(0), 0)
    --- 130,133 ----
    
    
    
    From python-dev@python.org  Wed Aug  9 15:46:24 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 9 Aug 2000 07:46:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_math,1.2,1.2.2.1
    Message-ID: <200008091446.HAA30845@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test/output
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30664/Lib/test/output
    
    Modified Files:
          Tag: cnri-16-start
    	test_math 
    Log Message:
    
    removed all occurences of rint from 1.6 (felt responsible for this one)
    
    QUESTION: Should I do the same for 2.0?
    
    
    
    Index: test_math
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_math,v
    retrieving revision 1.2
    retrieving revision 1.2.2.1
    diff -C2 -r1.2 -r1.2.2.1
    *** test_math	2000/05/11 18:19:41	1.2
    --- test_math	2000/08/09 14:46:21	1.2.2.1
    ***************
    *** 20,24 ****
      modf
      pow
    - rint
      sin
      sinh
    --- 20,23 ----
    
    
    
    From python-dev@python.org  Wed Aug  9 19:03:17 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 11:03:17 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.141,1.142 Tkconstants.py,1.6,1.7
    Message-ID: <200008091803.LAA15134@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/lib-tk
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14402/Lib/lib-tk
    
    Modified Files:
    	Tkinter.py Tkconstants.py 
    Log Message:
    
    
    -- untabification (use "diff -b" to verify)
    
    Index: Tkinter.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
    retrieving revision 1.141
    retrieving revision 1.142
    diff -C2 -r1.141 -r1.142
    *** Tkinter.py	2000/07/16 12:04:31	1.141
    --- Tkinter.py	2000/08/09 18:03:11	1.142
    ***************
    *** 32,36 ****
      import sys
      if sys.platform == "win32":
    ! 	import FixTk # Attempt to configure Tcl/Tk without requiring PATH
      import _tkinter # If this fails your Python may not be configured for Tk
      tkinter = _tkinter # b/w compat for export
    --- 32,36 ----
      import sys
      if sys.platform == "win32":
    !     import FixTk # Attempt to configure Tcl/Tk without requiring PATH
      import _tkinter # If this fails your Python may not be configured for Tk
    [...6000 lines suppressed...]
    !         text = text + u"\nThis should be a cedilla: \347"
    !     label = Label(root, text=text)
    !     label.pack()
    !     test = Button(root, text="Click me!",
    !               command=lambda root=root: root.test.configure(
    !                   text="[%s]" % root.test['text']))
    !     test.pack()
    !     root.test = test
    !     quit = Button(root, text="QUIT", command=root.destroy)
    !     quit.pack()
    !     # The following three commands are needed so the window pops
    !     # up on top on Windows...
    !     root.iconify()
    !     root.update()
    !     root.deiconify()
    !     root.mainloop()
      
      if __name__ == '__main__':
    !     _test()
      
    
    Index: Tkconstants.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkconstants.py,v
    retrieving revision 1.6
    retrieving revision 1.7
    diff -C2 -r1.6 -r1.7
    *** Tkconstants.py	1998/10/01 15:54:48	1.6
    --- Tkconstants.py	2000/08/09 18:03:12	1.7
    ***************
    *** 1,3 ****
    - 
      # Symbolic constants for Tk
      
    --- 1,2 ----
    
    
    
    From python-dev@python.org  Wed Aug  9 19:29:59 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 11:29:59 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.142,1.143
    Message-ID: <200008091829.LAA23993@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/lib-tk
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv21210/Lib/lib-tk
    
    Modified Files:
    	Tkinter.py 
    Log Message:
    
    
    -- added xview_moveto, xview_scroll, yview_moveto, yview_scroll
       to the Text method (closes Bug #110605)
    
    Index: Tkinter.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
    retrieving revision 1.142
    retrieving revision 1.143
    diff -C2 -r1.142 -r1.143
    *** Tkinter.py	2000/08/09 18:03:11	1.142
    --- Tkinter.py	2000/08/09 18:29:51	1.143
    ***************
    *** 2831,2839 ****
                  return self._getdoubles(self.tk.call(self._w, 'xview'))
              self.tk.call((self._w, 'xview') + what)
    !     def yview(self, *what):
              """Query and change vertical position of the view."""
    !         if not what:
                  return self._getdoubles(self.tk.call(self._w, 'yview'))
    !         self.tk.call((self._w, 'yview') + what)
          def yview_pickplace(self, *what):
              """Obsolete function, use see."""
    --- 2831,2855 ----
                  return self._getdoubles(self.tk.call(self._w, 'xview'))
              self.tk.call((self._w, 'xview') + what)
    !     def xview_moveto(self, fraction):
    !         """Adjusts the view in the window so that FRACTION of the
    !         total width of the canvas is off-screen to the left."""
    !         self.tk.call(self._w, 'xview', 'moveto', fraction)
    !     def xview_scroll(self, number, what):
    !         """Shift the x-view according to NUMBER which is measured
    !         in "units" or "pages" (WHAT)."""
    !         self.tk.call(self._w, 'xview', 'scroll', number, what)
    !     def yview(self, *args):
              """Query and change vertical position of the view."""
    !         if not args:
                  return self._getdoubles(self.tk.call(self._w, 'yview'))
    !         self.tk.call((self._w, 'yview') + args)
    !     def yview_moveto(self, fraction):
    !         """Adjusts the view in the window so that FRACTION of the
    !         total height of the canvas is off-screen to the top."""
    !         self.tk.call(self._w, 'yview', 'moveto', fraction)
    !     def yview_scroll(self, number, what):
    !         """Shift the y-view according to NUMBER which is measured
    !         in "units" or "pages" (WHAT)."""
    !         self.tk.call(self._w, 'yview', 'scroll', number, what)
          def yview_pickplace(self, *what):
              """Obsolete function, use see."""
    
    
    
    From python-dev@python.org  Wed Aug  9 19:51:04 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 11:51:04 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.143,1.144
    Message-ID: <200008091851.LAA25937@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/lib-tk
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25615/Lib/lib-tk
    
    Modified Files:
    	Tkinter.py 
    Log Message:
    
    
    -- use explicit conversion instead of u-string literal in the test
       code, to make the new Tkinter.py run under 1.5.2
    -- changed Text.yview argument name (for consistency with xview)
    
    Index: Tkinter.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
    retrieving revision 1.143
    retrieving revision 1.144
    diff -C2 -r1.143 -r1.144
    *** Tkinter.py	2000/08/09 18:29:51	1.143
    --- Tkinter.py	2000/08/09 18:51:01	1.144
    ***************
    *** 2839,2847 ****
              in "units" or "pages" (WHAT)."""
              self.tk.call(self._w, 'xview', 'scroll', number, what)
    !     def yview(self, *args):
              """Query and change vertical position of the view."""
    !         if not args:
                  return self._getdoubles(self.tk.call(self._w, 'yview'))
    !         self.tk.call((self._w, 'yview') + args)
          def yview_moveto(self, fraction):
              """Adjusts the view in the window so that FRACTION of the
    --- 2839,2847 ----
              in "units" or "pages" (WHAT)."""
              self.tk.call(self._w, 'xview', 'scroll', number, what)
    !     def yview(self, *what):
              """Query and change vertical position of the view."""
    !         if not what:
                  return self._getdoubles(self.tk.call(self._w, 'yview'))
    !         self.tk.call((self._w, 'yview') + what)
          def yview_moveto(self, fraction):
              """Adjusts the view in the window so that FRACTION of the
    ***************
    *** 3061,3065 ****
          text = "This is Tcl/Tk version %s" % TclVersion
          if TclVersion >= 8.1:
    !         text = text + u"\nThis should be a cedilla: \347"
          label = Label(root, text=text)
          label.pack()
    --- 3061,3069 ----
          text = "This is Tcl/Tk version %s" % TclVersion
          if TclVersion >= 8.1:
    !         try:
    !             text = text + unicode("\nThis should be a cedilla: \347",
    !                                   "iso-8859-1")
    !         except NameError:
    !             pass # no unicode support
          label = Label(root, text=text)
          label.pack()
    
    
    
    From python-dev@python.org  Wed Aug  9 20:12:04 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 12:12:04 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.144,1.145
    Message-ID: <200008091912.MAA31666@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/lib-tk
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30192/Lib/lib-tk
    
    Modified Files:
    	Tkinter.py 
    Log Message:
    
    
    -- added optional newstate argument to Wm.state.  The newstate arg
       was added in Tk 8.3 (this fixes the first part of Bug #110605)
    
    
    
    Index: Tkinter.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
    retrieving revision 1.144
    retrieving revision 1.145
    diff -C2 -r1.144 -r1.145
    *** Tkinter.py	2000/08/09 18:51:01	1.144
    --- Tkinter.py	2000/08/09 19:11:59	1.145
    ***************
    *** 1435,1442 ****
              return self.tk.call('wm', 'sizefrom', self._w, who)
          sizefrom = wm_sizefrom
    !     def wm_state(self):
    !         """Return the state of this widget as one of normal,
    !         icon, iconic (see wm_iconwindow) and withdrawn."""
    !         return self.tk.call('wm', 'state', self._w)
          state = wm_state
          def wm_title(self, string=None):
    --- 1435,1442 ----
              return self.tk.call('wm', 'sizefrom', self._w, who)
          sizefrom = wm_sizefrom
    !     def wm_state(self, newstate=None):
    !         """Query or set the state of this widget as one of normal, icon,
    !         iconic (see wm_iconwindow), withdrawn, or zoomed (Windows only)."""
    !         return self.tk.call('wm', 'state', self._w, newstate)
          state = wm_state
          def wm_title(self, string=None):
    
    
    
    From python-dev@python.org  Wed Aug  9 20:26:50 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 12:26:50 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkinter.py,1.145,1.146
    Message-ID: <200008091926.MAA03595@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/lib-tk
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2757/Lib/lib-tk
    
    Modified Files:
    	Tkinter.py 
    Log Message:
    
    
    -- don't mess up in winfo_visualsavailable if the system only
       supports a single visual (closes bug #110603)
    
    Index: Tkinter.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
    retrieving revision 1.145
    retrieving revision 1.146
    diff -C2 -r1.145 -r1.146
    *** Tkinter.py	2000/08/09 19:11:59	1.145
    --- Tkinter.py	2000/08/09 19:26:47	1.146
    ***************
    *** 775,778 ****
    --- 775,780 ----
                  self.tk.call('winfo', 'visualsavailable', self._w,
                           includeids and 'includeids' or None))
    +         if type(data) is StringType:
    +             data = [self.tk.split(data)]
              return map(self.__winfo_parseitem, data)
          def __winfo_parseitem(self, t):
    
    
    
    From python-dev@python.org  Wed Aug  9 20:37:20 2000
    From: python-dev@python.org (Fredrik Lundh)
    Date: Wed, 9 Aug 2000 12:37:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/lib-tk Tkconstants.py,1.7,1.8
    Message-ID: <200008091937.MAA05076@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/lib-tk
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5038/Lib/lib-tk
    
    Modified Files:
    	Tkconstants.py 
    Log Message:
    
    
    -- added a couple of missing Tkinter constants (canvas item styles,
       place bordermode, etc)
    
    Index: Tkconstants.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkconstants.py,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** Tkconstants.py	2000/08/09 18:03:12	1.7
    --- Tkconstants.py	2000/08/09 19:37:16	1.8
    ***************
    *** 53,56 ****
    --- 53,60 ----
      BASELINE='baseline'
      
    + # -bordermode
    + INSIDE='inside'
    + OUTSIDE='outside'
    + 
      # Special tags, marks and insert positions
      SEL='sel'
    ***************
    *** 80,81 ****
    --- 84,103 ----
      MULTIPLE='multiple'
      EXTENDED='extended'
    + 
    + # Various canvas styles
    + PIESLICE='pieslice'
    + CHORD='chord'
    + ARC='arc'
    + FIRST='first'
    + LAST='last'
    + BUTT='butt'
    + PROJECTING='projecting'
    + ROUND='round'
    + BEVEL='bevel'
    + MITER='miter'
    + 
    + # Arguments to xview/yview
    + MOVETO='moveto'
    + SCROLL='scroll'
    + UNITS='units'
    + PAGES='pages'
    
    
    
    From python-dev@python.org  Wed Aug  9 22:11:10 2000
    From: python-dev@python.org (Eric S. Raymond)
    Date: Wed, 9 Aug 2000 14:11:10 -0700
    Subject: [Python-checkins] CVS: python/dist/src configure.in,1.141,1.142
    Message-ID: <200008092111.OAA28623@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28543
    
    Modified Files:
    	configure.in 
    Log Message:
    Tweak curses.wrapper so it initializes colors if they are available.
    
    
    Index: configure.in
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/configure.in,v
    retrieving revision 1.141
    retrieving revision 1.142
    diff -C2 -r1.141 -r1.142
    *** configure.in	2000/08/05 23:28:51	1.141
    --- configure.in	2000/08/09 21:11:06	1.142
    ***************
    *** 1015,1018 ****
    --- 1015,1024 ----
      # (none yet)
      
    + # Cope with the DB mess.  If we detect libdba, assume it's a version 2
    + # or later DB and should be linked first (before the DB 1.xx stuff in glibc).
    + # Also define an appropriate symbol so we can conditionalize code in the
    + # dbmmodule; the API has changed since 1.xx.
    + AC_CHECK_LIB(dba, __db_mutex_lock)
    + 
      # Linux requires this for correct f.p. operations
      AC_CHECK_FUNC(__fpu_control,
    
    
    
    From python-dev@python.org  Wed Aug  9 22:11:10 2000
    From: python-dev@python.org (Eric S. Raymond)
    Date: Wed, 9 Aug 2000 14:11:10 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/curses wrapper.py,1.4,1.5
    Message-ID: <200008092111.OAA28627@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/curses
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28543/Lib/curses
    
    Modified Files:
    	wrapper.py 
    Log Message:
    Tweak curses.wrapper so it initializes colors if they are available.
    
    
    Index: wrapper.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/curses/wrapper.py,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -C2 -r1.4 -r1.5
    *** wrapper.py	2000/07/07 21:02:22	1.4
    --- wrapper.py	2000/08/09 21:11:07	1.5
    ***************
    *** 33,36 ****
    --- 33,45 ----
              stdscr.keypad(1)
      
    +         # Start color, too.  Harmless if the terminal doesn't have
    +         # color; user can test with has_color() later on.  The try/catch
    +         # works around a minor bit of over-conscientiousness in the curses
    +         # module -- the error return from C start_color() is ignorable.
    +         try:
    +             curses.start_color()
    +         except:
    +             pass
    + 
              res = apply(func, (stdscr,) + rest)
          except:
    
    
    
    From python-dev@python.org  Wed Aug  9 22:11:10 2000
    From: python-dev@python.org (Eric S. Raymond)
    Date: Wed, 9 Aug 2000 14:11:10 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.14,1.15
    Message-ID: <200008092111.OAA28622@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28543/Doc/lib
    
    Modified Files:
    	libcurses.tex 
    Log Message:
    Tweak curses.wrapper so it initializes colors if they are available.
    
    
    Index: libcurses.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
    retrieving revision 1.14
    retrieving revision 1.15
    diff -C2 -r1.14 -r1.15
    *** libcurses.tex	2000/08/09 14:34:48	1.14
    --- libcurses.tex	2000/08/09 21:11:07	1.15
    ***************
    *** 1301,1307 ****
      \end{funcdesc}
      
    ! Before calling the hook function, \function{wrapper()} turns on
    ! cbreak mode, turns off echo, and enables the terminal keypad.  On
    ! exit (whether normally or by exception) it restores cooked mode, 
    ! turns on echo, and disables the terminal keypad.
      
    --- 1301,1308 ----
      \end{funcdesc}
      
    ! Before calling the hook function, \function{wrapper()} turns on cbreak
    ! mode, turns off echo, enables the terminal keypad, and initializes
    ! colors if the terminal has color support.  On exit (whether normally
    ! or by exception) it restores cooked mode, turns on echo, and disables
    ! the terminal keypad.
      
    
    
    
    From python-dev@python.org  Wed Aug  9 22:49:34 2000
    From: python-dev@python.org (Eric S. Raymond)
    Date: Wed, 9 Aug 2000 14:49:34 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcurses.tex,1.15,1.16
    Message-ID: <200008092149.OAA12645@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv12123
    
    Modified Files:
    	libcurses.tex 
    Log Message:
    More on noutrefresh.
    
    
    Index: libcurses.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcurses.tex,v
    retrieving revision 1.15
    retrieving revision 1.16
    diff -C2 -r1.15 -r1.16
    *** libcurses.tex	2000/08/09 21:11:07	1.15
    --- libcurses.tex	2000/08/09 21:49:31	1.16
    ***************
    *** 835,839 ****
      
      \begin{methoddesc}{noutrefresh}{}
    ! Mark for refresh but wait.
      \end{methoddesc}
      
    --- 835,841 ----
      
      \begin{methoddesc}{noutrefresh}{}
    ! Mark for refresh but wait.  This function updates the data structure
    ! representing the desired state of the window, but does not force
    ! an update of the physical screen.
      \end{methoddesc}
      
    
    
    
    From python-dev@python.org  Thu Aug 10 04:05:30 2000
    From: python-dev@python.org (Guido van Rossum)
    Date: Wed, 9 Aug 2000 20:05:30 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.20,1.21
    Message-ID: <200008100305.UAA05018@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5004
    
    Modified Files:
    	mailbox.py 
    Log Message:
    Improve MHMailbox: messages are now sorted in numerical order.
    Also don't allow leading zeros in message numbers.
    
    
    Index: mailbox.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/mailbox.py,v
    retrieving revision 1.20
    retrieving revision 1.21
    diff -C2 -r1.20 -r1.21
    *** mailbox.py	2000/07/09 16:44:26	1.20
    --- mailbox.py	2000/08/10 03:05:26	1.21
    ***************
    *** 156,166 ****
          def __init__(self, dirname):
              import re
    !         pat = re.compile('^[0-9][0-9]*$')
              self.dirname = dirname
              files = os.listdir(self.dirname)
    !         self.boxes = []
              for f in files:
                  if pat.match(f):
    !                 self.boxes.append(f)
      
          def next(self):
    --- 156,171 ----
          def __init__(self, dirname):
              import re
    !         pat = re.compile('^[1-9][0-9]*$')
              self.dirname = dirname
              files = os.listdir(self.dirname)
    !         list = []
              for f in files:
                  if pat.match(f):
    !                 list.append(f)
    !         list = map(long, list)
    !         list.sort()
    !         # This only works in Python 1.6 or later;
    !         # before that str() added 'L':
    !         self.boxes = map(str, list)
      
          def next(self):
    
    
    
    From python-dev@python.org  Thu Aug 10 04:51:12 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 9 Aug 2000 20:51:12 -0700
    Subject: [Python-checkins] CVS: python/nondist/sf-html sf-faq.html,1.11,1.12
    Message-ID: <200008100351.UAA14446@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/sf-html
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14417
    
    Modified Files:
    	sf-faq.html 
    Log Message:
    
    added question about forcing a branch tag on files
    
    
    
    Index: sf-faq.html
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** sf-faq.html	2000/07/25 10:39:58	1.11
    --- sf-faq.html	2000/08/10 03:51:09	1.12
    ***************
    *** 35,38 ****
    --- 35,39 ----
        
  • How to revert changes?
  • How to add binary files?
  • +
  • How to force a branch tag on a file?
  • *************** *** 342,345 **** --- 343,362 ---- cvs commit newfile.bin
    + +

    2.8.:

    + +

    Q: How to force a branch tag on a file?

    + +

    A:

    + The quickest way to force a branch tag branch_tag on a file is to + issue the command + +
    + cvs tag -F -b -r revision branch_tag file
    +
    + for each file, where revision is the revision where the tag should be + and file is the file. Note that -F means force (otherwise + you get a complaint because the tag is already defined) and -b means + branch which makes the tag a branch tag.

    3. Patches

    From python-dev@python.org Thu Aug 10 04:52:07 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 20:52:07 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.55,2.55.2.1 configure,1.113,1.113.2.1 configure.in,1.121,1.121.2.1 Message-ID: <200008100352.UAA14589@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv14550 Modified Files: Tag: cnri-16-start config.h.in configure configure.in Log Message: remove remaining occurence of rint from config* files Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.55 retrieving revision 2.55.2.1 diff -C2 -r2.55 -r2.55.2.1 *** config.h.in 2000/05/11 18:41:31 2.55 --- config.h.in 2000/08/10 03:52:03 2.55.2.1 *************** *** 382,388 **** #undef HAVE_READLINK - /* Define if you have the rint function. */ - #undef HAVE_RINT - /* Define if you have the select function. */ #undef HAVE_SELECT --- 382,385 ---- Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.113 retrieving revision 1.113.2.1 diff -C2 -r1.113 -r1.113.2.1 *** configure 2000/05/11 18:41:31 1.113 --- configure 2000/08/10 03:52:03 1.113.2.1 *************** *** 5004,5070 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - for ac_func in rint - do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 - echo "configure:5013: checking for $ac_func" >&5 - if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - /* Override any gcc2 internal prototype to avoid an error. */ - /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ - char $ac_func(); - - int main() { - - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ - #if defined (__stub_$ac_func) || defined (__stub___$ac_func) - choke me - #else - $ac_func(); - #endif - - ; return 0; } - EOF - if { (eval echo configure:5041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" - fi - rm -f conftest* - fi - - if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 - fi - done - - LIBS=$LIBS_SAVE - # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5069: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5004,5010 ---- LIBS=$LIBS_SAVE # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5009: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5074,5078 **** else cat > conftest.$ac_ext < --- 5014,5018 ---- else cat > conftest.$ac_ext < *************** *** 5086,5090 **** } EOF ! if { (eval echo configure:5089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes --- 5026,5030 ---- } EOF ! if { (eval echo configure:5029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes *************** *** 5104,5108 **** # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5107: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5044,5048 ---- # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5047: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5112,5116 **** else cat > conftest.$ac_ext < --- 5052,5056 ---- else cat > conftest.$ac_ext < *************** *** 5131,5135 **** } EOF ! if { (eval echo configure:5134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull --- 5071,5075 ---- } EOF ! if { (eval echo configure:5074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull *************** *** 5157,5171 **** ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5160: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5170: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then --- 5097,5111 ---- ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5100: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then *************** *** 5197,5206 **** usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 ! echo "configure:5200: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&6 ! echo "configure:5140: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF --- 5156,5160 ---- EOF ! if { (eval echo configure:5159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF *************** *** 5235,5239 **** # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5238: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5175,5179 ---- # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5178: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5242,5246 **** # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < --- 5182,5186 ---- # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < *************** *** 5253,5261 **** ; return 0; } EOF ! if { (eval echo configure:5256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < --- 5193,5201 ---- ; return 0; } EOF ! if { (eval echo configure:5196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < *************** *** 5268,5272 **** ; return 0; } EOF ! if { (eval echo configure:5271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes --- 5208,5212 ---- ; return 0; } EOF ! if { (eval echo configure:5211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes *************** *** 5288,5292 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no --- 5241,5245 ---- } EOF ! if { (eval echo configure:5244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no *************** *** 5327,5331 **** # Check for --with-wctype-functions echo $ac_n "checking for --with-wctype-functions""... $ac_c" 1>&6 ! echo "configure:5330: checking for --with-wctype-functions" >&5 # Check whether --with-wctype-functions or --without-wctype-functions was given. if test "${with_wctype_functions+set}" = set; then --- 5267,5271 ---- # Check for --with-wctype-functions echo $ac_n "checking for --with-wctype-functions""... $ac_c" 1>&6 ! echo "configure:5270: checking for --with-wctype-functions" >&5 # Check whether --with-wctype-functions or --without-wctype-functions was given. if test "${with_wctype_functions+set}" = set; then Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.121 retrieving revision 1.121.2.1 diff -C2 -r1.121 -r1.121.2.1 *** configure.in 2000/05/11 18:41:32 1.121 --- configure.in 2000/08/10 03:52:03 1.121.2.1 *************** *** 997,1006 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - AC_CHECK_FUNCS(rint) - LIBS=$LIBS_SAVE - # check for getopt AC_MSG_CHECKING(for genuine getopt) --- 997,1000 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmath.tex,1.22,1.23 Message-ID: <200008100423.VAA20591@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Doc/lib Modified Files: libmath.tex Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: libmath.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmath.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** libmath.tex 2000/07/03 06:38:17 1.22 --- libmath.tex 2000/08/10 04:23:29 1.23 *************** *** 98,106 **** \end{funcdesc} - \begin{funcdesc}{rint}{x, y} - Return the integer nearest to \var{x} as a real. - (Only available on platforms where this is in the standard C math library.) - \end{funcdesc} - \begin{funcdesc}{sin}{x} Return the sine of \var{x}. --- 98,101 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include mymath.h,2.13,2.14 pyport.h,2.11,2.12 Message-ID: <200008100423.VAA20596@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Include Modified Files: mymath.h pyport.h Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: mymath.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/mymath.h,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** mymath.h 2000/07/31 22:19:30 2.13 --- mymath.h 2000/08/10 04:23:29 2.14 *************** *** 56,60 **** #undef log10 #undef pow - #undef rint #undef sin #undef sinh --- 56,59 ---- *************** *** 76,80 **** #define log10 log10d #define pow powd - #define rint rintd #define sin sind #define sinh sinhd --- 75,78 ---- Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.11 retrieving revision 2.12 diff -C2 -r2.11 -r2.12 *** pyport.h 2000/08/01 18:28:44 2.11 --- pyport.h 2000/08/10 04:23:29 2.12 *************** *** 194,198 **** #undef log10 #undef pow - #undef rint #undef sin #undef sinh --- 194,197 ---- *************** *** 214,218 **** #define log10 log10d #define pow powd - #define rint rintd #define sin sind #define sinh sinhd --- 213,216 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_math.py,1.4,1.5 Message-ID: <200008100423.VAA20605@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Lib/test Modified Files: test_math.py Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: test_math.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_math.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_math.py 2000/06/01 17:59:17 1.4 --- test_math.py 2000/08/10 04:23:30 1.5 *************** *** 130,145 **** testit('pow(2,-1)', math.pow(2,-1), 0.5) - print 'rint' - try: - math.rint - except AttributeError: - # this platform does not have rint, that is fine, skip the test - pass - else: - testit('rint(0.7)', math.rint(0.7), 1) - testit('rint(-0.3)', math.rint(-0.3), 0) - testit('rint(2.5)', math.rint(2.5), 2) - testit('rint(3.5)', math.rint(3.5), 4) - print 'sin' testit('sin(0)', math.sin(0), 0) --- 130,133 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules mathmodule.c,2.52,2.53 Message-ID: <200008100423.VAA20613@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Modules Modified Files: mathmodule.c Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: mathmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/mathmodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** mathmodule.c 2000/07/31 15:28:04 2.52 --- mathmodule.c 2000/08/10 04:23:30 2.53 *************** *** 130,137 **** "pow(x,y)\n\nReturn x**y.") #endif - #ifdef HAVE_RINT - FUNC1(rint, rint, - "rint(x)\n\nReturn the integer nearest to x as a real.") - #endif FUNC1(sin, sin, "sin(x)\n\nReturn the sine of x.") --- 130,133 ---- *************** *** 241,247 **** {"modf", math_modf, METH_VARARGS, math_modf_doc}, {"pow", math_pow, METH_VARARGS, math_pow_doc}, - #ifdef HAVE_RINT - {"rint", math_rint, METH_VARARGS, math_rint_doc}, - #endif {"sin", math_sin, METH_VARARGS, math_sin_doc}, {"sinh", math_sinh, METH_VARARGS, math_sinh_doc}, --- 237,240 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_math,1.2,1.3 Message-ID: <200008100423.VAA20612@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Lib/test/output Modified Files: test_math Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: test_math =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_math,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_math 2000/05/11 18:19:41 1.2 --- test_math 2000/08/10 04:23:30 1.3 *************** *** 20,24 **** modf pow - rint sin sinh --- 20,23 ---- From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib profile.py,1.23,1.24 Message-ID: <200008100423.VAA20601@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310/Lib Modified Files: profile.py Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: profile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/profile.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** profile.py 2000/07/16 12:04:30 1.23 --- profile.py 2000/08/10 04:23:29 1.24 *************** *** 391,395 **** # of events during sub functions) that are seen. If this were # done, then the arithmetic could be done after the fact (i.e., at ! # display time). Currintly, we track only call/return events. # These values can be deduced by examining the callees and callers # vectors for each functions. Hence we *can* almost correct the --- 391,395 ---- # of events during sub functions) that are seen. If this were # done, then the arithmetic could be done after the fact (i.e., at ! # display time). Currently, we track only call/return events. # These values can be deduced by examining the callees and callers # vectors for each functions. Hence we *can* almost correct the From python-dev@python.org Thu Aug 10 05:23:32 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Wed, 9 Aug 2000 21:23:32 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.132,1.133 configure.in,1.142,1.143 Message-ID: <200008100423.VAA20597@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv20310 Modified Files: configure configure.in Log Message: remove all occurence of math.rint() from the sources (and yes, "Currintly" also counts <0.5 wink>) Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.132 retrieving revision 1.133 diff -C2 -r1.132 -r1.133 *** configure 2000/08/05 23:28:51 1.132 --- configure 2000/08/10 04:23:28 1.133 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.140 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.142 # Guess values for system-dependent variables and create Makefiles. *************** *** 5085,5096 **** # (none yet) # Linux requires this for correct f.p. operations echo $ac_n "checking for __fpu_control""... $ac_c" 1>&6 ! echo "configure:5090: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 + echo "configure:5093: checking for __db_mutex_lock in -ldba" >&5 + ac_lib_var=`echo dba'_'__db_mutex_lock | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + ac_save_LIBS="$LIBS" + LIBS="-ldba $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" + fi + rm -f conftest* + LIBS="$ac_save_LIBS" + + fi + if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo dba | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 + fi + + # Linux requires this for correct f.p. operations echo $ac_n "checking for __fpu_control""... $ac_c" 1>&6 ! echo "configure:5142: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" --- 5167,5171 ---- ; return 0; } EOF ! if { (eval echo configure:5170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" *************** *** 5133,5137 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5136: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then --- 5185,5189 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5188: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then *************** *** 5141,5145 **** LIBS="-lieee $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 5204,5208 ---- ; return 0; } EOF ! if { (eval echo configure:5207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 5185,5189 **** # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5188: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then --- 5237,5241 ---- # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5240: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then *************** *** 5210,5214 **** esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5213: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then --- 5262,5266 ---- esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5265: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then *************** *** 5231,5235 **** echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5234: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then --- 5283,5287 ---- echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5286: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then *************** *** 5255,5264 **** do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5258: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5310: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 5335,5339 ---- ; return 0; } EOF ! if { (eval echo configure:5338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** *** 5311,5377 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - for ac_func in rint - do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 - echo "configure:5320: checking for $ac_func" >&5 - if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - /* Override any gcc2 internal prototype to avoid an error. */ - /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ - char $ac_func(); - - int main() { - - /* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ - #if defined (__stub_$ac_func) || defined (__stub___$ac_func) - choke me - #else - $ac_func(); - #endif - - ; return 0; } - EOF - if { (eval echo configure:5348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" - fi - rm -f conftest* - fi - - if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 - fi - done - - LIBS=$LIBS_SAVE - # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5376: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5363,5369 ---- LIBS=$LIBS_SAVE # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5368: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5381,5385 **** else cat > conftest.$ac_ext < --- 5373,5377 ---- else cat > conftest.$ac_ext < *************** *** 5393,5397 **** } EOF ! if { (eval echo configure:5396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes --- 5385,5389 ---- } EOF ! if { (eval echo configure:5388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes *************** *** 5411,5415 **** # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5414: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5403,5407 ---- # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5406: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5419,5423 **** else cat > conftest.$ac_ext < --- 5411,5415 ---- else cat > conftest.$ac_ext < *************** *** 5438,5442 **** } EOF ! if { (eval echo configure:5441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull --- 5430,5434 ---- } EOF ! if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull *************** *** 5464,5478 **** ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5467: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5477: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then --- 5456,5470 ---- ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5459: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then *************** *** 5504,5513 **** usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 ! echo "configure:5507: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&6 ! echo "configure:5499: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF --- 5515,5519 ---- EOF ! if { (eval echo configure:5518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF *************** *** 5542,5546 **** # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5545: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5534,5538 ---- # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5537: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5549,5553 **** # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < --- 5541,5545 ---- # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < *************** *** 5560,5568 **** ; return 0; } EOF ! if { (eval echo configure:5563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < --- 5552,5560 ---- ; return 0; } EOF ! if { (eval echo configure:5555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < *************** *** 5575,5579 **** ; return 0; } EOF ! if { (eval echo configure:5578: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes --- 5567,5571 ---- ; return 0; } EOF ! if { (eval echo configure:5570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes *************** *** 5595,5599 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no --- 5600,5604 ---- } EOF ! if { (eval echo configure:5603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no *************** *** 5635,5639 **** # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5638: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5627,5631 ---- # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5630: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5644,5648 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes --- 5645,5649 ---- EOF ! if { (eval echo configure:5648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes *************** *** 5685,5694 **** EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5688: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5677,5686 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5680: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.142 retrieving revision 1.143 diff -C2 -r1.142 -r1.143 *** configure.in 2000/08/09 21:11:06 1.142 --- configure.in 2000/08/10 04:23:29 1.143 *************** *** 1076,1085 **** LIBS=$LIBS_SAVE - # check for rint() in math library - LIBS_SAVE=$LIBS - LIBS="$LIBS $LIBM" - AC_CHECK_FUNCS(rint) - LIBS=$LIBS_SAVE - # check for getopt AC_MSG_CHECKING(for genuine getopt) --- 1076,1079 ---- From python-dev@python.org Thu Aug 10 11:59:06 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 10 Aug 2000 12:59:06 +0200 Subject: [Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.20,1.21 In-Reply-To: Your message of Wed, 09 Aug 2000 20:05:30 -0700. <200008100305.UAA05018@slayer.i.sourceforge.net> References: <200008100305.UAA05018@slayer.i.sourceforge.net> Message-ID: <20000810105907.713B331047C@bireme.oratrix.nl> On Wed, Aug 9 2000 Guido van Rossum wrote: > files = os.listdir(self.dirname) > ! list = [] > for f in files: > if pat.match(f): > ! list.append(f) > ! list = map(long, list) > ! list.sort() Isn't this just: list = os.listdir(self.dirname) list = filter(pat.match, list) list = map(long, list) list.sort() Or even shorter: list = map(long, filter(pat.match, os.listdir(self.dirname))) list.sort() (Although I can and do see the advantage of the slightly longer version.) -- Sjoerd Mullender From python-dev@python.org Thu Aug 10 15:02:28 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Thu, 10 Aug 2000 07:02:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib smtplib.py,1.25,1.26 Message-ID: <200008101402.HAA31335@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv30398 Modified Files: smtplib.py Log Message: add better algorithm to get fully qualified domain name for localhost in smtplib.ehlo() and smtplib.helo(). closes patch #101103 closes bug #110935 Index: smtplib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/smtplib.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** smtplib.py 2000/07/16 12:04:30 1.25 --- smtplib.py 2000/08/10 14:02:23 1.26 *************** *** 99,103 **** - class SMTPDataError(SMTPResponseException): """The SMTP server didn't accept the data.""" --- 99,102 ---- *************** *** 109,112 **** --- 108,112 ---- """The server refused our HELO reply.""" + def quoteaddr(addr): """Quote a subset of the email addresses defined by RFC 821. *************** *** 134,137 **** --- 134,155 ---- re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data)) + def _get_fqdn_hostname(name): + name = string.strip(name) + if len(name) == 0: + name = socket.gethostname() + try: + hostname, aliases, ipaddrs = socket.gethostbyaddr(name) + except socket.error: + pass + else: + aliases.insert(0, hostname) + for name in aliases: + if '.' in name: + break + else: + name = hostname + return name + + class SMTP: """This class manages a connection to an SMTP or ESMTP server. *************** *** 289,300 **** host. """ ! name=string.strip(name) ! if len(name)==0: ! name = socket.gethostname() ! try: ! name = socket.gethostbyaddr(name)[0] ! except socket.error: ! pass ! self.putcmd("helo",name) (code,msg)=self.getreply() self.helo_resp=msg --- 307,311 ---- host. """ ! self.putcmd("helo", _get_fqdn_hostname(name)) (code,msg)=self.getreply() self.helo_resp=msg *************** *** 306,317 **** host. """ ! name=string.strip(name) ! if len(name)==0: ! name = socket.gethostname() ! try: ! name = socket.gethostbyaddr(name)[0] ! except socket.error: ! pass ! self.putcmd("ehlo",name) (code,msg)=self.getreply() # According to RFC1869 some (badly written) --- 317,321 ---- host. """ ! self.putcmd("ehlo", _get_fqdn_hostname(name)) (code,msg)=self.getreply() # According to RFC1869 some (badly written) From python-dev@python.org Thu Aug 10 15:49:42 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 07:49:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects listobject.c,2.69.2.1,2.69.2.2 Message-ID: <200008101449.HAA14181@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv14170 Modified Files: Tag: cnri-16-start listobject.c Log Message: Migrate Fredrik Lundh's patch to add support for arbitrary sequences to [].extend() to the 1.6 branch; this is needed to pass the regression test for the SRE code. Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.69.2.1 retrieving revision 2.69.2.2 diff -C2 -r2.69.2.1 -r2.69.2.2 *** listobject.c 2000/08/03 16:48:51 2.69.2.1 --- listobject.c 2000/08/10 14:49:39 2.69.2.2 *************** *** 593,606 **** return NULL; ! if (!PyList_Check(b)) { ! PyErr_SetString(PyExc_TypeError, ! "list.extend() argument must be a list"); return NULL; ! } ! if (PyList_GET_SIZE(b) == 0) { /* short circuit when b is empty */ ! Py_INCREF(Py_None); ! return Py_None; ! } if (self == (PyListObject*)b) { /* as in list_ass_slice() we must special case the --- 593,604 ---- return NULL; ! b = PySequence_Fast(b, "list.extend() argument must be a sequence"); ! if (!b) return NULL; ! ! if (PyObject_Length(b) == 0) /* short circuit when b is empty */ ! goto ok; ! if (self == (PyListObject*)b) { /* as in list_ass_slice() we must special case the *************** *** 610,613 **** --- 608,612 ---- * list_slice() the way list_ass_slice() does. */ + Py_DECREF(b); b = PyList_New(selflen); if (!b) *************** *** 619,649 **** } } ! else ! /* we want b to have the same refcount semantics for the ! * Py_XDECREF() in the finally clause regardless of which ! * branch in the above conditional we took. ! */ ! Py_INCREF(b); - blen = PyList_GET_SIZE(b); /* resize a using idiom */ items = self->ob_item; NRESIZE(items, PyObject*, selflen + blen); ! if (items == NULL ) { PyErr_NoMemory(); ! goto finally; } self->ob_item = items; ! /* populate the end self with b's items */ for (i = 0; i < blen; i++) { ! PyObject *o = PyList_GET_ITEM(b, i); Py_INCREF(o); PyList_SET_ITEM(self, self->ob_size++, o); } res = Py_None; Py_INCREF(res); ! finally: ! Py_XDECREF(b); return res; } --- 618,644 ---- } } ! ! blen = PyObject_Length(b); /* resize a using idiom */ items = self->ob_item; NRESIZE(items, PyObject*, selflen + blen); ! if (items == NULL) { PyErr_NoMemory(); ! goto failed; } self->ob_item = items; ! /* populate the end of self with b's items */ for (i = 0; i < blen; i++) { ! PyObject *o = PySequence_Fast_GET_ITEM(b, i); Py_INCREF(o); PyList_SET_ITEM(self, self->ob_size++, o); } + ok: res = Py_None; Py_INCREF(res); ! failed: ! Py_DECREF(b); return res; } From python-dev@python.org Thu Aug 10 19:13:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 11:13:29 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.121.2.1,1.121.2.2 configure,1.113.2.1,1.113.2.2 Message-ID: <200008101813.LAA11064@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv10958 Modified Files: Tag: cnri-16-start configure.in configure Log Message: Merged patch 1.132->1.133 into Python 1.6 branch; this avoids use of GNU Pth pthreads implementation when something else is available (such as LinuxThreads). GNU Pth is not sufficiently stable to be preferred over other implementations. Patch contributed by Gregor Hoffleit . Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.121.2.1 retrieving revision 1.121.2.2 diff -C2 -r1.121.2.1 -r1.121.2.2 *** configure.in 2000/08/10 03:52:03 1.121.2.1 --- configure.in 2000/08/10 18:13:25 1.121.2.2 *************** *** 655,662 **** AC_DEFINE(C_THREADS) LIBOBJS="$LIBOBJS thread.o"],[ - AC_CHECK_LIB(pth, pth_init, [AC_DEFINE(WITH_THREAD) - AC_DEFINE(_GNU_PTH) - LIBS="-lpth $LIBS" - LIBOBJS="$LIBOBJS thread.o"],[ AC_CHECK_LIB(pthread, pthread_create, [AC_DEFINE(WITH_THREAD) AC_DEFINE(_POSIX_THREADS) --- 655,658 ---- *************** *** 681,684 **** --- 677,684 ---- LIBS="$LIBS -lthread" LIBOBJS="$LIBOBJS thread.o"], [ + AC_CHECK_LIB(pth, pth_init, [AC_DEFINE(WITH_THREAD) + AC_DEFINE(_GNU_PTH) + LIBS="-lpth $LIBS" + LIBOBJS="$LIBOBJS thread.o"],[ AC_CHECK_LIB(cma, pthread_create, [AC_DEFINE(WITH_THREAD) AC_DEFINE(_POSIX_THREADS) Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.113.2.1 retrieving revision 1.113.2.2 diff -C2 -r1.113.2.1 -r1.113.2.2 *** configure 2000/08/10 03:52:03 1.113.2.1 --- configure 2000/08/10 18:13:25 1.113.2.2 *************** *** 1,8 **** #! /bin/sh ! # From configure.in Revision: 1.121 # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # --- 1,8 ---- #! /bin/sh [...3675 lines suppressed...] ! echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) --- 5398,5402 ---- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ! echo "$CONFIG_STATUS generated by autoconf version 2.14.1" exit 0 ;; -help | --help | --hel | --he | --h) *************** *** 5673,5676 **** chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 --- 5696,5699 ---- chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 From python-dev@python.org Thu Aug 10 19:32:07 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 11:32:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.70.2.3,2.70.2.4 Message-ID: <200008101832.LAA28292@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv28221/Objects Modified Files: Tag: cnri-16-start object.c Log Message: Merged patch 2.79->2.80 into the Python 1.6 branch; this patch causes str() and repr() to convert Unicode strings returned by __str__() and __repr__() methods to 8-bits strings in the default encoding. This is needed to pass the regression tests. Patch contributed by Marc-Andre Lemburg. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.70.2.3 retrieving revision 2.70.2.4 diff -C2 -r2.70.2.3 -r2.70.2.4 *** object.c 2000/08/07 19:11:41 2.70.2.3 --- object.c 2000/08/10 18:32:05 2.70.2.4 *************** *** 227,230 **** --- 227,238 ---- if (res == NULL) return NULL; + if (PyUnicode_Check(res)) { + PyObject* str; + str = PyUnicode_AsEncodedString(res, NULL, NULL); + if (str) { + Py_DECREF(res); + res = str; + } + } if (!PyString_Check(res)) { PyErr_Format(PyExc_TypeError, *************** *** 264,267 **** --- 272,283 ---- if (res == NULL) return NULL; + if (PyUnicode_Check(res)) { + PyObject* str; + str = PyUnicode_AsEncodedString(res, NULL, NULL); + if (str) { + Py_DECREF(res); + res = str; + } + } if (!PyString_Check(res)) { PyErr_Format(PyExc_TypeError, From python-dev@python.org Thu Aug 10 19:36:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 11:36:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.159.2.1,2.159.2.2 Message-ID: <200008101836.LAA00461@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv396/Python Modified Files: Tag: cnri-16-start bltinmodule.c Log Message: Merged patch 2.166->2.168 into the Python 1.6 branch; this patch changes the unicode() built-in function to use the PyUnicode_FromEncodedObject() API when appropriate. This is needed to pass the regression tests. Some unused variables in the unicode() implementation were removed as well. This patch contains changes contributed by Marc-Andre Lemburg and Tim Peters. Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.159.2.1 retrieving revision 2.159.2.2 diff -C2 -r2.159.2.1 -r2.159.2.2 *** bltinmodule.c 2000/08/03 16:50:35 2.159.2.1 --- bltinmodule.c 2000/08/10 18:36:25 2.159.2.2 *************** *** 136,141 **** { PyObject *v; - const void *buffer; - int len; char *encoding = NULL; char *errors = NULL; --- 136,139 ---- *************** *** 143,160 **** if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) ) return NULL; ! /* Special case: Unicode will stay Unicode */ ! if (PyUnicode_Check(v)) { ! if (encoding) { ! PyErr_SetString(PyExc_TypeError, ! "unicode() does not support decoding of Unicode objects"); ! return NULL; ! } ! Py_INCREF(v); ! return v; ! } ! /* Read raw data and decode it */ ! if (PyObject_AsReadBuffer(v, &buffer, &len)) ! return NULL; ! return PyUnicode_Decode((const char *)buffer, len, encoding, errors); } --- 141,145 ---- if ( !PyArg_ParseTuple(args, "O|ss:unicode", &v, &encoding, &errors) ) return NULL; ! return PyUnicode_FromEncodedObject(v, encoding, errors); } From python-dev@python.org Thu Aug 10 21:48:51 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 13:48:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.56,2.56.2.1 Message-ID: <200008102048.NAA05532@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv5523/Objects Modified Files: Tag: cnri-16-start unicodeobject.c Log Message: Make sure we pick up the prototype for fabs(); eliminates a compiler warning. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.56 retrieving revision 2.56.2.1 diff -C2 -r2.56 -r2.56.2.1 *** unicodeobject.c 2000/08/08 08:04:29 2.56 --- unicodeobject.c 2000/08/10 20:48:48 2.56.2.1 *************** *** 68,71 **** --- 68,73 ---- #include "ucnhash.h" + #include "mymath.h" /* need fabs() */ + #if defined(HAVE_LIMITS_H) #include From python-dev@python.org Thu Aug 10 22:19:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:19:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.73.2.1,2.73.2.2 Message-ID: <200008102119.OAA16495@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv16487/Objects Modified Files: Tag: cnri-16-start fileobject.c Log Message: Merge patch 2.77->2.78 into Python 1.6 branch. This is needed to avoid symbol clashes with glibc headers when _GNU_SOURCE is defined. (glibc defines getline(), which is also used as the name of a static function in this source file.) Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.73.2.1 retrieving revision 2.73.2.2 diff -C2 -r2.73.2.1 -r2.73.2.2 *** fileobject.c 2000/08/03 16:48:51 2.73.2.1 --- fileobject.c 2000/08/10 21:19:39 2.73.2.2 *************** *** 572,576 **** static PyObject * ! getline(f, n) PyFileObject *f; int n; --- 572,576 ---- static PyObject * ! get_line(f, n) PyFileObject *f; int n; *************** *** 694,698 **** if (((PyFileObject*)f)->f_fp == NULL) return err_closed(); ! return getline((PyFileObject *)f, n); } --- 694,698 ---- if (((PyFileObject*)f)->f_fp == NULL) return err_closed(); ! return get_line((PyFileObject *)f, n); } *************** *** 714,718 **** if (n < 0) n = 0; ! return getline(f, n); } --- 714,718 ---- if (n < 0) n = 0; ! return get_line(f, n); } *************** *** 808,812 **** if (sizehint > 0) { /* Need to complete the last line */ ! PyObject *rest = getline(f, 0); if (rest == NULL) { Py_DECREF(line); --- 808,812 ---- if (sizehint > 0) { /* Need to complete the last line */ ! PyObject *rest = get_line(f, 0); if (rest == NULL) { Py_DECREF(line); From python-dev@python.org Thu Aug 10 22:28:51 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:28:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include Python.h,2.16.2.1,2.16.2.2 Message-ID: <200008102128.OAA17444@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv17437/Include Modified Files: Tag: cnri-16-start Python.h Log Message: Merge in first half of 2.19->2.20 patch to pick up as many definitions from the glibc headers as possible. The second half is omitted since it was later disabled. This is needed to prevent warnings about strptime() in Modules/timemodule.c for glibc-based platforms. Original patch contributed by Marc-Andre Lemburg. Index: Python.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/Python.h,v retrieving revision 2.16.2.1 retrieving revision 2.16.2.2 diff -C2 -r2.16.2.1 -r2.16.2.2 *** Python.h 2000/08/03 16:48:06 2.16.2.1 --- Python.h 2000/08/10 21:28:49 2.16.2.2 *************** *** 3,6 **** --- 3,12 ---- /* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ + /* Enable compiler features; switching on C lib defines doesn't work + here, because the symbols haven't necessarily been defined yet. */ + #ifndef _GNU_SOURCE + # define _GNU_SOURCE 1 + #endif + /* Include nearly all Python header files */ From python-dev@python.org Thu Aug 10 22:40:13 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:40:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.8,2.8.2.1 Message-ID: <200008102140.OAA18434@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv18419 Modified Files: Tag: cnri-16-start _localemodule.c Log Message: Clean up compiler warning exposed by GCC's -Wall option: make sure Python.h is included before standard headers since we set _GNU_SOURCE there. This ensures that strdup() is prototyped. Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.8 retrieving revision 2.8.2.1 diff -C2 -r2.8 -r2.8.2.1 *** _localemodule.c 2000/05/03 22:30:13 2.8 --- _localemodule.c 2000/08/10 21:40:10 2.8.2.1 *************** *** 9,12 **** --- 9,14 ---- ******************************************************************/ + #include "Python.h" + #include #include *************** *** 15,19 **** #include #include - #include "Python.h" #ifdef macintosh char *strdup Py_PROTO((char *)); --- 17,20 ---- From python-dev@python.org Thu Aug 10 22:41:11 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 10 Aug 2000 14:41:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.14,2.15 Message-ID: <200008102141.OAA18495@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv18487 Modified Files: _localemodule.c Log Message: Clean up compiler warning exposed by GCC's -Wall option: make sure Python.h is included before standard headers since we set _GNU_SOURCE there. This ensures that strdup() is prototyped. Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** _localemodule.c 2000/08/03 02:06:15 2.14 --- _localemodule.c 2000/08/10 21:41:08 2.15 *************** *** 10,13 **** --- 10,15 ---- ******************************************************************/ + #include "Python.h" + #include #include *************** *** 16,21 **** #include #include - - #include "Python.h" #if defined(MS_WIN32) --- 18,21 ---- From python-dev@python.org Fri Aug 11 01:14:29 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Thu, 10 Aug 2000 17:14:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.92,2.93 Message-ID: <200008110014.RAA21386@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv19902/Objects Modified Files: object.c Log Message: Fix missing decrements of the recursive counter in PyObject_Compare(). Closes Patch #101065. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.92 retrieving revision 2.93 diff -C2 -r2.92 -r2.93 *** object.c 2000/08/04 15:36:13 2.92 --- object.c 2000/08/11 00:14:26 2.93 *************** *** 404,412 **** if (!PyInstance_Check(v)) return -PyObject_Compare(w, v); ! if (++_PyCompareState_nesting > NESTING_LIMIT) { PyObject *inprogress, *pair; inprogress = get_inprogress_dict(); if (inprogress == NULL) { return -1; } --- 404,414 ---- if (!PyInstance_Check(v)) return -PyObject_Compare(w, v); ! _PyCompareState_nesting++; ! if (_PyCompareState_nesting > NESTING_LIMIT) { PyObject *inprogress, *pair; inprogress = get_inprogress_dict(); if (inprogress == NULL) { + _PyCompareState_nesting--; return -1; } *************** *** 416,427 **** they're equal until shown otherwise */ Py_DECREF(pair); ! --_PyCompareState_nesting; return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { return -1; } res = do_cmp(v, w); - _PyCompareState_nesting--; /* XXX DelItem shouldn't fail */ PyDict_DelItem(inprogress, pair); --- 418,429 ---- they're equal until shown otherwise */ Py_DECREF(pair); ! _PyCompareState_nesting--; return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { + _PyCompareState_nesting--; return -1; } res = do_cmp(v, w); /* XXX DelItem shouldn't fail */ PyDict_DelItem(inprogress, pair); *************** *** 430,433 **** --- 432,436 ---- res = do_cmp(v, w); } + _PyCompareState_nesting--; if (res == NULL) return -1; *************** *** 487,491 **** return (v < w) ? -1 : 1; } ! if (++_PyCompareState_nesting > NESTING_LIMIT && (vtp->tp_as_mapping || (vtp->tp_as_sequence && !PyString_Check(v)))) { --- 490,495 ---- return (v < w) ? -1 : 1; } ! _PyCompareState_nesting++; ! if (_PyCompareState_nesting > NESTING_LIMIT && (vtp->tp_as_mapping || (vtp->tp_as_sequence && !PyString_Check(v)))) { *************** *** 494,497 **** --- 498,502 ---- inprogress = get_inprogress_dict(); if (inprogress == NULL) { + _PyCompareState_nesting--; return -1; } *************** *** 500,512 **** /* already comparing these objects. assume they're equal until shown otherwise */ - _PyCompareState_nesting--; Py_DECREF(pair); return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { return -1; } result = (*vtp->tp_compare)(v, w); - _PyCompareState_nesting--; PyDict_DelItem(inprogress, pair); /* XXX shouldn't fail */ Py_DECREF(pair); --- 505,517 ---- /* already comparing these objects. assume they're equal until shown otherwise */ Py_DECREF(pair); + _PyCompareState_nesting--; return 0; } if (PyDict_SetItem(inprogress, pair, pair) == -1) { + _PyCompareState_nesting--; return -1; } result = (*vtp->tp_compare)(v, w); PyDict_DelItem(inprogress, pair); /* XXX shouldn't fail */ Py_DECREF(pair); *************** *** 514,517 **** --- 519,523 ---- result = (*vtp->tp_compare)(v, w); } + _PyCompareState_nesting--; return result; } From python-dev@python.org Fri Aug 11 03:15:12 2000 From: python-dev@python.org (Andrew Kuchling) Date: Thu, 10 Aug 2000 22:15:12 -0400 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.141,1.142 In-Reply-To: <200008092111.OAA28623@slayer.i.sourceforge.net>; from esr@users.sourceforge.net on Wed, Aug 09, 2000 at 02:11:10PM -0700 References: <200008092111.OAA28623@slayer.i.sourceforge.net> Message-ID: <20000810221512.A455@newcnri.cnri.reston.va.us> On Wed, Aug 09, 2000 at 02:11:10PM -0700, Eric S. Raymond wrote: >*** configure.in 2000/08/05 23:28:51 1.141 >--- configure.in 2000/08/09 21:11:06 1.142 >+ # Cope with the DB mess. If we detect libdba, assume it's a version 2 >+ # or later DB and should be linked first (before the DB 1.xx stuff in glibc). This patch crept in by accident, and is unrelated to making curses.wrapper support colour. --amk From python-dev@python.org Fri Aug 11 04:54:20 2000 From: python-dev@python.org (Moshe Zadka) Date: Thu, 10 Aug 2000 20:54:20 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0206.txt,1.7,1.8 Message-ID: <200008110354.UAA17537@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv16606 Modified Files: pep-0206.txt Log Message: Some changes in wording, and a different division as discussed with Greg Ward . Index: pep-0206.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0206.txt,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** pep-0206.txt 2000/07/29 10:11:19 1.7 --- pep-0206.txt 2000/08/11 03:54:16 1.8 *************** *** 36,54 **** The Proposed Solution ! The proposed solution is to download a few important third-party ! libraries, and distribute them with the source distribution of ! Python. In addition, the build procedure will be changed to build ! those libraries by default, and build the Python modules which ! rely on them linked against those libraries. Individual users ! will still be able to link the Python modules against already installed libraries, or disable them completely. Additionally, some Open Source third-party Python modules will ! also be distributed together with the source distribution. The ! difference between those and external libraries is that the latter are distributed in order to make the Python distribution self ! contained, and the former are added so there will be new functionality in out-of-the-box Python. Here is the tentative list of libraries which are proposed to be dealt with in this manner, and where they can be downloaded: --- 36,67 ---- The Proposed Solution ! The proposed solution is to maintain an alternate form of distribution, ! nicknamed the "sumo" interpreter. It will be structured as a core ! interpreter + extra useful libraries. In addition, the build procedure ! will be changed to build those libraries by default, and build the Python ! modules which rely on them linked against those libraries. Individual ! users will still be able to link the Python modules against already installed libraries, or disable them completely. Additionally, some Open Source third-party Python modules will ! also be distributed in the "sumo" distribution. The ! difference between those and external libraries is that the former are distributed in order to make the Python distribution self ! contained, and the latter are added so there will be new functionality in out-of-the-box Python. + Python Advanced Library + + Since it is decided that the additions to the interpreter will live + in a seperate directory, they can even be distributed seperately, + as an additional library. This is called the "Python Advanced Library", + or PAL. This will also solve the problem of an advanced library module + failing -- the core interpreter will still be built, tested and installed. + Since the compilation of the other modules be helped by Python scripts, + it is quite possible that it will even install as many modules as it + can. + + Suggested Libraries and Modules + Here is the tentative list of libraries which are proposed to be dealt with in this manner, and where they can be downloaded: *************** *** 89,93 **** GNU General Public License and the GNU Lesser General Public License, no such sources are proposed here to be added to the ! Python interpreter. Currently, the Python interpreter is distributed under a closed-source-friendly license, which means that it is possible to include it in a closed source product. --- 102,106 ---- GNU General Public License and the GNU Lesser General Public License, no such sources are proposed here to be added to the ! sumo interpreter. Currently, the Python interpreter is distributed under a closed-source-friendly license, which means that it is possible to include it in a closed source product. *************** *** 103,107 **** What should the build procedure look like? ! What to do if compilation of a supporting library fails? ESR also mentioned libpng, but I don't know of a Python module --- 116,120 ---- What should the build procedure look like? ! How are the additional modules tested? ESR also mentioned libpng, but I don't know of a Python module From python-dev@python.org Fri Aug 11 08:48:39 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 11 Aug 2000 00:48:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.21,1.22 Message-ID: <200008110748.AAA20098@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20051 Modified Files: mailbox.py Log Message: Use built in function filter instead of doing it laboriously by hand. Index: mailbox.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/mailbox.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** mailbox.py 2000/08/10 03:05:26 1.21 --- mailbox.py 2000/08/11 07:48:36 1.22 *************** *** 158,166 **** pat = re.compile('^[1-9][0-9]*$') self.dirname = dirname ! files = os.listdir(self.dirname) ! list = [] ! for f in files: ! if pat.match(f): ! list.append(f) list = map(long, list) list.sort() --- 158,165 ---- pat = re.compile('^[1-9][0-9]*$') self.dirname = dirname ! # the three following lines could be combined into: ! # list = map(long, filter(pat.match, os.listdir(self.dirname))) ! list = os.listdir(self.dirname) ! list = filter(pat.match, list) list = map(long, list) list.sort() From python-dev@python.org Fri Aug 11 12:43:13 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 11 Aug 2000 04:43:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include unicodeobject.h,2.18,2.19 Message-ID: <200008111143.EAA04968@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv4881/Include Modified Files: unicodeobject.h Log Message: Added #fndef's to avoid compiler errors. Index: unicodeobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/unicodeobject.h,v retrieving revision 2.18 retrieving revision 2.19 diff -C2 -r2.18 -r2.19 *** unicodeobject.h 2000/08/03 18:42:28 2.18 --- unicodeobject.h 2000/08/11 11:43:10 2.19 *************** *** 79,83 **** #ifdef HAVE_USABLE_WCHAR_T ! # define HAVE_WCHAR_H #endif --- 79,85 ---- #ifdef HAVE_USABLE_WCHAR_T ! # ifndef HAVE_WCHAR_H ! # define HAVE_WCHAR_H ! # endif #endif From python-dev@python.org Fri Aug 11 12:48:36 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Fri, 11 Aug 2000 04:48:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.12,2.13 Message-ID: <200008111148.EAA11300@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv8448/Include Modified Files: pyport.h Log Message: #include reordering so that extern "C" does not interfere with standard C++ specific includes. Closes patch 101061. Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** pyport.h 2000/08/10 04:23:29 2.12 --- pyport.h 2000/08/11 11:48:33 2.13 *************** *** 38,41 **** --- 38,79 ---- #endif + #include /* Moved here from the math section, before extern "C" */ + + /******************************************** + * WRAPPER FOR and/or * + ********************************************/ + + #ifdef TIME_WITH_SYS_TIME + #include + #include + #else /* !TIME_WITH_SYS_TIME */ + #ifdef HAVE_SYS_TIME_H + #include + #else /* !HAVE_SYS_TIME_H */ + #include + #endif /* !HAVE_SYS_TIME_H */ + #endif /* !TIME_WITH_SYS_TIME */ + + + /****************************** + * WRAPPER FOR * + ******************************/ + + /* NB caller must include */ + + #ifdef HAVE_SYS_SELECT_H + + #include + + #else /* !HAVE_SYS_SELECT_H */ + + #ifdef USE_GUSI1 + /* If we don't have sys/select the definition may be in unistd.h */ + #include + #endif + + #endif /* !HAVE_SYS_SELECT_H */ + + #ifdef __cplusplus /* Move this down here since some C++ #include's don't like to be included *************** *** 44,47 **** --- 82,86 ---- #endif + /* Py_ARITHMETIC_RIGHT_SHIFT * C doesn't define whether a right-shift of a signed integer sign-extends *************** *** 86,90 **** - /************************************************************************** Prototypes that are missing from the standard include files on some systems --- 125,128 ---- *************** *** 166,171 **** #endif - #include - #ifndef HAVE_HYPOT #ifdef __MWERKS__ --- 204,207 ---- *************** *** 242,280 **** - /******************************************** - * WRAPPER FOR and/or * - ********************************************/ - - #ifdef TIME_WITH_SYS_TIME - #include - #include - #else /* !TIME_WITH_SYS_TIME */ - #ifdef HAVE_SYS_TIME_H - #include - #else /* !HAVE_SYS_TIME_H */ - #include - #endif /* !HAVE_SYS_TIME_H */ - #endif /* !TIME_WITH_SYS_TIME */ - - - /****************************** - * WRAPPER FOR * - ******************************/ - - /* NB caller must include */ - - #ifdef HAVE_SYS_SELECT_H - - #include - - #else /* !HAVE_SYS_SELECT_H */ - - #ifdef USE_GUSI1 - /* If we don't have sys/select the definition may be in unistd.h */ - #include - #endif - - #endif /* !HAVE_SYS_SELECT_H */ - /* If the fd manipulation macros aren't defined, here is a set that should do the job */ --- 278,281 ---- *************** *** 307,310 **** --- 308,312 ---- #endif /* fd manipulation macros */ + #ifdef __cplusplus From python-dev@python.org Fri Aug 11 14:58:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 06:58:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules makesetup,1.26,1.27 Message-ID: <200008111358.GAA25812@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv25787/Modules Modified Files: makesetup Log Message: Add support for FreeBSD --rpath linker option; this is equivalent to -R on Solaris and -rpath on IRIX. This closes SourceForge bug #110613 (Jitterbug PR#202), reported by . Index: makesetup =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/makesetup,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** makesetup 2000/07/23 00:02:15 1.26 --- makesetup 2000/08/11 13:58:37 1.27 *************** *** 144,147 **** --- 144,148 ---- -Xlinker) libs="$libs $arg"; skip=libs;; -rpath) libs="$libs $arg"; skip=libs;; + --rpath) libs="$libs $arg"; skip=libs;; -[A-Zl]*) libs="$libs $arg";; *.a) libs="$libs $arg";; From python-dev@python.org Fri Aug 11 15:18:47 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 11 Aug 2000 07:18:47 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0211.txt,1.1,1.2 Message-ID: <200008111418.HAA01280@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1064 Modified Files: pep-0211.txt Log Message: First draft, without feedback from others. Index: pep-0211.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0211.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0211.txt 2000/07/15 23:25:49 1.1 --- pep-0211.txt 2000/08/11 14:18:44 1.2 *************** *** 1,9 **** PEP: 211 ! Title: Adding New Operators to Python Version: $Revision$ Owner: gvwilson@nevex.com (Greg Wilson) Python-Version: 2.1 ! Status: Incomplete --- 1,357 ---- PEP: 211 ! Title: Adding New Linear Algebra Operators to Python Version: $Revision$ Owner: gvwilson@nevex.com (Greg Wilson) Python-Version: 2.1 ! Created: 15-Jul-2000 ! Status: Draft ! Post-History: + + Introduction + + This PEP describes a proposal to add linear algebra operators to + Python 2.0. It discusses why such operators are desirable, and + alternatives that have been considered and discarded. This PEP + summarizes discussions held in mailing list forums, and provides + URLs for further information, where appropriate. The CVS revision + history of this file contains the definitive historical record. + + + Proposal + + Add a single new infix binary operator '@' ("across"), and + corresponding special methods "__across__()" and "__racross__()". + This operator will perform mathematical matrix multiplication on + NumPy arrays, and generate cross-products when applied to built-in + sequence types. No existing operator definitions will be changed. + + + Background + + Computers were invented to do arithmetic, as was the first + high-level programming language, Fortran. While Fortran was a + great advance on its machine-level predecessors, there was still a + very large gap between its syntax and the notation used by + mathematicians. The most influential effort to close this gap was + APL [1]: + + The language [APL] was invented by Kenneth E. Iverson while at + Harvard University. The language, originally titled "Iverson + Notation", was designed to overcome the inherent ambiguities + and points of confusion found when dealing with standard + mathematical notation. It was later described in 1962 in a + book simply titled "A Programming Language" (hence APL). + Towards the end of the sixties, largely through the efforts of + IBM, the computer community gained its first exposure to + APL. Iverson received the Turing Award in 1980 for this work. + + APL's operators supported both familiar algebraic operations, such + as vector dot product and matrix multiplication, and a wide range + of structural operations, such as stitching vectors together to + create arrays. Its notation was exceptionally cryptic: many of + its symbols did not exist on standard keyboards, and expressions + had to be read right to left. + + Most subsequent work on numerical languages, such as Fortran-90, + MATLAB, and Mathematica, has tried to provide the power of APL + without the obscurity. Python's NumPy [2] has most of the + features that users of such languages expect, but these are + provided through named functions and methods, rather than + overloaded operators. This makes NumPy clumsier than its + competitors. + + One way to make NumPy more competitive is to provide greater + syntactic support in Python itself for linear algebra. This + proposal therefore examines the requirements that new linear + algebra operators in Python must satisfy, and proposes a syntax + and semantics for those operators. + + + Requirements + + The most important requirement is that there be minimal impact on + the existing definition of Python. The proposal must not break + existing programs, except possibly those that use NumPy. + + The second most important requirement is to be able to do both + elementwise and mathematical matrix multiplication using infix + notation. The nine cases that must be handled are: + + |5 6| * 9 = |45 54| MS: matrix-scalar multiplication + |7 8| |63 72| + + 9 * |5 6| = |45 54| SM: scalar-matrix multiplication + |7 8| |63 72| + + |2 3| * |4 5| = |8 15| VE: vector elementwise multiplication + + + |2 3| * |4| = 23 VD: vector dot product + |5| + + |2| * |4 5| = | 8 10| VO: vector outer product + |3| |12 15| + + |1 2| * |5 6| = | 5 12| ME: matrix elementwise multiplication + |3 4| |7 8| |21 32| + + |1 2| * |5 6| = |19 22| MM: mathematical matrix multiplication + |3 4| |7 8| |43 50| + + |1 2| * |5 6| = |19 22| VM: vector-matrix multiplication + |7 8| + + |5 6| * |1| = |17| MV: matrix-vector multiplication + |7 8| |2| |23| + + Note that 1-dimensional vectors are treated as rows in VM, as + columns in MV, and as both in VD and VO. Both are special cases + of 2-dimensional matrices (Nx1 and 1xN respectively). It may + therefore be reasonable to define the new operator only for + 2-dimensional arrays, and provide an easy (and efficient) way for + users to convert 1-dimensional structures to 2-dimensional. + Behavior of a new multiplication operator for built-in types may + then: + + (a) be a parsing error (possible only if a constant is one of the + arguments, since names are untyped in Python); + + (b) generate a runtime error; or + + (c) be derived by plausible extension from its behavior in the + two-dimensional case. + + Third, syntactic support should be considered for three other + operations: + + T + (a) transposition: A => A[j, i] for A[i, j] + + -1 + (b) inverse: A => A' such that A' * A = I (the identity matrix) + + (c) solution: A/b => x such that A * x = b + A\b => x such that x * A = b + + With regard to (c), it is worth noting that the two syntaxes used + were invented by programmers, not mathematicians. Mathematicians + do not have a standard, widely-used notation for matrix solution. + + It is also worth noting that dozens of matrix inversion and + solution algorithms are widely used. MATLAB and its kin bind + their inversion and/or solution operators to one which is + reasonably robust in most cases, and require users to call + functions or methods to access others. + + Fourth, confusion between Python's notation and those of MATLAB + and Fortran-90 should be avoided. In particular, mathematical + matrix multiplication (case MM) should not be represented as '.*', + since: + + (a) MATLAB uses prefix-'.' forms to mean 'elementwise', and raw + forms to mean "mathematical" [4]; and + + (b) even if the Python parser can be taught how to handle dotted + forms, '1.*A' will still be visually ambiguous [4]. + + One anti-requirement is that new operators are not needed for + addition, subtraction, bitwise operations, and so on, since + mathematicians already treat them elementwise. + + + Proposal: + + The meanings of all existing operators will be unchanged. In + particular, 'A*B' will continue to be interpreted elementwise. + This takes care of the cases MS, SM, VE, and ME, and ensures + minimal impact on existing programs. + + A new operator '@' (pronounced "across") will be added to Python, + along with two special methods, "__across__()" and + "__racross__()", with the usual semantics. + + NumPy will overload "@" to perform mathematical multiplication of + arrays where shapes permit, and to throw an exception otherwise. + The matrix class's implementation of "@" will treat built-in + sequence types as if they were column vectors. This takes care of + the cases MM and MV. + + An attribute "T" will be added to the NumPy array type, such that + "m.T" is: + + (a) the transpose of "m" for a 2-dimensional array + + (b) the 1xN matrix transpose of "m" if "m" is a 1-dimensional + array; or + + (c) a runtime error for an array with rank >= 3. + + This attribute will alias the memory of the base object. NumPy's + "transpose()" function will be extended to turn built-in sequence + types into row vectors. This takes care of the VM, VD, and VO + cases. We propose an attribute because: + + (a) the resulting notation is similar to the 'superscript T' (at + least, as similar as ASCII allows), and + + (b) it signals that the transposition aliases the original object. + + No new operators will be defined to mean "solve a set of linear + equations", or "invert a matrix". Instead, NumPy will define a + value "inv", which will be recognized by the exponentiation + operator, such that "A ** inv" is the inverse of "A". This is + similar in spirit to NumPy's existing "newaxis" value. + + (Optional) When applied to sequences, the operator will return a + list of tuples containing the cross-product of their elements in + left-to-right order: + + >>> [1, 2] @ (3, 4) + [(1, 3), (1, 4), (2, 3), (2, 4)] + + >>> [1, 2] @ (3, 4) @ (5, 6) + [(1, 3, 5), (1, 3, 6), + (1, 4, 5), (1, 4, 6), + (2, 3, 5), (2, 3, 6), + (2, 4, 5), (2, 4, 6)] + + This will require the same kind of special support from the parser + as chained comparisons (such as "a>> for (i, j) in [1, 2] @ [3, 4]: + >>> print i, j + 1 3 + 1 4 + 2 3 + 2 4 + + as a short-hand for the common nested loop idiom: + + >>> for i in [1, 2]: + >>> for j in [3, 4]: + >>> print i, j + + Response to the 'lockstep loop' questionnaire [5] indicated that + newcomers would be comfortable with this (so comfortable, in fact, + that most of them interpreted most multi-loop 'zip' syntaxes [6] + as implementing single-stage nesting). + + + Alternatives: + + 01. Don't add new operators --- stick to functions and methods. + + Python is not primarily a numerical language. It is not worth + complexifying the language for this special case --- NumPy's + success is proof that users can and will use functions and methods + for linear algebra. + + On the positive side, this maintains Python's simplicity. Its + weakness is that support for real matrix multiplication (and, to a + lesser extent, other linear algebra operations) is frequently + requested, as functional forms are cumbersome for lengthy + formulas, and do not respect the operator precedence rules of + conventional mathematics. In addition, the method form is + asymmetric in its operands. + + 02. Introduce prefixed forms of existing operators, such as "@*" + or "~*", or used boxed forms, such as "[*]" or "%*%". + + There are (at least) three objections to this. First, either form + seems to imply that all operators exist in both forms. This is + more new entities than the problem merits, and would require the + addition of many new overloadable methods, such as __at_mul__. + + Second, while it is certainly possible to invent semantics for + these new operators for built-in types, this would be a case of + the tail wagging the dog, i.e. of letting the existence of a + feature "create" a need for it. + + Finally, the boxed forms make human parsing more complex, e.g.: + + A[*] = B vs. A[:] = B + + 03. (From Moshe Zadka [7], and also considered by Huaiyu Zhou [8] + in his proposal [9]) Retain the existing meaning of all + operators, but create a behavioral accessor for arrays, such + that: + + A * B + + is elementwise multiplication (ME), but: + + A.m() * B.m() + + is mathematical multiplication (MM). The method "A.m()" would + return an object that aliased A's memory (for efficiency), but + which had a different implementation of __mul__(). + + The advantage of this method is that it has no effect on the + existing implementation of Python: changes are localized in the + Numeric module. The disadvantages are: + + (a) The semantics of "A.m() * B", "A + B.m()", and so on would + have to be defined, and there is no "obvious" choice for them. + + (b) Aliasing objects to trigger different operator behavior feels + less Pythonic than either calling methods (as in the existing + Numeric module) or using a different operator. This PEP is + primarily about look and feel, and about making Python more + attractive to people who are not already using it. + + 04. (From a proposal [9] by Huaiyu Zhou [8]) Introduce a "delayed + inverse" attribute, similar to the "transpose" attribute + advocated in the third part of this proposal. The expression + "a.I" would be a delayed handle on the inverse of the matrix + "a", which would be evaluated in context as required. For + example, "a.I * b" and "b * a.I" would solve sets of linear + equations, without actually calculating the inverse. + + The main drawback of this proposal it is reliance on lazy + evaluation, and even more on "smart" lazy evaluation (i.e. the + operation performed depends on the context in which the evaluation + is done). The BDFL has so far resisted introducing LE into + Python. + + + Related Proposals + + 0203 : Augmented Assignments + + If new operators for linear algebra are introduced, it may + make sense to introduce augmented assignment forms for + them. + + 0207 : Rich Comparisons + + It may become possible to overload comparison operators + such as '<' so that an expression such as 'A < B' returns + an array, rather than a scalar value. + + 0209 : Adding Multidimensional Arrays + + Multidimensional arrays are currently an extension to + Python, rather than a built-in type. + + + Acknowledgments: + + I am grateful to Huaiyu Zhu [8] for initiating this discussion, + and for some of the ideas and terminology included below. + + + References: + + [1] http://www.acm.org/sigapl/whyapl.htm + [2] http://numpy.sourceforge.net + [3] PEP-0203.txt "Augmented Assignments". + [4] http://bevo.che.wisc.edu/octave/doc/octave_9.html#SEC69 + [5] http://www.python.org/pipermail/python-dev/2000-July/013139.html + [6] PEP-0201.txt "Lockstep Iteration" + [7] Moshe Zadka is 'moshez@math.huji.ac.il'. + [8] Huaiyu Zhu is 'hzhu@users.sourceforge.net' + [9] http://www.python.org/pipermail/python-list/2000-August/112529.html From python-dev@python.org Fri Aug 11 15:50:49 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 07:50:49 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.121.2.2,1.121.2.3 configure,1.113.2.2,1.113.2.3 Message-ID: <200008111450.HAA08677@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv8579 Modified Files: Tag: cnri-16-start configure.in configure Log Message: Merge in patch 1.121->1.122 so that socklen_t is properly checked for. This avoids a compiler warning on some systems. Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.121.2.2 retrieving revision 1.121.2.3 diff -C2 -r1.121.2.2 -r1.121.2.3 *** configure.in 2000/08/10 18:13:25 1.121.2.2 --- configure.in 2000/08/11 14:50:45 1.121.2.3 *************** *** 357,361 **** signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ ! sys/param.h sys/select.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h) AC_HEADER_DIRENT --- 357,361 ---- signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ ! sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h) AC_HEADER_DIRENT *************** *** 381,385 **** AC_TYPE_SIZE_T AC_TYPE_UID_T - AC_CHECK_TYPE(socklen_t, int) # Sizes of various common basic types --- 381,384 ---- *************** *** 1074,1077 **** --- 1073,1085 ---- fi], [AC_MSG_RESULT(no)]) + + # THIS MUST BE LAST, IT CAN BREAK OTHER TESTS! + # Add sys/socket.h to confdefs.h + cat >> confdefs.h <<\EOF + #ifdef HAVE_SYS_SOCKET_H + #include + #endif + EOF + AC_CHECK_TYPE(socklen_t, int) # generate output files Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.113.2.2 retrieving revision 1.113.2.3 diff -C2 -r1.113.2.2 -r1.113.2.3 *** configure 2000/08/10 18:13:25 1.113.2.2 --- configure 2000/08/11 14:50:45 1.113.2.3 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.121.2.1 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.121.2.2 [...2747 lines suppressed...] + egrep "(^|[^a-zA-Z_0-9])socklen_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + eval "ac_cv_type_socklen_t=yes" + else + rm -rf conftest* + eval "ac_cv_type_socklen_t=no" + fi + rm -f conftest* + + fi + if eval "test \"`echo '$ac_cv_type_'socklen_t`\" = yes"; then + echo "$ac_t""yes" 1>&6 + else + echo "$ac_t""no" 1>&6 + cat >> confdefs.h < Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv10623/api Modified Files: api.tex Log Message: ANY becomes void, to reflect the requirement for ANSI C. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -r1.74 -r1.75 *** api.tex 2000/07/13 23:58:16 1.74 --- api.tex 2000/08/11 17:07:32 1.75 *************** *** 3038,3045 **** \end{cfuncdesc} ! \begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, ! int ppos, ! PyObject **pkey, ! PyObject **pvalue} \end{cfuncdesc} --- 3038,3043 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{int}{PyDict_Next}{PyDictObject *p, int *ppos, ! PyObject **pkey, PyObject **pvalue} \end{cfuncdesc} *************** *** 4217,4232 **** ! \begin{ctypedesc}{ANY*} ! The type used to represent arbitrary blocks of memory. Values of this ! type should be cast to the specific type that is needed. ! \end{ctypedesc} ! ! \begin{cfuncdesc}{ANY*}{PyMem_Malloc}{size_t n} ! Allocates \var{n} bytes and returns a pointer of type \ctype{ANY*} to the allocated memory, or \NULL{} if the request fails. Requesting zero bytes returns a non-\NULL{} pointer. \end{cfuncdesc} ! \begin{cfuncdesc}{ANY*}{PyMem_Realloc}{ANY *p, size_t n} Resizes the memory block pointed to by \var{p} to \var{n} bytes. The contents will be unchanged to the minimum of the old and the new --- 4215,4225 ---- ! \begin{cfuncdesc}{void*}{PyMem_Malloc}{size_t n} ! Allocates \var{n} bytes and returns a pointer of type \ctype{void*} to the allocated memory, or \NULL{} if the request fails. Requesting zero bytes returns a non-\NULL{} pointer. \end{cfuncdesc} ! \begin{cfuncdesc}{void*}{PyMem_Realloc}{void *p, size_t n} Resizes the memory block pointed to by \var{p} to \var{n} bytes. The contents will be unchanged to the minimum of the old and the new *************** *** 4238,4242 **** \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_Free}{ANY *p} Frees the memory block pointed to by \var{p}, which must have been returned by a previous call to \cfunction{PyMem_Malloc()} or --- 4231,4235 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_Free}{void *p} Frees the memory block pointed to by \var{p}, which must have been returned by a previous call to \cfunction{PyMem_Malloc()} or *************** *** 4246,4260 **** \end{cfuncdesc} ! \begin{cfuncdesc}{ANY*}{Py_Malloc}{size_t n} Same as \cfunction{PyMem_Malloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{ANY*}{Py_Realloc}{ANY *p, size_t n} Same as \cfunction{PyMem_Realloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{void}{Py_Free}{ANY *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} --- 4239,4253 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void*}{Py_Malloc}{size_t n} Same as \cfunction{PyMem_Malloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{void*}{Py_Realloc}{void *p, size_t n} Same as \cfunction{PyMem_Realloc()}, but calls \cfunction{PyErr_NoMemory()} on failure. \end{cfuncdesc} ! \begin{cfuncdesc}{void}{Py_Free}{void *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} *************** *** 4269,4273 **** \end{cfuncdesc} ! \begin{cfuncdesc}{\var{TYPE}*}{PyMem_RESIZE}{ANY *p, TYPE, size_t n} Same as \cfunction{PyMem_Realloc()}, but the memory block is resized to \code{(\var{n} * sizeof(\var{TYPE}))} bytes. Returns a pointer --- 4262,4266 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{\var{TYPE}*}{PyMem_RESIZE}{void *p, TYPE, size_t n} Same as \cfunction{PyMem_Realloc()}, but the memory block is resized to \code{(\var{n} * sizeof(\var{TYPE}))} bytes. Returns a pointer *************** *** 4275,4279 **** \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_DEL}{ANY *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} --- 4268,4272 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyMem_DEL}{void *p} Same as \cfunction{PyMem_Free()}. \end{cfuncdesc} From python-dev@python.org Fri Aug 11 18:09:25 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 10:09:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ext ext.tex,1.81,1.82 Message-ID: <200008111709.KAA10798@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ext In directory slayer.i.sourceforge.net:/tmp/cvs-serv10791/ext Modified Files: ext.tex Log Message: Markup errors: \cfuntion -> \cfunction Index: ext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ext/ext.tex,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -r1.81 -r1.82 *** ext.tex 2000/08/03 19:38:07 1.81 --- ext.tex 2000/08/11 17:09:23 1.82 *************** *** 732,736 **** the default encoding is used. ! \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated --- 732,736 ---- the default encoding is used. ! \cfunction{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated *************** *** 754,758 **** If \var{*buffer} points a \NULL{} pointer, ! \cfuntion{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated --- 754,758 ---- If \var{*buffer} points a \NULL{} pointer, ! \cfunction{PyArg_ParseTuple()} will allocate a buffer of the needed size using \cfunction{PyMem_NEW()}, copy the encoded data into this buffer and adjust \var{*buffer} to reference the newly allocated *************** *** 761,765 **** If \var{*buffer} points to a non-\NULL{} pointer (an already allocated ! buffer), \cfuntion{PyArg_ParseTuple()} will use this location as buffer and interpret \var{*buffer_length} as buffer size. It will then copy the encoded data into the buffer and 0-terminate it. Buffer --- 761,765 ---- If \var{*buffer} points to a non-\NULL{} pointer (an already allocated ! buffer), \cfunction{PyArg_ParseTuple()} will use this location as buffer and interpret \var{*buffer_length} as buffer size. It will then copy the encoded data into the buffer and 0-terminate it. Buffer From python-dev@python.org Fri Aug 11 18:36:24 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 10:36:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html Makefile,1.33,1.34 Message-ID: <200008111736.KAA12901@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv12894/html Modified Files: Makefile Log Message: Include the document dependencies earlier so that documents are rebuilt when they need to be. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/Makefile,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** Makefile 2000/07/31 15:55:22 1.33 --- Makefile 2000/08/11 17:36:21 1.34 *************** *** 62,65 **** --- 62,67 ---- $(TOPDIR)/tools/node2label.pl + include ../Makefile.deps + # The index.html target is at the end since it screws up font-lock. *************** *** 101,106 **** $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/dist/dist.tex - - include ../Makefile.deps $(PAPERDIR)/api.aux: $(APIFILES) --- 103,106 ---- From python-dev@python.org Fri Aug 11 18:37:36 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 10:37:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/doc doc.tex,1.23,1.24 Message-ID: <200008111737.KAA13083@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv13076/doc Modified Files: doc.tex Log Message: Added material about documenting packages, so that the use of module markup for packages is clear. Index: doc.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/doc/doc.tex,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** doc.tex 2000/07/25 19:27:17 1.23 --- doc.tex 2000/08/11 17:37:33 1.24 *************** *** 611,614 **** --- 611,634 ---- \end{verbatim} + Python packages\index{packages} --- collections of modules that can + be described as a unit --- are documented using the same markup as + modules. The name for a module in a package should be typed in + ``fully qualified'' form (i.e., it should include the package name). + For example, a module ``foo'' in package ``bar'' should be marked as + \samp{\e module\{bar.foo\}}, and the beginning of the reference + section would appear as: + + \begin{verbatim} + \section{\module{bar.foo} --- + Module from the \module{bar} package} + + \declaremodule{extension}{bar.foo} + \modulesynopsis{Nifty module from the \module{bar} package.} + \moduleauthor{Jane Doe}{jane.doe@frobnitz.org} + \end{verbatim} + + Note that the name of a package is also marked using + \macro{module}. + \begin{macrodesc}{declaremodule}{\op{key}\p{type}\p{name}} Requires two parameters: module type (\samp{standard}, From python-dev@python.org Fri Aug 11 20:03:01 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 12:03:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_largefile.py,NONE,1.1 regrtest.py,1.21,1.22 Message-ID: <200008111903.MAA00817@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv29798/Lib/test Modified Files: regrtest.py Added Files: test_largefile.py Log Message: Add largefile support for Linux64 and WIn64. Add test_largefile and some minor change to regrtest.py to allow optional running of test_largefile ('cause it's slow on Win64). This closes patches: http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100510&group_id=5470 and http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100511&group_id=5470 --- NEW FILE --- #!python #---------------------------------------------------------------------- # test largefile support on system where this makes sense # #XXX how to only run this when support is there #XXX how to only optionally run this, it will take along time #---------------------------------------------------------------------- import test_support import os, struct, stat, sys # only run if the current system support large files f = open(test_support.TESTFN, 'w') try: # 2**31 == 2147483648 f.seek(2147483649L) except OverflowError: raise test_support.TestSkipped, "platform does not have largefile support" else: f.close() # create >2GB file (2GB = 2147483648 bytes) size = 2500000000L name = test_support.TESTFN # on Windows this test comsumes large resources: # it takes a long time to build the >2GB file and takes >2GB of disk space # therefore test_support.use_large_resources must be defined to run this test if sys.platform[:3] == 'win' and not test_support.use_large_resources: raise test_support.TestSkipped, \ "test requires %s bytes and a long time to run" % str(size) def expect(got_this, expect_this): if test_support.verbose: print '%s =?= %s ...' % (`got_this`, `expect_this`), if got_this != expect_this: if test_support.verbose: print 'no' raise test_support.TestFailed, 'got %s, but expected %s' %\ (str(got_this), str(expect_this)) else: if test_support.verbose: print 'yes' # test that each file function works as expected for a large (i.e. >2GB, do # we have to check >4GB) files if test_support.verbose: print 'create large file via seek (may be sparse file) ...' f = open(name, 'w') f.seek(size) f.write('a') f.flush() expect(os.fstat(f.fileno())[stat.ST_SIZE], size+1) if test_support.verbose: print 'check file size with os.fstat' f.close() if test_support.verbose: print 'check file size with os.stat' expect(os.stat(name)[stat.ST_SIZE], size+1) if test_support.verbose: print 'play around with seek() and read() with the built largefile' f = open(name, 'r') expect(f.tell(), 0) expect(f.read(1), '\000') expect(f.tell(), 1) f.seek(0) expect(f.tell(), 0) f.seek(0, 0) expect(f.tell(), 0) f.seek(42) expect(f.tell(), 42) f.seek(42, 0) expect(f.tell(), 42) f.seek(42, 1) expect(f.tell(), 84) f.seek(0, 1) expect(f.tell(), 84) f.seek(0, 2) # seek from the end expect(f.tell(), size + 1 + 0) f.seek(-10, 2) expect(f.tell(), size + 1 - 10) f.seek(-size-1, 2) expect(f.tell(), 0) f.seek(size) expect(f.tell(), size) expect(f.read(1), 'a') # the 'a' that was written at the end of the file above f.close() if test_support.verbose: print 'play around with os.lseek() with the built largefile' f = open(name, 'r') expect(os.lseek(f.fileno(), 0, 0), 0) expect(os.lseek(f.fileno(), 42, 0), 42) expect(os.lseek(f.fileno(), 42, 1), 84) expect(os.lseek(f.fileno(), 0, 1), 84) expect(os.lseek(f.fileno(), 0, 2), size+1+0) expect(os.lseek(f.fileno(), -10, 2), size+1-10) expect(os.lseek(f.fileno(), -size-1, 2), 0) expect(os.lseek(f.fileno(), size, 0), size) expect(f.read(1), 'a') # the 'a' that was written at the end of the file above f.close() # XXX add tests for truncate if it exists # XXX has truncate ever worked on Windows? specifically on WinNT I get: # "IOError: [Errno 13] Permission denied" ##try: ## newsize = size - 10 ## f.seek(newsize) ## f.truncate() ## expect(f.tell(), newsize) ## newsize = newsize - 1 ## f.seek(0) ## f.truncate(newsize) ## expect(f.tell(), newsize) ##except AttributeError: ## pass os.unlink(name) Index: regrtest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** regrtest.py 2000/08/04 13:17:51 1.21 --- regrtest.py 2000/08/11 19:02:58 1.22 *************** *** 16,19 **** --- 16,20 ---- -r: random -- randomize test execution order -l: leakdebug -- if cycle garbage collection is enabled, run with DEBUG_LEAK + --have-resources -- run tests that require large resources (time/space) If non-option arguments are present, they are names for tests to run, *************** *** 41,45 **** def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0, leakdebug=0): """Execute a test suite. --- 42,47 ---- def main(tests=None, testdir=None, verbose=0, quiet=0, generate=0, ! exclude=0, single=0, randomize=0, leakdebug=0, ! use_large_resources=0): """Execute a test suite. *************** *** 66,70 **** try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsrl') except getopt.error, msg: print msg --- 68,72 ---- try: ! opts, args = getopt.getopt(sys.argv[1:], 'vgqxsrl', ['have-resources']) except getopt.error, msg: print msg *************** *** 79,82 **** --- 81,85 ---- if o == '-r': randomize = 1 if o == '-l': leakdebug = 1 + if o == '--have-resources': use_large_resources = 1 if generate and verbose: print "-g and -v don't go together!" *************** *** 122,130 **** random.shuffle(tests) test_support.verbose = verbose # Tell tests to be moderately quiet save_modules = sys.modules.keys() for test in tests: if not quiet: print test ! ok = runtest(test, generate, verbose, testdir) if ok > 0: good.append(test) --- 125,134 ---- random.shuffle(tests) test_support.verbose = verbose # Tell tests to be moderately quiet + test_support.use_large_resources = use_large_resources save_modules = sys.modules.keys() for test in tests: if not quiet: print test ! ok = runtest(test, generate, verbose, quiet, testdir) if ok > 0: good.append(test) *************** *** 132,138 **** bad.append(test) else: - if not quiet: - print "test", test, - print "skipped -- an optional feature could not be imported" skipped.append(test) # Unload the newly imported modules (best effort finalization) --- 136,139 ---- *************** *** 195,199 **** return stdtests + tests ! def runtest(test, generate, verbose, testdir = None): """Run a single test. test -- the name of the test --- 196,200 ---- return stdtests + tests ! def runtest(test, generate, verbose, quiet, testdir = None): """Run a single test. test -- the name of the test *************** *** 201,204 **** --- 202,206 ---- and comparing it to a previously created output file verbose -- if true, print more messages + quiet -- if true, don't print 'skipped' messages (probably redundant) testdir -- test directory """ *************** *** 229,232 **** --- 231,237 ---- sys.stdout = save_stdout except (ImportError, test_support.TestSkipped), msg: + if not quiet: + print "test", test, + print "skipped -- ", msg return -1 except KeyboardInterrupt, v: From python-dev@python.org Fri Aug 11 20:03:01 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 12:03:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.81,2.82 Message-ID: <200008111903.MAA00826@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv29798/Objects Modified Files: fileobject.c Log Message: Add largefile support for Linux64 and WIn64. Add test_largefile and some minor change to regrtest.py to allow optional running of test_largefile ('cause it's slow on Win64). This closes patches: http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100510&group_id=5470 and http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100511&group_id=5470 Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.81 retrieving revision 2.82 diff -C2 -r2.81 -r2.82 *** fileobject.c 2000/07/13 23:56:54 2.81 --- fileobject.c 2000/08/11 19:02:59 2.82 *************** *** 43,48 **** #ifdef MS_WIN32 - #define ftruncate _chsize #define fileno _fileno #define HAVE_FTRUNCATE #endif --- 43,48 ---- #ifdef MS_WIN32 #define fileno _fileno + /* can (almost fully) duplicate with _chsize, see file_truncate */ #define HAVE_FTRUNCATE #endif *************** *** 65,68 **** --- 65,74 ---- #endif + /* define the appropriate 64-bit capable tell() function */ + #ifdef MS_WIN64 + # define TELL64 _telli64 + #endif + + typedef struct { PyObject_HEAD *************** *** 240,243 **** --- 246,320 ---- } + + /* a portable fseek() function + return 0 on success, non-zero on failure (with errno set) */ + int + _portable_fseek(fp, offset, whence) + FILE* fp; + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t offset; + #else + off_t offset; + #endif + int whence; + { + #if defined(HAVE_FSEEKO) + return fseeko(fp, offset, whence); + #elif defined(HAVE_FSEEK64) + return fseek64(fp, offset, whence); + #elif defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_FPOS_T >= 8 + /* lacking a 64-bit capable fseek() (as Win64 does) use a 64-bit capable + fsetpos() and tell() to implement fseek()*/ + fpos_t pos; + switch (whence) { + case SEEK_CUR: + if (fgetpos(fp, &pos) != 0) + return -1; + offset += pos; + break; + case SEEK_END: + /* do a "no-op" seek first to sync the buffering so that + the low-level tell() can be used correctly */ + if (fseek(fp, 0, SEEK_END) != 0) + return -1; + if ((pos = TELL64(fileno(fp))) == -1L) + return -1; + offset += pos; + break; + /* case SEEK_SET: break; */ + } + return fsetpos(fp, &offset); + #else + return fseek(fp, offset, whence); + #endif + } + + + /* a portable ftell() function + Return -1 on failure with errno set appropriately, current file + position on success */ + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t + #else + off_t + #endif + _portable_ftell(fp) + FILE* fp; + { + #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) + return ftello(fp); + #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) + return ftell64(fp); + #elif SIZEOF_FPOS_T >= 8 && defined(HAVE_LARGEFILE_SUPPORT) + fpos_t pos; + if (fgetpos(fp, &pos) != 0) + return -1; + return pos; + #else + return ftell(fp); + #endif + } + + static PyObject * file_seek(PyFileObject *f, PyObject *args) *************** *** 245,249 **** --- 322,330 ---- int whence; int ret; + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t offset, pos; + #else off_t offset; + #endif /* !MS_WIN64 */ PyObject *offobj; *************** *** 261,274 **** if (PyErr_Occurred()) return NULL; Py_BEGIN_ALLOW_THREADS errno = 0; ! #if defined(HAVE_FSEEKO) ! ret = fseeko(f->f_fp, offset, whence); ! #elif defined(HAVE_FSEEK64) ! ret = fseek64(f->f_fp, offset, whence); ! #else ! ret = fseek(f->f_fp, offset, whence); ! #endif Py_END_ALLOW_THREADS if (ret != 0) { PyErr_SetFromErrno(PyExc_IOError); --- 342,351 ---- if (PyErr_Occurred()) return NULL; + Py_BEGIN_ALLOW_THREADS errno = 0; ! ret = _portable_fseek(f->f_fp, offset, whence); Py_END_ALLOW_THREADS + if (ret != 0) { PyErr_SetFromErrno(PyExc_IOError); *************** *** 280,283 **** --- 357,361 ---- } + #ifdef HAVE_FTRUNCATE static PyObject * *************** *** 285,289 **** --- 363,371 ---- { int ret; + #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 + fpos_t newsize; + #else off_t newsize; + #endif PyObject *newsizeobj; *************** *** 307,317 **** Py_BEGIN_ALLOW_THREADS errno = 0; ! #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) ! newsize = ftello(f->f_fp); ! #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) ! newsize = ftell64(f->f_fp); ! #else ! newsize = ftell(f->f_fp); ! #endif Py_END_ALLOW_THREADS if (newsize == -1) { --- 389,393 ---- Py_BEGIN_ALLOW_THREADS errno = 0; ! newsize = _portable_ftell(f->f_fp); Py_END_ALLOW_THREADS if (newsize == -1) { *************** *** 325,341 **** ret = fflush(f->f_fp); Py_END_ALLOW_THREADS ! if (ret == 0) { ! Py_BEGIN_ALLOW_THREADS errno = 0; ! ret = ftruncate(fileno(f->f_fp), newsize); Py_END_ALLOW_THREADS } ! if (ret != 0) { ! PyErr_SetFromErrno(PyExc_IOError); ! clearerr(f->f_fp); ! return NULL; ! } Py_INCREF(Py_None); return Py_None; } #endif /* HAVE_FTRUNCATE */ --- 401,435 ---- ret = fflush(f->f_fp); Py_END_ALLOW_THREADS ! if (ret != 0) goto onioerror; ! ! #ifdef MS_WIN32 ! /* can use _chsize; if, however, the newsize overflows 32-bits then ! _chsize is *not* adequate; in this case, an OverflowError is raised */ ! if (newsize > LONG_MAX) { ! PyErr_SetString(PyExc_OverflowError, ! "the new size is too long for _chsize (it is limited to 32-bit values)"); ! return NULL; ! } else { ! Py_BEGIN_ALLOW_THREADS errno = 0; ! ret = _chsize(fileno(f->f_fp), newsize); Py_END_ALLOW_THREADS + if (ret != 0) goto onioerror; } ! #else ! Py_BEGIN_ALLOW_THREADS ! errno = 0; ! ret = ftruncate(fileno(f->f_fp), newsize); ! Py_END_ALLOW_THREADS ! if (ret != 0) goto onioerror; ! #endif /* !MS_WIN32 */ ! Py_INCREF(Py_None); return Py_None; + + onioerror: + PyErr_SetFromErrno(PyExc_IOError); + clearerr(f->f_fp); + return NULL; } #endif /* HAVE_FTRUNCATE */ *************** *** 344,348 **** file_tell(PyFileObject *f, PyObject *args) { ! off_t offset; if (f->f_fp == NULL) return err_closed(); --- 438,447 ---- file_tell(PyFileObject *f, PyObject *args) { ! #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 ! fpos_t pos; ! #else ! off_t pos; ! #endif ! if (f->f_fp == NULL) return err_closed(); *************** *** 351,363 **** Py_BEGIN_ALLOW_THREADS errno = 0; ! #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) ! offset = ftello(f->f_fp); ! #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) ! offset = ftell64(f->f_fp); ! #else ! offset = ftell(f->f_fp); ! #endif Py_END_ALLOW_THREADS ! if (offset == -1) { PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp); --- 450,456 ---- Py_BEGIN_ALLOW_THREADS errno = 0; ! pos = _portable_ftell(f->f_fp); Py_END_ALLOW_THREADS ! if (pos == -1) { PyErr_SetFromErrno(PyExc_IOError); clearerr(f->f_fp); *************** *** 365,371 **** } #if !defined(HAVE_LARGEFILE_SUPPORT) ! return PyInt_FromLong(offset); #else ! return PyLong_FromLongLong(offset); #endif } --- 458,464 ---- } #if !defined(HAVE_LARGEFILE_SUPPORT) ! return PyInt_FromLong(pos); #else ! return PyLong_FromLongLong(pos); #endif } *************** *** 483,486 **** --- 576,584 ---- else buffersize = bytesrequested; + if (buffersize > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "requested number of bytes is more than a Python string can hold"); + return NULL; + } v = PyString_FromStringAndSize((char *)NULL, buffersize); if (v == NULL) *************** *** 519,523 **** { char *ptr; ! int ntodo, ndone, nnow; if (f->f_fp == NULL) --- 617,621 ---- { char *ptr; ! size_t ntodo, ndone, nnow; if (f->f_fp == NULL) *************** *** 541,545 **** ntodo -= nnow; } ! return PyInt_FromLong(ndone); } --- 639,643 ---- ntodo -= nnow; } ! return PyInt_FromLong((long)ndone); } *************** *** 558,562 **** register int c; register char *buf, *end; ! int n1, n2; PyObject *v; --- 656,660 ---- register int c; register char *buf, *end; ! size_t n1, n2; PyObject *v; *************** *** 597,600 **** --- 695,703 ---- n1 = n2; n2 += 1000; + if (n2 > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "line is longer than a Python string can hold"); + return NULL; + } Py_BLOCK_THREADS if (_PyString_Resize(&v, n2) < 0) *************** *** 736,739 **** --- 839,847 ---- nfilled += nread; buffersize *= 2; + if (buffersize > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "line is too long for a Python string"); + goto error; + } if (big_buffer == NULL) { /* Create the big buffer */ From python-dev@python.org Fri Aug 11 20:03:01 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 12:03:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_largefile,NONE,1.1 Message-ID: <200008111903.MAA00825@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv29798/Lib/test/output Added Files: test_largefile Log Message: Add largefile support for Linux64 and WIn64. Add test_largefile and some minor change to regrtest.py to allow optional running of test_largefile ('cause it's slow on Win64). This closes patches: http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100510&group_id=5470 and http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=100511&group_id=5470 --- NEW FILE --- test_largefile From python-dev@python.org Fri Aug 11 20:55:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 12:55:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgetopt.tex,1.13,1.14 Message-ID: <200008111955.MAA07306@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv7295/lib Modified Files: libgetopt.tex Log Message: getopt(): revise description of long_options parameter slightly so it will be less confusing; add a paragraph separation so that comments about the options and long_options parameters don't have references that are easily misinterpreted. Adjust the interactive examples to not need the string module. Add an example showing how the module is commonly used in a script. Index: libgetopt.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgetopt.tex,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** libgetopt.tex 2000/04/03 20:13:53 1.13 --- libgetopt.tex 2000/08/11 19:55:06 1.14 *************** *** 22,44 **** \var{options} is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon ! (i.e., the same format that \UNIX{} \cfunction{getopt()} uses). If ! specified, \var{long_options} is a list of strings with the names of ! the long options which should be supported. The leading \code{'-}\code{-'} characters should not be included in the option ! name. Options which require an argument should be followed by an ! equal sign (\code{'='}). The return value consists of two elements: the first is a list of \code{(\var{option}, \var{value})} pairs; the second is the list of program arguments left after the option list was stripped (this is a ! trailing slice of the first argument). ! Each option-and-value pair returned has the option as its first ! element, prefixed with a hyphen for short options (e.g., \code{'-x'}) ! or two hyphens for long options (e.g., \code{'-}\code{-long-option'}), ! and the option argument as its second element, or an empty string if ! the option has no argument. ! The options occur in the list in the same order in which they were ! found, thus allowing multiple occurrences. Long and short options may ! be mixed. \end{funcdesc} --- 22,45 ---- \var{options} is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon ! (\character{:}; i.e., the same format that \UNIX{} ! \cfunction{getopt()} uses). ! ! \var{long_options}, if specified, must be a list of strings with the ! names of the long options which should be supported. The leading \code{'-}\code{-'} characters should not be included in the option ! name. Long options which require an argument should be followed by an ! equal sign (\character{=}). The return value consists of two elements: the first is a list of \code{(\var{option}, \var{value})} pairs; the second is the list of program arguments left after the option list was stripped (this is a ! trailing slice of \var{args}). Each option-and-value pair returned ! has the option as its first element, prefixed with a hyphen for short ! options (e.g., \code{'-x'}) or two hyphens for long options (e.g., ! \code{'-}\code{-long-option'}), and the option argument as its second ! element, or an empty string if the option has no argument. The ! options occur in the list in the same order in which they were found, ! thus allowing multiple occurrences. Long and short options may be ! mixed. \end{funcdesc} *************** *** 62,67 **** \begin{verbatim} ! >>> import getopt, string ! >>> args = string.split('-a -b -cfoo -d bar a1 a2') >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] --- 63,68 ---- \begin{verbatim} ! >>> import getopt ! >>> args = '-a -b -cfoo -d bar a1 a2'.split() >>> args ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] *************** *** 71,75 **** >>> args ['a1', 'a2'] - >>> \end{verbatim} --- 72,75 ---- *************** *** 78,82 **** \begin{verbatim} >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' ! >>> args = string.split(s) >>> args ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] --- 78,82 ---- \begin{verbatim} >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' ! >>> args = s.split() >>> args ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] *************** *** 88,91 **** >>> args ['a1', 'a2'] ! >>> \end{verbatim} --- 88,115 ---- >>> args ['a1', 'a2'] ! \end{verbatim} ! ! In a script, typical usage is something like this: ! ! \begin{verbatim} ! import getopt, sys ! ! def main(): ! try: ! opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="]) ! except getopt.GetoptError: ! # print help information and exit: ! usage() ! sys.exit(2) ! output = None ! for o, a in opts: ! if o in ("-h", "--help"): ! usage() ! sys.exit() ! if o in ("-o", "--output"): ! output = a ! # ... ! ! if __name__ == "__main__": ! main() \end{verbatim} From python-dev@python.org Fri Aug 11 21:04:24 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:04:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.79,1.80 Message-ID: <200008112004.NAA10914@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv10846/perl Modified Files: python.perl Log Message: do_env_cfuncdesc(): Push as much of the generated HTML into one place as possible for better readability. Revise a comment. Index: python.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v retrieving revision 1.79 retrieving revision 1.80 diff -C2 -r1.79 -r1.80 *** python.perl 2000/08/09 13:45:04 1.79 --- python.perl 2000/08/11 20:04:19 1.80 *************** *** 645,665 **** "$function_name()" . get_indexsubitem()); $idx =~ s/ \(.*\)//; ! $idx =~ s/\(\)//; # ???? my $result_rc = get_refcount($function_name, ''); my $rcinfo = ''; if ($result_rc eq '+1') { ! $rcinfo = 'Return value:' ! . "\n New reference."; } elsif ($result_rc eq '0') { ! $rcinfo = 'Return value:' ! . "\n Borrowed reference."; } elsif ($result_rc eq 'null') { ! $rcinfo = 'Return value:' ! . "\n Always NULL."; } if ($rcinfo ne '') { ! $rcinfo = "\n
    \n $rcinfo\n
    "; } return "
    $return_type $idx ($arg_list)\n
    " --- 645,665 ---- "$function_name()" . get_indexsubitem()); $idx =~ s/ \(.*\)//; ! $idx =~ s/\(\)//; # ???? - why both of these? my $result_rc = get_refcount($function_name, ''); my $rcinfo = ''; if ($result_rc eq '+1') { ! $rcinfo = 'New reference'; } elsif ($result_rc eq '0') { ! $rcinfo = 'Borrowed reference'; } elsif ($result_rc eq 'null') { ! $rcinfo = 'Always NULL'; } if ($rcinfo ne '') { ! $rcinfo = ( "\n
    " ! . "\n Return value:" ! . "\n $rcinfo." ! . "\n
    "); } return "
    $return_type $idx ($arg_list)\n
    " From python-dev@python.org Fri Aug 11 21:19:54 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:19:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libos.tex,1.45,1.46 Message-ID: <200008112019.NAA16861@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv16854/lib Modified Files: libos.tex Log Message: O_BINARY: Documented this constant; omission noted by David Ascher. access(): Corrected availability statement; error pointed out by Tim Peters. Index: libos.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libos.tex,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -r1.45 -r1.46 *** libos.tex 2000/07/19 17:30:58 1.45 --- libos.tex 2000/08/11 20:19:51 1.46 *************** *** 476,480 **** --- 476,487 ---- \end{datadesc} + \begin{datadesc}{O_BINARY} + Option for the \var{flag} argument to the \function{open()} function. + This can be bit-wise OR'd together with those listed above. + Availability: Macintosh, Windows. + % XXX need to check on the availability of this one. + \end{datadesc} + \subsection{Files and Directories \label{os-file-dir}} *************** *** 486,490 **** permissions. Return \code{1} if access is allowed, \code{0} if not. See the \UNIX{} man page \manpage{access}{2} for more information. ! Availability: \UNIX{}. \end{funcdesc} --- 493,497 ---- permissions. Return \code{1} if access is allowed, \code{0} if not. See the \UNIX{} man page \manpage{access}{2} for more information. ! Availability: \UNIX{}, Windows. \end{funcdesc} From python-dev@python.org Fri Aug 11 21:34:30 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:34:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libxmllib.tex,1.24,1.25 Message-ID: <200008112034.NAA17997@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17990/lib Modified Files: libxmllib.tex Log Message: Some minor clarifications and added some index entries. Index: libxmllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libxmllib.tex,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** libxmllib.tex 2000/07/16 19:01:10 1.24 --- libxmllib.tex 2000/08/11 20:34:27 1.25 *************** *** 102,110 **** \begin{methoddesc}{handle_doctype}{tag, pubid, syslit, data} ! This method is called when the \samp{} tag is processed. ! The arguments are the name of the root element, the Formal Public ! Identifier (or \code{None} if not specified), the system identifier, ! and the uninterpreted contents of the internal DTD subset as a string ! (or \code{None} if not present). \end{methoddesc} --- 102,111 ---- \begin{methoddesc}{handle_doctype}{tag, pubid, syslit, data} ! This\index{DOCTYPE declaration} method is called when the ! \samp{} declaration is processed. The arguments are the ! tag name of the root element, the Formal Public\index{Formal Public ! Identifier} Identifier (or \code{None} if not specified), the system ! identifier, and the uninterpreted contents of the internal DTD subset ! as a string (or \code{None} if not present). \end{methoddesc} *************** *** 112,126 **** This method is called to handle start tags for which a start tag handler is defined in the instance variable \member{elements}. The ! \var{tag} argument is the name of the tag, and the \var{method} ! argument is the function (method) which should be used to support semantic ! interpretation of the start tag. The \var{attributes} argument is a ! dictionary of attributes, the key being the \var{name} and the value ! being the \var{value} of the attribute found inside the tag's ! \code{<>} brackets. Character and entity references in the ! \var{value} have been interpreted. For instance, for the start tag ! \code{}, this method would be called as ! \code{handle_starttag('A', self.elements['A'][0], \{'HREF': 'http://www.cwi.nl/'\})}. ! The base implementation simply calls \var{method} with \var{attributes} ! as the only argument. \end{methoddesc} --- 113,127 ---- This method is called to handle start tags for which a start tag handler is defined in the instance variable \member{elements}. The ! \var{tag} argument is the name of the tag, and the ! \var{method} argument is the function (method) which should be used to ! support semantic interpretation of the start tag. The ! \var{attributes} argument is a dictionary of attributes, the key being ! the \var{name} and the value being the \var{value} of the attribute ! found inside the tag's \code{<>} brackets. Character and entity ! references in the \var{value} have been interpreted. For instance, ! for the start tag \code{}, this method ! would be called as \code{handle_starttag('A', self.elements['A'][0], ! \{'HREF': 'http://www.cwi.nl/'\})}. The base implementation simply ! calls \var{method} with \var{attributes} as the only argument. \end{methoddesc} *************** *** 188,195 **** \var{data} argument is a string containing the text between the \samp{} delimiters, but not the delimiters ! themselves. For example, the entity \samp{} will ! cause this method to be called with the argument \code{'ENTITY text'}. The ! default method does nothing. Note that \samp{} is ! handled separately if it is located at the start of the document. \end{methoddesc} --- 189,197 ---- \var{data} argument is a string containing the text between the \samp{} delimiters, but not the delimiters ! themselves. For example, the \index{ENTITY declaration}entity ! declaration \samp{} will cause this method to be called ! with the argument \code{'ENTITY text'}. The default method does ! nothing. Note that \samp{} is handled separately if it ! is located at the start of the document. \end{methoddesc} From python-dev@python.org Fri Aug 11 21:39:31 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 13:39:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api api.tex,1.75,1.76 Message-ID: <200008112039.NAA18395@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv18384/api Modified Files: api.tex Log Message: PyRun_InteractiveOne(), PyRun_InteractiveLoop(): Added descriptions. PyExc_WindowsError: Added to list of standard exceptions and added note about the right preprocessor symbol to use to protect code that uses it. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -r1.75 -r1.76 *** api.tex 2000/08/11 17:07:32 1.75 --- api.tex 2000/08/11 20:39:29 1.76 *************** *** 603,607 **** value of \cfunction{PyRun_InteractiveLoop()}, otherwise return the result of \cfunction{PyRun_SimpleFile()}. If \var{filename} is ! \NULL{}, this function uses \code{'???'} as the filename. \end{cfuncdesc} --- 603,607 ---- value of \cfunction{PyRun_InteractiveLoop()}, otherwise return the result of \cfunction{PyRun_SimpleFile()}. If \var{filename} is ! \NULL{}, this function uses \code{"???"} as the filename. \end{cfuncdesc} *************** *** 621,627 **** --- 621,640 ---- \begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *fp, char *filename} + Read and execute a single statement from a file associated with an + interactive device. If \var{filename} is \NULL, \code{"???"} is + used instead. The user will be prompted using \code{sys.ps1} and + \code{sys.ps2}. Returns \code{0} when the input was executed + successfully, \code{-1} if there was an exception, or an error code + from the \file{errcode.h} include file distributed as part of Python + in case of a parse error. (Note that \file{errcode.h} is not + included by \file{Python.h}, so must be included specifically if + needed.) \end{cfuncdesc} \begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *fp, char *filename} + Read and execute statements from a file associated with an + interactive device until \EOF{} is reached. If \var{filename} is + \NULL, \code{"???"} is used instead. The user will be prompted + using \code{sys.ps1} and \code{sys.ps2}. Returns \code{0} at \EOF. \end{cfuncdesc} *************** *** 984,995 **** \lineiii{PyExc_TypeError}{\exception{TypeError}}{} \lineiii{PyExc_ValueError}{\exception{ValueError}}{} \lineiii{PyExc_ZeroDivisionError}{\exception{ZeroDivisionError}}{} \end{tableiii} \noindent ! Note: \begin{description} \item[(1)] This is a base class for other standard exceptions. \end{description} --- 997,1013 ---- \lineiii{PyExc_TypeError}{\exception{TypeError}}{} \lineiii{PyExc_ValueError}{\exception{ValueError}}{} + \lineiii{PyExc_WindowsError}{\exception{WindowsError}}{(2)} \lineiii{PyExc_ZeroDivisionError}{\exception{ZeroDivisionError}}{} \end{tableiii} \noindent ! Notes: \begin{description} \item[(1)] This is a base class for other standard exceptions. + + \item[(2)] + Only defined on Windows; protect code that uses this by testing that + the preprocessor macro \code{MS_WINDOWS} is defined. \end{description} From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.21,1.22 Message-ID: <200008112215.PAA16823@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Lib Modified Files: dis.py Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** dis.py 2000/03/30 15:02:11 1.21 --- dis.py 2000/08/11 22:15:52 1.22 *************** *** 207,212 **** name_op('STORE_NAME', 90) # Index in name list name_op('DELETE_NAME', 91) # "" ! def_op('UNPACK_TUPLE', 92) # Number of tuple items ! def_op('UNPACK_LIST', 93) # Number of list items name_op('STORE_ATTR', 95) # Index in name list name_op('DELETE_ATTR', 96) # "" --- 207,212 ---- name_op('STORE_NAME', 90) # Index in name list name_op('DELETE_NAME', 91) # "" ! def_op('UNPACK_SEQUENCE', 92) # Number of tuple items ! name_op('STORE_ATTR', 95) # Index in name list name_op('DELETE_ATTR', 96) # "" From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.19,1.20 Message-ID: <200008112215.PAA16818@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Doc/lib Modified Files: libdis.tex Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** libdis.tex 2000/06/15 18:44:30 1.19 --- libdis.tex 2000/08/11 22:15:52 1.20 *************** *** 338,349 **** \end{opcodedesc} ! \begin{opcodedesc}{UNPACK_TUPLE}{count} Unpacks TOS into \var{count} individual values, which are put onto the stack right-to-left. \end{opcodedesc} ! \begin{opcodedesc}{UNPACK_LIST}{count} ! Unpacks TOS into \var{count} individual values. ! \end{opcodedesc} %\begin{opcodedesc}{UNPACK_ARG}{count} --- 338,349 ---- \end{opcodedesc} ! \begin{opcodedesc}{UNPACK_SEQUENCE}{count} Unpacks TOS into \var{count} individual values, which are put onto the stack right-to-left. \end{opcodedesc} ! %\begin{opcodedesc}{UNPACK_LIST}{count} ! %This opcode is obsolete. ! %\end{opcodedesc} %\begin{opcodedesc}{UNPACK_ARG}{count} From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include opcode.h,2.25,2.26 Message-ID: <200008112215.PAA16817@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Include Modified Files: opcode.h Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** opcode.h 2000/06/30 23:58:04 2.25 --- opcode.h 2000/08/11 22:15:52 2.26 *************** *** 77,82 **** #define STORE_NAME 90 /* Index in name list */ #define DELETE_NAME 91 /* "" */ ! #define UNPACK_TUPLE 92 /* Number of tuple items */ ! #define UNPACK_LIST 93 /* Number of list items */ #define STORE_ATTR 95 /* Index in name list */ #define DELETE_ATTR 96 /* "" */ --- 77,82 ---- #define STORE_NAME 90 /* Index in name list */ #define DELETE_NAME 91 /* "" */ ! #define UNPACK_SEQUENCE 92 /* Number of sequence items */ ! #define STORE_ATTR 95 /* Index in name list */ #define DELETE_ATTR 96 /* "" */ From python-dev@python.org Fri Aug 11 23:15:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:15:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.188,2.189 compile.c,2.119,2.120 import.c,2.144,2.145 Message-ID: <200008112215.PAA16838@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv14852/Python Modified Files: ceval.c compile.c import.c Log Message: Merge UNPACK_LIST and UNPACK_TUPLE into a single UNPACK_SEQUENCE, since they did the same anyway. I'm not sure what to do with Tools/compiler/compiler/* -- that isn't part of distutils, is it ? Should it try to be compatible with old bytecode version ? Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.188 retrieving revision 2.189 diff -C2 -r2.188 -r2.189 *** ceval.c 2000/08/07 06:34:45 2.188 --- ceval.c 2000/08/11 22:15:52 2.189 *************** *** 1166,1171 **** #endif ! case UNPACK_TUPLE: ! case UNPACK_LIST: v = POP(); if (PyTuple_Check(v)) { --- 1166,1170 ---- #endif ! case UNPACK_SEQUENCE: v = POP(); if (PyTuple_Check(v)) { Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.119 retrieving revision 2.120 diff -C2 -r2.119 -r2.120 *** compile.c 2000/08/07 19:22:43 2.119 --- compile.c 2000/08/11 22:15:52 2.120 *************** *** 1730,1734 **** static void ! com_assign_tuple(struct compiling *c, node *n, int assigning) { int i; --- 1730,1734 ---- static void ! com_assign_sequence(struct compiling *c, node *n, int assigning) { int i; *************** *** 1737,1741 **** if (assigning) { i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_TUPLE, i); com_push(c, i-1); } --- 1737,1741 ---- if (assigning) { i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_SEQUENCE, i); com_push(c, i-1); } *************** *** 1745,1761 **** static void - com_assign_list(struct compiling *c, node *n, int assigning) - { - int i; - if (assigning) { - i = (NCH(n)+1)/2; - com_addoparg(c, UNPACK_LIST, i); - com_push(c, i-1); - } - for (i = 0; i < NCH(n); i += 2) - com_assign(c, CHILD(n, i), assigning); - } - - static void com_assign_name(struct compiling *c, node *n, int assigning) { --- 1745,1748 ---- *************** *** 1776,1780 **** case testlist: if (NCH(n) > 1) { ! com_assign_tuple(c, n, assigning); return; } --- 1763,1767 ---- case testlist: if (NCH(n) > 1) { ! com_assign_sequence(c, n, assigning); return; } *************** *** 1844,1848 **** return; } ! com_assign_list(c, n, assigning); return; case NAME: --- 1831,1835 ---- return; } ! com_assign_sequence(c, n, assigning); return; case NAME: *************** *** 2870,2874 **** else { int i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_TUPLE, i); com_push(c, i-1); for (i = 0; i < NCH(n); i += 2) --- 2857,2861 ---- else { int i = (NCH(n)+1)/2; ! com_addoparg(c, UNPACK_SEQUENCE, i); com_push(c, i-1); for (i = 0; i < NCH(n); i += 2) Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.144 retrieving revision 2.145 diff -C2 -r2.144 -r2.145 *** import.c 2000/07/23 09:20:08 2.144 --- import.c 2000/08/11 22:15:52 2.145 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50428 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50811 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Fri Aug 11 23:18:07 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Fri, 11 Aug 2000 15:18:07 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.8,1.9 Message-ID: <200008112218.PAA18634@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv17808 Modified Files: pep2html.py Log Message: special case lines beginning with "[*]" as non-header add optical sugar Index: pep2html.py =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** pep2html.py 2000/07/28 06:40:10 1.8 --- pep2html.py 2000/08/11 22:18:04 1.9 *************** *** 92,96 **** break if line[0] != "\f": ! if line[0].strip(): if line.strip() == LOCALVARS: break --- 92,96 ---- break if line[0] != "\f": ! if line[0].strip() and line[:3] != '[*]': if line.strip() == LOCALVARS: break *************** *** 110,115 **** update = 1 for file in glob.glob("pep-*.txt"): ! print file, "..." ! fixfile(file, os.path.splitext(file)[0] + ".html") if len(sys.argv) > 1 and sys.argv[1] == "-n": --- 110,116 ---- update = 1 for file in glob.glob("pep-*.txt"): ! newfile = os.path.splitext(file)[0] + ".html" ! print file, "->", newfile ! fixfile(file, newfile) if len(sys.argv) > 1 and sys.argv[1] == "-n": From python-dev@python.org Fri Aug 11 23:26:38 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 11 Aug 2000 15:26:38 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.93,1.94 Message-ID: <200008112226.PAA27714@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv25315 Modified Files: Makefile.in Log Message: 'make' in Grammar too, so graminit.h and graminit.c get re-build when necessary. Do Grammar after Parser because Grammar needs Parser, and not the other way 'round. This patch doesn't bother with dependencies because it's tricky to get right (for instance for the modules that want graminit.h, like cPickle) and other dependencies are broken to begin with. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.93 retrieving revision 1.94 diff -C2 -r1.93 -r1.94 *** Makefile.in 2000/08/03 15:52:30 1.93 --- Makefile.in 2000/08/11 22:26:35 1.94 *************** *** 127,134 **** # Subdirectories where to run make recursively ! SUBDIRS= Parser Objects Python Modules # Other subdirectories ! SUBDIRSTOO= Include Lib Misc Demo Grammar # Files and directories to be distributed --- 127,134 ---- # Subdirectories where to run make recursively ! SUBDIRS= Parser Grammar Objects Python Modules # Other subdirectories ! SUBDIRSTOO= Include Lib Misc Demo # Files and directories to be distributed *************** *** 195,198 **** --- 195,202 ---- $(SUBDIRS): Makefiles + + Grammar: + cd Grammar ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \ + prefix="$(prefix)" exec_prefix="$(exec_prefix)" all Parser: From python-dev@python.org Sat Aug 12 00:20:36 2000 From: python-dev@python.org (Trent Mick) Date: Fri, 11 Aug 2000 16:20:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild _socket.dsp,1.2,1.3 _sre.dsp,1.3,1.4 _tkinter.dsp,1.15,1.16 bsddb.dsp,1.11,1.12 mmap.dsp,1.5,1.6 parser.dsp,1.9,1.10 pyexpat.dsp,1.3,1.4 python.dsp,1.11,1.12 python20.dsp,1.5,1.6 pythonw.dsp,1.9,1.10 select.dsp,1.2,1.3 ucnhash.dsp,1.4,1.5 unicodedata.dsp,1.4,1.5 winreg.dsp,1.5,1.6 winsound.dsp,1.4,1.5 zlib.dsp,1.12,1.13 pcbuild.dsw,1.18,1.19 readme.txt,1.10,1.11 Message-ID: <200008112320.QAA25291@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv22107 Modified Files: _socket.dsp _sre.dsp _tkinter.dsp bsddb.dsp mmap.dsp parser.dsp pyexpat.dsp python.dsp python20.dsp pythonw.dsp select.dsp ucnhash.dsp unicodedata.dsp winreg.dsp winsound.dsp zlib.dsp pcbuild.dsw readme.txt Log Message: These files all used to be tagged as binary in CVS. I recently changed this so that these files are treated as normal text files (which they are). However, the files also had to be changed to be stored in CVS internally with UNIX line terminators (they had DOS line terminators internally before this commit). Index: _socket.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_socket.dsp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** _socket.dsp 2000/04/21 21:26:07 1.2 --- _socket.dsp 2000/08/11 23:20:32 1.3 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project Index: _sre.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_sre.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** _sre.dsp 2000/04/21 21:26:07 1.3 --- _sre.dsp 2000/08/11 23:20:32 1.4 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: _tkinter.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_tkinter.dsp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** _tkinter.dsp 2000/06/30 14:33:47 1.15 --- _tkinter.dsp 2000/08/11 23:20:32 1.16 *************** *** 1,197 **** ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,197 ---- ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: bsddb.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/bsddb.dsp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** bsddb.dsp 2000/07/01 03:27:22 1.11 --- bsddb.dsp 2000/08/11 23:20:32 1.12 *************** *** 1,188 **** ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,188 ---- ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: mmap.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/mmap.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** mmap.dsp 2000/07/01 03:12:59 1.5 --- mmap.dsp 2000/08/11 23:20:32 1.6 *************** *** 1,97 **** ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project --- 1,97 ---- ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project Index: parser.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/parser.dsp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** parser.dsp 2000/04/21 21:26:07 1.9 --- parser.dsp 2000/08/11 23:20:32 1.10 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pyexpat.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pyexpat.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pyexpat.dsp 2000/04/21 21:26:07 1.3 --- pyexpat.dsp 2000/08/11 23:20:32 1.4 *************** *** 1,190 **** ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project --- 1,190 ---- ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project Index: python.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python.dsp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** python.dsp 2000/04/21 21:26:07 1.11 --- python.dsp 2000/08/11 23:20:32 1.12 *************** *** 1,170 **** ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project --- 1,170 ---- ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project Index: python20.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** python20.dsp 2000/07/01 04:03:32 1.5 --- python20.dsp 2000/08/11 23:20:32 1.6 *************** *** 1,1690 **** ! # Microsoft Developer Studio Project File - Name="python20" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=python20 - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run [...3351 lines suppressed...] ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\yuvconvert.c ! ! !IF "$(CFG)" == "python20 - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pythonw.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pythonw.dsp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pythonw.dsp 2000/04/21 21:26:07 1.9 --- pythonw.dsp 2000/08/11 23:20:32 1.10 *************** *** 1,184 **** ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,184 ---- ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: select.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/select.dsp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** select.dsp 2000/04/21 21:26:07 1.2 --- select.dsp 2000/08/11 23:20:32 1.3 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project Index: ucnhash.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/ucnhash.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** ucnhash.dsp 2000/07/01 04:03:32 1.4 --- ucnhash.dsp 2000/08/11 23:20:32 1.5 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project Index: unicodedata.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/unicodedata.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** unicodedata.dsp 2000/07/01 04:03:32 1.4 --- unicodedata.dsp 2000/08/11 23:20:32 1.5 *************** *** 1,103 **** ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project --- 1,103 ---- ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project Index: winreg.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winreg.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** winreg.dsp 2000/07/01 03:12:59 1.5 --- winreg.dsp 2000/08/11 23:20:32 1.6 *************** *** 1,108 **** ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,108 ---- ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: winsound.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winsound.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** winsound.dsp 2000/07/01 04:03:32 1.4 --- winsound.dsp 2000/08/11 23:20:32 1.5 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project Index: zlib.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/zlib.dsp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** zlib.dsp 2000/05/02 12:44:22 1.12 --- zlib.dsp 2000/08/11 23:20:32 1.13 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project Index: pcbuild.dsw =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pcbuild.dsw,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** pcbuild.dsw 2000/07/01 03:15:37 1.18 --- pcbuild.dsw 2000/08/11 23:20:32 1.19 *************** *** 1,254 **** ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! --- 1,254 ---- ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! Index: readme.txt =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/readme.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** readme.txt 2000/07/01 20:38:27 1.10 --- readme.txt 2000/08/11 23:20:32 1.11 *************** *** 1,98 **** ! Building Python using VC++ 6.0 or 5.0 ! ------------------------------------- ! This directory is used to build Python for Win32 platforms, e.g. Windows ! 95, 98 and NT. It requires Microsoft Visual C++ 6.x or 5.x. ! (For other Windows platforms and compilers, see ../PC/readme.txt.) ! XXX There are still (Python 2.0b1) a few compiler warnings under VC6. ! XXX There are likely a few more under VC5. ! ! Unlike older versions, there's no longer a need to copy the project files ! from a subdirectory of PC/ to the PCbuild directory -- they come in PCbuild. ! ! All you need to do is open the workspace "pcbuild.dsw" in MSVC++, select ! the Debug or Release setting (using Build -> Set Active Configuration...), ! and build the projects. ! ! The proper order to build subprojects is: ! ! 1) python20 (this builds the main Python DLL and library files, ! python20.{dll, lib}) ! ! 2) python (this builds the main Python executable, python.exe) ! ! 3) the other subprojects, as desired or needed (note: you probably don't ! want to build most of the other subprojects, unless you're building an ! entire Python distribution from scratch, or specifically making changes ! to the subsystems they implement; see SUBPROJECTS below) ! ! When using the Debug setting, the output files have a _d added to ! their name: python20_d.dll, python_d.exe, parser_d.pyd, and so on. ! ! SUBPROJECTS ! ----------- ! These subprojects should build out of the box. Subprojects other than the ! main ones (python20, python, pythonw) generally build a DLL (renamed to ! .pyd) from a specific module so that users don't have to load the code ! supporting that module unless they import the module. ! ! python20 ! .dll and .lib ! python ! .exe ! pythonw ! pythonw.exe, a variant of python.exe that doesn't pop up a DOS box ! _socket ! socketmodule.c ! _sre ! Unicode-aware regular expression engine ! mmap ! mmapmodule.c ! parser ! the parser module ! select ! selectmodule.c ! ucnhash, unicodedata ! large tables of Unicode data ! winreg ! Windows registry API ! winsound ! play sounds (typically .wav files) under Windows ! ! The following subprojects will generally NOT build out of the box. They ! wrap code Python doesn't control, and you'll need to download the base ! packages first (study the subproject structure from within MSVC to see ! where each expects to find the unpacked packages): ! ! _tkinter ! Python wrapper for the Tk windowing system. Requires tcl831.exe from ! http://dev.scriptics.com/software/tcltk/downloadnow83.html ! ! zlib ! Python wrapper for the zlib compression library. Requires ! http://www.winimage.com/zLibDll/zlib133dll.zip ! and ! ftp://ftp.uu.net/graphics/png/src/zlib133.zip ! ! bsddb ! Python wrapper for the BSD database 1.85. Requires db.1.85.win32.zip, ! from the "bsd db" link at ! http://www.nightmare.com/software.html ! ! pyexpat ! Python wrapper for accelerated XML parsing. Requires ! ftp://ftp.jclark.com/pub/xml/expat.zip ! ! ! NOTE ON CONFIGURATIONS ! ---------------------- ! Under Build -> Configuration ..., you'll find several Alpha configurations, ! such as "Win32 Alpha Release". These do not refer to alpha versions (as in ! alpha, beta, final), but to the DEC/COMPAQ Alpha processor. Ignore them if ! you're not building on an Alpha box. ! ! ! YOUR OWN EXTENSION DLLs ! ----------------------- ! If you want to create your own extension module DLL, there's an example ! with easy-to-follow instructions in ../PC/example/; read the file ! readme.txt there first. --- 1,98 ---- ! Building Python using VC++ 6.0 or 5.0 ! ------------------------------------- ! This directory is used to build Python for Win32 platforms, e.g. Windows ! 95, 98 and NT. It requires Microsoft Visual C++ 6.x or 5.x. ! (For other Windows platforms and compilers, see ../PC/readme.txt.) ! XXX There are still (Python 2.0b1) a few compiler warnings under VC6. ! XXX There are likely a few more under VC5. ! ! Unlike older versions, there's no longer a need to copy the project files ! from a subdirectory of PC/ to the PCbuild directory -- they come in PCbuild. ! ! All you need to do is open the workspace "pcbuild.dsw" in MSVC++, select ! the Debug or Release setting (using Build -> Set Active Configuration...), ! and build the projects. ! ! The proper order to build subprojects is: ! ! 1) python20 (this builds the main Python DLL and library files, ! python20.{dll, lib}) ! ! 2) python (this builds the main Python executable, python.exe) ! ! 3) the other subprojects, as desired or needed (note: you probably don't ! want to build most of the other subprojects, unless you're building an ! entire Python distribution from scratch, or specifically making changes ! to the subsystems they implement; see SUBPROJECTS below) ! ! When using the Debug setting, the output files have a _d added to ! their name: python20_d.dll, python_d.exe, parser_d.pyd, and so on. ! ! SUBPROJECTS ! ----------- ! These subprojects should build out of the box. Subprojects other than the ! main ones (python20, python, pythonw) generally build a DLL (renamed to ! .pyd) from a specific module so that users don't have to load the code ! supporting that module unless they import the module. ! ! python20 ! .dll and .lib ! python ! .exe ! pythonw ! pythonw.exe, a variant of python.exe that doesn't pop up a DOS box ! _socket ! socketmodule.c ! _sre ! Unicode-aware regular expression engine ! mmap ! mmapmodule.c ! parser ! the parser module ! select ! selectmodule.c ! ucnhash, unicodedata ! large tables of Unicode data ! winreg ! Windows registry API ! winsound ! play sounds (typically .wav files) under Windows ! ! The following subprojects will generally NOT build out of the box. They ! wrap code Python doesn't control, and you'll need to download the base ! packages first (study the subproject structure from within MSVC to see ! where each expects to find the unpacked packages): ! ! _tkinter ! Python wrapper for the Tk windowing system. Requires tcl831.exe from ! http://dev.scriptics.com/software/tcltk/downloadnow83.html ! ! zlib ! Python wrapper for the zlib compression library. Requires ! http://www.winimage.com/zLibDll/zlib133dll.zip ! and ! ftp://ftp.uu.net/graphics/png/src/zlib133.zip ! ! bsddb ! Python wrapper for the BSD database 1.85. Requires db.1.85.win32.zip, ! from the "bsd db" link at ! http://www.nightmare.com/software.html ! ! pyexpat ! Python wrapper for accelerated XML parsing. Requires ! ftp://ftp.jclark.com/pub/xml/expat.zip ! ! ! NOTE ON CONFIGURATIONS ! ---------------------- ! Under Build -> Configuration ..., you'll find several Alpha configurations, ! such as "Win32 Alpha Release". These do not refer to alpha versions (as in ! alpha, beta, final), but to the DEC/COMPAQ Alpha processor. Ignore them if ! you're not building on an Alpha box. ! ! ! YOUR OWN EXTENSION DLLs ! ----------------------- ! If you want to create your own extension module DLL, there's an example ! with easy-to-follow instructions in ../PC/example/; read the file ! readme.txt there first. From python-dev@python.org Sat Aug 12 04:36:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 20:36:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.28,1.29 Message-ID: <200008120336.UAA14647@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14640/lib Modified Files: libstdtypes.tex Log Message: Added Marc-Andre Lemburg's documentation for string methods, with some massaging for markup consistency. This closes SourceForge patch #101063. Added Unicode strings and buffer objects to the list of sequence types. Small markup nits elsewhere. Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** libstdtypes.tex 2000/08/08 16:15:49 1.28 --- libstdtypes.tex 2000/08/12 03:36:23 1.29 *************** *** 123,130 **** \item[(1)] \code{<>} and \code{!=} are alternate spellings for the same operator. ! (I couldn't choose between \ABC{} and \C{}! :-) \index{ABC language@\ABC{} language} \index{language!ABC@\ABC{}} ! \indexii{C@\C{}}{language} \code{!=} is the preferred spelling; \code{<>} is obsolescent. --- 123,130 ---- \item[(1)] \code{<>} and \code{!=} are alternate spellings for the same operator. ! (I couldn't choose between \ABC{} and C! :-) \index{ABC language@\ABC{} language} \index{language!ABC@\ABC{}} ! \indexii{C}{language} \code{!=} is the preferred spelling; \code{<>} is obsolescent. *************** *** 255,263 **** \item[(2)] Conversion from floating point to (long or plain) integer may round or ! truncate as in \C{}; see functions \function{floor()} and \function{ceil()} in ! module \refmodule{math}\refbimodindex{math} for well-defined conversions. \withsubitem{(in module math)}{\ttindex{floor()}\ttindex{ceil()}} \indexii{numeric}{conversions} ! \indexii{C@\C{}}{language} \item[(3)] --- 255,264 ---- \item[(2)] Conversion from floating point to (long or plain) integer may round or ! truncate as in C; see functions \function{floor()} and ! \function{ceil()} in the \refmodule{math}\refbimodindex{math} module ! for well-defined conversions. \withsubitem{(in module math)}{\ttindex{floor()}\ttindex{ceil()}} \indexii{numeric}{conversions} ! \indexii{C}{language} \item[(3)] *************** *** 312,328 **** \subsection{Sequence Types \label{typesseq}} ! There are three sequence types: strings, lists and tuples. Strings literals are written in single or double quotes: \code{'xyzzy'}, \code{"frobozz"}. See chapter 2 of the ! \citetitle[../ref/ref.html]{Python Reference Manual} for more about ! string literals. Lists are constructed with square brackets, separating items with commas: \code{[a, b, c]}. Tuples are constructed by the comma operator (not within square brackets), with or without enclosing parentheses, but an empty tuple must have the enclosing parentheses, e.g., \code{a, b, c} or \code{()}. A single ! item tuple must have a trailing comma, e.g., \code{(d,)}. \indexii{sequence}{types} \indexii{string}{type} \indexii{tuple}{type} \indexii{list}{type} --- 313,336 ---- \subsection{Sequence Types \label{typesseq}} ! There are five sequence types: strings, Unicode strings, lists, ! tuples, and buffers. Strings literals are written in single or double quotes: \code{'xyzzy'}, \code{"frobozz"}. See chapter 2 of the ! \citetitle[../ref/strings.html]{Python Reference Manual} for more about ! string literals. Unicode strings are much like strings, but are ! specified in the syntax using a preceeding \character{u} character: ! \code{u'abc'}, \code{u"def"}. Lists are constructed with square brackets, separating items with commas: \code{[a, b, c]}. Tuples are constructed by the comma operator (not within square brackets), with or without enclosing parentheses, but an empty tuple must have the enclosing parentheses, e.g., \code{a, b, c} or \code{()}. A single ! item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are ! not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} \indexii{sequence}{types} \indexii{string}{type} + \indexii{Unicode}{type} + \indexii{buffer}{type} \indexii{tuple}{type} \indexii{list}{type} *************** *** 386,395 **** \end{description} ! \subsubsection{More String Operations \label{typesseq-strings}} String objects have one unique built-in operation: the \code{\%} operator (modulo) with a string left argument interprets this string ! as a \C{} \cfunction{sprintf()} format string to be applied to the right argument, and returns the string resulting from this formatting operation. --- 394,588 ---- \end{description} + + \subsubsection{String Methods \label{string-methods}} + + These are the string methods which both 8-bit strings and Unicode + objects support: + + \begin{methoddesc}[string]{capitalize}{} + Return a copy of the string with only its first character capitalized. + \end{methoddesc} + + \begin{methoddesc}[string]{center}{width} + Return centered in a string of length \var{width}. Padding is done + using spaces. + \end{methoddesc} + + \begin{methoddesc}[string]{count}{sub\optional{, start\optional{, end}}} + Return the number of occurrences of substring \var{sub} in string + S\code{[\var{start}:\var{end}]}. Optional arguments \var{start} and + \var{end} are interpreted as in slice notation. + \end{methoddesc} + + \begin{methoddesc}[string]{encode}{\optional{encoding\optional{,errors}}} + Return an encoded version of the string. Default encoding is the current + default string encoding. \var{errors} may be given to set a different + error handling scheme. The default for \var{errors} is + \code{'strict'}, meaning that encoding errors raise a + \exception{ValueError}. Other possible values are \code{'ignore'} and + \code{'replace'}. + \end{methoddesc} + + \begin{methoddesc}[string]{endswith}{suffix\optional{, start\optional{, end}}} + Return true if the string ends with the specified \var{suffix}, + otherwise return false. With optional \var{start}, test beginning at + that position. With optional \var{end}, stop comparing at that position. + \end{methoddesc} + + \begin{methoddesc}[string]{expandtabs}{\optional{tabsize}} + Return a copy of the string where all tab characters are expanded + using spaces. If \var{tabsize} is not given, a tab size of \code{8} + characters is assumed. + \end{methoddesc} + + \begin{methoddesc}[string]{find}{sub\optional{, start\optional{, end}}} + Return the lowest index in the string where substring \var{sub} is + found, such that \var{sub} is contained in the range [\var{start}, + \var{end}). Optional arguments \var{start} and \var{end} are + interpreted as in slice notation. Return \code{-1} if \var{sub} is + not found. + \end{methoddesc} + + \begin{methoddesc}[string]{index}{sub\optional{, start\optional{, end}}} + Like \method{find()}, but raise \exception{ValueError} when the + substring is not found. + \end{methoddesc} + + \begin{methoddesc}[string]{isalnum}{} + Return true if all characters in the string are alphanumeric and there + is at least one character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isalpha}{} + Return true if all characters in the string are alphabetic and there + is at least one character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isdigit}{} + Return true if there are only digit characters, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{islower}{} + Return true if all cased characters in the string are lowercase and + there is at least one cased character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isspace}{} + Return true if there are only whitespace characters in the string and + the string is not empty, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{istitle}{} + Return true if the string is a titlecased string, i.e.\ uppercase + characters may only follow uncased characters and lowercase characters + only cased ones. Return false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{isupper}{} + Return true if all cased characters in the string are uppercase and + there is at least one cased character, false otherwise. + \end{methoddesc} + + \begin{methoddesc}[string]{join}{seq} + Return a string which is the concatenation of the strings in the + sequence \var{seq}. The separator between elements is the string + providing this method. + \end{methoddesc} + + \begin{methoddesc}[string]{ljust}{width} + Return the string left justified in a string of length \var{width}. + Padding is done using spaces. The original string is returned if + \var{width} is less than \code{len(\var{s})}. + \end{methoddesc} + + \begin{methoddesc}[string]{lower}{} + Return a copy of the string converted to lowercase. + \end{methoddesc} + + \begin{methoddesc}[string]{lstrip}{} + Return a copy of the string with leading whitespace removed. + \end{methoddesc} + + \begin{methoddesc}[string]{replace}{old, new\optional{, maxsplit}} + Return a copy of the string with all occurrences of substring + \var{old} replaced by \var{new}. If the optional argument + \var{maxsplit} is given, only the first \var{maxsplit} occurrences are + replaced. + \end{methoddesc} + + \begin{methoddesc}[string]{rfind}{sub \optional{,start \optional{,end}}} + Return the highest index in the string where substring \var{sub} is + found, such that \var{sub} is contained within s[start,end]. Optional + arguments \var{start} and \var{end} are interpreted as in slice + notation. Return \code{-1} on failure. + \end{methoddesc} + + \begin{methoddesc}[string]{rindex}{sub\optional{, start\optional{, end}}} + Like \method{rfind()} but raises \exception{ValueError} when the + substring \var{sub} is not found. + \end{methoddesc} + + \begin{methoddesc}[string]{rjust}{width} + Return the string right justified in a string of length \var{width}. + Padding is done using spaces. The original string is returned if + \var{width} is less than \code{len(\var{s})}. + \end{methoddesc} + + \begin{methoddesc}[string]{rstrip}{} + Return a copy of the string with trailing whitespace removed. + \end{methoddesc} + + \begin{methoddesc}[string]{split}{\optional{sep \optional{,maxsplit}}} + Return a list of the words in the string, using \var{sep} as the + delimiter string. If \var{maxsplit} is given, at most \var{maxsplit} + splits are done. If \var{sep} is not specified or \code{None}, any + whitespace string is a separator. + \end{methoddesc} + + \begin{methoddesc}[string]{splitlines}{\optional{keepends}} + Return a list of the lines in the string, breaking at line + boundaries. Line breaks are not included in the resulting list unless + \var{keepends} is given and true. + \end{methoddesc} + + \begin{methoddesc}[string]{startswith}{prefix\optional{, start\optional{, end}}} + Return true if string starts with the \var{prefix}, otherwise + return false. With optional \var{start}, test string beginning at + that position. With optional \var{end}, stop comparing string at that + position. + \end{methoddesc} + + \begin{methoddesc}[string]{strip}{} + Return a copy of the string with leading and trailing whitespace + removed. + \end{methoddesc} + + \begin{methoddesc}[string]{swapcase}{} + Return a copy of the string with uppercase characters converted to + lowercase and vice versa. + \end{methoddesc} + + \begin{methoddesc}[string]{title}{} + Return a titlecased version of, i.e.\ words start with uppercase + characters, all remaining cased characters are lowercase. + \end{methoddesc} + + \begin{methoddesc}[string]{translate}{table\optional{, deletechars}} + Return a copy of the string where all characters occurring in the + optional argument \var{deletechars} are removed, and the remaining + characters have been mapped through the given translation table, which + must be a string of length 256. + \end{methoddesc} + + \begin{methoddesc}[string]{upper}{} + Return a copy of the string converted to uppercase. + \end{methoddesc} + ! \subsubsection{String Formatting Operations \label{typesseq-strings}} String objects have one unique built-in operation: the \code{\%} operator (modulo) with a string left argument interprets this string ! as a C \cfunction{sprintf()} format string to be applied to the right argument, and returns the string resulting from this formatting operation. *************** *** 398,403 **** required by the format string; if the string requires a single argument, the right argument may also be a single non-tuple ! object.\footnote{A tuple object in this case should be a singleton.} ! The following format characters are understood: \code{\%}, \code{c}, \code{s}, \code{i}, \code{d}, \code{u}, \code{o}, \code{x}, \code{X}, \code{e}, \code{E}, \code{f}, \code{g}, \code{G}. --- 591,596 ---- required by the format string; if the string requires a single argument, the right argument may also be a single non-tuple ! object.\footnote{A tuple object in this case should be a singleton. ! } The following format characters are understood: \code{\%}, \code{c}, \code{s}, \code{i}, \code{d}, \code{u}, \code{o}, \code{x}, \code{X}, \code{e}, \code{E}, \code{f}, \code{g}, \code{G}. *************** *** 418,423 **** avoid printing endless strings of meaningless digits without hampering correct use and without having to know the exact precision of floating ! point values on a particular machine.} ! All other errors raise exceptions. If the right argument is a dictionary (or any kind of mapping), then --- 611,616 ---- avoid printing endless strings of meaningless digits without hampering correct use and without having to know the exact precision of floating ! point values on a particular machine. ! } All other errors raise exceptions. If the right argument is a dictionary (or any kind of mapping), then *************** *** 755,766 **** \label{bltin-file-objects}} ! File objects are implemented using \C{}'s \code{stdio} ! package and can be created with the built-in function ! \function{open()}\bifuncindex{open} described in section \ref{built-in-funcs}, ``Built-in Functions.'' They are also returned by some other built-in functions and methods, e.g., ! \function{posix.popen()} and \function{posix.fdopen()} and the \method{makefile()} method of socket objects. ! \refbimodindex{posix} \refbimodindex{socket} --- 948,959 ---- \label{bltin-file-objects}} ! File objects are implemented using C's \code{stdio} package and can be ! created with the built-in function ! \function{open()}\bifuncindex{open} described in section \ref{built-in-funcs}, ``Built-in Functions.'' They are also returned by some other built-in functions and methods, e.g., ! \function{os.popen()} and \function{os.fdopen()} and the \method{makefile()} method of socket objects. ! \refstmodindex{os} \refbimodindex{socket} *************** *** 814,819 **** want to make an exact copy of a file while scanning its lines) you can tell whether the last line of a file ended in a newline ! or not (yes this happens!).} ! (but may be absent when a file ends with an incomplete line). If the \var{size} argument is present and non-negative, it is a maximum byte count (including the trailing --- 1007,1012 ---- want to make an exact copy of a file while scanning its lines) you can tell whether the last line of a file ended in a newline ! or not (yes this happens!). ! } (but may be absent when a file ends with an incomplete line). If the \var{size} argument is present and non-negative, it is a maximum byte count (including the trailing *************** *** 893,897 **** writable \member{softspace} attribute, which should be initialized to zero. This will be automatic for classes implemented in Python; types ! implemented in \C{} will have to provide a writable \member{softspace} attribute. \end{memberdesc} --- 1086,1090 ---- writable \member{softspace} attribute, which should be initialized to zero. This will be automatic for classes implemented in Python; types ! implemented in C will have to provide a writable \member{softspace} attribute. \end{memberdesc} From python-dev@python.org Sat Aug 12 04:39:49 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 11 Aug 2000 20:39:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api refcounts.dat,1.12,1.13 Message-ID: <200008120339.UAA14832@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv14824/api Modified Files: refcounts.dat Log Message: Added information for PyEval_EvalCode(). Fixed a couple of typos (new references are represented by "+1", not "1"). Index: refcounts.dat =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/refcounts.dat,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** refcounts.dat 2000/07/13 23:58:16 1.12 --- refcounts.dat 2000/08/12 03:39:47 1.13 *************** *** 217,220 **** --- 217,225 ---- PyEval_SaveThread:PyThreadState*::: + PyEval_EvalCode:PyObject*::+1: + PyEval_EvalCode:PyCodeObject*:co:0: + PyEval_EvalCode:PyObject*:globals:0: + PyEval_EvalCode:PyObject*:locals:0: + PyFile_AsFile:FILE*::: PyFile_AsFile:PyFileObject*:p:0: *************** *** 650,654 **** PyRun_AnyFile:char*:filename:: ! PyRun_File:PyObject*::1:??? -- same as eval_code2() PyRun_File:FILE*:fp:: PyRun_File:char*:filename:: --- 655,659 ---- PyRun_AnyFile:char*:filename:: ! PyRun_File:PyObject*::+1:??? -- same as eval_code2() PyRun_File:FILE*:fp:: PyRun_File:char*:filename:: *************** *** 672,676 **** PyRun_SimpleString:char*:command:: ! PyRun_String:PyObject*::1:??? -- same as eval_code2() PyRun_String:char*:str:: PyRun_String:int:start:: --- 677,681 ---- PyRun_SimpleString:char*:command:: ! PyRun_String:PyObject*::+1:??? -- same as eval_code2() PyRun_String:char*:str:: PyRun_String:int:start:: From python-dev@python.org Sat Aug 12 15:45:53 2000 From: python-dev@python.org (Guido van Rossum) Date: Sat, 12 Aug 2000 07:45:53 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.94,1.95 Message-ID: <200008121445.HAA05173@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv5129 Modified Files: Makefile.in Log Message: Whoever added the Makefile rule to auto-build the Grammar didn't have his build directory in a different place than his source directory. I do, and it is supposed to be supported. The naive patch caused an endless recursion in the Make process. This should take care of that. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.94 retrieving revision 1.95 diff -C2 -r1.94 -r1.95 *** Makefile.in 2000/08/11 22:26:35 1.94 --- Makefile.in 2000/08/12 14:45:50 1.95 *************** *** 197,201 **** Grammar: ! cd Grammar ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all --- 197,202 ---- Grammar: ! P=`pwd`/Parser; cd $(srcdir)/Grammar; $(MAKE) PGENDIR=$$P \ ! OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.31,1.32 Message-ID: <200008121809.LAA11105@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Doc/ref Modified Files: ref5.tex Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: ref5.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** ref5.tex 2000/07/31 20:08:23 1.31 --- ref5.tex 2000/08/12 18:09:50 1.32 *************** *** 153,163 **** \begin{verbatim} ! list_display: "[" [expression_list] "]" \end{verbatim} ! A list display yields a new list object. If it has no expression ! list, the list object has no items. Otherwise, the elements of the ! expression list are evaluated from left to right and inserted in the ! list object in that order. \obindex{list} \indexii{empty}{list} --- 153,172 ---- \begin{verbatim} ! list_display: "[" [expression_list [list_iter]] "]" ! list_iter: list_for | list_if ! list_for: "for" expression_list "in" testlist [list_iter] ! list_if: "if" test [list_iter] \end{verbatim} ! A list display yields a new list object. Its contents are specified ! by providing either a list of expressions or a list comprehension. ! When a comma-separated list of expressions is supplied, its elements are ! evaluated from left to right and placed into the list object in that ! order. When a list comprehension is supplied, it consists of a ! single expression followed by one or more "for" or "if" clauses. In this ! case, the elements of the new list are those that would be produced ! by considering each of the "for" or "if" clauses a block, nesting from ! left to right, and evaluating the expression to produce a list element ! each time the innermost block is reached. \obindex{list} \indexii{empty}{list} From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include graminit.h,2.13,2.14 Message-ID: <200008121809.LAA11124@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Include Modified Files: graminit.h Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: graminit.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/graminit.h,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** graminit.h 1997/04/02 05:23:10 2.13 --- graminit.h 2000/08/12 18:09:51 2.14 *************** *** 45,57 **** #define power 300 #define atom 301 ! #define lambdef 302 ! #define trailer 303 ! #define subscriptlist 304 ! #define subscript 305 ! #define sliceop 306 ! #define exprlist 307 ! #define testlist 308 ! #define dictmaker 309 ! #define classdef 310 ! #define arglist 311 ! #define argument 312 --- 45,61 ---- #define power 300 #define atom 301 ! #define listmaker 302 ! #define lambdef 303 ! #define trailer 304 ! #define subscriptlist 305 ! #define subscript 306 ! #define sliceop 307 ! #define exprlist 308 ! #define testlist 309 ! #define dictmaker 310 ! #define classdef 311 ! #define arglist 312 ! #define argument 313 ! #define list_iter 314 ! #define list_for 315 ! #define list_if 316 From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.35,1.36 Message-ID: <200008121809.LAA11119@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Grammar Modified Files: Grammar Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** Grammar 2000/03/28 23:49:00 1.35 --- Grammar 2000/08/12 18:09:51 1.36 *************** *** 75,79 **** factor: ('+'|'-'|'~') factor | power power: atom trailer* ('**' factor)* ! atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME --- 75,80 ---- factor: ('+'|'-'|'~') factor | power power: atom trailer* ('**' factor)* ! atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ ! listmaker: test ( list_iter | (',' test)* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME *************** *** 89,90 **** --- 90,95 ---- arglist: (argument ',')* (argument [',']| '*' test [',' '**' test] | '**' test) argument: [test '='] test # Really [keyword '='] test + + list_iter: list_for | list_if + list_for: 'for' exprlist 'in' testlist [list_iter] + list_if: 'if' test [list_iter] From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.13,1.14 Message-ID: <200008121809.LAA11125@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Lib/test Modified Files: test_grammar.py Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** test_grammar.py 2000/03/28 23:51:13 1.13 --- test_grammar.py 2000/08/12 18:09:51 1.14 *************** *** 543,544 **** --- 543,584 ---- def meth2(self, arg): pass def meth3(self, a1, a2): pass + + # list comprehension tests + nums = [1, 2, 3, 4, 5] + strs = ["Apple", "Banana", "Coconut"] + spcs = [" Apple", " Banana ", "Coco nut "] + + print [s.strip() for s in spcs] + print [3 * x for x in nums] + print [x for x in nums if x > 2] + print [(i, s) for i in nums for s in strs] + print [(i, s) for i in nums for s in [f for f in strs if "n" in f]] + try: + eval("[i, s for i in nums for s in strs]") + print "FAIL: should have raised a SyntaxError!" + except SyntaxError: + print "good: got a SyntaxError as expected" + + suppliers = [ + (1, "Boeing"), + (2, "Ford"), + (3, "Macdonalds") + ] + + parts = [ + (10, "Airliner"), + (20, "Engine"), + (30, "Cheeseburger") + ] + + suppart = [ + (1, 10), (1, 20), (2, 20), (3, 30) + ] + + print [ + (sname, pname) + for (sno, sname) in suppliers + for (pno, pname) in parts + for (sp_sno, sp_pno) in suppart + if sno == sp_sno and pno == sp_pno + ] From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.111,1.112 Message-ID: <200008121809.LAA11120@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tut In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Doc/tut Modified Files: tut.tex Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: tut.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v retrieving revision 1.111 retrieving revision 1.112 diff -C2 -r1.111 -r1.112 *** tut.tex 2000/07/27 20:55:12 1.111 --- tut.tex 2000/08/12 18:09:50 1.112 *************** *** 1754,1757 **** --- 1754,1778 ---- \end{verbatim} + \subsection{List Comprehensions} + + List comprehensions provide a concise way to create lists without resorting + to use of the \func{map()} or \func{filter()} functions. The resulting + construct tends often to be clearer than use of those functions. + + \begin{verbatim} + >>> spcs = [" Apple", " Banana ", "Coco nut "] + >>> print [s.strip() for s in spcs] + ['Apple', 'Banana', 'Coco nut'] + >>> vec = [2, 4, 6] + >>> print [3*x for x in vec] + [6, 12, 18] + >>> vec1 = [2, 4, 6] + >>> vec2 = [4, 3, -9] + >>> print [x*y for x in vec1 for y in vec2] + [8, 6, -18, 16, 12, -36, 24, 18, -54] + >>> print [x+y for x in vec1 for y in vec2] + [6, 5, -7, 8, 7, -5, 10, 9, -3] + \end{verbatim} + \section{The \keyword{del} statement \label{del}} From python-dev@python.org Sat Aug 12 19:09:53 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.3,1.4 Message-ID: <200008121809.LAA11133@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Lib/test/output Modified Files: test_grammar Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_grammar 2000/03/28 23:53:22 1.3 --- test_grammar 2000/08/12 18:09:51 1.4 *************** *** 46,47 **** --- 46,54 ---- atoms classdef + ['Apple', 'Banana', 'Coco nut'] + [3, 6, 9, 12, 15] + [3, 4, 5] + [(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')] + [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')] + good: got a SyntaxError as expected + [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')] From python-dev@python.org Sat Aug 12 19:09:54 2000 From: python-dev@python.org (Skip Montanaro) Date: Sat, 12 Aug 2000 11:09:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.120,2.121 graminit.c,2.23,2.24 Message-ID: <200008121809.LAA11145@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9983/Python Modified Files: compile.c graminit.c Log Message: list comprehensions. see http://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 for details. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.120 retrieving revision 2.121 diff -C2 -r2.120 -r2.121 *** compile.c 2000/08/11 22:15:52 2.120 --- compile.c 2000/08/12 18:09:51 2.121 *************** *** 295,298 **** --- 295,299 ---- char *c_private; /* for private name mangling */ #endif + int c_tmpname; /* temporary local name counter */ }; *************** *** 369,374 **** --- 370,377 ---- static void com_addopname(struct compiling *, int, node *); static void com_list(struct compiling *, node *, int); + static void com_list_iter(struct compiling *, node *, node *, char *); static int com_argdefs(struct compiling *, node *); static int com_newlocal(struct compiling *, char *); + static void com_assign(struct compiling *, node *, int); static PyCodeObject *icompile(struct _node *, struct compiling *); static PyCodeObject *jcompile(struct _node *, char *, *************** *** 420,423 **** --- 423,427 ---- c->c_last_line = 0; c-> c_lnotab_next = 0; + c->c_tmpname = 0; return 1; *************** *** 942,957 **** static void ! com_list_constructor(struct compiling *c, node *n) { ! int len; ! int i; ! if (TYPE(n) != testlist) ! REQ(n, exprlist); ! /* exprlist: expr (',' expr)* [',']; likewise for testlist */ ! len = (NCH(n) + 1) / 2; ! for (i = 0; i < NCH(n); i += 2) ! com_node(c, CHILD(n, i)); ! com_addoparg(c, BUILD_LIST, len); ! com_pop(c, len-1); } --- 946,1059 ---- static void ! com_list_for(struct compiling *c, node *n, node *e, char *t) { ! PyObject *v; ! int anchor = 0; ! int save_begin = c->c_begin; ! ! /* list_iter: for v in expr [list_iter] */ ! com_node(c, CHILD(n, 3)); /* expr */ ! v = PyInt_FromLong(0L); ! if (v == NULL) ! c->c_errors++; ! com_addoparg(c, LOAD_CONST, com_addconst(c, v)); ! com_push(c, 1); ! Py_XDECREF(v); ! c->c_begin = c->c_nexti; ! com_addoparg(c, SET_LINENO, n->n_lineno); ! com_addfwref(c, FOR_LOOP, &anchor); ! com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN); ! c->c_loops++; ! com_list_iter(c, n, e, t); ! c->c_loops--; ! com_addoparg(c, JUMP_ABSOLUTE, c->c_begin); ! c->c_begin = save_begin; ! com_backpatch(c, anchor); ! com_pop(c, 2); /* FOR_LOOP has popped these */ ! } ! ! static void ! com_list_if(struct compiling *c, node *n, node *e, char *t) ! { ! int anchor = 0; ! int a = 0; ! /* list_iter: 'if' test [list_iter] */ ! com_addoparg(c, SET_LINENO, n->n_lineno); ! com_node(c, CHILD(n, 1)); ! com_addfwref(c, JUMP_IF_FALSE, &a); ! com_addbyte(c, POP_TOP); ! com_pop(c, 1); ! com_list_iter(c, n, e, t); ! com_addfwref(c, JUMP_FORWARD, &anchor); ! com_backpatch(c, a); ! /* We jump here with an extra entry which we now pop */ ! com_addbyte(c, POP_TOP); ! com_backpatch(c, anchor); ! } ! ! static void ! com_list_iter(struct compiling *c, ! node *p, /* parent of list_iter node */ ! node *e, /* element expression node */ ! char *t /* name of result list temp local */) ! { ! /* list_iter is the last child in a listmaker, list_for, or list_if */ ! node *n = CHILD(p, NCH(p)-1); ! if (TYPE(n) == list_iter) { ! n = CHILD(n, 0); ! switch (TYPE(n)) { ! case list_for: ! com_list_for(c, n, e, t); ! break; ! case list_if: ! com_list_if(c, n, e, t); ! break; ! default: ! com_error(c, PyExc_SystemError, ! "invalid list_iter node type"); ! } ! } ! else { ! com_addopnamestr(c, LOAD_NAME, t); ! com_push(c, 1); ! com_node(c, e); ! com_addoparg(c, CALL_FUNCTION, 1); ! com_addbyte(c, POP_TOP); ! com_pop(c, 2); ! } ! } ! ! static void ! com_list_comprehension(struct compiling *c, node *n) ! { ! /* listmaker: test list_iter */ ! char tmpname[12]; ! sprintf(tmpname, "__%d__", ++c->c_tmpname); ! com_addoparg(c, BUILD_LIST, 0); ! com_addbyte(c, DUP_TOP); /* leave the result on the stack */ ! com_push(c, 2); ! com_addopnamestr(c, LOAD_ATTR, "append"); ! com_addopnamestr(c, STORE_NAME, tmpname); ! com_pop(c, 1); ! com_list_iter(c, n, CHILD(n, 0), tmpname); ! com_addopnamestr(c, DELETE_NAME, tmpname); ! --c->c_tmpname; ! } ! ! static void ! com_listmaker(struct compiling *c, node *n) ! { ! /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (TYPE(CHILD(n, 1)) == list_iter) ! com_list_comprehension(c, n); ! else { ! int len = 0; ! int i; ! for (i = 0; i < NCH(n); i += 2, len++) ! com_node(c, CHILD(n, i)); ! com_addoparg(c, BUILD_LIST, len); ! com_pop(c, len-1); ! } } *************** *** 991,995 **** com_node(c, CHILD(n, 1)); break; ! case LSQB: if (TYPE(CHILD(n, 1)) == RSQB) { com_addoparg(c, BUILD_LIST, 0); --- 1093,1097 ---- com_node(c, CHILD(n, 1)); break; ! case LSQB: /* '[' [listmaker] ']' */ if (TYPE(CHILD(n, 1)) == RSQB) { com_addoparg(c, BUILD_LIST, 0); *************** *** 997,1006 **** } else ! com_list_constructor(c, CHILD(n, 1)); break; case LBRACE: /* '{' [dictmaker] '}' */ com_addoparg(c, BUILD_MAP, 0); com_push(c, 1); ! if (TYPE(CHILD(n, 1)) != RBRACE) com_dictmaker(c, CHILD(n, 1)); break; --- 1099,1108 ---- } else ! com_listmaker(c, CHILD(n, 1)); break; case LBRACE: /* '{' [dictmaker] '}' */ com_addoparg(c, BUILD_MAP, 0); com_push(c, 1); ! if (TYPE(CHILD(n, 1)) == dictmaker) com_dictmaker(c, CHILD(n, 1)); break; *************** *** 1735,1738 **** --- 1837,1853 ---- if (TYPE(n) != testlist) REQ(n, exprlist); + if (assigning) { + i = (NCH(n)+1)/2; + com_addoparg(c, UNPACK_SEQUENCE, i); + com_push(c, i-1); + } + for (i = 0; i < NCH(n); i += 2) + com_assign(c, CHILD(n, i), assigning); + } + + static void + com_assign_list(struct compiling *c, node *n, int assigning) + { + int i; if (assigning) { i = (NCH(n)+1)/2; Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.23 retrieving revision 2.24 diff -C2 -r2.23 -r2.24 *** graminit.c 2000/03/28 23:49:17 2.23 --- graminit.c 2000/08/12 18:09:51 2.24 *************** *** 897,905 **** {16, 1}, {109, 2}, ! {111, 3}, ! {114, 4}, {12, 5}, ! {115, 5}, ! {116, 6}, }; static arc arcs_45_1[2] = { --- 897,905 ---- [...967 lines suppressed...] {25, 0}, {2, 0}, {3, 0}, + {314, 0}, {1, "lambda"}, ! {312, 0}, {305, 0}, {306, 0}, + {307, 0}, {1, "class"}, ! {313, 0}, ! {315, 0}, ! {316, 0}, }; grammar _PyParser_Grammar = { ! 61, dfas, ! {128, labels}, 256 }; From python-dev@python.org Sat Aug 12 19:43:05 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 12 Aug 2000 11:43:05 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.143,1.144 Message-ID: <200008121843.LAA16039@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv15418 Modified Files: configure.in Log Message: Back out ESR's erroneous commit of a DB-related change Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.143 retrieving revision 1.144 diff -C2 -r1.143 -r1.144 *** configure.in 2000/08/10 04:23:29 1.143 --- configure.in 2000/08/12 18:43:02 1.144 *************** *** 1015,1024 **** # (none yet) - # Cope with the DB mess. If we detect libdba, assume it's a version 2 - # or later DB and should be linked first (before the DB 1.xx stuff in glibc). - # Also define an appropriate symbol so we can conditionalize code in the - # dbmmodule; the API has changed since 1.xx. - AC_CHECK_LIB(dba, __db_mutex_lock) - # Linux requires this for correct f.p. operations AC_CHECK_FUNC(__fpu_control, --- 1015,1018 ---- From python-dev@python.org Sat Aug 12 20:09:18 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 12 Aug 2000 12:09:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib symbol.py,1.9,1.10 Message-ID: <200008121909.MAA12874@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12613 Modified Files: symbol.py Log Message: Updated this module after the recent grammar changes Index: symbol.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/symbol.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** symbol.py 2000/02/04 15:28:41 1.9 --- symbol.py 2000/08/12 19:09:14 1.10 *************** *** 57,71 **** power = 300 atom = 301 ! lambdef = 302 ! trailer = 303 ! subscriptlist = 304 ! subscript = 305 ! sliceop = 306 ! exprlist = 307 ! testlist = 308 ! dictmaker = 309 ! classdef = 310 ! arglist = 311 ! argument = 312 #--end constants-- --- 57,75 ---- power = 300 atom = 301 ! listmaker = 302 ! lambdef = 303 ! trailer = 304 ! subscriptlist = 305 ! subscript = 306 ! sliceop = 307 ! exprlist = 308 ! testlist = 309 ! dictmaker = 310 ! classdef = 311 ! arglist = 312 ! argument = 313 ! list_iter = 314 ! list_for = 315 ! list_if = 316 #--end constants-- From python-dev@python.org Sat Aug 12 20:37:30 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 12:37:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodectype.c,2.5,2.6 Message-ID: <200008121937.MAA21713@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv20993/Objects Modified Files: unicodectype.c Log Message: Add the current Win64 compiler to the list of those that need the huge switch statement broken up. This will probably not be necessary when the Win64 compiler matures. Index: unicodectype.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodectype.c,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -r2.5 -r2.6 *** unicodectype.c 2000/08/03 16:24:25 2.5 --- unicodectype.c 2000/08/12 19:37:27 2.6 *************** *** 15,19 **** #include "unicodeobject.h" ! #ifdef macintosh /* This probably needs to be defined for some other compilers too. It breaks the ** 5000-label switch statement up into switches with around 1000 cases each. --- 15,23 ---- #include "unicodeobject.h" ! #if defined(macintosh) || defined(MS_WIN64) ! /*XXX This was required to avoid a compiler error for an early Win64 ! * cross-compiler that was used for the port to Win64. When the platform is ! * released the MS_WIN64 inclusion here should no longer be necessary. ! */ /* This probably needs to be defined for some other compilers too. It breaks the ** 5000-label switch statement up into switches with around 1000 cases each. From python-dev@python.org Sat Aug 12 21:08:07 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 12 Aug 2000 13:08:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.112,1.113 Message-ID: <200008122008.NAA04295@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tut In directory slayer.i.sourceforge.net:/tmp/cvs-serv4208/tut Modified Files: tut.tex Log Message: Fix some markup errors that prevented formatting, and one that didn't. Index: tut.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v retrieving revision 1.112 retrieving revision 1.113 diff -C2 -r1.112 -r1.113 *** tut.tex 2000/08/12 18:09:50 1.112 --- tut.tex 2000/08/12 20:08:04 1.113 *************** *** 1756,1762 **** \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without resorting ! to use of the \func{map()} or \func{filter()} functions. The resulting ! construct tends often to be clearer than use of those functions. \begin{verbatim} --- 1756,1763 ---- \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without ! resorting to use of the \function{map()} or \function{filter()} ! functions. The resulting construct tends often to be clearer than use ! of those functions. \begin{verbatim} *************** *** 1778,1782 **** There is a way to remove an item from a list given its index instead ! of its value: the \code{del} statement. This can also be used to remove slices from a list (which we did earlier by assignment of an empty list to the slice). For example: --- 1779,1783 ---- There is a way to remove an item from a list given its index instead ! of its value: the \keyword{del} statement. This can also be used to remove slices from a list (which we did earlier by assignment of an empty list to the slice). For example: From python-dev@python.org Sat Aug 12 21:32:49 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 12 Aug 2000 13:32:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Tools/compiler/compiler pyassem.py,1.9,1.10 pycodegen.py,1.21,1.22 visitor.py,1.3,1.4 Message-ID: <200008122032.NAA11844@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Tools/compiler/compiler In directory slayer.i.sourceforge.net:/tmp/cvs-serv6567/compiler Modified Files: pyassem.py pycodegen.py visitor.py Log Message: Bring Tools/compiler almost up to date. Specifically: - fix tab space issues (SF patch #101167 by Neil Schemenauer) - fix co_flags for classes to include CO_NEWLOCALS (SF patch #101145 by Neil) - fix for merger of UNPACK_LIST and UNPACK_TUPLE into UNPACK_SEQUENCE, (SF patch #101168 by, well, Neil :) - Adjust bytecode MAGIC to current bytecode. TODO: teach compile.py about list comprehensions. Index: pyassem.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/pyassem.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pyassem.py 2000/05/02 22:32:59 1.9 --- pyassem.py 2000/08/12 20:32:46 1.10 *************** *** 10,69 **** class FlowGraph: def __init__(self): ! self.current = self.entry = Block() ! self.exit = Block("exit") ! self.blocks = misc.Set() ! self.blocks.add(self.entry) ! self.blocks.add(self.exit) def startBlock(self, block): ! self.current = block def nextBlock(self, block=None): ! if block is None: ! block = self.newBlock() ! # XXX think we need to specify when there is implicit transfer ! # from one block to the next ! # ! # I think this strategy works: each block has a child ! # designated as "next" which is returned as the last of the ! # children. because the nodes in a graph are emitted in ! # reverse post order, the "next" block will always be emitted ! # immediately after its parent. ! # Worry: maintaining this invariant could be tricky ! self.current.addNext(block) ! self.startBlock(block) def newBlock(self): ! b = Block() ! self.blocks.add(b) ! return b def startExitBlock(self): ! self.startBlock(self.exit) def emit(self, *inst): ! # XXX should jump instructions implicitly call nextBlock? ! if inst[0] == 'RETURN_VALUE': ! self.current.addOutEdge(self.exit) ! self.current.emit(inst) def getBlocks(self): ! """Return the blocks in reverse postorder ! i.e. each node appears before all of its successors ! """ ! # XXX make sure every node that doesn't have an explicit next ! # is set so that next points to exit ! for b in self.blocks.elements(): ! if b is self.exit: ! continue ! if not b.next: ! b.addNext(self.exit) ! order = dfs_postorder(self.entry, {}) ! order.reverse() ! # hack alert ! if not self.exit in order: ! order.append(self.exit) ! return order def dfs_postorder(b, seen): --- 10,69 ---- class FlowGraph: def __init__(self): ! self.current = self.entry = Block() ! self.exit = Block("exit") ! self.blocks = misc.Set() ! self.blocks.add(self.entry) ! self.blocks.add(self.exit) def startBlock(self, block): ! self.current = block def nextBlock(self, block=None): ! if block is None: ! block = self.newBlock() ! # XXX think we need to specify when there is implicit transfer ! # from one block to the next ! # ! # I think this strategy works: each block has a child ! # designated as "next" which is returned as the last of the ! # children. because the nodes in a graph are emitted in ! # reverse post order, the "next" block will always be emitted ! # immediately after its parent. ! # Worry: maintaining this invariant could be tricky ! self.current.addNext(block) ! self.startBlock(block) def newBlock(self): ! b = Block() ! self.blocks.add(b) ! return b def startExitBlock(self): ! self.startBlock(self.exit) def emit(self, *inst): ! # XXX should jump instructions implicitly call nextBlock? ! if inst[0] == 'RETURN_VALUE': ! self.current.addOutEdge(self.exit) ! self.current.emit(inst) def getBlocks(self): ! """Return the blocks in reverse postorder ! i.e. each node appears before all of its successors ! """ ! # XXX make sure every node that doesn't have an explicit next ! # is set so that next points to exit ! for b in self.blocks.elements(): ! if b is self.exit: ! continue ! if not b.next: ! b.addNext(self.exit) ! order = dfs_postorder(self.entry, {}) ! order.reverse() ! # hack alert ! if not self.exit in order: ! order.append(self.exit) ! return order def dfs_postorder(b, seen): *************** *** 72,78 **** seen[b] = b for c in b.children(): ! if seen.has_key(c): ! continue ! order = order + dfs_postorder(c, seen) order.append(b) return order --- 72,78 ---- seen[b] = b for c in b.children(): ! if seen.has_key(c): ! continue ! order = order + dfs_postorder(c, seen) order.append(b) return order *************** *** 82,126 **** def __init__(self, label=''): ! self.insts = [] ! self.inEdges = misc.Set() ! self.outEdges = misc.Set() ! self.label = label ! self.bid = Block._count ! self.next = [] ! Block._count = Block._count + 1 def __repr__(self): ! if self.label: ! return "" % (self.label, self.bid, ! len(self.insts)) ! else: ! return "" % (self.bid, len(self.insts)) def __str__(self): ! insts = map(str, self.insts) ! return "" % (self.label, self.bid, ! string.join(insts, '\n')) def emit(self, inst): ! op = inst[0] ! if op[:4] == 'JUMP': ! self.outEdges.add(inst[1]) ! self.insts.append(inst) def getInstructions(self): ! return self.insts def addInEdge(self, block): ! self.inEdges.add(block) def addOutEdge(self, block): ! self.outEdges.add(block) def addNext(self, block): ! self.next.append(block) ! assert len(self.next) == 1, map(str, self.next) def children(self): ! return self.outEdges.elements() + self.next # flags for code objects --- 82,126 ---- def __init__(self, label=''): ! self.insts = [] ! self.inEdges = misc.Set() ! self.outEdges = misc.Set() ! self.label = label ! self.bid = Block._count ! self.next = [] ! Block._count = Block._count + 1 def __repr__(self): ! if self.label: ! return "" % (self.label, self.bid, ! len(self.insts)) ! else: ! return "" % (self.bid, len(self.insts)) def __str__(self): ! insts = map(str, self.insts) ! return "" % (self.label, self.bid, ! string.join(insts, '\n')) def emit(self, inst): ! op = inst[0] ! if op[:4] == 'JUMP': ! self.outEdges.add(inst[1]) ! self.insts.append(inst) def getInstructions(self): ! return self.insts def addInEdge(self, block): ! self.inEdges.add(block) def addOutEdge(self, block): ! self.outEdges.add(block) def addNext(self, block): ! self.next.append(block) ! assert len(self.next) == 1, map(str, self.next) def children(self): ! return self.outEdges.elements() + self.next # flags for code objects *************** *** 140,155 **** def __init__(self, name, filename, args=(), optimized=0): ! self.super_init() ! self.name = name ! self.filename = filename ! self.docstring = None ! self.args = args # XXX ! self.argcount = getArgCount(args) ! if optimized: ! self.flags = CO_OPTIMIZED | CO_NEWLOCALS ! else: ! self.flags = 0 ! self.consts = [] ! self.names = [] self.varnames = list(args) or [] for i in range(len(self.varnames)): --- 140,155 ---- def __init__(self, name, filename, args=(), optimized=0): ! self.super_init() ! self.name = name ! self.filename = filename ! self.docstring = None ! self.args = args # XXX ! self.argcount = getArgCount(args) ! if optimized: ! self.flags = CO_OPTIMIZED | CO_NEWLOCALS ! else: ! self.flags = 0 ! self.consts = [] ! self.names = [] self.varnames = list(args) or [] for i in range(len(self.varnames)): *************** *** 164,174 **** def setFlag(self, flag): ! self.flags = self.flags | flag ! if flag == CO_VARARGS: ! self.argcount = self.argcount - 1 def getCode(self): ! """Get a Python code object""" ! if self.stage == RAW: self.flattenGraph() if self.stage == FLAT: --- 164,174 ---- def setFlag(self, flag): ! self.flags = self.flags | flag ! if flag == CO_VARARGS: ! self.argcount = self.argcount - 1 def getCode(self): ! """Get a Python code object""" ! if self.stage == RAW: self.flattenGraph() if self.stage == FLAT: *************** *** 199,227 **** def flattenGraph(self): ! """Arrange the blocks in order and resolve jumps""" ! assert self.stage == RAW ! self.insts = insts = [] ! pc = 0 ! begin = {} ! end = {} ! for b in self.getBlocks(): ! begin[b] = pc ! for inst in b.getInstructions(): ! insts.append(inst) ! if len(inst) == 1: ! pc = pc + 1 ! else: ! # arg takes 2 bytes ! pc = pc + 3 ! end[b] = pc ! pc = 0 ! for i in range(len(insts)): ! inst = insts[i] ! if len(inst) == 1: pc = pc + 1 else: pc = pc + 3 ! opname = inst[0] ! if self.hasjrel.has_elt(opname): oparg = inst[1] offset = begin[oparg] - pc --- 199,227 ---- def flattenGraph(self): ! """Arrange the blocks in order and resolve jumps""" ! assert self.stage == RAW ! self.insts = insts = [] ! pc = 0 ! begin = {} ! end = {} ! for b in self.getBlocks(): ! begin[b] = pc ! for inst in b.getInstructions(): ! insts.append(inst) ! if len(inst) == 1: ! pc = pc + 1 ! else: ! # arg takes 2 bytes ! pc = pc + 3 ! end[b] = pc ! pc = 0 ! for i in range(len(insts)): ! inst = insts[i] ! if len(inst) == 1: pc = pc + 1 else: pc = pc + 3 ! opname = inst[0] ! if self.hasjrel.has_elt(opname): oparg = inst[1] offset = begin[oparg] - pc *************** *** 229,234 **** elif self.hasjabs.has_elt(opname): insts[i] = opname, begin[inst[1]] ! self.stacksize = findDepth(self.insts) ! self.stage = FLAT hasjrel = misc.Set() --- 229,234 ---- elif self.hasjabs.has_elt(opname): insts[i] = opname, begin[inst[1]] ! self.stacksize = findDepth(self.insts) ! self.stage = FLAT hasjrel = misc.Set() *************** *** 293,297 **** _cmp = list(dis.cmp_op) def _convert_COMPARE_OP(self, arg): ! return self._cmp.index(arg) # similarly for other opcodes... --- 293,297 ---- _cmp = list(dis.cmp_op) def _convert_COMPARE_OP(self, arg): ! return self._cmp.index(arg) # similarly for other opcodes... *************** *** 315,324 **** lnotab.nextLine(oparg) hi, lo = twobyte(oparg) ! try: ! lnotab.addCode(self.opnum[opname], lo, hi) ! except ValueError: ! print opname, oparg ! print self.opnum[opname], lo, hi ! raise self.stage = DONE --- 315,324 ---- lnotab.nextLine(oparg) hi, lo = twobyte(oparg) ! try: ! lnotab.addCode(self.opnum[opname], lo, hi) ! except ValueError: ! print opname, oparg ! print self.opnum[opname], lo, hi ! raise self.stage = DONE *************** *** 355,362 **** l.append(elt) return tuple(l) ! def isJump(opname): if opname[:4] == 'JUMP': ! return 1 class TupleArg: --- 355,362 ---- l.append(elt) return tuple(l) ! def isJump(opname): if opname[:4] == 'JUMP': ! return 1 class TupleArg: *************** *** 373,380 **** argcount = len(args) if args: ! for arg in args: ! if isinstance(arg, TupleArg): ! numNames = len(misc.flatten(arg.names)) ! argcount = argcount - numNames return argcount --- 373,380 ---- argcount = len(args) if args: ! for arg in args: ! if isinstance(arg, TupleArg): ! numNames = len(misc.flatten(arg.names)) ! argcount = argcount - numNames return argcount *************** *** 514,522 **** # special cases: ! # UNPACK_TUPLE, UNPACK_LIST, BUILD_TUPLE, # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE ! def UNPACK_TUPLE(self, count): ! return count ! def UNPACK_LIST(self, count): return count def BUILD_TUPLE(self, count): --- 514,520 ---- # special cases: ! # UNPACK_SEQUENCE, BUILD_TUPLE, # BUILD_LIST, CALL_FUNCTION, MAKE_FUNCTION, BUILD_SLICE ! def UNPACK_SEQUENCE(self, count): return count def BUILD_TUPLE(self, count): Index: pycodegen.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/pycodegen.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** pycodegen.py 2000/08/04 16:56:51 1.21 --- pycodegen.py 2000/08/12 20:32:46 1.22 *************** *** 8,12 **** from compiler import ast, parse, walk from compiler import pyassem, misc ! from compiler.pyassem import CO_VARARGS, CO_VARKEYWORDS, TupleArg callfunc_opcode_info = { --- 8,12 ---- from compiler import ast, parse, walk from compiler import pyassem, misc ! from compiler.pyassem import CO_VARARGS, CO_VARKEYWORDS, CO_NEWLOCALS, TupleArg callfunc_opcode_info = { *************** *** 30,59 **** class Module: def __init__(self, source, filename): ! self.filename = filename ! self.source = source ! self.code = None def compile(self): ! ast = parse(self.source) root, filename = os.path.split(self.filename) ! gen = ModuleCodeGenerator(filename) ! walk(ast, gen, 1) ! self.code = gen.getCode() def dump(self, f): ! f.write(self.getPycHeader()) ! marshal.dump(self.code, f) ! MAGIC = (20121 | (ord('\r')<<16) | (ord('\n')<<24)) def getPycHeader(self): ! # compile.c uses marshal to write a long directly, with ! # calling the interface that would also generate a 1-byte code ! # to indicate the type of the value. simplest way to get the ! # same effect is to call marshal and then skip the code. ! magic = marshal.dumps(self.MAGIC)[1:] ! mtime = os.stat(self.filename)[stat.ST_MTIME] ! mtime = struct.pack('i', mtime) ! return magic + mtime class CodeGenerator: --- 30,59 ---- class Module: def __init__(self, source, filename): ! self.filename = filename ! self.source = source ! self.code = None def compile(self): ! ast = parse(self.source) root, filename = os.path.split(self.filename) ! gen = ModuleCodeGenerator(filename) ! walk(ast, gen, 1) ! self.code = gen.getCode() def dump(self, f): ! f.write(self.getPycHeader()) ! marshal.dump(self.code, f) ! MAGIC = (50811 | (ord('\r')<<16) | (ord('\n')<<24)) def getPycHeader(self): ! # compile.c uses marshal to write a long directly, with ! # calling the interface that would also generate a 1-byte code ! # to indicate the type of the value. simplest way to get the ! # same effect is to call marshal and then skip the code. ! magic = marshal.dumps(self.MAGIC)[1:] ! mtime = os.stat(self.filename)[stat.ST_MTIME] ! mtime = struct.pack('i', mtime) ! return magic + mtime class CodeGenerator: *************** *** 64,85 **** ## Subclasses must define a constructor that intializes self.graph ## before calling this init function ! ## self.graph = pyassem.PyFlowGraph() ! self.filename = filename ! self.locals = misc.Stack() ! self.loops = misc.Stack() ! self.curStack = 0 ! self.maxStack = 0 ! self._setupGraphDelegation() def _setupGraphDelegation(self): ! self.emit = self.graph.emit ! self.newBlock = self.graph.newBlock ! self.startBlock = self.graph.startBlock ! self.nextBlock = self.graph.nextBlock ! self.setDocstring = self.graph.setDocstring def getCode(self): ! """Return a code object""" ! return self.graph.getCode() # Next five methods handle name access --- 64,85 ---- ## Subclasses must define a constructor that intializes self.graph ## before calling this init function ! ## self.graph = pyassem.PyFlowGraph() ! self.filename = filename ! self.locals = misc.Stack() ! self.loops = misc.Stack() ! self.curStack = 0 ! self.maxStack = 0 ! self._setupGraphDelegation() def _setupGraphDelegation(self): ! self.emit = self.graph.emit ! self.newBlock = self.graph.newBlock ! self.startBlock = self.graph.startBlock ! self.nextBlock = self.graph.nextBlock ! self.setDocstring = self.graph.setDocstring def getCode(self): ! """Return a code object""" ! return self.graph.getCode() # Next five methods handle name access *************** *** 98,106 **** def _nameOp(self, prefix, name): ! if not self.optimized: ! self.emit(prefix + '_NAME', name) ! return if self.isLocalName(name): ! self.emit(prefix + '_FAST', name) else: self.emit(prefix + '_GLOBAL', name) --- 98,106 ---- def _nameOp(self, prefix, name): ! if not self.optimized: ! self.emit(prefix + '_NAME', name) ! return if self.isLocalName(name): ! self.emit(prefix + '_FAST', name) else: self.emit(prefix + '_GLOBAL', name) *************** *** 126,148 **** def visitModule(self, node): ! lnf = walk(node.node, LocalNameFinder(), 0) ! self.locals.push(lnf.getLocals()) ! self.setDocstring(node.doc) ! self.visit(node.node) ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def visitFunction(self, node): ! self._visitFuncOrLambda(node, isLambda=0) ! self.storeName(node.name) def visitLambda(self, node): ! self._visitFuncOrLambda(node, isLambda=1) ! ## self.storeName("") def _visitFuncOrLambda(self, node, isLambda): ! gen = FunctionCodeGenerator(node, self.filename, isLambda) ! walk(node.code, gen) ! gen.finish() self.set_lineno(node) for default in node.defaults: --- 126,148 ---- def visitModule(self, node): ! lnf = walk(node.node, LocalNameFinder(), 0) ! self.locals.push(lnf.getLocals()) ! self.setDocstring(node.doc) ! self.visit(node.node) ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def visitFunction(self, node): ! self._visitFuncOrLambda(node, isLambda=0) ! self.storeName(node.name) def visitLambda(self, node): ! self._visitFuncOrLambda(node, isLambda=1) ! ## self.storeName("") def _visitFuncOrLambda(self, node, isLambda): ! gen = FunctionCodeGenerator(node, self.filename, isLambda) ! walk(node.code, gen) ! gen.finish() self.set_lineno(node) for default in node.defaults: *************** *** 171,236 **** def visitIf(self, node): ! end = self.newBlock() ! numtests = len(node.tests) ! for i in range(numtests): ! test, suite = node.tests[i] self.set_lineno(test) ! self.visit(test) ! ## if i == numtests - 1 and not node.else_: ! ## nextTest = end ! ## else: ! ## nextTest = self.newBlock() ! nextTest = self.newBlock() ! self.emit('JUMP_IF_FALSE', nextTest) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(suite) ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(nextTest) ! self.emit('POP_TOP') ! if node.else_: ! self.visit(node.else_) ! self.nextBlock(end) def visitWhile(self, node): self.set_lineno(node) ! loop = self.newBlock() ! else_ = self.newBlock() ! after = self.newBlock() ! self.emit('SETUP_LOOP', after) ! self.nextBlock(loop) ! self.loops.push(loop) self.set_lineno(node) ! self.visit(node.test) ! self.emit('JUMP_IF_FALSE', else_ or after) ! ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.body) ! self.emit('JUMP_ABSOLUTE', loop) ! ! self.startBlock(else_) # or just the POPs if not else clause ! self.emit('POP_TOP') ! self.emit('POP_BLOCK') ! if node.else_: ! self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitFor(self, node): ! start = self.newBlock() anchor = self.newBlock() ! after = self.newBlock() self.loops.push(start) self.set_lineno(node) ! self.emit('SETUP_LOOP', after) self.visit(node.list) self.visit(ast.Const(0)) ! self.nextBlock(start) self.set_lineno(node) self.emit('FOR_LOOP', anchor) --- 171,236 ---- def visitIf(self, node): ! end = self.newBlock() ! numtests = len(node.tests) ! for i in range(numtests): ! test, suite = node.tests[i] self.set_lineno(test) ! self.visit(test) ! ## if i == numtests - 1 and not node.else_: ! ## nextTest = end ! ## else: ! ## nextTest = self.newBlock() ! nextTest = self.newBlock() ! self.emit('JUMP_IF_FALSE', nextTest) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(suite) ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(nextTest) ! self.emit('POP_TOP') ! if node.else_: ! self.visit(node.else_) ! self.nextBlock(end) def visitWhile(self, node): self.set_lineno(node) ! loop = self.newBlock() ! else_ = self.newBlock() ! after = self.newBlock() ! self.emit('SETUP_LOOP', after) ! self.nextBlock(loop) ! self.loops.push(loop) self.set_lineno(node) ! self.visit(node.test) ! self.emit('JUMP_IF_FALSE', else_ or after) ! ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.body) ! self.emit('JUMP_ABSOLUTE', loop) ! ! self.startBlock(else_) # or just the POPs if not else clause ! self.emit('POP_TOP') ! self.emit('POP_BLOCK') ! if node.else_: ! self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitFor(self, node): ! start = self.newBlock() anchor = self.newBlock() ! after = self.newBlock() self.loops.push(start) self.set_lineno(node) ! self.emit('SETUP_LOOP', after) self.visit(node.list) self.visit(ast.Const(0)) ! self.nextBlock(start) self.set_lineno(node) self.emit('FOR_LOOP', anchor) *************** *** 238,326 **** self.visit(node.body) self.emit('JUMP_ABSOLUTE', start) ! self.nextBlock(anchor) self.emit('POP_BLOCK') if node.else_: self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitBreak(self, node): ! if not self.loops: ! raise SyntaxError, "'break' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) self.set_lineno(node) ! self.emit('BREAK_LOOP') def visitContinue(self, node): if not self.loops: raise SyntaxError, "'continue' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) l = self.loops.top() self.set_lineno(node) self.emit('JUMP_ABSOLUTE', l) ! self.nextBlock() def visitTest(self, node, jump): ! end = self.newBlock() for child in node.nodes[:-1]: self.visit(child) self.emit(jump, end) ! self.nextBlock() self.emit('POP_TOP') self.visit(node.nodes[-1]) ! self.nextBlock(end) def visitAnd(self, node): ! self.visitTest(node, 'JUMP_IF_FALSE') def visitOr(self, node): ! self.visitTest(node, 'JUMP_IF_TRUE') def visitCompare(self, node): ! self.visit(node.expr) ! cleanup = self.newBlock() ! for op, code in node.ops[:-1]: ! self.visit(code) ! self.emit('DUP_TOP') ! self.emit('ROT_THREE') ! self.emit('COMPARE_OP', op) ! self.emit('JUMP_IF_FALSE', cleanup) ! self.nextBlock() ! self.emit('POP_TOP') ! # now do the last comparison ! if node.ops: ! op, code = node.ops[-1] ! self.visit(code) ! self.emit('COMPARE_OP', op) ! if len(node.ops) > 1: ! end = self.newBlock() ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(cleanup) ! self.emit('ROT_TWO') ! self.emit('POP_TOP') ! self.nextBlock(end) # exception related def visitAssert(self, node): ! # XXX would be interesting to implement this via a ! # transformation of the AST before this stage ! end = self.newBlock() self.set_lineno(node) # XXX __debug__ and AssertionError appear to be special cases # -- they are always loaded as globals even if there are local # names. I guess this is a sort of renaming op. ! self.emit('LOAD_GLOBAL', '__debug__') ! self.emit('JUMP_IF_FALSE', end) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.test) ! self.emit('JUMP_IF_TRUE', end) ! self.nextBlock() ! self.emit('LOAD_GLOBAL', 'AssertionError') ! self.visit(node.fail) ! self.emit('RAISE_VARARGS', 2) ! self.nextBlock(end) ! self.emit('POP_TOP') def visitRaise(self, node): --- 238,326 ---- self.visit(node.body) self.emit('JUMP_ABSOLUTE', start) ! self.nextBlock(anchor) self.emit('POP_BLOCK') if node.else_: self.visit(node.else_) ! self.loops.pop() ! self.nextBlock(after) def visitBreak(self, node): ! if not self.loops: ! raise SyntaxError, "'break' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) self.set_lineno(node) ! self.emit('BREAK_LOOP') def visitContinue(self, node): if not self.loops: raise SyntaxError, "'continue' outside loop (%s, %d)" % \ ! (self.filename, node.lineno) l = self.loops.top() self.set_lineno(node) self.emit('JUMP_ABSOLUTE', l) ! self.nextBlock() def visitTest(self, node, jump): ! end = self.newBlock() for child in node.nodes[:-1]: self.visit(child) self.emit(jump, end) ! self.nextBlock() self.emit('POP_TOP') self.visit(node.nodes[-1]) ! self.nextBlock(end) def visitAnd(self, node): ! self.visitTest(node, 'JUMP_IF_FALSE') def visitOr(self, node): ! self.visitTest(node, 'JUMP_IF_TRUE') def visitCompare(self, node): ! self.visit(node.expr) ! cleanup = self.newBlock() ! for op, code in node.ops[:-1]: ! self.visit(code) ! self.emit('DUP_TOP') ! self.emit('ROT_THREE') ! self.emit('COMPARE_OP', op) ! self.emit('JUMP_IF_FALSE', cleanup) ! self.nextBlock() ! self.emit('POP_TOP') ! # now do the last comparison ! if node.ops: ! op, code = node.ops[-1] ! self.visit(code) ! self.emit('COMPARE_OP', op) ! if len(node.ops) > 1: ! end = self.newBlock() ! self.emit('JUMP_FORWARD', end) ! self.nextBlock(cleanup) ! self.emit('ROT_TWO') ! self.emit('POP_TOP') ! self.nextBlock(end) # exception related def visitAssert(self, node): ! # XXX would be interesting to implement this via a ! # transformation of the AST before this stage ! end = self.newBlock() self.set_lineno(node) # XXX __debug__ and AssertionError appear to be special cases # -- they are always loaded as globals even if there are local # names. I guess this is a sort of renaming op. ! self.emit('LOAD_GLOBAL', '__debug__') ! self.emit('JUMP_IF_FALSE', end) ! self.nextBlock() ! self.emit('POP_TOP') ! self.visit(node.test) ! self.emit('JUMP_IF_TRUE', end) ! self.nextBlock() ! self.emit('LOAD_GLOBAL', 'AssertionError') ! self.visit(node.fail) ! self.emit('RAISE_VARARGS', 2) ! self.nextBlock(end) ! self.emit('POP_TOP') def visitRaise(self, node): *************** *** 350,354 **** self.emit('POP_BLOCK') self.emit('JUMP_FORWARD', lElse) ! self.nextBlock(handlers) last = len(node.handlers) - 1 --- 350,354 ---- self.emit('POP_BLOCK') self.emit('JUMP_FORWARD', lElse) ! self.nextBlock(handlers) last = len(node.handlers) - 1 *************** *** 362,366 **** next = self.newBlock() self.emit('JUMP_IF_FALSE', next) ! self.nextBlock() self.emit('POP_TOP') self.emit('POP_TOP') --- 362,366 ---- next = self.newBlock() self.emit('JUMP_IF_FALSE', next) ! self.nextBlock() self.emit('POP_TOP') self.emit('POP_TOP') *************** *** 373,383 **** self.emit('JUMP_FORWARD', end) if expr: ! self.nextBlock(next) self.emit('POP_TOP') self.emit('END_FINALLY') if node.else_: ! self.nextBlock(lElse) self.visit(node.else_) ! self.nextBlock(end) def visitTryFinally(self, node): --- 373,383 ---- self.emit('JUMP_FORWARD', end) if expr: ! self.nextBlock(next) self.emit('POP_TOP') self.emit('END_FINALLY') if node.else_: ! self.nextBlock(lElse) self.visit(node.else_) ! self.nextBlock(end) def visitTryFinally(self, node): *************** *** 388,392 **** self.emit('POP_BLOCK') self.emit('LOAD_CONST', None) ! self.nextBlock(final) self.visit(node.final) self.emit('END_FINALLY') --- 388,392 ---- self.emit('POP_BLOCK') self.emit('LOAD_CONST', None) ! self.nextBlock(final) self.visit(node.final) self.emit('END_FINALLY') *************** *** 395,400 **** ## def visitStmt(self, node): ! ## # nothing to do except walk the children ! ## pass def visitDiscard(self, node): --- 395,400 ---- ## def visitStmt(self, node): ! ## # nothing to do except walk the children ! ## pass def visitDiscard(self, node): *************** *** 406,415 **** def visitKeyword(self, node): ! self.emit('LOAD_CONST', node.name) ! self.visit(node.expr) def visitGlobal(self, node): # no code to generate ! pass def visitName(self, node): --- 406,415 ---- def visitKeyword(self, node): ! self.emit('LOAD_CONST', node.name) ! self.visit(node.expr) def visitGlobal(self, node): # no code to generate ! pass def visitName(self, node): *************** *** 471,475 **** def visitAssTuple(self, node): if findOp(node) != 'OP_DELETE': ! self.emit('UNPACK_TUPLE', len(node.nodes)) for child in node.nodes: self.visit(child) --- 471,475 ---- def visitAssTuple(self, node): if findOp(node) != 'OP_DELETE': ! self.emit('UNPACK_SEQUENCE', len(node.nodes)) for child in node.nodes: self.visit(child) *************** *** 656,663 **** self.emit('BUILD_MAP', 0) for k, v in node.items: ! lineno2 = getattr(node, 'lineno', None) if lineno2 is not None and lineno != lineno2: ! self.emit('SET_LINENO', lineno2) ! lineno = lineno2 self.emit('DUP_TOP') self.visit(v) --- 656,663 ---- self.emit('BUILD_MAP', 0) for k, v in node.items: ! lineno2 = getattr(node, 'lineno', None) if lineno2 is not None and lineno != lineno2: ! self.emit('SET_LINENO', lineno2) ! lineno = lineno2 self.emit('DUP_TOP') self.visit(v) *************** *** 670,676 **** def __init__(self, filename): ! # XXX is ? in compile.c ! self.graph = pyassem.PyFlowGraph("", filename) ! self.super_init(filename) class FunctionCodeGenerator(CodeGenerator): --- 670,676 ---- def __init__(self, filename): ! # XXX is ? in compile.c ! self.graph = pyassem.PyFlowGraph("", filename) ! self.super_init(filename) class FunctionCodeGenerator(CodeGenerator): *************** *** 687,702 **** else: name = func.name ! args, hasTupleArg = generateArgList(func.argnames) ! self.graph = pyassem.PyFlowGraph(name, filename, args, ! optimized=1) ! self.isLambda = isLambda ! self.super_init(filename) lnf = walk(func.code, LocalNameFinder(args), 0) self.locals.push(lnf.getLocals()) ! if func.varargs: ! self.graph.setFlag(CO_VARARGS) ! if func.kwargs: ! self.graph.setFlag(CO_VARKEYWORDS) self.set_lineno(func) if hasTupleArg: --- 687,702 ---- else: name = func.name ! args, hasTupleArg = generateArgList(func.argnames) ! self.graph = pyassem.PyFlowGraph(name, filename, args, ! optimized=1) ! self.isLambda = isLambda ! self.super_init(filename) lnf = walk(func.code, LocalNameFinder(args), 0) self.locals.push(lnf.getLocals()) ! if func.varargs: ! self.graph.setFlag(CO_VARARGS) ! if func.kwargs: ! self.graph.setFlag(CO_VARKEYWORDS) self.set_lineno(func) if hasTupleArg: *************** *** 704,711 **** def finish(self): ! self.graph.startExitBlock() ! if not self.isLambda: ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def generateArgUnpack(self, args): --- 704,711 ---- def finish(self): ! self.graph.startExitBlock() ! if not self.isLambda: ! self.emit('LOAD_CONST', None) ! self.emit('RETURN_VALUE') def generateArgUnpack(self, args): *************** *** 715,742 **** self.emit('LOAD_FAST', '.nested%d' % count) count = count + 1 ! self.unpackTuple(arg) ! def unpackTuple(self, tup): ! self.emit('UNPACK_TUPLE', len(tup)) for elt in tup: if type(elt) == types.TupleType: ! self.unpackTuple(elt) else: self.emit('STORE_FAST', elt) class ClassCodeGenerator(CodeGenerator): super_init = CodeGenerator.__init__ def __init__(self, klass, filename): ! self.graph = pyassem.PyFlowGraph(klass.name, filename, ! optimized=0) self.super_init(filename) lnf = walk(klass.code, LocalNameFinder(), 0) self.locals.push(lnf.getLocals()) def finish(self): ! self.graph.startExitBlock() self.emit('LOAD_LOCALS') ! self.emit('RETURN_VALUE') --- 715,745 ---- self.emit('LOAD_FAST', '.nested%d' % count) count = count + 1 ! self.unpackSequence(arg) ! def unpackSequence(self, tup): ! self.emit('UNPACK_SEQUENCE', len(tup)) for elt in tup: if type(elt) == types.TupleType: ! self.unpackSequence(elt) else: self.emit('STORE_FAST', elt) + unpackTuple = unpackSequence + class ClassCodeGenerator(CodeGenerator): super_init = CodeGenerator.__init__ def __init__(self, klass, filename): ! self.graph = pyassem.PyFlowGraph(klass.name, filename, ! optimized=0) self.super_init(filename) lnf = walk(klass.code, LocalNameFinder(), 0) self.locals.push(lnf.getLocals()) + self.graph.setFlag(CO_NEWLOCALS) def finish(self): ! self.graph.startExitBlock() self.emit('LOAD_LOCALS') ! self.emit('RETURN_VALUE') *************** *** 747,758 **** count = 0 for elt in arglist: ! if type(elt) == types.StringType: ! args.append(elt) ! elif type(elt) == types.TupleType: ! args.append(TupleArg(count, elt)) ! count = count + 1 ! extra.extend(misc.flatten(elt)) ! else: ! raise ValueError, "unexpect argument type:", elt return args + extra, count --- 750,761 ---- count = 0 for elt in arglist: ! if type(elt) == types.StringType: ! args.append(elt) ! elif type(elt) == types.TupleType: ! args.append(TupleArg(count, elt)) ! count = count + 1 ! extra.extend(misc.flatten(elt)) ! else: ! raise ValueError, "unexpect argument type:", elt return args + extra, count *************** *** 772,776 **** def visitDict(self, node): ! pass def visitGlobal(self, node): --- 775,779 ---- def visitDict(self, node): ! pass def visitGlobal(self, node): *************** *** 782,786 **** def visitLambda(self, node): ! pass def visitImport(self, node): --- 785,789 ---- def visitLambda(self, node): ! pass def visitImport(self, node): *************** *** 817,819 **** for file in sys.argv[1:]: ! compile(file) --- 820,822 ---- for file in sys.argv[1:]: ! compile(file) Index: visitor.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/visitor.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** visitor.py 2000/03/16 20:04:16 1.3 --- visitor.py 2000/08/12 20:32:46 1.4 *************** *** 39,43 **** def __init__(self): self.node = None ! self._cache = {} def preorder(self, tree, visitor): --- 39,43 ---- def __init__(self): self.node = None ! self._cache = {} def preorder(self, tree, visitor): *************** *** 48,52 **** def _preorder(self, node, *args): ! return apply(self.dispatch, (node,) + args) def default(self, node, *args): --- 48,52 ---- def _preorder(self, node, *args): ! return apply(self.dispatch, (node,) + args) def default(self, node, *args): *************** *** 57,65 **** def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, self.default) ! self._cache[node.__class__] = meth if self.VERBOSE > 0: if self.VERBOSE == 1: --- 57,65 ---- def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, self.default) ! self._cache[node.__class__] = meth if self.VERBOSE > 0: if self.VERBOSE == 1: *************** *** 68,72 **** else: print "dispatch", className, (meth and meth.__name__ or '') ! return apply(meth, (node,) + args) class ExampleASTVisitor(ASTVisitor): --- 68,72 ---- else: print "dispatch", className, (meth and meth.__name__ or '') ! return apply(meth, (node,) + args) class ExampleASTVisitor(ASTVisitor): *************** *** 81,89 **** def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, 0) ! self._cache[node.__class__] = meth if self.VERBOSE > 1: print "dispatch", className, (meth and meth.__name__ or '') --- 81,89 ---- def dispatch(self, node, *args): self.node = node ! meth = self._cache.get(node.__class__, None) ! className = node.__class__.__name__ ! if meth is None: ! meth = getattr(self.visitor, 'visit' + className, 0) ! self._cache[node.__class__] = meth if self.VERBOSE > 1: print "dispatch", className, (meth and meth.__name__ or '') *************** *** 93,105 **** klass = node.__class__ if not self.examples.has_key(klass): ! self.examples[klass] = klass ! print ! print self.visitor ! print klass ! for attr in dir(node): ! if attr[0] != '_': ! print "\t", "%-12.12s" % attr, getattr(node, attr) ! print ! return apply(self.default, (node,) + args) _walker = ASTVisitor --- 93,105 ---- klass = node.__class__ if not self.examples.has_key(klass): ! self.examples[klass] = klass ! print ! print self.visitor ! print klass ! for attr in dir(node): ! if attr[0] != '_': ! print "\t", "%-12.12s" % attr, getattr(node, attr) ! print ! return apply(self.default, (node,) + args) _walker = ASTVisitor From python-dev@python.org Sat Aug 12 21:58:15 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 13:58:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules arraymodule.c,2.52,2.53 cPickle.c,2.49,2.50 Message-ID: <200008122058.NAA16486@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv16206 Modified Files: arraymodule.c cPickle.c Log Message: Use safer comparisons (only matters when sizeof(int) != sizeof(size_t)). fread and fwrite return size_t, so it is safer to cast up to the largest type for the comparison. I believe the cast is required at all to remove compiler warnings. Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** arraymodule.c 2000/08/01 21:00:58 2.52 --- arraymodule.c 2000/08/12 20:58:11 2.53 *************** *** 1040,1045 **** } if (self->ob_size > 0) { ! if ((int)fwrite(self->ob_item, self->ob_descr->itemsize, ! self->ob_size, fp) != self->ob_size) { PyErr_SetFromErrno(PyExc_IOError); clearerr(fp); --- 1040,1045 ---- } if (self->ob_size > 0) { ! if (fwrite(self->ob_item, self->ob_descr->itemsize, ! self->ob_size, fp) != (size_t)self->ob_size) { PyErr_SetFromErrno(PyExc_IOError); clearerr(fp); Index: cPickle.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cPickle.c,v retrieving revision 2.49 retrieving revision 2.50 diff -C2 -r2.49 -r2.50 *** cPickle.c 2000/07/31 15:28:04 2.49 --- cPickle.c 2000/08/12 20:58:11 2.50 *************** *** 408,412 **** } ! if ((int)fwrite(s, sizeof(char), n, self->fp) != n) { PyErr_SetFromErrno(PyExc_IOError); return -1; --- 408,412 ---- } ! if (fwrite(s, sizeof(char), n, self->fp) != (size_t)n) { PyErr_SetFromErrno(PyExc_IOError); return -1; *************** *** 504,508 **** } ! if ((int)fread(self->buf, sizeof(char), n, self->fp) != n) { if (feof(self->fp)) { PyErr_SetNone(PyExc_EOFError); --- 504,508 ---- } ! if (fread(self->buf, sizeof(char), n, self->fp) != (size_t)n) { if (feof(self->fp)) { PyErr_SetNone(PyExc_EOFError); From python-dev@python.org Sat Aug 12 22:35:39 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 14:35:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.174,2.175 Message-ID: <200008122135.OAA25637@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv25235/Python Modified Files: bltinmodule.c Log Message: Clean up a couple of warnings on Win64. The downcast of the strlen size_t return value to int is safe here because in each case it previouls checked that there will be no overflow. Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.174 retrieving revision 2.175 diff -C2 -r2.174 -r2.175 *** bltinmodule.c 2000/08/03 15:45:29 2.174 --- bltinmodule.c 2000/08/12 21:35:36 2.175 *************** *** 431,435 **** return NULL; s = s_buffer; ! len = strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { --- 431,435 ---- return NULL; s = s_buffer; ! len = (int)strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { From python-dev@python.org Sat Aug 12 22:37:43 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 14:37:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects floatobject.c,2.65,2.66 Message-ID: <200008122137.OAA26449@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26243/Objects Modified Files: floatobject.c Log Message: Clean up a warning on Win64. The downcast of the strlen size_t return value to int is safe here because it previously checked that there will be no overflow. Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.65 retrieving revision 2.66 diff -C2 -r2.65 -r2.66 *** floatobject.c 2000/07/31 15:28:04 2.65 --- floatobject.c 2000/08/12 21:37:39 2.66 *************** *** 154,158 **** return NULL; s = s_buffer; ! len = strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { --- 154,158 ---- return NULL; s = s_buffer; ! len = (int)strlen(s); } else if (PyObject_AsCharBuffer(v, &s, &len)) { From python-dev@python.org Sat Aug 12 23:03:19 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 12 Aug 2000 15:03:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.121,2.122 Message-ID: <200008122203.PAA08469@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv6253/Python Modified Files: compile.c Log Message: The list comprehensions patch partly reversed the removal of UNPACK_LIST, re-introducing com_assign_list, now unused. Removed it. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.121 retrieving revision 2.122 diff -C2 -r2.121 -r2.122 *** compile.c 2000/08/12 18:09:51 2.121 --- compile.c 2000/08/12 22:03:16 2.122 *************** *** 1847,1863 **** static void - com_assign_list(struct compiling *c, node *n, int assigning) - { - int i; - if (assigning) { - i = (NCH(n)+1)/2; - com_addoparg(c, UNPACK_SEQUENCE, i); - com_push(c, i-1); - } - for (i = 0; i < NCH(n); i += 2) - com_assign(c, CHILD(n, i), assigning); - } - - static void com_assign_name(struct compiling *c, node *n, int assigning) { --- 1847,1850 ---- From python-dev@python.org Sat Aug 12 23:14:37 2000 From: python-dev@python.org (Trent Mick) Date: Sat, 12 Aug 2000 15:14:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.56,2.57 Message-ID: <200008122214.PAA23851@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv22298/Objects Modified Files: unicodeobject.c Log Message: Clean up warning from Monterey compiler. Properly end a comment block. It was terminated fine later but by a subsequent block and. It was also in #if 0. This patch is so trivial I can't believe I am talking about it. :) Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.56 retrieving revision 2.57 diff -C2 -r2.56 -r2.57 *** unicodeobject.c 2000/08/08 08:04:29 2.56 --- unicodeobject.c 2000/08/12 22:14:34 2.57 *************** *** 3174,3178 **** /* This code should go into some future Unicode collation support module. The basic comparison should compare ordinals on a naive ! basis (this is what Java does and thus JPython too). /* speedy UTF-16 code point order comparison */ --- 3174,3178 ---- /* This code should go into some future Unicode collation support module. The basic comparison should compare ordinals on a naive ! basis (this is what Java does and thus JPython too). */ /* speedy UTF-16 code point order comparison */ From python-dev@python.org Sun Aug 13 01:36:50 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:36:50 -0700 Subject: [Python-checkins] CVS: distutils/distutils cmd.py,1.21,1.22 Message-ID: <200008130036.RAA30024@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv29919 Modified Files: cmd.py Log Message: Fix references to functions formerly imported from 'util'. Index: cmd.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cmd.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** cmd.py 2000/08/02 01:37:53 1.21 --- cmd.py 2000/08/13 00:36:47 1.22 *************** *** 13,17 **** from types import * from distutils.errors import * ! from distutils import util --- 13,17 ---- from types import * from distutils.errors import * ! from distutils import util, dir_util, file_util, archive_util, dep_util *************** *** 323,328 **** def mkpath (self, name, mode=0777): ! util.mkpath (name, mode, ! self.verbose, self.dry_run) --- 323,328 ---- def mkpath (self, name, mode=0777): ! dir_util.mkpath(name, mode, ! self.verbose, self.dry_run) *************** *** 333,342 **** the latter defaults to false for commands that don't define it.)""" ! return util.copy_file (infile, outfile, ! preserve_mode, preserve_times, ! not self.force, ! link, ! self.verbose >= level, ! self.dry_run) --- 333,343 ---- the latter defaults to false for commands that don't define it.)""" ! return file_util.copy_file( ! infile, outfile, ! preserve_mode, preserve_times, ! not self.force, ! link, ! self.verbose >= level, ! self.dry_run) *************** *** 347,362 **** and force flags. """ ! return util.copy_tree (infile, outfile, ! preserve_mode,preserve_times,preserve_symlinks, ! not self.force, ! self.verbose >= level, ! self.dry_run) def move_file (self, src, dst, level=1): """Move a file respecting verbose and dry-run flags.""" ! return util.move_file (src, dst, ! self.verbose >= level, ! self.dry_run) --- 348,364 ---- and force flags. """ ! return dir_util.copy_tree( ! infile, outfile, ! preserve_mode,preserve_times,preserve_symlinks, ! not self.force, ! self.verbose >= level, ! self.dry_run) def move_file (self, src, dst, level=1): """Move a file respecting verbose and dry-run flags.""" ! return file_util.move_file (src, dst, ! self.verbose >= level, ! self.dry_run) *************** *** 371,376 **** def make_archive (self, base_name, format, root_dir=None, base_dir=None): ! return util.make_archive (base_name, format, root_dir, base_dir, ! self.verbose, self.dry_run) --- 373,379 ---- def make_archive (self, base_name, format, root_dir=None, base_dir=None): ! return archive_util.make_archive( ! base_name, format, root_dir, base_dir, ! self.verbose, self.dry_run) *************** *** 402,406 **** # exist, is out-of-date, or the 'force' flag is true) then # perform the action that presumably regenerates it ! if self.force or util.newer_group (infiles, outfile): self.execute (func, args, exec_msg, level) --- 405,409 ---- # exist, is out-of-date, or the 'force' flag is true) then # perform the action that presumably regenerates it ! if self.force or dep_util.newer_group (infiles, outfile): self.execute (func, args, exec_msg, level) From python-dev@python.org Sun Aug 13 01:39:00 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:39:00 -0700 Subject: [Python-checkins] CVS: distutils/distutils extension.py,1.3,1.4 Message-ID: <200008130039.RAA32659@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv32583 Modified Files: extension.py Log Message: Typo fix in docstring. Index: extension.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/extension.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** extension.py 2000/08/02 00:04:13 1.3 --- extension.py 2000/08/13 00:38:58 1.4 *************** *** 24,29 **** """Just a collection of attributes that describes an extension module and everything needed to build it (hopefully in a portable ! way, but there are hooks that let you can be as unportable as you ! need). Instance attributes: --- 24,28 ---- """Just a collection of attributes that describes an extension module and everything needed to build it (hopefully in a portable ! way, but there are hooks that let you be as unportable as you need). Instance attributes: From python-dev@python.org Sun Aug 13 01:41:42 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:41:42 -0700 Subject: [Python-checkins] CVS: distutils/distutils extension.py,1.4,1.5 Message-ID: <200008130041.RAA03306@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv3037 Modified Files: extension.py Log Message: Rene Liebscher: ext.export_symbols is now always a list (added 'or []'). Index: extension.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/extension.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** extension.py 2000/08/13 00:38:58 1.4 --- extension.py 2000/08/13 00:41:40 1.5 *************** *** 105,109 **** self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols # class Extension --- 105,109 ---- self.extra_compile_args = extra_compile_args or [] self.extra_link_args = extra_link_args or [] ! self.export_symbols = export_symbols or [] # class Extension From python-dev@python.org Sun Aug 13 01:42:37 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:42:37 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_ext.py,1.59,1.60 Message-ID: <200008130042.RAA04354@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv4230/command Modified Files: build_ext.py Log Message: get_export_symbols() changed, adds now module init function if not given by the user. Index: build_ext.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_ext.py,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -r1.59 -r1.60 *** build_ext.py 2000/08/01 23:54:29 1.59 --- build_ext.py 2000/08/13 00:42:35 1.60 *************** *** 550,561 **** """ ! # XXX what if 'export_symbols' defined but it doesn't contain ! # "init" + module_name? Should we add it? warn? or just carry ! # on doing nothing? ! ! if ext.export_symbols is None: ! return ["init" + string.split(ext.name,'.')[-1]] ! else: ! return ext.export_symbols def get_libraries (self, ext): --- 550,557 ---- """ ! initfunc_name = "init" + string.split(ext.name,'.')[-1] ! if initfunc_name not in ext.export_symbols: ! ext.export_symbols.append(initfunc_name) ! return ext.export_symbols def get_libraries (self, ext): From python-dev@python.org Sun Aug 13 01:43:18 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:43:18 -0700 Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.3,1.4 Message-ID: <200008130043.RAA05176@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv4835 Modified Files: bcppcompiler.py Log Message: Rene Liebscher: * changed some list.extend([...]) to list.append(...) * added '/g0' to compiler_options, so compiler doesn't stop after 100 warnings Index: bcppcompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** bcppcompiler.py 2000/08/04 01:30:03 1.3 --- bcppcompiler.py 2000/08/13 00:43:16 1.4 *************** *** 68,73 **** self.preprocess_options = None ! self.compile_options = ['/tWM', '/O2', '/q'] ! self.compile_options_debug = ['/tWM', '/Od', '/q'] self.ldflags_shared = ['/Tpd', '/Gn', '/q', '/x'] --- 68,73 ---- self.preprocess_options = None ! self.compile_options = ['/tWM', '/O2', '/q', '/g0'] ! self.compile_options_debug = ['/tWM', '/Od', '/q', '/g0'] self.ldflags_shared = ['/Tpd', '/Gn', '/q', '/x'] *************** *** 233,237 **** # a Borland-like one, or create one with name bcpp_python15.lib # there and remove the pragmas from config.h - #libraries.append ('mypylib') libraries.append ('import32') libraries.append ('cw32mt') --- 233,236 ---- *************** *** 258,262 **** ld_args.extend([',',output_filename]) # no map file and start libraries ! ld_args.extend([',', ',']) for lib in libraries: --- 257,261 ---- ld_args.extend([',',output_filename]) # no map file and start libraries ! ld_args.append(',,') for lib in libraries: From python-dev@python.org Sun Aug 13 01:43:58 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:43:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils cygwinccompiler.py,1.4,1.5 Message-ID: <200008130043.RAA06034@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv5461 Modified Files: cygwinccompiler.py Log Message: Rene Liebscher: * use self.debug_print() for debug messages * uses now copy.copy() to copy lists * added 'shared_lib_extension=".dll"', ... , this is necessary if you want use the compiler class outside of the standard distutils build process. * changed result type of check_config_h() from int to string Index: cygwinccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cygwinccompiler.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** cygwinccompiler.py 2000/08/02 01:31:56 1.4 --- cygwinccompiler.py 2000/08/13 00:43:56 1.5 *************** *** 45,49 **** __revision__ = "$Id$" ! import os,sys from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file --- 45,49 ---- __revision__ = "$Id$" ! import os,sys,copy from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file *************** *** 52,58 **** compiler_type = 'cygwin' ! gcc_version = None ! dllwrap_version = None ! ld_version = None def __init__ (self, --- 52,61 ---- compiler_type = 'cygwin' ! obj_extension = ".o" ! static_lib_extension = ".a" ! shared_lib_extension = ".dll" ! static_lib_format = "lib%s%s" ! shared_lib_format = "%s%s" ! exe_extension = ".exe" def __init__ (self, *************** *** 63,67 **** UnixCCompiler.__init__ (self, verbose, dry_run, force) ! if check_config_h()<=0: self.warn( "Python's config.h doesn't seem to support your compiler. " --- 66,72 ---- UnixCCompiler.__init__ (self, verbose, dry_run, force) ! check_result = check_config_h() ! self.debug_print("Python's GCC status: %s" % check_result) ! if check_result[:2] <> "OK": self.warn( "Python's config.h doesn't seem to support your compiler. " *************** *** 70,74 **** (self.gcc_version, self.ld_version, self.dllwrap_version) = \ get_versions() ! sys.stderr.write(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % (self.gcc_version, self.ld_version, --- 75,79 ---- (self.gcc_version, self.ld_version, self.dllwrap_version) = \ get_versions() ! self.debug_print(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % (self.gcc_version, self.ld_version, *************** *** 118,124 **** build_temp=None): ! # use separate copies, so can modify the lists ! extra_preargs = list(extra_preargs or []) ! libraries = list(libraries or []) # Additional libraries --- 123,129 ---- build_temp=None): ! # use separate copies, so we can modify the lists ! extra_preargs = copy.copy(extra_preargs or []) ! libraries = copy.copy(libraries or []) # Additional libraries *************** *** 242,250 **** """ # return values ! # 2: OK, python was compiled with GCC ! # 1: OK, python's config.h mentions __GCC__ ! # 0: uncertain, because we couldn't check it ! # -1: probably not OK, because we didn't found it in config.h ! # You could check check_config_h()>0 => OK from distutils import sysconfig --- 247,255 ---- """ # return values ! # "OK, python was compiled with GCC" ! # "OK, python's config.h mentions __GCC__" ! # "uncertain, because we couldn't check it" ! # "not OK, because we didn't found __GCC__ in config.h" ! # You could check check_config_h()[:2] == "OK" from distutils import sysconfig *************** *** 255,259 **** pass # go to the next test else: ! return 2 try: --- 260,264 ---- pass # go to the next test else: ! return "OK, python was compiled with GCC" try: *************** *** 266,277 **** # is somewhere a #ifdef __GNUC__ or something similar if -1 == string.find(s,"__GNUC__"): ! return -1 else: ! return 1 except IOError: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing pass ! return 0 def get_versions(): --- 271,282 ---- # is somewhere a #ifdef __GNUC__ or something similar if -1 == string.find(s,"__GNUC__"): ! return "not OK, because we didn't found __GCC__ in config.h" else: ! return "OK, python's config.h mentions __GCC__" except IOError: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing pass ! return "uncertain, because we couldn't check it" def get_versions(): From python-dev@python.org Sun Aug 13 01:54:42 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 17:54:42 -0700 Subject: [Python-checkins] CVS: distutils/distutils bcppcompiler.py,1.4,1.5 Message-ID: <200008130054.RAA18200@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv18103 Modified Files: bcppcompiler.py Log Message: Added a whinging comment about the ugliness of constructing the BCPP argument list. Index: bcppcompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/bcppcompiler.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** bcppcompiler.py 2000/08/13 00:43:16 1.4 --- bcppcompiler.py 2000/08/13 00:54:39 1.5 *************** *** 254,257 **** --- 254,267 ---- ld_args.extend(objects) # list of object files + # XXX the command-line syntax for Borland C++ is a bit wonky; + # certain filenames are jammed together in one big string, but + # comma-delimited. This doesn't mesh too well with the + # Unix-centric attitude (with a DOS/Windows quoting hack) of + # 'spawn()', so constructing the argument list is a bit + # awkward. Note that doing the obvious thing and jamming all + # the filenames and commas into one argument would be wrong, + # because 'spawn()' would quote any filenames with spaces in + # them. Arghghh!. Apparently it works fine as coded... + # name of dll file ld_args.extend([',',output_filename]) From python-dev@python.org Sun Aug 13 02:19:02 2000 From: python-dev@python.org (Greg Ward) Date: Sat, 12 Aug 2000 18:19:02 -0700 Subject: [Python-checkins] CVS: distutils/distutils cygwinccompiler.py,1.5,1.6 Message-ID: <200008130119.SAA16536@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv16184 Modified Files: cygwinccompiler.py Log Message: Overhauld 'check_config_h()': now returns a (status, details) tuple, and is much better documented to boot. Index: cygwinccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/cygwinccompiler.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** cygwinccompiler.py 2000/08/13 00:43:56 1.5 --- cygwinccompiler.py 2000/08/13 01:18:55 1.6 *************** *** 66,74 **** UnixCCompiler.__init__ (self, verbose, dry_run, force) ! check_result = check_config_h() ! self.debug_print("Python's GCC status: %s" % check_result) ! if check_result[:2] <> "OK": self.warn( ! "Python's config.h doesn't seem to support your compiler. " "Compiling may fail because of undefined preprocessor macros.") --- 66,76 ---- UnixCCompiler.__init__ (self, verbose, dry_run, force) ! (status, details) = check_config_h() ! self.debug_print("Python's GCC status: %s (details: %s)" % ! (status, details)) ! if status is not CONFIG_H_OK: self.warn( ! "Python's config.h doesn't seem to support your compiler. " + ! ("Reason: %s." % details) + "Compiling may fail because of undefined preprocessor macros.") *************** *** 242,255 **** # version. def check_config_h(): ! """Checks if the GCC compiler is mentioned in config.h. If it is not, ! compiling probably doesn't work. """ ! # return values ! # "OK, python was compiled with GCC" ! # "OK, python's config.h mentions __GCC__" ! # "uncertain, because we couldn't check it" ! # "not OK, because we didn't found __GCC__ in config.h" ! # You could check check_config_h()[:2] == "OK" from distutils import sysconfig --- 244,271 ---- # version. + CONFIG_H_OK = "ok" + CONFIG_H_NOTOK = "not ok" + CONFIG_H_UNCERTAIN = "uncertain" + def check_config_h(): ! ! """Check if the current Python installation (specifically, config.h) ! appears amenable to building extensions with GCC. Returns a tuple ! (status, details), where 'status' is one of the following constants: ! CONFIG_H_OK ! all is well, go ahead and compile ! CONFIG_H_NOTOK ! doesn't look good ! CONFIG_H_UNCERTAIN ! not sure -- unable to read config.h ! 'details' is a human-readable string explaining the situation. ! ! Note there are two ways to conclude "OK": either 'sys.version' contains ! the string "GCC" (implying that this Python was built with GCC), or the ! installed "config.h" contains the string "__GNUC__". """ ! ! # XXX since this function also checks sys.version, it's not strictly a ! # "config.h" check -- should probably be renamed... from distutils import sysconfig *************** *** 257,282 **** # if sys.version contains GCC then python was compiled with # GCC, and the config.h file should be OK ! if -1 == string.find(sys.version,"GCC"): ! pass # go to the next test ! else: ! return "OK, python was compiled with GCC" try: # It would probably better to read single lines to search. # But we do this only once, and it is fast enough ! f=open(sysconfig.get_config_h_filename()) ! s=f.read() f.close() ! # is somewhere a #ifdef __GNUC__ or something similar ! if -1 == string.find(s,"__GNUC__"): ! return "not OK, because we didn't found __GCC__ in config.h" ! else: ! return "OK, python's config.h mentions __GCC__" ! except IOError: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing ! pass ! return "uncertain, because we couldn't check it" def get_versions(): --- 273,301 ---- # if sys.version contains GCC then python was compiled with # GCC, and the config.h file should be OK ! if string.find(sys.version,"GCC") >= 0: ! return (CONFIG_H_OK, "sys.version mentions 'GCC'") + fn = sysconfig.get_config_h_filename() try: # It would probably better to read single lines to search. # But we do this only once, and it is fast enough ! f = open(fn) ! s = f.read() f.close() ! except IOError, exc: # if we can't read this file, we cannot say it is wrong # the compiler will complain later about this file as missing ! return (CONFIG_H_UNCERTAIN, ! "couldn't read '%s': %s" % (fn, exc.strerror)) ! ! else: ! # "config.h" contains an "#ifdef __GNUC__" or something similar ! if string.find(s,"__GNUC__") >= 0: ! return (CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn) ! else: ! return (CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn) ! ! def get_versions(): From python-dev@python.org Sun Aug 13 12:59:11 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Sun, 13 Aug 2000 04:59:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pymem.h,2.1,2.2 Message-ID: <200008131159.EAA09228@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv6337 Modified Files: pymem.h Log Message: Fix a typo in the PyMem_Resize macro, found by Andrew Kuchling Index: pymem.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pymem.h,v retrieving revision 2.1 retrieving revision 2.2 diff -C2 -r2.1 -r2.2 *** pymem.h 2000/07/31 22:19:30 2.1 --- pymem.h 2000/08/13 11:59:08 2.2 *************** *** 115,119 **** ( (type *) PyMem_Malloc((n) * sizeof(type)) ) #define PyMem_Resize(p, type, n) \ ! ( (p) = (type *) PyMem_Realloc((n) * sizeof(type)) ) #define PyMem_Del(p) PyMem_Free(p) --- 115,119 ---- ( (type *) PyMem_Malloc((n) * sizeof(type)) ) #define PyMem_Resize(p, type, n) \ ! ( (p) = (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) #define PyMem_Del(p) PyMem_Free(p) From python-dev@python.org Sun Aug 13 18:05:20 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 13 Aug 2000 10:05:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.122,2.123 Message-ID: <200008131705.KAA01198@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv31079/Python Modified Files: compile.c Log Message: The list comp patch checked for the second child node of the 'listmaker' node, without checking if the node actually had more than one child. It can have only one node, though: '[' test ']'. This fixes it. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.122 retrieving revision 2.123 diff -C2 -r2.122 -r2.123 *** compile.c 2000/08/12 22:03:16 2.122 --- compile.c 2000/08/13 17:05:17 2.123 *************** *** 1046,1050 **** { /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (TYPE(CHILD(n, 1)) == list_iter) com_list_comprehension(c, n); else { --- 1046,1050 ---- { /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_iter) com_list_comprehension(c, n); else { From python-dev@python.org Sun Aug 13 23:47:48 2000 From: python-dev@python.org (Trent Mick) Date: Sun, 13 Aug 2000 15:47:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects listobject.c,2.83,2.84 Message-ID: <200008132247.PAA06514@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv1607/Objects Modified Files: listobject.c Log Message: Check for overflow in list object insertion and raise OverflowError. see: http://www.python.org/pipermail/python-dev/2000-August/014971.html Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.83 retrieving revision 2.84 diff -C2 -r2.83 -r2.84 *** listobject.c 2000/07/25 12:56:38 2.83 --- listobject.c 2000/08/13 22:47:45 2.84 *************** *** 135,138 **** --- 135,143 ---- return -1; } + if (self->ob_size == INT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "cannot add more objects to list"); + return -1; + } items = self->ob_item; NRESIZE(items, PyObject *, self->ob_size+1); From python-dev@python.org Sun Aug 13 23:59:29 2000 From: python-dev@python.org (Trent Mick) Date: Sun, 13 Aug 2000 15:59:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild _socket.dsp,1.3,1.4 _sre.dsp,1.4,1.5 _tkinter.dsp,1.16,1.17 bsddb.dsp,1.12,1.13 mmap.dsp,1.6,1.7 parser.dsp,1.10,1.11 pyexpat.dsp,1.4,1.5 python.dsp,1.12,1.13 python20.dsp,1.6,1.7 pythonw.dsp,1.10,1.11 select.dsp,1.3,1.4 ucnhash.dsp,1.5,1.6 unicodedata.dsp,1.5,1.6 winreg.dsp,1.6,1.7 winsound.dsp,1.5,1.6 zlib.dsp,1.13,1.14 pcbuild.dsw,1.19,1.20 Message-ID: <200008132259.PAA18637@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv17145 Modified Files: _socket.dsp _sre.dsp _tkinter.dsp bsddb.dsp mmap.dsp parser.dsp pyexpat.dsp python.dsp python20.dsp pythonw.dsp select.dsp ucnhash.dsp unicodedata.dsp winreg.dsp winsound.dsp zlib.dsp pcbuild.dsw Log Message: Revert this checkin: http://www.python.org/pipermail/python-checkins/2000-August/007072.html and make PCbuild/*.dsp PCbuild/*.dsw binary again. Index: _socket.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_socket.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** _socket.dsp 2000/08/11 23:20:32 1.3 --- _socket.dsp 2000/08/13 22:59:26 1.4 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="_socket" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=_socket - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_socket.mak" CFG="_socket - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_socket - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_socket - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_socket" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "_socket - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket.pyd" /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_socket - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_socket" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1e1D0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_socket_d.pyd" /pdbtype:sept /export:init_socket ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_socket - Win32 Release" ! # Name "_socket - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\socketmodule.c ! # End Source File ! # End Target ! # End Project Index: _sre.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_sre.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** _sre.dsp 2000/08/11 23:20:32 1.4 --- _sre.dsp 2000/08/13 22:59:26 1.5 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="_sre" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_sre - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_sre.mak" CFG="_sre - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_sre - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_sre - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_sre" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:I386 /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_sre_d.pyd" /pdbtype:sept /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\sre" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_sre.pyd" /export:init_sre ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e1F0000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_sre.pyd" /export:init_sre ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_sre - Win32 Release" ! # Name "_sre - Win32 Debug" ! # Name "_sre - Win32 Alpha Debug" ! # Name "_sre - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\_sre.c ! ! !IF "$(CFG)" == "_sre - Win32 Release" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_sre - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: _tkinter.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_tkinter.dsp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** _tkinter.dsp 2000/08/11 23:20:32 1.16 --- _tkinter.dsp 2000/08/13 22:59:26 1.17 *************** *** 1,197 **** ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,197 ---- ! # Microsoft Developer Studio Project File - Name="_tkinter" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=_tkinter - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "_tkinter.mak" CFG="_tkinter - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "_tkinter - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "_tkinter - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "_tkinter" ! # PROP Scc_LocalPath "..\..\.." ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 tcl80.lib tk80.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\tcl\lib\tcl83.lib ..\..\tcl\lib\tk83.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter_d.pyd" /pdbtype:sept /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\_tkinter" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 ..\..\tcl\lib\tk83.lib ..\..\tcl\lib\tcl83.lib odbc32.lib odbccp32.lib user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /dll /debug /machine:I386 /out:"./_tkinter.pyd" /libpath:"C:\Program Files\Tcl\lib" /export:init_tkinter ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "_tkinter - Win32 Alpha Debug" ! # Name "_tkinter - Win32 Alpha Release" ! # Name "_tkinter - Win32 Debug" ! # Name "_tkinter - Win32 Release" ! # Begin Source File ! ! SOURCE=..\Modules\_tkinter.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\tkappinit.c ! ! !IF "$(CFG)" == "_tkinter - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Alpha Release" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "_tkinter - Win32 Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: bsddb.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/bsddb.dsp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** bsddb.dsp 2000/08/11 23:20:32 1.12 --- bsddb.dsp 2000/08/13 22:59:26 1.13 *************** *** 1,188 **** ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,188 ---- ! # Microsoft Developer Studio Project File - Name="bsddb" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=bsddb - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "bsddb.mak" CFG="bsddb - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "bsddb - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "bsddb - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "bsddb" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\bsddb\port\win32\db.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"./bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /nodefaultlib:"MSVCRT" /out:"alpha-temp-debug\bsddb_d.pyd" /pdbtype:sept /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\bsddb" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /I "..\..\bsddb\include" /I "..\..\bsddb\port\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:ALPHA /out:"./bsddb.pyd" /export:initbsddb ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 ..\..\bsddb\port\win32\db.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e180000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release\bsddb.pyd" /export:initbsddb ! # SUBTRACT LINK32 /verbose /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "bsddb - Win32 Release" ! # Name "bsddb - Win32 Debug" ! # Name "bsddb - Win32 Alpha Debug" ! # Name "bsddb - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\bsddbmodule.c ! ! !IF "$(CFG)" == "bsddb - Win32 Release" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /X /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Debug" ! ! # ADD CPP /I "..\..\bsddb\PORT\win32\include" /I "..\..\bsddb\PORT\include" /D "__DBINTERFACE_PRIVATE" ! # SUBTRACT CPP /I "..\..\bsddb\port\include" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "bsddb - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: mmap.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/mmap.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** mmap.dsp 2000/08/11 23:20:32 1.6 --- mmap.dsp 2000/08/13 22:59:26 1.7 *************** *** 1,97 **** ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project --- 1,97 ---- ! # Microsoft Developer Studio Project File - Name="mmap" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=mmap - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "mmap.mak" CFG="mmap - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "mmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "mmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "mmap" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "mmap - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./mmap.pyd" ! ! !ELSEIF "$(CFG)" == "mmap - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\mmap" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./mmap_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "mmap - Win32 Release" ! # Name "mmap - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\mmapmodule.c ! # End Source File ! # End Target ! # End Project Index: parser.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/parser.dsp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** parser.dsp 2000/08/11 23:20:32 1.10 --- parser.dsp 2000/08/13 22:59:26 1.11 *************** *** 1,182 **** ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,182 ---- ! # Microsoft Developer Studio Project File - Name="parser" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=parser - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "parser.mak" CFG="parser - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "parser - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "parser - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "parser" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:I386 /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/parser_d.pyd" /pdbtype:sept /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\parser" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./parser.pyd" /export:initparser ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1eA00000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/parser.pyd" /export:initparser ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "parser - Win32 Release" ! # Name "parser - Win32 Debug" ! # Name "parser - Win32 Alpha Debug" ! # Name "parser - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\parsermodule.c ! ! !IF "$(CFG)" == "parser - Win32 Release" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "parser - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pyexpat.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pyexpat.dsp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pyexpat.dsp 2000/08/11 23:20:32 1.4 --- pyexpat.dsp 2000/08/13 22:59:26 1.5 *************** *** 1,190 **** ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project --- 1,190 ---- ! # Microsoft Developer Studio Project File - Name="pyexpat" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=pyexpat - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pyexpat.mak" CFG="pyexpat - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pyexpat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Debug" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE "pyexpat - Win32 Alpha Release" (based on "Win32 (ALPHA) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pyexpat" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\expat\xmlparse" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:I386 /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MTd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-debug/pyexpat_d.pyd" /pdbtype:sept /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pyexpat" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /MT /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "C:\Program Files\Tcl\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"./pyexpat.pyd" /export:initpyexpat ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1D100000" /subsystem:windows /dll /debug /machine:ALPHA /out:"alpha-temp-release/pyexpat.pyd" /export:initpyexpat ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pyexpat - Win32 Release" ! # Name "pyexpat - Win32 Debug" ! # Name "pyexpat - Win32 Alpha Debug" ! # Name "pyexpat - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\Modules\pyexpat.c ! ! !IF "$(CFG)" == "pyexpat - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pyexpat - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmltok.lib ! # End Source File ! # Begin Source File ! ! SOURCE=..\..\expat\lib\xmlparse.lib ! # End Source File ! # End Target ! # End Project Index: python.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python.dsp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** python.dsp 2000/08/11 23:20:32 1.12 --- python.dsp 2000/08/13 22:59:26 1.13 *************** *** 1,170 **** ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project --- 1,170 ---- ! # Microsoft Developer Studio Project File - Name="python" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Console Application" 0x0103 ! # TARGTYPE "Win32 (ALPHA) Console Application" 0x0603 ! ! CFG=python - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "python.mak" CFG="python - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "python - Win32 Release" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Debug" (based on "Win32 (x86) Console Application") ! !MESSAGE "python - Win32 Alpha Debug" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE "python - Win32 Alpha Release" (based on "Win32 (ALPHA) Console Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "python" ! # PROP Scc_LocalPath ".." ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! # ADD RSC /l 0x409 /i "..\Include" /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA /out:"./python_d.exe" /pdbtype:sept ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\python" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:ALPHA ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:ALPHA ! ! !ENDIF ! ! # Begin Target ! ! # Name "python - Win32 Release" ! # Name "python - Win32 Debug" ! # Name "python - Win32 Alpha Debug" ! # Name "python - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\pycon.ico ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\python.c ! ! !IF "$(CFG)" == "python - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # End Target ! # End Project Index: python20.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** python20.dsp 2000/08/11 23:20:32 1.6 --- python20.dsp 2000/08/13 22:59:26 1.7 *************** *** 1,1690 **** ! # Microsoft Developer Studio Project File - Name="python20" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! # TARGTYPE "Win32 (ALPHA) Dynamic-Link Library" 0x0602 ! ! CFG=python20 - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run [...3351 lines suppressed...] ! !ENDIF ! ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\yuvconvert.c ! ! !IF "$(CFG)" == "python20 - Win32 Release" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "python20 - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: pythonw.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pythonw.dsp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** pythonw.dsp 2000/08/11 23:20:32 1.10 --- pythonw.dsp 2000/08/13 22:59:26 1.11 *************** *** 1,184 **** ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,184 ---- ! # Microsoft Developer Studio Project File - Name="pythonw" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! # TARGTYPE "Win32 (ALPHA) Application" 0x0601 ! ! CFG=pythonw - Win32 Alpha Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "pythonw.mak" CFG="pythonw - Win32 Alpha Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "pythonw - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE "pythonw - Win32 Alpha Debug" (based on "Win32 (ALPHA) Application") ! !MESSAGE "pythonw - Win32 Alpha Release" (based on "Win32 (ALPHA) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "pythonw" ! # PROP Scc_LocalPath "..\pc" ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:I386 /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-debug\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /Gt0 /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA /out:"./pythonw_d.exe" /pdbtype:sept ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Ignore_Export_Lib 0 ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "alpha-temp-release\pythonw" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! CPP=cl.exe ! # ADD BASE CPP /nologo /Gt0 /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /Gt0 /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! MTL=midl.exe ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! RSC=rc.exe ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT BASE LINK32 /pdb:none ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /base:"0x1e190000" /subsystem:windows /debug /machine:ALPHA ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "pythonw - Win32 Release" ! # Name "pythonw - Win32 Debug" ! # Name "pythonw - Win32 Alpha Debug" ! # Name "pythonw - Win32 Alpha Release" ! # Begin Source File ! ! SOURCE=..\PC\python_exe.rc ! # End Source File ! # Begin Source File ! ! SOURCE=..\PC\WinMain.c ! ! !IF "$(CFG)" == "pythonw - Win32 Release" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Debug" ! ! !ELSEIF "$(CFG)" == "pythonw - Win32 Alpha Release" ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: select.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/select.dsp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** select.dsp 2000/08/11 23:20:32 1.3 --- select.dsp 2000/08/13 22:59:26 1.4 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="select" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=select - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "select.mak" CFG="select - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "select - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "select - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "select" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "select - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\select113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./select.pyd" /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "select - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\select" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\select113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /base:"0x1D110000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"msvcrt" /out:"./select_d.pyd" /pdbtype:sept /export:initselect ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "select - Win32 Release" ! # Name "select - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\selectmodule.c ! # End Source File ! # End Target ! # End Project Index: ucnhash.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/ucnhash.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** ucnhash.dsp 2000/08/11 23:20:32 1.5 --- ucnhash.dsp 2000/08/13 22:59:26 1.6 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="ucnhash" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=ucnhash - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "ucnhash.mak" CFG="ucnhash - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "ucnhash - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "ucnhash - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "ucnhash - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "ucnhash___Win32_Release0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Release0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 /nologo /dll /machine:I386 /out:"ucnhash.pyd" /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "ucnhash - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Intermediate_Dir "ucnhash___Win32_Debug0" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\ucnhash" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "UCNHASH_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 /nologo /dll /debug /machine:I386 /out:"ucnhash_d.pyd" /pdbtype:sept /export:initucnhash ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "ucnhash - Win32 Release" ! # Name "ucnhash - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\ucnhash.c ! # End Source File ! # End Target ! # End Project Index: unicodedata.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/unicodedata.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** unicodedata.dsp 2000/08/11 23:20:32 1.5 --- unicodedata.dsp 2000/08/13 22:59:26 1.6 *************** *** 1,103 **** ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project --- 1,103 ---- ! # Microsoft Developer Studio Project File - Name="unicodedata" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=unicodedata - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "unicodedata.mak" CFG="unicodedata - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "unicodedata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "unicodedata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "unicodedata" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "unicodedata - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /machine:I386 /out:"./unicodedata.pyd" /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "unicodedata - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\unicodedata" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1D120000" /dll /debug /machine:I386 /out:"./unicodedata_d.pyd" /pdbtype:sept /export:initunicodedata ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "unicodedata - Win32 Release" ! # Name "unicodedata - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\unicodedata.c ! # End Source File ! # Begin Source File ! ! SOURCE=..\Modules\unicodedatabase.c ! # End Source File ! # End Target ! # End Project Index: winreg.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winreg.dsp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** winreg.dsp 2000/08/11 23:20:32 1.6 --- winreg.dsp 2000/08/13 22:59:26 1.7 *************** *** 1,108 **** ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project --- 1,108 ---- ! # Microsoft Developer Studio Project File - Name="winreg" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winreg - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winreg.mak" CFG="winreg - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winreg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winreg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winreg" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /machine:I386 /out:"_winreg.pyd" ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winreg" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "winreg_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1C0000" /dll /debug /machine:I386 /out:"_winreg_d.pyd" /pdbtype:sept ! ! !ENDIF ! ! # Begin Target ! ! # Name "winreg - Win32 Release" ! # Name "winreg - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\_winreg.c ! ! !IF "$(CFG)" == "winreg - Win32 Release" ! ! # ADD CPP /MD ! ! !ELSEIF "$(CFG)" == "winreg - Win32 Debug" ! ! # ADD CPP /MDd ! ! !ENDIF ! ! # End Source File ! # End Target ! # End Project Index: winsound.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/winsound.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** winsound.dsp 2000/08/11 23:20:32 1.5 --- winsound.dsp 2000/08/13 22:59:26 1.6 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="winsound" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=winsound - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "winsound.mak" CFG="winsound - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "winsound - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "winsound - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "winsound" ! # PROP Scc_LocalPath "..\pc" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "winsound - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "NDEBUG" ! # ADD RSC /l 0xc09 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /machine:I386 /out:"./winsound.pyd" /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "winsound - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\winsound" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WINSOUND_EXPORTS" /YX /FD /GZ /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0xc09 /d "_DEBUG" ! # ADD RSC /l 0xc09 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib winmm.lib /nologo /base:"0x1D130000" /dll /debug /machine:I386 /out:"./winsound_d.pyd" /pdbtype:sept /export:initwinsound ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "winsound - Win32 Release" ! # Name "winsound - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\PC\winsound.c ! # End Source File ! # End Target ! # End Project Index: zlib.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/zlib.dsp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** zlib.dsp 2000/08/11 23:20:32 1.13 --- zlib.dsp 2000/08/13 22:59:26 1.14 *************** *** 1,99 **** ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project --- 1,99 ---- ! # Microsoft Developer Studio Project File - Name="zlib" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 ! ! CFG=zlib - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "zlib" ! # PROP Scc_LocalPath ".." ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "zlib - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-release\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "NDEBUG" ! # ADD RSC /l 0x409 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib.pyd" /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ELSEIF "$(CFG)" == "zlib - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "x86-temp-debug\zlib" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! F90=df.exe ! # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /I "..\..\zlib113" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "ZLIB_DLL" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 ! # ADD BASE RSC /l 0x409 /d "_DEBUG" ! # ADD RSC /l 0x409 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 user32.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\zlib113dll\static32\zlibstat.lib /nologo /base:"0x1e1B0000" /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc" /out:"./zlib_d.pyd" /pdbtype:sept /export:initzlib ! # SUBTRACT LINK32 /pdb:none ! ! !ENDIF ! ! # Begin Target ! ! # Name "zlib - Win32 Release" ! # Name "zlib - Win32 Debug" ! # Begin Source File ! ! SOURCE=..\Modules\zlibmodule.c ! # End Source File ! # End Target ! # End Project Index: pcbuild.dsw =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pcbuild.dsw,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** pcbuild.dsw 2000/08/11 23:20:32 1.19 --- pcbuild.dsw 2000/08/13 22:59:26 1.20 *************** *** 1,254 **** ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! --- 1,254 ---- ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "_socket"=".\_socket.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_sre"=".\_sre.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "_tkinter"=".\_tkinter.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "bsddb"=".\bsddb.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "mmap"=".\mmap.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "parser"=".\parser.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "pyexpat"=".\pyexpat.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python"=".\python.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "python20"=".\python20.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Project: "pythonw"=".\pythonw.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "select"=".\select.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "ucnhash"=".\ucnhash.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "unicodedata"=".\unicodedata.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winreg"=".\winreg.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "winsound"=".\winsound.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Project: "zlib"=".\zlib.dsp" - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! Begin Project Dependency ! Project_Dep_Name python20 ! End Project Dependency ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! From python-dev@python.org Mon Aug 14 03:50:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Sun, 13 Aug 2000 19:50:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api api.tex,1.76,1.77 Message-ID: <200008140250.TAA31549@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv31542/api Modified Files: api.tex Log Message: In the section on the "Very High Level Layer", address concerns brought up by Edward K. Ream about FILE* values and incompatible C libraries in dynamically linked extensions. It is not clear (to me) how realistic the issue is, but it is better documented than not. This closes SourceForge bug #111520. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -r1.76 -r1.77 *** api.tex 2000/08/11 20:39:29 1.76 --- api.tex 2000/08/14 02:50:21 1.77 *************** *** 598,601 **** --- 598,610 ---- described following the functions which accept them as parameters. + Note also that several of these functions take \ctype{FILE*} + parameters. On particular issue which needs to be handled carefully + is that the \ctype{FILE} structure for different C libraries can be + different and incompatible. Under Windows (at least), it is possible + for dynamically linked extensions to actually use different libraries, + so care should be taken that \ctype{FILE*} parameters are only passed + to these functions if it is certain that they were created by the same + library that the Python runtime is using. + \begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *fp, char *filename} If \var{fp} refers to a file associated with an interactive device From python-dev@python.org Mon Aug 14 05:47:36 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 21:47:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.163,2.164 Message-ID: <200008140447.VAA23910@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv23896 Modified Files: posixmodule.c Log Message: Patch #101032, from David Bolen: This is an enhancement to a prior patch (100941) ... [T]his patch removes the risk of deadlock waiting for the child previously present in certain cases. It adds tracking of all file handles returned from an os.popen* call and only waits for the child process, returning the exit code, on the closure of the final file handle to that child. Index: posixmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.163 retrieving revision 2.164 diff -C2 -r2.163 -r2.164 *** posixmodule.c 2000/07/31 15:28:04 2.163 --- posixmodule.c 2000/08/14 04:47:33 2.164 *************** *** 2099,2103 **** * Written by Bill Tutt . Minor tweaks * and 2.0 integration by Fredrik Lundh ! * Return code handling by David Bolen. */ --- 2099,2103 ---- * Written by Bill Tutt . Minor tweaks * and 2.0 integration by Fredrik Lundh ! * Return code handling by David Bolen . */ *************** *** 2117,2122 **** /* * Internal dictionary mapping popen* file pointers to process handles, ! * in order to maintain a link to the process handle until the file is ! * closed, at which point the process exit code is returned to the caller. */ static PyObject *_PyPopenProcs = NULL; --- 2117,2122 ---- /* * Internal dictionary mapping popen* file pointers to process handles, ! * for use when retrieving the process exit code. See _PyPclose() below ! * for more information on this dictionary's use. */ static PyObject *_PyPopenProcs = NULL; *************** *** 2277,2284 **** static int ! _PyPopenCreateProcess(char *cmdstring, FILE *file, HANDLE hStdin, HANDLE hStdout, ! HANDLE hStderr) { PROCESS_INFORMATION piProcInfo; --- 2277,2285 ---- static int ! _PyPopenCreateProcess(char *cmdstring, HANDLE hStdin, HANDLE hStdout, ! HANDLE hStderr, ! HANDLE *hProcess) { PROCESS_INFORMATION piProcInfo; *************** *** 2355,2378 **** CloseHandle(piProcInfo.hThread); ! /* ! * Try to insert our process handle into the internal ! * dictionary so we can find it later when trying ! * to close this file. ! */ ! if (!_PyPopenProcs) ! _PyPopenProcs = PyDict_New(); ! if (_PyPopenProcs) { ! PyObject *hProcessObj, *fileObj; ! ! hProcessObj = PyLong_FromVoidPtr(piProcInfo.hProcess); ! fileObj = PyLong_FromVoidPtr(file); ! ! if (!hProcessObj || !fileObj || ! PyDict_SetItem(_PyPopenProcs, ! fileObj, hProcessObj) < 0) { ! /* Insert failure - close handle to prevent leak */ ! CloseHandle(piProcInfo.hProcess); ! } ! } return TRUE; } --- 2356,2361 ---- CloseHandle(piProcInfo.hThread); ! /* Return process handle */ ! *hProcess = piProcInfo.hProcess; return TRUE; } *************** *** 2387,2391 **** HANDLE hChildStdinRd, hChildStdinWr, hChildStdoutRd, hChildStdoutWr, hChildStderrRd, hChildStderrWr, hChildStdinWrDup, hChildStdoutRdDup, ! hChildStderrRdDup; /* hChildStdoutWrDup; */ SECURITY_ATTRIBUTES saAttr; --- 2370,2374 ---- HANDLE hChildStdinRd, hChildStdinWr, hChildStdoutRd, hChildStdoutWr, hChildStderrRd, hChildStderrWr, hChildStdinWrDup, hChildStdoutRdDup, ! hChildStderrRdDup, hProcess; /* hChildStdoutWrDup; */ SECURITY_ATTRIBUTES saAttr; *************** *** 2393,2396 **** --- 2376,2380 ---- int fd1, fd2, fd3; FILE *f1, *f2, *f3; + long file_count; PyObject *f; *************** *** 2491,2494 **** --- 2475,2479 ---- break; } + file_count = 1; break; *************** *** 2513,2517 **** p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); PyFile_SetBufSize(p1, 0); ! p2 = PyFile_FromFile(f2, cmdstring, m1, fclose); PyFile_SetBufSize(p2, 0); --- 2498,2502 ---- p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); PyFile_SetBufSize(p1, 0); ! p2 = PyFile_FromFile(f2, cmdstring, m1, _PyPclose); PyFile_SetBufSize(p2, 0); *************** *** 2520,2523 **** --- 2505,2509 ---- f = Py_BuildValue("OO",p1,p2); + file_count = 2; break; } *************** *** 2543,2552 **** f3 = _fdopen(fd3, m1); p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); ! p2 = PyFile_FromFile(f2, cmdstring, m1, fclose); ! p3 = PyFile_FromFile(f3, cmdstring, m1, fclose); PyFile_SetBufSize(p1, 0); PyFile_SetBufSize(p2, 0); PyFile_SetBufSize(p3, 0); f = Py_BuildValue("OOO",p1,p2,p3); break; } --- 2529,2539 ---- f3 = _fdopen(fd3, m1); p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose); ! p2 = PyFile_FromFile(f2, cmdstring, m1, _PyPclose); ! p3 = PyFile_FromFile(f3, cmdstring, m1, _PyPclose); PyFile_SetBufSize(p1, 0); PyFile_SetBufSize(p2, 0); PyFile_SetBufSize(p3, 0); f = Py_BuildValue("OOO",p1,p2,p3); + file_count = 3; break; } *************** *** 2555,2573 **** if (n == POPEN_4) { if (!_PyPopenCreateProcess(cmdstring, - f1, hChildStdinRd, hChildStdoutWr, ! hChildStdoutWr)) return win32_error("CreateProcess", NULL); } else { if (!_PyPopenCreateProcess(cmdstring, - f1, hChildStdinRd, hChildStdoutWr, ! hChildStderrWr)) return win32_error("CreateProcess", NULL); } /* Child is launched. Close the parents copy of those pipe * handles that only the child should have open. You need to --- 2542,2645 ---- if (n == POPEN_4) { if (!_PyPopenCreateProcess(cmdstring, hChildStdinRd, hChildStdoutWr, ! hChildStdoutWr, ! &hProcess)) return win32_error("CreateProcess", NULL); } else { if (!_PyPopenCreateProcess(cmdstring, hChildStdinRd, hChildStdoutWr, ! hChildStderrWr, ! &hProcess)) return win32_error("CreateProcess", NULL); } + /* + * Insert the files we've created into the process dictionary + * all referencing the list with the process handle and the + * initial number of files (see description below in _PyPclose). + * Since if _PyPclose later tried to wait on a process when all + * handles weren't closed, it could create a deadlock with the + * child, we spend some energy here to try to ensure that we + * either insert all file handles into the dictionary or none + * at all. It's a little clumsy with the various popen modes + * and variable number of files involved. + */ + if (!_PyPopenProcs) { + _PyPopenProcs = PyDict_New(); + } + + if (_PyPopenProcs) { + PyObject *procObj, *hProcessObj, *intObj, *fileObj[3]; + int ins_rc[3]; + + fileObj[0] = fileObj[1] = fileObj[2] = NULL; + ins_rc[0] = ins_rc[1] = ins_rc[2] = 0; + + procObj = PyList_New(2); + hProcessObj = PyLong_FromVoidPtr(hProcess); + intObj = PyInt_FromLong(file_count); + + if (procObj && hProcessObj && intObj) { + PyList_SetItem(procObj,0,hProcessObj); + PyList_SetItem(procObj,1,intObj); + + fileObj[0] = PyLong_FromVoidPtr(f1); + if (fileObj[0]) { + ins_rc[0] = PyDict_SetItem(_PyPopenProcs, + fileObj[0], + procObj); + } + if (file_count >= 2) { + fileObj[1] = PyLong_FromVoidPtr(f2); + if (fileObj[1]) { + ins_rc[1] = PyDict_SetItem(_PyPopenProcs, + fileObj[1], + procObj); + } + } + if (file_count >= 3) { + fileObj[2] = PyLong_FromVoidPtr(f3); + if (fileObj[2]) { + ins_rc[2] = PyDict_SetItem(_PyPopenProcs, + fileObj[2], + procObj); + } + } + + if (ins_rc[0] < 0 || !fileObj[0] || + ins_rc[1] < 0 || (file_count > 1 && !fileObj[1]) || + ins_rc[2] < 0 || (file_count > 2 && !fileObj[2])) { + /* Something failed - remove any dictionary + * entries that did make it. + */ + if (!ins_rc[0] && fileObj[0]) { + PyDict_DelItem(_PyPopenProcs, + fileObj[0]); + } + if (!ins_rc[1] && fileObj[1]) { + PyDict_DelItem(_PyPopenProcs, + fileObj[1]); + } + if (!ins_rc[2] && fileObj[2]) { + PyDict_DelItem(_PyPopenProcs, + fileObj[2]); + } + } + } + + /* + * Clean up our localized references for the dictionary keys + * and value since PyDict_SetItem will Py_INCREF any copies + * that got placed in the dictionary. + */ + Py_XDECREF(procObj); + Py_XDECREF(fileObj[0]); + Py_XDECREF(fileObj[1]); + Py_XDECREF(fileObj[2]); + } + /* Child is launched. Close the parents copy of those pipe * handles that only the child should have open. You need to *************** *** 2591,2594 **** --- 2663,2684 ---- * Wrapper for fclose() to use for popen* files, so we can retrieve the * exit code for the child process and return as a result of the close. + * + * This function uses the _PyPopenProcs dictionary in order to map the + * input file pointer to information about the process that was + * originally created by the popen* call that created the file pointer. + * The dictionary uses the file pointer as a key (with one entry + * inserted for each file returned by the original popen* call) and a + * single list object as the value for all files from a single call. + * The list object contains the Win32 process handle at [0], and a file + * count at [1], which is initialized to the total number of file + * handles using that list. + * + * This function closes whichever handle it is passed, and decrements + * the file count in the dictionary for the process handle pointed to + * by this file. On the last close (when the file count reaches zero), + * this function will wait for the child process and then return its + * exit code as the result of the close() operation. This permits the + * files to be closed in any order - it is always the close() of the + * final handle that will return the exit code. */ static int _PyPclose(FILE *file) *************** *** 2597,2613 **** DWORD exit_code; HANDLE hProcess; ! PyObject *hProcessObj, *fileObj; /* Close the file handle first, to ensure it can't block the ! * child from exiting when we wait for it below. */ result = fclose(file); if (_PyPopenProcs) { ! fileObj = PyLong_FromVoidPtr(file); ! if (fileObj) { ! hProcessObj = PyDict_GetItem(_PyPopenProcs, fileObj); ! if (hProcessObj) { ! hProcess = PyLong_AsVoidPtr(hProcessObj); if (result != EOF && WaitForSingleObject(hProcess, INFINITE) != WAIT_FAILED && --- 2687,2715 ---- DWORD exit_code; HANDLE hProcess; ! PyObject *procObj, *hProcessObj, *intObj, *fileObj; ! long file_count; /* Close the file handle first, to ensure it can't block the ! * child from exiting if it's the last handle. */ result = fclose(file); if (_PyPopenProcs) { ! if ((fileObj = PyLong_FromVoidPtr(file)) != NULL && ! (procObj = PyDict_GetItem(_PyPopenProcs, ! fileObj)) != NULL && ! (hProcessObj = PyList_GetItem(procObj,0)) != NULL && ! (intObj = PyList_GetItem(procObj,1)) != NULL) { ! ! hProcess = PyLong_AsVoidPtr(hProcessObj); ! file_count = PyInt_AsLong(intObj); ! ! if (file_count > 1) { ! /* Still other files referencing process */ ! file_count--; ! PyList_SetItem(procObj,1, ! PyInt_FromLong(file_count)); ! } else { ! /* Last file for this process */ if (result != EOF && WaitForSingleObject(hProcess, INFINITE) != WAIT_FAILED && *************** *** 2635,2647 **** /* Free up the native handle at this point */ CloseHandle(hProcess); ! /* Remove from dictionary and flush dictionary if empty */ ! PyDict_DelItem(_PyPopenProcs, fileObj); ! if (PyDict_Size(_PyPopenProcs) == 0) { ! Py_DECREF(_PyPopenProcs); ! _PyPopenProcs = NULL; ! } ! } /* if hProcessObj */ ! } /* if fileObj */ } /* if _PyPopenProcs */ --- 2737,2753 ---- /* Free up the native handle at this point */ CloseHandle(hProcess); + } ! /* Remove this file pointer from dictionary */ ! PyDict_DelItem(_PyPopenProcs, fileObj); ! ! if (PyDict_Size(_PyPopenProcs) == 0) { ! Py_DECREF(_PyPopenProcs); ! _PyPopenProcs = NULL; ! } ! ! } /* if object retrieval ok */ ! ! Py_XDECREF(fileObj); } /* if _PyPopenProcs */ From python-dev@python.org Mon Aug 14 06:04:31 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 22:04:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC w9xpopen.c,1.1,1.2 Message-ID: <200008140504.WAA27601@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv27509 Modified Files: w9xpopen.c Log Message: Patch #101032, from David Bolen: Ensure the "proxied" command's return code bubbles back up. Index: w9xpopen.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/w9xpopen.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** w9xpopen.c 2000/07/09 11:35:36 1.1 --- w9xpopen.c 2000/08/14 05:04:28 1.2 *************** *** 28,31 **** --- 28,32 ---- STARTUPINFO si; PROCESS_INFORMATION pi; + DWORD exit_code=0; if (argc != 2) { *************** *** 51,58 **** if (bRet) { ! WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); ! return 0; } --- 52,61 ---- if (bRet) { ! if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_FAILED) { ! GetExitCodeProcess(pi.hProcess, &exit_code); ! } CloseHandle(pi.hProcess); CloseHandle(pi.hThread); ! return exit_code; } From python-dev@python.org Mon Aug 14 06:07:18 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 22:07:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild w9xpopen.dsp,NONE,1.1 pcbuild.dsw,1.20,1.21 Message-ID: <200008140507.WAA30591@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv30561 Modified Files: pcbuild.dsw Added Files: w9xpopen.dsp Log Message: Support for building the new w9xpopen.exe, which is used for reliable popen operation on Windows 9x. --- NEW FILE --- # Microsoft Developer Studio Project File - Name="w9xpopen" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=w9xpopen - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "w9xpopen.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "w9xpopen.mak" CFG="w9xpopen - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "w9xpopen - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "w9xpopen - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "w9xpopen - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "." # PROP Intermediate_Dir "x86-temp-release\w9xpopen" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "NDEBUG" # ADD RSC /l 0xc09 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 user32.lib /nologo /machine:I386 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "w9xpopen - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "." # PROP Intermediate_Dir "x86-temp-debug\w9xpopen" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0xc09 /d "_DEBUG" # ADD RSC /l 0xc09 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 user32.lib /nologo /debug /machine:I386 /out:"./w9xpopen_d.exe" /pdbtype:sept # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "w9xpopen - Win32 Release" # Name "w9xpopen - Win32 Debug" # Begin Source File SOURCE=..\PC\w9xpopen.c # End Source File # End Target # End Project Index: pcbuild.dsw =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/pcbuild.dsw,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** pcbuild.dsw 2000/08/13 22:59:26 1.20 --- pcbuild.dsw 2000/08/14 05:07:05 1.21 *************** *** 196,199 **** --- 196,211 ---- ############################################################################### + Project: "w9xpopen"=".\w9xpopen.dsp" - Package Owner=<4> + + Package=<5> + {{{ + }}} + + Package=<4> + {{{ + }}} + + ############################################################################### + Project: "winreg"=".\winreg.dsp" - Package Owner=<4> From python-dev@python.org Mon Aug 14 07:05:43 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 23:05:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_winreg2,1.1,1.2 Message-ID: <200008140605.XAA10176@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv10084 Modified Files: test_winreg2 Log Message: Check in the correct output - even though the module itself may not survive! Index: test_winreg2 =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_winreg2,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_winreg2 2000/06/30 19:38:16 1.1 --- test_winreg2 2000/08/14 06:05:40 1.2 *************** *** 1 **** --- 1,77 ---- test_winreg2 + Test Passed: testKeyDict_Values + Test Passed: testKeyDict_Items + Test Passed: testGetValueNames + Test Passed: testSetDwordBigEndian + Test Passed: testGetSubkeyNames + Test Passed: testResourceRequirementsListType + Test Passed: testLoad + Test Passed: testDeleteKey + Test Passed: testValueDict_Length + Test Passed: testResourceDescriptionType + Test Passed: testSetMultiSz + Test Passed: testSetFullResourceDescription + HKEY_CLASSES_ROOT + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + HKEY_PERFORMANCE_DATA + Test Passed: testHives + Test Passed: testDWordType + Test Passed: testRemote + Test Passed: testKeyDict_DelItem + Test Passed: testSetIntValue + Test Passed: testResourceLinkType + Test Passed: testNoneType + Test Passed: testValueDict_Map + Test Passed: testSetResourceList + Test Passed: testKeyDict_Length + Test Passed: testKeyDict_ClearKeys + Test Passed: testDWordBigEndianType + Test Passed: testOpen + Test Passed: testSetBinaryData + Test Passed: testGetValueNameDataAndType + Test Passed: testSetBinaryValue + Test Passed: testSetResourceRequirementsList + Test Passed: testUnicodeValueName + Test Passed: testGetValueDataFromEnum + Test Passed: testValueDict_Get + Test Passed: testValueDict_GetItem + Test Passed: testValueDict_Keys + Test Passed: testKeyDict_HasKey + Test Passed: testExpandStringType + Test Passed: testValueDict_HasKey + Test Passed: testCreateKey + Test Passed: testGetBinaryData + Test Passed: testKeyDict_Get + Test Passed: testSave + Test Passed: testValueDict_ClearKeys + Test Passed: testCmp + Test Passed: testLinkType + Test Passed: testSetExpandString + Test Passed: testKeyDict_GetItem + Test Passed: testRepr + Test Passed: testClose + Test Passed: testSetLink + Test Passed: testGetValueDataFromName + Test Passed: testUnicodeKeyName + Test Passed: testShortcuts + Test Passed: testKeyDict_Map + Test Passed: testStringType + Test Passed: testOpenFailure + Test Passed: testSetDword + Test Passed: testOpenKeyWithFlags + Test Passed: testSetNone + Test Passed: testKeyDict_Keys + Test Passed: testMultiStringType + Test Passed: testSetStringValue + Test Passed: testValueDict_Items + Test Passed: testValueDict_DelItem + Test Passed: testNonZero + Test Passed: testFlush + Test Passed: testGetSubkeys + Test Passed: testDeleteValue + Test Passed: testSetString + Test Passed: testValueDict_Values From python-dev@python.org Mon Aug 14 07:20:35 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 23:20:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib ntpath.py,1.27,1.28 Message-ID: <200008140620.XAA12854@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12847 Modified Files: ntpath.py Log Message: Fix for Bug #110673: os.abspatth() now always returns os.getcwd() on Windows, if an empty path is specified. It previously did not if an empty path was delegated to win32api.GetFullPathName()) Index: ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/ntpath.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** ntpath.py 2000/07/17 03:06:58 1.27 --- ntpath.py 2000/08/14 06:20:32 1.28 *************** *** 417,423 **** abspath = _abspath return _abspath(path) ! try: ! path = win32api.GetFullPathName(path) ! except win32api.error: ! pass # Bad path - return unchanged. return normpath(path) --- 417,426 ---- abspath = _abspath return _abspath(path) ! if path: # Empty path must return current working directory. ! try: ! path = win32api.GetFullPathName(path) ! except win32api.error: ! pass # Bad path - return unchanged. ! else: ! path = os.getcwd() return normpath(path) From python-dev@python.org Mon Aug 14 07:21:29 2000 From: python-dev@python.org (Mark Hammond) Date: Sun, 13 Aug 2000 23:21:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.2,1.3 Message-ID: <200008140621.XAA12890@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12883 Modified Files: test_ntpath.py Log Message: Test for fix to bug #110673: os.abspatth() now always returns os.getcwd() on Windows, if an empty path is specified. It previously did not if an empty path was delegated to win32api.GetFullPathName()) Index: test_ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_ntpath.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_ntpath.py 1999/04/06 19:38:18 1.2 --- test_ntpath.py 2000/08/14 06:21:26 1.3 *************** *** 1,4 **** --- 1,5 ---- import ntpath import string + import os errors = 0 *************** *** 34,37 **** --- 35,42 ---- tester('ntpath.isabs("\\foo")', 1) tester('ntpath.isabs("\\foo\\bar")', 1) + + tester('ntpath.abspath("C:\\")', "C:\\") + tester('ntpath.abspath("")', os.getcwd()) + if errors: From python-dev@python.org Mon Aug 14 12:29:23 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Mon, 14 Aug 2000 04:29:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.57,2.58 Message-ID: <200008141129.EAA22813@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv22589/Objects Modified Files: unicodeobject.c Log Message: Fixed a couple of instances where a 0-length string was being resized after creation. 0-length strings are usually shared and _PyString_Resize() fails on these shared strings. Fixes [ Bug #111667 ] unicode core dump. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.57 retrieving revision 2.58 diff -C2 -r2.57 -r2.58 *** unicodeobject.c 2000/08/12 22:14:34 2.57 --- unicodeobject.c 2000/08/14 11:29:19 2.58 *************** *** 843,847 **** return NULL; if (size == 0) ! goto done; p = q = PyString_AS_STRING(v); --- 843,847 ---- return NULL; if (size == 0) ! return v; p = q = PyString_AS_STRING(v); *************** *** 893,898 **** if (_PyString_Resize(&v, p - q)) goto onError; - - done: return v; --- 893,896 ---- *************** *** 1083,1087 **** *p++ = 0xFEFF; if (size == 0) ! goto done; if (byteorder == 0 || #ifdef BYTEORDER_IS_LITTLE_ENDIAN --- 1081,1085 ---- *p++ = 0xFEFF; if (size == 0) ! return v; if (byteorder == 0 || #ifdef BYTEORDER_IS_LITTLE_ENDIAN *************** *** 1097,1101 **** *p++ = (ch >> 8) | (ch << 8); } - done: return v; } --- 1095,1098 ---- *************** *** 1564,1567 **** --- 1561,1566 ---- if (repr == NULL) return NULL; + if (size == 0) + return repr; p = q = PyString_AS_STRING(repr); *************** *** 1663,1669 **** --- 1662,1671 ---- PyObject *repr; char *s, *start; + repr = PyString_FromStringAndSize(NULL, size); if (repr == NULL) return NULL; + if (size == 0) + return repr; s = PyString_AS_STRING(repr); *************** *** 1803,1809 **** --- 1805,1814 ---- PyObject *repr; char *s, *start; + repr = PyString_FromStringAndSize(NULL, size); if (repr == NULL) return NULL; + if (size == 0) + return repr; s = PyString_AS_STRING(repr); *************** *** 1891,1895 **** if (repr == NULL) return NULL; ! if (mbcssize==0) return repr; --- 1896,1900 ---- if (repr == NULL) return NULL; ! if (mbcssize == 0) return repr; *************** *** 2068,2071 **** --- 2073,2078 ---- if (v == NULL) return NULL; + if (size == 0) + return v; s = PyString_AS_STRING(v); while (size-- > 0) { From python-dev@python.org Mon Aug 14 15:46:17 2000 From: python-dev@python.org (Fred L. Drake, Jr.) Date: Mon, 14 Aug 2000 10:46:17 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.2,1.3 In-Reply-To: <200008140621.XAA12890@slayer.i.sourceforge.net> References: <200008140621.XAA12890@slayer.i.sourceforge.net> Message-ID: <14744.1593.850598.411098@cj42289-a.reston1.va.home.com> Mark Hammond writes: > Test for fix to bug #110673: os.abspatth() now always returns > os.getcwd() on Windows, if an empty path is specified. It > previously did not if an empty path was delegated to > win32api.GetFullPathName()) ... > + tester('ntpath.abspath("")', os.getcwd()) This doesn't work. The test should pass on non-Windows platforms as well; on Linux I get this: cj42289-a(.../python/linux-beowolf); ./python ../Lib/test/test_ntpath.py error! evaluated: ntpath.abspath("") should be: /home/fdrake/projects/python/linux-beowolf returned: \home\fdrake\projects\python\linux-beowolf\ 1 errors. -Fred -- Fred L. Drake, Jr. BeOpen PythonLabs Team Member From python-dev@python.org Mon Aug 14 15:48:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 07:48:40 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0219.txt,NONE,1.1 pep-0220.txt,NONE,1.1 Message-ID: <200008141448.HAA18103@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18080 Added Files: pep-0219.txt pep-0220.txt Log Message: Gordo's new PEPs ***** Error reading new file(2, 'No such file or directory') ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Mon Aug 14 15:47:00 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 07:47:00 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.20,1.21 Message-ID: <200008141447.HAA17628@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv17612 Modified Files: pep-0000.txt Log Message: Added Gordo's PEP 219 and 220. Expanded the keys a bit (see also PEP 1 update). Modest reformating. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** pep-0000.txt 2000/08/08 02:30:24 1.20 --- pep-0000.txt 2000/08/14 14:46:56 1.21 *************** *** 17,50 **** Index ! num filename title owner ! --- ------------ ----- ----- ! 0 pep-0000.txt Index of Python Enhance Proposals bwarsaw ! 1 pep-0001.txt PEP Guidelines bwarsaw, jhylton ! 2 pep-0002.txt Procedure for Adding New Modules esr ! 160 pep-0160.txt Python 1.6 Release Schedule fdrake ! 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! [*] 201 pep-0201.txt Lockstep Iteration bwarsaw ! 202 pep-0202.txt List Comprehensions tim_one ! 203 pep-0203.txt Augmented Assignments twouters ! 204 pep-0204.txt Range Literals twouters ! 205 pep-0205.txt Weak References fdrake ! 206 pep-0206.txt 2.0 Batteries Included moshez ! 207 pep-0207.txt Rich Comparisons davida ! 208 pep-0208.txt Reworking the Coercion Model davida ! 209 pep-0209.txt Adding Multidimensional Arrays davida ! 210 pep-0210.txt Decoupling the Interpreter Loop davida ! 211 pep-0211.txt Adding New Linear Algebra Operators gvwilson ! 212 pep-0212.txt Additional Builtin Generators bwarsaw ! 213 pep-0213.txt Attribute Access Handlers prescod ! 214 pep-0214.txt Extended Print Statement bwarsaw ! 215 pep-0215.txt String Interpolation ping ! 216 pep-0216.txt Docstring Format moshez ! 217 pep-0217.txt Display Hook for Interactive Use moshez ! 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson ! [*] denotes accepted proposals. --- 17,58 ---- Index ! num filename title owner ! --- ------------ ----- ----- ! I 0 pep-0000.txt Index of Python Enhance Proposals bwarsaw ! I 1 pep-0001.txt PEP Guidelines bwarsaw, jhylton ! I 2 pep-0002.txt Procedure for Adding New Modules esr ! I 160 pep-0160.txt Python 1.6 Release Schedule fdrake ! I 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tim_one ! S 203 pep-0203.txt Augmented Assignments twouters ! S 204 pep-0204.txt Range Literals twouters ! S 205 pep-0205.txt Weak References fdrake ! I 206 pep-0206.txt 2.0 Batteries Included moshez ! S 207 pep-0207.txt Rich Comparisons davida ! S 208 pep-0208.txt Reworking the Coercion Model davida ! S 209 pep-0209.txt Adding Multidimensional Arrays davida ! S 210 pep-0210.txt Decoupling the Interpreter Loop davida ! T 211 pep-0211.txt Adding New Linear Algebra Operators gvwilson ! S 212 pep-0212.txt Additional Builtin Generators bwarsaw ! S 213 pep-0213.txt Attribute Access Handlers prescod ! S 214 pep-0214.txt Extended Print Statement bwarsaw ! S 215 pep-0215.txt String Interpolation ping ! I 216 pep-0216.txt Docstring Format moshez ! S 217 pep-0217.txt Display Hook for Interactive Use moshez ! S 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson ! T 219 pep-0219.txt Stackless Python gmcm ! I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! Key ! ! I - Informational PEP ! S - Standards Track PEP ! T - Technical PEP ! A - Accepted proposal ! R - Rejected proposal From python-dev@python.org Mon Aug 14 15:48:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 07:48:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.4,1.5 Message-ID: <200008141448.HAA18067@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18057 Modified Files: pep-0001.txt Log Message: There are now three basic types of PEPs: informational, standards track, and technical. The (new) latter type describes internal or implementation changes that don't have a direct visible effect on the Python language (e.g. Stackless). Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0001.txt 2000/08/08 02:30:55 1.4 --- pep-0001.txt 2000/08/14 14:48:20 1.5 *************** *** 31,38 **** Kinds of PEPs ! There are two kinds of PEPs. A standards track PEP describes a new feature for Python. An informational PEP describes a Python design issue, or provides general guidelines or information to the ! Python community, but does not propose a new feature. --- 31,41 ---- Kinds of PEPs ! There are three kinds of PEPs. A standards track PEP describes a new feature for Python. An informational PEP describes a Python design issue, or provides general guidelines or information to the ! Python community, but does not propose a new feature. A technical ! PEP describes a new implementation or other internal modification ! that doesn't directly expose new features to the Python ! programmer. From python-dev@python.org Mon Aug 14 16:22:56 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 14 Aug 2000 08:22:56 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.4,1.5 Message-ID: <200008141522.IAA30493@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30220 Modified Files: pep-0203.txt Log Message: Fixed some spelling errors and inconsistent quoting, rewrote some unclear parts and added a Rationale and an Open Issues section. Is this something like you had in mind when you say 'Rationale', Tim ? :-) Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0203.txt 2000/08/07 12:40:00 1.4 --- pep-0203.txt 2000/08/14 15:22:52 1.5 *************** *** 5,8 **** --- 5,10 ---- Python-Version: 2.0 Status: Draft + Created: 13-Jul-2000 + Type: Standard *************** *** 26,32 **** += -= *= /= %= **= <<= >>= &= ^= |= ! They implement the same operator as their normal binary form, with ! the exception that the operation is done `in-place' whenever ! possible. They truly behave as augmented assignment, in that they perform --- 28,35 ---- += -= *= /= %= **= <<= >>= &= ^= |= ! They implement the same operator as their normal binary form, ! except that the operation is done `in-place' when the left-hand ! side object supports it, and that the left-hand side is only ! evaluated once. They truly behave as augmented assignment, in that they perform *************** *** 36,43 **** x += y ! The object `x' is loaded, then added with 1, and the resulting ! object is stored back in the original place. The precise action ! performed on the two arguments depends on the type of `x', and ! possibly of `y'. The idea behind augmented assignment in Python is that it isn't --- 39,46 ---- x += y ! The object `x' is loaded, then `y' is added to it, and the ! resulting object is stored back in the original place. The precise ! action performed on the two arguments depends on the type of `x', ! and possibly of `y'. The idea behind augmented assignment in Python is that it isn't *************** *** 45,49 **** result of a binary operation in its left-hand operand, but also a way for the left-hand operand in question to know that it should ! operate 'on itself', rather than creating a modified copy of itself. --- 48,52 ---- result of a binary operation in its left-hand operand, but also a way for the left-hand operand in question to know that it should ! operate `on itself', rather than creating a modified copy of itself. *************** *** 59,68 **** x += y ! tries to call x.__add_ab__(y), which is the 'in-place' variant of __add__. If __add_ab__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! an unsafe assumption. The __add_ab__ hook should behave exactly like __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. --- 62,71 ---- x += y ! tries to call x.__add_ab__(y), which is the `in-place' variant of __add__. If __add_ab__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! an unsafe to say the least. The __add_ab__ hook should behave exactly like __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. *************** *** 77,80 **** --- 80,136 ---- + Rationale + + There are two main reasons for adding this feature to Python: + simplicity of expression, and support for in-place operations. The + end result is a tradeoff between simplicity of syntax and + simplicity of expression; like most new features, augmented + assignment doesn't add anything that was previously impossible. It + merely makes these things easier to do. + + Adding augmented assignment will make Pythons syntax more complex. + Instead of a single assignment operation, there are now twelve + assignment operations, eleven of which also perform an binary + operation. However, these eleven new forms of assignment are easy + to understand as the coupling between assignment and the binary + operation, and they require no large conceptual leap to + understand. Furthermore, languages that do have augmented + assignment have shown that they are a popular, much used feature. + Expressions of the form + + = + + are common enough in those languages to make the extra syntax + worthwhile, and Python does not have significantly less of those + expressions. Quite the opposite, in fact, since in Python you can + also concatenate lists with a binary operator, something that is + done quite frequently. Writing the above expression as + + = + + is both more readable and less error prone, because it is + instantly obvious to the reader that it is that is being + changed, and not that is being replaced by something almost, + but not quite, entirely unlike . + + The new in-place operations are especially useful to matrix + calculation and other applications that require large objects. In + order to efficiently deal with the available program memory, such + packages cannot blindly use the current binary operations. Because + these operations always create a new character, adding a single + item to an existing (large) object would result in copying the + entire object (which may cause the application to run out of + memory), add the single item, and then possibly delete the + original object, depending on reference count. + + To work around this problem, the packages currently have to use + methods or functions to modify an object in-place, which is + definately less readable than an augmented assignment expression. + Augmented assignment won't solve all the problems for these + packages, since some operations cannot be expressed in the limited + set of binary operators to start with, but it is a start. A + different PEP[3] is looking at adding new operators. + + New methods *************** *** 95,101 **** __or_ab__ ! The `__add_ab__' name is one proposed by Guido[1], and stands for `and ! becomes'. Other proposed names include '__iadd__', `__add_in__' ! `__inplace_add__' For C extention types, the following struct members are added: --- 151,158 ---- __or_ab__ ! The `__add_ab__' name is one proposed by Guido[1], and stands for ! `and becomes'. Other proposed names include `__iadd__', ! `__add_in__' and `__inplace_add__'. A firm decision by the BDFL is ! probably needed to finalize this issue. For C extention types, the following struct members are added: *************** *** 123,127 **** compatibility is made (which may or may not happen before 2.0) code that wants to use one of the new struct members must first ! check that they are available with the 'PyType_HasFeature()' macro: if (PyType_HasFeature(x->ob_type, Py_TPFLAGS_HAVE_INPLACE_OPS) && --- 180,185 ---- compatibility is made (which may or may not happen before 2.0) code that wants to use one of the new struct members must first ! check that they are available with the `PyType_HasFeature()' ! macro: if (PyType_HasFeature(x->ob_type, Py_TPFLAGS_HAVE_INPLACE_OPS) && *************** *** 177,182 **** The INPLACE_* bytecodes mirror the BINARY_* bytecodes, except that ! they are implemented as calls to the 'InPlace' API functions. The ! other two bytecodes are 'utility' bytecodes: ROT_FOUR behaves like ROT_THREE except that the four topmost stack items are rotated. --- 235,240 ---- The INPLACE_* bytecodes mirror the BINARY_* bytecodes, except that ! they are implemented as calls to the `InPlace' API functions. The ! other two bytecodes are `utility' bytecodes: ROT_FOUR behaves like ROT_THREE except that the four topmost stack items are rotated. *************** *** 184,195 **** be an integer between 1 and 5 (inclusive) which is the number of items to duplicate in one block. Given a stack like this (where ! the left side of the list is the 'top' of the stack): ! [a, b, c, d, e, f, g] "DUP_TOPX 3" would duplicate the top 3 items, resulting in this stack: ! [a, b, c, d, e, f, g, e, f, g] DUP_TOPX with an argument of 1 is the same as DUP_TOP. The limit --- 242,253 ---- be an integer between 1 and 5 (inclusive) which is the number of items to duplicate in one block. Given a stack like this (where ! the right side of the list is the `top' of the stack): ! [1, 2, 3, 4, 5] "DUP_TOPX 3" would duplicate the top 3 items, resulting in this stack: ! [1, 2, 3, 4, 5, 3, 4, 5] DUP_TOPX with an argument of 1 is the same as DUP_TOP. The limit *************** *** 198,201 **** --- 256,296 ---- and 3, and could do without this new opcode at the cost of a fair number of DUP_TOP and ROT_*. + + + Open Issues + + The PyNumber_InPlacePower() function only takes two arguments, not + one like PyNumber_Power(). This is because there is no way to do + an inplace three-argument-power trough the augmented assignment + syntax or the power() function. + + + Possibly a more obvious name for the Python hooks can be found. + `_ab_' is what Guido proposed[1] as a working name, and comes from + an old Algol-68 naming convention. + + + Documentation needs to be written. The reference manual, the `dis' + section of the library manual, and possibly the tutorial. + + + The DUP_TOPX bytecode is a conveniency bytecode, and is not + actually necessary. It should be considered whether this bytecode + is worth having. There seems to be no other possible use for this + bytecode at this time. + + + The standard library should be adjusted to provide augmented + assignment hooks, where sensible. + + + It is not possible to do an inplace operation in the variant of + + += + + Instead, the instance objects' __radd__ hook is called, with the + builtin type as argument. The same goes for the other operations. + It might necessary to add a right-hand version of __add_ab__ after + all, to support something like that. From python-dev@python.org Mon Aug 14 16:38:02 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 08:38:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.29,1.30 Message-ID: <200008141538.IAA32059@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv32041/Doc/lib Modified Files: libstdtypes.tex Log Message: Document the range type, as suggested by Denis S. Otkidach . Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** libstdtypes.tex 2000/08/12 03:36:23 1.29 --- libstdtypes.tex 2000/08/14 15:37:59 1.30 *************** *** 313,318 **** \subsection{Sequence Types \label{typesseq}} ! There are five sequence types: strings, Unicode strings, lists, ! tuples, and buffers. Strings literals are written in single or double quotes: --- 313,318 ---- \subsection{Sequence Types \label{typesseq}} ! There are six sequence types: strings, Unicode strings, lists, ! tuples, buffers, and ranges. Strings literals are written in single or double quotes: *************** *** 328,332 **** item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} \indexii{sequence}{types} \indexii{string}{type} --- 328,335 ---- item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} Ranges are ! similar to buffers in that there is no specific syntax to create them, ! but they are created using the \function{xrange()} ! function.\bifuncindex{xrange} \indexii{sequence}{types} \indexii{string}{type} *************** *** 631,637 **** Additional string operations are defined in standard module ! \module{string} and in built-in module \module{re}. \refstmodindex{string} \refstmodindex{re} \subsubsection{Mutable Sequence Types \label{typesseq-mutable}} --- 634,657 ---- Additional string operations are defined in standard module ! \refmodule{string} and in built-in module \refmodule{re}. \refstmodindex{string} \refstmodindex{re} + + + \subsubsection{Range Type \label{typesseq-range}} + + The range\indexii{range}{type} type is an immutable sequence which is + commonly used for looping. The advantage of the range type is that a + range object will always take the same amount of memory, no matter the + size of the range it represents. There are no consistent performance + advantages. + + Range objects behave like tuples, and offer a single method: + + \begin{methoddesc}[range]{tolist}{} + Return a list object which represents the same values as the range + object. + \end{methoddesc} + \subsubsection{Mutable Sequence Types \label{typesseq-mutable}} From python-dev@python.org Mon Aug 14 16:47:06 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 08:47:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.71,2.72 Message-ID: <200008141547.IAA00701@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv683/Python Modified Files: sysmodule.c Log Message: Add a byte_order value to the sys module. The value is "big" for big-endian machines and "little" for little-endian machines. Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.71 retrieving revision 2.72 diff -C2 -r2.71 -r2.72 *** sysmodule.c 2000/07/24 16:06:23 2.71 --- sysmodule.c 2000/08/14 15:47:03 2.72 *************** *** 457,460 **** --- 457,473 ---- v = list_builtin_module_names()); Py_XDECREF(v); + { + /* Assumes that longs are at least 2 bytes long. + Should be safe! */ + unsigned long number = 1; + + s = (char *) &number; + if (s[0] == 0) + PyDict_SetItemString(sysdict, "byte_order", + PyString_FromString("big")); + else + PyDict_SetItemString(sysdict, "byte_order", + PyString_FromString("little")); + } #ifdef MS_COREDLL PyDict_SetItemString(sysdict, "dllhandle", From python-dev@python.org Mon Aug 14 16:47:32 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 08:47:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.37,1.38 Message-ID: <200008141547.IAA00760@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv747/Doc/lib Modified Files: libsys.tex Log Message: Document the byte_order value in the sys module. Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** libsys.tex 2000/06/30 16:06:19 1.37 --- libsys.tex 2000/08/14 15:47:30 1.38 *************** *** 21,24 **** --- 21,32 ---- \end{datadesc} + \begin{datadesc}{byte_order} + An indicator of the native byte order. This will have the value + \code{'big'} on big-endian (most-signigicant byte first) platforms, + and \code{'little'} on little-endian (least-significant byte first) + platforms. + \versionadded{2.0} + \end{datadesc} + \begin{datadesc}{builtin_module_names} A tuple of strings giving the names of all modules that are compiled From python-dev@python.org Mon Aug 14 17:08:47 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 14 Aug 2000 09:08:47 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.5,1.6 Message-ID: <200008141608.JAA10182@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10077 Modified Files: pep-0203.txt Log Message: Reflect the fact I just posted this PEP to c.l.py. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** pep-0203.txt 2000/08/14 15:22:52 1.5 --- pep-0203.txt 2000/08/14 16:08:44 1.6 *************** *** 7,10 **** --- 7,11 ---- Created: 13-Jul-2000 Type: Standard + Post-History: 14-Aug-2000 From python-dev@python.org Mon Aug 14 17:35:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 09:35:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html stdabout.dat,1.2,1.3 Message-ID: <200008141635.JAA12364@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv12357 Modified Files: stdabout.dat Log Message: For bug reporting, point to the SourceForge bug tracker instead of the old Jitterbug interface. Index: stdabout.dat =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/stdabout.dat,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** stdabout.dat 1999/11/12 17:20:40 1.2 --- stdabout.dat 2000/08/14 16:35:05 1.3 *************** *** 32,37 **** >python-docs@python.org. If you find specific errors in this document, please report the bug at the Python Bugs ! List.

    --- 32,37 ---- >python-docs@python.org. If you find specific errors in this document, please report the bug at the Python Bug ! Tracker at SourceForge.

    From python-dev@python.org Mon Aug 14 17:58:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 09:58:09 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.85.2.1,1.85.2.2 Message-ID: <200008141658.JAA14442@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv14423 Modified Files: Tag: cnri-16-start README Log Message: Update the Python version number for the final release. Update the link to information about Tcl/Tk. Add a note about the Tkinter book with a link to the PSA bookstore. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.85.2.1 retrieving revision 1.85.2.2 diff -C2 -r1.85.2.1 -r1.85.2.2 *** README 2000/08/02 21:29:30 1.85.2.1 --- README 2000/08/14 16:58:06 1.85.2.2 *************** *** 1,4 **** ! This is Python version 1.6 beta 1 (1.6b1) ! ========================================= License information --- 1,4 ---- ! This is Python version 1.6 ! ========================== License information *************** *** 733,737 **** release is recommended. ! See http://sunscript.sun.com/ for more info on Tcl/Tk, including the on-line manual pages. --- 733,737 ---- release is recommended. ! See http://www.tcltk.com/ for more info on Tcl/Tk, including the on-line manual pages. *************** *** 755,758 **** --- 755,760 ---- A more recent introduction to Tkinter programming, by Fredrik Lundh, is at http://www.pythonware.com/library/tkinter/introduction/index.htm. + At least one book has been published on Tkinter; go to the PSA bookstore + for more information: http://www.python.org/psa/bookstore/. There are demos in the Demo/tkinter directory, in the subdirectories From python-dev@python.org Mon Aug 14 18:05:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 10:05:12 -0700 Subject: [Python-checkins] CVS: python/dist/src LICENSE,1.1.2.5,1.1.2.6 Message-ID: <200008141705.KAA22868@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv22858 Modified Files: Tag: cnri-16-start LICENSE Log Message: Updated version number for the final release. Index: LICENSE =================================================================== RCS file: /cvsroot/python/python/dist/src/LICENSE,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -C2 -r1.1.2.5 -r1.1.2.6 *** LICENSE 2000/08/04 21:49:46 1.1.2.5 --- LICENSE 2000/08/14 17:05:10 1.1.2.6 *************** *** 13,22 **** ! B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING Python 1.6, beta 1 1. CNRI LICENSE AGREEMENT ! PYTHON 1.6, beta 1 CNRI OPEN SOURCE LICENSE AGREEMENT --- 13,22 ---- ! B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING Python 1.6 1. CNRI LICENSE AGREEMENT ! PYTHON 1.6 CNRI OPEN SOURCE LICENSE AGREEMENT *************** *** 26,73 **** BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, ! INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE ! DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE ! AGREEMENT. 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ! ("Licensee") accessing and otherwise using Python 1.6, beta 1 software in source or binary form and its associated documentation, as released at the www.python.org Internet site on August 4, 2000 ("Python ! 1.6b1"). 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, ! prepare derivative works, distribute, and otherwise use Python 1.6b1 alone or in any derivative version, provided, however, that CNRI's ! License Agreement is retained in Python 1.6b1, alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may ! substitute the following text (omitting the quotes): "Python 1.6, beta ! 1, is made available subject to the terms and conditions in CNRI's ! License Agreement. This Agreement may be located on the Internet ! using the following unique, persistent identifier (known as a handle): 1895.22/1011. This Agreement may also be obtained from a proxy server on the Internet using the URL:http://hdl.handle.net/1895.22/1011". 3. In the event Licensee prepares a derivative work that is based on ! or incorporates Python 1.6b1 or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work the nature of the ! modifications made to Python 1.6b1. ! 4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ! FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS ! AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. --- 26,72 ---- BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, ! INSTALLING OR OTHERWISE USING PYTHON 1.6 SOFTWARE, YOU ARE DEEMED TO ! HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT. 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ! ("Licensee") accessing and otherwise using Python 1.6 software in source or binary form and its associated documentation, as released at the www.python.org Internet site on August 4, 2000 ("Python ! 1.6"). 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, ! prepare derivative works, distribute, and otherwise use Python 1.6 alone or in any derivative version, provided, however, that CNRI's ! License Agreement is retained in Python 1.6, alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may ! substitute the following text (omitting the quotes): "Python 1.6, is ! made available subject to the terms and conditions in CNRI's License ! Agreement. This Agreement may be located on the Internet using the ! following unique, persistent identifier (known as a handle): 1895.22/1011. This Agreement may also be obtained from a proxy server on the Internet using the URL:http://hdl.handle.net/1895.22/1011". 3. In the event Licensee prepares a derivative work that is based on ! or incorporates Python 1.6 or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work the nature of the ! modifications made to Python 1.6. ! 4. CNRI is making Python 1.6 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS ! FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS ! AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. *************** *** 85,90 **** 8. By clicking on the "ACCEPT" button where indicated, or by copying, ! installing or otherwise using Python 1.6b1, Licensee agrees to be ! bound by the terms and conditions of this License Agreement. ACCEPT --- 84,89 ---- 8. By clicking on the "ACCEPT" button where indicated, or by copying, ! installing or otherwise using Python 1.6, Licensee agrees to be bound ! by the terms and conditions of this License Agreement. ACCEPT From python-dev@python.org Mon Aug 14 19:15:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 11:15:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/texinputs boilerplate.tex,1.42.2.1,1.42.2.2 Message-ID: <200008141815.LAA03530@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/texinputs In directory slayer.i.sourceforge.net:/tmp/cvs-serv3523/texinputs Modified Files: Tag: cnri-16-start boilerplate.tex Log Message: Update for 1.6 release (Python 1.6 branch only!). Index: boilerplate.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/texinputs/boilerplate.tex,v retrieving revision 1.42.2.1 retrieving revision 1.42.2.2 diff -C2 -r1.42.2.1 -r1.42.2.2 *** boilerplate.tex 2000/07/31 15:11:01 1.42.2.1 --- boilerplate.tex 2000/08/14 18:15:24 1.42.2.2 *************** *** 6,9 **** } ! \date{August 1, 2000} % XXX update before release! ! \release{1.6b1} --- 6,9 ---- } ! \date{August 15, 2000} % XXX update before release! ! \release{1.6} From python-dev@python.org Mon Aug 14 19:42:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 11:42:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile,1.195.2.1,1.195.2.2 Message-ID: <200008141842.LAA05460@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv5453 Modified Files: Tag: cnri-16-start Makefile Log Message: Update for 1.6 release (Python 1.6 branch only!). Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile,v retrieving revision 1.195.2.1 retrieving revision 1.195.2.2 diff -C2 -r1.195.2.1 -r1.195.2.2 *** Makefile 2000/08/01 16:37:02 1.195.2.1 --- Makefile 2000/08/14 18:42:37 1.195.2.2 *************** *** 62,66 **** # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6b1 --- 62,66 ---- # This is the *documentation* release, and is used to construct the file # names of the downloadable tarballs. ! RELEASE=1.6 From python-dev@python.org Mon Aug 14 20:58:11 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 14 Aug 2000 12:58:11 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.6,1.7 Message-ID: <200008141958.MAA19930@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv19789 Modified Files: pep-0203.txt Log Message: Spelling fixes and semantic (both ways) corrections by Aahz Maruch, Bjorn Pettersen and Eric Jacobs. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** pep-0203.txt 2000/08/14 16:08:44 1.6 --- pep-0203.txt 2000/08/14 19:58:09 1.7 *************** *** 17,21 **** of the feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list ! forums, and provides URLs for further information, where appropriate. The CVS revision history of this file contains the definitive historical record. --- 17,21 ---- of the feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list ! forums, and provides URLs for further information where appropriate. The CVS revision history of this file contains the definitive historical record. *************** *** 53,57 **** To make this possible, a number of new `hooks' are added to Python ! classes and C extention types, which are called when the object in question is used as the left hand side of an augmented assignment operation. If the class or type does not implement the `in-place' --- 53,57 ---- To make this possible, a number of new `hooks' are added to Python ! classes and C extension types, which are called when the object in question is used as the left hand side of an augmented assignment operation. If the class or type does not implement the `in-place' *************** *** 68,76 **** There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! an unsafe to say the least. The __add_ab__ hook should behave exactly ! like __add__, returning the result of the operation (which could ! be `self') which is to be stored in the variable `x'. ! For C extention types, the `hooks' are members of the PyNumberMethods and PySequenceMethods structures, and are called in exactly the same manner as the existing non-inplace operations, --- 68,76 ---- There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add_ab__ hook should behave similar ! to __add__, returning the result of the operation (which could be ! `self') which is to be stored in the variable `x'. ! For C extension types, the `hooks' are members of the PyNumberMethods and PySequenceMethods structures, and are called in exactly the same manner as the existing non-inplace operations, *************** *** 90,94 **** merely makes these things easier to do. ! Adding augmented assignment will make Pythons syntax more complex. Instead of a single assignment operation, there are now twelve assignment operations, eleven of which also perform an binary --- 90,94 ---- merely makes these things easier to do. ! Adding augmented assignment will make Python's syntax more complex. Instead of a single assignment operation, there are now twelve assignment operations, eleven of which also perform an binary *************** *** 103,107 **** are common enough in those languages to make the extra syntax ! worthwhile, and Python does not have significantly less of those expressions. Quite the opposite, in fact, since in Python you can also concatenate lists with a binary operator, something that is --- 103,107 ---- are common enough in those languages to make the extra syntax ! worthwhile, and Python does not have significantly fewer of those expressions. Quite the opposite, in fact, since in Python you can also concatenate lists with a binary operator, something that is *************** *** 119,131 **** order to efficiently deal with the available program memory, such packages cannot blindly use the current binary operations. Because ! these operations always create a new character, adding a single ! item to an existing (large) object would result in copying the ! entire object (which may cause the application to run out of ! memory), add the single item, and then possibly delete the ! original object, depending on reference count. To work around this problem, the packages currently have to use methods or functions to modify an object in-place, which is ! definately less readable than an augmented assignment expression. Augmented assignment won't solve all the problems for these packages, since some operations cannot be expressed in the limited --- 119,131 ---- order to efficiently deal with the available program memory, such packages cannot blindly use the current binary operations. Because ! these operations always create a new object, adding a single item ! to an existing (large) object would result in copying the entire ! object (which may cause the application to run out of memory), add ! the single item, and then possibly delete the original object, ! depending on reference count. To work around this problem, the packages currently have to use methods or functions to modify an object in-place, which is ! definitely less readable than an augmented assignment expression. Augmented assignment won't solve all the problems for these packages, since some operations cannot be expressed in the limited *************** *** 157,161 **** probably needed to finalize this issue. ! For C extention types, the following struct members are added: To PyNumberMethods: --- 157,161 ---- probably needed to finalize this issue. ! For C extension types, the following struct members are added: To PyNumberMethods: *************** *** 196,200 **** The current implementation of augmented assignment[2] adds, in ! addition to the methods and slots alread covered, 13 new bytecodes and 13 new API functions. --- 196,200 ---- The current implementation of augmented assignment[2] adds, in ! addition to the methods and slots already covered, 13 new bytecodes and 13 new API functions. *************** *** 306,310 **** [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 ! --- 306,311 ---- [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 ! [3] PEP 211, Adding New Linear Algebra Operators, ! http://python.sourceforge.net/peps/pep-0211.html From python-dev@python.org Mon Aug 14 21:08:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 13:08:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0160.txt,1.4,1.5 Message-ID: <200008142008.NAA28778@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28771 Modified Files: pep-0160.txt Log Message: Small adjustments. Index: pep-0160.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0160.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0160.txt 2000/07/27 18:46:29 1.4 --- pep-0160.txt 2000/08/14 20:08:40 1.5 *************** *** 5,8 **** --- 5,10 ---- Python-Version: 1.6 Status: Incomplete + Type: Informational + Created: 25-Jul-2000 Introduction *************** *** 16,20 **** Schedule ! August 1 1.6 beta 1 release. August 15 1.6 final release. --- 18,23 ---- Schedule ! August 1 1.6 beta 1 release (planned). ! August 3 1.6 beta 1 release (actual). August 15 1.6 final release. *************** *** 34,37 **** --- 37,43 ---- of the re module. + * The curses module was in the middle of a transformation to a + package, so the final form was adopted. + Mechanism *************** *** 47,50 **** --- 53,59 ---- Patches and features will be merged to the extent required to pass regression tests in effect on 16 May 2000. + + The beta release is tagged "r16b1" in the CVS repository, and the + final Python 1.6 release is tagged "release16" in the repository. Copyright From python-dev@python.org Mon Aug 14 21:59:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 13:59:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.72,2.73 Message-ID: <200008142059.NAA00471@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv455/Python Modified Files: sysmodule.c Log Message: The attempt to protect against MS_WIN16 compilers that do not support long string literals has not been tested on an MS_WIN16 platform; the trailing ";" was inside the #ifndef MS_WIN16, which should cause an error (missing semi-colon) when compiled with that symbol #defined. Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.72 retrieving revision 2.73 diff -C2 -r2.72 -r2.73 *** sysmodule.c 2000/08/14 15:47:03 2.72 --- sysmodule.c 2000/08/14 20:59:57 2.73 *************** *** 380,385 **** setprofile() -- set the global profiling function\n\ settrace() -- set the global debug tracing function\n\ ! "; #endif PyObject * --- 380,386 ---- setprofile() -- set the global profiling function\n\ settrace() -- set the global debug tracing function\n\ ! " #endif + /* end of sys_doc */ ; PyObject * From python-dev@python.org Tue Aug 15 00:06:40 2000 From: python-dev@python.org (Mark Hammond) Date: Mon, 14 Aug 2000 16:06:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.3,1.4 Message-ID: <200008142306.QAA14161@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv14044 Modified Files: test_ntpath.py Log Message: Remove the test for abspath with an empty path - too hard to do in a cross-platform manner. Index: test_ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_ntpath.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_ntpath.py 2000/08/14 06:21:26 1.3 --- test_ntpath.py 2000/08/14 23:06:37 1.4 *************** *** 37,41 **** tester('ntpath.abspath("C:\\")', "C:\\") - tester('ntpath.abspath("")', os.getcwd()) --- 37,40 ---- From python-dev@python.org Tue Aug 15 01:37:38 2000 From: python-dev@python.org (Mark Hammond) Date: Mon, 14 Aug 2000 17:37:38 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.11,1.12 Message-ID: <200008150037.RAA06924@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv6828 Modified Files: exceptions.c Log Message: Fix the parent of WindowsError - both the comments in this source file, and the previous exceptions.py have WindowsError as a sub-class of OSError. Index: exceptions.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** exceptions.c 2000/07/22 18:45:06 1.11 --- exceptions.c 2000/08/15 00:37:32 1.12 *************** *** 884,888 **** {"OSError", &PyExc_OSError, &PyExc_EnvironmentError, OSError__doc__}, #ifdef MS_WINDOWS ! {"WindowsError", &PyExc_WindowsError, &PyExc_EnvironmentError, WindowsError__doc__}, #endif /* MS_WINDOWS */ --- 884,888 ---- {"OSError", &PyExc_OSError, &PyExc_EnvironmentError, OSError__doc__}, #ifdef MS_WINDOWS ! {"WindowsError", &PyExc_WindowsError, &PyExc_OSError, WindowsError__doc__}, #endif /* MS_WINDOWS */ From python-dev@python.org Tue Aug 15 01:46:41 2000 From: python-dev@python.org (Mark Hammond) Date: Mon, 14 Aug 2000 17:46:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.164,2.165 Message-ID: <200008150046.RAA18040@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv17883 Modified Files: posixmodule.c Log Message: Fix for bug #110670 - Win32 os.listdir raises confusing errors: The existing win32_error() function now returns the new(ish) WindowsError, ensuring we get correct error messages. Index: posixmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.164 retrieving revision 2.165 diff -C2 -r2.164 -r2.165 *** posixmodule.c 2000/08/14 04:47:33 2.164 --- posixmodule.c 2000/08/15 00:46:38 2.165 *************** *** 350,359 **** win32_error(char* function, char* filename) { ! /* XXX this could be improved */ errno = GetLastError(); if (filename) ! return PyErr_SetFromErrnoWithFilename(PyExc_OSError, filename); else ! return PyErr_SetFromErrno(PyExc_OSError); } #endif --- 350,363 ---- win32_error(char* function, char* filename) { ! /* XXX We should pass the function name along in the future. ! (_winreg.c also wants to pass the function name.) ! This would however require an additional param to the ! Windows error object, which is non-trivial. ! */ errno = GetLastError(); if (filename) ! return PyErr_SetFromWindowsErrWithFilename(errno, filename); else ! return PyErr_SetFromWindowsErr(errno); } #endif From python-dev@python.org Tue Aug 15 04:34:50 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 14 Aug 2000 20:34:50 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.13,2.14 Message-ID: <200008150334.UAA02212@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv1338/python/dist/src/Include Modified Files: pyport.h Log Message: Fix for http://sourceforge.net/bugs/?func=detailbug&bug_id=111866&group_id=5470. This was a misleading bug -- the true "bug" was that hash(x) gave an error return when x is an infinity. Fixed that. Added new Py_IS_INFINITY macro to pyport.h. Rearranged code to reduce growing duplication in hashing of float and complex numbers, pushing Trent's earlier stab at that to a logical conclusion. Fixed exceedingly rare bug where hashing of floats could return -1 even if there wasn't an error (didn't waste time trying to construct a test case, it was simply obvious from the code that it *could* happen). Improved complex hash so that hash(complex(x, y)) doesn't systematically equal hash(complex(y, x)) anymore. Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** pyport.h 2000/08/11 11:48:33 2.13 --- pyport.h 2000/08/15 03:34:48 2.14 *************** *** 104,108 **** #endif ! /* Py_FORCE_EXPANSION * "Simply" returns its argument. However, macro expansions within the * argument are evaluated. This unfortunate trickery is needed to get --- 104,108 ---- #endif ! /* Py_FORCE_EXPANSION(X) * "Simply" returns its argument. However, macro expansions within the * argument are evaluated. This unfortunate trickery is needed to get *************** *** 124,127 **** --- 124,135 ---- #endif + /* Py_IS_INFINITY(X) + * Return 1 if float or double arg is an infinity, else 0. + * Caution: + * X is evaluated more than once. + * This implementation may set the underflow flag if |X| is very small; + * it really can't be implemented correctly (& easily) before C99. + */ + #define Py_IS_INFINITY(X) ((X) && (X)*0.5 == (X)) /************************************************************************** From python-dev@python.org Tue Aug 15 04:34:51 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 14 Aug 2000 20:34:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects complexobject.c,2.29,2.30 floatobject.c,2.66,2.67 longobject.c,1.65,1.66 object.c,2.93,2.94 Message-ID: <200008150334.UAA02221@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv1338/python/dist/src/Objects Modified Files: complexobject.c floatobject.c longobject.c object.c Log Message: Fix for http://sourceforge.net/bugs/?func=detailbug&bug_id=111866&group_id=5470. This was a misleading bug -- the true "bug" was that hash(x) gave an error return when x is an infinity. Fixed that. Added new Py_IS_INFINITY macro to pyport.h. Rearranged code to reduce growing duplication in hashing of float and complex numbers, pushing Trent's earlier stab at that to a logical conclusion. Fixed exceedingly rare bug where hashing of floats could return -1 even if there wasn't an error (didn't waste time trying to construct a test case, it was simply obvious from the code that it *could* happen). Improved complex hash so that hash(complex(x, y)) doesn't systematically equal hash(complex(y, x)) anymore. Index: complexobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/complexobject.c,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** complexobject.c 2000/07/31 15:28:04 2.29 --- complexobject.c 2000/08/15 03:34:48 2.30 *************** *** 243,292 **** complex_hash(PyComplexObject *v) { ! double intpart, fractpart; ! long x; ! /* This is designed so that Python numbers with the same ! value hash to the same value, otherwise comparisons ! of mapping keys will turn out weird */ ! ! #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ ! { ! extended e; ! fractpart = modf(v->cval.real, &e); ! intpart = e; ! } ! #else ! fractpart = modf(v->cval.real, &intpart); ! #endif ! ! if (fractpart == 0.0 && v->cval.imag == 0.0) { ! if (intpart > LONG_MAX || -intpart > LONG_MAX) { ! /* Convert to long int and use its hash... */ ! PyObject *w = PyLong_FromDouble(v->cval.real); ! if (w == NULL) ! return -1; ! x = PyObject_Hash(w); ! Py_DECREF(w); ! return x; ! } ! x = (long)intpart; ! } ! else { ! x = _Py_HashDouble(v->cval.real); ! if (x == -1) ! return -1; ! ! if (v->cval.imag != 0.0) { /* Hash the imaginary part */ ! /* XXX Note that this hashes complex(x, y) ! to the same value as complex(y, x). ! Still better than it used to be :-) */ ! long y = _Py_HashDouble(v->cval.imag); ! if (y == -1) ! return -1; ! x += y; ! } ! } ! if (x == -1) ! x = -2; ! return x; } --- 243,263 ---- complex_hash(PyComplexObject *v) { ! long hashreal, hashimag, combined; ! hashreal = _Py_HashDouble(v->cval.real); ! if (hashreal == -1) ! return -1; ! hashimag = _Py_HashDouble(v->cval.imag); ! if (hashimag == -1) ! return -1; ! /* Note: if the imaginary part is 0, hashimag is 0 now, ! * so the following returns hashreal unchanged. This is ! * important because numbers of different types that ! * compare equal must have the same hash value, so that ! * hash(x + 0*j) must equal hash(x). ! */ ! combined = hashreal + 1000003 * hashimag; ! if (combined == -1) ! combined = -2; ! return combined; } Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.66 retrieving revision 2.67 diff -C2 -r2.66 -r2.67 *** floatobject.c 2000/08/12 21:37:39 2.66 --- floatobject.c 2000/08/15 03:34:48 2.67 *************** *** 327,368 **** float_hash(PyFloatObject *v) { ! double intpart, fractpart; ! long x; ! /* This is designed so that Python numbers with the same ! value hash to the same value, otherwise comparisons ! of mapping keys will turn out weird */ ! ! #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ ! { ! extended e; ! fractpart = modf(v->ob_fval, &e); ! intpart = e; ! } ! #else ! fractpart = modf(v->ob_fval, &intpart); ! #endif ! ! if (fractpart == 0.0) { ! if (intpart > LONG_MAX || -intpart > LONG_MAX) { ! /* Convert to long int and use its hash... */ ! PyObject *w = PyLong_FromDouble(v->ob_fval); ! if (w == NULL) ! return -1; ! x = PyObject_Hash(w); ! Py_DECREF(w); ! return x; ! } ! x = (long)intpart; ! } ! else { ! /* Note -- if you change this code, also change the copy ! in complexobject.c */ ! x = _Py_HashDouble(v->ob_fval); ! if (x == -1) ! return -1; ! } ! if (x == -1) ! x = -2; ! return x; } --- 327,331 ---- float_hash(PyFloatObject *v) { ! return _Py_HashDouble(v->ob_fval); } Index: longobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/longobject.c,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -r1.65 -r1.66 *** longobject.c 2000/07/31 15:28:04 1.65 --- longobject.c 2000/08/15 03:34:48 1.66 *************** *** 115,119 **** int i, ndig, expo, neg; neg = 0; ! if (dval && dval * 0.5 == dval) { PyErr_SetString(PyExc_OverflowError, "cannot convert float infinity to long"); --- 115,119 ---- int i, ndig, expo, neg; neg = 0; ! if (Py_IS_INFINITY(dval)) { PyErr_SetString(PyExc_OverflowError, "cannot convert float infinity to long"); Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.93 retrieving revision 2.94 diff -C2 -r2.93 -r2.94 *** object.c 2000/08/11 00:14:26 2.93 --- object.c 2000/08/15 03:34:48 2.94 *************** *** 533,555 **** _Py_HashDouble(double v) { ! /* Use frexp to get at the bits in the double. * Since the VAX D double format has 56 mantissa bits, which is the * most of any double format in use, each of these parts may have as * many as (but no more than) 56 significant bits. ! * So, assuming sizeof(long) >= 4, each part can be broken into two longs; ! * frexp and multiplication are used to do that. ! * Also, since the Cray double format has 15 exponent bits, which is the ! * most of any double format in use, shifting the exponent field left by ! * 15 won't overflow a long (again assuming sizeof(long) >= 4). */ ! int expo; ! long hipart; ! ! v = frexp(v, &expo); ! v = v * 2147483648.0; /* 2**31 */ ! hipart = (long)v; /* Take the top 32 bits */ ! v = (v - (double)hipart) * 2147483648.0; /* Get the next 32 bits */ ! ! return hipart + (long)v + (expo << 15); /* Combine everything */ } --- 533,595 ---- _Py_HashDouble(double v) { ! double intpart, fractpart; ! int expo; ! long hipart; ! long x; /* the final hash value */ ! /* This is designed so that Python numbers of different types ! * that compare equal hash to the same value; otherwise comparisons ! * of mapping keys will turn out weird. ! */ ! ! #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ ! { ! extended e; ! fractpart = modf(v, &e); ! intpart = e; ! } ! #else ! fractpart = modf(v, &intpart); ! #endif ! if (fractpart == 0.0) { ! /* This must return the same hash as an equal int or long. */ ! if (intpart > LONG_MAX || -intpart > LONG_MAX) { ! /* Convert to long and use its hash. */ ! PyObject *plong; /* converted to Python long */ ! if (Py_IS_INFINITY(intpart)) ! /* can't convert to long int -- arbitrary */ ! v = v < 0 ? -271828.0 : 314159.0; ! plong = PyLong_FromDouble(v); ! if (plong == NULL) ! return -1; ! x = PyObject_Hash(plong); ! Py_DECREF(plong); ! return x; ! } ! /* Fits in a C long == a Python int, so is its own hash. */ ! x = (long)intpart; ! if (x == -1) ! x = -2; ! return x; ! } ! /* The fractional part is non-zero, so we don't have to worry about ! * making this match the hash of some other type. ! * Use frexp to get at the bits in the double. * Since the VAX D double format has 56 mantissa bits, which is the * most of any double format in use, each of these parts may have as * many as (but no more than) 56 significant bits. ! * So, assuming sizeof(long) >= 4, each part can be broken into two ! * longs; frexp and multiplication are used to do that. ! * Also, since the Cray double format has 15 exponent bits, which is ! * the most of any double format in use, shifting the exponent field ! * left by 15 won't overflow a long (again assuming sizeof(long) >= 4). */ ! v = frexp(v, &expo); ! v *= 2147483648.0; /* 2**31 */ ! hipart = (long)v; /* take the top 32 bits */ ! v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */ ! x = hipart + (long)v + (expo << 15); ! if (x == -1) ! x = -2; ! return x; } From python-dev@python.org Tue Aug 15 05:24:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 21:24:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.73,2.74 Message-ID: <200008150424.VAA13042@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv13031/Python Modified Files: sysmodule.c Log Message: Guido pointed out that all names in the sys module have no underscore, Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.73 retrieving revision 2.74 diff -C2 -r2.73 -r2.74 *** sysmodule.c 2000/08/14 20:59:57 2.73 --- sysmodule.c 2000/08/15 04:24:43 2.74 *************** *** 462,473 **** Should be safe! */ unsigned long number = 1; s = (char *) &number; if (s[0] == 0) ! PyDict_SetItemString(sysdict, "byte_order", ! PyString_FromString("big")); else ! PyDict_SetItemString(sysdict, "byte_order", ! PyString_FromString("little")); } #ifdef MS_COREDLL --- 462,474 ---- Should be safe! */ unsigned long number = 1; + char *value; s = (char *) &number; if (s[0] == 0) ! value = "big"; else ! value = "little"; ! PyDict_SetItemString(sysdict, "byteorder", ! PyString_FromString(value)); } #ifdef MS_COREDLL From python-dev@python.org Tue Aug 15 05:24:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 21:24:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.38,1.39 Message-ID: <200008150424.VAA13046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13031/Doc/lib Modified Files: libsys.tex Log Message: Guido pointed out that all names in the sys module have no underscore, Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** libsys.tex 2000/08/14 15:47:30 1.38 --- libsys.tex 2000/08/15 04:24:43 1.39 *************** *** 21,25 **** \end{datadesc} ! \begin{datadesc}{byte_order} An indicator of the native byte order. This will have the value \code{'big'} on big-endian (most-signigicant byte first) platforms, --- 21,25 ---- \end{datadesc} ! \begin{datadesc}{byteorder} An indicator of the native byte order. This will have the value \code{'big'} on big-endian (most-signigicant byte first) platforms, From python-dev@python.org Tue Aug 15 05:36:25 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 14 Aug 2000 21:36:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api refcounts.dat,1.13,1.14 Message-ID: <200008150436.VAA13633@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv13626/Doc/api Modified Files: refcounts.dat Log Message: Correct the reference count information for the parameters of PyErr_Restore(). Index: refcounts.dat =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/refcounts.dat,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** refcounts.dat 2000/08/12 03:39:47 1.13 --- refcounts.dat 2000/08/15 04:36:16 1.14 *************** *** 175,181 **** PyErr_Restore:void::: ! PyErr_Restore:PyObject*:type:0: ! PyErr_Restore:PyObject*:value:0: ! PyErr_Restore:PyObject*:traceback:0: PyErr_SetFromErrno:PyObject*::null: --- 175,181 ---- PyErr_Restore:void::: ! PyErr_Restore:PyObject*:type:-1: ! PyErr_Restore:PyObject*:value:-1: ! PyErr_Restore:PyObject*:traceback:-1: PyErr_SetFromErrno:PyObject*::null: From python-dev@python.org Tue Aug 15 06:53:22 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 14 Aug 2000 22:53:22 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.9,1.10 Message-ID: <200008150553.WAA26332@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv26324 Modified Files: pep2html.py Log Message: Changed the sense of the default behavior. No longer installs the .html files in SF by default; you must explicitly include the -i/--install option in order to upload. Also, added -h/--help and migrated to getopt for switch parsing. Included a usage() function. Some cosmetic changes. Index: pep2html.py =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pep2html.py 2000/08/11 22:18:04 1.9 --- pep2html.py 2000/08/15 05:53:19 1.10 *************** *** 3,25 **** convert PEP's to (X)HTML - courtesy of /F ! Syntax: pep2html [-n] [sf_username] ! The user name 'sf_username' is used to upload the converted files ! to the web pages at source forge. ! If -n is given, the script doesn't actually try to install the ! generated HTML at SourceForge. """ ! import cgi, glob, os, re, sys - # this doesn't validate -- you cannot use
    and

    inside
    - # tags.  but if I change that, the result doesn't look very nice...
      
    ! HOST = "shell.sourceforge.net" # host for update
    ! HDIR = "/home/groups/python/htdocs/peps" # target host directory
      LOCALVARS = "Local Variables:"
      
      DTD = ('')
    --- 3,37 ----
      convert PEP's to (X)HTML - courtesy of /F
      
    ! Usage: %(PROGRAM)s [options] [sf_username]
      
    ! Options:
      
    !     -i/--install
    !         After generating the HTML, install it SourceForge.  In that case the
    !         user's name is used in the scp and ssh commands, unless sf_username is
    !         given (in which case, it is used instead).  Without -i, sf_username is
    !         ignored.
      
    +     -h/--help
    +         Print this help message and exit.
      """
      
    ! import sys
    ! import os
    ! import re
    ! import cgi
    ! import glob
    ! import getopt
    ! 
    ! PROGRAM = sys.argv[0]
      
      
    ! 
    ! HOST = "shell.sourceforge.net"                    # host for update
    ! HDIR = "/home/groups/python/htdocs/peps"          # target host directory
      LOCALVARS = "Local Variables:"
      
    + # The generated HTML doesn't validate -- you cannot use 
    and

    inside + #
     tags.  But if I change that, the result doesn't look very nice...
      DTD = ('')
    ***************
    *** 27,30 ****
    --- 39,55 ----
      fixpat = re.compile("((http|ftp):[-_a-zA-Z0-9/.+~:?#$=&]+)|(pep-\d+(.txt)?)|.")
      
    + 
    + 
    + def usage(code, msg=''):
    +     sys.stderr.write(__doc__ % globals() + '\n')
    +     if msg:
    +         msg = str(msg)
    +         if msg[-1] <> '\n':
    +             msg = msg + '\n'
    +         sys.stderr.write(msg)
    +     sys.exit(code)
    + 
    + 
    + 
      def fixanchor(current, match):
          text = match.group(0)
    ***************
    *** 38,41 ****
    --- 63,68 ----
          return cgi.escape(match.group(0)) # really slow, but it works...
      
    + 
    + 
      def fixfile(infile, outfile):
          # convert plain text pep to minimal XHTML markup
    ***************
    *** 107,112 ****
      
      
      def main():
    !     update = 1
          for file in glob.glob("pep-*.txt"):
              newfile = os.path.splitext(file)[0] + ".html"
    --- 134,160 ----
      
      
    + 
      def main():
    !     # defaults
    !     update = 0
    !     username = ''
    ! 
    !     try:
    !         opts, args = getopt.getopt(sys.argv[1:], 'ih', ['install', 'help'])
    !     except getopt.error, msg:
    !         usage(1, msg)
    ! 
    !     if args:
    !         username = args[0] + '@'
    !         del args[0]
    !     if args:
    !         usage(1, 'unexpected arguments')
    ! 
    !     for opt, arg in opts:
    !         if opt in ('-h', '--help'):
    !             usage(0)
    !         elif opt in ('-i', '--install'):
    !             update = 1
    ! 
          for file in glob.glob("pep-*.txt"):
              newfile = os.path.splitext(file)[0] + ".html"
    ***************
    *** 114,128 ****
              fixfile(file, newfile)
      
    -     if len(sys.argv) > 1 and sys.argv[1] == "-n":
    -         update = 0
    -         del sys.argv[1]
    - 
    -     if len(sys.argv) == 1:
    -         username = ""
    -     elif len(sys.argv) == 2:
    -         username = sys.argv[1]+"@"
    -     else:
    -         raise "Syntax: "+sys.argv[0]+" [-n] [sf_username]"
    - 
          if update:
              os.system("scp pep-*.html style.css " + username + HOST + ":" + HDIR)
    --- 162,165 ----
    ***************
    *** 130,133 ****
    --- 167,171 ----
      
      
    + 
      if __name__ == "__main__":
          main()
    
    
    
    From python-dev@python.org  Tue Aug 15 06:54:20 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 22:54:20 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.5,1.6
    Message-ID: <200008150554.WAA26373@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26365
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Added a second footnote with more information about the pep2html.py
    script.
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** pep-0001.txt	2000/08/14 14:48:20	1.5
    --- pep-0001.txt	2000/08/15 05:54:18	1.6
    ***************
    *** 163,167 ****
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web.
      
          Each PEP begins with an RFC822 style header section.  Required
    --- 163,167 ----
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web[2].
      
          Each PEP begins with an RFC822 style header section.  Required
    ***************
    *** 208,214 ****
      
      
    ! References
      
          [1] http://www.opencontent.org/openpub/
      
      
    --- 208,218 ----
      
      
    ! References and Footnotes
      
          [1] http://www.opencontent.org/openpub/
    + 
    +     [2] The script referred to here is pep2html.py, which lives in
    +     the same directory in the CVS tree as the PEPs themselves.  Try
    +     "pep2html.py --help" for details.
      
      
    
    
    
    From python-dev@python.org  Tue Aug 15 06:58:53 2000
    From: python-dev@python.org (Tim Peters)
    Date: Mon, 14 Aug 2000 22:58:53 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.7,1.8
    Message-ID: <200008150558.WAA26703@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26680
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Updated as best I could.  Help!
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** pep-0200.txt	2000/08/07 17:04:27	1.7
    --- pep-0200.txt	2000/08/15 05:58:29	1.8
    ***************
    *** 16,24 ****
          historical record.
      
      Tentative Release Schedule
      
    -     Aug. 14: All 2.0 PEPs finished / feature freeze
    -     Aug. 28: 2.0 beta 1
    -     Sep. 29: 2.0 final
      
      Guidelines for submitting patches and making changes
    --- 16,26 ----
          historical record.
      
    + 
      Tentative Release Schedule
    + 
    +     14-Aug-2000: All 2.0 PEPs finished / feature freeze
    +     28-Aug-2000: 2.0 beta 1
    +     29-Sep-2000: 2.0 final
      
      
      Guidelines for submitting patches and making changes
    ***************
    *** 31,37 ****
      
          - Discuss any controversial changes on python-dev first.  If you
    !       get a lot of +1 votes and no -1 votes, make the change.  If you 
    !       get a some -1 votes, think twice; consider asking Guido what he 
    !       thinks. 
      
          - If the change is to code you contributed, it probably makes
    --- 33,39 ----
      
          - Discuss any controversial changes on python-dev first.  If you
    !       get a lot of +1 votes and no -1 votes, make the change.  If you
    !       get a some -1 votes, think twice; consider asking Guido what he
    !       thinks.
      
          - If the change is to code you contributed, it probably makes
    ***************
    *** 75,78 ****
    --- 77,81 ----
          released this way.
      
    + 
      Failing test cases need to get fixed
      
    ***************
    *** 84,97 ****
          to fail, they serve no useful purpose.
      
    !     test case         platform   R B    date reported   note
    !     test_mmap          Win32     X X    July 26, 2000
    !         [believe that was fixed by Mark H.]
    !     test_winreg        Win32     X X    July 26, 2000
    !     test_winreg2       Win32     X X    July 26, 2000
    !     test_popen2        Win32     X X    July 26, 2000   skipped
              [believe this was fix by /F]
    !     test_fork1         Linux     X      July 26, 2000   just SMP?  
              [no clue; there are probably two bugs here]
    !   
      Open items -- should be done/fixed
      
    --- 87,126 ----
          to fail, they serve no useful purpose.
      
    !     [what are the "R" and "B" columns supposed to mean? - tim]
    ! 
    !     test case         platform   R B    date reported
    !     ---------         --------   --     -------------
    !     test_winreg2      Win32      X X    26-Jul-2000
    !         [still fails 15-Aug-2000 for me, on Win98 - tim
    !          test test_winreg2 failed -- Writing: 'Test Failed: testHives',
    !          expected: 'HKEY_PERFORMANCE_DATA\012'
    !         ]
    ! 
    !     test_popen2       Win32      X X    26-Jul-2000
              [believe this was fix by /F]
    !         [still fails 15-Aug-2000 for me, on Win98 - tim
    !          test test_popen2 crashed -- exceptions.WindowsError :
    !          [Errno 2] The system cannot find the file specified
    !         ]
    ! 
    !     test_fork1        Linux      X      26-Jul-2000     just SMP?
              [no clue; there are probably two bugs here]
    ! 
    ! 
    ! Previously failing test cases
    ! 
    !     If you find a test bouncing between this section and the previous one,
    !     the code it's testing is in trouble!
    ! 
    !     test case         platform   R B    date reported
    !     ---------         --------   --     -------------
    !     test_winreg        Win32     X X    26-Jul-2000
    !         [works 15-Aug-2000 for me, on Win98 - tim]
    ! 
    !     test_mmap          Win32     X X    26-Jul-2000
    !         [believe that was fixed by Mark H.]
    !         [works 15-Aug-2000 for me, on Win98 - tim]
    ! 
    ! 
      Open items -- should be done/fixed
      
    ***************
    *** 103,107 ****
    --- 132,144 ----
      Accepted and completed
      
    +     * Lockstep iteration ("zip" function) - Barry Warsaw
    + 
    +     * SRE - Fredrik Lundh
    +       [at least I *think* it's done, as of 15-Aug-2000 - tim]
    + 
    +     * Fix xrange printing behavior - Fred Drake
    +       [although I'm not sure what this one was talking about - tim]
      
    + 
      Accepted and in progress
      
    ***************
    *** 116,122 ****
            http://hem.passagen.se/eff/bot.htm#456806
      
    -     * SRE - Fredrik Lundh
    -       The test suite still fails on test_re.
    - 
          * PyErr_SafeFormat / snprintf - owner???
            Use snprintf to avoid buffer overflows.  Need configure hackery
    --- 153,156 ----
    ***************
    *** 133,148 ****
            Make range(1, 10, 2) == [1:10:2]
      
      
    - Open: proposed but not accepted or declined
      
    !     * Fix xrange printing behavior
      
          * Tim O'Malley's cookie module -- but need different license
      
          * test harness for C code - Trent Mick
    - 
    -     * List comprehensions - Tim Peters?
    -       Need a coherent proposal.  Lots of confusing discussion going
    -       on.
      
          * Eliminated SET_LINENO opcode - Vladimir Marangozov
    --- 167,181 ----
            Make range(1, 10, 2) == [1:10:2]
      
    +     * List comprehensions - Skip Montanaro (Tim Peters for PEP)
    +       Need a coherent proposal.  Lots of confusing discussion going
    +       on.
    +       [note: it's not confusing to Guido  - tim]
      
      
    ! Open: proposed but not accepted or declined
      
          * Tim O'Malley's cookie module -- but need different license
      
          * test harness for C code - Trent Mick
      
          * Eliminated SET_LINENO opcode - Vladimir Marangozov
    
    
    
    From python-dev@python.org  Tue Aug 15 06:59:46 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 22:59:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules md5module.c,2.22,2.23
    Message-ID: <200008150559.WAA26757@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26746
    
    Modified Files:
    	md5module.c 
    Log Message:
    md5_hexdigest(): After a brief conversation with TP, added hexdigest()
    to this module to mirror sha's hexdigest() method.
    
    
    Index: md5module.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/md5module.c,v
    retrieving revision 2.22
    retrieving revision 2.23
    diff -C2 -r2.22 -r2.23
    *** md5module.c	2000/08/03 02:34:44	2.22
    --- md5module.c	2000/08/15 05:59:44	2.23
    ***************
    *** 82,87 ****
      md5_digest(md5object *self, PyObject *args)
      {
    ! 
    ! 	MD5_CTX mdContext;
      	unsigned char aDigest[16];
      
    --- 82,86 ----
      md5_digest(md5object *self, PyObject *args)
      {
    !  	MD5_CTX mdContext;
      	unsigned char aDigest[16];
      
    ***************
    *** 105,108 ****
    --- 104,142 ----
      
      static PyObject *
    + md5_hexdigest(md5object *self, PyObject *args)
    + {
    +  	MD5_CTX mdContext;
    + 	unsigned char digest[16];
    + 	unsigned char hexdigest[32];
    + 	int i, j;
    + 
    + 	if (!PyArg_NoArgs(args))
    + 		return NULL;
    + 
    + 	/* make a temporary copy, and perform the final */
    + 	mdContext = self->md5;
    + 	MD5Final(digest, &mdContext);
    + 
    + 	/* 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);
    + }
    + 
    + 
    + static char hexdigest_doc [] =
    + "hexdigest() -> string\n\
    + \n\
    + Like digest(), but returns the digest as a string of hexadecimal digits.";
    + 
    + 
    + static PyObject *
      md5_copy(md5object *self, PyObject *args)
      {
    ***************
    *** 127,137 ****
      
      static PyMethodDef md5_methods[] = {
    ! 	{"update",		(PyCFunction)md5_update, 
    ! 	 METH_OLDARGS, update_doc},
    ! 	{"digest",		(PyCFunction)md5_digest, 
    ! 	 METH_OLDARGS, digest_doc},
    ! 	{"copy",		(PyCFunction)md5_copy, 
    ! 	 METH_OLDARGS, copy_doc},
    ! 	{NULL,			NULL}		/* sentinel */
      };
      
    --- 161,169 ----
      
      static PyMethodDef md5_methods[] = {
    ! 	{"update",    (PyCFunction)md5_update,    METH_OLDARGS, update_doc},
    ! 	{"digest",    (PyCFunction)md5_digest,    METH_OLDARGS, digest_doc},
    ! 	{"hexdigest", (PyCFunction)md5_hexdigest, METH_OLDARGS, hexdigest_doc},
    ! 	{"copy",      (PyCFunction)md5_copy,      METH_OLDARGS, copy_doc},
    ! 	{NULL, NULL}			     /* sentinel */
      };
      
    
    
    
    From python-dev@python.org  Tue Aug 15 07:00:30 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:00:30 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmd5.tex,1.15,1.16
    Message-ID: <200008150600.XAA27250@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27175
    
    Modified Files:
    	libmd5.tex 
    Log Message:
    Added description of the md5.hexdigest() method.
    
    
    Index: libmd5.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmd5.tex,v
    retrieving revision 1.15
    retrieving revision 1.16
    diff -C2 -r1.15 -r1.16
    *** libmd5.tex	2000/07/16 19:01:09	1.15
    --- libmd5.tex	2000/08/15 06:00:28	1.16
    ***************
    *** 61,64 ****
    --- 61,69 ----
      \end{methoddesc}
      
    + \begin{methoddesc}[md5]{hexdigest}{}
    + Like \method{digest()} except the digest is returned as a string of
    + length 32, containing only hexadecimal digits.
    + \end{methoddesc}
    + 
      \begin{methoddesc}[md5]{copy}{}
      Return a copy (``clone'') of the md5 object.  This can be used to
    
    
    
    From python-dev@python.org  Tue Aug 15 07:01:39 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:01:39 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_md5.py,1.1,1.2
    Message-ID: <200008150601.XAA28617@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28526
    
    Modified Files:
    	test_md5.py 
    Log Message:
    Added a test of the md5.hexdigest() method.  Funny enough, this test
    had yet-another Python implementation of a binary-data-to-hex-digit
    encoder!
    
    
    Index: test_md5.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_md5.py,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** test_md5.py	1993/12/14 15:53:59	1.1
    --- test_md5.py	2000/08/15 06:01:36	1.2
    ***************
    *** 23,24 ****
    --- 23,30 ----
      print md5test('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
      print md5test('12345678901234567890123456789012345678901234567890123456789012345678901234567890')
    + 
    + # hexdigest is new with Python 2.0
    + m = md5('testing the hexdigest method')
    + h = m.hexdigest()
    + if hexstr(m.digest()) <> h:
    + 	print 'hexdigest() failed'
    
    
    
    From python-dev@python.org  Tue Aug 15 07:03:38 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:03:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules shamodule.c,2.9,2.10
    Message-ID: <200008150603.XAA31574@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31519
    
    Modified Files:
    	shamodule.c 
    Log Message:
    SHA_hexdigest(): A couple of small patches to this function, added
    after a brief conversation with TP.  First, the return values of the
    PyString_* function calls should be checked for errors.  Second,
    bit-manipulations should be used instead of division for spliting the
    byte up into its 4 bit digits.
    
    
    Index: shamodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/shamodule.c,v
    retrieving revision 2.9
    retrieving revision 2.10
    diff -C2 -r2.9 -r2.10
    *** shamodule.c	2000/08/01 01:26:02	2.9
    --- shamodule.c	2000/08/15 06:03:35	2.10
    ***************
    *** 423,434 ****
          /* Create a new string */
          retval = PyString_FromStringAndSize(NULL, sizeof(digest) * 2);
          hex_digest = PyString_AsString(retval);
      
          /* Make hex version of the digest */
          for(i=j=0; i9) ? c+'a'-10 : c + '0';
              hex_digest[j++] = c;
    !         c = digest[i] % 16; c = (c>9) ? c+'a'-10 : c + '0';
              hex_digest[j++] = c;
          }
    --- 423,442 ----
          /* 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> 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;
          }
    
    
    
    From python-dev@python.org  Tue Aug 15 07:08:02 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:08:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libbinascii.tex,1.17,1.18
    Message-ID: <200008150608.XAA02896@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2886
    
    Modified Files:
    	libbinascii.tex 
    Log Message:
    Describe the b2a_hex() and a2b_hex() functions (a.k.a. hexlify() and
    unhexlify() respectively).
    
    
    Index: libbinascii.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libbinascii.tex,v
    retrieving revision 1.17
    retrieving revision 1.18
    diff -C2 -r1.17 -r1.18
    *** libbinascii.tex	2000/07/16 19:01:09	1.17
    --- libbinascii.tex	2000/08/15 06:08:00	1.18
    ***************
    *** 85,88 ****
    --- 85,103 ----
      \end{funcdesc}
       
    + \begin{funcdesc}{b2a_hex}{data}
    + Return the hexadecimal representation of the binary \var{data}.  Every
    + byte of \var{data} is converted into the corresponding 2-digit hex
    + representation.  The resulting string is therefore, twice as long as
    + the length of \var{data}.  This function is also available as
    + \function{hexlify()}.
    + \end{funcdesc}
    + 
    + \begin{funcdesc}{a2b_hex}{hexstr}
    + Return the binary data represented by the hexadecimal string
    + \var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
    + \var{hexstr} must contain an even number of hexadecimal digits (which
    + can be upper or lower case), otherwise a \exception{TypeError} is
    + raised.  This function is also available as \function{unhexlify()}.
    + 
      \begin{excdesc}{Error}
      Exception raised on errors. These are usually programming errors.
    
    
    
    From python-dev@python.org  Tue Aug 15 07:07:17 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:07:17 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules binascii.c,2.23,2.24
    Message-ID: <200008150607.XAA02863@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2854
    
    Modified Files:
    	binascii.c 
    Log Message:
    After a brief conversation and code review with TP, adding two very
    commonly used functions to convert an arbitrary binary string into
    a hexadecimal digit representation and back again.  These are often
    (and often differently) implemented in Python.  Best to have one
    common fast implementation.  Specifically,
    
    binascii_hexlify(): a.k.a. b2a_hex() to return the hex representation
    of binary data.
    
    binascii_unhexlify(): a.k.a. a2b_hex() to do the inverse conversion
    (hex digits to binary data).  The argument must have an even length,
    and must contain only hex digits, otherwise a TypeError is raised.
    
    
    Index: binascii.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v
    retrieving revision 2.23
    retrieving revision 2.24
    diff -C2 -r2.23 -r2.24
    *** binascii.c	2000/08/03 02:06:15	2.23
    --- binascii.c	2000/08/15 06:07:13	2.24
    ***************
    *** 875,903 ****
      }
      
      /* List of functions defined in the module */
      
      static struct PyMethodDef binascii_module_methods[] = {
    ! 	{"a2b_uu",		binascii_a2b_uu,	
    ! 	 METH_VARARGS,	doc_a2b_uu},
    ! 	{"b2a_uu",		binascii_b2a_uu,	
    ! 	 METH_VARARGS,	doc_b2a_uu},
    ! 	{"a2b_base64",		binascii_a2b_base64,	
    ! 	 METH_VARARGS,
    ! 	 doc_a2b_base64},
    ! 	{"b2a_base64",		binascii_b2a_base64,	
    ! 	 METH_VARARGS, doc_b2a_base64},
    ! 	{"a2b_hqx",		binascii_a2b_hqx,	
    ! 	 METH_VARARGS, doc_a2b_hqx},
    ! 	{"b2a_hqx",		binascii_b2a_hqx,	
    ! 	 METH_VARARGS, doc_b2a_hqx},
    ! 	{"rlecode_hqx",		binascii_rlecode_hqx,	
    ! 	 METH_VARARGS, doc_rlecode_hqx},
    ! 	{"rledecode_hqx",	binascii_rledecode_hqx,	
    ! 	 METH_VARARGS, doc_rledecode_hqx},
    ! 	{"crc_hqx",		binascii_crc_hqx,	
    ! 	 METH_VARARGS,	doc_crc_hqx},
    ! 	{"crc32",		binascii_crc32,		
    ! 	 METH_VARARGS, doc_crc32},
    ! 	{NULL,			NULL}		/* sentinel */
      };
      
    --- 875,1007 ----
      }
      
    + 
    + static PyObject *
    + binascii_hexlify(PyObject *self, PyObject *args)
    + {
    + 	char* argbuf;
    + 	int arglen;
    + 	PyObject *retval;
    + 	char* retbuf;
    + 	int i, j;
    + 
    + 	if (!PyArg_ParseTuple(args, "t#:b2a_hex", &argbuf, &arglen))
    + 		return NULL;
    + 
    + 	retval = PyString_FromStringAndSize(NULL, arglen*2);
    + 	if (!retval)
    + 		return NULL;
    + 	retbuf = PyString_AsString(retval);
    + 	if (!retbuf)
    + 		goto finally;
    + 
    + 	/* make hex version of string, taken from shamodule.c */
    + 	for (i=j=0; i < arglen; i++) {
    + 		char c;
    + 		c = (argbuf[i] >> 4) & 0xf;
    + 		c = (c>9) ? c+'a'-10 : c + '0';
    + 		retbuf[j++] = c;
    + 		c = argbuf[i] & 0xf;
    + 		c = (c>9) ? c+'a'-10 : c + '0';
    + 		retbuf[j++] = c;
    + 	}
    + 	return retval;
    + 
    +   finally:
    + 	Py_DECREF(retval);
    + 	return NULL;
    + }
    + 
    + static char doc_hexlify[] =
    + "b2a_hex(data) -> s; Hexadecimal representation of binary data.\n\
    + \n\
    + This function is also available as \"hexlify()\".";
    + 
    + 
    + static int
    + to_int(char c) 
    + {
    + 	if (isdigit(c))
    + 		return c - '0';
    + 	else {
    + 		if (isupper(c))
    + 			c = tolower(c);
    + 		if (c >= 'a' && c <= 'f')
    + 			return c - 'a' + 10;
    + 	}
    + 	return -1;
    + }
    + 
    + 
    + static PyObject *
    + binascii_unhexlify(PyObject *self, PyObject *args)
    + {
    + 	char* argbuf;
    + 	int arglen;
    + 	PyObject *retval;
    + 	char* retbuf;
    + 	int i, j;
    + 
    + 	if (!PyArg_ParseTuple(args, "s#:a2b_hex", &argbuf, &arglen))
    + 		return NULL;
    + 
    + 	/* XXX What should we do about odd-lengthed strings?  Should we add
    + 	 * an implicit leading zero, or a trailing zero?  For now, raise an
    + 	 * exception.
    + 	 */
    + 	if (arglen % 2) {
    + 		PyErr_SetString(PyExc_TypeError, "odd lengthed string");
    + 		return NULL;
    + 	}
    + 
    + 	retval = PyString_FromStringAndSize(NULL, (arglen/2));
    + 	if (!retval)
    + 		return NULL;
    + 	retbuf = PyString_AsString(retval);
    + 	if (!retbuf)
    + 		goto finally;
    + 
    + 	for (i=j=0; i < arglen; i += 2) {
    + 		int top = to_int(Py_CHARMASK(argbuf[i]));
    + 		int bot = to_int(Py_CHARMASK(argbuf[i+1]));
    + 		if (top == -1 || bot == -1) {
    + 			PyErr_SetString(PyExc_TypeError,
    + 					"non-hexadecimal digit found");
    + 			goto finally;
    + 		}
    + 		retbuf[j++] = (top << 4) + bot;
    + 	}
    + 	return retval;
    + 
    +   finally:
    + 	Py_DECREF(retval);
    + 	return NULL;
    + }
    + 
    + static char doc_unhexlify[] =
    + "a2b_hex(hexstr) -> s; Binary data of hexadecimal representation.\n\
    + \n\
    + hexstr must contain an even number of hex digits (upper or lower case).\n\
    + This function is also available as \"unhexlify()\"";
    + 
    + 
      /* List of functions defined in the module */
      
      static struct PyMethodDef binascii_module_methods[] = {
    ! 	{"a2b_uu",     binascii_a2b_uu,     METH_VARARGS, doc_a2b_uu},
    ! 	{"b2a_uu",     binascii_b2a_uu,     METH_VARARGS, doc_b2a_uu},
    ! 	{"a2b_base64", binascii_a2b_base64, METH_VARARGS, doc_a2b_base64},
    ! 	{"b2a_base64", binascii_b2a_base64, METH_VARARGS, doc_b2a_base64},
    ! 	{"a2b_hqx",    binascii_a2b_hqx,    METH_VARARGS, doc_a2b_hqx},
    ! 	{"b2a_hqx",    binascii_b2a_hqx,    METH_VARARGS, doc_b2a_hqx},
    ! 	{"b2a_hex",    binascii_hexlify,    METH_VARARGS, doc_hexlify},
    ! 	{"a2b_hex",    binascii_unhexlify,  METH_VARARGS, doc_unhexlify},
    ! 	{"hexlify",    binascii_hexlify,    METH_VARARGS, doc_hexlify},
    ! 	{"unhexlify",  binascii_unhexlify,  METH_VARARGS, doc_unhexlify},
    ! 	{"rlecode_hqx",   binascii_rlecode_hqx, METH_VARARGS, doc_rlecode_hqx},
    ! 	{"rledecode_hqx", binascii_rledecode_hqx, METH_VARARGS,
    ! 	 doc_rledecode_hqx},
    ! 	{"crc_hqx",    binascii_crc_hqx,    METH_VARARGS, doc_crc_hqx},
    ! 	{"crc32",      binascii_crc32,      METH_VARARGS, doc_crc32},
    ! 	{NULL, NULL}			     /* sentinel */
      };
      
    
    
    
    From python-dev@python.org  Tue Aug 15 07:08:33 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Mon, 14 Aug 2000 23:08:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_binascii.py,1.5,1.6
    Message-ID: <200008150608.XAA03017@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3009
    
    Modified Files:
    	test_binascii.py 
    Log Message:
    tests for binascii.b2a_hex() and binascii.a2b_hex().
    
    
    Index: test_binascii.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_binascii.py,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** test_binascii.py	2000/02/16 21:13:06	1.5
    --- test_binascii.py	2000/08/15 06:08:31	1.6
    ***************
    *** 92,93 ****
    --- 92,112 ----
      
      # The hqx test is in test_binhex.py
    + 
    + # test hexlification
    + s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
    + t = binascii.b2a_hex(s)
    + u = binascii.a2b_hex(t)
    + if s <> u:
    +     print 'binascii hexlification failed'
    + try:
    +     binascii.a2b_hex(t[:-1])
    + except TypeError:
    +     pass
    + else:
    +     print 'expected TypeError not raised'
    + try:
    +     binascii.a2b_hex(t[:-1] + 'q')
    + except TypeError:
    +     pass
    + else:
    +     print 'expected TypeError not raised'
    
    
    
    From python-dev@python.org  Tue Aug 15 08:00:16 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 00:00:16 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules binascii.c,2.24,2.25
    Message-ID: <200008150700.AAA05986@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5839
    
    Modified Files:
    	binascii.c 
    Log Message:
    binascii_unhexlify(): Better error message, courtesy effbot.
    
    
    Index: binascii.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v
    retrieving revision 2.24
    retrieving revision 2.25
    diff -C2 -r2.24 -r2.25
    *** binascii.c	2000/08/15 06:07:13	2.24
    --- binascii.c	2000/08/15 06:59:58	2.25
    ***************
    *** 945,954 ****
      		return NULL;
      
    ! 	/* XXX What should we do about odd-lengthed strings?  Should we add
    ! 	 * an implicit leading zero, or a trailing zero?  For now, raise an
    ! 	 * exception.
      	 */
      	if (arglen % 2) {
    ! 		PyErr_SetString(PyExc_TypeError, "odd lengthed string");
      		return NULL;
      	}
    --- 945,954 ----
      		return NULL;
      
    ! 	/* XXX What should we do about strings with an odd length?  Should
    ! 	 * we add an implicit leading zero, or a trailing zero?  For now,
    ! 	 * raise an exception.
      	 */
      	if (arglen % 2) {
    ! 		PyErr_SetString(PyExc_TypeError, "Odd-length string");
      		return NULL;
      	}
    ***************
    *** 966,970 ****
      		if (top == -1 || bot == -1) {
      			PyErr_SetString(PyExc_TypeError,
    ! 					"non-hexadecimal digit found");
      			goto finally;
      		}
    --- 966,970 ----
      		if (top == -1 || bot == -1) {
      			PyErr_SetString(PyExc_TypeError,
    ! 					"Non-hexadecimal digit found");
      			goto finally;
      		}
    
    
    
    From python-dev@python.org  Tue Aug 15 08:34:37 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 00:34:37 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.8,1.9
    Message-ID: <200008150734.AAA15988@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15965
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Updated status of test_popen2 on Windows.
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.8
    retrieving revision 1.9
    diff -C2 -r1.8 -r1.9
    *** pep-0200.txt	2000/08/15 05:58:29	1.8
    --- pep-0200.txt	2000/08/15 07:34:33	1.9
    ***************
    *** 90,94 ****
      
          test case         platform   R B    date reported
    !     ---------         --------   --     -------------
          test_winreg2      Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    --- 90,94 ----
      
          test case         platform   R B    date reported
    !     ---------         --------   - -    -------------
          test_winreg2      Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    ***************
    *** 98,105 ****
      
          test_popen2       Win32      X X    26-Jul-2000
    -         [believe this was fix by /F]
              [still fails 15-Aug-2000 for me, on Win98 - tim
    !          test test_popen2 crashed -- exceptions.WindowsError :
    !          [Errno 2] The system cannot find the file specified
              ]
      
    --- 98,107 ----
      
          test_popen2       Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    !              test test_popen2 crashed -- exceptions.AssertionError :
    !          The problem is that the test uses "cat", but there is
    !          no such thing under Windows (unless you install it).
    !          So it's the test that's broken here, not (necessarily)
    !          the code.
              ]
      
    ***************
    *** 114,118 ****
      
          test case         platform   R B    date reported
    !     ---------         --------   --     -------------
          test_winreg        Win32     X X    26-Jul-2000
              [works 15-Aug-2000 for me, on Win98 - tim]
    --- 116,120 ----
      
          test case         platform   R B    date reported
    !     ---------         --------   - -    -------------
          test_winreg        Win32     X X    26-Jul-2000
              [works 15-Aug-2000 for me, on Win98 - tim]
    
    
    
    From python-dev@python.org  Tue Aug 15 08:47:16 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 00:47:16 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.9,1.10
    Message-ID: <200008150747.AAA16620@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv16561
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    
    Add a number of proposed but not accepted or declined projects. If you feel
    these should not be in this PEP -- decline them! Also note that I put
    augmented assignment under proposed, even though Guido and Tim keep saying
    it will be in 2.0, because I still don't know whether the proposal itself is
    accepted :-)
    
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** pep-0200.txt	2000/08/15 07:34:33	1.9
    --- pep-0200.txt	2000/08/15 07:47:12	1.10
    ***************
    *** 197,200 ****
    --- 197,215 ----
            - http://www.python.org/pipermail/python-dev/1999-August/002252.html
      
    +     * Augmented assignment - Thomas Wouters
    +       Add += and family, plus Python and C hooks, and API functions.
    + 
    +     * "import as" - Thomas Wouters
    +       Extend the 'import' and 'from ... import' mechanism to enable
    +       importing a symbol as another name.
    + 
    +     * Extended slicing on lists - Michael Hudson
    +       Make lists (and other builtin types) handle extended slices.
    + 
    +     * Merge __getitem__ and __getslice__ - Thomas Wouters
    +       Move __getslice__ functionality into __getitem__, using slice objects,
    +       for normal slices as well as for extended ones. First step: use
    +       getitem if there is no getslice.
    +       
      
      Declined
    
    
    
    From python-dev@python.org  Tue Aug 15 09:05:44 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 01:05:44 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.10,1.11
    Message-ID: <200008150805.BAA25859@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25844
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    
    Add one more proposed item, and change some wording on the 'import as' item.
    
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** pep-0200.txt	2000/08/15 07:47:12	1.10
    --- pep-0200.txt	2000/08/15 08:05:42	1.11
    ***************
    *** 202,206 ****
          * "import as" - Thomas Wouters
            Extend the 'import' and 'from ... import' mechanism to enable
    !       importing a symbol as another name.
      
          * Extended slicing on lists - Michael Hudson
    --- 202,206 ----
          * "import as" - Thomas Wouters
            Extend the 'import' and 'from ... import' mechanism to enable
    !       importing a symbol as another name. (Without adding a new keyword.)
      
          * Extended slicing on lists - Michael Hudson
    ***************
    *** 212,215 ****
    --- 212,219 ----
            getitem if there is no getslice.
            
    +     * 'indexing-for' - Thomas Wouters
    +       Special syntax to give Python code access to the loop-counter in 'for'
    +       loops. (Without adding a new keyword.)
    + 
      
      Declined
    
    
    
    From python-dev@python.org  Tue Aug 15 11:35:20 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Tue, 15 Aug 2000 03:35:20 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.10,1.11
    Message-ID: <200008151035.DAA10618@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9896
    
    Modified Files:
    	pep2html.py 
    Log Message:
    
    remove superfluous special casing for lines beginning with '[*]'
    
    
    
    Index: pep2html.py
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** pep2html.py	2000/08/15 05:53:19	1.10
    --- pep2html.py	2000/08/15 10:35:17	1.11
    ***************
    *** 119,123 ****
                  break
              if line[0] != "\f":
    !             if line[0].strip() and line[:3] != '[*]':
                      if line.strip() == LOCALVARS:
                          break
    --- 119,123 ----
                  break
              if line[0] != "\f":
    !             if line[0].strip():
                      if line.strip() == LOCALVARS:
                          break
    
    
    
    From python-dev@python.org  Tue Aug 15 13:17:36 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 05:17:36 -0700
    Subject: [Python-checkins] CVS: distutils/examples numpy_setup.py,1.9,1.10
    Message-ID: <200008151217.FAA05496@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/examples
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5385/examples
    
    Modified Files:
    	numpy_setup.py 
    Log Message:
    Bumped version to 15.3 (the current NumPy release).
    
    Index: numpy_setup.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/examples/numpy_setup.py,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** numpy_setup.py	2000/05/31 02:27:23	1.9
    --- numpy_setup.py	2000/08/15 12:17:33	1.10
    ***************
    *** 21,25 ****
      
      setup (name = "Numerical",
    !        version = "15.2",
             maintainer = "Paul Dubois",
             maintainer_email = "dubois@users.sourceforge.net",
    --- 21,25 ----
      
      setup (name = "Numerical",
    !        version = "15.3",
             maintainer = "Paul Dubois",
             maintainer_email = "dubois@users.sourceforge.net",
    
    
    
    From python-dev@python.org  Tue Aug 15 14:01:28 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:01:28 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command build_py.py,1.26,1.27
    Message-ID: <200008151301.GAA26610@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26489
    
    Modified Files:
    	build_py.py 
    Log Message:
    Fix long-hidden inconsistency in internal interface: 'find_modules()' now 
    represents packages as strings, not tuples.  This allowed a simplification
    in 'get_package_dir()', too -- can now assume that 'package' is a string.
    
    Index: build_py.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/build_py.py,v
    retrieving revision 1.26
    retrieving revision 1.27
    diff -C2 -r1.26 -r1.27
    *** build_py.py	2000/06/04 13:42:52	1.26
    --- build_py.py	2000/08/15 13:01:25	1.27
    ***************
    *** 94,103 ****
                 (at least according to the 'package_dir' option, if any)."""
      
    !         if type (package) is StringType:
    !             path = string.split (package, '.')
    !         elif type (package) in (TupleType, ListType):
    !             path = list (package)
    !         else:
    !             raise TypeError, "'package' must be a string, list, or tuple"
      
              if not self.package_dir:
    --- 94,98 ----
                 (at least according to the 'package_dir' option, if any)."""
      
    !         path = string.split (package, '.')
      
              if not self.package_dir:
    ***************
    *** 221,225 ****
              for module in self.py_modules:
                  path = string.split (module, '.')
    !             package = tuple (path[0:-1])
                  module_base = path[-1]
      
    --- 216,220 ----
              for module in self.py_modules:
                  path = string.split (module, '.')
    !             package = string.join(path[0:-1], '.')
                  module_base = path[-1]
      
    
    
    
    From python-dev@python.org  Tue Aug 15 14:03:19 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:03:19 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command bdist_rpm.py,1.15,1.16
    Message-ID: <200008151303.GAA29005@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27293
    
    Modified Files:
    	bdist_rpm.py 
    Log Message:
    Added support for the '--dist-dir' option, including a mildly nasty
    hack to find the two created RPM files (source and binary) and
    move them to the "dist dir" (default "dist").
    
    
    Index: bdist_rpm.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_rpm.py,v
    retrieving revision 1.15
    retrieving revision 1.16
    diff -C2 -r1.15 -r1.16
    *** bdist_rpm.py	2000/08/05 01:31:54	1.15
    --- bdist_rpm.py	2000/08/15 13:03:16	1.16
    ***************
    *** 9,12 ****
    --- 9,13 ----
      
      import os, string
    + import glob
      from types import *
      from distutils.core import Command, DEBUG
    ***************
    *** 25,28 ****
    --- 26,32 ----
               "base directory for creating RPMs (defaults to \"rpm\" under "
               "--bdist-base; must be specified for RPM 2)"),
    +         ('dist-dir=', 'd',
    +          "directory to put final RPM files in "
    +          "(and .spec files if --spec-only)"),
              ('spec-only', None,
               "only regenerate spec file"),
    ***************
    *** 110,113 ****
    --- 114,118 ----
              self.bdist_base = None
              self.rpm_base = None
    +         self.dist_dir = None
              self.spec_only = None
              self.binary_only = None
    ***************
    *** 167,170 ****
    --- 172,176 ----
                  self.use_rpm_opt_flags = 0
      
    +         self.set_undefined_options('bdist', ('dist_dir', 'dist_dir'))
              self.finalize_package_data()
      
    ***************
    *** 227,232 ****
              # make directories
              if self.spec_only:
    !             spec_dir = "dist"
    !             self.mkpath(spec_dir)       # XXX should be configurable
              else:
                  rpm_dir = {}
    --- 233,238 ----
              # make directories
              if self.spec_only:
    !             spec_dir = self.dist_dir
    !             self.mkpath(spec_dir)
              else:
                  rpm_dir = {}
    ***************
    *** 236,241 ****
                  spec_dir = rpm_dir['SPECS']
      
    !         # Spec file goes into 'dist' directory if '--spec-only specified',
    !         # into build/rpm. otherwise.
              spec_path = os.path.join(spec_dir,
                                       "%s.spec" % self.distribution.get_name())
    --- 242,247 ----
                  spec_dir = rpm_dir['SPECS']
      
    !         # Spec file goes into 'dist_dir' if '--spec-only specified',
    !         # build/rpm. otherwise.
              spec_path = os.path.join(spec_dir,
                                       "%s.spec" % self.distribution.get_name())
    ***************
    *** 285,288 ****
    --- 291,307 ----
              rpm_args.append(spec_path)
              self.spawn(rpm_args)
    + 
    +         # XXX this is a nasty hack -- we really should have a proper way to
    +         # find out the names of the RPM files created; also, this assumes
    +         # that RPM creates exactly one source and one binary RPM.
    +         if not self.dry_run:
    +             srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
    +             rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
    +             assert len(srpms) == 1, \
    +                    "unexpected number of SRPM files found: %s" % srpms
    +             assert len(rpms) == 1, \
    +                    "unexpected number of RPM files found: %s" % rpms
    +             self.move_file(srpms[0], self.dist_dir)
    +             self.move_file(rpms[0], self.dist_dir)
      
          # run()
    
    
    
    From python-dev@python.org  Tue Aug 15 14:05:38 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:05:38 -0700
    Subject: [Python-checkins] CVS: distutils/distutils/command bdist_rpm.py,1.16,1.17
    Message-ID: <200008151305.GAA31686@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils/command
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31590
    
    Modified Files:
    	bdist_rpm.py 
    Log Message:
    Fixed the move-RPM-files hack so it knows about the '--binary-only' and
    '--source-only' options.
    
    Index: bdist_rpm.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/command/bdist_rpm.py,v
    retrieving revision 1.16
    retrieving revision 1.17
    diff -C2 -r1.16 -r1.17
    *** bdist_rpm.py	2000/08/15 13:03:16	1.16
    --- bdist_rpm.py	2000/08/15 13:05:35	1.17
    ***************
    *** 296,307 ****
              # that RPM creates exactly one source and one binary RPM.
              if not self.dry_run:
    !             srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
    !             rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
    !             assert len(srpms) == 1, \
    !                    "unexpected number of SRPM files found: %s" % srpms
    !             assert len(rpms) == 1, \
    !                    "unexpected number of RPM files found: %s" % rpms
    !             self.move_file(srpms[0], self.dist_dir)
    !             self.move_file(rpms[0], self.dist_dir)
      
          # run()
    --- 296,310 ----
              # that RPM creates exactly one source and one binary RPM.
              if not self.dry_run:
    !             if not self.binary_only:
    !                 srpms = glob.glob(os.path.join(rpm_dir['SRPMS'], "*.rpm"))
    !                 assert len(srpms) == 1, \
    !                        "unexpected number of SRPM files found: %s" % srpms
    !                 self.move_file(srpms[0], self.dist_dir)
    ! 
    !             if not self.source_only:
    !                 rpms = glob.glob(os.path.join(rpm_dir['RPMS'], "*/*.rpm"))
    !                 assert len(rpms) == 1, \
    !                        "unexpected number of RPM files found: %s" % rpms
    !                 self.move_file(rpms[0], self.dist_dir)
      
          # run()
    
    
    
    From python-dev@python.org  Tue Aug 15 14:13:47 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:13:47 -0700
    Subject: [Python-checkins] CVS: distutils CHANGES.txt,1.11,1.12
    Message-ID: <200008151313.GAA06791@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv6696
    
    Modified Files:
    	CHANGES.txt 
    Log Message:
    Changes for 0.9.1.
    
    Index: CHANGES.txt
    ===================================================================
    RCS file: /cvsroot/python/distutils/CHANGES.txt,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** CHANGES.txt	2000/06/30 02:54:00	1.11
    --- CHANGES.txt	2000/08/15 13:13:44	1.12
    ***************
    *** 1,2 ****
    --- 1,25 ----
    + Release 0.9.1 (15 August, 2000):
    + ------------------------------
    +   * added --dist-dir option to the sdist and bdist commands, to control
    +     where output files are put; all default to the "dist" directory
    + 
    +   * factored a bunch of code out of the "sdist" command, which will
    +     hopefully make it easier to use its nifty "file list template"
    +     features used in other places (thanks to Rene Liebscher)
    + 
    +   * general cleanup/improvement of compiling extensions with non-
    +     Microsoft compilers under Windows (Rene Liebscher):
    +     - fixed Borland C++ interface so it works
    +     - better handling of different GCC versions under Windows
    + 
    +   * fixed a bunch of little bugs (thanks to various people)
    + 
    +   * some documentation work: added "Describing extensions" section
    +     to the "Distributing Python Modules" manual
    + 
    +   * fixed a long-standing bug in the "build_py" command that prevented
    +     "bdist_rpm" from working in certain cases
    + 
    + 
      Release 0.9 (29 June, 2000):
      ----------------------------
    
    
    
    From python-dev@python.org  Tue Aug 15 14:14:08 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:14:08 -0700
    Subject: [Python-checkins] CVS: distutils README.txt,1.17,1.18
    Message-ID: <200008151314.GAA07164@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7063
    
    Modified Files:
    	README.txt 
    Log Message:
    Tweaks for 0.9.1 release.
    
    Index: README.txt
    ===================================================================
    RCS file: /cvsroot/python/distutils/README.txt,v
    retrieving revision 1.17
    retrieving revision 1.18
    diff -C2 -r1.17 -r1.18
    *** README.txt	2000/06/30 02:54:00	1.17
    --- README.txt	2000/08/15 13:14:04	1.18
    ***************
    *** 1,5 ****
                           Python Distribution Utilities
    !                               release 0.9
    !                              June 29, 2000
      
      
    --- 1,5 ----
                           Python Distribution Utilities
    !                              release 0.9.1
    !                             August 15, 2000
      
      
    ***************
    *** 42,46 ****
      ------------
      
    ! Release 0.9 of the Distutils requires Python 1.5.2 or later.  (If you
      absolutely must use Python 1.5.1, Distutils 0.1.5 is backwards
      compatible.  However, I have dropped plans to port the current Distutils
    --- 42,46 ----
      ------------
      
    ! This release of the Distutils requires Python 1.5.2 or later.  (If you
      absolutely must use Python 1.5.1, Distutils 0.1.5 is backwards
      compatible.  However, I have dropped plans to port the current Distutils
    ***************
    *** 50,54 ****
      To use the Distutils under Unix, you must have a *complete* Python
      installation, including the Makefile and config.h used to build Python.
    ! These should be in /lib/python1.X/config.  (
      is the value of the --exec-prefix option to Python's configure script,
      or the --prefix option if --exec-prefix wasn't supplied; if neither was
    --- 50,54 ----
      To use the Distutils under Unix, you must have a *complete* Python
      installation, including the Makefile and config.h used to build Python.
    ! These should be in /lib/pythonX.Y/config.  (
      is the value of the --exec-prefix option to Python's configure script,
      or the --prefix option if --exec-prefix wasn't supplied; if neither was
    ***************
    *** 112,116 ****
      
      The Distutils have been included with Python since 1.6a1, and Distutils
    ! 0.9 is approximately the code that will be included with Python 2.0b1
      (modulo bug fixes).  Thus, there's generally no need to install the
      Distutils under Python 1.6/2.0.  However, Distutils releases may
    --- 112,116 ----
      
      The Distutils have been included with Python since 1.6a1, and Distutils
    ! 0.9.1 is approximately the code that will be included with Python 2.0b1
      (modulo bug fixes).  Thus, there's generally no need to install the
      Distutils under Python 1.6/2.0.  However, Distutils releases may
    ***************
    *** 141,150 ****
      
      The Distutils is intended to have three user communities: developers,
    ! packagers, and installers.  Distutils 0.9 is the first release that
    ! seriously caters to all three communities: developers can use it to
    ! build and install their modules, as well as create source distributions;
    ! packagers can use it to create RPMs and executable installers for
    ! Windows; and of course installers can build and install modules from
    ! source (or just use an installer created by some kind packager).
      
      Documentation for the Distutils is under construction in the form of two
    --- 141,150 ----
      
      The Distutils is intended to have three user communities: developers,
    ! packagers, and installers.  Distutils 0.9 was the first release to cater
    ! seriously to all three communities: developers can use it to build and
    ! install their modules, as well as create source distributions; packagers
    ! can use it to create RPMs and executable installers for Windows; and of
    ! course installers can build and install modules from source (or just use
    ! an installer created by some kind packager).
      
      Documentation for the Distutils is under construction in the form of two
    ***************
    *** 202,206 ****
    --- 202,209 ----
        * run "python setup.py install" for Numerical Python as usual
      
    + Note that Numerical Python 15.3 (the current release as I write this)
    + works fine with Distutils 0.8.x and 0.9.x.
      
    + 
      EXAMPLES
      --------
    ***************
    *** 217,221 ****
      If you want to try one of the example setup scripts in the real world,
      you'll obviously have to have the appropriate module distribution
    ! available: Numerical-15.2 (numpy_setup.py), PyXML-0.5.3 (xml_setup.py),
      Imaging-1.0 (pil_setup.py), or mxDateTime-1.3.0 (mxdatetime_setup.py).
      All you have to do is:
    --- 220,224 ----
      If you want to try one of the example setup scripts in the real world,
      you'll obviously have to have the appropriate module distribution
    ! available: Numerical-15.3 (numpy_setup.py), PyXML-0.5.3 (xml_setup.py),
      Imaging-1.0 (pil_setup.py), or mxDateTime-1.3.0 (mxdatetime_setup.py).
      All you have to do is:
    
    
    
    From python-dev@python.org  Tue Aug 15 14:14:29 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:14:29 -0700
    Subject: [Python-checkins] CVS: distutils setup.py,1.18,1.19
    Message-ID: <200008151314.GAA07573@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7500
    
    Modified Files:
    	setup.py 
    Log Message:
    Bump version to 0.9.1.
    
    Index: setup.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/setup.py,v
    retrieving revision 1.18
    retrieving revision 1.19
    diff -C2 -r1.18 -r1.19
    *** setup.py	2000/07/27 02:17:39	1.18
    --- setup.py	2000/08/15 13:14:27	1.19
    ***************
    *** 12,16 ****
      
      setup (name = "Distutils",
    !        version = "0.9.1pre",
             description = "Python Distribution Utilities",
             author = "Greg Ward",
    --- 12,16 ----
      
      setup (name = "Distutils",
    !        version = "0.9.1",
             description = "Python Distribution Utilities",
             author = "Greg Ward",
    
    
    
    From python-dev@python.org  Tue Aug 15 14:14:30 2000
    From: python-dev@python.org (Greg Ward)
    Date: Tue, 15 Aug 2000 06:14:30 -0700
    Subject: [Python-checkins] CVS: distutils/distutils __init__.py,1.9,1.10
    Message-ID: <200008151314.GAA07587@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/distutils/distutils
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv7500/distutils
    
    Modified Files:
    	__init__.py 
    Log Message:
    Bump version to 0.9.1.
    
    Index: __init__.py
    ===================================================================
    RCS file: /cvsroot/python/distutils/distutils/__init__.py,v
    retrieving revision 1.9
    retrieving revision 1.10
    diff -C2 -r1.9 -r1.10
    *** __init__.py	2000/07/27 02:17:40	1.9
    --- __init__.py	2000/08/15 13:14:27	1.10
    ***************
    *** 11,13 ****
      __revision__ = "$Id$"
      
    ! __version__ = "0.9.1pre"
    --- 11,13 ----
      __revision__ = "$Id$"
      
    ! __version__ = "0.9.1"
    
    
    
    From python-dev@python.org  Tue Aug 15 14:42:49 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 06:42:49 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,NONE,1.1
    Message-ID: <200008151342.GAA24084@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv24004
    
    Added Files:
    	pep-0221.txt 
    Log Message:
    
    Add PEP 221: "Import As", as posted on python-dev.
    
    
    
    ***** Error reading new file(2, 'No such file or directory')
    
    
    From python-dev@python.org  Tue Aug 15 15:29:24 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 07:29:24 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.21,1.22
    Message-ID: <200008151429.HAA06951@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv6930
    
    Modified Files:
    	pep-0000.txt 
    Log Message:
    PEP 221, Import As, assigned Thomas Wouters
    
    
    Index: pep-0000.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
    retrieving revision 1.21
    retrieving revision 1.22
    diff -C2 -r1.21 -r1.22
    *** pep-0000.txt	2000/08/14 14:46:56	1.21
    --- pep-0000.txt	2000/08/15 14:29:21	1.22
    ***************
    *** 46,49 ****
    --- 46,50 ----
       T   219  pep-0219.txt  Stackless Python                      gmcm
       I   220  pep-0220.txt  Coroutines, Generators, Continuations gmcm
    +  S   221  pep-0221.txt  Import As                             twouters
      
      
    
    
    
    From python-dev@python.org  Tue Aug 15 16:49:06 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:49:06 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.105,2.106
    Message-ID: <200008151549.IAA25722@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25706/Python
    
    Modified Files:
    	pythonrun.c 
    Log Message:
    
    When raising a SyntaxError, make a best-effort attempt to set the
    filename and lineno attributes, but do not mask the SyntaxError if we
    fail.
    
    This is part of what is needed to close SoruceForge bug #110628  
    (Jitterbug PR#278).
    
    
    Index: pythonrun.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v
    retrieving revision 2.105
    retrieving revision 2.106
    diff -C2 -r2.105 -r2.106
    *** pythonrun.c	2000/07/22 18:47:25	2.105
    --- pythonrun.c	2000/08/15 15:49:03	2.106
    ***************
    *** 21,24 ****
    --- 21,25 ----
      #include "eval.h"
      #include "marshal.h"
    + #include "osdefs.h"			/* SEP */
      
      #ifdef HAVE_UNISTD_H
    ***************
    *** 1004,1010 ****
      	}
      	w = Py_BuildValue("(sO)", msg, v);
    - 	Py_XDECREF(v);
      	PyErr_SetObject(errtype, w);
      	Py_XDECREF(w);
      }
      
    --- 1005,1028 ----
      	}
      	w = Py_BuildValue("(sO)", msg, v);
      	PyErr_SetObject(errtype, w);
      	Py_XDECREF(w);
    + 
    + 	if (v != NULL) {
    + 		PyObject *exc, *tb;
    + 
    + 		PyErr_Fetch(&errtype, &exc, &tb);
    + 		PyErr_NormalizeException(&errtype, &exc, &tb);
    + 		if (PyObject_SetAttrString(exc, "filename",
    + 					   PyTuple_GET_ITEM(v, 0)))
    + 			PyErr_Clear();
    + 		if (PyObject_SetAttrString(exc, "lineno",
    + 					   PyTuple_GET_ITEM(v, 1)))
    + 			PyErr_Clear();
    + 		if (PyObject_SetAttrString(exc, "offset",
    + 					   PyTuple_GET_ITEM(v, 2)))
    + 			PyErr_Clear();
    + 		Py_DECREF(v);
    + 		PyErr_Restore(errtype, exc, tb);
    + 	}
      }
      
    
    
    
    From python-dev@python.org  Tue Aug 15 16:49:46 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:49:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.123,2.124
    Message-ID: <200008151549.IAA25768@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25760/Python
    
    Modified Files:
    	compile.c 
    Log Message:
    
    When raising a SyntaxError, make a best-effort attempt to set the
    filename and lineno attributes, but do not mask the SyntaxError if we
    fail.
    
    This is part of what is needed to close SoruceForge bug #110628  
    (Jitterbug PR#278).
    
    Wrap a long line to fit in under 80 columns.
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.123
    retrieving revision 2.124
    diff -C2 -r2.123 -r2.124
    *** compile.c	2000/08/13 17:05:17	2.123
    --- compile.c	2000/08/15 15:49:44	2.124
    ***************
    *** 32,35 ****
    --- 32,36 ----
      #include "opcode.h"
      #include "structmember.h"
    + #include "osdefs.h"			/* SEP */
      
      #include 
    ***************
    *** 305,310 ****
      {
      	size_t n = strlen(msg);
    ! 	PyObject *v;
    ! 	char buffer[30];
      	char *s;
      	c->c_errors++;
    --- 306,310 ----
      {
      	size_t n = strlen(msg);
    ! 	PyObject *v, *tb, *tmp;
      	char *s;
      	c->c_errors++;
    ***************
    *** 314,326 ****
      		return;
      	}
    ! 	sprintf(buffer, " (line %d)", c->c_lineno);
    ! 	v = PyString_FromStringAndSize((char *)NULL, n + strlen(buffer));
      	if (v == NULL)
      		return; /* MemoryError, too bad */
    - 	s = PyString_AS_STRING((PyStringObject *)v);
    - 	strcpy(s, msg);
    - 	strcat(s, buffer);
      	PyErr_SetObject(exc, v);
      	Py_DECREF(v);
      }
      
    --- 314,345 ----
      		return;
      	}
    ! 	v = PyString_FromString(msg);
      	if (v == NULL)
      		return; /* MemoryError, too bad */
      	PyErr_SetObject(exc, v);
      	Py_DECREF(v);
    + 
    + 	/* add attributes for the line number and filename for the error */
    + 	PyErr_Fetch(&exc, &v, &tb);
    + 	PyErr_NormalizeException(&exc, &v, &tb);
    + 	tmp = PyInt_FromLong(c->c_lineno);
    + 	if (tmp == NULL)
    + 		PyErr_Clear();
    + 	else {
    + 		if (PyObject_SetAttrString(v, "lineno", tmp))
    + 			PyErr_Clear();
    + 		Py_DECREF(tmp);
    + 	}
    + 	if (c->c_filename != NULL) {
    + 		tmp = PyString_FromString(c->c_filename);
    + 		if (tmp == NULL)
    + 			PyErr_Clear();
    + 		else {
    + 			if (PyObject_SetAttrString(v, "filename", tmp))
    + 				PyErr_Clear();
    + 			Py_DECREF(tmp);
    + 		}
    + 	}
    + 	PyErr_Restore(exc, v, tb);
      }
      
    ***************
    *** 1179,1183 ****
      		if (*pkeywords != NULL) {
      			com_error(c, PyExc_SyntaxError,
    ! 				   "non-keyword arg after keyword arg");
      		}
      		else {
    --- 1198,1202 ----
      		if (*pkeywords != NULL) {
      			com_error(c, PyExc_SyntaxError,
    ! 				  "non-keyword arg after keyword arg");
      		}
      		else {
    ***************
    *** 2998,3002 ****
      		}
      		if (PyDict_GetItem(c->c_locals, nameval)) {
    ! 			com_error(c, PyExc_SyntaxError,"duplicate argument in function definition");
      		}
      		com_newlocal_o(c, nameval);
    --- 3017,3022 ----
      		}
      		if (PyDict_GetItem(c->c_locals, nameval)) {
    ! 			com_error(c, PyExc_SyntaxError,
    ! 				  "duplicate argument in function definition");
      		}
      		com_newlocal_o(c, nameval);
    
    
    
    From python-dev@python.org  Tue Aug 15 16:46:20 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:46:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.12,1.13
    Message-ID: <200008151546.IAA25439@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25426/Python
    
    Modified Files:
    	exceptions.c 
    Log Message:
    
    SyntaxError__str__():  Do more formatting of the exception here, rather
    	than depending on the site that raises the exception.  If the
    	filename and lineno attributes are set on the exception object,
    	use them to augment the message displayed.
    
    This is part of what is needed to close SoruceForge bug #110628
    (Jitterbug PR#278).
    
    
    Index: exceptions.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
    retrieving revision 1.12
    retrieving revision 1.13
    diff -C2 -r1.12 -r1.13
    *** exceptions.c	2000/08/15 00:37:32	1.12
    --- exceptions.c	2000/08/15 15:46:16	1.13
    ***************
    *** 245,249 ****
          PyObject *out;
      
    !     if (!PyArg_ParseTuple(args, "O", &self))
              return NULL;
      
    --- 245,249 ----
          PyObject *out;
      
    !     if (!PyArg_ParseTuple(args, "O:__str__", &self))
              return NULL;
      
    ***************
    *** 283,287 ****
          PyObject *index;
      
    !     if (!PyArg_ParseTuple(args, "OO", &self, &index))
              return NULL;
      
    --- 283,287 ----
          PyObject *index;
      
    !     if (!PyArg_ParseTuple(args, "OO:__getitem__", &self, &index))
              return NULL;
      
    ***************
    *** 525,529 ****
          PyObject *rtnval = NULL;
      
    !     if (!PyArg_ParseTuple(args, "O", &self))
      	return NULL;
          
    --- 525,529 ----
          PyObject *rtnval = NULL;
      
    !     if (!PyArg_ParseTuple(args, "O:__str__", &self))
      	return NULL;
          
    ***************
    *** 735,748 ****
          PyObject *msg;
          PyObject *str;
      
    !     if (!PyArg_ParseTuple(args, "O", &self))
      	return NULL;
      
          if (!(msg = PyObject_GetAttrString(self, "msg")))
      	return NULL;
    !     
          str = PyObject_Str(msg);
          Py_DECREF(msg);
    !     return str;
      }
      
    --- 735,797 ----
          PyObject *msg;
          PyObject *str;
    +     PyObject *filename, *lineno, *result;
      
    !     if (!PyArg_ParseTuple(args, "O:__str__", &self))
      	return NULL;
      
          if (!(msg = PyObject_GetAttrString(self, "msg")))
      	return NULL;
    ! 
          str = PyObject_Str(msg);
          Py_DECREF(msg);
    !     result = str;
    ! 
    !     /* XXX -- do all the additional formatting with filename and
    !        lineno here */
    ! 
    !     if (PyString_Check(str)) {
    ! 	int have_filename = 0;
    ! 	int have_lineno = 0;
    ! 	char *buffer = NULL;
    ! 
    ! 	if (filename = PyObject_GetAttrString(self, "filename"))
    ! 	    have_filename = PyString_Check(filename);
    ! 	else
    ! 	    PyErr_Clear();
    ! 	if (lineno = PyObject_GetAttrString(self, "lineno"))
    ! 	    have_lineno = PyInt_Check(lineno);
    ! 	else
    ! 	    PyErr_Clear();
    ! 
    ! 	if (have_filename || have_lineno) {
    ! 	    int bufsize = (PyString_GET_SIZE(str) + 64 +
    ! 			   PyString_GET_SIZE(filename));
    ! 
    ! 	    buffer = PyMem_Malloc(bufsize);
    ! 	    if (buffer != NULL) {
    ! 		if (have_filename && have_lineno)
    ! 		    sprintf(buffer, "%s (%s, line %d)",
    ! 			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename),
    ! 			    PyInt_AsLong(lineno));
    ! 		else if (have_filename)
    ! 		    sprintf(buffer, "%s (%s)",
    ! 			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename));
    ! 		else if (have_lineno)
    ! 		    sprintf(buffer, "%s (line %d)",
    ! 			    PyString_AS_STRING(str),
    ! 			    PyInt_AsLong(lineno));
    ! 		result = PyString_FromString(buffer);
    ! 		if (result == NULL)
    ! 		    result = str;
    ! 		else
    ! 		    Py_DECREF(str);
    ! 	    }
    ! 	}
    ! 	Py_XDECREF(filename);
    ! 	Py_XDECREF(lineno);
    !     }
    !     return result;
      }
      
    
    
    
    From python-dev@python.org  Tue Aug 15 16:51:20 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 08:51:20 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_longexp,1.1,1.2
    Message-ID: <200008151551.IAA25886@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test/output
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25879/Lib/test/output
    
    Modified Files:
    	test_longexp 
    Log Message:
    
    Update test output to reflect change in SyntaxError formatting.
    
    This closes SourceForge bug #110628 (Jitterbug PR#278).
    
    
    Index: test_longexp
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_longexp,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** test_longexp	2000/06/20 19:13:27	1.1
    --- test_longexp	2000/08/15 15:51:18	1.2
    ***************
    *** 1,2 ****
      test_longexp
    ! Caught SyntaxError for long expression: expression too long
    --- 1,2 ----
      test_longexp
    ! Caught SyntaxError for long expression: expression too long (line 1)
    
    
    
    From python-dev@python.org  Tue Aug 15 17:13:40 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 09:13:40 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.124,2.125 pythonrun.c,2.106,2.107
    Message-ID: <200008151613.JAA03346@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3338
    
    Modified Files:
    	compile.c pythonrun.c 
    Log Message:
    
    Remove the osdefs.h #include; it was not needed in the final version of
    my last set of changes.
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.124
    retrieving revision 2.125
    diff -C2 -r2.124 -r2.125
    *** compile.c	2000/08/15 15:49:44	2.124
    --- compile.c	2000/08/15 16:13:37	2.125
    ***************
    *** 32,36 ****
      #include "opcode.h"
      #include "structmember.h"
    - #include "osdefs.h"			/* SEP */
      
      #include 
    --- 32,35 ----
    
    Index: pythonrun.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v
    retrieving revision 2.106
    retrieving revision 2.107
    diff -C2 -r2.106 -r2.107
    *** pythonrun.c	2000/08/15 15:49:03	2.106
    --- pythonrun.c	2000/08/15 16:13:37	2.107
    ***************
    *** 21,25 ****
      #include "eval.h"
      #include "marshal.h"
    - #include "osdefs.h"			/* SEP */
      
      #ifdef HAVE_UNISTD_H
    --- 21,24 ----
    
    
    
    From python-dev@python.org  Tue Aug 15 17:20:38 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 09:20:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.13,1.14
    Message-ID: <200008151620.JAA03951@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3942
    
    Modified Files:
    	exceptions.c 
    Log Message:
    
    my_basename():  Removes the leading path components from a path name,
    	returning a pointer to the start of the file's "base" name;
    	similar to os.path.basename().
    
    SyntaxError__str__():  Use my_basename() to keep the length of the
    	file name included in the exception message short.
    
    
    Index: exceptions.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** exceptions.c	2000/08/15 15:46:16	1.13
    --- exceptions.c	2000/08/15 16:20:36	1.14
    ***************
    *** 20,23 ****
    --- 20,24 ----
      
      #include "Python.h"
    + #include "osdefs.h"
      
      /* Caution:  MS Visual C++ 6 errors if a single string literal exceeds
    ***************
    *** 730,733 ****
    --- 731,754 ----
      
      
    + /* This is called "my_basename" instead of just "basename" to avoid name
    +    conflicts with glibc; basename is already prototyped if _GNU_SOURCE is
    +    defined, and Python does define that. */
    + static char *
    + my_basename(char *name)
    + {
    + 	char *cp = name;
    + 	char *result = name;
    + 
    + 	if (name == NULL)
    + 		return "???";
    + 	while (*cp != '\0') {
    + 		if (*cp == SEP)
    + 			result = cp + 1;
    + 		++cp;
    + 	}
    + 	return result;
    + }
    + 
    + 
      static PyObject *
      SyntaxError__str__(PyObject *self, PyObject *args)
    ***************
    *** 773,782 ****
      		    sprintf(buffer, "%s (%s, line %d)",
      			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename),
      			    PyInt_AsLong(lineno));
      		else if (have_filename)
      		    sprintf(buffer, "%s (%s)",
      			    PyString_AS_STRING(str),
    ! 			    PyString_AS_STRING(filename));
      		else if (have_lineno)
      		    sprintf(buffer, "%s (line %d)",
    --- 794,803 ----
      		    sprintf(buffer, "%s (%s, line %d)",
      			    PyString_AS_STRING(str),
    ! 			    my_basename(PyString_AS_STRING(filename)),
      			    PyInt_AsLong(lineno));
      		else if (have_filename)
      		    sprintf(buffer, "%s (%s)",
      			    PyString_AS_STRING(str),
    ! 			    my_basename(PyString_AS_STRING(filename)));
      		else if (have_lineno)
      		    sprintf(buffer, "%s (line %d)",
    
    
    
    From python-dev@python.org  Tue Aug 15 17:41:29 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 09:41:29 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules binascii.c,2.25,2.26
    Message-ID: <200008151641.JAA05707@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5453/python/dist/src/Modules
    
    Modified Files:
    	binascii.c 
    Log Message:
    Fix new compiler warnings.  Unused var in compile.c.  Argsize mismatches
    in binascii.c (only on platforms with signed chars -- although Py_CHARMASK
    is documented as returning an int, it only does so on platforms with
    signed chars).
    
    
    Index: binascii.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/binascii.c,v
    retrieving revision 2.25
    retrieving revision 2.26
    diff -C2 -r2.25 -r2.26
    *** binascii.c	2000/08/15 06:59:58	2.25
    --- binascii.c	2000/08/15 16:41:26	2.26
    ***************
    *** 919,923 ****
      
      static int
    ! to_int(char c) 
      {
      	if (isdigit(c))
    --- 919,923 ----
      
      static int
    ! to_int(int c) 
      {
      	if (isdigit(c))
    
    
    
    From python-dev@python.org  Tue Aug 15 17:41:29 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 09:41:29 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.125,2.126
    Message-ID: <200008151641.JAA05711@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5453/python/dist/src/Python
    
    Modified Files:
    	compile.c 
    Log Message:
    Fix new compiler warnings.  Unused var in compile.c.  Argsize mismatches
    in binascii.c (only on platforms with signed chars -- although Py_CHARMASK
    is documented as returning an int, it only does so on platforms with
    signed chars).
    
    
    Index: compile.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
    retrieving revision 2.125
    retrieving revision 2.126
    diff -C2 -r2.125 -r2.126
    *** compile.c	2000/08/15 16:13:37	2.125
    --- compile.c	2000/08/15 16:41:26	2.126
    ***************
    *** 306,310 ****
      	size_t n = strlen(msg);
      	PyObject *v, *tb, *tmp;
    - 	char *s;
      	c->c_errors++;
      	if (c->c_lineno <= 1) {
    --- 306,309 ----
    
    
    
    From python-dev@python.org  Tue Aug 15 18:09:23 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 10:09:23 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.11,1.12
    Message-ID: <200008151709.KAA15766@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15756
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    added gettext module under proposed section
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** pep-0200.txt	2000/08/15 08:05:42	1.11
    --- pep-0200.txt	2000/08/15 17:09:19	1.12
    ***************
    *** 216,219 ****
    --- 216,222 ----
            loops. (Without adding a new keyword.)
      
    +     * Integrated gettext module - Barry Warsaw
    +       wrapper around standard internationalization libraries
    + 
      
      Declined
    
    
    
    From python-dev@python.org  Tue Aug 15 18:47:17 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 10:47:17 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libbinascii.tex,1.18,1.19
    Message-ID: <200008151747.KAA18665@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv18655/lib
    
    Modified Files:
    	libbinascii.tex 
    Log Message:
    
    Fix markup bug that prevented formatting.
    
    Adjusted some markup for consistency with the rest of the documentation
    and creation of the proper index entries.
    
    
    Index: libbinascii.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libbinascii.tex,v
    retrieving revision 1.18
    retrieving revision 1.19
    diff -C2 -r1.18 -r1.19
    *** libbinascii.tex	2000/08/15 06:08:00	1.18
    --- libbinascii.tex	2000/08/15 17:47:09	1.19
    ***************
    *** 86,102 ****
       
      \begin{funcdesc}{b2a_hex}{data}
      Return the hexadecimal representation of the binary \var{data}.  Every
      byte of \var{data} is converted into the corresponding 2-digit hex
    ! representation.  The resulting string is therefore, twice as long as
    ! the length of \var{data}.  This function is also available as
    ! \function{hexlify()}.
      \end{funcdesc}
      
      \begin{funcdesc}{a2b_hex}{hexstr}
      Return the binary data represented by the hexadecimal string
      \var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
      \var{hexstr} must contain an even number of hexadecimal digits (which
      can be upper or lower case), otherwise a \exception{TypeError} is
    ! raised.  This function is also available as \function{unhexlify()}.
      
      \begin{excdesc}{Error}
    --- 86,104 ----
       
      \begin{funcdesc}{b2a_hex}{data}
    + \funcline{hexlify}{data}
      Return the hexadecimal representation of the binary \var{data}.  Every
      byte of \var{data} is converted into the corresponding 2-digit hex
    ! representation.  The resulting string is therefore twice as long as
    ! the length of \var{data}.
      \end{funcdesc}
      
      \begin{funcdesc}{a2b_hex}{hexstr}
    + \funcline{unhexlify}{hexstr}
      Return the binary data represented by the hexadecimal string
      \var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
      \var{hexstr} must contain an even number of hexadecimal digits (which
      can be upper or lower case), otherwise a \exception{TypeError} is
    ! raised.
    ! \end{funcdesc}
      
      \begin{excdesc}{Error}
    ***************
    *** 112,119 ****
      
      \begin{seealso}
    !   \seemodule{base64}{support for base64 encoding used in MIME email messages}
      
    !   \seemodule{binhex}{support for the binhex format used on the Macintosh}
      
    !   \seemodule{uu}{support for UU encoding used on \UNIX{}}
      \end{seealso}
    --- 114,121 ----
      
      \begin{seealso}
    !   \seemodule{base64}{Support for base64 encoding used in MIME email messages.}
      
    !   \seemodule{binhex}{Support for the binhex format used on the Macintosh.}
      
    !   \seemodule{uu}{Support for UU encoding used on \UNIX.}
      \end{seealso}
    
    
    
    From python-dev@python.org  Tue Aug 15 18:54:51 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 10:54:51 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.32,1.33
    Message-ID: <200008151754.KAA19233@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/ref
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv19223/ref
    
    Modified Files:
    	ref5.tex 
    Log Message:
    
    Thomas Wouters :
    Update the grammar to reflect the most recent changes to list
    comprehensions.
    
    
    Index: ref5.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v
    retrieving revision 1.32
    retrieving revision 1.33
    diff -C2 -r1.32 -r1.33
    *** ref5.tex	2000/08/12 18:09:50	1.32
    --- ref5.tex	2000/08/15 17:54:49	1.33
    ***************
    *** 153,157 ****
      
      \begin{verbatim}
    ! list_display:   "[" [expression_list [list_iter]] "]"
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    --- 153,158 ----
      
      \begin{verbatim}
    ! list_display:   "[" [listmaker] "]"
    ! listmaker:   expression_list ( list_iter | ( "," expression)* [","] )
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    
    
    
    From python-dev@python.org  Tue Aug 15 19:44:24 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:44:24 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.33,1.34
    Message-ID: <200008151844.LAA30960@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/ref
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv30948/ref
    
    Modified Files:
    	ref5.tex 
    Log Message:
    
    Fix error made in applying Thomas's patch.
    
    
    Index: ref5.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v
    retrieving revision 1.33
    retrieving revision 1.34
    diff -C2 -r1.33 -r1.34
    *** ref5.tex	2000/08/15 17:54:49	1.33
    --- ref5.tex	2000/08/15 18:44:10	1.34
    ***************
    *** 154,158 ****
      \begin{verbatim}
      list_display:   "[" [listmaker] "]"
    ! listmaker:   expression_list ( list_iter | ( "," expression)* [","] )
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    --- 154,158 ----
      \begin{verbatim}
      list_display:   "[" [listmaker] "]"
    ! listmaker:   expression ( list_iter | ( "," expression)* [","] )
      list_iter:   list_for | list_if
      list_for:    "for" expression_list "in" testlist [list_iter]
    
    
    
    From python-dev@python.org  Tue Aug 15 19:52:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:52:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules posixmodule.c,2.165,2.166 pwdmodule.c,1.22,1.23 timemodule.c,2.100,2.101
    Message-ID: <200008151852.LAA31613@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31586/Modules
    
    Modified Files:
    	posixmodule.c pwdmodule.c timemodule.c 
    Log Message:
    
    Chris Herborth :
    Minor updates for BeOS R5.
    
    Use of OSError in test.test_fork1 changed to TestSkipped, with corresponding
    change in BeOS/README (by Fred).
    
    This closes SourceForge patch #100978.
    
    
    Index: posixmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v
    retrieving revision 2.165
    retrieving revision 2.166
    diff -C2 -r2.165 -r2.166
    *** posixmodule.c	2000/08/15 00:46:38	2.165
    --- posixmodule.c	2000/08/15 18:52:33	2.166
    ***************
    *** 3621,3629 ****
      Change or add an environment variable.";
      
    - #ifdef __BEOS__
    - /* We have putenv(), but not in the headers (as of PR2). - [cjh] */
    - int putenv( const char *str );
    - #endif
    - 
      /* Save putenv() parameters as values here, so we can collect them when they
       * get re-set with another call for the same key. */
    --- 3621,3624 ----
    
    Index: pwdmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v
    retrieving revision 1.22
    retrieving revision 1.23
    diff -C2 -r1.22 -r1.23
    *** pwdmodule.c	2000/08/03 02:34:44	1.22
    --- pwdmodule.c	2000/08/15 18:52:33	1.23
    ***************
    *** 30,40 ****
      mkpwent(struct passwd *p)
      {
    - #ifdef __BEOS__
    - 	/* For faking the GECOS field. - [cjh] */
    - 	char *be_user = NULL;
    - 
    - 	be_user = getenv( "USER" );
    - #endif
    - 
      	return Py_BuildValue(
      		"(ssllsss)",
    --- 30,33 ----
    ***************
    *** 50,59 ****
      		(long)p->pw_gid,
      #endif
    - #ifdef __BEOS__
    - /* BeOS doesn't have a GECOS field, oddly enough. - [cjh] */
    - 		be_user ? be_user : "baron",
    - #else
      		p->pw_gecos,
    - #endif
      		p->pw_dir,
      		p->pw_shell);
    --- 43,47 ----
    
    Index: timemodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/timemodule.c,v
    retrieving revision 2.100
    retrieving revision 2.101
    diff -C2 -r2.100 -r2.101
    *** timemodule.c	2000/08/03 02:34:44	2.100
    --- timemodule.c	2000/08/15 18:52:33	2.101
    ***************
    *** 71,81 ****
      
      #ifdef __BEOS__
      /* For bigtime_t, snooze(). - [cjh] */
      #include 
      #include 
    - #ifndef CLOCKS_PER_SEC
    - /* C'mon, fix the bloody headers... - [cjh] */
    - #define CLOCKS_PER_SEC 1000
    - #endif
      #endif
      
    --- 71,78 ----
      
      #ifdef __BEOS__
    + #include 
      /* For bigtime_t, snooze(). - [cjh] */
      #include 
      #include 
      #endif
      
    
    
    
    From python-dev@python.org  Tue Aug 15 19:52:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:52:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_fork1.py,1.5,1.6
    Message-ID: <200008151852.LAA31605@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/test
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31586/Lib/test
    
    Modified Files:
    	test_fork1.py 
    Log Message:
    
    Chris Herborth :
    Minor updates for BeOS R5.
    
    Use of OSError in test.test_fork1 changed to TestSkipped, with corresponding
    change in BeOS/README (by Fred).
    
    This closes SourceForge patch #100978.
    
    
    Index: test_fork1.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/test/test_fork1.py,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -C2 -r1.5 -r1.6
    *** test_fork1.py	2000/08/04 13:34:43	1.5
    --- test_fork1.py	2000/08/15 18:52:33	1.6
    ***************
    *** 7,14 ****
    --- 7,23 ----
      active threads survive in the child after a fork(); this is an error.
      
    + On BeOS, you CANNOT mix threads and fork(), the behaviour is undefined.
    + That's OK, fork() is a grotesque hack anyway. ;-) [cjh]
    + 
      """
      
      import os, sys, time, thread
      from test_support import TestSkipped
    + 
    + try:
    +     if os.uname()[0] == "BeOS":
    +         raise TestSkipped, "can't mix os.fork with threads on BeOS"
    + except AttributeError:
    +     pass
      
      try:
    
    
    
    From python-dev@python.org  Tue Aug 15 19:52:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Tue, 15 Aug 2000 11:52:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/BeOS README,1.8,1.9 linkmodule,1.3,1.4
    Message-ID: <200008151852.LAA31601@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/BeOS
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31586/BeOS
    
    Modified Files:
    	README linkmodule 
    Log Message:
    
    Chris Herborth :
    Minor updates for BeOS R5.
    
    Use of OSError in test.test_fork1 changed to TestSkipped, with corresponding
    change in BeOS/README (by Fred).
    
    This closes SourceForge patch #100978.
    
    
    Index: README
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/BeOS/README,v
    retrieving revision 1.8
    retrieving revision 1.9
    diff -C2 -r1.8 -r1.9
    *** README	1999/01/12 20:30:21	1.8
    --- README	2000/08/15 18:52:33	1.9
    ***************
    *** 1,3 ****
    ! Python 1.5.x (x > 1) for BeOS
      
      This directory contains several useful things to help you build your own
    --- 1,3 ----
    ! Python for BeOS R5
      
      This directory contains several useful things to help you build your own
    ***************
    *** 46,66 ****
      
         Make sure you use _socket instead of socket for the name of the
    !    socketmodule on BeOS.
      
         If you want the modules to be built as shared libraries, instead of as
         part of the Python shared library, be sure to uncomment the #*shared*
    !    line.
      
         I've tried the following modules:
      
    !    regex pcre posix signal readline array cmath math strop struct time
    !    operator _locale fcntl pwd grp select _socket errno crypt termios
    !    audioop imageop rgbimg md5 timing rotor syslog curses new gdbm soundex
    !    binascii parser cStringIO cPickle zlib
         
    !    Note that some of these (readline, curses, gdbm, and zlib) require extra
    !    libraries that aren't supplied with Python.  If you don't have the extra
    !    libs (you can probably get them from GeekGadgets), don't try to use
    !    these modules; they won't compile.
      
      5) Make:
    --- 46,68 ----
      
         Make sure you use _socket instead of socket for the name of the
    !    socketmodule on BeOS (at least, until we get the new BONE networking).
      
         If you want the modules to be built as shared libraries, instead of as
         part of the Python shared library, be sure to uncomment the #*shared*
    !    line.  I haven't done much testing with static linking, it's not as
    !    interesting.
      
         I've tried the following modules:
      
    !    array audioop binascii cmath _codecs cPickle crypt cStringIO _curses
    !    errno fcntl gdbm grp imageop _locale math md5 new operator parser
    !    pcre posix pwd pyexpat readline regex rgbimg rotor select sha signal
    !    _socket soundex _sre strop struct syslog termios time timing ucnhash
    !    unicodedata zlib
         
    !    Note that some of these require extra libraries that aren't supplied 
    !    with Python.  If you don't have the extra libs (you can probably get 
    !    them from GeekGadgets), don't try to use these modules; they won't 
    !    compile.
      
      5) Make:
    ***************
    *** 72,86 ****
         make test
      
         Expect the following errors:
      
    !    test_grp crashed -- exceptions.KeyError : getgrnam(): name not found
    !    test_pwd failed -- Writing: 'fakename', expected: 'caught e'
    !    test_socket crashed -- exceptions.AttributeError : SOCK_RAW
      
         These are all due to either partial support for certain things (like
         sockets), or valid differences between systems.
      
    !    NOTE: On R4/x86, the pause() function is broken; expect the signal
    !          module test to crash Python!
      
      7) Install:
    --- 74,116 ----
         make test
      
    +    test_popen2 will probably hang; it's deadlocked on a semaphore.  I should
    +    probably disable popen2 support... it uses fork(), and fork() doesn't mix
    +    with threads on BeOS.  In *THEORY* you could use it in a single-threaded
    +    program, but I haven't tried.
    +    
    +    If test_popen2 does hang, you can find the semaphore it's hung on via the
    +    "ps" command.  Look for python and you'll find something like this:
    +    
    + ./python -tt ../src/Lib/test/regrtest.py (team 26922) (uid 0) (gid 0)
    +   39472               python  sem  10    3785    1500 piperd(360526)
    + ./python -tt ../src/Lib/test/regrtest.py (team 26923) (uid 0) (gid 0)
    +   39477               python  sem  10      25       4 python lock (1)(360022)
    +                                                                       ^^^^^^
    +    That last number is the semaphore the fork()'d python is stuck on
    +    (see how it's helpfully called "python lock (1)"? :-).  You can unblock
    +    that semaphore to let the tests continue using the "release" command
    +    with that semaphore number.  Be _very_ careful with "release" though,
    +    releasing the wrong semaphore can be hazardous.
    + 
         Expect the following errors:
    + 
    +    test * skipped -- an optional feature could not be imported (you'll see
    +                      quite a few of these, based on what optional modules
    +                      you've included)
    + 
    +    test test_fork1 skipped -- can't mix os.fork with  threads on BeOS
    + 
    +    test test_re failed -- Writing: '=== Failed incorrectly', expected: 
    +                           "('abc', 'abc', 0, 'fou"
    + 
    +    test test_select crashed -- select.error : (-2147459072, 'Bad file 
    +                                descriptor')
      
    !    test test_socket crashed -- exceptions.AttributeError : SOCK_RAW
      
         These are all due to either partial support for certain things (like
         sockets), or valid differences between systems.
      
    !    That test_re failure is a little worrysome though.
      
      7) Install:
    ***************
    *** 90,93 ****
      8) Enjoy!
      
    ! - Chris Herborth (chrish@beoscentral.com)
    !   January 12, 1999
    --- 120,123 ----
      8) Enjoy!
      
    ! - Chris Herborth (chrish@pobox.com)
    !   July 21, 2000
    
    Index: linkmodule
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/BeOS/linkmodule,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** linkmodule	1999/03/24 17:46:40	1.3
    --- linkmodule	2000/08/15 18:52:33	1.4
    ***************
    *** 47,51 ****
      # libs are overkill for most of the standard modules, but it makes life
      # in this shell script easier.
    ! LIBS="-L.. -lpython1.5 -lbe -lnet -lroot"
      
      case $BE_HOST_CPU in
    --- 47,51 ----
      # libs are overkill for most of the standard modules, but it makes life
      # in this shell script easier.
    ! LIBS="-L.. -lpython$VERSION -lbe -lnet -lroot"
      
      case $BE_HOST_CPU in
    
    
    
    From python-dev@python.org  Tue Aug 15 20:30:38 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 12:30:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsocket.tex,1.46,1.47
    Message-ID: <200008151930.MAA10234@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9148/Doc/lib
    
    Modified Files:
    	libsocket.tex 
    Log Message:
    
    Apply SF patch #101151, by Peter S-K, which fixes smtplib's passing of the
    'helo' and 'ehlo' message, and exports the 'make_fqdn' function. This
    function should be moved to socket.py, if that module ever gets a Python
    wrapper.
    
    
    
    Index: libsocket.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsocket.tex,v
    retrieving revision 1.46
    retrieving revision 1.47
    diff -C2 -r1.46 -r1.47
    *** libsocket.tex	2000/07/06 18:37:08	1.46
    --- libsocket.tex	2000/08/15 19:30:35	1.47
    ***************
    *** 137,140 ****
    --- 137,142 ----
      To find the fully qualified domain name, check \var{hostname} and the
      items of \var{aliaslist} for an entry containing at least one period.
    + An implementation of this algorithm can be found in the module
    + \module{smtplib} in form of the \function{make_fqdn()} function.
      \end{funcdesc}
      
    
    
    
    From python-dev@python.org  Tue Aug 15 20:30:38 2000
    From: python-dev@python.org (Thomas Wouters)
    Date: Tue, 15 Aug 2000 12:30:38 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib smtplib.py,1.26,1.27
    Message-ID: <200008151930.MAA10238@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv9148/Lib
    
    Modified Files:
    	smtplib.py 
    Log Message:
    
    Apply SF patch #101151, by Peter S-K, which fixes smtplib's passing of the
    'helo' and 'ehlo' message, and exports the 'make_fqdn' function. This
    function should be moved to socket.py, if that module ever gets a Python
    wrapper.
    
    
    
    Index: smtplib.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/smtplib.py,v
    retrieving revision 1.26
    retrieving revision 1.27
    diff -C2 -r1.26 -r1.27
    *** smtplib.py	2000/08/10 14:02:23	1.26
    --- smtplib.py	2000/08/15 19:30:36	1.27
    ***************
    *** 134,152 ****
              re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
      
    ! def _get_fqdn_hostname(name):
          name = string.strip(name)
          if len(name) == 0:
              name = socket.gethostname()
    !         try:
    !             hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
    !         except socket.error:
    !             pass
              else:
    !             aliases.insert(0, hostname)
    !             for name in aliases:
    !                 if '.' in name:
    !                     break
    !             else:
    !                 name = hostname
          return name
      
    --- 134,160 ----
              re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
      
    ! def make_fqdn(name = ''):
    !     """Get fully qualified domain name from name.
    ! 
    !     An empty argument is interpreted as meaning the local host.
    ! 
    !     First the hostname returned by socket.gethostbyaddr()
    !     is checked, then possibly existing aliases. In case
    !     no FQDN is available, hostname is returned.
    !     """
          name = string.strip(name)
          if len(name) == 0:
              name = socket.gethostname()
    !     try:
    !         hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
    !     except socket.error:
    !         pass
    !     else:
    !         aliases.insert(0, hostname)
    !         for name in aliases:
    !             if '.' in name:
    !                 break
              else:
    !             name = hostname
          return name
      
    ***************
    *** 307,311 ****
              host.
              """
    !         self.putcmd("helo", _get_fqdn_hostname(name))
              (code,msg)=self.getreply()
              self.helo_resp=msg
    --- 315,322 ----
              host.
              """
    !         if name:
    !             self.putcmd("helo", name)
    !         else:
    !             self.putcmd("helo", make_fqdn())
              (code,msg)=self.getreply()
              self.helo_resp=msg
    ***************
    *** 317,321 ****
              host.
              """
    !         self.putcmd("ehlo", _get_fqdn_hostname(name))
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    --- 328,335 ----
              host.
              """
    !         if name:
    !             self.putcmd("ehlo", name)
    !         else:
    !             self.putcmd("ehlo", make_fqdn())
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    
    
    
    From python-dev@python.org  Tue Aug 15 23:34:02 2000
    From: python-dev@python.org (Mark Hammond)
    Date: Tue, 15 Aug 2000 15:34:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.44,1.45
    Message-ID: <200008152234.PAA01319@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/PC
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv1246
    
    Modified Files:
    	config.h 
    Log Message:
    From Rene Liebscher:
    This patch makes it possible to use gnu-win32 and lcc-win32 
    (http://www.cs.virginia.edu/~lcc-win32/) compilers to build 
    extension modules. It adds compiler specific sections to
    PC/config.h .
    It also extends the Borland compiler section. This has then two parts,
    one for Win32 and the other one for the rest. The Win32 part 
    should be almost complete.
    
    *** This patch is not intended to make it possible to compile
         Python with these compilers, it is intended to be able to
         use these compilers to build extension modules. ****
    
    
    Index: config.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/PC/config.h,v
    retrieving revision 1.44
    retrieving revision 1.45
    diff -C2 -r1.44 -r1.45
    *** config.h	2000/08/07 20:16:28	1.44
    --- config.h	2000/08/15 22:33:59	1.45
    ***************
    *** 27,37 ****
      */
      
    - /* Suggested by Rene Liebscher  to avoid a GCC 2.91.*
    -    bug that requires structure imports.  More recent versions of the
    -    compiler don't exhibit this bug.
    - */
    - #if (__GNUC__==2) && (__GNUC_MINOR__<=91)
    - #warning "Please use an up-to-date version of gcc! (>2.91 recommended)"
    - #endif
      
      /*
    --- 27,30 ----
    ***************
    *** 231,242 ****
      #ifdef __BORLANDC__
      #define COMPILER "[Borland]"
    - #define PYTHONPATH ".;.\\lib;.\\lib\\plat-win;.\\lib\\dos-8x3"
    - #define IMPORT_8x3_NAMES
      #define HAVE_CLOCK
      #define HAVE_STRFTIME
      #ifdef USE_DL_IMPORT
      #define DL_IMPORT(RTYPE)  RTYPE __import
      #endif
      #endif /* BORLANDC */
      
      /* End of compilers - finish up */
    --- 224,379 ----
      #ifdef __BORLANDC__
      #define COMPILER "[Borland]"
      #define HAVE_CLOCK
      #define HAVE_STRFTIME
    + 
    + #ifdef _WIN32
    + 
    + /* tested with BCC 5.5 (__BORLANDC__ >= 0x0550)
    +  */
    + #define NT	/* NT is obsolete - please use MS_WIN32 instead */
    + #define MS_WIN32
    + #define MS_WINDOWS
    + 
    + /* For NT the Python core is in a DLL by default.  Test the
    + standard macro MS_COREDLL to find out.  If you have an exception
    + you must define MS_NO_COREDLL (do not test this macro) */
    + #ifndef MS_NO_COREDLL
    + #define MS_COREDLL	/* Python core is in a DLL */
    + #ifndef USE_DL_EXPORT
    + #define USE_DL_IMPORT
    + #endif /* !USE_DL_EXPORT */
    + #endif /* !MS_NO_COREDLL */
    + 
    + #define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
    + typedef int pid_t;
    + #define WORD_BIT 32
    + #include 
    + #define HAVE_STRERROR
    + #define NT_THREADS
    + #define WITH_THREAD
    + #ifndef NETSCAPE_PI
    + #define USE_SOCKET
    + #endif
    + /* BCC55 seems to understand __declspec(dllimport), it is used in its
    +    own header files (winnt.h, ...) */
    + #ifdef USE_DL_IMPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
    + #endif
    + #ifdef USE_DL_EXPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
    + #define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
    + #endif
    + 
    + #define HAVE_LONG_LONG 1
    + #define LONG_LONG __int64
    + 
    + #else /* !_WIN32 */
    + /* XXX These defines are likely incomplete, but should be easy to fix. */
    + 
    + #define PYTHONPATH ".;.\\lib;.\\lib\\plat-win;.\\lib\\dos-8x3"
    + #define IMPORT_8x3_NAMES
      #ifdef USE_DL_IMPORT
      #define DL_IMPORT(RTYPE)  RTYPE __import
      #endif
    + 
    + #endif /* !_WIN32 */
    + 
      #endif /* BORLANDC */
    + 
    + /* egcs/gnu-win32 defines __GNUC__ and _WIN32 */
    + #if defined(__GNUC__) && defined(_WIN32)
    + /* XXX These defines are likely incomplete, but should be easy to fix. 
    +    They should be complete enough to build extension modules. */
    + /* Suggested by Rene Liebscher  to avoid a GCC 2.91.*
    +    bug that requires structure imports.  More recent versions of the
    +    compiler don't exhibit this bug.
    + */
    + #if (__GNUC__==2) && (__GNUC_MINOR__<=91)
    + #warning "Please use an up-to-date version of gcc! (>2.91 recommended)"
    + #endif
    + 
    + #define NT	/* NT is obsolete - please use MS_WIN32 instead */
    + #define MS_WIN32
    + #define MS_WINDOWS
    + 
    + /* For NT the Python core is in a DLL by default.  Test the
    + standard macro MS_COREDLL to find out.  If you have an exception
    + you must define MS_NO_COREDLL (do not test this macro) */
    + #ifndef MS_NO_COREDLL
    + #define MS_COREDLL	/* Python core is in a DLL */
    + #ifndef USE_DL_EXPORT
    + #define USE_DL_IMPORT
    + #endif /* !USE_DL_EXPORT */
    + #endif /* !MS_NO_COREDLL */
    + 
    + #define COMPILER "[gcc]"
    + #define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
    + #define WORD_BIT 32
    + #define hypot _hypot
    + #include 
    + #define HAVE_CLOCK
    + #define HAVE_STRFTIME
    + #define HAVE_STRERROR
    + #define NT_THREADS
    + #define WITH_THREAD
    + #ifndef NETSCAPE_PI
    + #define USE_SOCKET
    + #endif
    + #ifdef USE_DL_IMPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
    + #endif
    + #ifdef USE_DL_EXPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
    + #define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
    + #endif
    + 
    + #define HAVE_LONG_LONG 1
    + #define LONG_LONG long long 
    + #endif /* GNUC */
    + 
    + /* lcc-win32 defines __LCC__ */
    + 
    + #if defined(__LCC__)
    + /* XXX These defines are likely incomplete, but should be easy to fix. 
    +    They should be complete enough to build extension modules. */
    + 
    + #define NT	/* NT is obsolete - please use MS_WIN32 instead */
    + #define MS_WIN32
    + #define MS_WINDOWS
    + 
    + /* For NT the Python core is in a DLL by default.  Test the
    + standard macro MS_COREDLL to find out.  If you have an exception
    + you must define MS_NO_COREDLL (do not test this macro) */
    + #ifndef MS_NO_COREDLL
    + #define MS_COREDLL	/* Python core is in a DLL */
    + #ifndef USE_DL_EXPORT
    + #define USE_DL_IMPORT
    + #endif /* !USE_DL_EXPORT */
    + #endif /* !MS_NO_COREDLL */
    + 
    + #define COMPILER "[lcc-win32]"
    + #define PYTHONPATH ".\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk"
    + typedef int pid_t;
    + #define WORD_BIT 32
    + #include 
    + #define HAVE_CLOCK
    + #define HAVE_STRFTIME
    + #define HAVE_STRERROR
    + #define NT_THREADS
    + #define WITH_THREAD
    + #ifndef NETSCAPE_PI
    + #define USE_SOCKET
    + #endif
    + #ifdef USE_DL_IMPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
    + #endif
    + #ifdef USE_DL_EXPORT
    + #define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
    + #define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
    + #endif
    + 
    + #define HAVE_LONG_LONG 1
    + #define LONG_LONG __int64
    + #endif /* LCC */
      
      /* End of compilers - finish up */
    
    
    
    From python-dev@python.org  Tue Aug 15 23:45:09 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Tue, 15 Aug 2000 15:45:09 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.1,1.2
    Message-ID: <200008152245.PAA12822@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv12763
    
    Modified Files:
    	pep-0214.txt 
    Log Message:
    Updated discussion, including two open issues.  I've also changed the
    Python-Version to 2.1 since this probably needs more discussion,
    unless the BDFL pronounces favorably on it.
    
    
    Index: pep-0214.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** pep-0214.txt	2000/07/24 17:38:35	1.1
    --- pep-0214.txt	2000/08/15 22:45:06	1.2
    ***************
    *** 2,11 ****
      Title: Extended Print Statement
      Version: $Revision$
    ! Owner: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.0
      Status: Draft
      
      
    - 
      Introduction
      
    --- 2,12 ----
      Title: Extended Print Statement
      Version: $Revision$
    ! Author: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.1
      Status: Draft
    + Created: 24-Jul-2000
    + Post-History:
      
      
      Introduction
      
    ***************
    *** 21,25 ****
      
      
    - 
      Justification
      
    --- 22,25 ----
    ***************
    *** 53,58 ****
          to stdout, this output too would get redirected to the logfile.
      
      
    ! 
      Proposal
      
    --- 53,60 ----
          to stdout, this output too would get redirected to the logfile.
      
    +     This approach is also very inconvenient for interleaving prints to
    +     various output streams.
      
    ! 
      Proposal
      
    ***************
    *** 74,100 ****
              print >> sys.stdout, 'hello world'
      
      
    - 
      Reference Implementation
      
          A reference implementation, in the form of a patch against the
          Python 2.0 source tree, is available on SourceForge's patch
    !     manager[2].  The approach this patch takes is to introduce two new
    !     opcodes, one which temporarily rebinds sys.stdout to the specified
    !     file object, performs the print as normal, and then bind
    !     sys.stdout back to sys.__stdout__ (which is the real physical
    !     standard out and should not be changed).  In some ways this is
    !     equivalent to the try/finally idiom above, except that the
    !     rebinding of sys.stdout is in effect only for the duration of the
    !     print statement itself.
    ! 
    !     An alternative approach is possible, where only one new opcode is
    !     added.  This opcode would be exactly like the existing PRINT_ITEM
    !     opcode except that it would find the target file object at the top
    !     of the stack, and use this file instead of digging it out of
    !     sys.stdout.
      
      
    - 
      Alternative Approaches
      
    --- 76,116 ----
              print >> sys.stdout, 'hello world'
      
    + 
    + Open Issues
    + 
    +     What should the following do?
    + 
    +         print >> file
    +         print >> file,
    + 
    +     In the current implementation (see below), the first is a
    +     SyntaxError and the second prints nothing to file.  This is likely
    +     counterintuitive; the first should print just a newline, making
    +     these equivalent:
    + 
    +         print >> sys.stdout
    +         print
    + 
    +     The second should print just a space and no newline to file.  It
    +     doesn't have a non-extended print equivalent, since this is
    +     illegal:
    + 
    +         print ,
    + 
    +     The closes equivalent is:
    + 
    +         print '',
    +     
      
      Reference Implementation
      
          A reference implementation, in the form of a patch against the
          Python 2.0 source tree, is available on SourceForge's patch
    !     manager[2].  This approach adds two new opcodes, PRINT_ITEM_TO and
    !     PRINT_NEWLINE_TO, which simply pop the file like object off the
    !     top of the stack and use it instead of sys.stdout as the output
    !     stream.
      
      
      Alternative Approaches
      
    ***************
    *** 140,144 ****
      
      
    - 
      References
      
    --- 156,159 ----
    
    
    
    From python-dev@python.org  Wed Aug 16 04:17:21 2000
    From: python-dev@python.org (Tim Peters)
    Date: Tue, 15 Aug 2000 20:17:21 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.12,1.13
    Message-ID: <200008160317.UAA27313@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27268/python/nondist/peps
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Record new test_longexp bug.  Move augmented assignments to "in progress".
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.12
    retrieving revision 1.13
    diff -C2 -r1.12 -r1.13
    *** pep-0200.txt	2000/08/15 17:09:19	1.12
    --- pep-0200.txt	2000/08/16 03:17:18	1.13
    ***************
    *** 91,94 ****
    --- 91,103 ----
          test case         platform   R B    date reported
          ---------         --------   - -    -------------
    +     test_longexp      Win98+?    ? ?    15-Aug-2000
    +         [fails in release build,
    +          passes in release build under verbose mode but doesn't
    +              look like it should pass,
    +          passes in debug build,
    +          passes in debug build under verbose mode and looks like
    +              it should pass
    +         ]
    + 
          test_winreg2      Win32      X X    26-Jul-2000
              [still fails 15-Aug-2000 for me, on Win98 - tim
    ***************
    *** 174,177 ****
    --- 183,189 ----
            [note: it's not confusing to Guido  - tim]
      
    +     * Augmented assignment - Thomas Wouters
    +       Add += and family, plus Python and C hooks, and API functions.
    + 
      
      Open: proposed but not accepted or declined
    ***************
    *** 197,203 ****
            - http://www.python.org/pipermail/python-dev/1999-August/002252.html
      
    -     * Augmented assignment - Thomas Wouters
    -       Add += and family, plus Python and C hooks, and API functions.
    - 
          * "import as" - Thomas Wouters
            Extend the 'import' and 'from ... import' mechanism to enable
    --- 209,212 ----
    ***************
    *** 211,215 ****
            for normal slices as well as for extended ones. First step: use
            getitem if there is no getslice.
    !       
          * 'indexing-for' - Thomas Wouters
            Special syntax to give Python code access to the loop-counter in 'for'
    --- 220,224 ----
            for normal slices as well as for extended ones. First step: use
            getitem if there is no getslice.
    ! 
          * 'indexing-for' - Thomas Wouters
            Special syntax to give Python code access to the loop-counter in 'for'
    
    
    
    From python-dev@python.org  Wed Aug 16 13:22:28 2000
    From: python-dev@python.org (A.M. Kuchling)
    Date: Wed, 16 Aug 2000 05:22:28 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Include myproto.h,2.10,NONE myselect.h,2.14,NONE mytime.h,2.8,NONE mymalloc.h,2.26,NONE mymath.h,2.14,NONE
    Message-ID: <200008161222.FAA32293@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Include
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31010
    
    Removed Files:
    	myproto.h myselect.h mytime.h mymalloc.h mymath.h 
    Log Message:
    Deleted now-unused include files
    
    
    
    
    
    
    
    
    
    From python-dev@python.org  Wed Aug 16 13:24:54 2000
    From: python-dev@python.org (A.M. Kuchling)
    Date: Wed, 16 Aug 2000 05:24:54 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.94,2.95
    Message-ID: <200008161224.FAA03310@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv2102
    
    Modified Files:
    	object.c 
    Log Message:
    Updated comment
    
    
    Index: object.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
    retrieving revision 2.94
    retrieving revision 2.95
    diff -C2 -r2.94 -r2.95
    *** object.c	2000/08/15 03:34:48	2.94
    --- object.c	2000/08/16 12:24:51	2.95
    ***************
    *** 1005,1009 ****
      
      
    ! /* Python's malloc wrappers (see mymalloc.h) */
      
      void *
    --- 1005,1009 ----
      
      
    ! /* Python's malloc wrappers (see pymem.h) */
      
      void *
    
    
    
    From python-dev@python.org  Wed Aug 16 13:27:26 2000
    From: python-dev@python.org (A.M. Kuchling)
    Date: Wed, 16 Aug 2000 05:27:26 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Include objimpl.h,2.25,2.26
    Message-ID: <200008161227.FAA06941@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Include
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5970
    
    Modified Files:
    	objimpl.h 
    Log Message:
    Updated comment
    
    
    Index: objimpl.h
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Include/objimpl.h,v
    retrieving revision 2.25
    retrieving revision 2.26
    diff -C2 -r2.25 -r2.26
    *** objimpl.h	2000/07/31 22:19:30	2.25
    --- objimpl.h	2000/08/16 12:27:23	2.26
    ***************
    *** 167,171 ****
      #define PyObject_Del(op) _PyObject_Del((PyObject *)(op))
      
    ! /* Macros trading binary compatibility for speed. See also mymalloc.h.
         Note that these macros expect non-NULL object pointers.*/
      #define PyObject_INIT(op, typeobj) \
    --- 167,171 ----
      #define PyObject_Del(op) _PyObject_Del((PyObject *)(op))
      
    ! /* Macros trading binary compatibility for speed. See also pymem.h.
         Note that these macros expect non-NULL object pointers.*/
      #define PyObject_INIT(op, typeobj) \
    
    
    
    From python-dev@python.org  Wed Aug 16 15:14:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:14:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-beos socket.py,1.1,NONE
    Message-ID: <200008161414.HAA25369@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/plat-beos
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25330/plat-beos
    
    Removed Files:
    	socket.py 
    Log Message:
    
    Revise the wrapper structure for the socket module:
    
    socket.py is used for all platforms, and it defines the additional
    classes and alternate socket() function for Windows and BeOS systems.
    
    The plat-*/socket.py files are no longer needed, since there is a
    shared socket.py.
    
    make_fqdn() is provided, but I decided to call it getfqdn() to be
    consistent with the other names in the socket module.  Since it is
    really a "get" operation and does not create a new name, this is
    the right name to give it.
    
    Move the docstring here from the _socket module.
    
    
    
    
    
    From python-dev@python.org  Wed Aug 16 15:14:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:14:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib socket.py,NONE,1.1
    Message-ID: <200008161414.HAA25359@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25330
    
    Added Files:
    	socket.py 
    Log Message:
    
    Revise the wrapper structure for the socket module:
    
    socket.py is used for all platforms, and it defines the additional
    classes and alternate socket() function for Windows and BeOS systems.
    
    The plat-*/socket.py files are no longer needed, since there is a
    shared socket.py.
    
    make_fqdn() is provided, but I decided to call it getfqdn() to be
    consistent with the other names in the socket module.  Since it is
    really a "get" operation and does not create a new name, this is
    the right name to give it.
    
    Move the docstring here from the _socket module.
    
    
    --- NEW FILE ---
    # Wrapper module for _socket, providing some additional facilities
    # implemented in Python.
    
    """\
    This module provides socket operations and some related functions.
    On Unix, it supports IP (Internet Protocol) and Unix domain sockets.
    On other systems, it only supports IP.
    
    Functions:
    
    socket() -- create a new socket object
    fromfd() -- create a socket object from an open file descriptor [*]
    gethostname() -- return the current hostname
    gethostbyname() -- map a hostname to its IP number
    gethostbyaddr() -- map an IP number or hostname to DNS info
    getservbyname() -- map a service name and a protocol name to a port number
    getprotobyname() -- mape a protocol name (e.g. 'tcp') to a number
    ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
    htons(), htonl() -- convert 16, 32 bit int from host to network byte order
    inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
    inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
    ssl() -- secure socket layer support (only available if configured)
    
     [*] not available on all platforms!
    
    Special objects:
    
    SocketType -- type object for socket objects
    error -- exception raised for I/O errors
    
    Integer constants:
    
    AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
    SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
    
    Many other constants may be defined; these may be used in calls to
    the setsockopt() and getsockopt() methods.
    """
    
    from _socket import *
    
    import os, sys
    
    if (sys.platform.lower().startswith("win")
        or os.uname()[0] == "BeOS"):
    
        # be sure this happens only once, even in the face of reload():
        try:
            _realsocketcall
        except NameError:
            _realsocketcall = socket
    
        def socket(family, type, proto=0):
            return _socketobject(_realsocketcall(family, type, proto))
    
    
    # WSA error codes
    if sys.platform.lower().startswith("win"):
        errorTab = {}
        errorTab[10004] = "The operation was interrupted."
        errorTab[10009] = "A bad file handle was passed."
        errorTab[10013] = "Permission denied."
        errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
        errorTab[10022] = "An invalid operation was attempted."
        errorTab[10035] = "The socket operation would block"
        errorTab[10036] = "A blocking operation is already in progress."
        errorTab[10048] = "The network address is in use."
        errorTab[10054] = "The connection has been reset."
        errorTab[10058] = "The network has been shut down."
        errorTab[10060] = "The operation timed out."
        errorTab[10061] = "Connection refused."
        errorTab[10063] = "The name is too long."
        errorTab[10064] = "The host is down."
        errorTab[10065] = "The host is unreachable."
    del os, sys
    
    
    def getfqdn(name=''):
        """Get fully qualified domain name from name.
    
        An empty argument is interpreted as meaning the local host.
    
        First the hostname returned by gethostbyaddr() is checked, then
        possibly existing aliases. In case no FQDN is available, hostname
        is returned.
        """
        name = name.strip()
        if len(name) == 0:
            name = gethostname()
        try:
            hostname, aliases, ipaddrs = gethostbyaddr(name)
        except error:
            pass
        else:
            aliases.insert(0, hostname)
            for name in aliases:
                if '.' in name:
                    break
            else:
                name = hostname
        return name
    
    
    #
    # These classes are used by the socket() defined on Windows and BeOS
    # platforms to provide a best-effort implementation of the cleanup
    # semantics needed when sockets can't be dup()ed.
    #
    # These are not actually used on other platforms.
    #
    
    class _socketobject:
    
        def __init__(self, sock):
            self._sock = sock
    
        def close(self):
            self._sock = 0
    
        def __del__(self):
            self.close()
    
        def accept(self):
            sock, addr = self._sock.accept()
            return _socketobject(sock), addr
    
        def dup(self):
            return _socketobject(self._sock)
    
        def makefile(self, mode='r', bufsize=-1):
            return _fileobject(self._sock, mode, bufsize)
    
        _s = "def %s(self, *args): return apply(self._sock.%s, args)\n\n"
        for _m in ('bind', 'connect', 'connect_ex', 'fileno', 'listen',
                   'getpeername', 'getsockname',
                   'getsockopt', 'setsockopt',
                   'recv', 'recvfrom', 'send', 'sendto',
                   'setblocking',
                   'shutdown'):
            exec _s % (_m, _m)
    
    
    class _fileobject:
    
        def __init__(self, sock, mode, bufsize):
            self._sock = sock
            self._mode = mode
            if bufsize < 0:
                bufsize = 512
            self._rbufsize = max(1, bufsize)
            self._wbufsize = bufsize
            self._wbuf = self._rbuf = ""
    
        def close(self):
            try:
                if self._sock:
                    self.flush()
            finally:
                self._sock = 0
    
        def __del__(self):
            self.close()
    
        def flush(self):
            if self._wbuf:
                self._sock.send(self._wbuf)
                self._wbuf = ""
    
        def fileno(self):
            return self._sock.fileno()
    
        def write(self, data):
            self._wbuf = self._wbuf + data
            if self._wbufsize == 1:
                if '\n' in data:
                    self.flush()
            else:
                if len(self._wbuf) >= self._wbufsize:
                    self.flush()
    
        def writelines(self, list):
            filter(self._sock.send, list)
            self.flush()
    
        def read(self, n=-1):
            if n >= 0:
                k = len(self._rbuf)
                if n <= k:
                    data = self._rbuf[:n]
                    self._rbuf = self._rbuf[n:]
                    return data
                n = n - k
                L = [self._rbuf]
                self._rbuf = ""
                while n > 0:
                    new = self._sock.recv(max(n, self._rbufsize))
                    if not new: break
                    k = len(new)
                    if k > n:
                        L.append(new[:n])
                        self._rbuf = new[n:]
                        break
                    L.append(new)
                    n = n - k
                return "".join(L)
            k = max(512, self._rbufsize)
            L = [self._rbuf]
            self._rbuf = ""
            while 1:
                new = self._sock.recv(k)
                if not new: break
                L.append(new)
                k = min(k*2, 1024**2)
            return "".join(L)
    
        def readline(self, limit=-1):
            data = ""
            i = self._rbuf.find('\n')
            while i < 0 and not (0 < limit <= len(self._rbuf)):
                new = self._sock.recv(self._rbufsize)
                if not new: break
                i = new.find('\n')
                if i >= 0: i = i + len(self._rbuf)
                self._rbuf = self._rbuf + new
            if i < 0: i = len(self._rbuf)
            else: i = i+1
            if 0 <= limit < len(self._rbuf): i = limit
            data, self._rbuf = self._rbuf[:i], self._rbuf[i:]
            return data
    
        def readlines(self):
            list = []
            while 1:
                line = self.readline()
                if not line: break
                list.append(line)
            return list
    
    
    
    From python-dev@python.org  Wed Aug 16 15:14:35 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:14:35 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-win socket.py,1.7,NONE
    Message-ID: <200008161414.HAA25368@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib/plat-win
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25330/plat-win
    
    Removed Files:
    	socket.py 
    Log Message:
    
    Revise the wrapper structure for the socket module:
    
    socket.py is used for all platforms, and it defines the additional
    classes and alternate socket() function for Windows and BeOS systems.
    
    The plat-*/socket.py files are no longer needed, since there is a
    shared socket.py.
    
    make_fqdn() is provided, but I decided to call it getfqdn() to be
    consistent with the other names in the socket module.  Since it is
    really a "get" operation and does not create a new name, this is
    the right name to give it.
    
    Move the docstring here from the _socket module.
    
    
    
    
    
    From python-dev@python.org  Wed Aug 16 15:21:44 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:21:44 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsocket.tex,1.47,1.48
    Message-ID: <200008161421.HAA27526@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27516/Doc/lib
    
    Modified Files:
    	libsocket.tex 
    Log Message:
    
    Document socket.getfqdn().
    
    
    Index: libsocket.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsocket.tex,v
    retrieving revision 1.47
    retrieving revision 1.48
    diff -C2 -r1.47 -r1.48
    *** libsocket.tex	2000/08/15 19:30:35	1.47
    --- libsocket.tex	2000/08/16 14:21:42	1.48
    ***************
    *** 102,105 ****
    --- 102,115 ----
      \end{datadesc}
      
    + \begin{funcdesc}{getfqdn}{\optional{name}}
    + Return a fully qualified domain name for \var{name}.
    + If \var{name} is omitted or empty, it is interpreted as the local
    + host.  To find the fully qualified name, the hostname returned by
    + \function{gethostbyaddr()} is checked, then aliases for the host, if
    + available.  The first name which includes a period is selected.  In
    + case no fully qualified domain name is available, the hostname is
    + returned.
    + \end{funcdesc}
    + 
      \begin{funcdesc}{gethostbyname}{hostname}
      Translate a host name to IP address format.  The IP address is
    ***************
    *** 135,142 ****
      and \var{ipaddrlist} is a list of IP addresses for the same interface
      on the same host (most likely containing only a single address).
    ! To find the fully qualified domain name, check \var{hostname} and the
    ! items of \var{aliaslist} for an entry containing at least one period.
    ! An implementation of this algorithm can be found in the module
    ! \module{smtplib} in form of the \function{make_fqdn()} function.
      \end{funcdesc}
      
    --- 145,150 ----
      and \var{ipaddrlist} is a list of IP addresses for the same interface
      on the same host (most likely containing only a single address).
    ! To find the fully qualified domain name, use the function
    ! \function{getfqdn()}.
      \end{funcdesc}
      
    
    
    
    From python-dev@python.org  Wed Aug 16 15:18:33 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:18:33 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules socketmodule.c,1.126,1.127
    Message-ID: <200008161418.HAA26949@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26902/Modules
    
    Modified Files:
    	socketmodule.c 
    Log Message:
    
    Remove a lot of the confusing conditional compilation from the beginning
    of the init_socket() function.  This module is now *always* _socket.
    
    
    Index: socketmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v
    retrieving revision 1.126
    retrieving revision 1.127
    diff -C2 -r1.126 -r1.127
    *** socketmodule.c	2000/08/03 16:42:13	1.126
    --- socketmodule.c	2000/08/16 14:18:30	1.127
    ***************
    *** 2332,2369 ****
      
      static char module_doc[] =
    ! "This module provides socket operations and some related functions.\n\
    ! On Unix, it supports IP (Internet Protocol) and Unix domain sockets.\n\
    ! On other systems, it only supports IP.\n\
    ! \n\
    ! Functions:\n\
    ! \n\
    ! socket() -- create a new socket object\n\
    ! fromfd() -- create a socket object from an open file descriptor (*)\n\
    ! gethostname() -- return the current hostname\n\
    ! gethostbyname() -- map a hostname to its IP number\n\
    ! gethostbyaddr() -- map an IP number or hostname to DNS info\n\
    ! getservbyname() -- map a service name and a protocol name to a port number\n\
    ! getprotobyname() -- mape a protocol name (e.g. 'tcp') to a number\n\
    ! ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order\n\
    ! htons(), htonl() -- convert 16, 32 bit int from host to network byte order\n\
    ! inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format\n\
    ! inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)\n\
    ! ssl() -- secure socket layer support (only available if configured)\n\
    ! \n\
    ! (*) not available on all platforms!)\n\
    ! \n\
    ! Special objects:\n\
    ! \n\
    ! SocketType -- type object for socket objects\n\
    ! error -- exception raised for I/O errors\n\
    ! \n\
    ! Integer constants:\n\
    ! \n\
    ! AF_INET, AF_UNIX -- socket domains (first argument to socket() call)\n\
    ! SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)\n\
    ! \n\
    ! Many other constants may be defined; these may be used in calls to\n\
    ! the setsockopt() and getsockopt() methods.\n\
    ! ";
      
      static char sockettype_doc[] =
    --- 2332,2337 ----
      
      static char module_doc[] =
    ! "Implementation module for socket operations.  See the socket module\n\
    ! for documentation.";
      
      static char sockettype_doc[] =
    ***************
    *** 2395,2403 ****
      
      DL_EXPORT(void)
    - #if defined(MS_WINDOWS) || defined(PYOS_OS2) || defined(__BEOS__)
      init_socket(void)
    - #else
    - initsocket(void)
    - #endif
      {
      	PyObject *m, *d;
    --- 2363,2367 ----
    ***************
    *** 2405,2422 ****
      	if (!NTinit())
      		return;
    - 	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
      #else
      #if defined(__TOS_OS2__)
      	if (!OS2init())
      		return;
      	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
    - #else
    - #if defined(__BEOS__)
    - 	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
    - #else
    - 	m = Py_InitModule3("socket", PySocket_methods, module_doc);
    - #endif /* __BEOS__ */
    - #endif
    - #endif
      	d = PyModule_GetDict(m);
      	PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
    --- 2369,2379 ----
      	if (!NTinit())
      		return;
      #else
      #if defined(__TOS_OS2__)
      	if (!OS2init())
      		return;
    + #endif /* __TOS_OS2__ */
    + #endif /* MS_WINDOWS */
      	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
      	d = PyModule_GetDict(m);
      	PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
    
    
    
    From python-dev@python.org  Wed Aug 16 15:19:46 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:19:46 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.in,1.106,1.107
    Message-ID: <200008161419.HAA27305@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv27288/Modules
    
    Modified Files:
    	Setup.in 
    Log Message:
    
    The socket module is now _socket on all platforms.
    
    
    Index: Setup.in
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v
    retrieving revision 1.106
    retrieving revision 1.107
    diff -C2 -r1.106 -r1.107
    *** Setup.in	2000/06/30 16:05:22	1.106
    --- Setup.in	2000/08/16 14:19:43	1.107
    ***************
    *** 153,158 ****
      mmap mmapmodule.c       # Memory-mapped files (also works on Win32)
      select selectmodule.c	# select(2); not on ancient System V
    ! socket socketmodule.c	# socket(2); not on ancient System V
    ! #_socket socketmodule.c	# socket(2); use this one for BeOS sockets
      
      # Socket module compiled with SSL support; you must edit the SSL variable:
    --- 153,157 ----
      mmap mmapmodule.c       # Memory-mapped files (also works on Win32)
      select selectmodule.c	# select(2); not on ancient System V
    ! _socket socketmodule.c	# socket(2)
      
      # Socket module compiled with SSL support; you must edit the SSL variable:
    
    
    
    From python-dev@python.org  Wed Aug 16 15:26:25 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 07:26:25 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib smtplib.py,1.27,1.28
    Message-ID: <200008161426.HAA28979@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv28931/Lib
    
    Modified Files:
    	smtplib.py 
    Log Message:
    
    Use socket.getfqdn() instead of defining make_fqdn().
    
    
    Index: smtplib.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/smtplib.py,v
    retrieving revision 1.27
    retrieving revision 1.28
    diff -C2 -r1.27 -r1.28
    *** smtplib.py	2000/08/15 19:30:36	1.27
    --- smtplib.py	2000/08/16 14:26:22	1.28
    ***************
    *** 134,163 ****
              re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
      
    - def make_fqdn(name = ''):
    -     """Get fully qualified domain name from name.
      
    -     An empty argument is interpreted as meaning the local host.
    - 
    -     First the hostname returned by socket.gethostbyaddr()
    -     is checked, then possibly existing aliases. In case
    -     no FQDN is available, hostname is returned.
    -     """
    -     name = string.strip(name)
    -     if len(name) == 0:
    -         name = socket.gethostname()
    -     try:
    -         hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
    -     except socket.error:
    -         pass
    -     else:
    -         aliases.insert(0, hostname)
    -         for name in aliases:
    -             if '.' in name:
    -                 break
    -         else:
    -             name = hostname
    -     return name
    - 
    - 
      class SMTP:
          """This class manages a connection to an SMTP or ESMTP server.
    --- 134,138 ----
    ***************
    *** 318,322 ****
                  self.putcmd("helo", name)
              else:
    !             self.putcmd("helo", make_fqdn())
              (code,msg)=self.getreply()
              self.helo_resp=msg
    --- 293,297 ----
                  self.putcmd("helo", name)
              else:
    !             self.putcmd("helo", socket.getfqdn())
              (code,msg)=self.getreply()
              self.helo_resp=msg
    ***************
    *** 331,335 ****
                  self.putcmd("ehlo", name)
              else:
    !             self.putcmd("ehlo", make_fqdn())
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    --- 306,310 ----
                  self.putcmd("ehlo", name)
              else:
    !             self.putcmd("ehlo", socket.getfqdn())
              (code,msg)=self.getreply()
              # According to RFC1869 some (badly written) 
    
    
    
    From python-dev@python.org  Wed Aug 16 16:00:00 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 08:00:00 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.2,1.3
    Message-ID: <200008161500.IAA03084@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3071
    
    Modified Files:
    	pep-0214.txt 
    Log Message:
    PEP 214 completed after channeling and encouragement from Tim Peters.
    The referenced SF patch is current with this description.
    
    The proposal section is moved to before the justification.
    
    
    Index: pep-0214.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -C2 -r1.2 -r1.3
    *** pep-0214.txt	2000/08/15 22:45:06	1.2
    --- pep-0214.txt	2000/08/16 14:59:57	1.3
    ***************
    *** 3,10 ****
      Version: $Revision$
      Author: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.1
      Status: Draft
      Created: 24-Jul-2000
    ! Post-History:
      
      
    --- 3,10 ----
      Version: $Revision$
      Author: bwarsaw@beopen.com (Barry A. Warsaw)
    ! Python-Version: 2.0
      Status: Draft
      Created: 24-Jul-2000
    ! Post-History: 16-Aug-2000
      
      
    ***************
    *** 22,25 ****
    --- 22,56 ----
      
      
    + Proposal
    + 
    +     This proposal introduces a syntax extension to the print
    +     statement, which allows the programmer to optionally specify the
    +     output file target.  An example usage is as follows:
    + 
    +         print >> mylogfile, 'this message goes to my log file'
    + 
    +     Formally, the syntax of the extended print statement is
    +     
    +         print_stmt: ... | '>>' test [ (',' test)+ [','] ] )
    + 
    +     where the ellipsis indicates the original print_stmt syntax
    +     unchanged.  In the extended form, the expression just after >>
    +     must yield an object with a write() method (i.e. a file-like
    +     object).  Thus these two statements are equivalent:
    + 
    + 	print 'hello world'
    +         print >> sys.stdout, 'hello world'
    + 
    +     As are these two statements:
    + 
    +         print
    +         print >> sys.stdout
    + 
    +     These two statements are syntax errors:
    + 
    +         print ,
    +         print >> sys.stdout,
    + 
    + 
      Justification
      
    ***************
    *** 41,50 ****
          than specifically standard output.  A typical idiom is
      
    - 	oldstdout = sys.stdout
              sys.stdout = mylogfile
      	try:
      	    print 'this message goes to my log file'
      	finally:
    ! 	    sys.stdout = oldstdout
      
          The problem with this approach is that the binding is global, and
    --- 72,80 ----
          than specifically standard output.  A typical idiom is
      
              sys.stdout = mylogfile
      	try:
      	    print 'this message goes to my log file'
      	finally:
    ! 	    sys.stdout = sys.__stdout__
      
          The problem with this approach is that the binding is global, and
    ***************
    *** 54,105 ****
      
          This approach is also very inconvenient for interleaving prints to
    !     various output streams.
    ! 
    ! 
    ! Proposal
      
    -     This proposal introduces a syntax change to the print statement,
    -     which allows the programmer to optionally specify the output file
    -     target.  An example usage is as follows:
    - 
    -         print >> mylogfile, 'this message goes to my log file'
    - 
    -     Formally, the syntax of the extended print statement is
    - 
    -         print_stmt: "print" [">>" expr ","] [ expr ("," expr)* [","] ]
    - 
    -     Where the the expression just after >> must yield an object with a
    -     write() method (i.e. a file-like object).  Thus these two
    -     statements are equivalent:
    - 
    - 	print 'hello world'
    -         print >> sys.stdout, 'hello world'
    - 
    - 
    - Open Issues
    - 
    -     What should the following do?
    - 
    -         print >> file
    -         print >> file,
    - 
    -     In the current implementation (see below), the first is a
    -     SyntaxError and the second prints nothing to file.  This is likely
    -     counterintuitive; the first should print just a newline, making
    -     these equivalent:
    - 
    -         print >> sys.stdout
    -         print
    - 
    -     The second should print just a space and no newline to file.  It
    -     doesn't have a non-extended print equivalent, since this is
    -     illegal:
    - 
    -         print ,
    - 
    -     The closes equivalent is:
    - 
    -         print '',
    -     
      
      Reference Implementation
    --- 84,90 ----
      
          This approach is also very inconvenient for interleaving prints to
    !     various output streams, and complicates coding in the face of
    !     legitimate try/except or try/finally clauses.
      
      
      Reference Implementation
    
    
    
    From python-dev@python.org  Wed Aug 16 16:03:56 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 08:03:56 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.13,1.14
    Message-ID: <200008161503.IAA04007@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv3982
    
    Modified Files:
    	pep-0200.txt 
    Log Message:
    Tim forgot to include PEP 214 feature under "proposed but not accepted
    or declined".
    
    
    Index: pep-0200.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v
    retrieving revision 1.13
    retrieving revision 1.14
    diff -C2 -r1.13 -r1.14
    *** pep-0200.txt	2000/08/16 03:17:18	1.13
    --- pep-0200.txt	2000/08/16 15:03:52	1.14
    ***************
    *** 228,231 ****
    --- 228,237 ----
            wrapper around standard internationalization libraries
      
    +     * Extended print statement - Barry Warsaw
    +       PEP 214
    +       http://python.sourceforge.net/peps/pep-0214.html
    +       SF Patch #100970
    +       http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470
    + 
      
      Declined
    
    
    
    From python-dev@python.org  Wed Aug 16 20:02:09 2000
    From: python-dev@python.org (Trent Mick)
    Date: Wed, 16 Aug 2000 12:02:09 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Grammar Makefile,1.3,1.4
    Message-ID: <200008161902.MAA20095@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Grammar
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv19856/Grammar
    
    Modified Files:
    	Makefile 
    Log Message:
    add dummy 'add2lib' target to Grammar/Makefile so non-GNU makes don't bail out
    
    This closes patch:
    http://sourceforge.net/patch/index.php?func=detailpatch&patch_id=101176&group_id=5470
    
    
    
    Index: Makefile
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Grammar/Makefile,v
    retrieving revision 1.3
    retrieving revision 1.4
    diff -C2 -r1.3 -r1.4
    *** Makefile	1993/12/28 19:39:13	1.3
    --- Makefile	2000/08/16 19:02:06	1.4
    ***************
    *** 7,10 ****
    --- 7,13 ----
      all:		install
      
    + # This target is used by the master Makefile to add the objects to the library
    + add2lib:
    + 
      install:	$(DESTH) $(DESTC)
      
    
    
    
    From python-dev@python.org  Wed Aug 16 20:43:19 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 12:43:19 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.14,1.15
    Message-ID: <200008161943.MAA31258@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv31249
    
    Modified Files:
    	exceptions.c 
    Log Message:
    SyntaxError__str__(): Fix two memory problems discovered by Insure.
    First, the allocated buffer was never freed after using it to create
    the PyString object.  Second, it was possible that have_filename would
    be false (meaning that filename was not a PyString object), but that
    the code would still try to PyString_GET_SIZE() it.
    
    
    Index: exceptions.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
    retrieving revision 1.14
    retrieving revision 1.15
    diff -C2 -r1.14 -r1.15
    *** exceptions.c	2000/08/15 16:20:36	1.14
    --- exceptions.c	2000/08/16 19:43:17	1.15
    ***************
    *** 776,784 ****
      	char *buffer = NULL;
      
    ! 	if (filename = PyObject_GetAttrString(self, "filename"))
      	    have_filename = PyString_Check(filename);
      	else
      	    PyErr_Clear();
    ! 	if (lineno = PyObject_GetAttrString(self, "lineno"))
      	    have_lineno = PyInt_Check(lineno);
      	else
    --- 776,785 ----
      	char *buffer = NULL;
      
    ! 	if ((filename = PyObject_GetAttrString(self, "filename")) != NULL)
      	    have_filename = PyString_Check(filename);
      	else
      	    PyErr_Clear();
    ! 
    ! 	if ((lineno = PyObject_GetAttrString(self, "lineno")) != NULL)
      	    have_lineno = PyInt_Check(lineno);
      	else
    ***************
    *** 786,791 ****
      
      	if (have_filename || have_lineno) {
    ! 	    int bufsize = (PyString_GET_SIZE(str) + 64 +
    ! 			   PyString_GET_SIZE(filename));
      
      	    buffer = PyMem_Malloc(bufsize);
    --- 787,793 ----
      
      	if (have_filename || have_lineno) {
    ! 	    int bufsize = PyString_GET_SIZE(str) + 64;
    ! 	    if (have_filename)
    ! 		bufsize += PyString_GET_SIZE(filename);
      
      	    buffer = PyMem_Malloc(bufsize);
    ***************
    *** 804,808 ****
    --- 806,813 ----
      			    PyString_AS_STRING(str),
      			    PyInt_AsLong(lineno));
    + 
      		result = PyString_FromString(buffer);
    + 		PyMem_FREE(buffer);
    + 
      		if (result == NULL)
      		    result = str;
    
    
    
    From python-dev@python.org  Wed Aug 16 21:30:23 2000
    From: python-dev@python.org (Peter Schneider-Kamp)
    Date: Wed, 16 Aug 2000 13:30:23 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Lib BaseHTTPServer.py,1.10,1.11 ftplib.py,1.42,1.43 socket.py,1.1,1.2
    Message-ID: <200008162030.NAA10475@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Lib
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10308
    
    Modified Files:
    	BaseHTTPServer.py ftplib.py socket.py 
    Log Message:
    
    updated occurences of fqdn algorithm (closes patch #101197)
    
    
    
    Index: BaseHTTPServer.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/BaseHTTPServer.py,v
    retrieving revision 1.10
    retrieving revision 1.11
    diff -C2 -r1.10 -r1.11
    *** BaseHTTPServer.py	2000/05/09 14:54:13	1.10
    --- BaseHTTPServer.py	2000/08/16 20:30:21	1.11
    ***************
    *** 94,110 ****
              SocketServer.TCPServer.server_bind(self)
              host, port = self.socket.getsockname()
    !         if not host or host == '0.0.0.0':
    !             host = socket.gethostname()
    !         try:
    !             hostname, hostnames, hostaddrs = socket.gethostbyaddr(host)
    !         except socket.error:
    !             hostname = host
    !         else:
    !             if '.' not in hostname:
    !                 for host in hostnames:
    !                     if '.' in host:
    !                         hostname = host
    !                         break
    !         self.server_name = hostname
              self.server_port = port
      
    --- 94,98 ----
              SocketServer.TCPServer.server_bind(self)
              host, port = self.socket.getsockname()
    !         self.server_name = socket.getfqdn(host)
              self.server_port = port
      
    ***************
    *** 418,432 ****
      
              """
    - 
    -         (host, port) = self.client_address
    -         try:
    -             name, names, addresses = socket.gethostbyaddr(host)
    -         except socket.error, msg:
    -             return host
    -         names.insert(0, name)
    -         for name in names:
    -             if '.' in name: return name
    -         return names[0]
      
      
          # Essentially static class variables
    --- 406,412 ----
      
              """
      
    +         host, port = self.client_address
    +         return socket.getfqdn(host)
      
          # Essentially static class variables
    
    Index: ftplib.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/ftplib.py,v
    retrieving revision 1.42
    retrieving revision 1.43
    diff -C2 -r1.42 -r1.43
    *** ftplib.py	2000/03/28 21:45:45	1.42
    --- ftplib.py	2000/08/16 20:30:21	1.43
    ***************
    *** 42,46 ****
      # Import SOCKS module if it exists, else standard socket module socket
      try:
    ! 	import SOCKS; socket = SOCKS
      except ImportError:
      	import socket
    --- 42,47 ----
      # Import SOCKS module if it exists, else standard socket module socket
      try:
    ! 	import SOCKS; socket = SOCKS; del SOCKS # import SOCKS as socket
    ! 	from socket import getfqdn; socket.getfqdn = getfqdn; del getfqdn
      except ImportError:
      	import socket
    ***************
    *** 292,306 ****
      		if not acct: acct = ''
      		if user == 'anonymous' and passwd in ('', '-'):
    ! 			thishost = socket.gethostname()
    ! 			# Make sure it is fully qualified
    ! 			if not '.' in thishost:
    ! 				thisaddr = socket.gethostbyname(thishost)
    ! 				firstname, names, unused = \
    ! 					   socket.gethostbyaddr(thisaddr)
    ! 				names.insert(0, firstname)
    ! 				for name in names:
    ! 					if '.' in name:
    ! 						thishost = name
    ! 						break
      			try:
      				if os.environ.has_key('LOGNAME'):
    --- 293,298 ----
      		if not acct: acct = ''
      		if user == 'anonymous' and passwd in ('', '-'):
    ! 			# get fully qualified domain name of local host
    ! 			thishost = socket.getfqdn()
      			try:
      				if os.environ.has_key('LOGNAME'):
    
    Index: socket.py
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Lib/socket.py,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -C2 -r1.1 -r1.2
    *** socket.py	2000/08/16 14:14:31	1.1
    --- socket.py	2000/08/16 20:30:21	1.2
    ***************
    *** 86,90 ****
          """
          name = name.strip()
    !     if len(name) == 0:
              name = gethostname()
          try:
    --- 86,90 ----
          """
          name = name.strip()
    !     if not name or name == '0.0.0.0':
              name = gethostname()
          try:
    
    
    
    From python-dev@python.org  Wed Aug 16 22:44:06 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 14:44:06 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.113,1.114
    Message-ID: <200008162144.OAA25326@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/tut
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv25251/tut
    
    Modified Files:
    	tut.tex 
    Log Message:
    
    Ka-Ping Yee :
    Further examples of list comprehensions.
    
    
    Index: tut.tex
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v
    retrieving revision 1.113
    retrieving revision 1.114
    diff -C2 -r1.113 -r1.114
    *** tut.tex	2000/08/12 20:08:04	1.113
    --- tut.tex	2000/08/16 21:44:03	1.114
    ***************
    *** 1762,1776 ****
      
      \begin{verbatim}
    ! >>> spcs = ["  Apple", " Banana ", "Coco  nut  "]
    ! >>> print [s.strip() for s in spcs]
    ! ['Apple', 'Banana', 'Coco  nut']
      >>> vec = [2, 4, 6]
    ! >>> print [3*x for x in vec]
      [6, 12, 18]
      >>> vec1 = [2, 4, 6]
      >>> vec2 = [4, 3, -9]
    ! >>> print [x*y for x in vec1 for y in vec2]
      [8, 6, -18, 16, 12, -36, 24, 18, -54]
    ! >>> print [x+y for x in vec1 for y in vec2]
      [6, 5, -7, 8, 7, -5, 10, 9, -3]
      \end{verbatim}
    --- 1762,1780 ----
      
      \begin{verbatim}
    ! >>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
    ! >>> [weapon.strip() for weapon in freshfruit]
    ! ['banana', 'loganberry', 'passion fruit']
      >>> vec = [2, 4, 6]
    ! >>> [3*x for x in vec]
      [6, 12, 18]
    + >>> [3*x for x in vec if x > 3]
    + [12, 18]
    + >>> [3*x for x in vec if x < 2]
    + []
      >>> vec1 = [2, 4, 6]
      >>> vec2 = [4, 3, -9]
    ! >>> [x*y for x in vec1 for y in vec2]
      [8, 6, -18, 16, 12, -36, 24, 18, -54]
    ! >>> [x+y for x in vec1 for y in vec2]
      [6, 5, -7, 8, 7, -5, 10, 9, -3]
      \end{verbatim}
    
    
    
    From python-dev@python.org  Wed Aug 16 23:29:58 2000
    From: python-dev@python.org (Trent Mick)
    Date: Wed, 16 Aug 2000 15:29:58 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.36,2.37
    Message-ID: <200008162229.PAA08921@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Modules
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv5710/Modules
    
    Modified Files:
    	_sre.c 
    Log Message:
    The sre test suite currently overruns the stack on Win64, Linux64, and Monterey
    (64-bit AIX) This is because the RECURSION_LIMIT is too low. This patch lowers
    to recusion limit to 7500 such that the recusion check fires before a segfault.
    
    Fredrik suggested/approved the fix in private email, modulo sre's recusion
    limit checking no being necessary when PyOS_CheckStack is implemented for
    Windows.
    
    
    
    Index: _sre.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
    retrieving revision 2.36
    retrieving revision 2.37
    diff -C2 -r2.36 -r2.37
    *** _sre.c	2000/08/09 09:14:34	2.36
    --- _sre.c	2000/08/16 22:29:55	2.37
    ***************
    *** 59,65 ****
      /* optional features */
      
    ! /* prevent run-away recursion (bad patterns on long strings) */
      #if !defined(USE_STACKCHECK)
    ! #define USE_RECURSION_LIMIT 10000
      #endif
      
    --- 59,74 ----
      /* optional features */
      
    ! /* prevent run-away recursion (bad patterns on long strings)
    !    Require a smaller recursion limit for a number of 64-bit platforms
    !    to prevent stack overflow:
    !     Win64 - MS_WIN64, Linux64 - __LP64__, Monterey (64-bit AIX) - _LP64
    !    XXX Or maybe this should be defined for all SIZEOF_VOIDP>4 platforms?
    ! */
      #if !defined(USE_STACKCHECK)
    ! #	if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64)
    ! #		define USE_RECURSION_LIMIT 7500
    ! #	else
    ! #		define USE_RECURSION_LIMIT 10000
    ! #	endif
      #endif
      
    
    
    
    From python-dev@python.org  Thu Aug 17 00:04:01 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 16:04:01 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.74,2.75
    Message-ID: <200008162304.QAA10362@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Python
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv10294
    
    Modified Files:
    	sysmodule.c 
    Log Message:
    _PySys_Init(): Fix another Insure discovered memory leak; the PyString
    created from the "big"/"little" constant needs to be decref'd.
    
    
    Index: sysmodule.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v
    retrieving revision 2.74
    retrieving revision 2.75
    diff -C2 -r2.74 -r2.75
    *** sysmodule.c	2000/08/15 04:24:43	2.74
    --- sysmodule.c	2000/08/16 23:03:57	2.75
    ***************
    *** 470,474 ****
      			value = "little";
      		PyDict_SetItemString(sysdict, "byteorder",
    ! 				     PyString_FromString(value));
      	}
      #ifdef MS_COREDLL
    --- 470,475 ----
      			value = "little";
      		PyDict_SetItemString(sysdict, "byteorder",
    ! 				     v = PyString_FromString(value));
    ! 		Py_XDECREF(v);
      	}
      #ifdef MS_COREDLL
    
    
    
    From python-dev@python.org  Thu Aug 17 00:41:04 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 16:41:04 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Objects stringobject.c,2.84,2.85
    Message-ID: <200008162341.QAA16009@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Objects
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv15917
    
    Modified Files:
    	stringobject.c 
    Log Message:
    Insure properly identifies the `interned' dictionary as leaking at
    shutdown time, but CVS log entry for revision 2.45 explains why this
    is so.  Simply include a comment so we don't have to re-figure it out
    again 5 years from now.
    
    
    Index: stringobject.c
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v
    retrieving revision 2.84
    retrieving revision 2.85
    diff -C2 -r2.84 -r2.85
    *** stringobject.c	2000/07/31 15:28:04	2.84
    --- stringobject.c	2000/08/16 23:41:01	2.85
    ***************
    *** 2851,2854 ****
    --- 2851,2866 ----
      #ifdef INTERN_STRINGS
      
    + /* This dictionary will leak at PyString_Fini() time.  That's acceptable
    +  * because PyString_Fini() specifically frees interned strings that are
    +  * only referenced by this dictionary.  The CVS log entry for revision 2.45
    +  * says:
    +  *
    +  *    Change the Fini function to only remove otherwise unreferenced
    +  *    strings from the interned table.  There are references in
    +  *    hard-to-find static variables all over the interpreter, and it's not
    +  *    worth trying to get rid of all those; but "uninterning" isn't fair
    +  *    either and may cause subtle failures later -- so we have to keep them
    +  *    in the interned table.
    +  */
      static PyObject *interned;
      
    
    
    
    From python-dev@python.org  Thu Aug 17 03:53:02 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 19:53:02 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.6,1.7
    Message-ID: <200008170253.TAA04697@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv4685
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Two typo corrections found by Terry Reedy.
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.6
    retrieving revision 1.7
    diff -C2 -r1.6 -r1.7
    *** pep-0001.txt	2000/08/15 05:54:18	1.6
    --- pep-0001.txt	2000/08/17 02:53:00	1.7
    ***************
    *** 12,16 ****
      What is a PEP?
      
    !     PEP standards for Python Enhancement Proposal.  A PEP is a design
          document providing information to the Python community, or
          describing a new feature for Python.  The PEP should provide a
    --- 12,16 ----
      What is a PEP?
      
    !     PEP stands for Python Enhancement Proposal.  A PEP is a design
          document providing information to the Python community, or
          describing a new feature for Python.  The PEP should provide a
    ***************
    *** 185,194 ****
          list or URL where the PEP is being discussed.
      
    !     PEP heading should begin in column zero and should be capitalized.
    !     The body of each section should be indented 4 spaces.  Code
    !     samples inside body sections should be indented a further 4
    !     spaces, and other indentation can be used as required to make the
    !     text readable.  You should use two blank lines between the last
    !     line of a section's body and the next section heading.
      
          No tabs should appear in the document at all.  A PEP should
    --- 185,194 ----
          list or URL where the PEP is being discussed.
      
    !     PEP headings should begin in column zero and should be
    !     capitalized.  The body of each section should be indented 4
    !     spaces.  Code samples inside body sections should be indented a
    !     further 4 spaces, and other indentation can be used as required to
    !     make the text readable.  You should use two blank lines between
    !     the last line of a section's body and the next section heading.
      
          No tabs should appear in the document at all.  A PEP should
    
    
    
    From python-dev@python.org  Thu Aug 17 04:11:11 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 20:11:11 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.7,1.8
    Message-ID: <200008170311.UAA13598@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv13590
    
    Modified Files:
    	pep-0001.txt 
    Log Message:
    Added a link to the SF CVSweb pages where the PEP histories can be
    retrieved. 
    
    
    Index: pep-0001.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -C2 -r1.7 -r1.8
    *** pep-0001.txt	2000/08/17 02:53:00	1.7
    --- pep-0001.txt	2000/08/17 03:11:08	1.8
    ***************
    *** 26,30 ****
          Because the PEPs are maintained as plain text files under CVS
          control, their revision history is the historical record of the
    !     feature proposal.
          
      
    --- 26,30 ----
          Because the PEPs are maintained as plain text files under CVS
          control, their revision history is the historical record of the
    !     feature proposal[1].
          
      
    ***************
    *** 130,134 ****
          4. Copyright/public domain -- Each PEP must either be explicitly
             labelled in the public domain or the Open Publication
    !        License[1].
      
          5. Specification -- The technical specification should describe
    --- 130,134 ----
          4. Copyright/public domain -- Each PEP must either be explicitly
             labelled in the public domain or the Open Publication
    !        License[2].
      
          5. Specification -- The technical specification should describe
    ***************
    *** 163,167 ****
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web[2].
      
          Each PEP begins with an RFC822 style header section.  Required
    --- 163,167 ----
          PEPs are written in plain ASCII text, and should adhere to a
          rigid style.  There is a Python script that parses this style and
    !     converts the plain text PEP to HTML for viewing on the web[3].
      
          Each PEP begins with an RFC822 style header section.  Required
    ***************
    *** 210,218 ****
      References and Footnotes
      
    !     [1] http://www.opencontent.org/openpub/
      
    !     [2] The script referred to here is pep2html.py, which lives in
          the same directory in the CVS tree as the PEPs themselves.  Try
          "pep2html.py --help" for details.
      
      
    --- 210,226 ----
      References and Footnotes
      
    !     [1] This historical record is available by the normal CVS commands
    !     for retrieving older revisions.  For those without direct access
    !     to the CVS tree, you can browse the current and past PEP revisions
    !     via the SourceForge web site at
      
    !     http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/python/nondist/peps/?cvsroot=python
    ! 
    !     [2] http://www.opencontent.org/openpub/
    ! 
    !     [3] The script referred to here is pep2html.py, which lives in
          the same directory in the CVS tree as the PEPs themselves.  Try
          "pep2html.py --help" for details.
    + 
      
      
    
    
    
    From python-dev@python.org  Thu Aug 17 04:19:44 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 20:19:44 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.22,1.23
    Message-ID: <200008170319.UAA14063@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv14055
    
    Modified Files:
    	pep-0000.txt 
    Log Message:
    Another typo caught by Terry Reedy.
    
    
    Index: pep-0000.txt
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v
    retrieving revision 1.22
    retrieving revision 1.23
    diff -C2 -r1.22 -r1.23
    *** pep-0000.txt	2000/08/15 14:29:21	1.22
    --- pep-0000.txt	2000/08/17 03:19:42	1.23
    ***************
    *** 19,23 ****
           num  filename      title                                 owner
           ---  ------------  -----                                 -----
    !  I     0  pep-0000.txt  Index of Python Enhance Proposals     bwarsaw
       I     1  pep-0001.txt  PEP Guidelines                        bwarsaw, jhylton
       I     2  pep-0002.txt  Procedure for Adding New Modules      esr
    --- 19,23 ----
           num  filename      title                                 owner
           ---  ------------  -----                                 -----
    !  I     0  pep-0000.txt  Index of Python Enhancement Proposals bwarsaw
       I     1  pep-0001.txt  PEP Guidelines                        bwarsaw, jhylton
       I     2  pep-0002.txt  Procedure for Adding New Modules      esr
    
    
    
    From python-dev@python.org  Thu Aug 17 05:26:02 2000
    From: python-dev@python.org (Fred L. Drake)
    Date: Wed, 16 Aug 2000 21:26:02 -0700
    Subject: [Python-checkins] CVS: python/dist/src/Doc/texinputs python.sty,1.62,1.63
    Message-ID: <200008170426.VAA26516@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/dist/src/Doc/texinputs
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26503/texinputs
    
    Modified Files:
    	python.sty 
    Log Message:
    
    \citetitle:  Format the title, not the optional URL!
    
    
    Index: python.sty
    ===================================================================
    RCS file: /cvsroot/python/python/dist/src/Doc/texinputs/python.sty,v
    retrieving revision 1.62
    retrieving revision 1.63
    diff -C2 -r1.62 -r1.63
    *** python.sty	2000/08/03 17:38:30	1.62
    --- python.sty	2000/08/17 04:25:59	1.63
    ***************
    *** 812,816 ****
      % cited titles:  \citetitle{Title of Work}
      %       online:  \citetitle[url-to-resource]{Title of Work}
    ! \newcommand{\citetitle}[2][URL]{\emph{#1}}
      
      
    --- 812,816 ----
      % cited titles:  \citetitle{Title of Work}
      %       online:  \citetitle[url-to-resource]{Title of Work}
    ! \newcommand{\citetitle}[2][URL]{\emph{#2}}
      
      
    
    
    
    From python-dev@python.org  Thu Aug 17 05:27:06 2000
    From: python-dev@python.org (Barry Warsaw)
    Date: Wed, 16 Aug 2000 21:27:06 -0700
    Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.11,1.12
    Message-ID: <200008170427.VAA26564@slayer.i.sourceforge.net>
    
    Update of /cvsroot/python/python/nondist/peps
    In directory slayer.i.sourceforge.net:/tmp/cvs-serv26554
    
    Modified Files:
    	pep2html.py 
    Log Message:
    Linkify the Author: fields with mailto urls.
    
    
    Index: pep2html.py
    ===================================================================
    RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v
    retrieving revision 1.11
    retrieving revision 1.12
    diff -C2 -r1.11 -r1.12
    *** pep2html.py	2000/08/15 10:35:17	1.11
    --- pep2html.py	2000/08/17 04:27:04	1.12
    ***************
    *** 109,114 ****
                   '
    \n\n') for k, v in header: fo.write(" \n" ! % (cgi.escape(k), cgi.escape(v))) title = 0 fo.write("
    %s:%s
    \n
    \n
    \n" --- 109,126 ---- '
    \n\n') for k, v in header: + if k.lower() == 'author': + mailtos = [] + for addr in v.split(): + if '@' in addr: + mailtos.append( + '%s' % + (addr, pep, addr)) + else: + mailtos.append(addr) + v = ' '.join(mailtos) + else: + v = cgi.escape(v) fo.write(" \n" ! % (cgi.escape(k), v)) title = 0 fo.write("
    %s:%s
    \n
    \n
    \n" From python-dev@python.org Thu Aug 17 05:45:16 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 16 Aug 2000 21:45:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sunau.py,1.16,1.17 sunaudio.py,1.4,1.5 toaiff.py,1.6,1.7 tokenize.py,1.12,1.13 uu.py,1.11,1.12 wave.py,1.10,1.11 Message-ID: <200008170445.VAA27430@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv27416 Modified Files: sunau.py sunaudio.py toaiff.py tokenize.py uu.py wave.py Log Message: Convert some old-style string exceptions to class exceptions. Index: sunau.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sunau.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** sunau.py 2000/07/16 12:04:30 1.16 --- sunau.py 2000/08/17 04:45:13 1.17 *************** *** 129,133 **** AUDIO_FILE_ENCODING_ALAW_8] ! Error = 'sunau.Error' def _read_u32(file): --- 129,134 ---- AUDIO_FILE_ENCODING_ALAW_8] ! class Error(Exception): ! pass def _read_u32(file): Index: sunaudio.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sunaudio.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** sunaudio.py 2000/02/04 15:28:41 1.4 --- sunaudio.py 2000/08/17 04:45:13 1.5 *************** *** 3,7 **** MAGIC = '.snd' ! error = 'sunaudio sound header conversion error' --- 3,8 ---- MAGIC = '.snd' ! class error(Exception): ! pass Index: toaiff.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/toaiff.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** toaiff.py 2000/07/16 12:04:30 1.6 --- toaiff.py 2000/08/17 04:45:13 1.7 *************** *** 54,58 **** ! error = 'toaiff.error' # Exception def toaiff(filename): --- 54,59 ---- ! class error(Exception): ! pass def toaiff(filename): Index: tokenize.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tokenize.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** tokenize.py 1998/04/03 16:05:38 1.12 --- tokenize.py 2000/08/17 04:45:13 1.13 *************** *** 77,81 **** tabsize = 8 ! TokenError = 'TokenError' def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing print "%d,%d-%d,%d:\t%s\t%s" % \ --- 77,84 ---- tabsize = 8 ! ! class TokenError(Exception): ! pass ! def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing print "%d,%d-%d,%d:\t%s\t%s" % \ Index: uu.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/uu.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** uu.py 2000/02/04 15:28:42 1.11 --- uu.py 2000/08/17 04:45:13 1.12 *************** *** 36,40 **** import sys ! Error = 'uu.Error' def encode(in_file, out_file, name=None, mode=None): --- 36,41 ---- import sys ! class Error(Exception): ! pass def encode(in_file, out_file, name=None, mode=None): Index: wave.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/wave.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** wave.py 2000/07/16 12:04:30 1.10 --- wave.py 2000/08/17 04:45:13 1.11 *************** *** 74,78 **** import __builtin__ ! Error = 'wave.Error' WAVE_FORMAT_PCM = 0x0001 --- 74,79 ---- import __builtin__ ! class Error(Exception): ! pass WAVE_FORMAT_PCM = 0x0001 From python-dev@python.org Thu Aug 17 06:01:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 16 Aug 2000 22:01:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.8,1.9 Message-ID: <200008170501.WAA30339@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30241 Modified Files: pep-0001.txt Log Message: Add a link to the PEPs themselves in footnote 3, suggested by Peter Schneider-Kamp. Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** pep-0001.txt 2000/08/17 03:11:08 1.8 --- pep-0001.txt 2000/08/17 05:01:20 1.9 *************** *** 223,226 **** --- 223,229 ---- "pep2html.py --help" for details. + The URL for viewing PEPs on the web is + http://python.sourceforge.net/peps/ + From python-dev@python.org Thu Aug 17 06:06:52 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 16 Aug 2000 22:06:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib aifc.py,1.37,1.38 audiodev.py,1.8,1.9 binhex.py,1.14,1.15 copy.py,1.14,1.15 ftplib.py,1.43,1.44 multifile.py,1.10,1.11 Message-ID: <200008170506.WAA04165@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv4151 Modified Files: aifc.py audiodev.py binhex.py copy.py ftplib.py multifile.py Log Message: Convert some old-style string exceptions to class exceptions. Index: aifc.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/aifc.py,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** aifc.py 2000/07/16 12:04:30 1.37 --- aifc.py 2000/08/17 05:06:49 1.38 *************** *** 138,142 **** import __builtin__ ! Error = 'aifc.Error' _AIFC_version = 0xA2805140 # Version 1 of AIFF-C --- 138,143 ---- import __builtin__ ! class Error(Exception): ! pass _AIFC_version = 0xA2805140 # Version 1 of AIFF-C Index: audiodev.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/audiodev.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** audiodev.py 2000/02/02 15:10:14 1.8 --- audiodev.py 2000/08/17 05:06:49 1.9 *************** *** 1,5 **** """Classes for manipulating audio devices (currently only for Sun and SGI)""" ! error = 'audiodev.error' class Play_Audio_sgi: --- 1,6 ---- """Classes for manipulating audio devices (currently only for Sun and SGI)""" ! class error(Exception): ! pass class Play_Audio_sgi: Index: binhex.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/binhex.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** binhex.py 2000/07/16 12:04:30 1.14 --- binhex.py 2000/08/17 05:06:49 1.15 *************** *** 28,32 **** import binascii ! Error = 'binhex.Error' # States (what have we written) --- 28,33 ---- import binascii ! class Error(Exception): ! pass # States (what have we written) Index: copy.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/copy.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** copy.py 2000/02/04 15:39:29 1.14 --- copy.py 2000/08/17 05:06:49 1.15 *************** *** 53,58 **** import types ! error = 'copy.error' ! Error = error # backward compatibility def copy(x): --- 53,59 ---- import types ! class Error(Exception): ! pass ! error = Error # backward compatibility def copy(x): Index: ftplib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/ftplib.py,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** ftplib.py 2000/08/16 20:30:21 1.43 --- ftplib.py 2000/08/17 05:06:49 1.44 *************** *** 57,70 **** # Exception raised when an error or invalid response is received ! error_reply = 'ftplib.error_reply' # unexpected [123]xx reply ! error_temp = 'ftplib.error_temp' # 4xx errors ! error_perm = 'ftplib.error_perm' # 5xx errors ! error_proto = 'ftplib.error_proto' # response does not begin with [1-5] # All exceptions (hopefully) that may be raised here and that aren't # (always) programming errors on our side ! all_errors = (error_reply, error_temp, error_perm, error_proto, \ ! socket.error, IOError, EOFError) --- 57,70 ---- # Exception raised when an error or invalid response is received ! class Error(Exception): pass ! class error_reply(Error): pass # unexpected [123]xx reply ! class error_temp(Error): pass # 4xx errors ! class error_perm(Error): pass # 5xx errors ! class error_proto(Error): pass # response does not begin with [1-5] # All exceptions (hopefully) that may be raised here and that aren't # (always) programming errors on our side ! all_errors = (Error, socket.error, IOError, EOFError) Index: multifile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/multifile.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** multifile.py 2000/07/16 12:04:30 1.10 --- multifile.py 2000/08/17 05:06:49 1.11 *************** *** 31,35 **** import string ! Error = 'multifile.Error' class MultiFile: --- 31,36 ---- import string ! class Error(Exception): ! pass class MultiFile: From python-dev@python.org Thu Aug 17 12:38:21 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 17 Aug 2000 04:38:21 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.95,1.96 configure.in,1.144,1.145 Message-ID: <200008171138.EAA21286@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv19129 Modified Files: Makefile.in configure.in Log Message: Fix up problems when compiling in a directory other than the source directory. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.95 retrieving revision 1.96 diff -C2 -r1.95 -r1.96 *** Makefile.in 2000/08/12 14:45:50 1.95 --- Makefile.in 2000/08/17 11:38:17 1.96 *************** *** 197,202 **** Grammar: ! P=`pwd`/Parser; cd $(srcdir)/Grammar; $(MAKE) PGENDIR=$$P \ ! OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all --- 197,201 ---- Grammar: ! cd Grammar ; $(MAKE) OPT="$(OPT)" VERSION="$(VERSION)" \ prefix="$(prefix)" exec_prefix="$(exec_prefix)" all Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.144 retrieving revision 1.145 diff -C2 -r1.144 -r1.145 *** configure.in 2000/08/12 18:43:02 1.144 --- configure.in 2000/08/17 11:38:18 1.145 *************** *** 1168,1171 **** --- 1168,1172 ---- Objects/Makefile \ Parser/Makefile \ + Grammar/Makefile \ Python/Makefile \ Modules/Makefile.pre \ From python-dev@python.org Thu Aug 17 12:38:21 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 17 Aug 2000 04:38:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Makefile.in,NONE,1.1 Makefile,1.4,NONE Message-ID: <200008171138.EAA21287@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv19129/Grammar Added Files: Makefile.in Removed Files: Makefile Log Message: Fix up problems when compiling in a directory other than the source directory. --- NEW FILE --- # NOTE: Makefile.in is converted into Makefile by the configure script # in the parent directory. Once configure has run, you can recreate # the Makefile by running just config.status. # === Variables set by config.stat === VERSION= @VERSION@ srcdir= @srcdir@ VPATH= @srcdir@ CC= @CC@ RANLIB= @RANLIB@ AR= @AR@ DEFS= @DEFS@ LIBS= @LIBS@ # === Fixed definitions === TOP= .. PGENDIR= $(TOP)/Parser PGEN= $(PGENDIR)/pgen DESTH= $(srcdir)/$(TOP)/Include/graminit.h DESTC= $(srcdir)/$(TOP)/Python/graminit.c all: install # This target is used by the master Makefile to add the objects to the library add2lib: install: $(DESTH) $(DESTC) depend: $(DESTH): graminit.h cp graminit.h $(DESTH) $(DESTC): graminit.c cp graminit.c $(DESTC) graminit.c graminit.h: $(PGEN) Grammar $(PGEN) $(srcdir)/Grammar $(PGEN): cd $(PGENDIR); $(MAKE) pgen clean: -rm -f *.o core *~ [@,#]* *.old *.orig *.rej -rm -f graminit.[ch] clobber: clean -rm -f tags TAGS From python-dev@python.org Thu Aug 17 12:41:10 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 17 Aug 2000 04:41:10 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.65,2.66 configure,1.133,1.134 Message-ID: <200008171141.EAA24934@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv24466 Modified Files: config.h.in configure Log Message: Reran autoconf. Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.65 retrieving revision 2.66 diff -C2 -r2.65 -r2.66 *** config.h.in 2000/08/05 23:28:51 2.65 --- config.h.in 2000/08/17 11:41:06 2.66 *************** *** 405,411 **** #undef HAVE_READLINK - /* Define if you have the rint function. */ - #undef HAVE_RINT - /* Define if you have the select function. */ #undef HAVE_SELECT --- 405,408 ---- Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.133 retrieving revision 1.134 diff -C2 -r1.133 -r1.134 *** configure 2000/08/10 04:23:28 1.133 --- configure 2000/08/17 11:41:06 1.134 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.142 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.145 # Guess values for system-dependent variables and create Makefiles. *************** *** 5085,5148 **** # (none yet) - # Cope with the DB mess. If we detect libdba, assume it's a version 2 - # or later DB and should be linked first (before the DB 1.xx stuff in glibc). - # Also define an appropriate symbol so we can conditionalize code in the - # dbmmodule; the API has changed since 1.xx. - echo $ac_n "checking for __db_mutex_lock in -ldba""... $ac_c" 1>&6 - echo "configure:5093: checking for __db_mutex_lock in -ldba" >&5 - ac_lib_var=`echo dba'_'__db_mutex_lock | sed 'y%./+-%__p_%'` - if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - ac_save_LIBS="$LIBS" - LIBS="-ldba $LIBS" - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" - fi - rm -f conftest* - LIBS="$ac_save_LIBS" - - fi - if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo dba | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <&6 - fi - - # Linux requires this for correct f.p. operations echo $ac_n "checking for __fpu_control""... $ac_c" 1>&6 ! echo "configure:5142: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5090: checking for __fpu_control" >&5 if eval "test \"`echo '$''{'ac_cv_func___fpu_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" --- 5115,5119 ---- ; return 0; } EOF ! if { (eval echo configure:5118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func___fpu_control=yes" *************** *** 5185,5189 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5188: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then --- 5133,5137 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for __fpu_control in -lieee""... $ac_c" 1>&6 ! echo "configure:5136: checking for __fpu_control in -lieee" >&5 ac_lib_var=`echo ieee'_'__fpu_control | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then *************** *** 5193,5197 **** LIBS="-lieee $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 5152,5156 ---- ; return 0; } EOF ! if { (eval echo configure:5155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 5237,5241 **** # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5240: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then --- 5185,5189 ---- # Check for --with-fpectl echo $ac_n "checking for --with-fpectl""... $ac_c" 1>&6 ! echo "configure:5188: checking for --with-fpectl" >&5 # Check whether --with-fpectl or --without-fpectl was given. if test "${with_fpectl+set}" = set; then *************** *** 5262,5266 **** esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5265: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then --- 5210,5214 ---- esac echo $ac_n "checking for --with-libm=STRING""... $ac_c" 1>&6 ! echo "configure:5213: checking for --with-libm=STRING" >&5 # Check whether --with-libm or --without-libm was given. if test "${with_libm+set}" = set; then *************** *** 5283,5287 **** echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5286: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then --- 5231,5235 ---- echo $ac_n "checking for --with-libc=STRING""... $ac_c" 1>&6 ! echo "configure:5234: checking for --with-libc=STRING" >&5 # Check whether --with-libc or --without-libc was given. if test "${with_libc+set}" = set; then *************** *** 5307,5316 **** do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5310: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5258: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 5283,5287 ---- ; return 0; } EOF ! if { (eval echo configure:5286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** *** 5365,5369 **** # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5368: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5313,5317 ---- # check for getopt echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 ! echo "configure:5316: checking for genuine getopt" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5373,5377 **** else cat > conftest.$ac_ext < --- 5321,5325 ---- else cat > conftest.$ac_ext < *************** *** 5385,5389 **** } EOF ! if { (eval echo configure:5388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes --- 5333,5337 ---- } EOF ! if { (eval echo configure:5336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_getopt=yes *************** *** 5403,5407 **** # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5406: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5351,5355 ---- # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 ! echo "configure:5354: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5411,5415 **** else cat > conftest.$ac_ext < --- 5359,5363 ---- else cat > conftest.$ac_ext < *************** *** 5430,5434 **** } EOF ! if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull --- 5378,5382 ---- } EOF ! if { (eval echo configure:5381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull *************** *** 5456,5470 **** ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5459: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5469: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then --- 5404,5418 ---- ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 ! echo "configure:5407: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5417: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then *************** *** 5496,5505 **** usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 ! echo "configure:5499: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&6 ! echo "configure:5447: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF --- 5463,5467 ---- EOF ! if { (eval echo configure:5466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF *************** *** 5534,5538 **** # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5537: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5482,5486 ---- # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 ! echo "configure:5485: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5541,5545 **** # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < --- 5489,5493 ---- # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < *************** *** 5552,5560 **** ; return 0; } EOF ! if { (eval echo configure:5555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < --- 5500,5508 ---- ; return 0; } EOF ! if { (eval echo configure:5503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < *************** *** 5567,5571 **** ; return 0; } EOF ! if { (eval echo configure:5570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes --- 5515,5519 ---- ; return 0; } EOF ! if { (eval echo configure:5518: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes *************** *** 5587,5591 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no --- 5548,5552 ---- } EOF ! if { (eval echo configure:5551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no *************** *** 5627,5631 **** # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5630: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 5575,5579 ---- # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 ! echo "configure:5578: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 5636,5640 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes --- 5593,5597 ---- EOF ! if { (eval echo configure:5596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes *************** *** 5677,5686 **** EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5680: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5625,5634 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5628: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** *** 5814,5817 **** --- 5762,5766 ---- Objects/Makefile \ Parser/Makefile \ + Grammar/Makefile \ Python/Makefile \ Modules/Makefile.pre \ *************** *** 5927,5930 **** --- 5876,5880 ---- Objects/Makefile \ Parser/Makefile \ + Grammar/Makefile \ Python/Makefile \ Modules/Makefile.pre \ From python-dev@python.org Thu Aug 17 21:59:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 13:59:40 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.3,1.4 Message-ID: <200008172059.NAA08099@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv8000 Modified Files: pep-0214.txt Log Message: Based on BDFL pronouncement, this PEP will be reconsidered for Python 2.1. It will not be included in Python 2.0. Index: pep-0214.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0214.txt 2000/08/16 14:59:57 1.3 --- pep-0214.txt 2000/08/17 20:59:35 1.4 *************** *** 3,7 **** Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.0 Status: Draft Created: 24-Jul-2000 --- 3,7 ---- Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.1 Status: Draft Created: 24-Jul-2000 From python-dev@python.org Thu Aug 17 23:19:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:19:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.20,1.21 Message-ID: <200008172219.PAA20766@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20709/lib Modified Files: libdis.tex Log Message: Martin v. Loewis : Document opcodes added to support extended call syntax. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** libdis.tex 2000/08/11 22:15:52 1.20 --- libdis.tex 2000/08/17 22:19:26 1.21 *************** *** 514,515 **** --- 514,534 ---- See the \code{slice()}\bifuncindex{slice} built-in function. \end{opcodedesc} + + \begin{opcodedesc}{CALL_FUNCTION_VAR}{argc} + Calls a function. \var{argc} is interpreted as in \code{CALL_FUNCTION}. + The top element on the stack contains the variable argument list, followed + by keyword and positional arguments. + \end{opcodedesc} + + \begin{opcodedesc}{CALL_FUNCTION_KW}{argc} + Calls a function. \var{argc} is interpreted as in \code{CALL_FUNCTION}. + The top element on the stack contains the keyword arguments dictionary, + followed by explicit keyword and positional arguments. + \end{opcodedesc} + + \begin{opcodedesc}{CALL_FUNCTION_VAR_KW}{argc} + Calls a function. \var{argc} is interpreted as in + \code{CALL_FUNCTION}. The top element on the stack contains the + keyword arguments dictionary, followed by the variable-arguments + tuple, followed by explicit keyword and positional arguments. + \end{opcodedesc} From python-dev@python.org Thu Aug 17 23:29:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:29:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libexcs.tex,1.30,1.31 Message-ID: <200008172229.PAA31375@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv31321/lib Modified Files: libexcs.tex Log Message: Revise the comments about the exceptions module to not refer to source code; it is not sufficiently readable now that it in written in C, and is less likely to be available to end users. Index: libexcs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libexcs.tex,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** libexcs.tex 2000/06/30 16:06:19 1.30 --- libexcs.tex 2000/08/17 22:29:31 1.31 *************** *** 6,14 **** Exceptions can be class objects or string objects. While ! traditionally, most exceptions have been string objects, in Python 1.5, all standard exceptions have been converted to class objects, ! and users are encouraged to do the same. The source code for those ! exceptions is present in the standard library module ! \module{exceptions}; this module never needs to be imported explicitly. Two distinct string objects with the same value are considered different --- 6,14 ---- Exceptions can be class objects or string objects. While ! traditionally most exceptions have been string objects, in Python 1.5, all standard exceptions have been converted to class objects, ! and users are encouraged to do the same. The exceptions are defined ! in the module \module{exceptions}; this module never needs to be ! imported explicitly. Two distinct string objects with the same value are considered different From python-dev@python.org Thu Aug 17 23:31:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:31:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libmain.tex,1.5,1.6 Message-ID: <200008172231.PAA00890@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv842/lib Modified Files: libmain.tex Log Message: A little more text, and some really minor cleanups. Index: libmain.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libmain.tex,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** libmain.tex 1998/08/10 19:41:57 1.5 --- libmain.tex 2000/08/17 22:31:23 1.6 *************** *** 1,9 **** \section{\module{__main__} --- ! Top-level script environment.} ! \declaremodule[main]{builtin}{__main__} \modulesynopsis{The environment where the top-level script is run.} This module represents the (otherwise anonymous) scope in which the interpreter's main program executes --- commands read either from ! standard input or from a script file. --- 1,16 ---- \section{\module{__main__} --- ! Top-level script environment} + \declaremodule[main]{builtin}{__main__} \modulesynopsis{The environment where the top-level script is run.} This module represents the (otherwise anonymous) scope in which the interpreter's main program executes --- commands read either from ! standard input, from a script file, or from an interactive prompt. It ! is this environment in which the idiomatic ``conditional script'' ! stanza causes a script to run: ! ! \begin{verbatim} ! if __name__ == "__main__": ! main() ! \end{verbatim} From python-dev@python.org Thu Aug 17 23:32:03 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:32:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc TODO,1.29,1.30 Message-ID: <200008172232.PAA01539@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv1478 Modified Files: TODO Log Message: Remove an item that's been done. Index: TODO =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/TODO,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** TODO 2000/07/31 18:18:27 1.29 --- TODO 2000/08/17 22:32:01 1.30 *************** *** 55,60 **** update submitted by Jim Kerr . - * Update the code/codeop module documentation. - * Update the httplib documentation to match Greg Stein's HTTP/1.1 support and new classes. (Greg, this is yours!) --- 55,58 ---- From python-dev@python.org Thu Aug 17 23:30:32 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 15:30:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libfuncs.tex,1.68,1.69 Message-ID: <200008172230.PAA32411@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv32362/lib Modified Files: libfuncs.tex Log Message: Small cleanups, and note when zip() entered the menagerie. Index: libfuncs.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libfuncs.tex,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -r1.68 -r1.69 *** libfuncs.tex 2000/08/03 17:29:13 1.68 --- libfuncs.tex 2000/08/17 22:30:30 1.69 *************** *** 169,173 **** >>> dir(sys) ['argv', 'exit', 'modules', 'path', 'stderr', 'stdin', 'stdout'] - >>> \end{verbatim} \end{funcdesc} --- 169,172 ---- *************** *** 516,520 **** >>> range(1, 0) [] - >>> \end{verbatim} \end{funcdesc} --- 515,518 ---- *************** *** 531,535 **** >>> s "Monty Python's Flying Circus" - >>> \end{verbatim} --- 529,532 ---- *************** *** 713,715 **** --- 710,713 ---- length, \function{zip()} is similar to \function{map()} with an initial argument of \code{None}. + \versionadded{2.0} \end{funcdesc} From python-dev@python.org Thu Aug 17 23:37:35 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.44,2.45 classobject.c,2.102,2.103 Message-ID: <200008172237.PAA06934@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Objects Modified Files: abstract.c classobject.c Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.44 retrieving revision 2.45 diff -C2 -r2.44 -r2.45 *** abstract.c 2000/08/03 16:42:14 2.44 --- abstract.c 2000/08/17 22:37:32 2.45 *************** *** 877,884 **** --- 877,903 ---- } + static PyObject * + sliceobj_from_intint(int i, int j) + { + PyObject *start, *end, *slice; + start = PyInt_FromLong((long)i); + if (!start) + return NULL; + end = PyInt_FromLong((long)j); + if (!end) { + Py_DECREF(start); + return NULL; + } + slice = PySlice_New(start, end, NULL); + Py_DECREF(start); + Py_DECREF(end); + return slice; + } + PyObject * PySequence_GetSlice(PyObject *s, int i1, int i2) { PySequenceMethods *m; + PyMappingMethods *mp; if (!s) return null_error(); *************** *** 898,901 **** --- 917,928 ---- } return m->sq_slice(s, i1, i2); + } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_subscript) { + PyObject *res; + PyObject *slice = sliceobj_from_intint(i1, i2); + if (!slice) + return NULL; + res = mp->mp_subscript(s, slice); + Py_DECREF(slice); + return res; } *************** *** 961,964 **** --- 988,992 ---- { PySequenceMethods *m; + PyMappingMethods *mp; if (s == NULL) { *************** *** 981,985 **** --- 1009,1022 ---- } return m->sq_ass_slice(s, i1, i2, o); + } else if ((mp = s->ob_type->tp_as_mapping) && mp->mp_ass_subscript) { + int res; + PyObject *slice = sliceobj_from_intint(i1, i2); + if (!slice) + return -1; + res = mp->mp_ass_subscript(s, slice, o); + Py_DECREF(slice); + return res; } + type_error("object doesn't support slice assignment"); return -1; Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.102 retrieving revision 2.103 diff -C2 -r2.102 -r2.103 *** classobject.c 2000/07/23 22:09:59 2.102 --- classobject.c 2000/08/17 22:37:32 2.103 *************** *** 973,976 **** --- 973,997 ---- static PyObject * + sliceobj_from_intint(int i, int j) + { + PyObject *start, *end, *res; + + start = PyInt_FromLong((long)i); + if (!start) + return NULL; + + end = PyInt_FromLong((long)j); + if (!end) { + Py_DECREF(start); + return NULL; + } + res = PySlice_New(start, end, NULL); + Py_DECREF(start); + Py_DECREF(end); + return res; + } + + + static PyObject * instance_slice(PyInstanceObject *inst, int i, int j) { *************** *** 981,987 **** getslicestr = PyString_InternFromString("__getslice__"); func = instance_getattr(inst, getslicestr); ! if (func == NULL) ! return NULL; ! arg = Py_BuildValue("(ii)", i, j); if (arg == NULL) { Py_DECREF(func); --- 1002,1018 ---- getslicestr = PyString_InternFromString("__getslice__"); func = instance_getattr(inst, getslicestr); ! ! if (func == NULL) { ! PyErr_Clear(); ! ! if (getitemstr == NULL) ! getitemstr = PyString_InternFromString("__getitem__"); ! func = instance_getattr(inst, getitemstr); ! if (func == NULL) ! return NULL; ! arg = Py_BuildValue("(N)", sliceobj_from_intint(i, j)); ! } else ! arg = Py_BuildValue("(ii)", i, j); ! if (arg == NULL) { Py_DECREF(func); *************** *** 1039,1042 **** --- 1070,1086 ---- PyString_InternFromString("__delslice__"); func = instance_getattr(inst, delslicestr); + if (func == NULL) { + PyErr_Clear(); + if (delitemstr == NULL) + delitemstr = + PyString_InternFromString("__delitem__"); + func = instance_getattr(inst, delitemstr); + if (func == NULL) + return -1; + + arg = Py_BuildValue("(N)", + sliceobj_from_intint(i, j)); + } else + arg = Py_BuildValue("(ii)", i, j); } else { *************** *** 1045,1055 **** PyString_InternFromString("__setslice__"); func = instance_getattr(inst, setslicestr); } - if (func == NULL) - return -1; - if (value == NULL) - arg = Py_BuildValue("(ii)", i, j); - else - arg = Py_BuildValue("(iiO)", i, j, value); if (arg == NULL) { Py_DECREF(func); --- 1089,1106 ---- PyString_InternFromString("__setslice__"); func = instance_getattr(inst, setslicestr); + if (func == NULL) { + PyErr_Clear(); + if (setitemstr == NULL) + setitemstr = + PyString_InternFromString("__setitem__"); + func = instance_getattr(inst, setitemstr); + if (func == NULL) + return -1; + + arg = Py_BuildValue("(NO)", + sliceobj_from_intint(i, j), value); + } else + arg = Py_BuildValue("(iiO)", i, j, value); } if (arg == NULL) { Py_DECREF(func); From python-dev@python.org Thu Aug 17 23:37:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref3.tex,1.46,1.47 Message-ID: <200008172237.PAA06915@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Doc/ref Modified Files: ref3.tex Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. Index: ref3.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref3.tex,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -r1.46 -r1.47 *** ref3.tex 2000/07/16 19:05:38 1.46 --- ref3.tex 2000/08/17 22:37:31 1.47 *************** *** 1043,1051 **** sequence, the allowable keys should be the integers \var{k} for which \code{0 <= \var{k} < \var{N}} where \var{N} is the length of the ! sequence, and the method \method{__getslice__()} (see below) should be ! defined. It is also recommended that mappings provide methods ! \method{keys()}, \method{values()}, \method{items()}, ! \method{has_key()}, \method{get()}, \method{clear()}, \method{copy()}, ! and \method{update()} behaving similar to those for Python's standard dictionary objects; mutable sequences should provide methods \method{append()}, \method{count()}, \method{index()}, --- 1043,1052 ---- sequence, the allowable keys should be the integers \var{k} for which \code{0 <= \var{k} < \var{N}} where \var{N} is the length of the ! sequence, or slice objects, which define a range of items. (For backwards ! compatibility, the method \method{__getslice__()} (see below) can also be ! defined to handle simple, but not extended slices.) It is also recommended ! that mappings provide methods \method{keys()}, \method{values()}, ! \method{items()}, \method{has_key()}, \method{get()}, \method{clear()}, ! \method{copy()}, and \method{update()} behaving similar to those for Python's standard dictionary objects; mutable sequences should provide methods \method{append()}, \method{count()}, \method{index()}, *************** *** 1142,1145 **** --- 1143,1148 ---- negative. Indexes which are greater than the length of the sequence are not modified. + This method is deprecated. If no \method{__getslice__()} is found, a slice + object is created instead, and passed to \method{__getitem__()} instead. \end{methoddesc} *************** *** 1147,1150 **** --- 1150,1156 ---- Called to implement assignment to \code{\var{self}[\var{i}:\var{j}]}. Same notes for \var{i} and \var{j} as for \method{__getslice__()}. + + This method is deprecated. If no \method{__setslice__()} is found, a slice + object is created instead, and passed to \method{__setitem__()} instead. \end{methoddesc} *************** *** 1152,1161 **** Called to implement deletion of \code{\var{self}[\var{i}:\var{j}]}. Same notes for \var{i} and \var{j} as for \method{__getslice__()}. \end{methoddesc} ! Notice that these methods are only invoked when a single slice with a ! single colon is used. For slice operations involving extended slice ! notation, \method{__getitem__()}, \method{__setitem__()} ! or\method{__delitem__()} is called. --- 1158,1170 ---- Called to implement deletion of \code{\var{self}[\var{i}:\var{j}]}. Same notes for \var{i} and \var{j} as for \method{__getslice__()}. + This method is deprecated. If no \method{__delslice__()} is found, a slice + object is created instead, and passed to \method{__delitem__()} instead. \end{methoddesc} ! Notice that these methods are only invoked when a single slice with a single ! colon is used, and the slice method is available. For slice operations ! involving extended slice notation, or in absence of the slice methods, ! \method{__getitem__()}, \method{__setitem__()} or \method{__delitem__()} is ! called with a slice object as argument. From python-dev@python.org Thu Aug 17 23:37:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_class.py,NONE,1.1 Message-ID: <200008172237.PAA06918@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Lib/test Added Files: test_class.py Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. --- NEW FILE --- "Test the functionality of Python classes implementing operators." testmeths = [ # Binary operations "add", "radd", "sub", "rsub", "mul", "rmul", "div", "rdiv", "mod", "rmod", "divmod", "rdivmod", "pow", "rpow", "rshift", "rrshift", "lshift", "rlshift", "and", "rand", "or", "ror", "xor", "rxor", # List/dict operations "contains", "getitem", "getslice", "setitem", "setslice", "delitem", "delslice", # Unary operations "neg", "pos", "abs", "int", "long", "float", "oct", "hex", # generic operations "init", "del", ] # These need to return something other than None # "coerce", # "hash", # "str", # "repr", # These are separate because they can influence the test of other methods. # "getattr", # "setattr", # "delattr", class AllTests: def __coerce__(self, *args): print "__coerce__:", args return (self,) + args def __hash__(self, *args): print "__hash__:", args return id(self) def __str__(self, *args): print "__str__:", args return "AllTests" def __repr__(self, *args): print "__repr__:", args return "AllTests" def __cmp__(self, *args): print "__cmp__:", args return 0 for method in testmeths: exec("""def __%(method)s__(self, *args): print "__%(method)s__:", args """%locals(), AllTests.__dict__); # this also tests __init__ of course. testme = AllTests() # Binary operations testme + 1 1 + testme testme - 1 1 - testme testme * 1 1 * testme testme / 1 1 / testme testme % 1 1 % testme divmod(testme,1) divmod(1, testme) testme ** 1 1 ** testme testme >> 1 1 >> testme testme << 1 1 << testme testme & 1 1 & testme testme | 1 1 | testme testme ^ 1 1 ^ testme # List/dict operations 1 in testme testme[1] testme[1] = 1 del testme[1] testme[:42] testme[:42] = "The Answer" del testme[:42] testme[2:1024:10] testme[2:1024:10] = "A lot" del testme[2:1024:10] testme[:42, ..., :24:, 24, 100] testme[:42, ..., :24:, 24, 100] = "Strange" del testme[:42, ..., :24:, 24, 100] # Now remove the slice hooks to see if converting normal slices to slice # object works. del AllTests.__getslice__ del AllTests.__setslice__ del AllTests.__delslice__ testme[:42] testme[:42] = "The Answer" del testme[:42] # Unary operations -testme +testme abs(testme) int(testme) long(testme) float(testme) oct(testme) hex(testme) # And the rest... hash(testme) repr(testme) str(testme) testme == 1 testme < 1 testme > 1 testme <> 1 testme != 1 1 == testme 1 < testme 1 > testme 1 <> testme 1 != testme # This test has to be last (duh.) del testme # Interfering tests class ExtraTests: def __getattr__(self, *args): print "__getattr__:", args return "SomeVal" def __setattr__(self, *args): print "__setattr__:", args def __delattr__(self, *args): print "__delattr__:", args testme = ExtraTests() testme.spam testme.eggs = "spam, spam, spam and ham" del testme.cardinal From python-dev@python.org Thu Aug 17 23:37:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:37:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_class,NONE,1.1 Message-ID: <200008172237.PAA06923@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv3945/Lib/test/output Added Files: test_class Log Message: Apply SF patch #101029: call __getitem__ with a proper slice object if there is no __getslice__ available. Also does the same for C extension types. Includes rudimentary documentation (it could use a cross reference to the section on slice objects, I couldn't figure out how to do that) and a test suite for all Python __hooks__ I could think of, including the new behaviour. --- NEW FILE --- test_class __init__: () __coerce__: (1,) __add__: (1,) __coerce__: (1,) __radd__: (1,) __coerce__: (1,) __sub__: (1,) __coerce__: (1,) __rsub__: (1,) __coerce__: (1,) __mul__: (1,) __coerce__: (1,) __rmul__: (1,) __coerce__: (1,) __div__: (1,) __coerce__: (1,) __rdiv__: (1,) __coerce__: (1,) __mod__: (1,) __coerce__: (1,) __rmod__: (1,) __coerce__: (1,) __divmod__: (1,) __coerce__: (1,) __rdivmod__: (1,) __coerce__: (1,) __pow__: (1,) __coerce__: (1,) __rpow__: (1,) __coerce__: (1,) __rshift__: (1,) __coerce__: (1,) __rrshift__: (1,) __coerce__: (1,) __lshift__: (1,) __coerce__: (1,) __rlshift__: (1,) __coerce__: (1,) __and__: (1,) __coerce__: (1,) __rand__: (1,) __coerce__: (1,) __or__: (1,) __coerce__: (1,) __ror__: (1,) __coerce__: (1,) __xor__: (1,) __coerce__: (1,) __rxor__: (1,) __contains__: (1,) __getitem__: (1,) __setitem__: (1, 1) __delitem__: (1,) __getslice__: (0, 42) __setslice__: (0, 42, 'The Answer') __delslice__: (0, 42) __getitem__: (slice(2, 1024, 10),) __setitem__: (slice(2, 1024, 10), 'A lot') __delitem__: (slice(2, 1024, 10),) __getitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) __setitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100), 'Strange') __delitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) __getitem__: (slice(0, 42, None),) __setitem__: (slice(0, 42, None), 'The Answer') __delitem__: (slice(0, 42, None),) __neg__: () __pos__: () __abs__: () __int__: () __long__: () __float__: () __oct__: () __hex__: () __hash__: () __repr__: () __str__: () __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __coerce__: (1,) __cmp__: (1,) __del__: () __getattr__: ('spam',) __setattr__: ('eggs', 'spam, spam, spam and ham') __delattr__: ('cardinal',) From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.27,1.28 Message-ID: <200008172255.PAA25233@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Doc/ref Modified Files: ref6.tex Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** ref6.tex 2000/07/16 19:05:38 1.27 --- ref6.tex 2000/08/17 22:54:59 1.28 *************** *** 444,449 **** \begin{verbatim} ! import_stmt: "import" module ("," module)* ! | "from" module "import" identifier ("," identifier)* | "from" module "import" "*" module: (identifier ".")* identifier --- 444,450 ---- \begin{verbatim} ! import_stmt: "import" module ["as" name] ("," module ["as" name] )* ! | "from" module "import" identifier ["as" name] ! ("," identifier ["as" name] )* | "from" module "import" "*" module: (identifier ".")* identifier *************** *** 497,507 **** The first form of \keyword{import} statement binds the module name in the local namespace to the module object, and then goes on to import the ! next identifier, if any. The \keyword{from} form does not bind the ! module name: it goes through the list of identifiers, looks each one ! of them up in the module found in step (1), and binds the name in the ! local namespace to the object thus found. If a name is not found, \exception{ImportError} is raised. If the list of identifiers is replaced ! by a star (\samp{*}), all names defined in the module are bound, ! except those beginning with an underscore (\character{_}). \indexii{name}{binding} \exindex{ImportError} --- 498,511 ---- The first form of \keyword{import} statement binds the module name in the local namespace to the module object, and then goes on to import the ! next identifier, if any. If the module name is followed by \keyword{as}, ! the name following \keyword{as} is used as the local name for the module. ! The \keyword{from} form does not bind the module name: it goes through the ! list of identifiers, looks each one of them up in the module found in step ! (1), and binds the name in the local namespace to the object thus found. ! Like with the first form of \keyword{import}, an alternate local name can be ! supplied by specifying "\keyword{as} localname". If a name is not found, \exception{ImportError} is raised. If the list of identifiers is replaced ! by a star (\samp{*}), all names defined in the module are bound, except ! those beginning with an underscore (\character{_}). \indexii{name}{binding} \exindex{ImportError} From python-dev@python.org Thu Aug 17 23:55:01 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.21,1.22 Message-ID: <200008172255.PAA25232@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Doc/lib Modified Files: libdis.tex Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** libdis.tex 2000/08/17 22:19:26 1.21 --- libdis.tex 2000/08/17 22:54:59 1.22 *************** *** 302,305 **** --- 302,311 ---- \end{opcodedesc} + \begin{opcodedesc}{IMPORT_STAR}{} + Loads all symbols not starting with '_' directly from the module TOS + to the local namespace. The module is popped after loading all names. + This opcode implements 'from module import *'. + \begin{opcodedesc} + \begin{opcodedesc}{EXEC_STMT}{} Implements \code{exec TOS2,TOS1,TOS}. The compiler fills *************** *** 412,417 **** \begin{opcodedesc}{IMPORT_FROM}{namei} ! Imports the attribute \code{co_names[\var{namei}]}. The module to import ! from is found in TOS and left there. \end{opcodedesc} --- 418,424 ---- \begin{opcodedesc}{IMPORT_FROM}{namei} ! Loads the attribute \code{co_names[\var{namei}]} from the module found in ! TOS. The resulting object is pushed onto the stack, to be subsequently ! stored by a \code{STORE_FAST} instruction. \end{opcodedesc} From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.36,1.37 Message-ID: <200008172255.PAA25251@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Grammar Modified Files: Grammar Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** Grammar 2000/08/12 18:09:51 1.36 --- Grammar 2000/08/17 22:54:59 1.37 *************** *** 42,46 **** return_stmt: 'return' [testlist] raise_stmt: 'raise' [test [',' test [',' test]]] ! import_stmt: 'import' dotted_name (',' dotted_name)* | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*) dotted_name: NAME ('.' NAME)* global_stmt: 'global' NAME (',' NAME)* --- 42,48 ---- return_stmt: 'return' [testlist] raise_stmt: 'raise' [test [',' test [',' test]]] ! import_stmt: 'import' dotted_as_name (',' dotted_as_name)* | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*) ! import_as_name: NAME [NAME NAME] ! dotted_as_name: dotted_name [NAME NAME] dotted_name: NAME ('.' NAME)* global_stmt: 'global' NAME (',' NAME)* From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.22,1.23 Message-ID: <200008172255.PAA25246@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Lib Modified Files: dis.py Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** dis.py 2000/08/11 22:15:52 1.22 --- dis.py 2000/08/17 22:54:59 1.23 *************** *** 196,200 **** def_op('LOAD_LOCALS', 82) def_op('RETURN_VALUE', 83) ! def_op('EXEC_STMT', 85) --- 196,200 ---- def_op('LOAD_LOCALS', 82) def_op('RETURN_VALUE', 83) ! def_op('IMPORT_STAR', 84) def_op('EXEC_STMT', 85) From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include graminit.h,2.14,2.15 opcode.h,2.26,2.27 Message-ID: <200008172255.PAA25258@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Include Modified Files: graminit.h opcode.h Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: graminit.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/graminit.h,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** graminit.h 2000/08/12 18:09:51 2.14 --- graminit.h 2000/08/17 22:54:59 2.15 *************** *** 20,61 **** #define raise_stmt 275 #define import_stmt 276 ! #define dotted_name 277 ! #define global_stmt 278 ! #define exec_stmt 279 ! #define assert_stmt 280 ! #define compound_stmt 281 ! #define if_stmt 282 ! #define while_stmt 283 ! #define for_stmt 284 ! #define try_stmt 285 ! #define except_clause 286 ! #define suite 287 ! #define test 288 ! #define and_test 289 ! #define not_test 290 ! #define comparison 291 ! #define comp_op 292 ! #define expr 293 ! #define xor_expr 294 ! #define and_expr 295 ! #define shift_expr 296 ! #define arith_expr 297 ! #define term 298 ! #define factor 299 ! #define power 300 ! #define atom 301 ! #define listmaker 302 ! #define lambdef 303 ! #define trailer 304 ! #define subscriptlist 305 ! #define subscript 306 ! #define sliceop 307 ! #define exprlist 308 ! #define testlist 309 ! #define dictmaker 310 ! #define classdef 311 ! #define arglist 312 ! #define argument 313 ! #define list_iter 314 ! #define list_for 315 ! #define list_if 316 --- 20,63 ---- #define raise_stmt 275 #define import_stmt 276 ! #define import_as_name 277 ! #define dotted_as_name 278 ! #define dotted_name 279 ! #define global_stmt 280 ! #define exec_stmt 281 ! #define assert_stmt 282 ! #define compound_stmt 283 ! #define if_stmt 284 ! #define while_stmt 285 ! #define for_stmt 286 ! #define try_stmt 287 ! #define except_clause 288 ! #define suite 289 ! #define test 290 ! #define and_test 291 ! #define not_test 292 ! #define comparison 293 ! #define comp_op 294 ! #define expr 295 ! #define xor_expr 296 ! #define and_expr 297 ! #define shift_expr 298 ! #define arith_expr 299 ! #define term 300 ! #define factor 301 ! #define power 302 ! #define atom 303 ! #define listmaker 304 ! #define lambdef 305 ! #define trailer 306 ! #define subscriptlist 307 ! #define subscript 308 ! #define sliceop 309 ! #define exprlist 310 ! #define testlist 311 ! #define dictmaker 312 ! #define classdef 313 ! #define arglist 314 ! #define argument 315 ! #define list_iter 316 ! #define list_for 317 ! #define list_if 318 Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** opcode.h 2000/08/11 22:15:52 2.26 --- opcode.h 2000/08/17 22:54:59 2.27 *************** *** 66,70 **** #define LOAD_LOCALS 82 #define RETURN_VALUE 83 ! #define EXEC_STMT 85 --- 66,70 ---- #define LOAD_LOCALS 82 #define RETURN_VALUE 83 ! #define IMPORT_STAR 84 #define EXEC_STMT 85 From python-dev@python.org Thu Aug 17 23:55:02 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_pkg.py,1.7,1.8 Message-ID: <200008172255.PAA25253@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Lib/test Modified Files: test_pkg.py Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: test_pkg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_pkg.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** test_pkg.py 1998/05/19 15:09:42 1.7 --- test_pkg.py 2000/08/17 22:54:59 1.8 *************** *** 166,169 **** --- 166,196 ---- print dir() """), + + ("t7", [ + ("t7.py", "print 'Importing t7.py'"), + ("t7", None), + ("t7 __init__.py", "print __name__, 'loading'"), + ("t7 sub.py", "print 'THIS SHOULD NOT BE PRINTED (sub.py)'"), + ("t7 sub", None), + ("t7 sub __init__.py", ""), + ("t7 sub subsub.py", "print 'THIS SHOULD NOT BE PRINTED (subsub.py)'"), + ("t7 sub subsub", None), + ("t7 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"), + ], + """ + t7, sub, subsub = None, None, None + import t7 as tas + print dir(tas) + assert not t7 + from t7 import sub as subpar + print dir(subpar) + assert not t7 and not sub + from t7.sub import subsub as subsubsub + print dir(subsubsub) + assert not t7 and not sub and not subsub + from t7.sub.subsub import spam as ham + print "t7.sub.subsub.spam =", ham + assert not t7 and not sub and not subsub + """), ] From python-dev@python.org Thu Aug 17 23:55:03 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.189,2.190 compile.c,2.126,2.127 graminit.c,2.24,2.25 import.c,2.145,2.146 Message-ID: <200008172255.PAA25278@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Python Modified Files: ceval.c compile.c graminit.c import.c Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.189 retrieving revision 2.190 diff -C2 -r2.189 -r2.190 *** ceval.c 2000/08/11 22:15:52 2.189 --- ceval.c 2000/08/17 22:55:00 2.190 *************** *** 67,71 **** PyObject *, PyObject *); static PyObject *cmp_outcome(int, PyObject *, PyObject *); ! static int import_from(PyObject *, PyObject *, PyObject *); static PyObject *build_class(PyObject *, PyObject *, PyObject *); static int exec_statement(PyFrameObject *, --- 67,72 ---- PyObject *, PyObject *); static PyObject *cmp_outcome(int, PyObject *, PyObject *); ! static PyObject *import_from(PyObject *, PyObject *); ! static int import_all_from(PyObject *, PyObject *); static PyObject *build_class(PyObject *, PyObject *, PyObject *); static int exec_statement(PyFrameObject *, *************** *** 1415,1421 **** break; ! case IMPORT_FROM: ! w = GETNAMEV(oparg); ! v = TOP(); PyFrame_FastToLocals(f); if ((x = f->f_locals) == NULL) { --- 1416,1421 ---- break; ! case IMPORT_STAR: ! v = POP(); PyFrame_FastToLocals(f); if ((x = f->f_locals) == NULL) { *************** *** 1424,1432 **** break; } ! err = import_from(x, v, w); PyFrame_LocalsToFast(f, 0); if (err == 0) continue; break; case JUMP_FORWARD: JUMPBY(oparg); --- 1424,1441 ---- break; } ! err = import_all_from(x, v); PyFrame_LocalsToFast(f, 0); + Py_DECREF(v); if (err == 0) continue; break; + case IMPORT_FROM: + w = GETNAMEV(oparg); + v = TOP(); + x = import_from(v, w); + PUSH(x); + if (x != NULL) continue; + break; + case JUMP_FORWARD: JUMPBY(oparg); *************** *** 2648,2653 **** } ! static int ! import_from(PyObject *locals, PyObject *v, PyObject *name) { PyObject *w, *x; --- 2657,2662 ---- } ! static PyObject * ! import_from(PyObject *v, PyObject *name) { PyObject *w, *x; *************** *** 2655,2688 **** PyErr_SetString(PyExc_TypeError, "import-from requires module object"); return -1; } ! w = PyModule_GetDict(v); ! if (PyString_AsString(name)[0] == '*') { ! int pos, err; ! PyObject *name, *value; ! pos = 0; ! while (PyDict_Next(w, &pos, &name, &value)) { ! if (!PyString_Check(name) || ! PyString_AsString(name)[0] == '_') continue; ! Py_INCREF(value); ! err = PyDict_SetItem(locals, name, value); ! Py_DECREF(value); ! if (err != 0) ! return -1; ! } ! return 0; ! } ! else { ! x = PyDict_GetItem(w, name); ! if (x == NULL) { ! PyErr_Format(PyExc_ImportError, ! "cannot import name %.230s", ! PyString_AsString(name)); return -1; - } - else - return PyDict_SetItem(locals, name, x); } } --- 2664,2705 ---- PyErr_SetString(PyExc_TypeError, "import-from requires module object"); + return NULL; + } + w = PyModule_GetDict(v); /* TDB: can this not fail ? */ + x = PyDict_GetItem(w, name); + if (x == NULL) { + PyErr_Format(PyExc_ImportError, + "cannot import name %.230s", + PyString_AsString(name)); + } else + Py_INCREF(x); + return x; + } + + static int + import_all_from(PyObject *locals, PyObject *v) + { + int pos = 0, err; + PyObject *name, *value; + PyObject *w; + + if (!PyModule_Check(v)) { + PyErr_SetString(PyExc_TypeError, + "import-from requires module object"); return -1; } ! w = PyModule_GetDict(v); /* TBD: can this not fail ? */ ! ! while (PyDict_Next(w, &pos, &name, &value)) { ! if (!PyString_Check(name) || ! PyString_AsString(name)[0] == '_') continue; ! Py_INCREF(value); ! err = PyDict_SetItem(locals, name, value); ! Py_DECREF(value); ! if (err != 0) return -1; } + return 0; } *************** *** 2826,2830 **** opcode = (*next_instr++); ! if (opcode != IMPORT_FROM) { Py_INCREF(Py_None); return Py_None; --- 2843,2847 ---- opcode = (*next_instr++); ! if (opcode != IMPORT_FROM && opcode != IMPORT_STAR) { Py_INCREF(Py_None); return Py_None; *************** *** 2834,2849 **** if (list == NULL) return NULL; ! ! do { ! oparg = (next_instr[1]<<8) + next_instr[0]; ! next_instr += 2; ! name = Getnamev(f, oparg); ! if (PyList_Append(list, name) < 0) { Py_DECREF(list); ! break; ! } ! opcode = (*next_instr++); ! } while (opcode == IMPORT_FROM); ! return list; } --- 2851,2876 ---- if (list == NULL) return NULL; ! ! if (opcode == IMPORT_STAR) { ! name = PyString_FromString("*"); ! if (!name) Py_DECREF(list); ! else { ! if (PyList_Append(list, name) < 0) ! Py_DECREF(list); ! Py_DECREF(name); ! } ! } else { ! do { ! oparg = (next_instr[1]<<8) + next_instr[0]; ! next_instr += 2; ! name = Getnamev(f, oparg); ! if (PyList_Append(list, name) < 0) { ! Py_DECREF(list); ! break; ! } ! opcode = (*next_instr++); ! } while (opcode == IMPORT_FROM); ! } return list; } Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.126 retrieving revision 2.127 diff -C2 -r2.126 -r2.127 *** compile.c 2000/08/15 16:41:26 2.126 --- compile.c 2000/08/17 22:55:00 2.127 *************** *** 2097,2100 **** --- 2097,2116 ---- static void + com_from_import(struct compiling *c, node *n) + { + com_addopname(c, IMPORT_FROM, CHILD(n, 0)); + com_push(c, 1); + if (NCH(n) > 1) { + if (strcmp(STR(CHILD(n, 1)), "as") != 0) { + com_error(c, PyExc_SyntaxError, "invalid syntax"); + return; + } + com_addopname(c, STORE_NAME, CHILD(n, 2)); + } else + com_addopname(c, STORE_NAME, CHILD(n, 0)); + com_pop(c, 1); + } + + static void com_import_stmt(struct compiling *c, node *n) { *************** *** 2108,2114 **** com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); ! for (i = 3; i < NCH(n); i += 2) ! com_addopname(c, IMPORT_FROM, CHILD(n, i)); ! com_addbyte(c, POP_TOP); com_pop(c, 1); } --- 2124,2134 ---- com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); ! if (TYPE(CHILD(n, 3)) == STAR) ! com_addbyte(c, IMPORT_STAR); ! else { ! for (i = 3; i < NCH(n); i += 2) ! com_from_import(c, CHILD(n, i)); ! com_addbyte(c, POP_TOP); ! } com_pop(c, 1); } *************** *** 2116,2123 **** /* 'import' ... */ for (i = 1; i < NCH(n); i += 2) { ! REQ(CHILD(n, i), dotted_name); ! com_addopname(c, IMPORT_NAME, CHILD(n, i)); com_push(c, 1); ! com_addopname(c, STORE_NAME, CHILD(CHILD(n, i), 0)); com_pop(c, 1); } --- 2136,2153 ---- /* 'import' ... */ for (i = 1; i < NCH(n); i += 2) { ! node *subn = CHILD(n, i); ! REQ(subn, dotted_as_name); ! com_addopname(c, IMPORT_NAME, CHILD(subn, 0)); com_push(c, 1); ! if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0) { ! com_error(c, PyExc_SyntaxError, ! "invalid syntax"); ! return; ! } ! com_addopname(c, STORE_NAME, CHILD(subn, 2)); ! } else ! com_addopname(c, STORE_NAME, ! CHILD(CHILD(subn, 0),0)); com_pop(c, 1); } *************** *** 3296,3299 **** --- 3326,3330 ---- com_addlocal_o(c, GETNAMEOBJ(oparg)); break; + case IMPORT_STAR: case EXEC_STMT: c->c_flags &= ~CO_OPTIMIZED; *************** *** 3302,3305 **** --- 3333,3337 ---- } + /* TBD: Is this still necessary ? */ if (PyDict_GetItemString(c->c_locals, "*") != NULL) c->c_flags &= ~CO_OPTIMIZED; Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.24 retrieving revision 2.25 diff -C2 -r2.24 -r2.25 *** graminit.c 2000/08/12 18:09:51 2.24 --- graminit.c 2000/08/17 22:55:00 2.25 *************** *** 364,368 **** }; static arc arcs_20_2[1] = { ! {50, 4}, }; static arc arcs_20_3[2] = { --- 364,368 ---- }; static arc arcs_20_2[1] = { ! {52, 4}, }; [...2357 lines suppressed...] {25, 0}, {2, 0}, {3, 0}, ! {316, 0}, {1, "lambda"}, ! {314, 0}, {307, 0}, + {308, 0}, + {309, 0}, {1, "class"}, {315, 0}, ! {317, 0}, ! {318, 0}, }; grammar _PyParser_Grammar = { ! 63, dfas, ! {130, labels}, 256 }; Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.145 retrieving revision 2.146 diff -C2 -r2.145 -r2.146 *** import.c 2000/08/11 22:15:52 2.145 --- import.c 2000/08/17 22:55:00 2.146 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50811 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50815 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Thu Aug 17 23:55:03 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 17 Aug 2000 15:55:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_pkg,1.3,1.4 Message-ID: <200008172255.PAA25265@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv24798/Lib/test/output Modified Files: test_pkg Log Message: Apply SF patch #101135, adding 'import module as m' and 'from module import name as n'. By doing some twists and turns, "as" is not a reserved word. There is a slight change in semantics for 'from module import name' (it will now honour the 'global' keyword) but only in cases that are explicitly undocumented. Index: test_pkg =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_pkg,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_pkg 1997/09/08 16:06:20 1.3 --- test_pkg 2000/08/17 22:55:00 1.4 *************** *** 37,38 **** --- 37,45 ---- ['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'eggs', 'ham', 'spam'] ['eggs', 'ham', 'spam', 't6'] + running test t7 + t7 loading + ['__builtins__', '__doc__', '__file__', '__name__', '__path__'] + ['__builtins__', '__doc__', '__file__', '__name__', '__path__'] + t7.sub.subsub loading + ['__builtins__', '__doc__', '__file__', '__name__', '__path__', 'spam'] + t7.sub.subsub.spam = 1 From python-dev@python.org Fri Aug 18 00:08:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 16:08:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib symbol.py,1.10,1.11 Message-ID: <200008172308.QAA10452@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10358/Lib Modified Files: symbol.py Log Message: Update to reflect the recent Grammar changes. Index: symbol.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/symbol.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** symbol.py 2000/08/12 19:09:14 1.10 --- symbol.py 2000/08/17 23:08:05 1.11 *************** *** 32,75 **** raise_stmt = 275 import_stmt = 276 ! dotted_name = 277 ! global_stmt = 278 ! exec_stmt = 279 ! assert_stmt = 280 ! compound_stmt = 281 ! if_stmt = 282 ! while_stmt = 283 ! for_stmt = 284 ! try_stmt = 285 ! except_clause = 286 ! suite = 287 ! test = 288 ! and_test = 289 ! not_test = 290 ! comparison = 291 ! comp_op = 292 ! expr = 293 ! xor_expr = 294 ! and_expr = 295 ! shift_expr = 296 ! arith_expr = 297 ! term = 298 ! factor = 299 ! power = 300 ! atom = 301 ! listmaker = 302 ! lambdef = 303 ! trailer = 304 ! subscriptlist = 305 ! subscript = 306 ! sliceop = 307 ! exprlist = 308 ! testlist = 309 ! dictmaker = 310 ! classdef = 311 ! arglist = 312 ! argument = 313 ! list_iter = 314 ! list_for = 315 ! list_if = 316 #--end constants-- --- 32,77 ---- raise_stmt = 275 import_stmt = 276 ! import_as_name = 277 ! dotted_as_name = 278 ! dotted_name = 279 ! global_stmt = 280 ! exec_stmt = 281 ! assert_stmt = 282 ! compound_stmt = 283 ! if_stmt = 284 ! while_stmt = 285 ! for_stmt = 286 ! try_stmt = 287 ! except_clause = 288 ! suite = 289 ! test = 290 ! and_test = 291 ! not_test = 292 ! comparison = 293 ! comp_op = 294 ! expr = 295 ! xor_expr = 296 ! and_expr = 297 ! shift_expr = 298 ! arith_expr = 299 ! term = 300 ! factor = 301 ! power = 302 ! atom = 303 ! listmaker = 304 ! lambdef = 305 ! trailer = 306 ! subscriptlist = 307 ! subscript = 308 ! sliceop = 309 ! exprlist = 310 ! testlist = 311 ! dictmaker = 312 ! classdef = 313 ! arglist = 314 ! argument = 315 ! list_iter = 316 ! list_for = 317 ! list_if = 318 #--end constants-- From python-dev@python.org Fri Aug 18 00:15:24 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 17 Aug 2000 16:15:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libpyexpat.tex,1.3,1.4 Message-ID: <200008172315.QAA18435@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv18185 Modified Files: libpyexpat.tex Log Message: Document the returns_unicode attribute Index: libpyexpat.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libpyexpat.tex,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** libpyexpat.tex 2000/07/11 16:30:30 1.3 --- libpyexpat.tex 2000/08/17 23:15:21 1.4 *************** *** 93,100 **** \end{methoddesc} ! \class{xmlparser} objects have the following attributes, containing ! values relating to the most recent error encountered by an ! \class{xmlparser} object. These attributes will only have correct ! values once a call to \method{Parse()} or \method{ParseFile()} has raised a \exception{pyexpat.error} exception. --- 93,107 ---- \end{methoddesc} ! \class{xmlparser} objects have the following attributes. ! ! \begin{datadesc}{returns_unicode} ! If this attribute is set to 1, the handler functions will be passed ! Unicode strings. If \member{returns_unicode} is 0, 8-bit strings ! containing UTF-8 encoded data will be passed to the handlers. ! \end{datadesc} ! ! The following attributes contain values relating to the most recent ! error encountered by an \class{xmlparser} object, and will only have ! correct values once a call to \method{Parse()} or \method{ParseFile()} has raised a \exception{pyexpat.error} exception. From python-dev@python.org Fri Aug 18 03:15:58 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 19:15:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.22,1.23 Message-ID: <200008180215.TAA32598@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv32589/lib Modified Files: libdis.tex Log Message: Fix a markup error that caused formatting to fail. Lots of minor markup adjustments as well. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** libdis.tex 2000/08/17 22:54:59 1.22 --- libdis.tex 2000/08/18 02:15:55 1.23 *************** *** 279,293 **** \begin{opcodedesc}{PRINT_ITEM}{} Prints TOS. There is one such instruction for ! each item in the print statement. \end{opcodedesc} \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the ! last operation of a print statement, unless the statement ends ! with a comma. \end{opcodedesc} \begin{opcodedesc}{BREAK_LOOP}{} ! Terminates a loop due to a break statement. \end{opcodedesc} --- 279,293 ---- \begin{opcodedesc}{PRINT_ITEM}{} Prints TOS. There is one such instruction for ! each item in the \keyword{print} statement. \end{opcodedesc} \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the ! last operation of a \keyword{print} statement, unless the statement ! ends with a comma. \end{opcodedesc} \begin{opcodedesc}{BREAK_LOOP}{} ! Terminates a loop due to a \keyword{break} statement. \end{opcodedesc} *************** *** 303,314 **** \begin{opcodedesc}{IMPORT_STAR}{} ! Loads all symbols not starting with '_' directly from the module TOS to the local namespace. The module is popped after loading all names. ! This opcode implements 'from module import *'. ! \begin{opcodedesc} \begin{opcodedesc}{EXEC_STMT}{} Implements \code{exec TOS2,TOS1,TOS}. The compiler fills ! missing optional parameters with None. \end{opcodedesc} --- 303,314 ---- \begin{opcodedesc}{IMPORT_STAR}{} ! Loads all symbols not starting with \character{_} directly from the module TOS to the local namespace. The module is popped after loading all names. ! This opcode implements \code{from module import *}. ! \end{opcodedesc} \begin{opcodedesc}{EXEC_STMT}{} Implements \code{exec TOS2,TOS1,TOS}. The compiler fills ! missing optional parameters with \code{None}. \end{opcodedesc} *************** *** 319,325 **** \begin{opcodedesc}{END_FINALLY}{} ! Terminates a finally-block. The interpreter recalls whether the ! exception has to be re-raised, or whether the function returns, ! and continues with the outer-next block. \end{opcodedesc} --- 319,325 ---- \begin{opcodedesc}{END_FINALLY}{} ! Terminates a \keyword{finally} clause. The interpreter recalls ! whether the exception has to be re-raised, or whether the function ! returns, and continues with the outer-next block. \end{opcodedesc} *************** *** 397,406 **** \begin{opcodedesc}{BUILD_MAP}{zero} ! Pushes an empty dictionary object onto the stack. The argument is ignored ! and set to zero by the compiler. \end{opcodedesc} \begin{opcodedesc}{LOAD_ATTR}{namei} ! Replaces TOS with \code{getattr(TOS,co_names[\var{namei}]}. \end{opcodedesc} --- 397,406 ---- \begin{opcodedesc}{BUILD_MAP}{zero} ! Pushes a new empty dictionary object onto the stack. The argument is ! ignored and set to zero by the compiler. \end{opcodedesc} \begin{opcodedesc}{LOAD_ATTR}{namei} ! Replaces TOS with \code{getattr(TOS, co_names[\var{namei}]}. \end{opcodedesc} *************** *** 494,498 **** \begin{opcodedesc}{RAISE_VARARGS}{argc} Raises an exception. \var{argc} indicates the number of parameters ! to the raise statement, ranging from 1 to 3. The handler will find the traceback as TOS2, the parameter as TOS1, and the exception as TOS. --- 494,498 ---- \begin{opcodedesc}{RAISE_VARARGS}{argc} Raises an exception. \var{argc} indicates the number of parameters ! to the raise statement, ranging from 0 to 3. The handler will find the traceback as TOS2, the parameter as TOS1, and the exception as TOS. *************** *** 519,523 **** is 2, \code{slice(TOS1, TOS)} is pushed; if it is 3, \code{slice(TOS2, TOS1, TOS)} is pushed. ! See the \code{slice()}\bifuncindex{slice} built-in function. \end{opcodedesc} --- 519,524 ---- is 2, \code{slice(TOS1, TOS)} is pushed; if it is 3, \code{slice(TOS2, TOS1, TOS)} is pushed. ! See the \code{slice()}\bifuncindex{slice} built-in function for more ! information. \end{opcodedesc} From python-dev@python.org Fri Aug 18 03:42:16 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 19:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref3.tex,1.47,1.48 Message-ID: <200008180242.TAA01619@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv1610/ref Modified Files: ref3.tex Log Message: Adjust the way __getslice__() is marked as deprecated; this will also stand out more. Index: ref3.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref3.tex,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -r1.47 -r1.48 *** ref3.tex 2000/08/17 22:37:31 1.47 --- ref3.tex 2000/08/18 02:42:14 1.48 *************** *** 1046,1050 **** compatibility, the method \method{__getslice__()} (see below) can also be defined to handle simple, but not extended slices.) It is also recommended ! that mappings provide methods \method{keys()}, \method{values()}, \method{items()}, \method{has_key()}, \method{get()}, \method{clear()}, \method{copy()}, and \method{update()} behaving similar to those for --- 1046,1050 ---- compatibility, the method \method{__getslice__()} (see below) can also be defined to handle simple, but not extended slices.) It is also recommended ! that mappings provide the methods \method{keys()}, \method{values()}, \method{items()}, \method{has_key()}, \method{get()}, \method{clear()}, \method{copy()}, and \method{update()} behaving similar to those for *************** *** 1133,1136 **** --- 1133,1138 ---- \begin{methoddesc}[sequence object]{__getslice__}{self, i, j} + \deprecated{2.0}{Support slice objects as parameters to the + \method{__getitem__()} method.} Called to implement evaluation of \code{\var{self}[\var{i}:\var{j}]}. The returned object should be of the same type as \var{self}. Note *************** *** 1143,1147 **** negative. Indexes which are greater than the length of the sequence are not modified. ! This method is deprecated. If no \method{__getslice__()} is found, a slice object is created instead, and passed to \method{__getitem__()} instead. \end{methoddesc} --- 1145,1149 ---- negative. Indexes which are greater than the length of the sequence are not modified. ! If no \method{__getslice__()} is found, a slice object is created instead, and passed to \method{__getitem__()} instead. \end{methoddesc} From python-dev@python.org Fri Aug 18 04:12:45 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 17 Aug 2000 20:12:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libstdtypes.tex,1.30,1.31 Message-ID: <200008180312.UAA10115@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10063/lib Modified Files: libstdtypes.tex Log Message: As pointed out by Denis S. Otkidach , xrange() returns an xrange object, not a range object, despite the name of the source file they're implemented in. In the list of comparison operators, list != before <>, since <> is described as obsolescent. Index: libstdtypes.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libstdtypes.tex,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** libstdtypes.tex 2000/08/14 15:37:59 1.30 --- libstdtypes.tex 2000/08/18 03:12:38 1.31 *************** *** 106,111 **** \lineiii{>=}{greater than or equal}{} \lineiii{==}{equal}{} - \lineiii{<>}{not equal}{(1)} \lineiii{!=}{not equal}{(1)} \lineiii{is}{object identity}{} \lineiii{is not}{negated object identity}{} --- 106,111 ---- \lineiii{>=}{greater than or equal}{} \lineiii{==}{equal}{} \lineiii{!=}{not equal}{(1)} + \lineiii{<>}{not equal}{(1)} \lineiii{is}{object identity}{} \lineiii{is not}{negated object identity}{} *************** *** 314,318 **** There are six sequence types: strings, Unicode strings, lists, ! tuples, buffers, and ranges. Strings literals are written in single or double quotes: --- 314,318 ---- There are six sequence types: strings, Unicode strings, lists, ! tuples, buffers, and xrange objects. Strings literals are written in single or double quotes: *************** *** 328,334 **** item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} Ranges are ! similar to buffers in that there is no specific syntax to create them, ! but they are created using the \function{xrange()} function.\bifuncindex{xrange} \indexii{sequence}{types} --- 328,334 ---- item tuple must have a trailing comma, e.g., \code{(d,)}. Buffers are not directly support by Python syntax, but can created by calling the ! builtin function \function{buffer()}.\bifuncindex{buffer} XRanges ! objects are similar to buffers in that there is no specific syntax to ! create them, but they are created using the \function{xrange()} function.\bifuncindex{xrange} \indexii{sequence}{types} *************** *** 338,341 **** --- 338,342 ---- \indexii{tuple}{type} \indexii{list}{type} + \indexii{xrange}{type} Sequence types support the following operations. The \samp{in} and *************** *** 639,654 **** ! \subsubsection{Range Type \label{typesseq-range}} ! The range\indexii{range}{type} type is an immutable sequence which is ! commonly used for looping. The advantage of the range type is that a ! range object will always take the same amount of memory, no matter the size of the range it represents. There are no consistent performance advantages. ! Range objects behave like tuples, and offer a single method: ! \begin{methoddesc}[range]{tolist}{} ! Return a list object which represents the same values as the range object. \end{methoddesc} --- 640,655 ---- ! \subsubsection{XRange Type \label{typesseq-xrange}} ! The xrange\indexii{xrange}{type} type is an immutable sequence which is ! commonly used for looping. The advantage of the xrange type is that an ! xrange object will always take the same amount of memory, no matter the size of the range it represents. There are no consistent performance advantages. ! XRange objects behave like tuples, and offer a single method: ! \begin{methoddesc}[xrange]{tolist}{} ! Return a list object which represents the same values as the xrange object. \end{methoddesc} *************** *** 1113,1118 **** See the \citetitle[../ref/ref.html]{Python Reference Manual} for this ! information. It describes code objects, stack frame objects, ! traceback objects, and slice objects. --- 1114,1119 ---- See the \citetitle[../ref/ref.html]{Python Reference Manual} for this ! information. It describes stack frame objects, traceback objects, and ! slice objects. From python-dev@python.org Fri Aug 18 05:25:36 2000 From: python-dev@python.org (Tim Peters) Date: Thu, 17 Aug 2000 21:25:36 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.14,1.15 Message-ID: <200008180425.VAA24750@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv24717/python/nondist/peps Modified Files: pep-0200.txt Log Message: Close test_longexp bug. Changes in status based on what I remember from way too much email today. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** pep-0200.txt 2000/08/16 15:03:52 1.14 --- pep-0200.txt 2000/08/18 04:25:33 1.15 *************** *** 91,103 **** test case platform R B date reported --------- -------- - - ------------- - test_longexp Win98+? ? ? 15-Aug-2000 - [fails in release build, - passes in release build under verbose mode but doesn't - look like it should pass, - passes in debug build, - passes in debug build under verbose mode and looks like - it should pass - ] - test_winreg2 Win32 X X 26-Jul-2000 [still fails 15-Aug-2000 for me, on Win98 - tim --- 91,94 ---- *************** *** 133,136 **** --- 124,143 ---- [works 15-Aug-2000 for me, on Win98 - tim] + test_longexp Win98+? ? ? 15-Aug-2000 + [fails in release build, + passes in release build under verbose mode but doesn't + look like it should pass, + passes in debug build, + passes in debug build under verbose mode and looks like + it should pass + ] + [18-Aug-2000, tim: can't reproduce, and nobody else + saw it. I believe there *is* a subtle bug in + regrtest.py when using -v, and I'll pursue that, + but can't provoke anything wrong with test_longexp + anymore; eyeballing Fred's changes didn't turn up + a suspect either + ] + Open items -- should be done/fixed *************** *** 140,143 **** --- 147,152 ---- raised during hashing or comparison. + Decide what to do about os.path.commonprefix. Then do it. + Accepted and completed *************** *** 186,196 **** Add += and family, plus Python and C hooks, and API functions. - Open: proposed but not accepted or declined * Tim O'Malley's cookie module -- but need different license * test harness for C code - Trent Mick * Eliminated SET_LINENO opcode - Vladimir Marangozov Small optimization achieved by using the code object's lnotab --- 195,229 ---- Add += and family, plus Python and C hooks, and API functions. + * "import as" - Thomas Wouters + Extend the 'import' and 'from ... import' mechanism to enable + importing a symbol as another name. (Without adding a new keyword.) + + * Merge __getitem__ and __getslice__ - Thomas Wouters + Move __getslice__ functionality into __getitem__, using slice objects, + for normal slices as well as for extended ones. First step: use + getitem if there is no getslice. + Open: proposed but not accepted or rejected + * Tim O'Malley's cookie module -- but need different license * test harness for C code - Trent Mick + * Extended slicing on lists - Michael Hudson + Make lists (and other builtin types) handle extended slices. + + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries + + + Postponed + + * Extended print statement - Barry Warsaw + PEP 214 + http://python.sourceforge.net/peps/pep-0214.html + SF Patch #100970 + http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 + * Eliminated SET_LINENO opcode - Vladimir Marangozov Small optimization achieved by using the code object's lnotab *************** *** 209,239 **** - http://www.python.org/pipermail/python-dev/1999-August/002252.html - * "import as" - Thomas Wouters - Extend the 'import' and 'from ... import' mechanism to enable - importing a symbol as another name. (Without adding a new keyword.) - - * Extended slicing on lists - Michael Hudson - Make lists (and other builtin types) handle extended slices. ! * Merge __getitem__ and __getslice__ - Thomas Wouters ! Move __getslice__ functionality into __getitem__, using slice objects, ! for normal slices as well as for extended ones. First step: use ! getitem if there is no getslice. * 'indexing-for' - Thomas Wouters Special syntax to give Python code access to the loop-counter in 'for' loops. (Without adding a new keyword.) - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - - * Extended print statement - Barry Warsaw - PEP 214 - http://python.sourceforge.net/peps/pep-0214.html - SF Patch #100970 - http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 - - - Declined --- 242,251 ---- - http://www.python.org/pipermail/python-dev/1999-August/002252.html ! Rejected * 'indexing-for' - Thomas Wouters Special syntax to give Python code access to the loop-counter in 'for' loops. (Without adding a new keyword.) From python-dev@python.org Fri Aug 18 05:48:21 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:48:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyport.h,2.14,2.15 Message-ID: <200008180448.VAA25993@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv25985 Modified Files: pyport.h Log Message: Moved LONG_LONG #define from longobject.h to here, since it's needed by the following. typedef in a portable way the Python name for the C9X uintptr_t type. This latter is the most portable way to spell an integral type to which a void* can be cast to and back again without losing information. Parallel checkin hacks configure to check if the platform/compiler supports the C9X name. Index: pyport.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyport.h,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** pyport.h 2000/08/15 03:34:48 2.14 --- pyport.h 2000/08/18 04:48:18 2.15 *************** *** 29,36 **** --- 29,79 ---- Meaning: Extra checks compiled in for debug mode. Used in: Py_SAFE_DOWNCAST + + HAVE_UINTPTR_T + Meaning: The C9X type uintptr_t is supported by the compiler + Used in: Py_uintptr_t + + HAVE_LONG_LONG + Meaning: The compiler supports the C type "long long" + Used in: LONG_LONG + **************************************************************************/ #define ANY void /* For API compatibility only. Obsolete, do not use. */ + + /* typedefs for some C9X-defined synonyms for integral types. + * + * The names in Python are exactly the same as the C9X names, except with a + * Py_ prefix. Until C9X is universally implemented, this is the only way + * to ensure that Python gets reliable names that don't conflict with names + * in non-Python code that are playing their own tricks to define the C9X + * names. + * + * NOTE: don't go nuts here! Python has no use for *most* of the C9X + * integral synonyms. Only define the ones we actually need. + */ + + #ifdef HAVE_LONG_LONG + #ifndef LONG_LONG + #define LONG_LONG long long + #endif + #endif /* HAVE_LONG_LONG */ + + /* uintptr_t is the C9X name for an unsigned integral type such that a + * legitimate void* can be cast to uintptr_t and then back to void* again + * without loss of information. + */ + #ifdef HAVE_UINTPTR_T + typedef uintptr_t Py_uintptr_t; + #elif SIZEOF_VOID_P <= SIZEOF_INT + typedef unsigned int Py_uintptr_t; + #elif SIZEOF_VOID_P <= SIZEOF_LONG + typedef unsigned long Py_uintptr_t; + #elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P <= SIZEOF_LONG_LONG) + typedef unsigned LONG_LONG Py_uintptr_t; + #else + # error "Python needs a typedef for Py_uintptr_t in pyport.h." + #endif /* HAVE_UINTPTR_T */ #ifdef HAVE_STDLIB_H From python-dev@python.org Fri Aug 18 05:48:58 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:48:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include longobject.h,2.16,2.17 Message-ID: <200008180448.VAA26045@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv26035 Modified Files: longobject.h Log Message: Moved LONG_LONG #define from here to pyport.h. Index: longobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/longobject.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** longobject.h 2000/07/07 15:53:28 2.16 --- longobject.h 2000/08/18 04:48:56 2.17 *************** *** 51,57 **** #define ULONGLONG_MAX 0xffffffffffffffffULL #endif - #ifndef LONG_LONG - #define LONG_LONG long long - #endif extern DL_IMPORT(PyObject *) PyLong_FromLongLong(LONG_LONG); --- 51,54 ---- From python-dev@python.org Fri Aug 18 05:50:29 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:50:29 -0700 Subject: [Python-checkins] CVS: python/dist/src acconfig.h,1.33,1.34 Message-ID: <200008180450.VAA26150@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26140 Modified Files: acconfig.h Log Message: Added #undef HAVE_UINTPTR_T for autoconf's delight. Index: acconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/acconfig.h,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** acconfig.h 2000/07/09 14:39:28 1.33 --- acconfig.h 2000/08/18 04:50:27 1.34 *************** *** 60,63 **** --- 60,66 ---- #undef HAVE_LONG_LONG + /* Define this if you have the type uintptr_t */ + #undef HAVE_UINTPTR_T + /* Define if your compiler supports function prototypes */ #undef HAVE_PROTOTYPES From python-dev@python.org Fri Aug 18 05:53:35 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:53:35 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.66,2.67 configure,1.134,1.135 configure.in,1.145,1.146 Message-ID: <200008180453.VAA26378@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26329 Modified Files: config.h.in configure configure.in Log Message: Added test for uintptr_t, the C9X acceptable way to spell "type to which I can cast void* to and back again without losing information". In pyport.h, we typedef Py_uintptr_t to mean this thing, which if the platform supports, will be uintptr_t (otherwise, other accomodations are made). Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.66 retrieving revision 2.67 diff -C2 -r2.66 -r2.67 *** config.h.in 2000/08/17 11:41:06 2.66 --- config.h.in 2000/08/18 04:53:33 2.67 *************** *** 125,128 **** --- 125,131 ---- #undef HAVE_LONG_LONG + /* Define this if you have the type uintptr_t */ + #undef HAVE_UINTPTR_T + /* Define if your compiler supports function prototypes */ #undef HAVE_PROTOTYPES *************** *** 254,257 **** --- 257,263 ---- /* The number of bytes in a short. */ #undef SIZEOF_SHORT + + /* The number of bytes in a uintptr_t. */ + #undef SIZEOF_UINTPTR_T /* The number of bytes in a void *. */ Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.134 retrieving revision 1.135 diff -C2 -r1.134 -r1.135 *** configure 2000/08/17 11:41:06 1.134 --- configure 2000/08/18 04:53:33 1.135 *************** *** 2312,2318 **** fi # Hmph. AC_CHECK_SIZEOF() doesn't include . echo $ac_n "checking size of off_t""... $ac_c" 1>&6 ! echo "configure:2317: checking size of off_t" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2312,2383 ---- fi [...2606 lines suppressed...] echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5628: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5690,5699 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5693: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.145 retrieving revision 1.146 diff -C2 -r1.145 -r1.146 *** configure.in 2000/08/17 11:38:18 1.145 --- configure.in 2000/08/18 04:53:33 1.146 *************** *** 400,403 **** --- 400,411 ---- fi + AC_MSG_CHECKING(for uintptr_t support) + have_uintptr_t=no + AC_TRY_COMPILE([], [uintptr_t x; x = (uintptr_t)0;], AC_DEFINE(HAVE_UINTPTR_T) have_uintptr_t=yes) + AC_MSG_RESULT($have_uintptr_t) + if test "$have_uintptr_t" = yes ; then + AC_CHECK_SIZEOF(uintptr_t) + fi + # Hmph. AC_CHECK_SIZEOF() doesn't include . AC_MSG_CHECKING(size of off_t) From python-dev@python.org Fri Aug 18 05:57:34 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 21:57:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects classobject.c,2.103,2.104 Message-ID: <200008180457.VAA26668@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26660 Modified Files: classobject.c Log Message: PyInstance_DoBinOp(): When comparing the pointers, they must be cast to integer types (i.e. Py_uintptr_t, our spelling of C9X's uintptr_t). ANSI specifies that pointer compares other than == and != to non-related structures are undefined. This quiets an Insure portability warning. Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.103 retrieving revision 2.104 diff -C2 -r2.103 -r2.104 *** classobject.c 2000/08/17 22:37:32 2.103 --- classobject.c 2000/08/18 04:57:32 2.104 *************** *** 1208,1211 **** --- 1208,1212 ---- char buf[256]; PyObject *result = NULL; + if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0) return result; *************** *** 1214,1218 **** /* Sigh -- special case for comparisons */ if (strcmp(opname, "__cmp__") == 0) { ! long c = (v < w) ? -1 : (v > w) ? 1 : 0; return PyInt_FromLong(c); } --- 1215,1221 ---- /* Sigh -- special case for comparisons */ if (strcmp(opname, "__cmp__") == 0) { ! Py_uintptr_t iv = (Py_uintptr_t)v; ! Py_uintptr_t iw = (Py_uintptr_t)w; ! long c = (iv < iw) ? -1 : (iv > iw) ? 1 : 0; return PyInt_FromLong(c); } From python-dev@python.org Fri Aug 18 06:00:05 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:00:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects floatobject.c,2.67,2.68 Message-ID: <200008180500.WAA26878@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26829 Modified Files: floatobject.c Log Message: PyFloat_FromString(): Move s_buffer[] up to the top-level function scope. Previously, s_buffer[] was defined inside the PyUnicode_Check() scope, but referred to in the outer scope via assignment to s. This quiets an Insure portability warning. Index: floatobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v retrieving revision 2.67 retrieving revision 2.68 diff -C2 -r2.67 -r2.68 *** floatobject.c 2000/08/15 03:34:48 2.67 --- floatobject.c 2000/08/18 05:00:03 2.68 *************** *** 134,137 **** --- 134,138 ---- double x; char buffer[256]; /* For errors */ + char s_buffer[256]; int len; *************** *** 141,146 **** } else if (PyUnicode_Check(v)) { - char s_buffer[256]; - if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) { PyErr_SetString(PyExc_ValueError, --- 142,145 ---- From python-dev@python.org Fri Aug 18 06:01:22 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:01:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.95,2.96 Message-ID: <200008180501.WAA28237@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv28173 Modified Files: object.c Log Message: make_pair(): When comparing the pointers, they must be cast to integer types (i.e. Py_uintptr_t, our spelling of C9X's uintptr_t). ANSI specifies that pointer compares other than == and != to non-related structures are undefined. This quiets an Insure portability warning. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.95 retrieving revision 2.96 diff -C2 -r2.95 -r2.96 *** object.c 2000/08/16 12:24:51 2.95 --- object.c 2000/08/18 05:01:19 2.96 *************** *** 372,375 **** --- 372,377 ---- { PyObject *pair; + Py_uintptr_t iv = (Py_uintptr_t)v; + Py_uintptr_t iw = (Py_uintptr_t)w; pair = PyTuple_New(2); *************** *** 377,381 **** return NULL; } ! if (v <= w) { PyTuple_SET_ITEM(pair, 0, PyLong_FromVoidPtr((void *)v)); PyTuple_SET_ITEM(pair, 1, PyLong_FromVoidPtr((void *)w)); --- 379,383 ---- return NULL; } ! if (iv <= iw) { PyTuple_SET_ITEM(pair, 0, PyLong_FromVoidPtr((void *)v)); PyTuple_SET_ITEM(pair, 1, PyLong_FromVoidPtr((void *)w)); *************** *** 488,492 **** } if (vtp->tp_compare == NULL) { ! return (v < w) ? -1 : 1; } _PyCompareState_nesting++; --- 490,496 ---- } if (vtp->tp_compare == NULL) { ! Py_uintptr_t iv = (Py_uintptr_t)v; ! Py_uintptr_t iw = (Py_uintptr_t)w; ! return (iv < iw) ? -1 : 1; } _PyCompareState_nesting++; From python-dev@python.org Fri Aug 18 06:05:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:05:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python exceptions.c,1.15,1.16 Message-ID: <200008180505.WAA02635@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv2542 Modified Files: exceptions.c Log Message: SyntaxError__classinit__(): Slight reorg for simplicity. Index: exceptions.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** exceptions.c 2000/08/16 19:43:17 1.15 --- exceptions.c 2000/08/18 05:05:37 1.16 *************** *** 648,651 **** --- 648,652 ---- SyntaxError__classinit__(PyObject *klass) { + int retval = 0; PyObject *emptystring = PyString_FromString(""); *************** *** 658,666 **** PyObject_SetAttrString(klass, "text", Py_None)) { ! Py_XDECREF(emptystring); ! return -1; } ! Py_DECREF(emptystring); ! return 0; } --- 659,666 ---- PyObject_SetAttrString(klass, "text", Py_None)) { ! retval = -1; } ! Py_XDECREF(emptystring); ! return retval; } From python-dev@python.org Fri Aug 18 06:07:16 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:07:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _localemodule.c,2.15,2.16 Message-ID: <200008180507.WAA03090@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3081 Modified Files: _localemodule.c Log Message: init_locale(): This file defines the _locale module, so the Py_FatalError() should reflect that. Index: _localemodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_localemodule.c,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** _localemodule.c 2000/08/10 21:41:08 2.15 --- _localemodule.c 2000/08/18 05:07:12 2.16 *************** *** 455,458 **** if (PyErr_Occurred()) ! Py_FatalError("Can't initialize module locale"); } --- 455,458 ---- if (PyErr_Occurred()) ! Py_FatalError("Can't initialize module _locale"); } From python-dev@python.org Fri Aug 18 06:09:52 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:09:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.37,2.38 Message-ID: <200008180509.WAA03227@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3219 Modified Files: _sre.c Log Message: pattern_findall(): Plug small memory leak discovered by Insure. PyList_Append() always incref's the inserted item. Be sure to decref it regardless of whether the append succeeds or fails. Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.37 retrieving revision 2.38 diff -C2 -r2.37 -r2.38 *** _sre.c 2000/08/16 22:29:55 2.37 --- _sre.c 2000/08/18 05:09:50 2.38 *************** *** 1699,1706 **** } ! if (PyList_Append(list, item) < 0) { ! Py_DECREF(item); goto error; - } if (state.ptr == state.start) --- 1699,1706 ---- } ! status = PyList_Append(list, item); ! Py_DECREF(item); ! if (status < 0) goto error; if (state.ptr == state.start) From python-dev@python.org Fri Aug 18 06:02:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:02:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.175,2.176 Message-ID: <200008180502.WAA29681@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv29584 Modified Files: bltinmodule.c Log Message: comples_from_string(): Move s_buffer[] up to the top-level function scope. Previously, s_buffer[] was defined inside the PyUnicode_Check() scope, but referred to in the outer scope via assignment to s. This quiets an Insure portability warning. Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.175 retrieving revision 2.176 diff -C2 -r2.175 -r2.176 *** bltinmodule.c 2000/08/12 21:35:36 2.175 --- bltinmodule.c 2000/08/18 05:02:16 2.176 *************** *** 411,414 **** --- 411,415 ---- int sign; char buffer[256]; /* For errors */ + char s_buffer[256]; int len; *************** *** 418,423 **** } else if (PyUnicode_Check(v)) { - char s_buffer[256]; - if (PyUnicode_GET_SIZE(v) >= sizeof(s_buffer)) { PyErr_SetString(PyExc_ValueError, --- 419,422 ---- From python-dev@python.org Fri Aug 18 06:04:11 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:04:11 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser parsetok.c,2.23,2.24 Message-ID: <200008180504.WAA32383@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv32294 Modified Files: parsetok.c Log Message: PyParser_ParseString(): When the err_ret structure is initialized, the fields token and expected must also be initialized, otherwise the tests in parsetok() can generate uninitialized memory read errors. This quiets an Insure warning. Index: parsetok.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/parsetok.c,v retrieving revision 2.23 retrieving revision 2.24 diff -C2 -r2.23 -r2.24 *** parsetok.c 2000/07/22 19:20:54 2.23 --- parsetok.c 2000/08/18 05:04:08 2.24 *************** *** 37,40 **** --- 37,42 ---- err_ret->offset = 0; err_ret->text = NULL; + err_ret->token = -1; + err_ret->expected = -1; if ((tok = PyTokenizer_FromString(s)) == NULL) { From python-dev@python.org Fri Aug 18 06:13:49 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:13:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules puremodule.c,2.2,2.3 Message-ID: <200008180513.WAA03566@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3556 Modified Files: puremodule.c Log Message: ANSI-fy function headers. Not much more can be done since I don't have access to Purify anymore. Index: puremodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/puremodule.c,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** puremodule.c 2000/02/29 13:59:23 2.2 --- puremodule.c 2000/08/18 05:13:47 2.3 *************** *** 61,68 **** static PyObject* ! call_voidarg_function(func, self, args) ! VoidArgFunc func; ! PyObject *self; ! PyObject *args; { int status; --- 61,65 ---- [...1073 lines suppressed...] } static PyObject* ! pure_quantify_clear_data(PyObject *self, PyObject *args) { return call_voidarg_function(quantify_clear_data, self, args); } static PyObject* ! pure_quantify_save_data(PyObject *self, PyObject *args) { return call_voidarg_function(quantify_save_data, self, args); } static PyObject* ! pure_quantify_save_data_to_file(PyObject *self, PyObject *args) { return call_stringarg_function(quantify_save_data_to_file, self, args); } static PyObject* ! pure_quantify_add_annotation(PyObject *self, PyObject *args) { return call_stringarg_function(quantify_add_annotation, self, args); From python-dev@python.org Fri Aug 18 06:10:47 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 22:10:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules linuxaudiodev.c,2.5,2.6 Message-ID: <200008180510.WAA03322@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3312 Modified Files: linuxaudiodev.c Log Message: lad_dealloc(): if xp->x_fd == -1, it means the descriptor's already been closed. Don't try to reclose it. Found by Insure. Index: linuxaudiodev.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/linuxaudiodev.c,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -r2.5 -r2.6 *** linuxaudiodev.c 2000/07/21 06:00:07 2.5 --- linuxaudiodev.c 2000/08/18 05:10:45 2.6 *************** *** 111,115 **** lad_dealloc(lad_t *xp) { ! close(xp->x_fd); PyObject_Del(xp); } --- 111,117 ---- lad_dealloc(lad_t *xp) { ! /* if already closed, don't reclose it */ ! if (xp->x_fd != -1) ! close(xp->x_fd); PyObject_Del(xp); } From python-dev@python.org Fri Aug 18 07:58:18 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 17 Aug 2000 23:58:18 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.58,2.59 Message-ID: <200008180658.XAA17891@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv17882 Modified Files: unicodeobject.c Log Message: PyUnicode_AsUTF8String(): Don't need to explicitly incref str since PyUnicode_EncodeUTF8() already returns the created object with the proper reference count. This fixes an Insure reported memory leak. Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.58 retrieving revision 2.59 diff -C2 -r2.58 -r2.59 *** unicodeobject.c 2000/08/14 11:29:19 2.58 --- unicodeobject.c 2000/08/18 06:58:15 2.59 *************** *** 908,918 **** return NULL; } ! str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), ! PyUnicode_GET_SIZE(unicode), ! NULL); ! if (str == NULL) ! return NULL; ! Py_INCREF(str); ! return str; } --- 908,914 ---- return NULL; } ! return PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode), ! PyUnicode_GET_SIZE(unicode), ! NULL); } From python-dev@python.org Fri Aug 18 11:00:31 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 18 Aug 2000 03:00:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules cstubs,2.20,2.21 Message-ID: <200008181000.DAA04802@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv4479 Modified Files: cstubs Log Message: Removed references to Py_FPROTO. Index: cstubs =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/cstubs,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** cstubs 2000/06/30 23:58:05 2.20 --- cstubs 2000/08/18 10:00:28 2.21 *************** *** 110,114 **** int i, n, width; double vec[3]; ! PyObject * (*getitem) Py_FPROTO((PyObject *, int)); if (!PyArg_GetObject(args, 1, 0, &v)) --- 110,114 ---- int i, n, width; double vec[3]; ! PyObject * (*getitem)(PyObject *, int); if (!PyArg_GetObject(args, 1, 0, &v)) *************** *** 213,217 **** int i, n; float norm[3], vec[3]; ! PyObject * (*getitem) Py_FPROTO((PyObject *, int)); if (!PyArg_GetObject(args, 1, 0, &v)) --- 213,217 ---- int i, n; float norm[3], vec[3]; ! PyObject * (*getitem)(PyObject *, int); if (!PyArg_GetObject(args, 1, 0, &v)) From python-dev@python.org Fri Aug 18 15:50:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 07:50:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_unpack.py,1.2,1.3 test_rgbimg.py,1.8,1.9 Message-ID: <200008181450.HAA22210@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv22192 Modified Files: test_unpack.py test_rgbimg.py Log Message: Convert some old-style string exceptions to class exceptions. Index: test_unpack.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_unpack.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_unpack.py 1998/03/26 19:42:58 1.2 --- test_unpack.py 2000/08/18 14:50:20 1.3 *************** *** 101,105 **** # unpacking a sequence where the test for too long raises a different # kind of error ! BozoError = 'BozoError' class BadSeq: --- 101,106 ---- # unpacking a sequence where the test for too long raises a different # kind of error ! class BozoError(Exception): ! pass class BadSeq: Index: test_rgbimg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_rgbimg.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** test_rgbimg.py 1998/04/23 20:13:23 1.8 --- test_rgbimg.py 2000/08/18 14:50:20 1.9 *************** *** 5,9 **** from test_support import verbose, unlink, findfile ! error = 'test_rgbimg.error' print 'RGBimg test suite:' --- 5,10 ---- from test_support import verbose, unlink, findfile ! class error(Exception): ! pass print 'RGBimg test suite:' From python-dev@python.org Fri Aug 18 15:59:47 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 07:59:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-irix6 flp.py,1.5,1.6 jpeg.py,1.2,1.3 readcd.py,1.1,1.2 torgb.py,1.1,1.2 Message-ID: <200008181459.HAA23244@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-irix6 In directory slayer.i.sourceforge.net:/tmp/cvs-serv23221/plat-irix6 Modified Files: flp.py jpeg.py readcd.py torgb.py Log Message: Convert some old-style string exceptions to class exceptions. Index: flp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/flp.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** flp.py 2000/06/28 14:48:01 1.5 --- flp.py 2000/08/18 14:59:32 1.6 *************** *** 13,17 **** ENDLINE = '==============================' ! error = 'flp.error' ################################################################## --- 13,18 ---- ENDLINE = '==============================' ! class error(Exception): ! pass ################################################################## Index: jpeg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/jpeg.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** jpeg.py 1998/08/07 15:28:23 1.2 --- jpeg.py 2000/08/18 14:59:33 1.3 *************** *** 6,10 **** # XXX the resulting file causes weirdness. ! error = 'jpeg.error' # Exception options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} --- 6,11 ---- # XXX the resulting file causes weirdness. ! class error(Exception): ! pass options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} Index: readcd.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/readcd.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** readcd.py 1997/01/15 19:19:15 1.1 --- readcd.py 2000/08/18 14:59:33 1.2 *************** *** 3,8 **** import cd, CD ! Error = 'Readcd.Error' ! _Stop = 'Readcd.Stop' def _doatime(self, cb_type, data): --- 3,10 ---- import cd, CD ! class Error(Exception): ! pass ! class _Stop(Exception): ! pass def _doatime(self, cb_type, data): Index: torgb.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix6/torgb.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** torgb.py 1997/01/15 19:19:19 1.1 --- torgb.py 2000/08/18 14:59:33 1.2 *************** *** 51,55 **** ! error = 'torgb.error' # Exception def torgb(filename): --- 51,56 ---- ! class error(Exception): ! pass def torgb(filename): From python-dev@python.org Fri Aug 18 15:57:31 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 07:57:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-irix5 flp.py,1.18,1.19 jpeg.py,1.2,1.3 readcd.py,1.10,1.11 torgb.py,1.4,1.5 Message-ID: <200008181457.HAA22927@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-irix5 In directory slayer.i.sourceforge.net:/tmp/cvs-serv22917/plat-irix5 Modified Files: flp.py jpeg.py readcd.py torgb.py Log Message: Convert some old-style string exceptions to class exceptions. Index: flp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/flp.py,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** flp.py 2000/06/28 14:48:01 1.18 --- flp.py 2000/08/18 14:57:26 1.19 *************** *** 13,17 **** ENDLINE = '==============================' ! error = 'flp.error' ################################################################## --- 13,18 ---- ENDLINE = '==============================' ! class error(Exception): ! pass ################################################################## Index: jpeg.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/jpeg.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** jpeg.py 1998/08/07 15:28:06 1.2 --- jpeg.py 2000/08/18 14:57:26 1.3 *************** *** 6,10 **** # XXX the resulting file causes weirdness. ! error = 'jpeg.error' # Exception options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} --- 6,11 ---- # XXX the resulting file causes weirdness. ! class error(Exception): ! pass options = {'quality': 75, 'optimize': 0, 'smooth': 0, 'forcegray': 0} Index: readcd.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/readcd.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** readcd.py 1995/02/01 14:24:32 1.10 --- readcd.py 2000/08/18 14:57:26 1.11 *************** *** 3,8 **** import cd, CD ! Error = 'Readcd.Error' ! _Stop = 'Readcd.Stop' def _doatime(self, cb_type, data): --- 3,10 ---- import cd, CD ! class Error(Exception): ! pass ! class _Stop(Exception): ! pass def _doatime(self, cb_type, data): Index: torgb.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-irix5/torgb.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** torgb.py 1993/12/17 15:25:22 1.4 --- torgb.py 2000/08/18 14:57:26 1.5 *************** *** 51,55 **** ! error = 'torgb.error' # Exception def torgb(filename): --- 51,56 ---- ! class error(Exception): ! pass def torgb(filename): From python-dev@python.org Fri Aug 18 16:21:48 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 18 Aug 2000 08:21:48 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0222.txt,NONE,1.1 pep-0000.txt,1.23,1.24 Message-ID: <200008181521.IAA00777@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv512 Modified Files: pep-0000.txt Added Files: pep-0222.txt Log Message: Added PEP 222, Web Library Enhancements, assigned to akuchlin. ***** Error reading new file(2, 'No such file or directory') Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** pep-0000.txt 2000/08/17 03:19:42 1.23 --- pep-0000.txt 2000/08/18 15:21:45 1.24 *************** *** 47,51 **** I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm S 221 pep-0221.txt Import As twouters ! Key --- 47,51 ---- I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm S 221 pep-0221.txt Import As twouters ! S 222 pep-0222.txt Web Library Enhancements akuchlin Key From python-dev@python.org Fri Aug 18 16:50:57 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 08:50:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib threading.py,1.8,1.9 Message-ID: <200008181550.IAA07349@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv7336/Lib Modified Files: threading.py Log Message: Revise to use atexit instead of monkeying with sys.exitfunc directly. Index: threading.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/threading.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** threading.py 2000/06/01 01:17:17 1.8 --- threading.py 2000/08/18 15:50:54 1.9 *************** *** 463,471 **** _active[_get_ident()] = self _active_limbo_lock.release() ! try: ! self.__oldexitfunc = _sys.exitfunc ! except AttributeError: ! self.__oldexitfunc = None ! _sys.exitfunc = self.__exitfunc def _set_daemon(self): --- 463,468 ---- _active[_get_ident()] = self _active_limbo_lock.release() ! import atexit ! atexit.register(self.__exitfunc) def _set_daemon(self): *************** *** 481,488 **** t.join() t = _pickSomeNonDaemonThread() - if self.__oldexitfunc: - if __debug__: - self._note("%s: calling exit handler", self) - self.__oldexitfunc() if __debug__: self._note("%s: exiting", self) --- 478,481 ---- From python-dev@python.org Fri Aug 18 17:04:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 09:04:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test regrtest.py,1.22,1.23 Message-ID: <200008181604.JAA11140@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv11112/Lib/test Modified Files: regrtest.py Log Message: When a KeyboardInterrupt is caught, just use the "raise" syntax to re-raise it instead of re-raising it "manually" the ugly way. Index: regrtest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/regrtest.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** regrtest.py 2000/08/11 19:02:58 1.22 --- regrtest.py 2000/08/18 16:04:05 1.23 *************** *** 235,240 **** print "skipped -- ", msg return -1 ! except KeyboardInterrupt, v: ! raise KeyboardInterrupt, v, sys.exc_info()[2] except test_support.TestFailed, msg: print "test", test, "failed --", msg --- 235,240 ---- print "skipped -- ", msg return -1 ! except KeyboardInterrupt: ! raise except test_support.TestFailed, msg: print "test", test, "failed --", msg From python-dev@python.org Fri Aug 18 17:09:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 09:09:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_re.py,1.24,1.25 Message-ID: <200008181609.JAA13044@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv13013/Lib/test Modified Files: test_re.py Log Message: Better conformance to the Python Style Guide: use spaces around operators. Index: test_re.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** test_re.py 2000/08/08 17:06:52 1.24 --- test_re.py 2000/08/18 16:09:56 1.25 *************** *** 1,4 **** import sys ! sys.path=['.']+sys.path from test_support import verbose, TestFailed --- 1,4 ---- import sys ! sys.path = ['.'] + sys.path from test_support import verbose, TestFailed *************** *** 271,286 **** for t in tests: sys.stdout.flush() ! pattern=s=outcome=repl=expected=None ! if len(t)==5: pattern, s, outcome, repl, expected = t ! elif len(t)==3: pattern, s, outcome = t else: ! raise ValueError, ('Test tuples should have 3 or 5 fields',t) try: ! obj=re.compile(pattern) except re.error: ! if outcome==SYNTAX_ERROR: pass # Expected a syntax error else: print '=== Syntax error:', t --- 271,286 ---- for t in tests: sys.stdout.flush() ! pattern = s = outcome = repl = expected = None ! if len(t) == 5: pattern, s, outcome, repl, expected = t ! elif len(t) == 3: pattern, s, outcome = t else: ! raise ValueError, ('Test tuples should have 3 or 5 fields', t) try: ! obj = re.compile(pattern) except re.error: ! if outcome == SYNTAX_ERROR: pass # Expected a syntax error else: print '=== Syntax error:', t *************** *** 292,305 **** else: try: ! result=obj.search(s) ! except (re.error), msg: print '=== Unexpected exception', t, repr(msg) ! if outcome==SYNTAX_ERROR: # This should have been a syntax error; forget it. pass ! elif outcome==FAIL: if result is None: pass # No match, as expected else: print '=== Succeeded incorrectly', t ! elif outcome==SUCCEED: if result is not None: # Matched, as expected, so now we compute the --- 292,305 ---- else: try: ! result = obj.search(s) ! except re.error, msg: print '=== Unexpected exception', t, repr(msg) ! if outcome == SYNTAX_ERROR: # This should have been a syntax error; forget it. pass ! elif outcome == FAIL: if result is None: pass # No match, as expected else: print '=== Succeeded incorrectly', t ! elif outcome == SUCCEED: if result is not None: # Matched, as expected, so now we compute the *************** *** 326,333 **** gi = "Error" vardict[i] = gi ! repl=eval(repl, vardict) ! if repl!=expected: print '=== grouping error', t, ! print repr(repl)+' should be '+repr(expected) else: print '=== Failed incorrectly', t --- 326,333 ---- gi = "Error" vardict[i] = gi ! repl = eval(repl, vardict) ! if repl != expected: print '=== grouping error', t, ! print repr(repl) + ' should be ' + repr(expected) else: print '=== Failed incorrectly', t *************** *** 335,340 **** # Try the match on a unicode string, and check that it # still succeeds. ! result=obj.search(unicode(s, "latin-1")) ! if result==None: print '=== Fails on unicode match', t --- 335,340 ---- # Try the match on a unicode string, and check that it # still succeeds. ! result = obj.search(unicode(s, "latin-1")) ! if result == None: print '=== Fails on unicode match', t *************** *** 342,347 **** # still succeeds. obj=re.compile(unicode(pattern, "latin-1")) ! result=obj.search(s) ! if result==None: print '=== Fails on unicode pattern match', t --- 342,347 ---- # still succeeds. obj=re.compile(unicode(pattern, "latin-1")) ! result = obj.search(s) ! if result == None: print '=== Fails on unicode pattern match', t *************** *** 351,378 **** # string), so we'll ignore patterns that feature it. ! if pattern[:2]!='\\B' and pattern[-2:]!='\\B' and result!=None: ! obj=re.compile(pattern) ! result=obj.search(s, result.start(0), result.end(0)+1) ! if result==None: print '=== Failed on range-limited match', t # Try the match with IGNORECASE enabled, and check that it # still succeeds. ! obj=re.compile(pattern, re.IGNORECASE) ! result=obj.search(s) ! if result==None: print '=== Fails on case-insensitive match', t # Try the match with LOCALE enabled, and check that it # still succeeds. ! obj=re.compile(pattern, re.LOCALE) ! result=obj.search(s) ! if result==None: print '=== Fails on locale-sensitive match', t # Try the match with UNICODE locale enabled, and check # that it still succeeds. ! obj=re.compile(pattern, re.UNICODE) ! result=obj.search(s) ! if result==None: print '=== Fails on unicode-sensitive match', t --- 351,379 ---- # string), so we'll ignore patterns that feature it. ! if pattern[:2] != '\\B' and pattern[-2:] != '\\B' \ ! and result != None: ! obj = re.compile(pattern) ! result = obj.search(s, result.start(0), result.end(0) + 1) ! if result == None: print '=== Failed on range-limited match', t # Try the match with IGNORECASE enabled, and check that it # still succeeds. ! obj = re.compile(pattern, re.IGNORECASE) ! result = obj.search(s) ! if result == None: print '=== Fails on case-insensitive match', t # Try the match with LOCALE enabled, and check that it # still succeeds. ! obj = re.compile(pattern, re.LOCALE) ! result = obj.search(s) ! if result == None: print '=== Fails on locale-sensitive match', t # Try the match with UNICODE locale enabled, and check # that it still succeeds. ! obj = re.compile(pattern, re.UNICODE) ! result = obj.search(s) ! if result == None: print '=== Fails on unicode-sensitive match', t From python-dev@python.org Fri Aug 18 19:01:09 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Fri, 18 Aug 2000 11:01:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python errors.c,2.51,2.52 Message-ID: <200008181801.LAA02631@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv1835 Modified Files: errors.c Log Message: Do not set a MemoryError exception over another MemoryError exception, thus preserving the first one that has been raised. Index: errors.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v retrieving revision 2.51 retrieving revision 2.52 diff -C2 -r2.51 -r2.52 *** errors.c 2000/08/07 19:18:27 2.51 --- errors.c 2000/08/18 18:01:06 2.52 *************** *** 239,242 **** --- 239,246 ---- PyErr_NoMemory(void) { + if (PyErr_ExceptionMatches(PyExc_MemoryError)) + /* already current */ + return NULL; + /* raise the pre-allocated instance if it still exists */ if (PyExc_MemoryErrorInst) From python-dev@python.org Fri Aug 18 20:30:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 18 Aug 2000 12:30:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.59,2.60 Message-ID: <200008181930.MAA26031@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv26020 Modified Files: unicodeobject.c Log Message: PyUnicode_AsUTF8String(): /F picks up what I missed: the local var `str' is no longer necessary. Gotta turn on -Wall! Index: unicodeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v retrieving revision 2.59 retrieving revision 2.60 diff -C2 -r2.59 -r2.60 *** unicodeobject.c 2000/08/18 06:58:15 2.59 --- unicodeobject.c 2000/08/18 19:30:40 2.60 *************** *** 902,907 **** PyObject *PyUnicode_AsUTF8String(PyObject *unicode) { - PyObject *str; - if (!PyUnicode_Check(unicode)) { PyErr_BadArgument(); --- 902,905 ---- From python-dev@python.org Fri Aug 18 20:59:22 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 18 Aug 2000 12:59:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.127,2.128 Message-ID: <200008181959.MAA28049@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv28040 Modified Files: compile.c Log Message: com_error(): Quiet gcc -Wall warning. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.127 retrieving revision 2.128 diff -C2 -r2.127 -r2.128 *** compile.c 2000/08/17 22:55:00 2.127 --- compile.c 2000/08/18 19:59:20 2.128 *************** *** 304,308 **** com_error(struct compiling *c, PyObject *exc, char *msg) { - size_t n = strlen(msg); PyObject *v, *tb, *tmp; c->c_errors++; --- 304,307 ---- From python-dev@python.org Fri Aug 18 20:53:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 12:53:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.190,2.191 exceptions.c,1.16,1.17 Message-ID: <200008181953.MAA27592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv27584 Modified Files: ceval.c exceptions.c Log Message: Remove a couple of warnings turned up by "gcc -Wall". Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.190 retrieving revision 2.191 diff -C2 -r2.190 -r2.191 *** ceval.c 2000/08/17 22:55:00 2.190 --- ceval.c 2000/08/18 19:53:25 2.191 *************** *** 2857,2862 **** Py_DECREF(list); else { ! if (PyList_Append(list, name) < 0) Py_DECREF(list); Py_DECREF(name); } --- 2857,2863 ---- Py_DECREF(list); else { ! if (PyList_Append(list, name) < 0) { Py_DECREF(list); + } Py_DECREF(name); } Index: exceptions.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** exceptions.c 2000/08/18 05:05:37 1.16 --- exceptions.c 2000/08/18 19:53:25 1.17 *************** *** 794,798 **** if (buffer != NULL) { if (have_filename && have_lineno) ! sprintf(buffer, "%s (%s, line %d)", PyString_AS_STRING(str), my_basename(PyString_AS_STRING(filename)), --- 794,798 ---- if (buffer != NULL) { if (have_filename && have_lineno) ! sprintf(buffer, "%s (%s, line %ld)", PyString_AS_STRING(str), my_basename(PyString_AS_STRING(filename)), *************** *** 803,807 **** my_basename(PyString_AS_STRING(filename))); else if (have_lineno) ! sprintf(buffer, "%s (line %d)", PyString_AS_STRING(str), PyInt_AsLong(lineno)); --- 803,807 ---- my_basename(PyString_AS_STRING(filename))); else if (have_lineno) ! sprintf(buffer, "%s (line %ld)", PyString_AS_STRING(str), PyInt_AsLong(lineno)); From python-dev@python.org Fri Aug 18 21:26:50 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 18 Aug 2000 13:26:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.15,1.16 Message-ID: <200008182026.NAA05678@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv5669 Modified Files: pep-0200.txt Log Message: Clarify the what the xrange representation issue was. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** pep-0200.txt 2000/08/18 04:25:33 1.15 --- pep-0200.txt 2000/08/18 20:26:47 1.16 *************** *** 158,162 **** * Fix xrange printing behavior - Fred Drake ! [although I'm not sure what this one was talking about - tim] --- 158,167 ---- * Fix xrange printing behavior - Fred Drake ! Remove the tp_print handler for the xrange type; it produced a ! list display instead of 'xrange(...)'. The new code produces a ! minimal call to xrange(), enclosed in (... * N) when N != 1. ! This makes the repr() more human readable while making it do ! what reprs are advertised as doing. It also makes the xrange ! objects obvious when working in the interactive interpreter. From python-dev@python.org Sat Aug 19 14:01:22 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 06:01:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib Cookie.py,NONE,1.1 Message-ID: <200008191301.GAA23969@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22828 Added Files: Cookie.py Log Message: Added Tim O'Malley's Cookie.py module (master version at http://www.timo-tasi.org/python/Cookie.py) This is revision 2.26 according to Tim's RCS history. ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Sat Aug 19 15:11:44 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 19 Aug 2000 07:11:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcookie.tex,NONE,1.1 Message-ID: <200008191411.HAA12685@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12204 Added Files: libcookie.tex Log Message: Initial revision. Markup unchecked. --- NEW FILE --- \section{\module{Cookie} --- RFC2109 HTTP State Management (AKA Cookies) Support} \declaremodule{standard}{Cookie} \moduleauthor{Timothy O'Malley}{timo@alum.mit.edu} \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} \modulesynopsis{Support HTTP State Management (Cookies)} The \module{Cookie} module defines classes for abstracting the concept of Cookies, an HTTP state management mechanism. It supports both simplistic string-only cookies, and provides an abstraction for having any serializable data-type as cookie value. \subsection{Example \label{cookie-example}} The following example demonstrates how to open a can of spam using the \module{spam} module. \begin{verbatim} >>> import Cookie >>> C = Cookie.SimpleCookie() >>> C = Cookie.SerialCookie() >>> C = Cookie.SmartCookie() >>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie >>> C = Cookie.SmartCookie() >>> C["fig"] = "newton" >>> C["sugar"] = "wafer" >>> C # generate HTTP headers Set-Cookie: sugar=wafer; Set-Cookie: fig=newton; >>> C = Cookie.SmartCookie() >>> C["rocky"] = "road" >>> C["rocky"]["path"] = "/cookie" >>> print C.output(header="Cookie:") Cookie: rocky=road; Path=/cookie; >>> print C.output(attrs=[], header="Cookie:") Cookie: rocky=road; >>> C = Cookie.SmartCookie() >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header) >>> C Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; >>> C = Cookie.SmartCookie() >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') >>> C Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; >>> C = Cookie.SmartCookie() >>> C["oreo"] = "doublestuff" >>> C["oreo"]["path"] = "/" >>> C Set-Cookie: oreo="doublestuff"; Path=/; >>> C = Cookie.SmartCookie() >>> C["twix"] = "none for you" >>> C["twix"].value 'none for you' >>> C = Cookie.SimpleCookie() >>> C["number"] = 7 # equivalent to C["number"] = str(7) >>> C["string"] = "seven" >>> C["number"].value '7' >>> C["string"].value 'seven' >>> C Set-Cookie: number=7; Set-Cookie: string=seven; >>> C = Cookie.SerialCookie() >>> C["number"] = 7 >>> C["string"] = "seven" >>> C["number"].value 7 >>> C["string"].value 'seven' >>> C Set-Cookie: number="I7\012."; Set-Cookie: string="S'seven'\012p1\012."; >>> C = Cookie.SmartCookie() >>> C["number"] = 7 >>> C["string"] = "seven" >>> C["number"].value 7 >>> C["string"].value 'seven' >>> C Set-Cookie: number="I7\012."; Set-Cookie: string=seven; \end{verbatim} \begin{excdesc}{CookieError} Exception failing because of RFC2109 invalidity: incorrect attributes, incorrect \code{Set-Cookie} header, etc. \end{excdesc} %\subsection{Morsel Objects} %\label{morsel-objects} \begin{classdesc}{Morsel}{} Abstract a key/value pair, which has some RFC2109 attributes. Morsels are dictionary-like objects, whose set of keys is constant --- the valid RFC2109 attributes, which are \begin{itemize} \item \code{expires} \item \code{path} \item \code{comment} \item \code{domain} \item \code{max-age} \item \code{secure} \item \code{version} \end{itemize} \end{itemize} The keys are case-insensitive. \end{classdesc} \begin{memberdesc}[Morsel]{value} The value of the cookie. \end{methoddesc} \begin{memberdesc}[Morsel]{coded_value} The encoded value of the cookie --- this is what should be sent. \end{methoddesc} \begin{memberdesc}[Morsel]{key} The name of the cookie. \end{methoddesc} \begin{methodesc}[Morsel]{set}{key, value, coded_value} Set the \var{key}, \var{value} and \var{coded_value} members. \end{methoddesc} \begin{methoddesc}[Morsel]{isReservedKey}{K} Whether \var{K} is a member of the set of keys of a \class{Morsel}. \end{methoddesc} \begin{methoddesc}[Morsel]{output}{\opt{attrs, \opt{header}} Return a string representation of the Morsel, suitable to be sent as an HTTP header. By default, all the attributes are included, unless \var{attrs} is given, in which case it should be a list of attributes to use. \var{header} is by default \code{"Set-Cookie:"}. \end{methoddesc} \begin{methoddesc}[Morsel]{js_output}{\opt{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP header was sent. The meaning for \var{attrs} is the same as in \method{output()}. \end{methoddesc}. \begin{methoddesc}[Morsel]{OutputString}{\opt{attrs}} Return a string representing the Morsel, without any surrounding HTTP or JavaScript. The meaning for \var{attrs} is the same as in \method{output()}. \end{methoddesc} # This used to be strict parsing based on the RFC2109 and RFC2068 # specifications. I have since discovered that MSIE 3.0x doesn't # follow the character rules outlined in those specs. As a # result, the parsing rules here are less strict. \begin{classdesc}{BaseCookie}{\opt{input}} This class is a dictionary-like object whose keys are strings and whose values are \class{Morsel}s. Note that upon setting a key to a value, the value is first converted to a \class{Morsel} containing the key and the value. If \var{input} is given, it is passed to the \method{load} method. \end{classdesc} \begin{methoddesc}[BaseCookie]{value_decode}{val} Return a decoded value from a string representation. Return value can be any type. This method does nothing in \class{BaseCookie} --- it exists so it can be overridden. \end{methoddesc} \begin{methoddesc}[BaseCookie]{value_encode}{val} Return an encoded value. \var{val} can be any type, but return value must be a string. This method does nothing in \class{BaseCookie} --- it exists so it can be overridden In general, it should be the case that \method{value_encode} and \method{value_decode} are inverses on the range of \var{value_decode}. \end{methoddesc}. \begin{methoddesc}[BaseCookie]{output}{\opt{attrs\opt{, header\opt{, sep}}}} Return a string representation suitable to be sent as HTTP headers. \var{attrs} and \var{header} are sent to each \class{Morsel}'s \method{output} method. \var{sep} is used to join the headers together, and is by default a newline. \end{methoddesc} \begin{methoddesc}[BaseCookie]{js_output}{\opt{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP headers was sent. The meaning for \var{attrs} is the same as in \method{output()}. \end{methoddesc} \begin{methoddesc}[BaseCookie]{load}{rawdata} If \var{rawdata} is a string, parse it as an \code{HTTP_COOKIE} and add the values found there as \class{Morsel}s. If it is a dictionary, it is equivalent to calling \begin{verbatim} map(BaseCookie.__setitem__, rawdata.keys(), rawdata.values()) \end{varbatim} \end{methoddesc} \begin{classdesc}{SimpleCookie}{\opt{input}} This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the identity and \function{str()} respectively. \end{classdesc} \begin{classdesc}{SerialCookie}{\opt{input}} This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the \function{pickle.loads()} and \function{pickle.dumps}. Note that using this class is a security hole, as arbitrary client-code can be run on \function{pickle.loads()}. \end{classdesc} \begin{classdesc}{SmartCookie}{\opt{input}} This class derives from \class{BaseCookie}. It overrides \method{value_decode} to be \function{pickle.loads()} if it is a valid pickle, and otherwise the value itself. It overrides \method{value_encode} to be \function{pickle.dumps()} unless it is a string, in which case it returns the value itself. The same security warning from \class{SerialCookie} applies here. \end{classdesc} From python-dev@python.org Sat Aug 19 16:21:15 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 08:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cookie,NONE,1.1 Message-ID: <200008191521.IAA01091@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv963/output Added Files: test_cookie Log Message: Test case for Cookie.py --- NEW FILE --- test_cookie Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; vienna 'finger' 'finger' chips 'ahoy' 'ahoy' Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; keebler 'E=mc2; L="Loves"; fudge=\012;' 'E=mc2; L="Loves"; fudge=\012;' From python-dev@python.org Sat Aug 19 16:21:15 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 08:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cookie.py,NONE,1.1 Message-ID: <200008191521.IAA01092@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv963 Added Files: test_cookie.py Log Message: Test case for Cookie.py --- NEW FILE --- # Simple test suite for Cookie.py import Cookie # Currently this only tests SimpleCookie cases = [ ('chips=ahoy; vienna=finger', {'chips':'ahoy', 'vienna':'finger'}), ('keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;";', {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}), ] for data, dict in cases: C = Cookie.SimpleCookie() ; C.load(data) print C for k, v in dict.items(): print ' ', k, repr( C[k].value ), repr(v) assert C[k].value == v C = Cookie.SimpleCookie() C.load('Customer="WILE_E_COYOTE"; Version=1; Path=/acme') assert C['Customer'].value == 'WILE_E_COYOTE' assert C['Customer']['version'] == '1' assert C['Customer']['path'] == '/acme' From python-dev@python.org Sat Aug 19 16:36:44 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sat, 19 Aug 2000 08:36:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules xxmodule.c,2.20,2.21 Message-ID: <200008191536.IAA04063@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv4028 Modified Files: xxmodule.c Log Message: Use METH_VARARGS constant in example module. Fix comment typo Index: xxmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/xxmodule.c,v retrieving revision 2.20 retrieving revision 2.21 diff -C2 -r2.20 -r2.21 *** xxmodule.c 2000/07/21 06:00:07 2.20 --- xxmodule.c 2000/08/19 15:36:41 2.21 *************** *** 10,14 **** /* Use this file as a template to start implementing a module that ! also declares objects types. All occurrences of 'Xxo' should be changed to something reasonable for your objects. After that, all other occurrences of 'xx' should be changed to something reasonable for your --- 10,14 ---- /* Use this file as a template to start implementing a module that ! also declares object types. All occurrences of 'Xxo' should be changed to something reasonable for your objects. After that, all other occurrences of 'xx' should be changed to something reasonable for your *************** *** 67,71 **** static PyMethodDef Xxo_methods[] = { ! {"demo", (PyCFunction)Xxo_demo, 1}, {NULL, NULL} /* sentinel */ }; --- 67,71 ---- static PyMethodDef Xxo_methods[] = { ! {"demo", (PyCFunction)Xxo_demo, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; *************** *** 192,199 **** static PyMethodDef xx_methods[] = { ! {"roj", xx_roj, 1}, ! {"foo", xx_foo, 1}, ! {"new", xx_new, 1}, ! {"bug", xx_bug, 1}, {NULL, NULL} /* sentinel */ }; --- 192,199 ---- static PyMethodDef xx_methods[] = { ! {"roj", xx_roj, METH_VARARGS}, ! {"foo", xx_foo, METH_VARARGS}, ! {"new", xx_new, METH_VARARGS}, ! {"bug", xx_bug, METH_VARARGS}, {NULL, NULL} /* sentinel */ }; From python-dev@python.org Sat Aug 19 16:57:35 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 19 Aug 2000 08:57:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cookie,1.1,1.2 Message-ID: <200008191557.IAA05785@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv5727/Lib/test/output Modified Files: test_cookie Log Message: Adding tests of the "attrs" optional argument, and of the js_output functionality. Index: test_cookie =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_cookie,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_cookie 2000/08/19 15:21:12 1.1 --- test_cookie 2000/08/19 15:57:33 1.2 *************** *** 6,7 **** --- 6,22 ---- Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; keebler 'E=mc2; L="Loves"; fudge=\012;' 'E=mc2; L="Loves"; fudge=\012;' + Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme; + + + + + + From python-dev@python.org Sat Aug 19 16:57:35 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 19 Aug 2000 08:57:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cookie.py,1.1,1.2 Message-ID: <200008191557.IAA05782@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv5727/Lib/test Modified Files: test_cookie.py Log Message: Adding tests of the "attrs" optional argument, and of the js_output functionality. Index: test_cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_cookie.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_cookie.py 2000/08/19 15:21:11 1.1 --- test_cookie.py 2000/08/19 15:57:32 1.2 *************** *** 25,26 **** --- 25,31 ---- assert C['Customer']['version'] == '1' assert C['Customer']['path'] == '/acme' + + print C.output(['path']) + print C.js_output() + print C.js_output(['path']) + From python-dev@python.org Sat Aug 19 17:55:00 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 19 Aug 2000 09:55:00 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcookie.tex,1.1,1.2 Message-ID: <200008191655.JAA17670@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17651/lib Modified Files: libcookie.tex Log Message: Make it format. Adjust markup for hyperlinking to the relevant RFCs. Give it a little organization. Minor nits. Index: libcookie.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcookie.tex,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** libcookie.tex 2000/08/19 14:11:41 1.1 --- libcookie.tex 2000/08/19 16:54:57 1.2 *************** *** 1,10 **** \section{\module{Cookie} --- ! RFC2109 HTTP State Management (AKA Cookies) Support} ! \declaremodule{standard}{Cookie} \moduleauthor{Timothy O'Malley}{timo@alum.mit.edu} \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} - \modulesynopsis{Support HTTP State Management (Cookies)} The \module{Cookie} module defines classes for abstracting the concept of --- 1,10 ---- \section{\module{Cookie} --- ! HTTP state management} + \declaremodule{standard}{Cookie} + \modulesynopsis{Support for HTTP state management (cookies).} \moduleauthor{Timothy O'Malley}{timo@alum.mit.edu} \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} The \module{Cookie} module defines classes for abstracting the concept of *************** *** 13,174 **** data-type as cookie value. - \subsection{Example \label{cookie-example}} - - The following example demonstrates how to open a can of spam using the - \module{spam} module. - - \begin{verbatim} - >>> import Cookie - >>> C = Cookie.SimpleCookie() - >>> C = Cookie.SerialCookie() - >>> C = Cookie.SmartCookie() - >>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie - >>> C = Cookie.SmartCookie() - >>> C["fig"] = "newton" - >>> C["sugar"] = "wafer" - >>> C # generate HTTP headers - Set-Cookie: sugar=wafer; - Set-Cookie: fig=newton; - >>> C = Cookie.SmartCookie() - >>> C["rocky"] = "road" - >>> C["rocky"]["path"] = "/cookie" - >>> print C.output(header="Cookie:") - Cookie: rocky=road; Path=/cookie; - >>> print C.output(attrs=[], header="Cookie:") - Cookie: rocky=road; - >>> C = Cookie.SmartCookie() - >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header) - >>> C - Set-Cookie: vienna=finger; - Set-Cookie: chips=ahoy; - >>> C = Cookie.SmartCookie() - >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') - >>> C - Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; - >>> C = Cookie.SmartCookie() - >>> C["oreo"] = "doublestuff" - >>> C["oreo"]["path"] = "/" - >>> C - Set-Cookie: oreo="doublestuff"; Path=/; - >>> C = Cookie.SmartCookie() - >>> C["twix"] = "none for you" - >>> C["twix"].value - 'none for you' - >>> C = Cookie.SimpleCookie() - >>> C["number"] = 7 # equivalent to C["number"] = str(7) - >>> C["string"] = "seven" - >>> C["number"].value - '7' - >>> C["string"].value - 'seven' - >>> C - Set-Cookie: number=7; - Set-Cookie: string=seven; - >>> C = Cookie.SerialCookie() - >>> C["number"] = 7 - >>> C["string"] = "seven" - >>> C["number"].value - 7 - >>> C["string"].value - 'seven' - >>> C - Set-Cookie: number="I7\012."; - Set-Cookie: string="S'seven'\012p1\012."; - >>> C = Cookie.SmartCookie() - >>> C["number"] = 7 - >>> C["string"] = "seven" - >>> C["number"].value - 7 - >>> C["string"].value - 'seven' - >>> C - Set-Cookie: number="I7\012."; - Set-Cookie: string=seven; - \end{verbatim} \begin{excdesc}{CookieError} ! Exception failing because of RFC2109 invalidity: incorrect attributes, ! incorrect \code{Set-Cookie} header, etc. \end{excdesc} - %\subsection{Morsel Objects} - %\label{morsel-objects} ! \begin{classdesc}{Morsel}{} ! Abstract a key/value pair, which has some RFC2109 attributes. ! ! Morsels are dictionary-like objects, whose set of keys is constant --- ! the valid RFC2109 attributes, which are ! \begin{itemize} ! \item \code{expires} ! \item \code{path} ! \item \code{comment} ! \item \code{domain} ! \item \code{max-age} ! \item \code{secure} ! \item \code{version} ! \end{itemize} ! \end{itemize} ! The keys are case-insensitive. \end{classdesc} ! \begin{memberdesc}[Morsel]{value} ! The value of the cookie. ! \end{methoddesc} ! ! \begin{memberdesc}[Morsel]{coded_value} ! The encoded value of the cookie --- this is what should be sent. ! \end{methoddesc} ! ! ! \begin{memberdesc}[Morsel]{key} ! The name of the cookie. ! \end{methoddesc} ! \begin{methodesc}[Morsel]{set}{key, value, coded_value} ! Set the \var{key}, \var{value} and \var{coded_value} members. ! \end{methoddesc} ! \begin{methoddesc}[Morsel]{isReservedKey}{K} ! Whether \var{K} is a member of the set of keys of a \class{Morsel}. ! \end{methoddesc} ! \begin{methoddesc}[Morsel]{output}{\opt{attrs, \opt{header}} ! Return a string representation of the Morsel, suitable ! to be sent as an HTTP header. By default, all the attributes are included, ! unless \var{attrs} is given, in which case it should be a list of attributes ! to use. \var{header} is by default \code{"Set-Cookie:"}. ! \end{methoddesc} - \begin{methoddesc}[Morsel]{js_output}{\opt{attrs}} - Return an embeddable JavaScript snippet, which, if run on a browser which - supports JavaScript, will act the same as if the HTTP header was sent. ! The meaning for \var{attrs} is the same as in \method{output()}. ! \end{methoddesc}. - \begin{methoddesc}[Morsel]{OutputString}{\opt{attrs}} - Return a string representing the Morsel, without any surrounding HTTP - or JavaScript. ! The meaning for \var{attrs} is the same as in \method{output()}. ! \end{methoddesc} ! ! # This used to be strict parsing based on the RFC2109 and RFC2068 ! # specifications. I have since discovered that MSIE 3.0x doesn't ! # follow the character rules outlined in those specs. As a ! # result, the parsing rules here are less strict. - \begin{classdesc}{BaseCookie}{\opt{input}} - This class is a dictionary-like object whose keys are strings and - whose values are \class{Morsel}s. Note that upon setting a key to - a value, the value is first converted to a \class{Morsel} containing - the key and the value. - - If \var{input} is given, it is passed to the \method{load} method. - \end{classdesc} - \begin{methoddesc}[BaseCookie]{value_decode}{val} Return a decoded value from a string representation. Return value can --- 13,68 ---- data-type as cookie value. \begin{excdesc}{CookieError} ! Exception failing because of \rfc{2109} invalidity: incorrect ! attributes, incorrect \code{Set-Cookie} header, etc. \end{excdesc} ! This used to be strict parsing based on the \rfc{2109} and \rfc{2068} ! specifications. I have since discovered that MSIE 3.0x doesn't ! follow the character rules outlined in those specs. As a ! result, the parsing rules here are less strict. ! \begin{classdesc}{BaseCookie}{\optional{input}} ! This class is a dictionary-like object whose keys are strings and ! whose values are \class{Morsel}s. Note that upon setting a key to ! a value, the value is first converted to a \class{Morsel} containing ! the key and the value. ! If \var{input} is given, it is passed to the \method{load} method. \end{classdesc} ! \begin{classdesc}{SimpleCookie}{\optional{input}} ! This class derives from \class{BaseCookie} and overrides \method{value_decode} ! and \method{value_encode} to be the identity and \function{str()} respectively. ! \end{classdesc} ! \begin{classdesc}{SerialCookie}{\optional{input}} ! This class derives from \class{BaseCookie} and overrides \method{value_decode} ! and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. Note that using this class is a security hole, ! as arbitrary client-code can be run on \function{pickle.loads()}. ! \end{classdesc} ! \begin{classdesc}{SmartCookie}{\optional{input}} ! This class derives from \class{BaseCookie}. It overrides \method{value_decode} ! to be \function{pickle.loads()} if it is a valid pickle, and otherwise ! the value itself. It overrides \method{value_encode} to be ! \function{pickle.dumps()} unless it is a string, in which case it returns ! the value itself. ! The same security warning from \class{SerialCookie} applies here. ! \end{classdesc} ! \begin{seealso} ! \seerfc{2109}{HTTP State Management Mechanism}{This is the state ! management specification implemented by this module.} ! \end{seealso} ! \subsection{Cookie Objects \label{cookie-objects}} \begin{methoddesc}[BaseCookie]{value_decode}{val} Return a decoded value from a string representation. Return value can *************** *** 186,190 **** \end{methoddesc}. ! \begin{methoddesc}[BaseCookie]{output}{\opt{attrs\opt{, header\opt{, sep}}}} Return a string representation suitable to be sent as HTTP headers. \var{attrs} and \var{header} are sent to each \class{Morsel}'s \method{output} --- 80,84 ---- \end{methoddesc}. ! \begin{methoddesc}[BaseCookie]{output}{\optional{attrs\optional{, header\optional{, sep}}}} Return a string representation suitable to be sent as HTTP headers. \var{attrs} and \var{header} are sent to each \class{Morsel}'s \method{output} *************** *** 193,197 **** \end{methoddesc} ! \begin{methoddesc}[BaseCookie]{js_output}{\opt{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP headers was sent. --- 87,91 ---- \end{methoddesc} ! \begin{methoddesc}[BaseCookie]{js_output}{\optional{attrs}} Return an embeddable JavaScript snippet, which, if run on a browser which supports JavaScript, will act the same as if the HTTP headers was sent. *************** *** 203,232 **** If \var{rawdata} is a string, parse it as an \code{HTTP_COOKIE} and add the values found there as \class{Morsel}s. If it is a dictionary, it ! is equivalent to calling \begin{verbatim} ! map(BaseCookie.__setitem__, rawdata.keys(), rawdata.values()) ! \end{varbatim} \end{methoddesc} - \begin{classdesc}{SimpleCookie}{\opt{input}} - This class derives from \class{BaseCookie} and overrides \method{value_decode} - and \method{value_encode} to be the identity and \function{str()} respectively. - \end{classdesc} ! \begin{classdesc}{SerialCookie}{\opt{input}} ! This class derives from \class{BaseCookie} and overrides \method{value_decode} ! and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. Note that using this class is a security hole, ! as arbitrary client-code can be run on \function{pickle.loads()}. ! \end{classdesc} ! \begin{classdesc}{SmartCookie}{\opt{input}} ! This class derives from \class{BaseCookie}. It overrides \method{value_decode} ! to be \function{pickle.loads()} if it is a valid pickle, and otherwise ! the value itself. It overrides \method{value_encode} to be ! \function{pickle.dumps()} unless it is a string, in which case it returns ! the value itself. ! The same security warning from \class{SerialCookie} applies here. \end{classdesc} --- 97,243 ---- If \var{rawdata} is a string, parse it as an \code{HTTP_COOKIE} and add the values found there as \class{Morsel}s. If it is a dictionary, it ! is equivalent to: \begin{verbatim} ! for k, v in rawdata.items(): ! cookie[k] = v ! \end{verbatim} \end{methoddesc} ! \subsection{Morsel Objects \label{morsel-objects}} ! \begin{classdesc}{Morsel}{} ! Abstract a key/value pair, which has some \rfc{2109} attributes. ! Morsels are dictionary-like objects, whose set of keys is constant --- ! the valid \rfc{2109} attributes, which are ! ! \begin{itemize} ! \item \code{expires} ! \item \code{path} ! \item \code{comment} ! \item \code{domain} ! \item \code{max-age} ! \item \code{secure} ! \item \code{version} ! \end{itemize} ! ! The keys are case-insensitive. \end{classdesc} + + \begin{memberdesc}[Morsel]{value} + The value of the cookie. + \end{memberdesc} + + \begin{memberdesc}[Morsel]{coded_value} + The encoded value of the cookie --- this is what should be sent. + \end{memberdesc} + + \begin{memberdesc}[Morsel]{key} + The name of the cookie. + \end{memberdesc} + + \begin{methoddesc}[Morsel]{set}{key, value, coded_value} + Set the \var{key}, \var{value} and \var{coded_value} members. + \end{methoddesc} + + \begin{methoddesc}[Morsel]{isReservedKey}{K} + Whether \var{K} is a member of the set of keys of a \class{Morsel}. + \end{methoddesc} + + \begin{methoddesc}[Morsel]{output}{\optional{attrs\optional{, header}}} + Return a string representation of the Morsel, suitable + to be sent as an HTTP header. By default, all the attributes are included, + unless \var{attrs} is given, in which case it should be a list of attributes + to use. \var{header} is by default \code{"Set-Cookie:"}. + \end{methoddesc} + + \begin{methoddesc}[Morsel]{js_output}{\optional{attrs}} + Return an embeddable JavaScript snippet, which, if run on a browser which + supports JavaScript, will act the same as if the HTTP header was sent. + + The meaning for \var{attrs} is the same as in \method{output()}. + \end{methoddesc}. + + \begin{methoddesc}[Morsel]{OutputString}{\optional{attrs}} + Return a string representing the Morsel, without any surrounding HTTP + or JavaScript. + + The meaning for \var{attrs} is the same as in \method{output()}. + \end{methoddesc} + + + \subsection{Example \label{cookie-example}} + + The following example demonstrates how to open a can of spam using the + \module{spam} module. + + \begin{verbatim} + >>> import Cookie + >>> C = Cookie.SimpleCookie() + >>> C = Cookie.SerialCookie() + >>> C = Cookie.SmartCookie() + >>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie + >>> C = Cookie.SmartCookie() + >>> C["fig"] = "newton" + >>> C["sugar"] = "wafer" + >>> C # generate HTTP headers + Set-Cookie: sugar=wafer; + Set-Cookie: fig=newton; + >>> C = Cookie.SmartCookie() + >>> C["rocky"] = "road" + >>> C["rocky"]["path"] = "/cookie" + >>> print C.output(header="Cookie:") + Cookie: rocky=road; Path=/cookie; + >>> print C.output(attrs=[], header="Cookie:") + Cookie: rocky=road; + >>> C = Cookie.SmartCookie() + >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header) + >>> C + Set-Cookie: vienna=finger; + Set-Cookie: chips=ahoy; + >>> C = Cookie.SmartCookie() + >>> C.load('keebler="E=everybody; L=\"Loves\"; fudge=\012;";') + >>> C + Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; + >>> C = Cookie.SmartCookie() + >>> C["oreo"] = "doublestuff" + >>> C["oreo"]["path"] = "/" + >>> C + Set-Cookie: oreo="doublestuff"; Path=/; + >>> C = Cookie.SmartCookie() + >>> C["twix"] = "none for you" + >>> C["twix"].value + 'none for you' + >>> C = Cookie.SimpleCookie() + >>> C["number"] = 7 # equivalent to C["number"] = str(7) + >>> C["string"] = "seven" + >>> C["number"].value + '7' + >>> C["string"].value + 'seven' + >>> C + Set-Cookie: number=7; + Set-Cookie: string=seven; + >>> C = Cookie.SerialCookie() + >>> C["number"] = 7 + >>> C["string"] = "seven" + >>> C["number"].value + 7 + >>> C["string"].value + 'seven' + >>> C + Set-Cookie: number="I7\012."; + Set-Cookie: string="S'seven'\012p1\012."; + >>> C = Cookie.SmartCookie() + >>> C["number"] = 7 + >>> C["string"] = "seven" + >>> C["number"].value + 7 + >>> C["string"].value + 'seven' + >>> C + Set-Cookie: number="I7\012."; + Set-Cookie: string=seven; + \end{verbatim} From python-dev@python.org Sat Aug 19 17:55:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 19 Aug 2000 09:55:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib lib.tex,1.159,1.160 Message-ID: <200008191655.JAA17815@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17798/lib Modified Files: lib.tex Log Message: Add entry for Cookie module. Index: lib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v retrieving revision 1.159 retrieving revision 1.160 diff -C2 -r1.159 -r1.160 *** lib.tex 2000/08/03 21:18:18 1.159 --- lib.tex 2000/08/19 16:55:31 1.160 *************** *** 206,209 **** --- 206,210 ---- \input{libsimplehttp} \input{libcgihttp} + \input{libcookie} \input{libasyncore} From python-dev@python.org Sat Aug 19 17:55:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Sat, 19 Aug 2000 09:55:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile.deps,1.39,1.40 Message-ID: <200008191655.JAA17811@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv17798 Modified Files: Makefile.deps Log Message: Add entry for Cookie module. Index: Makefile.deps =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile.deps,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** Makefile.deps 2000/08/03 21:18:16 1.39 --- Makefile.deps 2000/08/19 16:55:31 1.40 *************** *** 172,175 **** --- 172,176 ---- ../lib/liblocale.tex \ ../lib/libbasehttp.tex \ + ../lib/libcookie.tex \ ../lib/libcopyreg.tex \ ../lib/libsymbol.tex \ From python-dev@python.org Sat Aug 19 21:55:05 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 19 Aug 2000 13:55:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.28,1.29 Message-ID: <200008192055.NAA02143@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv2034/Doc/ref Modified Files: ref6.tex Log Message: Disallow "import mod.submod as m", because the result is ambiguous. Does it load mod.submod as m, or mod as m ? Both can be achieved differently, and unambiguously. Also attempt to document this restriction (editor appreciated!) Note that this is an artificial check during compile, because incorporating this in the grammar is hard, and then adjusting the compiler to do the right thing with the right nodes is harder. Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** ref6.tex 2000/08/17 22:54:59 1.28 --- ref6.tex 2000/08/19 20:55:01 1.29 *************** *** 499,503 **** local namespace to the module object, and then goes on to import the next identifier, if any. If the module name is followed by \keyword{as}, ! the name following \keyword{as} is used as the local name for the module. The \keyword{from} form does not bind the module name: it goes through the list of identifiers, looks each one of them up in the module found in step --- 499,508 ---- local namespace to the module object, and then goes on to import the next identifier, if any. If the module name is followed by \keyword{as}, ! the name following \keyword{as} is used as the local name for the module. To ! avoid confusion, you cannot import sub-modules 'as' a different ! local name. So 'import module as m' is legal, but 'import module.submod as ! s' is not. The latter should be written as 'from module import submod as s', ! see below. ! The \keyword{from} form does not bind the module name: it goes through the list of identifiers, looks each one of them up in the module found in step From python-dev@python.org Sat Aug 19 21:55:05 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 19 Aug 2000 13:55:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.128,2.129 Message-ID: <200008192055.NAA02149@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv2034/Python Modified Files: compile.c Log Message: Disallow "import mod.submod as m", because the result is ambiguous. Does it load mod.submod as m, or mod as m ? Both can be achieved differently, and unambiguously. Also attempt to document this restriction (editor appreciated!) Note that this is an artificial check during compile, because incorporating this in the grammar is hard, and then adjusting the compiler to do the right thing with the right nodes is harder. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.128 retrieving revision 2.129 diff -C2 -r2.128 -r2.129 *** compile.c 2000/08/18 19:59:20 2.128 --- compile.c 2000/08/19 20:55:02 2.129 *************** *** 2140,2144 **** com_push(c, 1); if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0) { com_error(c, PyExc_SyntaxError, "invalid syntax"); --- 2140,2145 ---- com_push(c, 1); if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0 || ! NCH(CHILD(subn, 0)) > 1) { com_error(c, PyExc_SyntaxError, "invalid syntax"); From python-dev@python.org Sun Aug 20 04:25:25 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 20:25:25 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.16,1.17 Message-ID: <200008200325.UAA08569@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv8332 Modified Files: pep-0200.txt Log Message: Updated all the bug entries. Rehabilitated extended print. Added latest commonprefix development. Added info about impending death of winreg.py. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** pep-0200.txt 2000/08/18 20:26:47 1.16 --- pep-0200.txt 2000/08/20 03:25:22 1.17 *************** *** 92,95 **** --- 92,101 ---- --------- -------- - - ------------- test_winreg2 Win32 X X 26-Jul-2000 + [19-Aug-2000 tim + This test will never work on Win98, because it's looking for + a part of registry that doesn't exist under W98. + The module (winreg.py) and this test case will be removed + before 2.0 for other reasons, though. + ] [still fails 15-Aug-2000 for me, on Win98 - tim test test_winreg2 failed -- Writing: 'Test Failed: testHives', *************** *** 108,111 **** --- 114,124 ---- test_fork1 Linux X 26-Jul-2000 just SMP? [no clue; there are probably two bugs here] + [19-Aug-200 tim + Charles Waldman whipped up a patch to give child processes a new + "global lock": + http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 + While this doesn't appear to address the symptoms we *saw*, it + *does* so far appear to be fixing the failing cases anyway + ] *************** *** 138,141 **** --- 151,159 ---- anymore; eyeballing Fred's changes didn't turn up a suspect either + 19-Aug-2000, tim: the "subtle bug" in regrtest.py -v is + actually a feature: -v masks *some* kinds of failures, + since it doesn't compare test output with the canned + output; this is what makes it say "test passed" even + in some cases where the test fails without -v ] *************** *** 148,151 **** --- 166,182 ---- Decide what to do about os.path.commonprefix. Then do it. + [19-Aug-2000 tim + Guido msg on Python-Dev: + - restore the old behavior on all platforms + - add to the docs that to get the common directory you use dirname() + - add testcases that check that this works on all platforms + - don't add commonpathprefix(), because dirname() already does it + ] + + Remove winreg.py and test_winreg2.py. Paul Prescod (the author) + now wants to make a registry API more like the MS .NET API. Unclear + whether that can be done in time for 2.0, but, regardless, if we + let winreg.py out the door we'll be stuck with it forever, and not + even Paul wants it anymore. *************** *** 209,212 **** --- 240,249 ---- getitem if there is no getslice. + * Extended print statement - Barry Warsaw + PEP 214 + http://python.sourceforge.net/peps/pep-0214.html + SF Patch #100970 + http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 + Open: proposed but not accepted or rejected *************** *** 224,233 **** Postponed - - * Extended print statement - Barry Warsaw - PEP 214 - http://python.sourceforge.net/peps/pep-0214.html - SF Patch #100970 - http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 * Eliminated SET_LINENO opcode - Vladimir Marangozov --- 261,264 ---- From python-dev@python.org Sun Aug 20 05:18:42 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 21:18:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_getopt,NONE,1.1 Message-ID: <200008200418.VAA19996@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv19954/output Added Files: test_getopt Log Message: David Goodger's new getopt test module (thanks, David!). https://sourceforge.net/patch/?func=detailpatch&patch_id=101110&group_id=5470 Accepted as-is, except for purging an "import *". --- NEW FILE --- test_getopt Running tests on getopt.short_has_arg Running tests on getopt.long_has_args Running tests on getopt.do_shorts Running tests on getopt.do_longs Running tests on getopt.getopt Module getopt: tests completed successfully. From python-dev@python.org Sun Aug 20 05:18:42 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 21:18:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_getopt.py,NONE,1.1 Message-ID: <200008200418.VAA19993@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv19954 Added Files: test_getopt.py Log Message: David Goodger's new getopt test module (thanks, David!). https://sourceforge.net/patch/?func=detailpatch&patch_id=101110&group_id=5470 Accepted as-is, except for purging an "import *". --- NEW FILE --- # test_getopt.py # David Goodger 2000-08-19 import getopt from getopt import GetoptError from test.test_support import verbose def expectException(teststr, expected, failure=AssertionError): """Executes a statement passed in teststr, and raises an exception (failure) if the expected exception is *not* raised.""" try: exec teststr except expected: pass else: raise failure if verbose: print 'Running tests on getopt.short_has_arg' assert getopt.short_has_arg('a', 'a:') assert not getopt.short_has_arg('a', 'a') expectException("tmp = getopt.short_has_arg('a', 'b')", GetoptError) expectException("tmp = getopt.short_has_arg('a', '')", GetoptError) if verbose: print 'Running tests on getopt.long_has_args' has_arg, option = getopt.long_has_args('abc', ['abc=']) assert has_arg assert option == 'abc' has_arg, option = getopt.long_has_args('abc', ['abc']) assert not has_arg assert option == 'abc' has_arg, option = getopt.long_has_args('abc', ['abcd']) assert not has_arg assert option == 'abcd' expectException("has_arg, option = getopt.long_has_args('abc', ['def'])", GetoptError) expectException("has_arg, option = getopt.long_has_args('abc', [])", GetoptError) expectException("has_arg, option = " + \ "getopt.long_has_args('abc', ['abcd','abcde'])", GetoptError) if verbose: print 'Running tests on getopt.do_shorts' opts, args = getopt.do_shorts([], 'a', 'a', []) assert opts == [('-a', '')] assert args == [] opts, args = getopt.do_shorts([], 'a1', 'a:', []) assert opts == [('-a', '1')] assert args == [] #opts, args = getopt.do_shorts([], 'a=1', 'a:', []) #assert opts == [('-a', '1')] #assert args == [] opts, args = getopt.do_shorts([], 'a', 'a:', ['1']) assert opts == [('-a', '1')] assert args == [] opts, args = getopt.do_shorts([], 'a', 'a:', ['1', '2']) assert opts == [('-a', '1')] assert args == ['2'] expectException("opts, args = getopt.do_shorts([], 'a1', 'a', [])", GetoptError) expectException("opts, args = getopt.do_shorts([], 'a', 'a:', [])", GetoptError) if verbose: print 'Running tests on getopt.do_longs' opts, args = getopt.do_longs([], 'abc', ['abc'], []) assert opts == [('--abc', '')] assert args == [] opts, args = getopt.do_longs([], 'abc=1', ['abc='], []) assert opts == [('--abc', '1')] assert args == [] opts, args = getopt.do_longs([], 'abc=1', ['abcd='], []) assert opts == [('--abcd', '1')] assert args == [] expectException("opts, args = getopt.do_longs([], 'abc=1', ['abc'], [])", GetoptError) expectException("opts, args = getopt.do_longs([], 'abc', ['abc='], [])", GetoptError) # note: the empty string between '-a' and '--beta' is significant: # it simulates an empty string option argument ('-a ""') on the command line. cmdline = ['-a', '1', '-b', '--alpha=2', '--beta', '-a', '3', '-a', '', '--beta', 'arg1', 'arg2'] if verbose: print 'Running tests on getopt.getopt' opts, args = getopt.getopt(cmdline, 'a:b', ['alpha=', 'beta']) assert opts == [('-a', '1'), ('-b', ''), ('--alpha', '2'), ('--beta', ''), ('-a', '3'), ('-a', ''), ('--beta', '')] # Note ambiguity of ('-b', '') and ('-a', '') above. This must be # accounted for in the code that calls getopt(). assert args == ['arg1', 'arg2'] expectException( "opts, args = getopt.getopt(cmdline, 'a:b', ['alpha', 'beta'])", GetoptError) if verbose: print "Module getopt: tests completed successfully." From python-dev@python.org Sun Aug 20 06:59:29 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 22:59:29 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.17,1.18 Message-ID: <200008200559.WAA01623@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1542 Modified Files: pep-0200.txt Log Message: Closed the "test_popen2 fails under Windows" bug -- although I'm only sure about that for Win98SE. Moved the test_fork1 bug up to the top since it's the only interesting std test failure remaining. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -r1.17 -r1.18 *** pep-0200.txt 2000/08/20 03:25:22 1.17 --- pep-0200.txt 2000/08/20 05:59:27 1.18 *************** *** 91,94 **** --- 91,104 ---- test case platform R B date reported --------- -------- - - ------------- + test_fork1 Linux X 26-Jul-2000 just SMP? + [no clue; there are probably two bugs here] + [19-Aug-200 tim + Charles Waldman whipped up a patch to give child processes a new + "global lock": + http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 + While this doesn't appear to address the symptoms we *saw*, it + *does* so far appear to be fixing the failing cases anyway + ] + test_winreg2 Win32 X X 26-Jul-2000 [19-Aug-2000 tim *************** *** 103,107 **** --- 113,134 ---- ] + + Previously failing test cases + + If you find a test bouncing between this section and the previous one, + the code it's testing is in trouble! + + test case platform R B date reported + --------- -------- - - ------------- test_popen2 Win32 X X 26-Jul-2000 + [20-Aug-2000 tim + changed the popen2.py _test function to use the "more" cmd + when os.name == "nt". This makes test_popen2 pass under + Win98SE. + HOWEVER, the Win98 "more" invents a leading newline out + of thin air, and I'm not sure that the other Windows flavors + of "more" also do that. + So, somebody please try under other Windows flavors! + ] [still fails 15-Aug-2000 for me, on Win98 - tim test test_popen2 crashed -- exceptions.AssertionError : *************** *** 112,133 **** ] - test_fork1 Linux X 26-Jul-2000 just SMP? - [no clue; there are probably two bugs here] - [19-Aug-200 tim - Charles Waldman whipped up a patch to give child processes a new - "global lock": - http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 - While this doesn't appear to address the symptoms we *saw*, it - *does* so far appear to be fixing the failing cases anyway - ] - - - Previously failing test cases - - If you find a test bouncing between this section and the previous one, - the code it's testing is in trouble! - - test case platform R B date reported - --------- -------- - - ------------- test_winreg Win32 X X 26-Jul-2000 [works 15-Aug-2000 for me, on Win98 - tim] --- 139,142 ---- From python-dev@python.org Sun Aug 20 06:57:39 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 19 Aug 2000 22:57:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib popen2.py,1.12,1.13 Message-ID: <200008200557.WAA01518@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv1320/python/dist/src/lib Modified Files: popen2.py Log Message: Changed the popen2.py _test function to use the "more" cmd when os.name == "nt". This makes test_popen2 pass under Win98SE. HOWEVER, the Win98 "more" invents a leading newline out of thin air, and I'm not sure that the other Windows flavors of "more" also do that. So, somebody please try under other Windows flavors! Index: popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/popen2.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** popen2.py 2000/07/10 14:28:25 1.12 --- popen2.py 2000/08/20 05:57:36 1.13 *************** *** 141,158 **** def _test(): teststr = "abc\n" print "testing popen2..." ! r, w = popen2('cat') w.write(teststr) w.close() ! assert r.read() == teststr print "testing popen3..." try: ! r, w, e = popen3(['cat']) except: ! r, w, e = popen3('cat') w.write(teststr) w.close() ! assert r.read() == teststr assert e.read() == "" for inst in _active[:]: --- 141,163 ---- def _test(): + cmd = "cat" teststr = "abc\n" + resultstr = teststr + if os.name == "nt": + cmd = "more" + resultstr = "\n" + resultstr print "testing popen2..." ! r, w = popen2(cmd) w.write(teststr) w.close() ! assert r.read() == resultstr print "testing popen3..." try: ! r, w, e = popen3([cmd]) except: ! r, w, e = popen3(cmd) w.write(teststr) w.close() ! assert r.read() == resultstr assert e.read() == "" for inst in _active[:]: From python-dev@python.org Sun Aug 20 11:49:48 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 20 Aug 2000 03:49:48 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,1.1,1.2 Message-ID: <200008201049.DAA23187@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv22030 Modified Files: pep-0221.txt Log Message: Make the PEP conform to reality, and add the suggestion to generalize the expressions allowed after the 'as' clause. Change some markup, and mark it as Accepted (which it is, since the change has been checked in.) Barry, this should probably also change in the PEP Index PEP. Index: pep-0221.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0221.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0221.txt 2000/08/15 13:42:44 1.1 --- pep-0221.txt 2000/08/20 10:49:45 1.2 *************** *** 4,8 **** Owner: thomas@xs4all.net (Thomas Wouters) Python-Version: 2.0 ! Status: Draft Created: 15-Aug-2000 Type: Standard --- 4,8 ---- Owner: thomas@xs4all.net (Thomas Wouters) Python-Version: 2.0 ! Status: Accepted Created: 15-Aug-2000 Type: Standard *************** *** 28,47 **** round-about way has to be used to achieve this: ! import os ! real_os = os ! del os And similar for the `from ... import' statement: ! from os import fdopen, exit, stat ! os_fdopen = fdopen ! os_stat = stat ! del fdopen, stat The proposed syntax change would add an optional `as' clause to both these statements, as follows: ! import os as real_os ! from os import fdopen as os_fdopen, exit, stat as os_stat The `as' name is not intended to be a keyword, and some trickery --- 28,47 ---- round-about way has to be used to achieve this: ! import os ! real_os = os ! del os And similar for the `from ... import' statement: ! from os import fdopen, exit, stat ! os_fdopen = fdopen ! os_stat = stat ! del fdopen, stat The proposed syntax change would add an optional `as' clause to both these statements, as follows: ! import os as real_os ! from os import fdopen as os_fdopen, exit, stat as os_stat The `as' name is not intended to be a keyword, and some trickery *************** *** 49,93 **** more advanced parsers/tokenizers, however, this should not be a problem. Implementation details ! A proposed implementation of this new clause can be found in the ! SourceForge patch manager[XX]. The patch uses a NAME field in the ! grammar rather than a bare string, to avoid the keyword issue. It ! also introduces a new bytecode, IMPORT_FROM_AS, which loads an ! object from a module and pushes it onto the stack, so it can be ! stored by a normal STORE_NAME opcode. ! The special case of `from module import *' remains a special case, ! in that it cannot accomodate an `as' clause. Also, the current ! implementation does not use IMPORT_FROM_AS for the old form of ! from-import, even though it would make sense to do so. The reason ! for this is that the current IMPORT_FROM bytecode loads objects ! directly from a module into the local namespace, in one bytecode ! operation, and also handles the special case of `*'. As a result ! of moving to the IMPORT_FROM_AS bytecode, two things would happen: ! ! - Two bytecode operations would have to be performed, per symbol, ! rather than one. ! ! - The names imported through `from-import' would be susceptible to ! the `global' keyword, which they currently are not. This means ! that `from-import' outside of the `*' special case behaves more ! like the normal `import' statement, which already follows the ! `global' keyword. It also means, however, that the `*' special ! case is even more special, compared to the ordinary form of ! `from-import' ! ! However, for consistency and for simplicity of implementation, it ! is probably best to split off the special case entirely, making a ! separate bytecode `IMPORT_ALL' that handles the special case of ! `*', and handle all other forms of `from-import' the way the ! proposed `IMPORT_FROM_AS' bytecode does. ! ! This dilemma does not apply to the normal `import' statement, ! because this is alread split into two opcodes, a `LOAD_MODULE' and a ! `STORE_NAME' opcode. Supporting the `import as' syntax is a slight ! change to the compiler only. --- 49,98 ---- more advanced parsers/tokenizers, however, this should not be a problem. + + To avoid confusion, importing a submodule `as' another module is + not allowed. When importing a submodule in the normal way, + + import os.path + + The actual name stored locally is `os', not `path' (so that the + newly imported module can be referenced as `os.path'.) When + introducing the `as' keyword, it is unclear whether the `os' + module or the `path' sub-module should be stored `as' the + requested local name. Implementation details ! This PEP has been accepted, and the suggested code change has been ! checked in. The patch can still be found in the SourceForge patch ! manager[1]. Currently, a NAME field is used in the grammar rather ! than a bare string, to avoid the keyword issue. It introduces a ! new bytecode, IMPORT_STAR, which performs the `from module import ! *' behaviour, and changes the behaviour of the IMPORT_FROM ! bytecode so that it loads the requested name (which is always a ! single name) onto the stack, to be subsequently stored by a STORE ! opcode. ! The special case of `from module import *' remains a special case, ! in that it cannot accomodate an `as' clause, and that no STORE ! opcodes are generated; the objects imported are loaded directly ! into the local namespace. ! ! An additional change to this syntax has also been suggested, to ! generalize the expression given after the `as' clause. Rather than ! a single name, it could be allowed to be any expression that ! yields a valid l-value; anything that can be assigned to. The ! change to accomodate this is minimal, as the patch proves[2], and ! the resulting generalization allows a number of new constructs ! that run completely parallel with other Python assignment ! constructs. ! ! import sys as x['sys'] ! ! from MyFastcPickle import Pickler as shelve.Pickler ! ! from sys import version_info as (maj, min, pl, relnam, relno) ! ! from sys import path as mypath[-1:] *************** *** 101,104 **** --- 106,112 ---- [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=101135&group_id=5470 + + [2] + http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470 From python-dev@python.org Sun Aug 20 15:01:57 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 20 Aug 2000 07:01:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.191,2.192 Message-ID: <200008201401.HAA07198@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv6504/Python Modified Files: ceval.c Log Message: Fix the bug Sjoerd Mullender discovered, where find_from_args() wasn't trying hard enough to find out what the arguments to an import were. There is no test-case for this bug, yet, but this is what it looked like: from encodings import cp1006, cp1026 ImportError: cannot import name cp1026 '__import__' was called with only the first name in the 'arguments' list. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.191 retrieving revision 2.192 diff -C2 -r2.191 -r2.192 *** ceval.c 2000/08/18 19:53:25 2.191 --- ceval.c 2000/08/20 14:01:53 2.192 *************** *** 2865,2869 **** do { oparg = (next_instr[1]<<8) + next_instr[0]; ! next_instr += 2; name = Getnamev(f, oparg); if (PyList_Append(list, name) < 0) { --- 2865,2871 ---- do { oparg = (next_instr[1]<<8) + next_instr[0]; ! /* Jump over our own argument, the next instruction ! (which is a STORE), and its argument.*/ ! next_instr += 5; name = Getnamev(f, oparg); if (PyList_Append(list, name) < 0) { From python-dev@python.org Mon Aug 21 00:33:52 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sun, 20 Aug 2000 16:33:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcookie.tex,1.2,1.3 Message-ID: <200008202333.QAA08528@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv7304 Modified Files: libcookie.tex Log Message: Strengthen the warning against using SerialCookie and SmartCookie. (If they're security holes, should they be documented at all?) Minor rewrites. Index: libcookie.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcookie.tex,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** libcookie.tex 2000/08/19 16:54:57 1.2 --- libcookie.tex 2000/08/20 23:33:50 1.3 *************** *** 9,16 **** The \module{Cookie} module defines classes for abstracting the concept of ! Cookies, an HTTP state management mechanism. It supports both simplistic string-only cookies, and provides an abstraction for having any serializable data-type as cookie value. \begin{excdesc}{CookieError} --- 9,20 ---- The \module{Cookie} module defines classes for abstracting the concept of ! cookies, an HTTP state management mechanism. It supports both simplistic string-only cookies, and provides an abstraction for having any serializable data-type as cookie value. + The module formerly strictly applied the parsing rules described in in + the \rfc{2109} and \rfc{2068} specifications. It has since been discovered + that MSIE 3.0x doesn't follow the character rules outlined in those + specs. As a result, the parsing rules used are a bit less strict. \begin{excdesc}{CookieError} *************** *** 19,28 **** \end{excdesc} - - This used to be strict parsing based on the \rfc{2109} and \rfc{2068} - specifications. I have since discovered that MSIE 3.0x doesn't - follow the character rules outlined in those specs. As a - result, the parsing rules here are less strict. - \begin{classdesc}{BaseCookie}{\optional{input}} This class is a dictionary-like object whose keys are strings and --- 23,26 ---- *************** *** 42,47 **** This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. Note that using this class is a security hole, ! as arbitrary client-code can be run on \function{pickle.loads()}. \end{classdesc} --- 40,50 ---- This class derives from \class{BaseCookie} and overrides \method{value_decode} and \method{value_encode} to be the \function{pickle.loads()} and ! \function{pickle.dumps}. ! ! Do not use this class. Reading pickled values from a cookie is a ! security hole, as arbitrary client-code can be run on ! \function{pickle.loads()}. It is supported for backwards ! compatibility. ! \end{classdesc} From python-dev@python.org Mon Aug 21 00:37:07 2000 From: python-dev@python.org (A.M. Kuchling) Date: Sun, 20 Aug 2000 16:37:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _cursesmodule.c,2.37,2.38 Message-ID: <200008202337.QAA12002@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv11200 Modified Files: _cursesmodule.c Log Message: Add alias for old function name -- removing it broke Alexei Gilchrist's cfm Index: _cursesmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_cursesmodule.c,v retrieving revision 2.37 retrieving revision 2.38 diff -C2 -r2.37 -r2.38 *** _cursesmodule.c 2000/07/27 11:58:01 2.37 --- _cursesmodule.c 2000/08/20 23:37:02 2.38 *************** *** 1271,1274 **** --- 1271,1276 ---- {"notimeout", (PyCFunction)PyCursesWindow_notimeout}, {"noutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh}, + /* Backward compatibility alias -- remove in Python 2.1 */ + {"nooutrefresh", (PyCFunction)PyCursesWindow_NoOutRefresh}, {"putwin", (PyCFunction)PyCursesWindow_PutWin}, {"redrawln", (PyCFunction)PyCursesWindow_RedrawLine}, From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.18,1.19 Message-ID: <200008210227.TAA02054@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/nondist/peps Modified Files: pep-0200.txt Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** pep-0200.txt 2000/08/20 05:59:27 1.18 --- pep-0200.txt 2000/08/21 02:27:22 1.19 *************** *** 101,116 **** ] - test_winreg2 Win32 X X 26-Jul-2000 - [19-Aug-2000 tim - This test will never work on Win98, because it's looking for - a part of registry that doesn't exist under W98. - The module (winreg.py) and this test case will be removed - before 2.0 for other reasons, though. - ] - [still fails 15-Aug-2000 for me, on Win98 - tim - test test_winreg2 failed -- Writing: 'Test Failed: testHives', - expected: 'HKEY_PERFORMANCE_DATA\012' - ] - Previously failing test cases --- 101,104 ---- *************** *** 167,170 **** --- 155,171 ---- ] + test_winreg2 Win32 X X 26-Jul-2000 + [20-Aug-2000 tim - the test has been removed from the project] + [19-Aug-2000 tim + This test will never work on Win98, because it's looking for + a part of registry that doesn't exist under W98. + The module (winreg.py) and this test case will be removed + before 2.0 for other reasons, though. + ] + [still fails 15-Aug-2000 for me, on Win98 - tim + test test_winreg2 failed -- Writing: 'Test Failed: testHives', + expected: 'HKEY_PERFORMANCE_DATA\012' + ] + Open items -- should be done/fixed *************** *** 183,186 **** --- 184,191 ---- ] + + Open items -- completed/fixed + + [20-Aug-2000 tim - done] Remove winreg.py and test_winreg2.py. Paul Prescod (the author) now wants to make a registry API more like the MS .NET API. Unclear From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_winreg2.py,1.2,NONE Message-ID: <200008210227.TAA02047@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/dist/src/Lib/test Removed Files: test_winreg2.py Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-win winreg.py,1.5,NONE Message-ID: <200008210227.TAA02046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-win In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/dist/src/Lib/plat-win Removed Files: winreg.py Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). From python-dev@python.org Mon Aug 21 03:27:25 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 20 Aug 2000 19:27:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_winreg2,1.2,NONE Message-ID: <200008210227.TAA02048@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv1663/python/dist/src/Lib/test/output Removed Files: test_winreg2 Log Message: Remove the winreg module from the project. I don't believe any docs changes are needed (only reference to winreg I could find was in libwinreg.tex, which is documenting _winreg, and merely mentions that a higher-level winreg module *may* appear someday; that's still true). From python-dev@python.org Mon Aug 21 13:25:21 2000 From: python-dev@python.org (Thomas Wouters) Date: Mon, 21 Aug 2000 05:25:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar .cvsignore,1.1,1.2 Message-ID: <200008211225.FAA17078@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv16690/Grammar Modified Files: .cvsignore Log Message: Ignore Grammar/Makefile now that it's a made Makefile. Index: .cvsignore =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** .cvsignore 2000/07/27 20:31:12 1.1 --- .cvsignore 2000/08/21 12:25:17 1.2 *************** *** 1,2 **** --- 1,3 ---- graminit.h graminit.c + Makefile From python-dev@python.org Mon Aug 21 14:35:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 06:35:40 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.24,1.25 Message-ID: <200008211335.GAA27170@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv27120 Modified Files: pep-0000.txt Log Message: PEP 202, change tim's email address to tpeters -- we really need a key for these. PEP 214 and 221 are accepted, as per recent BDFL pronouncements. Added PEP 223, Changing the Meaning of \x Escapes, assigned to Tim Peters. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** pep-0000.txt 2000/08/18 15:21:45 1.24 --- pep-0000.txt 2000/08/21 13:35:37 1.25 *************** *** 27,31 **** I 200 pep-0200.txt Python 2.0 Release Schedule jhylton SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tim_one S 203 pep-0203.txt Augmented Assignments twouters S 204 pep-0204.txt Range Literals twouters --- 27,31 ---- I 200 pep-0200.txt Python 2.0 Release Schedule jhylton SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tpeters S 203 pep-0203.txt Augmented Assignments twouters S 204 pep-0204.txt Range Literals twouters *************** *** 39,43 **** S 212 pep-0212.txt Additional Builtin Generators bwarsaw S 213 pep-0213.txt Attribute Access Handlers prescod ! S 214 pep-0214.txt Extended Print Statement bwarsaw S 215 pep-0215.txt String Interpolation ping I 216 pep-0216.txt Docstring Format moshez --- 39,43 ---- S 212 pep-0212.txt Additional Builtin Generators bwarsaw S 213 pep-0213.txt Attribute Access Handlers prescod ! SA 214 pep-0214.txt Extended Print Statement bwarsaw S 215 pep-0215.txt String Interpolation ping I 216 pep-0216.txt Docstring Format moshez *************** *** 46,51 **** T 219 pep-0219.txt Stackless Python gmcm I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! S 221 pep-0221.txt Import As twouters S 222 pep-0222.txt Web Library Enhancements akuchlin Key --- 46,52 ---- T 219 pep-0219.txt Stackless Python gmcm I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! SA 221 pep-0221.txt Import As twouters S 222 pep-0222.txt Web Library Enhancements akuchlin + S 223 pep-0223.txt Change the Meaning of \x Escapes tpeters Key From python-dev@python.org Mon Aug 21 14:36:24 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 06:36:24 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.4,1.5 Message-ID: <200008211336.GAA27911@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv27846 Modified Files: pep-0214.txt Log Message: BDFL pronounces this PEP accepted for inclusion in Python 2.0 Index: pep-0214.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0214.txt 2000/08/17 20:59:35 1.4 --- pep-0214.txt 2000/08/21 13:36:22 1.5 *************** *** 3,8 **** Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.1 ! Status: Draft Created: 24-Jul-2000 Post-History: 16-Aug-2000 --- 3,8 ---- Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.0 ! Status: Accepted Created: 24-Jul-2000 Post-History: 16-Aug-2000 From python-dev@python.org Mon Aug 21 14:37:48 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 06:37:48 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0223.txt,NONE,1.1 Message-ID: <200008211337.GAA29200@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv29143 Added Files: pep-0223.txt Log Message: PEP 223, Changing the Meaning of \x Escapes, assigned to Tim Peters. This PEP is slated for Python 2.1 ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Mon Aug 21 16:34:36 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:34:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.37,1.38 Message-ID: <200008211534.IAA22469@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv22451 Modified Files: Grammar Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. This change modifies Python's grammar to include the extended print form. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -r1.37 -r1.38 *** Grammar 2000/08/17 22:54:59 1.37 --- Grammar 2000/08/21 15:34:33 1.38 *************** *** 31,38 **** simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt expr_stmt: testlist ('=' testlist)* # For assignments, additional restrictions enforced by the interpreter ! print_stmt: 'print' (test ',')* [test] del_stmt: 'del' exprlist pass_stmt: 'pass' --- 31,38 ---- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt expr_stmt: testlist ('=' testlist)* # For assignments, additional restrictions enforced by the interpreter ! print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist pass_stmt: 'pass' From python-dev@python.org Mon Aug 21 16:36:30 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:36:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include opcode.h,2.27,2.28 Message-ID: <200008211536.IAA22824@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv22816 Modified Files: opcode.h Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. This adds the two new opcodes to support this feature: PRINT_ITEM_TO, PRINT_NEWLINE_TO. Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -r2.27 -r2.28 *** opcode.h 2000/08/17 22:54:59 2.27 --- opcode.h 2000/08/21 15:36:27 2.28 *************** *** 61,64 **** --- 61,66 ---- #define PRINT_ITEM 71 #define PRINT_NEWLINE 72 + #define PRINT_ITEM_TO 73 + #define PRINT_NEWLINE_TO 74 #define BREAK_LOOP 80 From python-dev@python.org Mon Aug 21 16:46:26 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:46:26 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.14,1.15 Message-ID: <200008211546.IAA24994@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv24962 Modified Files: test_grammar.py Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. Additional test cases for the extended print form. Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** test_grammar.py 2000/08/12 18:09:51 1.14 --- test_grammar.py 2000/08/21 15:46:24 1.15 *************** *** 261,264 **** --- 261,283 ---- print 0 or 1 + print 'extended print_stmt' # 'print' '>>' test ',' + import sys + print >> sys.stdout, 1, 2, 3 + print >> sys.stdout, 1, 2, 3, + print >> sys.stdout + print >> sys.stdout, 0 or 1, 0 or 1, + print >> sys.stdout, 0 or 1 + + # syntax errors + def check_syntax(statement): + try: + compile(statement, '', 'exec') + except SyntaxError: + pass + else: + print 'Missing SyntaxError: "%s"' % statement + check_syntax('print ,') + check_syntax('print >> x,') + print 'del_stmt' # 'del' exprlist del abc From python-dev@python.org Mon Aug 21 16:46:52 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:46:52 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.4,1.5 Message-ID: <200008211546.IAA25086@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv25061 Modified Files: test_grammar Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. Additional test cases for the extended print form. Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_grammar 2000/08/12 18:09:51 1.4 --- test_grammar 2000/08/21 15:46:50 1.5 *************** *** 20,23 **** --- 20,27 ---- 1 2 3 1 1 1 + extended print_stmt + 1 2 3 + 1 2 3 + 1 1 1 del_stmt pass_stmt From python-dev@python.org Mon Aug 21 16:44:04 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:44:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.192,2.193 graminit.c,2.25,2.26 Message-ID: <200008211544.IAA24500@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv23621 Modified Files: ceval.c graminit.c Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. eval_code2(): Implement new bytecodes PRINT_ITEM_TO and PRINT_NEWLINE_TO, as per accepted SF patch #100970. Also update graminit.c based on related Grammar/Grammar changes. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.192 retrieving revision 2.193 diff -C2 -r2.192 -r2.193 *** ceval.c 2000/08/20 14:01:53 2.192 --- ceval.c 2000/08/21 15:44:01 2.193 *************** *** 327,330 **** --- 327,331 ---- register PyObject *u; register PyObject *t; + register PyObject *stream = NULL; /* for PRINT opcodes */ register PyFrameObject *f; /* Current frame */ register PyObject **fastlocals; *************** *** 636,640 **** } #endif - /* Main switch on opcode */ --- 637,640 ---- *************** *** 976,980 **** if (err == 0) continue; break; ! case PRINT_EXPR: v = POP(); --- 976,980 ---- if (err == 0) continue; break; ! case PRINT_EXPR: v = POP(); *************** *** 1009,1021 **** break; case PRINT_ITEM: v = POP(); ! w = PySys_GetObject("stdout"); ! if (w == NULL) { ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! err = -1; } ! else if (PyFile_SoftSpace(w, 1)) err = PyFile_WriteString(" ", w); if (err == 0) --- 1009,1027 ---- break; + case PRINT_ITEM_TO: + w = stream = POP(); + /* fall through to PRINT_ITEM */ + case PRINT_ITEM: v = POP(); ! if (stream == NULL) { ! w = PySys_GetObject("stdout"); ! if (w == NULL) { ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! err = -1; ! } } ! if (w != NULL && PyFile_SoftSpace(w, 1)) err = PyFile_WriteString(" ", w); if (err == 0) *************** *** 1031,1047 **** } Py_DECREF(v); ! if (err == 0) continue; break; case PRINT_NEWLINE: ! x = PySys_GetObject("stdout"); ! if (x == NULL) ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! else { ! err = PyFile_WriteString("\n", x); if (err == 0) ! PyFile_SoftSpace(x, 0); } break; --- 1037,1064 ---- } Py_DECREF(v); ! Py_XDECREF(stream); ! stream = NULL; ! if (err == 0) ! continue; break; + case PRINT_NEWLINE_TO: + w = stream = POP(); + /* fall through to PRINT_NEWLINE */ + case PRINT_NEWLINE: ! if (stream == NULL) { ! w = PySys_GetObject("stdout"); ! if (w == NULL) ! PyErr_SetString(PyExc_RuntimeError, ! "lost sys.stdout"); ! } ! if (w != NULL) { ! err = PyFile_WriteString("\n", w); if (err == 0) ! PyFile_SoftSpace(w, 0); } + Py_XDECREF(stream); + stream = NULL; break; Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** graminit.c 2000/08/17 22:55:00 2.25 --- graminit.c 2000/08/21 15:44:01 2.26 *************** *** 238,259 **** {37, 1}, }; ! static arc arcs_12_1[2] = { {21, 2}, {0, 1}, }; static arc arcs_12_2[2] = { ! {22, 1}, {0, 2}, }; [...1029 lines suppressed...] {318, "list_if", 0, 4, states_62, ! "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"}, }; static label labels[130] = { *************** *** 1512,1515 **** --- 1541,1545 ---- {282, 0}, {1, "print"}, + {35, 0}, {1, "del"}, {310, 0}, *************** *** 1574,1578 **** {299, 0}, {34, 0}, - {35, 0}, {300, 0}, {14, 0}, --- 1604,1607 ---- From python-dev@python.org Mon Aug 21 16:45:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 08:45:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.29,1.30 Message-ID: <200008211545.IAA24695@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv24669 Modified Files: ref6.tex Log Message: PEP 214, Extended print Statement, has been accepted by the BDFL. Document the extended print form. Fred, please double check the markup! Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** ref6.tex 2000/08/19 20:55:01 1.29 --- ref6.tex 2000/08/21 15:45:16 1.30 *************** *** 331,334 **** --- 331,346 ---- \exindex{RuntimeError} + \keyword{print} also has an extended form, defined as + + \begin{verbatim} + print_stmt: '>>' expression [ (',' expression)+ [','] ] ) + \end{verbatim} + + In this form, the first expression after the \keyword{>>} must + evaluate to a ``file-like'' object, specifically an object that has a + \method{write()} method as described above. With the extended form, + the subsequent expressions are printed to this file-like object + instead of \code{sys.stdout}. + \section{The \keyword{return} statement \label{return}} \stindex{return} From python-dev@python.org Mon Aug 21 17:35:08 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 09:35:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python import.c,2.146,2.147 Message-ID: <200008211635.JAA09187@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9126 Modified Files: import.c Log Message: Thomas reminds me to bump the MAGIC number for the extended print opcode additions. Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.146 retrieving revision 2.147 diff -C2 -r2.146 -r2.147 *** import.c 2000/08/17 22:55:00 2.146 --- import.c 2000/08/21 16:35:06 2.147 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50815 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50821 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Mon Aug 21 17:55:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 09:55:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test README,1.3,1.4 Message-ID: <200008211655.JAA12430@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12422 Modified Files: README Log Message: Add TestSkipped as another interesting item defined by test_support. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/README,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** README 2000/08/04 13:34:43 1.3 --- README 2000/08/21 16:55:57 1.4 *************** *** 146,149 **** --- 146,153 ---- failure. + * TestSkipped - raise this if the test could not be run because the + platform doesn't offer all the required facilities (like large + file support), even if all the required modules are available. + * findfile(file) - you can call this function to locate a file somewhere along sys.path or in the Lib/test tree - see test_linuxaudiodev.py for From python-dev@python.org Mon Aug 21 18:07:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 10:07:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.130,2.131 Message-ID: <200008211707.KAA15812@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv15747 Modified Files: compile.c Log Message: com_print_stmt(): Guido rightly points out that the stream expression in extended prints should only be evaluated once. This patch plays stack games (documented!) to fix this. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.130 retrieving revision 2.131 diff -C2 -r2.130 -r2.131 *** compile.c 2000/08/21 15:38:56 2.130 --- compile.c 2000/08/21 17:07:20 2.131 *************** *** 2056,2059 **** --- 2056,2062 ---- if (NCH(n) >= 2 && TYPE(CHILD(n, 1)) == RIGHTSHIFT) { stream = CHILD(n, 2); + com_node(c, stream); + /* stack: [...] => [... stream] */ + com_push(c, 1); if (NCH(n) > 3 && TYPE(CHILD(n, 3)) == COMMA) i = 4; *************** *** 2063,2075 **** for (; i < NCH(n); i += 2) { if (stream != NULL) { ! /* stack: [...] => [... obj stream] */ com_node(c, CHILD(n, i)); ! com_node(c, stream); com_addbyte(c, PRINT_ITEM_TO); com_pop(c, 2); } else { - /* stack: [...] => [... obj] */ com_node(c, CHILD(n, i)); com_addbyte(c, PRINT_ITEM); com_pop(c, 1); --- 2066,2083 ---- for (; i < NCH(n); i += 2) { if (stream != NULL) { ! com_addbyte(c, DUP_TOP); ! /* stack: [stream] => [stream stream] */ ! com_push(c, 1); com_node(c, CHILD(n, i)); ! /* stack: [stream stream] => [stream stream obj] */ ! com_addbyte(c, ROT_TWO); ! /* stack: [stream stream obj] => [stream obj stream] */ com_addbyte(c, PRINT_ITEM_TO); + /* stack: [stream obj stream] => [stream] */ com_pop(c, 2); } else { com_node(c, CHILD(n, i)); + /* stack: [...] => [... obj] */ com_addbyte(c, PRINT_ITEM); com_pop(c, 1); *************** *** 2077,2084 **** } /* XXX Alternatively, LOAD_CONST '\n' and then PRINT_ITEM */ ! if (TYPE(CHILD(n, NCH(n)-1)) != COMMA) { if (stream != NULL) { ! com_node(c, stream); com_addbyte(c, PRINT_NEWLINE_TO); com_pop(c, 1); } --- 2085,2101 ---- } /* XXX Alternatively, LOAD_CONST '\n' and then PRINT_ITEM */ ! if (TYPE(CHILD(n, NCH(n)-1)) == COMMA) { ! if (stream != NULL) { ! /* must pop the extra stream object off the stack */ ! com_addbyte(c, POP_TOP); ! /* stack: [... stream] => [...] */ ! com_pop(c, 1); ! } ! } ! else { if (stream != NULL) { ! /* this consumes the last stream object on stack */ com_addbyte(c, PRINT_NEWLINE_TO); + /* stack: [... stream] => [...] */ com_pop(c, 1); } From python-dev@python.org Mon Aug 21 18:18:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 10:18:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.23,1.24 Message-ID: <200008211718.KAA22528@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22519 Modified Files: dis.py Log Message: Add the new PRINT_ITEM_TO and PRINT_NEWLINE_TO opcodes. Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** dis.py 2000/08/17 22:54:59 1.23 --- dis.py 2000/08/21 17:18:40 1.24 *************** *** 191,194 **** --- 191,196 ---- def_op('PRINT_ITEM', 71) def_op('PRINT_NEWLINE', 72) + def_op('PRINT_ITEM_TO', 73) + def_op('PRINT_NEWLINE_TO', 74) def_op('BREAK_LOOP', 80) From python-dev@python.org Mon Aug 21 18:19:03 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 10:19:03 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.23,1.24 Message-ID: <200008211719.KAA22561@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22547 Modified Files: libdis.tex Log Message: Describe the new PRINT_ITEM_TO and PRINT_NEWLINE_TO opcodes. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** libdis.tex 2000/08/18 02:15:55 1.23 --- libdis.tex 2000/08/21 17:19:00 1.24 *************** *** 278,289 **** \begin{opcodedesc}{PRINT_ITEM}{} ! Prints TOS. There is one such instruction for ! each item in the \keyword{print} statement. \end{opcodedesc} \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the last operation of a \keyword{print} statement, unless the statement ends with a comma. \end{opcodedesc} --- 278,299 ---- \begin{opcodedesc}{PRINT_ITEM}{} ! Prints TOS to the file-like object bound to \code{sys.stdout}. There ! is one such instruction for each item in the \keyword{print} statement. \end{opcodedesc} + \begin{opcodedesc}{PRINT_ITEM_TO}{} + Like \code{PRINT_ITEM}, but prints the item second from TOS to the + file-like object at TOS. This is used by the extended print statement. + \end{opcodedesc} + \begin{opcodedesc}{PRINT_NEWLINE}{} Prints a new line on \code{sys.stdout}. This is generated as the last operation of a \keyword{print} statement, unless the statement ends with a comma. + \end{opcodedesc} + + \begin{opcodedesc}{PRINT_NEWLINE_TO}{} + Like \code{PRINT_NEWLINE}, but prints the new line on the file-like + object on the TOS. This is used by the extended print statement. \end{opcodedesc} From python-dev@python.org Mon Aug 21 22:42:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 14:42:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.98,1.99 Message-ID: <200008212142.OAA15495@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv15482 Modified Files: urllib.py Log Message: Patch from Paul Schreiber : Patch description ----------------- This addresses four issues: (1) usernames and passwords in urls with special characters are now decoded properly. i.e. http://foo%2C:bar@www.whatever.com/ (2) Basic Auth support has been added to HTTPS, like it was in HTTP. (3) Version 1.92 sent the POSTed data, but did not deal with errors (HTTP responses other than 200) properly. HTTPS now behaves the same way HTTP does. (4) made URL-checking beahve the same way with HTTPS as it does with HTTP (changed == to !=). Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -r1.98 -r1.99 *** urllib.py 2000/07/26 07:04:38 1.98 --- urllib.py 2000/08/21 21:42:42 1.99 *************** *** 303,315 **** """Use HTTPS protocol.""" import httplib if type(url) is type(""): host, selector = splithost(url) ! user_passwd, host = splituser(host) else: host, selector = url urltype, rest = splittype(selector) ! if string.lower(urltype) == 'https': realhost, rest = splithost(rest) ! user_passwd, realhost = splituser(realhost) if user_passwd: selector = "%s://%s%s" % (urltype, realhost, rest) --- 303,324 ---- """Use HTTPS protocol.""" import httplib + user_passwd = None if type(url) is type(""): host, selector = splithost(url) ! if host: ! user_passwd, host = splituser(host) ! host = unquote(host) ! realhost = host else: host, selector = url urltype, rest = splittype(selector) ! url = rest ! user_passwd = None ! if string.lower(urltype) != 'https': ! realhost = None ! else: realhost, rest = splithost(rest) ! if realhost: ! user_passwd, realhost = splituser(realhost) if user_passwd: selector = "%s://%s%s" % (urltype, realhost, rest) *************** *** 332,335 **** --- 341,345 ---- h.putrequest('GET', selector) if auth: h.putheader('Authorization: Basic %s' % auth) + if realhost: h.putheader('Host', realhost) for args in self.addheaders: apply(h.putheader, args) h.endheaders() *************** *** 341,346 **** return addinfourl(fp, headers, url) else: ! return self.http_error(url, fp, errcode, errmsg, headers) ! def open_gopher(self, url): """Use Gopher protocol.""" --- 351,359 ---- return addinfourl(fp, headers, url) else: ! if data is None: ! return self.http_error(url, fp, errcode, errmsg, headers) ! else: ! return self.http_error(url, fp, errcode, errmsg, headers, data) ! def open_gopher(self, url): """Use Gopher protocol.""" *************** *** 873,877 **** match = _userprog.match(host) ! if match: return match.group(1, 2) return None, host --- 886,890 ---- match = _userprog.match(host) ! if match: return map(unquote, match.group(1, 2)) return None, host From python-dev@python.org Mon Aug 21 22:47:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 14:47:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib UserString.py,1.3,1.4 Message-ID: <200008212147.OAA16021@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv16002 Modified Files: UserString.py Log Message: Denis S. Otkidach : Let UserString.translate() method work with unicode data. This closes SourceForge patch #101246. Index: UserString.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserString.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** UserString.py 2000/07/10 17:07:17 1.3 --- UserString.py 2000/08/21 21:47:20 1.4 *************** *** 105,110 **** def swapcase(self): return self.__class__(self.data.swapcase()) def title(self): return self.__class__(self.data.title()) ! def translate(self, table, deletechars=""): ! return self.__class__(self.data.translate(table, deletechars)) def upper(self): return self.__class__(self.data.upper()) --- 105,110 ---- def swapcase(self): return self.__class__(self.data.swapcase()) def title(self): return self.__class__(self.data.title()) ! def translate(self, *args): ! return self.__class__(self.data.translate(*args)) def upper(self): return self.__class__(self.data.upper()) From python-dev@python.org Mon Aug 21 23:24:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 15:24:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.49,2.50 Message-ID: <200008212224.PAA22732@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv22665/Modules Modified Files: parsermodule.c Log Message: Update to reflect recent grammar changes (list comprehensions, extended print statement), and fix up the extended call syntax support. Minor stylistic cleanups. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.49 retrieving revision 2.50 diff -C2 -r2.49 -r2.50 *** parsermodule.c 2000/07/24 15:49:08 2.49 --- parsermodule.c 2000/08/21 22:24:43 2.50 *************** *** 59,63 **** static char* ! parser_version_string = "0.4"; --- 59,63 ---- static char* ! parser_version_string = "0.5"; *************** *** 889,896 **** VALIDATER(expr_stmt); VALIDATER(power); VALIDATER(print_stmt); VALIDATER(del_stmt); ! VALIDATER(return_stmt); VALIDATER(raise_stmt); VALIDATER(import_stmt); ! VALIDATER(global_stmt); ! VALIDATER(assert_stmt); VALIDATER(exec_stmt); VALIDATER(compound_stmt); VALIDATER(while); VALIDATER(for); --- 889,896 ---- VALIDATER(expr_stmt); VALIDATER(power); VALIDATER(print_stmt); VALIDATER(del_stmt); ! VALIDATER(return_stmt); VALIDATER(list_iter); VALIDATER(raise_stmt); VALIDATER(import_stmt); ! VALIDATER(global_stmt); VALIDATER(list_if); ! VALIDATER(assert_stmt); VALIDATER(list_for); VALIDATER(exec_stmt); VALIDATER(compound_stmt); VALIDATER(while); VALIDATER(for); *************** *** 907,910 **** --- 907,911 ---- VALIDATER(exprlist); VALIDATER(dictmaker); VALIDATER(arglist); VALIDATER(argument); + VALIDATER(listmaker); *************** *** 987,991 **** ! /* VALIDATE(class) * * classdef: --- 988,992 ---- ! /* validate_class() * * classdef: *************** *** 1079,1083 **** ! /* VALIDATE(suite) * * suite: --- 1080,1084 ---- ! /* validate_suite() * * suite: *************** *** 1121,1133 **** ! /* VALIDATE(varargslist) * * varargslist: - * (fpdef ['=' test] ',')* ('*' NAME [',' '*' '*' NAME] | '*' '*' NAME) - * | fpdef ['=' test] (',' fpdef ['=' test])* [','] - * * (fpdef ['=' test] ',')* ! * ('*' NAME [',' ('**'|'*' '*') NAME] ! * | ('**'|'*' '*') NAME) * | fpdef ['=' test] (',' fpdef ['=' test])* [','] * --- 1122,1170 ---- ! /* '*' NAME [',' '**' NAME] | '**' NAME ! */ ! static int ! validate_varargslist_trailer(node *tree, int start) ! { ! int nch = NCH(tree); ! int res = 0; ! int sym; ! ! if (nch <= start) { ! err_string("expected variable argument trailer for varargslist"); ! return 0; ! } ! sym = TYPE(CHILD(tree, start)); ! if (sym == STAR) { ! /* ! * ('*' NAME [',' '**' NAME] ! */ ! if (nch-start == 2) ! res = validate_name(CHILD(tree, start+1), NULL); ! else if (nch-start == 5) ! res = (validate_name(CHILD(tree, start+1), NULL) ! && validate_comma(CHILD(tree, start+2)) ! && validate_doublestar(CHILD(tree, start+3)) ! && validate_name(CHILD(tree, start+4), NULL)); ! } ! else if (sym == DOUBLESTAR) { ! /* ! * '**' NAME ! */ ! if (nch-start == 2) ! res = validate_name(CHILD(tree, start+1), NULL); ! } ! if (!res) ! err_string("illegal variable argument trailer for varargslist"); ! return res; ! } ! ! ! /* validate_varargslist() * * varargslist: * (fpdef ['=' test] ',')* ! * ('*' NAME [',' '**' NAME] ! * | '**' NAME) * | fpdef ['=' test] (',' fpdef ['=' test])* [','] * *************** *** 1138,1232 **** int nch = NCH(tree); int res = validate_ntype(tree, varargslist) && (nch != 0); ! if (res && (nch >= 2) && (TYPE(CHILD(tree, nch - 1)) == NAME)) { ! /* (fpdef ['=' test] ',')* ! * ('*' NAME [',' '*' '*' NAME] | '*' '*' NAME) ! */ ! int pos = 0; ! int remaining = nch; ! while (res && (TYPE(CHILD(tree, pos)) == fpdef)) { ! res = validate_fpdef(CHILD(tree, pos)); ! if (res) { ! if (TYPE(CHILD(tree, pos + 1)) == EQUAL) { ! res = validate_test(CHILD(tree, pos + 2)); ! pos += 2; } - res = res && validate_comma(CHILD(tree, pos + 1)); - pos += 2; } } ! if (res) { ! remaining = nch - pos; ! res = ((remaining == 2) || (remaining == 3) ! || (remaining == 5) || (remaining == 6)); ! if (!res) ! (void) validate_numnodes(tree, 2, "varargslist"); ! else if (TYPE(CHILD(tree, pos)) == DOUBLESTAR) ! return ((remaining == 2) ! && validate_ntype(CHILD(tree, pos+1), NAME)); ! else { ! res = validate_star(CHILD(tree, pos++)); ! --remaining; } ! } ! if (res) { ! if (remaining == 2) { ! res = (validate_star(CHILD(tree, pos)) ! && validate_ntype(CHILD(tree, pos + 1), NAME)); } ! else { ! res = validate_ntype(CHILD(tree, pos++), NAME); ! if (res && (remaining >= 4)) { ! res = validate_comma(CHILD(tree, pos)); ! if (--remaining == 3) ! res = (validate_star(CHILD(tree, pos + 1)) ! && validate_star(CHILD(tree, pos + 2))); ! else ! res = validate_ntype(CHILD(tree, pos + 1), DOUBLESTAR); } - } - } - if (!res && !PyErr_Occurred()) - err_string("Incorrect validation of variable arguments list."); - } - else if (res) { - /* fpdef ['=' test] (',' fpdef ['=' test])* [','] */ - if (TYPE(CHILD(tree, nch - 1)) == COMMA) - --nch; - - /* fpdef ['=' test] (',' fpdef ['=' test])* */ - res = (is_odd(nch) - && validate_fpdef(CHILD(tree, 0))); - - if (res && (nch > 1)) { - int pos = 1; - if (TYPE(CHILD(tree, 1)) == EQUAL) { - res = validate_test(CHILD(tree, 2)); - pos += 2; } ! /* ... (',' fpdef ['=' test])* */ ! for ( ; res && (pos < nch); pos += 2) { ! /* ',' fpdef */ ! res = (validate_comma(CHILD(tree, pos)) ! && validate_fpdef(CHILD(tree, pos + 1))); ! if (res ! && ((nch - pos) > 2) ! && (TYPE(CHILD(tree, pos + 2)) == EQUAL)) { ! /* ['=' test] */ ! res = validate_test(CHILD(tree, pos + 3)); ! pos += 2; ! } } } } ! else { ! err_string("Improperly formed argument list."); ! } ! return (res); } ! /* VALIDATE(fpdef) * * fpdef: --- 1175,1322 ---- int nch = NCH(tree); int res = validate_ntype(tree, varargslist) && (nch != 0); + int sym; ! if (nch < 1) { ! err_string("varargslist missing child nodes"); ! return 0; ! } ! sym = TYPE(CHILD(tree, 0)); ! if (sym == STAR || sym == DOUBLESTAR) ! res = validate_varargslist_trailer(tree, 0); ! else if (sym == fpdef) { ! int i = 0; ! sym = TYPE(CHILD(tree, nch-1)); ! if (sym == NAME) { ! /* ! * (fpdef ['=' test] ',')+ ! * ('*' NAME [',' '**' NAME] ! * | '**' NAME) ! */ ! /* skip over (fpdef ['=' test] ',')+ */ ! while (res && (i+2 <= nch)) { ! res = validate_fpdef(CHILD(tree, i)); ! ++i; ! if (res && TYPE(CHILD(tree, i)) == EQUAL && (i+2 <= nch)) { ! res = (validate_equal(CHILD(tree, i)) ! && validate_test(CHILD(tree, i+1))); ! if (res) ! i += 2; ! } ! if (res && i < nch) { ! res = validate_comma(CHILD(tree, i)); ! if (res) ! ++i; } } + /* handle '*' NAME [',' '**' NAME] | '**' NAME */ + if (res) + res = validate_varargslist_trailer(tree, i); } ! else { ! /* ! * fpdef ['=' test] (',' fpdef ['=' test])* [','] ! */ ! if (sym == COMMA) { ! res = validate_comma(CHILD(tree, nch-1)); ! if (!res) ! return 0; ! --nch; } ! /* ! * fpdef ['=' test] (',' fpdef ['=' test])* ! */ ! res = validate_fpdef(CHILD(tree, 0)); ! ++i; ! if (res && (i+2 < nch) && TYPE(CHILD(tree, 1)) == EQUAL) { ! res = (validate_equal(CHILD(tree, 1)) ! && validate_test(CHILD(tree, 2))); ! i += 2; } ! /* ! * ... (',' fpdef ['=' test])* ! * i ---^^^ ! */ ! while (res && (nch - i) >= 2) { ! res = (validate_comma(CHILD(tree, i)) ! && validate_fpdef(CHILD(tree, i+1))); ! i += 2; ! if (res && (nch - i) >= 2 ! && TYPE(CHILD(tree, i)) == COMMA) { ! res = (validate_comma(CHILD(tree, i)) ! && validate_test(CHILD(tree, i+1))); ! if (res) ! i += 2; } } ! if (res && nch - i != 0) { ! res = 0; ! err_string("illegal formation for varargslist"); } } } ! return res; ! } ! ! ! /* list_iter: list_for | list_if ! */ ! static int ! validate_list_iter(node *tree) ! { ! int res = (validate_ntype(tree, list_iter) ! && validate_numnodes(tree, 1, "list_iter")); ! if (res && TYPE(CHILD(tree, 0)) == list_for) ! res = validate_list_for(CHILD(tree, 0)); ! else ! res = validate_list_if(CHILD(tree, 0)); ! ! return res; ! } ! ! /* list_for: 'for' exprlist 'in' testlist [list_iter] ! */ ! static int ! validate_list_for(node *tree) ! { ! int nch = NCH(tree); ! int res; ! ! if (nch == 5) ! res = validate_list_iter(CHILD(tree, 4)); ! else ! res = validate_numnodes(tree, 4, "list_for"); ! ! if (res) ! res = (validate_name(CHILD(tree, 0), "for") ! && validate_exprlist(CHILD(tree, 1)) ! && validate_name(CHILD(tree, 2), "in") ! && validate_testlist(CHILD(tree, 3))); ! ! return res; } + /* list_if: 'if' test [list_iter] + */ + static int + validate_list_if(node *tree) + { + int nch = NCH(tree); + int res; + + if (nch == 3) + res = validate_list_iter(CHILD(tree, 2)); + else + res = validate_numnodes(tree, 2, "list_if"); + + if (res) + res = (validate_name(CHILD(tree, 0), "if") + && validate_test(CHILD(tree, 1))); + + return res; + } ! ! /* validate_fpdef() * * fpdef: *************** *** 1387,1393 **** /* print_stmt: - * - * 'print' (test ',')* [test] * */ static int --- 1477,1483 ---- /* print_stmt: * + * 'print' ( [ test (',' test)* [','] ] + * | '>>' test [ (',' test)+ [','] ] ) */ static int *************** *** 1397,1413 **** int nch = NCH(tree); int res = (validate_ntype(tree, print_stmt) ! && (nch != 0) && validate_name(CHILD(tree, 0), "print")); ! if (res && is_even(nch)) { ! res = validate_test(CHILD(tree, nch - 1)); ! --nch; ! } ! else if (!res && !PyErr_Occurred()) ! (void) validate_numnodes(tree, 1, "print_stmt"); ! for (j = 1; res && (j < nch); j += 2) ! res = (validate_test(CHILD(tree, j)) ! && validate_ntype(CHILD(tree, j + 1), COMMA)); return (res); } --- 1487,1524 ---- int nch = NCH(tree); int res = (validate_ntype(tree, print_stmt) ! && (nch > 0) && validate_name(CHILD(tree, 0), "print")); ! if (res && nch > 1) { ! int sym = TYPE(CHILD(tree, 1)); ! int i = 1; ! int allow_trailing_comma = 1; + if (sym == test) + res = validate_test(CHILD(tree, i++)); + else { + if (nch < 3) + res = validate_numnodes(tree, 3, "print_stmt"); + else { + res = (validate_ntype(CHILD(tree, i), RIGHTSHIFT) + && validate_test(CHILD(tree, i+1))); + i += 2; + allow_trailing_comma = 0; + } + } + if (res) { + /* ... (',' test)* [','] */ + while (res && i+2 <= nch) { + res = (validate_comma(CHILD(tree, i)) + && validate_test(CHILD(tree, i+1))); + allow_trailing_comma = 1; + i += 2; + } + if (res && !allow_trailing_comma) + res = validate_numnodes(tree, i, "print_stmt"); + else if (res && i < nch) + res = validate_comma(CHILD(tree, i)); + } + } return (res); } *************** *** 1467,1474 **** /* import_stmt: * ! * 'import' dotted_name (',' dotted_name)* ! * | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*) */ static int --- 1578,1629 ---- + static int + validate_import_as_name(node *tree) + { + int nch = NCH(tree); + int ok = validate_ntype(tree, import_as_name); + + if (ok) { + if (nch == 1) + ok = validate_name(CHILD(tree, 0), NULL); + else if (nch == 3) + ok = (validate_name(CHILD(tree, 0), NULL) + && validate_name(CHILD(tree, 1), "as") + && validate_name(CHILD(tree, 2), NULL)); + else + ok = validate_numnodes(tree, 3, "import_as_name"); + } + return ok; + } + + + /* dotted_as_name: dotted_name [NAME NAME] + */ + static int + validate_dotted_as_name(node *tree) + { + int nch = NCH(tree); + int res = validate_ntype(tree, dotted_as_name); + + if (res) { + if (nch == 1) + res = validate_ntype(CHILD(tree, 0), dotted_name); + else if (nch == 3) + res = (validate_ntype(CHILD(tree, 0), dotted_name) + && validate_name(CHILD(tree, 1), "as") + && validate_name(CHILD(tree, 2), NULL)); + else { + res = 0; + err_string("Illegal number of children for dotted_as_name."); + } + } + return res; + } + + /* import_stmt: * ! * 'import' dotted_as_name (',' dotted_as_name)* ! * | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*) */ static int *************** *** 1478,1507 **** int res = (validate_ntype(tree, import_stmt) && (nch >= 2) && is_even(nch) ! && validate_ntype(CHILD(tree, 0), NAME) ! && validate_ntype(CHILD(tree, 1), dotted_name)); if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) { int j; for (j = 2; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) && validate_ntype(CHILD(tree, j + 1), dotted_name)); } ! else if (res && validate_name(CHILD(tree, 0), "from")) { res = ((nch >= 4) && is_even(nch) ! && validate_name(CHILD(tree, 2), "import")); if (nch == 4) { ! res = ((TYPE(CHILD(tree, 3)) == NAME) ! || (TYPE(CHILD(tree, 3)) == STAR)); ! if (!res) ! err_string("Illegal import statement."); } else { ! /* 'from' NAME 'import' NAME (',' NAME)+ */ int j; ! res = validate_ntype(CHILD(tree, 3), NAME); for (j = 4; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) ! && validate_ntype(CHILD(tree, j + 1), NAME)); } } --- 1633,1665 ---- int res = (validate_ntype(tree, import_stmt) && (nch >= 2) && is_even(nch) ! && validate_ntype(CHILD(tree, 0), NAME)); if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) { int j; + res = validate_dotted_as_name(CHILD(tree, 1)); for (j = 2; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) && validate_ntype(CHILD(tree, j + 1), dotted_name)); } ! else if (res && (res = validate_name(CHILD(tree, 0), "from"))) { res = ((nch >= 4) && is_even(nch) ! && validate_name(CHILD(tree, 2), "import") ! && validate_dotted_as_name(CHILD(tree, 1))); if (nch == 4) { ! if (TYPE(CHILD(tree, 3)) == import_as_name) ! res = validate_import_as_name(CHILD(tree, 3)); ! else ! res = validate_star(CHILD(tree, 3)); } else { ! /* 'from' dotted_name 'import' import_as_name ! * (',' import_as_name)+ ! */ int j; ! res = validate_import_as_name(CHILD(tree, 3)); for (j = 4; res && (j < nch); j += 2) res = (validate_comma(CHILD(tree, j)) ! && validate_import_as_name(CHILD(tree, j + 1))); } } *************** *** 1984,1989 **** int pos; int nch = NCH(tree); ! int res = validate_ntype(tree, atom) && (nch >= 1); if (res) { switch (TYPE(CHILD(tree, 0))) { --- 2142,2149 ---- int pos; int nch = NCH(tree); ! int res = validate_ntype(tree, atom); + if (res && nch < 1) + res = validate_numnodes(tree, nch+1, "atom"); if (res) { switch (TYPE(CHILD(tree, 0))) { *************** *** 1996,2004 **** break; case LSQB: ! res = ((nch <= 3) ! && validate_ntype(CHILD(tree, nch - 1), RSQB)); ! ! if (res && (nch == 3)) ! res = validate_testlist(CHILD(tree, 1)); break; case LBRACE: --- 2156,2168 ---- break; case LSQB: ! if (nch == 2) ! res = validate_ntype(CHILD(tree, 1), RSQB); ! else if (nch == 3) ! res = (validate_listmaker(CHILD(tree, 1)) ! && validate_ntype(CHILD(tree, 2), RSQB)); ! else { ! res = 0; ! err_string("illegal list display atom"); ! } break; case LBRACE: *************** *** 2031,2034 **** --- 2195,2230 ---- + static int + validate_listmaker(node *tree) + { + int nch = NCH(tree); + int ok = nch; + + if (nch == 0) + err_string("missing child nodes of listmaker"); + else + ok = validate_test(CHILD(tree, 0)); + + /* + * list_iter | (',' test)* [','] + */ + if (nch == 2 && TYPE(CHILD(tree, 1)) == list_iter) + ok = validate_list_iter(CHILD(tree, 1)); + else { + /* (',' test)* [','] */ + int i = 1; + while (ok && nch - i >= 2) { + ok = (validate_comma(CHILD(tree, i)) + && validate_test(CHILD(tree, i+1))); + if (ok) + i += 2; + } + if (ok && nch-i) + ok = validate_comma(CHILD(tree, nch-1)); + } + return ok; + } + + /* funcdef: * 'def' NAME parameters ':' suite *************** *** 2069,2073 **** /* arglist: * ! * (argument ',')* (argument* [','] | '*' test [',' '**' test] | '**' test) */ static int --- 2265,2269 ---- /* arglist: * ! * (argument ',')* (argument [','] | '*' test [',' '**' test] | '**' test) */ static int *************** *** 2075,2080 **** { int nch = NCH(tree); ! int i, ok = 1; ! node *last; if (nch <= 0) --- 2271,2276 ---- { int nch = NCH(tree); ! int i = 0; ! int ok = 1; if (nch <= 0) *************** *** 2082,2147 **** return validate_numnodes(tree, nch + 1, "arglist"); ! last = CHILD(tree, nch - 1); ! if (TYPE(last) == test) { ! /* Extended call syntax introduced in Python 1.6 has been used; ! * validate and strip that off and continue; ! * adjust nch to perform the cut, and ensure resulting nch is even ! * (validation of the first part doesn't require that). */ ! if (nch < 2) { ! validate_numnodes(tree, nch + 1, "arglist"); ! return 0; ! } ! ok = validate_test(last); ! if (ok) { ! node *prev = CHILD(tree, nch - 2); ! /* next must be '*' or '**' */ ! if (validate_doublestar(prev)) { ! nch -= 2; ! if (nch >= 3) { ! /* may include: '*' test ',' */ ! last = CHILD(tree, nch - 1); ! prev = CHILD(tree, nch - 2); ! if (TYPE(prev) == test) { ! ok = validate_comma(last) ! && validate_test(prev) ! && validate_star(CHILD(tree, nch - 3)); ! if (ok) ! nch -= 3; ! } ! /* otherwise, nothing special */ ! } } else { ! /* must be only: '*' test */ ! PyErr_Clear(); ! ok = validate_star(prev); ! nch -= 2; } ! if (ok && is_odd(nch)) { ! /* Illegal number of nodes before extended call syntax; ! * validation of the "normal" arguments does not require ! * a trailing comma, but requiring an even number of ! * children will effect the same requirement. ! */ ! return validate_numnodes(tree, nch + 1, "arglist"); } } ! } ! /* what remains must be: (argument ",")* [argument [","]] */ ! i = 0; ! while (ok && nch - i >= 2) { ! ok = validate_argument(CHILD(tree, i)) ! && validate_comma(CHILD(tree, i + 1)); ! i += 2; ! } ! if (ok && i < nch) { ! ok = validate_comma(CHILD(tree, i)); ! ++i; ! } ! if (i != nch) { ! /* internal error! */ ! ok = 0; ! err_string("arglist: internal error; nch != i"); } return (ok); --- 2278,2332 ---- return validate_numnodes(tree, nch + 1, "arglist"); ! while (ok && nch-i >= 2) { ! /* skip leading (argument ',') */ ! ok = (validate_argument(CHILD(tree, i)) ! && validate_comma(CHILD(tree, i+1))); ! if (ok) ! i += 2; ! else ! PyErr_Clear(); ! } ! ok = 1; ! if (nch-i > 0) { ! /* ! * argument | '*' test [',' '**' test] | '**' test */ ! int sym = TYPE(CHILD(tree, i)); ! ! if (sym == argument) { ! ok = validate_argument(CHILD(tree, i)); ! if (ok && i+1 != nch) { ! err_string("illegal arglist specification" ! " (extra stuff on end)"); ! ok = 0; } + } + else if (sym == STAR) { + ok = validate_star(CHILD(tree, i)); + if (ok && (nch-i == 2)) + ok = validate_test(CHILD(tree, i+1)); + else if (ok && (nch-i == 5)) + ok = (validate_test(CHILD(tree, i+1)) + && validate_comma(CHILD(tree, i+2)) + && validate_doublestar(CHILD(tree, i+3)) + && validate_test(CHILD(tree, i+4))); else { ! err_string("illegal use of '*' in arglist"); ! ok = 0; } ! } ! else if (sym == DOUBLESTAR) { ! if (nch-i == 2) ! ok = (validate_doublestar(CHILD(tree, i)) ! && validate_test(CHILD(tree, i+1))); ! else { ! err_string("illegal use of '**' in arglist"); ! ok = 0; } } ! else { ! err_string("illegal arglist specification"); ! ok = 0; ! } } return (ok); From python-dev@python.org Mon Aug 21 23:30:55 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 15:30:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_parser.py,NONE,1.1 Message-ID: <200008212230.PAA29080@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv29025/Lib/test Added Files: test_parser.py Log Message: Add a minimal test suite for the parser module. --- NEW FILE --- import parser import pprint import sys from parser import expr, suite, sequence2ast from test_support import verbose # # First, we test that we can generate trees from valid source fragments, # and that these valid trees are indeed allowed by the tree-loading side # of the parser module. # def roundtrip(f, s): print s st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) print "Expressions:" roundtrip(expr, "foo(1)") roundtrip(expr, "[1, 2, 3]") roundtrip(expr, "[x**3 for x in range(20)]") roundtrip(expr, "[x**3 for x in range(20) if x % 3]") roundtrip(expr, "foo(*args)") roundtrip(expr, "foo(*args, **kw)") roundtrip(expr, "foo(**kw)") roundtrip(expr, "foo(key=value)") roundtrip(expr, "foo(key=value, *args)") roundtrip(expr, "foo(key=value, *args, **kw)") roundtrip(expr, "foo(key=value, **kw)") roundtrip(expr, "foo(a, b, c, *args)") roundtrip(expr, "foo(a, b, c, *args, **kw)") roundtrip(expr, "foo(a, b, c, **kw)") roundtrip(expr, "foo + bar") print print "Statements:" roundtrip(suite, "print") roundtrip(suite, "print 1") roundtrip(suite, "print 1,") roundtrip(suite, "print >>fp") roundtrip(suite, "print >>fp, 1") roundtrip(suite, "print >>fp, 1,") # # Second, we take *invalid* trees and make sure we get ParserError # rejections for them. # print print "Invalid parse trees:" def check_bad_tree(tree, label): print print label try: sequence2ast(tree) except parser.ParserError: print "caught expected exception for invalid tree" pass else: print "test failed: did not properly detect invalid tree:" pprint.pprint(tree) # not even remotely valid: check_bad_tree((1, 2, 3), "") # print >>fp, tree = \ (257, (264, (265, (266, (268, (1, 'print'), (35, '>>'), (290, (291, (292, (293, (295, (296, (297, (298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))), (12, ','))), (4, ''))), (0, '')) check_bad_tree(tree, "print >>fp,") # a,,c tree = \ (258, (311, (290, (291, (292, (293, (295, (296, (297, (298, (299, (300, (301, (302, (303, (1, 'a')))))))))))))), (12, ','), (12, ','), (290, (291, (292, (293, (295, (296, (297, (298, (299, (300, (301, (302, (303, (1, 'c'))))))))))))))), (4, ''), (0, '')) check_bad_tree(tree, "a,,c") From python-dev@python.org Mon Aug 21 23:30:55 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 21 Aug 2000 15:30:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_parser,NONE,1.1 Message-ID: <200008212230.PAA29079@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv29025/Lib/test/output Added Files: test_parser Log Message: Add a minimal test suite for the parser module. --- NEW FILE --- test_parser Expressions: foo(1) [1, 2, 3] [x**3 for x in range(20)] [x**3 for x in range(20) if x % 3] foo(*args) foo(*args, **kw) foo(**kw) foo(key=value) foo(key=value, *args) foo(key=value, *args, **kw) foo(key=value, **kw) foo(a, b, c, *args) foo(a, b, c, *args, **kw) foo(a, b, c, **kw) foo + bar Statements: print print 1 print 1, print >>fp print >>fp, 1 print >>fp, 1, Invalid parse trees: caught expected exception for invalid tree print >>fp, caught expected exception for invalid tree a,,c caught expected exception for invalid tree From python-dev@python.org Mon Aug 21 23:59:31 2000 From: python-dev@python.org (Guido van Rossum) Date: Mon, 21 Aug 2000 15:59:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_getopt.py,1.1,1.2 Message-ID: <200008212259.PAA24222@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv23751 Modified Files: test_getopt.py Log Message: Don't reference a module named test.test_support. Always use plain test_support. Also fixed the expected output. Index: test_getopt.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_getopt.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_getopt.py 2000/08/20 04:18:40 1.1 --- test_getopt.py 2000/08/21 22:59:26 1.2 *************** *** 4,8 **** import getopt from getopt import GetoptError ! from test.test_support import verbose def expectException(teststr, expected, failure=AssertionError): --- 4,8 ---- import getopt from getopt import GetoptError ! from test_support import verbose def expectException(teststr, expected, failure=AssertionError): From python-dev@python.org Mon Aug 21 23:59:31 2000 From: python-dev@python.org (Guido van Rossum) Date: Mon, 21 Aug 2000 15:59:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_getopt,1.1,1.2 Message-ID: <200008212259.PAA24226@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv23751/output Modified Files: test_getopt Log Message: Don't reference a module named test.test_support. Always use plain test_support. Also fixed the expected output. Index: test_getopt =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_getopt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_getopt 2000/08/20 04:18:40 1.1 --- test_getopt 2000/08/21 22:59:29 1.2 *************** *** 1,7 **** test_getopt - Running tests on getopt.short_has_arg - Running tests on getopt.long_has_args - Running tests on getopt.do_shorts - Running tests on getopt.do_longs - Running tests on getopt.getopt - Module getopt: tests completed successfully. --- 1 ---- From python-dev@python.org Tue Aug 22 02:44:20 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 21 Aug 2000 18:44:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.50,2.51 Message-ID: <200008220144.SAA14367@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13523/python/dist/src/modules Modified Files: parsermodule.c Log Message: Nuked unused variable. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.50 retrieving revision 2.51 diff -C2 -r2.50 -r2.51 *** parsermodule.c 2000/08/21 22:24:43 2.50 --- parsermodule.c 2000/08/22 01:44:16 2.51 *************** *** 1484,1488 **** validate_print_stmt(node *tree) { - int j; int nch = NCH(tree); int res = (validate_ntype(tree, print_stmt) --- 1484,1487 ---- From python-dev@python.org Tue Aug 22 02:48:56 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 21 Aug 2000 18:48:56 -0700 Subject: [Python-checkins] CVS: distutils/distutils archive_util.py,1.7,1.8 Message-ID: <200008220148.SAA19536@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv19444 Modified Files: archive_util.py Log Message: Ensure destination directory exists before trying to create a tarball or ZIP file. Index: archive_util.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/archive_util.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** archive_util.py 2000/06/24 00:23:20 1.7 --- archive_util.py 2000/08/22 01:48:54 1.8 *************** *** 11,16 **** from distutils.errors import DistutilsExecError from distutils.spawn import spawn - def make_tarball (base_name, base_dir, compress="gzip", verbose=0, dry_run=0): --- 11,16 ---- from distutils.errors import DistutilsExecError from distutils.spawn import spawn + from distutils.dir_util import mkpath def make_tarball (base_name, base_dir, compress="gzip", verbose=0, dry_run=0): *************** *** 43,46 **** --- 43,47 ---- archive_name = base_name + ".tar" + mkpath(os.path.dirname(archive_name), verbose=verbose, dry_run=dry_run) cmd = ["tar", "-cf", archive_name, base_dir] spawn (cmd, verbose=verbose, dry_run=dry_run) *************** *** 69,72 **** --- 70,74 ---- zip_filename = base_name + ".zip" + mkpath(os.path.dirname(zip_filename), verbose=verbose, dry_run=dry_run) try: spawn (["zip", "-rq", zip_filename, base_dir], *************** *** 115,119 **** 'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"), 'tar': (make_tarball, [('compress', None)], "uncompressed tar file"), ! 'zip': (make_zipfile, [],"zip-file") } --- 117,121 ---- 'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"), 'tar': (make_tarball, [('compress', None)], "uncompressed tar file"), ! 'zip': (make_zipfile, [],"ZIP file") } From python-dev@python.org Tue Aug 22 02:49:44 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 21 Aug 2000 18:49:44 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command sdist.py,1.42,1.43 Message-ID: <200008220149.SAA20401@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv20279/command Modified Files: sdist.py Log Message: Don't bother to 'mkpath()' the 'dist_dir' -- that's now taken care of in archive_util.py. Index: sdist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/sdist.py,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** sdist.py 2000/08/05 01:31:54 1.42 --- sdist.py 2000/08/22 01:49:41 1.43 *************** *** 443,448 **** self.make_release_tree (base_dir, self.filelist.files) archive_files = [] # remember names of files we create - if self.dist_dir: - self.mkpath(self.dist_dir) for fmt in self.formats: file = self.make_archive (base_name, fmt, base_dir=base_dir) --- 443,446 ---- From python-dev@python.org Tue Aug 22 03:04:49 2000 From: python-dev@python.org (Guido van Rossum) Date: Mon, 21 Aug 2000 19:04:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib traceback.py,1.16,1.17 Message-ID: <200008220204.TAA28084@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv28019 Modified Files: traceback.py Log Message: Patch by Toby Dickenson: don't die when an error occurs during string conversion in an exception, but instead display where %s is the type name. Index: traceback.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/traceback.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** traceback.py 2000/07/16 12:04:30 1.16 --- traceback.py 2000/08/22 02:04:46 1.17 *************** *** 167,172 **** list.append('%s^\n' % s) value = msg ! list.append('%s: %s\n' % (str(stype), str(value))) return list --- 167,178 ---- list.append('%s^\n' % s) value = msg ! list.append('%s: %s\n' % (str(stype), _some_str(value))) return list + + def _some_str(value): + try: + return str(value) + except: + return '' % type(value).__name__ From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.38,1.39 Message-ID: <200008220243.TAA04367@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Grammar Modified Files: Grammar Log Message: require list comprehensions to start with a for clause Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** Grammar 2000/08/21 15:34:33 1.38 --- Grammar 2000/08/22 02:43:07 1.39 *************** *** 78,82 **** power: atom trailer* ('**' factor)* atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ ! listmaker: test ( list_iter | (',' test)* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME --- 78,82 ---- power: atom trailer* ('**' factor)* atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ ! listmaker: test ( list_for | (',' test)* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.34,1.35 Message-ID: <200008220243.TAA04360@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Doc/ref Modified Files: ref5.tex Log Message: require list comprehensions to start with a for clause Index: ref5.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** ref5.tex 2000/08/15 18:44:10 1.34 --- ref5.tex 2000/08/22 02:43:06 1.35 *************** *** 154,158 **** \begin{verbatim} list_display: "[" [listmaker] "]" ! listmaker: expression ( list_iter | ( "," expression)* [","] ) list_iter: list_for | list_if list_for: "for" expression_list "in" testlist [list_iter] --- 154,158 ---- \begin{verbatim} list_display: "[" [listmaker] "]" ! listmaker: expression ( list_for | ( "," expression)* [","] ) list_iter: list_for | list_if list_for: "for" expression_list "in" testlist [list_iter] *************** *** 165,169 **** evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by one or more "for" or "if" clauses. In this case, the elements of the new list are those that would be produced by considering each of the "for" or "if" clauses a block, nesting from --- 165,170 ---- evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by at least one "for" clause and zero or more ! "for" or "if" clauses. In this case, the elements of the new list are those that would be produced by considering each of the "for" or "if" clauses a block, nesting from From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tut tut.tex,1.114,1.115 Message-ID: <200008220243.TAA04374@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tut In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Doc/tut Modified Files: tut.tex Log Message: require list comprehensions to start with a for clause Index: tut.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tut/tut.tex,v retrieving revision 1.114 retrieving revision 1.115 diff -C2 -r1.114 -r1.115 *** tut.tex 2000/08/16 21:44:03 1.114 --- tut.tex 2000/08/22 02:43:06 1.115 *************** *** 1756,1763 **** \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without ! resorting to use of the \function{map()} or \function{filter()} ! functions. The resulting construct tends often to be clearer than use ! of those functions. \begin{verbatim} --- 1756,1768 ---- \subsection{List Comprehensions} ! List comprehensions provide a concise way to create lists without resorting ! to use of \function{map()}, \function{filter()} and/or \keyword{lambda}. ! The resulting list definition tends often to be clearer than lists built ! using those constructs. Each list comprehension consists of an expression ! following by a \keyword{for} clause, then zero or more \keyword{for} or ! \keyword{if} clauses. The result will be a list resulting from evaluating ! the expression in the context of the \keyword{for} and \keyword{if} clauses ! which follow it. If the expression would evaluate to a tuple, it must be ! parenthesized. \begin{verbatim} *************** *** 1772,1775 **** --- 1777,1791 ---- >>> [3*x for x in vec if x < 2] [] + >>> [{x: x**2} for x in vec] + [{2: 4}, {4: 16}, {6: 36}] + >>> [[x,x**2] for x in vec] + [[2, 4], [4, 16], [6, 36]] + >>> [x, x**2 for x in vec] # error - parens required for tuples + File "", line 1 + [x, x**2 for x in vec] + ^ + SyntaxError: invalid syntax + >>> [(x, x**2) for x in vec] + [(2, 4), (4, 16), (6, 36)] >>> vec1 = [2, 4, 6] >>> vec2 = [4, 3, -9] From python-dev@python.org Tue Aug 22 03:43:10 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.131,2.132 graminit.c,2.26,2.27 Message-ID: <200008220243.TAA04389@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Python Modified Files: compile.c graminit.c Log Message: require list comprehensions to start with a for clause Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.131 retrieving revision 2.132 diff -C2 -r2.131 -r2.132 *** compile.c 2000/08/21 17:07:20 2.131 --- compile.c 2000/08/22 02:43:07 2.132 *************** *** 1044,1048 **** com_list_comprehension(struct compiling *c, node *n) { ! /* listmaker: test list_iter */ char tmpname[12]; sprintf(tmpname, "__%d__", ++c->c_tmpname); --- 1044,1048 ---- com_list_comprehension(struct compiling *c, node *n) { ! /* listmaker: test list_for */ char tmpname[12]; sprintf(tmpname, "__%d__", ++c->c_tmpname); *************** *** 1053,1057 **** com_addopnamestr(c, STORE_NAME, tmpname); com_pop(c, 1); ! com_list_iter(c, n, CHILD(n, 0), tmpname); com_addopnamestr(c, DELETE_NAME, tmpname); --c->c_tmpname; --- 1053,1057 ---- com_addopnamestr(c, STORE_NAME, tmpname); com_pop(c, 1); ! com_list_for(c, CHILD(n, 1), CHILD(n, 0), tmpname); com_addopnamestr(c, DELETE_NAME, tmpname); --c->c_tmpname; *************** *** 1061,1066 **** com_listmaker(struct compiling *c, node *n) { ! /* listmaker: test ( list_iter | (',' test)* [','] ) */ ! if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_iter) com_list_comprehension(c, n); else { --- 1061,1066 ---- com_listmaker(struct compiling *c, node *n) { ! /* listmaker: test ( list_for | (',' test)* [','] ) */ ! if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_for) com_list_comprehension(c, n); else { Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** graminit.c 2000/08/21 15:44:01 2.26 --- graminit.c 2000/08/22 02:43:07 2.27 *************** *** 1318,1322 **** }; static arc arcs_60_0[2] = { ! {128, 1}, {129, 1}, }; --- 1318,1322 ---- }; static arc arcs_60_0[2] = { ! {120, 1}, {129, 1}, }; *************** *** 1341,1345 **** }; static arc arcs_61_4[2] = { ! {120, 5}, {0, 4}, }; --- 1341,1345 ---- }; static arc arcs_61_4[2] = { ! {128, 5}, {0, 4}, }; *************** *** 1362,1366 **** }; static arc arcs_62_2[2] = { ! {120, 3}, {0, 2}, }; --- 1362,1366 ---- }; static arc arcs_62_2[2] = { ! {128, 3}, {0, 2}, }; *************** *** 1623,1627 **** {2, 0}, {3, 0}, ! {316, 0}, {1, "lambda"}, {314, 0}, --- 1623,1627 ---- {2, 0}, {3, 0}, ! {317, 0}, {1, "lambda"}, {314, 0}, *************** *** 1631,1635 **** {1, "class"}, {315, 0}, ! {317, 0}, {318, 0}, }; --- 1631,1635 ---- {1, "class"}, {315, 0}, ! {316, 0}, {318, 0}, }; From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.15,1.16 Message-ID: <200008220243.TAA04373@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Lib/test Modified Files: test_grammar.py Log Message: require list comprehensions to start with a for clause Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** test_grammar.py 2000/08/21 15:46:24 1.15 --- test_grammar.py 2000/08/22 02:43:07 1.16 *************** *** 579,582 **** --- 579,588 ---- print "good: got a SyntaxError as expected" + try: + eval("[x if y]") + print "FAIL: should have raised a SyntaxError!" + except SyntaxError: + print "good: got a SyntaxError as expected" + suppliers = [ (1, "Boeing"), From python-dev@python.org Tue Aug 22 03:43:09 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 19:43:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.5,1.6 Message-ID: <200008220243.TAA04378@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv4225/Lib/test/output Modified Files: test_grammar Log Message: require list comprehensions to start with a for clause Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** test_grammar 2000/08/21 15:46:50 1.5 --- test_grammar 2000/08/22 02:43:07 1.6 *************** *** 56,58 **** --- 56,59 ---- [(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')] good: got a SyntaxError as expected + good: got a SyntaxError as expected [('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')] From python-dev@python.org Tue Aug 22 04:00:56 2000 From: python-dev@python.org (Skip Montanaro) Date: Mon, 21 Aug 2000 20:00:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.99,1.100 Message-ID: <200008220300.UAA06534@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv6280 Modified Files: urllib.py Log Message: * added doc strings to urlopen and unquote_plus * fixed type in doc string for quote Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.99 retrieving revision 1.100 diff -C2 -r1.99 -r1.100 *** urllib.py 2000/08/21 21:42:42 1.99 --- urllib.py 2000/08/22 03:00:52 1.100 *************** *** 54,57 **** --- 54,58 ---- _urlopener = None def urlopen(url, data=None): + """urlopen(url [, data]) -> open file-like object""" global _urlopener if not _urlopener: *************** *** 1004,1007 **** --- 1005,1009 ---- def unquote_plus(s): + """unquote('%7e/abc+def') -> '~/abc def'""" if '+' in s: # replace '+' with ' ' *************** *** 1011,1015 **** always_safe = string.letters + string.digits + '_,.-' def quote(s, safe = '/'): ! """quote('abc def') -> 'abc%20def').""" # XXX Can speed this up an order of magnitude safe = always_safe + safe --- 1013,1017 ---- always_safe = string.letters + string.digits + '_,.-' def quote(s, safe = '/'): ! """quote('abc def') -> 'abc%20def'.""" # XXX Can speed this up an order of magnitude safe = always_safe + safe From python-dev@python.org Tue Aug 22 05:42:22 2000 From: python-dev@python.org (Tim Peters) Date: Mon, 21 Aug 2000 21:42:22 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.19,1.20 pep-0223.txt,1.1,1.2 Message-ID: <200008220442.VAA28531@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28465 Modified Files: pep-0200.txt pep-0223.txt Log Message: Assorted updates in 200. Repaired PEPTzar's conservatism in 223. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** pep-0200.txt 2000/08/21 02:27:22 1.19 --- pep-0200.txt 2000/08/22 04:42:19 1.20 *************** *** 178,182 **** [19-Aug-2000 tim Guido msg on Python-Dev: ! - restore the old behavior on all platforms - add to the docs that to get the common directory you use dirname() - add testcases that check that this works on all platforms --- 178,182 ---- [19-Aug-2000 tim Guido msg on Python-Dev: ! - restore the old behavior on all platforms - Skip volunteered for this - add to the docs that to get the common directory you use dirname() - add testcases that check that this works on all platforms *************** *** 184,188 **** --- 184,219 ---- ] + 2.0b1: Get all patches out of Open. + 2.0b1: Get all patches out of Accepted. + + 2.0b1: Decide on a license. + + 2.0b1 Windows: Look for registry info in HKCU before HKLM - Mark + Hammond. + + 2.0b1 Windows installer: If HKLM isn't writable, back off to HKCU (so + Python can be installed on NT & 2000 without admin privileges). + + 2.0b1 Windows installer: Install w9xpopen.exe only under Win95/98. + + 2.0b1 Windows ME: Don't know anything about it. Will the installer + even run? Does it need the w9xpopen hack? + + 2.0b1 Win98 Guido: popen is hanging on Guido, and even freezing the + whole machine. No clue yet. + + 2.0: Decide on a license. + + 2.0: Finish writing the PEPs for the features that went out + with 2.0b1(! sad, but realistic -- we'll get better with practice). + + 2.0: Major effort to whittle the bug database down to size. I've (tim) + seen this before: if you can keep all the open bugs fitting on one + screen, people will generally keep it that way. But let it slobber + over a screen for a month, & it just goes to hell (no "visible + progress" indeed!). + + Open items -- completed/fixed *************** *** 210,214 **** --- 241,251 ---- objects obvious when working in the interactive interpreter. + * Extended print statement - Barry Warsaw + PEP 214 + http://python.sourceforge.net/peps/pep-0214.html + SF Patch #100970 + http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 + Accepted and in progress *************** *** 254,262 **** getitem if there is no getslice. ! * Extended print statement - Barry Warsaw ! PEP 214 ! http://python.sourceforge.net/peps/pep-0214.html ! SF Patch #100970 ! http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 --- 291,297 ---- getitem if there is no getslice. ! * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? ! ! * Add \U1234678 escapes in u"" strings - Fredrik Lundh? *************** *** 265,270 **** * Tim O'Malley's cookie module -- but need different license - * test harness for C code - Trent Mick - * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. --- 300,303 ---- *************** *** 291,294 **** --- 324,329 ---- - http://www.python.org/pipermail/python-dev/1999-August/002252.html + + * test harness for C code - Trent Mick Index: pep-0223.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0223.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0223.txt 2000/08/21 13:37:45 1.1 --- pep-0223.txt 2000/08/22 04:42:19 1.2 *************** *** 3,10 **** Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Python-Version: 2.1 Status: Draft Created: 20-Aug-2000 ! Post-History: --- 3,10 ---- Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Python-Version: 2.0 Status: Draft Created: 20-Aug-2000 ! Post-History: From python-dev@python.org Tue Aug 22 06:14:52 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 22:14:52 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.25,1.26 Message-ID: <200008220514.WAA06546@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv6537 Modified Files: pep-0000.txt Log Message: List PEP owners by last name, and give a key to their email address as used in the PEP. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** pep-0000.txt 2000/08/21 13:35:37 1.25 --- pep-0000.txt 2000/08/22 05:14:50 1.26 *************** *** 17,53 **** Index ! num filename title owner ! --- ------------ ----- ----- ! I 0 pep-0000.txt Index of Python Enhancement Proposals bwarsaw ! I 1 pep-0001.txt PEP Guidelines bwarsaw, jhylton ! I 2 pep-0002.txt Procedure for Adding New Modules esr ! ! I 160 pep-0160.txt Python 1.6 Release Schedule fdrake ! ! I 200 pep-0200.txt Python 2.0 Release Schedule jhylton ! SA 201 pep-0201.txt Lockstep Iteration bwarsaw ! S 202 pep-0202.txt List Comprehensions tpeters ! S 203 pep-0203.txt Augmented Assignments twouters ! S 204 pep-0204.txt Range Literals twouters ! S 205 pep-0205.txt Weak References fdrake ! I 206 pep-0206.txt 2.0 Batteries Included moshez ! S 207 pep-0207.txt Rich Comparisons davida ! S 208 pep-0208.txt Reworking the Coercion Model davida ! S 209 pep-0209.txt Adding Multidimensional Arrays davida ! S 210 pep-0210.txt Decoupling the Interpreter Loop davida ! T 211 pep-0211.txt Adding New Linear Algebra Operators gvwilson ! S 212 pep-0212.txt Additional Builtin Generators bwarsaw ! S 213 pep-0213.txt Attribute Access Handlers prescod ! SA 214 pep-0214.txt Extended Print Statement bwarsaw ! S 215 pep-0215.txt String Interpolation ping ! I 216 pep-0216.txt Docstring Format moshez ! S 217 pep-0217.txt Display Hook for Interactive Use moshez ! S 218 pep-0218.txt Adding a Built-In Set Object Type gvwilson ! T 219 pep-0219.txt Stackless Python gmcm ! I 220 pep-0220.txt Coroutines, Generators, Continuations gmcm ! SA 221 pep-0221.txt Import As twouters ! S 222 pep-0222.txt Web Library Enhancements akuchlin ! S 223 pep-0223.txt Change the Meaning of \x Escapes tpeters Key --- 17,54 ---- Index ! num filename title owner ! --- ------------ ----- ----- ! I 0 pep-0000.txt Index of Python Enhancement Proposals Warsaw ! I 1 pep-0001.txt PEP Guidelines Warsaw, Hylton ! I 2 pep-0002.txt Procedure for Adding New Modules Raymond + I 160 pep-0160.txt Python 1.6 Release Schedule Drake + + I 200 pep-0200.txt Python 2.0 Release Schedule Hylton + SA 201 pep-0201.txt Lockstep Iteration Warsaw + S 202 pep-0202.txt List Comprehensions Peters + S 203 pep-0203.txt Augmented Assignments Wouters + S 204 pep-0204.txt Range Literals Wouters + S 205 pep-0205.txt Weak References Drake + I 206 pep-0206.txt 2.0 Batteries Included Zadka + S 207 pep-0207.txt Rich Comparisons Ascher + S 208 pep-0208.txt Reworking the Coercion Model Ascher + S 209 pep-0209.txt Adding Multidimensional Arrays Ascher + S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher + T 211 pep-0211.txt Adding New Linear Algebra Operators Wilson + S 212 pep-0212.txt Additional Builtin Generators Warsaw + S 213 pep-0213.txt Attribute Access Handlers Prescod + SA 214 pep-0214.txt Extended Print Statement Warsaw + S 215 pep-0215.txt String Interpolation Yee + I 216 pep-0216.txt Docstring Format Zadka + S 217 pep-0217.txt Display Hook for Interactive Use Zadka + S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson + T 219 pep-0219.txt Stackless Python McMillan + I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan + SA 221 pep-0221.txt Import As Wouters + S 222 pep-0222.txt Web Library Enhancements Kuchling + S 223 pep-0223.txt Change the Meaning of \x Escapes Peters + + Key *************** *** 57,60 **** --- 58,80 ---- A - Accepted proposal R - Rejected proposal + + + Owners + + name email address + ---------------- ------------- + Ascher, David davida@activestate.com + Drake, Fred fdrake@beopen.com + Hylton, Jeremy jeremy@beopen.com + Kuchling, Andrew akuchlin@mems-exchange.org + McMillan, Gordon gmcm@hypernet.com + Peters, Tim tpeters@beopen.com + Prescod, Paul paul@prescod.net + Raymond, Eric esr@snark.thyrsus.com + Warsaw, Barry bwarsaw@beopen.com + Wilson, Greg gvwilson@nevex.com + Wouters, Thomas thomas@xs4all.net + Yee, Ka-Ping ping@lfw.org + Zadka, Moshe moshez@math.huji.ac.il From python-dev@python.org Tue Aug 22 06:15:53 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 21 Aug 2000 22:15:53 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0222.txt,1.1,1.2 Message-ID: <200008220515.WAA06609@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv6601 Modified Files: pep-0222.txt Log Message: Added Andrew's name. Index: pep-0222.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0222.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0222.txt 2000/08/18 15:21:45 1.1 --- pep-0222.txt 2000/08/22 05:15:51 1.2 *************** *** 2,6 **** Title: Web Library Enhancements Version: $Revision$ ! Author: akuchlin@mems-exchange.org Status: Active Type: Standards Track --- 2,6 ---- Title: Web Library Enhancements Version: $Revision$ ! Author: akuchlin@mems-exchange.org (Andrew Kuchling) Status: Active Type: Standards Track From python-dev@python.org Tue Aug 22 12:20:25 2000 From: python-dev@python.org (Mark Hammond) Date: Tue, 22 Aug 2000 04:20:25 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC import_nt.c,1.13,1.14 Message-ID: <200008221120.EAA32592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv32480 Modified Files: import_nt.c Log Message: Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override. Index: import_nt.c =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/import_nt.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** import_nt.c 2000/07/03 23:51:17 1.13 --- import_nt.c 2000/08/22 11:20:21 1.14 *************** *** 35,39 **** struct filedescr *fdp = NULL; FILE *fp; ! HKEY keyBase = HKEY_LOCAL_MACHINE; int modNameSize; long regStat; --- 35,39 ---- struct filedescr *fdp = NULL; FILE *fp; ! HKEY keyBase = HKEY_CURRENT_USER; int modNameSize; long regStat; *************** *** 57,62 **** modNameSize = pathLen; regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize); ! if (regStat != ERROR_SUCCESS) ! return NULL; /* use the file extension to locate the type entry. */ for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { --- 57,71 ---- modNameSize = pathLen; regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize); ! if (regStat != ERROR_SUCCESS) { ! /* No user setting - lookup in machine settings */ ! keyBase = HKEY_LOCAL_MACHINE; ! /* be anal - failure may have reset size param */ ! modNameSize = pathLen; ! regStat = RegQueryValue(keyBase, moduleKey, ! pathBuf, &modNameSize); ! ! if (regStat != ERROR_SUCCESS) ! return NULL; ! } /* use the file extension to locate the type entry. */ for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { From python-dev@python.org Tue Aug 22 13:10:05 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 05:10:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python20.wse,1.6,1.7 Message-ID: <200008221210.FAA25857@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv25776 Modified Files: python20.wse Log Message: Thomas Heller noticed that the wrong registry entry was written for the DLL. Replace %_SYSDEST_%\Python20.dll with %_DLLDEST_%\Python20.dll. Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** python20.wse 2000/08/01 15:50:09 1.6 --- python20.wse 2000/08/22 12:10:02 1.7 *************** *** 998,1002 **** item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_SYSDEST_%\Python20.dll Root=2 end --- 998,1002 ---- item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_DLLDEST_%\Python20.dll Root=2 end From python-dev@python.org Tue Aug 22 13:38:55 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 05:38:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8.2.2,1.8.2.2.2.1 Message-ID: <200008221238.FAA30718@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv30659 Modified Files: Tag: cnri-16-start python16.wse Log Message: Thomas Heller noticed that the wrong registry entry was written for the DLL. Replace %_SYSDEST_%\Python16.dll with %_DLLDEST_%\Python16.dll. Index: python16.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.wse,v retrieving revision 1.8.2.2 retrieving revision 1.8.2.2.2.1 diff -C2 -r1.8.2.2 -r1.8.2.2.2.1 *** python16.wse 2000/08/06 19:30:07 1.8.2.2 --- python16.wse 2000/08/22 12:38:52 1.8.2.2.2.1 *************** *** 998,1002 **** item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_SYSDEST_%\Python16.dll Root=2 end --- 998,1002 ---- item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Dll ! New Value=%_DLLDEST_%\Python16.dll Root=2 end From python-dev@python.org Tue Aug 22 14:01:56 2000 From: python-dev@python.org (Skip Montanaro) Date: Tue, 22 Aug 2000 06:01:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib posixpath.py,1.34,1.35 ntpath.py,1.28,1.29 dospath.py,1.16,1.17 Message-ID: <200008221301.GAA21005@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv20607 Modified Files: posixpath.py ntpath.py dospath.py Log Message: revert semantics of commonprefix to work character-by-character Index: posixpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/posixpath.py,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** posixpath.py 2000/07/19 17:09:51 1.34 --- posixpath.py 2000/08/22 13:01:53 1.35 *************** *** 119,128 **** "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! n = m[:] ! for i in range(len(n)): ! n[i] = n[i].split("/") ! ! prefix = n[0] ! for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: --- 119,124 ---- "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! prefix = m[0] ! for item in m: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: *************** *** 130,134 **** if i == 0: return '' break ! return "/".join(prefix) --- 126,130 ---- if i == 0: return '' break ! return prefix Index: ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/ntpath.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** ntpath.py 2000/08/14 06:20:32 1.28 --- ntpath.py 2000/08/22 13:01:53 1.29 *************** *** 9,13 **** import stat import string - import re --- 9,12 ---- *************** *** 160,169 **** "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! n = map(string.lower, m) ! for i in range(len(n)): ! n[i] = re.split(r"[/\\]", n[i]) ! ! prefix = n[0] ! for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: --- 159,164 ---- "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! prefix = m[0] ! for item in m: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: *************** *** 171,175 **** if i == 0: return '' break ! return "\\".join(prefix) --- 166,170 ---- if i == 0: return '' break ! return prefix Index: dospath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dospath.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** dospath.py 2000/07/17 03:06:26 1.16 --- dospath.py 2000/08/22 13:01:53 1.17 *************** *** 4,8 **** import stat import string - import re --- 4,7 ---- *************** *** 104,118 **** - # Return the longest prefix of all list elements. - def commonprefix(m): ! "Given a list of pathnames, returns the longest common leading component" if not m: return '' ! n = map(string.lower, m) ! for i in range(len(n)): ! n[i] = re.split(r"[/\\]", n[i]) ! ! prefix = n[0] ! for item in n: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: --- 103,112 ---- def commonprefix(m): ! """Return the longest prefix of all list elements.""" ! if not m: return '' ! prefix = m[0] ! for item in m: for i in range(len(prefix)): if prefix[:i+1] <> item[:i+1]: *************** *** 120,124 **** if i == 0: return '' break ! return "\\".join(prefix) --- 114,118 ---- if i == 0: return '' break ! return prefix From python-dev@python.org Tue Aug 22 15:04:27 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 07:04:27 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python20.wse,1.7,1.8 Message-ID: <200008221404.HAA12963@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv12878 Modified Files: python20.wse Log Message: At Mark Hammond's request, removing registry key Software\Python\PythonCore\2.0\Dll\Python20.dll -- it's no longer needed according to him. Note: not yet tested! Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** python20.wse 2000/08/22 12:10:02 1.7 --- python20.wse 2000/08/22 14:04:24 1.8 *************** *** 997,1005 **** end item: Edit Registry - Key=Software\Python\PythonCore\%PY_VERSION%\Dll - New Value=%_DLLDEST_%\Python20.dll - Root=2 - end - item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Modules Root=2 --- 997,1000 ---- From python-dev@python.org Tue Aug 22 15:13:02 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 22 Aug 2000 07:13:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild python16.wse,1.8.2.2.2.1,1.8.2.2.2.2 Message-ID: <200008221413.HAA20046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv19968 Modified Files: Tag: cnri-16-start python16.wse Log Message: At Mark Hammond's request, removing registry key Software\Python\PythonCore\*\Dll\Python*.dll -- it's no longer needed according to him. Note: not yet tested! Index: python16.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/Attic/python16.wse,v retrieving revision 1.8.2.2.2.1 retrieving revision 1.8.2.2.2.2 diff -C2 -r1.8.2.2.2.1 -r1.8.2.2.2.2 *** python16.wse 2000/08/22 12:38:52 1.8.2.2.2.1 --- python16.wse 2000/08/22 14:12:58 1.8.2.2.2.2 *************** *** 997,1005 **** end item: Edit Registry - Key=Software\Python\PythonCore\%PY_VERSION%\Dll - New Value=%_DLLDEST_%\Python16.dll - Root=2 - end - item: Edit Registry Key=Software\Python\PythonCore\%PY_VERSION%\Modules Root=2 --- 997,1000 ---- From python-dev@python.org Tue Aug 22 22:51:24 2000 From: python-dev@python.org (Jack Jansen) Date: Tue, 22 Aug 2000 14:51:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.82,2.83 listobject.c,2.84,2.85 Message-ID: <200008222151.OAA08030@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv7972 Modified Files: fileobject.c listobject.c Log Message: Added include for limits.h Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.82 retrieving revision 2.83 diff -C2 -r2.82 -r2.83 *** fileobject.c 2000/08/11 19:02:59 2.82 --- fileobject.c 2000/08/22 21:51:22 2.83 *************** *** 14,17 **** --- 14,21 ---- #include "structmember.h" + #ifdef HAVE_LIMITS_H + #include + #endif + #ifndef DONT_HAVE_SYS_TYPES_H #include Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.84 retrieving revision 2.85 diff -C2 -r2.84 -r2.85 *** listobject.c 2000/08/13 22:47:45 2.84 --- listobject.c 2000/08/22 21:51:22 2.85 *************** *** 18,21 **** --- 18,24 ---- #include /* For size_t */ #endif + #ifdef HAVE_LIMITS_H + #include + #endif #define ROUNDUP(n, PyTryBlock) \ *************** *** 259,262 **** --- 262,266 ---- { int i; + for (i = 0; i < v->ob_size && i < w->ob_size; i++) { int cmp = PyObject_Compare(v->ob_item[i], w->ob_item[i]); From python-dev@python.org Tue Aug 22 22:52:54 2000 From: python-dev@python.org (Jack Jansen) Date: Tue, 22 Aug 2000 14:52:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.96,2.97 Message-ID: <200008222152.OAA08218@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv8039 Modified Files: object.c Log Message: Added PyOS_CheckStack call to PyObject_Compare Lowered the recursion limit on compares to 60 (one recursion depth can take a whopping 2K of stack space when running test_b1!) Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.96 retrieving revision 2.97 diff -C2 -r2.96 -r2.97 *** object.c 2000/08/18 05:01:19 2.96 --- object.c 2000/08/22 21:52:51 2.97 *************** *** 12,15 **** --- 12,18 ---- #include "Python.h" + #ifdef HAVE_LIMITS_H + #include + #endif #ifdef macintosh *************** *** 340,344 **** --- 343,351 ---- nesting limit, enable code to detect circular data structures. */ + #ifdef macintosh + #define NESTING_LIMIT 60 + #else #define NESTING_LIMIT 500 + #endif int _PyCompareState_nesting = 0; *************** *** 395,398 **** --- 402,411 ---- int result; + #if defined(USE_STACKCHECK) + if (PyOS_CheckStack() < 0) { + PyErr_SetString(PyExc_MemoryError, "Stack overflow"); + return -1; + } + #endif if (v == NULL || w == NULL) { PyErr_BadInternalCall(); From python-dev@python.org Wed Aug 23 04:38:56 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 20:38:56 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.20,1.21 Message-ID: <200008230338.UAA09605@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9566 Modified Files: pep-0200.txt Log Message: Recorded new test failures on Windows. If Jeremy doesn't object, I'll keep the Windows bugs part of this PEP up-to-date for him. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** pep-0200.txt 2000/08/22 04:42:19 1.20 --- pep-0200.txt 2000/08/23 03:38:53 1.21 *************** *** 91,94 **** --- 91,101 ---- test case platform R B date reported --------- -------- - - ------------- + test_parser Windows ? ? 22-Aug-2000 + [probably all platforms] + + test_posixpath Windows ? ? 22-Aug-2000 + [probably all platforms; think it's because Skip backed out + commonpathprefix changes but didn't change the tests] + test_fork1 Linux X 26-Jul-2000 just SMP? [no clue; there are probably two bugs here] From python-dev@python.org Wed Aug 23 04:58:48 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 20:58:48 -0700 Subject: [Python-checkins] CVS: python/nondist/sf-html sf-faq.html,1.12,1.13 Message-ID: <200008230358.UAA10978@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/sf-html In directory slayer.i.sourceforge.net:/tmp/cvs-serv10958 Modified Files: sf-faq.html Log Message: Update Patch Manager Guidlines, wrt de facto meanings of Open & Rejected. Index: sf-faq.html =================================================================== RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** sf-faq.html 2000/08/10 03:51:09 1.12 --- sf-faq.html 2000/08/23 03:58:46 1.13 *************** *** 64,68 ****

    A. Appendix

      !
    1. Patch Manager Guidelines [09.07.2000]
    2. Python Patch Submission Guidelines [29.06.2000]
    --- 64,68 ----

    A. Appendix

      !
    1. Patch Manager Guidelines [22.08.2000]
    2. Python Patch Submission Guidelines [29.06.2000]
    *************** *** 547,551 ****
    The initial status of all patches.
    ! The patch is under consideration, but has not been reviewed yet.
    The status will normally change to Accepted or Rejected next.
    The person submitting the patch should (if they can) assign it to the person --- 547,552 ----
    The initial status of all patches.
    ! The patch is under consideration, but has not been reviewed yet, or ! is under review but not yet Accepted or Rejected.
    The status will normally change to Accepted or Rejected next.
    The person submitting the patch should (if they can) assign it to the person *************** *** 557,561 **** Discussion of major patches is carried out on the Python-Dev mailing list. For simple patches, the SourceForge comment mechanism should be sufficient. ! [xxx an email gateway would be great, ditto Ping's Roundup]

    Accepted

    --- 558,572 ---- Discussion of major patches is carried out on the Python-Dev mailing list. For simple patches, the SourceForge comment mechanism should be sufficient. ! [xxx an email gateway would be great, ditto Ping's Roundup]
    ! For the reviewer: If you're certain the patch should be applied, ! change the status to Accepted and assign it back to the submitter (if ! possible) for checkin. If you're certain the patch should never be ! accepted, change the status to Rejected and assign it to None. If you ! have specific complaints that would cause you to change your mind, ! explain them clearly in a comment, leave the status Open, and reassign ! back to the submitter. If you're uncertain, leave the status Open, explain ! your uncertainies in a comment, and reassign the patch to someone ! you believe can address your remaining questions; or leave the status ! Open and bring it up on Python-Dev.

    Accepted

    *************** *** 574,579 **** The patch has been accepted and applied.
    The previous status was Accepted, or possibly Open if the submitter was ! Guido (or moral equivalent in some particular area of ! expertise).

    Rejected

    --- 585,589 ---- The patch has been accepted and applied.
    The previous status was Accepted, or possibly Open if the submitter was ! Guido (or moral equivalent in some particular area of expertise).

    Rejected

    *************** *** 581,591 ****
    The patch has been reviewed and rejected.
    ! When the objections are addressed, the status may change to Open again.
    ! The person changing the status to Rejected should assign the patch back to ! the submitter, or if it's clear the patch will never be accepted, assign it ! to None.
    ! Note that SourceForge allows the submitter to overwrite the patch with a new ! version.

    Out of date

    --- 591,597 ----
    The patch has been reviewed and rejected.
    ! There are generally no transitions out of this state: the patch is dead.
    ! The person changing the status to Rejected should assign it to None.
    !

    Out of date

    From python-dev@python.org Wed Aug 23 05:25:00 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 21:25:00 -0700 Subject: [Python-checkins] CVS: python/nondist/sf-html sf-faq.html,1.13,1.14 Message-ID: <200008230425.VAA21352@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/sf-html In directory slayer.i.sourceforge.net:/tmp/cvs-serv21320 Modified Files: sf-faq.html Log Message: Updated Patch Guidelines revision numbers. Index: sf-faq.html =================================================================== RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** sf-faq.html 2000/08/23 03:58:46 1.13 --- sf-faq.html 2000/08/23 04:24:58 1.14 *************** *** 519,524 ****

    Intended use of SourceForge patch status & "assigned to" fields

    ! Revision 2
    ! 09-Jul-2000

    In general, the status field should be close to self-explanatory, and the --- 519,524 ----

    Intended use of SourceForge patch status & "assigned to" fields

    ! Revision 3
    ! 22-Aug-2000

    In general, the status field should be close to self-explanatory, and the From python-dev@python.org Wed Aug 23 06:04:15 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:04:15 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.26,1.27 Message-ID: <200008230504.WAA31963@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv31955 Modified Files: pep-0000.txt Log Message: Get rid of the `Technical' PEP category. PEPs are either Standards Track or Informational. PEP 211 and 219 become Standards Track. PEP 212 is hijacked, and renamed "Loop Counter Iteration". It is assigned to Peter Schneider-Kamp. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** pep-0000.txt 2000/08/22 05:14:50 1.26 --- pep-0000.txt 2000/08/23 05:04:12 1.27 *************** *** 36,41 **** S 209 pep-0209.txt Adding Multidimensional Arrays Ascher S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! T 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! S 212 pep-0212.txt Additional Builtin Generators Warsaw S 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw --- 36,41 ---- S 209 pep-0209.txt Adding Multidimensional Arrays Ascher S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! S 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! S 212 pep-0212.txt Loop Counter Iteration Schneider-Kamp S 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw *************** *** 44,48 **** S 217 pep-0217.txt Display Hook for Interactive Use Zadka S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! T 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters --- 44,48 ---- S 217 pep-0217.txt Display Hook for Interactive Use Zadka S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! S 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters *************** *** 55,59 **** I - Informational PEP S - Standards Track PEP - T - Technical PEP A - Accepted proposal R - Rejected proposal --- 55,58 ---- *************** *** 62,80 **** Owners ! name email address ! ---------------- ------------- ! Ascher, David davida@activestate.com ! Drake, Fred fdrake@beopen.com ! Hylton, Jeremy jeremy@beopen.com ! Kuchling, Andrew akuchlin@mems-exchange.org ! McMillan, Gordon gmcm@hypernet.com ! Peters, Tim tpeters@beopen.com ! Prescod, Paul paul@prescod.net ! Raymond, Eric esr@snark.thyrsus.com ! Warsaw, Barry bwarsaw@beopen.com ! Wilson, Greg gvwilson@nevex.com ! Wouters, Thomas thomas@xs4all.net ! Yee, Ka-Ping ping@lfw.org ! Zadka, Moshe moshez@math.huji.ac.il --- 61,80 ---- Owners ! name email address ! ---------------- ------------- ! Ascher, David davida@activestate.com ! Drake, Fred fdrake@beopen.com ! Hylton, Jeremy jeremy@beopen.com ! Kuchling, Andrew akuchlin@mems-exchange.org ! McMillan, Gordon gmcm@hypernet.com ! Peters, Tim tpeters@beopen.com ! Prescod, Paul paul@prescod.net ! Raymond, Eric esr@snark.thyrsus.com ! Schneider-Kamp, Peter nownder@nowonder.de ! Warsaw, Barry bwarsaw@beopen.com ! Wilson, Greg gvwilson@nevex.com ! Wouters, Thomas thomas@xs4all.net ! Yee, Ka-Ping ping@lfw.org ! Zadka, Moshe moshez@math.huji.ac.il From python-dev@python.org Wed Aug 23 06:06:25 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:06:25 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0212.txt,1.2,1.3 Message-ID: <200008230506.WAA32064@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32056 Modified Files: pep-0212.txt Log Message: PEP 212 is hijacked, and renamed "Loop Counter Iteration". It is assigned to Peter Schneider-Kamp. Based on recent discussions with the BDFL and the Python 2.0 release manager, this PEP is deferred until Python 2.1. Some minor editorial and formating modifications were performed on the text supplied by Peter. Editor also added footnotes. Index: pep-0212.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0212.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0212.txt 2000/07/22 15:13:23 1.2 --- pep-0212.txt 2000/08/23 05:06:22 1.3 *************** *** 1,41 **** PEP: 212 ! Title: Additional Builtin Generators Version: $Revision$ ! Owner: bwarsaw@beopen.com (Barry A. Warsaw) ! Python-Version: 2.0 ! Status: Incomplete - Introduction ! This PEP describes some proposed additional generator-creating ! builtin functions for Python 2.0. This PEP tracks the status and ! ownership of this feature, slated for introduction in Python 2.0. ! It contains a description of the feature and outlines changes ! necessary to support the feature. This PEP summarizes discussions ! held in mailing list forums, and provides URLs for further ! information, where appropriate. The CVS revision history of this ! file contains the definitive historical record. ! ! New functions ! irange() ! tuples() ! lists() ! dict() - - Reference Implementation ! Copyright This document has been placed in the public domain. --- 1,116 ---- PEP: 212 ! Title: Loop Counter Iteration Version: $Revision$ ! Author: nowonder@nowonder.de (Peter Schneider-Kamp) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 22-Aug-2000 Introduction ! This PEP describes the often proposed feature of exposing the loop ! counter in for-loops. This PEP tracks the status and ownership of ! this feature. It contains a description of the feature and ! outlines changes necessary to support the feature. This PEP ! summarizes discussions held in mailing list forums, and provides ! URLs for further information, where appropriate. The CVS revision ! history of this file contains the definitive historical record. ! Motivation ! Standard for-loops in Python iterate over the elements of a ! sequence[1]. Often it is desirable to loop over the indices or ! both the elements and the indices instead. + The common idioms used to accomplish this are unintuitive. This + PEP proposes two different ways of exposing the indices. + Loop counter iteration + The current idiom for looping over the indices makes use of the + built-in 'range' function: ! for i in range(len(sequence)): ! # work with index i ! ! Looping over both elements and indices can be achieved either by the ! old idiom or by using the new 'zip' built-in function[2]: ! ! for i in range(len(sequence)): ! e = sequence[i] ! # work with index i and element e ! ! or ! ! for i, e in zip(range(len(sequence)), sequence): ! # work with index i and element e ! ! ! The Proposed Solutions ! ! There are two solutions that have been discussed. One adds a ! non-reserved keyword, the other adds two built-in functions. ! ! A third solution would have been the addition of 'keys', 'items' ! and 'values' methods to sequences, which enable looping over ! indices only, both indices and elements, and elements only ! respectively. ! ! ! Non-reserved keyword 'indexing' ! ! This solution would extend the syntax of the for-loop by adding ! an optional ' indexing' clause which can also be used ! instead of the ' in' clause.. ! ! Looping over the indices of a sequence would thus become: ! ! for i indexing sequence: ! # work with index i ! ! Looping over both indices and elements would similarly be: ! ! for i indexing e in sequence: ! # work with index i and element e ! ! ! Built-in functions 'indices' and 'irange' ! ! This solution adds two built-in functions 'indices' and 'irange'. ! The semantics of these can be described as follows: ! ! def indices(sequence): ! return range(len(sequence)) ! ! def irange(sequence): ! return zip(range(len(sequence)), sequence) ! ! These functions could be implemented either eagerly or lazily and ! should be easy to extend in order to accept more than one sequence ! argument. ! ! The use of these functions would simplify the idioms for looping ! over the indices and over both elements and indices: ! ! for i in indices(sequence): ! # work with index i ! ! for i, e in irange(sequence): ! # work with index i and element e ! ! Copyright This document has been placed in the public domain. + + + References + + [1] http://www.python.org/doc/current/ref/for.html + [2] Lockstep Iteration, pep-0201.txt From python-dev@python.org Wed Aug 23 06:04:45 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:04:45 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.9,1.10 Message-ID: <200008230504.WAA31986@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv31978 Modified Files: pep-0001.txt Log Message: Get rid of the `Technical' PEP category. PEPs are either Standards Track or Informational. Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pep-0001.txt 2000/08/17 05:01:20 1.9 --- pep-0001.txt 2000/08/23 05:04:42 1.10 *************** *** 31,41 **** Kinds of PEPs ! There are three kinds of PEPs. A standards track PEP describes a ! new feature for Python. An informational PEP describes a Python ! design issue, or provides general guidelines or information to the ! Python community, but does not propose a new feature. A technical ! PEP describes a new implementation or other internal modification ! that doesn't directly expose new features to the Python ! programmer. --- 31,39 ---- Kinds of PEPs ! There are two kinds of PEPs. A standards track PEP describes a ! new feature or implementation for Python. An informational PEP ! describes a Python design issue, or provides general guidelines or ! information to the Python community, but does not propose a new ! feature. From python-dev@python.org Wed Aug 23 06:10:00 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:10:00 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.27,1.28 Message-ID: <200008230510.WAA32291@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32283 Modified Files: pep-0000.txt Log Message: Added the `D'eferred flag, and marked as deferred all standards track PEPs pushed back past 2.0: 205, 207-213, 215, 217-219, 222. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** pep-0000.txt 2000/08/23 05:04:12 1.27 --- pep-0000.txt 2000/08/23 05:09:57 1.28 *************** *** 30,51 **** S 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters ! S 205 pep-0205.txt Weak References Drake I 206 pep-0206.txt 2.0 Batteries Included Zadka ! S 207 pep-0207.txt Rich Comparisons Ascher ! S 208 pep-0208.txt Reworking the Coercion Model Ascher ! S 209 pep-0209.txt Adding Multidimensional Arrays Ascher ! S 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! S 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! S 212 pep-0212.txt Loop Counter Iteration Schneider-Kamp ! S 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw ! S 215 pep-0215.txt String Interpolation Yee I 216 pep-0216.txt Docstring Format Zadka ! S 217 pep-0217.txt Display Hook for Interactive Use Zadka ! S 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! S 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters ! S 222 pep-0222.txt Web Library Enhancements Kuchling S 223 pep-0223.txt Change the Meaning of \x Escapes Peters --- 30,51 ---- S 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters ! SD 205 pep-0205.txt Weak References Drake I 206 pep-0206.txt 2.0 Batteries Included Zadka ! SD 207 pep-0207.txt Rich Comparisons Ascher ! SD 208 pep-0208.txt Reworking the Coercion Model Ascher ! SD 209 pep-0209.txt Adding Multidimensional Arrays Ascher ! SD 210 pep-0210.txt Decoupling the Interpreter Loop Ascher ! SD 211 pep-0211.txt Adding New Linear Algebra Operators Wilson ! SD 212 pep-0212.txt Loop Counter Iteration Schneider-Kamp ! SD 213 pep-0213.txt Attribute Access Handlers Prescod SA 214 pep-0214.txt Extended Print Statement Warsaw ! SD 215 pep-0215.txt String Interpolation Yee I 216 pep-0216.txt Docstring Format Zadka ! SD 217 pep-0217.txt Display Hook for Interactive Use Zadka ! SD 218 pep-0218.txt Adding a Built-In Set Object Type Wilson ! SD 219 pep-0219.txt Stackless Python McMillan I 220 pep-0220.txt Coroutines, Generators, Continuations McMillan SA 221 pep-0221.txt Import As Wouters ! SD 222 pep-0222.txt Web Library Enhancements Kuchling S 223 pep-0223.txt Change the Meaning of \x Escapes Peters *************** *** 57,60 **** --- 57,61 ---- A - Accepted proposal R - Rejected proposal + D - Deferred proposal From python-dev@python.org Wed Aug 23 06:12:58 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:12:58 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0201.txt,1.14,1.15 Message-ID: <200008230512.WAA32523@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32514 Modified Files: pep-0201.txt Log Message: Added Type: header, and rearranged other headers a bit. Index: pep-0201.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0201.txt,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** pep-0201.txt 2000/08/03 15:41:47 1.14 --- pep-0201.txt 2000/08/23 05:12:55 1.15 *************** *** 3,8 **** Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) - Python-Version: 2.0 Status: Accepted Created: 13-Jul-2000 Post-History: 27-Jul-2000 --- 3,9 ---- Version: $Revision$ Author: bwarsaw@beopen.com (Barry A. Warsaw) Status: Accepted + Type: Standards Track + Python-Version: 2.0 Created: 13-Jul-2000 Post-History: 27-Jul-2000 From python-dev@python.org Wed Aug 23 06:19:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:19:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0202.txt,1.4,1.5 Message-ID: <200008230519.WAA00454@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv446 Modified Files: pep-0202.txt Log Message: Minor editorial clean ups: - conform the headers - `standard' paragraph wrapping (i.e. how the Editor's editor wraps 'em :) - move the URL for the patch to the (new) References section - added reference to PEP 201 Tim, should this be marked Accepted now? Index: pep-0202.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0202.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** pep-0202.txt 2000/07/27 20:13:39 1.4 --- pep-0202.txt 2000/08/23 05:19:21 1.5 *************** *** 2,30 **** Title: List Comprehensions Version: $Revision$ ! Owner: tpeters@beopen.com (Tim Peters) Python-Version: 2.0 ! Status: Incomplete Introduction ! This PEP describes a proposed syntactical extension to Python, list ! comprehensions. - The Proposed Solution ! It is proposed to allow conditional construction of list literals using ! for and if clauses. They would nest in the same way for loops and if ! statements nest now. - Rationale List comprehensions provide a more concise way to create lists in ! situations where map() and filter() and/or nested loops would currently ! be used. --- 2,31 ---- Title: List Comprehensions Version: $Revision$ ! Author: tpeters@beopen.com (Tim Peters) ! Status: Draft ! Type: Standards Track Python-Version: 2.0 ! Created: 13-Jul-2000 ! Post-History: Introduction ! This PEP describes a proposed syntactical extension to Python, ! list comprehensions. The Proposed Solution ! It is proposed to allow conditional construction of list literals ! using for and if clauses. They would nest in the same way for ! loops and if statements nest now. Rationale List comprehensions provide a more concise way to create lists in ! situations where map() and filter() and/or nested loops would ! currently be used. *************** *** 59,68 **** Reference Implementation - - Please refer to - - https://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 ! for a patch that adds list comprehensions to Python. --- 60,65 ---- Reference Implementation ! SourceForge contains a patch that adds list comprehensions to Python[1]. *************** *** 75,82 **** - The form [x, y for ...] should be disallowed; one should be ! required to write [(x, y) for ...]. - The form [... for x... for y...] nests, with the last index ! varying fastest, just like nested for loops. --- 72,79 ---- - The form [x, y for ...] should be disallowed; one should be ! required to write [(x, y) for ...]. - The form [... for x... for y...] nests, with the last index ! varying fastest, just like nested for loops. *************** *** 85,91 **** Syntax ! Several people proposed connecting or separating syntax between the ! various clauses, for example, requiring a semicolon between them to ! set them apart: [i,f; for i in nums; for f in fruit; if f[0]=="P"; if i%2==1] --- 82,88 ---- Syntax ! Several people proposed connecting or separating syntax ! between the various clauses, for example, requiring a ! semicolon between them to set them apart: [i,f; for i in nums; for f in fruit; if f[0]=="P"; if i%2==1] *************** *** 114,129 **** map(None, nums, fruit) ! It's not clear that this is necessary. The newly proposed zip() ! builtin takes care of that case. Stability of the Implementation ! The current reference implementation is simply an adaptation of Greg ! Ewing's original demonstration of the concept. Other than tracking ! changes to the source code to keep it a valid patch, reindenting the ! code and switching to function prototypes, nothing has been done to ! it. This obviously raises some questions about how stable the code ! is. It has not had a lot of exercise, though the patch does include ! a few test cases. --- 111,133 ---- map(None, nums, fruit) ! It's not clear that this is necessary. The newly proposed ! zip() builtin[2] takes care of that case. Stability of the Implementation + + The current reference implementation is simply an adaptation + of Greg Ewing's original demonstration of the concept. Other + than tracking changes to the source code to keep it a valid + patch, reindenting the code and switching to function + prototypes, nothing has been done to it. This obviously + raises some questions about how stable the code is. It has + not had a lot of exercise, though the patch does include a few + test cases. + + + References ! [1] https://sourceforge.net/patch/?func=detailpatch&patch_id=100654&group_id=5470 ! [2] Lockstep Iteration, pep-0201.txt From python-dev@python.org Wed Aug 23 06:22:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:22:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.7,1.8 Message-ID: <200008230522.WAA00674@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv661 Modified Files: pep-0203.txt Log Message: Rearranged a few headers. Thomas, should this PEP's status be changed to Accepted? Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** pep-0203.txt 2000/08/14 19:58:09 1.7 --- pep-0203.txt 2000/08/23 05:22:41 1.8 *************** *** 2,10 **** Title: Augmented Assignments Version: $Revision$ ! Owner: thomas@xs4all.net (Thomas Wouters) ! Python-Version: 2.0 Status: Draft Created: 13-Jul-2000 - Type: Standard Post-History: 14-Aug-2000 --- 2,10 ---- Title: Augmented Assignments Version: $Revision$ ! Author: thomas@xs4all.net (Thomas Wouters) Status: Draft + Type: Standards Track + Python-Version: 2.0 Created: 13-Jul-2000 Post-History: 14-Aug-2000 *************** *** 308,311 **** --- 308,312 ---- [3] PEP 211, Adding New Linear Algebra Operators, http://python.sourceforge.net/peps/pep-0211.html + From python-dev@python.org Wed Aug 23 06:28:48 2000 From: python-dev@python.org (Tim Peters) Date: Tue, 22 Aug 2000 22:28:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test README,1.4,1.5 autotest.py,1.10,1.11 Message-ID: <200008230528.WAA01240@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv1084/python/dist/src/lib/test Modified Files: README autotest.py Log Message: Rehabilitate autotest.py. In README: Write up (Guido's) rules for intra-test imports; warn against asserts; document test_support.use_large_resources. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/README,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** README 2000/08/21 16:55:57 1.4 --- README 2000/08/23 05:28:45 1.5 *************** *** 137,141 **** --- 137,151 ---- raising TestFailed. + * Use "assert" sparingly, if at all. It's usually better to just print + what you got, and rely on regrtest's got-vs-expected comparison to + catch deviations from what you expect. assert statements aren't + executed at all when regrtest is run in -O mode; and, because they + cause the test to stop immediately, can lead to a long & tedious + test-fix, test-fix, test-fix, ... cycle when things are badly broken + (and note that "badly broken" often includes running the test suite + for the first time on new platforms or under new implementations of + the language). + Miscellaneous *************** *** 158,164 **** --- 168,200 ---- lots of examples. + * use_large_resources - true iff tests requiring large time or space + should be run. + * fcmp(x,y) - you can call this function to compare two floating point numbers when you expect them to only be approximately equal withing a fuzz factor (test_support.FUZZ, which defaults to 1e-6). + + NOTE: Always import something from test_support like so: + + from test_support import verbose + + or like so: + + import test_support + ... use test_support.verbose in the code ... + + Never import anything from test_support like this: + + from test.test_support import verbose + + "test" is a package already, so can refer to modules it contains without + "test." qualification. If you do an explicit "test.xxx" qualification, that + can fool Python into believing test.xxx is a module distinct from the xxx + in the current package, and you can end up importing two distinct copies of + xxx. This is especially bad if xxx=test_support, as regrtest.py can (and + routinely does) overwrite its "verbose" and "use_large_resources" + attributes: if you get a second copy of test_support loaded, it may not + have the same values for those as regrtest intended. + Python and C statement coverage results are currently available at Index: autotest.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/autotest.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** autotest.py 1997/03/07 21:05:41 1.10 --- autotest.py 2000/08/23 05:28:45 1.11 *************** *** 1,3 **** ! # Backward compatibility -- you should use regrtest instead of this module. import regrtest regrtest.main() --- 1,6 ---- ! # This should be equivalent to running regrtest.py from the cmdline. ! # It can be especially handy if you're in an interactive shell, e.g., ! # from test import autotest. ! import regrtest regrtest.main() From python-dev@python.org Wed Aug 23 06:42:00 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:42:00 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0204.txt,1.3,1.4 Message-ID: <200008230542.WAA02168@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2158 Modified Files: pep-0204.txt Log Message: Editorial review, including: - Rearrange and standardize headers - Removed ^L's - Spellchecked - Indentation and formatting - Added reference to PEP 202 Thomas, if the open issues have been decided, they can be `closed' in this PEP, and then it should probably be marked as Accepted. Index: pep-0204.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0204.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0204.txt 2000/07/26 04:11:22 1.3 --- pep-0204.txt 2000/08/23 05:41:57 1.4 *************** *** 2,17 **** Title: Range Literals Version: $Revision$ ! Owner: thomas@xs4all.net (Thomas Wouters) ! Python-Version: 2.0 Status: Draft - Introduction ! This PEP describes the `range literal' proposal for Python 2.0. This PEP tracks the status and ownership of this feature, slated for introduction in Python 2.0. It contains a description of the ! feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list forums, and provides URLs for further information, where appropriate. The CVS --- 2,19 ---- Title: Range Literals Version: $Revision$ ! Author: thomas@xs4all.net (Thomas Wouters) Status: Draft + Type: Standards Track + Python-Version: 2.0 + Created: 14-Jul-2000 + Post-History: Introduction ! This PEP describes the `range literal' proposal for Python 2.0. This PEP tracks the status and ownership of this feature, slated for introduction in Python 2.0. It contains a description of the ! feature and outlines changes necessary to support the feature. This PEP summarizes discussions held in mailing list forums, and provides URLs for further information, where appropriate. The CVS *************** *** 20,24 **** - List ranges --- 22,25 ---- *************** *** 27,37 **** sequence directly: ! >>> l = ['a', 'b', 'c', 'd'] ! >>> for item in l: ! ... print item ! a ! b ! c ! d However, this solution is not always prudent. Firstly, problems --- 28,38 ---- sequence directly: ! >>> l = ['a', 'b', 'c', 'd'] ! >>> for item in l: ! ... print item ! a ! b ! c ! d However, this solution is not always prudent. Firstly, problems *************** *** 57,79 **** this: ! >>> for i in range(len(l)): ! ... print l[i] ! a ! b ! c ! d Or, to start at the second element of `l' and processing only every second element from then on: ! >>> for i in range(1, len(l), 2): ! ... print l[i] ! b ! d There are several disadvantages with this approach: ! - Clarity of purpose: Adding another functioncall, possibly with ! extra arithmatic to determine the desired length and step of the list, does not improve readability of the code. Also, it is possible to `shadow' the builtin `range' function by supplying a --- 58,80 ---- this: ! >>> for i in range(len(l)): ! ... print l[i] ! a ! b ! c ! d Or, to start at the second element of `l' and processing only every second element from then on: ! >>> for i in range(1, len(l), 2): ! ... print l[i] ! b ! d There are several disadvantages with this approach: ! - Clarity of purpose: Adding another function call, possibly with ! extra arithmetic to determine the desired length and step of the list, does not improve readability of the code. Also, it is possible to `shadow' the builtin `range' function by supplying a *************** *** 83,87 **** - Efficiency: because the `range' function can be overridden, the Python compiler cannot make assumptions about the for-loop, and ! has to maintain a seperate loop counter. - Consistency: There already is a syntax that is used to denote --- 84,88 ---- - Efficiency: because the `range' function can be overridden, the Python compiler cannot make assumptions about the for-loop, and ! has to maintain a separate loop counter. - Consistency: There already is a syntax that is used to denote *************** *** 92,96 **** - Slice Indices --- 93,96 ---- *************** *** 101,108 **** the original sequence. This is done using a `range notation': ! >>> l[2:4] ! ['c', 'd'] ! This range notation consists of zero, one or two indices seperated by a colon. The first index is the `start' index, the second the `end'. When either is left out, they default to respectively the --- 101,108 ---- the original sequence. This is done using a `range notation': ! >>> l[2:4] ! ['c', 'd'] ! This range notation consists of zero, one or two indices separated by a colon. The first index is the `start' index, the second the `end'. When either is left out, they default to respectively the *************** *** 113,126 **** by most builtin types, if it were, it would work as follows: ! >>> l[1:4:2] ! ['b', 'd'] The third `argument' to the slice syntax is exactly the same as ! the `step' argument to range(). The underlying mechanisms of ! standard and these extended slices are sufficiently different and ! inconsistent that many classes and extensions outside of mathematical packages do not implement support for the extended ! variant, and this should definately be resolved, but this is ! beyond the scope of this PEP. Extended slices do show, however, that there is already a --- 113,126 ---- by most builtin types, if it were, it would work as follows: ! >>> l[1:4:2] ! ['b', 'd'] The third `argument' to the slice syntax is exactly the same as ! the `step' argument to range(). The underlying mechanisms of the ! standard, and these extended slices, are sufficiently different ! and inconsistent that many classes and extensions outside of mathematical packages do not implement support for the extended ! variant. While this should be resolved, it is beyond the scope of ! this PEP. Extended slices do show, however, that there is already a *************** *** 133,137 **** - It is consistent with the other use of ranges in Python ! (slices.) - Because it is built-in syntax, instead of a builtin function, it --- 133,137 ---- - It is consistent with the other use of ranges in Python ! (e.g. slices). - Because it is built-in syntax, instead of a builtin function, it *************** *** 141,145 **** - The Proposed Solution --- 141,144 ---- *************** *** 148,157 **** range literals: ! >>> [1:10] ! [1, 2, 3, 4, 5, 6, 7, 8, 9] ! >>> [:5] ! [0, 1, 2, 3, 4] ! >>> [5:1:-1] ! [5, 4, 3, 2] There is one minor difference between range literals and the slice --- 147,156 ---- range literals: ! >>> [1:10] ! [1, 2, 3, 4, 5, 6, 7, 8, 9] ! >>> [:5] ! [0, 1, 2, 3, 4] ! >>> [5:1:-1] ! [5, 4, 3, 2] There is one minor difference between range literals and the slice *************** *** 162,166 **** - Reference Implementation --- 161,164 ---- *************** *** 178,268 **** calls. ! PyObject * PyList_FromRange(long start, long end, long step) ! builds a list from start, end and step, returning NULL if an error ! occurs. ! ! long PyList_GetLenOfRange(long start, long end, long step) is a ! helper function to determine the length of a range. It was ! previously a static function in bltinmodule.c, but is now ! necessary in both listobject.c and bltinmodule.c (for xrange). It ! is made non-static solely to avoid code duplication. ! Open issues ! One possible solution to the discrepancy of requiring the `end' ! argument in range literals is to allow the range syntax to create ! a `generator', rather than a list, such as the `xrange' builtin ! function does. However, a generator would not be a list, and it ! would be impossible, for instance, to assign to items in the ! generator, or append to it. ! ! The range syntax could conceivably be extended to include tuples, ! immutable lists, which could then be safely implemented as ! generators. Especially for large number arrays, this may be a ! desirable solution: generators require very little in the way of ! storage and initialization, and there is only a small performance ! impact in calculating and creating the appropriate number on ! request. (TBD: is there any at all ? Cursory testing suggests ! equal performance even in the case of ranges of length 1.) ! ! However, even if idea was adopted, would it be wise to `special ! case' the second argument, making it optional in one instance of ! the syntax, and non-optional in other cases ? ! Should it be possible to mix range syntax with normal list ! literals, creating a single list, like so: - >>> [5, 6, 1:6, 7, 9] to create - [5, 6, 1, 2, 3, 4, 5, 7, 9] ! How should range literals interact with another proposed new ! feature, `list comprehensions', PEP-202 ? In specific, should it ! be possible to create lists in list comprehensions, like so: ! >>> [x:y for x in (1,2) y in (3, 4)] ! Should this example return a single list with multiple ranges: ! [1, 2, 1, 2, 3, 2, 2, 3] ! Or a list of lists, like so: ! [[1, 2], [1, 2, 3], [2], [2, 3]] ! However, as the syntax and semantics of list comprehensions are ! still subject of hot debate, these issues are probably best ! addressed by the `list comprehensions' PEP. ! ! Range literals accept objects other than integers: it performs ! PyInt_AsLong() on the objects passed in, so as long as the objects ! can be coerced into integers, they will be accepted. The ! resulting list, however, is always composed of standard integers. ! Should range literals create a list of the passed-in type ? It ! might be desirable in the cases of other builtin types, such as ! longs and strings: ! ! >>> [ 1L : 2L<<64 : 2<<32L ] ! >>> ["a":"z":"b"] ! >>> ["a":"z":2] ! ! However, this might be too much `magic' to be obvious. It might ! also present problems with user-defined classes: even if the base ! class can be found and a new instance created, the instance may ! require additional arguments to __init__, causing the creation to ! fail. ! The PyList_FromRange() and PyList_GetLenOfRange() functions need ! to be classified: are they part of the API, or should they be made ! private functions ? ! References: [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=100902&group_id=5470 --- 176,273 ---- calls. ! PyList_FromRange() builds a list from start, end and step, ! returning NULL if an error occurs. Its prototype is: ! ! PyObject * PyList_FromRange(long start, long end, long step) ! ! PyList_GetLenOfRange() is a helper function used to determine the ! length of a range. Previously, it was a static function in ! bltinmodule.c, but is now necessary in both listobject.c and ! bltinmodule.c (for xrange). It is made non-static solely to avoid ! code duplication. Its prototype is: ! long PyList_GetLenOfRange(long start, long end, long step) ! ! Open issues ! - One possible solution to the discrepancy of requiring the `end' ! argument in range literals is to allow the range syntax to ! create a `generator', rather than a list, such as the `xrange' ! builtin function does. However, a generator would not be a ! list, and it would be impossible, for instance, to assign to ! items in the generator, or append to it. ! ! The range syntax could conceivably be extended to include tuples ! (i.e. immutable lists), which could then be safely implemented ! as generators. This may be a desirable solution, especially for ! large number arrays: generators require very little in the way ! of storage and initialization, and there is only a small ! performance impact in calculating and creating the appropriate ! number on request. (TBD: is there any at all? Cursory testing ! suggests equal performance even in the case of ranges of length ! 1) ! ! However, even if idea was adopted, would it be wise to `special ! case' the second argument, making it optional in one instance of ! the syntax, and non-optional in other cases ? + - Should it be possible to mix range syntax with normal list + literals, creating a single list? E.g.: ! >>> [5, 6, 1:6, 7, 9] to create + [5, 6, 1, 2, 3, 4, 5, 7, 9] ! - How should range literals interact with another proposed new ! feature, `list comprehensions'[2]? Specifically, should it be ! possible to create lists in list comprehensions? E.g.: ! >>> [x:y for x in (1, 2) y in (3, 4)] ! Should this example return a single list with multiple ranges: ! [1, 2, 1, 2, 3, 2, 2, 3] ! Or a list of lists, like so: ! [[1, 2], [1, 2, 3], [2], [2, 3]] ! However, as the syntax and semantics of list comprehensions are ! still subject of hot debate, these issues are probably best ! addressed by the `list comprehensions' PEP. ! ! - Range literals accept objects other than integers: it performs ! PyInt_AsLong() on the objects passed in, so as long as the ! objects can be coerced into integers, they will be accepted. ! The resulting list, however, is always composed of standard ! integers. ! ! Should range literals create a list of the passed-in type? It ! might be desirable in the cases of other builtin types, such as ! longs and strings: + >>> [ 1L : 2L<<64 : 2<<32L ] + >>> ["a":"z":"b"] + >>> ["a":"z":2] + + However, this might be too much `magic' to be obvious. It might + also present problems with user-defined classes: even if the + base class can be found and a new instance created, the instance + may require additional arguments to __init__, causing the + creation to fail. ! - The PyList_FromRange() and PyList_GetLenOfRange() functions need ! to be classified: are they part of the API, or should they be ! made private functions? ! References: [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=100902&group_id=5470 + [2] PEP 202, List Comprehensions, pep-0202.txt + From python-dev@python.org Wed Aug 23 06:43:42 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:43:42 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0209.txt,1.1,1.2 Message-ID: <200008230543.WAA02384@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2374 Modified Files: pep-0209.txt Log Message: Deferred until Python 2.1. Index: pep-0209.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0209.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0209.txt 2000/07/15 23:28:27 1.1 --- pep-0209.txt 2000/08/23 05:43:40 1.2 *************** *** 2,8 **** Title: Adding Multidimensional Arrays Version: $Revision$ ! Owner: davida@activestate.com (David Ascher) ! Python-Version: 2.0 ! Status: Incomplete --- 2,11 ---- Title: Adding Multidimensional Arrays Version: $Revision$ ! Author: davida@activestate.com (David Ascher) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 15-Jul-2000 ! Post-History: From python-dev@python.org Wed Aug 23 06:44:55 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:44:55 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0210.txt,1.1,1.2 Message-ID: <200008230544.WAA02465@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2453 Modified Files: pep-0210.txt Log Message: Deferred until Python 2.1. Index: pep-0210.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0210.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0210.txt 2000/07/15 23:28:27 1.1 --- pep-0210.txt 2000/08/23 05:44:46 1.2 *************** *** 2,8 **** Title: Decoupling the Interpreter Loop Version: $Revision$ ! Owner: davida@activestate.com (David Ascher) ! Python-Version: 2.0 ! Status: Incomplete --- 2,11 ---- Title: Decoupling the Interpreter Loop Version: $Revision$ ! Author: davida@activestate.com (David Ascher) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 15-Jul-2000 ! Post-History: From python-dev@python.org Wed Aug 23 06:47:17 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:47:17 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0213.txt,1.3,1.4 Message-ID: <200008230547.WAA02648@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2635 Modified Files: pep-0213.txt Log Message: Deferred to Python 2.1 Index: pep-0213.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0213.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0213.txt 2000/07/21 21:59:29 1.3 --- pep-0213.txt 2000/08/23 05:47:12 1.4 *************** *** 2,8 **** Title: Attribute Access Handlers Version: $Revision$ ! Owner: paul@prescod.net (Paul Prescod) ! Python-Version: 2.0 ! Status: Incomplete --- 2,11 ---- Title: Attribute Access Handlers Version: $Revision$ ! Author: paul@prescod.net (Paul Prescod) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 21-Jul-2000 ! Post-History: *************** *** 20,23 **** --- 23,27 ---- and safer to implement these handlers for Python instances. + Justification *************** *** 51,54 **** --- 55,59 ---- merely a new syntax for an existing convention. + Current Solution *************** *** 86,89 **** --- 91,95 ---- inefficient. + Proposed Syntax *************** *** 105,110 **** x.foo=fooval+5 del x.foo ! Semantics Attribute references of all three kinds should call the method. --- 111,117 ---- x.foo=fooval+5 del x.foo + ! Semantics Attribute references of all three kinds should call the method. *************** *** 126,129 **** --- 133,137 ---- goes for __del_y__. + Proposed Implementation *************** *** 170,173 **** --- 178,182 ---- of set. + Caveats *************** *** 200,203 **** --- 209,214 ---- Once again, the solution is to use a special (typically private) variable such as __XXX. + + Local Variables: From python-dev@python.org Wed Aug 23 06:49:30 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:49:30 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0216.txt,1.1,1.2 Message-ID: <200008230549.WAA02875@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2867 Modified Files: pep-0216.txt Log Message: Informational PEPs don't need a Python-Version: Index: pep-0216.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0216.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0216.txt 2000/07/31 15:05:19 1.1 --- pep-0216.txt 2000/08/23 05:49:27 1.2 *************** *** 2,9 **** Title: Docstring Format Version: $Revision$ ! Owner: moshez@math.huji.ac.il (Moshe Zadka) ! Python-Version: 2.x Status: Draft ! --- 2,9 ---- Title: Docstring Format Version: $Revision$ ! Author: moshez@math.huji.ac.il (Moshe Zadka) Status: Draft ! Type: Informational ! Created: 31-Jul-2000 From python-dev@python.org Wed Aug 23 06:50:34 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:50:34 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0217.txt,1.1,1.2 Message-ID: <200008230550.WAA02942@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2934 Modified Files: pep-0217.txt Log Message: Added Type: header Index: pep-0217.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0217.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0217.txt 2000/07/31 20:15:14 1.1 --- pep-0217.txt 2000/08/23 05:50:32 1.2 *************** *** 3,8 **** Version: $Revision$ Author: moshez@math.huji.ac.il (Moshe Zadka) - Python-Version: 2.1 Status: Draft Created: 31-Jul-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: moshez@math.huji.ac.il (Moshe Zadka) Status: Draft + Type: Standards Track + Python-Version: 2.1 Created: 31-Jul-2000 Post-History: From python-dev@python.org Wed Aug 23 06:57:50 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:57:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,1.2,1.3 Message-ID: <200008230557.WAA03359@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv3351 Modified Files: pep-0221.txt Log Message: Minor editorial changes. Index: pep-0221.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0221.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0221.txt 2000/08/20 10:49:45 1.2 --- pep-0221.txt 2000/08/23 05:57:47 1.3 *************** *** 2,18 **** Title: Import As Version: $Revision$ ! Owner: thomas@xs4all.net (Thomas Wouters) ! Python-Version: 2.0 Status: Accepted - Created: 15-Aug-2000 Type: Standard Introduction ! This PEP describes the `import as' proposal for Python 2.0. This ! PEP tracks the status and ownership of this feature. It contains a ! description of the feature and outlines changes necessary to ! support the feature. The CVS revision history of this file contains the definitive historical record. --- 2,19 ---- Title: Import As Version: $Revision$ ! Author: thomas@xs4all.net (Thomas Wouters) Status: Accepted Type: Standard + Python-Version: 2.0 + Created: 15-Aug-2000 + Post-History: Introduction ! This PEP describes the `import as' proposal for Python 2.0. This ! PEP tracks the status and ownership of this feature. It contains ! a description of the feature and outlines changes necessary to ! support the feature. The CVS revision history of this file contains the definitive historical record. *************** *** 20,30 **** Rationale ! This PEP proposes a small extention of current Python syntax ! regarding the `import' and `from import' statements. ! These statements load in a module, and either bind that module to ! a local name, or binds objects from that module to a local name. ! However, it is sometimes desirable to bind those objects to a ! different name, for instance to avoid name clashes. Currently, a ! round-about way has to be used to achieve this: import os --- 21,31 ---- Rationale ! This PEP proposes an extention of Python syntax regarding the ! `import' and `from import' statements. These statements ! load in a module, and either bind that module to a local name, or ! binds objects from that module to a local name. However, it is ! sometimes desirable to bind those objects to a different name, for ! instance to avoid name clashes. This can currently be achieved ! using the following idiom: import os *************** *** 32,36 **** del os ! And similar for the `from ... import' statement: from os import fdopen, exit, stat --- 33,37 ---- del os ! And similarly for the `from ... import' statement: from os import fdopen, exit, stat *************** *** 46,50 **** The `as' name is not intended to be a keyword, and some trickery ! has to be used to convince the CPython parser it isn't one. For more advanced parsers/tokenizers, however, this should not be a problem. --- 47,51 ---- The `as' name is not intended to be a keyword, and some trickery ! has to be used to convince the CPython parser it isn't one. For more advanced parsers/tokenizers, however, this should not be a problem. *************** *** 55,63 **** import os.path ! The actual name stored locally is `os', not `path' (so that the ! newly imported module can be referenced as `os.path'.) When ! introducing the `as' keyword, it is unclear whether the `os' ! module or the `path' sub-module should be stored `as' the ! requested local name. --- 56,63 ---- import os.path ! The actual name stored locally is `os', not `path', and the newly ! imported module can be referenced as `os.path'. When introducing ! the `as' keyword, it is unclear whether the `os' module or the ! `path' sub-module should be stored `as' the requested local name. *************** *** 65,71 **** This PEP has been accepted, and the suggested code change has been ! checked in. The patch can still be found in the SourceForge patch ! manager[1]. Currently, a NAME field is used in the grammar rather ! than a bare string, to avoid the keyword issue. It introduces a new bytecode, IMPORT_STAR, which performs the `from module import *' behaviour, and changes the behaviour of the IMPORT_FROM --- 65,71 ---- This PEP has been accepted, and the suggested code change has been ! checked in. The patch can still be found in the SourceForge patch ! manager[1]. Currently, a NAME field is used in the grammar rather ! than a bare string, to avoid the keyword issue. It introduces a new bytecode, IMPORT_STAR, which performs the `from module import *' behaviour, and changes the behaviour of the IMPORT_FROM *************** *** 80,86 **** An additional change to this syntax has also been suggested, to ! generalize the expression given after the `as' clause. Rather than ! a single name, it could be allowed to be any expression that ! yields a valid l-value; anything that can be assigned to. The change to accomodate this is minimal, as the patch proves[2], and the resulting generalization allows a number of new constructs --- 80,86 ---- An additional change to this syntax has also been suggested, to ! generalize the expression given after the `as' clause. Rather ! than a single name, it could be allowed to be any expression that ! yields a valid l-value; anything that can be assigned to. The change to accomodate this is minimal, as the patch proves[2], and the resulting generalization allows a number of new constructs *************** *** 104,112 **** References ! [1] ! http://sourceforge.net/patch/?func=detailpatch&patch_id=101135&group_id=5470 ! [2] ! http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470 --- 104,110 ---- References ! [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=101135&group_id=5470 ! [2] http://sourceforge.net/patch/?func=detailpatch&patch_id=101234&group_id=5470 From python-dev@python.org Wed Aug 23 06:51:16 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:51:16 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0218.txt,1.1,1.2 Message-ID: <200008230551.WAA02981@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2969 Modified Files: pep-0218.txt Log Message: Added Type: header Index: pep-0218.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0218.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0218.txt 2000/07/31 20:20:31 1.1 --- pep-0218.txt 2000/08/23 05:51:13 1.2 *************** *** 3,8 **** Version: $Revision$ Author: gvwilson@nevex.com (Greg Wilson) - Python-Version: 2.1 Status: Draft Created: 31-Jul-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: gvwilson@nevex.com (Greg Wilson) Status: Draft + Type: Standards Track + Python-Version: 2.1 Created: 31-Jul-2000 Post-History: From python-dev@python.org Wed Aug 23 06:52:51 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 22:52:51 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0219.txt,1.1,1.2 Message-ID: <200008230552.WAA03151@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv3053 Modified Files: pep-0219.txt Log Message: There are now no `technical' PEPs: only standards track and informational. This one fits better as a standards track PEP. Index: pep-0219.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0219.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0219.txt 2000/08/14 14:48:38 1.1 --- pep-0219.txt 2000/08/23 05:52:49 1.2 *************** *** 3,8 **** Version: $Revision$ Author: gmcm@hypernet.com (Gordon McMillan) ! Status: Active ! Type: Technical Created: 14-Aug-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: gmcm@hypernet.com (Gordon McMillan) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 Created: 14-Aug-2000 Post-History: From python-dev@python.org Wed Aug 23 07:04:35 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 23:04:35 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0215.txt,1.1,1.2 Message-ID: <200008230604.XAA12249@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv12240 Modified Files: pep-0215.txt Log Message: Deferred until Python 2.1. Index: pep-0215.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0215.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0215.txt 2000/07/24 19:01:55 1.1 --- pep-0215.txt 2000/08/23 06:04:33 1.2 *************** *** 2,8 **** Title: String Interpolation Version: $Revision$ ! Owner: ping@lfw.org (Ka-Ping Yee) ! Python-Version: 2.0 ! Status: Incomplete --- 2,12 ---- Title: String Interpolation Version: $Revision$ ! Author: ping@lfw.org (Ka-Ping Yee) ! Status: Draft ! Type: Standards Track ! Python-Version: 2.1 ! Created: 24-Jul-2000 ! Post-History: ! From python-dev@python.org Wed Aug 23 07:02:43 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 23:02:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0222.txt,1.2,1.3 Message-ID: <200008230602.XAA08482@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv8339 Modified Files: pep-0222.txt Log Message: Deferred until Python 2.1. Index: pep-0222.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0222.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0222.txt 2000/08/22 05:15:51 1.2 --- pep-0222.txt 2000/08/23 06:02:40 1.3 *************** *** 5,8 **** --- 5,9 ---- Status: Active Type: Standards Track + Python-Version: 2.1 Created: 18-Aug-2000 Post-History: From python-dev@python.org Wed Aug 23 07:03:32 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 22 Aug 2000 23:03:32 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0223.txt,1.2,1.3 Message-ID: <200008230603.XAA10299@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10236 Modified Files: pep-0223.txt Log Message: Additional headers needed. Index: pep-0223.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0223.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0223.txt 2000/08/22 04:42:19 1.2 --- pep-0223.txt 2000/08/23 06:03:29 1.3 *************** *** 3,8 **** Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) - Python-Version: 2.0 Status: Draft Created: 20-Aug-2000 Post-History: --- 3,9 ---- Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) Status: Draft + Type: Standards Track + Python-Version: 2.0 Created: 20-Aug-2000 Post-History: From python-dev@python.org Wed Aug 23 10:13:44 2000 From: python-dev@python.org (Jack Jansen) Date: Wed, 23 Aug 2000 02:13:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib macpath.py,1.24,1.25 Message-ID: <200008230913.CAA13051@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12968 Modified Files: macpath.py Log Message: Restored commonprefix() semantics. Index: macpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/macpath.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** macpath.py 2000/08/06 21:18:35 1.24 --- macpath.py 2000/08/23 09:13:40 1.25 *************** *** 90,116 **** - # Return the longest prefix of all list elements. - # XXX completely untested on Mac!!! - - def commonprefix(m): - "Given a list of pathnames, returns the longest common leading component" - if not m: return '' - n = m[:] - for i in range(len(n)): - n[i] = n[i].split(os.sep) - # if os.sep didn't have any effect, try os.altsep - if os.altsep and len(n[i]) == 1: - n[i] = n[i].split(os.altsep) - - prefix = n[0] - for item in n: - for i in range(len(prefix)): - if prefix[:i+1] <> item[:i+1]: - prefix = prefix[:i] - if i == 0: return '' - break - return os.sep.join(prefix) - - def isdir(s): """Return true if the pathname refers to an existing directory.""" --- 90,93 ---- *************** *** 167,170 **** --- 144,160 ---- return 1 + # Return the longest prefix of all list elements. + + def commonprefix(m): + "Given a list of pathnames, returns the longest common leading component" + if not m: return '' + prefix = m[0] + for item in m: + for i in range(len(prefix)): + if prefix[:i+1] <> item[:i+1]: + prefix = prefix[:i] + if i == 0: return '' + break + return prefix def expandvars(path): From python-dev@python.org Wed Aug 23 12:32:04 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 04:32:04 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.8,1.9 Message-ID: <200008231132.EAA08020@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28113 Modified Files: pep-0203.txt Log Message: Incorporate Guido's decision to go for '__iadd__' for the Python class hooks, and trim the 'open isues': PyNumber_InPlacePower() is now a trinary function, like PyNumber_Power(), and I'm working on the docs and the library. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** pep-0203.txt 2000/08/23 05:22:41 1.8 --- pep-0203.txt 2000/08/23 11:32:01 1.9 *************** *** 63,72 **** x += y ! tries to call x.__add_ab__(y), which is the `in-place' variant of ! __add__. If __add_ab__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. ! There is no `right-hand-side' variant of __add_ab__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add_ab__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. --- 63,72 ---- x += y ! tries to call x.__iadd__(y), which is the `in-place' variant of ! __add__. If __iadd__ is not present, x.__add__(y) is attempted, and finally y.__radd__(x) if __add__ is missing too. ! There is no `right-hand-side' variant of __iadd__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. *************** *** 140,159 **** assignment operations: ! __add_ab__ ! __sub_ab__ ! __mul_ab__ ! __div_ab__ ! __mod_ab__ ! __pow_ab__ ! __lshift_ab__ ! __rshift_ab__ ! __and_ab__ ! __xor_ab__ ! __or_ab__ ! ! The `__add_ab__' name is one proposed by Guido[1], and stands for ! `and becomes'. Other proposed names include `__iadd__', ! `__add_in__' and `__inplace_add__'. A firm decision by the BDFL is ! probably needed to finalize this issue. For C extension types, the following struct members are added: --- 140,156 ---- assignment operations: ! __iadd__ ! __isub__ ! __imul__ ! __idiv__ ! __imod__ ! __ipow__ ! __ilshift__ ! __irshift__ ! __iand__ ! __ixor__ ! __ior__ ! ! The `i' in `__iadd__' stands for `in-place'. For C extension types, the following struct members are added: *************** *** 260,279 **** Open Issues - - The PyNumber_InPlacePower() function only takes two arguments, not - one like PyNumber_Power(). This is because there is no way to do - an inplace three-argument-power trough the augmented assignment - syntax or the power() function. - ! Possibly a more obvious name for the Python hooks can be found. ! `_ab_' is what Guido proposed[1] as a working name, and comes from ! an old Algol-68 naming convention. - Documentation needs to be written. The reference manual, the `dis' - section of the library manual, and possibly the tutorial. - - The DUP_TOPX bytecode is a conveniency bytecode, and is not actually necessary. It should be considered whether this bytecode --- 257,267 ---- Open Issues ! The PyNumber_InPlace API is only a subset of the normal PyNumber ! API: only those functions that are required to support the ! augmented assignment syntax are included. If other in-place API ! functions are needed, they can be added later. The DUP_TOPX bytecode is a conveniency bytecode, and is not actually necessary. It should be considered whether this bytecode *************** *** 282,289 **** - The standard library should be adjusted to provide augmented - assignment hooks, where sensible. - - It is not possible to do an inplace operation in the variant of --- 270,273 ---- *************** *** 304,309 **** [1] http://www.python.org/pipermail/python-list/2000-June/059556.html ! [2] ! http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 [3] PEP 211, Adding New Linear Algebra Operators, http://python.sourceforge.net/peps/pep-0211.html --- 288,292 ---- [1] http://www.python.org/pipermail/python-list/2000-June/059556.html ! [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470 [3] PEP 211, Adding New Linear Algebra Operators, http://python.sourceforge.net/peps/pep-0211.html From python-dev@python.org Wed Aug 23 13:09:10 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 05:09:10 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0221.txt,1.3,1.4 Message-ID: <200008231209.FAA19808@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18715 Modified Files: pep-0221.txt Log Message: Clean up a few items: the 'import os.path as p' syntax and the 'extended-as'-assignment syntax, both of which Guido has decided on. Index: pep-0221.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0221.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0221.txt 2000/08/23 05:57:47 1.3 --- pep-0221.txt 2000/08/23 12:09:07 1.4 *************** *** 4,8 **** Author: thomas@xs4all.net (Thomas Wouters) Status: Accepted ! Type: Standard Python-Version: 2.0 Created: 15-Aug-2000 --- 4,8 ---- Author: thomas@xs4all.net (Thomas Wouters) Status: Accepted ! Type: Standards Track Python-Version: 2.0 Created: 15-Aug-2000 *************** *** 50,65 **** more advanced parsers/tokenizers, however, this should not be a problem. ! ! To avoid confusion, importing a submodule `as' another module is ! not allowed. When importing a submodule in the normal way, ! import os.path ! ! The actual name stored locally is `os', not `path', and the newly ! imported module can be referenced as `os.path'. When introducing ! the `as' keyword, it is unclear whether the `os' module or the ! `path' sub-module should be stored `as' the requested local name. Implementation details --- 50,68 ---- more advanced parsers/tokenizers, however, this should not be a problem. ! ! A slightly special case exists for importing sub-modules. The ! statement ! ! import os.path ! ! stores the module `os' locally as `os', so that the imported ! submodule `path' is accessible as `os.path'. As a result, ! import os.path as p + should store `os.path', not `os', in `p'. The current + implementation does not yet support this. + Implementation details *************** *** 86,98 **** the resulting generalization allows a number of new constructs that run completely parallel with other Python assignment ! constructs. ! ! import sys as x['sys'] ! ! from MyFastcPickle import Pickler as shelve.Pickler ! ! from sys import version_info as (maj, min, pl, relnam, relno) ! ! from sys import path as mypath[-1:] --- 89,94 ---- the resulting generalization allows a number of new constructs that run completely parallel with other Python assignment ! constructs. However, this idea has been rejected by Guido, as ! `hypergeneralization'. From python-dev@python.org Wed Aug 23 13:34:05 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 05:34:05 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.9,1.10 Message-ID: <200008231234.FAA18435@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv17711 Modified Files: pep-0203.txt Log Message: Fix typo found by Peter Funk. Thanx, Peter! (Of course, I put it there on purpose, just to see if anyone was paying attention. Really! :) Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** pep-0203.txt 2000/08/23 11:32:01 1.9 --- pep-0203.txt 2000/08/23 12:34:02 1.10 *************** *** 68,72 **** There is no `right-hand-side' variant of __iadd__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __add__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. --- 68,72 ---- There is no `right-hand-side' variant of __iadd__, because that would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __iadd__ hook should behave similar to __add__, returning the result of the operation (which could be `self') which is to be stored in the variable `x'. From python-dev@python.org Wed Aug 23 15:34:27 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 07:34:27 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.21,1.22 Message-ID: <200008231434.HAA26732@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv26581/peps Modified Files: pep-0200.txt Log Message: remove mystery R & B columns Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** pep-0200.txt 2000/08/23 03:38:53 1.21 --- pep-0200.txt 2000/08/23 14:34:25 1.22 *************** *** 87,102 **** to fail, they serve no useful purpose. ! [what are the "R" and "B" columns supposed to mean? - tim] ! ! test case platform R B date reported ! --------- -------- - - ------------- ! test_parser Windows ? ? 22-Aug-2000 [probably all platforms] ! test_posixpath Windows ? ? 22-Aug-2000 [probably all platforms; think it's because Skip backed out commonpathprefix changes but didn't change the tests] ! test_fork1 Linux X 26-Jul-2000 just SMP? [no clue; there are probably two bugs here] [19-Aug-200 tim --- 87,100 ---- to fail, they serve no useful purpose. ! test case platform date reported ! --------- -------- ------------- ! test_parser Windows 22-Aug-2000 [probably all platforms] ! test_posixpath Windows 22-Aug-2000 [probably all platforms; think it's because Skip backed out commonpathprefix changes but didn't change the tests] ! test_fork1 Linux 26-Jul-2000 [no clue; there are probably two bugs here] [19-Aug-200 tim *************** *** 114,120 **** the code it's testing is in trouble! ! test case platform R B date reported ! --------- -------- - - ------------- ! test_popen2 Win32 X X 26-Jul-2000 [20-Aug-2000 tim changed the popen2.py _test function to use the "more" cmd --- 112,118 ---- the code it's testing is in trouble! ! test case platform date reported ! --------- -------- ------------- ! test_popen2 Win32 26-Jul-2000 [20-Aug-2000 tim changed the popen2.py _test function to use the "more" cmd *************** *** 134,145 **** ] ! test_winreg Win32 X X 26-Jul-2000 [works 15-Aug-2000 for me, on Win98 - tim] ! test_mmap Win32 X X 26-Jul-2000 [believe that was fixed by Mark H.] [works 15-Aug-2000 for me, on Win98 - tim] ! test_longexp Win98+? ? ? 15-Aug-2000 [fails in release build, passes in release build under verbose mode but doesn't --- 132,143 ---- ] ! test_winreg Win32 26-Jul-2000 [works 15-Aug-2000 for me, on Win98 - tim] ! test_mmap Win32 26-Jul-2000 [believe that was fixed by Mark H.] [works 15-Aug-2000 for me, on Win98 - tim] ! test_longexp Win98+? 15-Aug-2000 [fails in release build, passes in release build under verbose mode but doesn't *************** *** 162,166 **** ] ! test_winreg2 Win32 X X 26-Jul-2000 [20-Aug-2000 tim - the test has been removed from the project] [19-Aug-2000 tim --- 160,164 ---- ] ! test_winreg2 Win32 26-Jul-2000 [20-Aug-2000 tim - the test has been removed from the project] [19-Aug-2000 tim From python-dev@python.org Wed Aug 23 15:44:02 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 07:44:02 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.22,1.23 Message-ID: <200008231444.HAA30802@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30626/peps Modified Files: pep-0200.txt Log Message: move os.path.commonprefix from open to completed split open items into 2.0b1 and 2.0 sections Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** pep-0200.txt 2000/08/23 14:34:25 1.22 --- pep-0200.txt 2000/08/23 14:43:59 1.23 *************** *** 174,222 **** ! Open items -- should be done/fixed ! Decoding errors when comparing strings. There is a dictionary bug ! that prevents objects from being accessible when an exception is ! raised during hashing or comparison. ! Decide what to do about os.path.commonprefix. Then do it. ! [19-Aug-2000 tim ! Guido msg on Python-Dev: ! - restore the old behavior on all platforms - Skip volunteered for this ! - add to the docs that to get the common directory you use dirname() ! - add testcases that check that this works on all platforms ! - don't add commonpathprefix(), because dirname() already does it ! ] ! 2.0b1: Get all patches out of Open. ! 2.0b1: Get all patches out of Accepted. ! 2.0b1: Decide on a license. ! ! 2.0b1 Windows: Look for registry info in HKCU before HKLM - Mark Hammond. ! 2.0b1 Windows installer: If HKLM isn't writable, back off to HKCU (so Python can be installed on NT & 2000 without admin privileges). ! 2.0b1 Windows installer: Install w9xpopen.exe only under Win95/98. ! 2.0b1 Windows ME: Don't know anything about it. Will the installer even run? Does it need the w9xpopen hack? ! 2.0b1 Win98 Guido: popen is hanging on Guido, and even freezing the whole machine. No clue yet. ! 2.0: Decide on a license. ! 2.0: Finish writing the PEPs for the features that went out ! with 2.0b1(! sad, but realistic -- we'll get better with practice). ! 2.0: Major effort to whittle the bug database down to size. I've (tim) ! seen this before: if you can keep all the open bugs fitting on one ! screen, people will generally keep it that way. But let it slobber ! over a screen for a month, & it just goes to hell (no "visible ! progress" indeed!). --- 174,214 ---- ! Open items -- Need to be resolved before 2.0b1 release ! Fix bug 112558 ! https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 ! Get all patches out of Open. ! Get all patches out of Accepted. ! Decide on a license. ! Windows: Look for registry info in HKCU before HKLM - Mark Hammond. ! Windows installer: If HKLM isn't writable, back off to HKCU (so Python can be installed on NT & 2000 without admin privileges). ! Windows installer: Install w9xpopen.exe only under Win95/98. ! Windows ME: Don't know anything about it. Will the installer even run? Does it need the w9xpopen hack? ! Win98 Guido: popen is hanging on Guido, and even freezing the whole machine. No clue yet. + + Open items -- Need to be resolved before 2.0 final release ! Decide on a license. ! Finish writing the PEPs for the features that went out with ! 2.0b1(! sad, but realistic -- we'll get better with practice). ! Major effort to whittle the bug database down to size. I've (tim) ! seen this before: if you can keep all the open bugs fitting on one ! screen, people will generally keep it that way. But let it ! slobber over a screen for a month, & it just goes to hell (no ! "visible progress" indeed!). *************** *** 232,235 **** --- 224,230 ---- Accepted and completed + + * Restore old os.path.commonprefix behavior + Do we have test cases that work on all platforms? * Lockstep iteration ("zip" function) - Barry Warsaw From python-dev@python.org Wed Aug 23 15:56:28 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 07:56:28 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.23,1.24 Message-ID: <200008231456.HAA00547@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv482/peps Modified Files: pep-0200.txt Log Message: confirm that test_parser and test_posixpath fail on Linux too Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** pep-0200.txt 2000/08/23 14:43:59 1.23 --- pep-0200.txt 2000/08/23 14:56:26 1.24 *************** *** 89,98 **** test case platform date reported --------- -------- ------------- ! test_parser Windows 22-Aug-2000 ! [probably all platforms] ! test_posixpath Windows 22-Aug-2000 ! [probably all platforms; think it's because Skip backed out ! commonpathprefix changes but didn't change the tests] test_fork1 Linux 26-Jul-2000 --- 89,97 ---- test case platform date reported --------- -------- ------------- ! test_parser all 22-Aug-2000 ! test_posixpath all 22-Aug-2000 ! [think it's because Skip backed out commonpathprefix changes ! but didn't change the tests] test_fork1 Linux 26-Jul-2000 From python-dev@python.org Wed Aug 23 16:35:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 08:35:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.51,2.52 Message-ID: <200008231535.IAA15364@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv15339/Modules Modified Files: parsermodule.c Log Message: validate_listmaker(): Revise to match Skip's latest changes to the Grammar file. This makes the test suite pass once again. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.51 retrieving revision 2.52 diff -C2 -r2.51 -r2.52 *** parsermodule.c 2000/08/22 01:44:16 2.51 --- parsermodule.c 2000/08/23 15:35:26 2.52 *************** *** 2194,2197 **** --- 2194,2200 ---- + /* listmaker: + * test ( list_for | (',' test)* [','] ) + */ static int validate_listmaker(node *tree) *************** *** 2208,2213 **** * list_iter | (',' test)* [','] */ ! if (nch == 2 && TYPE(CHILD(tree, 1)) == list_iter) ! ok = validate_list_iter(CHILD(tree, 1)); else { /* (',' test)* [','] */ --- 2211,2216 ---- * list_iter | (',' test)* [','] */ ! if (nch == 2 && TYPE(CHILD(tree, 1)) == list_for) ! ok = validate_list_for(CHILD(tree, 1)); else { /* (',' test)* [','] */ *************** *** 2216,2224 **** ok = (validate_comma(CHILD(tree, i)) && validate_test(CHILD(tree, i+1))); ! if (ok) ! i += 2; } ! if (ok && nch-i) ! ok = validate_comma(CHILD(tree, nch-1)); } return ok; --- 2219,2230 ---- ok = (validate_comma(CHILD(tree, i)) && validate_test(CHILD(tree, i+1))); ! i += 2; } ! if (ok && i == nch-1) ! ok = validate_comma(CHILD(tree, i)); ! else if (i != nch) { ! ok = 0; ! err_string("illegal trailing nodes for listmaker"); ! } } return ok; From python-dev@python.org Wed Aug 23 16:55:43 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 08:55:43 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.24,1.25 Message-ID: <200008231555.IAA18771@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18756/peps Modified Files: pep-0200.txt Log Message: Fred fixed the parser module Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** pep-0200.txt 2000/08/23 14:56:26 1.24 --- pep-0200.txt 2000/08/23 15:55:40 1.25 *************** *** 89,97 **** test case platform date reported --------- -------- ------------- - test_parser all 22-Aug-2000 - test_posixpath all 22-Aug-2000 [think it's because Skip backed out commonpathprefix changes ! but didn't change the tests] test_fork1 Linux 26-Jul-2000 --- 89,95 ---- test case platform date reported --------- -------- ------------- test_posixpath all 22-Aug-2000 [think it's because Skip backed out commonpathprefix changes ! but didn't change the tests; patch to fix exists] test_fork1 Linux 26-Jul-2000 From python-dev@python.org Wed Aug 23 16:45:31 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 08:45:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.39,1.40 Message-ID: <200008231545.IAA17338@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv17324/Grammar Modified Files: Grammar Log Message: Added note stating that the parser module will need updating for most changes to this file. Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** Grammar 2000/08/22 02:43:07 1.39 --- Grammar 2000/08/23 15:45:28 1.40 *************** *** 1,4 **** --- 1,11 ---- # Grammar for Python + # Note: Changing the grammar specified in this file will most likely + # require corresponding changes in the parser module + # (../Modules/parsermodule.c). If you can't make the changes to + # that module yourself, please co-ordinate the required changes + # with someone who can; ask around on python-dev for help. Fred + # Drake will probably be listening there. + # Commands for Kees Blom's railroad program #diagram:token NAME From python-dev@python.org Wed Aug 23 16:57:24 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 23 Aug 2000 08:57:24 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.10,1.11 Message-ID: <200008231557.IAA18932@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18923 Modified Files: pep-0203.txt Log Message: Accepted, but also added a note about a misfeature that should be fixed. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** pep-0203.txt 2000/08/23 12:34:02 1.10 --- pep-0203.txt 2000/08/23 15:57:21 1.11 *************** *** 3,7 **** Version: $Revision$ Author: thomas@xs4all.net (Thomas Wouters) ! Status: Draft Type: Standards Track Python-Version: 2.0 --- 3,7 ---- Version: $Revision$ Author: thomas@xs4all.net (Thomas Wouters) ! Status: Accepted Type: Standards Track Python-Version: 2.0 *************** *** 80,83 **** --- 80,86 ---- should be INCREF()'d appropriately. + [XXX so I am accepting this, but I'm a bit worried about the + argument coercion. For x+=y, if x supports augmented assignment, + y should only be cast to x's type, not the other way around!] Rationale From python-dev@python.org Wed Aug 23 16:58:03 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 23 Aug 2000 08:58:03 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.28,1.29 Message-ID: <200008231558.IAA18995@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18982 Modified Files: pep-0000.txt Log Message: Accepted PEP-0203. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** pep-0000.txt 2000/08/23 05:09:57 1.28 --- pep-0000.txt 2000/08/23 15:58:00 1.29 *************** *** 28,32 **** SA 201 pep-0201.txt Lockstep Iteration Warsaw S 202 pep-0202.txt List Comprehensions Peters ! S 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters SD 205 pep-0205.txt Weak References Drake --- 28,32 ---- SA 201 pep-0201.txt Lockstep Iteration Warsaw S 202 pep-0202.txt List Comprehensions Peters ! SA 203 pep-0203.txt Augmented Assignments Wouters S 204 pep-0204.txt Range Literals Wouters SD 205 pep-0205.txt Weak References Drake From python-dev@python.org Wed Aug 23 16:58:08 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 23 Aug 2000 08:58:08 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0001.txt,1.10,1.11 Message-ID: <200008231558.IAA19020@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv19006 Modified Files: pep-0001.txt Log Message: In order to get a PEP number, you need more than just an abstract. You need a rough draft. Index: pep-0001.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0001.txt,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** pep-0001.txt 2000/08/23 05:04:42 1.10 --- pep-0001.txt 2000/08/23 15:58:05 1.11 *************** *** 51,59 **** The champion then emails the PEP editor with a proposed title and ! an abstract of about a paragraph in length. If the PEP editor approves, he will assign the PEP a number, label it as standards track or informational, give it status 'draft', ! and create and check-in an initial template for the PEP. The PEP editor will not unreasonably deny a PEP. Reasons for denying PEP status include duplication of effort, being technically unsound, --- 51,59 ---- The champion then emails the PEP editor with a proposed title and ! a rough, but fleshed out, draft of the PEP. If the PEP editor approves, he will assign the PEP a number, label it as standards track or informational, give it status 'draft', ! and create and check-in the initial draft of the PEP. The PEP editor will not unreasonably deny a PEP. Reasons for denying PEP status include duplication of effort, being technically unsound, From python-dev@python.org Wed Aug 23 17:50:50 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 23 Aug 2000 09:50:50 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0224.txt,NONE,1.1 Message-ID: <200008231650.JAA02590@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2583 Added Files: pep-0224.txt Log Message: Added PEP 224, Attribute Docstrings, assigned to MAL. ***** Error reading new file(2, 'No such file or directory') From python-dev@python.org Wed Aug 23 17:51:23 2000 From: python-dev@python.org (Barry Warsaw) Date: Wed, 23 Aug 2000 09:51:23 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0000.txt,1.29,1.30 Message-ID: <200008231651.JAA02635@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv2626 Modified Files: pep-0000.txt Log Message: Added PEP 224, Attribute Docstrings, assigned to MAL. Index: pep-0000.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0000.txt,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** pep-0000.txt 2000/08/23 15:58:00 1.29 --- pep-0000.txt 2000/08/23 16:51:21 1.30 *************** *** 49,52 **** --- 49,53 ---- SD 222 pep-0222.txt Web Library Enhancements Kuchling S 223 pep-0223.txt Change the Meaning of \x Escapes Peters + S 224 pep-0224.txt Attribute Docstrings Lemburg *************** *** 68,71 **** --- 69,73 ---- Hylton, Jeremy jeremy@beopen.com Kuchling, Andrew akuchlin@mems-exchange.org + Lemburg, Marc-Andre mal@lemburg.com McMillan, Gordon gmcm@hypernet.com Peters, Tim tpeters@beopen.com From python-dev@python.org Wed Aug 23 17:51:59 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:51:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_posixpath.py,1.1,1.2 Message-ID: <200008231651.JAA02667@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2657 Modified Files: test_posixpath.py Log Message: updated to correct failing test cases Index: test_posixpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_posixpath.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_posixpath.py 2000/07/12 00:20:08 1.1 --- test_posixpath.py 2000/08/23 16:51:56 1.2 *************** *** 30,36 **** tester('posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', - "/home") - tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"])', "/home/swen") tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") --- 30,36 ---- tester('posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', "/home/swen") + tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"])', + "/home/swen/") tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") From python-dev@python.org Wed Aug 23 17:55:02 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:55:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_dospath.py,NONE,1.1 Message-ID: <200008231655.JAA02930@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2909 Added Files: test_dospath.py Log Message: new test - like test_ntpath but without splitunc test cases --- NEW FILE --- import dospath import string import os errors = 0 def tester(fn, wantResult): fn = string.replace(fn, "\\", "\\\\") gotResult = eval(fn) if wantResult != gotResult: print "error!" print "evaluated: " + str(fn) print "should be: " + str(wantResult) print " returned: " + str(gotResult) print "" global errors errors = errors + 1 tester('dospath.splitdrive("c:\\foo\\bar")', ('c:', '\\foo\\bar')) tester('dospath.splitdrive("c:/foo/bar")', ('c:', '/foo/bar')) tester('dospath.split("c:\\foo\\bar")', ('c:\\foo', 'bar')) tester('dospath.split("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint\\foo', 'bar')) tester('dospath.split("c:\\")', ('c:\\', '')) tester('dospath.split("\\\\conky\\mountpoint\\")', ('\\\\conky\\mountpoint', '')) tester('dospath.split("c:/")', ('c:/', '')) tester('dospath.split("//conky/mountpoint/")', ('//conky/mountpoint', '')) tester('dospath.isabs("c:\\")', 1) tester('dospath.isabs("\\\\conky\\mountpoint\\")', 1) tester('dospath.isabs("\\foo")', 1) tester('dospath.isabs("\\foo\\bar")', 1) tester('dospath.abspath("C:\\")', "C:\\") tester('dospath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', "/home/swen") tester('dospath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])', "\\home\\swen\\") tester('dospath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', "/home/swen/spam") if errors: print str(errors) + " errors." else: print "No errors. Thank your lucky stars." From python-dev@python.org Wed Aug 23 17:58:42 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:58:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libposixpath.tex,1.15,1.16 Message-ID: <200008231658.JAA03111@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv3103 Modified Files: libposixpath.tex Log Message: update commonprefix doc to make sure user is aware it works character-by-character and that that behavior may result in it returning prefixes that are not valid paths Index: libposixpath.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libposixpath.tex,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** libposixpath.tex 2000/04/03 20:13:53 1.15 --- libposixpath.tex 2000/08/23 16:58:32 1.16 *************** *** 22,28 **** \begin{funcdesc}{commonprefix}{list} ! Return the longest string that is a prefix of all strings in \var{list}. If \var{list} is empty, return the empty string ! (\code{''}). \end{funcdesc} --- 22,30 ---- \begin{funcdesc}{commonprefix}{list} ! Return the longest path prefix (taken character-by-character) that is a ! prefix of all paths in \var{list}. If \var{list} is empty, return the empty string ! (\code{''}). Note that this may return invalid paths because it works a ! character at a time. \end{funcdesc} From python-dev@python.org Wed Aug 23 18:03:37 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 10:03:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref5.tex,1.35,1.36 Message-ID: <200008231703.KAA04105@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv4080 Modified Files: ref5.tex Log Message: fix list comprehension discussion to use \keyword macro instead of simply quoting keywords. Index: ref5.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref5.tex,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** ref5.tex 2000/08/22 02:43:06 1.35 --- ref5.tex 2000/08/23 17:03:34 1.36 *************** *** 165,172 **** evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by at least one "for" clause and zero or more ! "for" or "if" clauses. In this case, the elements of the new list are those that would be produced ! by considering each of the "for" or "if" clauses a block, nesting from left to right, and evaluating the expression to produce a list element each time the innermost block is reached. --- 165,173 ---- evaluated from left to right and placed into the list object in that order. When a list comprehension is supplied, it consists of a ! single expression followed by at least one \keyword{for} clause and zero or ! more \keyword{for} or \keyword{if} clauses. In this case, the elements of the new list are those that would be produced ! by considering each of the \keyword{for} or \keyword{if} clauses a block, ! nesting from left to right, and evaluating the expression to produce a list element each time the innermost block is reached. From python-dev@python.org Wed Aug 23 17:54:30 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 09:54:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_ntpath.py,1.4,1.5 Message-ID: <200008231654.JAA02887@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2879 Modified Files: test_ntpath.py Log Message: added commonprefix test cases Index: test_ntpath.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_ntpath.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_ntpath.py 2000/08/14 23:06:37 1.4 --- test_ntpath.py 2000/08/23 16:54:27 1.5 *************** *** 38,41 **** --- 38,47 ---- tester('ntpath.abspath("C:\\")', "C:\\") + tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', + "/home/swen") + tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])', + "\\home\\swen\\") + tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', + "/home/swen/spam") if errors: From python-dev@python.org Wed Aug 23 19:17:45 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 11:17:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser intrcheck.c,2.39,2.40 Message-ID: <200008231817.LAA26387@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv26371/Parser Modified Files: intrcheck.c Log Message: Simplified inclusions and avoid prototypes copied in from elsewhere. This also avoids a warning in anal mode. Index: intrcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/intrcheck.c,v retrieving revision 2.39 retrieving revision 2.40 diff -C2 -r2.39 -r2.40 *** intrcheck.c 2000/07/31 15:28:04 2.39 --- intrcheck.c 2000/08/23 18:17:42 2.40 *************** *** 11,26 **** /* Check for interrupts */ ! #include "config.h" ! ! /* config.h may or may not define DL_IMPORT */ ! #ifndef DL_IMPORT /* declarations for DLL import/export */ ! #define DL_IMPORT(RTYPE) RTYPE ! #endif ! ! #include "intrcheck.h" ! ! /* Copied here from ceval.h -- can't include that file. */ ! int Py_AddPendingCall(int (*func)(void *), void *arg); ! #ifdef QUICKWIN --- 11,15 ---- /* Check for interrupts */ ! #include "Python.h" #ifdef QUICKWIN From python-dev@python.org Wed Aug 23 20:01:47 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 23 Aug 2000 12:01:47 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.89,1.90 Message-ID: <200008231901.MAA31275@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv31228 Modified Files: README Log Message: Updated some URLs; removed mention of copyright (we'll have to add something in later after that discussion is over); remove explanation of 2.0 version number. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -r1.89 -r1.90 *** README 2000/07/23 21:18:08 1.89 --- README 2000/08/23 19:01:43 1.90 *************** *** 10,36 **** --------------------------- ! See http://www.pythonlabs.com/. - Why is it called version 2.0? - ----------------------------- - - While Pythoneers have grown fond of Python's exceedingly slow version - incrementing, that same quality makes parts of the rest of the world - think that Python is barely out of its first alpha test. Especially - enterprise customers are often fearful of anything that's version 1.x! - The new version number also clearly marks departure of Python's core - development team from CNRI to join BeOpen.com. - - What happened to Python 1.6? It was promoted and renamed Python 2.0. - There were two alpha releases of Python 1.6 before we decided to - increment the major version number. - - Previously, the version number 2.0 was associated with a mythical and - elusive incompatible future release. That release (still ways off, - and not as incompatible as people fear!) is now referred to as Python - 3000. - - If you don't read instructions ------------------------------ --- 10,16 ---- --------------------------- ! See http://www.pythonlabs.com/tech/python2.html . If you don't read instructions ------------------------------ *************** *** 698,703 **** -------- ! Python's own web site has URL http://www.pythonlabs.com/. Come visit ! us! --- 678,684 ---- -------- ! Python's web site is at http://www.python.org/. The Python core ! development team at BeOpen has its own website at ! http://www.pythonlabs.com/. Come visit us! *************** *** 723,731 **** Bug reports ----------- ! To report or search for bugs, please use the Python Bugs List at ! http://www.python.org/search/search_bugs.html Questions --------- --- 704,724 ---- Bug reports ----------- + + To report or search for bugs, please use the SourceForge Bugs + Tracker at http://sourceforge.net/bugs/?group_id=5470 . + ! Patches and contributions ! ------------------------- + To submit a patch or other contribution, please use the SourceForge + Patch Manager at http://sourceforge.net/patch/?group_id=5470 . + If you have a proposal to change Python, it's best to submit a Python + Enhancement Proposal (PEP) first. All current PEPs, as well as + guidelines for submitting a new PEP, are here: + http://python.sourceforge.net/peps/. + + Questions --------- *************** *** 831,842 **** E-mail: guido@beopen.com or guido@python.org - - - Copyright notice - ================ - - The Python source is copyrighted, but you can freely use and copy it - as long as you don't change or remove the copyright notice. The - copyright notice is found in the Misc/COPYRIGHT file. --- 824,827 ---- From python-dev@python.org Wed Aug 23 20:40:55 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 12:40:55 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.25,1.26 Message-ID: <200008231940.MAA09860@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9620 Modified Files: pep-0200.txt Log Message: test_parser and test_posixpath fixed Add new action items (bugs with priority higher than 7 are for 2.0b1) popen2 support (/F) mark many action items as done remove SyntaxError enhancements as accepted (Guido didn't like it and /F didn't think he was doing it). shorten descriptions of other open tasks that have patches associated Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** pep-0200.txt 2000/08/23 15:55:40 1.25 --- pep-0200.txt 2000/08/23 19:40:52 1.26 *************** *** 89,96 **** test case platform date reported --------- -------- ------------- - test_posixpath all 22-Aug-2000 - [think it's because Skip backed out commonpathprefix changes - but didn't change the tests; patch to fix exists] - test_fork1 Linux 26-Jul-2000 [no clue; there are probably two bugs here] --- 89,92 ---- *************** *** 111,114 **** --- 107,113 ---- test case platform date reported --------- -------- ------------- + test_parser all 22-Aug-2000 + test_posixpath all 22-Aug-2000 + test_popen2 Win32 26-Jul-2000 [20-Aug-2000 tim *************** *** 173,178 **** Open items -- Need to be resolved before 2.0b1 release ! Fix bug 112558 ! https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 Get all patches out of Open. --- 172,176 ---- Open items -- Need to be resolved before 2.0b1 release ! Add popen2 support for Linux -- assigned to /F Get all patches out of Open. *************** *** 180,183 **** --- 178,188 ---- Get all patches out of Accepted. + Fix bug 112558 + https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 + + Fix all other bugs with priority 7 or higher + + Review performance and frequency of garbage collection scans. + Decide on a license. *************** *** 198,201 **** --- 203,208 ---- Open items -- Need to be resolved before 2.0 final release + Improve code coverage of test suite. + Decide on a license. *************** *** 222,228 **** --- 229,244 ---- Accepted and completed + * "import as" - Thomas Wouters + Extend the 'import' and 'from ... import' mechanism to enable + importing a symbol as another name. (Without adding a new keyword.) + + * List comprehensions - Skip Montanaro + Tim Peters still needs to do PEP. + * Restore old os.path.commonprefix behavior Do we have test cases that work on all platforms? + * Tim O'Malley's cookie module with good license + * Lockstep iteration ("zip" function) - Barry Warsaw *************** *** 247,306 **** Accepted and in progress - * SyntaxError enhancements - Fredrik Lundh - http://www.python.org/pipermail/python-dev/2000-July/012981.html - * interface to poll system call - Andrew Kuchling ! An OO interface to the poll system call will be added to the ! select module. * Compression of Unicode database - Fredrik Lundh ! http://hem.passagen.se/eff/bot.htm#456806 ! * PyErr_SafeFormat / snprintf - owner??? ! Use snprintf to avoid buffer overflows. Need configure hackery ! to discovery if it is available on the current platform and a ! default implementation if it is not. ! http://www.python.org/pipermail/python-dev/2000-April/010051.html * Support for opcode arguments > 2**16 - Charles Waldman ! Source files longer than 32K and sequences with more than 32K ! elements both fail because opcode arguments are limited to ! 16-bit values. * Range literals - Thomas Wouters ! Make range(1, 10, 2) == [1:10:2] ! ! * List comprehensions - Skip Montanaro (Tim Peters for PEP) ! Need a coherent proposal. Lots of confusing discussion going ! on. ! [note: it's not confusing to Guido - tim] * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. - * "import as" - Thomas Wouters - Extend the 'import' and 'from ... import' mechanism to enable - importing a symbol as another name. (Without adding a new keyword.) - - * Merge __getitem__ and __getslice__ - Thomas Wouters - Move __getslice__ functionality into __getitem__, using slice objects, - for normal slices as well as for extended ones. First step: use - getitem if there is no getslice. - * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? * Add \U1234678 escapes in u"" strings - Fredrik Lundh? Open: proposed but not accepted or rejected - * Tim O'Malley's cookie module -- but need different license - * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - Postponed --- 263,295 ---- Accepted and in progress * interface to poll system call - Andrew Kuchling ! SF Patch 100852 * Compression of Unicode database - Fredrik Lundh ! SF Patch 100899 ! * PyErr_Format - Fredrik Lundh ! Make this function safe from buffer overflows. * Support for opcode arguments > 2**16 - Charles Waldman ! SF Patch 100893 * Range literals - Thomas Wouters ! SF Patch 100902 * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? * Add \U1234678 escapes in u"" strings - Fredrik Lundh? + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries Open: proposed but not accepted or rejected * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. Postponed From python-dev@python.org Wed Aug 23 21:07:24 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 23 Aug 2000 13:07:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_dospath,NONE,1.1 Message-ID: <200008232007.NAA13841@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv13816 Added Files: test_dospath Log Message: test case output for dospath regr test --- NEW FILE --- test_dospath No errors. Thank your lucky stars. From python-dev@python.org Wed Aug 23 21:21:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 13:21:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Demo/parser test_parser.py,1.3,1.4 Message-ID: <200008232021.NAA21953@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Demo/parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv21944/Demo/parser Modified Files: test_parser.py Log Message: Sort the list of files processed before running the test on each. Index: test_parser.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/parser/test_parser.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_parser.py 1998/09/14 16:43:53 1.3 --- test_parser.py 2000/08/23 20:21:31 1.4 *************** *** 41,44 **** --- 41,45 ---- import glob args = glob.glob("*.py") + args.sort() map(testFile, args) sys.exit(_numFailed != 0) *************** *** 46,50 **** if __name__ == '__main__': test() - - # - # end of file --- 47,48 ---- From python-dev@python.org Wed Aug 23 22:16:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 14:16:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python Makefile.in,2.25,2.26 Message-ID: <200008232116.OAA02640@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv2632 Modified Files: Makefile.in Log Message: Remove the dependency information for version.o; this is not part of the sources/build process any more. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/Makefile.in,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -r2.25 -r2.26 *** Makefile.in 2000/08/01 17:46:22 2.25 --- Makefile.in 2000/08/23 21:16:10 2.26 *************** *** 135,139 **** thread.o: thread.c traceback.o: traceback.c - version.o: version.c # DO NOT DELETE THIS LINE -- mkdep uses it. --- 135,138 ---- From python-dev@python.org Wed Aug 23 22:11:08 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 23 Aug 2000 14:11:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_b1.py,1.24,1.25 Message-ID: <200008232111.OAA32542@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv32407/Lib/test Modified Files: test_b1.py Log Message: style nits Index: test_b1.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_b1.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** test_b1.py 2000/07/14 04:32:09 1.24 --- test_b1.py 2000/08/23 21:11:05 1.25 *************** *** 154,161 **** globals = {'a': 1, 'b': 2} locals = {'b': 200, 'c': 300} ! if eval('a', globals) <> 1: raise TestFailed, "eval(1)" ! if eval('a', globals, locals) <> 1: raise TestFailed, "eval(2)" ! if eval('b', globals, locals) <> 200: raise TestFailed, "eval(3)" ! if eval('c', globals, locals) <> 300: raise TestFailed, "eval(4)" print 'execfile' --- 154,165 ---- globals = {'a': 1, 'b': 2} locals = {'b': 200, 'c': 300} ! if eval('a', globals) <> 1: ! raise TestFailed, "eval(1) == %s" % eval('a', globals) ! if eval('a', globals, locals) <> 1: ! raise TestFailed, "eval(2)" ! if eval('b', globals, locals) <> 200: ! raise TestFailed, "eval(3)" ! if eval('c', globals, locals) <> 300: ! raise TestFailed, "eval(4)" print 'execfile' From python-dev@python.org Thu Aug 24 00:16:13 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 16:16:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.45,2.46 Message-ID: <200008232316.QAA01330@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv31334/Objects Modified Files: abstract.c Log Message: Add extra check on whether 'tp_as_number' is still non-NULL after coercion, in the PyNumber_* functions. Also, remove unnecessary tests from PyNumber_Multiply: after BINOP(), neither argument can be an instance. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.45 retrieving revision 2.46 diff -C2 -r2.45 -r2.46 *** abstract.c 2000/08/17 22:37:32 2.45 --- abstract.c 2000/08/23 23:16:10 2.46 *************** *** 295,299 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_or) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 295,300 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_or) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 314,318 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_xor) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 315,320 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_xor) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 333,337 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_and) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 335,340 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_and) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 352,356 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_lshift) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 355,360 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_lshift) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 371,375 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_rshift) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 375,380 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_rshift) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 395,399 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_add) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 400,405 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_add) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 414,418 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_subtract) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 420,425 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_subtract) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 432,437 **** BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply); if (tp->tp_as_number != NULL && ! w->ob_type->tp_as_sequence != NULL && ! !PyInstance_Check(v)) { /* number*sequence -- swap v and w */ PyObject *tmp = v; --- 439,443 ---- BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply); if (tp->tp_as_number != NULL && ! w->ob_type->tp_as_sequence != NULL) { /* number*sequence -- swap v and w */ PyObject *tmp = v; *************** *** 443,457 **** PyObject *x = NULL; PyObject * (*f)(PyObject *, PyObject *); ! if (PyInstance_Check(v)) { ! /* Instances of user-defined classes get their ! other argument uncoerced, so they may ! implement sequence*number as well as ! number*number. */ ! Py_INCREF(v); ! Py_INCREF(w); ! } ! else if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_multiply) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 449,456 ---- PyObject *x = NULL; PyObject * (*f)(PyObject *, PyObject *); ! if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_multiply) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 490,494 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_divide) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 489,494 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_divide) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 513,517 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_remainder) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 513,518 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_remainder) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 532,536 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_divmod) != NULL) x = (*f)(v, w); Py_DECREF(v); --- 533,538 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_divmod) != NULL) x = (*f)(v, w); Py_DECREF(v); *************** *** 558,562 **** if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if ((f = v->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v, w, Py_None); else --- 560,565 ---- if (PyNumber_Coerce(&v, &w) != 0) return NULL; ! if (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v, w, Py_None); else *************** *** 595,599 **** if (PyNumber_Coerce(&w2, &z2) != 0) goto error1; ! if ((f = v1->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v1, w2, z2); else --- 598,603 ---- if (PyNumber_Coerce(&w2, &z2) != 0) goto error1; ! if (v->ob_type->tp_as_number != NULL && ! (f = v1->ob_type->tp_as_number->nb_power) != NULL) res = (*f)(v1, w2, z2); else From python-dev@python.org Thu Aug 24 00:31:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Wed, 23 Aug 2000 16:31:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.46,2.47 Message-ID: <200008232331.QAA16657@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv15579/Objects Modified Files: abstract.c Log Message: Addendum to previous change: now that 'f' is not unconditionally initialized in the 'if (..)', do so manually. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.46 retrieving revision 2.47 diff -C2 -r2.46 -r2.47 *** abstract.c 2000/08/23 23:16:10 2.46 --- abstract.c 2000/08/23 23:31:34 2.47 *************** *** 292,296 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 292,296 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 312,316 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 312,316 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 332,336 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 332,336 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 352,356 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 352,356 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 372,376 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 372,376 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 397,401 **** else if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 397,401 ---- else if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 417,421 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 417,421 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 448,452 **** if (tp->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 448,452 ---- if (tp->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 486,490 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 486,490 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 510,514 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 510,514 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; *************** *** 530,534 **** if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *); if (PyNumber_Coerce(&v, &w) != 0) return NULL; --- 530,534 ---- if (v->ob_type->tp_as_number != NULL) { PyObject *x = NULL; ! PyObject * (*f)(PyObject *, PyObject *) = NULL; if (PyNumber_Coerce(&v, &w) != 0) return NULL; From python-dev@python.org Thu Aug 24 01:37:53 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:37:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.24,1.25 Message-ID: <200008240037.RAA25700@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25645/lib Modified Files: libdis.tex Log Message: Charles G. Waldman : Update the dis module documentation to reflect the EXTENDED_ARG opcode. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** libdis.tex 2000/08/21 17:19:00 1.24 --- libdis.tex 2000/08/24 00:37:50 1.25 *************** *** 533,536 **** --- 533,543 ---- \end{opcodedesc} + \begin{opcodedesc}{EXTENDED_ARG}{ext} + Prefixes any opcode which has an argument too big to fit into the + default two bytes. \var{ext} holds two additional bytes which, taken + together with the subsequent opcode's argument, comprise a four-byte + argument, \var {ext} being the two most-significant bytes. + \end{opcodedesc} + \begin{opcodedesc}{CALL_FUNCTION_VAR}{argc} Calls a function. \var{argc} is interpreted as in \code{CALL_FUNCTION}. From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.24,1.25 Message-ID: <200008240032.RAA19736@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Lib Modified Files: dis.py Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** dis.py 2000/08/21 17:18:40 1.24 --- dis.py 2000/08/24 00:32:09 1.25 *************** *** 57,60 **** --- 57,61 ---- n = len(code) i = 0 + extended_arg = 0 while i < n: c = code[i] *************** *** 69,74 **** i = i+1 if op >= HAVE_ARGUMENT: ! oparg = ord(code[i]) + ord(code[i+1])*256 i = i+2 print string.rjust(`oparg`, 5), if op in hasconst: --- 70,78 ---- i = i+1 if op >= HAVE_ARGUMENT: ! oparg = ord(code[i]) + ord(code[i+1])*256 + extended_arg ! extended_arg = 0 i = i+2 + if op == EXTENDED_ARG: + extended_arg = oparg*65536L print string.rjust(`oparg`, 5), if op in hasconst: *************** *** 259,262 **** --- 263,268 ---- def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8) + def_op('EXTENDED_ARG', 143) + EXTENDED_ARG = 143 def _test(): From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include node.h,2.16,2.17 opcode.h,2.28,2.29 Message-ID: <200008240032.RAA19731@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Include Modified Files: node.h opcode.h Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: node.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/node.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** node.h 2000/07/08 23:37:28 2.16 --- node.h 2000/08/24 00:32:09 2.17 *************** *** 20,25 **** short n_type; char *n_str; ! short n_lineno; ! short n_nchildren; struct _node *n_child; } node; --- 20,25 ---- short n_type; char *n_str; ! int n_lineno; ! int n_nchildren; struct _node *n_child; } node; Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** opcode.h 2000/08/21 15:36:27 2.28 --- opcode.h 2000/08/24 00:32:09 2.29 *************** *** 131,134 **** --- 131,137 ---- #define CALL_FUNCTION_VAR_KW 142 /* #args + (#kwargs<<8) */ + /* Support for opargs more than 16 bits long */ + #define EXTENDED_ARG 143 + /* Comparison operator codes (argument to COMPARE_OP) */ enum cmp_op {LT, LE, EQ, NE, GT, GE, IN, NOT_IN, IS, IS_NOT, EXC_MATCH, BAD}; From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser node.c,2.12,2.13 Message-ID: <200008240032.RAA19740@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Parser Modified Files: node.c Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: node.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/node.c,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** node.c 2000/07/22 19:20:54 2.12 --- node.c 2000/08/24 00:32:09 2.13 *************** *** 9,13 **** --- 9,18 ---- ******************************************************************/ + #ifdef HAVE_LIMITS_H #include + #endif + #ifndef INT_MAX + #define INT_MAX 2147483647 + #endif /* Parse tree node implementation */ *************** *** 40,44 **** register int nch1 = nch+1; register node *n; ! if (nch == SHRT_MAX || nch < 0) return E_OVERFLOW; if (XXXROUNDUP(nch) < nch1) { --- 45,49 ---- register int nch1 = nch+1; register node *n; ! if (nch == INT_MAX || nch < 0) return E_OVERFLOW; if (XXXROUNDUP(nch) < nch1) { From python-dev@python.org Thu Aug 24 01:32:12 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:32:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.193,2.194 compile.c,2.132,2.133 Message-ID: <200008240032.RAA19748@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv19656/Python Modified Files: ceval.c compile.c Log Message: Charles G. Waldman : Add the EXTENDED_ARG opcode to the virtual machine, allowing 32-bit arguments to opcodes instead of being forced to stick to the 16-bit limit. This is especially useful for machine-generated code, which can be too long for the SET_LINENO parameter to fit into 16 bits. This closes the implementation portion of SourceForge patch #100893. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.193 retrieving revision 2.194 diff -C2 -r2.193 -r2.194 *** ceval.c 2000/08/21 15:44:01 2.193 --- ceval.c 2000/08/24 00:32:09 2.194 *************** *** 614,617 **** --- 614,618 ---- if (HAS_ARG(opcode)) oparg = NEXTARG(); + dispatch_opcode: #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS *************** *** 1751,1754 **** --- 1752,1760 ---- break; + case EXTENDED_ARG: + opcode = NEXTOP(); + oparg = oparg<<16 | NEXTARG(); + goto dispatch_opcode; + break; default: Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.132 retrieving revision 2.133 diff -C2 -r2.132 -r2.133 *** compile.c 2000/08/22 02:43:07 2.132 --- compile.c 2000/08/24 00:32:09 2.133 *************** *** 37,40 **** --- 37,43 ---- #include #endif + #ifndef INT_MAX + #define INT_MAX 2147483647 + #endif /* Three symbols from graminit.h are also defined in Python.h, with *************** *** 573,576 **** --- 576,580 ---- com_addoparg(struct compiling *c, int op, int arg) { + int extended_arg = arg >> 16; if (op == SET_LINENO) { com_set_lineno(c, arg); *************** *** 578,581 **** --- 582,590 ---- return; } + if (extended_arg){ + com_addbyte(c, EXTENDED_ARG); + com_addint(c, extended_arg); + arg &= 0xffff; + } com_addbyte(c, op); com_addint(c, arg); *************** *** 607,611 **** dist = target - (anchor+2); code[anchor] = dist & 0xff; ! code[anchor+1] = dist >> 8; if (!prev) break; --- 616,627 ---- dist = target - (anchor+2); code[anchor] = dist & 0xff; ! dist >>= 8; ! code[anchor+1] = dist; ! dist >>= 8; ! if (dist) { ! com_error(c, PyExc_SystemError, ! "com_backpatch: offset too large"); ! break; ! } if (!prev) break; *************** *** 3365,3368 **** --- 3381,3385 ---- if (HAS_ARG(opcode)) oparg = NEXTARG(); + dispatch_opcode1: switch (opcode) { case STORE_NAME: *************** *** 3375,3378 **** --- 3392,3400 ---- c->c_flags &= ~CO_OPTIMIZED; break; + case EXTENDED_ARG: + opcode = NEXTOP(); + oparg = oparg<<16 | NEXTARG(); + goto dispatch_opcode1; + break; } } *************** *** 3390,3393 **** --- 3412,3416 ---- if (HAS_ARG(opcode)) oparg = NEXTARG(); + dispatch_opcode2: if (opcode == LOAD_NAME || opcode == STORE_NAME || *************** *** 3404,3407 **** --- 3427,3432 ---- } i = PyInt_AsLong(v); + if (i >> 16) /* too big for 2 bytes */ + continue; switch (opcode) { case LOAD_NAME: cur_instr[0] = LOAD_FAST; break; *************** *** 3410,3414 **** } cur_instr[1] = i & 0xff; ! cur_instr[2] = (i>>8) & 0xff; } } --- 3435,3444 ---- } cur_instr[1] = i & 0xff; ! cur_instr[2] = i >> 8; ! } ! if (opcode == EXTENDED_ARG) { ! opcode = NEXTOP(); ! oparg = oparg<<16 | NEXTARG(); ! goto dispatch_opcode2; } } From python-dev@python.org Thu Aug 24 01:35:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:35:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_longexp,1.2,1.3 Message-ID: <200008240035.RAA23376@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv23314/Lib/test/output Modified Files: test_longexp Log Message: Charles G. Waldman : Update the test suite for the changes introduced by the EXTENDED_ARG opcode. This closes the regression test changes of SourceForge patch #100893. Index: test_longexp =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_longexp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_longexp 2000/08/15 15:51:18 1.2 --- test_longexp 2000/08/24 00:35:38 1.3 *************** *** 1,2 **** test_longexp ! Caught SyntaxError for long expression: expression too long (line 1) --- 1,2 ---- test_longexp ! 65580 From python-dev@python.org Thu Aug 24 01:35:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:35:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_longexp.py,1.1,1.2 Message-ID: <200008240035.RAA23370@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv23314/Lib/test Modified Files: test_longexp.py Log Message: Charles G. Waldman : Update the test suite for the changes introduced by the EXTENDED_ARG opcode. This closes the regression test changes of SourceForge patch #100893. Index: test_longexp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_longexp.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_longexp.py 2000/06/20 19:13:27 1.1 --- test_longexp.py 2000/08/24 00:35:38 1.2 *************** *** 1,18 **** ! REPS = 8192 ! try: ! eval("2+2+" * REPS + "+3.14159265") ! except SyntaxError, msg: ! print "Caught SyntaxError for long expression:", msg ! else: ! print "Long expression did not raise SyntaxError" ! ! ## This test prints "s_push: parser stack overflow" on stderr, ! ## which seems to confuse the test harness ! ##try: ! ## eval("(2+" * REPS + "0" + ")" * REPS) ! ##except SyntaxError: ! ## pass ! ##else: ! ## print "Deeply nested expression did not raised SyntaxError" ! --- 1,4 ---- ! REPS = 65580 ! l = eval("[" + "2," * REPS + "]") ! print len(l) From python-dev@python.org Thu Aug 24 01:50:30 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 17:50:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc TODO,1.30,1.31 Message-ID: <200008240050.RAA06285@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv6226/Doc Modified Files: TODO Log Message: Make sure Thomas Wouters has enough to do. ;-) (Some of this is in-progress; this also serves as a reminded to me to check this out once it is written.) Index: TODO =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/TODO,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** TODO 2000/08/17 22:32:01 1.30 --- TODO 2000/08/24 00:50:27 1.31 *************** *** 46,49 **** --- 46,53 ---- library ref.? (cmp() function). [Jeremy Hylton] + * Range literals need to be documented. [Thomas Wouters] + + * Augmented assignment. [Thomas Wouters] + Library Reference ----------------- From python-dev@python.org Thu Aug 24 02:01:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 18:01:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.100,1.101 Message-ID: <200008240101.SAA18352@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv18265 Modified Files: urllib.py Log Message: Randall Hopper >: Make it easier to use HTTP POST with urlretrieve(). Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.100 retrieving revision 1.101 diff -C2 -r1.100 -r1.101 *** urllib.py 2000/08/22 03:00:52 1.100 --- urllib.py 2000/08/24 01:01:26 1.101 *************** *** 62,70 **** else: return _urlopener.open(url, data) ! def urlretrieve(url, filename=None, reporthook=None): global _urlopener if not _urlopener: _urlopener = FancyURLopener() ! return _urlopener.retrieve(url, filename, reporthook) def urlcleanup(): if _urlopener: --- 62,70 ---- else: return _urlopener.open(url, data) ! def urlretrieve(url, filename=None, reporthook=None, data=None): global _urlopener if not _urlopener: _urlopener = FancyURLopener() ! return _urlopener.retrieve(url, filename, reporthook, data) def urlcleanup(): if _urlopener: *************** *** 187,191 **** except IOError, msg: pass ! fp = self.open(url) headers = fp.info() if not filename: --- 187,191 ---- except IOError, msg: pass ! fp = self.open(url, data) headers = fp.info() if not filename: From python-dev@python.org Thu Aug 24 02:06:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 18:06:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.24,1.25 Message-ID: <200008240106.SAA26293@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv26227/lib Modified Files: liburllib.tex Log Message: Moshe Zadka : Documentation updates for urlretrieve() and URLopener.retrieve(), to reflect Randall Hopper's patch for those functions. This closes SourceForge patch #100837. Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** liburllib.tex 2000/07/28 13:51:27 1.24 --- liburllib.tex 2000/08/24 01:06:40 1.25 *************** *** 116,119 **** --- 116,125 ---- FTP servers which do not return a file size in response to a retrieval request. + + If the \var{url} uses the \file{http:} scheme identifier, the optional + \var{data} argument may be given to specify a \code{POST} request + (normally the request type is \code{GET}). The \var{data} argument + must in standard \file{application/x-www-form-urlencoded} format; + see the \function{urlencode()} function below. \end{funcdesc} *************** *** 289,292 **** --- 295,304 ---- chunk of data is read from the network. \var{reporthook} is ignored for local URLs. + + If the \var{url} uses the \file{http:} scheme identifier, the optional + \var{data} argument may be given to specify a \code{POST} request + (normally the request type is \code{GET}). The \var{data} argument + must in standard \file{application/x-www-form-urlencoded} format; + see the \function{urlencode()} function below. \end{methoddesc} From python-dev@python.org Thu Aug 24 04:26:44 2000 From: python-dev@python.org (Tim Peters) Date: Wed, 23 Aug 2000 20:26:44 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0223.txt,1.3,1.4 Message-ID: <200008240326.UAA09275@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9254 Modified Files: pep-0223.txt Log Message: Completed, about to post. Index: pep-0223.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0223.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** pep-0223.txt 2000/08/23 06:03:29 1.3 --- pep-0223.txt 2000/08/24 03:26:42 1.4 *************** *** 3,11 **** Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Status: Draft Type: Standards Track Python-Version: 2.0 Created: 20-Aug-2000 ! Post-History: --- 3,11 ---- Version: $Revision$ Author: tpeters@beopen.com (Tim Peters) ! Status: Active Type: Standards Track Python-Version: 2.0 Created: 20-Aug-2000 ! Post-History: 23-Aug-2000 *************** *** 18,21 **** --- 18,199 ---- compatibility with Perl regular expressions, and with minimal risk to existing code. + + + Syntax + + The syntax of \x escapes, in all flavors of non-raw strings, becomes + + \xhh + + where h is a hex digit (0-9, a-f, A-F). The exact syntax in 1.5.2 is + not clearly specified in the Reference Manual; it says + + \xhh... + + implying "two or more" hex digits, but one-digit forms are also + accepted by the 1.5.2 compiler, and a plain \x is "expanded" to + itself (i.e., a backslash followed by the letter x). It's unclear + whether the Reference Manual intended either of the 1-digit or + 0-digit behaviors. + + + Semantics + + In an 8-bit non-raw string, + \xij + expands to the character + chr(int(ij, 16)) + Note that this is the same as in 1.6 and before. + + In a Unicode string, + \xij + acts the same as + \u00ij + i.e. it expands to the obvious Latin-1 character from the initial + segment of the Unicode space. + + An \x not followed by at least two hex digits is a compile-time error, + specifically ValueError in 8-bit strings, and UnicodeError (a subclass + of ValueError) in Unicode strings. Note that if an \x is followed by + more than two hex digits, only the first two are "consumed". In 1.6 + and before all but the *last* two were silently ignored. + + + Example + + In 1.5.2: + + >>> "\x123465" # same as "\x65" + 'e' + >>> "\x65" + 'e' + >>> "\x1" + '\001' + >>> "\x\x" + '\\x\\x' + >>> + + In 2.0: + + >>> "\x123465" # \x12 -> \022, "3456" left alone + '\0223456' + >>> "\x65" + 'e' + >>> "\x1" + [ValueError is raised] + >>> "\x\x" + [ValueError is raised] + >>> + + + History and Rationale + + \x escapes were introduced in C as a way to specify variable-width + character encodings. Exactly which encodings those were, and how many + hex digits they required, was left up to each implementation. The + language simply stated that \x "consumed" *all* hex digits following, + and left the meaning up to each implementation. So, in effect, \x in C + is a standard hook to supply platform-defined behavior. + + Because Python explicitly aims at platform independence, the \x escape + in Python (up to and including 1.6) has been treated the same way + across all platforms: all *except* the last two hex digits were + silently ignored. So the only actual use for \x escapes in Python was + to specify a single byte using hex notation. + + Larry Wall appears to have realized that this was the only real use for + \x escapes in a platform-independent language, as the proposed rule for + Python 2.0 is in fact what Perl has done from the start (although you + need to run in Perl -w mode to get warned about \x escapes with fewer + than 2 hex digits following -- it's clearly more Pythonic to insist on + 2 all the time). + + When Unicode strings were introduced to Python, \x was generalized so + as to ignore all but the last *four* hex digits in Unicode strings. + This caused a technical difficulty for the new regular expression engine: + SRE tries very hard to allow mixing 8-bit and Unicode patterns and + strings in intuitive ways, and it no longer had any way to guess what, + for example, r"\x123456" should mean as a pattern: is it asking to match + the 8-bit character \x56 or the Unicode character \u3456? + + There are hacky ways to guess, but it doesn't end there. The ISO C99 + standard also introduces 8-digit \U12345678 escapes to cover the entire + ISO 10646 character space, and it's also desired that Python 2 support + that from the start. But then what are \x escapes supposed to mean? + Do they ignore all but the last *eight* hex digits then? And if less + than 8 following in a Unicode string, all but the last 4? And if less + than 4, all but the last 2? + + This was getting messier by the minute, and the proposal cuts the + Gordian knot by making \x simpler instead of more complicated. Note + that the 4-digit generalization to \xijkl in Unicode strings was also + redundant, because it meant exactly the same thing as \uijkl in Unicode + strings. It's more Pythonic to have just one obvious way to specify a + Unicode character via hex notation. + + + Development and Discussion + + The proposal was worked out among Guido van Rossum, Fredrik Lundh and + Tim Peters in email. It was subsequently explained and disussed on + Python-Dev under subject "Go \x yourself", starting 2000-08-03. + Response was overwhelmingly positive; no objections were raised. + + + Backward Compatibility + + Changing the meaning of \x escapes does carry risk of breaking existing + code, although no instances of incompabitility have yet been discovered. + The risk is believed to be minimal. + + Tim Peters verified that, except for pieces of the standard test suite + deliberately provoking end cases, there are no instances of \xabcdef... + with fewer or more than 2 hex digits following, in either the Python + CVS development tree, or in assorted Python packages sitting on his + machine. + + It's unlikely there are any with fewer than 2, because the Reference + Manual implied they weren't legal (although this is debatable!). If + there are any with more than 2, Guido is ready to argue they were buggy + anyway <0.9 wink>. + + Guido reported that the O'Reilly Python books *already* document that + Python works the proposed way, likely due to their Perl editing + heritage (as above, Perl worked (very close to) the proposed way from + its start). + + Finn Bock reported that what JPython does with \x escapes is + unpredictable today. This proposal gives a clear meaning that can be + consistently and easily implemented across all Python implementations. + + + Effects on Other Tools + + Believed to be none. The candidates for breakage would mostly be + parsing tools, but the author knows of none that worry about the + internal structure of Python strings beyond the approximation "when + there's a backslash, swallow the next character". Tim Peters checked + python-mode.el, the std tokenize.py and pyclbr.py, and the IDLE syntax + coloring subsystem, and believes there's no need to change any of + them. Tools like tabnanny.py and checkappend.py inherit their immunity + from tokenize.py. + + + Reference Implementation + + The code changes are so simple that a separate patch will not be produced. + Fredrik Lundh is writing the code, is an expert in the area, and will + simply check the changes in before 2.0b1 is released. + + + BDFL Pronouncements + + Yes, ValueError, not SyntaxError. "Problems with literal interpretations + traditionally raise 'runtime' exceptions rather than syntax errors." + + + Copyright + + This document has been placed in the public domain. From python-dev@python.org Thu Aug 24 05:58:28 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 23 Aug 2000 21:58:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburlparse.tex,1.16,1.17 Message-ID: <200008240458.VAA23681@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv23674/lib Modified Files: liburlparse.tex Log Message: Move references to RFCs to a "See also" section for consistency with other sections of the library reference. Index: liburlparse.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburlparse.tex,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** liburlparse.tex 2000/07/16 19:01:10 1.16 --- liburlparse.tex 2000/08/24 04:58:25 1.17 *************** *** 19,24 **** The module has been designed to match the Internet RFC on Relative Uniform Resource Locators (and discovered a bug in an earlier ! draft!). Refer to \rfc{1808} for details on relative ! URLs and \rfc{1738} for information on basic URL syntax. It defines the following functions: --- 19,23 ---- The module has been designed to match the Internet RFC on Relative Uniform Resource Locators (and discovered a bug in an earlier ! draft!). It defines the following functions: *************** *** 41,45 **** urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') \end{verbatim} ! % yields the tuple --- 40,44 ---- urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') \end{verbatim} ! yields the tuple *************** *** 47,51 **** ('http', 'www.cwi.nl:80', '/%7Eguido/Python.html', '', '', '') \end{verbatim} ! % If the \var{default_scheme} argument is specified, it gives the default addressing scheme, to be used only if the URL string does not --- 46,50 ---- ('http', 'www.cwi.nl:80', '/%7Eguido/Python.html', '', '', '') \end{verbatim} ! If the \var{default_scheme} argument is specified, it gives the default addressing scheme, to be used only if the URL string does not *************** *** 76,80 **** urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') \end{verbatim} ! % yields the string --- 75,79 ---- urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') \end{verbatim} ! yields the string *************** *** 86,87 **** --- 85,98 ---- \code{urlparse()}. \end{funcdesc} + + + \begin{seealso} + \seerfc{1738}{Uniform Resource Locators (URL)}{ + This specifies the formal syntax and semantics of absolute + URLs.} + \seerfc{1808}{Relative Uniform Resource Locators}{ + This Request For Comments includes the rules for joining an + absolute and a relative URL, including a fair normal of + ``Abnormal Examples'' which govern the treatment of border + cases.} + \end{seealso} From python-dev@python.org Thu Aug 24 12:52:36 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 04:52:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib Cookie.py,1.1,1.2 Message-ID: <200008241152.EAA28431@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv27590 Modified Files: Cookie.py Log Message: Updated version of Cookie.py (rev. 2.29) from timo Index: Cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/Cookie.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Cookie.py 2000/08/19 13:01:19 1.1 --- Cookie.py 2000/08/24 11:52:33 1.2 *************** *** 27,31 **** #### # ! # $Id$ # by Timothy O'Malley # --- 27,31 ---- #### # ! # Id: Cookie.py,v 2.29 2000/08/23 05:28:49 timo Exp # by Timothy O'Malley # *************** *** 35,39 **** # # The original idea to treat Cookies as a dictionary came from ! # Dave Mitchel (davem@magnet.com) in 1995, when he released the # first version of nscookie.py. # --- 35,39 ---- # # The original idea to treat Cookies as a dictionary came from ! # Dave Mitchell (davem@magnet.com) in 1995, when he released the # first version of nscookie.py. # *************** *** 70,74 **** >>> C["fig"] = "newton" >>> C["sugar"] = "wafer" ! >>> C Set-Cookie: sugar=wafer; Set-Cookie: fig=newton; --- 70,74 ---- >>> C["fig"] = "newton" >>> C["sugar"] = "wafer" ! >>> print C Set-Cookie: sugar=wafer; Set-Cookie: fig=newton; *************** *** 93,97 **** >>> C = Cookie.SmartCookie() >>> C.load("chips=ahoy; vienna=finger") ! >>> C Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; --- 93,97 ---- >>> C = Cookie.SmartCookie() >>> C.load("chips=ahoy; vienna=finger") ! >>> print C Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; *************** *** 103,107 **** >>> C = Cookie.SmartCookie() >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') ! >>> C Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; --- 103,107 ---- >>> C = Cookie.SmartCookie() >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";') ! >>> print C Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"; *************** *** 113,117 **** >>> C["oreo"] = "doublestuff" >>> C["oreo"]["path"] = "/" ! >>> C Set-Cookie: oreo="doublestuff"; Path=/; --- 113,117 ---- >>> C["oreo"] = "doublestuff" >>> C["oreo"]["path"] = "/" ! >>> print C Set-Cookie: oreo="doublestuff"; Path=/; *************** *** 145,149 **** >>> C["string"].value 'seven' ! >>> C Set-Cookie: number=7; Set-Cookie: string=seven; --- 145,149 ---- >>> C["string"].value 'seven' ! >>> print C Set-Cookie: number=7; Set-Cookie: string=seven; *************** *** 166,170 **** >>> C["string"].value 'seven' ! >>> C Set-Cookie: number="I7\012."; Set-Cookie: string="S'seven'\012p1\012."; --- 166,170 ---- >>> C["string"].value 'seven' ! >>> print C Set-Cookie: number="I7\012."; Set-Cookie: string="S'seven'\012p1\012."; *************** *** 191,195 **** >>> C["string"].value 'seven' ! >>> C Set-Cookie: number="I7\012."; Set-Cookie: string=seven; --- 191,195 ---- >>> C["string"].value 'seven' ! >>> print C Set-Cookie: number="I7\012."; Set-Cookie: string=seven; *************** *** 310,314 **** def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, --- 310,314 ---- def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, *************** *** 318,324 **** # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote --- 318,324 ---- # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote *************** *** 441,445 **** def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey --- 441,445 ---- def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey *************** *** 463,468 **** return "%s %s" % ( header, self.OutputString(attrs) ) ! __repr__ = output def js_output(self, attrs=None): # Print javascript --- 463,472 ---- return "%s %s" % ( header, self.OutputString(attrs) ) ! __str__ = output + def __repr__(self): + return '<%s: %s=%s>' % (self.__class__.__name__, + self.key, repr(self.value) ) + def js_output(self, attrs=None): # Print javascript *************** *** 489,493 **** attrs = self._reserved_keys for K,V in self.items(): ! if not V: continue if K not in attrs: continue if K == "expires" and type(V) == type(1): --- 493,497 ---- attrs = self._reserved_keys for K,V in self.items(): ! if V == "": continue if K not in attrs: continue if K == "expires" and type(V) == type(1): *************** *** 586,591 **** # end output ! __repr__ = output ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" --- 590,601 ---- # end output ! __str__ = output ! ! def __repr__(self): ! L = [] ! for K,V in self.items(): ! L.append( '%s=%s' % (K,repr(V.value) ) ) ! return '<%s: %s>' % (self.__class__.__name__, string.join(L)) ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" *************** *** 631,635 **** elif string.lower(K) in Morsel._reserved_keys: if M: ! M[ K ] = V else: rval, cval = self.value_decode(V) --- 641,645 ---- elif string.lower(K) in Morsel._reserved_keys: if M: ! M[ K ] = _unquote(V) else: rval, cval = self.value_decode(V) *************** *** 637,641 **** M = self[K] ! return # end __ParseString # end BaseCookie class --- 647,651 ---- M = self[K] ! return # end __ParseString # end BaseCookie class *************** *** 717,718 **** --- 727,732 ---- # should add a test routine? # + + #Local Variables: + #tab-width: 4 + #end: From python-dev@python.org Thu Aug 24 12:56:40 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 04:56:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_cookie,1.2,1.3 Message-ID: <200008241156.EAA32267@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv31489/output Modified Files: test_cookie Log Message: Updated test suite: test repr() and str() of cookies, and test metadata fields with quoted values (as in Path="/acme") Index: test_cookie =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_cookie,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_cookie 2000/08/19 15:57:33 1.2 --- test_cookie 2000/08/24 11:56:19 1.3 *************** *** 1,9 **** --- 1,14 ---- test_cookie + Set-Cookie: vienna=finger; Set-Cookie: chips=ahoy; vienna 'finger' 'finger' + Set-Cookie: vienna=finger; chips 'ahoy' 'ahoy' + Set-Cookie: chips=ahoy; + Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; keebler 'E=mc2; L="Loves"; fudge=\012;' 'E=mc2; L="Loves"; fudge=\012;' + Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme; From python-dev@python.org Thu Aug 24 12:56:40 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 04:56:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cookie.py,1.2,1.3 Message-ID: <200008241156.EAA32295@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv31489 Modified Files: test_cookie.py Log Message: Updated test suite: test repr() and str() of cookies, and test metadata fields with quoted values (as in Path="/acme") Index: test_cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_cookie.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_cookie.py 2000/08/19 15:57:32 1.2 --- test_cookie.py 2000/08/24 11:56:18 1.3 *************** *** 14,21 **** for data, dict in cases: C = Cookie.SimpleCookie() ; C.load(data) ! print C for k, v in dict.items(): print ' ', k, repr( C[k].value ), repr(v) assert C[k].value == v C = Cookie.SimpleCookie() --- 14,23 ---- for data, dict in cases: C = Cookie.SimpleCookie() ; C.load(data) ! print repr(C) ! print str(C) for k, v in dict.items(): print ' ', k, repr( C[k].value ), repr(v) assert C[k].value == v + print C[k] C = Cookie.SimpleCookie() *************** *** 29,31 **** --- 31,40 ---- print C.js_output() print C.js_output(['path']) + + # Try cookie with quoted meta-data + C = Cookie.SimpleCookie() + C.load('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"') + assert C['Customer'].value == 'WILE_E_COYOTE' + assert C['Customer']['version'] == '1' + assert C['Customer']['path'] == '/acme' From python-dev@python.org Thu Aug 24 15:16:13 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Thu, 24 Aug 2000 07:16:13 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0224.txt,1.1,1.2 Message-ID: <200008241416.HAA13818@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv9223 Modified Files: pep-0224.txt Log Message: Completed final thought and bumped the Python version number to 2.1. The great thing about this PEP is that it is forward compatible :-) Index: pep-0224.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0224.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** pep-0224.txt 2000/08/23 16:50:47 1.1 --- pep-0224.txt 2000/08/24 14:16:10 1.2 *************** *** 5,9 **** Status: Draft Type: Standards Track ! Python-Version: 2.0 Created: 23-Aug-2000 Post-History: --- 5,9 ---- Status: Draft Type: Standards Track ! Python-Version: 2.1 Created: 23-Aug-2000 Post-History: *************** *** 106,110 **** --- 106,113 ---- C.__doc__b__ == "attribute C.b doc-string (2)" + A patch to the current CVS version of Python 2.0 which implements + the above is available on SourceForge at [1]. + Caveats of the Implementation *************** *** 131,135 **** Since the definition of method "x" currently does not reset the used assignment name variable, it is still valid when the compiler ! reaches [TBD: please finish your thought!] --- 134,142 ---- Since the definition of method "x" currently does not reset the used assignment name variable, it is still valid when the compiler ! reaches the docstring "b's doc string" and thus assigns the string ! to __doc__b__. ! ! A possible solution to this problem would be resetting the name ! variable for all non-expression nodes. *************** *** 141,145 **** References ! [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=XXX&group_id=5470 --- 148,152 ---- References ! [1] http://sourceforge.net/patch/?func=detailpatch&patch_id=101264&group_id=5470 From python-dev@python.org Thu Aug 24 15:40:38 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 07:40:38 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib Cookie.py,1.2,1.3 Message-ID: <200008241440.HAA29334@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv29318 Modified Files: Cookie.py Log Message: Whitespace cleanup; now passes the regression test (the last checkin made it fail on a TabError (inconsistent tab/space usage)). Removed a comment about including a test since there is a regression test for this module. Index: Cookie.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/Cookie.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Cookie.py 2000/08/24 11:52:33 1.2 --- Cookie.py 2000/08/24 14:40:35 1.3 *************** *** 310,314 **** def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, --- 310,314 ---- def _quote(str, LegalChars=_LegalChars, ! join=string.join, idmap=string._idmap, translate=string.translate): # # If the string does not need to be double-quoted, *************** *** 318,324 **** # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote --- 318,324 ---- # if "" == translate(str, idmap, LegalChars): ! return str else: ! return '"' + join( map(_Translator.get, str, str), "" ) + '"' # end _quote *************** *** 340,344 **** # Remove the "s str = str[1:-1] ! # Check for special sequences. Examples: # \012 --> \n --- 340,344 ---- # Remove the "s str = str[1:-1] ! # Check for special sequences. Examples: # \012 --> \n *************** *** 422,426 **** } _reserved_keys = _reserved.keys() ! def __init__(self): # Set defaults --- 422,426 ---- } _reserved_keys = _reserved.keys() ! def __init__(self): # Set defaults *************** *** 441,445 **** def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey --- 441,445 ---- def isReservedKey(self, K): ! return string.lower(K) in self._reserved_keys # end isReservedKey *************** *** 468,472 **** return '<%s: %s=%s>' % (self.__class__.__name__, self.key, repr(self.value) ) ! def js_output(self, attrs=None): # Print javascript --- 468,472 ---- return '<%s: %s=%s>' % (self.__class__.__name__, self.key, repr(self.value) ) ! def js_output(self, attrs=None): # Print javascript *************** *** 485,489 **** result = [] RA = result.append ! # First, the key=value pair RA("%s=%s;" % (self.key, self.coded_value)) --- 485,489 ---- result = [] RA = result.append ! # First, the key=value pair RA("%s=%s;" % (self.key, self.coded_value)) *************** *** 503,507 **** else: RA("%s=%s;" % (self._reserved[K], V)) ! # Return the result return string.join(result, " ") --- 503,507 ---- else: RA("%s=%s;" % (self._reserved[K], V)) ! # Return the result return string.join(result, " ") *************** *** 543,547 **** # A container class for a set of Morsels # ! def value_decode(self, val): """real_value, coded_value = value_decode(STRING) --- 543,547 ---- # A container class for a set of Morsels # ! def value_decode(self, val): """real_value, coded_value = value_decode(STRING) *************** *** 563,567 **** return strval, strval # end value_encode ! def __init__(self, input=None): UserDict.__init__(self) --- 563,567 ---- return strval, strval # end value_encode ! def __init__(self, input=None): UserDict.__init__(self) *************** *** 597,601 **** L.append( '%s=%s' % (K,repr(V.value) ) ) return '<%s: %s>' % (self.__class__.__name__, string.join(L)) ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" --- 597,601 ---- L.append( '%s=%s' % (K,repr(V.value) ) ) return '<%s: %s>' % (self.__class__.__name__, string.join(L)) ! def js_output(self, attrs=None): """Return a string suitable for JavaScript.""" *************** *** 618,622 **** return # end load() ! def __ParseString(self, str, patt=_CookiePattern): i = 0 # Our starting point --- 618,622 ---- return # end load() ! def __ParseString(self, str, patt=_CookiePattern): i = 0 # Our starting point *************** *** 646,651 **** self.__set(K, rval, cval) M = self[K] - - return # end __ParseString # end BaseCookie class --- 646,649 ---- *************** *** 675,679 **** Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! --- 673,677 ---- Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! *************** *** 695,699 **** Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! --- 693,697 ---- Note: Large cookie values add overhead because they must be retransmitted on every HTTP transaction. ! Note: HTTP has a 2k limit on the size of a cookie. This class does not check for this limit, so be careful!!! *************** *** 723,730 **** - - # - # should add a test routine? - # #Local Variables: --- 721,724 ---- From python-dev@python.org Thu Aug 24 17:18:07 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 24 Aug 2000 09:18:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.101,1.102 Message-ID: <200008241618.JAA25491@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25459 Modified Files: urllib.py Log Message: Promote the server version from a local variable to a class variable, so that a subclass can override it. This partly addresses Bug #112634 -- but the documentation is still wrong, since it suggests that you can set self.version *after* calling the base class __init__. In fact it must be done *before*. I'll fix that too. Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.101 retrieving revision 1.102 diff -C2 -r1.101 -r1.102 *** urllib.py 2000/08/24 01:01:26 1.101 --- urllib.py 2000/08/24 16:18:04 1.102 *************** *** 29,33 **** ! __version__ = '1.12' # XXX This version is not always updated :-( MAXFTPCACHE = 10 # Trim the ftp cache beyond this size --- 29,33 ---- ! __version__ = '1.13' # XXX This version is not always updated :-( MAXFTPCACHE = 10 # Trim the ftp cache beyond this size *************** *** 83,86 **** --- 83,88 ---- __tempfiles = None + version = "Python-urllib/%s" % __version__ + # Constructor def __init__(self, proxies=None, **x509): *************** *** 91,96 **** self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') ! server_version = "Python-urllib/%s" % __version__ ! self.addheaders = [('User-agent', server_version)] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() --- 93,97 ---- self.key_file = x509.get('key_file') self.cert_file = x509.get('cert_file') ! self.addheaders = [('User-agent', self.version)] self.__tempfiles = [] self.__unlink = os.unlink # See cleanup() From python-dev@python.org Thu Aug 24 17:20:35 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 24 Aug 2000 09:20:35 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.25,1.26 Message-ID: <200008241620.JAA26854@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv26819 Modified Files: liburllib.tex Log Message: Addresses the other half of Bug #112634 -- the documentation suggested that you can set self.version *after* calling the base class __init__. In fact it must be done *before*. (Fred, maybe the version class variable should be documented now?) Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** liburllib.tex 2000/08/24 01:06:40 1.25 --- liburllib.tex 2000/08/24 16:20:32 1.26 *************** *** 177,182 **** class AppURLopener(urllib.FancyURLopener): def __init__(self, *args): - apply(urllib.FancyURLopener.__init__, (self,) + args) self.version = "App/1.7" urllib._urlopener = AppURLopener() --- 177,182 ---- class AppURLopener(urllib.FancyURLopener): def __init__(self, *args): self.version = "App/1.7" + apply(urllib.FancyURLopener.__init__, (self,) + args) urllib._urlopener = AppURLopener() From python-dev@python.org Thu Aug 24 19:11:24 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 11:11:24 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.96,1.97 Message-ID: <200008241811.LAA19183@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv19156 Modified Files: Makefile.in Log Message: Rene Liebscher : Install the scripts in the BeOS directory, allowing use from the distutils on BeOS systems. The target location has been adjusted to match that used for the AIX helper scripts. This closes SourceForge patch #101207. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.96 retrieving revision 1.97 diff -C2 -r1.96 -r1.97 *** Makefile.in 2000/08/17 11:38:17 1.96 --- Makefile.in 2000/08/24 18:11:21 1.97 *************** *** 406,409 **** --- 406,426 ---- else true; \ fi + @if [ "$(MACHDEP)" == "beos" ] ; then \ + echo; echo "Installing support files for building shared extension modules on BeOS:"; \ + $(INSTALL_DATA) BeOS/README $(LIBPL)/README; \ + echo; echo "$(LIBPL)/README"; \ + $(INSTALL_DATA) BeOS/README.readline-2.2 $(LIBPL)/README.readline-2.2; \ + echo "$(LIBPL)/README.readline-2.2"; \ + $(INSTALL_DATA) BeOS/dl_export.h $(LIBPL)/dl_export.h; \ + echo "$(LIBPL)/dl_export.h"; \ + $(INSTALL_PROGRAM) BeOS/ar-fake $(LIBPL)/ar-fake; \ + echo "$(LIBPL)/ar-fake"; \ + $(INSTALL_PROGRAM) BeOS/linkcc $(LIBPL)/linkcc; \ + echo "$(LIBPL)/linkcc"; \ + $(INSTALL_PROGRAM) BeOS/linkmodule $(LIBPL)/linkmodule; \ + echo "$(LIBPL)/linkmodule"; \ + echo; echo "See BeOS/README for details."; \ + else true; \ + fi # Install the dynamically loadable modules *************** *** 570,571 **** --- 587,589 ---- -o -name MANIFEST \ -o -print + # IF YOU PUT ANYTHING HERE IT WILL GO AWAY From python-dev@python.org Thu Aug 24 21:06:07 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:06:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.25,1.26 Message-ID: <200008242006.NAA12727@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv12418/lib Modified Files: libdis.tex Log Message: Rough and incomplete documentation on augmented assignment, which follows shortly. Markup also needs checking. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** libdis.tex 2000/08/24 00:37:50 1.25 --- libdis.tex 2000/08/24 20:06:03 1.26 *************** *** 131,134 **** --- 131,139 ---- \end{opcodedesc} + \begin{opcodedesc}{ROT_FOUR}{} + Lifts second, third and forth stack item one position up, moves top down to + position four. + \end{opcodedesc} + \begin{opcodedesc}{DUP_TOP}{} Duplicates the reference on top of the stack. *************** *** 210,213 **** --- 215,267 ---- \end{opcodedesc} + In-place operations are like binary operations, in that they remove TOS and + TOS1, and push the result back on the stack, but the operation is done + in-place when TOS1 supports it, and the resulting TOS may be (but does not + have to be) the original TOS1. + + \begin{opcodedesc}{INPLACE_POWER}{} + Implements in-place \code{TOS = TOS1 ** TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_MULTIPLY}{} + Implements in-place \code{TOS = TOS1 * TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_DIVIDE}{} + Implements in-place \code{TOS = TOS1 / TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_MODULO}{} + Implements in-place \code{TOS = TOS1 \%{} TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_ADD}{} + Implements in-place \code{TOS = TOS1 + TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_SUBTRACT}{} + Implements in-place \code{TOS = TOS1 - TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_LSHIFT}{} + Implements in-place \code{TOS = TOS1 << TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_RSHIFT}{} + Implements in-place \code{TOS = TOS1 >> TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_AND}{} + Implements in-place \code{TOS = TOS1 \&\ TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_XOR}{} + Implements in-place \code{TOS = TOS1 \^\ TOS}. + \end{opcodedesc} + + \begin{opcodedesc}{INPLACE_OR}{} + Implements in-place \code{TOS = TOS1 | TOS}. + \end{opcodedesc} + The slice opcodes take up to three parameters. *************** *** 366,369 **** --- 420,428 ---- %This opcode is obsolete. %\end{opcodedesc} + + \begin{opcodedesc}{DUP_TOPX}{count} + Duplicate \var{count} items, keeping them in the same order. Due to + implementation limits, \var{count} should be between 1 and 5 inclusive. + \end{opcodedesc} \begin{opcodedesc}{STORE_ATTR}{namei} From python-dev@python.org Thu Aug 24 21:06:07 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:06:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref2.tex,1.18,1.19 ref3.tex,1.48,1.49 Message-ID: <200008242006.NAA12730@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv12418/ref Modified Files: ref2.tex ref3.tex Log Message: Rough and incomplete documentation on augmented assignment, which follows shortly. Markup also needs checking. Index: ref2.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref2.tex,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** ref2.tex 2000/04/03 04:41:18 1.18 --- ref2.tex 2000/08/24 20:06:04 1.19 *************** *** 524,531 **** --- 524,535 ---- ( ) [ ] { } , : . ` = ; + += -= *= /= %= **= + &= |= ^= >>= <<= \end{verbatim} The period can also occur in floating-point and imaginary literals. A sequence of three periods has a special meaning as an ellipsis in slices. + The second half of the list, the augmented assignment operators, serve + lexically as delimiters, but also perform an operation. The following printing ASCII characters have special meaning as part Index: ref3.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref3.tex,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -r1.48 -r1.49 *** ref3.tex 2000/08/18 02:42:14 1.48 --- ref3.tex 2000/08/24 20:06:04 1.49 *************** *** 1055,1061 **** sequence types should implement addition (meaning concatenation) and multiplication (meaning repetition) by defining the methods ! \method{__add__()}, \method{__radd__()}, \method{__mul__()} and ! \method{__rmul__()} described below; they should not define ! \method{__coerce__()} or other numerical operators. \withsubitem{(mapping object method)}{ \ttindex{keys()} --- 1055,1062 ---- sequence types should implement addition (meaning concatenation) and multiplication (meaning repetition) by defining the methods ! \method{__add__()}, \method{__radd__()}, \method{__iadd__()}, ! \method{__mul__()}, \method{__rmul__()} and \method{__imul__()} described ! below; they should not define \method{__coerce__()} or other numerical ! operators. \withsubitem{(mapping object method)}{ \ttindex{keys()} *************** *** 1078,1083 **** \ttindex{__add__()} \ttindex{__radd__()} \ttindex{__mul__()} ! \ttindex{__rmul__()}} \withsubitem{(numeric object method)}{\ttindex{__coerce__()}} --- 1079,1086 ---- \ttindex{__add__()} \ttindex{__radd__()} + \ttindex{__iadd__()} \ttindex{__mul__()} ! \ttindex{__rmul__()} ! \ttindex{__imul__()}} \withsubitem{(numeric object method)}{\ttindex{__coerce__()}} From python-dev@python.org Thu Aug 24 21:09:49 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:09:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include abstract.h,2.26,2.27 classobject.h,2.31,2.32 graminit.h,2.15,2.16 object.h,2.63,2.64 opcode.h,2.29,2.30 token.h,2.15,2.16 Message-ID: <200008242009.NAA13442@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv13301/Include Modified Files: abstract.h classobject.h graminit.h object.h opcode.h token.h Log Message: The real suport for augmented assignment: new opcodes, new PyNumber and PySequence methods and functions, new tokens. Index: abstract.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/abstract.h,v retrieving revision 2.26 retrieving revision 2.27 diff -C2 -r2.26 -r2.27 *** abstract.h 2000/08/03 16:42:14 2.26 --- abstract.h 2000/08/24 20:09:45 2.27 *************** *** 665,669 **** --- 665,771 ---- */ + /* In-place variants of (some of) the above number protocol functions */ + DL_IMPORT(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); + + /* + Returns the result of adding o2 to o1, possibly in-place, or null + on failure. This is the equivalent of the Python expression: + o1 += o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); + + /* + Returns the result of subtracting o2 from o1, possibly in-place or + null on failure. This is the equivalent of the Python expression: + o1 -= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); + + /* + Returns the result of multiplying o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 *= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2); + + /* + Returns the result of dividing o1 by o2, possibly in-place, or null + on failure. This is the equivalent of the Python expression: + o1 /= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); + + /* + Returns the remainder of dividing o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 %= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, + PyObject *o3); + + /* + Returns the result of raising o1 to the power of o2, possibly + in-place, or null on failure. This is the equivalent of the Python + expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); + + /* + Returns the result of left shifting o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 <<= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); + + /* + Returns the result of right shifting o1 by o2, possibly in-place or + null on failure. This is the equivalent of the Python expression: + o1 >>= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); + + /* + Returns the result of bitwise and of o1 and o2, possibly in-place, + or null on failure. This is the equivalent of the Python + expression: o1 &= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); + + /* + Returns the bitwise exclusive or of o1 by o2, possibly in-place, or + null on failure. This is the equivalent of the Python expression: + o1 ^= o2. + + */ + + DL_IMPORT(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); + + /* + Returns the result of bitwise or or o1 and o2, possibly in-place, + or null on failure. This is the equivalent of the Python + expression: o1 |= o2. + + */ + + /* Sequence protocol:*/ *************** *** 823,826 **** --- 925,948 ---- return -1. This is equivalent to the Python expression: o.index(value). + */ + + /* In-place versions of some of the above Sequence functions. */ + + DL_IMPORT(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); + + /* + Append o2 to o1, in-place when possible. Return the resulting + object, which could be o1, or NULL on failure. This is the + equivalent of the Python expression: o1 += o2. + + */ + + DL_IMPORT(PyObject *) PySequence_InPlaceRepeat(PyObject *o, int count); + + /* + Repeat o1 by count, in-place when possible. Return the resulting + object, which could be o1, or NULL on failure. This is the + equivalent of the Python expression: o1 *= count. + */ Index: classobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/classobject.h,v retrieving revision 2.31 retrieving revision 2.32 diff -C2 -r2.31 -r2.32 *** classobject.h 2000/07/09 00:20:36 2.31 --- classobject.h 2000/08/24 20:09:45 2.32 *************** *** 74,77 **** --- 74,81 ---- PyObject *)); + extern DL_IMPORT(int) + PyInstance_HalfBinOp(PyObject *, PyObject *, char *, PyObject **, + PyObject * (*)(PyObject *, PyObject *), int); + #ifdef __cplusplus } Index: graminit.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/graminit.h,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** graminit.h 2000/08/17 22:54:59 2.15 --- graminit.h 2000/08/24 20:09:45 2.16 *************** *** 11,63 **** #define small_stmt 266 #define expr_stmt 267 ! #define print_stmt 268 ! #define del_stmt 269 ! #define pass_stmt 270 ! #define flow_stmt 271 ! #define break_stmt 272 ! #define continue_stmt 273 ! #define return_stmt 274 ! #define raise_stmt 275 ! #define import_stmt 276 ! #define import_as_name 277 ! #define dotted_as_name 278 ! #define dotted_name 279 ! #define global_stmt 280 ! #define exec_stmt 281 ! #define assert_stmt 282 ! #define compound_stmt 283 ! #define if_stmt 284 ! #define while_stmt 285 ! #define for_stmt 286 ! #define try_stmt 287 ! #define except_clause 288 ! #define suite 289 ! #define test 290 ! #define and_test 291 ! #define not_test 292 ! #define comparison 293 ! #define comp_op 294 ! #define expr 295 ! #define xor_expr 296 ! #define and_expr 297 ! #define shift_expr 298 ! #define arith_expr 299 ! #define term 300 ! #define factor 301 ! #define power 302 ! #define atom 303 ! #define listmaker 304 ! #define lambdef 305 ! #define trailer 306 ! #define subscriptlist 307 ! #define subscript 308 ! #define sliceop 309 ! #define exprlist 310 ! #define testlist 311 ! #define dictmaker 312 ! #define classdef 313 ! #define arglist 314 ! #define argument 315 ! #define list_iter 316 ! #define list_for 317 ! #define list_if 318 --- 11,64 ---- #define small_stmt 266 #define expr_stmt 267 ! #define augassign 268 ! #define print_stmt 269 ! #define del_stmt 270 ! #define pass_stmt 271 ! #define flow_stmt 272 ! #define break_stmt 273 ! #define continue_stmt 274 ! #define return_stmt 275 ! #define raise_stmt 276 ! #define import_stmt 277 ! #define import_as_name 278 ! #define dotted_as_name 279 ! #define dotted_name 280 ! #define global_stmt 281 ! #define exec_stmt 282 ! #define assert_stmt 283 ! #define compound_stmt 284 ! #define if_stmt 285 ! #define while_stmt 286 ! #define for_stmt 287 ! #define try_stmt 288 ! #define except_clause 289 ! #define suite 290 ! #define test 291 ! #define and_test 292 ! #define not_test 293 ! #define comparison 294 ! #define comp_op 295 ! #define expr 296 ! #define xor_expr 297 ! #define and_expr 298 ! #define shift_expr 299 ! #define arith_expr 300 ! #define term 301 ! #define factor 302 ! #define power 303 ! #define atom 304 ! #define listmaker 305 ! #define lambdef 306 ! #define trailer 307 ! #define subscriptlist 308 ! #define subscript 309 ! #define sliceop 310 ! #define exprlist 311 ! #define testlist 312 ! #define dictmaker 313 ! #define classdef 314 ! #define arglist 315 ! #define argument 316 ! #define list_iter 317 ! #define list_for 318 ! #define list_if 319 Index: object.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/object.h,v retrieving revision 2.63 retrieving revision 2.64 diff -C2 -r2.63 -r2.64 *** object.h 2000/07/16 12:04:30 2.63 --- object.h 2000/08/24 20:09:45 2.64 *************** *** 152,155 **** --- 152,166 ---- unaryfunc nb_oct; unaryfunc nb_hex; + binaryfunc nb_inplace_add; + binaryfunc nb_inplace_subtract; + binaryfunc nb_inplace_multiply; + binaryfunc nb_inplace_divide; + binaryfunc nb_inplace_remainder; + ternaryfunc nb_inplace_power; + binaryfunc nb_inplace_lshift; + binaryfunc nb_inplace_rshift; + binaryfunc nb_inplace_and; + binaryfunc nb_inplace_xor; + binaryfunc nb_inplace_or; } PyNumberMethods; *************** *** 163,166 **** --- 174,179 ---- intintobjargproc sq_ass_slice; objobjproc sq_contains; + binaryfunc sq_inplace_concat; + intargfunc sq_inplace_repeat; } PySequenceMethods; *************** *** 316,321 **** #endif #define Py_TPFLAGS_DEFAULT (Py_TPFLAGS_HAVE_GETCHARBUFFER | \ ! Py_TPFLAGS_HAVE_SEQUENCE_IN) #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) --- 329,338 ---- #endif + /* PySequenceMethods and PyNumberMethods contain in-place operators */ + #define Py_TPFLAGS_HAVE_INPLACEOPS (1L<<3) + #define Py_TPFLAGS_DEFAULT (Py_TPFLAGS_HAVE_GETCHARBUFFER | \ ! Py_TPFLAGS_HAVE_SEQUENCE_IN | \ ! Py_TPFLAGS_HAVE_INPLACEOPS) #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) Index: opcode.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/opcode.h,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** opcode.h 2000/08/24 00:32:09 2.29 --- opcode.h 2000/08/24 20:09:45 2.30 *************** *** 22,25 **** --- 22,26 ---- #define ROT_THREE 3 #define DUP_TOP 4 + #define ROT_FOUR 5 #define UNARY_POSITIVE 10 *************** *** 48,51 **** --- 49,57 ---- /* Also uses 51-53 */ + #define INPLACE_ADD 55 + #define INPLACE_SUBTRACT 56 + #define INPLACE_MULTIPLY 57 + #define INPLACE_DIVIDE 58 + #define INPLACE_MODULO 59 #define STORE_SUBSCR 60 #define DELETE_SUBSCR 61 *************** *** 56,61 **** #define BINARY_XOR 65 #define BINARY_OR 66 - #define PRINT_EXPR 70 #define PRINT_ITEM 71 --- 62,67 ---- #define BINARY_XOR 65 #define BINARY_OR 66 + #define INPLACE_POWER 67 #define PRINT_EXPR 70 #define PRINT_ITEM 71 *************** *** 63,67 **** #define PRINT_ITEM_TO 73 #define PRINT_NEWLINE_TO 74 ! #define BREAK_LOOP 80 --- 69,77 ---- #define PRINT_ITEM_TO 73 #define PRINT_NEWLINE_TO 74 ! #define INPLACE_LSHIFT 75 ! #define INPLACE_RSHIFT 76 ! #define INPLACE_AND 77 ! #define INPLACE_XOR 78 ! #define INPLACE_OR 79 #define BREAK_LOOP 80 *************** *** 85,89 **** #define STORE_GLOBAL 97 /* "" */ #define DELETE_GLOBAL 98 /* "" */ ! #define LOAD_CONST 100 /* Index in const list */ #define LOAD_NAME 101 /* Index in name list */ --- 95,99 ---- #define STORE_GLOBAL 97 /* "" */ #define DELETE_GLOBAL 98 /* "" */ ! #define DUP_TOPX 99 /* number of items to duplicate */ #define LOAD_CONST 100 /* Index in const list */ #define LOAD_NAME 101 /* Index in name list */ Index: token.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/token.h,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** token.h 2000/07/09 00:55:06 2.15 --- token.h 2000/08/24 20:09:45 2.16 *************** *** 54,61 **** #define RIGHTSHIFT 35 #define DOUBLESTAR 36 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ ! #define OP 37 ! #define ERRORTOKEN 38 ! #define N_TOKENS 39 /* Special definitions for cooperation with parser */ --- 54,72 ---- #define RIGHTSHIFT 35 #define DOUBLESTAR 36 + #define PLUSEQUAL 37 + #define MINEQUAL 38 + #define STAREQUAL 39 + #define SLASHEQUAL 40 + #define PERCENTEQUAL 41 + #define AMPEREQUAL 42 + #define VBAREQUAL 43 + #define CIRCUMFLEXEQUAL 44 + #define LEFTSHIFTEQUAL 45 + #define RIGHTSHIFTEQUAL 46 + #define DOUBLESTAREQUAL 47 /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ ! #define OP 48 ! #define ERRORTOKEN 49 ! #define N_TOKENS 50 /* Special definitions for cooperation with parser */ From python-dev@python.org Thu Aug 24 21:14:13 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:14:13 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_augassign.py,NONE,1.1 Message-ID: <200008242014.NAA14340@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv14095/Lib/test Added Files: test_augassign.py Log Message: Support for augmented assignment in the UserList, UserDict, UserString and rfc822 (Addresslist) modules. Also a preliminary testcase for augmented assignment, which should actually be merged with the test_class testcase I added last week. --- NEW FILE --- # Augmented assignment test. x = 2 x += 1 x *= 2 x **= 2 x -= 8 x /= 2 x %= 12 x &= 2 x |= 5 x ^= 1 print x x = [2] x[0] += 1 x[0] *= 2 x[0] **= 2 x[0] -= 8 x[0] /= 2 x[0] %= 12 x[0] &= 2 x[0] |= 5 x[0] ^= 1 print x x = {0: 2} x[0] += 1 x[0] *= 2 x[0] **= 2 x[0] -= 8 x[0] /= 2 x[0] %= 12 x[0] &= 2 x[0] |= 5 x[0] ^= 1 print x[0] x = [1,2] x += [3,4] x *= 2 print x x = [1, 2, 3] y = x x[1:2] *= 2 y[1:2] += [1] print x print x is y class aug_test: def __init__(self, value): self.val = value def __radd__(self, val): return self.val + val def __add__(self, val): return aug_test(self.val + val) class aug_test2(aug_test): def __iadd__(self, val): self.val = self.val + val return self class aug_test3(aug_test): def __iadd__(self, val): return aug_test3(self.val + val) x = aug_test(1) y = x x += 10 print isinstance(x, aug_test) print y is not x print x.val x = aug_test2(2) y = x x += 10 print y is x print x.val x = aug_test3(3) y = x x += 10 print isinstance(x, aug_test3) print y is not x print x.val class testall: def __add__(self, val): print "__add__ called" def __radd__(self, val): print "__radd__ called" def __iadd__(self, val): print "__iadd__ called" return self def __sub__(self, val): print "__sub__ called" def __rsub__(self, val): print "__rsub__ called" def __isub__(self, val): print "__isub__ called" return self def __mul__(self, val): print "__mul__ called" def __rmul__(self, val): print "__rmul__ called" def __imul__(self, val): print "__imul__ called" return self def __div__(self, val): print "__div__ called" def __rdiv__(self, val): print "__rdiv__ called" def __idiv__(self, val): print "__idiv__ called" return self def __mod__(self, val): print "__mod__ called" def __rmod__(self, val): print "__rmod__ called" def __imod__(self, val): print "__imod__ called" return self def __pow__(self, val): print "__pow__ called" def __rpow__(self, val): print "__rpow__ called" def __ipow__(self, val): print "__ipow__ called" return self def __or__(self, val): print "__or__ called" def __ror__(self, val): print "__ror__ called" def __ior__(self, val): print "__ior__ called" return self def __and__(self, val): print "__and__ called" def __rand__(self, val): print "__rand__ called" def __iand__(self, val): print "__iand__ called" return self def __xor__(self, val): print "__xor__ called" def __rxor__(self, val): print "__rxor__ called" def __ixor__(self, val): print "__ixor__ called" return self def __rshift__(self, val): print "__rshift__ called" def __rrshift__(self, val): print "__rrshift__ called" def __irshift__(self, val): print "__irshift__ called" return self def __lshift__(self, val): print "__lshift__ called" def __rlshift__(self, val): print "__rlshift__ called" def __ilshift__(self, val): print "__ilshift__ called" return self x = testall() x + 1 1 + x x += 1 x - 1 1 - x x -= 1 x * 1 1 * x x *= 1 x / 1 1 / x x /= 1 x % 1 1 % x x %= 1 x ** 1 1 ** x x **= 1 x | 1 1 | x x |= 1 x & 1 1 & x x &= 1 x ^ 1 1 ^ x x ^= 1 x >> 1 1 >> x x >>= 1 x << 1 1 << x x <<= 1 From python-dev@python.org Thu Aug 24 21:14:14 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:14:14 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_augassign,NONE,1.1 Message-ID: <200008242014.NAA14347@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv14095/Lib/test/output Added Files: test_augassign Log Message: Support for augmented assignment in the UserList, UserDict, UserString and rfc822 (Addresslist) modules. Also a preliminary testcase for augmented assignment, which should actually be merged with the test_class testcase I added last week. --- NEW FILE --- test_augassign 6 [6] 6 [1, 2, 3, 4, 1, 2, 3, 4] [1, 2, 1, 2, 3] 1 1 1 11 1 12 1 1 13 __add__ called __radd__ called __iadd__ called __sub__ called __rsub__ called __isub__ called __mul__ called __rmul__ called __imul__ called __div__ called __rdiv__ called __idiv__ called __mod__ called __rmod__ called __imod__ called __pow__ called __rpow__ called __ipow__ called __or__ called __ror__ called __ior__ called __and__ called __rand__ called __iand__ called __xor__ called __rxor__ called __ixor__ called __rshift__ called __rrshift__ called __irshift__ called __lshift__ called __rlshift__ called __ilshift__ called From python-dev@python.org Thu Aug 24 21:14:14 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:14:14 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib UserList.py,1.10,1.11 UserString.py,1.4,1.5 dis.py,1.25,1.26 rfc822.py,1.47,1.48 Message-ID: <200008242014.NAA14346@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv14095/Lib Modified Files: UserList.py UserString.py dis.py rfc822.py Log Message: Support for augmented assignment in the UserList, UserDict, UserString and rfc822 (Addresslist) modules. Also a preliminary testcase for augmented assignment, which should actually be merged with the test_class testcase I added last week. Index: UserList.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserList.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** UserList.py 2000/07/16 12:04:30 1.10 --- UserList.py 2000/08/24 20:14:09 1.11 *************** *** 52,58 **** --- 52,69 ---- else: return self.__class__(list(other) + self.data) + def __iadd__(self, other): + if isinstance(other, UserList): + self.data += other.data + elif isinstance(other, type(self.data)): + self.data += other + else: + self.data += list(other) + return self def __mul__(self, n): return self.__class__(self.data*n) __rmul__ = __mul__ + def __imul__(self, n): + self.data *= n + return self def append(self, item): self.data.append(item) def insert(self, i, item): self.data.insert(i, item) Index: UserString.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserString.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** UserString.py 2000/08/21 21:47:20 1.4 --- UserString.py 2000/08/24 20:14:09 1.5 *************** *** 51,57 **** --- 51,68 ---- else: return self.__class__(str(other) + self.data) + def __iadd__(self, other): + if isinstance(other, UserString): + self.data += other.data + elif isinstance(other, StringType) or isinstance(other, UnicodeType): + self.data += other + else + self.data += str(other) + return self def __mul__(self, n): return self.__class__(self.data*n) __rmul__ = __mul__ + def __imull__(self, n): + self.data += n + return self # the following methods are defined in alphabetical order: Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** dis.py 2000/08/24 00:32:09 1.25 --- dis.py 2000/08/24 20:14:09 1.26 *************** *** 183,186 **** --- 183,191 ---- def_op('DELETE_SLICE+3', 53) + def_op('INPLACE_ADD', 55) + def_op('INPLACE_SUBTRACT', 56) + def_op('INPLACE_MULTIPLY', 57) + def_op('INPLACE_DIVIDE', 58) + def_op('INPLACE_MODULO', 59) def_op('STORE_SUBSCR', 60) def_op('DELETE_SUBSCR', 61) *************** *** 191,194 **** --- 196,200 ---- def_op('BINARY_XOR', 65) def_op('BINARY_OR', 66) + def_op('INPLACE_POWER', 67) def_op('PRINT_EXPR', 70) *************** *** 197,201 **** def_op('PRINT_ITEM_TO', 73) def_op('PRINT_NEWLINE_TO', 74) ! def_op('BREAK_LOOP', 80) --- 203,211 ---- def_op('PRINT_ITEM_TO', 73) def_op('PRINT_NEWLINE_TO', 74) ! def_op('INPLACE_LSHIFT', 75) ! def_op('INPLACE_RSHIFT', 76) ! def_op('INPLACE_AND', 77) ! def_op('INPLACE_XOR', 78) ! def_op('INPLACE_OR', 79) def_op('BREAK_LOOP', 80) Index: rfc822.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/rfc822.py,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -r1.47 -r1.48 *** rfc822.py 2000/07/16 12:04:30 1.47 --- rfc822.py 2000/08/24 20:14:09 1.48 *************** *** 764,767 **** --- 764,774 ---- return newaddr + def __iadd__(self, other): + # Set union, in-place + for x in other.addresslist: + if not x in self.addresslist: + self.addresslist.append(x) + return self + def __sub__(self, other): # Set difference *************** *** 771,774 **** --- 778,788 ---- newaddr.addresslist.append(x) return newaddr + + def __isub__(self, other): + # Set difference, in-place + for x in other.addresslist: + if x in self.addresslist: + self.addresslist.remove(x) + return self def __getitem__(self, index): From python-dev@python.org Thu Aug 24 21:08:23 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:08:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.47,2.48 classobject.c,2.104,2.105 listobject.c,2.85,2.86 Message-ID: <200008242008.NAA13215@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv12866/Objects Modified Files: abstract.c classobject.c listobject.c Log Message: Support for the in-place operations introduced by augmented assignment. Only the list object supports this currently, but other candidates are gladly accepted (like arraymodule and such.) Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.47 retrieving revision 2.48 diff -C2 -r2.47 -r2.48 *** abstract.c 2000/08/23 23:31:34 2.47 --- abstract.c 2000/08/24 20:08:19 2.48 *************** *** 615,618 **** --- 615,1098 ---- } + /* Binary in-place operators */ + + /* The in-place operators are defined to fall back to the 'normal', + non in-place operations, if the in-place methods are not in place, and to + take class instances into account. This is how it is supposed to work: + + - If the left-hand-side object (the first argument) is an + instance object, try to let PyInstance_HalfBinOp() handle it. Pass the + non in-place variant of the function as callback, because it will only + be used if the left-hand object is changed by coercion. + + - Otherwise, if the left hand object is not an instance object, it has + the appropriate struct members, and they are filled, call the + appropriate function and return the result. No coercion is done on the + arguments; the left-hand object is the one the operation is performed + on, and it's up to the function to deal with the right-hand object. + + - Otherwise, in-place modification is not supported. Handle it exactly as + a non in-place operation of the same kind: + + - If either object is an instance, let PyInstance_DoBinOp() handle it. + + - Otherwise, both arguments are C types. If the left-hand object has + the appropriate struct members filled, coerce, call the + appropriate function, and return the result. + + - Otherwise, we are out of options: raise a type error specific to + augmented assignment. + + */ + + #define HASINPLACE(t) PyType_HasFeature((t)->ob_type, Py_TPFLAGS_HAVE_INPLACEOPS) + + PyObject * + PyNumber_InPlaceOr(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ior__", &x, PyNumber_Or, + 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_or) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__or__", "__ror__", PyNumber_Or); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_or) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for |="); + } + + PyObject * + PyNumber_InPlaceXor(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ixor__", &x, PyNumber_Xor, + 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_xor) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__xor__", "__rxor__", PyNumber_Xor); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_xor) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for ^="); + } + + PyObject * + PyNumber_InPlaceAnd(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__iand__", &x, PyNumber_And, + 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_and) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__and__", "__rand__", PyNumber_And); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_and) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for &="); + } + + PyObject * + PyNumber_InPlaceLshift(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ilshift__", &x, + PyNumber_Lshift, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_lshift) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__lshift__", "__rlshift__", PyNumber_Lshift); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_lshift) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for <<="); + } + + PyObject * + PyNumber_InPlaceRshift(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__irshift__", &x, + PyNumber_Rshift, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_rshift) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__rshift__", "__rrshift__", PyNumber_Rshift); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_rshift) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for >>="); + } + + PyObject * + PyNumber_InPlaceAdd(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__iadd__", &x, + PyNumber_Add, 0) <= 0) + return x; + } else if (HASINPLACE(v) && (v->ob_type->tp_as_sequence != NULL && + (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL) || + (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL)) + return (*f)(v, w); + + BINOP(v, w, "__add__", "__radd__", PyNumber_Add); + + if (v->ob_type->tp_as_sequence != NULL && + (f = v->ob_type->tp_as_sequence->sq_concat) != NULL) + return (*f)(v, w); + else if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_add) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for +="); + } + + PyObject * + PyNumber_InPlaceSubtract(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__isub__", &x, + PyNumber_Subtract, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_subtract) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__sub__", "__rsub__", PyNumber_Subtract); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_subtract) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for -="); + } + + PyObject * + PyNumber_InPlaceMultiply(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject * (*f2)(PyObject *, int) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__imul__", &x, + PyNumber_Multiply, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_multiply) != NULL) + return (*f)(v, w); + else if (v->ob_type->tp_as_sequence != NULL && HASINPLACE(v) && + (f2 = v->ob_type->tp_as_sequence->sq_inplace_repeat) != NULL) { + long mul_value; + + if (PyInt_Check(w)) { + mul_value = PyInt_AsLong(w); + } + else if (PyLong_Check(w)) { + mul_value = PyLong_AsLong(w); + if (mul_value == -1 && PyErr_Occurred()) + return NULL; + } + else { + return type_error( + "can't multiply sequence with non-int"); + } + return (*f2)(v, (int)mul_value); + } + BINOP(v, w, "__mul__", "__rmul__", PyNumber_Multiply); + + /* if (tp->tp_as_number != NULL && + w->ob_type->tp_as_sequence != NULL) { */ + /* number*sequence -- swap v and w */ + /* PyObject *tmp = v; + v = w; + w = tmp; + tp = v->ob_type; + } */ + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_multiply) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } else if (v->ob_type->tp_as_sequence != NULL && + (f2 = v->ob_type->tp_as_sequence->sq_repeat) != NULL) { + long mul_value; + + if (PyInt_Check(w)) { + mul_value = PyInt_AsLong(w); + } + else if (PyLong_Check(w)) { + mul_value = PyLong_AsLong(w); + if (mul_value == -1 && PyErr_Occurred()) + return NULL; + } + else { + return type_error( + "can't multiply sequence with non-int"); + } + return (*f2)(v, (int)mul_value); + } + return type_error("bad operand type(s) for *="); + } + + PyObject * + PyNumber_InPlaceDivide(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__idiv__", &x, + PyNumber_Divide, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_divide) != NULL) + return (*f)(v, w); + + BINOP(v, w, "__div__", "__rdiv__", PyNumber_Divide); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if (v->ob_type->tp_as_number != NULL && + (f = v->ob_type->tp_as_number->nb_divide) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for /="); + } + + PyObject * + PyNumber_InPlaceRemainder(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__imod__", &x, + PyNumber_Remainder, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_remainder) != NULL) + return (*f)(v, w); + + if (PyString_Check(v)) + return PyString_Format(v, w); + else if (PyUnicode_Check(v)) + return PyUnicode_Format(v, w); + + BINOP(v, w, "__mod__", "__rmod__", PyNumber_Remainder); + + if (v->ob_type->tp_as_number != NULL) { + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if ((f = v->ob_type->tp_as_number->nb_remainder) != NULL) + x = (*f)(v, w); + Py_DECREF(v); + Py_DECREF(w); + if (f != NULL) + return x; + } + + return type_error("bad operand type(s) for %="); + } + + + /* In-place Power (binary or ternary, for API consistency) */ + + static PyObject * + do_inplace_pow(PyObject *v, PyObject *w) + { + PyObject * (*f)(PyObject *, PyObject *, PyObject *) = NULL; + PyObject *x; + + if (PyInstance_Check(v)) { + if (PyInstance_HalfBinOp(v, w, "__ipow__", &x, do_pow, 0) <= 0) + return x; + } else if (v->ob_type->tp_as_number != NULL && HASINPLACE(v) && + (f = v->ob_type->tp_as_number->nb_inplace_power) != NULL) + return (*f)(v, w, Py_None); + + BINOP(v, w, "__pow__", "__rpow__", do_pow); + + if (v->ob_type->tp_as_number == NULL || + w->ob_type->tp_as_number == NULL) { + return type_error("bad operand type(s) for **="); + } + if (PyNumber_Coerce(&v, &w) != 0) + return NULL; + if ((f = v->ob_type->tp_as_number->nb_power) != NULL) + x = (*f)(v, w, Py_None); + else + x = type_error("bad operand type(s) for **="); + Py_DECREF(v); + Py_DECREF(w); + return x; + } + + PyObject * + PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z) + { + PyObject *res; + PyObject *v1, *z1, *w2, *z2, *oldv; + PyObject * (*f)(PyObject *, PyObject *, PyObject *); + + if (z == Py_None) + return do_inplace_pow(v, w); + /* XXX The ternary version doesn't do class instance coercions */ + if (PyInstance_Check(v)) + return v->ob_type->tp_as_number->nb_inplace_power(v, w, z); + if (v->ob_type->tp_as_number == NULL || + z->ob_type->tp_as_number == NULL || + w->ob_type->tp_as_number == NULL) { + return type_error("(inplace) pow(x, y, z) requires numeric arguments"); + } + oldv = v; + Py_INCREF(oldv); + res = NULL; + if (PyNumber_Coerce(&v, &w) != 0) + goto error3; + v1 = v; + z1 = z; + if (PyNumber_Coerce(&v1, &z1) != 0) + goto error2; + w2 = w; + z2 = z1; + if (PyNumber_Coerce(&w2, &z2) != 0) + goto error1; + if (oldv == v1 && HASINPLACE(v1) && v->ob_type->tp_as_number != NULL && + (f = v1->ob_type->tp_as_number->nb_inplace_power) != NULL) + res = (*f)(v1, w2, z2); + else if (v1->ob_type->tp_as_number != NULL && + (f = v1->ob_type->tp_as_number->nb_power) != NULL) + res = (*f)(v1, w2, z2); + else + res = type_error( + "(inplace) pow(x, y, z) not defined for these operands"); + Py_DECREF(w2); + Py_DECREF(z2); + error1: + Py_DECREF(v1); + Py_DECREF(z1); + error2: + Py_DECREF(v); + Py_DECREF(w); + error3: + Py_DECREF(oldv); + return res; + } + + /* Unary operators and functions */ *************** *** 851,854 **** --- 1331,1368 ---- m = o->ob_type->tp_as_sequence; + if (m && m->sq_repeat) + return m->sq_repeat(o, count); + + return type_error("object can't be repeated"); + } + + PyObject * + PySequence_InPlaceConcat(PyObject *s, PyObject *o) + { + PySequenceMethods *m; + + if (s == NULL || o == NULL) + return null_error(); + + m = s->ob_type->tp_as_sequence; + if (m && HASINPLACE(s) && m->sq_inplace_concat) + return m->sq_inplace_concat(s, o); + if (m && m->sq_concat) + return m->sq_concat(s, o); + + return type_error("object can't be concatenated"); + } + + PyObject * + PySequence_InPlaceRepeat(PyObject *o, int count) + { + PySequenceMethods *m; + + if (o == NULL) + return null_error(); + + m = o->ob_type->tp_as_sequence; + if (m && HASINPLACE(o) && m->sq_inplace_repeat) + return m->sq_inplace_repeat(o, count); if (m && m->sq_repeat) return m->sq_repeat(o, count); Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.104 retrieving revision 2.105 diff -C2 -r2.104 -r2.105 *** classobject.c 2000/08/18 04:57:32 2.104 --- classobject.c 2000/08/24 20:08:19 2.105 *************** *** 1194,1203 **** - /* Forward */ - static int - halfbinop(PyObject *, PyObject *, char *, PyObject **, - PyObject * (*)(PyObject *, PyObject *), int); - - /* Implement a binary operator involving at least one class instance. */ --- 1194,1197 ---- *************** *** 1209,1215 **** PyObject *result = NULL; ! if (halfbinop(v, w, opname, &result, thisfunc, 0) <= 0) return result; ! if (halfbinop(w, v, ropname, &result, thisfunc, 1) <= 0) return result; /* Sigh -- special case for comparisons */ --- 1203,1209 ---- PyObject *result = NULL; ! if (PyInstance_HalfBinOp(v, w, opname, &result, thisfunc, 0) <= 0) return result; ! if (PyInstance_HalfBinOp(w, v, ropname, &result, thisfunc, 1) <= 0) return result; /* Sigh -- special case for comparisons */ *************** *** 1235,1241 **** static PyObject *coerce_obj; ! static int ! halfbinop(PyObject *v, PyObject *w, char *opname, PyObject **r_result, ! PyObject * (*thisfunc)(PyObject *, PyObject *), int swapped) { PyObject *func; --- 1229,1235 ---- static PyObject *coerce_obj; ! int ! PyInstance_HalfBinOp(PyObject *v, PyObject *w, char *opname, PyObject **r_result, ! PyObject * (*thisfunc)(PyObject *, PyObject *), int swapped) { PyObject *func; *************** *** 1452,1455 **** --- 1446,1478 ---- } + static PyObject * + instance_inplace_pow(PyObject *v, PyObject *w, PyObject *z) + { + /* XXX Doesn't do coercions... */ + PyObject *func; + PyObject *args; + PyObject *result; + static PyObject *ipowstr; + + if (ipowstr == NULL) + ipowstr = PyString_InternFromString("__ipow__"); + func = PyObject_GetAttr(v, ipowstr); + if (func == NULL) { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) + return NULL; + return instance_pow(v, w, z); + } + args = Py_BuildValue("(OO)", w, z); + if (args == NULL) { + Py_DECREF(func); + return NULL; + } + result = PyEval_CallObject(func, args); + Py_DECREF(func); + Py_DECREF(args); + return result; + } + + static PyNumberMethods instance_as_number = { 0, /*nb_add*/ *************** *** 1476,1479 **** --- 1499,1513 ---- (unaryfunc)instance_oct, /*nb_oct*/ (unaryfunc)instance_hex, /*nb_hex*/ + 0, /*nb_inplace_add*/ + 0, /*nb_inplace_subtract*/ + 0, /*nb_inplace_multiply*/ + 0, /*nb_inplace_divide*/ + 0, /*nb_inplace_remainder*/ + (ternaryfunc)instance_inplace_pow, /*nb_inplace_power*/ + 0, /*nb_inplace_lshift*/ + 0, /*nb_inplace_rshift*/ + 0, /*nb_inplace_and*/ + 0, /*nb_inplace_xor*/ + 0, /*nb_inplace_or*/ }; Index: listobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v retrieving revision 2.85 retrieving revision 2.86 diff -C2 -r2.85 -r2.86 *** listobject.c 2000/08/22 21:51:22 2.85 --- listobject.c 2000/08/24 20:08:19 2.86 *************** *** 497,500 **** --- 497,544 ---- } + static PyObject * + list_inplace_repeat(PyListObject *self, int n) + { + PyObject **items; + int size, i, j; + + + size = PyList_GET_SIZE(self); + if (size == 0) { + Py_INCREF(self); + return (PyObject *)self; + } + + items = self->ob_item; + + if (n < 1) { + self->ob_item = NULL; + self->ob_size = 0; + for (i = 0; i < size; i++) + Py_XDECREF(items[i]); + PyMem_DEL(items); + Py_INCREF(self); + return (PyObject *)self; + } + + NRESIZE(items, PyObject*, size*n); + if (items == NULL) { + PyErr_NoMemory(); + goto finally; + } + self->ob_item = items; + for (i = 1; i < n; i++) { /* Start counting at 1, not 0 */ + for (j = 0; j < size; j++) { + PyObject *o = PyList_GET_ITEM(self, j); + Py_INCREF(o); + PyList_SET_ITEM(self, self->ob_size++, o); + } + } + Py_INCREF(self); + return (PyObject *)self; + finally: + return NULL; + } + static int list_ass_item(PyListObject *a, int i, PyObject *v) *************** *** 557,564 **** } ! static PyObject * ! listextend(PyListObject *self, PyObject *args) { - PyObject *b = NULL, *res = NULL; PyObject **items; int selflen = PyList_GET_SIZE(self); --- 601,607 ---- } ! static int ! listextend_internal(PyListObject *self, PyObject *b) { PyObject **items; int selflen = PyList_GET_SIZE(self); *************** *** 566,579 **** register int i; - if (!PyArg_ParseTuple(args, "O:extend", &b)) - return NULL; - - b = PySequence_Fast(b, "list.extend() argument must be a sequence"); - if (!b) - return NULL; - if (PyObject_Size(b) == 0) /* short circuit when b is empty */ ! goto ok; if (self == (PyListObject*)b) { --- 609,615 ---- register int i; if (PyObject_Size(b) == 0) /* short circuit when b is empty */ ! return 0; if (self == (PyListObject*)b) { *************** *** 587,591 **** b = PyList_New(selflen); if (!b) ! return NULL; for (i = 0; i < selflen; i++) { PyObject *o = PyList_GET_ITEM(self, i); --- 623,627 ---- b = PyList_New(selflen); if (!b) ! return -1; for (i = 0; i < selflen; i++) { PyObject *o = PyList_GET_ITEM(self, i); *************** *** 602,607 **** if (items == NULL) { PyErr_NoMemory(); ! goto failed; } self->ob_item = items; --- 638,645 ---- if (items == NULL) { PyErr_NoMemory(); ! Py_DECREF(b); ! return -1; } + self->ob_item = items; *************** *** 612,623 **** PyList_SET_ITEM(self, self->ob_size++, o); } - ok: - res = Py_None; - Py_INCREF(res); - failed: Py_DECREF(b); ! return res; } static PyObject * --- 650,691 ---- PyList_SET_ITEM(self, self->ob_size++, o); } Py_DECREF(b); ! return 0; ! } ! ! ! static PyObject * ! list_inplace_concat(PyListObject *self, PyObject *other) ! { ! other = PySequence_Fast(other, "argument to += must be a sequence"); ! if (!other) ! return NULL; ! ! if (listextend_internal(self, other) < 0) ! return NULL; ! ! Py_INCREF(self); ! return (PyObject *)self; } + static PyObject * + listextend(PyListObject *self, PyObject *args) + { + + PyObject *b; + + if (!PyArg_ParseTuple(args, "O:extend", &b)) + return NULL; + + b = PySequence_Fast(b, "list.extend() argument must be a sequence"); + if (!b) + return NULL; + + if (listextend_internal(self, b) < 0) + return NULL; + + Py_INCREF(Py_None); + return Py_None; + } static PyObject * *************** *** 1408,1411 **** --- 1476,1481 ---- (intintobjargproc)list_ass_slice, /*sq_ass_slice*/ (objobjproc)list_contains, /*sq_contains*/ + (binaryfunc)list_inplace_concat, /*sq_inplace_concat*/ + (intargfunc)list_inplace_repeat, /*sq_inplace_repeat*/ }; From python-dev@python.org Thu Aug 24 21:11:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:11:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.40,1.41 Message-ID: <200008242011.NAA13782@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Grammar In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Grammar Modified Files: Grammar Log Message: Support for three-token characters (**=, >>=, <<=) which was written by Michael Hudson, and support in general for the augmented assignment syntax. The graminit.c patch is large! Index: Grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Grammar/Grammar,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** Grammar 2000/08/23 15:45:28 1.40 --- Grammar 2000/08/24 20:11:30 1.41 *************** *** 38,44 **** simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt ! expr_stmt: testlist ('=' testlist)* ! # For assignments, additional restrictions enforced by the interpreter print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist --- 38,45 ---- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE #small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt ! small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt ! expr_stmt: testlist (augassign testlist | ('=' testlist)*) ! augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' ! # For normal assignments, additional restrictions enforced by the interpreter print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist From python-dev@python.org Thu Aug 24 21:11:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:11:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser grammar.c,2.17,2.18 tokenizer.c,2.47,2.48 Message-ID: <200008242011.NAA13785@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Parser Modified Files: grammar.c tokenizer.c Log Message: Support for three-token characters (**=, >>=, <<=) which was written by Michael Hudson, and support in general for the augmented assignment syntax. The graminit.c patch is large! Index: grammar.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/grammar.c,v retrieving revision 2.17 retrieving revision 2.18 diff -C2 -r2.17 -r2.18 *** grammar.c 2000/07/22 19:20:54 2.17 --- grammar.c 2000/08/24 20:11:31 2.18 *************** *** 212,215 **** --- 212,227 ---- lb->lb_str); } + else if (lb->lb_str[2] && lb->lb_str[3] && lb->lb_str[4] == lb->lb_str[0]) { + int type = (int) PyToken_ThreeChars(lb->lb_str[1], + lb->lb_str[2], + lb->lb_str[3]); + if (type != OP) { + lb->lb_type = type; + lb->lb_str = NULL; + } + else + printf("Unknown OP label %s\n", + lb->lb_str); + } else printf("Can't translate STRING label %s\n", Index: tokenizer.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.c,v retrieving revision 2.47 retrieving revision 2.48 diff -C2 -r2.47 -r2.48 *** tokenizer.c 2000/07/22 19:20:54 2.47 --- tokenizer.c 2000/08/24 20:11:31 2.48 *************** *** 79,82 **** --- 79,93 ---- "RIGHTSHIFT", "DOUBLESTAR", + "PLUSEQUAL", + "MINEQUAL", + "STAREQUAL", + "SLASHEQUAL", + "PERCENTEQUAL", + "AMPEREQUAL", + "VBAREQUAL", + "CIRCUMFLEXEQUAL", + "LEFTSHIFTEQUAL", + "RIGHTSHIFTEQUAL", + "DOUBLESTAREQUAL", /* This table must match the #defines in token.h! */ "OP", *************** *** 389,401 **** --- 400,488 ---- } break; + case '+': + switch (c2) { + case '=': return PLUSEQUAL; + } + break; + case '-': + switch (c2) { + case '=': return MINEQUAL; + } + break; case '*': switch (c2) { case '*': return DOUBLESTAR; + case '=': return STAREQUAL; } break; + case '/': + switch (c2) { + case '=': return SLASHEQUAL; + } + break; + case '|': + switch (c2) { + case '=': return VBAREQUAL; + } + break; + case '%': + switch (c2) { + case '=': return PERCENTEQUAL; + } + break; + case '&': + switch (c2) { + case '=': return AMPEREQUAL; + } + break; + case '^': + switch (c2) { + case '=': return CIRCUMFLEXEQUAL; + } + break; } return OP; } + int + PyToken_ThreeChars(int c1, int c2, int c3) + { + switch (c1) { + case '<': + switch (c2) { + case '<': + switch (c3) { + case '=': + return LEFTSHIFTEQUAL; + break; + } + break; + } + break; + case '>': + switch (c2) { + case '>': + switch (c3) { + case '=': + return RIGHTSHIFTEQUAL; + break; + } + break; + } + break; + case '*': + switch (c2) { + case '*': + switch (c3) { + case '=': + return DOUBLESTAREQUAL; + break; + } + break; + } + break; + } + return OP; + } static int *************** *** 771,774 **** --- 858,868 ---- int token = PyToken_TwoChars(c, c2); if (token != OP) { + int c3 = tok_nextc(tok); + int token3 = PyToken_ThreeChars(c, c2, c3); + if (token3 != OP) { + token = token3; + } else { + tok_backup(tok, c3); + } *p_start = tok->start; *p_end = tok->cur; From python-dev@python.org Thu Aug 24 21:11:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 13:11:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.194,2.195 compile.c,2.133,2.134 graminit.c,2.27,2.28 import.c,2.147,2.148 Message-ID: <200008242011.NAA13792@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Python Modified Files: ceval.c compile.c graminit.c import.c Log Message: Support for three-token characters (**=, >>=, <<=) which was written by Michael Hudson, and support in general for the augmented assignment syntax. The graminit.c patch is large! Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.194 retrieving revision 2.195 diff -C2 -r2.194 -r2.195 *** ceval.c 2000/08/24 00:32:09 2.194 --- ceval.c 2000/08/24 20:11:31 2.195 *************** *** 670,673 **** --- 670,684 ---- continue; + case ROT_FOUR: + u = POP(); + v = POP(); + w = POP(); + x = POP(); + PUSH(u); + PUSH(x); + PUSH(w); + PUSH(v); + continue; + case DUP_TOP: v = TOP(); *************** *** 676,679 **** --- 687,736 ---- continue; + case DUP_TOPX: + switch (oparg) { + case 5: + case 4: + case 3: + case 2: + case 1: + x = POP(); + if (oparg == 1) break; + w = POP(); + if (oparg == 2) break; + v = POP(); + if (oparg == 3) break; + u = POP(); + if (oparg == 4) break; + t = POP(); + break; + default: + fprintf(stderr, "Invalid argument to DUP_TOPX: %d!\n", oparg); + PyErr_SetString(PyExc_SystemError, + "invalid argument to DUP_TOPX"); + x = NULL; + } + if (x == NULL) + break; + switch (oparg) { + case 5: PUSH(t); + Py_INCREF(t); /* Fallthrough */ + case 4: PUSH(u); + Py_INCREF(u); /* Fallthrough */ + case 3: PUSH(v); + Py_INCREF(v); /* Fallthrough */ + case 2: PUSH(w); + Py_INCREF(w); /* Fallthrough */ + case 1: PUSH(x); + Py_INCREF(x); /* Fallthrough */ + } + switch (oparg) { + case 5: PUSH(t); /* Fallthrough */ + case 4: PUSH(u); /* Fallthrough */ + case 3: PUSH(v); /* Fallthrough */ + case 2: PUSH(w); /* Fallthrough */ + case 1: PUSH(x); /* Fallthrough */ + } + continue; + case UNARY_POSITIVE: v = POP(); *************** *** 891,895 **** --- 948,1092 ---- if (x != NULL) continue; break; + + case INPLACE_POWER: + w = POP(); + v = POP(); + x = PyNumber_InPlacePower(v, w, Py_None); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_MULTIPLY: + w = POP(); + v = POP(); + x = PyNumber_InPlaceMultiply(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_DIVIDE: + w = POP(); + v = POP(); + x = PyNumber_InPlaceDivide(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_MODULO: + w = POP(); + v = POP(); + x = PyNumber_InPlaceRemainder(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + case INPLACE_ADD: + w = POP(); + v = POP(); + if (PyInt_Check(v) && PyInt_Check(w)) { + /* INLINE: int + int */ + register long a, b, i; + a = PyInt_AS_LONG(v); + b = PyInt_AS_LONG(w); + i = a + b; + if ((i^a) < 0 && (i^b) < 0) { + PyErr_SetString(PyExc_OverflowError, + "integer addition"); + x = NULL; + } + else + x = PyInt_FromLong(i); + } + else + x = PyNumber_InPlaceAdd(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_SUBTRACT: + w = POP(); + v = POP(); + if (PyInt_Check(v) && PyInt_Check(w)) { + /* INLINE: int - int */ + register long a, b, i; + a = PyInt_AS_LONG(v); + b = PyInt_AS_LONG(w); + i = a - b; + if ((i^a) < 0 && (i^~b) < 0) { + PyErr_SetString(PyExc_OverflowError, + "integer subtraction"); + x = NULL; + } + else + x = PyInt_FromLong(i); + } + else + x = PyNumber_InPlaceSubtract(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_LSHIFT: + w = POP(); + v = POP(); + x = PyNumber_InPlaceLshift(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_RSHIFT: + w = POP(); + v = POP(); + x = PyNumber_InPlaceRshift(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_AND: + w = POP(); + v = POP(); + x = PyNumber_InPlaceAnd(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_XOR: + w = POP(); + v = POP(); + x = PyNumber_InPlaceXor(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + + case INPLACE_OR: + w = POP(); + v = POP(); + x = PyNumber_InPlaceOr(v, w); + Py_DECREF(v); + Py_DECREF(w); + PUSH(x); + if (x != NULL) continue; + break; + case SLICE+0: case SLICE+1: *************** *** 1064,1067 **** --- 1261,1268 ---- break; + + #ifdef CASE_TOO_BIG + default: switch (opcode) { + #endif case BREAK_LOOP: why = WHY_BREAK; *************** *** 1181,1188 **** break; - #ifdef CASE_TOO_BIG - default: switch (opcode) { - #endif - case UNPACK_SEQUENCE: v = POP(); --- 1382,1385 ---- Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.133 retrieving revision 2.134 diff -C2 -r2.133 -r2.134 *** compile.c 2000/08/24 00:32:09 2.133 --- compile.c 2000/08/24 20:11:31 2.134 *************** *** 392,396 **** static int com_argdefs(struct compiling *, node *); static int com_newlocal(struct compiling *, char *); ! static void com_assign(struct compiling *, node *, int); static PyCodeObject *icompile(struct _node *, struct compiling *); static PyCodeObject *jcompile(struct _node *, char *, --- 392,397 ---- static int com_argdefs(struct compiling *, node *); static int com_newlocal(struct compiling *, char *); ! static void com_assign(struct compiling *, node *, int, node *); ! static void com_assign_name(struct compiling *, node *, int); static PyCodeObject *icompile(struct _node *, struct compiling *); static PyCodeObject *jcompile(struct _node *, char *, *************** *** 398,401 **** --- 399,403 ---- static PyObject *parsestrplus(node *); static PyObject *parsestr(char *); + static node *get_rawdocstring(node *); static int *************** *** 996,1000 **** com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN); c->c_loops++; com_list_iter(c, n, e, t); --- 998,1002 ---- com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN, NULL); c->c_loops++; com_list_iter(c, n, e, t); *************** *** 1204,1207 **** --- 1206,1262 ---- static void + com_augassign_slice(struct compiling *c, node *n, int opcode, node *augn) + { + if (NCH(n) == 1) { + com_addbyte(c, DUP_TOP); + com_push(c, 1); + com_addbyte(c, SLICE); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_TWO); + com_addbyte(c, STORE_SLICE); + com_pop(c, 2); + } else if (NCH(n) == 2 && TYPE(CHILD(n, 0)) != COLON) { + com_node(c, CHILD(n, 0)); + com_addoparg(c, DUP_TOPX, 2); + com_push(c, 2); + com_addbyte(c, SLICE+1); + com_pop(c, 1); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_THREE); + com_addbyte(c, STORE_SLICE+1); + com_pop(c, 3); + } else if (NCH(n) == 2) { + com_node(c, CHILD(n, 1)); + com_addoparg(c, DUP_TOPX, 2); + com_push(c, 2); + com_addbyte(c, SLICE+2); + com_pop(c, 1); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_THREE); + com_addbyte(c, STORE_SLICE+2); + com_pop(c, 3); + } else { + com_node(c, CHILD(n, 0)); + com_node(c, CHILD(n, 2)); + com_addoparg(c, DUP_TOPX, 3); + com_push(c, 3); + com_addbyte(c, SLICE+3); + com_pop(c, 2); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_FOUR); + com_addbyte(c, STORE_SLICE+3); + com_pop(c, 4); + } + } + + static void com_argument(struct compiling *c, node *n, PyObject **pkeywords) { *************** *** 1377,1381 **** static void ! com_subscriptlist(struct compiling *c, node *n, int assigning) { int i, op; --- 1432,1436 ---- static void ! com_subscriptlist(struct compiling *c, node *n, int assigning, node *augn) { int i, op; *************** *** 1389,1397 **** && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop)) { ! if (assigning == OP_APPLY) op = SLICE; ! else ! op = ((assigning == OP_ASSIGN) ? ! STORE_SLICE : DELETE_SLICE); com_slice(c, sub, op); if (op == STORE_SLICE) --- 1444,1461 ---- && (TYPE(CHILD(sub,NCH(sub)-1)) != sliceop)) { ! switch (assigning) { ! case OP_DELETE: ! op = DELETE_SLICE; ! break; ! case OP_ASSIGN: ! op = STORE_SLICE; ! break; ! case OP_APPLY: op = SLICE; ! break; ! default: ! com_augassign_slice(c, sub, assigning, augn); ! return; ! } com_slice(c, sub, op); if (op == STORE_SLICE) *************** *** 1411,1425 **** com_pop(c, i-1); } ! if (assigning == OP_APPLY) { ! op = BINARY_SUBSCR; ! i = 1; ! } ! else if (assigning == OP_ASSIGN) { op = STORE_SUBSCR; i = 3; } ! else { ! op = DELETE_SUBSCR; ! i = 2; } com_addbyte(c, op); --- 1475,1502 ---- com_pop(c, i-1); } ! switch (assigning) { ! case OP_DELETE: ! op = DELETE_SUBSCR; ! i = 2; ! break; ! default: ! case OP_ASSIGN: op = STORE_SUBSCR; i = 3; + break; + case OP_APPLY: + op = BINARY_SUBSCR; + i = 1; + break; } ! if (assigning > OP_APPLY) { ! com_addoparg(c, DUP_TOPX, 2); ! com_push(c, 2); ! com_addbyte(c, BINARY_SUBSCR); ! com_pop(c, 1); ! com_node(c, augn); ! com_addbyte(c, assigning); ! com_pop(c, 1); ! com_addbyte(c, ROT_THREE); } com_addbyte(c, op); *************** *** 1439,1443 **** break; case LSQB: ! com_subscriptlist(c, CHILD(n, 1), OP_APPLY); break; default: --- 1516,1520 ---- break; case LSQB: ! com_subscriptlist(c, CHILD(n, 1), OP_APPLY, NULL); break; default: *************** *** 1833,1840 **** /* Begin of assignment compilation */ - static void com_assign_name(struct compiling *, node *, int); - static void com_assign(struct compiling *, node *, int); static void com_assign_attr(struct compiling *c, node *n, int assigning) { --- 1910,1930 ---- /* Begin of assignment compilation */ static void + com_augassign_attr(struct compiling *c, node *n, int opcode, node *augn) + { + com_addbyte(c, DUP_TOP); + com_push(c, 1); + com_addopname(c, LOAD_ATTR, n); + com_pop(c, 1); + com_node(c, augn); + com_addbyte(c, opcode); + com_pop(c, 1); + com_addbyte(c, ROT_TWO); + com_addopname(c, STORE_ATTR, n); + com_pop(c, 2); + } + + static void com_assign_attr(struct compiling *c, node *n, int assigning) { *************** *** 1844,1848 **** static void ! com_assign_trailer(struct compiling *c, node *n, int assigning) { REQ(n, trailer); --- 1934,1938 ---- static void ! com_assign_trailer(struct compiling *c, node *n, int assigning, node *augn) { REQ(n, trailer); *************** *** 1853,1860 **** break; case DOT: /* '.' NAME */ ! com_assign_attr(c, CHILD(n, 1), assigning); break; case LSQB: /* '[' subscriptlist ']' */ ! com_subscriptlist(c, CHILD(n, 1), assigning); break; default: --- 1943,1953 ---- break; case DOT: /* '.' NAME */ ! if (assigning > OP_APPLY) ! com_augassign_attr(c, CHILD(n, 1), assigning, augn); ! else ! com_assign_attr(c, CHILD(n, 1), assigning); break; case LSQB: /* '[' subscriptlist ']' */ ! com_subscriptlist(c, CHILD(n, 1), assigning, augn); break; default: *************** *** 1875,1879 **** } for (i = 0; i < NCH(n); i += 2) ! com_assign(c, CHILD(n, i), assigning); } --- 1968,1984 ---- } for (i = 0; i < NCH(n); i += 2) ! com_assign(c, CHILD(n, i), assigning, NULL); ! } ! ! static void ! com_augassign_name(struct compiling *c, node *n, int opcode, node *augn) ! { ! REQ(n, NAME); ! com_addopname(c, LOAD_NAME, n); ! com_push(c, 1); ! com_node(c, augn); ! com_addbyte(c, opcode); ! com_pop(c, 1); ! com_assign_name(c, n, OP_ASSIGN); } *************** *** 1888,1892 **** static void ! com_assign(struct compiling *c, node *n, int assigning) { /* Loop to avoid trivial recursion */ --- 1993,1997 ---- static void ! com_assign(struct compiling *c, node *n, int assigning, node *augn) { /* Loop to avoid trivial recursion */ *************** *** 1897,1900 **** --- 2002,2010 ---- case testlist: if (NCH(n) > 1) { + if (assigning > OP_APPLY) { + com_error(c, PyExc_SyntaxError, + "augmented assign to tuple not possible"); + return; + } com_assign_sequence(c, n, assigning); return; *************** *** 1941,1945 **** } /* NB i is still alive */ com_assign_trailer(c, ! CHILD(n, i), assigning); return; } --- 2051,2055 ---- } /* NB i is still alive */ com_assign_trailer(c, ! CHILD(n, i), assigning, augn); return; } *************** *** 1957,1960 **** --- 2067,2075 ---- return; } + if (assigning > OP_APPLY) { + com_error(c, PyExc_SyntaxError, + "augmented assign to tuple not possible"); + return; + } break; case LSQB: *************** *** 1965,1972 **** return; } com_assign_sequence(c, n, assigning); return; case NAME: ! com_assign_name(c, CHILD(n, 0), assigning); return; default: --- 2080,2097 ---- return; } + if (assigning > OP_APPLY) { + com_error(c, PyExc_SyntaxError, + "augmented assign to list not possible"); + return; + } com_assign_sequence(c, n, assigning); return; case NAME: ! if (assigning > OP_APPLY) ! com_augassign_name(c, CHILD(n, 0), ! assigning, augn); ! else ! com_assign_name(c, CHILD(n, 0), ! assigning); return; default: *************** *** 1992,2006 **** } ! /* Forward */ static node *get_rawdocstring(node *); static void com_expr_stmt(struct compiling *c, node *n) { ! REQ(n, expr_stmt); /* testlist ('=' testlist)* */ /* Forget it if we have just a doc string here */ if (!c->c_interactive && NCH(n) == 1 && get_rawdocstring(n) != NULL) return; ! com_node(c, CHILD(n, NCH(n)-1)); ! if (NCH(n) == 1) { if (c->c_interactive) com_addbyte(c, PRINT_EXPR); --- 2117,2158 ---- } ! static void ! com_augassign(struct compiling *c, node *n) ! { ! int opcode; ! ! switch (STR(CHILD(CHILD(n, 1), 0))[0]) { ! case '+': opcode = INPLACE_ADD; break; ! case '-': opcode = INPLACE_SUBTRACT; break; ! case '/': opcode = INPLACE_DIVIDE; break; ! case '%': opcode = INPLACE_MODULO; break; ! case '<': opcode = INPLACE_LSHIFT; break; ! case '>': opcode = INPLACE_RSHIFT; break; ! case '&': opcode = INPLACE_AND; break; ! case '^': opcode = INPLACE_XOR; break; ! case '|': opcode = INPLACE_OR; break; ! case '*': ! if (STR(CHILD(CHILD(n, 1), 0))[1] == '*') ! opcode = INPLACE_POWER; ! else ! opcode = INPLACE_MULTIPLY; ! break; ! default: ! com_error(c, PyExc_SystemError, "com_augassign: bad operator"); ! return; ! } ! com_assign(c, CHILD(n, 0), opcode, CHILD(n, 2)); ! } static void com_expr_stmt(struct compiling *c, node *n) { ! REQ(n, expr_stmt); ! /* testlist (('=' testlist)* | augassign testlist) */ /* Forget it if we have just a doc string here */ if (!c->c_interactive && NCH(n) == 1 && get_rawdocstring(n) != NULL) return; ! if (NCH(n) == 1) { ! com_node(c, CHILD(n, NCH(n)-1)); if (c->c_interactive) com_addbyte(c, PRINT_EXPR); *************** *** 2009,2014 **** --- 2161,2169 ---- com_pop(c, 1); } + else if (TYPE(CHILD(n,1)) == augassign) + com_augassign(c, n); else { int i; + com_node(c, CHILD(n, NCH(n)-1)); for (i = 0; i < NCH(n)-2; i+=2) { if (i+2 < NCH(n)-2) { *************** *** 2016,2020 **** com_push(c, 1); } ! com_assign(c, CHILD(n, i), OP_ASSIGN); } } --- 2171,2175 ---- com_push(c, 1); } ! com_assign(c, CHILD(n, i), OP_ASSIGN, NULL); } } *************** *** 2473,2477 **** com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN); c->c_loops++; com_node(c, CHILD(n, 5)); --- 2628,2632 ---- com_addfwref(c, FOR_LOOP, &anchor); com_push(c, 1); ! com_assign(c, CHILD(n, 1), OP_ASSIGN, NULL); c->c_loops++; com_node(c, CHILD(n, 5)); *************** *** 2595,2599 **** com_pop(c, 1); if (NCH(ch) > 3) ! com_assign(c, CHILD(ch, 3), OP_ASSIGN); else { com_addbyte(c, POP_TOP); --- 2750,2754 ---- com_pop(c, 1); if (NCH(ch) > 3) ! com_assign(c, CHILD(ch, 3), OP_ASSIGN, NULL); else { com_addbyte(c, POP_TOP); *************** *** 2941,2945 **** break; case del_stmt: /* 'del' exprlist */ ! com_assign(c, CHILD(n, 1), OP_DELETE); break; case pass_stmt: --- 3096,3100 ---- break; case del_stmt: /* 'del' exprlist */ ! com_assign(c, CHILD(n, 1), OP_DELETE, NULL); break; case pass_stmt: Index: graminit.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/graminit.c,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -r2.27 -r2.28 *** graminit.c 2000/08/22 02:43:07 2.27 --- graminit.c 2000/08/24 20:11:32 2.28 *************** *** 227,312 **** {9, 1}, }; ! static arc arcs_11_1[2] = { ! {20, 0}, {0, 1}, }; ! static state states_11[2] = { {1, arcs_11_0}, ! {2, arcs_11_1}, }; [...2766 lines suppressed...] {25, 0}, {2, 0}, {3, 0}, ! {318, 0}, {1, "lambda"}, ! {315, 0}, {308, 0}, {309, 0}, + {310, 0}, {1, "class"}, {316, 0}, ! {317, 0}, ! {319, 0}, }; grammar _PyParser_Grammar = { ! 64, dfas, ! {142, labels}, 256 }; Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.147 retrieving revision 2.148 diff -C2 -r2.147 -r2.148 *** import.c 2000/08/21 16:35:06 2.147 --- import.c 2000/08/24 20:11:32 2.148 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50821 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50822 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the From python-dev@python.org Thu Aug 24 22:08:42 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 14:08:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib token.py,1.7,1.8 symbol.py,1.11,1.12 Message-ID: <200008242108.OAA27682@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv27109/Lib Modified Files: token.py symbol.py Log Message: Update for augmented assignment. Index: token.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/token.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** token.py 2000/02/04 15:28:41 1.7 --- token.py 2000/08/24 21:08:39 1.8 *************** *** 48,54 **** RIGHTSHIFT = 35 DOUBLESTAR = 36 ! OP = 37 ! ERRORTOKEN = 38 ! N_TOKENS = 39 NT_OFFSET = 256 #--end constants-- --- 48,65 ---- RIGHTSHIFT = 35 DOUBLESTAR = 36 ! PLUSEQUAL = 37 ! MINEQUAL = 38 ! STAREQUAL = 39 ! SLASHEQUAL = 40 ! PERCENTEQUAL = 41 ! AMPEREQUAL = 42 ! VBAREQUAL = 43 ! CIRCUMFLEXEQUAL = 44 ! LEFTSHIFTEQUAL = 45 ! RIGHTSHIFTEQUAL = 46 ! DOUBLESTAREQUAL = 47 ! OP = 48 ! ERRORTOKEN = 49 ! N_TOKENS = 50 NT_OFFSET = 256 #--end constants-- Index: symbol.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/symbol.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** symbol.py 2000/08/17 23:08:05 1.11 --- symbol.py 2000/08/24 21:08:39 1.12 *************** *** 23,77 **** small_stmt = 266 expr_stmt = 267 ! print_stmt = 268 ! del_stmt = 269 ! pass_stmt = 270 ! flow_stmt = 271 ! break_stmt = 272 ! continue_stmt = 273 ! return_stmt = 274 ! raise_stmt = 275 ! import_stmt = 276 ! import_as_name = 277 ! dotted_as_name = 278 ! dotted_name = 279 ! global_stmt = 280 ! exec_stmt = 281 ! assert_stmt = 282 ! compound_stmt = 283 ! if_stmt = 284 ! while_stmt = 285 ! for_stmt = 286 ! try_stmt = 287 ! except_clause = 288 ! suite = 289 ! test = 290 ! and_test = 291 ! not_test = 292 ! comparison = 293 ! comp_op = 294 ! expr = 295 ! xor_expr = 296 ! and_expr = 297 ! shift_expr = 298 ! arith_expr = 299 ! term = 300 ! factor = 301 ! power = 302 ! atom = 303 ! listmaker = 304 ! lambdef = 305 ! trailer = 306 ! subscriptlist = 307 ! subscript = 308 ! sliceop = 309 ! exprlist = 310 ! testlist = 311 ! dictmaker = 312 ! classdef = 313 ! arglist = 314 ! argument = 315 ! list_iter = 316 ! list_for = 317 ! list_if = 318 #--end constants-- --- 23,78 ---- small_stmt = 266 expr_stmt = 267 ! augassign = 268 ! print_stmt = 269 ! del_stmt = 270 ! pass_stmt = 271 ! flow_stmt = 272 ! break_stmt = 273 ! continue_stmt = 274 ! return_stmt = 275 ! raise_stmt = 276 ! import_stmt = 277 ! import_as_name = 278 ! dotted_as_name = 279 ! dotted_name = 280 ! global_stmt = 281 ! exec_stmt = 282 ! assert_stmt = 283 ! compound_stmt = 284 ! if_stmt = 285 ! while_stmt = 286 ! for_stmt = 287 ! try_stmt = 288 ! except_clause = 289 ! suite = 290 ! test = 291 ! and_test = 292 ! not_test = 293 ! comparison = 294 ! comp_op = 295 ! expr = 296 ! xor_expr = 297 ! and_expr = 298 ! shift_expr = 299 ! arith_expr = 300 ! term = 301 ! factor = 302 ! power = 303 ! atom = 304 ! listmaker = 305 ! lambdef = 306 ! trailer = 307 ! subscriptlist = 308 ! subscript = 309 ! sliceop = 310 ! exprlist = 311 ! testlist = 312 ! dictmaker = 313 ! classdef = 314 ! arglist = 315 ! argument = 316 ! list_iter = 317 ! list_for = 318 ! list_if = 319 #--end constants-- From python-dev@python.org Thu Aug 24 22:17:36 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 24 Aug 2000 14:17:36 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.26,1.27 Message-ID: <200008242117.OAA30649@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30622 Modified Files: pep-0200.txt Log Message: The popen problem is "solved". Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** pep-0200.txt 2000/08/23 19:40:52 1.26 --- pep-0200.txt 2000/08/24 21:17:33 1.27 *************** *** 198,204 **** even run? Does it need the w9xpopen hack? - Win98 Guido: popen is hanging on Guido, and even freezing the - whole machine. No clue yet. - Open items -- Need to be resolved before 2.0 final release --- 198,201 ---- *************** *** 225,228 **** --- 222,230 ---- let winreg.py out the door we'll be stuck with it forever, and not even Paul wants it anymore. + + [24-Aug-2000 tim+guido - done] + Win98 Guido: popen is hanging on Guido, and even freezing the + whole machine. Was caused by Norton Antivirus 2000 (6.10.20) on + Windows 9x. Resolution: disable virus protection. From python-dev@python.org Thu Aug 24 22:44:55 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 14:44:55 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib tokenize.py,1.13,1.14 Message-ID: <200008242144.OAA05099@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv4997/Lib Modified Files: tokenize.py Log Message: Update for augmented assignment, tested & approved by Guido. Index: tokenize.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tokenize.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** tokenize.py 2000/08/17 04:45:13 1.13 --- tokenize.py 2000/08/24 21:44:52 1.14 *************** *** 55,60 **** '[rR]?"' + any(r'[^\n"\\]', r'\\.') + '"') ! Operator = group('\+', '\-', '\*\*', '\*', '\^', '~', '/', '%', '&', '\|', ! '<<', '>>', '==', '<=', '<>', '!=', '>=', '=', '<', '>') Bracket = '[][(){}]' Special = group(r'\r?\n', r'[:;.,`]') --- 55,63 ---- '[rR]?"' + any(r'[^\n"\\]', r'\\.') + '"') ! Operator = group('\+=', '\-=', '\*=', '%=', '/=', '\*\*=', '&=', '\|=', ! '\^=', '>>=', '<<=', '\+', '\-', '\*\*', '\*', '\^', '~', ! '/', '%', '&', '\|', '<<', '>>', '==', '<=', '<>', '!=', ! '>=', '=', '<', '>') ! Bracket = '[][(){}]' Special = group(r'\r?\n', r'[:;.,`]') From python-dev@python.org Thu Aug 24 22:46:56 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 24 Aug 2000 14:46:56 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.27,1.28 Message-ID: <200008242146.OAA05542@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv5485 Modified Files: pep-0200.txt Log Message: update release schedule Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** pep-0200.txt 2000/08/24 21:17:33 1.27 --- pep-0200.txt 2000/08/24 21:46:53 1.28 *************** *** 18,25 **** Tentative Release Schedule 14-Aug-2000: All 2.0 PEPs finished / feature freeze ! 28-Aug-2000: 2.0 beta 1 ! 29-Sep-2000: 2.0 final --- 18,27 ---- Tentative Release Schedule + [revised 24 Aug 2000] 14-Aug-2000: All 2.0 PEPs finished / feature freeze ! 5-Sep-2000: 2.0 beta 1 ! mid-Sep-2000: beta 2 if necessary ! 6-Oct-2000: 2.0 final *************** *** 172,176 **** Open items -- Need to be resolved before 2.0b1 release ! Add popen2 support for Linux -- assigned to /F Get all patches out of Open. --- 174,178 ---- Open items -- Need to be resolved before 2.0b1 release ! Add popen2 support for Linux -- Fred Drake Get all patches out of Open. *************** *** 200,203 **** --- 202,208 ---- Open items -- Need to be resolved before 2.0 final release + Update Tools/compiler so that it is compatible with list + comprehensions, import as, and any other new language features. + Improve code coverage of test suite. *************** *** 214,217 **** --- 219,229 ---- + Open: proposed but not accepted or rejected + + * Problems reported with Tkinter, Tk 8.3.2,axs and Unicode + + * Extended slicing on lists - Michael Hudson + Make lists (and other builtin types) handle extended slices. + Open items -- completed/fixed *************** *** 289,297 **** * Integrated gettext module - Barry Warsaw wrapper around standard internationalization libraries - - Open: proposed but not accepted or rejected - - * Extended slicing on lists - Michael Hudson - Make lists (and other builtin types) handle extended slices. Postponed --- 301,304 ---- From python-dev@python.org Thu Aug 24 22:47:36 2000 From: python-dev@python.org (Peter Schneider-Kamp) Date: Thu, 24 Aug 2000 14:47:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib UserString.py,1.5,1.6 Message-ID: <200008242147.OAA05606@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv5582 Modified Files: UserString.py Log Message: simple typo that makes regression test test_userstring fail Index: UserString.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/UserString.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** UserString.py 2000/08/24 20:14:09 1.5 --- UserString.py 2000/08/24 21:47:34 1.6 *************** *** 56,60 **** elif isinstance(other, StringType) or isinstance(other, UnicodeType): self.data += other ! else self.data += str(other) return self --- 56,60 ---- elif isinstance(other, StringType) or isinstance(other, UnicodeType): self.data += other ! else: self.data += str(other) return self From python-dev@python.org Thu Aug 24 22:57:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 14:57:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pyexpat.c,2.12,2.13 Message-ID: <200008242157.OAA06909@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv6898 Modified Files: pyexpat.c Log Message: Remove the Py_FatalError() from initpyexpat(); the Guido has decreed that this is not appropriate. Made somewhat more robust in the face of reload() (exception is not rebuilt, etc.). Made the exception a class exception. Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.12 retrieving revision 2.13 diff -C2 -r2.12 -r2.13 *** pyexpat.c 2000/07/22 16:34:15 2.12 --- pyexpat.c 2000/08/24 21:57:43 2.13 *************** *** 864,868 **** /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); ! ErrorObject = PyString_FromString("pyexpat.error"); PyDict_SetItemString(d, "error", ErrorObject); --- 864,869 ---- /* Add some symbolic constants to the module */ d = PyModule_GetDict(m); ! if (ErrorObject == NULL) ! ErrorObject = PyErr_NewException("pyexpat.error", NULL, NULL); PyDict_SetItemString(d, "error", ErrorObject); *************** *** 871,879 **** strlen(rev+11)-2)); - sys_modules = PySys_GetObject("modules"); - errors_module = PyModule_New("pyexpat.errors"); - PyDict_SetItemString(d, "errors", errors_module); - PyDict_SetItemString(sys_modules, "pyexpat.errors", errors_module); - /* XXX When Expat supports some way of figuring out how it was compiled, this should check and set native_encoding --- 872,875 ---- *************** *** 882,885 **** --- 878,901 ---- PyDict_SetItemString(d, "native_encoding", PyString_FromString("UTF-8")); + + sys_modules = PySys_GetObject("modules"); + { + PyObject *errmod_name = PyString_FromString("pyexpat.errors"); + + if (errmod_name != NULL) { + errors_module = PyDict_GetItem(errmod_name); + if (errors_module == NULL) { + errors_module = PyModule_New("pyexpat.errors"); + if (errors_module != NULL) { + PyDict_SetItemString(d, "errors", errors_module); + PyDict_SetItem(sys_modules, errmod_name, errors_module); + } + } + PyDECREF(errmod_name); + if (errors_module == NULL) + /* Don't code dump later! */ + return; + } + } errors_dict = PyModule_GetDict(errors_module); *************** *** 907,914 **** MYCONST(XML_ERROR_UNKNOWN_ENCODING); MYCONST(XML_ERROR_INCORRECT_ENCODING); - - /* Check for errors */ - if (PyErr_Occurred()) - Py_FatalError("can't initialize module pyexpat"); } --- 923,926 ---- From python-dev@python.org Thu Aug 24 23:27:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 15:27:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pyexpat.c,2.13,2.14 Message-ID: <200008242227.PAA12592@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12566 Modified Files: pyexpat.c Log Message: Fix the evil booboos. ;( Causes discussed with Jeremy offline. Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** pyexpat.c 2000/08/24 21:57:43 2.13 --- pyexpat.c 2000/08/24 22:27:02 2.14 *************** *** 884,888 **** if (errmod_name != NULL) { ! errors_module = PyDict_GetItem(errmod_name); if (errors_module == NULL) { errors_module = PyModule_New("pyexpat.errors"); --- 884,888 ---- if (errmod_name != NULL) { ! errors_module = PyDict_GetItem(d, errmod_name); if (errors_module == NULL) { errors_module = PyModule_New("pyexpat.errors"); *************** *** 892,896 **** } } ! PyDECREF(errmod_name); if (errors_module == NULL) /* Don't code dump later! */ --- 892,896 ---- } } ! Py_DECREF(errmod_name); if (errors_module == NULL) /* Don't code dump later! */ From python-dev@python.org Thu Aug 24 23:44:56 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 15:44:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib dis.py,1.26,1.27 Message-ID: <200008242244.PAA29912@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv29413/Lib Modified Files: dis.py Log Message: Add missing opcodes. Thanx to jeremy for reminding me ;) Index: dis.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/dis.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** dis.py 2000/08/24 20:14:09 1.26 --- dis.py 2000/08/24 22:44:53 1.27 *************** *** 151,154 **** --- 151,155 ---- def_op('ROT_THREE', 3) def_op('DUP_TOP', 4) + def_op('ROT_FOUR', 5) def_op('UNARY_POSITIVE', 10) *************** *** 229,233 **** name_op('STORE_GLOBAL', 97) # "" name_op('DELETE_GLOBAL', 98) # "" ! def_op('LOAD_CONST', 100) # Index in const list hasconst.append(100) --- 230,234 ---- name_op('STORE_GLOBAL', 97) # "" name_op('DELETE_GLOBAL', 98) # "" ! def_op('DUP_TOPX', 99) # number of items to duplicate def_op('LOAD_CONST', 100) # Index in const list hasconst.append(100) From python-dev@python.org Thu Aug 24 23:54:56 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 15:54:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.in,1.107,1.108 Message-ID: <200008242254.PAA08781@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv8506/Modules Modified Files: Setup.in Log Message: Adjust the name for the socket module in the SSL line. Index: Setup.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v retrieving revision 1.107 retrieving revision 1.108 diff -C2 -r1.107 -r1.108 *** Setup.in 2000/08/16 14:19:43 1.107 --- Setup.in 2000/08/24 22:54:53 1.108 *************** *** 157,161 **** # Socket module compiled with SSL support; you must edit the SSL variable: #SSL=/usr/local/ssl ! #socket socketmodule.c \ # -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ # -L$(SSL)/lib -lssl -lcrypto --- 157,161 ---- # Socket module compiled with SSL support; you must edit the SSL variable: #SSL=/usr/local/ssl ! #_socket socketmodule.c \ # -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ # -L$(SSL)/lib -lssl -lcrypto From python-dev@python.org Thu Aug 24 23:38:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 15:38:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pyerrors.h,2.38,2.39 Message-ID: <200008242238.PAA23641@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv23579/Include Modified Files: pyerrors.h Log Message: Improve the exceptions raised by PyErr_BadInternalCall(); adding the filename and line number of the call site to allow esier debugging. This closes SourceForge patch #101214. Index: pyerrors.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pyerrors.h,v retrieving revision 2.38 retrieving revision 2.39 diff -C2 -r2.38 -r2.39 *** pyerrors.h 2000/07/08 17:25:55 2.38 --- pyerrors.h 2000/08/24 22:38:39 2.39 *************** *** 83,87 **** --- 83,92 ---- #endif + /* Export the old function so that the existing API remains available: */ extern DL_IMPORT(void) PyErr_BadInternalCall(void); + extern DL_IMPORT(void) _PyErr_BadInternalCall(char *filename, int lineno); + /* Mask the old API with a call to the new API for code compiled under + Python 2.0: */ + #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) /* Function to create a new exception */ From python-dev@python.org Thu Aug 24 23:38:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 15:38:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python errors.c,2.52,2.53 Message-ID: <200008242238.PAA23646@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv23579/Python Modified Files: errors.c Log Message: Improve the exceptions raised by PyErr_BadInternalCall(); adding the filename and line number of the call site to allow esier debugging. This closes SourceForge patch #101214. Index: errors.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** errors.c 2000/08/18 18:01:06 2.52 --- errors.c 2000/08/24 22:38:39 2.53 *************** *** 370,378 **** void PyErr_BadInternalCall(void) { ! PyErr_SetString(PyExc_SystemError, ! "bad argument to internal function"); } --- 370,391 ---- void + _PyErr_BadInternalCall(char *filename, int lineno) + { + PyErr_Format(PyExc_SystemError, + "%s:%d: bad argument to internal function", + filename, lineno); + } + + /* Remove the preprocessor macro for PyErr_BadInternalCall() so that we can + export the entry point for existing object code: */ + #undef PyErr_BadInternalCall + void PyErr_BadInternalCall(void) { ! PyErr_Format(PyExc_SystemError, ! "bad argument to internal function"); } + #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) + From python-dev@python.org Fri Aug 25 02:14:12 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:14:12 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.147,1.148 config.h.in,2.68,2.69 configure,1.136,1.137 Message-ID: <200008250114.SAA13196@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv11924 Modified Files: configure.in config.h.in configure Log Message: Add configure tests for poll() (SF patch #100852) Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.147 retrieving revision 1.148 diff -C2 -r1.147 -r1.148 *** configure.in 2000/08/23 21:33:04 1.147 --- configure.in 2000/08/25 01:14:07 1.148 *************** *** 368,372 **** # checks for header files AC_HEADER_STDC ! AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ --- 368,372 ---- # checks for header files AC_HEADER_STDC ! AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ *************** *** 873,877 **** getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock pthread_init \ putenv readlink \ select setegid seteuid setgid \ --- 873,877 ---- getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid \ Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.68 retrieving revision 2.69 diff -C2 -r2.68 -r2.69 *** config.h.in 2000/08/23 21:33:04 2.68 --- config.h.in 2000/08/25 01:14:08 2.69 *************** *** 405,408 **** --- 405,411 ---- #undef HAVE_PLOCK + /* Define if you have the poll function. */ + #undef HAVE_POLL + /* Define if you have the pthread_init function. */ #undef HAVE_PTHREAD_INIT *************** *** 536,539 **** --- 539,545 ---- /* Define if you have the header file. */ #undef HAVE_NDIR_H + + /* Define if you have the header file. */ + #undef HAVE_POLL_H /* Define if you have the header file. */ Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.136 retrieving revision 1.137 diff -C2 -r1.136 -r1.137 *** configure 2000/08/23 21:33:04 1.136 --- configure 2000/08/25 01:14:08 1.137 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.146 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.147 # Guess values for system-dependent variables and create Makefiles. *************** *** 1537,1541 **** fi ! for ac_hdr in dlfcn.h fcntl.h limits.h locale.h ncurses.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ --- 1537,1541 ---- fi ! for ac_hdr in dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ sys/audioio.h sys/file.h sys/lock.h \ *************** *** 3799,3803 **** getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock pthread_init \ putenv readlink \ select setegid seteuid setgid \ --- 3799,3803 ---- getgroups getlogin getpeername getpid getpwent getwd \ kill link lstat mkfifo mktime mremap \ ! nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid \ From python-dev@python.org Fri Aug 25 02:15:37 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:15:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules selectmodule.c,2.42,2.43 Message-ID: <200008250115.SAA14471@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13765 Modified Files: selectmodule.c Log Message: Add interface to poll() system call (SF patch #100852) Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.42 retrieving revision 2.43 diff -C2 -r2.42 -r2.43 *** selectmodule.c 2000/07/31 15:28:04 2.42 --- selectmodule.c 2000/08/25 01:15:33 2.43 *************** *** 25,28 **** --- 25,31 ---- #include #endif + #ifdef HAVE_POLL_H + #include + #endif #ifdef __sgi *************** *** 300,303 **** --- 303,584 ---- } + #ifdef HAVE_POLL + /* + * poll() support + */ + + typedef struct { + PyObject_HEAD + PyObject *dict; + int ufd_uptodate; + int ufd_len; + struct pollfd *ufds; + } pollObject; + + staticforward PyTypeObject poll_Type; + + /* Update the malloc'ed array of pollfds to match the dictionary + contained within a pollObject. Return 1 on success, 0 on an error. + */ + + static int + update_ufd_array(pollObject *self) + { + int i, j, pos; + PyObject *key, *value; + + self->ufd_len = PyDict_Size(self->dict); + PyMem_Resize(self->ufds, struct pollfd, self->ufd_len); + if (self->ufds == NULL) { + PyErr_NoMemory(); + return 0; + } + + i = pos = 0; + while ((j = PyDict_Next(self->dict, &pos, &key, &value))) { + self->ufds[i].fd = PyInt_AsLong(key); + self->ufds[i].events = PyInt_AsLong(value); + i++; + } + self->ufd_uptodate = 1; + return 1; + } + + static char poll_register_doc[] = + "register(fd [, eventmask] ) -> None\n\n\ + Register a file descriptor with the polling object.\n\ + fd -- either an integer, or an object with a fileno() method returning an int.\n\ + events -- an optional bitmask describing the type of events to check for"; + + static PyObject * + poll_register(pollObject *self, PyObject *args) + { + PyObject *o, *key, *value; + int fd, events = POLLIN | POLLPRI | POLLOUT; + + if (!PyArg_ParseTuple(args, "O|i", &o, &events)) { + return NULL; + } + + fd = PyObject_AsFileDescriptor(o); + if (fd == -1) return NULL; + + /* Add entry to the internal dictionary: the key is the + file descriptor, and the value is the event mask. */ + if ( (NULL == (key = PyInt_FromLong(fd))) || + (NULL == (value = PyInt_FromLong(events))) || + (PyDict_SetItem(self->dict, key, value)) == -1) { + return NULL; + } + self->ufd_uptodate = 0; + + Py_INCREF(Py_None); + return Py_None; + } + + static char poll_unregister_doc[] = + "unregister(fd) -> None\n\n\ + Remove a file descriptor being tracked by the polling object."; + + static PyObject * + poll_unregister(pollObject *self, PyObject *args) + { + PyObject *o, *key; + int fd; + + if (!PyArg_ParseTuple(args, "O", &o)) { + return NULL; + } + + fd = PyObject_AsFileDescriptor( o ); + if (fd == -1) + return NULL; + + /* Check whether the fd is already in the array */ + key = PyInt_FromLong(fd); + if (key == NULL) + return NULL; + + if (PyDict_DelItem(self->dict, key) == -1) { + Py_DECREF(key); + /* This will simply raise the KeyError set by PyDict_DelItem + if the file descriptor isn't registered. */ + return NULL; + } + + Py_DECREF(key); + self->ufd_uptodate = 0; + + Py_INCREF(Py_None); + return Py_None; + } + + static char poll_poll_doc[] = + "poll( [timeout] ) -> list of (fd, event) 2-tuples\n\n\ + Polls the set of registered file descriptors, returning a list containing \n\ + any descriptors that have events or errors to report."; + + static PyObject * + poll_poll(pollObject *self, PyObject *args) + { + PyObject *result_list = NULL, *tout = NULL; + int timeout = 0, poll_result, i, j; + PyObject *value = NULL, *num = NULL; + + if (!PyArg_ParseTuple(args, "|O", &tout)) { + return NULL; + } + + /* Check values for timeout */ + if (tout == NULL || tout == Py_None) + timeout = -1; + else if (!PyArg_Parse(tout, "i", &timeout)) { + PyErr_SetString(PyExc_TypeError, + "timeout must be an integer or None"); + return NULL; + } + + /* Ensure the ufd array is up to date */ + if (!self->ufd_uptodate) + if (update_ufd_array(self) == 0) + return NULL; + + /* call poll() */ + Py_BEGIN_ALLOW_THREADS; + poll_result = poll(self->ufds, self->ufd_len, timeout); + Py_END_ALLOW_THREADS; + + if (poll_result < 0) { + PyErr_SetFromErrno(SelectError); + return NULL; + } + + /* build the result list */ + + result_list = PyList_New(poll_result); + if (!result_list) + return NULL; + else { + for (i = 0, j = 0; j < poll_result; j++) { + /* skip to the next fired descriptor */ + while (!self->ufds[i].revents) { + i++; + } + /* if we hit a NULL return, set value to NULL + and break out of loop; code at end will + clean up result_list */ + value = PyTuple_New(2); + if (value == NULL) + goto error; + num = PyInt_FromLong(self->ufds[i].fd); + if (num == NULL) { + Py_DECREF(value); + goto error; + } + PyTuple_SET_ITEM(value, 0, num); + + num = PyInt_FromLong(self->ufds[i].revents); + if (num == NULL) { + Py_DECREF(value); + goto error; + } + PyTuple_SET_ITEM(value, 1, num); + if ((PyList_SetItem(result_list, j, value)) == -1) { + Py_DECREF(value); + goto error; + } + i++; + } + } + return result_list; + + error: + Py_DECREF(result_list); + return NULL; + } + + static PyMethodDef poll_methods[] = { + {"register", (PyCFunction)poll_register, + METH_VARARGS, poll_register_doc}, + {"unregister", (PyCFunction)poll_unregister, + METH_VARARGS, poll_unregister_doc}, + {"poll", (PyCFunction)poll_poll, + METH_VARARGS, poll_poll_doc}, + {NULL, NULL} /* sentinel */ + }; + + static pollObject * + newPollObject() + { + pollObject *self; + self = PyObject_New(pollObject, &poll_Type); + if (self == NULL) + return NULL; + /* ufd_uptodate is a Boolean, denoting whether the + array pointed to by ufds matches the contents of the dictionary. */ + self->ufd_uptodate = 0; + self->ufds = NULL; + self->dict = PyDict_New(); + if (self->dict == NULL) { + Py_DECREF(self); + return NULL; + } + return self; + } + + static void + poll_dealloc(pollObject *self) + { + if (self->ufds != NULL) + PyMem_DEL(self->ufds); + Py_XDECREF(self->dict); + PyObject_Del(self); + } + + static PyObject * + poll_getattr(pollObject *self, char *name) + { + return Py_FindMethod(poll_methods, (PyObject *)self, name); + } + + statichere PyTypeObject poll_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "poll", /*tp_name*/ + sizeof(pollObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)poll_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)poll_getattr, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + }; + + static char poll_doc[] = + "Returns a polling object, which supports registering and\n\ + unregistering file descriptors, and then polling them for I/O events."; + + static PyObject * + select_poll(PyObject *self, PyObject *args) + { + pollObject *rv; + + if (!PyArg_ParseTuple(args, ":poll")) + return NULL; + rv = newPollObject(); + if ( rv == NULL ) + return NULL; + return (PyObject *)rv; + } + #endif /* HAVE_POLL */ + static char select_doc[] = "select(rlist, wlist, xlist[, timeout]) -> (rlist, wlist, xlist)\n\ *************** *** 323,329 **** On Windows, only sockets are supported; on Unix, all file descriptors."; - static PyMethodDef select_methods[] = { ! {"select", select_select, 1, select_doc}, {0, 0}, /* sentinel */ }; --- 604,612 ---- On Windows, only sockets are supported; on Unix, all file descriptors."; static PyMethodDef select_methods[] = { ! {"select", select_select, METH_VARARGS, select_doc}, ! #ifdef HAVE_POLL ! {"poll", select_poll, METH_VARARGS, poll_doc}, ! #endif /* HAVE_POLL */ {0, 0}, /* sentinel */ }; *************** *** 335,338 **** --- 618,640 ---- On Windows, only sockets are supported; on Unix, all file descriptors."; + /* + * Convenience routine to export an integer value. + * For simplicity, errors (which are unlikely anyway) are ignored. + */ + + static void + insint(PyObject *d, char *name, int value) + { + PyObject *v = PyInt_FromLong((long) value); + if (v == NULL) { + /* Don't bother reporting this error */ + PyErr_Clear(); + } + else { + PyDict_SetItemString(d, name, v); + Py_DECREF(v); + } + } + DL_EXPORT(void) initselect(void) *************** *** 343,345 **** --- 645,662 ---- SelectError = PyErr_NewException("select.error", NULL, NULL); PyDict_SetItemString(d, "error", SelectError); + #ifdef HAVE_POLL + poll_Type.ob_type = &PyType_Type; + insint(d, "POLLIN", POLLIN); + insint(d, "POLLPRI", POLLPRI); + insint(d, "POLLOUT", POLLOUT); + insint(d, "POLLERR", POLLERR); + insint(d, "POLLHUP", POLLHUP); + insint(d, "POLLNVAL", POLLNVAL); + + insint(d, "POLLRDNORM", POLLRDNORM); + insint(d, "POLLRDBAND", POLLRDBAND); + insint(d, "POLLWRNORM", POLLWRNORM); + insint(d, "POLLWRBAND", POLLWRBAND); + insint(d, "POLLMSG", POLLMSG); + #endif /* HAVE_POLL */ } From python-dev@python.org Fri Aug 25 02:18:48 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:18:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_poll.py,NONE,1.1 Message-ID: <200008250118.SAA16970@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv16234 Added Files: test_poll.py Log Message: Test suite for poll() interface (SF patch #100852) --- NEW FILE --- # Test case for the os.poll() function import sys, os, select, random from test.test_support import verbose, TestSkipped, TESTFN try: select.poll except AttributeError: raise TestSkipped, "select.poll not defined -- skipping test_poll" def find_ready_matching(ready, flag): match = [] for fd, mode in ready: if mode & flag: match.append(fd) return match def test_poll1(): """Basic functional test of poll object Create a bunch of pipe and test that poll works with them. """ print 'Running poll test 1' p = select.poll() NUM_PIPES = 12 MSG = " This is a test." MSG_LEN = len(MSG) readers = [] writers = [] r2w = {} w2r = {} for i in range(NUM_PIPES): rd, wr = os.pipe() p.register(rd, select.POLLIN) p.register(wr, select.POLLOUT) readers.append(rd) writers.append(wr) r2w[rd] = wr w2r[wr] = rd while writers: ready = p.poll() ready_writers = find_ready_matching(ready, select.POLLOUT) if not ready_writers: raise RuntimeError, "no pipes ready for writing" wr = random.choice(ready_writers) os.write(wr, MSG) ready = p.poll() ready_readers = find_ready_matching(ready, select.POLLIN) if not ready_readers: raise RuntimeError, "no pipes ready for reading" rd = random.choice(ready_readers) buf = os.read(rd, MSG_LEN) assert len(buf) == MSG_LEN print buf os.close(r2w[rd]) writers.remove(r2w[rd]) poll_unit_tests() print 'Poll test 1 complete' def poll_unit_tests(): # returns NVAL for invalid file descriptor FD = 42 try: os.close(FD) except OSError: pass p = select.poll() p.register(FD) r = p.poll() assert r[0] == (FD, select.POLLNVAL) f = open(TESTFN, 'w') fd = f.fileno() p = select.poll() p.register(f) r = p.poll() assert r[0][0] == fd f.close() r = p.poll() assert r[0] == (fd, select.POLLNVAL) os.unlink(TESTFN) # type error for invalid arguments p = select.poll() try: p.register(p) except TypeError: pass else: print "Bogus register call did not raise TypeError" try: p.unregister(p) except TypeError: pass else: print "Bogus unregister call did not raise TypeError" # can't unregister non-existent object p = select.poll() try: p.unregister(3) except KeyError: pass else: print "Bogus unregister call did not raise KeyError" # Test error cases pollster = select.poll() class Nope: pass class Almost: def fileno(self): return 'fileno' try: pollster.register( Nope(), 0 ) except TypeError: pass else: print 'expected TypeError exception, not raised' try: pollster.register( Almost(), 0 ) except TypeError: pass else: print 'expected TypeError exception, not raised' # Another test case for poll(). This is copied from the test case for # select(), modified to use poll() instead. def test_poll2(): print 'Running poll test 2' cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') pollster = select.poll() pollster.register( p, select.POLLIN ) for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10: if verbose: print 'timeout =', tout fdlist = pollster.poll(tout) if (fdlist == []): continue if fdlist[0] == (p.fileno(),select.POLLHUP): line = p.readline() if line != "": print 'error: pipe seems to be closed, but still returns data' continue elif fdlist[0] == (p.fileno(),select.POLLIN): line = p.readline() if verbose: print `line` if not line: if verbose: print 'EOF' break continue else: print 'Unexpected return value from select.poll:', fdlist p.close() print 'Poll test 2 complete' test_poll1() test_poll2() From python-dev@python.org Fri Aug 25 02:18:48 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:18:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_poll,NONE,1.1 Message-ID: <200008250118.SAA16974@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv16234/output Added Files: test_poll Log Message: Test suite for poll() interface (SF patch #100852) --- NEW FILE --- test_poll Running poll test 1 This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. Poll test 1 complete Running poll test 2 timeout = 0 timeout = 1000 'testing...\012' timeout = 2000 'testing...\012' timeout = 4000 'testing...\012' timeout = 8000 'testing...\012' timeout = 16000 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 'testing...\012' timeout = -1 timeout = -1 timeout = -1 timeout = -1 timeout = -1 Poll test 2 complete From python-dev@python.org Fri Aug 25 02:21:31 2000 From: python-dev@python.org (A.M. Kuchling) Date: Thu, 24 Aug 2000 18:21:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libselect.tex,1.15,1.16 Message-ID: <200008250121.SAA19189@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17684 Modified Files: libselect.tex Log Message: Documentation for poll() interface (SF patch #100852) Index: libselect.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libselect.tex,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** libselect.tex 2000/04/03 20:13:54 1.15 --- libselect.tex 2000/08/25 01:21:28 1.16 *************** *** 6,10 **** ! This module provides access to the function \cfunction{select()} available in most operating systems. Note that on Windows, it only works for sockets; on other operating systems, it also works for other --- 6,11 ---- ! This module provides access to the \cfunction{select()} ! and \cfunction{poll()} functions available in most operating systems. Note that on Windows, it only works for sockets; on other operating systems, it also works for other *************** *** 22,25 **** --- 23,34 ---- \end{excdesc} + \begin{funcdesc}{poll}{} + (Not supported by all operating systems.) Returns a polling object, + which supports registering and unregistering file descriptors, and + then polling them for I/O events; + see section~\ref{poll-objects} below for the methods supported by + polling objects. + \end{funcdesc} + \begin{funcdesc}{select}{iwtd, owtd, ewtd\optional{, timeout}} This is a straightforward interface to the \UNIX{} \cfunction{select()} *************** *** 53,54 **** --- 62,129 ---- file descriptor, not just a random integer). \end{funcdesc} + + \subsection{Polling Objects + \label{poll-objects}} + + The \cfunction{poll()} system call, supported on most Unix systems, + provides better scalability for network servers that service many, + many clients at the same time. + \cfunction{poll()} scales better because the system call only + requires listing the file descriptors of interest, while \cfunction{select()} + builds a bitmap, turns on bits for the fds of interest, and then + afterward the whole bitmap has to be linearly scanned again. + \cfunction{select()} is O(highest file descriptor), while + \cfunction{poll()} is O(number of file descriptors). + + \begin{methoddesc}{register}{fd\optional{, eventmask}} + Register a file descriptor with the polling object. Future calls to + the \method{poll()} method will then check whether the file descriptor + has any pending I/O events. \var{fd} can be either an integer, or an + object with a \method{fileno()} method that returns an integer. File + objects implement + \method{fileno()}, so they can also be used as the argument. + + \var{eventmask} is an optional bitmask describing the type of events you + want to check for, and can be a combination of the constants + \constant{POLLIN}, \constant{POLLPRI}, and \constant{POLLOUT}, + described in the table below. If not specified, the default value + used will check for all 3 types of events. + + \begin{tableii}{l|l}{code}{Constant}{Meaning} + \lineii{POLLIN}{There is data to read} + \lineii{POLLPRI}{There is urgent data to read} + \lineii{POLLOUT}{Ready for output: writing will not block} + \lineii{POLLERR}{Error condition of some sort} + \lineii{POLLHUP}{Hung up} + \lineii{POLLNVAL}{Invalid request: descriptor not open} + \end{tableii} + + Registering a file descriptor that's already registered is not an + error, and has the same effect as registering the descriptor exactly + once. + + \end{methoddesc} + + \begin{methoddesc}{unregister}{fd} + Remove a file descriptor being tracked by a polling object. Just like + the \method{register()} method, \var{fd} can be an integer or an + object with a \method{fileno()} method that returns an integer. + + Attempting to remove a file descriptor that was never registered + causes a \exception{KeyError} exception to be raised. + \end{methoddesc} + + \begin{methoddesc}{poll}{\optional{timeout}} + Polls the set of registered file descriptors, and returns a + possibly-empty list containing \code{(\var{fd}, \var{event})} 2-tuples + for the descriptors that have events or errors to report. + \var{fd} is the file descriptor, and \var{event} is a bitmask + with bits set for the reported events for that descriptor + --- \constant{POLLIN} for waiting input, + \constant{POLLOUT} to indicate that the descriptor can be written to, and + so forth. + An empty list indicates that the call timed out and no file + descriptors had any events to report. + \end{methoddesc} + + From python-dev@python.org Fri Aug 25 06:13:45 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 24 Aug 2000 22:13:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.26,1.27 Message-ID: <200008250513.WAA02781@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2772/lib Modified Files: liburllib.tex Log Message: Revised documentation relevant to SourceForge patch #100837 (simplify making HTTP POST requests). Added documentation of URLopener.version and how it can be overridden. Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** liburllib.tex 2000/08/24 16:20:32 1.26 --- liburllib.tex 2000/08/25 05:13:42 1.27 *************** *** 1,4 **** \section{\module{urllib} --- ! Open an arbitrary resource by URL} \declaremodule{standard}{urllib} --- 1,4 ---- \section{\module{urllib} --- ! Open arbitrary resources by URL} \declaremodule{standard}{urllib} *************** *** 165,174 **** \end{funcdesc} ! The public functions \function{urlopen()} and \function{urlretrieve()} ! create an instance of the \class{FancyURLopener} class and use it to perform ! their requested actions. To override this functionality, programmers can ! create a subclass of \class{URLopener} or \class{FancyURLopener}, then ! assign that class to the \var{urllib._urlopener} variable before calling the ! desired function. For example, applications may want to specify a different \code{user-agent} header than \class{URLopener} defines. This can be accomplished with the following code: --- 165,176 ---- \end{funcdesc} ! The public functions \function{urlopen()} and ! \function{urlretrieve()} create an instance of the ! \class{FancyURLopener} class and use it to perform their requested ! actions. To override this functionality, programmers can create a ! subclass of \class{URLopener} or \class{FancyURLopener}, then assign ! that an instance of that class to the ! \code{urllib._urlopener} variable before calling the desired function. ! For example, applications may want to specify a different \code{user-agent} header than \class{URLopener} defines. This can be accomplished with the following code: *************** *** 194,198 **** define their own \code{user-agent} header by subclassing \class{URLopener} or \class{FancyURLopener} and setting the instance ! attribute \var{version} to an appropriate string value before the \method{open()} method is called. --- 196,200 ---- define their own \code{user-agent} header by subclassing \class{URLopener} or \class{FancyURLopener} and setting the instance ! attribute \member{version} to an appropriate string value before the \method{open()} method is called. *************** *** 268,274 **** \class{URLopener} and \class{FancyURLopener} objects have the ! following methods. ! \begin{methoddesc}{open}{fullurl\optional{, data}} Open \var{fullurl} using the appropriate protocol. This method sets up cache and proxy information, then calls the appropriate open method with --- 270,276 ---- \class{URLopener} and \class{FancyURLopener} objects have the ! following attributes. ! \begin{methoddesc}[URLopener]{open}{fullurl\optional{, data}} Open \var{fullurl} using the appropriate protocol. This method sets up cache and proxy information, then calls the appropriate open method with *************** *** 278,286 **** \end{methoddesc} ! \begin{methoddesc}{open_unknown}{fullurl\optional{, data}} Overridable interface to open unknown URL types. \end{methoddesc} ! \begin{methoddesc}{retrieve}{url\optional{, filename\optional{, reporthook}}} Retrieves the contents of \var{url} and places it in \var{filename}. The return value is a tuple consisting of a local filename and either a --- 280,290 ---- \end{methoddesc} ! \begin{methoddesc}[URLopener]{open_unknown}{fullurl\optional{, data}} Overridable interface to open unknown URL types. \end{methoddesc} ! \begin{methoddesc}[URLopener]{retrieve}{url\optional{, ! filename\optional{, ! reporthook\optional{, data}}}} Retrieves the contents of \var{url} and places it in \var{filename}. The return value is a tuple consisting of a local filename and either a *************** *** 302,305 **** --- 306,316 ---- see the \function{urlencode()} function below. \end{methoddesc} + + \begin{memberdesc}[URLopener]{version} + Variable that specifies the user agent of the opener object. To get + \refmodule{urllib} to tell servers that it is a particular user agent, + set this in a subclass as a class variable or in the constructor + before calling the base constructor. + \end{memberdesc} From python-dev@python.org Fri Aug 25 06:41:17 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 24 Aug 2000 22:41:17 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.134,2.135 Message-ID: <200008250541.WAA04793@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv4570/Python Modified Files: compile.c Log Message: Fix allowable node-types for assignment, need to add 'listmaker'. (This fix is a bit broken, just as the test already was: the test for testlist and listmaker are done always, whereas the test for exprlist and the actual abort() are only done if Py_DEBUG is defined. Suggestions welcome, I guess ;) Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.134 retrieving revision 2.135 diff -C2 -r2.134 -r2.135 *** compile.c 2000/08/24 20:11:31 2.134 --- compile.c 2000/08/25 05:41:11 2.135 *************** *** 1960,1964 **** { int i; ! if (TYPE(n) != testlist) REQ(n, exprlist); if (assigning) { --- 1960,1964 ---- { int i; ! if (TYPE(n) != testlist && TYPE(n) != listmaker) REQ(n, exprlist); if (assigning) { From python-dev@python.org Fri Aug 25 07:52:47 2000 From: python-dev@python.org (Tim Peters) Date: Thu, 24 Aug 2000 23:52:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/PCbuild _tkinter.dsp,1.17,1.18 python20.wse,1.8,1.9 readme.txt,1.11,1.12 Message-ID: <200008250652.XAA18208@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PCbuild In directory slayer.i.sourceforge.net:/tmp/cvs-serv17945/python/dist/src/pcbuild Modified Files: _tkinter.dsp python20.wse readme.txt Log Message: In readme.txt, make what's needed to build the "optional" subprojects much more explicit. Also document that we're moving to Tcl/Tk 8.3.2. Simplify .dsp files by getting rid of useless include paths. .wse file changed to reflect that my setup is different than Guido's: if you *build* a Python distro using python20.wse, beware! Index: _tkinter.dsp =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/_tkinter.dsp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -r1.17 -r1.18 *** _tkinter.dsp 2000/08/13 22:59:26 1.17 --- _tkinter.dsp 2000/08/25 06:52:44 1.18 *************** *** 110,114 **** CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 --- 110,114 ---- CPP=cl.exe # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 *************** *** 141,145 **** CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /I "..\..\tcl8.3\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 --- 141,145 ---- CPP=cl.exe # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /Zi /O2 /I "..\..\tcl\include" /I "..\Include" /I "..\PC" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WITH_APPINIT" /YX /FD /c MTL=midl.exe # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 Index: python20.wse =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/python20.wse,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** python20.wse 2000/08/22 14:04:24 1.8 --- python20.wse 2000/08/25 06:52:44 1.9 *************** *** 27,35 **** Variable Name3=_SRC_ Variable Description3=Python source directory ! Variable Default3=C:\src\Python-2.0 Variable Flags3=00001001 Variable Name4=_DOC_ Variable Description4=HTML documentation tree directory ! Variable Default4=C:\src\Python-2.0\html Variable Flags4=00001001 Variable Name5=_TCLMINOR_ --- 27,35 ---- Variable Name3=_SRC_ Variable Description3=Python source directory ! Variable Default3=C:\code\python\dist\src Variable Flags3=00001001 Variable Name4=_DOC_ Variable Description4=HTML documentation tree directory ! Variable Default4=C:\python16\doc Variable Flags4=00001001 Variable Name5=_TCLMINOR_ Index: readme.txt =================================================================== RCS file: /cvsroot/python/python/dist/src/PCbuild/readme.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** readme.txt 2000/08/11 23:20:32 1.11 --- readme.txt 2000/08/25 06:52:44 1.12 *************** *** 61,70 **** The following subprojects will generally NOT build out of the box. They wrap code Python doesn't control, and you'll need to download the base ! packages first (study the subproject structure from within MSVC to see ! where each expects to find the unpacked packages): _tkinter ! Python wrapper for the Tk windowing system. Requires tcl831.exe from http://dev.scriptics.com/software/tcltk/downloadnow83.html zlib --- 61,73 ---- The following subprojects will generally NOT build out of the box. They wrap code Python doesn't control, and you'll need to download the base ! packages first and unpack them into siblings of PCbuilds's parent ! directory; for example, if your PCbuild is .......\dist\src\PCbuild\, ! unpack into new subdirectories of dist\. _tkinter ! Python wrapper for the Tk windowing system. Requires tcl832.exe from http://dev.scriptics.com/software/tcltk/downloadnow83.html + Run the installer, forcing installation into dist\Tcl. + Be sure to install everything, including the Tcl/Tk header files. zlib *************** *** 73,76 **** --- 76,81 ---- and ftp://ftp.uu.net/graphics/png/src/zlib133.zip + Unpack the former into dist\zlib113dll. + Uppack the latter into dist\zlib113. bsddb *************** *** 78,85 **** --- 83,97 ---- from the "bsd db" link at http://www.nightmare.com/software.html + Unpack into dist\bsddb. + You then need to compile it: cd to dist\bsddb\Port\win32, and run + nmake -f makefile_nt.msc + This builds bsddb\Port\win32\db.lib, which the MSVC project links in. + Note that if you're running Win9X, you'll need to run vcvars32.bat + before running nmake (this batch file is in your MSVC installation). pyexpat Python wrapper for accelerated XML parsing. Requires ftp://ftp.jclark.com/pub/xml/expat.zip + Unpack into dist\expat. From python-dev@python.org Fri Aug 25 08:55:51 2000 From: python-dev@python.org (Tim Peters) Date: Fri, 25 Aug 2000 00:55:51 -0700 Subject: [Python-checkins] CVS: python/nondist/sf-html winssh.txt,NONE,1.1 sf-faq.html,1.14,1.15 Message-ID: <200008250755.AAA30921@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/sf-html In directory slayer.i.sourceforge.net:/tmp/cvs-serv30751 Modified Files: sf-faq.html Added Files: winssh.txt Log Message: Replaced the Windows cmdline CVS/SSH instructions with Andy Robinson's -- which work great. --- NEW FILE --- Setting up a cmdline CVS to work with SourceForge under Windows --------------------------------------------------------------- 28-Jun-2000 Original by Andy Robinson (andy@reportlab.com) 03-Jul-2000 Modified by Tim Peters (tim_one@msn.com) 16-Aug-2000 Modified by Riaan Booysen (riaan@e.co.za) 25-Aug-2000 Modified by Tim Peters (tim_one@msn.com) 1. Get ftp.reportlab.com/tools/cvs-1.10-win.zip ftp.reportlab.com/tools/ssh-1.2.14-win32bin.zip (copied from somewhere obscure for safety, I forget where) 2. Unzip these to a location on your path. Type 'cvs' and 'ssh' from somewhere else to verify. 3. Choose where to keep your CVS projects; let's assume C:\Code 4. Create a subdirectory C:\Code\.ssh (yes, dot-ssh) 5. (see #8 for an alternative) Create two environment variables: HOME=C:\Code CVS_RSH=ssh HOME must point to the directory above your .ssh directory. On Win9x, this can be done in a batch file or autoexec.bat; e.g., set HOME=c:\Code set CVS_RSH=ssh Run the batch file, or reboot if you're using autoexec.bat. On NT or 2000, go to Control Panel | System | Environment and set them at either user or machine level. 6. If not done so, get a Sourceforge account and a project you can log in to. 7. OPTIONAL (& if you skip this now, you can do it later if you change your mind). If you want to avoid typing in your SourceForge password before every CVS operation, generate the ssh public and private identity keys like this: ssh-keygen -C $KEY -f C:\Code\.ssh\identity where $KEY is just some identifier (like your name or email address; this is not used for authentication, it's just stored in the public identity file as a reminder to you why you created this key). Note that you must use -f! ssh-keygen fails to work without it on Windows. When asked for a passphrase, security experts will tell you to choose a long and hard-to-guess string. But then you have to type *that* all the time instead of your SourceForge password. If you just hit ENTER (leave the passphrase empty), you won't be bothered with SourceForge passwords or ssh passphrases again. This is a security tradeoff only you can make. If in doubt, ChOOzAl0Ng&HaRDtoGUessSTr1Ng. ssh-keygen creates two files under .ssh\: identity This is your private key, and is a binary file. NEVER reveal it to anyone. Do NOT share your .ssh directory across a network either. The scheme is only as secure as this file. identity.pub This is your public key, a text file, full of lots of digits and the mnemonic $KEY you gave to ssh-keygen. This file can be shared freely, and indeed must be shared for the scheme to be of any use. On your SourceForge account page, in the 'Shell Account Information' section click the [Edit Keys] link. Copy/paste the contents of the generated identity.pub file as one line into the Authorized Keys text box. After the next cron job (max 6 hours) your information should be updated. 8. Teach SSH about your project's home, by doing ssh -l $USERNAME $MYPROJECT.sourceforge.net where $USERNAME is your SourceForge login name and $MYPROJECT your SourceForge project name. You'll see Host "$MYPROJECT.sourceforge.net" added to the list of known hosts. and then Creating random seed file ~/.ssh/random_seed This may take a while. After a while it will prompt for a password. Type your SourceForge password and hit ENTER. After some SourceForge msgs scroll by, you'll be left at a SourceForge shell prompt. Type exit and hit ENTER. Now you're back at the DOS prompt. 9. You will need either a lengthy command line or a batch file for each sourceforge project. I set cvsroot in a batch file in my 'c:\code' directory, and have one such file for each CVS project I use (about ten of them!): set CVSROOT=:ext:$USERNAME@cvs.$MYPROJECT.sourceforge.net:/cvsroot/$DIRNAME where $USERNAME and $MYPROJECT are again your SourceForge login and project names, and $DIRNAME is the top-level directory in the SourceForge CVS tree; a project can have several, but usually there is just one. Note: you can keep HOME and CVS_RSH out of your permanent environment (see #5) by adding those definitions to this batch file instead. 10. Execute this batch file. You can now go to C:\Code and do cvs -z7 checkout $MYPROJECT (z7 means 'compress network traffic', handy over dialup lines) 11. From now on, just use CVS normally, running this batch file first each time you bring up a DOS box you're going to use for CVS work. Note: If you did not follow step 7, you'll be asked for your password each time you enter a CVS command. I wouldn't survive without Karl Fogel's book "Open Source Development with CVS", Coriolis Press. The CVS reference material (about 225 printed pages!) from this book is available for free download from http://cvsbook.red-bean.com/ Footnote: for anonymous checkout, I think you just omit the 'my_user_name@' part from the CVSROOT variable. I hope this helps; let me know if people have any problems with the instructions. - Andy Robinson ReportLab Index: sf-faq.html =================================================================== RCS file: /cvsroot/python/python/nondist/sf-html/sf-faq.html,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** sf-faq.html 2000/08/23 04:24:58 1.14 --- sf-faq.html 2000/08/25 07:55:48 1.15 *************** *** 47,52 ****

    4. Windows

      !
    1. How to install ssh?
    2. !
    3. How to install cvs to use ssh?
    --- 47,51 ----

    4. Windows

      !
    1. How to install cvs and ssh?
    *************** *** 420,476 ****

    4.1.:

    !

    Q: How to install ssh?

    A:

    ! Download the following file and unzip it to C:\BIN: ! !
    ! ftp://ftp.cs.hut.fi/pub/ssh/contrib/ssh-1.2.14-win32bin.zip
    ! Create a home directory (e.g. C:\HOME\SF_USERNAME) and ! C:\ETC and place a passwd file in C:\ETC: ! !
    ! mkdir C:\HOME
    ! mkdir C:\HOME\SF_USERNAME
    ! mkdir C:\ETC
    ! echo sf_username:x:1:10:Name, ! Real:/home/sf_username:/windows/command.com > ! C:\ETC\passwd
    ! Add the following entries to your environment. This can be automated e.g. by ! putting them into AUTOEXEC.BAT on Win9x. ! !
    ! SET PATH=%PATH%;C:\BIN
    ! SET HOME=\HOME\SF_USERNAME
    ! SET HOMEPATH=\HOME\SF_USERNAME
    ! SET HOMEDRIVE=C:
    ! SET USERNAME=sf_username
    ! After the environment is updated you should be able to use ssh. Try this: ! !
    ! ssh -l sf_username shell.sourceforge.net
    ! !

    4.2.:

    ! !

    Q: How to install cvs to use ssh?

    ! !

    A:

    ! Download the following file and unzip it to C:\BIN: ! !
    ! ftp://download.cyclic.com/pub/cvs-1.10/windows/cvs-1.10-win.zip
    ! Add the following entries to your environment. This can be automated e.g. by ! putting them into AUTOEXEC.BAT on Win9x. ! !
    ! SET CVS_RSH=ssh
    ! SET ! CVSROOT=:ext:sf_username@cvs.python.sourceforge.net:/cvsroot/python
    ! After the environment is updated you should be able to use cvs/ssh: Try this: ! !
    ! cvs co python

    5. Macintosh

    --- 419,431 ----

    4.1.:

    !

    Q: How to install cvs and ssh

    A:

    ! Here's a link to text instructions for ! setting up a cmdline CVS using SSH under Windows, ! originally developed by Andy Robinson. ! Tim Peters is too lazy to change it into HTML every time it's updated. ! All the Windows folks at Reportlab and PythonLabs swear by this scheme -- ! and all the others we've tried are broken.

    5. Macintosh

    From python-dev@python.org Fri Aug 25 11:47:49 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 25 Aug 2000 03:47:49 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects classobject.c,2.105,2.106 Message-ID: <200008251047.DAA21345@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv20722/Objects Modified Files: classobject.c Log Message: Call PyErr_Clear() to clear the AttributeError raised by GetAttr. Index: classobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v retrieving revision 2.105 retrieving revision 2.106 diff -C2 -r2.105 -r2.106 *** classobject.c 2000/08/24 20:08:19 2.105 --- classobject.c 2000/08/25 10:47:46 2.106 *************** *** 1461,1464 **** --- 1461,1465 ---- if (!PyErr_ExceptionMatches(PyExc_AttributeError)) return NULL; + PyErr_Clear(); return instance_pow(v, w, z); } From python-dev@python.org Fri Aug 25 12:11:31 2000 From: python-dev@python.org (Thomas Wouters) Date: Fri, 25 Aug 2000 04:11:31 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0203.txt,1.11,1.12 Message-ID: <200008251111.EAA13270@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10423 Modified Files: pep-0203.txt Log Message: Update PEP to reflect reality. Explain the current mechanism the InPlace functions use to find the right function to call, and when to coerce or not. Index: pep-0203.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0203.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** pep-0203.txt 2000/08/23 15:57:21 1.11 --- pep-0203.txt 2000/08/25 11:11:25 1.12 *************** *** 64,87 **** tries to call x.__iadd__(y), which is the `in-place' variant of ! __add__. If __iadd__ is not present, x.__add__(y) is ! attempted, and finally y.__radd__(x) if __add__ is missing too. ! There is no `right-hand-side' variant of __iadd__, because that ! would require for `y' to know how to in-place modify `x', which is ! unsafe to say the least. The __iadd__ hook should behave similar ! to __add__, returning the result of the operation (which could be ! `self') which is to be stored in the variable `x'. For C extension types, the `hooks' are members of the ! PyNumberMethods and PySequenceMethods structures, and are called ! in exactly the same manner as the existing non-inplace operations, ! including argument coercion. C methods should also take care to ! return a new reference to the result object, whether it's the same ! object or a new one. So if the original object is returned, it ! should be INCREF()'d appropriately. ! ! [XXX so I am accepting this, but I'm a bit worried about the ! argument coercion. For x+=y, if x supports augmented assignment, ! y should only be cast to x's type, not the other way around!] Rationale --- 64,138 ---- tries to call x.__iadd__(y), which is the `in-place' variant of ! __add__. If __iadd__ is not present, x.__add__(y) is attempted, ! and finally y.__radd__(x) if __add__ is missing too. There is no ! `right-hand-side' variant of __iadd__, because that would require ! for `y' to know how to in-place modify `x', which is unsafe to say ! the least. The __iadd__ hook should behave similar to __add__, ! returning the result of the operation (which could be `self') ! which is to be assigned to the variable `x'. For C extension types, the `hooks' are members of the ! PyNumberMethods and PySequenceMethods structures. Some special ! semantics apply to make the use of these methods, and the mixing ! of Python instance objects and C types, as unsurprising as ! possible. ! ! In the generic case of `x y' (or a similar case using the ! PyNumber_InPlace API functions) the principal object being ! operated on is `x'. This differs from normal binary operations, ! where `x' and `y' could be considered `co-operating', because ! unlike in binary operations, the operands in an in-place operation ! cannot be swapped. However, in-place operations do fall back to ! normal binary operations when in-place modification is not ! supported, resuling in the following rules: ! ! - If the left-hand object (`x') is an instance object, and it ! has a `__coerce__' method, call that function with `y' as the ! argument. If coercion succeeds, and the resulting left-hand ! object is a different object than `x', stop processing it as ! in-place and call the appropriate function for the normal binary ! operation, with the coerced `x' and `y' as arguments. The result ! of the operation is whatever that function returns. ! ! If coercion does not yield a different object for `x', or `x' ! does not define a `__coerce__' method, and `x' has the ! appropriate `__ihook__' for this operation, call that method ! with `y' as the argument, and the result of the operation is ! whatever that method returns. ! ! - Otherwise, if the left-hand object is not an instance object, ! but its type does define the in-place function for this ! operation, call that function with `x' and `y' as the arguments, ! and the result of the operation is whatever that function ! returns. ! ! Note that no coercion on either `x' or `y' is done in this case, ! and it's perfectly valid for a C type to receive an instance ! object as the second argument; that is something that cannot ! happen with normal binary operations. ! ! - Otherwise, process it exactly as a normal binary operation (not ! in-place), including argument coercion. In short, if either ! argument is an instance object, resolve the operation through ! `__coerce__', `__hook__' and `__rhook__'. Otherwise, both ! objects are C types, and they are coerced and passed to the ! appropriate function. ! ! - If no way to process the operation can be found, raise a ! TypeError with an error message specific to the operation. ! ! - Some special casing exists to account for the case of `+' and ! `*', which have a special meaning for sequences: for `+', ! sequence concatenation, no coercion what so ever is done if a C ! type defines sq_concat or sq_inplace_concat. For `*', sequence ! repeating, `y' is converted to a C integer before calling either ! sq_inplace_repeat and sq_repeat. This is done even if `y' is an ! instance, though not if `x' is an instance. ! ! The in-place function should always return a new reference, either ! to the old `x' object if the operation was indeed performed ! in-place, or to a new object. + Rationale *************** *** 134,138 **** packages, since some operations cannot be expressed in the limited set of binary operators to start with, but it is a start. A ! different PEP[3] is looking at adding new operators. --- 185,189 ---- packages, since some operations cannot be expressed in the limited set of binary operators to start with, but it is a start. A ! different PEP[2] is looking at adding new operators. *************** *** 195,199 **** Implementation ! The current implementation of augmented assignment[2] adds, in addition to the methods and slots already covered, 13 new bytecodes and 13 new API functions. --- 246,250 ---- Implementation ! The current implementation of augmented assignment[1] adds, in addition to the methods and slots already covered, 13 new bytecodes and 13 new API functions. *************** *** 272,285 **** bytecode at this time. - - It is not possible to do an inplace operation in the variant of - - += - - Instead, the instance objects' __radd__ hook is called, with the - builtin type as argument. The same goes for the other operations. - It might necessary to add a right-hand version of __add_ab__ after - all, to support something like that. - Copyright --- 323,326 ---- From python-dev@python.org Fri Aug 25 12:23:43 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 25 Aug 2000 04:23:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.102,1.103 Message-ID: <200008251123.EAA28112@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25778 Modified Files: urllib.py Log Message: Pass data on to retrieve method. Don't people *test* their changes? Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.102 retrieving revision 1.103 diff -C2 -r1.102 -r1.103 *** urllib.py 2000/08/24 16:18:04 1.102 --- urllib.py 2000/08/25 11:23:36 1.103 *************** *** 173,177 **** # External interface ! def retrieve(self, url, filename=None, reporthook=None): """retrieve(url) returns (filename, None) for a local object or (tempfilename, headers) for a remote object.""" --- 173,177 ---- # External interface ! def retrieve(self, url, filename=None, reporthook=None, data=None): """retrieve(url) returns (filename, None) for a local object or (tempfilename, headers) for a remote object.""" From python-dev@python.org Fri Aug 25 14:44:29 2000 From: python-dev@python.org (Jeremy Hylton) Date: Fri, 25 Aug 2000 06:44:29 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.28,1.29 Message-ID: <200008251344.GAA16623@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv16425 Modified Files: pep-0200.txt Log Message: bring up to date Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** pep-0200.txt 2000/08/24 21:46:53 1.28 --- pep-0200.txt 2000/08/25 13:44:26 1.29 *************** *** 189,195 **** Decide on a license. - Windows: Look for registry info in HKCU before HKLM - Mark - Hammond. - Windows installer: If HKLM isn't writable, back off to HKCU (so Python can be installed on NT & 2000 without admin privileges). --- 189,192 ---- *************** *** 221,231 **** Open: proposed but not accepted or rejected - * Problems reported with Tkinter, Tk 8.3.2,axs and Unicode - * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. Open items -- completed/fixed [20-Aug-2000 tim - done] Remove winreg.py and test_winreg2.py. Paul Prescod (the author) --- 218,253 ---- Open: proposed but not accepted or rejected * Extended slicing on lists - Michael Hudson Make lists (and other builtin types) handle extended slices. + * Problems reported with Tkinter, Tk 8.3.2, and Unicode (?) + + Accepted and in progress + + * Compression of Unicode database - Fredrik Lundh + SF Patch 100899 + + * PyErr_Format - Fredrik Lundh + Make this function safe from buffer overflows. + + * Support for opcode arguments > 2**16 - Charles Waldman + SF Patch 100893 + + * Range literals - Thomas Wouters + SF Patch 100902 + + * Change meaning of \x escapes - PEP 223 - Fredrik Lundh + + * Add \U1234678 escapes in u"" strings - Fredrik Lundh + + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries + Open items -- completed/fixed + [23-Aug-2000 jeremy - tim reports "completed recently"] + Windows: Look for registry info in HKCU before HKLM - Mark + Hammond. + [20-Aug-2000 tim - done] Remove winreg.py and test_winreg2.py. Paul Prescod (the author) *************** *** 274,304 **** http://sourceforge.net/patch/?func=detailpatch&patch_id=100970&group_id=5470 - - Accepted and in progress - * interface to poll system call - Andrew Kuchling SF Patch 100852 - * Compression of Unicode database - Fredrik Lundh - SF Patch 100899 - - * PyErr_Format - Fredrik Lundh - Make this function safe from buffer overflows. - - * Support for opcode arguments > 2**16 - Charles Waldman - SF Patch 100893 - - * Range literals - Thomas Wouters - SF Patch 100902 - * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. - * Change meaning of \x escapes - PEP 223 - Fredrik Lundh? Tim Peters? - - * Add \U1234678 escapes in u"" strings - Fredrik Lundh? - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries Postponed --- 296,305 ---- From python-dev@python.org Fri Aug 25 14:59:21 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Fri, 25 Aug 2000 06:59:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules selectmodule.c,2.43,2.44 Message-ID: <200008251359.GAA28398@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv27851 Modified Files: selectmodule.c Log Message: Not every OS that support poll seems to support POLLMSG. Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.43 retrieving revision 2.44 diff -C2 -r2.43 -r2.44 *** selectmodule.c 2000/08/25 01:15:33 2.43 --- selectmodule.c 2000/08/25 13:59:18 2.44 *************** *** 658,662 **** --- 658,664 ---- insint(d, "POLLWRNORM", POLLWRNORM); insint(d, "POLLWRBAND", POLLWRBAND); + #ifdef POLLMSG insint(d, "POLLMSG", POLLMSG); + #endif #endif /* HAVE_POLL */ } From python-dev@python.org Fri Aug 25 14:59:35 2000 From: python-dev@python.org (Jeremy Hylton) Date: Fri, 25 Aug 2000 06:59:35 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.29,1.30 Message-ID: <200008251359.GAA28582@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv28393 Modified Files: pep-0200.txt Log Message: support for opcode args > 2**16 is finished Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** pep-0200.txt 2000/08/25 13:44:26 1.29 --- pep-0200.txt 2000/08/25 13:59:33 1.30 *************** *** 231,237 **** Make this function safe from buffer overflows. - * Support for opcode arguments > 2**16 - Charles Waldman - SF Patch 100893 - * Range literals - Thomas Wouters SF Patch 100902 --- 231,234 ---- *************** *** 264,267 **** --- 261,267 ---- Accepted and completed + + * Support for opcode arguments > 2**16 - Charles Waldman + SF Patch 100893 * "import as" - Thomas Wouters From python-dev@python.org Fri Aug 25 15:15:52 2000 From: python-dev@python.org (Guido van Rossum) Date: Fri, 25 Aug 2000 07:15:52 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0214.txt,1.5,1.6 Message-ID: <200008251415.HAA12385@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv12339 Modified Files: pep-0214.txt Log Message: Added the essence of my post to c.l.py in defense of the new syntax. Index: pep-0214.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0214.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** pep-0214.txt 2000/08/21 13:36:22 1.5 --- pep-0214.txt 2000/08/25 14:15:49 1.6 *************** *** 141,144 **** --- 141,256 ---- + More Justification by the BDFL + + The proposal has been challenged on the newsgroup. One series of + challenges doesn't like '>>' and would rather see some other + symbol. + + Challenge: Why not one of these? + + print in stderr items,.... + print + stderr items,....... + print[stderr] items,..... + print to stderr items,..... + + Response: If we want to use a special symbol (print + expression), the Python parser requires that it is not already a + symbol that can start an expression -- otherwise it can't decide + which form of print statement is used. (The Python parser is a + simple LL(1) or recursive descent parser.) + + This means that we can't use the "keyword only in context trick" + that was used for "import as", because an identifier can start an + expression. This rules out +stderr, [sterr], and to stderr. It + leaves us with binary operator symbols and other miscellaneous + symbols that are currently illegal here, such as 'import'. + + If I had to choose between 'print in file' and 'print >> file' I + would definitely choose '>>'. In part because 'in' would be a new + invention (I know of no other language that uses it, while '>>' is + used in sh, awk, Perl, and C++), in part because '>>', being + non-alphabetic, stands out more so is more likely to catch the + reader's attention. + + Challenge: Why does there have to be a comma between the file and + the rest? + + Response: The comma separating the file from the following expression is + necessary! Of course you want the file to be an arbitrary + expression, not just a single word. (You definitely want to be + able to write print >>sys.stderr.) Without the expression the + parser would't be able to distinguish where that expression ends + and where the next one begins, e.g. + + print >>i +1, 2 + print >>a [1], 2 + print >>f (1), 2 + + Challenge: Why do you need a syntax extension? Why not + writeln(file, item, ...)? + + Response: First of all, this is lacking a feature of the print + statement: the trailing comma to print which suppresses the final + newline. Note that 'print a,' still isn't equivalent to + 'sys.stdout.write(a)' -- print inserts a space between items, and + takes arbitrary objects as arguments; write() doesn't insert a + space and requires a single string. + + When you are considering an extension for the print statement, + it's not right to add a function or method that adds a new feature + in one dimension (where the output goes) but takes away in another + dimension (spaces between items, and the choice of trailing + newline or not). We could add a whole slew of methods or + functions to deal with the various cases but that seems to add + more confusion than necessary, and would only make sense if we + were to deprecate the print statement altogether. + + I feel that this debate is really about whether print should have + been a function or method rather than a statement. If you are in + the function camp, of course adding special syntax to the existing + print statement is not something you like. I suspect the + objection to the new syntax comes mostly from people who already + think that the print statement was a bad idea. Am I right? + + About 10 years ago I debated with myself whether to make the most + basic from of output a function or a statement; basically I was + trying to decide between "print(item, ...)" and "print item, ...". + I chose to make it a statement because printing needs to be taught + very early on, and is very important in the programs that + beginners write. Also, because ABC, which lead the way for so + many things, made it a statement. In a move that's typical for + the interaction between ABC and Python, I changed the name from + WRITE to print, and reversed the convention for adding newlines + from requiring extra syntax to add a newline (ABC used trailing + slashes to indicate newlines) to requiring extra syntax (the + trailing comma) to suppress the newline. I kept the feature that + items are separated by whitespace on output. + + Full example: in ABC, + + WRITE 1 + WRITE 2/ + + has the same effect as + + print 1, + print 2 + + has in Python, outputting in effect "1 2\n". + + I'm not 100% sure that the choice for a statement was right (ABC + had the compelling reason that it used statement syntax for + anything with side effects, but Python doesn't have this + convention), but I'm also not convinced that it's wrong. I + certainly like the economy of the print statement. (I'm a rabid + Lisp-hater -- syntax-wise, not semantics-wise! -- and excessive + parentheses in syntax annoy me. Don't ever write return(i) or + if(x==y): in your Python code! :-) + + Anyway, I'm not ready to deprecate the print statement, and over + the years we've had many requests for an option to specify the + file. + + References From python-dev@python.org Fri Aug 25 16:38:44 2000 From: python-dev@python.org (Jeremy Hylton) Date: Fri, 25 Aug 2000 08:38:44 -0700 Subject: [Python-checkins] CVS: python/dist/src/Demo/sockets finger.py,1.4,1.5 ftp.py,1.4,1.5 rpythond.py,1.2,1.3 telnet.py,1.4,1.5 throughput.py,1.5,1.6 udpecho.py,1.4,1.5 Message-ID: <200008251538.IAA18829@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Demo/sockets In directory slayer.i.sourceforge.net:/tmp/cvs-serv18640 Modified Files: finger.py ftp.py rpythond.py telnet.py throughput.py udpecho.py Log Message: update demo scripts to use addr tuples for bind and connect closes bug #111928 Index: finger.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/finger.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** finger.py 1996/11/27 19:50:39 1.4 --- finger.py 2000/08/25 15:38:41 1.5 *************** *** 24,28 **** def finger(host, args): s = socket(AF_INET, SOCK_STREAM) ! s.connect(host, FINGER_PORT) s.send(args + '\n') while 1: --- 24,28 ---- def finger(host, args): s = socket(AF_INET, SOCK_STREAM) ! s.connect((host, FINGER_PORT)) s.send(args + '\n') while 1: Index: ftp.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/ftp.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** ftp.py 1995/01/12 12:42:09 1.4 --- ftp.py 2000/08/25 15:38:41 1.5 *************** *** 49,53 **** # s = socket(AF_INET, SOCK_STREAM) ! s.connect(hostname, FTP_PORT) f = s.makefile('r') # Reading the replies is easier from a file... # --- 49,53 ---- # s = socket(AF_INET, SOCK_STREAM) ! s.connect((hostname, FTP_PORT)) f = s.makefile('r') # Reading the replies is easier from a file... # *************** *** 80,84 **** nextport = (nextport+1) % 16 r = socket(AF_INET, SOCK_STREAM) ! r.bind(gethostbyname(gethostname()), port) r.listen(1) sendportcmd(s, f, port) --- 80,84 ---- nextport = (nextport+1) % 16 r = socket(AF_INET, SOCK_STREAM) ! r.bind((gethostbyname(gethostname()), port)) r.listen(1) sendportcmd(s, f, port) Index: rpythond.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/rpythond.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** rpythond.py 1996/11/27 19:50:44 1.2 --- rpythond.py 2000/08/25 15:38:41 1.3 *************** *** 20,24 **** port = PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind('', port) s.listen(1) while 1: --- 20,24 ---- port = PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind(('', port)) s.listen(1) while 1: Index: telnet.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/telnet.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** telnet.py 1996/11/27 19:50:46 1.4 --- telnet.py 2000/08/25 15:38:41 1.5 *************** *** 52,56 **** # try: ! s.connect(host, port) except error, msg: sys.stderr.write('connect failed: ' + `msg` + '\n') --- 52,56 ---- # try: ! s.connect((host, port)) except error, msg: sys.stderr.write('connect failed: ' + `msg` + '\n') Index: throughput.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/throughput.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** throughput.py 1996/11/27 19:50:47 1.5 --- throughput.py 2000/08/25 15:38:41 1.6 *************** *** 45,49 **** port = MY_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind('', port) s.listen(1) print 'Server ready...' --- 45,49 ---- port = MY_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind(('', port)) s.listen(1) print 'Server ready...' *************** *** 73,77 **** s = socket(AF_INET, SOCK_STREAM) t2 = time.time() ! s.connect(host, port) t3 = time.time() i = 0 --- 73,77 ---- s = socket(AF_INET, SOCK_STREAM) t2 = time.time() ! s.connect((host, port)) t3 = time.time() i = 0 Index: udpecho.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/udpecho.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** udpecho.py 1996/11/27 19:50:49 1.4 --- udpecho.py 2000/08/25 15:38:41 1.5 *************** *** 34,38 **** port = ECHO_PORT s = socket(AF_INET, SOCK_DGRAM) ! s.bind('', port) print 'udp echo server ready' while 1: --- 34,38 ---- port = ECHO_PORT s = socket(AF_INET, SOCK_DGRAM) ! s.bind(('', port)) print 'udp echo server ready' while 1: *************** *** 51,55 **** addr = host, port s = socket(AF_INET, SOCK_DGRAM) ! s.bind('', 0) print 'udp echo client ready, reading stdin' while 1: --- 51,55 ---- addr = host, port s = socket(AF_INET, SOCK_DGRAM) ! s.bind(('', 0)) print 'udp echo client ready, reading stdin' while 1: From python-dev@python.org Fri Aug 25 17:03:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 09:03:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Demo/sockets echosvr.py,1.6,1.7 Message-ID: <200008251603.JAA24024@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Demo/sockets In directory slayer.i.sourceforge.net:/tmp/cvs-serv23996 Modified Files: echosvr.py Log Message: Jeremy missed a bind() call when updating these demos. ;) Index: echosvr.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Demo/sockets/echosvr.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** echosvr.py 1996/11/27 19:50:37 1.6 --- echosvr.py 2000/08/25 16:03:27 1.7 *************** *** 19,23 **** port = ECHO_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind('', port) s.listen(1) conn, (remotehost, remoteport) = s.accept() --- 19,23 ---- port = ECHO_PORT s = socket(AF_INET, SOCK_STREAM) ! s.bind(('', port)) s.listen(1) conn, (remotehost, remoteport) = s.accept() From python-dev@python.org Fri Aug 25 18:29:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 10:29:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburlparse.tex,1.17,1.18 Message-ID: <200008251729.KAA17614@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv17607/lib Modified Files: liburlparse.tex Log Message: Add reference to RFC 2396 in "See also" section. Minor cleanups. Index: liburlparse.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburlparse.tex,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -r1.17 -r1.18 *** liburlparse.tex 2000/08/24 04:58:25 1.17 --- liburlparse.tex 2000/08/25 17:29:35 1.18 *************** *** 1,4 **** \section{\module{urlparse} --- ! Parse URLs into components.} \declaremodule{standard}{urlparse} --- 1,4 ---- \section{\module{urlparse} --- ! Parse URLs into components} \declaremodule{standard}{urlparse} *************** *** 12,19 **** ! This module defines a standard interface to break URL strings up in ! components (addressing scheme, network location, path etc.), to combine ! the components back into a URL string, and to convert a ``relative ! URL'' to an absolute URL given a ``base URL.'' The module has been designed to match the Internet RFC on Relative --- 12,20 ---- ! This module defines a standard interface to break Uniform Resource ! Locator (URL) strings up in components (addressing scheme, network ! location, path etc.), to combine the components back into a URL ! string, and to convert a ``relative URL'' to an absolute URL given a ! ``base URL.'' The module has been designed to match the Internet RFC on Relative *************** *** 81,85 **** 'http://www.cwi.nl/%7Eguido/FAQ.html' \end{verbatim} ! % The \var{allow_fragments} argument has the same meaning as for \code{urlparse()}. --- 82,86 ---- 'http://www.cwi.nl/%7Eguido/FAQ.html' \end{verbatim} ! The \var{allow_fragments} argument has the same meaning as for \code{urlparse()}. *************** *** 96,98 **** --- 97,103 ---- ``Abnormal Examples'' which govern the treatment of border cases.} + \seerfc{2396}{Uniform Resource Identifiers (URI): Generic Syntax}{ + Document describing the generic syntactic requirements for + both Uniform Resource Names (URNs) and Uniform Resource + Locators (URLs).} \end{seealso} From python-dev@python.org Fri Aug 25 19:03:33 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 11:03:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules pyexpat.c,2.14,2.15 Message-ID: <200008251803.LAA21478@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv21427/Modules Modified Files: pyexpat.c Log Message: initpyexpat(): Code cleanup; makes it more robust and reduces warnings. Added prototype to remove yet another warning. Make a number of the handlers and helpers "static" since they are not used in other C source files. This also reduces the number of warnings. Make a lot of the code "more Python". (Need to get the style guide done!) Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -r2.14 -r2.15 *** pyexpat.c 2000/08/24 22:27:02 2.14 --- pyexpat.c 2000/08/25 18:03:30 2.15 *************** *** 58,62 **** staticforward PyTypeObject Xmlparsetype; ! typedef void (*xmlhandlersetter)( XML_Parser *self, void *meth ); typedef void* xmlhandler; --- 58,62 ---- staticforward PyTypeObject Xmlparsetype; ! typedef void (*xmlhandlersetter)(XML_Parser *self, void *meth); typedef void* xmlhandler; *************** *** 179,185 **** return Py_None; } ! return PyUnicode_DecodeUTF8((const char *)str, ! len, ! "strict"); } #endif --- 179,183 ---- return Py_None; } ! return PyUnicode_DecodeUTF8((const char *)str, len, "strict"); } #endif *************** *** 188,218 **** Returns None if str is a null pointer. */ ! static PyObject *conv_string_to_utf8( XML_Char *str ) { ! /* XXX currently this code assumes that XML_Char is 8-bit, ! and hence in UTF-8. */ ! /* UTF-8 from Expat, UTF-8 desired */ ! if (str == NULL) {Py_INCREF(Py_None); return Py_None;} ! return PyString_FromString( (const char *)str ); ! } ! ! static PyObject *conv_string_len_to_utf8( const XML_Char *str, ! int len ) ! { ! /* XXX currently this code assumes that XML_Char is 8-bit, ! and hence in UTF-8. */ ! /* UTF-8 from Expat, UTF-8 desired */ ! if (str == NULL) {Py_INCREF(Py_None); return Py_None;} ! return PyString_FromStringAndSize( (const char *)str, len ); } /* Callback routines */ ! static void clear_handlers( xmlparseobject *self ); ! static void flag_error( xmlparseobject *self ){ ! clear_handlers(self); } ! #define RC_HANDLER( RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \ RETURN, GETUSERDATA) \ \ --- 186,226 ---- Returns None if str is a null pointer. */ ! static PyObject * ! conv_string_to_utf8(XML_Char *str) ! { ! /* XXX currently this code assumes that XML_Char is 8-bit, ! and hence in UTF-8. */ ! /* UTF-8 from Expat, UTF-8 desired */ ! if (str == NULL) { ! Py_INCREF(Py_None); ! return Py_None; ! } ! return PyString_FromString((const char *)str); } + static PyObject * + conv_string_len_to_utf8(const XML_Char *str, int len) + { + /* XXX currently this code assumes that XML_Char is 8-bit, + and hence in UTF-8. */ + /* UTF-8 from Expat, UTF-8 desired */ + if (str == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + return PyString_FromStringAndSize((const char *)str, len); + } + /* Callback routines */ ! static void clear_handlers(xmlparseobject *self); ! static void ! flag_error(xmlparseobject *self) ! { ! clear_handlers(self); } ! #define RC_HANDLER(RC, NAME, PARAMS, INIT, PARAM_FORMAT, CONVERSION, \ RETURN, GETUSERDATA) \ \ *************** *** 230,234 **** Py_DECREF(args); \ if (rv == NULL) { \ ! flag_error( self ); \ return RETURN; \ } \ --- 238,242 ---- Py_DECREF(args); \ if (rv == NULL) { \ ! flag_error(self); \ return RETURN; \ } \ *************** *** 247,297 **** #endif ! #define VOID_HANDLER( NAME, PARAMS, PARAM_FORMAT ) \ ! RC_HANDLER( void, NAME, PARAMS, ;, PARAM_FORMAT, ;, ;,\ ! (xmlparseobject *)userData ) ! ! #define INT_HANDLER( NAME, PARAMS, PARAM_FORMAT )\ ! RC_HANDLER( int, NAME, PARAMS, int rc=0;, PARAM_FORMAT, \ ! rc = PyInt_AsLong( rv );, rc, \ ! (xmlparseobject *)userData ) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER( StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts ), ("(O&O&)", STRING_CONV_FUNC, name, conv_atts_using_string, atts ) ) #else /* Python 1.6 and later */ ! VOID_HANDLER( StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts ), ("(O&O&)", STRING_CONV_FUNC, name, (self->returns_unicode ? conv_atts_using_unicode ! : conv_atts_using_string), atts ) ) #endif ! VOID_HANDLER( EndElement, ! (void *userData, const XML_Char *name ), ! ("(O&)", STRING_CONV_FUNC, name) ) ! VOID_HANDLER( ProcessingInstruction, (void *userData, const XML_Char *target, const XML_Char *data), ! ("(O&O&)",STRING_CONV_FUNC,target, STRING_CONV_FUNC,data )) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER( CharacterData, (void *userData, const XML_Char *data, int len), ! ("(O)", conv_string_len_to_utf8(data,len) ) ) #else ! VOID_HANDLER( CharacterData, (void *userData, const XML_Char *data, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(data,len) ! : conv_string_len_to_utf8(data,len) ) ) ) #endif ! VOID_HANDLER( UnparsedEntityDecl, (void *userData, const XML_Char *entityName, --- 255,305 ---- #endif ! #define VOID_HANDLER(NAME, PARAMS, PARAM_FORMAT) \ ! RC_HANDLER(void, NAME, PARAMS, ;, PARAM_FORMAT, ;, ;,\ ! (xmlparseobject *)userData) ! ! #define INT_HANDLER(NAME, PARAMS, PARAM_FORMAT)\ ! RC_HANDLER(int, NAME, PARAMS, int rc=0;, PARAM_FORMAT, \ ! rc = PyInt_AsLong(rv);, rc, \ ! (xmlparseobject *)userData) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER(StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts), ("(O&O&)", STRING_CONV_FUNC, name, conv_atts_using_string, atts ) ) #else /* Python 1.6 and later */ ! VOID_HANDLER(StartElement, ! (void *userData, const XML_Char *name, const XML_Char **atts), ("(O&O&)", STRING_CONV_FUNC, name, (self->returns_unicode ? conv_atts_using_unicode ! : conv_atts_using_string), atts)) #endif ! VOID_HANDLER(EndElement, ! (void *userData, const XML_Char *name), ! ("(O&)", STRING_CONV_FUNC, name)) ! VOID_HANDLER(ProcessingInstruction, (void *userData, const XML_Char *target, const XML_Char *data), ! ("(O&O&)",STRING_CONV_FUNC,target, STRING_CONV_FUNC,data)) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER(CharacterData, (void *userData, const XML_Char *data, int len), ! ("(O)", conv_string_len_to_utf8(data,len))) #else ! VOID_HANDLER(CharacterData, (void *userData, const XML_Char *data, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(data,len) ! : conv_string_len_to_utf8(data,len)))) #endif ! VOID_HANDLER(UnparsedEntityDecl, (void *userData, const XML_Char *entityName, *************** *** 305,309 **** STRING_CONV_FUNC,notationName)) ! VOID_HANDLER( NotationDecl, (void *userData, const XML_Char *notationName, --- 313,317 ---- STRING_CONV_FUNC,notationName)) ! VOID_HANDLER(NotationDecl, (void *userData, const XML_Char *notationName, *************** *** 315,368 **** STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId)) ! VOID_HANDLER( StartNamespaceDecl, (void *userData, const XML_Char *prefix, const XML_Char *uri), ! ("(O&O&)", STRING_CONV_FUNC,prefix, STRING_CONV_FUNC,uri )) ! VOID_HANDLER( EndNamespaceDecl, (void *userData, const XML_Char *prefix), ! ("(O&)", STRING_CONV_FUNC,prefix )) ! VOID_HANDLER( Comment, (void *userData, const XML_Char *prefix), ("(O&)", STRING_CONV_FUNC,prefix)) ! VOID_HANDLER( StartCdataSection, (void *userData), ! ("()" )) ! VOID_HANDLER( EndCdataSection, (void *userData), ! ("()" )) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER( Default, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len) ) ) ! VOID_HANDLER( DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len) ) ) #else ! VOID_HANDLER( Default, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len) ) ) ) ! VOID_HANDLER( DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len) ) ) ) #endif ! INT_HANDLER( NotStandalone, (void *userData), ("()")) ! RC_HANDLER( int, ExternalEntityRef, (XML_Parser parser, const XML_Char *context, --- 323,376 ---- STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId)) ! VOID_HANDLER(StartNamespaceDecl, (void *userData, const XML_Char *prefix, const XML_Char *uri), ! ("(O&O&)", STRING_CONV_FUNC,prefix, STRING_CONV_FUNC,uri)) ! VOID_HANDLER(EndNamespaceDecl, (void *userData, const XML_Char *prefix), ! ("(O&)", STRING_CONV_FUNC,prefix)) ! VOID_HANDLER(Comment, (void *userData, const XML_Char *prefix), ("(O&)", STRING_CONV_FUNC,prefix)) ! VOID_HANDLER(StartCdataSection, (void *userData), ! ("()")) ! VOID_HANDLER(EndCdataSection, (void *userData), ! ("()")) #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! VOID_HANDLER(Default, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len))) ! VOID_HANDLER(DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ! ("(O)", conv_string_len_to_utf8(s,len))) #else ! VOID_HANDLER(Default, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len)))) ! VOID_HANDLER(DefaultHandlerExpand, (void *userData, const XML_Char *s, int len), ("(O)", (self->returns_unicode ? conv_string_len_to_unicode(s,len) ! : conv_string_len_to_utf8(s,len)))) #endif ! INT_HANDLER(NotStandalone, (void *userData), ("()")) ! RC_HANDLER(int, ExternalEntityRef, (XML_Parser parser, const XML_Char *context, *************** *** 373,379 **** ("(O&O&O&O&)", STRING_CONV_FUNC,context, STRING_CONV_FUNC,base, ! STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId ), ! rc = PyInt_AsLong( rv );, rc, ! XML_GetUserData( parser ) ) --- 381,387 ---- ("(O&O&O&O&)", STRING_CONV_FUNC,context, STRING_CONV_FUNC,base, ! STRING_CONV_FUNC,systemId, STRING_CONV_FUNC,publicId), ! rc = PyInt_AsLong(rv);, rc, ! XML_GetUserData(parser)) *************** *** 478,482 **** /* XXX what to do if it returns a Unicode string? */ ! UNLESS(PyString_Check( str )) { PyErr_Format(PyExc_TypeError, "read() did not return a string object (type=%.400s)", --- 486,490 ---- /* XXX what to do if it returns a Unicode string? */ ! UNLESS(PyString_Check(str)) { PyErr_Format(PyExc_TypeError, "read() did not return a string object (type=%.400s)", *************** *** 719,723 **** } ! static int sethandler(xmlparseobject *self, const char *name, PyObject* v) { int handlernum = handlername2int(name); --- 727,732 ---- } ! static int ! sethandler(xmlparseobject *self, const char *name, PyObject* v) { int handlernum = handlername2int(name); *************** *** 734,767 **** static int ! xmlparse_setattr( xmlparseobject *self, char *name, PyObject *v) { ! /* Set attribute 'name' to value 'v'. v==NULL means delete */ ! if (v==NULL) { ! PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); ! return -1; ! } ! ! if (strcmp(name, "returns_unicode") == 0) { ! PyObject *intobj = PyNumber_Int(v); ! if (intobj == NULL) return -1; ! if (PyInt_AsLong(intobj)) { #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! PyErr_SetString(PyExc_ValueError, ! "Cannot return Unicode strings in Python 1.5"); ! return -1; #else ! self->returns_unicode = 1; #endif ! } ! else self->returns_unicode = 0; ! Py_DECREF(intobj); ! return 0; ! } ! if( sethandler( self, name, v ) ){ ! return 0; ! } ! ! PyErr_SetString( PyExc_AttributeError, name ); ! return -1; } --- 743,775 ---- static int ! xmlparse_setattr(xmlparseobject *self, char *name, PyObject *v) { ! /* Set attribute 'name' to value 'v'. v==NULL means delete */ ! if (v==NULL) { ! PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); ! return -1; ! } ! if (strcmp(name, "returns_unicode") == 0) { ! PyObject *intobj = PyNumber_Int(v); ! if (intobj == NULL) return -1; ! if (PyInt_AsLong(intobj)) { #if PY_MAJOR_VERSION == 1 && PY_MINOR_VERSION < 6 ! PyErr_SetString(PyExc_ValueError, ! "Cannot return Unicode strings in Python 1.5"); ! return -1; #else ! self->returns_unicode = 1; #endif ! } ! else ! self->returns_unicode = 0; ! Py_DECREF(intobj); ! return 0; ! } ! if (sethandler(self, name, v)) { ! return 0; ! } ! PyErr_SetString(PyExc_AttributeError, name); ! return -1; } *************** *** 846,858 **** /* Initialization function for the module */ ! void initpyexpat(void) { PyObject *m, *d; char *rev = "$Revision$"; PyObject *errors_module, *errors_dict; PyObject *sys_modules; Xmlparsetype.ob_type = &PyType_Type; --- 854,872 ---- /* Initialization function for the module */ + + DL_IMPORT(void) initpyexpat(void); ! DL_EXPORT(void) initpyexpat(void) { PyObject *m, *d; char *rev = "$Revision$"; + PyObject *errmod_name = PyString_FromString("pyexpat.errors"); PyObject *errors_module, *errors_dict; PyObject *sys_modules; + if (errmod_name == NULL) + return; + Xmlparsetype.ob_type = &PyType_Type; *************** *** 879,901 **** PyString_FromString("UTF-8")); ! sys_modules = PySys_GetObject("modules"); ! { ! PyObject *errmod_name = PyString_FromString("pyexpat.errors"); ! ! if (errmod_name != NULL) { ! errors_module = PyDict_GetItem(d, errmod_name); ! if (errors_module == NULL) { ! errors_module = PyModule_New("pyexpat.errors"); ! if (errors_module != NULL) { ! PyDict_SetItemString(d, "errors", errors_module); ! PyDict_SetItem(sys_modules, errmod_name, errors_module); ! } ! } ! Py_DECREF(errmod_name); ! if (errors_module == NULL) ! /* Don't code dump later! */ ! return; } } errors_dict = PyModule_GetDict(errors_module); --- 893,910 ---- PyString_FromString("UTF-8")); ! errors_module = PyDict_GetItem(d, errmod_name); ! if (errors_module == NULL) { ! errors_module = PyModule_New("pyexpat.errors"); ! if (errors_module != NULL) { ! sys_modules = PySys_GetObject("modules"); ! PyDict_SetItemString(d, "errors", errors_module); ! PyDict_SetItem(sys_modules, errmod_name, errors_module); } } + Py_DECREF(errmod_name); + if (errors_module == NULL) + /* Don't code dump later! */ + return; + errors_dict = PyModule_GetDict(errors_module); *************** *** 925,929 **** } ! void clear_handlers(xmlparseobject *self) { int i = 0; --- 934,939 ---- } ! static void ! clear_handlers(xmlparseobject *self) { int i = 0; *************** *** 931,944 **** for (; handler_info[i].name!=NULL; i++) { self->handlers[i]=NULL; ! handler_info[i].setter( self->itself, NULL ); } } ! typedef void (*pairsetter)( XML_Parser, void *handler1, void *handler2 ); ! void pyxml_UpdatePairedHandlers(xmlparseobject *self, ! int startHandler, ! int endHandler, ! pairsetter setter) { void *start_handler=NULL; --- 941,955 ---- for (; handler_info[i].name!=NULL; i++) { self->handlers[i]=NULL; ! handler_info[i].setter(self->itself, NULL); } } ! typedef void (*pairsetter)(XML_Parser, void *handler1, void *handler2); ! static void ! pyxml_UpdatePairedHandlers(xmlparseobject *self, ! int startHandler, ! int endHandler, ! pairsetter setter) { void *start_handler=NULL; *************** *** 956,960 **** } ! void pyxml_SetStartElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 967,972 ---- } ! static void ! pyxml_SetStartElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 963,967 **** } ! void pyxml_SetEndElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 975,980 ---- } ! static void ! pyxml_SetEndElementHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 970,974 **** } ! void pyxml_SetStartNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 983,988 ---- } ! static void ! pyxml_SetStartNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 977,981 **** } ! void pyxml_SetEndNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 991,996 ---- } ! static void ! pyxml_SetEndNamespaceDeclHandler(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 984,988 **** } ! void pyxml_SetStartCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 999,1004 ---- } ! static void ! pyxml_SetStartCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), *************** *** 991,995 **** } ! void pyxml_SetEndCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), --- 1007,1012 ---- } ! static void ! pyxml_SetEndCdataSection(XML_Parser *parser, void *junk) { pyxml_UpdatePairedHandlers((xmlparseobject *)XML_GetUserData(parser), From python-dev@python.org Fri Aug 25 20:13:40 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:13:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,NONE,1.1 Message-ID: <200008251913.MAA10374@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10364 Added Files: gettext.py Log Message: Initial revision of gettext support for Python. This will undergo some changes. --- NEW FILE --- """Internationalization and localization support. This module provides internationalization (I18N) and localization (L10N) support for your Python programs by providing an interface to the GNU gettext message catalog library. I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once internationalized, to the local language and cultural habits. In order to provide multilingual messages for your Python programs, you need to take the following steps: - prepare your program by specially marking translatable strings - run a suite of tools over your marked program files to generate raw messages catalogs - create language specific translations of the message catalogs - use this module so that message strings are properly translated In order to prepare your program for I18N, you need to look at all the strings in your program. Any string that needs to be translated should be marked by wrapping it in _('...') -- i.e. a call to the function `_'. For example: filename = 'mylog.txt' message = _('writing a log message') fp = open(filename, 'w') fp.write(message) fp.close() In this example, the string `writing a log message' is marked as a candidate for translation, while the strings `mylog.txt' and `w' are not. The GNU gettext package provides a tool, called xgettext, that scans C and C++ source code looking for these specially marked strings. xgettext generates what are called `.pot' files, essentially structured human readable files which contain every marked string in the source code. These .pot files are copied and handed over to translators who write language-specific versions for every supported language. For I18N Python programs however, xgettext won't work; it doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called pygettext that does though (found in the Tools/i18n directory). This is a command line script that supports a similar interface as xgettext; see its documentation for details. Once you've used pygettext to create your .pot files, you can use the standard GNU gettext tools to generate your machine-readable .mo files, which are what's used by this module. In the simple case, to use this module then, you need only add the following bit of code to the main driver file of your application: import gettext gettext.install() This sets everything up so that your _('...') function calls Just Work. In other words, it installs `_' in the builtins namespace for convenience. You can skip this step and do it manually by the equivalent code: import gettext import __builtin__ __builtin__['_'] = gettext.gettext Once you've done this, you probably want to call bindtextdomain() and textdomain() to get the domain set up properly. Again, for convenience, you can pass the domain and localedir to install to set everything up in one fell swoop: import gettext gettext.install('mydomain', '/my/locale/dir') If your program needs to support many languages at the same time, you will want to create Translation objects explicitly, like so: import gettext gettext.install() lang1 = gettext.Translations(open('/path/to/my/lang1/messages.mo')) lang2 = gettext.Translations(open('/path/to/my/lang2/messages.mo')) lang3 = gettext.Translations(open('/path/to/my/lang3/messages.mo')) gettext.set(lang1) # all _() will now translate to language 1 gettext.set(lang2) # all _() will now translate to language 2 Currently, only GNU gettext format binary .mo files are supported. """ # This module represents the integration of work from the following authors: # # Martin von Loewis, who wrote the initial implementation of the underlying # C-based libintlmodule (later renamed _gettext), along with a skeletal # gettext.py implementation. # # Peter Funk, who wrote fintl.py, a fairly complete wrapper around intlmodule, # which also included a pure-Python implementation to read .mo files if # intlmodule wasn't available. # # James Henstridge, who also wrote a gettext.py module, which has some # interesting, but currently unsupported experimental features: the notion of # a Catalog class and instances, and the ability to add to a catalog file via # a Python API. # # Barry Warsaw integrated these modules, wrote the .install() API and code, # and conformed all C and Python code to Python's coding standards. import os import sys import struct from UserDict import UserDict # globals _translations = {} _current_translation = None _current_domain = 'messages' # Domain to directory mapping, for use by bindtextdomain() _localedirs = {} class GNUTranslations(UserDict): # Magic number of .mo files MAGIC = 0x950412de def __init__(self, fp): if fp is None: d = {} else: d = self._parse(fp) UserDict.__init__(self, d) def _parse(self, fp): """Override this method to support alternative .mo formats.""" unpack = struct.unpack filename = getattr(fp, 'name', '') # Parse the .mo file header, which consists of 5 little endian 32 # bit words. catalog = {} buf = fp.read() magic, version, msgcount, masteridx, transidx = unpack( '<5i', buf[:20]) if magic <> self.MAGIC: raise IOError(0, 'Bad magic number', filename) # # Now put all messages from the .mo file buffer into the catalog # dictionary. for i in xrange(0, msgcount): mstart = unpack(' Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv10426 Added Files: test_gettext.py Log Message: Test suite for new gettext.py module. --- NEW FILE --- import os import gettext def get_qualified_path(name): """Return a more qualified path to name""" import sys import os path = sys.path try: path = [os.path.dirname(__file__)] + path except NameError: pass for dir in path: fullname = os.path.join(dir, name) if os.path.exists(fullname): return fullname return name # Test basic interface os.environ['LANGUAGE'] = 'xx' mofile = get_qualified_path('xx') localedir = os.path.dirname(mofile) print 'installing gettext' gettext.install() print _('calling bindtextdomain with localedir %s') % localedir print gettext.bindtextdomain('gettext', localedir) print gettext.bindtextdomain() print gettext.textdomain('gettext') print gettext.textdomain() # test some translations print _(u'mullusk') print _(r'Raymond Luxury Yach-t') print _(ur'nudge nudge') # double quotes print _(u"mullusk") print _(r"Raymond Luxury Yach-t") print _(ur"nudge nudge") # triple single quotes print _(u'''mullusk''') print _(r'''Raymond Luxury Yach-t''') print _(ur'''nudge nudge''') # triple double quotes print _(u"""mullusk""") print _(r"""Raymond Luxury Yach-t""") print _(ur"""nudge nudge""") # multiline strings print _('''This module provides internationalization and localization support for your Python programs by providing an interface to the GNU gettext message catalog library.''') print gettext.dgettext('gettext', 'nudge nudge') # dcgettext ##import locale ##if gettext.dcgettext('gettext', 'nudge nudge', ## locale.LC_MESSAGES) <> 'wink wink': ## print _('dcgettext failed') # test the alternative interface fp = open(os.path.join(mofile, 'LC_MESSAGES', 'gettext.mo'), 'rb') t = gettext.GNUTranslations(fp) fp.close() gettext.set(t) print t == gettext.get() print _('nudge nudge') From python-dev@python.org Fri Aug 25 20:15:02 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:15:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_gettext,NONE,1.1 Message-ID: <200008251915.MAA10517@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv10496 Added Files: test_gettext Log Message: output from test_gettext.py test suite --- NEW FILE --- test_gettext gettext installed calling bindtextdomain with localdir Lib/test calling textdomain From python-dev@python.org Fri Aug 25 20:49:32 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:49:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_gettext,1.1,1.2 Message-ID: <200008251949.MAA13305@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv13297 Modified Files: test_gettext Log Message: updated test output Index: test_gettext =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_gettext,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_gettext 2000/08/25 19:15:00 1.1 --- test_gettext 2000/08/25 19:49:28 1.2 *************** *** 1,4 **** test_gettext ! gettext installed ! calling bindtextdomain with localdir Lib/test ! calling textdomain --- 1,25 ---- test_gettext ! installing gettext ! calling bindtextdomain with localedir . ! . ! None ! gettext ! gettext ! bacon ! Throatwobbler Mangrove ! wink wink ! bacon ! Throatwobbler Mangrove ! wink wink ! bacon ! Throatwobbler Mangrove ! wink wink ! bacon ! Throatwobbler Mangrove ! wink wink ! Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba ! fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH ! trggrkg zrffntr pngnybt yvoenel. ! wink wink ! 1 ! wink wink From python-dev@python.org Fri Aug 25 20:50:41 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:50:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.1,1.2 Message-ID: <200008251950.MAA13409@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv13401 Modified Files: test_gettext.py Log Message: Set this test up so that we don't have to create xx/LC_MESSAGES in the cvs tree. It creates the directory and gettext.mo file on the fly, from the base64 encode binary data. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_gettext.py 2000/08/25 19:14:25 1.1 --- test_gettext.py 2000/08/25 19:50:38 1.2 *************** *** 1,76 **** import os import gettext ! def get_qualified_path(name): ! """Return a more qualified path to name""" ! import sys ! import os ! path = sys.path ! try: ! path = [os.path.dirname(__file__)] + path ! except NameError: ! pass ! for dir in path: ! fullname = os.path.join(dir, name) ! if os.path.exists(fullname): ! return fullname ! return name ! ! # Test basic interface ! os.environ['LANGUAGE'] = 'xx' ! ! mofile = get_qualified_path('xx') ! localedir = os.path.dirname(mofile) ! ! print 'installing gettext' ! gettext.install() ! ! print _('calling bindtextdomain with localedir %s') % localedir ! print gettext.bindtextdomain('gettext', localedir) ! print gettext.bindtextdomain() ! ! print gettext.textdomain('gettext') ! print gettext.textdomain() ! ! # test some translations ! print _(u'mullusk') ! print _(r'Raymond Luxury Yach-t') ! print _(ur'nudge nudge') ! ! # double quotes ! print _(u"mullusk") ! print _(r"Raymond Luxury Yach-t") ! print _(ur"nudge nudge") ! ! # triple single quotes ! print _(u'''mullusk''') ! print _(r'''Raymond Luxury Yach-t''') ! print _(ur'''nudge nudge''') ! ! # triple double quotes ! print _(u"""mullusk""") ! print _(r"""Raymond Luxury Yach-t""") ! print _(ur"""nudge nudge""") ! # multiline strings ! print _('''This module provides internationalization and localization support for your Python programs by providing an interface to the GNU gettext message catalog library.''') ! print gettext.dgettext('gettext', 'nudge nudge') ! # dcgettext ! ##import locale ! ##if gettext.dcgettext('gettext', 'nudge nudge', ! ## locale.LC_MESSAGES) <> 'wink wink': ! ## print _('dcgettext failed') ! ! # test the alternative interface ! fp = open(os.path.join(mofile, 'LC_MESSAGES', 'gettext.mo'), 'rb') ! t = gettext.GNUTranslations(fp) ! fp.close() ! ! gettext.set(t) ! print t == gettext.get() ! ! print _('nudge nudge') --- 1,330 ---- import os + import base64 import gettext ! def test(localedir, mofile): ! # Test basic interface ! os.environ['LANGUAGE'] = 'xx' ! ! print 'installing gettext' ! gettext.install() ! ! print _('calling bindtextdomain with localedir %s') % localedir ! print gettext.bindtextdomain('gettext', localedir) ! print gettext.bindtextdomain() ! ! print gettext.textdomain('gettext') ! print gettext.textdomain() ! ! # test some translations ! print _(u'mullusk') ! print _(r'Raymond Luxury Yach-t') ! print _(ur'nudge nudge') ! ! # double quotes ! print _(u"mullusk") ! print _(r"Raymond Luxury Yach-t") ! print _(ur"nudge nudge") ! ! # triple single quotes ! print _(u'''mullusk''') ! print _(r'''Raymond Luxury Yach-t''') ! print _(ur'''nudge nudge''') ! ! # triple double quotes ! print _(u"""mullusk""") ! print _(r"""Raymond Luxury Yach-t""") ! print _(ur"""nudge nudge""") ! # multiline strings ! print _('''This module provides internationalization and localization support for your Python programs by providing an interface to the GNU gettext message catalog library.''') ! print gettext.dgettext('gettext', 'nudge nudge') ! # dcgettext ! ##import locale ! ##if gettext.dcgettext('gettext', 'nudge nudge', ! ## locale.LC_MESSAGES) <> 'wink wink': ! ## print _('dcgettext failed') ! ! # test the alternative interface ! fp = open(os.path.join(mofile), 'rb') ! t = gettext.GNUTranslations(fp) ! fp.close() ! ! gettext.set(t) ! print t == gettext.get() ! ! print _('nudge nudge') ! ! GNU_MO_DATA = '''\ ! 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB ! AQAACwAAAEkBAAAWAQAAVQEAABYAAABsAgAAoQAAAIMCAAAFAAAAJQMAAAkAAAArAwAAAQAAAAQA ! AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg ! cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv ! ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH ! TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ ! cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiBGcmkgQXVnIDE4IDIwOjQ1 ! OjAzIDIwMDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJyeSBXYXJzYXcgPGJ3YXJzYXdAYmVvcGVuLmNv ! bT4KTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz4KTUlNRS1WZXJzaW9u ! OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWVuCkNvbnRlbnQtVHJhbnNm ! ZXItRW5jb2Rpbmc6IG5vbmUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4xCgBUaHJvYXR3 ! b2JibGVyIE1hbmdyb3ZlAEd1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJh ! IG5hcSB5YnBueXZtbmd2YmEKZmhjY2JlZyBzYmUgbGJoZSBDbGd1YmEgY2VidGVuemYgb2wgY2Vi ! aXZxdmF0IG5hIHZhZ3Jlc25wciBnYiBndXIgVEFICnRyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2 ! b2VuZWwuAGJhY29uAHdpbmsgd2luawA= ! ''' ! ! SOLARIS_MO_DATA = '''\ ! AAAACAAAABEAAAIXAAAB0gAAARD///+d////nQAAAAAAAAAAAAAAAAAAAAIAAAAkAAAAAf///53/ ! //+dAAAAQgAAAAIAAAABAAAABQAAAGgAAAAD////nf///50AAAB0AAAADQAAAAQAAAAGAAAAmAAA ! AA7///+dAAAABwAAAKAAAAAU////nf///50AAAC5AAAAFQAAAAMAAAAMAAAAywAAABb///+d//// ! nQAAANsAAAAXAAAACQAAAAsAAADsAAAAGP///53///+dAAAA/wAAABkAAAAKAAAADgAAAScAAAAa ! ////nf///50AAAFDAAAAGwAAAA0AAAAPAAABXgAAABz///+dAAAAEAAAAgAAAAC+////nf///50A ! AAIWAAAA1XRleHQgZG9tYWluIGRpZG4ndCBnZXQgc2V0IHByb3Blcmx5AHJhdyBzdHJpbmcgdHJh ! bnNsYXRpb24gZmFpbGVkAHJhdyBVbmljb2RlIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbnVk ! Z2UgbnVkZ2UAbXVsdGlsaW5lIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbXVsbHVzawBnb3Qg ! dW5leHBlY3RlZCBsb2NhbGVkaXIAZ2V0dGV4dCBpbnN0YWxsZWQAZGdldHRleHQgZmFpbGVkAGRj ! Z2V0dGV4dCBmYWlsZWQAY2FsbGluZyB0ZXh0ZG9tYWluAGNhbGxpbmcgYmluZHRleHRkb21haW4g ! d2l0aCBsb2NhbGRpciAlcwBiaW5kdGV4dGRvbWFpbihOb25lKSBmYWlsZWQAVW5pY29kZSB0cmFu ! c2xhdGlvbiBmYWlsZWQAVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24g ! YW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZvciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92 ! aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBHTlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGli ! cmFyeS4AUmF5bW9uZCBMdXh1cnkgWWFjaC10AAAAAAB3aW5rIHdpbmsAAGJhY29uAAAAAAAAAAAA ! R3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3Zi ! YQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVz ! bnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AVGhyb2F0d29i ! YmxlciBNYW5ncm92ZQBQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTgpQTy1SZXZp ! c2lvbi1EYXRlOiAyMDAwLTA4LTE4IDIxOjAxLTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBO ! QU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpN ! SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNF ! VApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElORwoA ! ''' ! ! LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') ! MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') ! ! def setup(): ! os.makedirs(LOCALEDIR) ! fp = open(MOFILE, 'w') ! fp.write(base64.decodestring(GNU_MO_DATA)) ! fp.close() ! ! def teardown(): ! os.unlink(MOFILE) ! os.removedirs(LOCALEDIR) ! ! ! ! try: ! setup() ! test('.', MOFILE) ! finally: ! teardown() ! pass ! ! ! ! # For reference, here's the .pot and .po files used to created the .mo data ! # above. The .pot file was generated by pygettext. ! ! # =============================== messages.pot ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" ! ! # =============================== messages.po ! ! ### Dummy translation for Python's test_gettext.py module. ! ### Copyright (C) 2000 BeOpen.com ! ### Barry Warsaw , 2000. ! ### ! ###, fuzzy ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: 2000-08-18 21:01-04:00\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: 2.0\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: Barry Warsaw \n" ! ##"Language-Team: XX \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=en\n" ! ##"Content-Transfer-Encoding: none\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "Throatwobbler Mangrove" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "bacon" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "wink wink" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" ! ##"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" ! ##"trggrkg zrffntr pngnybt yvoenel." ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" From python-dev@python.org Fri Aug 25 20:53:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:53:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.1,1.2 Message-ID: <200008251953.MAA13584@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13575 Modified Files: gettext.py Log Message: Group consensus is that supporting alternative locale categories is useless. So the category argument on _find() is removed, as is the dcgettext() function. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** gettext.py 2000/08/25 19:13:37 1.1 --- gettext.py 2000/08/25 19:53:17 1.2 *************** *** 169,173 **** # Locate a .mo file using the gettext strategy ! def _find(localedir=None, languages=None, category=None, domain=None): global _current_domain global _localedirs --- 169,173 ---- # Locate a .mo file using the gettext strategy ! def _find(localedir=None, languages=None, domain=None): global _current_domain global _localedirs *************** *** 176,181 **** if domain is None: domain = _current_domain - if category is None: - category = 'LC_MESSAGES' if localedir is None: localedir = _localedirs.get( --- 176,179 ---- *************** *** 200,204 **** if lang == 'C': break ! mofile = os.path.join(localedir, lang, category, '%s.mo' % domain) # see if it's in the cache mo = _translations.get(mofile) --- 198,202 ---- if lang == 'C': break ! mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain) # see if it's in the cache mo = _translations.get(mofile) *************** *** 250,270 **** """Like gettext(), but look up message in specified domain.""" return _find(domain=domain).get(message, message) - - - def dcgettext(domain, message, category): - try: - from locale import LC_CTYPE, LC_TIME, LC_COLLATE - from locale import LC_MONETARY, LC_MESSAGES, LC_NUMERIC - except ImportError: - return message - categories = { - LC_CTYPE : 'LC_CTYPE', - LC_TIME : 'LC_TIME', - LC_COLLATE : 'LC_COLLATE', - LC_MONETARY : 'LC_MONETARY', - LC_MESSAGES : 'LC_MESSAGES', - LC_NUMERIC : 'LC_NUMERIC' - } - return _find(domain=domain, category=category).get(message, message) --- 248,251 ---- From python-dev@python.org Fri Aug 25 20:53:53 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 12:53:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.2,1.3 Message-ID: <200008251953.MAA13708@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv13691 Modified Files: test_gettext.py Log Message: Group consensus is that supporting alternative locale categories is useless. So the test of the dcgettext() function is removed. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_gettext.py 2000/08/25 19:50:38 1.2 --- test_gettext.py 2000/08/25 19:53:51 1.3 *************** *** 44,53 **** print gettext.dgettext('gettext', 'nudge nudge') - # dcgettext - ##import locale - ##if gettext.dcgettext('gettext', 'nudge nudge', - ## locale.LC_MESSAGES) <> 'wink wink': - ## print _('dcgettext failed') - # test the alternative interface fp = open(os.path.join(mofile), 'rb') --- 44,47 ---- From python-dev@python.org Fri Aug 25 21:26:45 2000 From: python-dev@python.org (Barry Warsaw) Date: Fri, 25 Aug 2000 13:26:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.2,1.3 Message-ID: <200008252026.NAA25075@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25063 Modified Files: gettext.py Log Message: _expand_lang(), _find(): Added support for unaliasing and expanded the language found in the environment variable, contributed by James Henstridge. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** gettext.py 2000/08/25 19:53:17 1.2 --- gettext.py 2000/08/25 20:26:43 1.3 *************** *** 87,91 **** """ ! # This module represents the integration of work from the following authors: # # Martin von Loewis, who wrote the initial implementation of the underlying --- 87,92 ---- """ ! # This module represents the integration of work, contributions, feedback, and ! # suggestions from the following people: # # Martin von Loewis, who wrote the initial implementation of the underlying *************** *** 122,125 **** --- 123,169 ---- + def _expand_lang(locale): + from locale import normalize + locale = normalize(locale) + COMPONENT_CODESET = 1 << 0 + COMPONENT_TERRITORY = 1 << 1 + COMPONENT_MODIFIER = 1 << 2 + # split up the locale into its base components + mask = 0 + pos = locale.find('@') + if pos >= 0: + modifier = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_MODIFIER + else: + modifier = '' + pos = locale.find('.') + if pos >= 0: + codeset = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_CODESET + else: + codeset = '' + pos = locale.find('_') + if pos >= 0: + territory = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_TERRITORY + else: + territory = '' + language = locale + ret = [] + for i in range(mask+1): + if not (i & ~mask): # if all components for this combo exist ... + val = language + if i & COMPONENT_TERRITORY: val += territory + if i & COMPONENT_CODESET: val += codeset + if i & COMPONENT_MODIFIER: val += modifier + ret.append(val) + ret.reverse() + return ret + + + class GNUTranslations(UserDict): # Magic number of .mo files *************** *** 159,164 **** # # advance to next entry in the seek tables ! masteridx = masteridx + 8 ! transidx = transidx + 8 return catalog --- 203,208 ---- # # advance to next entry in the seek tables ! masteridx += 8 ! transidx += 8 return catalog *************** *** 172,176 **** global _current_domain global _localedirs - # Get some reasonable defaults for arguments that were not supplied if domain is None: --- 216,219 ---- *************** *** 194,197 **** --- 237,246 ---- if 'C' not in languages: languages.append('C') + # now normalize and expand the languages + langdict = {} + for lang in languages: + for nelang in _expand_lang(lang): + langdict[nelang] = nelang + languages = langdict.keys() # select a language for lang in languages: From python-dev@python.org Fri Aug 25 22:00:48 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 14:00:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.107,2.108 Message-ID: <200008252100.OAA28046@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv27965 Modified Files: pythonrun.c Log Message: Fix to [ Bug #111165 ] doc-string removal masked by PYTHONOPTIMIZE Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.107 retrieving revision 2.108 diff -C2 -r2.107 -r2.108 *** pythonrun.c 2000/08/15 16:13:37 2.107 --- pythonrun.c 2000/08/25 21:00:46 2.108 *************** *** 109,117 **** if ((p = getenv("PYTHONDEBUG")) && *p != '\0') ! Py_DebugFlag = 1; if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') ! Py_VerboseFlag = 1; if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0') ! Py_OptimizeFlag = 1; interp = PyInterpreterState_New(); --- 109,117 ---- if ((p = getenv("PYTHONDEBUG")) && *p != '\0') ! Py_DebugFlag = Py_DebugFlag ? Py_DebugFlag : 1; if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') ! Py_VerboseFlag = Py_VerboseFlag ? Py_VerboseFlag : 1; if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0') ! Py_OptimizeFlag = Py_OptimizeFlag ? Py_OptimizeFlag : 1; interp = PyInterpreterState_New(); From python-dev@python.org Fri Aug 25 22:47:58 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 25 Aug 2000 14:47:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_cgi.py,1.1,1.2 Message-ID: <200008252147.OAA08561@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv8221/Lib/test Modified Files: test_cgi.py Log Message: Closing patch #101120 -- After everyone agreed. Index: test_cgi.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_cgi.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_cgi.py 2000/08/03 22:11:42 1.1 --- test_cgi.py 2000/08/25 21:47:56 1.2 *************** *** 117,123 **** assert d == expect, "Error parsing %s" % repr(orig) ! d = {'QUERY_STRING': orig} ! fcd = cgi.FormContentDict(d) ! sd = cgi.SvFormContentDict(d) if type(expect) == type({}): # test dict interface --- 117,124 ---- assert d == expect, "Error parsing %s" % repr(orig) ! env = {'QUERY_STRING': orig} ! fcd = cgi.FormContentDict(env) ! sd = cgi.SvFormContentDict(env) ! fs = cgi.FieldStorage(environ=env) if type(expect) == type({}): # test dict interface *************** *** 126,133 **** --- 127,141 ---- assert norm(expect.values()) == norm(fcd.values()) assert norm(expect.items()) == norm(fcd.items()) + assert fcd.get("nonexistent field", "default") == "default" + assert len(sd) == len(fs) + assert norm(sd.keys()) == norm(fs.keys()) + assert fs.getvalue("nonexistent field", "default") == "default" + # test individual fields for key in expect.keys(): expect_val = expect[key] assert fcd.has_key(key) assert norm(fcd[key]) == norm(expect[key]) + assert fcd.get(key, "default") == fcd[key] + assert fs.has_key(key) if len(expect_val) > 1: single_value = 0 *************** *** 138,144 **** --- 146,154 ---- except IndexError: assert not single_value + assert fs.getvalue(key) == expect_val else: assert single_value assert val == expect_val[0] + assert fs.getvalue(key) == expect_val[0] assert norm(sd.getlist(key)) == norm(expect_val) if single_value: From python-dev@python.org Fri Aug 25 22:47:58 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 25 Aug 2000 14:47:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcgi.tex,1.27,1.28 Message-ID: <200008252147.OAA08563@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv8221/Doc/lib Modified Files: libcgi.tex Log Message: Closing patch #101120 -- After everyone agreed. Index: libcgi.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcgi.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** libcgi.tex 2000/07/16 19:01:09 1.27 --- libcgi.tex 2000/08/25 21:47:55 1.28 *************** *** 46,50 **** \begin{verbatim} ! print "Content-type: text/html" # HTML is following print # blank line, end of headers \end{verbatim} --- 46,50 ---- \begin{verbatim} ! print "Content-Type: text/html" # HTML is following print # blank line, end of headers \end{verbatim} *************** *** 60,66 **** \end{verbatim} - (It may not be fully legal HTML according to the letter of the - standard, but any browser will understand it.) - \subsection{Using the cgi module} \nodename{Using the cgi module} --- 60,63 ---- *************** *** 77,84 **** standard). Since it may consume standard input, it should be instantiated only once. ! The \class{FieldStorage} instance can be accessed as if it were a Python ! dictionary. For instance, the following code (which assumes that the ! \code{content-type} header and blank line have already been printed) checks that the fields \code{name} and \code{addr} are both set to a non-empty string: --- 74,88 ---- standard). Since it may consume standard input, it should be instantiated only once. + + The \class{FieldStorage} instance can be indexed like a Python + dictionary, and also supports the standard dictionary methods + \function{has_key()} and \function{keys()}. + Form fields containing empty strings are ignored + and do not appear in the dictionary; to keep such values, provide + the optional \samp{keep_blank_values} argument when creating the + \class {FieldStorage} instance. ! For instance, the following code (which assumes that the ! \code{Content-Type} header and blank line have already been printed) checks that the fields \code{name} and \code{addr} are both set to a non-empty string: *************** *** 88,97 **** form_ok = 0 if form.has_key("name") and form.has_key("addr"): ! if form["name"].value != "" and form["addr"].value != "": ! form_ok = 1 if not form_ok: print "

    Error

    " print "Please fill in the name and addr fields." return ...further form processing here... \end{verbatim} --- 92,102 ---- form_ok = 0 if form.has_key("name") and form.has_key("addr"): ! form_ok = 1 if not form_ok: print "

    Error

    " print "Please fill in the name and addr fields." return + print "

    name:", form["name"].value + print "

    addr:", form["addr"].value ...further form processing here... \end{verbatim} *************** *** 100,108 **** themselves instances of \class{FieldStorage} (or \class{MiniFieldStorage}, depending on the form encoding). If the submitted form data contains more than one field with the same name, the object retrieved by \samp{form[\var{key}]} is not a \class{FieldStorage} or \class{MiniFieldStorage} ! instance but a list of such instances. If you expect this possibility (i.e., when your HTML form contains multiple fields with the same name), use the \function{type()} function to determine whether you --- 105,119 ---- themselves instances of \class{FieldStorage} (or \class{MiniFieldStorage}, depending on the form encoding). + The \member{value} attribute of the instance yields the string value + of the field. The \function{getvalue()} method returns this string value + directly; it also accepts an optional second argument as a default to + return if the requested key is not present. If the submitted form data contains more than one field with the same name, the object retrieved by \samp{form[\var{key}]} is not a \class{FieldStorage} or \class{MiniFieldStorage} ! instance but a list of such instances. Similarly, in this situation, ! \samp{form.getvalue(\var{key})} would return a list of strings. ! If you expect this possibility (i.e., when your HTML form contains multiple fields with the same name), use the \function{type()} function to determine whether you *************** *** 112,136 **** \begin{verbatim} ! username = form["username"] ! if type(username) is type([]): # Multiple username fields specified ! usernames = "" ! for item in username: ! if usernames: ! # Next item -- insert comma ! usernames = usernames + "," + item.value ! else: ! # First item -- don't insert comma ! usernames = item.value else: ! # Single username field specified ! usernames = username.value \end{verbatim} ! If a field represents an uploaded file, the value attribute reads the entire file in memory as a string. This may not be what you want. ! You can test for an uploaded file by testing either the filename ! attribute or the file attribute. You can then read the data at ! leisure from the file attribute: \begin{verbatim} --- 123,141 ---- \begin{verbatim} ! value = form.getvalue("username", "") ! if type(value) is type([]): # Multiple username fields specified ! usernames = ",".join(value) else: ! # Single or no username field specified ! usernames = value \end{verbatim} ! If a field represents an uploaded file, accessing the value via the ! \member{value} attribute or the \function{getvalue()} method reads the entire file in memory as a string. This may not be what you want. ! You can test for an uploaded file by testing either the \member{filename} ! attribute or the \member{file} attribute. You can then read the data at ! leisure from the \member{file} attribute: \begin{verbatim} *************** *** 158,162 **** \mimetype{application/x-www-form-urlencoded}), the items will actually be instances of the class \class{MiniFieldStorage}. In this case, the ! list, file and filename attributes are always \code{None}. --- 163,168 ---- \mimetype{application/x-www-form-urlencoded}), the items will actually be instances of the class \class{MiniFieldStorage}. In this case, the ! \member{list}, \member{file}, and \member{filename} attributes are ! always \code{None}. *************** *** 234,239 **** Parse input of type \mimetype{multipart/form-data} (for file uploads). Arguments are \var{fp} for the input file and ! \var{pdict} for the dictionary containing other parameters of ! \code{content-type} header Returns a dictionary just like \function{parse_qs()} keys are the --- 240,245 ---- Parse input of type \mimetype{multipart/form-data} (for file uploads). Arguments are \var{fp} for the input file and ! \var{pdict} for a dictionary containing other parameters in ! the \code{Content-Type} header. Returns a dictionary just like \function{parse_qs()} keys are the *************** *** 241,246 **** easy to use but not much good if you are expecting megabytes to be uploaded --- in that case, use the \class{FieldStorage} class instead ! which is much more flexible. Note that \code{content-type} is the ! raw, unparsed contents of the \code{content-type} header. Note that this does not parse nested multipart parts --- use --- 247,251 ---- easy to use but not much good if you are expecting megabytes to be uploaded --- in that case, use the \class{FieldStorage} class instead ! which is much more flexible. Note that this does not parse nested multipart parts --- use *************** *** 249,254 **** \begin{funcdesc}{parse_header}{string} ! Parse a header like \code{content-type} into a main ! content-type and a dictionary of parameters. \end{funcdesc} --- 254,259 ---- \begin{funcdesc}{parse_header}{string} ! Parse a MIME header (such as \code{Content-Type}) into a main ! value and a dictionary of parameters. \end{funcdesc} *************** *** 433,437 **** import sys import traceback ! print "Content-type: text/html" print sys.stderr = sys.stdout --- 438,442 ---- import sys import traceback ! print "Content-Type: text/html" print sys.stderr = sys.stdout *************** *** 455,459 **** import sys sys.stderr = sys.stdout ! print "Content-type: text/plain" print ...your code here... --- 460,464 ---- import sys sys.stderr = sys.stdout ! print "Content-Type: text/plain" print ...your code here... From python-dev@python.org Fri Aug 25 22:47:58 2000 From: python-dev@python.org (Moshe Zadka) Date: Fri, 25 Aug 2000 14:47:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib cgi.py,1.49,1.50 Message-ID: <200008252147.OAA08554@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv8221/Lib Modified Files: cgi.py Log Message: Closing patch #101120 -- After everyone agreed. Index: cgi.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/cgi.py,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -r1.49 -r1.50 *** cgi.py 2000/08/03 20:57:44 1.49 --- cgi.py 2000/08/25 21:47:55 1.50 *************** *** 20,24 **** # ! __version__ = "2.2" --- 20,24 ---- # ! __version__ = "2.3" *************** *** 32,35 **** --- 32,36 ---- import mimetools import rfc822 + import UserDict from StringIO import StringIO *************** *** 167,175 **** dict = {} for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): ! if len(value) or keep_blank_values: ! if dict.has_key(name): ! dict[name].append(value) ! else: ! dict[name] = [value] return dict --- 168,175 ---- dict = {} for name, value in parse_qsl(qs, keep_blank_values, strict_parsing): ! if dict.has_key(name): ! dict[name].append(value) ! else: ! dict[name] = [value] return dict *************** *** 202,208 **** raise ValueError, "bad query field: %s" % `name_value` continue ! name = urllib.unquote(string.replace(nv[0], '+', ' ')) ! value = urllib.unquote(string.replace(nv[1], '+', ' ')) ! r.append((name, value)) return r --- 202,209 ---- raise ValueError, "bad query field: %s" % `name_value` continue ! if len(nv[1]) or keep_blank_values: ! name = urllib.unquote(string.replace(nv[0], '+', ' ')) ! value = urllib.unquote(string.replace(nv[1], '+', ' ')) ! r.append((name, value)) return r *************** *** 538,541 **** --- 539,553 ---- return found + def getvalue(self, key, default=None): + """Dictionary style get() method, including 'value' lookup.""" + if self.has_key(key): + value = self[key] + if type(value) is type([]): + return map(lambda v: v.value, value) + else: + return value.value + else: + return default + def keys(self): """Dictionary style keys() method.""" *************** *** 707,711 **** # =============================== ! class FormContentDict: """Basic (multiple values per field) form content as dictionary. --- 719,723 ---- # =============================== ! class FormContentDict(UserDict.UserDict): """Basic (multiple values per field) form content as dictionary. *************** *** 721,738 **** """ def __init__(self, environ=os.environ): ! self.dict = parse(environ=environ) self.query_string = environ['QUERY_STRING'] - def __getitem__(self,key): - return self.dict[key] - def keys(self): - return self.dict.keys() - def has_key(self, key): - return self.dict.has_key(key) - def values(self): - return self.dict.values() - def items(self): - return self.dict.items() - def __len__( self ): - return len(self.dict) --- 733,738 ---- """ def __init__(self, environ=os.environ): ! self.dict = self.data = parse(environ=environ) self.query_string = environ['QUERY_STRING'] From python-dev@python.org Fri Aug 25 23:37:33 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:37:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_file.py,NONE,1.1 Message-ID: <200008252237.PAA20408@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20349/Lib/test Added Files: test_file.py Log Message: New test suite for file objects by Jeremy Hilton. This will need to be extended somewhat -- right now it only tests the .writelines() method. --- NEW FILE --- from test_support import TESTFN from UserList import UserList # verify writelines with instance sequence l = UserList(['1', '2']) f = open(TESTFN, 'wb') f.writelines(l) f.close() f = open(TESTFN, 'rb') buf = f.read() f.close() assert buf == '12' # verify writelines with integers f = open(TESTFN, 'wb') try: f.writelines([1, 2, 3]) except TypeError: pass else: print "writelines accepted sequence of integers" f.close() # verify writelines with integers in UserList f = open(TESTFN, 'wb') l = UserList([1,2,3]) try: f.writelines(l) except TypeError: pass else: print "writelines accepted sequence of integers" f.close() # verify writelines with non-string object class NonString: pass f = open(TESTFN, 'wb') try: f.writelines([NonString(), NonString()]) except TypeError: pass else: print "writelines accepted sequence of non-string objects" f.close() From python-dev@python.org Fri Aug 25 23:37:53 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:37:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_file,NONE,1.1 Message-ID: <200008252237.PAA20751@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv20700/Lib/test/output Added Files: test_file Log Message: Output of the new test --- NEW FILE --- test_file From python-dev@python.org Fri Aug 25 23:39:53 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:39:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.83,2.84 Message-ID: <200008252239.PAA22850@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv22692/Objects Modified Files: fileobject.c Log Message: Fix to bug [ Bug #111860 ] file.writelines() crashes. file.writelines() now tries to emulate the behaviour of file.write() as closely as possible. Due to the problems with releasing the interpreter lock the solution isn't exactly optimal, but still better than not supporting the file.write() semantics at all. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.83 retrieving revision 2.84 diff -C2 -r2.83 -r2.84 *** fileobject.c 2000/08/22 21:51:22 2.83 --- fileobject.c 2000/08/25 22:39:50 2.84 *************** *** 981,986 **** if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) ! { PyErr_Clear(); break; --- 981,985 ---- if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) { PyErr_Clear(); break; *************** *** 990,999 **** goto error; } - if (!PyString_Check(line)) { - Py_DECREF(line); - PyErr_SetString(PyExc_TypeError, - "writelines() requires sequences of strings"); - goto error; - } PyList_SetItem(list, j, line); } --- 989,992 ---- *************** *** 1002,1010 **** break; Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), --- 995,1035 ---- break; + /* Check that all entries are indeed strings. If not, + apply the same rules as for file.write() and + convert the results to strings. This is slow, but + seems to be the only way since all conversion APIs + could potentially execute Python code. */ + for (i = 0; i < j; i++) { + PyObject *v = PyList_GET_ITEM(list, i); + if (!PyString_Check(v)) { + const char *buffer; + int len; + if (((f->f_binary && + PyObject_AsReadBuffer(v, + (const void**)&buffer, + &len)) || + PyObject_AsCharBuffer(v, + &buffer, + &len))) { + PyErr_SetString(PyExc_TypeError, + "writelines() requires sequences of strings"); + goto error; + } + line = PyString_FromStringAndSize(buffer, + len); + if (line == NULL) + goto error; + Py_DECREF(v); + PyList_SET_ITEM(list, i, v); + } + } + + /* Since we are releasing the global lock, the + following code may *not* execute Python code. */ Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), From python-dev@python.org Fri Aug 25 23:42:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 15:42:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_parser,1.1,1.2 Message-ID: <200008252242.PAA25744@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv25671/Lib/test/output Modified Files: test_parser Log Message: Update the parser module to support augmented assignment. Add some test cases. Index: test_parser =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_parser,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_parser 2000/08/21 22:30:53 1.1 --- test_parser 2000/08/25 22:42:40 1.2 *************** *** 1,27 **** test_parser Expressions: ! foo(1) ! [1, 2, 3] ! [x**3 for x in range(20)] ! [x**3 for x in range(20) if x % 3] ! foo(*args) ! foo(*args, **kw) ! foo(**kw) ! foo(key=value) ! foo(key=value, *args) ! foo(key=value, *args, **kw) ! foo(key=value, **kw) ! foo(a, b, c, *args) ! foo(a, b, c, *args, **kw) ! foo(a, b, c, **kw) ! foo + bar Statements: ! print ! print 1 ! print 1, ! print >>fp ! print >>fp, 1 ! print >>fp, 1, Invalid parse trees: --- 1,41 ---- test_parser Expressions: ! expr: foo(1) ! expr: [1, 2, 3] ! expr: [x**3 for x in range(20)] ! expr: [x**3 for x in range(20) if x % 3] ! expr: foo(*args) ! expr: foo(*args, **kw) ! expr: foo(**kw) ! expr: foo(key=value) ! expr: foo(key=value, *args) ! expr: foo(key=value, *args, **kw) ! expr: foo(key=value, **kw) ! expr: foo(a, b, c, *args) ! expr: foo(a, b, c, *args, **kw) ! expr: foo(a, b, c, **kw) ! expr: foo + bar Statements: ! suite: print ! suite: print 1 ! suite: print 1, ! suite: print >>fp ! suite: print >>fp, 1 ! suite: print >>fp, 1, ! suite: a ! suite: a = b ! suite: a = b = c = d = e ! suite: a += b ! suite: a -= b ! suite: a *= b ! suite: a /= b ! suite: a %= b ! suite: a &= b ! suite: a |= b ! suite: a ^= b ! suite: a <<= b ! suite: a >>= b ! suite: a **= b Invalid parse trees: *************** *** 34,36 **** --- 48,53 ---- a,,c + caught expected exception for invalid tree + + a $= b caught expected exception for invalid tree From python-dev@python.org Fri Aug 25 23:42:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 15:42:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_parser.py,1.1,1.2 Message-ID: <200008252242.PAA25743@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv25671/Lib/test Modified Files: test_parser.py Log Message: Update the parser module to support augmented assignment. Add some test cases. Index: test_parser.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_parser.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_parser.py 2000/08/21 22:30:52 1.1 --- test_parser.py 2000/08/25 22:42:40 1.2 *************** *** 1,2 **** --- 1,3 ---- + import os.path import parser import pprint *************** *** 13,48 **** def roundtrip(f, s): - print s st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) print "Expressions:" ! roundtrip(expr, "foo(1)") ! roundtrip(expr, "[1, 2, 3]") ! roundtrip(expr, "[x**3 for x in range(20)]") ! roundtrip(expr, "[x**3 for x in range(20) if x % 3]") ! roundtrip(expr, "foo(*args)") ! roundtrip(expr, "foo(*args, **kw)") ! roundtrip(expr, "foo(**kw)") ! roundtrip(expr, "foo(key=value)") ! roundtrip(expr, "foo(key=value, *args)") ! roundtrip(expr, "foo(key=value, *args, **kw)") ! roundtrip(expr, "foo(key=value, **kw)") ! roundtrip(expr, "foo(a, b, c, *args)") ! roundtrip(expr, "foo(a, b, c, *args, **kw)") ! roundtrip(expr, "foo(a, b, c, **kw)") ! roundtrip(expr, "foo + bar") print print "Statements:" ! roundtrip(suite, "print") ! roundtrip(suite, "print 1") ! roundtrip(suite, "print 1,") ! roundtrip(suite, "print >>fp") ! roundtrip(suite, "print >>fp, 1") ! roundtrip(suite, "print >>fp, 1,") # --- 14,79 ---- def roundtrip(f, s): st1 = f(s) t = st1.totuple() st2 = parser.sequence2ast(t) + def roundtrip_fromfile(filename): + roundtrip(suite, open(filename).read()) + def test_expr(s): + print "expr:", s + roundtrip(expr, s) + + def test_suite(s): + print "suite:", s + roundtrip(suite, s) + + print "Expressions:" ! test_expr("foo(1)") ! test_expr("[1, 2, 3]") ! test_expr("[x**3 for x in range(20)]") ! test_expr("[x**3 for x in range(20) if x % 3]") ! test_expr("foo(*args)") ! test_expr("foo(*args, **kw)") ! test_expr("foo(**kw)") ! test_expr("foo(key=value)") ! test_expr("foo(key=value, *args)") ! test_expr("foo(key=value, *args, **kw)") ! test_expr("foo(key=value, **kw)") ! test_expr("foo(a, b, c, *args)") ! test_expr("foo(a, b, c, *args, **kw)") ! test_expr("foo(a, b, c, **kw)") ! test_expr("foo + bar") print print "Statements:" ! test_suite("print") ! test_suite("print 1") ! test_suite("print 1,") ! test_suite("print >>fp") ! test_suite("print >>fp, 1") ! test_suite("print >>fp, 1,") ! ! # expr_stmt ! test_suite("a") ! test_suite("a = b") ! test_suite("a = b = c = d = e") ! test_suite("a += b") ! test_suite("a -= b") ! test_suite("a *= b") ! test_suite("a /= b") ! test_suite("a %= b") ! test_suite("a &= b") ! test_suite("a |= b") ! test_suite("a ^= b") ! test_suite("a <<= b") ! test_suite("a >>= b") ! test_suite("a **= b") ! ! #d = os.path.dirname(os.__file__) ! #roundtrip_fromfile(os.path.join(d, "os.py")) ! #roundtrip_fromfile(os.path.join(d, "test", "test_parser.py")) # *************** *** 115,116 **** --- 146,178 ---- check_bad_tree(tree, "a,,c") + + # a $= b + tree = \ + (257, + (264, + (265, + (266, + (267, + (312, + (291, + (292, + (293, + (294, + (296, + (297, + (298, + (299, (300, (301, (302, (303, (304, (1, 'a'))))))))))))))), + (268, (37, '$=')), + (312, + (291, + (292, + (293, + (294, + (296, + (297, + (298, + (299, (300, (301, (302, (303, (304, (1, 'b'))))))))))))))))), + (4, ''))), + (0, '')) + + check_bad_tree(tree, "a $= b") From python-dev@python.org Fri Aug 25 23:42:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Fri, 25 Aug 2000 15:42:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.52,2.53 Message-ID: <200008252242.PAA25733@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv25671/Modules Modified Files: parsermodule.c Log Message: Update the parser module to support augmented assignment. Add some test cases. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.52 retrieving revision 2.53 diff -C2 -r2.52 -r2.53 *** parsermodule.c 2000/08/23 15:35:26 2.52 --- parsermodule.c 2000/08/25 22:42:40 2.53 *************** *** 1468,1475 **** && validate_testlist(CHILD(tree, 0))); ! for (j = 1; res && (j < nch); j += 2) ! res = (validate_equal(CHILD(tree, j)) ! && validate_testlist(CHILD(tree, j + 1))); return (res); } --- 1468,1499 ---- && validate_testlist(CHILD(tree, 0))); ! if (res && nch == 3 ! && TYPE(CHILD(tree, 1)) == augassign) { ! res = (validate_numnodes(CHILD(tree, 1), 1, "augassign") ! && validate_testlist(CHILD(tree, 2))); + if (res) { + char *s = STR(CHILD(CHILD(tree, 1), 0)); + + res = (strcmp(s, "+=") == 0 + || strcmp(s, "-=") == 0 + || strcmp(s, "*=") == 0 + || strcmp(s, "/=") == 0 + || strcmp(s, "%=") == 0 + || strcmp(s, "&=") == 0 + || strcmp(s, "|=") == 0 + || strcmp(s, "^=") == 0 + || strcmp(s, "<<=") == 0 + || strcmp(s, ">>=") == 0 + || strcmp(s, "**=") == 0); + if (!res) + err_string("illegal augmmented assignment operator"); + } + } + else { + for (j = 1; res && (j < nch); j += 2) + res = (validate_equal(CHILD(tree, j)) + && validate_testlist(CHILD(tree, j + 1))); + } return (res); } *************** *** 2823,2829 **** DL_EXPORT(void) initparser(void) ! { PyObject* module; PyObject* dict; --- 2847,2855 ---- + DL_IMPORT(void) initparser(void); + DL_EXPORT(void) initparser(void) ! { PyObject* module; PyObject* dict; *************** *** 2835,2840 **** if (parser_error == 0) parser_error = PyErr_NewException("parser.ParserError", NULL, NULL); - else - puts("parser module initialized more than once!"); if ((parser_error == 0) --- 2861,2864 ---- From python-dev@python.org Fri Aug 25 23:49:07 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Fri, 25 Aug 2000 15:49:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.84,2.85 Message-ID: <200008252249.PAA32049@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv31955/Objects Modified Files: fileobject.c Log Message: Fixed a serious typo. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.84 retrieving revision 2.85 diff -C2 -r2.84 -r2.85 *** fileobject.c 2000/08/25 22:39:50 2.84 --- fileobject.c 2000/08/25 22:49:05 2.85 *************** *** 1021,1025 **** goto error; Py_DECREF(v); ! PyList_SET_ITEM(list, i, v); } } --- 1021,1025 ---- goto error; Py_DECREF(v); ! PyList_SET_ITEM(list, i, line); } } From python-dev@python.org Sat Aug 26 03:21:58 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:21:58 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_ext.py,1.60,1.61 Message-ID: <200008260221.TAA02695@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv2593 Modified Files: build_ext.py Log Message: In 'check_extensions_list()': when converting old-style 'buildinfo' dict, don't assign None to any attributes of the Extension object. Index: build_ext.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_ext.py,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -r1.60 -r1.61 *** build_ext.py 2000/08/13 00:42:35 1.60 --- build_ext.py 2000/08/26 02:21:55 1.61 *************** *** 279,283 **** 'extra_compile_args', 'extra_link_args'): ! setattr(ext, key, build_info.get(key)) # Medium-easy stuff: same syntax/semantics, different names. --- 279,285 ---- 'extra_compile_args', 'extra_link_args'): ! val = build_info.get(key) ! if val is not None: ! setattr(ext, key, val) # Medium-easy stuff: same syntax/semantics, different names. From python-dev@python.org Sat Aug 26 03:37:10 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:37:10 -0700 Subject: [Python-checkins] CVS: distutils/distutils __init__.py,1.10,1.11 Message-ID: <200008260237.TAA17503@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv17429/distutils Modified Files: __init__.py Log Message: Bumped version to 0.9.2pre. Index: __init__.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/__init__.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** __init__.py 2000/08/15 13:14:27 1.10 --- __init__.py 2000/08/26 02:37:07 1.11 *************** *** 11,13 **** __revision__ = "$Id$" ! __version__ = "0.9.1" --- 11,13 ---- __revision__ = "$Id$" ! __version__ = "0.9.2pre" From python-dev@python.org Sat Aug 26 03:37:10 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:37:10 -0700 Subject: [Python-checkins] CVS: distutils setup.py,1.19,1.20 Message-ID: <200008260237.TAA17497@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv17429 Modified Files: setup.py Log Message: Bumped version to 0.9.2pre. Index: setup.py =================================================================== RCS file: /cvsroot/python/distutils/setup.py,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -r1.19 -r1.20 *** setup.py 2000/08/15 13:14:27 1.19 --- setup.py 2000/08/26 02:37:06 1.20 *************** *** 12,16 **** setup (name = "Distutils", ! version = "0.9.1", description = "Python Distribution Utilities", author = "Greg Ward", --- 12,16 ---- setup (name = "Distutils", ! version = "0.9.2pre", description = "Python Distribution Utilities", author = "Greg Ward", From python-dev@python.org Sat Aug 26 03:40:18 2000 From: python-dev@python.org (Greg Ward) Date: Fri, 25 Aug 2000 19:40:18 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command bdist_wininst.py,1.5,1.6 Message-ID: <200008260240.TAA20030@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv19394/distutils/command Modified Files: bdist_wininst.py Log Message: New release of the Windows installer from Thomas Heller. The known bug (bogus error message when an empty file is extracted) is fixed. Other changes: - The target-compile and target-optimize flags of bdist_wininst are gone. It is no longer possible to compile the python files during installation. - The zlib module is no longer required or used by bdist_wininst. - I moved the decompression/extraction code into a separate file (extract.c). - The installer stub is now compressed by UPX (see http://upx.tsx.org/). This reduces the size of the exe (and thus the overhead of the final installer program) from 40 kB to 16 kB. - The installer displays a more uptodate user wizard-like user interface, also containing a graphic: Just's Python Powered logo. (I could not convince myself to use one of the BeOpen logos). - The installation progress bar now moves correctly. Index: bdist_wininst.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/bdist_wininst.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** bdist_wininst.py 2000/08/05 01:31:54 1.5 --- bdist_wininst.py 2000/08/26 02:40:10 1.6 *************** *** 1,450 **** ! """distutils.command.bdist_wininst ! ! Implements the Distutils 'bdist_wininst' command: create a windows installer ! exe-program.""" ! ! # created 2000/06/02, Thomas Heller ! ! __revision__ = "$Id$" ! ! import sys, os, string ! from distutils.core import Command ! from distutils.util import get_platform ! from distutils.dir_util import create_tree, remove_tree ! from distutils.errors import * ! ! class bdist_wininst (Command): ! ! description = "create an executable installer for MS Windows" ! ! user_options = [('bdist-dir=', 'd', ! "temporary directory for creating the distribution"), ! ('keep-tree', 'k', ! "keep the pseudo-installation tree around after " + ! "creating the distribution archive"), ! ('target-compile', 'c', ! "compile to .pyc on the target system"), ! ('target-optimize', 'o', ! "compile to .pyo on the target system"), ! ('target-version=', 'v', ! "require a specific python version" + ! " on the target system (1.5 or 1.6/2.0)"), ! ('dist-dir=', 'd', ! "directory to put final built distributions in"), ! ] ! ! def initialize_options (self): ! self.bdist_dir = None ! self.keep_tree = 0 ! self.target_compile = 0 ! self.target_optimize = 0 ! self.target_version = None ! self.dist_dir = None ! ! # initialize_options() ! ! ! def finalize_options (self): ! if self.bdist_dir is None: ! bdist_base = self.get_finalized_command('bdist').bdist_base ! self.bdist_dir = os.path.join(bdist_base, 'wininst') ! if not self.target_version: ! self.target_version = "" ! else: ! if not self.target_version in ("1.5", "1.6", "2.0"): ! raise DistutilsOptionError ( ! "target version must be 1.5, 1.6, or 2.0") ! if self.distribution.has_ext_modules(): ! short_version = sys.version[:3] ! if self.target_version and self.target_version != short_version: ! raise DistutilsOptionError ("target version can only be" + ! short_version) ! self.target_version = short_version ! ! self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) ! ! # finalize_options() ! ! ! def run (self): ! ! self.run_command ('build') ! ! install = self.reinitialize_command('install') ! install.root = self.bdist_dir ! ! install_lib = self.reinitialize_command('install_lib') ! install_lib.compile = 0 ! install_lib.optimize = 0 ! ! # The packager can choose if .pyc and .pyo files should be created ! # on the TARGET system instead at the SOURCE system. ! ! ## # The compilation can only be done on the SOURCE system for one ! ## # python version (assuming 1.6/2.0 and 1.5 have incompatible ! ## # byte-codes). ! ## short_version = sys.version[:3] ! ## if self.target_version == short_version: ! ## if not self.target_compile: ! ## install_lib.compile = 1 ! ## if not self.target_optimize: ! ## install_lib.optimize = 1 ! ! install_lib.ensure_finalized() ! ! self.announce ("installing to %s" % self.bdist_dir) ! install.ensure_finalized() ! install.run() ! ! # And make an archive relative to the root of the ! # pseudo-installation tree. ! fullname = self.distribution.get_fullname() ! archive_basename = os.path.join(self.bdist_dir, ! "%s.win32" % fullname) ! ! # XXX hack! Our archive MUST be relative to sys.prefix ! # XXX What about .install_data, .install_scripts, ...? ! # [Perhaps require that all installation dirs be under sys.prefix ! # on Windows? this will be acceptable until we start dealing ! # with Python applications, at which point we should zip up ! # the application directory -- and again everything can be ! # under one dir --GPW] ! root_dir = install.install_lib ! arcname = self.make_archive (archive_basename, "zip", ! root_dir=root_dir) ! self.create_exe (arcname, fullname) ! ! if not self.keep_tree: ! remove_tree (self.bdist_dir, self.verbose, self.dry_run) ! ! # run() ! ! def create_inifile (self): ! # Create an inifile containing data describing the installation. ! # This could be done without creating a real file, but ! # a file is (at least) useful for debugging bdist_wininst. ! ! metadata = self.distribution.metadata ! ini_name = "%s.ini" % metadata.get_fullname() ! ! self.announce ("creating %s" % ini_name) ! inifile = open (ini_name, "w") ! ! # Write the [metadata] section. Values are written with ! # repr()[1:-1], so they do not contain unprintable characters, and ! # are not surrounded by quote chars. ! inifile.write ("[metadata]\n") ! ! # 'info' will be displayed in the installer's dialog box, ! # describing the items to be installed. ! info = metadata.long_description + '\n' ! ! for name in dir (metadata): ! if (name != 'long_description'): ! data = getattr (metadata, name) ! if data: ! info = info + ("\n %s: %s" % \ ! (string.capitalize (name), data)) ! inifile.write ("%s=%s\n" % (name, repr (data)[1:-1])) ! ! # The [setup] section contains entries controlling ! # the installer runtime. ! inifile.write ("\n[Setup]\n") ! inifile.write ("info=%s\n" % repr (info)[1:-1]) ! inifile.write ("pthname=%s.%s\n" % (metadata.name, metadata.version)) ! inifile.write ("pyc_compile=%d\n" % self.target_compile) ! inifile.write ("pyo_compile=%d\n" % self.target_optimize) ! if self.target_version: ! vers_minor = string.split (self.target_version, '.')[1] ! inifile.write ("vers_minor=%s\n" % vers_minor) ! ! title = self.distribution.get_fullname() ! inifile.write ("title=%s\n" % repr (title)[1:-1]) ! inifile.close() ! return ini_name ! ! # create_inifile() ! ! def create_exe (self, arcname, fullname): ! import struct, zlib ! ! cfgdata = open (self.create_inifile()).read() ! ! comp_method = zlib.DEFLATED ! co = zlib.compressobj (zlib.Z_DEFAULT_COMPRESSION, comp_method, -15) ! zcfgdata = co.compress (cfgdata) + co.flush() ! ! installer_name = os.path.join(self.dist_dir, ! "%s.win32.exe" % fullname) ! self.announce ("creating %s" % installer_name) ! ! file = open (installer_name, "wb") ! file.write (self.get_exe_bytes ()) ! file.write (zcfgdata) ! crc32 = zlib.crc32 (cfgdata) ! header = struct.pack (" Update of /cvsroot/python/distutils/misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv19394/misc Modified Files: install.c install.rc resource.h wininst.dsp wininst.dsw Added Files: PythonPowered.bmp archive.h extract.c wininst.exe Log Message: New release of the Windows installer from Thomas Heller. The known bug (bogus error message when an empty file is extracted) is fixed. Other changes: - The target-compile and target-optimize flags of bdist_wininst are gone. It is no longer possible to compile the python files during installation. - The zlib module is no longer required or used by bdist_wininst. - I moved the decompression/extraction code into a separate file (extract.c). - The installer stub is now compressed by UPX (see http://upx.tsx.org/). This reduces the size of the exe (and thus the overhead of the final installer program) from 40 kB to 16 kB. - The installer displays a more uptodate user wizard-like user interface, also containing a graphic: Just's Python Powered logo. (I could not convince myself to use one of the BeOpen logos). - The installation progress bar now moves correctly. --- NEW FILE --- BM --- NEW FILE --- #pragma pack(1) /* zip-archive headers * See: http://www.pkware.com/appnote.html */ struct eof_cdir { long tag; /* must be 0x06054b50 */ short disknum; short firstdisk; short nTotalCDirThis; short nTotalCDir; long nBytesCDir; long ofsCDir; short commentlen; }; struct cdir { long tag; /* must be 0x02014b50 */ short version_made; short version_extract; short gp_bitflag; short comp_method; short last_mod_file_time; short last_mod_file_date; long crc32; long comp_size; long uncomp_size; short fname_length; short extra_length; short comment_length; short disknum_start; short int_file_attr; long ext_file_attr; long ofs_local_header; }; struct fhdr { long tag; /* must be 0x04034b50 */ short version_needed; short flags; short method; short last_mod_file_time; short last_mod_file_date; long crc32; long comp_size; long uncomp_size; short fname_length; short extra_length; }; struct meta_data_hdr { int tag; int uncomp_size; }; #pragma pack() typedef int (*NOTIFYPROC)(int code, LPSTR text, ...); extern BOOL extract_file (char *dst, struct fhdr *phdr, char *src, NOTIFYPROC callback); extern BOOL unzip_archive (char *dirname, char *data, DWORD size, NOTIFYPROC callback); extern char *map_new_file (DWORD flags, char *filename, char *pathname_part, struct fhdr *pfhdr, NOTIFYPROC callback); extern BOOL ensure_directory (char *pathname, char *new_part, NOTIFYPROC callback); #define DIR_CREATED 1 #define CAN_OVERWRITE 2 #define FILE_CREATED 3 #define ZLIB_ERROR 4 #define SYSTEM_ERROR 5 #define NUM_FILES 6 #define FILE_OVERWRITTEN 7 --- NEW FILE --- #include #include #include #include "resource.h" #define ZLIB_DLL #include "zlib/zlib.h" #include #include #include "archive.h" /* Convert unix-path to dos-path */ static void fixpath (char *path) { while (path && *path) { if (*path == '/') *path = '\\'; ++path; } } BOOL ensure_directory (char *pathname, char *new_part, NOTIFYPROC notify) { while (new_part && *new_part && (new_part = strchr (new_part, '\\'))) { DWORD attr; *new_part = '\0'; attr = GetFileAttributes (pathname); if (attr == -1) { /* nothing found */ if (!CreateDirectory (pathname, NULL) && notify) notify (SYSTEM_ERROR, "CreateDirectory (%s)", pathname); } if (attr & FILE_ATTRIBUTE_DIRECTORY) { ; } else { SetLastError (183); if (notify) notify (SYSTEM_ERROR, "CreateDirectory (%s)", pathname); } *new_part = '\\'; ++new_part; } return TRUE; } /* XXX Should better explicitely specify * uncomp_size and file_times instead of pfhdr! */ char *map_new_file (DWORD flags, char *filename, char *pathname_part, struct fhdr *pfhdr, NOTIFYPROC notify) { HANDLE hFile, hFileMapping; char *dst; int size = pfhdr->uncomp_size; FILETIME ft; try_again: if (!flags) flags = CREATE_NEW; hFile = CreateFile (filename, GENERIC_WRITE | GENERIC_READ, 0, NULL, flags, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { DWORD x = GetLastError(); switch (x) { case ERROR_FILE_EXISTS: if (notify && notify (CAN_OVERWRITE, filename)) hFile = CreateFile (filename, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); else { if (notify) notify (FILE_OVERWRITTEN, filename); return NULL; } break; case ERROR_PATH_NOT_FOUND: if (ensure_directory (filename, pathname_part, notify)) goto try_again; else return FALSE; break; default: SetLastError (x); break; } } if (hFile == INVALID_HANDLE_VALUE) { if (notify) notify (SYSTEM_ERROR, "CreateFile (%s)", filename); return NULL; } if (notify) notify (FILE_CREATED, filename); DosDateTimeToFileTime (pfhdr->last_mod_file_date, pfhdr->last_mod_file_time, &ft); SetFileTime (hFile, &ft, &ft, &ft); if (size == 0) { /* We cannot map a zero-length file (Also it makes no sense */ CloseHandle (hFile); return NULL; } hFileMapping = CreateFileMapping (hFile, NULL, PAGE_READWRITE, 0, size, NULL); CloseHandle (hFile); if (hFileMapping == INVALID_HANDLE_VALUE) { if (notify) notify (SYSTEM_ERROR, "CreateFileMapping (%s)", filename); return NULL; } dst = MapViewOfFile (hFileMapping, FILE_MAP_WRITE, 0, 0, 0); CloseHandle (hFileMapping); if (!dst) { if (notify) notify (SYSTEM_ERROR, "MapViewOfFile (%s)", filename); return NULL; } return dst; } BOOL extract_file (char *dst, struct fhdr *phdr, char *src, NOTIFYPROC notify) { z_stream zstream; int result; if (phdr->method == Z_DEFLATED) { int x; long crc = 0; memset (&zstream, 0, sizeof (zstream)); zstream.next_in = src; zstream.avail_in = phdr->comp_size+1; zstream.next_out = dst; zstream.avail_out = phdr->uncomp_size; /* Apparently an undocumented feature of zlib: Set windowsize to negative values to supress the gzip header and be compatible with zip! */ result = TRUE; if (Z_OK != (x = inflateInit2(&zstream, -15))) { if (notify) notify (ZLIB_ERROR, "inflateInit2 returns %d", x); result = FALSE; goto cleanup; } if (Z_STREAM_END != (x = inflate(&zstream, Z_FINISH))) { if (notify) notify (ZLIB_ERROR, "inflate returns %d", x); result = FALSE; } cleanup: if (Z_OK != (x = inflateEnd(&zstream))) { if (notify) notify (ZLIB_ERROR, "inflateEnd returns %d", x); result = FALSE; } } else if (phdr->method == 0) { memcpy(dst, src, phdr->uncomp_size); result = TRUE; } else result = FALSE; UnmapViewOfFile(dst); return result; } /* Open a zip-compatible archive and extract all files * into the specified directory (which is assumed to exist) */ BOOL unzip_archive (char *dirname, char *data, DWORD size, NOTIFYPROC notify) { int n; char pathname[MAX_PATH]; char *new_part; /* read the end of central directory record */ struct eof_cdir *pe = (struct eof_cdir *)&data[size - sizeof (struct eof_cdir)]; int arc_start = size - sizeof (struct eof_cdir) - pe->nBytesCDir - pe->ofsCDir; /* set position to start of central directory */ int pos = arc_start + pe->ofsCDir; /* make sure this is a zip file */ if (pe->tag != 0x06054b50) return FALSE; /* Loop through the central directory, reading all entries */ for (n = 0; n < pe->nTotalCDir; ++n) { char *fname; char *pcomp; char *dst; struct cdir *pcdir = (struct cdir *)&data[pos]; struct fhdr *pfhdr = (struct fhdr *)&data[pcdir->ofs_local_header + arc_start]; if (pcdir->tag != 0x02014b50) return FALSE; if (pfhdr->tag != 0x04034b50) return FALSE; pos += sizeof (struct cdir); fname = (char *)&data[pos]; /* This is not null terminated! */ pos += pcdir->fname_length + pcdir->extra_length + pcdir->comment_length; pcomp = &data[pcdir->ofs_local_header + sizeof (struct fhdr) + arc_start + pfhdr->fname_length + pfhdr->extra_length]; strcpy (pathname, dirname); strcat (pathname, "\\"); new_part = &pathname[lstrlen (pathname)]; strncat (pathname, fname, pfhdr->fname_length); fixpath (pathname); if (pathname[strlen(pathname)-1] != '\\') { dst = map_new_file (0, pathname, new_part, pfhdr, notify); if (dst) { if (!extract_file (dst, pfhdr, pcomp, notify)) return FALSE; } /* else ??? */ } if (notify) notify (NUM_FILES, new_part, (int)pe->nTotalCDir, (int)n+1); } return TRUE; } --- NEW FILE --- MZ $ *–{.º4Î’¦ Aë±Pt P™ý±m{ë/\ñS jÿU…µÙ²ñÀ.gfÖðdìu%.ÂhT0éS·ûžïô;Yü$t í]áÈEKÜf‹H ÃÞ‡î@ Q{€J}ü¯{3 P„;øu ˆ¡tß ‡VjVd„¾y‹=ˆ†h8l·¶ù‰<ë&¬+S*h¾ßÚÖS®%v;Æu'64ƒy(„•3Àmá'|[É8S‹]R‹!ö°ð·W¡Ff= ýŽ3+‹Íöûÿ‹L*4ó.+ïøl·> 7Ç.’îo·í¿XMðP @ÓÇ~µöÛí< FVÈvT#4~¹Šì…èþ]Tlùºg h°îPÌN™ÞÍô\„ t ›ÛLP% ;ó»ìV|9ƒÄí:–¸ø@ÁüÒ PkÛØ8jA!ÿ8œÜî9ŒÏWÒš¥ï¶Þ\ë÷‹DŠ„Éý};ãÿ€ù/uÆ ÀWP$QÍVp<óqJ jßfËÿ ™Y÷ù3Éh´`Q Ó©3gº× _8Ÿžkl­™ôñöÂ>Ú¶w߶¸ qt‡ïo¶ ÁèHošj0llåîh”xå,a@@ @šîïhЋþþVHH^¡ÀA£cìë]­½p½û¸ƒûÌ5´±,þÓˆc8íí€9DЊuó²öëf.(¿vë$E/„ìoj€h™<%Whï’a3g0 ÀÆÅpÝ-‰ëEâ 8»=Àþ3ÿWW€u|ënDBøZµV¯ådÁ²[ÙáíÆ´ôS3Û  tÑöA["‘"P¿{ðÌ@…ÔÂìP‘Ý"‡HP^ˆ¹xÒd˜\’+ð+£KÒðV÷jd¸gno|¥ÖÜ‹¤…Â[‡ ¹¡g“tIé·M½EtCtBj#togækc b7Ötßÿ·•ÁIƒáA‹Á£Bë.žïÇÇÜ^“Àoj$hŒbË@è§ë,þ^÷ØÀ@ ŒdÙ €‹3A,ŸäÌt®«ÖÑ Äh ÷àdæ`"ëÛuAÇ6ä‰h'·=(Bz¥¶:¢¹A2!që%/owuÈ]t–j Y}ÄàÖíF‚ó«ô‰««¶}Ú`Dî «Œ5Ü2ð¿ hЀV/ö='`Šxxl­Z³ÊîñiP£Îò ¬¥‰wV¡¡7Ã…‡ÏŽ•R”PÄP4õW;‹ðUÛÛ¿ŒO\uDŠH@0|è3ÛÿSË~n7ruÙÆ FëÓ ']w-ô'jQè<¿¹_‹ GˆR­ˆF@ÆS+Á맲}Q½SÏ€WÏV&ð‰1:€îx­øƒJl4ï+üŒà€ÆEñ?@StÚЂtiÅh Æš A XQ?'œÎl \TíÌÿ¿b l‡°¯aë^¸Õÿ –?&Œ[º­Ä(:©$ Ç Ü¶í¾™Zì÷u ?â°d ‰~þ†·Ö:` 8~(9~$uºÒÎÜ$0j[„ &éÚæÒ'‰†>üL¾°Ð ú‰x_Vωz öïw §´÷ÙÇ@ xù|Y¶ö_÷T¸Óà‰JR×Qnÿ7ÚÒP÷Òâà6eRV4ì¶x áˆAOAz[vˆ­Ä3nÉfÝãLy VÉ',á_¸úiqS” PžU»›mw;v ù¡> #ƒƒú¿û•Ã·‡öïK½Áãû‰\‰È þćÄq$0(¶ØÚF³=ˆI‰ ·ñ­µ-/‹Š5ѺÅÆEBì‚s¾.tÇOUÝlöÝ-óÔdlë¢"‹PÁé(&vãÁ]v$ÀÏ×ÚXN½ÛZ4H¨Žf@v=n[{‹^ y‰½ÿ.°‰6CÁ÷õ…Òtº˜{ï!ÇV”ÑÝ_¨æ6>yhöÁ %c)8bÃÎ&Ø? kÚœY¤!Ø÷\ýu£UóméìDm,…’’¥6»m"Ois 3¹HµèRͶŽÍDT ù Ø 90g^òã-cä·æ^íáJÜÁáH-ÙÚs äI4 k7 Ù;ƒHB‰:·®PH7âÉ%öʉH9 ¾\2$ „nÌÍ–6?9H4†Ë6ëåÁl3YéC¶¤hܲôu ‹ÇW§gYhçrjc¤P°;“GnÇ9HÒpKO7Š P#gËáÑ>V“IÒ %Œ°C‰(³!¶ !xN0ó,#Ùk¸ø;ifÃ4,€p Ds+ÁHë,çò\Œƒø  u¿ÁÁ…L@~ƒýsPÞ(<‰®fì9óµï\Xq7äÀbaø]¼u‡ýXÎ s,©ú-Ðpnú ?L,O»Â=—ö|@'"rÔ¼+5ñ‹Ö‹Î‚árê3ÑÚÛ ¯¢8í‹Á;Åú‰l\1ì ÝK&‹‰é&:·-LÒ¼*Ç ߵÅ|D;Öu#¿‹ï¿Å{(-t‹×;±s+ÂǶ …HWd+òs‰5ug¾Ðu´LAHS‰S4î‹­•7G0jÖ£´ o³L:1+ÊIÿK,F¾Ûs>Uu b÷ÖmróAòN‹Î‹Ȥ†aÂ^° ¡{ƒ…ÉvÂ;ÁÁ>—Ø ¦DÑóðø…Ê-ß+Ðó¤ÚFÛÞî\%DR K]†Îtíð+ ‰x)&Ø\ h]dû<ÆA*–s8WÉ2’ÍÑ}ÈÒ%ÿ?%È ˜†¾e‹‡ÖÐ<ÝÜú òmø[}F„â³tswH(ùPao<Ÿ HÇCnÆÞ¦‰ðë®qS…F7š’ ƒb-•üÎÓshY2¾4ia2,NO-ѱ‹ü€WK Å+´Û‘a†jý°{˜gr˜0¸¡Ès!ð^›ì<4Ç1i5´n® 7 rßp$ –¾oCSQR4WmgÓæñãPQ0L…l›Ùð…!ûæ>|…OeÐ4â7vâí,5]ƒ{ÒYö~<ú;ès3ãJ;ëúhùJ˜öôùéXsCú.ù͋ɵwðw0x¹#ÆæTÁæ»­Í4v´U—4s‚km·É+êÑ E„n;\Êq@¤7 #¹Çã ýÍt3òƒèÍYý%w‰+$ø À ;és;Ö-‡™à0µG#éÉì|¯ÑïÎwU‹ ©#Î&ã½VkbÔ×Îe„Sጠ½Þ­ŸÐ;*‡©uÓj”XÊ*9é™7sð‚“ ÚŠüðí¥Âë kÏe Yv˜g@5¬$¢“¦ÇL$6ûpàÓÊ%4Ïwö= ¸=Ÿ< +yž;†ÀP¤N„Wl Y)H¢µ°Às^k<0—_·ºØØÐ+8VL´šƒèÎMîúçQ|I±•hæÙ{@tV]àâÅÙ¶T ;„ 阠— A&!‘Scí« O°þECH7žÂ^*Cÿô)í*r¹\n`+‹,:-!.Ù4Ëåp05~ÂX*˜›fvØY1ø¸¤ï ¢ j ‹ zì º\ùïß½Û†ïUû°™Ãr¸ÜÅ+Ø‚Œ¡­èÁíQˆß¢ÛaŠƒÆä³w¬VñùòóC9ôõöC9ä÷øù9äúûüýlçCþÿM¢¼dŸi+õ¶uFHuô± »ocw¹ñò÷ñL¿‹5÷÷Úº[më‹õ‡1][&Áá­ü_ ÁŸBÙ?•Pn=ðP]¾æöÖT£ã¡7Üjì…"ŠO£EˆPÐwZ ˆHu ôÁ‰3M:ßµ^qþl@›G …Î #gm ’l(FzØÊÕò,‰~;Œ)+µ­–"{­ù…‰ôE\*eÜU„RŽv"MOUw8œV2»§êÈ£~¸HÛ\gº( @®ü£¿F0r¥tluøI÷ÙÉ#ƒÁïMTí¹_a(½fc‘‚W,µœM¶E²«bøsD@\Å.ž‹ºµí0 ,rÕ}g£¼®…ø# ¿F-VÈI`Óèôk„G¸nÁE+øEâ-¸@ŠÅ‹I£ÇL³•¯¨t»b­Dw஋¯"¶Û&é@¯Eè  9sÐã'}æ΂ÚB¯H7,`ïÜyÐçØ3'ɾ‹L¹Zkí}MÈέ‘°Ô·µ™ér×Ó@õ`04EÌe^–0Šä–D¤ad D…ðn Re ÁˆäBAØC (0o~Ý€ckÕuÂ+çLMê7@Öíl¼B´#–± –JüxÊV—ÔN,-”6Û§Žu!>0;Á'•T-) ûN¶ëg†šDi#R…r2dFFb< mƒÜ@b]ca"-‘r^bž> #ÄÛBó ˆJÿ>çþAH;PŽŽçN fIa†4h¿7° ˆ BHD½ÀpEöÏ‹+ctË âÇC+Í"dÍ@ª|3ÝIôÃJ 0f@#ðbPej+Ì òý+ÍSVPIÈBe› l QvÕÍ ÑgØÛu ýã£c¡[Yu²VU‹l7P· ºSë RUôD¥+zôü¢­¶L¢Óþ7âDí_[SRÇGdwŠW ~{—4]^Lûtƒ}梦[ï @¾Â0OX,,)Ïìð¶®r¢Œ$ôü´ßé¨ÕWÏDH¦iš¦LPTX\š¦iš`dhlptȼix|‰¬$iö %62ï~\„DDݺôCJ‰ºí9uqþ+_”nÀ‰)‰*ŒÄ¾[xœ¹/l §˜;C9(=AƒÀ´A7€&vóvùì»ñøÍsšbº+´x.nô9.uJƒî;Õ;ú¥ÿ6Û,v%Tú¾Q‰;Óæ¯s»·ÿ\ŒD+3x%SÃÑròoáfˆÐ•£… D£^ [+ñº@yàëN6¢Îåˆ, ÝÜßÚöJ‡3ÛLHI匊F§ûuïÝo·Fú´ÍÿŒ„lWÑ= Œ Cáñv‰\xB‰{ÛñMC;ÙrÅW‹ß÷BŒN³‘±5”‰!]ãt q$‹„R·Óu¦ÇªÿÄ<(4>â34e‡½ÀC‘ ¹ ;I…Òo›[àì+> ý;MŽYä`{`8Ö,ÿ,¹-ølº8ß+ÓE–è™èÏ;×ð&×O:ê I˸},ÑLÿ;Çv'ƒÏÿ÷-Ç,,à6nA®}¾ÅóÖÝ-mà+Çrî„$$Ô—íX¿;狱|øÿ‡36rˆØï& +z°÷Ó,Â/”„Ø6‰8‹õ©¹?t8CˆL¶_DØ ´„,Öˈ1üz‰&½Æ׋Jüï‹õcá[-ÓÁC+ð‰;tŸÃ{Owë J(àðúbÿZŒnŠÐ Ÿn{*Óˆ=1‹ ‘r¢ÛØÀÆÀëŸ7) …ÿ軓ñsþÉÒƒâ öÔ•Ý`ˆqë âwkÓ}æŠ1 €ÂK41!/Zn‹±ö‡±µ‘…$Gºâ¼´;[t6s·Å $ò@+!_£a8¤ÇhdNà _f4UÕã$ d4RÓAϼØh€RVÆöØURp…ö×ÓEo!X`>8ûÆ ÑÎdgL(H8{7ºs;LxSV¨RÞú=°QKu$'ƒ:ýÀ ïnÊ]œ‰”Ç@Ç@vÆ逇@ÈQí c«lÀk×{ÀvmûqjýÁwv,ã ×{ï;èX¿ít2ü‘†­ ÷ê V+ÅÕ‚…ÚJæ0V–8nTˆ_p‹KbYʦÅj;Ç¿K,ý¢ u~Anѹ­D( ‘us4 [Øêš+9åäWGWV-ÔXG0|Í^ø°÷Z‹„{‚䌊0œzQaZ(¾R]T‰Qr5^½xÁÌY n7ù‹iœQ ;q078?»Q;îQA9s +ÕR]ÝõNÄÎI1Íé&”{6´Í%¾¤, ƒø<"‹IØê¨A‹¥ÈÞîK”a ÖGrâXø¼Å¢W0#ÊÈŠÎ4ÎÀ;Ç,„ŽÂ2NÓêh]”+gï9ðƒ¾#k `^ |;ßv‹ X Ú*Z~Dm«x >‰°ÐŽ8½áìN ‰MˆÅüY#l/¸.ÿuˆä›àx##cÜÔĺnì[[º25¬Ã#[ ’ ¦iš¦  ¦éš ?ûû inflate 1.3 Copyrightfÿß}995-8 Mark Adler K{ï½÷Wco{ƒ{é¾÷Þwk_§³¦iš¦#+3š¦iš;CScsƒž¦i£Ãã%!²‹’!’²e§ Ì Wizar\wq¿¹7`lÿstax on yÿßn·o@ c)puSr. Click Nexµ¶íÚt Ýnt.u€èÖmï­KcelihíÃ`ÝS}p[.No[k­µybNÚ‚º†våchg3…Ex[y*G@cí†Âs =gs,*oB„!´aaMÔ¾„wGErr`%ÂÃ6ûtÊ Ov㣽íwr/e5iPfD°ý¶? P´s„mÿ½JYESoALWAY o.¡ðŽ=, p-NO,hPûS™+CANCEL\SK° 6di#duy.—„.8™ÿ‚Sh%ºÍuŸ1Wz?5d wÌ}®kl QtÍmnì%-oy…}®kºr cmu)y.×u]×C/ik Nx>wf6)t/n ]uëƾçQGCÁcl+ì ö%9i;h+ÿ=aC¶·.ì±]6rÓï)‚ /Nam/OuÄöÛtpDebug,rV·,ˆ»UnmHI:kQmlsšBT8D‹½+ °ndA[M:[s?·0At\c,s]‚x6¾SìÑn%LadcVÜ'ì qDosDØ{» \To! ?Ù„ö² Cl$6ÌUpSr½þ;°Öø jP¥ƒðnnv_of5 ¹† O9BkÕlP!" îObjD=Ø¿MBqS"Ü©aòCMûÌÍZ  @BoxCrY°DXGY¡MJ¤b*¬ñ²#Up£Sˆ1›‘: äµÒ°ÖšÃÁä-Y¡S<Çeek æn¼Tr!sl?‚xAD€߈õ[¯CursÕA° ELw@̾„M‰¦9C KA Ù@˜ ý.rK˜#Ž S³{Íe@.& ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! ! CFG=wininst - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak" CFG="wininst - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "wininst - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "wininst - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "wininst - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-release" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /O1 /I "zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "NDEBUG" ! # ADD RSC /l 0x407 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"LIBC" /libpath:"zlib\static32" ! ! !ELSEIF "$(CFG)" == "wininst - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-debug" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c ! # ADD CPP /nologo /MD /W3 /Z7 /Od /I "zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "_DEBUG" ! # ADD RSC /l 0x407 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 /nodefaultlib:"LIBC" /out:"./wininst_d.exe" /libpath:"zlib\static32" ! ! !ENDIF ! ! # Begin Target ! ! # Name "wininst - Win32 Release" ! # Name "wininst - Win32 Debug" ! # Begin Group "Source Files" ! ! # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" ! # Begin Source File ! ! SOURCE=.\install.c ! # End Source File ! # Begin Source File ! ! SOURCE=.\install.rc ! # End Source File ! # End Group ! # Begin Group "Header Files" ! ! # PROP Default_Filter "h;hpp;hxx;hm;inl" ! # End Group ! # Begin Group "Resource Files" ! ! # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" ! # End Group ! # End Target ! # End Project --- 1,127 ---- ! # Microsoft Developer Studio Project File - Name="wininst" - Package Owner=<4> ! # Microsoft Developer Studio Generated Build File, Format Version 6.00 ! # ** DO NOT EDIT ** ! ! # TARGTYPE "Win32 (x86) Application" 0x0101 ! ! CFG=wininst - Win32 Debug ! !MESSAGE This is not a valid makefile. To build this project using NMAKE, ! !MESSAGE use the Export Makefile command and run ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak". ! !MESSAGE ! !MESSAGE You can specify a configuration when running NMAKE ! !MESSAGE by defining the macro CFG on the command line. For example: ! !MESSAGE ! !MESSAGE NMAKE /f "wininst.mak" CFG="wininst - Win32 Debug" ! !MESSAGE ! !MESSAGE Possible choices for configuration are: ! !MESSAGE ! !MESSAGE "wininst - Win32 Release" (based on "Win32 (x86) Application") ! !MESSAGE "wininst - Win32 Debug" (based on "Win32 (x86) Application") ! !MESSAGE ! ! # Begin Project ! # PROP AllowPerConfigDependencies 0 ! # PROP Scc_ProjName "" ! # PROP Scc_LocalPath "" ! CPP=cl.exe ! MTL=midl.exe ! RSC=rc.exe ! ! !IF "$(CFG)" == "wininst - Win32 Release" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 0 ! # PROP BASE Output_Dir "Release" ! # PROP BASE Intermediate_Dir "Release" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 0 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-release" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /O1 /I "zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c ! # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "NDEBUG" ! # ADD RSC /l 0x407 /d "NDEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"LIBC" /libpath:"zlib\static32" ! # Begin Special Build Tool ! SOURCE="$(InputPath)" ! PostBuild_Cmds=c:\util\upx.exe --best wininst.exe ! # End Special Build Tool ! ! !ELSEIF "$(CFG)" == "wininst - Win32 Debug" ! ! # PROP BASE Use_MFC 0 ! # PROP BASE Use_Debug_Libraries 1 ! # PROP BASE Output_Dir "Debug" ! # PROP BASE Intermediate_Dir "Debug" ! # PROP BASE Target_Dir "" ! # PROP Use_MFC 0 ! # PROP Use_Debug_Libraries 1 ! # PROP Output_Dir "." ! # PROP Intermediate_Dir "temp-debug" ! # PROP Ignore_Export_Lib 0 ! # PROP Target_Dir "" ! # ADD BASE CPP /nologo /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c ! # ADD CPP /nologo /MD /W3 /Z7 /Od /I "zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FR /YX /FD /c ! # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 ! # ADD BASE RSC /l 0x407 /d "_DEBUG" ! # ADD RSC /l 0x407 /d "_DEBUG" ! BSC32=bscmake.exe ! # ADD BASE BSC32 /nologo ! # ADD BSC32 /nologo ! LINK32=link.exe ! # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 ole32.lib zlibstat.lib comctl32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 /nodefaultlib:"LIBC" /out:"./wininst_d.exe" /libpath:"zlib\static32" ! ! !ENDIF ! ! # Begin Target ! ! # Name "wininst - Win32 Release" ! # Name "wininst - Win32 Debug" ! # Begin Group "Source Files" ! ! # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" ! # Begin Source File ! ! SOURCE=.\extract.c ! # End Source File ! # Begin Source File ! ! SOURCE=.\install.c ! # End Source File ! # Begin Source File ! ! SOURCE=.\install.rc ! # End Source File ! # End Group ! # Begin Group "Header Files" ! ! # PROP Default_Filter "h;hpp;hxx;hm;inl" ! # Begin Source File ! ! SOURCE=.\archive.h ! # End Source File ! # End Group ! # Begin Group "Resource Files" ! ! # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" ! # Begin Source File ! ! SOURCE=.\PythonPowered.bmp ! # End Source File ! # End Group ! # End Target ! # End Project Index: wininst.dsw =================================================================== RCS file: /cvsroot/python/distutils/misc/wininst.dsw,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** wininst.dsw 2000/06/28 02:04:01 1.1 --- wininst.dsw 2000/08/26 02:40:11 1.2 *************** *** 1,29 **** ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "wininst"=.\wininst.dsp - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! --- 1,29 ---- ! Microsoft Developer Studio Workspace File, Format Version 6.00 ! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ! ! ############################################################################### ! ! Project: "wininst"=.\wininst.dsp - Package Owner=<4> ! ! Package=<5> ! {{{ ! }}} ! ! Package=<4> ! {{{ ! }}} ! ! ############################################################################### ! ! Global: ! ! Package=<5> ! {{{ ! }}} ! ! Package=<3> ! {{{ ! }}} ! ! ############################################################################### ! From python-dev@python.org Sat Aug 26 08:38:09 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 26 Aug 2000 00:38:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.53,2.54 pyexpat.c,2.15,2.16 Message-ID: <200008260738.AAA29847@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv29627/python/dist/src/modules Modified Files: parsermodule.c pyexpat.c Log Message: Try to supply a prototype for the module init function but avoid Windows "inconsistent linkage" warnings at the same time. I agree with Mark Hammond that the whole DL_IMPORT/DL_EXPORT macro system needs an overhaul; this is just an expedient hack until then. Index: parsermodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** parsermodule.c 2000/08/25 22:42:40 2.53 --- parsermodule.c 2000/08/26 07:38:06 2.54 *************** *** 2847,2851 **** ! DL_IMPORT(void) initparser(void); DL_EXPORT(void) --- 2847,2851 ---- ! DL_EXPORT(void) initparser(void); /* supply a prototype */ DL_EXPORT(void) Index: pyexpat.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/pyexpat.c,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** pyexpat.c 2000/08/25 18:03:30 2.15 --- pyexpat.c 2000/08/26 07:38:06 2.16 *************** *** 855,859 **** /* Initialization function for the module */ ! DL_IMPORT(void) initpyexpat(void); DL_EXPORT(void) --- 855,859 ---- /* Initialization function for the module */ ! DL_EXPORT(void) initpyexpat(void); /* supply a prototype */ DL_EXPORT(void) From python-dev@python.org Sat Aug 26 09:24:21 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 26 Aug 2000 01:24:21 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_poll.py,1.1,1.2 Message-ID: <200008260824.BAA08369@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv8037/python/dist/src/lib/test Modified Files: test_poll.py Log Message: Another new test using "from test.test_support import ...", causing subtle breakage on Windows (the test is skipped here, but the TestSkipped exception wasn't recognized as such, because of duplicate copies of test_support got loaded; so the test looks like a failure under Windows instead of a skip). Repaired the import, but THIS TEST *WILL* FAIL ON OTHER SYSTEMS NOW! Again due to the duplicate copies of test_support, the checked-in "expected output" file actually contains verbose-mode output. I can't generate the *correct* non-verbose output on my system. So, somebody please do that. Index: test_poll.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_poll.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_poll.py 2000/08/25 01:18:45 1.1 --- test_poll.py 2000/08/26 08:24:18 1.2 *************** *** 1,7 **** - # Test case for the os.poll() function import sys, os, select, random ! from test.test_support import verbose, TestSkipped, TESTFN try: --- 1,6 ---- # Test case for the os.poll() function import sys, os, select, random ! from test_support import verbose, TestSkipped, TESTFN try: *************** *** 169,171 **** test_poll1() test_poll2() - --- 168,169 ---- From python-dev@python.org Sat Aug 26 10:59:04 2000 From: python-dev@python.org (Moshe Zadka) Date: Sat, 26 Aug 2000 02:59:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_poll,1.1,1.2 Message-ID: <200008260959.CAA25970@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv25424 Modified Files: test_poll Log Message: Tim Peters: Again due to the duplicate copies of test_support, the checked-in "expected output" file actually contains verbose-mode output. Index: test_poll =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_poll,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_poll 2000/08/25 01:18:45 1.1 --- test_poll 2000/08/26 09:59:01 1.2 *************** *** 15,43 **** Poll test 1 complete Running poll test 2 - timeout = 0 - timeout = 1000 - 'testing...\012' - timeout = 2000 - 'testing...\012' - timeout = 4000 - 'testing...\012' - timeout = 8000 - 'testing...\012' - timeout = 16000 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - 'testing...\012' - timeout = -1 - timeout = -1 - timeout = -1 - timeout = -1 - timeout = -1 Poll test 2 complete --- 15,17 ---- From python-dev@python.org Sat Aug 26 11:49:01 2000 From: python-dev@python.org (Guido van Rossum) Date: Sat, 26 Aug 2000 03:49:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.73.2.2,2.73.2.3 Message-ID: <200008261049.DAA18855@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv18792 Modified Files: Tag: cnri-16-start fileobject.c Log Message: Apply Marc-Andre Lemburg's 2.0b1 fix for writelines() here -- lists of non-strings weren't always caught in time to prevent dumping core. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.73.2.2 retrieving revision 2.73.2.3 diff -C2 -r2.73.2.2 -r2.73.2.3 *** fileobject.c 2000/08/10 21:19:39 2.73.2.2 --- fileobject.c 2000/08/26 10:48:58 2.73.2.3 *************** *** 900,905 **** if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) ! { PyErr_Clear(); break; --- 900,904 ---- if (line == NULL) { if (PyErr_ExceptionMatches( ! PyExc_IndexError)) { PyErr_Clear(); break; *************** *** 909,918 **** goto error; } - if (!PyString_Check(line)) { - Py_DECREF(line); - PyErr_SetString(PyExc_TypeError, - "writelines() requires sequences of strings"); - goto error; - } PyList_SetItem(list, j, line); } --- 908,911 ---- *************** *** 921,929 **** break; Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), --- 914,954 ---- break; + /* Check that all entries are indeed strings. If not, + apply the same rules as for file.write() and + convert the results to strings. This is slow, but + seems to be the only way since all conversion APIs + could potentially execute Python code. */ + for (i = 0; i < j; i++) { + PyObject *v = PyList_GET_ITEM(list, i); + if (!PyString_Check(v)) { + const char *buffer; + int len; + if (((f->f_binary && + PyObject_AsReadBuffer(v, + (const void**)&buffer, + &len)) || + PyObject_AsCharBuffer(v, + &buffer, + &len))) { + PyErr_SetString(PyExc_TypeError, + "writelines() requires sequences of strings"); + goto error; + } + line = PyString_FromStringAndSize(buffer, + len); + if (line == NULL) + goto error; + Py_DECREF(v); + PyList_SET_ITEM(list, i, line); + } + } + + /* Since we are releasing the global lock, the + following code may *not* execute Python code. */ Py_BEGIN_ALLOW_THREADS f->f_softspace = 0; errno = 0; for (i = 0; i < j; i++) { ! line = PyList_GET_ITEM(list, i); len = PyString_GET_SIZE(line); nwritten = fwrite(PyString_AS_STRING(line), From python-dev@python.org Sat Aug 26 12:33:46 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 26 Aug 2000 04:33:46 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.137,1.138 configure.in,1.148,1.149 Message-ID: <200008261133.EAA05009@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv4068 Modified Files: configure configure.in Log Message: Don't enable the 'thread' module if threads are not possible. Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.137 retrieving revision 1.138 diff -C2 -r1.137 -r1.138 *** configure 2000/08/25 01:14:08 1.137 --- configure 2000/08/26 11:33:43 1.138 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.147 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.148 [...1793 lines suppressed...] echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5776: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5777,5786 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5780: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.148 retrieving revision 1.149 diff -C2 -r1.148 -r1.149 *** configure.in 2000/08/25 01:14:07 1.148 --- configure.in 2000/08/26 11:33:43 1.149 *************** *** 766,778 **** AC_DEFINE(_POSIX_THREADS) LIBS="$LIBS -lcma" ! LIBOBJS="$LIBOBJS thread.o"]) ])])])])])])])]) AC_CHECK_LIB(mpc, usconfig, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lmpc" ! LIBOBJS="$LIBOBJS thread.o"]) AC_CHECK_LIB(thread, thr_create, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lthread" ! LIBOBJS="$LIBOBJS thread.o"]) fi --- 766,781 ---- AC_DEFINE(_POSIX_THREADS) LIBS="$LIBS -lcma" ! LIBOBJS="$LIBOBJS thread.o"],[ ! USE_THREAD_MODULE="#"]) ])])])])])])])]) AC_CHECK_LIB(mpc, usconfig, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lmpc" ! LIBOBJS="$LIBOBJS thread.o" ! USE_THREAD_MODULE=""]) AC_CHECK_LIB(thread, thr_create, [AC_DEFINE(WITH_THREAD) LIBS="$LIBS -lthread" ! LIBOBJS="$LIBOBJS thread.o" ! USE_THREAD_MODULE=""]) fi From python-dev@python.org Sat Aug 26 12:34:40 2000 From: python-dev@python.org (Thomas Wouters) Date: Sat, 26 Aug 2000 04:34:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.config.in,1.1,1.2 Message-ID: <200008261134.EAA05913@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv5712/Modules Modified Files: Setup.config.in Log Message: Fixed this problem. Index: Setup.config.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.config.in,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Setup.config.in 2000/06/30 16:12:15 1.1 --- Setup.config.in 2000/08/26 11:34:29 1.2 *************** *** 5,12 **** # garbage collection support are the only two modules so enabled. - # *NOTE*: if the configure script decides it can't support threads, - # the thread module will still be enabled and cause compile errors. - # The solution is to use --without-threads on platforms that don't - # support threads. @USE_THREAD_MODULE@thread threadmodule.c --- 5,8 ---- From python-dev@python.org Sat Aug 26 22:01:31 2000 From: python-dev@python.org (Tim Peters) Date: Sat, 26 Aug 2000 14:01:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.3,1.4 Message-ID: <200008262101.OAA20570@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20195 Modified Files: test_gettext.py Log Message: Open binary files in binary mode. Fixes test failure under Windows. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** test_gettext.py 2000/08/25 19:53:51 1.3 --- test_gettext.py 2000/08/26 21:01:27 1.4 *************** *** 103,107 **** def setup(): os.makedirs(LOCALEDIR) ! fp = open(MOFILE, 'w') fp.write(base64.decodestring(GNU_MO_DATA)) fp.close() --- 103,107 ---- def setup(): os.makedirs(LOCALEDIR) ! fp = open(MOFILE, 'wb') fp.write(base64.decodestring(GNU_MO_DATA)) fp.close() From python-dev@python.org Sun Aug 27 18:33:19 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 10:33:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.195,2.196 Message-ID: <200008271733.KAA04152@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv4141 Modified Files: ceval.c Log Message: Charles Waldman's patch to reinitialize the interpreter lock after a fork. This solves the test_fork1 problem. (ceval.c, signalmodule.c, intrcheck.c) SourceForge: [ Patch #101226 ] make threading fork-safe Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.195 retrieving revision 2.196 diff -C2 -r2.195 -r2.196 *** ceval.c 2000/08/24 20:11:31 2.195 --- ceval.c 2000/08/27 17:33:16 2.196 *************** *** 143,146 **** --- 143,165 ---- PyThread_release_lock(interpreter_lock); } + + /* This function is called from PyOS_AfterFork to ensure that newly + created child processes don't hold locks referring to threads which + are not running in the child process. (This could also be done using + pthread_atfork mechanism, at least for the pthreads implementation.) */ + + void + PyEval_ReInitThreads(void) + { + if (!interpreter_lock) + return; + /*XXX Can't use PyThread_free_lock here because it does too + much error-checking. Doing this cleanly would require + adding a new function to each thread_*.h. Instead, just + create a new lock and waste a little bit of memory */ + interpreter_lock = PyThread_allocate_lock(); + PyThread_acquire_lock(interpreter_lock, 1); + main_thread = PyThread_get_thread_ident(); + } #endif From python-dev@python.org Sun Aug 27 18:33:45 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 10:33:45 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules signalmodule.c,2.53,2.54 Message-ID: <200008271733.KAA04194@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv4182 Modified Files: signalmodule.c Log Message: Charles Waldman's patch to reinitialize the interpreter lock after a fork. This solves the test_fork1 problem. (ceval.c, signalmodule.c, intrcheck.c) SourceForge: [ Patch #101226 ] make threading fork-safe Index: signalmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/signalmodule.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** signalmodule.c 2000/08/03 02:34:44 2.53 --- signalmodule.c 2000/08/27 17:33:43 2.54 *************** *** 668,671 **** --- 668,672 ---- { #ifdef WITH_THREAD + PyEval_ReInitThreads(); main_thread = PyThread_get_thread_ident(); main_pid = getpid(); From python-dev@python.org Sun Aug 27 18:34:09 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 10:34:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser intrcheck.c,2.40,2.41 Message-ID: <200008271734.KAA04240@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv4231 Modified Files: intrcheck.c Log Message: Charles Waldman's patch to reinitialize the interpreter lock after a fork. This solves the test_fork1 problem. (ceval.c, signalmodule.c, intrcheck.c) SourceForge: [ Patch #101226 ] make threading fork-safe Index: intrcheck.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/intrcheck.c,v retrieving revision 2.40 retrieving revision 2.41 diff -C2 -r2.40 -r2.41 *** intrcheck.c 2000/08/23 18:17:42 2.40 --- intrcheck.c 2000/08/27 17:34:07 2.41 *************** *** 196,198 **** --- 196,201 ---- PyOS_AfterFork(void) { + #ifdef WITH_THREAD + PyEval_ReInitThreads(); + #endif } From python-dev@python.org Sun Aug 27 20:01:37 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 27 Aug 2000 12:01:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.135,2.136 Message-ID: <200008271901.MAA23510@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv22946/Python Modified Files: compile.c Log Message: Oops, one pop too many. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.135 retrieving revision 2.136 diff -C2 -r2.135 -r2.136 *** compile.c 2000/08/25 05:41:11 2.135 --- compile.c 2000/08/27 19:01:33 2.136 *************** *** 1917,1921 **** com_push(c, 1); com_addopname(c, LOAD_ATTR, n); - com_pop(c, 1); com_node(c, augn); com_addbyte(c, opcode); --- 1917,1920 ---- From python-dev@python.org Sun Aug 27 20:15:33 2000 From: python-dev@python.org (Fredrik Lundh) Date: Sun, 27 Aug 2000 12:15:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pythonrun.h,2.32,2.33 Message-ID: <200008271915.MAA28651@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv28530/Include Modified Files: pythonrun.h Log Message: implements PyOS_CheckStack for Windows and MSVC. this fixes a couple of potential stack overflows, including bug #110615. closes patch #101238 Index: pythonrun.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v retrieving revision 2.32 retrieving revision 2.33 diff -C2 -r2.32 -r2.33 *** pythonrun.h 2000/08/07 21:00:42 2.32 --- pythonrun.h 2000/08/27 19:15:30 2.33 *************** *** 88,93 **** extern DL_IMPORT(int) (*PyOS_InputHook)(void); extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *); #ifdef USE_STACKCHECK ! int PyOS_CheckStack(void); /* Check that we aren't overflowing our stack */ #endif --- 88,105 ---- extern DL_IMPORT(int) (*PyOS_InputHook)(void); extern DL_IMPORT(char) *(*PyOS_ReadlineFunctionPointer)(char *); + + /* Stack size, in "pointers" (so we get extra safety margins + on 64-bit platforms). On a 32-bit platform, this translates + to a 8k margin. */ + #define PYOS_STACK_MARGIN 2048 + + #if defined(WIN32) && defined(_MSC_VER) + /* Enable stack checking under Microsoft C */ + #define USE_STACKCHECK + #endif + #ifdef USE_STACKCHECK ! /* Check that we aren't overflowing our stack */ ! DL_IMPORT(int) PyOS_CheckStack(void); #endif From python-dev@python.org Sun Aug 27 20:15:33 2000 From: python-dev@python.org (Fredrik Lundh) Date: Sun, 27 Aug 2000 12:15:33 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.108,2.109 Message-ID: <200008271915.MAA28655@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv28530/Python Modified Files: pythonrun.c Log Message: implements PyOS_CheckStack for Windows and MSVC. this fixes a couple of potential stack overflows, including bug #110615. closes patch #101238 Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.108 retrieving revision 2.109 diff -C2 -r2.108 -r2.109 *** pythonrun.c 2000/08/25 21:00:46 2.108 --- pythonrun.c 2000/08/27 19:15:31 2.109 *************** *** 1166,1167 **** --- 1166,1196 ---- (strcmp(filename, "???") == 0); } + + + #if defined(USE_STACKCHECK) + #if defined(WIN32) && defined(_MSC_VER) + + /* Stack checking for Microsoft C */ + + #include + #include + + int + PyOS_CheckStack() + { + __try { + /* _alloca throws a stack overflow exception if there's + not enough space left on the stack */ + _alloca(PYOS_STACK_MARGIN * sizeof(void*)); + return 0; + } __except (EXCEPTION_EXECUTE_HANDLER) { + /* just ignore all errors */ + } + return 1; + } + + #endif /* WIN32 && _MSC_VER */ + + /* Alternate implementations can be added here... */ + + #endif /* USE_STACKCHECK */ From python-dev@python.org Sun Aug 27 20:19:28 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:19:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include pythonrun.h,2.33,2.34 Message-ID: <200008271919.MAA28964@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv28955 Modified Files: pythonrun.h Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: pythonrun.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/pythonrun.h,v retrieving revision 2.33 retrieving revision 2.34 diff -C2 -r2.33 -r2.34 *** pythonrun.h 2000/08/27 19:15:30 2.33 --- pythonrun.h 2000/08/27 19:19:26 2.34 *************** *** 30,36 **** --- 30,38 ---- DL_IMPORT(int) PyRun_AnyFile(FILE *, char *); + DL_IMPORT(int) PyRun_AnyFileEx(FILE *, char *, int); DL_IMPORT(int) PyRun_SimpleString(char *); DL_IMPORT(int) PyRun_SimpleFile(FILE *, char *); + DL_IMPORT(int) PyRun_SimpleFileEx(FILE *, char *, int); DL_IMPORT(int) PyRun_InteractiveOne(FILE *, char *); DL_IMPORT(int) PyRun_InteractiveLoop(FILE *, char *); *************** *** 41,44 **** --- 43,48 ---- DL_IMPORT(PyObject *) PyRun_String(char *, int, PyObject *, PyObject *); DL_IMPORT(PyObject *) PyRun_File(FILE *, char *, int, PyObject *, PyObject *); + DL_IMPORT(PyObject *) PyRun_FileEx(FILE *, char *, int, + PyObject *, PyObject *, int); DL_IMPORT(PyObject *) Py_CompileString(char *, char *, int); From python-dev@python.org Sun Aug 27 20:20:34 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:20:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.109,2.110 Message-ID: <200008271920.MAA29064@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv29055 Modified Files: pythonrun.c Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.109 retrieving revision 2.110 diff -C2 -r2.109 -r2.110 *** pythonrun.c 2000/08/27 19:15:31 2.109 --- pythonrun.c 2000/08/27 19:20:31 2.110 *************** *** 451,460 **** PyRun_AnyFile(FILE *fp, char *filename) { if (filename == NULL) filename = "???"; ! if (Py_FdIsInteractive(fp, filename)) ! return PyRun_InteractiveLoop(fp, filename); else ! return PyRun_SimpleFile(fp, filename); } --- 451,470 ---- PyRun_AnyFile(FILE *fp, char *filename) { + return PyRun_AnyFileEx(fp, filename, 0); + } + + int + PyRun_AnyFileEx(FILE *fp, char *filename, int closeit) + { if (filename == NULL) filename = "???"; ! if (Py_FdIsInteractive(fp, filename)) { ! int err = PyRun_InteractiveLoop(fp, filename); ! if (closeit) ! fclose(fp); ! return err; ! } else ! return PyRun_SimpleFileEx(fp, filename, closeit); } *************** *** 543,546 **** --- 553,562 ---- PyRun_SimpleFile(FILE *fp, char *filename) { + return PyRun_SimpleFileEx(fp, filename, 0); + } + + int + PyRun_SimpleFileEx(FILE *fp, char *filename, int closeit) + { PyObject *m, *d, *v; char *ext; *************** *** 559,563 **** ) { /* Try to run a pyc file. First, re-open in binary */ ! /* Don't close, done in main: fclose(fp); */ if( (fp = fopen(filename, "rb")) == NULL ) { fprintf(stderr, "python: Can't reopen .pyc file\n"); --- 575,580 ---- ) { /* Try to run a pyc file. First, re-open in binary */ ! if (closeit) ! fclose(fp); if( (fp = fopen(filename, "rb")) == NULL ) { fprintf(stderr, "python: Can't reopen .pyc file\n"); *************** *** 569,573 **** v = run_pyc_file(fp, filename, d, d); } else { ! v = PyRun_File(fp, filename, Py_file_input, d, d); } if (v == NULL) { --- 586,590 ---- v = run_pyc_file(fp, filename, d, d); } else { ! v = PyRun_FileEx(fp, filename, Py_file_input, d, d, closeit); } if (v == NULL) { *************** *** 845,851 **** PyRun_File(FILE *fp, char *filename, int start, PyObject *globals, PyObject *locals) { ! return run_err_node(PyParser_SimpleParseFile(fp, filename, start), ! filename, globals, locals); } --- 862,877 ---- PyRun_File(FILE *fp, char *filename, int start, PyObject *globals, PyObject *locals) + { + PyRun_FileEx(fp, filename, start, globals, locals, 0); + } + + PyObject * + PyRun_FileEx(FILE *fp, char *filename, int start, PyObject *globals, + PyObject *locals, int closeit) { ! node *n = PyParser_SimpleParseFile(fp, filename, start); ! if (closeit) ! fclose(fp); ! return run_err_node(n, filename, globals, locals); } From python-dev@python.org Sun Aug 27 20:21:54 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:21:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python bltinmodule.c,2.176,2.177 Message-ID: <200008271921.MAA29247@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv29234 Modified Files: bltinmodule.c Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.176 retrieving revision 2.177 diff -C2 -r2.176 -r2.177 *** bltinmodule.c 2000/08/18 05:02:16 2.176 --- bltinmodule.c 2000/08/27 19:21:52 2.177 *************** *** 816,823 **** return NULL; } ! res = PyRun_File(fp, filename, Py_file_input, globals, locals); ! Py_BEGIN_ALLOW_THREADS ! fclose(fp); ! Py_END_ALLOW_THREADS return res; } --- 816,820 ---- return NULL; } ! res = PyRun_FileEx(fp, filename, Py_file_input, globals, locals, 1); return res; } From python-dev@python.org Sun Aug 27 20:21:07 2000 From: python-dev@python.org (Guido van Rossum) Date: Sun, 27 Aug 2000 12:21:07 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules main.c,1.41,1.42 Message-ID: <200008271921.MAA29196@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv29178 Modified Files: main.c Log Message: Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(), PyRun_FileEx(). These are the same as their non-Ex counterparts but have an extra argument, a flag telling them to close the file when done. Then this is used by Py_Main() and execfile() to close the file after it is parsed but before it is executed. Adding APIs seems strange given the feature freeze but it's the only way I see to close the bug report without incompatible changes. [ Bug #110616 ] source file stays open after parsing is done (PR#209) Index: main.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/main.c,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -r1.41 -r1.42 *** main.c 2000/07/09 20:42:34 1.41 --- main.c 2000/08/27 19:21:04 1.42 *************** *** 269,277 **** } } ! sts = PyRun_AnyFile( fp, ! filename == NULL ? "" : filename) != 0; ! if (filename != NULL) ! fclose(fp); } --- 269,276 ---- } } ! sts = PyRun_AnyFileEx( fp, ! filename == NULL ? "" : filename, ! filename != NULL) != 0; } From python-dev@python.org Sun Aug 27 21:00:37 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 27 Aug 2000 13:00:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include ceval.h,2.36,2.37 Message-ID: <200008272000.NAA32013@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv31797/Include Modified Files: ceval.h Log Message: The new PyEval_ReInitThreads wasn't declared in ceval.h; compiler wngs. Index: ceval.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/ceval.h,v retrieving revision 2.36 retrieving revision 2.37 diff -C2 -r2.36 -r2.37 *** ceval.h 2000/07/25 12:56:37 2.36 --- ceval.h 2000/08/27 20:00:35 2.37 *************** *** 100,103 **** --- 100,104 ---- extern DL_IMPORT(void) PyEval_AcquireThread(PyThreadState *tstate); extern DL_IMPORT(void) PyEval_ReleaseThread(PyThreadState *tstate); + extern DL_IMPORT(void) PyEval_ReInitThreads(void); #define Py_BEGIN_ALLOW_THREADS { \ From python-dev@python.org Sun Aug 27 21:16:34 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 27 Aug 2000 13:16:34 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python compile.c,2.136,2.137 Message-ID: <200008272016.NAA09206@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9068/Python Modified Files: compile.c Log Message: Re-allow 'import mod.submod as s', and change its meaning to what it should mean; the same as 'from mod import submod as s'. Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.136 retrieving revision 2.137 diff -C2 -r2.136 -r2.137 *** compile.c 2000/08/27 19:01:33 2.136 --- compile.c 2000/08/27 20:16:32 2.137 *************** *** 2355,2364 **** com_push(c, 1); if (NCH(subn) > 1) { ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0 || ! NCH(CHILD(subn, 0)) > 1) { com_error(c, PyExc_SyntaxError, "invalid syntax"); return; } com_addopname(c, STORE_NAME, CHILD(subn, 2)); } else --- 2355,2367 ---- com_push(c, 1); if (NCH(subn) > 1) { ! int j; ! if (strcmp(STR(CHILD(subn, 1)), "as") != 0) { com_error(c, PyExc_SyntaxError, "invalid syntax"); return; } + for (j=2 ; j < NCH(CHILD(subn, 0)); j += 2) + com_addopname(c, LOAD_ATTR, + CHILD(CHILD(subn, 0), j)); com_addopname(c, STORE_NAME, CHILD(subn, 2)); } else From python-dev@python.org Sun Aug 27 21:18:20 2000 From: python-dev@python.org (Tim Peters) Date: Sun, 27 Aug 2000 13:18:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.110,2.111 Message-ID: <200008272018.NAA09356@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv9282/python/dist/src/python Modified Files: pythonrun.c Log Message: Hard to believe Guido compiled this! Function lacked a return stmt. Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.110 retrieving revision 2.111 diff -C2 -r2.110 -r2.111 *** pythonrun.c 2000/08/27 19:20:31 2.110 --- pythonrun.c 2000/08/27 20:18:17 2.111 *************** *** 863,867 **** PyObject *locals) { ! PyRun_FileEx(fp, filename, start, globals, locals, 0); } --- 863,867 ---- PyObject *locals) { ! return PyRun_FileEx(fp, filename, start, globals, locals, 0); } From python-dev@python.org Sun Aug 27 21:31:30 2000 From: python-dev@python.org (Thomas Wouters) Date: Sun, 27 Aug 2000 13:31:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.196,2.197 compile.c,2.137,2.138 import.c,2.148,2.149 Message-ID: <200008272031.NAA10511@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv10284/Python Modified Files: ceval.c compile.c import.c Log Message: Replace the run-time 'future-bytecode-stream-inspection' hack to find out how 'import' was called with a compiletime mechanism: create either a tuple of the import arguments, or None (in the case of a normal import), add it to the code-block constants, and load it onto the stack before calling IMPORT_NAME. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.196 retrieving revision 2.197 diff -C2 -r2.196 -r2.197 *** ceval.c 2000/08/27 17:33:16 2.196 --- ceval.c 2000/08/27 20:31:27 2.197 *************** *** 72,76 **** static int exec_statement(PyFrameObject *, PyObject *, PyObject *, PyObject *); - static PyObject *find_from_args(PyFrameObject *, int); static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *); static void reset_exc_info(PyThreadState *); --- 72,75 ---- *************** *** 1628,1636 **** break; } ! u = find_from_args(f, INSTR_OFFSET()); ! if (u == NULL) { ! x = u; ! break; ! } w = Py_BuildValue("(OOOO)", w, --- 1627,1631 ---- break; } ! u = POP(); w = Py_BuildValue("(OOOO)", w, *************** *** 3067,3119 **** Py_DECREF(v); return 0; - } - - /* Hack for ni.py */ - static PyObject * - find_from_args(PyFrameObject *f, int nexti) - { - int opcode; - int oparg; - PyObject *list, *name; - unsigned char *next_instr; - - _PyCode_GETCODEPTR(f->f_code, &next_instr); - next_instr += nexti; - - opcode = (*next_instr++); - if (opcode != IMPORT_FROM && opcode != IMPORT_STAR) { - Py_INCREF(Py_None); - return Py_None; - } - - list = PyList_New(0); - if (list == NULL) - return NULL; - - if (opcode == IMPORT_STAR) { - name = PyString_FromString("*"); - if (!name) - Py_DECREF(list); - else { - if (PyList_Append(list, name) < 0) { - Py_DECREF(list); - } - Py_DECREF(name); - } - } else { - do { - oparg = (next_instr[1]<<8) + next_instr[0]; - /* Jump over our own argument, the next instruction - (which is a STORE), and its argument.*/ - next_instr += 5; - name = Getnamev(f, oparg); - if (PyList_Append(list, name) < 0) { - Py_DECREF(list); - break; - } - opcode = (*next_instr++); - } while (opcode == IMPORT_FROM); - } - return list; } --- 3062,3065 ---- Index: compile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v retrieving revision 2.137 retrieving revision 2.138 diff -C2 -r2.137 -r2.138 *** compile.c 2000/08/27 20:16:32 2.137 --- compile.c 2000/08/27 20:31:27 2.138 *************** *** 2330,2333 **** --- 2330,2334 ---- { int i; + PyObject *tup; REQ(n, import_stmt); /* 'import' dotted_name (',' dotted_name)* | *************** *** 2336,2341 **** /* 'from' dotted_name 'import' ... */ REQ(CHILD(n, 1), dotted_name); ! com_addopname(c, IMPORT_NAME, CHILD(n, 1)); com_push(c, 1); if (TYPE(CHILD(n, 3)) == STAR) com_addbyte(c, IMPORT_STAR); --- 2337,2354 ---- /* 'from' dotted_name 'import' ... */ REQ(CHILD(n, 1), dotted_name); ! ! if (TYPE(CHILD(n, 3)) == STAR) { ! tup = Py_BuildValue("(s)", "*"); ! } else { ! tup = PyTuple_New((NCH(n) - 2)/2); ! for (i = 3; i < NCH(n); i += 2) { ! PyTuple_SET_ITEM(tup, (i-3)/2, ! PyString_FromString(STR( ! CHILD(CHILD(n, i), 0)))); ! } ! } ! com_addoparg(c, LOAD_CONST, com_addconst(c, tup)); com_push(c, 1); + com_addopname(c, IMPORT_NAME, CHILD(n, 1)); if (TYPE(CHILD(n, 3)) == STAR) com_addbyte(c, IMPORT_STAR); *************** *** 2352,2357 **** node *subn = CHILD(n, i); REQ(subn, dotted_as_name); ! com_addopname(c, IMPORT_NAME, CHILD(subn, 0)); com_push(c, 1); if (NCH(subn) > 1) { int j; --- 2365,2371 ---- node *subn = CHILD(n, i); REQ(subn, dotted_as_name); ! com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None)); com_push(c, 1); + com_addopname(c, IMPORT_NAME, CHILD(subn, 0)); if (NCH(subn) > 1) { int j; Index: import.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/import.c,v retrieving revision 2.148 retrieving revision 2.149 diff -C2 -r2.148 -r2.149 *** import.c 2000/08/24 20:11:32 2.148 --- import.c 2000/08/27 20:31:27 2.149 *************** *** 67,71 **** added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50822 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the --- 67,71 ---- added to the .pyc file header? */ /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ ! #define MAGIC (50823 | ((long)'\r'<<16) | ((long)'\n'<<24)) /* Magic word as global; note that _PyImport_Init() can change the *************** *** 1402,1406 **** static PyObject *fromlist = NULL; if (fromlist == NULL && strchr(name, '.') != NULL) { ! fromlist = Py_BuildValue("[s]", "*"); if (fromlist == NULL) return NULL; --- 1402,1406 ---- static PyObject *fromlist = NULL; if (fromlist == NULL && strchr(name, '.') != NULL) { ! fromlist = Py_BuildValue("(s)", "*"); if (fromlist == NULL) return NULL; From python-dev@python.org Sun Aug 27 21:44:17 2000 From: python-dev@python.org (Greg Ward) Date: Sun, 27 Aug 2000 13:44:17 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command bdist_wininst.py,1.6,1.7 Message-ID: <200008272044.NAA11468@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv11434 Modified Files: bdist_wininst.py Log Message: Fix line-endings. Fix bad operator precedence: should be "(metadata or '') + '\n'". Index: bdist_wininst.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/bdist_wininst.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** bdist_wininst.py 2000/08/26 02:40:10 1.6 --- bdist_wininst.py 2000/08/27 20:44:13 1.7 *************** *** 1,463 **** ! """distutils.command.bdist_wininst ! ! Implements the Distutils 'bdist_wininst' command: create a windows installer ! exe-program.""" ! ! # created 2000/06/02, Thomas Heller ! ! __revision__ = "$Id$" ! ! import sys, os, string ! from distutils.core import Command ! from distutils.util import get_platform ! from distutils.dir_util import create_tree, remove_tree ! from distutils.errors import * ! ! class bdist_wininst (Command): ! ! description = "create an executable installer for MS Windows" ! ! user_options = [('bdist-dir=', 'd', ! "temporary directory for creating the distribution"), ! ('keep-tree', 'k', ! "keep the pseudo-installation tree around after " + ! "creating the distribution archive"), ! ('target-version=', 'v', ! "require a specific python version" + ! " on the target system"), ! ('dist-dir=', 'd', ! "directory to put final built distributions in"), ! ] ! ! def initialize_options (self): ! self.bdist_dir = None ! self.keep_tree = 0 ! self.target_compile = 0 ! self.target_optimize = 0 ! self.target_version = None ! self.dist_dir = None ! ! # initialize_options() ! ! ! def finalize_options (self): ! if self.bdist_dir is None: ! bdist_base = self.get_finalized_command('bdist').bdist_base ! self.bdist_dir = os.path.join(bdist_base, 'wininst') ! if not self.target_version: ! self.target_version = "" ! else: ! if not self.target_version in ("1.5", "1.6", "2.0"): ! raise DistutilsOptionError ( ! "target version must be 1.5, 1.6, or 2.0") ! if self.distribution.has_ext_modules(): ! short_version = sys.version[:3] ! if self.target_version and self.target_version != short_version: ! raise DistutilsOptionError ("target version can only be" + ! short_version) ! self.target_version = short_version ! ! self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) ! ! # finalize_options() ! ! ! def run (self): ! ! self.run_command ('build') ! ! install = self.reinitialize_command('install') ! install.root = self.bdist_dir ! ! install_lib = self.reinitialize_command('install_lib') ! # we do not want to include pyc or pyo files ! install_lib.compile = 0 ! install_lib.optimize = 0 ! ! install_lib.ensure_finalized() ! ! self.announce ("installing to %s" % self.bdist_dir) ! install.ensure_finalized() ! install.run() ! ! # And make an archive relative to the root of the ! # pseudo-installation tree. ! fullname = self.distribution.get_fullname() ! archive_basename = os.path.join(self.bdist_dir, ! "%s.win32" % fullname) ! ! # XXX hack! Our archive MUST be relative to sys.prefix ! # XXX What about .install_data, .install_scripts, ...? ! # [Perhaps require that all installation dirs be under sys.prefix ! # on Windows? this will be acceptable until we start dealing ! # with Python applications, at which point we should zip up ! # the application directory -- and again everything can be ! # under one dir --GPW] ! root_dir = install.install_lib ! arcname = self.make_archive (archive_basename, "zip", ! root_dir=root_dir) ! self.create_exe (arcname, fullname) ! ! if not self.keep_tree: ! remove_tree (self.bdist_dir, self.verbose, self.dry_run) ! ! # run() ! ! def create_inifile (self): ! # Create an inifile containing data describing the installation. ! # This could be done without creating a real file, but ! # a file is (at least) useful for debugging bdist_wininst. ! ! metadata = self.distribution.metadata ! ini_name = "%s.ini" % metadata.get_fullname() ! ! self.announce ("creating %s" % ini_name) ! inifile = open (ini_name, "w") ! ! # Write the [metadata] section. Values are written with ! # repr()[1:-1], so they do not contain unprintable characters, and ! # are not surrounded by quote chars. ! inifile.write ("[metadata]\n") ! ! # 'info' will be displayed in the installer's dialog box, ! # describing the items to be installed. ! info = metadata.long_description or '' + '\n' ! ! for name in dir (metadata): ! if (name != 'long_description'): ! data = getattr (metadata, name) ! if data: ! info = info + ("\n %s: %s" % \ ! (string.capitalize (name), data)) ! inifile.write ("%s=%s\n" % (name, repr (data)[1:-1])) ! ! # The [setup] section contains entries controlling ! # the installer runtime. ! inifile.write ("\n[Setup]\n") ! inifile.write ("info=%s\n" % repr (info)[1:-1]) ! inifile.write ("pthname=%s.%s\n" % (metadata.name, metadata.version)) ! if self.target_version: ! inifile.write ("target_version=%s\n" % self.target_version) ! ! title = self.distribution.get_fullname() ! inifile.write ("title=%s\n" % repr (title)[1:-1]) ! inifile.close() ! return ini_name ! ! # create_inifile() ! ! def create_exe (self, arcname, fullname): ! import struct#, zlib ! ! cfgdata = open (self.create_inifile()).read() ! ! installer_name = os.path.join(self.dist_dir, ! "%s.win32.exe" % fullname) ! self.announce ("creating %s" % installer_name) ! ! file = open (installer_name, "wb") ! file.write (self.get_exe_bytes ()) ! file.write (cfgdata) ! header = struct.pack (" Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv12637/Modules Modified Files: _sre.c Log Message: don't mistake memory errors (including reaching the recursion limit) with success. also, check return values from the mark functions. this addresses (but doesn't really solve) bug #112693, and low-memory problems reported by jack jansen. Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.38 retrieving revision 2.39 diff -C2 -r2.38 -r2.39 *** _sre.c 2000/08/18 05:09:50 2.38 --- _sre.c 2000/08/27 20:59:47 2.39 *************** *** 17,20 **** --- 17,21 ---- * 00-08-07 fl use PyOS_CheckStack() if available * 00-08-08 fl changed findall to return empty strings instead of None + * 00-08-27 fl properly propagate memory errors * * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. *************** *** 59,75 **** /* optional features */ ! /* prevent run-away recursion (bad patterns on long strings) ! Require a smaller recursion limit for a number of 64-bit platforms ! to prevent stack overflow: ! Win64 - MS_WIN64, Linux64 - __LP64__, Monterey (64-bit AIX) - _LP64 ! XXX Or maybe this should be defined for all SIZEOF_VOIDP>4 platforms? ! */ #if !defined(USE_STACKCHECK) ! # if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64) ! # define USE_RECURSION_LIMIT 7500 ! # else ! # define USE_RECURSION_LIMIT 10000 ! # endif #endif /* enables fast searching */ --- 60,75 ---- /* optional features */ ! /* prevent run-away recursion (bad patterns on long strings) */ ! #if !defined(USE_STACKCHECK) ! #if defined(MS_WIN64) || defined(__LP64__) || defined(_LP64) ! /* require smaller recursion limit for a number of 64-bit platforms: ! Win64 (MS_WIN64), Linux64 (__LP64__), Monterey (64-bit AIX) (_LP64) */ ! /* FIXME: maybe the limit should be 40000 / sizeof(void*) ? */ ! #define USE_RECURSION_LIMIT 7500 ! #else ! #define USE_RECURSION_LIMIT 10000 #endif + #endif /* enables fast searching */ *************** *** 535,538 **** --- 535,539 ---- } + #if 0 /* not used in this release */ LOCAL(int) SRE_INFO(SRE_STATE* state, SRE_CODE* pattern) *************** *** 560,563 **** --- 561,565 ---- return pattern[0]; } + #endif LOCAL(int) *************** *** 876,880 **** i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return 1; ptr--; count--; --- 878,882 ---- i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return i; ptr--; count--; *************** *** 888,892 **** i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return 1; ptr--; count--; --- 890,894 ---- i = SRE_MATCH(state, pattern + pattern[0], level + 1); if (i) ! return i; ptr--; count--; *************** *** 957,966 **** rp->count = count; lastmark = state->lastmark; ! mark_save(state, 0, lastmark); /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) return i; - mark_restore(state, 0, lastmark); rp->count = count - 1; state->ptr = ptr; --- 959,972 ---- rp->count = count; lastmark = state->lastmark; ! i = mark_save(state, 0, lastmark); ! if (i < 0) ! return i; /* RECURSIVE */ i = SRE_MATCH(state, rp->pattern + 3, level + 1); if (i) + return i; + i = mark_restore(state, 0, lastmark); + if (i < 0) return i; rp->count = count - 1; state->ptr = ptr; *************** *** 1699,1706 **** } ! status = PyList_Append(list, item); ! Py_DECREF(item); ! if (status < 0) goto error; if (state.ptr == state.start) --- 1705,1712 ---- } ! if (PyList_Append(list, item) < 0) { ! Py_DECREF(item); goto error; + } if (state.ptr == state.start) From python-dev@python.org Sun Aug 27 22:32:50 2000 From: python-dev@python.org (Fredrik Lundh) Date: Sun, 27 Aug 2000 14:32:50 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules _sre.c,2.39,2.40 Message-ID: <200008272132.OAA23965@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv23689/Modules Modified Files: _sre.c Log Message: oops. accidentally reintroduced a memory leak. put the bugfix back. Index: _sre.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v retrieving revision 2.39 retrieving revision 2.40 diff -C2 -r2.39 -r2.40 *** _sre.c 2000/08/27 20:59:47 2.39 --- _sre.c 2000/08/27 21:32:46 2.40 *************** *** 1705,1712 **** } ! if (PyList_Append(list, item) < 0) { ! Py_DECREF(item); goto error; - } if (state.ptr == state.start) --- 1705,1713 ---- } ! status = PyList_Append(list, item); ! Py_DECREF(item); ! ! if (status < 0) goto error; if (state.ptr == state.start) From python-dev@python.org Mon Aug 28 16:47:06 2000 From: python-dev@python.org (Jeremy Hylton) Date: Mon, 28 Aug 2000 08:47:06 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.30,1.31 Message-ID: <200008281547.IAA10951@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv10873 Modified Files: pep-0200.txt Log Message: test_fork1 now works, thanks to Charles Waldman's patch Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** pep-0200.txt 2000/08/25 13:59:33 1.30 --- pep-0200.txt 2000/08/28 15:47:00 1.31 *************** *** 91,104 **** test case platform date reported --------- -------- ------------- ! test_fork1 Linux 26-Jul-2000 ! [no clue; there are probably two bugs here] ! [19-Aug-200 tim ! Charles Waldman whipped up a patch to give child processes a new ! "global lock": ! http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 ! While this doesn't appear to address the symptoms we *saw*, it ! *does* so far appear to be fixing the failing cases anyway ! ] ! Previously failing test cases --- 91,95 ---- test case platform date reported --------- -------- ------------- ! [None currently failing.] Previously failing test cases *************** *** 109,112 **** --- 100,114 ---- test case platform date reported --------- -------- ------------- + test_fork1 Linux 26-Jul-2000 + [28-aug-2000 fixed by cgw; solution is to create copies of + lock in child process] + [19-Aug-2000 tim + Charles Waldman whipped up a patch to give child processes a new + "global lock": + http://sourceforge.net/patch/?func=detailpatch&patch_id=101226&group_id=5470 + While this doesn't appear to address the symptoms we *saw*, it + *does* so far appear to be fixing the failing cases anyway + ] + test_parser all 22-Aug-2000 test_posixpath all 22-Aug-2000 From python-dev@python.org Mon Aug 28 17:00:51 2000 From: python-dev@python.org (Jeremy Hylton) Date: Mon, 28 Aug 2000 09:00:51 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep2html.py,1.12,1.13 Message-ID: <200008281600.JAA14217@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv13884 Modified Files: pep2html.py Log Message: new usage to support conversion of only specified PEPs Usage: %(PROGRAM)s [options] [peps] Notes: The optional argument peps can be either pep numbers or .txt files. Options: -u/--user SF username [rest is the same] Index: pep2html.py =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep2html.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** pep2html.py 2000/08/17 04:27:04 1.12 --- pep2html.py 2000/08/28 16:00:49 1.13 *************** *** 3,10 **** convert PEP's to (X)HTML - courtesy of /F ! Usage: %(PROGRAM)s [options] [sf_username] Options: -i/--install After generating the HTML, install it SourceForge. In that case the --- 3,17 ---- convert PEP's to (X)HTML - courtesy of /F ! Usage: %(PROGRAM)s [options] [peps] + Notes: + + The optional argument peps can be either pep numbers or .txt files. + Options: + -u/--user + SF username + -i/--install After generating the HTML, install it SourceForge. In that case the *************** *** 145,148 **** --- 152,168 ---- os.chmod(outfile, 0664) + + def find_pep(pep_str): + """Find the .txt file indicated by a cmd line argument""" + if os.path.exists(pep_str): + return pep_str + num = int(pep_str) + return "pep-%04d.txt" % num + + def make_html(file): + newfile = os.path.splitext(file)[0] + ".html" + print file, "->", newfile + fixfile(file, newfile) + return newfile *************** *** 157,166 **** usage(1, msg) - if args: - username = args[0] + '@' - del args[0] - if args: - usage(1, 'unexpected arguments') - for opt, arg in opts: if opt in ('-h', '--help'): --- 177,180 ---- *************** *** 168,179 **** elif opt in ('-i', '--install'): update = 1 ! for file in glob.glob("pep-*.txt"): ! newfile = os.path.splitext(file)[0] + ".html" ! print file, "->", newfile ! fixfile(file, newfile) if update: - os.system("scp pep-*.html style.css " + username + HOST + ":" + HDIR) os.system("ssh " + username + HOST + " chmod 664 " + HDIR + "/*") --- 182,205 ---- elif opt in ('-i', '--install'): update = 1 + elif opt in ('-u', '--user'): + username = arg + "@" ! if args: ! html = [] ! for pep in args: ! file = find_pep(pep) ! newfile = make_html(file) ! html.append(newfile) ! os.system("scp %s style.css " % " ".join(html) \ ! + username + HOST + ":" + HDIR) ! else: ! # do them all ! for file in glob.glob("pep-*.txt"): ! make_html(file) ! if update: ! os.system("scp pep-*.html style.css " + \ ! username + HOST + ":" + HDIR) if update: os.system("ssh " + username + HOST + " chmod 664 " + HDIR + "/*") From python-dev@python.org Mon Aug 28 18:20:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 10:20:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib os.py,1.36,1.37 popen2.py,1.13,1.14 Message-ID: <200008281720.KAA09128@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv9081/Lib Modified Files: os.py popen2.py Log Message: Added os.popen2() and os.popen3() for non-Windows platforms. Index: os.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/os.py,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** os.py 2000/07/25 15:16:40 1.36 --- os.py 2000/08/28 17:20:04 1.37 *************** *** 455,456 **** --- 455,469 ---- + if not _exists("popen2"): + def popen2(cmd, mode="t", bufsize=-1): + assert mode[:1] in ("b", "t") + import popen2 + stdout, stdin = popen2.popen2(cmd, bufsize) + return stdin, stdout + + if not _exists("popen3"): + def popen3(cmd, mode="t", bufsize=-1): + assert mode[:1] in ("b", "t") + import popen2 + stdout, stdin, stderr = popen2.popen3(cmd, bufsize) + return stdin, stdout, stderr Index: popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/popen2.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** popen2.py 2000/08/20 05:57:36 1.13 --- popen2.py 2000/08/28 17:20:04 1.14 *************** *** 90,94 **** return self.sts ! if hasattr(os, "popen2"): def popen2(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is --- 90,95 ---- return self.sts ! ! if sys.platform[:3] == "win": def popen2(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is *************** *** 110,114 **** return inst.fromchild, inst.tochild ! if hasattr(os, "popen3"): def popen3(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is --- 111,115 ---- return inst.fromchild, inst.tochild ! if sys.platform[:3] == "win": def popen3(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is *************** *** 130,134 **** return inst.fromchild, inst.tochild, inst.childerr ! if hasattr(os, "popen4"): def popen4(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is --- 131,135 ---- return inst.fromchild, inst.tochild, inst.childerr ! if sys.platform[:3] == "win": def popen4(cmd, mode='t', bufsize=-1): """Execute the shell command 'cmd' in a sub-process. If 'bufsize' is *************** *** 139,142 **** --- 140,144 ---- else: pass # not yet on unix + def _test(): From python-dev@python.org Mon Aug 28 18:20:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 10:20:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_popen2.py,1.2,1.3 Message-ID: <200008281720.KAA09139@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv9081/Lib/test Modified Files: test_popen2.py Log Message: Added os.popen2() and os.popen3() for non-Windows platforms. Index: test_popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_popen2.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_popen2.py 2000/07/27 07:42:43 1.2 --- test_popen2.py 2000/08/28 17:20:05 1.3 *************** *** 4,7 **** --- 4,9 ---- """ + import os + # popen2 contains its own testing routine # which is especially useful to see if open files *************** *** 10,13 **** --- 12,16 ---- def main(): + print "Test popen2 module:" try: from os import popen *************** *** 20,23 **** popen2._test() - main() --- 23,56 ---- popen2._test() + def _test(): + # same test as popen2._test(), but using the os.popen*() API + print "Testing os module:" + import popen2 + cmd = "cat" + teststr = "abc\n" + resultstr = teststr + if os.name == "nt": + cmd = "more" + resultstr = "\n" + resultstr + print "testing popen2..." + w, r = os.popen2(cmd) + w.write(teststr) + w.close() + assert r.read() == resultstr + print "testing popen3..." + try: + w, r, e = os.popen3([cmd]) + except: + w, r, e = os.popen3(cmd) + w.write(teststr) + w.close() + assert r.read() == resultstr + assert e.read() == "" + for inst in popen2._active[:]: + inst.wait() + assert not popen2._active + print "All OK" + + main() + _test() From python-dev@python.org Mon Aug 28 18:20:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 10:20:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_popen2,1.2,1.3 Message-ID: <200008281720.KAA09138@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv9081/Lib/test/output Modified Files: test_popen2 Log Message: Added os.popen2() and os.popen3() for non-Windows platforms. Index: test_popen2 =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_popen2,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_popen2 2000/07/11 15:15:31 1.2 --- test_popen2 2000/08/28 17:20:05 1.3 *************** *** 1,3 **** --- 1,8 ---- test_popen2 + Test popen2 module: + testing popen2... + testing popen3... + All OK + Testing os module: testing popen2... testing popen3... From python-dev@python.org Tue Aug 29 02:15:21 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 28 Aug 2000 18:15:21 -0700 Subject: [Python-checkins] CVS: distutils/distutils core.py,1.43,1.44 dist.py,1.33,1.34 Message-ID: <200008290115.SAA23519@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv21957 Modified Files: core.py dist.py Log Message: Added 'script_name' and 'script_args' instance attributes to Distribution. Changed 'core.setup()' so it sets them to reasonable defaults. Tweaked how the "usage" string is generated: 'core' now provides 'gen_usage()', which is used instead of 'USAGE'. Modified "build_py" and "sdist" commands to refer to 'self.distribution.script_name' rather than 'sys.argv[0]'. Index: core.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/core.py,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** core.py 2000/06/21 02:59:14 1.43 --- core.py 2000/08/29 01:15:18 1.44 *************** *** 26,35 **** # is generated with various --help options: global help, list commands, # and per-command help. ! usage = """\ ! usage: %s [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] ! or: %s --help [cmd1 cmd2 ...] ! or: %s --help-commands ! or: %s cmd --help ! """ % ((os.path.basename(sys.argv[0]),) * 4) --- 26,35 ---- # is generated with various --help options: global help, list commands, # and per-command help. ! USAGE = """\ ! usage: %(script)s [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] ! or: %(script)s --help [cmd1 cmd2 ...] ! or: %(script)s --help-commands ! or: %(script)s cmd --help ! """ *************** *** 38,49 **** DEBUG = os.environ.get('DISTUTILS_DEBUG') def setup (**attrs): """The gateway to the Distutils: do everything your setup script needs to do, in a highly flexible and user-driven way. Briefly: create a Distribution instance; find and parse config files; parse the command ! line; run each of those commands using the options supplied to ! 'setup()' (as keyword arguments), in config files, and on the command ! line. The Distribution instance might be an instance of a class supplied via --- 38,53 ---- DEBUG = os.environ.get('DISTUTILS_DEBUG') + def gen_usage (script_name): + script = os.path.basename(script_name) + return USAGE % vars() + def setup (**attrs): """The gateway to the Distutils: do everything your setup script needs to do, in a highly flexible and user-driven way. Briefly: create a Distribution instance; find and parse config files; parse the command ! line; run each Distutils command found there, customized by the options ! supplied to 'setup()' (as keyword arguments), in config files, and on ! the command line. The Distribution instance might be an instance of a class supplied via *************** *** 80,83 **** --- 84,92 ---- klass = Distribution + if not attrs.has_key('script_name'): + attrs['script_name'] = sys.argv[0] + if not attrs.has_key('script_args'): + attrs['script_args'] = sys.argv[1:] + # Create the Distribution instance, using the remaining arguments # (ie. everything except distclass) to initialize it *************** *** 98,105 **** # fault, so turn them into SystemExit to suppress tracebacks. try: ! ok = dist.parse_command_line (sys.argv[1:]) except DistutilsArgError, msg: ! sys.stderr.write (usage + "\n") ! raise SystemExit, "error: %s" % msg if DEBUG: --- 107,115 ---- # fault, so turn them into SystemExit to suppress tracebacks. try: ! ok = dist.parse_command_line() except DistutilsArgError, msg: ! script = os.path.basename(dist.script_name) ! raise SystemExit, \ ! gen_usage(dist.script_name) + "\nerror: %s" % msg if DEBUG: Index: dist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/dist.py,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** dist.py 2000/07/27 02:13:19 1.33 --- dist.py 2000/08/29 01:15:18 1.34 *************** *** 132,135 **** --- 132,141 ---- self.cmdclass = {} + # 'script_name' and 'script_args' are usually set to sys.argv[0] + # and sys.argv[1:], but they can be overridden when the caller is + # not necessarily a setup script run from the command-line. + self.script_name = None + self.script_args = None + # 'command_options' is where we store command options between # parsing them (from config files, the command-line, etc.) and when *************** *** 327,348 **** # -- Command-line parsing methods ---------------------------------- ! def parse_command_line (self, args): ! """Parse the setup script's command line. 'args' must be a list ! of command-line arguments, most likely 'sys.argv[1:]' (see the ! 'setup()' function). This list is first processed for "global ! options" -- options that set attributes of the Distribution ! instance. Then, it is alternately scanned for Distutils ! commands and options for that command. Each new command ! terminates the options for the previous command. The allowed ! options for a command are determined by the 'user_options' ! attribute of the command class -- thus, we have to be able to ! load command classes in order to parse the command line. Any ! error in that 'options' attribute raises DistutilsGetoptError; ! any error on the command-line raises DistutilsArgError. If no ! Distutils commands were found on the command line, raises ! DistutilsArgError. Return true if command-line were ! successfully parsed and we should carry on with executing ! commands; false if no errors but we shouldn't execute commands ! (currently, this only happens if user asks for help). """ # We have to parse the command line a bit at a time -- global --- 333,354 ---- # -- Command-line parsing methods ---------------------------------- ! def parse_command_line (self): ! """Parse the setup script's command line, taken from the ! 'script_args' instance attribute (which defaults to 'sys.argv[1:]' ! -- see 'setup()' in core.py). This list is first processed for ! "global options" -- options that set attributes of the Distribution ! instance. Then, it is alternately scanned for Distutils commands ! and options for that command. Each new command terminates the ! options for the previous command. The allowed options for a ! command are determined by the 'user_options' attribute of the ! command class -- thus, we have to be able to load command classes ! in order to parse the command line. Any error in that 'options' ! attribute raises DistutilsGetoptError; any error on the ! command-line raises DistutilsArgError. If no Distutils commands ! were found on the command line, raises DistutilsArgError. Return ! true if command-line were successfully parsed and we should carry ! on with executing commands; false if no errors but we shouldn't ! execute commands (currently, this only happens if user asks for ! help). """ # We have to parse the command line a bit at a time -- global *************** *** 357,361 **** parser.set_negative_aliases (self.negative_opt) parser.set_aliases ({'license': 'licence'}) ! args = parser.getopt (object=self) option_order = parser.get_option_order() --- 363,367 ---- parser.set_negative_aliases (self.negative_opt) parser.set_aliases ({'license': 'licence'}) ! args = parser.getopt (args=self.script_args, object=self) option_order = parser.get_option_order() *************** *** 507,511 **** """ # late import because of mutual dependence between these modules ! from distutils.core import usage from distutils.cmd import Command --- 513,517 ---- """ # late import because of mutual dependence between these modules ! from distutils.core import gen_usage from distutils.cmd import Command *************** *** 536,540 **** print ! print usage return --- 542,546 ---- print ! print gen_usage(self.script_name) return *************** *** 548,552 **** false. """ ! from distutils.core import usage # User just wants a list of commands -- we'll print it out and stop --- 554,558 ---- false. """ ! from distutils.core import gen_usage # User just wants a list of commands -- we'll print it out and stop *************** *** 556,560 **** self.print_commands () print ! print usage return 1 --- 562,566 ---- self.print_commands () print ! print gen_usage(self.script_name) return 1 From python-dev@python.org Tue Aug 29 02:15:21 2000 From: python-dev@python.org (Greg Ward) Date: Mon, 28 Aug 2000 18:15:21 -0700 Subject: [Python-checkins] CVS: distutils/distutils/command build_py.py,1.27,1.28 sdist.py,1.43,1.44 Message-ID: <200008290115.SAA23521@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils/command In directory slayer.i.sourceforge.net:/tmp/cvs-serv21957/command Modified Files: build_py.py sdist.py Log Message: Added 'script_name' and 'script_args' instance attributes to Distribution. Changed 'core.setup()' so it sets them to reasonable defaults. Tweaked how the "usage" string is generated: 'core' now provides 'gen_usage()', which is used instead of 'USAGE'. Modified "build_py" and "sdist" commands to refer to 'self.distribution.script_name' rather than 'sys.argv[0]'. Index: build_py.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/build_py.py,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** build_py.py 2000/08/15 13:01:25 1.27 --- build_py.py 2000/08/29 01:15:18 1.28 *************** *** 178,182 **** module_files = glob (os.path.join (package_dir, "*.py")) modules = [] ! setup_script = os.path.abspath (sys.argv[0]) for f in module_files: --- 178,182 ---- module_files = glob (os.path.join (package_dir, "*.py")) modules = [] ! setup_script = os.path.abspath(self.distribution.script_name) for f in module_files: *************** *** 185,188 **** --- 185,190 ---- module = os.path.splitext (os.path.basename (f))[0] modules.append ((package, module, f)) + else: + self.debug_print("excluding %s" % setup_script) return modules Index: sdist.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/command/sdist.py,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** sdist.py 2000/08/22 01:49:41 1.43 --- sdist.py 2000/08/29 01:15:18 1.44 *************** *** 203,207 **** # developer elects to generate a manifest some other way -- then we # can't regenerate the manifest, so we don't.) ! setup_newer = dep_util.newer(sys.argv[0], self.manifest) # cases: --- 203,210 ---- # developer elects to generate a manifest some other way -- then we # can't regenerate the manifest, so we don't.) ! self.debug_print("checking if %s newer than %s" % ! (self.distribution.script_name, self.manifest)) ! setup_newer = dep_util.newer(self.distribution.script_name, ! self.manifest) # cases: From python-dev@python.org Tue Aug 29 05:56:17 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:56:17 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.197,2.198 Message-ID: <200008290456.VAA31648@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv31640 Modified Files: ceval.c Log Message: eval_code2(): Guido provides this patch for his suggested elaboration of extended print. If the file object being printed to is None, then sys.stdout is used. Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.197 retrieving revision 2.198 diff -C2 -r2.197 -r2.198 *** ceval.c 2000/08/27 20:31:27 2.197 --- ceval.c 2000/08/29 04:56:13 2.198 *************** *** 1231,1235 **** case PRINT_ITEM: v = POP(); ! if (stream == NULL) { w = PySys_GetObject("stdout"); if (w == NULL) { --- 1231,1235 ---- case PRINT_ITEM: v = POP(); ! if (stream == NULL || stream == Py_None) { w = PySys_GetObject("stdout"); if (w == NULL) { *************** *** 1264,1268 **** case PRINT_NEWLINE: ! if (stream == NULL) { w = PySys_GetObject("stdout"); if (w == NULL) --- 1264,1268 ---- case PRINT_NEWLINE: ! if (stream == NULL || stream == Py_None) { w = PySys_GetObject("stdout"); if (w == NULL) From python-dev@python.org Tue Aug 29 05:56:48 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:56:48 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_grammar.py,1.16,1.17 Message-ID: <200008290456.VAA31687@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv31678 Modified Files: test_grammar.py Log Message: Added tests of "print >> None" Index: test_grammar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grammar.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** test_grammar.py 2000/08/22 02:43:07 1.16 --- test_grammar.py 2000/08/29 04:56:46 1.17 *************** *** 269,272 **** --- 269,297 ---- print >> sys.stdout, 0 or 1 + # test print >> None + class Gulp: + def write(self, msg): pass + + def driver(): + oldstdout = sys.stdout + sys.stdout = Gulp() + try: + tellme(Gulp()) + tellme() + finally: + sys.stdout = oldstdout + + # we should see this once + def tellme(file=sys.stdout): + print >> file, 'hello world' + + driver() + + # we should not see this at all + def tellme(file=None): + print >> file, 'goodbye universe' + + driver() + # syntax errors def check_syntax(statement): From python-dev@python.org Tue Aug 29 05:57:36 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:57:36 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/ref ref6.tex,1.30,1.31 Message-ID: <200008290457.VAA31761@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/ref In directory slayer.i.sourceforge.net:/tmp/cvs-serv31753 Modified Files: ref6.tex Log Message: Document "print >> None" Index: ref6.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/ref/ref6.tex,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** ref6.tex 2000/08/21 15:45:16 1.30 --- ref6.tex 2000/08/29 04:57:34 1.31 *************** *** 339,345 **** In this form, the first expression after the \keyword{>>} must evaluate to a ``file-like'' object, specifically an object that has a ! \method{write()} method as described above. With the extended form, ! the subsequent expressions are printed to this file-like object ! instead of \code{sys.stdout}. \section{The \keyword{return} statement \label{return}} --- 339,346 ---- In this form, the first expression after the \keyword{>>} must evaluate to a ``file-like'' object, specifically an object that has a ! \method{write()} method as described above. With this extended form, ! the subsequent expressions are printed to this file object. If the ! first expression evaluates to \code{None}, then \code{sys.stdout} is ! used as the file for output. \section{The \keyword{return} statement \label{return}} From python-dev@python.org Tue Aug 29 05:57:12 2000 From: python-dev@python.org (Barry Warsaw) Date: Mon, 28 Aug 2000 21:57:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_grammar,1.6,1.7 Message-ID: <200008290457.VAA31736@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv31728 Modified Files: test_grammar Log Message: Added tests of "print >> None" Index: test_grammar =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_grammar,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** test_grammar 2000/08/22 02:43:07 1.6 --- test_grammar 2000/08/29 04:57:10 1.7 *************** *** 24,27 **** --- 24,28 ---- 1 2 3 1 1 1 + hello world del_stmt pass_stmt From python-dev@python.org Tue Aug 29 07:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml catalog,1.2,NONE python.dtd,1.3,NONE version.ent,1.1,NONE Message-ID: <200008290607.XAA19547@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml In directory slayer.i.sourceforge.net:/tmp/cvs-serv19441 Removed Files: catalog python.dtd version.ent Log Message: These files are not part of the current plan. --- catalog DELETED --- --- python.dtd DELETED --- --- version.ent DELETED --- From python-dev@python.org Tue Aug 29 07:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml/iso ISOamsa,1.1,NONE ISOamsb,1.1,NONE ISOamsc,1.1,NONE ISOamsn,1.1,NONE ISOamso,1.1,NONE ISOamsr,1.1,NONE ISObox,1.1,NONE ISOcyr1,1.1,NONE ISOcyr2,1.1,NONE ISOdia,1.1,NONE ISOgrk1,1.1,NONE ISOgrk2,1.1,NONE ISOgrk3,1.1,NONE ISOgrk4,1.1,NONE ISOlat1,1.1,NONE ISOlat2,1.1,NONE ISOnum,1.1,NONE ISOpub,1.1,NONE ISOtech,1.1,NONE Message-ID: <200008290607.XAA19557@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml/iso In directory slayer.i.sourceforge.net:/tmp/cvs-serv19441/iso Removed Files: ISOamsa ISOamsb ISOamsc ISOamsn ISOamso ISOamsr ISObox ISOcyr1 ISOcyr2 ISOdia ISOgrk1 ISOgrk2 ISOgrk3 ISOgrk4 ISOlat1 ISOlat2 ISOnum ISOpub ISOtech Log Message: These files are not part of the current plan. --- ISOamsa DELETED --- --- ISOamsb DELETED --- --- ISOamsc DELETED --- --- ISOamsn DELETED --- --- ISOamso DELETED --- --- ISOamsr DELETED --- --- ISObox DELETED --- --- ISOcyr1 DELETED --- --- ISOcyr2 DELETED --- --- ISOdia DELETED --- --- ISOgrk1 DELETED --- --- ISOgrk2 DELETED --- --- ISOgrk3 DELETED --- --- ISOgrk4 DELETED --- --- ISOlat1 DELETED --- --- ISOlat2 DELETED --- --- ISOnum DELETED --- --- ISOpub DELETED --- --- ISOtech DELETED --- From python-dev@python.org Tue Aug 29 07:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml/oasis catalog,1.1,NONE exchange.txt,1.1,NONE Message-ID: <200008290607.XAA19558@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml/oasis In directory slayer.i.sourceforge.net:/tmp/cvs-serv19441/oasis Removed Files: catalog exchange.txt Log Message: These files are not part of the current plan. --- catalog DELETED --- --- exchange.txt DELETED --- From python-dev@python.org Tue Aug 29 07:08:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Mon, 28 Aug 2000 23:08:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/sgml/iso catalog,1.1,NONE Message-ID: <200008290608.XAA21149@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/sgml/iso In directory slayer.i.sourceforge.net:/tmp/cvs-serv21137 Removed Files: catalog Log Message: These files are not part of the current plan. --- catalog DELETED --- From python-dev@python.org Tue Aug 29 15:55:06 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 07:55:06 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib tempfile.py,1.21,1.22 Message-ID: <200008291455.HAA11799@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv11762 Modified Files: tempfile.py Log Message: Patch by tg@FreeBSD.org to try /var/tmp first. This helps on 4.4BSD-based systems. Index: tempfile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tempfile.py,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** tempfile.py 2000/04/24 13:28:02 1.21 --- tempfile.py 2000/08/29 14:55:03 1.22 *************** *** 24,28 **** except (AttributeError, os.error): pwd = os.curdir ! attempdirs = ['/usr/tmp', '/tmp', pwd] if os.name == 'nt': attempdirs.insert(0, 'C:\\TEMP') --- 24,28 ---- except (AttributeError, os.error): pwd = os.curdir ! attempdirs = ['/var/tmp', '/usr/tmp', '/tmp', pwd] if os.name == 'nt': attempdirs.insert(0, 'C:\\TEMP') From python-dev@python.org Tue Aug 29 15:56:24 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 07:56:24 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_fcntl.py,1.8,1.9 Message-ID: <200008291456.HAA12933@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv12879 Modified Files: test_fcntl.py Log Message: Add support for FreeBSD-[45]. -- tg@FreeBSD.org Index: test_fcntl.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_fcntl.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** test_fcntl.py 1999/04/19 17:22:12 1.8 --- test_fcntl.py 2000/08/29 14:56:21 1.9 *************** *** 18,22 **** if sys.platform in ('netbsd1', ! 'freebsd2', 'freebsd3', 'bsdos2', 'bsdos3', 'bsdos4', 'openbsd', 'openbsd2'): --- 18,22 ---- if sys.platform in ('netbsd1', ! 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'bsdos2', 'bsdos3', 'bsdos4', 'openbsd', 'openbsd2'): From python-dev@python.org Tue Aug 29 15:57:30 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 07:57:30 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib posixfile.py,1.13,1.14 Message-ID: <200008291457.HAA13952@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv13916 Modified Files: posixfile.py Log Message: Add support for FreeBSD-[45]. -- tg@FreeBSD.org Index: posixfile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/posixfile.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** posixfile.py 2000/02/04 15:10:34 1.13 --- posixfile.py 2000/08/29 14:57:27 1.14 *************** *** 177,181 **** if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'bsdos2', 'bsdos3', 'bsdos4'): flock = struct.pack('lxxxxlxxxxlhh', \ --- 177,181 ---- if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'bsdos2', 'bsdos3', 'bsdos4'): flock = struct.pack('lxxxxlxxxxlhh', \ *************** *** 193,197 **** if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'bsdos2', 'bsdos3', 'bsdos4'): l_start, l_len, l_pid, l_type, l_whence = \ --- 193,197 ---- if sys.platform in ('netbsd1', 'openbsd2', ! 'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5', 'bsdos2', 'bsdos3', 'bsdos4'): l_start, l_len, l_pid, l_type, l_whence = \ From python-dev@python.org Tue Aug 29 16:00:15 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 08:00:15 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.97,1.98 Message-ID: <200008291500.IAA16964@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv16891 Modified Files: Makefile.in Log Message: "tg@FreeBSD.org" writes: Our (FreeBSD's) security officer doesn't like group-writable directories and sent a patch; don't install *.orig. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.97 retrieving revision 1.98 diff -C2 -r1.97 -r1.98 *** Makefile.in 2000/08/24 18:11:21 1.97 --- Makefile.in 2000/08/29 15:00:11 1.98 *************** *** 104,110 **** # Modes for directories, executables and data files created by the ! # install process. Default to group-writable directories but ! # user-only-writable for executables and data files. ! DIRMODE= 775 EXEMODE= 755 FILEMODE= 644 --- 104,109 ---- # Modes for directories, executables and data files created by the ! # install process. Default to user-only-writable for all file types. ! DIRMODE= 755 EXEMODE= 755 FILEMODE= 644 *************** *** 319,322 **** --- 318,322 ---- *CVS) ;; \ *.py[co]) ;; \ + *.orig) ;; \ *~) ;; \ *) \ From python-dev@python.org Tue Aug 29 16:01:36 2000 From: python-dev@python.org (Jeremy Hylton) Date: Tue, 29 Aug 2000 08:01:36 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.31,1.32 Message-ID: <200008291501.IAA18394@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv18001 Modified Files: pep-0200.txt Log Message: move range literals and unicode database to postponed rearrange the sections a bit Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** pep-0200.txt 2000/08/28 15:47:00 1.31 --- pep-0200.txt 2000/08/29 15:01:34 1.32 *************** *** 93,96 **** --- 93,158 ---- [None currently failing.] + Open items -- Need to be resolved before 2.0b1 release + + Add popen2 support for Linux -- Fred Drake + + Get all patches out of Open. + + Get all patches out of Accepted. + + Fix bug 112558 + https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 + + Fix all other bugs with priority 7 or higher + + Review performance and frequency of garbage collection scans. + + Decide on a license. + + Windows installer: If HKLM isn't writable, back off to HKCU (so + Python can be installed on NT & 2000 without admin privileges). + + Windows installer: Install w9xpopen.exe only under Win95/98. + + Windows ME: Don't know anything about it. Will the installer + even run? Does it need the w9xpopen hack? + + Open items -- Need to be resolved before 2.0 final release + + Update Tools/compiler so that it is compatible with list + comprehensions, import as, and any other new language features. + + Improve code coverage of test suite. + + Decide on a license. + + Finish writing the PEPs for the features that went out with + 2.0b1(! sad, but realistic -- we'll get better with practice). + + Major effort to whittle the bug database down to size. I've (tim) + seen this before: if you can keep all the open bugs fitting on one + screen, people will generally keep it that way. But let it + slobber over a screen for a month, & it just goes to hell (no + "visible progress" indeed!). + + Accepted and in progress + + * PyErr_Format - Fredrik Lundh + Make this function safe from buffer overflows. + + * Change meaning of \x escapes - PEP 223 - Fredrik Lundh + + * Add \U1234678 escapes in u"" strings - Fredrik Lundh + + * Integrated gettext module - Barry Warsaw + wrapper around standard internationalization libraries + + Open: proposed but not accepted or rejected + + * Extended slicing on lists - Michael Hudson + Make lists (and other builtin types) handle extended slices. + + * Problems reported with Tkinter, Tk 8.3.2, and Unicode (?) + Previously failing test cases *************** *** 174,246 **** - Open items -- Need to be resolved before 2.0b1 release - - Add popen2 support for Linux -- Fred Drake - - Get all patches out of Open. - - Get all patches out of Accepted. - - Fix bug 112558 - https://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 - - Fix all other bugs with priority 7 or higher - - Review performance and frequency of garbage collection scans. - - Decide on a license. - - Windows installer: If HKLM isn't writable, back off to HKCU (so - Python can be installed on NT & 2000 without admin privileges). - - Windows installer: Install w9xpopen.exe only under Win95/98. - - Windows ME: Don't know anything about it. Will the installer - even run? Does it need the w9xpopen hack? - - Open items -- Need to be resolved before 2.0 final release - - Update Tools/compiler so that it is compatible with list - comprehensions, import as, and any other new language features. - - Improve code coverage of test suite. - - Decide on a license. - - Finish writing the PEPs for the features that went out with - 2.0b1(! sad, but realistic -- we'll get better with practice). - - Major effort to whittle the bug database down to size. I've (tim) - seen this before: if you can keep all the open bugs fitting on one - screen, people will generally keep it that way. But let it - slobber over a screen for a month, & it just goes to hell (no - "visible progress" indeed!). - - - Open: proposed but not accepted or rejected - - * Extended slicing on lists - Michael Hudson - Make lists (and other builtin types) handle extended slices. - - * Problems reported with Tkinter, Tk 8.3.2, and Unicode (?) - - Accepted and in progress - - * Compression of Unicode database - Fredrik Lundh - SF Patch 100899 - - * PyErr_Format - Fredrik Lundh - Make this function safe from buffer overflows. - - * Range literals - Thomas Wouters - SF Patch 100902 - - * Change meaning of \x escapes - PEP 223 - Fredrik Lundh - - * Add \U1234678 escapes in u"" strings - Fredrik Lundh - - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - Open items -- completed/fixed --- 236,239 ---- *************** *** 306,309 **** --- 299,310 ---- Postponed + + * Compression of Unicode database - Fredrik Lundh + SF Patch 100899 + At least for 2.0b1. May be included in 2.0 as a bug fix. + + * Range literals - Thomas Wouters + SF Patch 100902 + We ended up having a lot of doubt about the proposal. * Eliminated SET_LINENO opcode - Vladimir Marangozov From python-dev@python.org Tue Aug 29 16:06:59 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 08:06:59 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.138,1.139 configure.in,1.149,1.150 Message-ID: <200008291506.IAA21882@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv18539 Modified Files: configure configure.in Log Message: Some cleanup for FreeBSD. This gets rid of version numbers and figures out old (a.out) and newer (ELF) systems, similar to NetBSD. (I'm assuming this is also by tg@FreeBSD.org.) Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.138 retrieving revision 1.139 diff -C2 -r1.138 -r1.139 *** configure 2000/08/26 11:33:43 1.138 --- configure 2000/08/29 15:06:47 1.139 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.148 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.150 [...2471 lines suppressed...] echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5780: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5782,5791 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5785: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.149 retrieving revision 1.150 diff -C2 -r1.149 -r1.150 *** configure.in 2000/08/26 11:33:43 1.149 --- configure.in 2000/08/29 15:06:49 1.150 *************** *** 576,581 **** dgux*) LDSHARED="ld -G";; BSD/OS*/4*) LDSHARED="gcc -shared";; ! FreeBSD*/[[34]]*) LDSHARED="gcc -shared";; ! FreeBSD*|OpenBSD*) LDSHARED="ld -Bshareable";; NetBSD*) if [[ "`$CC -dM -E - Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv13191 Modified Files: Makefile Log Message: Add a comment noting that the dependency information is stored in Makefile.deps. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile,v retrieving revision 1.197 retrieving revision 1.198 diff -C2 -r1.197 -r1.198 *** Makefile 2000/07/01 02:37:37 1.197 --- Makefile 2000/08/29 16:30:21 1.198 *************** *** 49,52 **** --- 49,55 ---- # in the info/ directory; please send patches to python-docs@python.org. + # This Makefile only includes information on how to perform builds; for + # dependency information, see Makefile.deps. + # Customizations -- you *may* have to edit these From python-dev@python.org Tue Aug 29 17:53:37 2000 From: python-dev@python.org (A.M. Kuchling) Date: Tue, 29 Aug 2000 09:53:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_poll.py,1.2,1.3 Message-ID: <200008291653.JAA21617@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv20481 Modified Files: test_poll.py Log Message: Fix for two problems on FreeBSD: In test_poll1(), unregister file descriptors as they're closed, and also close the read end of the pipe In test_poll2(), make the code assume less about the combinations of flag bits that will be returned Index: test_poll.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_poll.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_poll.py 2000/08/26 08:24:18 1.2 --- test_poll.py 2000/08/29 16:53:34 1.3 *************** *** 58,62 **** assert len(buf) == MSG_LEN print buf ! os.close(r2w[rd]) writers.remove(r2w[rd]) --- 58,64 ---- assert len(buf) == MSG_LEN print buf ! os.close(r2w[rd]) ; os.close( rd ) ! p.unregister( r2w[rd] ) ! p.unregister( rd ) writers.remove(r2w[rd]) *************** *** 146,150 **** if (fdlist == []): continue ! if fdlist[0] == (p.fileno(),select.POLLHUP): line = p.readline() if line != "": --- 148,153 ---- if (fdlist == []): continue ! fd, flags = fdlist[0] ! if flags & select.POLLHUP: line = p.readline() if line != "": *************** *** 152,156 **** continue ! elif fdlist[0] == (p.fileno(),select.POLLIN): line = p.readline() if verbose: --- 155,159 ---- continue ! elif flags & select.POLLIN: line = p.readline() if verbose: From python-dev@python.org Tue Aug 29 18:40:39 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 10:40:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl l2hinit.perl,1.43,1.43.2.1 Message-ID: <200008291740.KAA10375@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv10361/perl Modified Files: Tag: cnri-16-start l2hinit.perl Log Message: Make sure we still use the GIF images here, since there are still a few browsers that do not support PNG images, or do not do so reliably. Index: l2hinit.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/l2hinit.perl,v retrieving revision 1.43 retrieving revision 1.43.2.1 diff -C2 -r1.43 -r1.43.2.1 *** l2hinit.perl 2000/07/31 17:53:45 1.43 --- l2hinit.perl 2000/08/29 17:40:37 1.43.2.1 *************** *** 19,22 **** --- 19,23 ---- $ICONSERVER = '../icons'; + $IMAGE_TYPE = 'gif'; # Control where the navigation bars should show up: From python-dev@python.org Tue Aug 29 19:15:08 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 11:15:08 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkhowto,1.11,1.12 Message-ID: <200008291815.LAA22067@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv22029/tools Modified Files: mkhowto Log Message: Add a --style option to allow specifying an alternate CSS style sheet for HTML generation; the machinery was there but no option to set it was defined. Simplify some of the path-math since we can assume a recent version of Python. Index: mkhowto =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tools/mkhowto,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** mkhowto 2000/07/31 17:47:49 1.11 --- mkhowto 2000/08/29 18:15:05 1.12 *************** *** 21,24 **** --- 21,26 ---- --numeric Don't rename the HTML files; just keep node#.html for the filenames. + --style Specify the CSS file to use for the output (filename, + not a URL). Other options: *************** *** 43,48 **** ! MYDIR = os.path.normpath(os.path.join(os.getcwd(), sys.path[0])) ! TOPDIR = os.path.normpath(os.path.join(MYDIR, os.pardir)) ISTFILE = os.path.join(TOPDIR, "texinputs", "python.ist") --- 45,50 ---- ! MYDIR = os.path.abspath(sys.path[0]) ! TOPDIR = os.path.dirname(MYDIR) ISTFILE = os.path.join(TOPDIR, "texinputs", "python.ist") *************** *** 110,114 **** "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric"] + list(self.ALL_FORMATS)) for opt, arg in opts: --- 112,116 ---- "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric", "style="] + list(self.ALL_FORMATS)) for opt, arg in opts: *************** *** 145,151 **** # always make this absolute: self.about_file = os.path.normpath( ! os.path.join(os.getcwd(), arg)) elif opt == "--numeric": self.numeric = 1 # # Format specifiers: --- 147,155 ---- # always make this absolute: self.about_file = os.path.normpath( ! os.path.abspath(arg)) elif opt == "--numeric": self.numeric = 1 + elif opt == "--style": + self.style_file = os.path.abspath(arg) # # Format specifiers: From python-dev@python.org Tue Aug 29 22:36:42 2000 From: python-dev@python.org (Guido van Rossum) Date: Tue, 29 Aug 2000 14:36:42 -0700 Subject: [Python-checkins] CVS: python/dist/src README,1.91,1.92 Message-ID: <200008292136.OAA08476@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv8463 Modified Files: README Log Message: Various tweaks and improvements by Thomas Wouters (who apparently lost the patch or forgot about it -- this is easier than reminding him). Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/README,v retrieving revision 1.91 retrieving revision 1.92 diff -C2 -r1.91 -r1.92 *** README 2000/08/23 21:33:04 1.91 --- README 2000/08/29 21:36:40 1.92 *************** *** 20,24 **** To start building right away (on UNIX): type "./configure" in the current directory and when it finishes, type "make". The section ! Build Instructions below is still recommended reading. :-) --- 20,25 ---- To start building right away (on UNIX): type "./configure" in the current directory and when it finishes, type "make". The section ! Build Instructions below is still recommended reading, especially the ! part on customizing Modules/Setup. *************** *** 68,73 **** system configuration and creates several Makefiles. (It takes a minute or two -- please be patient!) When it's done, you are ready to ! run make. You may want to pass options to the configure script -- see ! the section below on configuration options and variables. To build Python, you normally type "make" in the toplevel directory. --- 69,75 ---- system configuration and creates several Makefiles. (It takes a minute or two -- please be patient!) When it's done, you are ready to ! run make. You may want to pass options to the configure script, or ! edit the Setup file -- see the section below on configuration options ! and variables. To build Python, you normally type "make" in the toplevel directory. *************** *** 114,117 **** --- 116,130 ---- the OPT variable. + If you get failures in test_long, or sys.maxint gets set to -1, you + are probably experiencing compiler bugs, usually related to + optimization. This is a common problem with some versions of gcc and + egcs, and some vendor-supplied compilers, which can sometimes be + worked around by turning off optimization. Consider switching to + stable versions (gcc 2.7.2.3, egcs 1.1.2, or contact your vendor.) + + From Python 2.0 onward, all Python C code is ANSI C. Compiling using + old K&R-C-only compilers is no longer possible. ANSI C compilers are + available for all modern systems, either in the form of updated + compilers from the vendor, or one of the free compilers (gcc, egcs). Platform specific notes *************** *** 133,173 **** script). ! Linux: On Linux version 1.x, once you've built Python, use it to run ! the regen script in the Lib/linux1 directory. Apparently ! the files as distributed don't match the system headers on ! some Linux versions. (The "h2py" command refers to ! Tools/scripts/h2py.py.) The modules distributed for Linux 2.x ! should be okay. Shared library support now works by default ! on ELF-based x86 Linux systems. (Note: when you change the ! status of a module from static to shared, you must remove its ! .o file or do a "make clean".) ! ! Under RedHat Linux 5.0, if upgraded from a previous version, ! remove the LinuxThreads packages. This is needed because ! LinuxThreads conflicts with the new thread support provided by ! glibc. Before running Python's configure script, use the ! following commands as root (version numbers may differ; these ! are from a stock 4.2 install): ! ! % rpm -qa | grep ^linuxthread ! linuxthreads-0.5-1 ! linuxthreads-devel-0.5-1 ! % rpm -e linuxthreads linuxthreads-devel ! ! While Python only needs this to be done to allow thread ! support to be included, the conflicts these packages create ! with the new glibc may cause other packages which use threads ! to fail as well, so their removal is a good idea regardless of ! how you configure python. ! ! More recently, a problem with threads and fork() was tracked ! down to a bug in the pthreads code in glibc version 2.0.5; ! glibc version 2.0.7 solves the problem. This causes the ! popen2 test to fail; problem and solution reported by Pablo ! Bleyer. ! ! Also under RedHat Linux 5.0, the crypt module now needs the ! -lcrypt option. Uncomment this flag in Modules/Setup, or ! comment out the crypt module in the same file. FreeBSD 3.x and probably platforms with NCurses that use libmytinfo or --- 146,158 ---- script). ! Linux: A problem with threads and fork() was tracked down to a bug in ! the pthreads code in glibc version 2.0.5; glibc version 2.0.7 ! solves the problem. This causes the popen2 test to fail; ! problem and solution reported by Pablo Bleyer. ! ! Under Linux systems using GNU libc 2 (aka libc6), the crypt ! module now needs the -lcrypt option. Uncomment this flag in ! Modules/Setup, or comment out the crypt module in the same ! file. Most modern Linux systems use glibc2. FreeBSD 3.x and probably platforms with NCurses that use libmytinfo or *************** *** 180,188 **** automatically, but not necessarily in the correct order. ! DEC Unix: When enabling threads, use --with-dec-threads, not ! --with-thread. When using GCC, it is possible to get an ! internal compiler error if optimization is used. This was ! reported for GCC 2.7.2.3 on selectmodule.c. Manually compile ! the affected file without optimization to solve the problem. DEC Ultrix: compile with GCC to avoid bugs in the native compiler, --- 165,180 ---- automatically, but not necessarily in the correct order. ! BSDI: BSDI versions before 4.1 have known problems with threads, ! which can cause strange errors in a number of modules (for ! instance, the 'test_signal' test script will hang forever.) ! Turning off threads (with --with-threads=no) or upgrading to ! BSDI 4.1 solves this problem. ! ! DEC Unix: Run configure with --with-dec-threads, or with ! --with-threads=no if no threads are desired (threads are on by ! default). When using GCC, it is possible to get an internal ! compiler error if optimization is used. This was reported for ! GCC 2.7.2.3 on selectmodule.c. Manually compile the affected ! file without optimization to solve the problem. DEC Ultrix: compile with GCC to avoid bugs in the native compiler, *************** *** 219,229 **** LIBS=' -lsocket -lcrypt_i' ! SunOS 4.x: When using the standard "cc" compiler, certain modules may ! not be compilable because they use non-K&R syntax. You should ! be able to get a basic Python interpreter by commenting out ! such modules in the Modules/Setup file, but I really recommend ! using gcc. ! ! When using the SunPro C compiler, you may want to use the '-Xa' option instead of '-Xc', to enable some needed non-ANSI Sunisms. --- 211,215 ---- LIBS=' -lsocket -lcrypt_i' ! SunOS 4.x: When using the SunPro C compiler, you may want to use the '-Xa' option instead of '-Xc', to enable some needed non-ANSI Sunisms. *************** *** 279,283 **** that the Cray assembler doesn't like. Cray's cc seems to work fine. ! 2) Uncomment modules md5 (won't compile) and audioop (will crash the interpreter during the test suite). If you run the test suite, two tests will fail (rotate and --- 265,269 ---- that the Cray assembler doesn't like. Cray's cc seems to work fine. ! 2) Comment out modules md5 (won't compile) and audioop (will crash the interpreter during the test suite). If you run the test suite, two tests will fail (rotate and *************** *** 293,306 **** smake will be invoked by make (likewise for GNU make). - A bug in the MIPSpro 7.1 compiler's optimizer seems to break - Modules/pypcre.c. The short term solution is to compile it - without optimization. The bug is fixed in version 7.2.1 of - the compiler. - - A bug in gcc-2.8.1 sets sys.maxint to -1 which *also* seems to - break Modules/pypcre.c. The egcs versions of gcc fix this - problem. Or use configure --without-gcc to compile with SGI's - compiler, if you have it. (Raj Srinivasan, Kelvin Chu) - OS/2: If you are running Warp3 or Warp4 and have IBM's VisualAge C/C++ compiler installed, just change into the pc\os2vacpp directory --- 279,282 ---- *************** *** 320,334 **** ------------------- ! The main switch to configure threads is to run the configure script ! (see below) with the --with-thread switch (on DEC, use ! --with-dec-threads). Unfortunately, on some platforms, additional ! compiler and/or linker options are required. Below is a table of ! those options, collected by Bill Janssen. I would love to automate ! this process more, but the information below is not enough to write a ! patch for the configure.in file, so manual intervention is required. ! If you patch the configure.in file and are confident that the patch ! works, please send me the patch. (Don't bother patching the configure ! script itself -- it is regenerated each the configure.in file ! changes.) Compiler switches for threads --- 296,310 ---- ------------------- ! As of Python 2.0, threads are enabled by default. If you wish to ! compile without threads, or if your thread support is broken, pass the ! --with-threads=no switch to configure. Unfortunately, on some ! platforms, additional compiler and/or linker options are required for ! threads to work properly. Below is a table of those options, ! collected by Bill Janssen. I would love to automate this process ! more, but the information below is not enough to write a patch for the ! configure.in file, so manual intervention is required. If you patch ! the configure.in file and are confident that the patch works, please ! send me the patch. (Don't bother patching the configure script itself ! -- it is regenerated each the configure.in file changes.) Compiler switches for threads *************** *** 398,402 **** For SunOS and Solaris, enable module "sunaudiodev" to support the ! audio device. In addition to the file Setup, you can also edit the file Setup.local. --- 374,378 ---- For SunOS and Solaris, enable module "sunaudiodev" to support the ! audio device. Likewise, for Linux systems, enable "linuxaudiodev". In addition to the file Setup, you can also edit the file Setup.local. *************** *** 521,534 **** readline, enable module "readline" in the Modules/Setup file. ! --with-thread: On most Unix systems, you can now use multiple threads. ! To enable this, pass --with-thread. (--with-threads is an ! alias.) If the library required for threads lives in a ! peculiar place, you can use --with-thread=DIRECTORY. NOTE: ! you must also enable the thread module by uncommenting it in ! the Modules/Setup file. (Threads aren't enabled automatically ! because there are run-time penalties when support for them is ! compiled in even if you don't use them.) IMPORTANT: run "make ! clean" after changing (either enabling or disabling) this ! option, or you will get link errors! Note: for DEC Unix use --with-dec-threads instead. --- 497,507 ---- readline, enable module "readline" in the Modules/Setup file. ! --with-threads: On most Unix systems, you can now use multiple ! threads, and support for this is enabled by default. To ! disable this, pass --with-threads=no. If the library required ! for threads lives in a peculiar place, you can use ! --with-thread=DIRECTORY. IMPORTANT: run "make clean" after ! changing (either enabling or disabling) this option, or you ! will get link errors! Note: for DEC Unix use --with-dec-threads instead. From python-dev@python.org Tue Aug 29 22:57:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 14:57:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html style.css,1.5,1.6 Message-ID: <200008292157.OAA10670@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv10662 Modified Files: style.css Log Message: Move a little more here. Index: style.css =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/style.css,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** style.css 2000/03/29 22:41:52 1.5 --- style.css 2000/08/29 21:57:34 1.6 *************** *** 40,43 **** --- 40,46 ---- .navigation .title { font-family: avantgarde, sans-serif; font-size: 110% } + .navigation td { background-color: #99ccff; } + + .titlegraphic { vertical-align: top; } .verbatim { color: #00008b } From python-dev@python.org Wed Aug 30 04:25:54 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:25:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc Makefile.deps,1.40,1.41 Message-ID: <200008300325.UAA22570@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv22562 Modified Files: Makefile.deps Log Message: Added libgettext.tex Index: Makefile.deps =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/Makefile.deps,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** Makefile.deps 2000/08/19 16:55:31 1.40 --- Makefile.deps 2000/08/30 03:25:51 1.41 *************** *** 171,174 **** --- 171,175 ---- ../lib/libqueue.tex \ ../lib/liblocale.tex \ + ../lib/libgettext.tex \ ../lib/libbasehttp.tex \ ../lib/libcookie.tex \ From python-dev@python.org Wed Aug 30 04:26:20 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:26:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib lib.tex,1.160,1.161 Message-ID: <200008300326.UAA22616@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22608 Modified Files: lib.tex Log Message: Added libgettext.tex Index: lib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v retrieving revision 1.160 retrieving revision 1.161 diff -C2 -r1.160 -r1.161 *** lib.tex 2000/08/19 16:55:31 1.160 --- lib.tex 2000/08/30 03:26:17 1.161 *************** *** 146,149 **** --- 146,150 ---- \input{libshutil} \input{liblocale} + \input{libgettext} \input{libmutex} From python-dev@python.org Wed Aug 30 04:27:12 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:27:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgettext.tex,NONE,1.1 Message-ID: <200008300327.UAA22767@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22760 Added Files: libgettext.tex Log Message: Documentation for the gettext module. --- NEW FILE --- \section{\module{gettext} --- Multilingual internationalization services} \declaremodule{standard}{gettext} \modulesynopsis{Multilingual internationalization services.} \moduleauthor{Barry A. Warsaw}{bwarsaw@beopen.com} \sectionauthor{Barry A. Warsaw}{bwarsaw@beopen.com} The \module{gettext} module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. It supports both the GNU \program{gettext} message catalog API and a higher level, class-based API that may be more appropriate for Python files. The interface described below allows you to write your module and application messages in one natural language, and provide a catalog of translated messages for running under different natural languages. Some hints on localizing your Python modules and applications are also given. \subsection{GNU \program{gettext} API} The \module{gettext} module defines the following API, which is very similar to the GNU \program{gettext} API. If you use this API you will affect the translation of your entire application globally. Often this is what you want if your application is monolingual, with the choice of language dependent on the locale of your user. If you are localizing a Python module, or if your application needs to switch languages on the fly, you probably want to use the class-based API instead. \begin{funcdesc}{bindtextdomain}{domain, localedir\code{=None}} Bind the \var{domain} to the locale directory \var{localedir}. More concretely, \module{gettext} will look for binary \file{.mo} files for the given domain using the path (on Unix): \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo}, where \var{languages} is searched for in the environment variables \code{LANGUAGE}, \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG} respectively. If \var{localedir} is \code{None}, then the current binding for \var{domain} is returned\footnote{The default locale directory is system dependent; e.g. on standard RedHat Linux it is \file{/usr/share/locale}, but on Solaris it is \file{/usr/lib/locale}. The \module{gettext} module does not try to support these system dependent defaults; instead its default is \file{\code{sys.prefix}/share/locale}. For this reason, it is always best to call \code{gettext.bindtextdomain()} with an explicit absolute path at the start of your application.}. \end{funcdesc} \begin{funcdesc}{textdomain}{domain\code{=None}} Change or query the current global domain. If \var{domain} is \code{None}, then the current global domain is returned, otherwise the global domain is set to \var{domain}, which is returned. \end{funcdesc} \begin{funcdesc}{gettext}{message} Return the localized translation of \var{message}, based on the current global domain, language, and locale directory. This function is usually aliased as \function{_} in the local namespace (see examples below). \end{funcdesc} \begin{funcdesc}{dgettext}{domain, message} Like \function{gettext()}, but look the message up in the specified \var{domain}. \end{funcdesc} Note that GNU \program{gettext} also defines a \function{dcgettext()} method, but this was deemed not useful and so it is currently unimplemented. Here's an example of typical usage for this API: \begin{verbatim} import gettext gettext.bindtextdomain('myapplication', '/path/to/my/language/directory') gettext.textdomain('myapplication') _ = gettext.gettext # ... print _('This is a translatable string.') \end{verbatim} \subsection{Class-based API} The class-based API of the \module{gettext} module gives you more flexibility and greater convenience than the GNU \program{gettext} API. It is the recommended way of localizing your Python applications and modules. \module{gettext} defines a ``translations'' class which implements the parsing of GNU \file{.mo} format files, and has methods for returning either standard 8-bit strings or Unicode strings. Translations instances can also install themselves in the built-in namespace as the function \function{_()}. \begin{funcdesc}{find}{domain, localedir\code{=None}, languages\code{=None}} This function implements the standard \file{.mo} file search algorithm. It takes a \var{domain}, identical to what \function{textdomain()} takes, and optionally a \var{localedir} (as in \function{bindtextdomain()}), and a list of languages. All arguments are strings. If \var{localedir} is not given, then the default system locale directory is used\footnote{See the footnote for \function{bindtextdomain()} above.}. If \var{languages} is not given, then the following environment variables are searched: \code{LANGUAGE}, \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG}. The first one returning a non-empty value is used for the \var{languages} variable. The environment variables can contain a colon separated list of languages, which will be split. \function{find()} then expands and normalizes the languages, and then iterates through them, searching for an existing file built of these components: \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo} The first such file name that exists is returned by \function{find()}. If no such file is found, then \code{None} is returned. \end{funcdesc} \begin{funcdesc}{translation}{domain, localedir\code{=None}, languages\code{=None}, class_\code{=None}} Return a \class{Translations} instance based on the \var{domain}, \var{localedir}, and \var{languages}, which are first passed to \function{find()} to get the associated \file{.mo} file path. Instances with identical \file{.mo} file names are cached. The actual class instantiated is either \var{class_} if provided, otherwise \class{GNUTranslations}. The class's constructor must take a single file object argument. If no \file{.mo} file is found, this function raises \exception{IOError}. \end{funcdesc} \begin{funcdesc}{install}{domain, localedir\code{=None}, unicode\code{=0}} This installs the function \function{_} in Python's builtin namespace, based on \var{domain}, and \var{localedir} which are passed to the function \function{translation()}. The \var{unicode} flag is passed to the resulting translation object's \method{install} method. As seen below, you usually mark the strings in your application that are candidates for translation, by wrapping them in a call to the function \function{_()}, e.g. \begin{verbatim} print _('This string will be translated.') \end{verbatim} For convenience, you want the \function{_()} function to be installed in Python's builtin namespace, so it is easily accessible in all modules of your application. \end{funcdesc} \subsubsection{The \class{NullTranslations} class} Translation classes are what actually implement the translation of original source file message strings to translated message strings. The base class used by all translation classes is \class{NullTranslations}; this provides the basic interface you can use to write your own specialized translation classes. Here are the methods of \class{NullTranslations}: \begin{methoddesc}[NullTranslations]{__init__}{fp\code{=None}} Takes an optional file object \var{fp}, which is ignored by the base class. Initializes ``protected'' instance variables \var{_info} and \var{_charset} which are set by derived classes. It then calls \code{self._parse(fp)} if \var{fp} is not \code{None}. \end{methoddesc} \begin{methoddesc}[NullTranslations]{_parse}{fp} No-op'd in the base class, this method takes file object \var{fp}, and reads the data from the file, initializing its message catalog. If you have an unsupported message catalog file format, you should override this method to parse your format. \end{methoddesc} \begin{methoddesc}[NullTranslations]{gettext}{message} Return the translated message. Overridden in derived classes. \end{methoddesc} \begin{methoddesc}[NullTranslations]{ugettext}{message} Return the translated message as a Unicode string. Overridden in derived classes. \end{methoddesc} \begin{methoddesc}[NullTranslations]{info}{} Return the ``protected'' \var{_info} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{charset}{} Return the ``protected'' \var{_charset} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{install}{unicode\code{=0}} If the \var{unicode} flag is false, this method installs \code{self.gettext} into the built-in namespace, binding it to \function{_}. If \var{unicode} is true, it binds \code{self.ugettext} instead. Note that this is only one way, albeit the most convenient way, to make the \function{_} function available to your application. Because it affects the entire application globally, and specifically the built-in namespace, localized modules should never install \function{_}. Instead, they should use this code to make \function{_} available to their module: \begin{verbatim} import gettext t = gettext.translation('mymodule', ...) _ = t.gettext \end{verbatim} This puts \function{_} only in the module's global namespace and so only affects calls within this module. \end{methoddesc} \subsubsection{The \class{GNUTranslations} class} The \module{gettext} module provides one additional class derived from \class{NullTranslations}: \class{GNUTranslations}. This class overrides \method{_parse()} to enable reading GNU \program{gettext} format \file{.mo} files in both big-endian and little-endian format. It also parses optional meta-data out of the translation catalog. It is convention with GNU \program{gettext} to include meta-data as the translation for the empty string. This meta-data is in RFC822-style \code{key: value} pairs. If the key \code{Content-Type:} is found, then the \code{charset} property is used to initialize the ``protected'' \code{_charset} instance variable. The entire set of key/value pairs are placed into a dictionary and set as the ``protected'' \code{_info} instance variable. If the \file{.mo} file's magic number is invalid, or if other problems occur while reading the file, instantiating a \class{GNUTranslations} class can raise \exception{IOError}. The other usefully overridden method is \method{ugettext()}, which returns a Unicode string by passing both the translated message string and the value of the ``protected'' \code{_charset} variable to the builtin \function{unicode()} function. \subsubsection{Solaris \file{.mo} file support} The Solaris operating system defines its own binary \file{.mo} file format, but since no documentation can be found on this format, it is not supported at this time. \subsubsection{The Catalog constructor} GNOME uses a version of the \module{gettext} module by James Henstridge, but this version has a slightly different API. Its documented usage was: \begin{verbatim} import gettext cat = gettext.Catalog(domain, localedir) _ = cat.gettext print _('hello world') \end{verbatim} For compatibility with this older module, the function \function{Catalog()} is an alias for the the \function{translation()} function described above. One difference between this module and Henstridge's: his catalog objects supported access through a mapping API, but this appears to be unused and so is not currently supported. \subsection{Internationalizing your programs and modules} Internationalization (I18N) refers to the operation by which a program is made aware of multiple languages. Localization (L10N) refers to the adaptation of your program, once internationalized, to the local language and cultural habits. In order to provide multilingual messages for your Python programs, you need to take the following steps: \begin{enumerate} \item prepare your program or module by specially marking translatable strings \item run a suite of tools over your marked files to generate raw messages catalogs \item create language specific translations of the message catalogs \item use the \module{gettext} module so that message strings are properly translated \end{enumerate} In order to prepare your code for I18N, you need to look at all the strings in your files. Any string that needs to be translated should be marked by wrapping it in \code{_('...')} -- i.e. a call to the function \function{_()}. For example: \begin{verbatim} filename = 'mylog.txt' message = _('writing a log message') fp = open(filename, 'w') fp.write(message) fp.close() \end{verbatim} In this example, the string ``\code{writing a log message}'' is marked as a candidate for translation, while the strings ``\code{mylog.txt}'' and ``\code{w}'' are not. The GNU \program{gettext} package provides a tool, called \program{xgettext}, that scans C and C++ source code looking for these specially marked strings. \program{xgettext} generates what are called \file{.pot} files, essentially structured human readable files which contain every marked string in the source code. These \file{.pot} files are copied and handed over to human translators who write language-specific versions for every supported natural language. For I18N Python programs however, \program{xgettext} won't work; it doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called \program{pygettext} that does though (found in the \file{Tools/i18n} directory)\footnote{Fran\c cois Pinard has written a program called \program{xpot} which does a similar job. It is distributed separately from the Python distribution.}. This is a command line script that supports a similar interface as \program{xgettext}; see its documentation for details. Once you've used \program{pygettext} to create your \file{.pot} files, you can use the standard GNU \program{gettext} tools to generate your machine-readable \file{.mo} files, which are readable by the \class{GNUTranslations} class. How you use the \module{gettext} module in your code depends on whether you are internationalizing your entire application or a single module. \subsubsection{Localizing your module} If you are localizing your module, you must take care not to make global changes, e.g. to the built-in namespace. You should not use the GNU \program{gettext} API but instead the class-based API. Let's say your module is called ``spam'' and the module's various natural language translation \file{.mo} files reside in \file{/usr/share/locale} in GNU \program{gettext} format. Here's what you would put at the top of your module: \begin{verbatim} import gettext t = gettext.translation('spam', '/usr/share/locale') _ = t.gettext \end{verbatim} If your translators were providing you with Unicode strings in their \file{.po} files, you'd instead do: \begin{verbatim} import gettext t = gettext.translation('spam', '/usr/share/locale') _ = t.ugettext \end{verbatim} \subsubsection{Localizing your application} If you are localizing your application, you can install the \function{_()} function globally into the built-in namespace, usually in the main driver file of your application. This will let all your application-specific files just use \code{_('...')} without having to explicitly install it in each file. In the simple case then, you need only add the following bit of code to the main driver file of your application: \begin{verbatim} import gettext gettext.install('myapplication') \end{verbatim} If you need to set the locale directory or the \code{unicode} flag, you can pass these into the \function{install()} function: \begin{verbatim} import gettext gettext.install('myapplication', '/usr/share/locale', unicode=1) \end{verbatim} \subsubsection{Changing languages on the fly} If your program needs to support many languages at the same time, you may want to create multiple translation instances and then switch between them explicitly, like so: \begin{verbatim} import gettext lang1 = gettext.translation(languages=['en']) lang2 = gettext.translation(languages=['fr']) lang3 = gettext.translation(languages=['de']) # start by using language1 lang1.install() # ... time goes by, user selects language 2 lang2.install() # ... more time goes by, user selects language 3 lang3.install() \end{verbatim} \subsubsection{Deferred translations} In most coding situations, strings are translated were they are coded. Occasionally however, you need to mark strings for translation, but defer actual translation until later. A classic example is: \begin{verbatim} animals = ['mollusk', 'albatross', 'rat', 'penguin', 'python', ] # ... for a in animals: print a \end{verbatim} Here, you want to mark the strings in the \code{animals} list as being translatable, but you don't actually want to translate them until they are printed. Here is one way you can handle this situation: \begin{verbatim} def _(message): return message animals = [_('mollusk'), _('albatross'), _('rat'), _('penguin'), _('python'), ] del _ # ... for a in animals: print _(a) \end{verbatim} This works because the dummy definition of \function{_()} simply returns the string unchanged. And this dummy definition will temporarily override any definition of \function{_()} in the built-in namespace (until the \code{del} command). Take care, though if you have a previous definition of \function{_} in the local namespace. Note that the second use of \function{_()} will not identify ``a'' as being translatable to the \program{pygettext} program, since it is not a string. Another way to handle this is with the following example: \begin{verbatim} def N_(message): return message animals = [N_('mollusk'), N_('albatross'), N_('rat'), N_('penguin'), N_('python'), ] # ... for a in animals: print _(a) \end{verbatim} In this case, you are marking translatable strings with the function \function{N_()}\footnote{The choice of \function{N_()} here is totally arbitrary; it could have just as easily been \function{MarkThisStringForTranslation()}.}, which won't conflict with any definition of \function{_()}. However, you will need to teach your message extraction program to look for translatable strings marked with \function{N_()}. \program{pygettext} and \program{xpot} both support this through the use of command line switches. \subsection{Acknowledgements} The following people contributed code, feedback, design suggestions, previous implementations, and valuable experience to the creation of this module: \begin{itemize} \item Peter Funk \item James Henstridge \item Mark-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard \item Barry Warsaw \end{itemize} From python-dev@python.org Wed Aug 30 04:30:01 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:30:01 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.3,1.4 Message-ID: <200008300330.UAA22960@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22945 Modified Files: gettext.py Log Message: Finalize this module for Python 2.0 based on feedback and input from Martin von Loewis, Peter Funk, James Henstridge, Francois Pinard, and Marc-Andre Lemburg. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** gettext.py 2000/08/25 20:26:43 1.3 --- gettext.py 2000/08/30 03:29:58 1.4 *************** *** 7,88 **** I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once ! internationalized, to the local language and cultural habits. In order to ! provide multilingual messages for your Python programs, you need to take the ! following steps: ! ! - prepare your program by specially marking translatable strings ! - run a suite of tools over your marked program files to generate raw ! messages catalogs ! - create language specific translations of the message catalogs ! - use this module so that message strings are properly translated ! ! In order to prepare your program for I18N, you need to look at all the strings ! in your program. Any string that needs to be translated should be marked by ! wrapping it in _('...') -- i.e. a call to the function `_'. For example: ! ! filename = 'mylog.txt' ! message = _('writing a log message') ! fp = open(filename, 'w') ! fp.write(message) ! fp.close() ! ! In this example, the string `writing a log message' is marked as a candidate ! for translation, while the strings `mylog.txt' and `w' are not. ! ! The GNU gettext package provides a tool, called xgettext, that scans C and C++ ! source code looking for these specially marked strings. xgettext generates ! what are called `.pot' files, essentially structured human readable files ! which contain every marked string in the source code. These .pot files are ! copied and handed over to translators who write language-specific versions for ! every supported language. ! ! For I18N Python programs however, xgettext won't work; it doesn't understand ! the myriad of string types support by Python. The standard Python ! distribution provides a tool called pygettext that does though (found in the ! Tools/i18n directory). This is a command line script that supports a similar ! interface as xgettext; see its documentation for details. Once you've used ! pygettext to create your .pot files, you can use the standard GNU gettext ! tools to generate your machine-readable .mo files, which are what's used by ! this module. ! ! In the simple case, to use this module then, you need only add the following ! bit of code to the main driver file of your application: ! ! import gettext ! gettext.install() ! ! This sets everything up so that your _('...') function calls Just Work. In ! other words, it installs `_' in the builtins namespace for convenience. You ! can skip this step and do it manually by the equivalent code: ! ! import gettext ! import __builtin__ ! __builtin__['_'] = gettext.gettext ! ! Once you've done this, you probably want to call bindtextdomain() and ! textdomain() to get the domain set up properly. Again, for convenience, you ! can pass the domain and localedir to install to set everything up in one fell ! swoop: ! ! import gettext ! gettext.install('mydomain', '/my/locale/dir') ! ! If your program needs to support many languages at the same time, you will ! want to create Translation objects explicitly, like so: ! ! import gettext ! gettext.install() ! ! lang1 = gettext.Translations(open('/path/to/my/lang1/messages.mo')) ! lang2 = gettext.Translations(open('/path/to/my/lang2/messages.mo')) ! lang3 = gettext.Translations(open('/path/to/my/lang3/messages.mo')) ! ! gettext.set(lang1) ! # all _() will now translate to language 1 ! gettext.set(lang2) ! # all _() will now translate to language 2 - Currently, only GNU gettext format binary .mo files are supported. - """ --- 7,12 ---- I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once ! internationalized, to the local language and cultural habits. """ *************** *** 105,123 **** # Barry Warsaw integrated these modules, wrote the .install() API and code, # and conformed all C and Python code to Python's coding standards. import os import sys import struct ! from UserDict import UserDict ! ! ! ! # globals ! _translations = {} ! _current_translation = None ! _current_domain = 'messages' ! # Domain to directory mapping, for use by bindtextdomain() ! _localedirs = {} --- 29,53 ---- # Barry Warsaw integrated these modules, wrote the .install() API and code, # and conformed all C and Python code to Python's coding standards. + # + # Francois Pinard and Marc-Andre Lemburg also contributed valuably to this + # module. + # + # TODO: + # - Lazy loading of .mo files. Currently the entire catalog is loaded into + # memory, but that's probably bad for large translated programs. Instead, + # the lexical sort of original strings in GNU .mo files should be exploited + # to do binary searches and lazy initializations. Or you might want to use + # the undocumented double-hash algorithm for .mo files with hash tables, but + # you'll need to study the GNU gettext code to do this. + # + # - Support Solaris .mo file formats. Unfortunately, we've been unable to + # find this format documented anywhere. import os import sys import struct ! from errno import ENOENT ! _default_localedir = os.path.join(sys.prefix, 'share', 'locale') *************** *** 166,180 **** ! class GNUTranslations(UserDict): ! # Magic number of .mo files ! MAGIC = 0x950412de ! def __init__(self, fp): ! if fp is None: ! d = {} ! else: ! d = self._parse(fp) ! UserDict.__init__(self, d) def _parse(self, fp): """Override this method to support alternative .mo formats.""" --- 96,131 ---- ! class NullTranslations: ! def __init__(self, fp=None): ! self._info = {} ! self._charset = None ! if fp: ! self._parse(fp) ! def _parse(self, fp): ! pass ! ! def gettext(self, message): ! return message ! ! def ugettext(self, message): ! return unicode(message) ! ! def info(self): ! return self._info ! ! def charset(self): ! return self._charset ! ! def install(self, unicode=0): ! import __builtin__ ! __builtin__.__dict__['_'] = unicode and self.ugettext or self.gettext + + class GNUTranslations(NullTranslations): + # Magic number of .mo files + LE_MAGIC = 0x950412de + BE_MAGIC = struct.unpack('>i', struct.pack(' self.MAGIC: raise IOError(0, 'Bad magic number', filename) # --- 134,148 ---- # Parse the .mo file header, which consists of 5 little endian 32 # bit words. ! self._catalog = catalog = {} buf = fp.read() ! # Are we big endian or little endian? ! magic = unpack('4i', buf[4:20]) ! ii = '>ii' ! else: raise IOError(0, 'Bad magic number', filename) # *************** *** 193,231 **** # dictionary. for i in xrange(0, msgcount): ! mstart = unpack(' Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv23026 Modified Files: ACKS Log Message: Added James Henstridge Index: ACKS =================================================================== RCS file: /cvsroot/python/python/dist/src/Misc/ACKS,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -r1.58 -r1.59 *** ACKS 2000/06/29 12:45:50 1.58 --- ACKS 2000/08/30 03:30:28 1.59 *************** *** 142,145 **** --- 142,146 ---- Lance Finn Helsten Jonathan Hendry + James Henstridge Chris Herborth Ivan Herman From python-dev@python.org Wed Aug 30 04:30:42 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 20:30:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html index.html.in,1.7,1.8 Message-ID: <200008300330.UAA23059@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv23048 Modified Files: index.html.in Log Message: Added a couple of links to online documentation. Reasonable since this file is not used in the online documentation. Index: index.html.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/index.html.in,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** index.html.in 2000/06/30 15:30:33 1.7 --- index.html.in 2000/08/30 03:30:40 1.8 *************** *** 5,8 **** --- 5,9 ---- *************** *** 83,86 **** --- 84,105 ---- + + +   +

    + + +   + + + From python-dev@python.org Wed Aug 30 04:31:47 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:31:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_gettext.py,1.4,1.5 Message-ID: <200008300331.UAA23249@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv23239 Modified Files: test_gettext.py Log Message: Expand the test suite to test both the GNU gettext and translation class-based APIs. Index: test_gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_gettext.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** test_gettext.py 2000/08/26 21:01:27 1.4 --- test_gettext.py 2000/08/30 03:31:45 1.5 *************** *** 3,21 **** import gettext ! def test(localedir, mofile): # Test basic interface os.environ['LANGUAGE'] = 'xx' print 'installing gettext' ! gettext.install() - print _('calling bindtextdomain with localedir %s') % localedir - print gettext.bindtextdomain('gettext', localedir) - print gettext.bindtextdomain() - - print gettext.textdomain('gettext') - print gettext.textdomain() - # test some translations print _(u'mullusk') print _(r'Raymond Luxury Yach-t') --- 3,18 ---- import gettext ! ! def test_api_1(localedir, mofile): ! print 'test api 1' ! # Test basic interface os.environ['LANGUAGE'] = 'xx' print 'installing gettext' ! gettext.install('gettext', localedir) # test some translations + print _('albatross') print _(u'mullusk') print _(r'Raymond Luxury Yach-t') *************** *** 23,26 **** --- 20,24 ---- # double quotes + print _("albatross") print _(u"mullusk") print _(r"Raymond Luxury Yach-t") *************** *** 28,31 **** --- 26,30 ---- # triple single quotes + print _('''albatross''') print _(u'''mullusk''') print _(r'''Raymond Luxury Yach-t''') *************** *** 33,36 **** --- 32,36 ---- # triple double quotes + print _("""albatross""") print _(u"""mullusk""") print _(r"""Raymond Luxury Yach-t""") *************** *** 42,47 **** gettext message catalog library.''') - print gettext.dgettext('gettext', 'nudge nudge') - # test the alternative interface fp = open(os.path.join(mofile), 'rb') --- 42,45 ---- *************** *** 49,101 **** fp.close() ! gettext.set(t) ! print t == gettext.get() print _('nudge nudge') GNU_MO_DATA = '''\ 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB ! AQAACwAAAEkBAAAWAQAAVQEAABYAAABsAgAAoQAAAIMCAAAFAAAAJQMAAAkAAAArAwAAAQAAAAQA AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ ! cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiBGcmkgQXVnIDE4IDIwOjQ1 ! OjAzIDIwMDAKTGFzdC1UcmFuc2xhdG9yOiBCYXJyeSBXYXJzYXcgPGJ3YXJzYXdAYmVvcGVuLmNv ! bT4KTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz4KTUlNRS1WZXJzaW9u ! OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWVuCkNvbnRlbnQtVHJhbnNm ! ZXItRW5jb2Rpbmc6IG5vbmUKR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4xCgBUaHJvYXR3 ! b2JibGVyIE1hbmdyb3ZlAEd1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJh ! IG5hcSB5YnBueXZtbmd2YmEKZmhjY2JlZyBzYmUgbGJoZSBDbGd1YmEgY2VidGVuemYgb2wgY2Vi ! aXZxdmF0IG5hIHZhZ3Jlc25wciBnYiBndXIgVEFICnRyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2 ! b2VuZWwuAGJhY29uAHdpbmsgd2luawA= ! ''' ! ! SOLARIS_MO_DATA = '''\ ! AAAACAAAABEAAAIXAAAB0gAAARD///+d////nQAAAAAAAAAAAAAAAAAAAAIAAAAkAAAAAf///53/ ! //+dAAAAQgAAAAIAAAABAAAABQAAAGgAAAAD////nf///50AAAB0AAAADQAAAAQAAAAGAAAAmAAA ! AA7///+dAAAABwAAAKAAAAAU////nf///50AAAC5AAAAFQAAAAMAAAAMAAAAywAAABb///+d//// ! nQAAANsAAAAXAAAACQAAAAsAAADsAAAAGP///53///+dAAAA/wAAABkAAAAKAAAADgAAAScAAAAa ! ////nf///50AAAFDAAAAGwAAAA0AAAAPAAABXgAAABz///+dAAAAEAAAAgAAAAC+////nf///50A ! AAIWAAAA1XRleHQgZG9tYWluIGRpZG4ndCBnZXQgc2V0IHByb3Blcmx5AHJhdyBzdHJpbmcgdHJh ! bnNsYXRpb24gZmFpbGVkAHJhdyBVbmljb2RlIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbnVk ! Z2UgbnVkZ2UAbXVsdGlsaW5lIHN0cmluZyB0cmFuc2xhdGlvbiBmYWlsZWQAbXVsbHVzawBnb3Qg ! dW5leHBlY3RlZCBsb2NhbGVkaXIAZ2V0dGV4dCBpbnN0YWxsZWQAZGdldHRleHQgZmFpbGVkAGRj ! Z2V0dGV4dCBmYWlsZWQAY2FsbGluZyB0ZXh0ZG9tYWluAGNhbGxpbmcgYmluZHRleHRkb21haW4g ! d2l0aCBsb2NhbGRpciAlcwBiaW5kdGV4dGRvbWFpbihOb25lKSBmYWlsZWQAVW5pY29kZSB0cmFu ! c2xhdGlvbiBmYWlsZWQAVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24g ! YW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZvciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92 ! aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBHTlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGli ! cmFyeS4AUmF5bW9uZCBMdXh1cnkgWWFjaC10AAAAAAB3aW5rIHdpbmsAAGJhY29uAAAAAAAAAAAA ! R3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZtbmd2YmEgbmFxIHlicG55dm1uZ3Zi ! YQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVz ! bnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4AVGhyb2F0d29i ! YmxlciBNYW5ncm92ZQBQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTgpQTy1SZXZp ! c2lvbi1EYXRlOiAyMDAwLTA4LTE4IDIxOjAxLTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogRlVMTCBO ! QU1FIDxFTUFJTEBBRERSRVNTPgpMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPgpN ! SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNF ! VApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElORwoA ''' LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') --- 47,128 ---- fp.close() ! t.install() print _('nudge nudge') + # try unicode return type + t.install(unicode=1) + + print _('mullusk') + + + + def test_api_2(localedir, mofile): + print 'test api 2' + + gettext.bindtextdomain('gettext', localedir) + print gettext.bindtextdomain('gettext') == localedir + + gettext.textdomain('gettext') + # should return 'gettext' + print gettext.textdomain() + + # local function override builtin + _ = gettext.gettext + + # test some translations + print _('albatross') + print _(u'mullusk') + print _(r'Raymond Luxury Yach-t') + print _(ur'nudge nudge') + + # double quotes + print _("albatross") + print _(u"mullusk") + print _(r"Raymond Luxury Yach-t") + print _(ur"nudge nudge") + + # triple single quotes + print _('''albatross''') + print _(u'''mullusk''') + print _(r'''Raymond Luxury Yach-t''') + print _(ur'''nudge nudge''') + + # triple double quotes + print _("""albatross""") + print _(u"""mullusk""") + print _(r"""Raymond Luxury Yach-t""") + print _(ur"""nudge nudge""") + + # multiline strings + print _('''This module provides internationalization and localization + support for your Python programs by providing an interface to the GNU + gettext message catalog library.''') + + # Now test dgettext() + def _(message): + return gettext.dgettext('gettext') + + + GNU_MO_DATA = '''\ 3hIElQAAAAAFAAAAHAAAAEQAAAAHAAAAbAAAAAAAAACIAAAAFQAAAIkAAAChAAAAnwAAAAcAAABB ! AQAACwAAAEkBAAAbAQAAVQEAABYAAABxAgAAoQAAAIgCAAAFAAAAKgMAAAkAAAAwAwAAAQAAAAQA AAACAAAAAAAAAAUAAAAAAAAAAwAAAABSYXltb25kIEx1eHVyeSBZYWNoLXQAVGhpcyBtb2R1bGUg cHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgpzdXBwb3J0IGZv ciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBH TlUKZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4AbXVsbHVzawBudWRnZSBudWRnZQBQ ! cm9qZWN0LUlkLVZlcnNpb246IDIuMApQTy1SZXZpc2lvbi1EYXRlOiAyMDAwLTA4LTI5IDEyOjE5 ! LTA0OjAwCkxhc3QtVHJhbnNsYXRvcjogQmFycnkgQS4gV2Fyc2F3IDxid2Fyc2F3QGJlb3Blbi5j ! b20+Ckxhbmd1YWdlLVRlYW06IFhYIDxweXRob24tZGV2QHB5dGhvbi5vcmc+Ck1JTUUtVmVyc2lv ! bjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1rb2k4X3IKQ29udGVudC1U ! cmFuc2Zlci1FbmNvZGluZzogbm9uZQpHZW5lcmF0ZWQtQnk6IHB5Z2V0dGV4dC5weSAxLjEKAFRo ! cm9hdHdvYmJsZXIgTWFuZ3JvdmUAR3V2ZiB6YnFoeXIgY2ViaXZxcmYgdmFncmVhbmd2YmFueXZt ! bmd2YmEgbmFxIHlicG55dm1uZ3ZiYQpmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBv ! bCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1ciBUQUgKdHJnZ3JrZyB6cmZmbnRyIHBuZ255 ! YnQgeXZvZW5lbC4AYmFjb24Ad2luayB3aW5rAA== ''' + LOCALEDIR = os.path.join('xx', 'LC_MESSAGES') MOFILE = os.path.join(LOCALEDIR, 'gettext.mo') *************** *** 112,119 **** - try: setup() ! test('.', MOFILE) finally: teardown() --- 139,146 ---- try: setup() ! test_api_1('.', MOFILE) ! test_api_2('.', MOFILE) finally: teardown() *************** *** 122,324 **** ! # For reference, here's the .pot and .po files used to created the .mo data ! # above. The .pot file was generated by pygettext. ! # =============================== messages.pot ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" ! ! # =============================== messages.po ! ! ### Dummy translation for Python's test_gettext.py module. ! ### Copyright (C) 2000 BeOpen.com ! ### Barry Warsaw , 2000. ! ### ! ###, fuzzy ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: PACKAGE VERSION\n" ! ##"PO-Revision-Date: 2000-08-18 21:01-04:00\n" ! ##"Last-Translator: FULL NAME \n" ! ##"Language-Team: LANGUAGE \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=CHARSET\n" ! ##"Content-Transfer-Encoding: ENCODING\n" ! ! ### SOME DESCRIPTIVE TITLE. ! ### Copyright (C) YEAR ORGANIZATION ! ### FIRST AUTHOR , YEAR. ! ### ! ##msgid "" ! ##msgstr "" ! ##"Project-Id-Version: 2.0\n" ! ##"PO-Revision-Date: Fri Aug 18 20:45:03 2000\n" ! ##"Last-Translator: Barry Warsaw \n" ! ##"Language-Team: XX \n" ! ##"MIME-Version: 1.0\n" ! ##"Content-Type: text/plain; charset=en\n" ! ##"Content-Transfer-Encoding: none\n" ! ##"Generated-By: pygettext.py 1.1\n" ! ! ! ###: Lib/test/test_gettext.py:34 ! ##msgid "calling textdomain" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:94 ! ##msgid "dgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:25 ! ##msgid "gettext installed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:32 ! ##msgid "bindtextdomain(None) failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:44 Lib/test/test_gettext.py:54 ! ###: Lib/test/test_gettext.py:64 Lib/test/test_gettext.py:74 ! ##msgid "Raymond Luxury Yach-t" ! ##msgstr "Throatwobbler Mangrove" ! ! ###: Lib/test/test_gettext.py:41 Lib/test/test_gettext.py:51 ! ###: Lib/test/test_gettext.py:61 Lib/test/test_gettext.py:71 ! ##msgid "mullusk" ! ##msgstr "bacon" ! ! ###: Lib/test/test_gettext.py:38 ! ##msgid "text domain didn't get set properly" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:98 ! ##msgid "dcgettext failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:47 Lib/test/test_gettext.py:57 ! ###: Lib/test/test_gettext.py:67 Lib/test/test_gettext.py:77 ! ##msgid "nudge nudge" ! ##msgstr "wink wink" ! ! ###: Lib/test/test_gettext.py:45 Lib/test/test_gettext.py:55 ! ###: Lib/test/test_gettext.py:65 Lib/test/test_gettext.py:75 ! ##msgid "raw string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:30 ! ##msgid "got unexpected localedir" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:48 Lib/test/test_gettext.py:58 ! ###: Lib/test/test_gettext.py:68 Lib/test/test_gettext.py:78 ! ##msgid "raw Unicode string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:42 Lib/test/test_gettext.py:52 ! ###: Lib/test/test_gettext.py:62 Lib/test/test_gettext.py:72 ! ##msgid "Unicode translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:90 ! ##msgid "multiline string translation failed" ! ##msgstr "" ! ! ###: Lib/test/test_gettext.py:81 ! ##msgid "" ! ##"This module provides internationalization and localization\n" ! ##"support for your Python programs by providing an interface to the GNU\n" ! ##"gettext message catalog library." ! ##msgstr "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" ! ##"fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" ! ##"trggrkg zrffntr pngnybt yvoenel." ! ! ###: Lib/test/test_gettext.py:26 ! ##msgid "calling bindtextdomain with localdir %s" ! ##msgstr "" --- 149,200 ---- ! # For reference, here's the .po file used to created the .mo data above. ! ''' ! # Dummy translation for Python's test_gettext.py module. ! # Copyright (C) 2000 BeOpen.com ! # Barry Warsaw , 2000. ! # ! msgid "" ! msgstr "" ! "Project-Id-Version: 2.0\n" ! "PO-Revision-Date: 2000-08-29 12:19-04:00\n" ! "Last-Translator: Barry A. Warsaw \n" ! "Language-Team: XX \n" ! "MIME-Version: 1.0\n" ! "Content-Type: text/plain; charset=koi8_r\n" ! "Content-Transfer-Encoding: none\n" ! "Generated-By: pygettext.py 1.1\n" ! ! #: test_gettext.py:19 test_gettext.py:25 test_gettext.py:31 test_gettext.py:37 ! #: test_gettext.py:51 test_gettext.py:80 test_gettext.py:86 test_gettext.py:92 ! #: test_gettext.py:98 ! msgid "nudge nudge" ! msgstr "wink wink" ! ! #: test_gettext.py:16 test_gettext.py:22 test_gettext.py:28 test_gettext.py:34 ! #: test_gettext.py:77 test_gettext.py:83 test_gettext.py:89 test_gettext.py:95 ! msgid "albatross" ! msgstr "" ! ! #: test_gettext.py:18 test_gettext.py:24 test_gettext.py:30 test_gettext.py:36 ! #: test_gettext.py:79 test_gettext.py:85 test_gettext.py:91 test_gettext.py:97 ! msgid "Raymond Luxury Yach-t" ! msgstr "Throatwobbler Mangrove" ! ! #: test_gettext.py:17 test_gettext.py:23 test_gettext.py:29 test_gettext.py:35 ! #: test_gettext.py:56 test_gettext.py:78 test_gettext.py:84 test_gettext.py:90 ! #: test_gettext.py:96 ! msgid "mullusk" ! msgstr "bacon" ! ! #: test_gettext.py:40 test_gettext.py:101 ! msgid "" ! "This module provides internationalization and localization\n" ! "support for your Python programs by providing an interface to the GNU\n" ! "gettext message catalog library." ! msgstr "" ! "Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba\n" ! "fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH\n" ! "trggrkg zrffntr pngnybt yvoenel." ! ''' From python-dev@python.org Wed Aug 30 04:28:19 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:28:19 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgettext.tex,1.1,1.2 Message-ID: <200008300328.UAA22849@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv22838 Modified Files: libgettext.tex Log Message: Oops, spell MAL's name right. Index: libgettext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgettext.tex,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** libgettext.tex 2000/08/30 03:27:10 1.1 --- libgettext.tex 2000/08/30 03:28:17 1.2 *************** *** 489,493 **** \item Peter Funk \item James Henstridge ! \item Mark-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard --- 489,493 ---- \item Peter Funk \item James Henstridge ! \item Marc-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard From python-dev@python.org Wed Aug 30 04:32:09 2000 From: python-dev@python.org (Barry Warsaw) Date: Tue, 29 Aug 2000 20:32:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_gettext,1.2,1.3 Message-ID: <200008300332.UAA23296@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv23284 Modified Files: test_gettext Log Message: Expand the test suite to test both the GNU gettext and translation class-based APIs. Index: test_gettext =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_gettext,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** test_gettext 2000/08/25 19:49:28 1.2 --- test_gettext 2000/08/30 03:32:07 1.3 *************** *** 1,18 **** test_gettext installing gettext ! calling bindtextdomain with localedir . ! . ! None ! gettext ! gettext bacon Throatwobbler Mangrove wink wink bacon Throatwobbler Mangrove wink wink bacon Throatwobbler Mangrove wink wink bacon Throatwobbler Mangrove --- 1,18 ---- test_gettext + test api 1 installing gettext ! albatross bacon Throatwobbler Mangrove wink wink + albatross bacon Throatwobbler Mangrove wink wink + albatross bacon Throatwobbler Mangrove wink wink + albatross bacon Throatwobbler Mangrove *************** *** 22,25 **** --- 22,46 ---- trggrkg zrffntr pngnybt yvoenel. wink wink + bacon + test api 2 1 + gettext + albatross + bacon + Throatwobbler Mangrove + wink wink + albatross + bacon + Throatwobbler Mangrove wink wink + albatross + bacon + Throatwobbler Mangrove + wink wink + albatross + bacon + Throatwobbler Mangrove + wink wink + Guvf zbqhyr cebivqrf vagreangvbanyvmngvba naq ybpnyvmngvba + fhccbeg sbe lbhe Clguba cebtenzf ol cebivqvat na vagresnpr gb gur TAH + trggrkg zrffntr pngnybt yvoenel. From python-dev@python.org Wed Aug 30 05:19:23 2000 From: python-dev@python.org (Fred L. Drake) Date: Tue, 29 Aug 2000 21:19:23 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libgettext.tex,1.2,1.3 Message-ID: <200008300419.VAA02890@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2882/lib Modified Files: libgettext.tex Log Message: Markup revisions. Nothing was actually required to be able to format it, but many conventions were broken. Index: libgettext.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libgettext.tex,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** libgettext.tex 2000/08/30 03:28:17 1.2 --- libgettext.tex 2000/08/30 04:19:20 1.3 *************** *** 10,14 **** The \module{gettext} module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. ! It supports both the GNU \program{gettext} message catalog API and a higher level, class-based API that may be more appropriate for Python files. The interface described below allows you to write your --- 10,14 ---- The \module{gettext} module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. ! It supports both the GNU \code{gettext} message catalog API and a higher level, class-based API that may be more appropriate for Python files. The interface described below allows you to write your *************** *** 31,55 **** instead. ! \begin{funcdesc}{bindtextdomain}{domain, localedir\code{=None}} Bind the \var{domain} to the locale directory \var{localedir}. More concretely, \module{gettext} will look for ! binary \file{.mo} files for the given domain using the path (on Unix): \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo}, where \var{languages} is searched for in the environment variables ! \code{LANGUAGE}, \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG} ! respectively. ! If \var{localedir} is \code{None}, then the current binding for ! \var{domain} is returned\footnote{The default locale directory is system ! dependent; e.g. on standard RedHat Linux it is ! \file{/usr/share/locale}, but on Solaris it is ! \file{/usr/lib/locale}. The \module{gettext} module does not try to ! support these system dependent defaults; instead its default is ! \file{\code{sys.prefix}/share/locale}. For this reason, it is always ! best to call \code{gettext.bindtextdomain()} with an explicit absolute ! path at the start of your application.}. \end{funcdesc} ! \begin{funcdesc}{textdomain}{domain\code{=None}} Change or query the current global domain. If \var{domain} is \code{None}, then the current global domain is returned, otherwise the --- 31,56 ---- instead. ! \begin{funcdesc}{bindtextdomain}{domain\optional{, localedir}} Bind the \var{domain} to the locale directory \var{localedir}. More concretely, \module{gettext} will look for ! binary \file{.mo} files for the given domain using the path (on \UNIX): \file{\var{localedir}/\var{language}/LC_MESSAGES/\var{domain}.mo}, where \var{languages} is searched for in the environment variables ! \envvar{LANGUAGE}, \envvar{LC_ALL}, \envvar{LC_MESSAGES}, and ! \envvar{LANG} respectively. ! If \var{localedir} is omitted or \code{None}, then the current binding ! for \var{domain} is returned.\footnote{ ! The default locale directory is system dependent; e.g.\ on ! RedHat Linux it is \file{/usr/share/locale}, but on Solaris it ! is \file{/usr/lib/locale}. The \module{gettext} module does ! not try to support these system dependent defaults; instead ! its default is \file{\code{sys.prefix}/share/locale}. For ! this reason, it is always best to call ! \function{bindtextdomain()} with an explicit absolute path at ! the start of your application.} \end{funcdesc} ! \begin{funcdesc}{textdomain}{\optional{domain}} Change or query the current global domain. If \var{domain} is \code{None}, then the current global domain is returned, otherwise the *************** *** 95,99 **** namespace as the function \function{_()}. ! \begin{funcdesc}{find}{domain, localedir\code{=None}, languages\code{=None}} This function implements the standard \file{.mo} file search algorithm. It takes a \var{domain}, identical to what --- 96,100 ---- namespace as the function \function{_()}. ! \begin{funcdesc}{find}{domain\optional{, localedir\optional{, languages}}} This function implements the standard \file{.mo} file search algorithm. It takes a \var{domain}, identical to what *************** *** 103,110 **** If \var{localedir} is not given, then the default system locale ! directory is used\footnote{See the footnote for ! \function{bindtextdomain()} above.}. If \var{languages} is not given, ! then the following environment variables are searched: \code{LANGUAGE}, ! \code{LC_ALL}, \code{LC_MESSAGES}, and \code{LANG}. The first one returning a non-empty value is used for the \var{languages} variable. The environment variables can contain a colon separated list of --- 104,111 ---- If \var{localedir} is not given, then the default system locale ! directory is used.\footnote{See the footnote for ! \function{bindtextdomain()} above.} If \var{languages} is not given, ! then the following environment variables are searched: \envvar{LANGUAGE}, ! \envvar{LC_ALL}, \envvar{LC_MESSAGES}, and \envvar{LANG}. The first one returning a non-empty value is used for the \var{languages} variable. The environment variables can contain a colon separated list of *************** *** 121,126 **** \end{funcdesc} ! \begin{funcdesc}{translation}{domain, localedir\code{=None}, ! languages\code{=None}, class_\code{=None}} Return a \class{Translations} instance based on the \var{domain}, \var{localedir}, and \var{languages}, which are first passed to --- 122,127 ---- \end{funcdesc} ! \begin{funcdesc}{translation}{domain\optional{, localedir\optional{, ! languages\optional{, class_}}}} Return a \class{Translations} instance based on the \var{domain}, \var{localedir}, and \var{languages}, which are first passed to *************** *** 134,138 **** \end{funcdesc} ! \begin{funcdesc}{install}{domain, localedir\code{=None}, unicode\code{=0}} This installs the function \function{_} in Python's builtin namespace, based on \var{domain}, and \var{localedir} which are passed to the --- 135,139 ---- \end{funcdesc} ! \begin{funcdesc}{install}{domain\optional{, localedir\optional{, unicode}}} This installs the function \function{_} in Python's builtin namespace, based on \var{domain}, and \var{localedir} which are passed to the *************** *** 161,165 **** methods of \class{NullTranslations}: ! \begin{methoddesc}[NullTranslations]{__init__}{fp\code{=None}} Takes an optional file object \var{fp}, which is ignored by the base class. Initializes ``protected'' instance variables \var{_info} and --- 162,166 ---- methods of \class{NullTranslations}: ! \begin{methoddesc}[NullTranslations]{__init__}{\optional{fp}} Takes an optional file object \var{fp}, which is ignored by the base class. Initializes ``protected'' instance variables \var{_info} and *************** *** 185,200 **** \begin{methoddesc}[NullTranslations]{info}{} ! Return the ``protected'' \var{_info} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{charset}{} ! Return the ``protected'' \var{_charset} variable. \end{methoddesc} ! \begin{methoddesc}[NullTranslations]{install}{unicode\code{=0}} If the \var{unicode} flag is false, this method installs ! \code{self.gettext} into the built-in namespace, binding it to ! \function{_}. If \var{unicode} is true, it binds \code{self.ugettext} ! instead. Note that this is only one way, albeit the most convenient way, to --- 186,201 ---- \begin{methoddesc}[NullTranslations]{info}{} ! Return the ``protected'' \member{_info} variable. \end{methoddesc} \begin{methoddesc}[NullTranslations]{charset}{} ! Return the ``protected'' \member{_charset} variable. \end{methoddesc} ! \begin{methoddesc}[NullTranslations]{install}{\optional{unicode}} If the \var{unicode} flag is false, this method installs ! \method{self.gettext()} into the built-in namespace, binding it to ! \samp{_}. If \var{unicode} is true, it binds \method{self.ugettext()} ! instead. By default, \var{unicode} is false. Note that this is only one way, albeit the most convenient way, to *************** *** 224,233 **** It also parses optional meta-data out of the translation catalog. It is convention with GNU \program{gettext} to include meta-data as the ! translation for the empty string. This meta-data is in RFC822-style ! \code{key: value} pairs. If the key \code{Content-Type:} is found, then the \code{charset} property is used to initialize the ! ``protected'' \code{_charset} instance variable. The entire set of key/value pairs are placed into a dictionary and set as the ! ``protected'' \code{_info} instance variable. If the \file{.mo} file's magic number is invalid, or if other problems --- 225,234 ---- It also parses optional meta-data out of the translation catalog. It is convention with GNU \program{gettext} to include meta-data as the ! translation for the empty string. This meta-data is in \rfc{822}-style ! \code{key: value} pairs. If the key \code{Content-Type} is found, then the \code{charset} property is used to initialize the ! ``protected'' \member{_charset} instance variable. The entire set of key/value pairs are placed into a dictionary and set as the ! ``protected'' \member{_info} instance variable. If the \file{.mo} file's magic number is invalid, or if other problems *************** *** 237,241 **** The other usefully overridden method is \method{ugettext()}, which returns a Unicode string by passing both the translated message string ! and the value of the ``protected'' \code{_charset} variable to the builtin \function{unicode()} function. --- 238,242 ---- The other usefully overridden method is \method{ugettext()}, which returns a Unicode string by passing both the translated message string ! and the value of the ``protected'' \member{_charset} variable to the builtin \function{unicode()} function. *************** *** 298,307 **** \end{verbatim} ! In this example, the string ``\code{writing a log message}'' is marked as ! a candidate for translation, while the strings ``\code{mylog.txt}'' and ! ``\code{w}'' are not. ! The GNU \program{gettext} package provides a tool, called ! \program{xgettext}, that scans C and C++ source code looking for these specially marked strings. \program{xgettext} generates what are called \file{.pot} files, essentially structured human readable files --- 299,308 ---- \end{verbatim} ! In this example, the string \code{'writing a log message'} is marked as ! a candidate for translation, while the strings \code{'mylog.txt'} and ! \code{'w'} are not. ! The GNU \code{gettext} package provides a tool, called ! \program{xgettext}, that scans C and \Cpp{} source code looking for these specially marked strings. \program{xgettext} generates what are called \file{.pot} files, essentially structured human readable files *************** *** 313,320 **** doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called ! \program{pygettext} that does though (found in the \file{Tools/i18n} ! directory)\footnote{Fran\c cois Pinard has written a program called \program{xpot} which does a similar job. It is distributed separately ! from the Python distribution.}. This is a command line script that supports a similar interface as \program{xgettext}; see its documentation for details. Once you've used \program{pygettext} to --- 314,322 ---- doesn't understand the myriad of string types support by Python. The standard Python distribution provides a tool called ! \program{pygettext} that does though (found in the \file{Tools/i18n/} ! directory).\footnote{Fran\c cois Pinard has written a program called \program{xpot} which does a similar job. It is distributed separately ! from the Python distribution. ! } This is a command line script that supports a similar interface as \program{xgettext}; see its documentation for details. Once you've used \program{pygettext} to *************** *** 331,341 **** If you are localizing your module, you must take care not to make global changes, e.g. to the built-in namespace. You should not use ! the GNU \program{gettext} API but instead the class-based API. Let's say your module is called ``spam'' and the module's various natural language translation \file{.mo} files reside in ! \file{/usr/share/locale} in GNU ! \program{gettext} format. Here's what you would put at the top of ! your module: \begin{verbatim} --- 333,342 ---- If you are localizing your module, you must take care not to make global changes, e.g. to the built-in namespace. You should not use ! the GNU \code{gettext} API but instead the class-based API. Let's say your module is called ``spam'' and the module's various natural language translation \file{.mo} files reside in ! \file{/usr/share/locale} in GNU \program{gettext} format. Here's what ! you would put at the top of your module: \begin{verbatim} *************** *** 370,374 **** \end{verbatim} ! If you need to set the locale directory or the \code{unicode} flag, you can pass these into the \function{install()} function: --- 371,375 ---- \end{verbatim} ! If you need to set the locale directory or the \var{unicode} flag, you can pass these into the \function{install()} function: *************** *** 445,449 **** the string unchanged. And this dummy definition will temporarily override any definition of \function{_()} in the built-in namespace ! (until the \code{del} command). Take care, though if you have a previous definition of \function{_} in the local namespace. --- 446,450 ---- the string unchanged. And this dummy definition will temporarily override any definition of \function{_()} in the built-in namespace ! (until the \keyword{del} command). Take care, though if you have a previous definition of \function{_} in the local namespace. *************** *** 471,478 **** In this case, you are marking translatable strings with the function ! \function{N_()}\footnote{The choice of \function{N_()} here is totally arbitrary; it could have just as easily been ! \function{MarkThisStringForTranslation()}.}, ! which won't conflict with any definition of \function{_()}. However, you will need to teach your message extraction program to look for translatable strings marked with \function{N_()}. --- 472,479 ---- In this case, you are marking translatable strings with the function ! \function{N_()},\footnote{The choice of \function{N_()} here is totally arbitrary; it could have just as easily been ! \function{MarkThisStringForTranslation()}. ! } which won't conflict with any definition of \function{_()}. However, you will need to teach your message extraction program to look for translatable strings marked with \function{N_()}. *************** *** 489,493 **** \item Peter Funk \item James Henstridge ! \item Marc-Andre Lemburg \item Martin von L\"owis \item Fran\c cois Pinard --- 490,494 ---- \item Peter Funk \item James Henstridge ! \item Marc-Andr\'e Lemburg \item Martin von L\"owis \item Fran\c cois Pinard From python-dev@python.org Wed Aug 30 10:08:20 2000 From: python-dev@python.org (M.-A. Lemburg) Date: Wed, 30 Aug 2000 02:08:20 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0224.txt,1.2,1.3 Message-ID: <200008300908.CAA30719@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv30693 Modified Files: pep-0224.txt Log Message: Changed the name mangling from __doc____ to __doc___ and added comments about possible problems. Index: pep-0224.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0224.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** pep-0224.txt 2000/08/24 14:16:10 1.2 --- pep-0224.txt 2000/08/30 09:08:16 1.3 *************** *** 85,89 **** The following name mangling scheme achieves all of the above: ! __doc____ To keep track of the last assigned name, the byte code compiler --- 85,89 ---- The following name mangling scheme achieves all of the above: ! __doc___ To keep track of the last assigned name, the byte code compiler *************** *** 103,108 **** attributes to be created: ! C.__doc__a__ == "attribute C.a doc-string (1)" ! C.__doc__b__ == "attribute C.b doc-string (2)" A patch to the current CVS version of Python 2.0 which implements --- 103,108 ---- attributes to be created: ! C.__doc_a__ == "attribute C.a doc-string (1)" ! C.__doc_b__ == "attribute C.b doc-string (2)" A patch to the current CVS version of Python 2.0 which implements *************** *** 135,142 **** used assignment name variable, it is still valid when the compiler reaches the docstring "b's doc string" and thus assigns the string ! to __doc__b__. A possible solution to this problem would be resetting the name ! variable for all non-expression nodes. --- 135,171 ---- used assignment name variable, it is still valid when the compiler reaches the docstring "b's doc string" and thus assigns the string ! to __doc_b__. A possible solution to this problem would be resetting the name ! variable for all non-expression nodes in the compiler. ! ! ! Possible Problems ! ! Even though highly unlikely, attribute docstrings could get ! accidentally concatenated to the attribute's value: ! ! class C: ! x = "text" \ ! "x's docstring" ! ! The trailing slash would cause the Python compiler to concatenate ! the attribute value and the docstring. ! ! A modern syntax highlighting editor would easily make this ! accident visible, though, and by simply inserting emtpy lines ! between the attribute definition and the docstring you can avoid ! the possible concatenation completely, so the problem is ! negligible. ! ! Another possible problem is that of using triple quoted strings as ! a way to uncomment parts of your code. ! ! If there happens to be an assignment just before the start of the ! comment string, then the compiler will treat the comment as ! docstring attribute and apply the above logic to it. ! ! Besides generating a docstring for an otherwise undocumented ! attribute there is no breakage. From python-dev@python.org Wed Aug 30 15:01:32 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 30 Aug 2000 07:01:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib calendar.py,1.16,1.17 Message-ID: <200008301401.HAA24847@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv24801 Modified Files: calendar.py Log Message: patches from David Goodger. Closes patch 101085. * deletes cache * adds firstweekday and setfirstweekday functions that allow user to control which day of the week is first when displaying calendars * adds month, week, calendar functions that return their results instead of printing them * adds symbolic constants MONDAY, ..., SUNDAY so users need not remember the ordinal values of the weekdays Index: calendar.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/calendar.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** calendar.py 2000/06/28 14:48:01 1.16 --- calendar.py 2000/08/30 14:01:28 1.17 *************** *** 1,4 **** ! """Calendar printing functions""" # Revision 2: uses functions from built-in time module --- 1,9 ---- ! """Calendar printing functions + Note when comparing these calendars to the ones printed by cal(1): By + default, these calendars have Monday as the first day of the week, and + Sunday as the last (the European convention). Use setfirstweekday() to + set the first day of the week (0=Monday, 6=Sunday).""" + # Revision 2: uses functions from built-in time module *************** *** 9,16 **** error = ValueError - # Note when comparing these calendars to the ones printed by cal(1): - # My calendars have Monday as the first day of the week, and Sunday as - # the last! (I believe this is the European convention.) - # Constants for months referenced later January = 1 --- 14,17 ---- *************** *** 32,35 **** --- 33,52 ---- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + # Constants for weekdays + (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) + + _firstweekday = 0 # 0 = Monday, 6 = Sunday + + def firstweekday(): + return _firstweekday + + def setfirstweekday(weekday): + """Set weekday (Monday=0, Sunday=6) to start each week.""" + global _firstweekday + if not MONDAY <= weekday <= SUNDAY: + raise ValueError, \ + 'bad weekday number; must be 0 (Monday) to 6 (Sunday)' + _firstweekday = weekday + def isleap(year): """Return 1 for leap years, 0 for non-leap years.""" *************** *** 38,46 **** def leapdays(y1, y2): """Return number of leap years in range [y1, y2). ! Assume y1 <= y2 and no funny (non-leap century) years.""" return (y2+3)/4 - (y1+3)/4 def weekday(year, month, day): ! """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31).""" secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0)) tuple = localtime(secs) --- 55,64 ---- def leapdays(y1, y2): """Return number of leap years in range [y1, y2). ! Assume y1 <= y2 and no funny (non-leap century) years.""" return (y2+3)/4 - (y1+3)/4 def weekday(year, month, day): ! """Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), ! day (1-31).""" secs = mktime((year, month, day, 0, 0, 0, 0, 0, 0)) tuple = localtime(secs) *************** *** 48,64 **** def monthrange(year, month): ! """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.""" ! if not 1 <= month <= 12: raise ValueError, 'bad month number' day1 = weekday(year, month, 1) ndays = mdays[month] + (month == February and isleap(year)) return day1, ndays ! def _monthcalendar(year, month): """Return a matrix representing a month's calendar. ! Each row represents a week; days outside this month are zero.""" day1, ndays = monthrange(year, month) rows = [] r7 = range(7) ! day = 1 - day1 while day <= ndays: row = [0, 0, 0, 0, 0, 0, 0] --- 66,84 ---- def monthrange(year, month): ! """Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for ! year, month.""" ! if not 1 <= month <= 12: ! raise ValueError, 'bad month number' day1 = weekday(year, month, 1) ndays = mdays[month] + (month == February and isleap(year)) return day1, ndays ! def monthcalendar(year, month): """Return a matrix representing a month's calendar. ! Each row represents a week; days outside this month are zero.""" day1, ndays = monthrange(year, month) rows = [] r7 = range(7) ! day = (_firstweekday - day1 + 6) % 7 - 5 # for leading 0's in first week while day <= ndays: row = [0, 0, 0, 0, 0, 0, 0] *************** *** 69,153 **** return rows - _mc_cache = {} - def monthcalendar(year, month): - """Caching interface to _monthcalendar.""" - key = (year, month) - if _mc_cache.has_key(key): - return _mc_cache[key] - else: - _mc_cache[key] = ret = _monthcalendar(year, month) - return ret - def _center(str, width): """Center a string in a field.""" n = width - len(str) ! if n <= 0: return str return ' '*((n+1)/2) + str + ' '*((n)/2) - - # XXX The following code knows that print separates items with space! ! def prweek(week, width): """Print a single week (no newline).""" ! for day in week: ! if day == 0: s = '' ! else: s = `day` ! print _center(s, width), def weekheader(width): """Return a header for a week.""" ! str = '' ! if width >= 9: names = day_name ! else: names = day_abbr ! for i in range(7): ! if str: str = str + ' ' ! str = str + _center(names[i%7][:width], width) ! return str ! def prmonth(year, month, w = 0, l = 0): """Print a month's calendar.""" w = max(2, w) l = max(1, l) ! print _center(month_name[month] + ' ' + `year`, 7*(w+1) - 1), ! print '\n'*l, ! print weekheader(w), ! print '\n'*l, ! for week in monthcalendar(year, month): ! prweek(week, w) ! print '\n'*l, ! # Spacing of month columns _colwidth = 7*3 - 1 # Amount printed by prweek() ! _spacing = ' '*4 # Spaces between columns ! def format3c(a, b, c): ! """3-column formatting for year calendars""" ! print _center(a, _colwidth), ! print _spacing, ! print _center(b, _colwidth), ! print _spacing, ! print _center(c, _colwidth) ! def prcal(year): """Print a year's calendar.""" ! header = weekheader(2) ! format3c('', `year`, '') for q in range(January, January+12, 3): ! print ! format3c(month_name[q], month_name[q+1], month_name[q+2]) ! format3c(header, header, header) data = [] height = 0 ! for month in range(q, q+3): ! cal = monthcalendar(year, month) ! if len(cal) > height: height = len(cal) data.append(cal) for i in range(height): for cal in data: if i >= len(cal): ! print ' '*_colwidth, else: ! prweek(cal[i], 2) ! print _spacing, ! print EPOCH = 1970 --- 89,188 ---- return rows def _center(str, width): """Center a string in a field.""" n = width - len(str) ! if n <= 0: ! return str return ' '*((n+1)/2) + str + ' '*((n)/2) ! def prweek(theweek, width): """Print a single week (no newline).""" ! print week(theweek, width), + def week(theweek, width): + """Returns a single week in a string (no newline).""" + days = [] + for day in theweek: + if day == 0: + s = '' + else: + s = '%2i' % day # right-align single-digit days + days.append(_center(s, width)) + return ' '.join(days) + def weekheader(width): """Return a header for a week.""" ! if width >= 9: ! names = day_name ! else: ! names = day_abbr ! days = [] ! for i in range(_firstweekday, _firstweekday + 7): ! days.append(_center(names[i%7][:width], width)) ! return ' '.join(days) ! def prmonth(theyear, themonth, w=0, l=0): """Print a month's calendar.""" + print month(theyear, themonth, w, l), + + def month(theyear, themonth, w=0, l=0): + """Return a month's calendar string (multi-line).""" w = max(2, w) l = max(1, l) ! s = (_center(month_name[themonth] + ' ' + `theyear`, ! 7 * (w + 1) - 1).rstrip() + ! '\n' * l + weekheader(w).rstrip() + '\n' * l) ! for aweek in monthcalendar(theyear, themonth): ! s = s + week(aweek, w).rstrip() + '\n' * l ! return s[:-l] + '\n' ! # Spacing of month columns for 3-column year calendar _colwidth = 7*3 - 1 # Amount printed by prweek() ! _spacing = 6 # Number of spaces between columns ! def format3c(a, b, c, colwidth=_colwidth, spacing=_spacing): ! """Prints 3-column formatting for year calendars""" ! print format3cstring(a, b, c, colwidth, spacing) ! ! def format3cstring(a, b, c, colwidth=_colwidth, spacing=_spacing): ! """Returns a string formatted from 3 strings, centered within 3 columns.""" ! return (_center(a, colwidth) + ' ' * spacing + _center(b, colwidth) + ! ' ' * spacing + _center(c, colwidth)) ! def prcal(year, w=0, l=0, c=_spacing): """Print a year's calendar.""" ! print calendar(year, w, l, c), ! ! def calendar(year, w=0, l=0, c=_spacing): ! """Returns a year's calendar as a multi-line string.""" ! w = max(2, w) ! l = max(1, l) ! c = max(2, c) ! colwidth = (w + 1) * 7 - 1 ! s = _center(`year`, colwidth * 3 + c * 2).rstrip() + '\n' * l ! header = weekheader(w) ! header = format3cstring(header, header, header, colwidth, c).rstrip() for q in range(January, January+12, 3): ! s = (s + '\n' * l + ! format3cstring(month_name[q], month_name[q+1], month_name[q+2], ! colwidth, c).rstrip() + ! '\n' * l + header + '\n' * l) data = [] height = 0 ! for amonth in range(q, q + 3): ! cal = monthcalendar(year, amonth) ! if len(cal) > height: ! height = len(cal) data.append(cal) for i in range(height): + weeks = [] for cal in data: if i >= len(cal): ! weeks.append('') else: ! weeks.append(week(cal[i], w)) ! s = s + format3cstring(weeks[0], weeks[1], weeks[2], ! colwidth, c).rstrip() + '\n' * l ! return s[:-l] + '\n' EPOCH = 1970 From python-dev@python.org Wed Aug 30 15:02:27 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 30 Aug 2000 07:02:27 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libcalendar.tex,1.7,1.8 Message-ID: <200008301402.HAA25827@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv25767 Modified Files: libcalendar.tex Log Message: doc changes to parallel changes to calendar.py module Index: libcalendar.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libcalendar.tex,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** libcalendar.tex 2000/04/03 20:13:52 1.7 --- libcalendar.tex 2000/08/30 14:02:25 1.8 *************** *** 10,14 **** This module allows you to output calendars like the \UNIX{} \program{cal} program, and provides additional useful functions ! related to the calendar. \begin{funcdesc}{isleap}{year} --- 10,34 ---- This module allows you to output calendars like the \UNIX{} \program{cal} program, and provides additional useful functions ! related to the calendar. By default, these calendars have Monday as ! the first day of the week, and Sunday as the last (the European ! convention). Use \function{setfirstweekday()} to set the first day of the ! week to Sunday (6) or to any other weekday. ! ! \begin{funcdesc}{setfirstweekday}{weekday} ! Sets the weekday (\code{0} is Monday, \code{6} is Sunday) to start ! each week. The values \constant{MONDAY}, \constant{TUESDAY}, ! \constant{WEDNESDAY}, \constant{THURSDAY}, \constant{FRIDAY}, ! \constant{SATURDAY}, and \constant{SUNDAY} are provided for ! convenience. For example, to set the first weekday to Sunday: ! ! \begin{verbatim} ! import calendar ! calendar.setfirstweekday(calendar.SUNDAY) ! \end{verbatim} ! \end{funcdesc} ! ! \begin{funcdesc}{firstweekday}{} ! Returns the current setting for the weekday to start each week. ! \end{funcdesc} \begin{funcdesc}{isleap}{year} *************** *** 16,22 **** \end{funcdesc} ! \begin{funcdesc}{leapdays}{year1, year2} ! Return the number of leap years in the range ! [\var{year1}\ldots\var{year2}]. \end{funcdesc} --- 36,42 ---- \end{funcdesc} ! \begin{funcdesc}{leapdays}{y1, y2} ! Returns the number of leap years in the range ! [\var{y1}\ldots\var{y2}]. \end{funcdesc} *************** *** 35,49 **** Returns a matrix representing a month's calendar. Each row represents a week; days outside of the month a represented by zeros. \end{funcdesc} ! \begin{funcdesc}{prmonth}{year, month\optional{, width\optional{, length}}} ! Prints a month's calendar. If \var{width} is provided, it specifies ! the width of the columns that the numbers are centered in. If ! \var{length} is given, it specifies the number of lines that each ! week will use. \end{funcdesc} ! \begin{funcdesc}{prcal}{year} ! Prints the calendar for the year \var{year}. \end{funcdesc} --- 55,84 ---- Returns a matrix representing a month's calendar. Each row represents a week; days outside of the month a represented by zeros. + Each week begins with Monday unless set by \function{setfirstweekday()}. + \end{funcdesc} + + \begin{funcdesc}{prmonth}{theyear, themonth\optional{, w\optional{, l}}} + Prints a month's calendar as returned by \function{month()}. + \end{funcdesc} + + \begin{funcdesc}{month}{theyear, themonth\optional{, w\optional{, l}}} + Returns a month's calendar in a multi-line string. If \var{w} is + provided, it specifies the width of the date columns, which are + centered. If \var{l} is given, it specifies the number of lines that + each week will use. Depends on the first weekday as set by + \function{setfirstweekday()}. \end{funcdesc} ! \begin{funcdesc}{prcal}{year\optional{, w\optional{, l\optional{c}}}} ! Prints the calendar for an entire year as returned by ! \function{calendar()}. \end{funcdesc} ! \begin{funcdesc}{calendar}{year\optional{, w\optional{, l\optional{c}}}} ! Returns a 3-column calendar for an entire year as a multi-line string. ! Optional parameters \var{w}, \var{l}, and \var{c} are for date column ! width, lines per week, and number of spaces between month columns, ! respectively. Depends on the first weekday as set by ! \function{setfirstweekday()}. \end{funcdesc} From python-dev@python.org Wed Aug 30 15:33:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 07:33:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/mac libmacui.tex,1.14,1.15 Message-ID: <200008301433.HAA23524@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/mac In directory slayer.i.sourceforge.net:/tmp/cvs-serv23471/mac Modified Files: libmacui.tex Log Message: Remove the reference to stdwin. The comment was still true, but no longer meaningful to a new user, since stdwin is long gone. Index: libmacui.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/mac/libmacui.tex,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** libmacui.tex 1999/03/02 16:36:37 1.14 --- libmacui.tex 2000/08/30 14:33:02 1.15 *************** *** 8,17 **** The \module{EasyDialogs} module contains some simple dialogs for ! the Macintosh, modelled after the ! \module{stdwin}\refbimodindex{stdwin} dialogs with similar names. All ! routines have an optional parameter \var{id} with which you can ! override the DLOG resource used for the dialog, as long as the item ! numbers correspond. See the source for details. ! The \module{EasyDialogs} module defines the following functions: --- 8,15 ---- The \module{EasyDialogs} module contains some simple dialogs for ! the Macintosh. All routines have an optional parameter \var{id} with ! which you can override the DLOG resource used for the dialog, as long ! as the item numbers correspond. See the source for details. ! The \module{EasyDialogs} module defines the following functions: From python-dev@python.org Wed Aug 30 16:02:16 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 08:02:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html style.css,1.6,1.7 Message-ID: <200008301502.IAA16289@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv16224/html Modified Files: style.css Log Message: Push a little more here to avoid style information in the generation scripts as much as possible. Index: style.css =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/style.css,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** style.css 2000/08/29 21:57:34 1.6 --- style.css 2000/08/30 15:02:13 1.7 *************** *** 52,55 **** --- 52,58 ---- .file { font-family: avantgarde, sans-serif } + .tableheader td { background-color: #99ccff; } + .tableheader th { background-color: #99ccff; } + .refcount-info { font-style: italic } .refcount-info .value { font-weight: bold; From python-dev@python.org Wed Aug 30 16:53:53 2000 From: python-dev@python.org (Guido van Rossum) Date: Wed, 30 Aug 2000 08:53:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects object.c,2.97,2.98 Message-ID: <200008301553.IAA07925@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv7811 Modified Files: object.c Log Message: PyOS_CheckStack() returns 1 when failing, not -1. Index: object.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v retrieving revision 2.97 retrieving revision 2.98 diff -C2 -r2.97 -r2.98 *** object.c 2000/08/22 21:52:51 2.97 --- object.c 2000/08/30 15:53:50 2.98 *************** *** 403,407 **** #if defined(USE_STACKCHECK) ! if (PyOS_CheckStack() < 0) { PyErr_SetString(PyExc_MemoryError, "Stack overflow"); return -1; --- 403,407 ---- #if defined(USE_STACKCHECK) ! if (PyOS_CheckStack()) { PyErr_SetString(PyExc_MemoryError, "Stack overflow"); return -1; From python-dev@python.org Wed Aug 30 18:16:30 2000 From: python-dev@python.org (Greg Ward) Date: Wed, 30 Aug 2000 10:16:30 -0700 Subject: [Python-checkins] CVS: distutils/distutils fancy_getopt.py,1.15,1.16 Message-ID: <200008301716.KAA01474@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv1435 Modified Files: fancy_getopt.py Log Message: Added docstring for 'wrap()' function. Index: fancy_getopt.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/fancy_getopt.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** fancy_getopt.py 2000/08/07 00:45:51 1.15 --- fancy_getopt.py 2000/08/30 17:16:27 1.16 *************** *** 413,416 **** --- 413,421 ---- def wrap_text (text, width): + """wrap_text(text : string, width : int) -> [string] + + Split 'text' into multiple lines of no more than 'width' characters + each, and return the list of strings that results. + """ if text is None: From python-dev@python.org Wed Aug 30 18:32:27 2000 From: python-dev@python.org (Greg Ward) Date: Wed, 30 Aug 2000 10:32:27 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.38,1.39 Message-ID: <200008301732.KAA06764@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv6731 Modified Files: msvccompiler.py Log Message: Add ".cxx" to the list of known C++ extensions. Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -r1.38 -r1.39 *** msvccompiler.py 2000/08/04 01:29:27 1.38 --- msvccompiler.py 2000/08/30 17:32:24 1.39 *************** *** 178,182 **** # Private class data (need to distinguish C from C++ source for compiler) _c_extensions = ['.c'] ! _cpp_extensions = ['.cc','.cpp'] # Needed for the filename generation methods provided by the --- 178,182 ---- # Private class data (need to distinguish C from C++ source for compiler) _c_extensions = ['.c'] ! _cpp_extensions = ['.cc', '.cpp', '.cxx'] # Needed for the filename generation methods provided by the From python-dev@python.org Wed Aug 30 21:25:05 2000 From: python-dev@python.org (Paul Prescod) Date: Wed, 30 Aug 2000 13:25:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.198,2.199 Message-ID: <200008302025.NAA18460@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv17839 Modified Files: ceval.c Log Message: Better error message with UnboundLocalError Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.198 retrieving revision 2.199 diff -C2 -r2.198 -r2.199 *** ceval.c 2000/08/29 04:56:13 2.198 --- ceval.c 2000/08/30 20:25:01 2.199 *************** *** 74,78 **** --- 74,83 ---- static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *); static void reset_exc_info(PyThreadState *); + static void format_exc_check_arg(PyObject *, char *, PyObject *); + #define NAME_ERROR_MSG \ + "There is no variable named '%s'" + #define UNBOUNDLOCAL_ERROR_MSG \ + "Local variable '%.200s' referenced before assignment" /* Dynamic execution profile */ *************** *** 1397,1401 **** } if ((err = PyDict_DelItem(x, w)) != 0) ! PyErr_SetObject(PyExc_NameError, w); break; --- 1402,1407 ---- } if ((err = PyDict_DelItem(x, w)) != 0) ! format_exc_check_arg(PyExc_NameError, ! NAME_ERROR_MSG ,w); break; *************** *** 1472,1476 **** w = GETNAMEV(oparg); if ((err = PyDict_DelItem(f->f_globals, w)) != 0) ! PyErr_SetObject(PyExc_NameError, w); break; --- 1478,1483 ---- w = GETNAMEV(oparg); if ((err = PyDict_DelItem(f->f_globals, w)) != 0) ! format_exc_check_arg( ! PyExc_NameError, NAME_ERROR_MSG ,w); break; *************** *** 1494,1499 **** x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! PyErr_SetObject( ! PyExc_NameError, w); break; } --- 1501,1507 ---- x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! format_exc_check_arg( ! PyExc_NameError, ! NAME_ERROR_MSG ,w); break; } *************** *** 1510,1514 **** x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! PyErr_SetObject(PyExc_NameError, w); break; } --- 1518,1524 ---- x = PyDict_GetItem(f->f_builtins, w); if (x == NULL) { ! format_exc_check_arg( ! PyExc_NameError, ! NAME_ERROR_MSG ,w); break; } *************** *** 1521,1527 **** x = GETLOCAL(oparg); if (x == NULL) { ! PyErr_SetObject(PyExc_UnboundLocalError, ! PyTuple_GetItem(co->co_varnames, ! oparg)); break; } --- 1531,1539 ---- x = GETLOCAL(oparg); if (x == NULL) { ! format_exc_check_arg( ! PyExc_UnboundLocalError, ! UNBOUNDLOCAL_ERROR_MSG, ! PyTuple_GetItem(co->co_varnames, oparg) ! ); break; } *************** *** 1539,1545 **** x = GETLOCAL(oparg); if (x == NULL) { ! PyErr_SetObject(PyExc_UnboundLocalError, ! PyTuple_GetItem(co->co_varnames, ! oparg)); break; } --- 1551,1559 ---- x = GETLOCAL(oparg); if (x == NULL) { ! format_exc_check_arg( ! PyExc_UnboundLocalError, ! UNBOUNDLOCAL_ERROR_MSG, ! PyTuple_GetItem(co->co_varnames, oparg) ! ); break; } *************** *** 3064,3067 **** --- 3078,3095 ---- } + static void + format_exc_check_arg(PyObject *exc, char *format_str, PyObject *obj) + { + char *obj_str; + + if (!obj) + return; + + obj_str = PyString_AsString(obj); + if (!obj_str) + return; + + PyErr_Format(exc, format_str, obj_str); + } #ifdef DYNAMIC_EXECUTION_PROFILE From python-dev@python.org Wed Aug 30 23:29:51 2000 From: python-dev@python.org (Skip Montanaro) Date: Wed, 30 Aug 2000 15:29:51 -0700 Subject: [Python-checkins] CVS: python/dist/src acconfig.h,1.35,1.36 config.h.in,2.69,2.70 configure,1.139,1.140 configure.in,1.150,1.151 Message-ID: <200008302229.PAA23195@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv22625 Modified Files: acconfig.h config.h.in configure configure.in Log Message: adds support for --with-pydebug configure option Index: acconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/acconfig.h,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** acconfig.h 2000/08/23 21:33:04 1.35 --- acconfig.h 2000/08/30 22:29:47 1.36 *************** *** 152,155 **** --- 152,158 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to build an interpreter with many run-time checks */ + #undef Py_DEBUG + /* The number of bytes in an off_t. */ #undef SIZEOF_OFF_T Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.69 retrieving revision 2.70 diff -C2 -r2.69 -r2.70 *** config.h.in 2000/08/25 01:14:08 2.69 --- config.h.in 2000/08/30 22:29:47 2.70 *************** *** 211,214 **** --- 211,217 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to build an interpreter with many run-time checks */ + #undef Py_DEBUG + /* The number of bytes in an off_t. */ #undef SIZEOF_OFF_T *************** *** 267,273 **** #undef SIZEOF_VOID_P - /* Define if you have the _getpty function. */ - #undef HAVE__GETPTY - /* Define if you have the alarm function. */ #undef HAVE_ALARM --- 270,273 ---- *************** *** 356,359 **** --- 356,362 ---- /* Define if you have the getpid function. */ #undef HAVE_GETPID + + /* Define if you have the _getpty function. */ + #undef HAVE__GETPTY /* Define if you have the getpwent function. */ Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.139 retrieving revision 1.140 diff -C2 -r1.139 -r1.140 *** configure 2000/08/29 15:06:47 1.139 --- configure 2000/08/30 22:29:47 1.140 *************** *** 4,8 **** # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # --- 4,8 ---- # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.14.1 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. [...4611 lines suppressed...] ! echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) --- 5952,5956 ---- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ! echo "$CONFIG_STATUS generated by autoconf version 2.14.1" exit 0 ;; -help | --help | --hel | --he | --h) *************** *** 6207,6210 **** chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 --- 6253,6256 ---- chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.150 retrieving revision 1.151 diff -C2 -r1.150 -r1.151 *** configure.in 2000/08/29 15:06:49 1.150 --- configure.in 2000/08/30 22:29:48 1.151 *************** *** 659,662 **** --- 659,672 ---- AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX + # Check for --with-pydebug + AC_MSG_CHECKING(for --with-pydebug) + AC_ARG_WITH(pydebug, + [ --with-pydebug build with Py_DEBUG defined], [ + if test "$withval" != no + then AC_DEFINE(Py_DEBUG) AC_MSG_RESULT(yes) + else AC_MSG_RESULT(no) + fi], + [AC_MSG_RESULT(no)]) + # checks for system dependent C++ extensions support case "$ac_sys_system" in From python-dev@python.org Thu Aug 31 01:31:10 2000 From: python-dev@python.org (Greg Ward) Date: Wed, 30 Aug 2000 17:31:10 -0700 Subject: [Python-checkins] CVS: distutils/distutils msvccompiler.py,1.39,1.40 Message-ID: <200008310031.RAA20053@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/distutils In directory slayer.i.sourceforge.net:/tmp/cvs-serv19958 Modified Files: msvccompiler.py Log Message: Add /GX to 'compile_options'. This is definitely needed for C++ source; according to the MS docs it enables exception-handling, and (according to Alex Martelli ) is needed to compile without getting warnings from standard C++ library headers. Apparently it doesn't cause any problems with C code, so I haven't bothered conditionalizing the use of /GX. Index: msvccompiler.py =================================================================== RCS file: /cvsroot/python/distutils/distutils/msvccompiler.py,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** msvccompiler.py 2000/08/30 17:32:24 1.39 --- msvccompiler.py 2000/08/31 00:31:07 1.40 *************** *** 220,225 **** self.preprocess_options = None ! self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3' ] ! self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/Z7', '/D_DEBUG'] self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] --- 220,226 ---- self.preprocess_options = None ! self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ] ! self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX', ! '/Z7', '/D_DEBUG'] self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] From python-dev@python.org Thu Aug 31 03:35:53 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:35:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd4 - New directory Message-ID: <200008310235.TAA23597@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd4 In directory slayer.i.sourceforge.net:/tmp/cvs-serv23517/Lib/plat-freebsd4 Log Message: Directory /cvsroot/python/python/dist/src/Lib/plat-freebsd4 added to the repository From python-dev@python.org Thu Aug 31 03:35:53 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:35:53 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd5 - New directory Message-ID: <200008310235.TAA23600@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd5 In directory slayer.i.sourceforge.net:/tmp/cvs-serv23517/Lib/plat-freebsd5 Log Message: Directory /cvsroot/python/python/dist/src/Lib/plat-freebsd5 added to the repository From python-dev@python.org Thu Aug 31 03:42:16 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:42:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd4 FCNTL.py,NONE,1.1 IN.py,NONE,1.1 SOCKET.py,NONE,1.1 TERMIOS.py,NONE,1.1 regen,NONE,1.1 Message-ID: <200008310242.TAA27355@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd4 In directory slayer.i.sourceforge.net:/tmp/cvs-serv26872/Lib/plat-freebsd4 Added Files: FCNTL.py IN.py SOCKET.py TERMIOS.py regen Log Message: tg@freebsd.org close SF patch #101354 --- NEW FILE --- # Generated by h2py from /usr/include/fcntl.h # Included from sys/types.h # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/inttypes.h # Included from machine/ansi.h _BSD_CLOCKID_T_ = int _BSD_PTRDIFF_T_ = int _BSD_SSIZE_T_ = int _BSD_TIME_T_ = long _BSD_TIMER_T_ = int _BSD_CT_RUNE_T_ = int _BSD_PID_T_ = int _BSD_CLK_TCK_ = 128 _BSD_CLOCKS_PER_SEC_ = 128 # Included from machine/types.h def major(x): return ((int)(((u_int)(x) >> 8)&0xff)) def minor(x): return ((int)((x)&0xffff00ff)) # Included from machine/endian.h _QUAD_HIGHWORD = 1 _QUAD_LOWWORD = 0 LITTLE_ENDIAN = 1234 BIG_ENDIAN = 4321 PDP_ENDIAN = 3412 BYTE_ORDER = LITTLE_ENDIAN def __word_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_word(x): return \ ntohl = __byte_swap_long ntohs = __byte_swap_word htonl = __byte_swap_long htons = __byte_swap_word NBBY = 8 FD_SETSIZE = 1024 O_RDONLY = 0x0000 O_WRONLY = 0x0001 O_RDWR = 0x0002 O_ACCMODE = 0x0003 FREAD = 0x0001 FWRITE = 0x0002 O_NONBLOCK = 0x0004 O_APPEND = 0x0008 O_SHLOCK = 0x0010 O_EXLOCK = 0x0020 O_ASYNC = 0x0040 O_FSYNC = 0x0080 O_NOFOLLOW = 0x0100 O_CREAT = 0x0200 O_TRUNC = 0x0400 O_EXCL = 0x0800 FMARK = 0x1000 FDEFER = 0x2000 FHASLOCK = 0x4000 O_NOCTTY = 0x8000 def FFLAGS(oflags): return ((oflags) + 1) def OFLAGS(fflags): return ((fflags) - 1) FAPPEND = O_APPEND FASYNC = O_ASYNC FFSYNC = O_FSYNC FNONBLOCK = O_NONBLOCK FNDELAY = O_NONBLOCK O_NDELAY = O_NONBLOCK F_DUPFD = 0 F_GETFD = 1 F_SETFD = 2 F_GETFL = 3 F_SETFL = 4 F_GETOWN = 5 F_SETOWN = 6 F_GETLK = 7 F_SETLK = 8 F_SETLKW = 9 FD_CLOEXEC = 1 F_RDLCK = 1 F_UNLCK = 2 F_WRLCK = 3 F_WAIT = 0x010 F_FLOCK = 0x020 F_POSIX = 0x040 LOCK_SH = 0x01 LOCK_EX = 0x02 LOCK_NB = 0x04 LOCK_UN = 0x08 --- NEW FILE --- # Generated by h2py from /usr/include/netinet/in.h IPPROTO_IP = 0 IPPROTO_HOPOPTS = 0 IPPROTO_ICMP = 1 IPPROTO_IGMP = 2 IPPROTO_GGP = 3 IPPROTO_IPV4 = 4 IPPROTO_IPIP = IPPROTO_IPV4 IPPROTO_TCP = 6 IPPROTO_ST = 7 IPPROTO_EGP = 8 IPPROTO_PIGP = 9 IPPROTO_RCCMON = 10 IPPROTO_NVPII = 11 IPPROTO_PUP = 12 IPPROTO_ARGUS = 13 IPPROTO_EMCON = 14 IPPROTO_XNET = 15 IPPROTO_CHAOS = 16 IPPROTO_UDP = 17 IPPROTO_MUX = 18 IPPROTO_MEAS = 19 IPPROTO_HMP = 20 IPPROTO_PRM = 21 IPPROTO_IDP = 22 IPPROTO_TRUNK1 = 23 IPPROTO_TRUNK2 = 24 IPPROTO_LEAF1 = 25 IPPROTO_LEAF2 = 26 IPPROTO_RDP = 27 IPPROTO_IRTP = 28 IPPROTO_TP = 29 IPPROTO_BLT = 30 IPPROTO_NSP = 31 IPPROTO_INP = 32 IPPROTO_SEP = 33 IPPROTO_3PC = 34 IPPROTO_IDPR = 35 IPPROTO_XTP = 36 IPPROTO_DDP = 37 IPPROTO_CMTP = 38 IPPROTO_TPXX = 39 IPPROTO_IL = 40 IPPROTO_IPV6 = 41 IPPROTO_SDRP = 42 IPPROTO_ROUTING = 43 IPPROTO_FRAGMENT = 44 IPPROTO_IDRP = 45 IPPROTO_RSVP = 46 IPPROTO_GRE = 47 IPPROTO_MHRP = 48 IPPROTO_BHA = 49 IPPROTO_ESP = 50 IPPROTO_AH = 51 IPPROTO_INLSP = 52 IPPROTO_SWIPE = 53 IPPROTO_NHRP = 54 IPPROTO_ICMPV6 = 58 IPPROTO_NONE = 59 IPPROTO_DSTOPTS = 60 IPPROTO_AHIP = 61 IPPROTO_CFTP = 62 IPPROTO_HELLO = 63 IPPROTO_SATEXPAK = 64 IPPROTO_KRYPTOLAN = 65 IPPROTO_RVD = 66 IPPROTO_IPPC = 67 IPPROTO_ADFS = 68 IPPROTO_SATMON = 69 IPPROTO_VISA = 70 IPPROTO_IPCV = 71 IPPROTO_CPNX = 72 IPPROTO_CPHB = 73 IPPROTO_WSN = 74 IPPROTO_PVP = 75 IPPROTO_BRSATMON = 76 IPPROTO_ND = 77 IPPROTO_WBMON = 78 IPPROTO_WBEXPAK = 79 IPPROTO_EON = 80 IPPROTO_VMTP = 81 IPPROTO_SVMTP = 82 IPPROTO_VINES = 83 IPPROTO_TTP = 84 IPPROTO_IGP = 85 IPPROTO_DGP = 86 IPPROTO_TCF = 87 IPPROTO_IGRP = 88 IPPROTO_OSPFIGP = 89 IPPROTO_SRPC = 90 IPPROTO_LARP = 91 IPPROTO_MTP = 92 IPPROTO_AX25 = 93 IPPROTO_IPEIP = 94 IPPROTO_MICP = 95 IPPROTO_SCCSP = 96 IPPROTO_ETHERIP = 97 IPPROTO_ENCAP = 98 IPPROTO_APES = 99 IPPROTO_GMTP = 100 IPPROTO_IPCOMP = 108 IPPROTO_PIM = 103 IPPROTO_PGM = 113 IPPROTO_DIVERT = 254 IPPROTO_RAW = 255 IPPROTO_MAX = 256 IPPROTO_DONE = 257 IPPORT_RESERVED = 1024 IPPORT_USERRESERVED = 5000 IPPORT_HIFIRSTAUTO = 49152 IPPORT_HILASTAUTO = 65535 IPPORT_RESERVEDSTART = 600 def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) IN_CLASSA_NET = 0xff000000 IN_CLASSA_NSHIFT = 24 IN_CLASSA_HOST = 0x00ffffff IN_CLASSA_MAX = 128 def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) IN_CLASSB_NET = 0xffff0000 IN_CLASSB_NSHIFT = 16 IN_CLASSB_HOST = 0x0000ffff IN_CLASSB_MAX = 65536 def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) IN_CLASSC_NET = 0xffffff00 IN_CLASSC_NSHIFT = 8 IN_CLASSC_HOST = 0x000000ff def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) IN_CLASSD_NET = 0xf0000000 IN_CLASSD_NSHIFT = 28 IN_CLASSD_HOST = 0x0fffffff def IN_MULTICAST(i): return IN_CLASSD(i) def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) INADDR_NONE = 0xffffffff IN_LOOPBACKNET = 127 INET_ADDRSTRLEN = 16 IP_OPTIONS = 1 IP_HDRINCL = 2 IP_TOS = 3 IP_TTL = 4 IP_RECVOPTS = 5 IP_RECVRETOPTS = 6 IP_RECVDSTADDR = 7 IP_RETOPTS = 8 IP_MULTICAST_IF = 9 IP_MULTICAST_TTL = 10 IP_MULTICAST_LOOP = 11 IP_ADD_MEMBERSHIP = 12 IP_DROP_MEMBERSHIP = 13 IP_MULTICAST_VIF = 14 IP_RSVP_ON = 15 IP_RSVP_OFF = 16 IP_RSVP_VIF_ON = 17 IP_RSVP_VIF_OFF = 18 IP_PORTRANGE = 19 IP_RECVIF = 20 IP_IPSEC_POLICY = 21 IP_FAITH = 22 IP_FW_ADD = 50 IP_FW_DEL = 51 IP_FW_FLUSH = 52 IP_FW_ZERO = 53 IP_FW_GET = 54 IP_FW_RESETLOG = 55 IP_DUMMYNET_CONFIGURE = 60 IP_DUMMYNET_DEL = 61 IP_DUMMYNET_FLUSH = 62 IP_DUMMYNET_GET = 64 IP_DEFAULT_MULTICAST_TTL = 1 IP_DEFAULT_MULTICAST_LOOP = 1 IP_MAX_MEMBERSHIPS = 20 IP_PORTRANGE_DEFAULT = 0 IP_PORTRANGE_HIGH = 1 IP_PORTRANGE_LOW = 2 IPPROTO_MAXID = (IPPROTO_AH + 1) IPCTL_FORWARDING = 1 IPCTL_SENDREDIRECTS = 2 IPCTL_DEFTTL = 3 IPCTL_DEFMTU = 4 IPCTL_RTEXPIRE = 5 IPCTL_RTMINEXPIRE = 6 IPCTL_RTMAXCACHE = 7 IPCTL_SOURCEROUTE = 8 IPCTL_DIRECTEDBROADCAST = 9 IPCTL_INTRQMAXLEN = 10 IPCTL_INTRQDROPS = 11 IPCTL_STATS = 12 IPCTL_ACCEPTSOURCEROUTE = 13 IPCTL_FASTFORWARDING = 14 IPCTL_KEEPFAITH = 15 IPCTL_GIF_TTL = 16 IPCTL_MAXID = 17 # Included from netinet6/in6.h # Included from sys/queue.h def SLIST_HEAD_INITIALIZER(head): return \ def SLIST_ENTRY(type): return \ def STAILQ_HEAD_INITIALIZER(head): return \ def STAILQ_ENTRY(type): return \ def LIST_HEAD_INITIALIZER(head): return \ def LIST_ENTRY(type): return \ def TAILQ_HEAD_INITIALIZER(head): return \ def TAILQ_ENTRY(type): return \ def CIRCLEQ_ENTRY(type): return \ __KAME_VERSION = "20000701/FreeBSD-current" IPV6PORT_RESERVED = 1024 IPV6PORT_ANONMIN = 49152 IPV6PORT_ANONMAX = 65535 IPV6PORT_RESERVEDMIN = 600 IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) INET6_ADDRSTRLEN = 46 IPV6_ADDR_INT32_ONE = 1 IPV6_ADDR_INT32_TWO = 2 IPV6_ADDR_INT32_MNL = 0xff010000 IPV6_ADDR_INT32_MLL = 0xff020000 IPV6_ADDR_INT32_SMP = 0x0000ffff IPV6_ADDR_INT16_ULL = 0xfe80 IPV6_ADDR_INT16_USL = 0xfec0 IPV6_ADDR_INT16_MLL = 0xff02 IPV6_ADDR_INT32_ONE = 0x01000000 IPV6_ADDR_INT32_TWO = 0x02000000 IPV6_ADDR_INT32_MNL = 0x000001ff IPV6_ADDR_INT32_MLL = 0x000002ff IPV6_ADDR_INT32_SMP = 0xffff0000 IPV6_ADDR_INT16_ULL = 0x80fe IPV6_ADDR_INT16_USL = 0xc0fe IPV6_ADDR_INT16_MLL = 0x02ff def IN6_IS_ADDR_UNSPECIFIED(a): return \ def IN6_IS_ADDR_LOOPBACK(a): return \ def IN6_IS_ADDR_V4COMPAT(a): return \ def IN6_IS_ADDR_V4MAPPED(a): return \ IPV6_ADDR_SCOPE_NODELOCAL = 0x01 IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 IPV6_ADDR_SCOPE_SITELOCAL = 0x05 IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 IPV6_ADDR_SCOPE_GLOBAL = 0x0e __IPV6_ADDR_SCOPE_NODELOCAL = 0x01 __IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 __IPV6_ADDR_SCOPE_SITELOCAL = 0x05 __IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 __IPV6_ADDR_SCOPE_GLOBAL = 0x0e def IN6_IS_ADDR_LINKLOCAL(a): return \ def IN6_IS_ADDR_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_SCOPE_LINKLOCAL(a): return \ IPV6_OPTIONS = 1 IPV6_RECVOPTS = 5 IPV6_RECVRETOPTS = 6 IPV6_RECVDSTADDR = 7 IPV6_RETOPTS = 8 IPV6_SOCKOPT_RESERVED1 = 3 IPV6_UNICAST_HOPS = 4 IPV6_MULTICAST_IF = 9 IPV6_MULTICAST_HOPS = 10 IPV6_MULTICAST_LOOP = 11 IPV6_JOIN_GROUP = 12 IPV6_LEAVE_GROUP = 13 IPV6_PORTRANGE = 14 ICMP6_FILTER = 18 IPV6_PKTINFO = 19 IPV6_HOPLIMIT = 20 IPV6_NEXTHOP = 21 IPV6_HOPOPTS = 22 IPV6_DSTOPTS = 23 IPV6_RTHDR = 24 IPV6_PKTOPTIONS = 25 IPV6_CHECKSUM = 26 IPV6_BINDV6ONLY = 27 IPV6_IPSEC_POLICY = 28 IPV6_FAITH = 29 IPV6_FW_ADD = 30 IPV6_FW_DEL = 31 IPV6_FW_FLUSH = 32 IPV6_FW_ZERO = 33 IPV6_FW_GET = 34 IPV6_RTHDR_LOOSE = 0 IPV6_RTHDR_STRICT = 1 IPV6_RTHDR_TYPE_0 = 0 IPV6_DEFAULT_MULTICAST_HOPS = 1 IPV6_DEFAULT_MULTICAST_LOOP = 1 IPV6_PORTRANGE_DEFAULT = 0 IPV6_PORTRANGE_HIGH = 1 IPV6_PORTRANGE_LOW = 2 IPV6PROTO_MAXID = (IPPROTO_PIM + 1) IPV6CTL_FORWARDING = 1 IPV6CTL_SENDREDIRECTS = 2 IPV6CTL_DEFHLIM = 3 IPV6CTL_DEFMTU = 4 IPV6CTL_FORWSRCRT = 5 IPV6CTL_STATS = 6 IPV6CTL_MRTSTATS = 7 IPV6CTL_MRTPROTO = 8 IPV6CTL_MAXFRAGPACKETS = 9 IPV6CTL_SOURCECHECK = 10 IPV6CTL_SOURCECHECK_LOGINT = 11 IPV6CTL_ACCEPT_RTADV = 12 IPV6CTL_KEEPFAITH = 13 IPV6CTL_LOG_INTERVAL = 14 IPV6CTL_HDRNESTLIMIT = 15 IPV6CTL_DAD_COUNT = 16 IPV6CTL_AUTO_FLOWLABEL = 17 IPV6CTL_DEFMCASTHLIM = 18 IPV6CTL_GIF_HLIM = 19 IPV6CTL_KAME_VERSION = 20 IPV6CTL_USE_DEPRECATED = 21 IPV6CTL_RR_PRUNE = 22 IPV6CTL_MAPPED_ADDR = 23 IPV6CTL_BINDV6ONLY = 24 IPV6CTL_RTEXPIRE = 25 IPV6CTL_RTMINEXPIRE = 26 IPV6CTL_RTMAXCACHE = 27 IPV6CTL_MAXID = 28 --- NEW FILE --- # Generated by h2py from /usr/include/sys/socket.h SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 SO_DEBUG = 0x0001 SO_ACCEPTCONN = 0x0002 SO_REUSEADDR = 0x0004 SO_KEEPALIVE = 0x0008 SO_DONTROUTE = 0x0010 SO_BROADCAST = 0x0020 SO_USELOOPBACK = 0x0040 SO_LINGER = 0x0080 SO_OOBINLINE = 0x0100 SO_REUSEPORT = 0x0200 SO_TIMESTAMP = 0x0400 SO_ACCEPTFILTER = 0x1000 SO_SNDBUF = 0x1001 SO_RCVBUF = 0x1002 SO_SNDLOWAT = 0x1003 SO_RCVLOWAT = 0x1004 SO_SNDTIMEO = 0x1005 SO_RCVTIMEO = 0x1006 SO_ERROR = 0x1007 SO_TYPE = 0x1008 SOL_SOCKET = 0xffff AF_UNSPEC = 0 AF_LOCAL = 1 AF_UNIX = AF_LOCAL AF_INET = 2 AF_IMPLINK = 3 AF_PUP = 4 AF_CHAOS = 5 AF_NS = 6 AF_ISO = 7 AF_OSI = AF_ISO AF_ECMA = 8 AF_DATAKIT = 9 AF_CCITT = 10 AF_SNA = 11 AF_DECnet = 12 AF_DLI = 13 AF_LAT = 14 AF_HYLINK = 15 AF_APPLETALK = 16 AF_ROUTE = 17 AF_LINK = 18 pseudo_AF_XTP = 19 AF_COIP = 20 AF_CNT = 21 pseudo_AF_RTIP = 22 AF_IPX = 23 AF_SIP = 24 pseudo_AF_PIP = 25 AF_ISDN = 26 AF_E164 = AF_ISDN pseudo_AF_KEY = 27 AF_INET6 = 28 AF_NATM = 29 AF_ATM = 30 pseudo_AF_HDRCMPLT = 31 AF_NETGRAPH = 32 AF_MAX = 33 SOCK_MAXADDRLEN = 255 _SS_MAXSIZE = 128 PF_UNSPEC = AF_UNSPEC PF_LOCAL = AF_LOCAL PF_UNIX = PF_LOCAL PF_INET = AF_INET PF_IMPLINK = AF_IMPLINK PF_PUP = AF_PUP PF_CHAOS = AF_CHAOS PF_NS = AF_NS PF_ISO = AF_ISO PF_OSI = AF_ISO PF_ECMA = AF_ECMA PF_DATAKIT = AF_DATAKIT PF_CCITT = AF_CCITT PF_SNA = AF_SNA PF_DECnet = AF_DECnet PF_DLI = AF_DLI PF_LAT = AF_LAT PF_HYLINK = AF_HYLINK PF_APPLETALK = AF_APPLETALK PF_ROUTE = AF_ROUTE PF_LINK = AF_LINK PF_XTP = pseudo_AF_XTP PF_COIP = AF_COIP PF_CNT = AF_CNT PF_SIP = AF_SIP PF_IPX = AF_IPX PF_RTIP = pseudo_AF_RTIP PF_PIP = pseudo_AF_PIP PF_ISDN = AF_ISDN PF_KEY = pseudo_AF_KEY PF_INET6 = AF_INET6 PF_NATM = AF_NATM PF_ATM = AF_ATM PF_NETGRAPH = AF_NETGRAPH PF_MAX = AF_MAX NET_MAXID = AF_MAX NET_RT_DUMP = 1 NET_RT_FLAGS = 2 NET_RT_IFLIST = 3 NET_RT_MAXID = 4 SOMAXCONN = 128 MSG_OOB = 0x1 MSG_PEEK = 0x2 MSG_DONTROUTE = 0x4 MSG_EOR = 0x8 MSG_TRUNC = 0x10 MSG_CTRUNC = 0x20 MSG_WAITALL = 0x40 MSG_DONTWAIT = 0x80 MSG_EOF = 0x100 MSG_COMPAT = 0x8000 CMGROUP_MAX = 16 SCM_RIGHTS = 0x01 SCM_TIMESTAMP = 0x02 SCM_CREDS = 0x03 SHUT_RD = 0 SHUT_WR = 1 SHUT_RDWR = 2 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) --- NEW FILE --- # Generated by h2py from /usr/include/termios.h VEOF = 0 VEOL = 1 VEOL2 = 2 VERASE = 3 VWERASE = 4 VKILL = 5 VREPRINT = 6 VINTR = 8 VQUIT = 9 VSUSP = 10 VDSUSP = 11 VSTART = 12 VSTOP = 13 VLNEXT = 14 VDISCARD = 15 VMIN = 16 VTIME = 17 VSTATUS = 18 NCCS = 20 _POSIX_VDISABLE = 0xff IGNBRK = 0x00000001 BRKINT = 0x00000002 IGNPAR = 0x00000004 PARMRK = 0x00000008 INPCK = 0x00000010 ISTRIP = 0x00000020 INLCR = 0x00000040 IGNCR = 0x00000080 ICRNL = 0x00000100 IXON = 0x00000200 IXOFF = 0x00000400 IXANY = 0x00000800 IMAXBEL = 0x00002000 OPOST = 0x00000001 ONLCR = 0x00000002 OXTABS = 0x00000004 ONOEOT = 0x00000008 CIGNORE = 0x00000001 CSIZE = 0x00000300 CS5 = 0x00000000 CS6 = 0x00000100 CS7 = 0x00000200 CS8 = 0x00000300 CSTOPB = 0x00000400 CREAD = 0x00000800 PARENB = 0x00001000 PARODD = 0x00002000 HUPCL = 0x00004000 CLOCAL = 0x00008000 CCTS_OFLOW = 0x00010000 CRTS_IFLOW = 0x00020000 CDTR_IFLOW = 0x00040000 CDSR_OFLOW = 0x00080000 CCAR_OFLOW = 0x00100000 MDMBUF = 0x00100000 ECHOKE = 0x00000001 ECHOE = 0x00000002 ECHOK = 0x00000004 ECHO = 0x00000008 ECHONL = 0x00000010 ECHOPRT = 0x00000020 ECHOCTL = 0x00000040 ISIG = 0x00000080 ICANON = 0x00000100 ALTWERASE = 0x00000200 IEXTEN = 0x00000400 EXTPROC = 0x00000800 TOSTOP = 0x00400000 FLUSHO = 0x00800000 NOKERNINFO = 0x02000000 PENDIN = 0x20000000 NOFLSH = 0x80000000 TCSANOW = 0 TCSADRAIN = 1 TCSAFLUSH = 2 TCSASOFT = 0x10 B0 = 0 B50 = 50 B75 = 75 B110 = 110 B134 = 134 B150 = 150 B200 = 200 B300 = 300 B600 = 600 B1200 = 1200 B1800 = 1800 B2400 = 2400 B4800 = 4800 B9600 = 9600 B19200 = 19200 B38400 = 38400 B7200 = 7200 B14400 = 14400 B28800 = 28800 B57600 = 57600 B76800 = 76800 B115200 = 115200 B230400 = 230400 EXTA = 19200 EXTB = 38400 TCIFLUSH = 1 TCOFLUSH = 2 TCIOFLUSH = 3 TCOOFF = 1 TCOON = 2 TCIOFF = 3 TCION = 4 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/ttycom.h # Included from sys/ioccom.h IOCPARM_MASK = 0x1fff def IOCPARM_LEN(x): return (((x) >> 16) & IOCPARM_MASK) def IOCBASECMD(x): return ((x) & ~(IOCPARM_MASK << 16)) def IOCGROUP(x): return (((x) >> 8) & 0xff) IOC_VOID = 0x20000000 IOC_OUT = 0x40000000 IOC_IN = 0x80000000 IOC_INOUT = (IOC_IN|IOC_OUT) IOC_DIRMASK = 0xe0000000 TIOCM_LE = 0001 TIOCM_DTR = 0002 TIOCM_RTS = 0004 TIOCM_ST = 0010 TIOCM_SR = 0020 TIOCM_CTS = 0040 TIOCM_CAR = 0100 TIOCM_CD = TIOCM_CAR TIOCM_RNG = 0200 TIOCM_RI = TIOCM_RNG TIOCM_DSR = 0400 TIOCPKT_DATA = 0x00 TIOCPKT_FLUSHREAD = 0x01 TIOCPKT_FLUSHWRITE = 0x02 TIOCPKT_STOP = 0x04 TIOCPKT_START = 0x08 TIOCPKT_NOSTOP = 0x10 TIOCPKT_DOSTOP = 0x20 TIOCPKT_IOCTL = 0x40 def UIOCCMD(n): return _IO(ord('u'), n) TTYDISC = 0 SLIPDISC = 4 PPPDISC = 5 NETGRAPHDISC = 6 # Included from sys/ttydefaults.h TTYDEF_IFLAG = (BRKINT | ICRNL | IMAXBEL | IXON | IXANY) TTYDEF_OFLAG = (OPOST | ONLCR) TTYDEF_LFLAG = (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) TTYDEF_CFLAG = (CREAD | CS8 | HUPCL) TTYDEF_SPEED = (B9600) def CTRL(x): return (x&037) CEOF = CTRL(ord('d')) CEOL = 0xff CERASE = 0177 CINTR = CTRL(ord('c')) CSTATUS = CTRL(ord('t')) CKILL = CTRL(ord('u')) CMIN = 1 CQUIT = 034 CSUSP = CTRL(ord('z')) CTIME = 0 CDSUSP = CTRL(ord('y')) CSTART = CTRL(ord('q')) CSTOP = CTRL(ord('s')) CLNEXT = CTRL(ord('v')) CDISCARD = CTRL(ord('o')) CWERASE = CTRL(ord('w')) CREPRINT = CTRL(ord('r')) CEOT = CEOF CBRK = CEOL CRPRNT = CREPRINT CFLUSH = CDISCARD --- NEW FILE --- #! /bin/sh set -v python ../../Tools/scripts/h2py.py /usr/include/fcntl.h python ../../Tools/scripts/h2py.py /usr/include/sys/socket.h python ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h python ../../Tools/scripts/h2py.py /usr/include/termios.h From python-dev@python.org Thu Aug 31 03:42:17 2000 From: python-dev@python.org (Jeremy Hylton) Date: Wed, 30 Aug 2000 19:42:17 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/plat-freebsd5 FCNTL.py,NONE,1.1 IN.py,NONE,1.1 SOCKET.py,NONE,1.1 TERMIOS.py,NONE,1.1 regen,NONE,1.1 Message-ID: <200008310242.TAA27356@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/plat-freebsd5 In directory slayer.i.sourceforge.net:/tmp/cvs-serv26872/Lib/plat-freebsd5 Added Files: FCNTL.py IN.py SOCKET.py TERMIOS.py regen Log Message: tg@freebsd.org close SF patch #101354 --- NEW FILE --- # Generated by h2py from /usr/include/fcntl.h # Included from sys/types.h # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/inttypes.h # Included from machine/ansi.h _BSD_CLOCKID_T_ = int _BSD_PTRDIFF_T_ = int _BSD_SSIZE_T_ = int _BSD_TIME_T_ = long _BSD_TIMER_T_ = int _BSD_CT_RUNE_T_ = int _BSD_PID_T_ = int _BSD_CLK_TCK_ = 128 _BSD_CLOCKS_PER_SEC_ = 128 # Included from machine/types.h def major(x): return ((int)(((u_int)(x) >> 8)&0xff)) def minor(x): return ((int)((x)&0xffff00ff)) # Included from machine/endian.h _QUAD_HIGHWORD = 1 _QUAD_LOWWORD = 0 LITTLE_ENDIAN = 1234 BIG_ENDIAN = 4321 PDP_ENDIAN = 3412 BYTE_ORDER = LITTLE_ENDIAN def __word_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_long(x): return \ def __byte_swap_word(x): return \ ntohl = __byte_swap_long ntohs = __byte_swap_word htonl = __byte_swap_long htons = __byte_swap_word NBBY = 8 FD_SETSIZE = 1024 O_RDONLY = 0x0000 O_WRONLY = 0x0001 O_RDWR = 0x0002 O_ACCMODE = 0x0003 FREAD = 0x0001 FWRITE = 0x0002 O_NONBLOCK = 0x0004 O_APPEND = 0x0008 O_SHLOCK = 0x0010 O_EXLOCK = 0x0020 O_ASYNC = 0x0040 O_FSYNC = 0x0080 O_NOFOLLOW = 0x0100 O_CREAT = 0x0200 O_TRUNC = 0x0400 O_EXCL = 0x0800 FMARK = 0x1000 FDEFER = 0x2000 FHASLOCK = 0x4000 O_NOCTTY = 0x8000 def FFLAGS(oflags): return ((oflags) + 1) def OFLAGS(fflags): return ((fflags) - 1) FAPPEND = O_APPEND FASYNC = O_ASYNC FFSYNC = O_FSYNC FNONBLOCK = O_NONBLOCK FNDELAY = O_NONBLOCK O_NDELAY = O_NONBLOCK FPOSIXSHM = O_NOFOLLOW F_DUPFD = 0 F_GETFD = 1 F_SETFD = 2 F_GETFL = 3 F_SETFL = 4 F_GETOWN = 5 F_SETOWN = 6 F_GETLK = 7 F_SETLK = 8 F_SETLKW = 9 FD_CLOEXEC = 1 F_RDLCK = 1 F_UNLCK = 2 F_WRLCK = 3 F_WAIT = 0x010 F_FLOCK = 0x020 F_POSIX = 0x040 LOCK_SH = 0x01 LOCK_EX = 0x02 LOCK_NB = 0x04 LOCK_UN = 0x08 --- NEW FILE --- # Generated by h2py from /usr/include/netinet/in.h IPPROTO_IP = 0 IPPROTO_HOPOPTS = 0 IPPROTO_ICMP = 1 IPPROTO_IGMP = 2 IPPROTO_GGP = 3 IPPROTO_IPV4 = 4 IPPROTO_IPIP = IPPROTO_IPV4 IPPROTO_TCP = 6 IPPROTO_ST = 7 IPPROTO_EGP = 8 IPPROTO_PIGP = 9 IPPROTO_RCCMON = 10 IPPROTO_NVPII = 11 IPPROTO_PUP = 12 IPPROTO_ARGUS = 13 IPPROTO_EMCON = 14 IPPROTO_XNET = 15 IPPROTO_CHAOS = 16 IPPROTO_UDP = 17 IPPROTO_MUX = 18 IPPROTO_MEAS = 19 IPPROTO_HMP = 20 IPPROTO_PRM = 21 IPPROTO_IDP = 22 IPPROTO_TRUNK1 = 23 IPPROTO_TRUNK2 = 24 IPPROTO_LEAF1 = 25 IPPROTO_LEAF2 = 26 IPPROTO_RDP = 27 IPPROTO_IRTP = 28 IPPROTO_TP = 29 IPPROTO_BLT = 30 IPPROTO_NSP = 31 IPPROTO_INP = 32 IPPROTO_SEP = 33 IPPROTO_3PC = 34 IPPROTO_IDPR = 35 IPPROTO_XTP = 36 IPPROTO_DDP = 37 IPPROTO_CMTP = 38 IPPROTO_TPXX = 39 IPPROTO_IL = 40 IPPROTO_IPV6 = 41 IPPROTO_SDRP = 42 IPPROTO_ROUTING = 43 IPPROTO_FRAGMENT = 44 IPPROTO_IDRP = 45 IPPROTO_RSVP = 46 IPPROTO_GRE = 47 IPPROTO_MHRP = 48 IPPROTO_BHA = 49 IPPROTO_ESP = 50 IPPROTO_AH = 51 IPPROTO_INLSP = 52 IPPROTO_SWIPE = 53 IPPROTO_NHRP = 54 IPPROTO_ICMPV6 = 58 IPPROTO_NONE = 59 IPPROTO_DSTOPTS = 60 IPPROTO_AHIP = 61 IPPROTO_CFTP = 62 IPPROTO_HELLO = 63 IPPROTO_SATEXPAK = 64 IPPROTO_KRYPTOLAN = 65 IPPROTO_RVD = 66 IPPROTO_IPPC = 67 IPPROTO_ADFS = 68 IPPROTO_SATMON = 69 IPPROTO_VISA = 70 IPPROTO_IPCV = 71 IPPROTO_CPNX = 72 IPPROTO_CPHB = 73 IPPROTO_WSN = 74 IPPROTO_PVP = 75 IPPROTO_BRSATMON = 76 IPPROTO_ND = 77 IPPROTO_WBMON = 78 IPPROTO_WBEXPAK = 79 IPPROTO_EON = 80 IPPROTO_VMTP = 81 IPPROTO_SVMTP = 82 IPPROTO_VINES = 83 IPPROTO_TTP = 84 IPPROTO_IGP = 85 IPPROTO_DGP = 86 IPPROTO_TCF = 87 IPPROTO_IGRP = 88 IPPROTO_OSPFIGP = 89 IPPROTO_SRPC = 90 IPPROTO_LARP = 91 IPPROTO_MTP = 92 IPPROTO_AX25 = 93 IPPROTO_IPEIP = 94 IPPROTO_MICP = 95 IPPROTO_SCCSP = 96 IPPROTO_ETHERIP = 97 IPPROTO_ENCAP = 98 IPPROTO_APES = 99 IPPROTO_GMTP = 100 IPPROTO_IPCOMP = 108 IPPROTO_PIM = 103 IPPROTO_PGM = 113 IPPROTO_DIVERT = 254 IPPROTO_RAW = 255 IPPROTO_MAX = 256 IPPROTO_DONE = 257 IPPORT_RESERVED = 1024 IPPORT_USERRESERVED = 5000 IPPORT_HIFIRSTAUTO = 49152 IPPORT_HILASTAUTO = 65535 IPPORT_RESERVEDSTART = 600 def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) IN_CLASSA_NET = 0xff000000 IN_CLASSA_NSHIFT = 24 IN_CLASSA_HOST = 0x00ffffff IN_CLASSA_MAX = 128 def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) IN_CLASSB_NET = 0xffff0000 IN_CLASSB_NSHIFT = 16 IN_CLASSB_HOST = 0x0000ffff IN_CLASSB_MAX = 65536 def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) IN_CLASSC_NET = 0xffffff00 IN_CLASSC_NSHIFT = 8 IN_CLASSC_HOST = 0x000000ff def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) IN_CLASSD_NET = 0xf0000000 IN_CLASSD_NSHIFT = 28 IN_CLASSD_HOST = 0x0fffffff def IN_MULTICAST(i): return IN_CLASSD(i) def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) INADDR_NONE = 0xffffffff IN_LOOPBACKNET = 127 INET_ADDRSTRLEN = 16 IP_OPTIONS = 1 IP_HDRINCL = 2 IP_TOS = 3 IP_TTL = 4 IP_RECVOPTS = 5 IP_RECVRETOPTS = 6 IP_RECVDSTADDR = 7 IP_RETOPTS = 8 IP_MULTICAST_IF = 9 IP_MULTICAST_TTL = 10 IP_MULTICAST_LOOP = 11 IP_ADD_MEMBERSHIP = 12 IP_DROP_MEMBERSHIP = 13 IP_MULTICAST_VIF = 14 IP_RSVP_ON = 15 IP_RSVP_OFF = 16 IP_RSVP_VIF_ON = 17 IP_RSVP_VIF_OFF = 18 IP_PORTRANGE = 19 IP_RECVIF = 20 IP_IPSEC_POLICY = 21 IP_FAITH = 22 IP_FW_ADD = 50 IP_FW_DEL = 51 IP_FW_FLUSH = 52 IP_FW_ZERO = 53 IP_FW_GET = 54 IP_FW_RESETLOG = 55 IP_DUMMYNET_CONFIGURE = 60 IP_DUMMYNET_DEL = 61 IP_DUMMYNET_FLUSH = 62 IP_DUMMYNET_GET = 64 IP_DEFAULT_MULTICAST_TTL = 1 IP_DEFAULT_MULTICAST_LOOP = 1 IP_MAX_MEMBERSHIPS = 20 IP_PORTRANGE_DEFAULT = 0 IP_PORTRANGE_HIGH = 1 IP_PORTRANGE_LOW = 2 IPPROTO_MAXID = (IPPROTO_AH + 1) IPCTL_FORWARDING = 1 IPCTL_SENDREDIRECTS = 2 IPCTL_DEFTTL = 3 IPCTL_DEFMTU = 4 IPCTL_RTEXPIRE = 5 IPCTL_RTMINEXPIRE = 6 IPCTL_RTMAXCACHE = 7 IPCTL_SOURCEROUTE = 8 IPCTL_DIRECTEDBROADCAST = 9 IPCTL_INTRQMAXLEN = 10 IPCTL_INTRQDROPS = 11 IPCTL_STATS = 12 IPCTL_ACCEPTSOURCEROUTE = 13 IPCTL_FASTFORWARDING = 14 IPCTL_KEEPFAITH = 15 IPCTL_GIF_TTL = 16 IPCTL_MAXID = 17 # Included from netinet6/in6.h # Included from sys/queue.h def SLIST_HEAD_INITIALIZER(head): return \ def SLIST_ENTRY(type): return \ def STAILQ_HEAD_INITIALIZER(head): return \ def STAILQ_ENTRY(type): return \ def LIST_HEAD_INITIALIZER(head): return \ def LIST_ENTRY(type): return \ def TAILQ_HEAD_INITIALIZER(head): return \ def TAILQ_ENTRY(type): return \ def CIRCLEQ_ENTRY(type): return \ __KAME_VERSION = "20000701/FreeBSD-current" IPV6PORT_RESERVED = 1024 IPV6PORT_ANONMIN = 49152 IPV6PORT_ANONMAX = 65535 IPV6PORT_RESERVEDMIN = 600 IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) INET6_ADDRSTRLEN = 46 IPV6_ADDR_INT32_ONE = 1 IPV6_ADDR_INT32_TWO = 2 IPV6_ADDR_INT32_MNL = 0xff010000 IPV6_ADDR_INT32_MLL = 0xff020000 IPV6_ADDR_INT32_SMP = 0x0000ffff IPV6_ADDR_INT16_ULL = 0xfe80 IPV6_ADDR_INT16_USL = 0xfec0 IPV6_ADDR_INT16_MLL = 0xff02 IPV6_ADDR_INT32_ONE = 0x01000000 IPV6_ADDR_INT32_TWO = 0x02000000 IPV6_ADDR_INT32_MNL = 0x000001ff IPV6_ADDR_INT32_MLL = 0x000002ff IPV6_ADDR_INT32_SMP = 0xffff0000 IPV6_ADDR_INT16_ULL = 0x80fe IPV6_ADDR_INT16_USL = 0xc0fe IPV6_ADDR_INT16_MLL = 0x02ff def IN6_IS_ADDR_UNSPECIFIED(a): return \ def IN6_IS_ADDR_LOOPBACK(a): return \ def IN6_IS_ADDR_V4COMPAT(a): return \ def IN6_IS_ADDR_V4MAPPED(a): return \ IPV6_ADDR_SCOPE_NODELOCAL = 0x01 IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 IPV6_ADDR_SCOPE_SITELOCAL = 0x05 IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 IPV6_ADDR_SCOPE_GLOBAL = 0x0e __IPV6_ADDR_SCOPE_NODELOCAL = 0x01 __IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 __IPV6_ADDR_SCOPE_SITELOCAL = 0x05 __IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 __IPV6_ADDR_SCOPE_GLOBAL = 0x0e def IN6_IS_ADDR_LINKLOCAL(a): return \ def IN6_IS_ADDR_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_ADDR_MC_NODELOCAL(a): return \ def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ def IN6_IS_ADDR_MC_SITELOCAL(a): return \ def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ def IN6_IS_ADDR_MC_GLOBAL(a): return \ def IN6_IS_SCOPE_LINKLOCAL(a): return \ IPV6_OPTIONS = 1 IPV6_RECVOPTS = 5 IPV6_RECVRETOPTS = 6 IPV6_RECVDSTADDR = 7 IPV6_RETOPTS = 8 IPV6_SOCKOPT_RESERVED1 = 3 IPV6_UNICAST_HOPS = 4 IPV6_MULTICAST_IF = 9 IPV6_MULTICAST_HOPS = 10 IPV6_MULTICAST_LOOP = 11 IPV6_JOIN_GROUP = 12 IPV6_LEAVE_GROUP = 13 IPV6_PORTRANGE = 14 ICMP6_FILTER = 18 IPV6_PKTINFO = 19 IPV6_HOPLIMIT = 20 IPV6_NEXTHOP = 21 IPV6_HOPOPTS = 22 IPV6_DSTOPTS = 23 IPV6_RTHDR = 24 IPV6_PKTOPTIONS = 25 IPV6_CHECKSUM = 26 IPV6_BINDV6ONLY = 27 IPV6_IPSEC_POLICY = 28 IPV6_FAITH = 29 IPV6_FW_ADD = 30 IPV6_FW_DEL = 31 IPV6_FW_FLUSH = 32 IPV6_FW_ZERO = 33 IPV6_FW_GET = 34 IPV6_RTHDR_LOOSE = 0 IPV6_RTHDR_STRICT = 1 IPV6_RTHDR_TYPE_0 = 0 IPV6_DEFAULT_MULTICAST_HOPS = 1 IPV6_DEFAULT_MULTICAST_LOOP = 1 IPV6_PORTRANGE_DEFAULT = 0 IPV6_PORTRANGE_HIGH = 1 IPV6_PORTRANGE_LOW = 2 IPV6PROTO_MAXID = (IPPROTO_PIM + 1) IPV6CTL_FORWARDING = 1 IPV6CTL_SENDREDIRECTS = 2 IPV6CTL_DEFHLIM = 3 IPV6CTL_DEFMTU = 4 IPV6CTL_FORWSRCRT = 5 IPV6CTL_STATS = 6 IPV6CTL_MRTSTATS = 7 IPV6CTL_MRTPROTO = 8 IPV6CTL_MAXFRAGPACKETS = 9 IPV6CTL_SOURCECHECK = 10 IPV6CTL_SOURCECHECK_LOGINT = 11 IPV6CTL_ACCEPT_RTADV = 12 IPV6CTL_KEEPFAITH = 13 IPV6CTL_LOG_INTERVAL = 14 IPV6CTL_HDRNESTLIMIT = 15 IPV6CTL_DAD_COUNT = 16 IPV6CTL_AUTO_FLOWLABEL = 17 IPV6CTL_DEFMCASTHLIM = 18 IPV6CTL_GIF_HLIM = 19 IPV6CTL_KAME_VERSION = 20 IPV6CTL_USE_DEPRECATED = 21 IPV6CTL_RR_PRUNE = 22 IPV6CTL_MAPPED_ADDR = 23 IPV6CTL_BINDV6ONLY = 24 IPV6CTL_RTEXPIRE = 25 IPV6CTL_RTMINEXPIRE = 26 IPV6CTL_RTMAXCACHE = 27 IPV6CTL_MAXID = 28 --- NEW FILE --- # Generated by h2py from /usr/include/sys/socket.h SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 SO_DEBUG = 0x0001 SO_ACCEPTCONN = 0x0002 SO_REUSEADDR = 0x0004 SO_KEEPALIVE = 0x0008 SO_DONTROUTE = 0x0010 SO_BROADCAST = 0x0020 SO_USELOOPBACK = 0x0040 SO_LINGER = 0x0080 SO_OOBINLINE = 0x0100 SO_REUSEPORT = 0x0200 SO_TIMESTAMP = 0x0400 SO_ACCEPTFILTER = 0x1000 SO_SNDBUF = 0x1001 SO_RCVBUF = 0x1002 SO_SNDLOWAT = 0x1003 SO_RCVLOWAT = 0x1004 SO_SNDTIMEO = 0x1005 SO_RCVTIMEO = 0x1006 SO_ERROR = 0x1007 SO_TYPE = 0x1008 SOL_SOCKET = 0xffff AF_UNSPEC = 0 AF_LOCAL = 1 AF_UNIX = AF_LOCAL AF_INET = 2 AF_IMPLINK = 3 AF_PUP = 4 AF_CHAOS = 5 AF_NS = 6 AF_ISO = 7 AF_OSI = AF_ISO AF_ECMA = 8 AF_DATAKIT = 9 AF_CCITT = 10 AF_SNA = 11 AF_DECnet = 12 AF_DLI = 13 AF_LAT = 14 AF_HYLINK = 15 AF_APPLETALK = 16 AF_ROUTE = 17 AF_LINK = 18 pseudo_AF_XTP = 19 AF_COIP = 20 AF_CNT = 21 pseudo_AF_RTIP = 22 AF_IPX = 23 AF_SIP = 24 pseudo_AF_PIP = 25 AF_ISDN = 26 AF_E164 = AF_ISDN pseudo_AF_KEY = 27 AF_INET6 = 28 AF_NATM = 29 AF_ATM = 30 pseudo_AF_HDRCMPLT = 31 AF_NETGRAPH = 32 AF_MAX = 33 SOCK_MAXADDRLEN = 255 _SS_MAXSIZE = 128 PF_UNSPEC = AF_UNSPEC PF_LOCAL = AF_LOCAL PF_UNIX = PF_LOCAL PF_INET = AF_INET PF_IMPLINK = AF_IMPLINK PF_PUP = AF_PUP PF_CHAOS = AF_CHAOS PF_NS = AF_NS PF_ISO = AF_ISO PF_OSI = AF_ISO PF_ECMA = AF_ECMA PF_DATAKIT = AF_DATAKIT PF_CCITT = AF_CCITT PF_SNA = AF_SNA PF_DECnet = AF_DECnet PF_DLI = AF_DLI PF_LAT = AF_LAT PF_HYLINK = AF_HYLINK PF_APPLETALK = AF_APPLETALK PF_ROUTE = AF_ROUTE PF_LINK = AF_LINK PF_XTP = pseudo_AF_XTP PF_COIP = AF_COIP PF_CNT = AF_CNT PF_SIP = AF_SIP PF_IPX = AF_IPX PF_RTIP = pseudo_AF_RTIP PF_PIP = pseudo_AF_PIP PF_ISDN = AF_ISDN PF_KEY = pseudo_AF_KEY PF_INET6 = AF_INET6 PF_NATM = AF_NATM PF_ATM = AF_ATM PF_NETGRAPH = AF_NETGRAPH PF_MAX = AF_MAX NET_MAXID = AF_MAX NET_RT_DUMP = 1 NET_RT_FLAGS = 2 NET_RT_IFLIST = 3 NET_RT_MAXID = 4 SOMAXCONN = 128 MSG_OOB = 0x1 MSG_PEEK = 0x2 MSG_DONTROUTE = 0x4 MSG_EOR = 0x8 MSG_TRUNC = 0x10 MSG_CTRUNC = 0x20 MSG_WAITALL = 0x40 MSG_DONTWAIT = 0x80 MSG_EOF = 0x100 MSG_COMPAT = 0x8000 CMGROUP_MAX = 16 SCM_RIGHTS = 0x01 SCM_TIMESTAMP = 0x02 SCM_CREDS = 0x03 SHUT_RD = 0 SHUT_WR = 1 SHUT_RDWR = 2 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) --- NEW FILE --- # Generated by h2py from /usr/include/termios.h VEOF = 0 VEOL = 1 VEOL2 = 2 VERASE = 3 VWERASE = 4 VKILL = 5 VREPRINT = 6 VINTR = 8 VQUIT = 9 VSUSP = 10 VDSUSP = 11 VSTART = 12 VSTOP = 13 VLNEXT = 14 VDISCARD = 15 VMIN = 16 VTIME = 17 VSTATUS = 18 NCCS = 20 _POSIX_VDISABLE = 0xff IGNBRK = 0x00000001 BRKINT = 0x00000002 IGNPAR = 0x00000004 PARMRK = 0x00000008 INPCK = 0x00000010 ISTRIP = 0x00000020 INLCR = 0x00000040 IGNCR = 0x00000080 ICRNL = 0x00000100 IXON = 0x00000200 IXOFF = 0x00000400 IXANY = 0x00000800 IMAXBEL = 0x00002000 OPOST = 0x00000001 ONLCR = 0x00000002 OXTABS = 0x00000004 ONOEOT = 0x00000008 CIGNORE = 0x00000001 CSIZE = 0x00000300 CS5 = 0x00000000 CS6 = 0x00000100 CS7 = 0x00000200 CS8 = 0x00000300 CSTOPB = 0x00000400 CREAD = 0x00000800 PARENB = 0x00001000 PARODD = 0x00002000 HUPCL = 0x00004000 CLOCAL = 0x00008000 CCTS_OFLOW = 0x00010000 CRTS_IFLOW = 0x00020000 CDTR_IFLOW = 0x00040000 CDSR_OFLOW = 0x00080000 CCAR_OFLOW = 0x00100000 MDMBUF = 0x00100000 ECHOKE = 0x00000001 ECHOE = 0x00000002 ECHOK = 0x00000004 ECHO = 0x00000008 ECHONL = 0x00000010 ECHOPRT = 0x00000020 ECHOCTL = 0x00000040 ISIG = 0x00000080 ICANON = 0x00000100 ALTWERASE = 0x00000200 IEXTEN = 0x00000400 EXTPROC = 0x00000800 TOSTOP = 0x00400000 FLUSHO = 0x00800000 NOKERNINFO = 0x02000000 PENDIN = 0x20000000 NOFLSH = 0x80000000 TCSANOW = 0 TCSADRAIN = 1 TCSAFLUSH = 2 TCSASOFT = 0x10 B0 = 0 B50 = 50 B75 = 75 B110 = 110 B134 = 134 B150 = 150 B200 = 200 B300 = 300 B600 = 600 B1200 = 1200 B1800 = 1800 B2400 = 2400 B4800 = 4800 B9600 = 9600 B19200 = 19200 B38400 = 38400 B7200 = 7200 B14400 = 14400 B28800 = 28800 B57600 = 57600 B76800 = 76800 B115200 = 115200 B230400 = 230400 EXTA = 19200 EXTB = 38400 TCIFLUSH = 1 TCOFLUSH = 2 TCIOFLUSH = 3 TCOOFF = 1 TCOON = 2 TCIOFF = 3 TCION = 4 # Included from sys/cdefs.h def __P(protos): return protos def __STRING(x): return #x def __XSTRING(x): return __STRING(x) def __P(protos): return () def __STRING(x): return "x" def __RCSID(s): return __IDSTRING(rcsid,s) def __RCSID_SOURCE(s): return __IDSTRING(rcsid_source,s) def __COPYRIGHT(s): return __IDSTRING(copyright,s) # Included from sys/ttycom.h # Included from sys/ioccom.h IOCPARM_MASK = 0x1fff def IOCPARM_LEN(x): return (((x) >> 16) & IOCPARM_MASK) def IOCBASECMD(x): return ((x) & ~(IOCPARM_MASK << 16)) def IOCGROUP(x): return (((x) >> 8) & 0xff) IOC_VOID = 0x20000000 IOC_OUT = 0x40000000 IOC_IN = 0x80000000 IOC_INOUT = (IOC_IN|IOC_OUT) IOC_DIRMASK = 0xe0000000 TIOCM_LE = 0001 TIOCM_DTR = 0002 TIOCM_RTS = 0004 TIOCM_ST = 0010 TIOCM_SR = 0020 TIOCM_CTS = 0040 TIOCM_CAR = 0100 TIOCM_CD = TIOCM_CAR TIOCM_RNG = 0200 TIOCM_RI = TIOCM_RNG TIOCM_DSR = 0400 TIOCPKT_DATA = 0x00 TIOCPKT_FLUSHREAD = 0x01 TIOCPKT_FLUSHWRITE = 0x02 TIOCPKT_STOP = 0x04 TIOCPKT_START = 0x08 TIOCPKT_NOSTOP = 0x10 TIOCPKT_DOSTOP = 0x20 TIOCPKT_IOCTL = 0x40 def UIOCCMD(n): return _IO(ord('u'), n) TTYDISC = 0 SLIPDISC = 4 PPPDISC = 5 NETGRAPHDISC = 6 # Included from sys/ttydefaults.h TTYDEF_IFLAG = (BRKINT | ICRNL | IMAXBEL | IXON | IXANY) TTYDEF_OFLAG = (OPOST | ONLCR) TTYDEF_LFLAG = (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) TTYDEF_CFLAG = (CREAD | CS8 | HUPCL) TTYDEF_SPEED = (B9600) def CTRL(x): return (x&037) CEOF = CTRL(ord('d')) CEOL = 0xff CERASE = 0177 CINTR = CTRL(ord('c')) CSTATUS = CTRL(ord('t')) CKILL = CTRL(ord('u')) CMIN = 1 CQUIT = 034 CSUSP = CTRL(ord('z')) CTIME = 0 CDSUSP = CTRL(ord('y')) CSTART = CTRL(ord('q')) CSTOP = CTRL(ord('s')) CLNEXT = CTRL(ord('v')) CDISCARD = CTRL(ord('o')) CWERASE = CTRL(ord('w')) CREPRINT = CTRL(ord('r')) CEOT = CEOF CBRK = CEOL CRPRNT = CREPRINT CFLUSH = CDISCARD --- NEW FILE --- #! /bin/sh set -v python ../../Tools/scripts/h2py.py /usr/include/fcntl.h python ../../Tools/scripts/h2py.py /usr/include/sys/socket.h python ../../Tools/scripts/h2py.py -i '(u_long)' /usr/include/netinet/in.h python ../../Tools/scripts/h2py.py /usr/include/termios.h From python-dev@python.org Thu Aug 31 06:07:22 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:07:22 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules audioop.c,1.42,1.43 Message-ID: <200008310507.WAA09048@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv9041/Modules Modified Files: audioop.c Log Message: Remove one compiler warning found with -Wstrict-prototypes. Index: audioop.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/audioop.c,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** audioop.c 2000/08/04 15:53:06 1.42 --- audioop.c 2000/08/31 05:07:19 1.43 *************** *** 41,45 **** } while ( 0 ) ! static unsigned char st_linear_to_ulaw( /* int sample */ ); /* --- 41,45 ---- } while ( 0 ) ! static unsigned char st_linear_to_ulaw(int sample); /* From python-dev@python.org Thu Aug 31 06:08:02 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:08:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc TODO,1.31,1.32 Message-ID: <200008310508.WAA09076@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv9065/Doc Modified Files: TODO Log Message: Added note about documenting the SSL support in the socket module. Index: TODO =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/TODO,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** TODO 2000/08/24 00:50:27 1.31 --- TODO 2000/08/31 05:08:00 1.32 *************** *** 62,65 **** --- 62,67 ---- support and new classes. (Greg, this is yours!) + * SSL support in the socket module is not documented. + Tutorial -------- From python-dev@python.org Thu Aug 31 06:09:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:09:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Include token.h,2.16,2.17 Message-ID: <200008310509.WAA09244@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Include In directory slayer.i.sourceforge.net:/tmp/cvs-serv9237/Include Modified Files: token.h Log Message: Added prototype for PyToken_ThreeChars(), to remove compiler warning in Parser/grammar.c. Index: token.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/token.h,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** token.h 2000/08/24 20:09:45 2.16 --- token.h 2000/08/31 05:09:57 2.17 *************** *** 82,85 **** --- 82,86 ---- extern DL_IMPORT(int) PyToken_OneChar(int); extern DL_IMPORT(int) PyToken_TwoChars(int, int); + extern DL_IMPORT(int) PyToken_ThreeChars(int, int, int); #ifdef __cplusplus From python-dev@python.org Thu Aug 31 06:11:51 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:11:51 -0700 Subject: [Python-checkins] CVS: python/dist/src/Parser Makefile.in,2.10,2.11 Message-ID: <200008310511.WAA09368@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv9361/Parser Modified Files: Makefile.in Log Message: Added a little more dependency information. Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Parser/Makefile.in,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** Makefile.in 1998/10/07 22:51:55 2.10 --- Makefile.in 2000/08/31 05:11:48 2.11 *************** *** 93,97 **** bitset.o: bitset.c firstsets.o: firstsets.c ! grammar.o: grammar.c metagrammar.o: metagrammar.c pgen.o: pgen.c --- 93,97 ---- bitset.o: bitset.c firstsets.o: firstsets.c ! grammar.o: grammar.c assert.h ../Include/token.h ../Include/grammar.h metagrammar.o: metagrammar.c pgen.o: pgen.c From python-dev@python.org Thu Aug 31 06:15:47 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:15:47 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.48,2.49 Message-ID: <200008310515.WAA09623@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv9615/Objects Modified Files: abstract.c Log Message: Removed compiler warning about wanting explicit grouping around && expression next to a || expression; this is a readability-inspired warning from GCC. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.48 retrieving revision 2.49 diff -C2 -r2.48 -r2.49 *** abstract.c 2000/08/24 20:08:19 2.48 --- abstract.c 2000/08/31 05:15:44 2.49 *************** *** 813,820 **** PyNumber_Add, 0) <= 0) return x; ! } else if (HASINPLACE(v) && (v->ob_type->tp_as_sequence != NULL && ! (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL) || ! (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL)) return (*f)(v, w); --- 813,822 ---- PyNumber_Add, 0) <= 0) return x; ! } ! else if ((HASINPLACE(v) ! && (v->ob_type->tp_as_sequence != NULL && ! (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL)) ! || (v->ob_type->tp_as_number != NULL && ! (f = v->ob_type->tp_as_number->nb_inplace_add) != NULL)) return (*f)(v, w); From python-dev@python.org Thu Aug 31 06:18:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:18:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects fileobject.c,2.85,2.86 Message-ID: <200008310518.WAA09781@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv9766/Objects Modified Files: fileobject.c Log Message: Peter Schneider-Kamp : Remove some of GCC's warning in -Wstrict-prototypes mode. This closes SourceForge patch #101342. Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.85 retrieving revision 2.86 diff -C2 -r2.85 -r2.86 *** fileobject.c 2000/08/25 22:49:05 2.85 --- fileobject.c 2000/08/31 05:18:54 2.86 *************** *** 254,265 **** return 0 on success, non-zero on failure (with errno set) */ int - _portable_fseek(fp, offset, whence) - FILE* fp; #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 ! fpos_t offset; #else ! off_t offset; #endif - int whence; { #if defined(HAVE_FSEEKO) --- 254,262 ---- return 0 on success, non-zero on failure (with errno set) */ int #if defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_OFF_T < 8 && SIZEOF_FPOS_T >= 8 ! _portable_fseek(FILE *fp, fpos_t offset, int whence) #else ! _portable_fseek(FILE *fp, off_t offset, int whence) #endif { #if defined(HAVE_FSEEKO) *************** *** 303,308 **** off_t #endif ! _portable_ftell(fp) ! FILE* fp; { #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) --- 300,304 ---- off_t #endif ! _portable_ftell(FILE* fp) { #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) From python-dev@python.org Thu Aug 31 06:18:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:18:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules arraymodule.c,2.53,2.54 readline.c,2.28,2.29 selectmodule.c,2.44,2.45 Message-ID: <200008310518.WAA09778@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv9766/Modules Modified Files: arraymodule.c readline.c selectmodule.c Log Message: Peter Schneider-Kamp : Remove some of GCC's warning in -Wstrict-prototypes mode. This closes SourceForge patch #101342. Index: arraymodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/arraymodule.c,v retrieving revision 2.53 retrieving revision 2.54 diff -C2 -r2.53 -r2.54 *** arraymodule.c 2000/08/12 20:58:11 2.53 --- arraymodule.c 2000/08/31 05:18:53 2.54 *************** *** 789,795 **** static PyObject * ! array_extend(self, args) ! arrayobject *self; ! PyObject *args; { int size; --- 789,793 ---- static PyObject * ! array_extend(arrayobject *self, PyObject *args) { int size; Index: readline.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/readline.c,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** readline.c 2000/08/04 22:31:42 2.28 --- readline.c 2000/08/31 05:18:53 2.29 *************** *** 28,38 **** #include /* You may need to add an -I option to Setup */ ! extern int rl_parse_and_bind(); ! extern int rl_read_init_file(); ! extern int rl_insert_text(); ! extern int rl_bind_key(); ! extern int rl_bind_key_in_map(); ! extern int rl_initialize(); ! extern int add_history(); extern Function *rl_event_hook; #endif --- 28,38 ---- #include /* You may need to add an -I option to Setup */ ! extern int rl_parse_and_bind(char *); ! extern int rl_read_init_file(char *); ! extern int rl_insert_text(char *); ! extern int rl_bind_key(int, Function *); ! extern int rl_bind_key_in_map(int, Function *, Keymap); ! extern int rl_initialize(void); ! extern int add_history(char *); extern Function *rl_event_hook; #endif Index: selectmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v retrieving revision 2.44 retrieving revision 2.45 diff -C2 -r2.44 -r2.45 *** selectmodule.c 2000/08/25 13:59:18 2.44 --- selectmodule.c 2000/08/31 05:18:53 2.45 *************** *** 509,513 **** static pollObject * ! newPollObject() { pollObject *self; --- 509,513 ---- static pollObject * ! newPollObject(void) { pollObject *self; From python-dev@python.org Thu Aug 31 06:38:42 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:38:42 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.111,2.112 Message-ID: <200008310538.WAA11038@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv11027/Python Modified Files: pythonrun.c Log Message: Add a comment explaining the return value of PyOS_CheckStack(). Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.111 retrieving revision 2.112 diff -C2 -r2.111 -r2.112 *** pythonrun.c 2000/08/27 20:18:17 2.111 --- pythonrun.c 2000/08/31 05:38:39 2.112 *************** *** 904,908 **** PyObject *v; long magic; ! long PyImport_GetMagicNumber(); magic = PyMarshal_ReadLongFromFile(fp); --- 904,908 ---- PyObject *v; long magic; ! long PyImport_GetMagicNumber(void); magic = PyMarshal_ReadLongFromFile(fp); *************** *** 1202,1205 **** --- 1202,1208 ---- #include + /* + * Return non-zero when we run out of memory on the stack; zero otherwise. + */ int PyOS_CheckStack() From python-dev@python.org Thu Aug 31 06:50:43 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:50:43 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/api api.tex,1.77,1.78 Message-ID: <200008310550.WAA11900@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/api In directory slayer.i.sourceforge.net:/tmp/cvs-serv11891/api Modified Files: api.tex Log Message: Document PyOS_CheckStack(). Fix a couple of really minor markup nits. Index: api.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/api/api.tex,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -r1.77 -r1.78 *** api.tex 2000/08/14 02:50:21 1.77 --- api.tex 2000/08/31 05:50:40 1.78 *************** *** 851,855 **** \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyErr_Restore}{PyObject *type, PyObject *value, PyObject *traceback} Set the error indicator from the three objects. If the error indicator is already set, it is cleared first. If the objects are --- 851,856 ---- \end{cfuncdesc} ! \begin{cfuncdesc}{void}{PyErr_Restore}{PyObject *type, PyObject *value, ! PyObject *traceback} Set the error indicator from the three objects. If the error indicator is already set, it is cleared first. If the objects are *************** *** 859,863 **** that class. Do not pass an invalid exception type or value. (Violating these rules will cause subtle problems later.) This call ! takes away a reference to each object, i.e. you must own a reference to each object before the call and after the call you no longer own these references. (If you don't understand this, don't use this --- 860,864 ---- that class. Do not pass an invalid exception type or value. (Violating these rules will cause subtle problems later.) This call ! takes away a reference to each object, i.e.\ you must own a reference to each object before the call and after the call you no longer own these references. (If you don't understand this, don't use this *************** *** 1061,1064 **** --- 1062,1074 ---- continue to be used. If a new executable is loaded into the new process, this function does not need to be called. + \end{cfuncdesc} + + \begin{cfuncdesc}{int}{PyOS_CheckStack}{} + Return true when the interpreter runs out of stack space. This is a + reliable check, but is only available when \code{USE_STACKCHECK} is + defined (currently on Windows using the Microsoft Visual C++ compiler + and on the Macintosh). \code{USE_CHECKSTACK} will be defined + automatically; you should never change the definition in your own + code. \end{cfuncdesc} From python-dev@python.org Thu Aug 31 06:52:46 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 22:52:46 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python pythonrun.c,2.112,2.113 Message-ID: <200008310552.WAA11992@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv11985/Python Modified Files: pythonrun.c Log Message: PyOS_CheckStack(): Better ANSI'fy this while we're at it. Index: pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.112 retrieving revision 2.113 diff -C2 -r2.112 -r2.113 *** pythonrun.c 2000/08/31 05:38:39 2.112 --- pythonrun.c 2000/08/31 05:52:44 2.113 *************** *** 1206,1210 **** */ int ! PyOS_CheckStack() { __try { --- 1206,1210 ---- */ int ! PyOS_CheckStack(void) { __try { From python-dev@python.org Thu Aug 31 07:09:29 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:09:29 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib lib.tex,1.161,1.162 Message-ID: <200008310609.XAA21565@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv21558/lib Modified Files: lib.tex Log Message: Relocate the popen2 documentation since it is now substantially more portable. Index: lib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/lib.tex,v retrieving revision 1.161 retrieving revision 1.162 diff -C2 -r1.161 -r1.162 *** lib.tex 2000/08/30 03:26:17 1.161 --- lib.tex 2000/08/31 06:09:26 1.162 *************** *** 132,135 **** --- 132,136 ---- \input{libstatvfs} \input{libfilecmp} + \input{libpopen2} %\input{libcmp} %\input{libcmpcache} *************** *** 183,187 **** \input{libnis} \input{libsyslog} - \input{libpopen2} \input{libcommands} --- 184,187 ---- From python-dev@python.org Thu Aug 31 07:12:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:12:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/paper-letter Makefile,1.15,1.16 Message-ID: <200008310612.XAA21839@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/paper-letter In directory slayer.i.sourceforge.net:/tmp/cvs-serv21826/paper-letter Modified Files: Makefile Log Message: Centralize the processing logic for LaTeX documents into the mkhowto script; do not use mkdvi.sh or mkhtl.sh any more. This slows down building all versions of the documentation, but if you are only building one format, it does not matter. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/paper-letter/Makefile,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** Makefile 2000/04/28 16:53:36 1.15 --- Makefile 2000/08/31 06:12:35 1.16 *************** *** 3,20 **** # Where are the various programs? - LATEX= latex - PDFLATEX= pdflatex DVIPS= dvips -N0 -t $(PAPER) - MAKEINDEX= makeindex -s ../texinputs/python.ist PYTHON= python TOOLSDIR= ../tools - TEXINPUTS= .:../texinputs: ! MKDVI= TEXINPUTS=$(TEXINPUTS) $(TOOLSDIR)/mkdvi.sh ! # The --keep option is needed to keep the intermediate files for generating ! # the HTML global module index. ! MKHOWTO= $(TOOLSDIR)/mkhowto --keep ! MKPDF= TEXINPUTS=$(TEXINPUTS) $(TOOLSDIR)/mkdvi.sh --pdf --- 3,14 ---- # Where are the various programs? DVIPS= dvips -N0 -t $(PAPER) PYTHON= python TOOLSDIR= ../tools ! MKHOWTO= $(TOOLSDIR)/mkhowto ! MKDVI= $(MKHOWTO) --dvi ! MKPDF= $(MKHOWTO) --pdf *************** *** 37,51 **** ! SCRIPTS: ../tools/fix_hack ../tools/mkdvi.sh ../tools/indfix.py ! $(DVIFILES): $(SCRIPTS) ! $(PDFFILES): $(SCRIPTS) - $(HOWTODVIFILES): ../tools/mkhowto - $(HOWTOPDFFILES): ../tools/mkhowto - # Rules to build PostScript and PDF formats ! .SUFFIXES: .dvi .ps .pdf .dvi.ps: --- 31,42 ---- ! SCRIPTS: ../tools/indfix.py ! $(DVIFILES): $(SCRIPTS) $(MKHOWTO) ! $(PDFFILES): $(SCRIPTS) $(MKHOWTO) # Rules to build PostScript and PDF formats ! .SUFFIXES: .dvi .ps .dvi.ps: *************** *** 65,72 **** # Python/C API Reference Manual api.dvi: api.tex $(APIFILES) ! $(MKDVI) api api.pdf: api.tex $(APIFILES) ! $(MKPDF) api api.tex: ../api/api.tex ../api/refcounts.dat ../tools/anno-api.py --- 56,63 ---- # Python/C API Reference Manual api.dvi: api.tex $(APIFILES) ! $(MKDVI) ../api/api.tex api.pdf: api.tex $(APIFILES) ! $(MKPDF) ../api/api.tex api.tex: ../api/api.tex ../api/refcounts.dat ../tools/anno-api.py *************** *** 75,82 **** # Distributing Python Modules dist.dvi: $(DISTFILES) ! $(MKHOWTO) --dvi ../dist/dist.tex dist.pdf: $(DISTFILES) ! $(MKHOWTO) --pdf ../dist/dist.tex # Documenting Python --- 66,73 ---- # Distributing Python Modules dist.dvi: $(DISTFILES) ! $(MKDVI) ../dist/dist.tex dist.pdf: $(DISTFILES) ! $(MKPDF) ../dist/dist.tex # Documenting Python *************** *** 89,96 **** # Extending and Embedding the Python Interpreter ext.dvi: $(EXTFILES) ! $(MKDVI) ext ext.pdf: $(EXTFILES) ! $(MKPDF) ext # Installing Python Modules --- 80,87 ---- # Extending and Embedding the Python Interpreter ext.dvi: $(EXTFILES) ! $(MKDVI) ../ext/ext.tex ext.pdf: $(EXTFILES) ! $(MKPDF) ../ext/ext.tex # Installing Python Modules *************** *** 103,110 **** # Python Library Reference lib.dvi: $(LIBFILES) ! $(MKDVI) lib lib.pdf: $(LIBFILES) ! $(MKPDF) lib # Macintosh Library Modules --- 94,101 ---- # Python Library Reference lib.dvi: $(LIBFILES) ! $(MKDVI) ../lib/lib.tex lib.pdf: $(LIBFILES) ! $(MKPDF) ../lib/lib.tex # Macintosh Library Modules *************** *** 117,131 **** # Python Reference Manual ref.dvi: $(REFFILES) ! $(MKDVI) ref ref.pdf: $(REFFILES) ! $(MKPDF) ref # Python Tutorial tut.dvi: $(TUTFILES) ! $(MKDVI) tut tut.pdf: $(TUTFILES) ! $(MKPDF) tut --- 108,122 ---- # Python Reference Manual ref.dvi: $(REFFILES) ! $(MKDVI) ../ref/ref.tex ref.pdf: $(REFFILES) ! $(MKPDF) ../ref/ref.tex # Python Tutorial tut.dvi: $(TUTFILES) ! $(MKDVI) ../tut/tut.tex tut.pdf: $(TUTFILES) ! $(MKPDF) ../tut/tut.tex From python-dev@python.org Thu Aug 31 07:12:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:12:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html Makefile,1.34,1.35 Message-ID: <200008310612.XAA21835@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv21826/html Modified Files: Makefile Log Message: Centralize the processing logic for LaTeX documents into the mkhowto script; do not use mkdvi.sh or mkhtl.sh any more. This slows down building all versions of the documentation, but if you are only building one format, it does not matter. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/Makefile,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -r1.34 -r1.35 *** Makefile 2000/08/11 17:36:21 1.34 --- Makefile 2000/08/31 06:12:35 1.35 *************** *** 1,8 **** ! # Convenience Makefile for building HTML documentation. You probably need to ! # set TEXINPUTS from the command line for this to be useful, unless you ! # actually build the .dvi files in the top level directory. ! # ! # Note that the .dvi files must already be built and TEXINPUTS must include the ! # directory where latex's working files (esp. *.aux) are kept. PAPER=letter --- 1,5 ---- ! # Convenience Makefile for building HTML documentation. You probably ! # need to set TEXINPUTS from the command line for this to be useful, ! # unless you actually build the .dvi files in the top level directory. PAPER=letter *************** *** 16,29 **** PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! WCNEW=$(PYTHON) $(TOPDIR)/../Tools/webchecker/wcnew.py ! MKAUX= PAPER=$(PAPER) TEXINPUTS=$(TEXINPUTS) $(TOOLSDIR)/mkdvi.sh --aux ! MKHTML= PAPER=$(PAPER) $(TOOLSDIR)/mkhtml.sh ! KPSEWHICH= TEXINPUTS=$(TEXINPUTS) kpsewhich tex BUILDINDEX=$(TOOLSDIR)/buildindex.py - # make it clear to l2h, since our support only generates HTML 4.0 - L2HARGS= -html_version 4.0 - PYTHONDOCS='
    See About this document... for information on suggesting changes.' HTMLBASE= file:`pwd` --- 13,20 ---- PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! MKHOWTO= $(TOOLSDIR)/mkhowto BUILDINDEX=$(TOOLSDIR)/buildindex.py PYTHONDOCS='
    See About this document... for information on suggesting changes.' HTMLBASE= file:`pwd` *************** *** 71,123 **** lib/modindex.html mac/modindex.html ! api/api.html: $(PAPERDIR)/api.aux $(BUILDINDEX) $(TOOLSDIR)/mkhtml.sh ! $(MKHTML) api $(L2HARGS) -split 5 ! doc/doc.html: $(DOCFILES) $(BUILDINDEX) $(TOPDIR)/perl/ltxmarkup.perl ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/doc/doc.tex - - ext/ext.html: $(PAPERDIR)/ext.aux $(TOOLSDIR)/mkhtml.sh - $(MKHTML) ext $(L2HARGS) -split 5 ! lib/lib.html: $(PAPERDIR)/lib.aux $(BUILDINDEX) $(TOOLSDIR)/mkhtml.sh ! $(TOOLSDIR)/fix_libaux.sed <`$(KPSEWHICH) lib.aux` >lib1.aux ! mv lib1.aux `$(KPSEWHICH) lib.aux` ! $(MKHTML) lib $(L2HARGS) -split 5 mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/mac/mac.tex - - ref/ref.html: $(PAPERDIR)/ref.aux $(BUILDINDEX) $(TOOLSDIR)/mkhtml.sh - $(MKHTML) ref $(L2HARGS) -split 5 ! tut/tut.html: $(PAPERDIR)/tut.aux $(TOOLSDIR)/mkhtml.sh ! $(MKHTML) --numeric tut $(L2HARGS) -split 3 ! inst/inst.html:$(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(TOOLSDIR)/mkhowto --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/dist/dist.tex - $(PAPERDIR)/api.aux: $(APIFILES) - (cd $(PAPERDIR); $(MKAUX) api) - - $(PAPERDIR)/ext.aux: $(EXTFILES) - (cd $(PAPERDIR); $(MKAUX) ext) - - $(PAPERDIR)/lib.aux: $(LIBFILES) - (cd $(PAPERDIR); $(MKAUX) lib) - - $(PAPERDIR)/ref.aux: $(REFFILES) - (cd $(PAPERDIR); $(MKAUX) ref) - - $(PAPERDIR)/tut.aux: $(TUTFILES) - (cd $(PAPERDIR); $(MKAUX) tut) - - webcheck: all $(WEBCHECKER) $(HTMLBASE)/api/ --- 62,102 ---- lib/modindex.html mac/modindex.html ! api/api.html: $(APIFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/api/api.tex ! doc/doc.html: $(DOCFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/doc/doc.tex ! ext/ext.html: $(EXTFILES) ! echo $(EXTFILES) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ext/ext.tex ! ! lib/lib.html: $(LIBFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/lib/lib.tex mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/mac/mac.tex ! ref/ref.html: $(REFFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ref/ref.tex ! ! tut/tut.html: $(TUTFILES) $(TOOLSDIR)/mkhowto ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html --numeric --split 3 $(TOPDIR)/tut/tut.tex ! inst/inst.html: $(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ --html $(TOPDIR)/dist/dist.tex webcheck: all $(WEBCHECKER) $(HTMLBASE)/api/ *************** *** 131,144 **** $(WEBCHECKER) $(HTMLBASE)/inst/ - wcnew: all - $(WCNEW) $(HTMLBASE)/api/ - $(WCNEW) $(HTMLBASE)/doc/ - $(WCNEW) $(HTMLBASE)/ext/ - $(WCNEW) -m290000 $(HTMLBASE)/lib/ - $(WCNEW) $(HTMLBASE)/mac/ - $(WCNEW) $(HTMLBASE)/ref/ - $(WCNEW) $(HTMLBASE)/tut/ - - clean: rm -rf @webchecker.pickle --- 110,113 ---- *************** *** 155,159 **** BOILERPLATE=$(TOPDIR)/texinputs/boilerplate.tex ! index.html: index.html.in $(BOILERPLATE) REL=`grep '\\release{' $(BOILERPLATE) | sed 's/.*\\release{\(.*\)}.*$$/\1/'`; \ REL=`echo "$$REL" | sed 's/[$$]//g'`; \ --- 124,128 ---- BOILERPLATE=$(TOPDIR)/texinputs/boilerplate.tex ! index.html: $(TOPDIR)/html/index.html.in $(BOILERPLATE) REL=`grep '\\release{' $(BOILERPLATE) | sed 's/.*\\release{\(.*\)}.*$$/\1/'`; \ REL=`echo "$$REL" | sed 's/[$$]//g'`; \ *************** *** 163,165 **** sed "s/@DATE@/$$DATE/g" TEMP >$@ rm -f TEMP - --- 132,133 ---- From python-dev@python.org Thu Aug 31 07:14:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:14:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkhowto,1.12,1.13 Message-ID: <200008310614.XAA21940@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv21931/tools Modified Files: mkhowto Log Message: Add --l2h-init option, which can augment the standard LaTeX2HTML initialization with additional Perl files. This can be given more than once. Index: mkhowto =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tools/mkhowto,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** mkhowto 2000/08/29 18:15:05 1.12 --- mkhowto 2000/08/31 06:14:38 1.13 *************** *** 98,101 **** --- 98,102 ---- def __init__(self): self.formats = [] + self.l2h_init_files = [] def __getitem__(self, key): *************** *** 109,113 **** opts, args = getopt.getopt(args, "Hi:a:s:lDkqr:", ["all", "postscript", "help", "iconserver=", ! "address=", "a4", "letter", "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", --- 110,114 ---- opts, args = getopt.getopt(args, "Hi:a:s:lDkqr:", ["all", "postscript", "help", "iconserver=", ! "address=", "a4", "letter", "l2h-init=", "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", *************** *** 152,155 **** --- 153,158 ---- elif opt == "--style": self.style_file = os.path.abspath(arg) + elif opt == "--l2h-init": + self.l2h_init_files.append(os.path.abspath(arg)) # # Format specifiers: *************** *** 304,308 **** def use_latex_manual(self, binary): ! pass def process_synopsis_files(self): --- 307,311 ---- def use_latex_manual(self, binary): ! self.use_latex_howto(binary) def process_synopsis_files(self): *************** *** 365,368 **** --- 368,372 ---- def write_l2h_aux_init_file(self): + options = self.options fp = open(self.l2h_aux_init_file, "w") d = string_to_perl(os.path.dirname(L2H_INIT_FILE)) *************** *** 372,375 **** --- 376,384 ---- % (d, d)) fp.write(open(L2H_INIT_FILE).read()) + for filename in options.l2h_init_files: + fp.write("\n# initialization code incorporated from:\n# ") + fp.write(filename) + fp.write("\n") + fp.write(open(filename).read()) fp.write("\n" "# auxillary init file for latex2html\n" *************** *** 377,381 **** "$NO_AUTO_LINK = 1;\n" ) - options = self.options l2hoption(fp, "ABOUT_FILE", options.about_file) l2hoption(fp, "ICONSERVER", options.icon_server) --- 386,389 ---- From python-dev@python.org Thu Aug 31 07:15:32 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:15:32 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkdvi.sh,1.8,NONE mkhtml.sh,1.13,NONE newind.py,1.3,NONE Message-ID: <200008310615.XAA22077@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv22068 Removed Files: mkdvi.sh mkhtml.sh newind.py Log Message: Remove obsolete scripts. --- mkdvi.sh DELETED --- --- mkhtml.sh DELETED --- --- newind.py DELETED --- From python-dev@python.org Thu Aug 31 07:22:56 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:22:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.80,1.81 Message-ID: <200008310622.XAA22772@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv22765/perl Modified Files: python.perl Log Message: Push some table header formatting to the style sheet; this also helps separate some of the ties between l2hinit.perl and python.perl. Revamp the "title page" construction to allow more flexibility. Index: python.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v retrieving revision 1.80 retrieving revision 1.81 diff -C2 -r1.80 -r1.81 *** python.perl 2000/08/11 20:04:19 1.80 --- python.perl 2000/08/31 06:22:54 1.81 *************** *** 933,938 **** @col_aligns = ('', '', '', ''); - $TABLE_HEADER_BGCOLOR = $NAV_BGCOLOR; - sub fix_font{ # do a little magic on a font name to get the right behavior in the first --- 933,936 ---- *************** *** 1011,1015 **** return '' . "\n " ! . "\n " . "\n $th1$h1\ " . "\n $th2$h2\ " --- 1009,1013 ---- return '
    ' . "\n " ! . "\n " . "\n $th1$h1\ " . "\n $th2$h2\ " *************** *** 1136,1145 **** } ! sub do_cmd_maketitle { ! local($_) = @_; ! my $the_title = "\n
    "; if ($t_title) { $the_title .= "\n

    $t_title

    "; ! } else { write_warnings("\nThis document has no title."); } if ($t_author) { if ($t_authorURL) { --- 1134,1164 ---- } ! ! # These can be used to control the title page appearance; ! # they need a little bit of documentation. ! # ! # If $TITLE_PAGE_GRAPHIC is set, it should be the name of a file in the ! # $ICONSERVER directory, or include path information (other than "./"). The ! # default image type will be assumed if an extension is not provided. ! # ! # If specified, the "title page" will contain two colums: one containing the ! # title/author/etc., and the other containing the graphic. Use the other ! # four variables listed here to control specific details of the layout; all ! # are optional. ! # ! # $TITLE_PAGE_GRAPHIC = "my-company-logo"; ! # $TITLE_PAGE_GRAPHIC_COLWIDTH = "30%"; ! # $TITLE_PAGE_GRAPHIC_WIDTH = 150; ! # $TITLE_PAGE_GRAPHIC_HEIGHT = 150; ! # $TITLE_PAGE_GRAPHIC_ON_RIGHT = 0; ! ! sub make_my_titlepage() { ! my $the_title = ""; if ($t_title) { $the_title .= "\n

    $t_title

    "; ! } ! else { ! write_warnings("\nThis document has no title."); ! } if ($t_author) { if ($t_authorURL) { *************** *** 1148,1173 **** "$t_author"); $the_title .= "\n

    $href

    "; ! } else { $the_title .= ("\n

    $t_author

    "); } ! } else { write_warnings("\nThere is no author for this document."); } if ($t_institute) { ! $the_title .= "\n

    $t_institute

    ";} if ($DEVELOPER_ADDRESS) { ! $the_title .= "\n

    $DEVELOPER_ADDRESS

    ";} if ($t_affil) { ! $the_title .= "\n

    $t_affil

    ";} if ($t_date) { $the_title .= "\n

    $t_date"; if ($PYTHON_VERSION) { ! $the_title .= "
    Release $PYTHON_VERSION";} $the_title .= "

    " } if ($t_address) { $the_title .= "\n

    $t_address

    "; ! } else { $the_title .= "\n

    "} if ($t_email) { $the_title .= "\n

    $t_email

    "; ! }# else { $the_title .= "

    " } $the_title .= "\n
    "; return $the_title . $_ ; --- 1167,1255 ---- "$t_author"); $the_title .= "\n

    $href

    "; ! } ! else { $the_title .= ("\n

    $t_author

    "); } ! } ! else { ! write_warnings("\nThere is no author for this document."); ! } if ($t_institute) { ! $the_title .= "\n

    $t_institute

    "; ! } if ($DEVELOPER_ADDRESS) { ! $the_title .= "\n

    $DEVELOPER_ADDRESS

    "; ! } if ($t_affil) { ! $the_title .= "\n

    $t_affil

    "; ! } if ($t_date) { $the_title .= "\n

    $t_date"; if ($PYTHON_VERSION) { ! $the_title .= "
    Release $PYTHON_VERSION"; ! } $the_title .= "

    " } if ($t_address) { $the_title .= "\n

    $t_address

    "; ! } ! else { ! $the_title .= "\n

    "; ! } if ($t_email) { $the_title .= "\n

    $t_email

    "; ! } ! return $the_title; ! } ! ! use File::Basename; ! ! sub make_my_titlegraphic() { ! my($myname, $mydir, $myext) = fileparse($TITLE_PAGE_GRAPHIC, '\..*'); ! chop $mydir; ! if ($mydir eq '.') { ! $mydir = $ICONSERVER; ! } ! $myext = ".$IMAGE_TYPE" ! unless $myext; ! my $graphic = "\n"; ! return $graphic; ! } ! ! sub do_cmd_maketitle { ! local($_) = @_; ! my $the_title = "\n
    "; ! if ($TITLE_PAGE_GRAPHIC) { ! if ($TITLE_PAGE_GRAPHIC_ON_RIGHT) { ! $the_title .= ("\n
    " ! . "\n\n" ! . make_my_titlegraphic() ! . "\n
    " ! . make_my_titlepage() ! . "
    "); ! } ! else { ! $the_title .= ("\n\n" ! . make_my_titlegraphic() ! . "\n
    " ! . make_my_titlepage() ! . "
    "); ! } ! } ! else { ! $the_title .= ("\n
    " ! . make_my_titlepage() ! . "\n
    "); ! } ! $the_title .= "\n"; ! return $the_title . $_; $the_title .= "\n"; return $the_title . $_ ; From python-dev@python.org Thu Aug 31 07:58:37 2000 From: python-dev@python.org (Fred L. Drake) Date: Wed, 30 Aug 2000 23:58:37 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/tools mkhowto,1.13,1.14 Message-ID: <200008310658.XAA25294@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/tools In directory slayer.i.sourceforge.net:/tmp/cvs-serv25287/tools Modified Files: mkhowto Log Message: Add --up-link and --up-title parameters to allow linking the top level of the generated document to an external index. These correspond to the -up_url and -up_title parameters of LaTeX2HTML. Index: mkhowto =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/tools/mkhowto,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** mkhowto 2000/08/31 06:14:38 1.13 --- mkhowto 2000/08/31 06:58:34 1.14 *************** *** 23,26 **** --- 23,28 ---- --style Specify the CSS file to use for the output (filename, not a URL). + --up-link URL to a parent document. + --up-title Title of a parent document. Other options: *************** *** 92,95 **** --- 94,99 ---- style_file = os.path.join(TOPDIR, "html", "style.css") about_file = os.path.join(TOPDIR, "html", "about.dat") + up_link = None + up_title = None # DEFAULT_FORMATS = ("pdf",) *************** *** 113,117 **** "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric", "style="] + list(self.ALL_FORMATS)) for opt, arg in opts: --- 117,122 ---- "link=", "split=", "logging", "debugging", "keep", "quiet", "runs=", "image-type=", ! "about=", "numeric", "style=", ! "up-link=", "up-title="] + list(self.ALL_FORMATS)) for opt, arg in opts: *************** *** 155,158 **** --- 160,167 ---- elif opt == "--l2h-init": self.l2h_init_files.append(os.path.abspath(arg)) + elif opt == "--up-link": + self.up_link = arg + elif opt == "--up-title": + self.up_title = arg # # Format specifiers: *************** *** 392,395 **** --- 401,406 ---- l2hoption(fp, "MAX_LINK_DEPTH", options.max_link_depth) l2hoption(fp, "MAX_SPLIT_DEPTH", options.max_split_depth) + l2hoption(fp, "EXTERNAL_UP_LINK", options.up_link) + l2hoption(fp, "EXTERNAL_UP_TITLE", options.up_title) fp.write("1;\n") fp.close() From python-dev@python.org Thu Aug 31 08:00:20 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 00:00:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html Makefile,1.35,1.36 Message-ID: <200008310700.AAA26393@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv26119/html Modified Files: Makefile Log Message: Move common parameters to mkhowto to a variable, add up-link from the generated documents to the document index. Index: Makefile =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/Makefile,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** Makefile 2000/08/31 06:12:35 1.35 --- Makefile 2000/08/31 07:00:17 1.36 *************** *** 13,17 **** PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! MKHOWTO= $(TOOLSDIR)/mkhowto BUILDINDEX=$(TOOLSDIR)/buildindex.py --- 13,20 ---- PYTHON= python WEBCHECKER=$(PYTHON) $(TOPDIR)/../Tools/webchecker/webchecker.py ! MKHOWTO= $(TOOLSDIR)/mkhowto --about $(TOPDIR)/html/stdabout.dat \ ! --up-link ../index.html --up-title "Document Index" \ ! --address $(PYTHONDOCS) ! MKHTML= $(MKHOWTO) --html BUILDINDEX=$(TOOLSDIR)/buildindex.py *************** *** 63,101 **** api/api.html: $(APIFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/api/api.tex doc/doc.html: $(DOCFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/doc/doc.tex ext/ext.html: $(EXTFILES) echo $(EXTFILES) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ext/ext.tex lib/lib.html: $(LIBFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/lib/lib.tex mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/mac/mac.tex ref/ref.html: $(REFFILES) $(BUILDINDEX) ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/ref/ref.tex tut/tut.html: $(TUTFILES) $(TOOLSDIR)/mkhowto ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html --numeric --split 3 $(TOPDIR)/tut/tut.tex inst/inst.html: $(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHOWTO) --about stdabout.dat --address $(PYTHONDOCS) \ ! --html $(TOPDIR)/dist/dist.tex webcheck: all --- 66,95 ---- api/api.html: $(APIFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/api/api.tex doc/doc.html: $(DOCFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/doc/doc.tex ext/ext.html: $(EXTFILES) echo $(EXTFILES) ! $(MKHTML) $(TOPDIR)/ext/ext.tex lib/lib.html: $(LIBFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/lib/lib.tex mac/mac.html: $(MACFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/mac/mac.tex ref/ref.html: $(REFFILES) $(BUILDINDEX) ! $(MKHTML) $(TOPDIR)/ref/ref.tex tut/tut.html: $(TUTFILES) $(TOOLSDIR)/mkhowto ! $(MKHTML) --numeric --split 3 $(TOPDIR)/tut/tut.tex inst/inst.html: $(INSTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHTML) $(TOPDIR)/inst/inst.tex dist/dist.html:$(DISTFILES) $(TOPDIR)/perl/distutils.perl ! $(MKHTML) $(TOPDIR)/dist/dist.tex webcheck: all From python-dev@python.org Thu Aug 31 08:02:28 2000 From: python-dev@python.org (Thomas Wouters) Date: Thu, 31 Aug 2000 00:02:28 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects abstract.c,2.49,2.50 Message-ID: <200008310702.AAA32318@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv29018/Objects Modified Files: abstract.c Log Message: Fix grouping: this is how I intended it, misguided as I was in boolean operator associativity. Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.49 retrieving revision 2.50 diff -C2 -r2.49 -r2.50 *** abstract.c 2000/08/31 05:15:44 2.49 --- abstract.c 2000/08/31 07:02:19 2.50 *************** *** 814,819 **** return x; } ! else if ((HASINPLACE(v) ! && (v->ob_type->tp_as_sequence != NULL && (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL)) || (v->ob_type->tp_as_number != NULL && --- 814,819 ---- return x; } ! else if (HASINPLACE(v) ! && ((v->ob_type->tp_as_sequence != NULL && (f = v->ob_type->tp_as_sequence->sq_inplace_concat) != NULL)) || (v->ob_type->tp_as_number != NULL && From python-dev@python.org Thu Aug 31 08:15:59 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 00:15:59 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/html style.css,1.7,1.8 Message-ID: <200008310715.AAA02945@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/html In directory slayer.i.sourceforge.net:/tmp/cvs-serv2938/html Modified Files: style.css Log Message: Always room to remove more formatting from the HTML! Index: style.css =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/html/style.css,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** style.css 2000/08/30 15:02:13 1.7 --- style.css 2000/08/31 07:15:57 1.8 *************** *** 38,44 **** font-weight: normal } ! .navigation .title { font-family: avantgarde, sans-serif; font-size: 110% } - .navigation td { background-color: #99ccff; } .titlegraphic { vertical-align: top; } --- 38,45 ---- font-weight: normal } ! .navigation td { background-color: #99ccff; ! font-weight: bold; ! font-family: avantgarde, sans-serif; font-size: 110% } .titlegraphic { vertical-align: top; } From python-dev@python.org Thu Aug 31 08:19:09 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 00:19:09 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/perl l2hinit.perl,1.44,1.45 Message-ID: <200008310719.AAA03118@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/perl In directory slayer.i.sourceforge.net:/tmp/cvs-serv3109/perl Modified Files: l2hinit.perl Log Message: Be a little more careful to avoid including style information in the generated markup. Don't be careless with the navigation icons! We should use the blank icon where there is not anyplace to go for a particular position in the navigation bar. Index: l2hinit.perl =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/perl/l2hinit.perl,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -r1.44 -r1.45 *** l2hinit.perl 2000/07/31 20:13:23 1.44 --- l2hinit.perl 2000/08/31 07:19:07 1.45 *************** *** 19,22 **** --- 19,23 ---- $ICONSERVER = '../icons'; + $IMAGE_TYPE = 'gif'; # Control where the navigation bars should show up: *************** *** 94,98 **** $CUSTOM_BUTTONS = ''; - $NAV_BGCOLOR = " bgcolor=\"#99CCFF\""; sub make_nav_sectref { --- 95,98 ---- *************** *** 112,116 **** } ! $BLANK_ICON = make_my_icon("blank", ""); @my_icons = (); --- 112,116 ---- } ! $BLANK_ICON = make_my_icon('blank', ''); @my_icons = (); *************** *** 118,131 **** $my_icons{'previous_page_inactive'} = $BLANK_ICON; $my_icons{'up_page_inactive'} = $BLANK_ICON; ! $x = make_my_icon("next", "Next Page"); $my_icons{'next_page'} = $x; $my_icons{'next'} = $x; ! $x = make_my_icon("previous", "Previous Page"); $my_icons{'previous_page'} = $x; $my_icons{'previous'} = $x; ! $my_icons{'up'} = make_my_icon("up", "Up One Level"); ! $my_icons{'contents'} = make_my_icon("contents", "Contents"); ! $my_icons{'index'} = make_my_icon("index", "Index"); ! $my_icons{'modules'} = make_my_icon("modules", "Module Index"); --- 118,131 ---- $my_icons{'previous_page_inactive'} = $BLANK_ICON; $my_icons{'up_page_inactive'} = $BLANK_ICON; ! $x = make_my_icon('next', 'Next Page'); $my_icons{'next_page'} = $x; $my_icons{'next'} = $x; ! $x = make_my_icon('previous', 'Previous Page'); $my_icons{'previous_page'} = $x; $my_icons{'previous'} = $x; ! $my_icons{'up'} = make_my_icon('up', 'Up One Level'); ! $my_icons{'contents'} = make_my_icon('contents', 'Contents'); ! $my_icons{'index'} = make_my_icon('index', 'Index'); ! $my_icons{'modules'} = make_my_icon('modules', 'Module Index'); *************** *** 138,144 **** sub make_nav_panel { my $s; ! $NEXT = use_my_icon("$NEXT"); ! $UP = use_my_icon("$UP"); ! $PREVIOUS = use_my_icon("$PREVIOUS"); $CONTENTS = use_my_icon("$CONTENTS"); $INDEX = $INDEX ? use_my_icon("$INDEX") : $BLANK_ICON; --- 138,144 ---- sub make_nav_panel { my $s; ! $NEXT = $NEXT_TITLE ? use_my_icon("$NEXT") : $BLANK_ICON; ! $UP = $UP_TITLE ? use_my_icon("$UP") : $BLANK_ICON; ! $PREVIOUS = $PREVIOUS_TITLE ? use_my_icon("$PREVIOUS") : $BLANK_ICON; $CONTENTS = use_my_icon("$CONTENTS"); $INDEX = $INDEX ? use_my_icon("$INDEX") : $BLANK_ICON; *************** *** 153,158 **** . "\n$NEXT" # title box ! . "\n" ! . "\n $t_title" # right-hand side . "\n$CONTENTS" --- 153,157 ---- . "\n$NEXT" # title box ! . "\n$t_title" # right-hand side . "\n$CONTENTS" From python-dev@python.org Thu Aug 31 11:27:02 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 31 Aug 2000 03:27:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib xmllib.py,1.22,1.23 Message-ID: <200008311027.DAA23531@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv21576/Lib Modified Files: xmllib.py Log Message: New method getnamespace. Since the application never gets to see the namespace abbreviation used in the XML document, but some applications may need to know them, we provide this method. Index: xmllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/xmllib.py,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** xmllib.py 2000/07/16 12:04:30 1.22 --- xmllib.py 2000/08/31 10:26:52 1.23 *************** *** 223,226 **** --- 223,233 ---- i = s + len(str) + # Interface - return a dictionary of all namespaces currently valid + def getnamespace(self): + nsdict = {} + for t, d, nst in self.stack: + nsdict.update(d) + return nsdict + # Internal -- handle data as far as reasonable. May leave state # and data to be processed by a subsequent call. If 'end' is From python-dev@python.org Thu Aug 31 11:27:02 2000 From: python-dev@python.org (Sjoerd Mullender) Date: Thu, 31 Aug 2000 03:27:02 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libxmllib.tex,1.25,1.26 Message-ID: <200008311027.DAA23530@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv21576/Doc/lib Modified Files: libxmllib.tex Log Message: New method getnamespace. Since the application never gets to see the namespace abbreviation used in the XML document, but some applications may need to know them, we provide this method. Index: libxmllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libxmllib.tex,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** libxmllib.tex 2000/08/11 20:34:27 1.25 --- libxmllib.tex 2000/08/31 10:27:00 1.26 *************** *** 93,96 **** --- 93,101 ---- \end{methoddesc} + \begin{methoddesc}{getnamespace}{} + Return a mapping of namespace abbreviations to namespace URIs that are + currently in effect. + \end{methoddesc} + \begin{methoddesc}{handle_xml}{encoding, standalone} This method is called when the \samp{} tag is processed. From python-dev@python.org Thu Aug 31 11:45:56 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 31 Aug 2000 03:45:56 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib gettext.py,1.4,1.5 Message-ID: <200008311045.DAA11356@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv11272 Modified Files: gettext.py Log Message: GNUTranslations.BE_MAGIC: don't be so clever in calculating this from LE_MAGIC; it breaks on Tru64. Index: gettext.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** gettext.py 2000/08/30 03:29:58 1.4 --- gettext.py 2000/08/31 10:45:54 1.5 *************** *** 126,130 **** # Magic number of .mo files LE_MAGIC = 0x950412de ! BE_MAGIC = struct.unpack('>i', struct.pack(' Update of /cvsroot/python/distutils/doc/dist In directory slayer.i.sourceforge.net:/tmp/cvs-serv27409/dist Modified Files: dist.tex Log Message: Get rid of "sec:" prefix that slipped into a couple of \label's. Index: dist.tex =================================================================== RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -r1.20 -r1.21 *** dist.tex 2000/08/06 20:37:24 1.20 --- dist.tex 2000/08/31 14:47:05 1.21 *************** *** 346,350 **** \subsection{Describing extension modules} ! \label{sec:describing-extensions} Just as writing Python extension modules is a bit more complicated than --- 346,350 ---- \subsection{Describing extension modules} ! \label{describing-extensions} Just as writing Python extension modules is a bit more complicated than *************** *** 888,899 **** \subsubsection{\protect\command{install\_lib}} ! \label{sec:install-lib-cmd} \subsubsection{\protect\command{install\_data}} ! \label{sec:install-data-cmd} This command installs all data files provided with the distribution. \subsubsection{\protect\command{install\_scripts}} ! \label{sec:install-scripts-cmd} This command installs all (Python) scripts in the distribution. --- 888,899 ---- \subsubsection{\protect\command{install\_lib}} ! \label{install-lib-cmd} \subsubsection{\protect\command{install\_data}} ! \label{install-data-cmd} This command installs all data files provided with the distribution. \subsubsection{\protect\command{install\_scripts}} ! \label{install-scripts-cmd} This command installs all (Python) scripts in the distribution. From python-dev@python.org Thu Aug 31 16:10:31 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:10:31 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules gcmodule.c,2.7,2.8 Message-ID: <200008311510.IAA14878@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv13569/Modules Modified Files: gcmodule.c Log Message: apply patch #101362 by Vladimir Marangozov also initial static debug variable to 0 Index: gcmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v retrieving revision 2.7 retrieving revision 2.8 diff -C2 -r2.7 -r2.8 *** gcmodule.c 2000/08/06 22:45:30 2.7 --- gcmodule.c 2000/08/31 15:10:24 2.8 *************** *** 58,62 **** DEBUG_INSTANCES | \ DEBUG_OBJECTS ! static int debug; /* list of uncollectable objects */ --- 58,62 ---- DEBUG_INSTANCES | \ DEBUG_OBJECTS ! static int debug = 0; /* list of uncollectable objects */ *************** *** 223,229 **** PyGC_Head *next; PyGC_Head *gc = unreachable->gc_next; ! static PyObject *delstr; if (delstr == NULL) { delstr = PyString_InternFromString("__del__"); } for (; gc != unreachable; gc=next) { --- 223,231 ---- PyGC_Head *next; PyGC_Head *gc = unreachable->gc_next; ! static PyObject *delstr = NULL; if (delstr == NULL) { delstr = PyString_InternFromString("__del__"); + if (delstr == NULL) + Py_FatalError("PyGC: can't initialize __del__ string"); } for (; gc != unreachable; gc=next) { *************** *** 269,275 **** static void ! debug_instance(PyObject *output, char *msg, PyInstanceObject *inst) { - char buf[200]; char *cname; /* be careful not to create new dictionaries */ --- 271,276 ---- static void ! debug_instance(char *msg, PyInstanceObject *inst) { char *cname; /* be careful not to create new dictionaries */ *************** *** 279,296 **** else cname = "?"; ! sprintf(buf, "gc: %s<%.100s instance at %p>\n", msg, cname, inst); ! PyFile_WriteString(buf, output); } static void ! debug_cycle(PyObject *output, char *msg, PyObject *op) { if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) { ! debug_instance(output, msg, (PyInstanceObject *)op); } else if (debug & DEBUG_OBJECTS) { ! char buf[200]; ! sprintf(buf, "gc: %s<%.100s %p>\n", msg, ! op->ob_type->tp_name, op); ! PyFile_WriteString(buf, output); } } --- 280,295 ---- else cname = "?"; ! PySys_WriteStderr("gc: %.100s <%.100s instance at %p>\n", ! msg, cname, inst); } static void ! debug_cycle(char *msg, PyObject *op) { if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) { ! debug_instance(msg, (PyInstanceObject *)op); } else if (debug & DEBUG_OBJECTS) { ! PySys_WriteStderr("gc: %.100s <%.100s %p>\n", ! msg, op->ob_type->tp_name, op); } } *************** *** 358,375 **** PyGC_Head finalizers; PyGC_Head *gc; - PyObject *output = NULL; - if (debug) { - output = PySys_GetObject("stderr"); - } if (debug & DEBUG_STATS) { ! char buf[100]; ! sprintf(buf, "gc: collecting generation %d...\n", generation); ! PyFile_WriteString(buf,output); ! sprintf(buf, "gc: objects in each generation: %ld %ld %ld\n", gc_list_size(&generation0), gc_list_size(&generation1), gc_list_size(&generation2)); - PyFile_WriteString(buf,output); } --- 357,369 ---- PyGC_Head finalizers; PyGC_Head *gc; if (debug & DEBUG_STATS) { ! PySys_WriteStderr( ! "gc: collecting generation %d...\n" ! "gc: objects in each generation: %ld %ld %ld\n", ! generation, gc_list_size(&generation0), gc_list_size(&generation1), gc_list_size(&generation2)); } *************** *** 409,414 **** gc = gc->gc_next) { m++; ! if (output != NULL && (debug & DEBUG_COLLECTABLE)) { ! debug_cycle(output, "collectable ", PyObject_FROM_GC(gc)); } } --- 403,408 ---- gc = gc->gc_next) { m++; ! if (debug & DEBUG_COLLECTABLE) { ! debug_cycle("collectable", PyObject_FROM_GC(gc)); } } *************** *** 423,439 **** gc = gc->gc_next) { n++; ! if (output != NULL && (debug & DEBUG_UNCOLLECTABLE)) { ! debug_cycle(output, "uncollectable ", PyObject_FROM_GC(gc)); } } ! if (output != NULL && (debug & DEBUG_STATS)) { if (m == 0 && n == 0) { ! PyFile_WriteString("gc: done.\n", output); } else { ! char buf[200]; ! sprintf(buf, ! "gc: done, %ld unreachable, %ld uncollectable.\n", ! n+m, n); ! PyFile_WriteString(buf, output); } } --- 417,431 ---- gc = gc->gc_next) { n++; ! if (debug & DEBUG_UNCOLLECTABLE) { ! debug_cycle("uncollectable", PyObject_FROM_GC(gc)); } } ! if (debug & DEBUG_STATS) { if (m == 0 && n == 0) { ! PySys_WriteStderr("gc: done.\n"); } else { ! PySys_WriteStderr( ! "gc: done, %ld unreachable, %ld uncollectable.\n", ! n+m, n); } } *************** *** 445,449 **** allocated = 0; - PyErr_Clear(); /* in case writing to sys.stderr failed */ return n+m; } --- 437,440 ---- From python-dev@python.org Thu Aug 31 16:21:15 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 08:21:15 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python sysmodule.c,2.75,2.76 Message-ID: <200008311521.IAA24764@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv24711/Python Modified Files: sysmodule.c Log Message: _PySys_Init(): When setting up sys.version_info, use #if/#elif.../#endif instead of four #if/#endif blocks. This shortens the code and improves readability. Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.75 retrieving revision 2.76 diff -C2 -r2.75 -r2.76 *** sysmodule.c 2000/08/16 23:03:57 2.75 --- sysmodule.c 2000/08/31 15:21:11 2.76 *************** *** 421,432 **** #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_ALPHA s = "alpha"; ! #endif ! #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_BETA s = "beta"; ! #endif ! #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_GAMMA s = "candidate"; ! #endif ! #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_FINAL s = "final"; #endif --- 421,429 ---- #if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_ALPHA s = "alpha"; ! #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_BETA s = "beta"; ! #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_GAMMA s = "candidate"; ! #elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_FINAL s = "final"; #endif From python-dev@python.org Thu Aug 31 16:29:41 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 08:29:41 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc README,1.40,1.41 Message-ID: <200008311529.IAA32571@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc In directory slayer.i.sourceforge.net:/tmp/cvs-serv32560/Doc Modified Files: README Log Message: Update some version information for tools based on prodding from Greg Ward. Index: README =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/README,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** README 2000/07/31 17:56:58 1.40 --- README 2000/08/31 15:29:38 1.41 *************** *** 78,88 **** The simplest way to get the rest of the tools in the configuration we ! used is to install the teTeX TeX distribution, version 0.4 or 0.9. More ! information is available on teTeX at . ! This is a Unix-only TeX distribution at this time. Note that the 0.9 ! release is still in testing; this documentation release was tested ! with the 9 Feb 1999 release. We'll be upgrading to the final version ! when it becomes available. Except for the PDF generation, there are ! no known problems with using the ("stable") teTeX 0.4 release. If you don't want to get teTeX, here is what you'll need: --- 78,87 ---- The simplest way to get the rest of the tools in the configuration we ! used is to install the teTeX TeX distribution, versions 0.9 or newer. ! More information is available on teTeX at . ! This is a Unix-only TeX distribution at this time. This documentation ! release was tested with the 1.0.7 release, but there have been no ! substantial changes since late in the 0.9 series, which we used ! extensively for previous versions without any difficulty. If you don't want to get teTeX, here is what you'll need: *************** *** 98,106 **** To create PDF files: ! - pdflatex. We used the one in the teTeX 0.9 distribution ! (pdfTeX version 3.14159-13b (Web2C 7.3beta4) at the time of ! this writing). Versions even a couple of patchlevels ! earlier are highly likely to fail due to syntax changes for ! some of the pdftex primitives. To create PostScript files: --- 97,105 ---- To create PDF files: ! - pdflatex. We used the one in the teTeX distribution (pdfTeX ! version 3.14159-13d (Web2C 7.3.1) at the time of this ! writing). Versions even a couple of patchlevels earlier are ! highly likely to fail due to syntax changes for some of the ! pdftex primitives. To create PostScript files: From python-dev@python.org Thu Aug 31 16:48:12 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:48:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_urllib.py,NONE,1.1 Message-ID: <200008311548.IAA03056@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv2765/Lib/test Added Files: test_urllib.py Log Message: fixes bug #111951 applies patch #101369 by Moshe Zadke use explicit list of always safe characters instead of string.letters add test case --- NEW FILE --- # Minimal test of the quote function import urllib chars = 'abcdefghijklmnopqrstuvwxyz'\ '\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356' \ '\357\360\361\362\363\364\365\366\370\371\372\373\374\375\376\377' \ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \ '\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317' \ '\320\321\322\323\324\325\326\330\331\332\333\334\335\336' expected = 'abcdefghijklmnopqrstuvwxyz%df%e0%e1%e2%e3%e4%e5%e6%e7%e8%e9%ea%eb%ec%ed%ee%ef%f0%f1%f2%f3%f4%f5%f6%f8%f9%fa%fb%fc%fd%fe%ffABCDEFGHIJKLMNOPQRSTUVWXYZ%c0%c1%c2%c3%c4%c5%c6%c7%c8%c9%ca%cb%cc%cd%ce%cf%d0%d1%d2%d3%d4%d5%d6%d8%d9%da%db%dc%dd%de' test = urllib.quote(chars) assert test == expected, "urllib.quote problem" From python-dev@python.org Thu Aug 31 16:48:12 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:48:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_urllib,NONE,1.1 Message-ID: <200008311548.IAA03060@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv2765/Lib/test/output Added Files: test_urllib Log Message: fixes bug #111951 applies patch #101369 by Moshe Zadke use explicit list of always safe characters instead of string.letters add test case --- NEW FILE --- test_urllib From python-dev@python.org Thu Aug 31 16:48:12 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 08:48:12 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib urllib.py,1.103,1.104 Message-ID: <200008311548.IAA03057@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv2765/Lib Modified Files: urllib.py Log Message: fixes bug #111951 applies patch #101369 by Moshe Zadke use explicit list of always safe characters instead of string.letters add test case Index: urllib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v retrieving revision 1.103 retrieving revision 1.104 diff -C2 -r1.103 -r1.104 *** urllib.py 2000/08/25 11:23:36 1.103 --- urllib.py 2000/08/31 15:48:09 1.104 *************** *** 1012,1016 **** return unquote(s) ! always_safe = string.letters + string.digits + '_,.-' def quote(s, safe = '/'): """quote('abc def') -> 'abc%20def'.""" --- 1012,1018 ---- return unquote(s) ! always_safe = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' ! 'abcdefghijklmnopqrstuvwxyz' ! '0123456789' '_,.-') def quote(s, safe = '/'): """quote('abc def') -> 'abc%20def'.""" *************** *** 1043,1047 **** l.append(k + '=' + v) return string.join(l, '&') - # Proxy handling --- 1045,1048 ---- From python-dev@python.org Thu Aug 31 17:11:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:11:10 -0700 Subject: [Python-checkins] CVS: python/dist/src acconfig.h,1.36,1.37 configure.in,1.151,1.152 Message-ID: <200008311611.JAA07916@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv7894 Modified Files: acconfig.h configure.in Log Message: Skip Montanaro : Update the build structures to automatically detect the presence of BSD db, including the proper name of the header file to include. Has all the expected niceties associated with yet-more-configure-options. ;) This checkin includes changes for non-generated files only; subsequent checkin will catch those. This is part of SourceForge patch #101272. Index: acconfig.h =================================================================== RCS file: /cvsroot/python/python/dist/src/acconfig.h,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** acconfig.h 2000/08/30 22:29:47 1.36 --- acconfig.h 2000/08/31 16:11:07 1.37 *************** *** 152,155 **** --- 152,158 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to use BSD db. */ + #undef WITH_LIBDB + /* Define if you want to build an interpreter with many run-time checks */ #undef Py_DEBUG Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.151 retrieving revision 1.152 diff -C2 -r1.151 -r1.152 *** configure.in 2000/08/30 22:29:48 1.151 --- configure.in 2000/08/31 16:11:07 1.152 *************** *** 370,374 **** AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ ! sys/audioio.h sys/file.h sys/lock.h \ sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h) --- 370,374 ---- AC_CHECK_HEADERS(dlfcn.h fcntl.h limits.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h \ ! sys/audioio.h sys/file.h sys/lock.h db_185.h db.h \ sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \ sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h) *************** *** 812,815 **** --- 812,839 ---- fi AC_MSG_RESULT($with_cycle_gc) + + # Check for LIBDB support + # either --with-libdb or, in its absence, the presence of db.h + AC_SUBST(USE_BSDDB_MODULE) + USE_BSDDB_MODULE="" + AC_MSG_CHECKING(for --with-libdb) + AC_ARG_WITH(libdb, + [ --with(out)-libdb disable/enable bsddb module]) + + # default is enabled + if test -z "$with_libdb" + then with_libdb="yes" + fi + # if we found db.h, enable, unless with_libdb is expressly set to "no" + if test "$ac_cv_header_db_h" = "yes" -a "$with_libdb" != "no" + then with_libdb="yes" + fi + if test "$with_libdb" = "no" + then + USE_BSDDB_MODULE="#" + else + AC_DEFINE(WITH_LIBDB) + fi + AC_MSG_RESULT($with_libdb) # Check for --with-wctype-functions From python-dev@python.org Thu Aug 31 17:11:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:11:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Setup.config.in,1.2,1.3 Setup.in,1.108,1.109 bsddbmodule.c,1.23,1.24 Message-ID: <200008311611.JAA07917@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv7894/Modules Modified Files: Setup.config.in Setup.in bsddbmodule.c Log Message: Skip Montanaro : Update the build structures to automatically detect the presence of BSD db, including the proper name of the header file to include. Has all the expected niceties associated with yet-more-configure-options. ;) This checkin includes changes for non-generated files only; subsequent checkin will catch those. This is part of SourceForge patch #101272. Index: Setup.config.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.config.in,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Setup.config.in 2000/08/26 11:34:29 1.2 --- Setup.config.in 2000/08/31 16:11:07 1.3 *************** *** 9,10 **** --- 9,19 ---- # Garbage collection enabled with --with-cycle-gc @USE_GC_MODULE@gc gcmodule.c + + # You may want this to be built as a dynamically loaded module; uncomment + # the following line in that case: + + #*shared* + + # bsddb module enabled by --with-libdb or presence of db.h + @USE_BSDDB_MODULE@bsddb bsddbmodule.c -ldb + Index: Setup.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Setup.in,v retrieving revision 1.108 retrieving revision 1.109 diff -C2 -r1.108 -r1.109 *** Setup.in 2000/08/24 22:54:53 1.108 --- Setup.in 2000/08/31 16:11:07 1.109 *************** *** 362,365 **** --- 362,368 ---- # BSD DB 2.1.0.) + # Note: If a db.h file is found by configure, bsddb will be enabled + # automatically via Setup.config.in + #DB=/depot/sundry/src/berkeley-db/db.1.85 #DBPORT=$(DB)/PORT/irix.5.3 Index: bsddbmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/bsddbmodule.c,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** bsddbmodule.c 2000/07/24 14:43:34 1.23 --- bsddbmodule.c 2000/08/31 16:11:07 1.24 *************** *** 31,36 **** #include #include ! /* If using Berkeley DB 2.0 or newer, change this include to : */ #include /* Please don't include internal header files of the Berkeley db package (it messes up the info required in the Setup file) */ --- 31,39 ---- #include #include ! #ifdef HAVE_DB_185_H ! #include ! #else #include + #endif /* Please don't include internal header files of the Berkeley db package (it messes up the info required in the Setup file) */ From python-dev@python.org Thu Aug 31 17:13:26 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:13:26 -0700 Subject: [Python-checkins] CVS: python/dist/src configure,1.140,1.141 config.h.in,2.70,2.71 Message-ID: <200008311613.JAA08305@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv8284 Modified Files: configure config.h.in Log Message: Skip Montanaro : Update the generated files related to the autoconf support for BSD db. This closes SourceForge patch #101272. Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.140 retrieving revision 1.141 diff -C2 -r1.140 -r1.141 *** configure 2000/08/30 22:29:47 1.140 --- configure 2000/08/31 16:13:19 1.141 *************** *** 1,5 **** #! /bin/sh ! # From configure.in Revision: 1.150 # Guess values for system-dependent variables and create Makefiles. --- 1,5 ---- #! /bin/sh ! # From configure.in Revision: 1.151 [...3994 lines suppressed...] #include --- 5860,5869 ---- EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5863: checking for socklen_t" >&5 if eval "test \"\${ac_cv_type_socklen_t+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** *** 6025,6028 **** --- 6059,6063 ---- s%@LDLAST@%$LDLAST%g s%@USE_GC_MODULE@%$USE_GC_MODULE%g + s%@USE_BSDDB_MODULE@%$USE_BSDDB_MODULE%g s%@DLINCLDIR@%$DLINCLDIR%g s%@DYNLOADFILE@%$DYNLOADFILE%g Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.70 retrieving revision 2.71 diff -C2 -r2.70 -r2.71 *** config.h.in 2000/08/30 22:29:47 2.70 --- config.h.in 2000/08/31 16:13:20 2.71 *************** *** 211,214 **** --- 211,217 ---- #undef WITH_NEXT_FRAMEWORK + /* Define if you want to use BSD db. */ + #undef WITH_LIBDB + /* Define if you want to build an interpreter with many run-time checks */ #undef Py_DEBUG *************** *** 518,521 **** --- 521,530 ---- /* Define if you have the waitpid function. */ #undef HAVE_WAITPID + + /* Define if you have the header file. */ + #undef HAVE_DB_185_H + + /* Define if you have the header file. */ + #undef HAVE_DB_H /* Define if you have the header file. */ From python-dev@python.org Thu Aug 31 17:26:39 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 09:26:39 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libdis.tex,1.26,1.27 Message-ID: <200008311626.JAA10856@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv10830/Doc/lib Modified Files: libdis.tex Log Message: UNARY_NEG is supposed to be UNARY_NEGATIVE (spotted by Charles Waldman ). Fix minor problem with EXTENDED_ARG description markup.. Index: libdis.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libdis.tex,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** libdis.tex 2000/08/24 20:06:03 1.26 --- libdis.tex 2000/08/31 16:26:35 1.27 *************** *** 147,151 **** \end{opcodedesc} ! \begin{opcodedesc}{UNARY_NEG}{} Implements \code{TOS = -TOS}. \end{opcodedesc} --- 147,151 ---- \end{opcodedesc} ! \begin{opcodedesc}{UNARY_NEGATIVE}{} Implements \code{TOS = -TOS}. \end{opcodedesc} *************** *** 596,600 **** default two bytes. \var{ext} holds two additional bytes which, taken together with the subsequent opcode's argument, comprise a four-byte ! argument, \var {ext} being the two most-significant bytes. \end{opcodedesc} --- 596,600 ---- default two bytes. \var{ext} holds two additional bytes which, taken together with the subsequent opcode's argument, comprise a four-byte ! argument, \var{ext} being the two most-significant bytes. \end{opcodedesc} From python-dev@python.org Thu Aug 31 17:36:33 2000 From: python-dev@python.org (Greg Ward) Date: Thu, 31 Aug 2000 09:36:33 -0700 Subject: [Python-checkins] CVS: distutils/doc/dist dist.tex,1.21,1.22 Message-ID: <200008311636.JAA13649@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/doc/dist In directory slayer.i.sourceforge.net:/tmp/cvs-serv13636/dist Modified Files: dist.tex Log Message: Added abstract. Index: dist.tex =================================================================== RCS file: /cvsroot/python/distutils/doc/dist/dist.tex,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** dist.tex 2000/08/31 14:47:05 1.21 --- dist.tex 2000/08/31 16:36:30 1.22 *************** *** 9,16 **** --- 9,26 ---- \authoraddress{E-mail: \email{gward@python.net}} + \makeindex \begin{document} \maketitle + \begin{abstract} + \noindent + This document describes the Python Distribution Utilities + (``Distutils'') from the module developer's point-of-view, describing + how to use the Distutils to make Python modules and extensions easily + available to a wider audience with very little overhead for + build/release/install mechanics. + \end{abstract} + \tableofcontents From python-dev@python.org Thu Aug 31 17:36:33 2000 From: python-dev@python.org (Greg Ward) Date: Thu, 31 Aug 2000 09:36:33 -0700 Subject: [Python-checkins] CVS: distutils/doc/inst inst.tex,1.16,1.17 Message-ID: <200008311636.JAA13656@slayer.i.sourceforge.net> Update of /cvsroot/python/distutils/doc/inst In directory slayer.i.sourceforge.net:/tmp/cvs-serv13636/inst Modified Files: inst.tex Log Message: Added abstract. Index: inst.tex =================================================================== RCS file: /cvsroot/python/distutils/doc/inst/inst.tex,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** inst.tex 2000/06/30 03:36:41 1.16 --- inst.tex 2000/08/31 16:36:31 1.17 *************** *** 25,28 **** --- 25,29 ---- \authoraddress{E-mail: \email{gward@python.net}} + \makeindex \begin{document} *************** *** 30,33 **** --- 31,42 ---- \maketitle + \begin{abstract} + \noindent + This document describes the Python Distribution Utilities + (``Distutils'') from the end-user's point-of-view, describing how to + extend the capabilities of a standard Python installation by building + and installing third-party Python modules and extensions. + \end{abstract} + %\begin{abstract} %\noindent *************** *** 664,669 **** \section{Distutils Configuration Files} \label{config-files} - - \XXX{not even implemented yet, much less documented!} --- 673,676 ---- From python-dev@python.org Thu Aug 31 17:40:11 2000 From: python-dev@python.org (Vladimir Marangozov) Date: Thu, 31 Aug 2000 09:40:11 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.152,1.153 configure,1.141,1.142 Message-ID: <200008311640.JAA14950@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv14704 Modified Files: configure.in configure Log Message: Remove obsolete --with(out)-readline configure option Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.152 retrieving revision 1.153 diff -C2 -r1.152 -r1.153 *** configure.in 2000/08/31 16:11:07 1.152 --- configure.in 2000/08/31 16:40:08 1.153 *************** *** 703,713 **** ], AC_MSG_RESULT(no)) - AC_MSG_CHECKING(for --with(out)-readline) - AC_ARG_WITH(readline, - [ --with(out)-readline obsolete, edit Modules/Setup instead], - [AC_MSG_RESULT($withval) - AC_ERROR(--with(out)-readline is obsolete, edit Modules/Setup instead)], - [AC_MSG_RESULT(not specified.)]) - AC_SUBST(USE_THREAD_MODULE) USE_THREAD_MODULE="" --- 703,706 ---- Index: configure =================================================================== RCS file: /cvsroot/python/python/dist/src/configure,v retrieving revision 1.141 retrieving revision 1.142 diff -C2 -r1.141 -r1.142 *** configure 2000/08/31 16:13:19 1.141 --- configure 2000/08/31 16:40:08 1.142 *************** *** 1,8 **** #! /bin/sh ! # From configure.in Revision: 1.151 # Guess values for system-dependent variables and create Makefiles. ! # Generated automatically using autoconf version 2.14.1 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # --- 1,8 ---- #! /bin/sh [...4625 lines suppressed...] ! echo "$CONFIG_STATUS generated by autoconf version 2.14.1" exit 0 ;; -help | --help | --hel | --he | --h) --- 5947,5951 ---- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ! echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) *************** *** 6288,6291 **** chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 --- 6249,6252 ---- chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files ! test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 From python-dev@python.org Thu Aug 31 18:23:38 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 10:23:38 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib liburllib.tex,1.27,1.28 Message-ID: <200008311723.KAA28668@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv28633/lib Modified Files: liburllib.tex Log Message: Document the limitation that urllib does not work with proxies which require authenication. This is an implementation limitation rather than required behavior, and may be fixed in the future. This closes SourceForge bug #111725. Index: liburllib.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liburllib.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** liburllib.tex 2000/08/25 05:13:42 1.27 --- liburllib.tex 2000/08/31 17:23:35 1.28 *************** *** 63,71 **** see the \function{urlencode()} function below. ! The \function{urlopen()} function works transparently with proxies. ! In a \UNIX{} or Windows environment, set the \envvar{http_proxy}, ! \envvar{ftp_proxy} or \envvar{gopher_proxy} environment variables to a ! URL that identifies the proxy server before starting the Python ! interpreter. For example (the \character{\%} is the command prompt): \begin{verbatim} --- 63,72 ---- see the \function{urlencode()} function below. ! The \function{urlopen()} function works transparently with proxies ! whicd do not require authentication. In a \UNIX{} or Windows ! environment, set the \envvar{http_proxy}, \envvar{ftp_proxy} or ! \envvar{gopher_proxy} environment variables to a URL that identifies ! the proxy server before starting the Python interpreter. For example ! (the \character{\%} is the command prompt): \begin{verbatim} *************** *** 78,81 **** --- 79,85 ---- In a Macintosh environment, \function{urlopen()} will retrieve proxy information from Internet\index{Internet Config} Config. + + Proxies which require authentication for use are not currently + supported; this is considered an implementation limitation. The \function{urlopen()} function works transparently with proxies. From python-dev@python.org Thu Aug 31 18:45:38 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 10:45:38 -0700 Subject: [Python-checkins] CVS: python/dist/src configure.in,1.153,1.154 configure,1.142,1.143 Message-ID: <200008311745.KAA04719@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv4623 Modified Files: configure.in configure Log Message: patch #101733: fix glitch in FreeBSD conf Index: configure.in =================================================================== RCS file: /cvsroot/python/python/dist/src/configure.in,v retrieving revision 1.153 retrieving revision 1.154 diff -C2 -r1.153 -r1.154 *** configure.in 2000/08/31 16:40:08 1.153 --- configure.in 2000/08/31 17:45:35 1.154 *************** *** 585,589 **** fi;; FreeBSD*) ! if [ "`$CC -dM -E - Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv20652/Modules Modified Files: Makefile.pre.in Log Message: If Setup is older than Setup.in, issue a bold warning that the Setup may need to be checked to make sure all the latest information is present. This closes SourceForge patch #101275. Index: Makefile.pre.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Makefile.pre.in,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -r1.63 -r1.64 *** Makefile.pre.in 2000/06/30 16:04:18 1.63 --- Makefile.pre.in 2000/08/31 16:56:15 1.64 *************** *** 161,166 **** done ! Setup: ! cp $(srcdir)/Setup.in Setup Setup.local: --- 161,175 ---- done ! Setup: $(srcdir)/Setup.in ! @if [ -f Setup ] ; then \ ! echo; \ ! echo "-------------------------------------------"; \ ! echo "$(srcdir)/Setup.in is newer than Setup;"; \ ! echo "check to make sure you have all the updates"; \ ! echo "you need in your Setup file."; \ ! echo "-------------------------------------------"; \ ! echo; \ ! else (set -x; cp $(srcdir)/Setup.in Setup); fi ! Setup.local: From python-dev@python.org Thu Aug 31 19:11:16 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 11:11:16 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules linuxaudiodev.c,2.6,2.7 Message-ID: <200008311811.LAA10681@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv10203/Modules Modified Files: linuxaudiodev.c Log Message: This module has a poor name, since it can be used under FreeBSD and Linux. Perhaps winaudio would be better, as it would offend both parties equally. tg@freebsd.org: allow this module to compile under FreeBSD (he suggests voxwareaudio) Index: linuxaudiodev.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/linuxaudiodev.c,v retrieving revision 2.6 retrieving revision 2.7 diff -C2 -r2.6 -r2.7 *** linuxaudiodev.c 2000/08/18 05:10:45 2.6 --- linuxaudiodev.c 2000/08/31 18:11:07 2.7 *************** *** 28,34 **** --- 28,44 ---- #include + #if defined(linux) #include typedef unsigned long uint32_t; + + #elif defined(__FreeBSD__) + #include + + #ifndef SNDCTL_DSP_CHANNELS + #define SNDCTL_DSP_CHANNELS SOUND_PCM_WRITE_CHANNELS + #endif + + #endif typedef struct { From python-dev@python.org Thu Aug 31 20:04:10 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:04:10 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.62,2.63 Message-ID: <200008311904.MAA25678@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv25656 Modified Files: dictobject.c Log Message: Clear errors raised by PyObject_Compare() without losing any existing exception context. This avoids improperly propogating errors raised by a user-defined __cmp__() by a subsequent lookup operation. This patch does *not* include the performance enhancement patch for dictionaries with string keys only; that will be checked in separately. This closes SourceForge patch #101277 and bug #112558. Index: dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.62 retrieving revision 2.63 diff -C2 -r2.62 -r2.63 *** dictobject.c 2000/08/08 16:11:31 2.62 --- dictobject.c 2000/08/31 19:04:07 2.63 *************** *** 140,143 **** --- 140,147 ---- dictentry *ep0 = mp->ma_table; register dictentry *ep; + register int restore_error = 0; + register int checked_error = 0; + register int cmp; + PyObject *err_type, *err_value, *err_tb; /* We must come up with (i, incr) such that 0 <= i < ma_size and 0 < incr < ma_size and both are a function of hash */ *************** *** 152,163 **** freeslot = ep; else { ! if (ep->me_hash == hash && ! PyObject_Compare(ep->me_key, key) == 0) ! { ! return ep; } freeslot = NULL; } - /* XXX What if PyObject_Compare returned an exception? */ /* Derive incr from hash, just to make it more arbitrary. Note that incr must not be 0, or we will get into an infinite loop.*/ --- 156,178 ---- freeslot = ep; else { ! if (ep->me_hash == hash) { ! /* error can't have been checked yet */ ! checked_error = 1; ! if (PyErr_Occurred()) { ! restore_error = 1; ! PyErr_Fetch(&err_type, &err_value, &err_tb); ! } ! cmp = PyObject_Compare(ep->me_key, key); ! if (PyErr_Occurred()) ! PyErr_Clear(); ! else if (cmp == 0) { ! if (restore_error) ! PyErr_Restore(err_type, err_value, ! err_tb); ! return ep; ! } } freeslot = NULL; } /* Derive incr from hash, just to make it more arbitrary. Note that incr must not be 0, or we will get into an infinite loop.*/ *************** *** 168,171 **** --- 183,188 ---- ep = &ep0[(i+incr)&mask]; if (ep->me_key == NULL) { + if (restore_error) + PyErr_Restore(err_type, err_value, err_tb); if (freeslot != NULL) return freeslot; *************** *** 177,186 **** freeslot = ep; } ! else if (ep->me_key == key || ! (ep->me_hash == hash && ! PyObject_Compare(ep->me_key, key) == 0)) { return ep; } - /* XXX What if PyObject_Compare returned an exception? */ /* Cycle through GF(2^n)-{0} */ incr = incr << 1; --- 194,221 ---- freeslot = ep; } ! else if (ep->me_key == key) { ! if (restore_error) ! PyErr_Restore(err_type, err_value, err_tb); return ep; + } + else if (ep->me_hash == hash) { + if (!checked_error) { + checked_error = 1; + if (PyErr_Occurred()) { + restore_error = 1; + PyErr_Fetch(&err_type, &err_value, + &err_tb); + } + } + cmp = PyObject_Compare(ep->me_key, key); + if (PyErr_Occurred()) + PyErr_Clear(); + else if (cmp == 0) { + if (restore_error) + PyErr_Restore(err_type, err_value, + err_tb); + return ep; + } } /* Cycle through GF(2^n)-{0} */ incr = incr << 1; From python-dev@python.org Thu Aug 31 20:23:04 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:23:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/PC config.h,1.45,1.46 Message-ID: <200008311923.MAA02263@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/PC In directory slayer.i.sourceforge.net:/tmp/cvs-serv961/PC Modified Files: config.h Log Message: add user-modifiable recursion_limit ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit Index: config.h =================================================================== RCS file: /cvsroot/python/python/dist/src/PC/config.h,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -r1.45 -r1.46 *** config.h 2000/08/15 22:33:59 1.45 --- config.h 2000/08/31 19:23:01 1.46 *************** *** 444,454 **** #define SIZEOF_LONG_LONG 8 - /* Smaller stack size limit. (9500 would work too, but we're conservative.) */ - - #ifndef MAX_RECURSION_DEPTH - #define MAX_RECURSION_DEPTH 5000 - #endif - - /* EXPERIMENTAL FEATURE: When CHECK_IMPORT_CASE is defined, check case of imported modules against case of file; this causes "import String" to fail --- 444,447 ---- From python-dev@python.org Thu Aug 31 20:23:04 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:23:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.39,1.40 Message-ID: <200008311923.MAA02261@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv961/Doc/lib Modified Files: libsys.tex Log Message: add user-modifiable recursion_limit ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** libsys.tex 2000/08/15 04:24:43 1.39 --- libsys.tex 2000/08/31 19:22:59 1.40 *************** *** 149,152 **** --- 149,159 ---- \end{funcdesc} + \begin{funcdesc}{getrecursionlimit}{} + Return the current value of the recursion limit, the maximum depth of + the Python interpreter stack. This limit prevents infinite recursion + from causing an overflow of the C stack and crashing Python. It can + be set by \function{setrecursionlimit}. + \end{funcdesc} + \begin{datadesc}{hexversion} The version number encoded as a single integer. This is guaranteed to *************** *** 275,278 **** --- 282,296 ---- \index{profile function} \index{profiler} + + \begin{funcdesc}{setrecursionlimit}{limit} + Set the maximum depth of the Python interpreter stack to \var{limit}. + This limit prevents infinite recursion from causing an overflow of the + C stack and crashing Python. + + The highest possible limit is platform-dependent. A user may need to + set the limit higher when she has a program that requires deep + recursion and a platform that supports a higher limit. This should be + done with care, because a too-high limit can lead to a crash. + \edn{funcdesc} \begin{funcdesc}{settrace}{tracefunc} From python-dev@python.org Thu Aug 31 20:23:04 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:23:04 -0700 Subject: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.199,2.200 sysmodule.c,2.76,2.77 Message-ID: <200008311923.MAA02272@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Python In directory slayer.i.sourceforge.net:/tmp/cvs-serv961/Python Modified Files: ceval.c sysmodule.c Log Message: add user-modifiable recursion_limit ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit Index: ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.199 retrieving revision 2.200 diff -C2 -r2.199 -r2.200 *** ceval.c 2000/08/30 20:25:01 2.199 --- ceval.c 2000/08/31 19:23:01 2.200 *************** *** 299,302 **** --- 299,316 ---- + /* The interpreter's recursion limit */ + + static int recursion_limit = 2500; + + int Py_GetRecursionLimit(void) + { + return recursion_limit; + } + + void Py_SetRecursionLimit(int new_limit) + { + recursion_limit = new_limit; + } + /* Status code for main loop (reason for stack unwind) */ *************** *** 327,334 **** /* Interpreter main loop */ - #ifndef MAX_RECURSION_DEPTH - #define MAX_RECURSION_DEPTH 10000 - #endif - static PyObject * eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals, --- 341,344 ---- *************** *** 566,570 **** } ! if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) { --tstate->recursion_depth; PyErr_SetString(PyExc_RuntimeError, --- 576,580 ---- } ! if (++tstate->recursion_depth > recursion_limit) { --tstate->recursion_depth; PyErr_SetString(PyExc_RuntimeError, Index: sysmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/sysmodule.c,v retrieving revision 2.76 retrieving revision 2.77 diff -C2 -r2.76 -r2.77 *** sysmodule.c 2000/08/31 15:21:11 2.76 --- sysmodule.c 2000/08/31 19:23:01 2.77 *************** *** 200,203 **** --- 200,242 ---- n instructions. This also affects how often thread switches occur."; + static PyObject * + sys_setrecursionlimit(PyObject *self, PyObject *args) + { + int new_limit; + if (!PyArg_ParseTuple(args, "i:setrecursionlimit", &new_limit)) + return NULL; + if (new_limit <= 0) { + PyErr_SetString(PyExc_ValueError, + "recursion limit must be positive"); + return NULL; + } + Py_SetRecursionLimit(new_limit); + Py_INCREF(Py_None); + return Py_None; + } + + static char setrecursionlimit_doc[] = + "setrecursionlimit(n)\n\ + \n\ + Set the maximum depth of the Python interpreter stack to n. This\n\ + limit prevents infinite recursion from causing an overflow of the C\n\ + stack and crashing Python. The highest possible limit is platform-\n\ + dependent."; + + static PyObject * + sys_getrecursionlimit(PyObject *self, PyObject *args) + { + if (!PyArg_ParseTuple(args, ":getrecursionlimit")) + return NULL; + return PyInt_FromLong(Py_GetRecursionLimit()); + } + + static char getrecursionlimit_doc[] = + "getrecursionlimit()\n\ + \n\ + Return the current value of the recursion limit, the maximum depth\n\ + of the Python interpreter stack. This limit prevents infinite\n\ + recursion from causing an overflow of the C stack and crashing Python."; + #ifdef USE_MALLOPT /* Link with -lmalloc (or -lmpc) on an SGI */ *************** *** 269,273 **** {"exc_info", sys_exc_info, 1, exc_info_doc}, {"exit", sys_exit, 0, exit_doc}, ! {"getdefaultencoding", sys_getdefaultencoding, 1, getdefaultencoding_doc}, #ifdef COUNT_ALLOCS {"getcounts", sys_getcounts, 1}, --- 308,313 ---- {"exc_info", sys_exc_info, 1, exc_info_doc}, {"exit", sys_exit, 0, exit_doc}, ! {"getdefaultencoding", sys_getdefaultencoding, 1, ! getdefaultencoding_doc}, #ifdef COUNT_ALLOCS {"getcounts", sys_getcounts, 1}, *************** *** 281,290 **** #endif {"getrefcount", sys_getrefcount, 1, getrefcount_doc}, #ifdef USE_MALLOPT {"mdebug", sys_mdebug, 1}, #endif ! {"setdefaultencoding", sys_setdefaultencoding, 1, setdefaultencoding_doc}, ! {"setcheckinterval", sys_setcheckinterval, 1, setcheckinterval_doc}, {"setprofile", sys_setprofile, 0, setprofile_doc}, {"settrace", sys_settrace, 0, settrace_doc}, {NULL, NULL} /* sentinel */ --- 321,336 ---- #endif {"getrefcount", sys_getrefcount, 1, getrefcount_doc}, + {"getrecursionlimit", sys_getrecursionlimit, 1, + getrecursionlimit_doc}, #ifdef USE_MALLOPT {"mdebug", sys_mdebug, 1}, #endif ! {"setdefaultencoding", sys_setdefaultencoding, 1, ! setdefaultencoding_doc}, ! {"setcheckinterval", sys_setcheckinterval, 1, ! setcheckinterval_doc}, {"setprofile", sys_setprofile, 0, setprofile_doc}, + {"setrecursionlimit", sys_setrecursionlimit, 1, + setrecursionlimit_doc}, {"settrace", sys_settrace, 0, settrace_doc}, {NULL, NULL} /* sentinel */ *************** *** 377,382 **** --- 423,430 ---- exit() -- exit the interpreter by raising SystemExit\n\ getrefcount() -- return the reference count for an object (plus one :-)\n\ + getrecursionlimit() -- return the max recursion depth for the interpreter\n\ setcheckinterval() -- control how often the interpreter checks for events\n\ setprofile() -- set the global profiling function\n\ + setrecursionlimit() -- set the max recursion depth for the interpreter\n\ settrace() -- set the global debug tracing function\n\ " From python-dev@python.org Thu Aug 31 20:24:20 2000 From: python-dev@python.org (Jeremy Hylton) Date: Thu, 31 Aug 2000 12:24:20 -0700 Subject: [Python-checkins] CVS: python/dist/src/Misc find_recursionlimit.py,NONE,1.1 Message-ID: <200008311924.MAA03080@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv2867/Misc Added Files: find_recursionlimit.py Log Message: script that reports a fairly safe recursionlimit for a specific platform --- NEW FILE --- #! /usr/bin/env python """Find the maximum recursion limit that prevents core dumps This script finds the maximum safe recursion limit on a particular platform. If you need to change the recursion limit on your system, this script will tell you a safe upper bound. To use the new limit, call sys.setrecursionlimit. This module implements several ways to create infinite recursion in Python. Different implementations end up pushing different numbers of C stack frames, depending on how many calls through Python's abstract C API occur. After each round of tests, it prints a message Limit of NNNN is fine. It ends when Python causes a segmentation fault because the limit is too high. On platforms like Mac and Windows, it should exit with a MemoryError. NB: A program that does not use __methods__ can set a higher limit. """ import sys class RecursiveBlowup1: def __init__(self): self.__init__() def test_init(): return RecursiveBlowup1() class RecursiveBlowup2: def __repr__(self): return repr(self) def test_repr(): return repr(RecursiveBlowup2()) class RecursiveBlowup4: def __add__(self, x): return x + self def test_add(): return RecursiveBlowup4() + RecursiveBlowup4() class RecursiveBlowup5: def __getattr__(self, attr): return getattr(self, attr) def test_getattr(): return RecursiveBlowup5().attr class RecursiveBlowup6: def __getitem__(self, item): return self[item - 2] + self[item - 1] def test_getitem(): return RecursiveBlowup6()[5] def test_recurse(): return test_recurse() def check_limit(n, test_func_name): sys.setrecursionlimit(n) if test_func_name.startswith("test_"): print test_func_name[5:] else: print test_func_name test_func = globals()[test_func_name] try: test_func() except RuntimeError: pass else: print "Yikes!" limit = 1000 while 1: check_limit(limit, "test_recurse") check_limit(limit, "test_add") check_limit(limit, "test_repr") check_limit(limit, "test_init") check_limit(limit, "test_getattr") check_limit(limit, "test_getitem") print "Limit of %d is fine" % limit limit = limit + 100 From python-dev@python.org Thu Aug 31 20:31:40 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:31:40 -0700 Subject: [Python-checkins] CVS: python/dist/src/Objects dictobject.c,2.63,2.64 Message-ID: <200008311931.MAA03789@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Objects In directory slayer.i.sourceforge.net:/tmp/cvs-serv3780/Objects Modified Files: dictobject.c Log Message: Slight performance hack that also avoids requiring the existence of thread state for dictionaries that have only been indexed by string keys. See the comments in SourceForge for more. This closes SourceForge patch #101309. Index: dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.63 retrieving revision 2.64 diff -C2 -r2.63 -r2.64 *** dictobject.c 2000/08/31 19:04:07 2.63 --- dictobject.c 2000/08/31 19:31:38 2.64 *************** *** 20,23 **** --- 20,26 ---- #define MINSIZE 4 + /* define this out if you don't want conversion statistics on exit */ + #undef SHOW_CONVERSION_COUNTS + /* Table of irreducible polynomials to efficiently cycle through *************** *** 83,87 **** when it is more than half filled. */ ! typedef struct { PyObject_HEAD int ma_fill; --- 86,91 ---- when it is more than half filled. */ ! typedef struct dictobject dictobject; ! struct dictobject { PyObject_HEAD int ma_fill; *************** *** 90,94 **** int ma_poly; dictentry *ma_table; ! } dictobject; PyObject * --- 94,116 ---- int ma_poly; dictentry *ma_table; ! dictentry *(*ma_lookup)(dictobject *mp, PyObject *key, long hash); ! }; ! ! /* forward declarations */ ! static dictentry * ! lookdict_string(dictobject *mp, PyObject *key, long hash); ! ! #ifdef SHOW_CONVERSION_COUNTS ! static long created = 0L; ! static long converted = 0L; ! ! static void ! show_counts(void) ! { ! fprintf(stderr, "created %ld string dicts\n", created); ! fprintf(stderr, "converted %ld to normal dicts\n", converted); ! fprintf(stderr, "%.2f%% conversion rate\n", (100.0*converted)/created); ! } ! #endif PyObject * *************** *** 100,103 **** --- 122,128 ---- if (dummy == NULL) return NULL; + #ifdef SHOW_CONVERSION_COUNTS + Py_AtExit(show_counts); + #endif } mp = PyObject_NEW(dictobject, &PyDict_Type); *************** *** 109,112 **** --- 134,141 ---- mp->ma_fill = 0; mp->ma_used = 0; + mp->ma_lookup = lookdict_string; + #ifdef SHOW_CONVERSION_COUNTS + ++created; + #endif PyObject_GC_Init(mp); return (PyObject *)mp; *************** *** 130,133 **** --- 159,166 ---- (This version is due to Reimer Behrends, some ideas are also due to Jyrki Alakuijala and Vladimir Marangozov.) + + This function must never return NULL; failures are indicated by returning + a dictentry* for which the me_value field is NULL. Exceptions are never + reported by this function, and outstanding exceptions are maintained. */ static dictentry * *************** *** 227,230 **** --- 260,340 ---- /* + * Hacked up version of lookdict which can assume keys are always strings; + * this assumption allows testing for errors during PyObject_Compare() to + * be dropped; string-string comparisons never raise exceptions. This also + * means we don't need to go through PyObject_Compare(); we can always use + * the tp_compare slot of the string type object directly. + * + * This really only becomes meaningful if proper error handling in lookdict() + * is too expensive. + */ + static dictentry * + lookdict_string(dictobject *mp, PyObject *key, register long hash) + { + register int i; + register unsigned incr; + register dictentry *freeslot; + register unsigned int mask = mp->ma_size-1; + dictentry *ep0 = mp->ma_table; + register dictentry *ep; + cmpfunc compare = PyString_Type.tp_compare; + + /* make sure this function doesn't have to handle non-string keys */ + if (!PyString_Check(key)) { + #ifdef SHOW_CONVERSION_COUNTS + ++converted; + #endif + mp->ma_lookup = lookdict; + return lookdict(mp, key, hash); + } + /* We must come up with (i, incr) such that 0 <= i < ma_size + and 0 < incr < ma_size and both are a function of hash */ + i = (~hash) & mask; + /* We use ~hash instead of hash, as degenerate hash functions, such + as for ints , can have lots of leading zeros. It's not + really a performance risk, but better safe than sorry. */ + ep = &ep0[i]; + if (ep->me_key == NULL || ep->me_key == key) + return ep; + if (ep->me_key == dummy) + freeslot = ep; + else { + if (ep->me_hash == hash + && compare(ep->me_key, key) == 0) { + return ep; + } + freeslot = NULL; + } + /* Derive incr from hash, just to make it more arbitrary. Note that + incr must not be 0, or we will get into an infinite loop.*/ + incr = (hash ^ ((unsigned long)hash >> 3)) & mask; + if (!incr) + incr = mask; + for (;;) { + ep = &ep0[(i+incr)&mask]; + if (ep->me_key == NULL) { + if (freeslot != NULL) + return freeslot; + else + return ep; + } + if (ep->me_key == dummy) { + if (freeslot == NULL) + freeslot = ep; + } + else if (ep->me_key == key + || (ep->me_hash == hash + && compare(ep->me_key, key) == 0)) { + return ep; + } + /* Cycle through GF(2^n)-{0} */ + incr = incr << 1; + if (incr > mask) + incr ^= mp->ma_poly; /* This will implicitly clear + the highest bit */ + } + } + + /* Internal routine to insert a new item into the table. Used both by the internal resize routine and by the public insert routine. *************** *** 236,240 **** PyObject *old_value; register dictentry *ep; ! ep = lookdict(mp, key, hash); if (ep->me_value != NULL) { old_value = ep->me_value; --- 346,350 ---- PyObject *old_value; register dictentry *ep; ! ep = (mp->ma_lookup)(mp, key, hash); if (ep->me_value != NULL) { old_value = ep->me_value; *************** *** 313,320 **** { long hash; if (!PyDict_Check(op)) { return NULL; } ! if (((dictobject *)op)->ma_table == NULL) return NULL; #ifdef CACHE_HASH --- 423,431 ---- { long hash; + dictobject *mp = (dictobject *)op; if (!PyDict_Check(op)) { return NULL; } ! if (mp->ma_table == NULL) return NULL; #ifdef CACHE_HASH *************** *** 329,333 **** } } ! return lookdict((dictobject *)op, key, hash) -> me_value; } --- 440,444 ---- } } ! return (mp->ma_lookup)(mp, key, hash)->me_value; } *************** *** 401,405 **** if (((dictobject *)op)->ma_table == NULL) goto empty; ! ep = lookdict(mp, key, hash); if (ep->me_value == NULL) { empty: --- 512,516 ---- if (((dictobject *)op)->ma_table == NULL) goto empty; ! ep = (mp->ma_lookup)(mp, key, hash); if (ep->me_value == NULL) { empty: *************** *** 584,588 **** return NULL; } ! v = lookdict(mp, key, hash) -> me_value; if (v == NULL) PyErr_SetObject(PyExc_KeyError, key); --- 695,699 ---- return NULL; } ! v = (mp->ma_lookup)(mp, key, hash) -> me_value; if (v == NULL) PyErr_SetObject(PyExc_KeyError, key); *************** *** 913,918 **** PyErr_Clear(); /* Don't want errors here */ } ! aval = lookdict(a, akey, ahash) -> me_value; ! bval = lookdict(b, bkey, bhash) -> me_value; res = PyObject_Compare(aval, bval); if (res != 0) --- 1024,1029 ---- PyErr_Clear(); /* Don't want errors here */ } ! aval = (a->ma_lookup)(a, akey, ahash) -> me_value; ! bval = (b->ma_lookup)(b, bkey, bhash) -> me_value; res = PyObject_Compare(aval, bval); if (res != 0) *************** *** 949,953 **** return NULL; } ! ok = mp->ma_size != 0 && lookdict(mp, key, hash)->me_value != NULL; return PyInt_FromLong(ok); } --- 1060,1065 ---- return NULL; } ! ok = (mp->ma_size != 0 ! && (mp->ma_lookup)(mp, key, hash)->me_value != NULL); return PyInt_FromLong(ok); } *************** *** 975,979 **** return NULL; } ! val = lookdict(mp, key, hash)->me_value; finally: --- 1087,1091 ---- return NULL; } ! val = (mp->ma_lookup)(mp, key, hash)->me_value; finally: *************** *** 1007,1011 **** return NULL; } ! val = lookdict(mp, key, hash)->me_value; finally: --- 1119,1123 ---- return NULL; } ! val = (mp->ma_lookup)(mp, key, hash)->me_value; finally: From python-dev@python.org Thu Aug 31 20:35:58 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:35:58 -0700 Subject: [Python-checkins] CVS: python/dist/src/Doc/lib libsys.tex,1.40,1.41 Message-ID: <200008311935.MAA04158@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Doc/lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv4148/Doc/lib Modified Files: libsys.tex Log Message: Fix markup error and minor consistency nit. Index: libsys.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/libsys.tex,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** libsys.tex 2000/08/31 19:22:59 1.40 --- libsys.tex 2000/08/31 19:35:56 1.41 *************** *** 153,157 **** the Python interpreter stack. This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python. It can ! be set by \function{setrecursionlimit}. \end{funcdesc} --- 153,157 ---- the Python interpreter stack. This limit prevents infinite recursion from causing an overflow of the C stack and crashing Python. It can ! be set by \function{setrecursionlimit()}. \end{funcdesc} *************** *** 292,296 **** recursion and a platform that supports a higher limit. This should be done with care, because a too-high limit can lead to a crash. ! \edn{funcdesc} \begin{funcdesc}{settrace}{tracefunc} --- 292,296 ---- recursion and a platform that supports a higher limit. This should be done with care, because a too-high limit can lead to a crash. ! \end{funcdesc} \begin{funcdesc}{settrace}{tracefunc} From python-dev@python.org Thu Aug 31 20:48:54 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:48:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test/output test_operations,1.1,1.2 Message-ID: <200008311948.MAA05401@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test/output In directory slayer.i.sourceforge.net:/tmp/cvs-serv5388/Lib/test/output Modified Files: test_operations Log Message: Test case to exercise fix for error propogation bug in dictionarys. Index: test_operations =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/output/test_operations,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_operations 1996/12/10 23:20:01 1.1 --- test_operations 2000/08/31 19:48:52 1.2 *************** *** 1,3 **** test_operations 3. Operations ! XXX Not yet implemented --- 1,6 ---- test_operations 3. Operations ! XXX Mostly not yet implemented ! 3.1 Dictionary lookups succeed even if __cmp__() raises an exception ! raising error ! No exception passed through. From python-dev@python.org Thu Aug 31 20:48:54 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 12:48:54 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test test_operations.py,1.1,1.2 Message-ID: <200008311948.MAA05397@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv5388/Lib/test Modified Files: test_operations.py Log Message: Test case to exercise fix for error propogation bug in dictionarys. Index: test_operations.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_operations.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test_operations.py 1992/01/27 16:56:04 1.1 --- test_operations.py 2000/08/31 19:48:51 1.2 *************** *** 3,5 **** print '3. Operations' ! print 'XXX Not yet implemented' --- 3,28 ---- print '3. Operations' ! print 'XXX Mostly not yet implemented' ! ! ! print '3.1 Dictionary lookups succeed even if __cmp__() raises an exception' ! ! # SourceForge bug #112558: ! # http://sourceforge.net/bugs/?func=detailbug&bug_id=112558&group_id=5470 ! ! class BadDictKey: ! def __hash__(self): ! return hash(self.__class__) ! ! def __cmp__(self, other): ! if isinstance(other, self.__class__): ! print "raising error" ! raise RuntimeError, "gotcha" ! return other ! ! d = {} ! x1 = BadDictKey() ! x2 = BadDictKey() ! d[x1] = 1 ! d[x2] = 2 ! print "No exception passed through." From python-dev@python.org Thu Aug 31 21:03:57 2000 From: python-dev@python.org (Guido van Rossum) Date: Thu, 31 Aug 2000 13:03:57 -0700 Subject: [Python-checkins] CVS: python/dist/src config.h.in,2.71,2.72 Message-ID: <200008312003.NAA07761@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv7711 Modified Files: config.h.in Log Message: After rerunning autoheader, two symbols (HAVE__GETPTY and WITH_LIBDB) appear in a different place. Oh well. Index: config.h.in =================================================================== RCS file: /cvsroot/python/python/dist/src/config.h.in,v retrieving revision 2.71 retrieving revision 2.72 diff -C2 -r2.71 -r2.72 *** config.h.in 2000/08/31 16:13:20 2.71 --- config.h.in 2000/08/31 20:03:54 2.72 *************** *** 273,276 **** --- 273,279 ---- #undef SIZEOF_VOID_P + /* Define if you have the _getpty function. */ + #undef HAVE__GETPTY + /* Define if you have the alarm function. */ #undef HAVE_ALARM *************** *** 360,366 **** #undef HAVE_GETPID - /* Define if you have the _getpty function. */ - #undef HAVE__GETPTY - /* Define if you have the getpwent function. */ #undef HAVE_GETPWENT --- 363,366 ---- *************** *** 522,530 **** #undef HAVE_WAITPID - /* Define if you have the header file. */ - #undef HAVE_DB_185_H - /* Define if you have the header file. */ #undef HAVE_DB_H /* Define if you have the header file. */ --- 522,530 ---- #undef HAVE_WAITPID /* Define if you have the header file. */ #undef HAVE_DB_H + + /* Define if you have the header file. */ + #undef HAVE_DB_185_H /* Define if you have the header file. */ From python-dev@python.org Thu Aug 31 21:55:32 2000 From: python-dev@python.org (Barry A. Warsaw) Date: Thu, 31 Aug 2000 16:55:32 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Modules Makefile.pre.in,1.63,1.64 References: <200008311656.JAA20666@slayer.i.sourceforge.net> Message-ID: <14766.50756.893007.253356@anthem.concentric.net> >>>>> "Fred" == Fred L Drake writes: Fred> If Setup is older than Setup.in, issue a bold warning that Fred> the Setup may need to be checked to make sure all the latest Fred> information is present. Fred> This closes SourceForge patch #101275. Not quite. When I run make in the top-level directory, I see this message: ------------------------------------------- ./Setup.in is newer than Setup; check to make sure you have all the updates you need in your Setup file. ------------------------------------------- I have to hunt around in my compile output to notice that, oh, make cd'd into Modules so it must be talking about /that/ Setup file. "Then why did it say ./Setup.in"? :) The warning should say Modules/Setup.in is newer than Modules/Setup. -Barry From python-dev@python.org Thu Aug 31 22:14:59 2000 From: python-dev@python.org (Barry A. Warsaw) Date: Thu, 31 Aug 2000 17:14:59 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Misc find_recursionlimit.py,NONE,1.1 References: <200008311924.MAA03080@slayer.i.sourceforge.net> Message-ID: <14766.51923.685753.319113@anthem.concentric.net> I wonder if find_recursionlimit.py shouldn't go in Tools and perhaps be run as a separate rule in the Makefile (with a corresponding cleanup of the inevitable core file, and a printing of the last reasonable value returned). Or you can write a simple Python wrapper around find_recursionlimit.py that did the parenthetical tasks. -Barry From python-dev@python.org Thu Aug 31 22:24:26 2000 From: python-dev@python.org (Barry Warsaw) Date: Thu, 31 Aug 2000 14:24:26 -0700 Subject: [Python-checkins] CVS: python/nondist/peps pep-0200.txt,1.32,1.33 Message-ID: <200008312124.OAA32251@slayer.i.sourceforge.net> Update of /cvsroot/python/python/nondist/peps In directory slayer.i.sourceforge.net:/tmp/cvs-serv32241 Modified Files: pep-0200.txt Log Message: The gettext.py module is complete. Index: pep-0200.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0200.txt,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -r1.32 -r1.33 *** pep-0200.txt 2000/08/29 15:01:34 1.32 --- pep-0200.txt 2000/08/31 21:24:20 1.33 *************** *** 145,151 **** * Add \U1234678 escapes in u"" strings - Fredrik Lundh - * Integrated gettext module - Barry Warsaw - wrapper around standard internationalization libraries - Open: proposed but not accepted or rejected --- 145,148 ---- *************** *** 296,299 **** --- 293,298 ---- * Augmented assignment - Thomas Wouters Add += and family, plus Python and C hooks, and API functions. + + * gettext.py module - Barry Warsaw From python-dev@python.org Thu Aug 31 22:53:05 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 14:53:05 -0700 Subject: [Python-checkins] CVS: python/dist/src/Modules Makefile.pre.in,1.64,1.65 Message-ID: <200008312153.OAA03214@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv3200/Modules Modified Files: Makefile.pre.in Log Message: Minor adjustment to Setup.in message, based on comment from Barry Warsaw. Index: Makefile.pre.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Modules/Makefile.pre.in,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -r1.64 -r1.65 *** Makefile.pre.in 2000/08/31 16:56:15 1.64 --- Makefile.pre.in 2000/08/31 21:53:03 1.65 *************** *** 163,173 **** Setup: $(srcdir)/Setup.in @if [ -f Setup ] ; then \ ! echo; \ ! echo "-------------------------------------------"; \ ! echo "$(srcdir)/Setup.in is newer than Setup;"; \ ! echo "check to make sure you have all the updates"; \ ! echo "you need in your Setup file."; \ ! echo "-------------------------------------------"; \ ! echo; \ else (set -x; cp $(srcdir)/Setup.in Setup); fi --- 163,173 ---- Setup: $(srcdir)/Setup.in @if [ -f Setup ] ; then \ ! echo; \ ! echo "----------------------------------------------"; \ ! echo "Modules/Setup.in is newer than Moodules/Setup;"; \ ! echo "check to make sure you have all the updates"; \ ! echo "you need in your Setup file."; \ ! echo "----------------------------------------------"; \ ! echo; \ else (set -x; cp $(srcdir)/Setup.in Setup); fi From python-dev@python.org Thu Aug 31 23:02:49 2000 From: python-dev@python.org (Fred L. Drake) Date: Thu, 31 Aug 2000 15:02:49 -0700 Subject: [Python-checkins] CVS: python/dist/src Makefile.in,1.98,1.99 Message-ID: <200008312202.PAA05140@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv5097 Modified Files: Makefile.in Log Message: Fix BeOS check in the libainstall target; noted by Mark Favas . Index: Makefile.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.in,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -r1.98 -r1.99 *** Makefile.in 2000/08/29 15:00:11 1.98 --- Makefile.in 2000/08/31 22:02:46 1.99 *************** *** 406,410 **** else true; \ fi ! @if [ "$(MACHDEP)" == "beos" ] ; then \ echo; echo "Installing support files for building shared extension modules on BeOS:"; \ $(INSTALL_DATA) BeOS/README $(LIBPL)/README; \ --- 406,410 ---- else true; \ fi ! @if [ "$(MACHDEP)" = "beos" ] ; then \ echo; echo "Installing support files for building shared extension modules on BeOS:"; \ $(INSTALL_DATA) BeOS/README $(LIBPL)/README; \ From python-dev@python.org Thu Aug 31 23:57:57 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 31 Aug 2000 15:57:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib/test re_tests.py,1.15,1.16 Message-ID: <200008312257.PAA22873@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib/test In directory slayer.i.sourceforge.net:/tmp/cvs-serv19734/Lib/test Modified Files: re_tests.py Log Message: closes bug #112468 (and all the other bugs that surfaced when I fixed the a bug in the regression test harness...) Index: re_tests.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/re_tests.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** re_tests.py 2000/08/08 17:06:52 1.15 --- re_tests.py 2000/08/31 22:57:55 1.16 *************** *** 17,20 **** --- 17,32 ---- benchmarks = [ + + # test common prefix + ('Python|Perl', 'Perl'), # Alternation + ('(Python|Perl)', 'Perl'), # Grouped alternation + + ('Python|Perl|Tcl', 'Perl'), # Alternation + ('(Python|Perl|Tcl)', 'Perl'), # Grouped alternation + + ('(Python)\\1', 'PythonPython'), # Backreference + ('([0a-z][a-z0-9]*,)+', 'a5,b7,c9,'), # Disable the fastmap optimization + ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,'), # A few sets + ('Python', 'Python'), # Simple text literal ('.*Python', 'Python'), # Bad text literal *************** *** 22,30 **** ('.*(Python)', 'Python'), # Bad text literal with grouping - ('(Python|Perl|Tcl', 'Perl'), # Alternation - ('(Python|Perl|Tcl)', 'Perl'), # Grouped alternation - ('(Python)\\1', 'PythonPython'), # Backreference - ('([0a-z][a-z]*,)+', 'a5,b7,c9,'), # Disable the fastmap optimization - ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets ] --- 34,37 ---- *************** *** 80,89 **** (r'\a[\b]\f\n\r\t\v', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), (r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), ! (r'\u', '', SYNTAX_ERROR), # A Perl escape (r'\c\e\g\h\i\j\k\m\o\p\q\y\z', 'ceghijkmopqyz', SUCCEED, 'found', 'ceghijkmopqyz'), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! (r'\x00ffffffffffffff', '\377', SUCCEED, 'found', chr(255)), ! (r'\x00f', '\017', SUCCEED, 'found', chr(15)), ! (r'\x00fe', '\376', SUCCEED, 'found', chr(254)), (r"^\w+=(\\[\000-\277]|[^\n\\])*", "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c", --- 87,101 ---- (r'\a[\b]\f\n\r\t\v', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), (r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'), ! # NOTE: not an error under PCRE/PRE: ! # (r'\u', '', SYNTAX_ERROR), # A Perl escape (r'\c\e\g\h\i\j\k\m\o\p\q\y\z', 'ceghijkmopqyz', SUCCEED, 'found', 'ceghijkmopqyz'), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! # new \x semantics ! (r'\x00ffffffffffffff', '\377', FAIL, 'found', chr(255)), ! (r'\x00f', '\017', FAIL, 'found', chr(15)), ! (r'\x00fe', '\376', FAIL, 'found', chr(254)), ! # (r'\x00ffffffffffffff', '\377', SUCCEED, 'found', chr(255)), ! # (r'\x00f', '\017', SUCCEED, 'found', chr(15)), ! # (r'\x00fe', '\376', SUCCEED, 'found', chr(254)), (r"^\w+=(\\[\000-\277]|[^\n\\])*", "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c", *************** *** 139,143 **** ('a[-b]', 'a-', SUCCEED, 'found', 'a-'), ('a[\\-b]', 'a-', SUCCEED, 'found', 'a-'), ! ('a[b-]', 'a-', SYNTAX_ERROR), ('a[]b', '-', SYNTAX_ERROR), ('a[', '-', SYNTAX_ERROR), --- 151,156 ---- ('a[-b]', 'a-', SUCCEED, 'found', 'a-'), ('a[\\-b]', 'a-', SUCCEED, 'found', 'a-'), ! # NOTE: not an error under PCRE/PRE: ! # ('a[b-]', 'a-', SYNTAX_ERROR), ('a[]b', '-', SYNTAX_ERROR), ('a[', '-', SYNTAX_ERROR), *************** *** 544,548 **** # Check odd placement of embedded pattern modifiers ! ('w(?i)', 'W', SYNTAX_ERROR), # Comments using the x embedded pattern modifier --- 557,563 ---- # Check odd placement of embedded pattern modifiers ! # not an error under PCRE/PRE: ! ('w(?i)', 'W', SUCCEED, 'found', 'W'), ! # ('w(?i)', 'W', SYNTAX_ERROR), # Comments using the x embedded pattern modifier *************** *** 578,587 **** ('[\\D]+', '1234abc5678', SUCCEED, 'found', 'abc'), ('[\\da-fA-F]+', '123abc', SUCCEED, 'found', '123abc'), ! ('[\\d-x]', '-', SYNTAX_ERROR), (r'([\s]*)([\S]*)([\s]*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'(\s*)(\S*)(\s*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! (r'\x00ff', '\377', SUCCEED, 'found', chr(255)), (r'\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), ('\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), --- 593,605 ---- ('[\\D]+', '1234abc5678', SUCCEED, 'found', 'abc'), ('[\\da-fA-F]+', '123abc', SUCCEED, 'found', '123abc'), ! # not an error under PCRE/PRE: ! # ('[\\d-x]', '-', SYNTAX_ERROR), (r'([\s]*)([\S]*)([\s]*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'(\s*)(\S*)(\s*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '), (r'\xff', '\377', SUCCEED, 'found', chr(255)), ! # new \x semantics ! (r'\x00ff', '\377', FAIL, 'found', chr(255)), ! # (r'\x00ff', '\377', SUCCEED, 'found', chr(255)), (r'\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), ('\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'), *************** *** 589,596 **** (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'), ! # additional regression tests (1.6 and later) # xmllib problem (r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'), ! ] --- 607,619 ---- (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'), ! # ! # post-1.5.2 additions # xmllib problem (r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'), ! # bug 111869 (PRE/PCRE fails on this one, SRE doesn't) ! (r'.*d', 'abc\nabd', SUCCEED, 'found', 'abd'), ! # bug 112468 ! ('(', '', SYNTAX_ERROR), ! ('[\\41]', '!', SUCCEED, 'found', '!'), ] From python-dev@python.org Thu Aug 31 23:57:57 2000 From: python-dev@python.org (Fredrik Lundh) Date: Thu, 31 Aug 2000 15:57:57 -0700 Subject: [Python-checkins] CVS: python/dist/src/Lib sre_parse.py,1.30,1.31 Message-ID: <200008312257.PAA22866@slayer.i.sourceforge.net> Update of /cvsroot/python/python/dist/src/Lib In directory slayer.i.sourceforge.net:/tmp/cvs-serv19734/Lib Modified Files: sre_parse.py Log Message: closes bug #112468 (and all the other bugs that surfaced when I fixed the a bug in the regression test harness...) Index: sre_parse.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** sre_parse.py 2000/08/07 20:59:04 1.30 --- sre_parse.py 2000/08/31 22:57:54 1.31 *************** *** 15,22 **** MAXREPEAT = 65535 - # FIXME: the following might change in 2.0 final. but for now, this - # seems to be the best way to be compatible with 1.5.2 - CHARMASK = 0xff - SPECIAL_CHARS = ".\\[{()*+?^$|" REPEAT_CHARS = "*+?{" --- 15,18 ---- *************** *** 182,188 **** self.index = self.index + len(char) self.next = char ! def match(self, char): if char == self.next: ! self.__next() return 1 return 0 --- 178,185 ---- self.index = self.index + len(char) self.next = char ! def match(self, char, skip=1): if char == self.next: ! if skip: ! self.__next() return 1 return 0 *************** *** 231,244 **** try: if escape[1:2] == "x": ! # FIXME: in 2.0, \xNN must have exactly two digits ! while source.next in HEXDIGITS: escape = escape + source.get() escape = escape[2:] ! return LITERAL, int(escape[-4:], 16) & CHARMASK elif str(escape[1:2]) in OCTDIGITS: ! while source.next in OCTDIGITS: escape = escape + source.get() escape = escape[1:] ! return LITERAL, int(escape[-6:], 8) & CHARMASK if len(escape) == 2: return LITERAL, ord(escape[1]) --- 228,244 ---- try: if escape[1:2] == "x": ! # hexadecimal escape (exactly two digits) ! while source.next in HEXDIGITS and len(escape) < 4: escape = escape + source.get() escape = escape[2:] ! if len(escape) != 2: ! raise error, "bogus escape: %s" % repr("\\" + escape) ! return LITERAL, int(escape, 16) & 0xff elif str(escape[1:2]) in OCTDIGITS: ! # octal escape (up to three digits) ! while source.next in OCTDIGITS and len(escape) < 5: escape = escape + source.get() escape = escape[1:] ! return LITERAL, int(escape, 8) & 0xff if len(escape) == 2: return LITERAL, ord(escape[1]) *************** *** 257,278 **** try: if escape[1:2] == "x": ! while source.next in HEXDIGITS: escape = escape + source.get() escape = escape[2:] ! return LITERAL, int(escape[-4:], 16) & CHARMASK elif escape[1:2] in DIGITS: ! while 1: ! group = _group(escape, state.groups) ! if group: ! if (not source.next or ! not _group(escape + source.next, state.groups)): ! return GROUPREF, group ! escape = escape + source.get() ! elif source.next in OCTDIGITS: escape = escape + source.get() ! else: ! break ! escape = escape[1:] ! return LITERAL, int(escape[-6:], 8) & CHARMASK if len(escape) == 2: return LITERAL, ord(escape[1]) --- 257,286 ---- try: if escape[1:2] == "x": ! # hexadecimal escape ! while source.next in HEXDIGITS and len(escape) < 4: escape = escape + source.get() escape = escape[2:] ! if len(escape) != 2: ! raise error, "bogus escape: %s" % repr("\\" + escape) ! return LITERAL, int(escape, 16) & 0xff ! elif escape[1:2] == "0": ! # octal escape ! while source.next in OCTDIGITS and len(escape) < 5: ! escape = escape + source.get() ! return LITERAL, int(escape[1:], 8) & 0xff elif escape[1:2] in DIGITS: ! # octal escape *or* decimal group reference (sigh) ! here = source.tell() ! if source.next in DIGITS: ! escape = escape + source.get() ! if escape[2] in OCTDIGITS and source.next in OCTDIGITS: ! # got three octal digits; this is an octal escape escape = escape + source.get() ! return LITERAL, int(escape[1:], 8) & 0xff ! # got at least one decimal digit; this is a group reference ! group = _group(escape, state.groups) ! if group: ! return GROUPREF, group ! raise error, "bogus escape: %s" % repr(escape) if len(escape) == 2: return LITERAL, ord(escape[1]) *************** *** 291,295 **** if not nested: break ! if not source.next or source.match(")"): break else: --- 299,303 ---- if not nested: break ! if not source.next or source.match(")", 0): break else: *************** *** 396,400 **** if code1[0] != LITERAL or code2[0] != LITERAL: raise error, "illegal range" ! set.append((RANGE, (code1[1], code2[1]))) else: if code1[0] is IN: --- 404,412 ---- if code1[0] != LITERAL or code2[0] != LITERAL: raise error, "illegal range" ! lo = code1[1] ! hi = code2[1] ! if hi < lo: ! raise error, "illegal range" ! set.append((RANGE, (lo, hi))) else: if code1[0] is IN: *************** *** 506,509 **** --- 518,524 ---- break source.get() + if not source.match(")"): + raise error, "unbalanced parenthesis" + continue elif source.next in ("=", "!", "<"): # lookahead assertions *************** *** 516,519 **** --- 531,536 ---- char = source.get() p = _parse_sub(source, state) + if not source.match(")"): + raise error, "unbalanced parenthesis" if char == "=": subpattern.append((ASSERT, (dir, p))) *************** *** 533,536 **** --- 550,555 ---- group = state.getgroup(name) p = _parse_sub(source, state) + if not source.match(")"): + raise error, "unbalanced parenthesis" subpattern.append((SUBPATTERN, (group, p))) else: *************** *** 626,630 **** if not code: this = this[1:] ! code = LITERAL, int(this[-6:], 8) & CHARMASK a(code) else: --- 645,649 ---- if not code: this = this[1:] ! code = LITERAL, int(this[-6:], 8) & 0xff a(code) else: From python-dev@python.org Thu Aug 31 23:12:23 2000 From: python-dev@python.org (Barry A. Warsaw) Date: Thu, 31 Aug 2000 18:12:23 -0400 (EDT) Subject: [Python-checkins] CVS: python/dist/src/Modules Makefile.pre.in,1.64,1.65 References: <200008312153.OAA03214@slayer.i.sourceforge.net> Message-ID: <14766.55367.854732.727671@anthem.concentric.net> >>>>> "Fred" == Fred L Drake writes: Fred> "Modules/Setup.in is newer than Moodules/Setup;"; \ ! echo ------------------------------------------^^^ who let the cows in here?