home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / tarsrc30.sit / pref.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-04  |  3.5 KB  |  146 lines

  1. /*
  2.  * Macintosh Tar
  3.  *
  4.  * The routines in this file deal with the preference file.
  5.  *
  6.  * Written by Craig Ruff.
  7.  */
  8.  
  9. #include "tar.h"
  10. #include <Folders.h>
  11. #include <GestaltEqu.h>
  12.  
  13. char    *prefName = "\pTarPrefs";
  14. long    prefDirID = 2;
  15. short    prefVRefNum = 0;
  16.  
  17. struct pref pref;
  18.  
  19. GetPreferences()
  20. {
  21.     long        mask;
  22.     struct pref    upref;
  23.     HParamBlockRec    volpb;
  24.     HParamBlockRec    fpb;
  25.     
  26.     /*
  27.      * Make some defaults incase we don't find any later.
  28.      */
  29.     pref.autoPage = false;
  30.     pref.cvtNl = false;
  31.     pref.dosCvt = false;
  32.     pref.doPrint = false;
  33.     pref.floppy = false;
  34.     pref.oldArch = false;
  35.     pref.blocking = 20;
  36.     pref.blockSize = pref.blocking * RECORDSIZE;
  37.     memcpy(pref.creator, "MPS ", 4);
  38.     memcpy(pref.type, "TEXT", 4);
  39.     if (
  40.         (Gestalt(gestaltFindFolderAttr, &mask) != noErr) ||
  41.         !(mask & (1 << gestaltFindFolderPresent)) ||
  42.         (FindFolder(0, kPreferencesFolderType, false,
  43.                 &prefVRefNum, &prefDirID) != noErr)
  44.     ) {
  45.         /*
  46.          * Find the 'Blessed Folder' as per TN 67.
  47.          */
  48.         volpb.volumeParam.ioCompletion = nil;
  49.         volpb.volumeParam.ioNamePtr = nil;
  50.         volpb.volumeParam.ioVRefNum = 0;
  51.         volpb.volumeParam.ioVolIndex = 0;
  52.         PBHGetVInfo(&volpb, false);
  53.         if (volpb.volumeParam.ioResult == noErr) {
  54.             prefDirID = volpb.volumeParam.ioVFndrInfo[1];
  55.             prefVRefNum = volpb.volumeParam.ioVRefNum;
  56.         }
  57.     }
  58.     
  59.     fpb.fileParam.ioCompletion = nil;
  60.     fpb.fileParam.ioNamePtr = prefName;
  61.     fpb.fileParam.ioVRefNum = prefVRefNum;
  62.     fpb.fileParam.ioFVersNum = 0;
  63.     fpb.fileParam.ioDirID = prefDirID;
  64.     fpb.ioParam.ioPermssn = fsRdPerm;
  65.     fpb.ioParam.ioMisc = nil;
  66.     if (PBHOpen(&fpb, false) == noErr) {
  67.         fpb.ioParam.ioBuffer = (Ptr) &upref;
  68.         fpb.ioParam.ioReqCount = sizeof(upref);
  69.         fpb.ioParam.ioPosMode = fsFromStart;
  70.         fpb.ioParam.ioPosOffset = 0;
  71.         if (
  72.             (PBRead((ParmBlkPtr) &fpb, false) == noErr) &&
  73.             (fpb.ioParam.ioActCount == sizeof(pref))
  74.         ) {
  75.             memcpy(&pref, &upref, sizeof(pref));
  76.         }
  77.         
  78.         PBClose((ParmBlkPtr) &fpb, false);
  79.     }
  80. }
  81.  
  82. /*
  83.  * SavePreferences - save them in a preference file
  84.  */
  85. SavePreferences()
  86. {
  87.     OSErr        err;
  88.     HParamBlockRec    fpb;
  89.     char        *routine = "\pSavePreferences";
  90.     
  91.     fpb.fileParam.ioCompletion = nil;
  92.     fpb.fileParam.ioNamePtr = prefName;
  93.     fpb.fileParam.ioVRefNum = prefVRefNum;
  94.     fpb.fileParam.ioFVersNum = 0;
  95.     fpb.fileParam.ioDirID = prefDirID;
  96.     err = PBHCreate(&fpb, false);
  97.     if ((err != noErr) && (err != dupFNErr)) {
  98.         OSAlert(routine, "\pPBHCreate", prefName,
  99.                 fpb.fileParam.ioResult);
  100.         return;
  101.     }
  102.     
  103.     fpb.fileParam.ioCompletion = nil;
  104.     fpb.fileParam.ioNamePtr = prefName;
  105.     fpb.fileParam.ioVRefNum = prefVRefNum;
  106.     fpb.fileParam.ioDirID = prefDirID;
  107.     fpb.fileParam.ioFVersNum = 0;
  108.     fpb.fileParam.ioFDirIndex = 0;
  109.     if (PBHGetFInfo(&fpb, false)) {
  110.         OSAlert(routine, "\pPBHGetFInfo", prefName,
  111.                 fpb.fileParam.ioResult);
  112.         return;
  113.     }
  114.  
  115.     memcpy(&fpb.fileParam.ioFlFndrInfo.fdCreator, "TAR ", 4);
  116.     memcpy(&fpb.fileParam.ioFlFndrInfo.fdType, "PREF", 4);
  117.     fpb.fileParam.ioCompletion = nil;
  118.     fpb.fileParam.ioNamePtr = prefName;
  119.     fpb.fileParam.ioVRefNum = prefVRefNum;
  120.     fpb.fileParam.ioDirID = prefDirID;
  121.     fpb.fileParam.ioFVersNum = 0;
  122.     if (PBHSetFInfo(&fpb, false)) {
  123.         OSAlert(routine, "\pPBHSetFInfo", prefName,
  124.                 fpb.fileParam.ioResult);
  125.         return;
  126.     }
  127.  
  128.     fpb.ioParam.ioPermssn = fsWrPerm;
  129.     fpb.ioParam.ioMisc = nil;
  130.     if (PBHOpen(&fpb, false) != noErr) {
  131.         OSAlert(routine, "\pPBHOpen", prefName,
  132.                 fpb.fileParam.ioResult);
  133.         return;
  134.     }
  135.     
  136.     fpb.ioParam.ioBuffer = (Ptr) &pref;
  137.     fpb.ioParam.ioReqCount = sizeof(pref);
  138.     fpb.ioParam.ioPosMode = fsFromStart;
  139.     fpb.ioParam.ioPosOffset = 0;
  140.     if ((err = PBWrite((ParmBlkPtr) &fpb, false)) != noErr)
  141.         OSAlert(routine, "\pPBWrite", prefName, err);
  142.     
  143.     PBClose((ParmBlkPtr) &fpb, false);
  144. }
  145.  
  146.