diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1995-02-13 22:46:00 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1995-02-13 22:46:00 (GMT) |
commit | 6cfab2346ca62af82aec7069f893b415478eab73 (patch) | |
tree | 0e5f24c927d752f7c9022ba123b15a72590b5b8f /Mac | |
parent | fc0ff42034dcf38a5b04dfa2b27070c44a5937c1 (diff) | |
download | cpython-6cfab2346ca62af82aec7069f893b415478eab73.zip cpython-6cfab2346ca62af82aec7069f893b415478eab73.tar.gz cpython-6cfab2346ca62af82aec7069f893b415478eab73.tar.bz2 |
Changed PyMac_GetPythonDir to use a preferences file to store the
alias resource. Also added a few comments.
Diffstat (limited to 'Mac')
-rw-r--r-- | Mac/Python/macglue.c | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c index 53f130f..f9c3154 100644 --- a/Mac/Python/macglue.c +++ b/Mac/Python/macglue.c @@ -28,6 +28,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include <OSUtils.h> /* for Set(Current)A5 */ #include <Files.h> #include <Aliases.h> +#include <Folders.h> #include <StandardFile.h> #include <Resources.h> #include <Memory.h> @@ -378,18 +379,50 @@ PyMac_GetPythonDir() AliasHandle handle; FSSpec dirspec; int ok = 0, exists = 0; - Boolean modified = 0; + Boolean modified = 0, cannotmodify = 0; StandardFileReply sfreply; + short oldrh, prefrh; + short prefdirRefNum; + long prefdirDirID; - handle = (AliasHandle)GetResource('alis', 128); + /* + ** 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. + */ + 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 ) { + /* It doesn't exist. Try to create it */ + FSpCreateResFile(&dirspec, 'PYTH', 'pref', NULL); + prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm); + if ( prefrh == -1 ) { + cannotmodify = 1; + } else { + UseResFile(prefrh); + } + } + } + /* So, we've opened our preferences file, we hope. Look for the alias */ + handle = (AliasHandle)Get1Resource('alis', 128); if ( handle ) { + /* It exists. Resolve it (possibly updating it) */ if ( ResolveAlias(NULL, handle, &dirspec, &modified) == noErr ) ok = 1; exists = 1; } if ( !ok ) { + /* 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 */ StandardGetFile(NULL, 0, NULL, &sfreply); if ( sfreply.sfGood ) { if ( sfreply.sfIsFolder ) { @@ -406,6 +439,7 @@ PyMac_GetPythonDir() } } } 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; @@ -414,15 +448,23 @@ PyMac_GetPythonDir() } } } - if ( ok && modified ) { + if ( ok && modified && !cannotmodify) { + /* We have a new, valid fsspec and we can update the preferences file. Do so. */ if ( !exists ) { if (NewAlias(NULL, &dirspec, &handle) == 0 ) AddResource((Handle)handle, 'alis', 128, "\p"); } else { ChangedResource((Handle)handle); } - UpdateResFile(CurResFile()); + UpdateResFile(prefrh); + } + if ( !cannotmodify ) { + /* This means we have the resfile open. Close it. */ + CloseResFile(prefrh); } + /* Back to the old resource file */ + 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, ":"); |