]> granicus.if.org Git - python/commitdiff
Merging appropriate 2.1.1 fixes back into the main trunk.
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 3 Aug 2001 13:31:36 +0000 (13:31 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 3 Aug 2001 13:31:36 +0000 (13:31 +0000)
26 files changed:
Mac/Contrib/osam/OSAm.prj
Mac/Contrib/osam/ScriptRunner.c
Mac/Demo/PICTbrowse/ICONbrowse.py
Mac/Demo/PICTbrowse/PICTbrowse.py
Mac/Demo/PICTbrowse/PICTbrowse2.py
Mac/Demo/PICTbrowse/oldPICTbrowse.py
Mac/Demo/mlte/mlted.py
Mac/Demo/textedit/ped.py
Mac/Demo/waste/htmled.py
Mac/Demo/waste/swed.py
Mac/Demo/waste/wed.py
Mac/Distributions/(vise)/Python 2.1.vct
Mac/Distributions/binary.include
Mac/Distributions/dev.include
Mac/Include/macbuildno.h
Mac/Include/pythonresources.h
Mac/Lib/FrameWork.py
Mac/Modules/ae/aescan.py
Mac/Modules/macfsmodule.c
Mac/Modules/res/resscan.py
Mac/Python/macglue.c
Mac/Python/macmain.c
Mac/ReadMe
Mac/Relnotes
Mac/Resources/dialogs.rsrc
Mac/_checkversion.py

index 3215c1c185350e5b4e03caa165d20464a1c16ed3..87ce163394bf0c61fcea7b18abce39ba5f0ebfa8 100644 (file)
Binary files a/Mac/Contrib/osam/OSAm.prj and b/Mac/Contrib/osam/OSAm.prj differ
index 7fd68f64737e2d18c5b2ca0ce42617ae70cd8097..bf77d6bfd4a4d644e82264ca99d2bd7376a7bfb7 100644 (file)
 #include <script.h>
 #include <resources.h>
 
+#ifdef TARGET_API_MAC_CARBON
+static
+p2cstr(StringPtr p)
+{
+    unsigned char *c = p;
+    int len = c[0];
+    strncpy((char *)c+1, (char *)c, len);
+    c[len] = 0;
+}
 
+static c2pstr(const char *cc)
+{
+    char *c = (char *)cc; /* Ouch */
+    int len = strlen(c);
+    
+    if ( len > 255 ) len = 255;
+    strncpy(c, c+1, len);
+    c[0] = len;
+}
+#endif
 
 OSAError LoadScriptingComponent (ComponentInstance * scriptingComponent);
 
index c827fac0e233d25ec0776f53cdcc629dbe02d3f0..865ff9e7012af746d8458a410011c546f301452d 100644 (file)
@@ -119,9 +119,9 @@ class MyDialog(FrameWork.DialogWindow):
        def open(self, id, contents):
                self.id = id
                FrameWork.DialogWindow.open(self, ID_MAIN)
-               self.wid.SetDialogDefaultItem(MAIN_SHOW)
+               self.dlg.SetDialogDefaultItem(MAIN_SHOW)
                self.contents = contents
-               self.ctl = self.wid.GetDialogItemAsControl(MAIN_LIST)
+               self.ctl = self.dlg.GetDialogItemAsControl(MAIN_LIST)
                h = self.ctl.GetControlData_Handle(Controls.kControlListBoxPart, 
                                Controls.kControlListBoxListHandleTag)
                self.list = List.as_List(h)
index 04d321c057f6b62429245276c42e2b37c3a58c55..da32b50ec09e640ebceb80d638288711f3bb5de9 100644 (file)
@@ -97,9 +97,9 @@ class MyDialog(FrameWork.DialogWindow):
        def open(self, id, contents):
                self.id = id
                FrameWork.DialogWindow.open(self, ID_MAIN)
-               self.wid.SetDialogDefaultItem(MAIN_SHOW)
+               self.dlg.SetDialogDefaultItem(MAIN_SHOW)
                self.contents = contents
-               self.ctl = self.wid.GetDialogItemAsControl(MAIN_LIST)
+               self.ctl = self.dlg.GetDialogItemAsControl(MAIN_LIST)
                h = self.ctl.GetControlData_Handle(Controls.kControlListBoxPart, 
                                Controls.kControlListBoxListHandleTag)
                self.list = List.as_List(h)
index 903fd9be8abb44834d4abd4e750643f4d3139aef..56440f20a25c024e01b2f16ed8f581ce12db9739 100644 (file)
@@ -98,7 +98,7 @@ class PICTwindow(FrameWork.Window):
                
        def fitrect(self):
                """Return self.pictrect scaled to fit in window"""
-               graf = self.wid.GetWindowPort()
+               graf = self.dlg.GetWindowPort()
                screenrect = graf.portRect
                picwidth = self.pictrect[2] - self.pictrect[0]
                picheight = self.pictrect[3] - self.pictrect[1]
@@ -119,9 +119,9 @@ class MyDialog(FrameWork.DialogWindow):
        def open(self, id, contents):
                self.id = id
                FrameWork.DialogWindow.open(self, ID_MAIN)
-               self.wid.SetDialogDefaultItem(MAIN_SHOW)
+               self.dlg.SetDialogDefaultItem(MAIN_SHOW)
                self.contents = contents
-               self.ctl = self.wid.GetDialogItemAsControl(MAIN_LIST)
+               self.ctl = self.dlg.GetDialogItemAsControl(MAIN_LIST)
                h = self.ctl.GetControlData_Handle(Controls.kControlListBoxPart, 
                                Controls.kControlListBoxListHandleTag)
                self.list = List.as_List(h)
index 72a29def63f2bcc1b0412c2e939fef7cbb88f171..0012958c16b27b51927ae30990e99dfaeff793e9 100644 (file)
@@ -96,8 +96,8 @@ class MyDialog(FrameWork.DialogWindow):
        def open(self, id, contents):
                self.id = id
                FrameWork.DialogWindow.open(self, ID_MAIN)
-               self.wid.SetDialogDefaultItem(MAIN_SHOW)
-               tp, h, rect = self.wid.GetDialogItem(MAIN_LIST)
+               self.dlg.SetDialogDefaultItem(MAIN_SHOW)
+               tp, h, rect = self.dlg.GetDialogItem(MAIN_LIST)
                rect2 = rect[0]+1, rect[1]+1, rect[2]-17, rect[3]-17    # Scroll bar space
                self.list = List.LNew(rect2, (0, 0, 1, len(contents)), (0,0), 0, self.wid,
                                0, 1, 1, 1)
@@ -145,7 +145,7 @@ class MyDialog(FrameWork.DialogWindow):
                        self.parent.showPICT(resid)
                
        def do_rawupdate(self, window, event):
-               tp, h, rect = self.wid.GetDialogItem(MAIN_LIST)
+               tp, h, rect = self.dlg.GetDialogItem(MAIN_LIST)
                Qd.SetPort(self.wid)
                Qd.FrameRect(rect)
                self.list.LUpdate(self.wid.GetWindowPort().visRgn)
index 0f78693cee41ea7cb5806e16862bb5ba7b101b65..10d56989fdb3ce8c1b44690cbbeaf3fde91bee7a 100644 (file)
@@ -24,7 +24,7 @@ class MlteWindow(Window):
                self.path = path
                self.name = name
                r = windowbounds(400, 400)
-               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
+               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0)
                self.wid = w
                flags = MacTextEditor.kTXNDrawGrowIconMask|MacTextEditor.kTXNWantHScrollBarMask| \
                                MacTextEditor.kTXNWantVScrollBarMask
