From 2d1306b7cf4a85290ffbd90a15fed6115a522310 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Fri, 7 Apr 2000 09:10:49 +0000 Subject: Started on GUSI2 and threading support. --- Mac/Include/macglue.h | 5 +- Mac/Python/getmtime.c | 4 + Mac/Python/gusiconfig.cpp | 101 +++++++++++++++++++++ Mac/Python/macgetcompiler.c | 22 ++++- Mac/Python/macgetpath.c | 4 +- Mac/Python/macglue.c | 17 ++-- Mac/Python/macimport.c | 8 +- Mac/Python/macmain.c | 8 +- Mac/mwerks/errno_unix.h | 2 + Mac/mwerks/mwerks_nonshared_config.h | 3 +- Mac/mwerks/mwerks_plugin_config.h | 3 +- Mac/mwerks/mwerks_shared_config.h | 3 +- Mac/mwerks/mwerks_small_config.h | 5 +- Mac/mwerks/mwerks_threadsmall_config.h | 35 +++++++ Mac/mwerks/mwerks_tkplugin_config.h | 3 +- .../projects/build.macfreeze/frozenbundle.rsrc | Bin 5340 -> 5556 bytes 16 files changed, 194 insertions(+), 29 deletions(-) create mode 100644 Mac/Python/gusiconfig.cpp create mode 100644 Mac/mwerks/mwerks_threadsmall_config.h diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h index bc1939f..ec2dfbd 100644 --- a/Mac/Include/macglue.h +++ b/Mac/Include/macglue.h @@ -53,8 +53,9 @@ typedef struct { #pragma lib_export on #endif -#ifdef USE_GUSI +#ifdef USE_GUSI1 void PyMac_FixGUSIcd Py_PROTO((void)); /* Workaround for GUSI chdir() call */ +extern void PyMac_SetGUSISpin(void); /* Install our private GUSI spin routine */ #endif char *PyMac_StrError(int); /* strerror with mac errors */ @@ -62,7 +63,6 @@ unsigned char *Pstring(char *str); /* Convert c-string to pascal-string in stat #ifdef USE_GUSI extern int PyMac_ConsoleIsDead; /* True when exiting */ -extern void PyMac_SetGUSISpin(void); /* Install our private GUSI spin routine */ extern void PyMac_StopGUSISpin(void); /* Stop eventprocessing during exit() */ #endif @@ -81,6 +81,7 @@ void PyMac_GetSchedParams Py_PROTO((PyMacSchedParams *)); /* Get schedulers para void PyMac_SetSchedParams Py_PROTO((PyMacSchedParams *)); /* Set schedulers params */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +int PyMac_DoYield Py_PROTO((int, int)); /* Yield cpu. First arg is maxtime, second ok to call python */ int PyMac_HandleEvent Py_PROTO((EventRecord *)); /* Handle one event, possibly in Python */ void PyMac_HandleEventIntern Py_PROTO((EventRecord *)); /* Handle one event internal only */ int PyMac_SetEventHandler Py_PROTO((PyObject *)); /* set python-coded event handler */ diff --git a/Mac/Python/getmtime.c b/Mac/Python/getmtime.c index 29721ee..a14ef71 100644 --- a/Mac/Python/getmtime.c +++ b/Mac/Python/getmtime.c @@ -38,7 +38,11 @@ PERFORMANCE OF THIS SOFTWARE. #ifdef USE_GUSI #include #endif /* USE_GUSI */ +#ifdef USE_GUSI2 +#include +#else #include +#endif #include "rename2.h" long diff --git a/Mac/Python/gusiconfig.cpp b/Mac/Python/gusiconfig.cpp new file mode 100644 index 0000000..c69498f --- /dev/null +++ b/Mac/Python/gusiconfig.cpp @@ -0,0 +1,101 @@ +/* + * Generated with the GUSIConfig application and then hand-modified by jack. + */ + +#define GUSI_SOURCE +#include +#include + +#include "Python.h" +#include "macglue.h" + +static void +PyMac_GUSISpin(bool wait) +{ + static Boolean inForeground = true; + int maxsleep = 6; /* 6 ticks is "normal" sleeptime */ + + if (PyMac_ConsoleIsDead) return; + + if ( !wait ) + maxsleep = 0; + + PyMac_DoYield(maxsleep, 0); /* XXXX or is it safe to call python here? */ +} + + +/* Declarations of Socket Factories */ + +__BEGIN_DECLS +void GUSIwithInetSockets(); +void GUSIwithLocalSockets(); +void GUSIwithMTInetSockets(); +void GUSIwithMTTcpSockets(); +void GUSIwithMTUdpSockets(); +void GUSIwithOTInetSockets(); +void GUSIwithOTTcpSockets(); +void GUSIwithOTUdpSockets(); +void GUSIwithPPCSockets(); +void GUSISetupFactories(); +__END_DECLS + +/* Configure Socket Factories */ + +void GUSISetupFactories() +{ +#ifdef GUSISetupFactories_BeginHook + GUSISetupFactories_BeginHook +#endif + GUSIwithInetSockets(); +#ifdef GUSISetupFactories_EndHook + GUSISetupFactories_EndHook +#endif +} + +/* Declarations of File Devices */ + +__BEGIN_DECLS +void GUSIwithDConSockets(); +void GUSIwithNullSockets(); +void GUSISetupDevices(); +__END_DECLS + +/* Configure File Devices */ + +void GUSISetupDevices() +{ +#ifdef GUSISetupDevices_BeginHook + GUSISetupDevices_BeginHook +#endif +#ifdef GUSISetupDevices_EndHook + GUSISetupDevices_EndHook +#endif +} + +#ifndef __cplusplus +#error GUSISetupConfig() needs to be written in C++ +#endif + +GUSIConfiguration::FileSuffix sSuffices[] = { + "", '????', '????' +}; + +extern "C" void GUSISetupConfig() +{ + GUSIConfiguration * config = + GUSIConfiguration::CreateInstance(GUSIConfiguration::kNoResource); + + config->ConfigureDefaultTypeCreator('TEXT', 'TEXT'); + config->ConfigureSuffices( + sizeof(sSuffices)/sizeof(GUSIConfiguration::FileSuffix)-1, sSuffices); + config->ConfigureAutoInitGraf(false); + config->ConfigureAutoSpin(false); + config->ConfigureHandleAppleEvents(false); + config->ConfigureSigInt(false); + config->ConfigureSigPipe(true); + + GUSISetHook(GUSI_SpinHook, (GUSIHook)PyMac_GUSISpin); + +} + +/**************** END GUSI CONFIGURATION *************************/ diff --git a/Mac/Python/macgetcompiler.c b/Mac/Python/macgetcompiler.c index 347b8d2..8836581 100644 --- a/Mac/Python/macgetcompiler.c +++ b/Mac/Python/macgetcompiler.c @@ -38,23 +38,35 @@ PERFORMANCE OF THIS SOFTWARE. #endif #ifdef __MWERKS__ -#ifdef USE_GUSI -#define HASGUSI " w/GUSI" +#ifdef USE_GUSI1 +#define HASGUSI " w/GUSI1" +#else +#ifdef USE_GUSI2 +#define HASGUSI " w/GUSI2" #else #define HASGUSI "" #endif +#endif + #ifdef USE_MSL #define HASMSL " w/MSL" #else #define HASMSL "" #endif + +#ifdef WITH_THREAD +#define HASTHREAD " w/THREADS" +#else +#define HASTHREAD "" +#endif + #ifdef __powerc -#define COMPILER " [CW PPC" HASGUSI HASMSL "]" +#define COMPILER " [CW PPC" HASGUSI HASMSL HASTHREAD"]" #else #ifdef __CFM68K__ -#define COMPILER " [CW CFM68K" HASGUSI HASMSL "]" +#define COMPILER " [CW CFM68K" HASGUSI HASMSL HASTHREAD"]" #else -#define COMPILER " [CW 68K" HASGUSI HASMSL "]" +#define COMPILER " [CW 68K" HASGUSI HASMSL HASTHREAD"]" #endif #endif #endif diff --git a/Mac/Python/macgetpath.c b/Mac/Python/macgetpath.c index 02f9b48..d1c60a0 100644 --- a/Mac/Python/macgetpath.c +++ b/Mac/Python/macgetpath.c @@ -54,7 +54,7 @@ PERFORMANCE OF THIS SOFTWARE. #include #include -#ifdef USE_GUSI +#ifdef USE_GUSI1 #include #endif @@ -444,7 +444,7 @@ PyMac_PreferenceOptions(PyMac_PrefRecord *pr) UseResFile(oldrh); } -#ifdef USE_GUSI +#ifdef USE_GUSI1 void PyMac_SetGUSIOptions() { diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c index 46493d3..fd0ddfb 100644 --- a/Mac/Python/macglue.c +++ b/Mac/Python/macglue.c @@ -62,11 +62,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifdef __MWERKS__ #include #endif -#ifdef USE_GUSI +#ifdef USE_GUSI1 #include /* For Path2FSSpec */ -#include /* For SetSFCurDir, etc */ #include #endif +#include /* The ID of the Sioux apple menu */ #define SIOUX_APPLEID 32000 @@ -108,7 +108,6 @@ extern PyObject *newmfssobject Py_PROTO((FSSpec *)); static int interrupted; /* Set to true when cmd-. seen */ static RETSIGTYPE intcatcher Py_PROTO((int)); -static int PyMac_DoYield Py_PROTO((int, int)); static int PyMac_Yield Py_PROTO((void)); /* @@ -161,7 +160,7 @@ static PyObject *python_event_handler; */ int PyMac_AppearanceCompliant; -#ifdef USE_GUSI +#ifdef USE_GUSI1 /* ** GUSI (1.6.0 and earlier, at the least) do not set the MacOS idea of ** the working directory. Hence, we call this routine after each call @@ -183,7 +182,9 @@ PyMac_FixGUSIcd() if (PBHSetVolSync(&pb) != noErr) return; } +#endif +#ifdef USE_GUSI /* ** SpinCursor (needed by GUSI) drags in heaps of stuff, so we ** provide a dummy here. @@ -194,6 +195,7 @@ void RotateCursor(short x) { /* Dummy */ } /* ** Replacement GUSI Spin function */ +#ifdef USE_GUSI1 static int PyMac_GUSISpin(spin_msg msg, long arg) { @@ -222,6 +224,7 @@ void PyMac_SetGUSISpin() { GUSISetHook(GUSI_SpinHook, (GUSIHook)PyMac_GUSISpin); } +#endif /* Called at exit() time thru atexit(), to stop event processing */ void @@ -531,7 +534,7 @@ PyMac_HandleEvent(evp) /* ** Yield the CPU to other tasks without processing events. */ -static int +int PyMac_DoYield(int maxsleep, int maycallpython) { EventRecord ev; @@ -563,7 +566,7 @@ PyMac_DoYield(int maxsleep, int maycallpython) } } else { latest_time_ready = LMGetTicks() + maxsleep; - while ( maxsleep >= 0 ) { + do { /* XXXX Hack by Jack. ** In time.sleep() you can click to another application ** once only. If you come back to Python you cannot get away @@ -578,7 +581,7 @@ PyMac_DoYield(int maxsleep, int maycallpython) return -1; } maxsleep = latest_time_ready - LMGetTicks(); - } + } while ( maxsleep > 0 ); } in_here--; return 0; diff --git a/Mac/Python/macimport.c b/Mac/Python/macimport.c index e079d2e..2f5d622 100644 --- a/Mac/Python/macimport.c +++ b/Mac/Python/macimport.c @@ -48,7 +48,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #endif #include -#ifdef USE_GUSI +#ifdef USE_GUSI1 #include "TFileSpec.h" /* for Path2FSSpec() */ #endif @@ -104,7 +104,7 @@ findnamedresource( UseResFile(PyMac_AppRefNum); filerh = -1; } else { -#ifdef USE_GUSI +#ifdef USE_GUSI1 if ( Path2FSSpec(filename, &fss) != noErr || #else if ( FSMakeFSSpec(0, 0, Pstring(filename), &fss) != noErr || @@ -303,7 +303,7 @@ char *filename; UseResFile(PyMac_AppRefNum); filerh = -1; } else { -#ifdef USE_GUSI +#ifdef USE_GUSI1 if ( (err=Path2FSSpec(filename, &fss)) != noErr || FSpGetFInfo(&fss, &finfo) != noErr ) #else @@ -432,7 +432,7 @@ PyMac_FindModuleExtension(char *buf, int *lenp, char *module) #else strcpy(buf+*lenp, _PyImport_Filetab[0].suffix); #endif -#ifdef USE_GUSI +#ifdef USE_GUSI1 if ( Path2FSSpec(buf, &fss) == noErr && FSpGetFInfo(&fss, &finfo) == noErr) return _PyImport_Filetab; diff --git a/Mac/Python/macmain.c b/Mac/Python/macmain.c index db39e18..98298c8 100644 --- a/Mac/Python/macmain.c +++ b/Mac/Python/macmain.c @@ -225,13 +225,15 @@ init_common(int *argcp, char ***argvp, int embedded) PyMac_AddLibResources(); #endif -#if defined(USE_GUSI) +#if defined(USE_GUSI1) /* Setup GUSI */ GUSIDefaultSetup(); PyMac_SetGUSISpin(); PyMac_SetGUSIOptions(); - atexit(PyMac_StopGUSISpin); #endif +#if defined(USE_GUSI) + atexit(PyMac_StopGUSISpin); +#endif #ifdef USE_SIOUX /* Set various SIOUX flags. Some are changed later based on options */ @@ -405,7 +407,7 @@ PyMac_InitApplication() *endp = '\0'; chdir(curwd); -#ifdef USE_GUSI +#ifdef USE_GUSI1 /* Change MacOS's idea of wd too */ PyMac_FixGUSIcd(); #endif diff --git a/Mac/mwerks/errno_unix.h b/Mac/mwerks/errno_unix.h index 7f63ef6..2e6f171 100644 --- a/Mac/mwerks/errno_unix.h +++ b/Mac/mwerks/errno_unix.h @@ -29,6 +29,7 @@ PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ +#ifndef USE_GUSI2 #define ENOTDIR (-120) #ifndef __MSL__ #define EACCES (-54) @@ -40,6 +41,7 @@ PERFORMANCE OF THIS SOFTWARE. #define ENFILE (-42) #define EIO (-36) #define ENOSPC (-34) +#endif #define ESRCH 3 #define EINTR 4 diff --git a/Mac/mwerks/mwerks_nonshared_config.h b/Mac/mwerks/mwerks_nonshared_config.h index e4bb1c8..e3d97ec 100644 --- a/Mac/mwerks/mwerks_nonshared_config.h +++ b/Mac/mwerks/mwerks_nonshared_config.h @@ -5,7 +5,8 @@ ** specific features, you may also need different sets of sources. */ -#define USE_GUSI /* Stdio implemented with GUSI */ +#define USE_GUSI1 /* Stdio implemented with GUSI */ +/* #define USE_GUSI2 /* Stdio implemented with GUSI 2 */ #define USE_MSL /* Use Mw Standard Library (as opposed to Plaugher C libraries) */ #define USE_TOOLBOX /* Include toolbox modules in core Python */ #define USE_QT /* Include quicktime modules in core Python */ diff --git a/Mac/mwerks/mwerks_plugin_config.h b/Mac/mwerks/mwerks_plugin_config.h index 0052df8..1bb465d 100644 --- a/Mac/mwerks/mwerks_plugin_config.h +++ b/Mac/mwerks/mwerks_plugin_config.h @@ -2,7 +2,8 @@ ** Config file for dynamically-loaded ppc/cfm68k plugin modules. */ -#define USE_GUSI /* Stdio implemented with GUSI */ +#define USE_GUSI1 /* Stdio implemented with GUSI */ +/* #define USE_GUSI2 /* Stdio implemented with GUSI */ #define USE_MSL /* Use MSL libraries */ #ifdef USE_MSL #define MSL_USE_PRECOMPILED_HEADERS 0 /* Don't use precomp headers: we include our own */ diff --git a/Mac/mwerks/mwerks_shared_config.h b/Mac/mwerks/mwerks_shared_config.h index 4662d9b..66174b5 100644 --- a/Mac/mwerks/mwerks_shared_config.h +++ b/Mac/mwerks/mwerks_shared_config.h @@ -6,7 +6,8 @@ ** specific features, you may also need different sets of sources. */ -#define USE_GUSI /* Stdio implemented with GUSI */ +/* #define USE_GUSI1 /* Stdio implemented with GUSI */ +#define USE_GUSI2 /* Stdio implemented with GUSI */ #define USE_MSL /* Use Mw Standard Library (as opposed to Plaugher C libraries) */ #define USE_CORE_TOOLBOX /* Include core toolbox modules (Dlg,Ctl,Menu,Win,Res,Qd) */ /* #define USE_TOOLBOX /* Include all toolbox modules in core Python */ diff --git a/Mac/mwerks/mwerks_small_config.h b/Mac/mwerks/mwerks_small_config.h index 762ef8f..771565b 100644 --- a/Mac/mwerks/mwerks_small_config.h +++ b/Mac/mwerks/mwerks_small_config.h @@ -5,7 +5,8 @@ ** specific features, you may also need different sets of sources. */ -#define USE_GUSI /* Stdio implemented with GUSI */ +#define USE_GUSI2 /* Stdio implemented with GUSI 2 */ +/* # define USE_GUSI1 /* Stdio implemented with GUSI 1 */ #define USE_MSL /* Use Mw Standard Library (as opposed to Plaugher C libraries) */ #define USE_TOOLBOX /* Include toolbox modules in core Python */ #define USE_QT /* Include quicktime modules in core Python */ @@ -20,7 +21,7 @@ /* #define USE_MAC_SHARED_LIBRARY /* Enable code to add shared-library resources */ /* #define USE_MAC_APPLET_SUPPORT /* Enable code to run a PYC resource */ /* #define HAVE_DYNAMIC_LOADING /* Enable dynamically loaded modules */ -#define USE_MALLOC_DEBUG /* Enable range checking and other malloc debugging */ +/* #define USE_MALLOC_DEBUG /* Enable range checking and other malloc debugging */ /* #define USE_GDBM /* Include the gdbm module */ /* #define USE_ZLIB /* Include the zlib module */ #define USE_APPEARANCE /* Enable Appearance support */ diff --git a/Mac/mwerks/mwerks_threadsmall_config.h b/Mac/mwerks/mwerks_threadsmall_config.h new file mode 100644 index 0000000..70a11a0 --- /dev/null +++ b/Mac/mwerks/mwerks_threadsmall_config.h @@ -0,0 +1,35 @@ +/* +** Configuration file for small standalone 68k/ppc Python. +** +** Note: enabling the switches below is not enough to enable the +** specific features, you may also need different sets of sources. +*/ + +#define USE_GUSI2 /* Stdio implemented with GUSI 2 */ +/* # define USE_GUSI1 /* Stdio implemented with GUSI 1 */ +#define WITH_THREAD /* Use thread support (needs GUSI 2, not GUSI 1) */ +#define USE_MSL /* Use Mw Standard Library (as opposed to Plaugher C libraries) */ +#define USE_TOOLBOX /* Include toolbox modules in core Python */ +#define USE_QT /* Include quicktime modules in core Python */ +/* #define USE_WASTE /* Include waste module in core Python */ +#define USE_MACSPEECH /* Include macspeech module in core Python */ +/* #define USE_IMG /* Include img modules in core Python */ +#define USE_MACCTB /* Include ctb module in core Python */ +/* #define USE_STDWIN /* Include stdwin module in core Python */ +/* #define USE_MACTCP /* Include mactcp (*not* socket) modules in core */ +/* #define USE_TK /* Include _tkinter module in core Python */ +/* #define MAC_TCL /* This *must* be on if USE_TK is on */ +/* #define USE_MAC_SHARED_LIBRARY /* Enable code to add shared-library resources */ +/* #define USE_MAC_APPLET_SUPPORT /* Enable code to run a PYC resource */ +/* #define HAVE_DYNAMIC_LOADING /* Enable dynamically loaded modules */ +#define USE_MALLOC_DEBUG /* Enable range checking and other malloc debugging */ +/* #define USE_GDBM /* Include the gdbm module */ +/* #define USE_ZLIB /* Include the zlib module */ +#define USE_APPEARANCE /* Enable Appearance support */ +#ifdef __powerc +#define USE_CACHE_ALIGNED 8 /* Align on 32-byte boundaries for 604 */ +#endif +#ifdef USE_MSL +#define MSL_USE_PRECOMPILED_HEADERS 0 /* Don't use precomp headers: we include our own */ +#include +#endif diff --git a/Mac/mwerks/mwerks_tkplugin_config.h b/Mac/mwerks/mwerks_tkplugin_config.h index 4b9fdc8..88b7552 100644 --- a/Mac/mwerks/mwerks_tkplugin_config.h +++ b/Mac/mwerks/mwerks_tkplugin_config.h @@ -2,6 +2,7 @@ ** Special config-file for _tkinter plugin. */ -#define USE_GUSI /* Stdio implemented with GUSI */ +#define USE_GUSI1 /* Stdio implemented with GUSI */ +/* #define USE_GUSI2 /* Stdio implemented with GUSI */ #define USE_TK /* Include _tkinter module in core Python */ #define MAC_TCL /* This *must* be on if USE_TK is on */ diff --git a/Mac/mwerks/projects/build.macfreeze/frozenbundle.rsrc b/Mac/mwerks/projects/build.macfreeze/frozenbundle.rsrc index b219a42..fa2c02a 100644 Binary files a/Mac/mwerks/projects/build.macfreeze/frozenbundle.rsrc and b/Mac/mwerks/projects/build.macfreeze/frozenbundle.rsrc differ -- cgit v0.12