home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 February / macformat-034.iso / mac / Shareware City / Developers / appe Windows 2.03 / prefs.c < prev    next >
Encoding:
Text File  |  1995-12-16  |  2.4 KB  |  85 lines  |  [TEXT/CWIE]

  1. // File "prefs.c" - 
  2.  
  3. #include <Folders.h>
  4.  
  5. #include "prefs.h"
  6.  
  7. // * **************************************************************************** * //
  8. // * **************************************************************************** * //
  9.  
  10. Handle GetPrefs(long type, short version) {
  11.     short prefsRefNum, saveRefNum;
  12.     Handle rsrc, pref=0;
  13.     
  14.     saveRefNum = CurResFile();
  15.     if ((prefsRefNum = OpenPrefsFile()) == -1) return(0);
  16.     
  17.     if (pref = rsrc = Get1Resource(type, version))
  18.         if (HandToHand(&pref)) pref = 0;
  19.     
  20.     if (rsrc) ReleaseResource(rsrc);
  21.     CloseResFile(prefsRefNum);
  22.     UseResFile(saveRefNum);
  23.     return(pref);
  24.     }
  25.  
  26. // * **************************************************************************** * //
  27. // * **************************************************************************** * //
  28.  
  29. void WritePrefs(Handle pref, long type, short version) {
  30.     short prefsRefNum, saveRefNum;
  31.     Handle rsrc;
  32.     
  33.     if (! pref) return;
  34.     
  35.     saveRefNum = CurResFile();
  36.     if ((prefsRefNum = OpenPrefsFile()) == -1) return;
  37.     
  38.     if (rsrc = Get1Resource(type, version)) {
  39.         RmveResource(rsrc);        // Only removes it from the rsrc map
  40.         DisposeHandle(rsrc);    // Now we actually free up the memory
  41.         }
  42.     
  43.     rsrc = pref;
  44.     if (! HandToHand(&rsrc)) {
  45.         AddResource(rsrc, type, version, "\p");
  46.         if (ResError()) DisposeHandle(rsrc);
  47.           else WriteResource(rsrc);
  48.         }
  49.     
  50.     CloseResFile(prefsRefNum);
  51.     UseResFile(saveRefNum);
  52.     }
  53.  
  54. // * **************************************************************************** * //
  55. // * **************************************************************************** * //
  56.  
  57. short OpenPrefsFile() {
  58.     short err=0, prefsRefNum;
  59.     FSSpec prefsFile;
  60.     
  61.     if (err = FindFolder(kOnSystemDisk, kPreferencesFolderType, -1,
  62.             &prefsFile.vRefNum, &prefsFile.parID)) return(-1);
  63.     BlockMove(kPrefsFileName, prefsFile.name, sizeof(prefsFile.name));
  64.         
  65.     prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
  66.     if (err = ResError()) {
  67.         if ((err != fnfErr) && (err = FSpDelete(&prefsFile))) return(-1);
  68.         if (err = CreatePrefsFile(&prefsFile)) return(-1);
  69.           prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
  70.           }
  71.     if (ResError() == fnfErr) return(-1);
  72.     UseResFile(prefsRefNum);
  73.     return(prefsRefNum);
  74.     }
  75.  
  76. // * **************************************************************************** * //
  77. // * **************************************************************************** * //
  78.  
  79. short CreatePrefsFile(FSSpecPtr prefsFile) {
  80.     short err=0;
  81.     
  82.     FSpCreateResFile(prefsFile, kCreatorType, kPrefsFileType, 0);
  83.     return(err = ResError());
  84.     }
  85.