home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 May / macformat-024.iso / Shareware City / Developers / appe Windows 1.51 / prefs.c < prev    next >
Encoding:
Text File  |  1995-02-22  |  2.5 KB  |  80 lines  |  [TEXT/KAHL]

  1. // File "prefs.c" - General Routines for Getting and Saving Preferences
  2. // This source file is Copyright Matt Slot & Slot-Machines Ltd., © 1993
  3.  
  4. #include <Folders.h>
  5.  
  6. #include "main.h"
  7. #include "prefs.h"
  8.  
  9. // * **************************************************************************** * //
  10.  
  11. extern GlobalsRec glob;
  12.  
  13. // * **************************************************************************** * //
  14. // * **************************************************************************** * //
  15.  
  16. Handle GetPrefs(long type, short version) {
  17.     short prefsRefNum, saveRefNum;
  18.     Handle rsrc, pref=0;
  19.     
  20.     saveRefNum = CurResFile();
  21.     if ((prefsRefNum = OpenPrefsFile()) == -1) return(0);
  22.     
  23.     if ((rsrc = Get1Resource(type, version)) == 0) goto GET_PREFS_ERROR;
  24.     if ((pref = NewHandle(GetHandleSize(rsrc))) == 0) goto GET_PREFS_ERROR;
  25.     BlockMove(*rsrc, *pref, GetHandleSize(rsrc));
  26.  
  27.     ReleaseResource(rsrc);
  28.     
  29. GET_PREFS_ERROR:
  30.     CloseResFile(prefsRefNum);
  31.     UseResFile(saveRefNum);
  32.     return(pref);
  33.     }
  34.  
  35. // * **************************************************************************** * //
  36. // * **************************************************************************** * //
  37.  
  38. void WritePrefs(Handle pref, long type, short version) {
  39.     short prefsRefNum, saveRefNum;
  40.     Handle rsrc, oldRsrc;
  41.     
  42.     if (pref == 0) return;
  43.     saveRefNum = CurResFile();
  44.     if ((prefsRefNum = OpenPrefsFile()) == -1) return;
  45.     
  46.     if (rsrc = Get1Resource(type, version)) RmveResource(rsrc);
  47.     if ((rsrc = NewHandle(GetHandleSize(pref))) == 0) goto WRITE_PREFS_ERROR;
  48.     BlockMove(*pref, *rsrc, GetHandleSize(pref));
  49.  
  50.     AddResource(rsrc, type, version, "\p");
  51.     if (ResError()) goto WRITE_PREFS_ERROR;
  52.     WriteResource(rsrc);
  53.     
  54. WRITE_PREFS_ERROR:
  55.     CloseResFile(prefsRefNum);
  56.     UseResFile(saveRefNum);
  57.     }
  58.  
  59. // * **************************************************************************** * //
  60. // * **************************************************************************** * //
  61.  
  62. short OpenPrefsFile() {
  63.     short errorCold, prefsRefNum, vRefNum;
  64.     long dirID;
  65.     
  66.     if (errorCold = FindFolder(kOnSystemDisk, kPreferencesFolderType, -1,
  67.             &vRefNum, &dirID)) return(-1);
  68.             
  69.     prefsRefNum = HOpenResFile(vRefNum,dirID, kPrefsFileName, fsRdWrPerm);
  70.     if (ResError() == fnfErr) {
  71.         HCreate(vRefNum, dirID, kPrefsFileName, kCreatorType, kPrefsFileType);
  72.         HCreateResFile(vRefNum, dirID, kPrefsFileName);
  73.         prefsRefNum = HOpenResFile(vRefNum, dirID, kPrefsFileName, fsRdWrPerm);
  74.         }
  75.     if (errorCold || (prefsRefNum == -1)) return(-1);
  76.  
  77.     UseResFile(prefsRefNum);
  78.     return(prefsRefNum);
  79.     }
  80.