Started on GUSI2 and threading support.

This commit is contained in:
Jack Jansen 2000-04-07 09:10:49 +00:00
parent 5c21420772
commit 2d1306b7cf
16 changed files with 194 additions and 29 deletions

View file

@ -38,7 +38,11 @@ PERFORMANCE OF THIS SOFTWARE.
#ifdef USE_GUSI
#include <sys/types.h>
#endif /* USE_GUSI */
#ifdef USE_GUSI2
#include <sys/stat.h>
#else
#include <stat.h>
#endif
#include "rename2.h"
long

101
Mac/Python/gusiconfig.cpp Normal file
View file

@ -0,0 +1,101 @@
/*
* Generated with the GUSIConfig application and then hand-modified by jack.
*/
#define GUSI_SOURCE
#include <GUSIConfig.h>
#include <sys/cdefs.h>
#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 *************************/

View file

@ -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

View file

@ -54,7 +54,7 @@ PERFORMANCE OF THIS SOFTWARE.
#include <TextUtils.h>
#include <Dialogs.h>
#ifdef USE_GUSI
#ifdef USE_GUSI1
#include <GUSI.h>
#endif
@ -444,7 +444,7 @@ PyMac_PreferenceOptions(PyMac_PrefRecord *pr)
UseResFile(oldrh);
}
#ifdef USE_GUSI
#ifdef USE_GUSI1
void
PyMac_SetGUSIOptions()
{

View file

@ -62,11 +62,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#ifdef __MWERKS__
#include <SIOUX.h>
#endif
#ifdef USE_GUSI
#ifdef USE_GUSI1
#include <TFileSpec.h> /* For Path2FSSpec */
#include <LowMem.h> /* For SetSFCurDir, etc */
#include <GUSI.h>
#endif
#include <LowMem.h>
/* 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;

View file

@ -48,7 +48,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#endif
#include <CodeFragments.h>
#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;

View file

@ -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