summaryrefslogtreecommitdiffstats
path: root/Mac/Python/macglue.c
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1995-06-18 20:03:40 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1995-06-18 20:03:40 (GMT)
commit08305504f13abc55005756c836909bc3e5c7c297 (patch)
tree6b27a3d8957d769020372cdeb15a9a47528dbf96 /Mac/Python/macglue.c
parent68f1d45531d8e526917b9c0fe08c6e89d051b446 (diff)
downloadcpython-08305504f13abc55005756c836909bc3e5c7c297.zip
cpython-08305504f13abc55005756c836909bc3e5c7c297.tar.gz
cpython-08305504f13abc55005756c836909bc3e5c7c297.tar.bz2
Added code to obtain sys.path from a resource
Removed code to update the preferences file, use EditPythonPrefs.py in stead (actually, code is still there if you define USE_MAC_MODPREFS)
Diffstat (limited to 'Mac/Python/macglue.c')
-rw-r--r--Mac/Python/macglue.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c
index dc4d32b..38f654f 100644
--- a/Mac/Python/macglue.c
+++ b/Mac/Python/macglue.c
@@ -42,6 +42,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <Processes.h>
#include <Fonts.h>
#include <Menus.h>
+#include <TextUtils.h>
#ifdef THINK_C
#include <OSEvents.h> /* For EvQElPtr */
#endif
@@ -72,6 +73,9 @@ typedef FileFilterYDProcPtr FileFilterYDUPP;
#define GETDIR_ID 130 /* Resource ID for our "get directory" */
#define SELECTCUR_ITEM 10 /* "Select current directory" button */
+/* The STR# resource for sys.path initialization */
+#define PYTHONPATH_ID 128
+
/*
** We have to be careful, since we can't handle
** things like updates (and they'll keep coming back if we don't
@@ -421,6 +425,7 @@ PyMac_GetPythonDir()
(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
if ( prefrh == -1 ) {
+#ifdef USE_MAC_MODPREFS
/* It doesn't exist. Try to create it */
FSpCreateResFile(&dirspec, 'PYTH', 'pref', 0);
prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
@@ -430,6 +435,12 @@ PyMac_GetPythonDir()
} else {
UseResFile(prefrh);
}
+#else
+ printf("Error: no Preferences file. Attempting to limp on...\n");
+ name[0] = 0;
+ getwd(name);
+ return name;
+#endif
}
}
/* So, we've opened our preferences file, we hope. Look for the alias */
@@ -441,6 +452,7 @@ PyMac_GetPythonDir()
}
}
if ( !ok ) {
+#ifdef USE_MAC_MODPREFS
/* No luck, so far. ask the user for help */
item = Alert(NOPYTHON_ALERT, NULL);
if ( item == YES_ITEM ) {
@@ -461,7 +473,14 @@ PyMac_GetPythonDir()
/* Set the (old, invalid) alias record to the new data */
UpdateAlias(NULL, &dirspec, handle, &modified);
}
+#else
+ printf("Error: no Preferences file. Attempting to limp on...\n");
+ name[0] = 0;
+ getwd(name);
+ return name;
+#endif
}
+#ifdef USE_MAC_MODPREFS
if ( ok && modified && !cannotmodify) {
/* We have a new, valid fsspec and we can update the preferences file. Do so. */
if ( !handle ) {
@@ -472,6 +491,7 @@ PyMac_GetPythonDir()
}
UpdateResFile(prefrh);
}
+#endif
if ( !cannotmodify ) {
/* This means we have the resfile open. Close it. */
CloseResFile(prefrh);
@@ -491,6 +511,83 @@ PyMac_GetPythonDir()
return name;
}
+#ifndef USE_BUILTIN_PATH
+char *
+PyMac_GetPythonPath(dir)
+char *dir;
+{
+ FSSpec dirspec;
+ short oldrh, prefrh = -1;
+ short prefdirRefNum;
+ long prefdirDirID;
+ char *rv;
+ int i, newlen;
+ Str255 pathitem;
+
+ /*
+ ** Remember old resource file and try to open preferences file
+ ** in the preferences folder.
+ */
+ oldrh = CurResFile();
+ if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
+ &prefdirDirID) == noErr ) {
+ (void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
+ prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
+ }
+ /* At this point, we may or may not have the preferences file open, and it
+ ** may or may not contain a sys.path STR# resource. We don't care, if it doesn't
+ ** exist we use the one from the application (the default).
+ ** We put an initial '\n' in front of the path that we don't return to the caller
+ */
+ if( (rv = malloc(2)) == NULL )
+ goto out;
+ strcpy(rv, "\n");
+ for(i=1; ; i++) {
+ GetIndString(pathitem, PYTHONPATH_ID, i);
+ if( pathitem[0] == 0 )
+ break;
+ if ( pathitem[0] >= 9 && strncmp((char *)pathitem+1, "$(PYTHON)", 9) == 0 ) {
+ /* We have to put the directory in place */
+ newlen = strlen(rv) + strlen(dir) + (pathitem[0]-9) + 2;
+ if( (rv=realloc(rv, newlen)) == NULL)
+ goto out;
+ strcat(rv, dir);
+ /* Skip a colon at the beginning of the item */
+ if ( pathitem[0] > 9 && pathitem[1+9] == ':' ) {
+ memcpy(rv+strlen(rv), pathitem+1+10, pathitem[0]-10);
+ newlen--;
+ } else {
+ memcpy(rv+strlen(rv), pathitem+1+9, pathitem[0]-9);
+ }
+ rv[newlen-2] = '\n';
+ rv[newlen-1] = 0;
+ } else {
+ /* Use as-is */
+ newlen = strlen(rv) + (pathitem[0]) + 2;
+ if( (rv=realloc(rv, newlen)) == NULL)
+ goto out;
+ memcpy(rv+strlen(rv), pathitem+1, pathitem[0]);
+ rv[newlen-2] = '\n';
+ rv[newlen-1] = 0;
+ }
+ }
+ if( strlen(rv) == 1) {
+ free(rv);
+ rv = NULL;
+ }
+ if ( rv ) {
+ rv[strlen(rv)-1] = 0;
+ rv++;
+ }
+out:
+ if ( prefrh ) {
+ CloseResFile(prefrh);
+ UseResFile(oldrh);
+ }
+ return rv;
+}
+#endif /* !USE_BUILTIN_PATH */
+
/*
** Returns true if the argument has a resource fork, and it contains
** a 'PYC ' resource of the correct name