@@ -361,6 +361,8 @@ class Mlted(Application):
        def idle(self, event):
                if self.active:
                        self.active.do_idle(event)
+               else:
+                       Qd.SetCursor(Qd.qd.arrow)
 
 def main():
        Mlte.TXNInitTextension(0)
index 9b222a3618340122dfb46e7de3536c4317ebaddc..529ac12240682cf5474a6499ee55a82eabab87c7 100644 (file)
@@ -19,7 +19,7 @@ class TEWindow(ScrolledWindow):
                self.path = path
                self.name = name
                r = windowbounds(400, 400)
-               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
+               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0)
                self.wid = w
                x0, y0, x1, y1 = self.wid.GetWindowPort().portRect
                x0 = x0 + 4
@@ -338,6 +338,8 @@ class Ped(Application):
        def idle(self, *args):
                if self.active:
                        self.active.do_idle()
+               else:
+                       Qd.SetCursor(Qd.qd.arrow)
 
 def main():
        App = Ped()
index 764394747417515071b6c77431832c8810c57f24..4d29e1ea9b839a2d9288700ba16f337416046743 100644 (file)
@@ -15,7 +15,6 @@ import Scrap
 import os
 import macfs
 import MACFS
-import regsub
 import string
 import htmllib
 
@@ -47,7 +46,7 @@ class WasteWindow(ScrolledWindow):
                self.path = path
                self.name = name
                r = windowbounds(400, 400)
