From 0194ad5c7d2a0ffe473b87933768cb509417ff59 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Sat, 12 May 2001 22:46:35 +0000 Subject: Got the first MacPython module working under MacOSX/MachO (gestalt). Main changes are including Carbon/Carbon.h in stead of the old headers (unless WITHOUT_FRAMEWORKS is defined, as it will be for classic MacPython) and selectively disabling all the stuff that is unneeded in a unix-Python (event handling, etc). --- Mac/Include/macglue.h | 13 +++++-- Mac/Modules/gestaltmodule.c | 4 ++ Mac/Python/macglue.c | 92 ++++++++++++++++++++------------------------- 3 files changed, 55 insertions(+), 54 deletions(-) diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h index 100c204..9b55a4f 100644 --- a/Mac/Include/macglue.h +++ b/Mac/Include/macglue.h @@ -22,10 +22,14 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ +#ifdef WITHOUT_FRAMEWORKS #include #include #include #include +#else +#include +#endif #ifdef __cplusplus extern "C" { @@ -47,6 +51,8 @@ extern void PyMac_SetGUSISpin(void); /* Install our private GUSI spin routine * #endif char *PyMac_StrError(int); /* strerror with mac errors */ +PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ +PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ unsigned char *Pstring(char *str); /* Convert c-string to pascal-string in static buffer */ #ifdef USE_GUSI @@ -65,19 +71,20 @@ extern int PyMac_AppearanceCompliant; /* True if in appearance support mode */ extern PyObject *PyMac_OSErrException; /* Exception for OSErr */ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ +#if !TARGET_API_MAC_OSX void PyMac_GetSchedParams(PyMacSchedParams *); /* Get schedulers params */ void PyMac_SetSchedParams(PyMacSchedParams *); /* Set schedulers params */ -PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ -PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ int PyMac_DoYield(int, int); /* Yield cpu. First arg is maxtime, second ok to call python */ +#endif int PyMac_HandleEvent(EventRecord *); /* Handle one event, possibly in Python */ void PyMac_HandleEventIntern(EventRecord *); /* Handle one event internal only */ int PyMac_SetEventHandler(PyObject *); /* set python-coded event handler */ +#if !TARGET_API_MAC_OSX void PyMac_InitMenuBar(void); /* Setup menu bar as we want it */ void PyMac_RestoreMenuBar(void); /* Restore menu bar for ease of exiting */ void PyMac_RaiseConsoleWindow(); /* Bring console window to front, if it exists */ - +#endif int PyMac_FindResourceModule(PyStringObject *, char *, char *); /* Test for 'PYC ' resource in a file */ PyObject * PyMac_LoadResourceModule(char *, char *); /* Load 'PYC ' resource from file */ int PyMac_FindCodeResourceModule(PyStringObject *, char *, char *); /* Test for 'PYD ' resource in a file */ diff --git a/Mac/Modules/gestaltmodule.c b/Mac/Modules/gestaltmodule.c index 3cba45b..15a2c89 100644 --- a/Mac/Modules/gestaltmodule.c +++ b/Mac/Modules/gestaltmodule.c @@ -27,8 +27,12 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "Python.h" #include "macglue.h" +#ifdef WITHOUT_FRAMEWORKS #include #include +#else +#include +#endif static PyObject * gestalt_gestalt(self, args) diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c index 928b07f..844ee42 100644 --- a/Mac/Python/macglue.c +++ b/Mac/Python/macglue.c @@ -22,24 +22,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ -#ifdef __CFM68K__ -/* cfm68k InterfaceLib exports GetEventQueue, but Events.h doesn't know this -** and defines it as GetEvQHdr (which is correct for PPC). This fix is for -** CW9, check that the workaround is still needed for the next release. -*/ -#define GetEvQHdr GetEventQueue -#endif /* __CFM68K__ */ - -#include - -#if !TARGET_API_MAC_OS8 -/* Unfortunately this call is probably slower... */ -#define LMGetTicks() TickCount() -#endif - -#ifdef __CFM68K__ -#undef GetEventQueue -#endif /* __CFM68K__ */ #include "Python.h" @@ -50,6 +32,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "pythonresources.h" +#ifdef WITHOUT_FRAMEWORKS #include /* for Set(Current)A5 */ #include #include @@ -61,6 +44,29 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include +#ifdef __CFM68K__ +/* cfm68k InterfaceLib exports GetEventQueue, but Events.h doesn't know this +** and defines it as GetEvQHdr (which is correct for PPC). This fix is for +** CW9, check that the workaround is still needed for the next release. +*/ +#define GetEvQHdr GetEventQueue +#endif /* __CFM68K__ */ + +#include + +#ifdef __CFM68K__ +#undef GetEventQueue +#endif /* __CFM68K__ */ +#else +#include +#endif + +#if !TARGET_API_MAC_OS8 +/* Unfortunately this call is probably slower... */ +#define LMGetTicks() TickCount() +#endif + #ifdef __MWERKS__ #include extern void SIOUXSetupMenus(void); @@ -80,7 +86,6 @@ extern pascal unsigned char *PLstrrchr(unsigned char *, unsigned char); #include /* For Path2FSSpec */ #include #endif -#include /* The ID of the Sioux apple menu */ #define SIOUX_APPLEID 32000 @@ -132,7 +137,9 @@ extern PyObject *newmfssobject(FSSpec *); static int interrupted; /* Set to true when cmd-. seen */ static RETSIGTYPE intcatcher(int); +#if !TARGET_API_MAC_OSX static int PyMac_Yield(void); +#endif /* ** These are the real scheduling parameters that control what we check @@ -466,6 +473,7 @@ PyOS_CheckStack() } #endif /* USE_STACKCHECK */ +#if !TARGET_API_MAC_OSX /* The catcher routine (which may not be used for all compilers) */ static RETSIGTYPE intcatcher(sig) @@ -539,31 +547,13 @@ PyErr_CheckSignals() return 0; } -#if 0 -/* -** This routine is called if we know that an external library yielded -** to background tasks, so we shouldn't count that time in our computation -** of how much CPU we used. -** This happens with SIOUX, and the routine is called from our modified -** GUSISIOUX. -*/ -void -PyMac_LibraryDidYield(int howlong) -{ - unsigned long maxnextcheck = (unsigned long)LMGetTicks() + schedparams.check_interval; - - schedparams.next_check = schedparams.next_check + howlong; - if (schedparams.next_check > maxnextcheck ) - schedparams.next_check = maxnextcheck; -} -#endif - int PyOS_InterruptOccurred() { scan_event_queue(1); return interrupted; } + /* Check whether we are in the foreground */ static int PyMac_InForeground(void) @@ -582,8 +572,8 @@ PyMac_InForeground(void) else if ( SameProcess(&ours, &curfg, &eq) < 0 ) eq = 1; return (int)eq; - } +#endif int PyMac_SetEventHandler(PyObject *evh) @@ -655,6 +645,7 @@ PyMac_HandleEvent(evp) return 0; } +#if !TARGET_API_MAC_OSX /* ** Yield the CPU to other tasks without processing events. */ @@ -845,18 +836,9 @@ SIOUXDoAboutBox(void) DisposeDialog(theDialog); } -#if 0 -int -PyMac_FileExists(char *name) -{ - FSSpec fss; - - if ( FSMakeFSSpec(0, 0, Pstring(name), &fss) == noErr ) - return 1; - return 0; -} -#endif +#endif /* !TARGET_API_MAC_OSX */ +#if TARGET_API_MAC_OS8 /* ** Helper routine for GetDirectory */ @@ -878,7 +860,7 @@ myhook_proc(short item, DialogPtr theDialog, struct hook_args *dataptr) } return item; } -#if TARGET_API_MAC_OS8 + /* ** Ask the user for a directory. I still can't understand ** why Apple doesn't provide a standard solution for this... @@ -1016,12 +998,15 @@ PyMac_GetFSSpec(PyObject *v, FSSpec *fs) OSErr err; FSSpec *fs2; +#if !TARGET_API_MAC_OSX + /* XXX This #if is temporary */ /* first check whether it already is an FSSpec */ fs2 = mfs_GetFSSpecFSSpec(v); if ( fs2 ) { (void)FSMakeFSSpec(fs2->vRefNum, fs2->parID, fs2->name, fs); return 1; } +#endif if ( PyString_Check(v) ) { /* It's a pathname */ if( !PyArg_Parse(v, "O&", PyMac_GetStr255, &path) ) @@ -1045,7 +1030,12 @@ PyMac_GetFSSpec(PyObject *v, FSSpec *fs) /* Convert FSSpec to PyObject */ PyObject *PyMac_BuildFSSpec(FSSpec *v) { +#if TARGET_API_MAC_OSX + PyErr_SetString(PyExc_NotImplementedError, "FSSpec not yet done for OSX"); + return NULL; +#else return newmfssobject(v); +#endif } /* Convert a Python object to a Rect. -- cgit v0.12