mirror of
https://github.com/python/cpython.git
synced 2024-11-28 12:31:14 +08:00
Merging appropriate 2.1.1 fixes back into the main trunk.
This commit is contained in:
parent
cb60dae6a1
commit
cbed91b4db
Binary file not shown.
@ -21,7 +21,26 @@
|
||||
#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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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"""
|
||||
|
@ -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 = []
|
||||
|
@ -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()
|
||||
|
Binary file not shown.
@ -105,6 +105,10 @@
|
||||
(':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', '')
|
||||
@ -208,7 +212,7 @@
|
||||
(':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', '')
|
||||
|
@ -116,6 +116,9 @@
|
||||
(':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)
|
||||
@ -452,6 +455,16 @@
|
||||
(':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)
|
||||
|
@ -1 +1 @@
|
||||
#define BUILD 92
|
||||
#define BUILD 97
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
import sys
|
||||
import os
|
||||
import string
|
||||
import regsub
|
||||
import MacOS
|
||||
|
||||
BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -5,7 +5,6 @@
|
||||
import sys
|
||||
import os
|
||||
import string
|
||||
import regsub
|
||||
import MacOS
|
||||
|
||||
BGENDIR=os.path.join(sys.prefix, ':Tools:bgen:bgen')
|
||||
|
@ -227,7 +227,7 @@ char *PyMac_getscript()
|
||||
case smCyrillic:
|
||||
return "mac-cyrillic";
|
||||
default:
|
||||
return "mac-roman"; /* better than nothing */
|
||||
return "ascii"; /* better than nothing */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
28
Mac/ReadMe
28
Mac/ReadMe
@ -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.
|
||||
|
||||
|
116
Mac/Relnotes
116
Mac/Relnotes
@ -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).
|
||||
|
Binary file not shown.
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user