-               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
+               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0)
                self.wid = w
                vr = LEFTMARGIN, 0, r[2]-r[0]-15, r[3]-r[1]-15
                dr = (0, 0, vr[2], 0)
@@ -445,7 +444,7 @@ class WasteWindow(ScrolledWindow):
                self.ted.WEInsert(data, None, None)
                
        def send_literal_data(self, data):
-               data = regsub.gsub('\n', '\r', data)
+               data = string.replace(data, '\n', '\r')
                data = string.expandtabs(data)
                self.ted.WEInsert(data, None, None)
                
@@ -775,6 +774,8 @@ class Wed(Application):
        def idle(self, event):
                if self.active:
                        self.active.do_idle(event)
+               else:
+                       Qd.SetCursor(Qd.qd.arrow)
                        
        def newRuler(self, obj):
                """Insert a new ruler. Make it as wide as the window minus 2 pxls"""
index b62fd9ae747eeaa8b7622c4a7ff8c8e8734c38a4..e4622da2c2f378f2f8a40fe5fc690d34f404f042 100644 (file)
@@ -34,7 +34,7 @@ class WasteWindow(ScrolledWindow):
                self.path = path
                self.name = name
                r = windowbounds(400, 400)
-               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
+               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0)
                self.wid = w
                vr = 0, 0, r[2]-r[0]-15, r[3]-r[1]-15
                dr = (0, 0, 10240, 0)
@@ -603,6 +603,8 @@ class Wed(Application):
        def idle(self, event):
                if self.active:
                        self.active.do_idle(event)
+               else:
+                       Qd.SetCursor(Qd.qd.arrow)
                        
 def getfontnames():
        names = []
index 7b408648fda5e3a10833c2da35ca2b0eaae2fef0..342d52e27868b32dcb40762cb8b54b002b980268 100644 (file)
@@ -25,7 +25,7 @@ class WasteWindow(ScrolledWindow):
                self.path = path
                self.name = name
                r = windowbounds(400, 400)
-               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
+               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0)
                self.wid = w
                vr = 0, 0, r[2]-r[0]-15, r[3]-r[1]-15
                dr = (0, 0, 10240, 0)
@@ -411,6 +411,8 @@ class Wed(Application):
        def idle(self, event):
                if self.active:
                        self.active.do_idle(event)
+               else:
+                       Qd.SetCursor(Qd.qd.arrow)
 
 def main():
        App = Wed()
index d86b1bea53776f09ebe8544b0e82d5e71ae520a3..1c38af1d8273bfe78f829e0ca931e35761cd8350 100644 (file)
Binary files a/Mac/Distributions/(vise)/Python 2.1.vct and b/Mac/Distributions/(vise)/Python 2.1.vct differ
index c1ca5307e28e45553707fa3c9a635722a2ef1666..4701bfcbc7ecda4281fdb436680fbf0de17604d7 100644 (file)
 (':Mac:Build', None)
 (':Mac:Compat:Icon', None)
 (':Mac:Contrib:AECaptureParser', '')
+(':Mac:Contrib:BBPy.lm:BBpy.r', None)
+(':Mac:Contrib:BBPy.lm:Python', '')
+(':Mac:Contrib:BBPy.lm:Python Keywords.rsrc', None)
+(':Mac:Contrib:BBPy.lm:PythonBBLM.txt', '')
 (':Mac:Contrib:BBPy:PythonSlave.py', '')
 (':Mac:Contrib:BBPy:README', '')
 (':Mac:Contrib:BBPy:Run as Python', '')
 (':pystone.py', None)
 (':setup.py', None)
 (':site-packages', None)
-(':Mac:Contrib:BBPy.lm:Python', '')
-(':Mac:Contrib:BBPy.lm:PythonBBLM.txt', '')
-(':Mac:Contrib:BBPy.lm:BBpy.r', None)
-(':Mac:Contrib:BBPy.lm:Python Keywords.rsrc', None)
+(':Extensions:example3:README', None)
+(':Extensions:example2:README', None)
+(':Extensions:example:README', None)
+(':Mac:Contrib:osam:OSAm.carbon.slb', '')
index 4fae0e1319763a8c447e33631370c952d923b63f..ff3f0c80c732fea0f42a8c1bf0454826a8a56b97 100644 (file)
 (':Mac:Build:TE.mcp.exp', None)
 (':Mac:Build:TE.mcp.xml', None)
 (':Mac:Build:TE.mcp.xml.out', None)
