summaryrefslogtreecommitdiffstats
path: root/Mac/Python/macgetpath.c
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Python/macgetpath.c')
-rw-r--r--Mac/Python/macgetpath.c442
1 files changed, 0 insertions, 442 deletions
diff --git a/Mac/Python/macgetpath.c b/Mac/Python/macgetpath.c
deleted file mode 100644
index d98d481..0000000
--- a/Mac/Python/macgetpath.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/***********************************************************
-Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
-The Netherlands.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the names of Stichting Mathematisch
-Centrum or CWI or Corporation for National Research Initiatives or
-CNRI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-While CWI is the initial source for this software, a modified version
-is made available by the Corporation for National Research Initiatives
-(CNRI) at the Internet address ftp://ftp.python.org.
-
-STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
-CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-******************************************************************/
-
-#include "Python.h"
-#include "osdefs.h"
-#include "macglue.h"
-#include "macdefs.h"
-#include "pythonresources.h"
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#define PATHNAMELEN 256
-
-/* Return the initial python search path. This is called once from
-** initsys() to initialize sys.path.
-**
-** If USE_BUILTIN_PATH is defined the path defined here is used
-** (after prepending the python home dir to each item).
-** If it is not defined the path is gotten from a resource in the
-** Preferences file.
-**
-** XXXX This code needs cleaning up. The routines here have moved
-** around quite a bit, and they're pretty messy for that reason.
-*/
-
-#include <Files.h>
-#include <Aliases.h>
-#include <Folders.h>
-#include <Resources.h>
-#include <TextUtils.h>
-#include <Dialogs.h>
-
-#ifndef USE_BUILTIN_PATH
-static char *PyMac_GetPythonPath();
-#endif
-
-#define PYTHONPATH "\
-:\n\
-:Lib\n\
-:Lib:stdwin\n\
-:Lib:test\n\
-:Lib:mac"
-
-static int
-getpreffilefss(FSSpec *fssp)
-{
- static int diditbefore=0;
- static int rv = 1;
- static FSSpec fss;
- short prefdirRefNum;
- long prefdirDirID;
- long pyprefdirDirID;
- Handle namehandle;
- OSErr err;
-
- if ( !diditbefore ) {
- if ( (namehandle=GetNamedResource('STR ', PREFFILENAME_NAME)) == NULL ) {
- (void)StopAlert(NOPREFNAME_ID, NULL);
- exit(1);
- }
-
- if ( **namehandle == '\0' ) {
- /* Empty string means don't use preferences file */
- rv = 0;
- } else {
- /* There is a filename, construct the fsspec */
- if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
- &prefdirDirID) != noErr ) {
- /* Something wrong with preferences folder */
- (void)StopAlert(NOPREFDIR_ID, NULL);
- exit(1);
- }
- /* make fsspec for the "Python" folder inside the prefs folder */
- err = FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython", &fss);
- if (err == fnfErr) {
- /* it doesn't exist: create it */
- err = FSpDirCreate(&fss, smSystemScript, &pyprefdirDirID);
- } else {
- /* it does exist, now find out the dirID of the Python prefs folder, brrr. */
- CInfoPBRec info;
- info.dirInfo.ioVRefNum = fss.vRefNum;
- info.dirInfo.ioDrDirID = fss.parID;
- info.dirInfo.ioNamePtr = fss.name;
- info.dirInfo.ioFDirIndex = 0;
- info.dirInfo.ioACUser = 0;
- err = PBGetCatInfo(&info, 0);
- if (err == noErr) {
- pyprefdirDirID = info.dirInfo.ioDrDirID;
- }
- }
- if (err != noErr) {
- (void)StopAlert(NOPREFDIR_ID, NULL);
- exit(1);
- }
- HLock(namehandle);
- err = FSMakeFSSpec(fss.vRefNum, pyprefdirDirID, (unsigned char *)*namehandle, &fss);
- HUnlock(namehandle);
- if (err != noErr && err != fnfErr) {
- (void)StopAlert(NOPREFDIR_ID, NULL);
- exit(1);
- }
- }
- ReleaseResource(namehandle);
- diditbefore = 1;
- }
- *fssp = fss;
- return rv;
-}
-
-char *
-Py_GetPath()
-{
- /* Modified by Jack to do something a bit more sensible:
- ** - Prepend the python home-directory (which is obtained from a Preferences
- ** resource)
- ** - Add :
- */
- static char *pythonpath;
- char *p, *endp;
- int newlen;
- char *curwd;
-
- if ( pythonpath ) return pythonpath;
-#ifndef USE_BUILTIN_PATH
- if ( pythonpath = PyMac_GetPythonPath() )
- return pythonpath;
- printf("Warning: No pythonpath resource found, using builtin default\n");
-#endif
- curwd = PyMac_GetPythonDir();
- p = PYTHONPATH;
- endp = p;
- pythonpath = malloc(2);
- if ( pythonpath == NULL ) return PYTHONPATH;
- strcpy(pythonpath, ":");
- while (*endp) {
- endp = strchr(p, '\n');
- if ( endp == NULL )
- endp = p + strlen(p);
- newlen = strlen(pythonpath) + 1 + strlen(curwd) + (endp-p);
- pythonpath = realloc(pythonpath, newlen+1);
- if ( pythonpath == NULL ) return PYTHONPATH;
- strcat(pythonpath, "\n");
- if ( *p == ':' ) {
- p++;
- strcat(pythonpath, curwd);
- strncat(pythonpath, p, (endp-p));
- newlen--; /* Ok, ok, we've allocated one byte too much */
- } else {
- /* We've allocated too much in this case */
- newlen -= strlen(curwd);
- pythonpath = realloc(pythonpath, newlen+1);
- if ( pythonpath == NULL ) return PYTHONPATH;
- strncat(pythonpath, p, (endp-p));
- }
- pythonpath[newlen] = '\0';
- p = endp + 1;
- }
- return pythonpath;
-}
-
-
-/*
-** Open/create the Python Preferences file, return the handle
-*/
-short
-PyMac_OpenPrefFile()
-{
- AliasHandle handle;
- FSSpec dirspec;
- short prefrh;
- OSErr err;
-
- if ( !getpreffilefss(&dirspec))
- return -1;
- prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
- if ( prefrh < 0 ) {
- FSpCreateResFile(&dirspec, 'Pyth', 'pref', 0);
- prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
- if ( prefrh == -1 ) {
- /* This "cannot happen":-) */
- printf("Cannot create preferences file, error %d\n", ResError());
- exit(1);
- }
- if ( (err=PyMac_init_process_location()) != 0 ) {
- printf("Cannot get application location, error %d\n", err);
- exit(1);
- }
- dirspec = PyMac_ApplicationFSSpec;
- dirspec.name[0] = 0;
- if ((err=NewAlias(NULL, &dirspec, &handle)) != 0 ) {
- printf("Cannot make alias to application directory, error %d\n", err);
- exit(1);
- }
- AddResource((Handle)handle, 'alis', PYTHONHOME_ID, "\p");
- UpdateResFile(prefrh);
-
- } else {
- UseResFile(prefrh);
- }
- return prefrh;
-}
-
-/*
-** Return the name of the Python directory
-*/
-char *
-PyMac_GetPythonDir()
-{
- static int diditbefore = 0;
- static char name[PATHNAMELEN] = {':', '\0'};
- AliasHandle handle;
- FSSpec dirspec;
- Boolean modified = 0;
- short oldrh, prefrh = -1, homerh;
-
- if ( diditbefore )
- return name;
-
- oldrh = CurResFile();
-
- /* First look for an override in the application file */
- UseResFile(PyMac_AppRefNum);
- handle = (AliasHandle)Get1Resource('alis', PYTHONHOMEOVERRIDE_ID);
- UseResFile(oldrh);
- if ( handle != NULL ) {
- homerh = PyMac_AppRefNum;
- } else {
- /* Try to open preferences file in the preferences folder. */
- prefrh = PyMac_OpenPrefFile();
- handle = (AliasHandle)Get1Resource('alis', PYTHONHOME_ID);
- if ( handle == NULL ) {
- /* (void)StopAlert(BADPREFFILE_ID, NULL); */
- diditbefore=1;
- return ":";
- }
- homerh = prefrh;
- }
- /* It exists. Resolve it (possibly updating it) */
- if ( ResolveAlias(NULL, handle, &dirspec, &modified) != noErr ) {
- (void)StopAlert(BADPREFFILE_ID, NULL);
- diditbefore=1;
- return ":";
- }
- if ( modified ) {
- ChangedResource((Handle)handle);
- UpdateResFile(homerh);
- }
- if ( prefrh != -1 ) CloseResFile(prefrh);
- UseResFile(oldrh);
-
- if ( PyMac_GetFullPathname(&dirspec, name, PATHNAMELEN) == 0 ) {
- strcat(name, ":");
- } else {
- /* If all fails, we return the current directory */
- printf("Python home dir exists but I cannot find the pathname!!\n");
- name[0] = 0;
- (void)getcwd(name, sizeof(name));
- }
- diditbefore = 1;
- return name;
-}
-
-#ifndef USE_BUILTIN_PATH
-char *
-PyMac_GetPythonPath(void)
-{
- short oldrh, prefrh = -1;
- char *rv;
- int i, newlen;
- Str255 pathitem;
- int resource_id;
- OSErr err;
- Handle h;
-
- oldrh = CurResFile();
- /*
- ** This is a bit tricky. We check here whether the application file
- ** contains an override. This is to forestall us finding another STR# resource
- ** with "our" id and using that for path initialization
- */
- UseResFile(PyMac_AppRefNum);
- SetResLoad(0);
- if ( (h=Get1Resource('STR#', PYTHONPATHOVERRIDE_ID)) ) {
- ReleaseResource(h);
- resource_id = PYTHONPATHOVERRIDE_ID;
- } else {
- resource_id = PYTHONPATH_ID;
- }
- SetResLoad(1);
- UseResFile(oldrh);
-
- /* Open the preferences file only if there is no override */
- if ( resource_id != PYTHONPATHOVERRIDE_ID )
- prefrh = PyMac_OpenPrefFile();
- /* 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, resource_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 */
- char *dir = PyMac_GetPythonDir();
-
- 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 if ( pathitem[0] >= 14 && strncmp((char *)pathitem+1, "$(APPLICATION)", 14) == 0 ) {
- /* This is the application itself */
-
- if ( (err=PyMac_init_process_location()) != 0 ) {
- printf("Cannot get application location, error %d\n", err);
- exit(1);
- }
-
- newlen = strlen(rv) + strlen(PyMac_ApplicationPath) + 2;
- if( (rv=realloc(rv, newlen)) == NULL)
- goto out;
- strcpy(rv+strlen(rv), PyMac_ApplicationPath);
- 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 != -1) CloseResFile(prefrh);
- UseResFile(oldrh);
- return rv;
-}
-#endif /* !USE_BUILTIN_PATH */
-
-void
-PyMac_PreferenceOptions(PyMac_PrefRecord *pr)
-{
- short oldrh, prefrh = -1;
- Handle handle;
- int size;
- PyMac_PrefRecord *p;
- int action;
-
-
- oldrh = CurResFile();
-
- /* Attempt to load overrides from application */
- UseResFile(PyMac_AppRefNum);
- handle = Get1Resource('Popt', PYTHONOPTIONSOVERRIDE_ID);
- UseResFile(oldrh);
-
- /* Otherwise get options from prefs file or any other open resource file */
- if ( handle == NULL ) {
- prefrh = PyMac_OpenPrefFile();
- handle = GetResource('Popt', PYTHONOPTIONS_ID);
- }
- if ( handle == NULL ) {
- return;
- }
- HLock(handle);
- size = GetHandleSize(handle);
- p = (PyMac_PrefRecord *)*handle;
- if ( p->version == POPT_VERSION_CURRENT && size == sizeof(PyMac_PrefRecord) ) {
- *pr = *p;
- } else {
- action = CautionAlert(BADPREFERENCES_ID, NULL);
- if ( action == BADPREF_DELETE ) {
- OSErr err;
-
- RemoveResource(handle);
- if ( (err=ResError()) ) printf("RemoveResource: %d\n", err);
- if ( prefrh != -1 ) {
- UpdateResFile(prefrh);
- if ( (err=ResError()) ) printf("UpdateResFile: %d\n", err);
- }
- } else if ( action == BADPREF_QUIT )
- exit(1);
- }
- HUnlock(handle);
-
- if ( prefrh != -1) CloseResFile(prefrh);
- UseResFile(oldrh);
-}