From 8cd2b720f6c103bb97f97b0d55bc2a75ad0eed4d Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Mon, 13 Feb 1995 11:33:28 +0000 Subject: Added PyMac_GetPythonDir routine which obtains python home directory from an alias resource (or from the user). Note: this uses a dialog resource so there's an accompanying change in the resource file. --- Mac/Include/macglue.h | 2 ++ Mac/Python/macglue.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h index 7944471..d868534 100644 --- a/Mac/Include/macglue.h +++ b/Mac/Include/macglue.h @@ -42,6 +42,8 @@ void PyMac_HandleEvent Py_PROTO((EventRecord *)); /* Handle one event, if possib int PyMac_Idle(void); /* Idle routine */ +char *PyMac_GetPythonDir(); /* Return the name of the python dir */ + int PyMac_GetOSType(PyObject *, OSType *); /* argument parser for OSType */ PyObject *PyMac_BuildOSType(OSType); /* Convert OSType to PyObject */ diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c index 98a5c7b..cbeeee7 100644 --- a/Mac/Python/macglue.c +++ b/Mac/Python/macglue.c @@ -27,6 +27,8 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include /* for Set(Current)A5 */ #include +#include +#include #include #include #include @@ -40,6 +42,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include +#define NOPYTHON_ALERT 128 +#define YES_ITEM 1 +#define NO_ITEM 2 +#define CURWD_ITEM 3 + #ifdef __MWERKS__ /* ** With MW we can pass the event off to the console window, so @@ -359,6 +366,74 @@ PyMac_Idle() return intrpeek(); } +/* +** Return the name of the Python directory +*/ +char * +PyMac_GetPythonDir() +{ + int item; + static char name[256]; + AliasHandle handle; + FSSpec dirspec; + int ok = 0, exists = 0; + Boolean modified = 0; + StandardFileReply sfreply; + + handle = (AliasHandle)GetResource('alis', 128); + if ( handle ) { + if ( ResolveAlias(NULL, handle, &dirspec, &modified) == noErr ) + ok = 1; + exists = 1; + } + if ( !ok ) { + item = Alert(NOPYTHON_ALERT, NULL); + if ( item == YES_ITEM ) { + StandardGetFile(NULL, 0, NULL, &sfreply); + if ( sfreply.sfGood ) { + if ( sfreply.sfIsFolder ) { + dirspec = sfreply.sfFile; + ok = 1; + modified = 1; + } else { + /* User selected a file. Use folder containing it */ + if (FSMakeFSSpec(sfreply.sfFile.vRefNum, + sfreply.sfFile.parID, "\p", &dirspec) == 0) { + ok = 1; + modified = 1; + } + } + } + } else if ( item == CURWD_ITEM ) { + if ( getwd(name) ) { + if ( FSMakeFSSpec(0, 0, Pstring(name), &dirspec) == 0 ) { + ok = 1; + modified = 1; + } + } + } + } + if ( ok && modified ) { + if ( !exists ) { + if (NewAlias(NULL, &dirspec, &handle) == 0 ) + AddResource((Handle)handle, 'alis', 128, "\p"); + } else { + ChangedResource((Handle)handle); + } + UpdateResFile(CurResFile()); + } + if ( ok ) { + ok = (nfullpath(&dirspec, name) == 0); + if ( ok ) strcat(name, ":"); + } + if ( !ok ) { + /* If all fails, we return the current directory */ + name[0] = 0; + (void)getwd(name); + } + return name; +} + /* Convert a 4-char string object argument to an OSType value */ int -- cgit v0.12