+(':Mac:Build:_dummy_tkinter.mcp', None)
+(':Mac:Build:_dummy_tkinter.mcp.exp', None)
+(':Mac:Build:_dummy_tkinter.old.mcp', None)
 (':Mac:Build:_symtable.carbon.mcp', None)
 (':Mac:Build:_symtable.carbon.mcp.exp', None)
 (':Mac:Build:_symtable.carbon.mcp.xml', None)
 (':readmefiles', None)
 (':setup.py', None)
 (':site-packages', None)
-(':Mac:Build:_dummy_tkinter.old.mcp', None)
-(':Mac:Build:_dummy_tkinter.mcp.exp', None)
-(':Mac:Build:_dummy_tkinter.mcp', None)
+(':Extensions:example', None)
+(':Extensions:example2', None)
+(':Extensions:example3', None)
+(':Mac:Demo:mlte:mlted.py', None)
+(':Mac:Build:Mlte.mcp.xml', None)
+(':Mac:Build:Mlte.mcp.exp', None)
+(':Mac:Build:Mlte.mcp', None)
+(':Mac:Build:Mlte.carbon.mcp.xml', None)
+(':Mac:Build:Mlte.carbon.mcp.exp', None)
+(':Mac:Build:Mlte.carbon.mcp', None)
+(':Mac:Build:CF.carbon.mcp.xml', None)
+(':Mac:Build:CF.carbon.mcp.exp', None)
+(':Mac:Build:CF.carbon.mcp', None)
index d3337c20195fe90419a885e0cafe083a0b774ca4..1956b4daede789114fc9d7f04449d44a9977ba41 100644 (file)
@@ -1 +1 @@
-#define BUILD 92
+#define BUILD 97
index 29026a88c4083f2b98a26dc5a80d1f421a6ced21..9f8b2c452a984b09a5957244c7ebcfe163385a44 100644 (file)
@@ -95,6 +95,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 /* No preferences file name resource */
 #define NOPREFNAME_ID  BASE_ID+9
 
+/* Not a script */
+#define NOTASCRIPT_ID BASE_ID+10
+
 /* EditPythonPrefs range. Needed here to forestall conflicts with applets */
 #define EDITPYTHONPREFS_MIN    508
 #define EDITPYTHONPREFS_MAX 511
index 4735fc42e6cb09691611a479b5bad81b99c77ad4..3ee118da2e06241fcb45435e3e93d2a3c2cc65c5 100644 (file)
@@ -1010,6 +1010,10 @@ class DialogWindow(Window):
        def close(self):
                self.do_postclose()
                
+       def do_postclose(self):
+               self.dlg = None
+               Window.do_postclose(self)
+               
        def do_itemhit(self, item, event):
                print 'Dialog %s, item %d hit'%(self.dlg, item)
                
index 7007b4afc12a03fa771694da3e7f77e6a31d80a2..2852f1323385af4aba0066aee009cc99defbf45b 100644 (file)
@@ -5,7 +5,6 @@
 import sys
 import os
 import string
-import regsub
 import MacOS
 
 BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
index 5e34a648fc5e1f08ae59de8267876ed62b2f6c29..e6f11aeec4e35becd11da5a69a6a6ff0728c1ad2 100644 (file)
@@ -367,6 +367,7 @@ _mfs_GetFSSpecFromFSSpec(PyObject *self, FSSpec *fssp)
 static int
 _mfs_GetFSSpecFromFSRef(PyObject *self, FSSpec *fssp)
 {
+#if !TARGET_API_MAC_OS8
        static FSRef *fsrp;
        
        if ( is_mfsrobject(self) ) {
@@ -374,6 +375,7 @@ _mfs_GetFSSpecFromFSRef(PyObject *self, FSSpec *fssp)
                if ( FSGetCatalogInfo(&((mfsrobject *)self)->fsref, kFSCatInfoNone, NULL, NULL, fssp, NULL) == noErr )
                        return 1;
        }
+#endif
        return 0;
 }
 
@@ -381,10 +383,12 @@ _mfs_GetFSSpecFromFSRef(PyObject *self, FSSpec *fssp)
 static int
 _mfs_GetFSRefFromFSRef(PyObject *self, FSRef *fsrp)
 {
+#if !TARGET_API_MAC_OS8
        if ( is_mfsrobject(self) ) {
                *fsrp = ((mfsrobject *)self)->fsref;
                return 1;
        }
+#endif
        return 0;
 }
 
