Got rid of nfullpath in favor of PyMac_GetFullPath (which was pretty
much identical anyway).
Initialize PyMac_ApplicationPath and PyMac_ApplicationFSSpec to point
to the current application.
diff --git a/Mac/Python/macgetargv.c b/Mac/Python/macgetargv.c
index e0ecb8e..c1d1e3e 100644
--- a/Mac/Python/macgetargv.c
+++ b/Mac/Python/macgetargv.c
@@ -46,6 +46,9 @@
 #include <Dialogs.h>
 #include <Windows.h>
 
+#include "Python.h"
+#include "macglue.h"
+
 #ifdef GENERATINGCFM	/* Defined to 0 or 1 in Universal headers */
 #define HAVE_UNIVERSAL_HEADERS
 #endif
@@ -61,6 +64,9 @@
 
 static int arg_count;
 static char *arg_vector[256];
+FSSpec PyMac_ApplicationFSSpec;
+char PyMac_ApplicationPath[256];
+static int applocation_inited;
 
 /* Duplicate a string to the heap. We also export this since it isn't standard
 ** and others use it
@@ -75,20 +81,27 @@
 	return dst;
 }
 
-/* Return FSSpec of current application */
+/* Initialize FSSpec and full name of current application */
 
 OSErr
-PyMac_process_location(FSSpec *applicationSpec)
+PyMac_init_process_location()
 {
 	ProcessSerialNumber currentPSN;
 	ProcessInfoRec info;
+	OSErr err;
 	
+	if ( applocation_inited ) return 0;
 	currentPSN.highLongOfPSN = 0;
 	currentPSN.lowLongOfPSN = kCurrentProcess;
 	info.processInfoLength = sizeof(ProcessInfoRec);
 	info.processName = NULL;
-	info.processAppSpec = applicationSpec;
-	return GetProcessInformation(&currentPSN, &info);
+	info.processAppSpec = &PyMac_ApplicationFSSpec;
+	if ( err=GetProcessInformation(&currentPSN, &info))
+		return err;
+	if ( err=PyMac_GetFullPath(&PyMac_ApplicationFSSpec, PyMac_ApplicationPath) )
+		return err;
+	applocation_inited = 1;
+	return 0;
 }
 
 /* Given an FSSpec, return the FSSpec of the parent folder */
@@ -114,8 +127,8 @@
 
 /* Given an FSSpec return a full, colon-separated pathname */
 
-static OSErr
-get_full_path (FSSpec *fss, char *buf)
+OSErr
+PyMac_GetFullPath (FSSpec *fss, char *buf)
 {
 	short err;
 	FSSpec fss_parent, fss_current;
@@ -146,21 +159,6 @@
         return 0;
 }
 
-/* Return the full program name */
-
-static char *
-get_application_name()
-{
-	static char appname[256];
-	FSSpec appspec;
-	
-	if (PyMac_process_location(&appspec))
-		return NULL;
-	if (get_full_path(&appspec, appname))
-		return NULL;
-	return appname;
-}
-
 /* Check that there aren't any args remaining in the event */
 
 static OSErr 
@@ -230,7 +228,7 @@
 				  &keywd, &rttype, &fss, sizeof(fss), &size);
 		if (err)
 			break;
-		get_full_path(&fss, path);
+		PyMac_GetFullPath(&fss, path);
 		arg_vector[arg_count++] = strdup(path);
 	}
 	return err;
@@ -301,7 +299,8 @@
 {
 	
 	arg_count = 0;
-	arg_vector[arg_count++] = strdup(get_application_name());
+	(void)PyMac_init_process_location();
+	arg_vector[arg_count++] = strdup(PyMac_ApplicationPath);
 	
 	if( !noevents ) {
 		set_ae_handlers();
diff --git a/Mac/Python/macgetpath.c b/Mac/Python/macgetpath.c
index a7c1366..11eea57 100644
--- a/Mac/Python/macgetpath.c
+++ b/Mac/Python/macgetpath.c
@@ -147,10 +147,11 @@
 			printf("Cannot create preferences file, error %d\n", ResError());
 			exit(1);
 		}
-		if ( (err=PyMac_process_location(&dirspec)) != 0 ) {
-			printf("Cannot get FSSpec for application, error %d\n", err);
+		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);
@@ -212,7 +213,7 @@
     if ( prefrh != -1 ) CloseResFile(prefrh);
     UseResFile(oldrh);
 
-   	if ( nfullpath(&dirspec, name) == 0 ) {
+   	if ( PyMac_GetFullPath(&dirspec, name) == 0 ) {
    		strcat(name, ":");
     } else {
  		/* If all fails, we return the current directory */
@@ -228,7 +229,6 @@
 static char *
 PyMac_GetPythonPath()
 {
-    FSSpec dirspec;
     short oldrh, prefrh = -1;
     char *rv;
     int i, newlen;
@@ -289,20 +289,16 @@
     		rv[newlen-1] = 0;
     	} else if ( pathitem[0] >= 14 && strncmp((char *)pathitem+1, "$(APPLICATION)", 14) == 0 ) {
     		/* This is the application itself */
-			char fullname[256];
 			
-    		if ( (err=PyMac_process_location(&dirspec)) != 0 ) {
-				printf("Cannot get FSSpec for application, error %d\n", err);
+    		if ( (err=PyMac_init_process_location()) != 0 ) {
+				printf("Cannot get  application location, error %d\n", err);
 				exit(1);
 			}
-			if ( nfullpath(&dirspec, fullname) != 0 ) {
-				printf("Cannot convert application fsspec to path\n");
-				exit(1);
-			}
-			newlen = strlen(rv) + strlen(fullname) + 2;
+
+			newlen = strlen(rv) + strlen(PyMac_ApplicationPath) + 2;
     		if( (rv=realloc(rv, newlen)) == NULL)
     			goto out;
-    		strcpy(rv+strlen(rv), fullname);
+    		strcpy(rv+strlen(rv), PyMac_ApplicationPath);
     		rv[newlen-2] = '\n';
     		rv[newlen-1] = 0;