summaryrefslogtreecommitdiffstats
path: root/Mac/Python/macglue.c
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Python/macglue.c')
-rw-r--r--Mac/Python/macglue.c75
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