]> granicus.if.org Git - python/commitdiff
Got the first MacPython module working under MacOSX/MachO (gestalt). Main changes
authorJack Jansen <jack.jansen@cwi.nl>
Sat, 12 May 2001 22:46:35 +0000 (22:46 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sat, 12 May 2001 22:46:35 +0000 (22:46 +0000)
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
Mac/Modules/gestaltmodule.c
Mac/Python/macglue.c

index 100c204c474ddcd28466e1cc13067f9925c98455..9b55a4f60665e35bf40fa51188413e8b3f9ca1a9 100644 (file)
@@ -22,10 +22,14 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 ******************************************************************/
 
+#ifdef WITHOUT_FRAMEWORKS
 #include <Types.h>
 #include <Files.h>
 #include <Events.h>
 #include <StandardFile.h>
+#else
+#include <Carbon/Carbon.h>
+#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 */
index 3cba45b5d500f549093ec09069e96354b330b50f..15a2c89e98fdafe08ea95db8b28c8dd6459be2ce 100644 (file)
@@ -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 <Types.h>
 #include <Gestalt.h>
+#else
+#include <Carbon/Carbon.h>
+#endif
 
 static PyObject *
 gestalt_gestalt(self, args)
index 928b07fee664ff84fff5592af6e439736668763c..844ee42d5b2f2a29710b519827b2df362e6fb4c3 100644 (file)
@@ -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 <Events.h>
-
-#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 <OSUtils.h> /* for Set(Current)A5 */
 #include <Files.h>
 #include <StandardFile.h>
@@ -61,6 +44,29 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <Fonts.h>
 #include <Menus.h>
 #include <TextUtils.h>
+#include <LowMem.h>
+#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 <Events.h>
+
+#ifdef __CFM68K__
+#undef GetEventQueue
+#endif /* __CFM68K__ */
+#else
+#include <Carbon/Carbon.h>
+#endif
+
+#if !TARGET_API_MAC_OS8
+/* Unfortunately this call is probably slower... */
+#define LMGetTicks() TickCount()
+#endif
+
 #ifdef __MWERKS__
 #include <SIOUX.h>
 extern void SIOUXSetupMenus(void);
@@ -80,7 +86,6 @@ extern pascal unsigned char *PLstrrchr(unsigned char *, unsigned char);
 #include <TFileSpec.h> /* For Path2FSSpec */
 #include <GUSI.h>
 #endif
-#include <LowMem.h>
 
 /* 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.