@@ -392,10 +396,12 @@ _mfs_GetFSRefFromFSRef(PyObject *self, FSRef *fsrp)
 static int
 _mfs_GetFSRefFromFSSpec(PyObject *self, FSRef *fsrp)
 {
+#if !TARGET_API_MAC_OS8
        if ( is_mfssobject(self) ) {
                if ( FSpMakeFSRef(&((mfssobject *)self)->fsspec, fsrp) == noErr )
                        return 1;
        }
+#endif
        return 0;
 }
 
@@ -524,6 +530,10 @@ mfss_FSpMakeFSRef(self, args)
        mfssobject *self;
        PyObject *args;
 {
+#if TARGET_API_MAC_OS8
+       PyErr_SetString(PyExc_NotImplementedError, "FSRef objects not supported on this platform");
+       return 0;
+#else
        OSErr err;
        FSRef fsref;
        
@@ -535,6 +545,7 @@ mfss_FSpMakeFSRef(self, args)
                return NULL;
        }
        return (PyObject *)newmfsrobject(&fsref);
+#endif
 }
 
 /* XXXX These routines should be replaced by a wrapper to the *FInfo routines */
@@ -766,7 +777,7 @@ statichere PyTypeObject Mfsstype = {
 
 /* End of code for FSSpec objects */
 /* -------------------------------------------------------- */
-
+#if !TARGET_API_MAC_OS8
 static PyObject *
 mfsr_as_fsspec(self, args)
        mfsrobject *self;
@@ -871,6 +882,7 @@ statichere PyTypeObject Mfsrtype = {
 };
 
 /* End of code for FSRef objects */
+#endif /* !TARGET_API_MAC_OS8 */
 /* -------------------------------------------------------- */
 
 static PyObject *
@@ -1002,11 +1014,16 @@ mfs_FSRef(self, args)
        PyObject *self; /* Not used */
        PyObject *args;
 {
+#if TARGET_API_MAC_OS8
+       PyErr_SetString(PyExc_NotImplementedError, "FSRef objects not supported on this platform");
+       return 0;
+#else
        FSRef fsr;
 
        if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSRef, &fsr))
                return NULL;
        return (PyObject *)newmfsrobject(&fsr);
+#endif
 }
 
 static PyObject *
@@ -1172,6 +1189,9 @@ static struct PyMethodDef mfs_methods[] = {
 int
 PyMac_GetFSRef(PyObject *v, FSRef *fsr)
 {
+#if TARGET_API_MAC_OS8
+       return 0;
+#else
        OSErr err;
 
        /* If it's an FSRef we're also okay. */
@@ -1186,12 +1206,17 @@ PyMac_GetFSRef(PyObject *v, FSRef *fsr)
        }
        PyErr_SetString(PyExc_TypeError, "FSRef argument should be existing FSRef, FSSpec or (OSX only) pathname");
        return 0;
+#endif
 }
 
 /* Convert FSSpec to PyObject */
 PyObject *PyMac_BuildFSRef(FSRef *v)
 {
+#if TARGET_API_MAC_OS8
+       return NULL;
+#else
        return (PyObject *)newmfsrobject(v);
+#endif
 }
 
 /*
index 5b68623f38992e62c9f83b47e3581c7db784cd36..d748adb8b5be15b233708941c4943eeaa0afc795 100644 (file)
@@ -5,7 +5,6 @@
 import sys
 import os
 import string
-import regsub
 import MacOS
 
 BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
index c760107a990f16ebb4af31dbd2cba45f5d41bd7f..5fdfe559efa49c2e72222b8bd25a8a028632a110 100644 (file)
@@ -227,7 +227,7 @@ char *PyMac_getscript()
     case smCyrillic:
         return "mac-cyrillic";
     default:
-        return "mac-roman"; /* better than nothing */
+        return "ascii"; /* better than nothing */
     }
 }
 
index 10c5a5ff74804897e5a56232124f9ed70dd84067..b82395c9f439df54544bea7ed745cfe12ce5377b 100644 (file)
@@ -486,6 +486,11 @@ PyMac_InitApplication()
                        PyMac_FixGUSIcd();
 #endif
                }
+               /* Check that the first argument is a text file */
+               if ( PyMac_getfiletype(argv[1]) != 'TEXT' ) {
+                       Alert(NOTASCRIPT_ID, NULL);
+                       exit(0);
+               }
        }
        Py_Main(argc, argv);
 }
