Mercurial > cpython-lru_cache-weakref
diff Mac/Python/macglue.c @ 2333:6468fd0251d2 legacy-trunk
Changed PyMac_GetPythonDir to use a preferences file to store the
alias resource. Also added a few comments.
| author | Jack Jansen <jack.jansen@cwi.nl> |
|---|---|
| date | Mon, 13 Feb 1995 22:46:00 +0000 |
| parents | faaece7ccd6e |
| children | 71e60871c681 |
line wrap: on
line diff
--- a/Mac/Python/macglue.c Mon Feb 13 22:43:38 1995 +0000 +++ b/Mac/Python/macglue.c Mon Feb 13 22:46:00 1995 +0000 @@ -28,6 +28,7 @@ #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 @@ 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 @@ } } } 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 @@ } } } - 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, ":");
