]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Python will now attempt (again) to create at least a minimal
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 31 Aug 1995 13:59:36 +0000 (13:59 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 31 Aug 1995 13:59:36 +0000 (13:59 +0000)
preferences file if it is missing.

Mac/Include/pythonresources.h
Mac/Python/macgetargv.c
Mac/Python/macgetpath.c

index 00f19792421f5dad56b66a3cb944138c3b0fb115..5125a1011c002eb3a4dceb177404d54c132ac1b4 100644 (file)
 ** shared ppc python, in the core dynamic library)
 */
 
-/* The alert for "No Python directory, where is it?" */
-#define NOPYTHON_ALERT 128
-#define YES_ITEM 1
-#define NO_ITEM 2
-#define CURWD_ITEM 3
+/* The alert for "No Python directory, where is it?" (OBSOLETE) */
+#define NOPYTHON_ALERT 128
+#define YES_ITEM               1
+#define NO_ITEM                        2
+#define CURWD_ITEM             3
 
 /* The alert for "this is an applet template" */
-#define NOPYC_ALERT 129
+#define NOPYC_ALERT            129
 
 /* The dialog for our GetDirectory and PromptGetFile call */
-#define GETDIR_ID 130          /* Resource ID for our "get directory" */
+#define GETDIR_ID              130             /* Resource ID for our "get directory" */
 #define GETFILEPROMPT_ID 132   /* Resource id for prompted get file */
-#define PROMPT_ITEM    10              /* The prompt, at the top */
-#define SELECTCUR_ITEM 11      /* "Select current directory" button */
+#define PROMPT_ITEM            10              /* The prompt, at the top */
+#define SELECTCUR_ITEM 11      /* "Select current directory" button */
 
 
 /* The dialog for interactive options */
 #define OPT_UNBUFFERED 6
 #define OPT_DEBUGGING  7
 
+/* Dialog for 'No preferences directory' */
+#define NOPREFDIR_ID   133
+
+/* Dialog for 'Create preferences file?' */
+#define NOPREFFILE_ID  134
+#define NOPREFFILE_YES 1
+#define NOPREFFILE_NO  2
+
+/* Dialog for 'Bad preference file' */
+#define BADPREFFILE_ID 135
+
 /*
 ** The following are valid both in the binary (or shared library)
 ** and in the Preferences file
index 2c909973c539b4d4d043b9104603e63b10cf7e51..7c343601781011428fcaf59d2b1ab6d77cb3ce66 100644 (file)
@@ -75,8 +75,8 @@ strdup(char *src)
 
 /* Return FSSpec of current application */
 
-static OSErr
-current_process_location(FSSpec *applicationSpec)
+OSErr
+PyMac_process_location(FSSpec *applicationSpec)
 {
        ProcessSerialNumber currentPSN;
        ProcessInfoRec info;
@@ -155,7 +155,7 @@ get_application_name()
        static char appname[256];
        FSSpec appspec;
        
-       if (current_process_location(&appspec))
+       if (PyMac_process_location(&appspec))
                return NULL;
        if (get_full_path(&appspec, appname))
                return NULL;
index 12fcf71e8403a22c4fbe4c0ad7b92a5faf5f300c..4d9b8da227caeed7ca94794d5be6c56c16b4e59f 100644 (file)
@@ -85,6 +85,57 @@ getpythonpath()
        return pythonpath;
 }
 
+/*
+** Open/create the Python Preferences file, return the handle
+*/
+short
+PyMac_OpenPrefFile()
+{
+    AliasHandle handle;
+    FSSpec dirspec;
+    short prefrh;
+    short prefdirRefNum;
+    long prefdirDirID;
+    short action;
+
+    if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
+                               &prefdirDirID) != noErr ) {
+       /* Something wrong with preferences folder */
+       (void)StopAlert(NOPREFDIR_ID, NULL);
+       exit(1);
+    }
+    
+       (void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
+       prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
+       if ( prefrh < 0 ) {
+               action = CautionAlert(NOPREFFILE_ID, NULL);
+               if ( action == NOPREFFILE_NO )
+                       exit(1);
+       
+               FSpCreateResFile(&dirspec, 'PYTH', 'pref', 0);
+               prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
+               if ( prefrh == -1 ) {
+                       /* This "cannot happen":-) */
+                       printf("Cannot create preferences file!!\n");
+                       exit(1);
+               }
+               if ( PyMac_process_location(&dirspec) != 0 ) {
+                       printf("Cannot get FSSpec for application!!\n");
+                       exit(1);
+               }
+               dirspec.name[0] = 0;
+               if (NewAlias(NULL, &dirspec, &handle) != 0 ) {
+                       printf("Cannot make alias to application directory!!\n");
+                       exit(1);
+               }
+       AddResource((Handle)handle, 'alis', PYTHONHOME_ID, "\p");
+       UpdateResFile(prefrh);
+
+       } else {
+               UseResFile(prefrh);
+       }
+       return prefrh;
+}
 
 /*
 ** Return the name of the Python directory
@@ -92,111 +143,41 @@ getpythonpath()
 char *
 PyMac_GetPythonDir()
 {
-    int item;
     static char name[256];
     AliasHandle handle;
     FSSpec dirspec;
-    int ok = 0;
-    Boolean modified = 0, cannotmodify = 0;
+    Boolean modified = 0;
     short oldrh, prefrh;
-    short prefdirRefNum;
-    long prefdirDirID;
     
     /*
     ** Remember old resource file and try to open preferences file
-    ** in the preferences folder. If it doesn't exist we try to create
-    ** it. If anything fails here we limp on, but set cannotmodify so
-    ** we don't try to store things later on.
+    ** in the preferences folder.
     */
     oldrh = CurResFile();
