]> granicus.if.org Git - python/commitdiff
- Rationalized override preferences support, by remembering
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 6 Sep 1996 22:21:07 +0000 (22:21 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 6 Sep 1996 22:21:07 +0000 (22:21 +0000)
  application resource fork RefNum and looking there only
- Added support for loading gusi prefs from Preferences file (needs
  modified GUSI, but Matthias promised he'd incorporate the fixes in
  the next release)

Mac/Python/macgetpath.c
Mac/Python/macmain.c

index 0e3341dfe5f32acae3b4d54bf020417bfee30d75..5c2cafda1d9ed5651f1be0c04cba90f1e281feac 100644 (file)
@@ -1,6 +1,6 @@
 #include "Python.h"
 #include "osdefs.h"
-
+#include "macglue.h"
 #include "pythonresources.h"
 
 
 #include <TextUtils.h>
 #include <Dialogs.h>
 
+#ifdef USE_GUSI
+#include <GUSI.h>
+#endif
+
 #define PYTHONPATH "\
 :\n\
 :Lib\n\
@@ -149,27 +153,24 @@ PyMac_GetPythonDir()
     AliasHandle handle;
     FSSpec dirspec;
     Boolean modified = 0;
-    short oldrh, prefrh;
+    short oldrh, prefrh = -1, homerh;
     
     oldrh = CurResFile();
-    /*
-    ** First look for an override of the preferences file
-    */
-    handle = (AliasHandle)GetResource('alis', PYTHONHOMEOVERRIDE_ID);
+
+    /* First look for an override in the application file */
+    UseResFile(PyMac_AppRefNum);
+    handle = (AliasHandle)Get1Resource('alis', PYTHONHOMEOVERRIDE_ID);
     if ( handle != NULL ) {
-       prefrh = oldrh;
-    } else {
-           /*
-           ** Remember old resource file and try to open preferences file
-           ** in the preferences folder.
-           */
+       homerh = PyMac_AppRefNum;
+    } else {   
+           /* Try to open preferences file in the preferences folder. */
            prefrh = PyMac_OpenPrefFile();
-           /* So, we've opened our preferences file, we hope. Look for the alias */
            handle = (AliasHandle)Get1Resource('alis', PYTHONHOME_ID);
            if ( handle == NULL ) {
                (void)StopAlert(BADPREFFILE_ID, NULL);
                exit(1);
            }
+           homerh = prefrh;
     }
        /* It exists. Resolve it (possibly updating it) */
        if ( ResolveAlias(NULL, handle, &dirspec, &modified) != noErr ) {
@@ -178,12 +179,10 @@ PyMac_GetPythonDir()
     }
     if ( modified ) {
                ChangedResource((Handle)handle);
-       UpdateResFile(prefrh);
-    }
-    if ( prefrh != oldrh ) {
-               CloseResFile(prefrh);
-           UseResFile(oldrh);
+       UpdateResFile(homerh);
     }
+    if ( prefrh != -1 ) CloseResFile(prefrh);
+    UseResFile(oldrh);
 
        if ( nfullpath(&dirspec, name) == 0 ) {
                strcat(name, ":");
@@ -212,11 +211,13 @@ char *dir;
     OSErr err;
     Handle h;
     
+    oldrh = CurResFile();
     /*
-    ** This is a bit tricky. We check here whether the current resource file
+    ** 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);
@@ -225,12 +226,12 @@ char *dir;
        resource_id = PYTHONPATH_ID;
     }
     SetResLoad(1);
+    UseResFile(oldrh);
     
     /*
     ** 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);
@@ -302,10 +303,8 @@ char *dir;
                rv++;
        }
 out:
-       if ( prefrh ) {
-               CloseResFile(prefrh);
-               UseResFile(oldrh);
-       }
+       if ( prefrh != -1) CloseResFile(prefrh);
+       UseResFile(oldrh);
        return rv;
 }
 #endif /* !USE_BUILTIN_PATH */
@@ -315,17 +314,24 @@ PyMac_PreferenceOptions(int *inspect, int *verbose, int *suppress_print,
                                                 int *unbuffered, int *debugging, int *keep_normal,
                                                 int *keep_error)
 {
-       short oldrh, prefrh;
+       short oldrh, prefrh = -1;
        Handle handle;
        int size;
        char *p;
        
        
     oldrh = CurResFile();
-    prefrh = PyMac_OpenPrefFile();
-    handle = GetResource('Popt', PYTHONOPTIONSOVERRIDE_ID);
-    if ( handle == NULL )
+    
+    /* 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;
     }
@@ -340,9 +346,35 @@ PyMac_PreferenceOptions(int *inspect, int *verbose, int *suppress_print,
     if ( size > POPT_DEBUGGING ) *debugging = p[POPT_DEBUGGING];
     if ( size > POPT_KEEPNORM ) *keep_normal = p[POPT_KEEPNORM];
     if ( size > POPT_KEEPERR ) *keep_error = p[POPT_KEEPERR];
+    /* The rest are not implemented yet */
     
     HUnlock(handle);
 
-       CloseResFile(prefrh);
+       if ( prefrh != -1) CloseResFile(prefrh);
+    UseResFile(oldrh);
+}
+
+#ifdef USE_GUSI
+void
+PyMac_SetGUSIOptions()
+{
+       Handle h;
+       short oldrh, prefrh = -1;
+       
+       oldrh = CurResFile();
+       
+       /* Try override from the application resource fork */
+       UseResFile(PyMac_AppRefNum);
+       h = Get1Resource('GU\267I', GUSIOPTIONSOVERRIDE_ID);
+       UseResFile(oldrh);
+       
+       /* If that didn't work try nonoverride from anywhere */
+       if ( h == NULL ) {
+               prefrh = PyMac_OpenPrefFile();
+               h = GetResource('GU\267I', GUSIOPTIONS_ID);
+       }
+       if ( h ) GUSILoadConfiguration(h);
+       if ( prefrh != -1) CloseResFile(prefrh);
     UseResFile(oldrh);
 }
+#endif /* USE_GUSI */  
index a85f88f9fcf6dd5cffba9ce67fc6a9cf5f171d1d..095673e0f3c1f8562403213d6a79d68eeb5d409f 100644 (file)
@@ -52,6 +52,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 extern int Py_DebugFlag; /* For parser.c, declared in pythonrun.c */
 extern int Py_VerboseFlag; /* For import.c, declared in pythonrun.c */
 extern int Py_SuppressPrintingFlag; /* For ceval.c, declared in pythonrun.c */
+short PyMac_AppRefNum; /* RefNum of application resource fork */
 
 
 /* Subroutines that live in their own file */
@@ -97,7 +98,9 @@ init_mac_world()
 static void
 init_common()
 {
-
+       /* Remember resource fork refnum, for later */
+       PyMac_AppRefNum = CurResFile();
+       
        /* Initialize toolboxes */
        init_mac_world();
        
@@ -110,6 +113,7 @@ init_common()
        /* Setup GUSI */
        GUSIDefaultSetup();
        PyMac_SetGUSISpin();
+       PyMac_SetGUSIOptions();
 #endif
 
 #ifdef USE_SIOUX