index adf62142814dd9bb7565fc323b0f2c48efecb99c..86b7a45de3121f72fabd52dcda95c5cdccc808ad 100644 (file)
@@ -1,11 +1,9 @@
-How to install Python 2.1 on your Macintosh
--------------------------------------------
+How to install Python 2.1.1 on your Macintosh
+---------------------------------------------
 
 This is a MacPython that can run on classic MacOS (from 8.1
 onwards) and natively on MacOSX. The installer tries to work out whether you can
-use the Carbon version or not. This is also the first MacPython distribution
-to be packaged as an active installer, which only downloads the parts you actually
-need. Let me hear about problems in these areas.
+use the Carbon version or not.
 
 You should definitely read the Relnotes file too.
 
@@ -13,8 +11,6 @@ A special note about the active installer: do not background it, it may hang
 your machine. This is a general problem with Vise active installers, MindVision
 are working on it.
 
-If you installed a 2.1 beta on MacOSX you MUST read the uninstall section below.
-
 ------
 
 If this is your first encounter with Python: you definitely need the
@@ -30,7 +26,7 @@ now. The documentation is in HTML format, start with index.html.
 
 Caveats
 -------
-Aside from the general new Python 2.1 features compared to 2.0 the main
+Aside from the general new Python 2.1.1 features compared to 2.0 the main
 feature of this release is Carbon support.
 
 This installer installs MacPython for classic PPC MacOS, MacPython for Carbon
@@ -82,8 +78,8 @@ After installing
 It is probably a good idea to run the automatic tests. Start
 Python and "import test.autotest". 
 
