diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1995-02-13 11:33:28 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1995-02-13 11:33:28 (GMT) |
commit | 8cd2b720f6c103bb97f97b0d55bc2a75ad0eed4d (patch) | |
tree | b640a01b8f5c89a176f52f6d667581f1e42a6fe0 /Mac/Python/macglue.c | |
parent | b3642579fd1f04d8ad6f4224ac36e5c821209aa0 (diff) | |
download | cpython-8cd2b720f6c103bb97f97b0d55bc2a75ad0eed4d.zip cpython-8cd2b720f6c103bb97f97b0d55bc2a75ad0eed4d.tar.gz cpython-8cd2b720f6c103bb97f97b0d55bc2a75ad0eed4d.tar.bz2 |
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.
Diffstat (limited to 'Mac/Python/macglue.c')
-rw-r--r-- | Mac/Python/macglue.c | 75 |
1 files changed, 75 insertions, 0 deletions
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 <OSUtils.h> /* for Set(Current)A5 */ #include <Files.h> +#include <Aliases.h> +#include <StandardFile.h> #include <Resources.h> #include <Memory.h> #include <Events.h> @@ -40,6 +42,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include <signal.h> +#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 |