-    if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
-                               &prefdirDirID) != noErr ) {
-       /* Something wrong with preferences folder */
-       cannotmodify = 1;
-    } else {
-       (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);
-                       if ( prefrh == -1 ) {
-                               /* This is strange, what should we do now? */
-                               cannotmodify = 1;
-                       } else {
-                               UseResFile(prefrh);
-               }
-#else
-                       printf("Error: no Preferences file. Attempting to limp on...\n");
-                       name[0] = 0;
-                       getwd(name);
-                       return name;
-#endif
-       }
-    }
+    prefrh = PyMac_OpenPrefFile();
     /* So, we've opened our preferences file, we hope. Look for the alias */
     handle = (AliasHandle)Get1Resource('alis', PYTHONHOME_ID);
-    if ( handle ) {
-       /* It exists. Resolve it (possibly updating it) */
-       if ( ResolveAlias(NULL, handle, &dirspec, &modified) == noErr ) {
-               ok = 1;
-       }
+    if ( handle == NULL ) {
+       (void)StopAlert(BADPREFFILE_ID, NULL);
+       exit(1);
     }
-    if ( !ok ) {
-#ifdef USE_MAC_MODPREFS
-       /* No luck, so far. ask the user for help */
-           item = Alert(NOPYTHON_ALERT, NULL);
-           if ( item == YES_ITEM ) {
-               /* The user wants to point us to a directory. Let her do so */
-               ok = PyMac_GetDirectory(&dirspec);
-               if ( ok )
-                       modified = 1;
-           } else if ( item == CURWD_ITEM ) {
-               /* The user told us the current directory is fine. Build an FSSpec for it */
-               if ( getwd(name) ) {
-                       if ( FSMakeFSSpec(0, 0, Pstring(name), &dirspec) == 0 ) {
-                               ok = 1;
-                               modified = 1;
-                       }
-               }
-           }
-           if ( handle ) {
-               /* Set the (old, invalid) alias record to the new data */
-               UpdateAlias(NULL, &dirspec, handle, &modified);
-           }
-#else
-               printf("Error: corrupted Preferences file. Attempting to limp on...\n");
-               name[0] = 0;
-               getwd(name);
-               return name;
-#endif
+       /* It exists. Resolve it (possibly updating it) */
+       if ( ResolveAlias(NULL, handle, &dirspec, &modified) != noErr ) {
+       (void)StopAlert(BADPREFFILE_ID, NULL);
+       exit(1);
     }
-#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 ) {
-               if (NewAlias(NULL, &dirspec, &handle) == 0 )
-                       AddResource((Handle)handle, 'alis', PYTHONHOME_ID, "\p");
-       } else {
-               ChangedResource((Handle)handle);
-       }
+    if ( modified ) {
+               ChangedResource((Handle)handle);
        UpdateResFile(prefrh);
     }
-#endif
-    if ( !cannotmodify ) {
-       /* This means we have the resfile open. Close it. */
-       CloseResFile(prefrh);
-    }
-    /* Back to the old resource file */
+       CloseResFile(prefrh);
     UseResFile(oldrh);
-    /* Now turn the fsspec into a path to give back to our caller */
-    if ( ok ) {
-       ok = (nfullpath(&dirspec, name) == 0);
-       if ( ok ) strcat(name, ":");
-    }
-    if ( !ok ) {
-               /* If all fails, we return the current directory */
+
+       if ( nfullpath(&dirspec, name) == 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)getwd(name);
        }