-Two tests will fail on MacOS9, both with MemoryErrors:
-test_longexp and test_zlib (on MacOSX nothing should fail).
+Three tests will fail on MacOS9, all with MemoryErrors:
+test_longexp, test_sha and test_zlib (on MacOSX nothing should fail).
 
 If you increase the PythonInterpreter memory
 partition size they will pass (but for longexp you have to increase it by an
@@ -108,7 +104,7 @@ Uninstalling
 
 Two items are installed in the system folder: the interpreter shared
 libraries PythonCore and PythonCoreCarbon lives in the Extensions folder and the
-"Python 2.1 Preferences" file in the Python subfolder in the
+"Python 2.1.1 Preferences" file in the Python subfolder in the
 Preferences folder. All the rest of Python lives in the folder you
 installed in.
 
@@ -117,7 +113,7 @@ in OSX that is triggered by Python: if any orphaned aliases are left in
 /Library/CFMSupport your machine will start to behave very badly. 2.1
 beta installers triggered this problem if you simply threw away your Python folder,
 so if you installed a 2.1beta you should clean out the aliases in /Library/CFMSupport
-too. This final 2.1 installer always copies the shared libraries on OSX, so it does
+too. The final 2.1 installer always copied the shared libraries on OSX, so it does
 not have the problem anymore.
 
 Things to see
@@ -157,9 +153,9 @@ that this means you can keep your older version around if you are unsure
 whether to upgrade. The bad news is that your old preference settings
 are lost and you have to set them again.
 
-After you are satisfied that 2.1 works as expected you can trash
+After you are satisfied that 2.1.1 works as expected you can trash
 anything in the system folder that has "python" in the name and not
-"2.1".
+"2.1.1".
 
 As of 2.1 the ConfigurePython applets will try to detect incompatible preferences
 files and offer to remove them. This means that re-running ConfigurePython after
@@ -191,8 +187,8 @@ course. Mac-specific thanks go to the pythonmac-sig, Just van Rossum,
 Corran Webster, Tony Ingraldi, Erik van Blokland, Bill Bedford, Chris
 Stern, Gordon Worley, Oliver Steele, M. Papillon, Steven Majewski, David
 Goodger, Chris Barker, Luc Lefebvre, Tattoo Mabonzo K., Russell Finn,
-Tom Bridgman Russel Owen and all the other people who provided feedback,
-code or both!
+Tom Bridgman, Russel Owen, Pascal Oberndoerfer and all the other people
+who provided feedback, code or both!
 
 MacPython includes waste, a TextEdit replacement which is (c) 1998 Marco Piovanelli.
 
index 772ea566a227586ae4574656c1117879cfc884b6..f776efd9cd48f7a30ebf4565b623259dddb7d04b 100644 (file)
@@ -1,83 +1,42 @@
-Changes in 2.1 since 2.0
+Changes in 2.1.1 since 2.1
 --------------------------
 
 These release notes refer to Mac-specific changes only. See NEWS (in the Misc folder)
-for machine-independent changes. Changes since 2.1b2 are
-marked with [*] and at the bottom of the list.
-
-- This release is optionally Carbon-based, so it runs natively on MacOS 8.1 or
-  later and MacOSX. (Note that on MacOSX MacPython will run as a normal Mac application,
-  if you want to run Python from the BSD commandline get a unix-Python distribution
-  from www.python.org). 
-- Alternatively there is a classic PPC interpreter as well. There are two reasons you
-  might want to use this: (a) you have a pre-MacOS9 system and don't want to install
-  CarbonLib, or (b) you need Tkinter, for which no Carbon version is available yet.
-- Distutils is included and seems to work. On 8.1 you may want to get Apple's
-  CarbonLib installer even if you plan to run classic, it contains the newer Appearance 
-  Mgr which Python needs (according to rumour).
-- There's a new module (package, actually) mkcwproject which builds CodeWarrior
-  projects from simple templates. See Distutils or :Mac:scripts:genpluginprojects.py
-  for examples of use.
-- The Numerical extension has moved to :Lib:site-python from :Extensions. As Numerical
-  is now distutils-based you can easily install newer versions when they become
-  available.
-- The Help and ctb modules are not available under Carbon because that functionality is
-  not in Carbon.
-- Windows and Dialogs can now be different beasts, so you may have to call
-  dlg.GetDialogWindow() where you used to be able to call window methods straight
-  on the dialog. This also has consequences for code using FrameWork.DialogWindow.
-  THIS IS AN INCOMPATIBLE CHANGE.
-- ctl.GetControlDataHandle() has been renamed to GetControlData_Handle(), and similarly
-  for the other variants of GetControlData and SetControlData. This was needed
-  because Carbon defines a completely different routine with the name GetControlDataHandle.
-  THIS IS AN INCOMPATIBLE CHANGE.
-- Method mac.xstat() has disappeared. THIS IS AN INCOMPATIBLE CHANGE.
-- Menu.SetPopupData() and GetPopupData() are gone. Use SetPopupMenuHandle() and
-  SetPopupMenuID() (and the getters) in stead. THIS IS AN INCOMPATIBLE CHANGE.
-- Various methods have disappeared when running under Carbon. The script
-  :Mac:scripts:missingcarbonmethods.py can check your sources, but you need unix to run
-  it. Or use it as documentation and search by hand. THIS IS AN INCOMPATIBLE CHANGE.
-- The good news is that "direct access to toolbox structs" still works from Python,
-  so Python programmers have a lot less to fix than C programmers.
-  That's because the lowlevel code simply uses the accessors internally. The accessors
-  are available both in Carbon and Classic MacPython.
-- Scrap under Carbon is, you guessed it, the Carbon Scrap Manager. Some workarounds are
-  provided, though. THIS IS AN INCOMPATIBLE CHANGE.
-- The Internet Config routines that are missing from Carbon have been removed. This
-  is no problem if you use the "ic" module, but may be if you use "icglue" directly.
-  THIS IS AN INCOMPATIBLE CHANGE.
-- Various old toolbox names (CountMItems, EnableItem, etc) have disappeared. Use the
-  new forms (CountMenuItems, EnableMenuItem, etc). THIS IS AN INCOMPATIBLE CHANGE.
-- Waste now uses Waste 2.0.
-- The default memory size for the interpreter has been upped again.
-- The MacOS error messages have been updated to reflect the current state of
-  things. This was long overdue.
-- The crash in BuildApplication has been fixed.
-- struct.pack related problems (in Audio_Mac, for example) have been fixed.
-- (src/dev/cvs only): The project files now use the .mcp extension in stead of .prj.
-  Projects for almost all plugins and the img modules are automatically generated
-  with :Mac:scripts:genpluginprojects.py (also called by fullbuild). The .mcp files
-  are not in the repository, if you don't want to use genpluginprojects you can import
-  the .mcp.xml files in CodeWarrior.
-- ConfigurePython has been replace by two applets: ConfigurePythonClassic and
-  ConfigurePythonCarbon. These will select either execution model for machines
-  supporting both, and it will also build all the standard applets.
-- PythonInterpreterCarbon and PythonInterpreterClassic are now files of type "Atmp", not
-  "APPL", so there should not be any confusion as to what the real application is
-  (PythonInterpreter).
-- A BBEdit language module by Chris Stern is included in the :Mac:Contrib folder.
-- The ConfigurePython applets will now detect if the preference file refers to a different
-  folder than where they live. They offer to remove the preference file in this case.
-- Import case-check was broken in 2.1b1, this is fixed.
-- A side-effect of the previous fix is that getpass works again.
-- BuildApplication was broken under Carbon. Fixed.
-- Morefindertools functionality integrated into findertools. [*]
-- ped.py from Mac:Demo crashed, this has been fixed by making Win.WhichWindow more robust. [*]
-- Tkinter mainloop is now a little less aggressive in eating events. [*]
-- The Python console window is raised to the front when input is read. This fixes a hang
-  (for Carbon only) when crashing with a modal dialog open. [*]
-- The menu bar is (again) restored when Python is terminating. [*]
+for machine-independent changes.
 
+- Handling non-ascii characters in sys.path on non-MacRoman systems should  be fixed,
+  iff MacPython has a codec for the charset. Otherwise you should get an error, at least.
+  Pathnames in sys.path also retain their original case again.
+- IDE could crash on corrupt preferences. Fixed.
+- IDE will now work if you use either pre or sre as re.
+- Evt.WaitNextEvent could give an error when bit 15 was set, which could cause a problem
+  with IDE in classic mode. Fixed.
+- MacOS8.X users in classic mode had problems with Fm not loading, which also caused
+  IDE not working. Fixed.
+- Fm.IsAntiAliasedTextEnabled and Fm.SetAntiAliasedTextEnabled have gone for now, to
+  fix the problem above.
+- Disabled the Tkinter file I/O event handler, which was there but didn't work anyway.
+- Problems with loading dynamic modules that are part of a package into BuildApplication-
+  generated programs were fixed.
+- The order of the EasyDialogs yes/no/cancel buttons has been conformed to the Mac
+  standard.
+- Handling of Dialogs and Windows that were not created by Python is a bit more graceful
+  now, which may fix some crashes.
+- Ctl.SendControlMessage has gone. But it didn't work anyway.
+- Various problems with the TextEdit and Waste demos have been fixed.
+- Embedding/extending only: in preparation to allowing the use of MacPython modules in
+  unix-Python on OSX the xxx_New and xxx_Convert routines are now optionally vectored via
+  glue routines in macglue.c. The only change that may be needed for embedders/extenders is
+  that you may want to include pymactoolbox.h in your sources.
+- Embedding/extending only: Most MacPython source is now much more Mach-O friendly, and
+  should work with Universal Headers 3.4.
+- Experimental: an Mlte module has been added, an interface to the Multi Lingual Text
+  Engine. There is a minimal example in :Mac:Demos:mlte.
+- Experimental: some support for FSRef objects has been added. You can do little more that
+  convert them to/from FSSpecs. Carbon only.
+- Experimental: the CF module has some support for CoreFoundation types. CFString
+  and CFURL work, to a degree, and can be converted to/from Python strings and Unicode
+  objects. Carbon only.
 
 What is not in this distribution
 --------------------------------
@@ -92,6 +51,9 @@ Known problems
 This list is probably incomplete, more problems may be listed on the MacPython homepage,
 http://www.cwi.nl/~jack/macpython.html.
 
+- MacPython 2.1.1 (and MacPython 2.1) will not run correctly on a multiprocessor MacOS X
+  machine, it will quickly deadlock during I/O operations. The GUSI I/O library is suspected,
+  hints/clues/workarounds are solicited.
 - Tkinter does not work under Carbon.
 - The IDE and Tkinter do not work together. Run tkinter programs under PythonInterpreter.
 - Tkinter file events do not work, unless you have opened the file through Tcl (but then
@@ -102,3 +64,5 @@ http://www.cwi.nl/~jack/macpython.html.
 - PythonInterpreter used interactively will eat a lot of processor cycles. You should use
   PythonIDE for interactive work and PythonInterpreter for scripts only. This is especially
   true under OSX.
+- AliasMenu 2.2 conflicts with the Carbon version of Python. This is most likely a problem
+  with AliasMenu (which is from 1999, and thus predates Carbon altogether).
index 52efd23a576a169559bf7632cab5368d063bc3e2..1e219b267459e6d12be38550b2231784da26634e 100644 (file)
Binary files a/Mac/Resources/dialogs.rsrc and b/Mac/Resources/dialogs.rsrc differ
index 6efe92d124ee36d759a6fb84832f3bc02566db6e..b7c6944b159506db14a15817ad849b40e57540a4 100644 (file)
@@ -5,7 +5,7 @@ _checkversion.py file"""
 import pyversioncheck
 
 _PACKAGE="MacPython"
-_VERSION="2.1"
+_VERSION="2.1.1"
 _URL="http://www.cwi.nl/~jack/macpythonversion.txt"
 
 try: