home *** CD-ROM | disk | FTP | other *** search
- /*
- * Macintosh Tar
- *
- * The routines in this file deal with the preference file.
- *
- * Written by Craig Ruff.
- */
-
- #include "tar.h"
- #include <Folders.h>
- #include <GestaltEqu.h>
-
- char *prefName = "\pTarPrefs";
- long prefDirID = 2;
- short prefVRefNum = 0;
-
- struct pref pref;
-
- GetPreferences()
- {
- long mask;
- struct pref upref;
- HParamBlockRec volpb;
- HParamBlockRec fpb;
-
- /*
- * Make some defaults incase we don't find any later.
- */
- pref.autoPage = false;
- pref.cvtNl = false;
- pref.dosCvt = false;
- pref.doPrint = false;
- pref.floppy = false;
- pref.oldArch = false;
- pref.blocking = 20;
- pref.blockSize = pref.blocking * RECORDSIZE;
- memcpy(pref.creator, "MPS ", 4);
- memcpy(pref.type, "TEXT", 4);
- if (
- (Gestalt(gestaltFindFolderAttr, &mask) != noErr) ||
- !(mask & (1 << gestaltFindFolderPresent)) ||
- (FindFolder(0, kPreferencesFolderType, false,
- &prefVRefNum, &prefDirID) != noErr)
- ) {
- /*
- * Find the 'Blessed Folder' as per TN 67.
- */
- volpb.volumeParam.ioCompletion = nil;
- volpb.volumeParam.ioNamePtr = nil;
- volpb.volumeParam.ioVRefNum = 0;
- volpb.volumeParam.ioVolIndex = 0;
- PBHGetVInfo(&volpb, false);
- if (volpb.volumeParam.ioResult == noErr) {
- prefDirID = volpb.volumeParam.ioVFndrInfo[1];
- prefVRefNum = volpb.volumeParam.ioVRefNum;
- }
- }
-
- fpb.fileParam.ioCompletion = nil;
- fpb.fileParam.ioNamePtr = prefName;
- fpb.fileParam.ioVRefNum = prefVRefNum;
- fpb.fileParam.ioFVersNum = 0;
- fpb.fileParam.ioDirID = prefDirID;
- fpb.ioParam.ioPermssn = fsRdPerm;
- fpb.ioParam.ioMisc = nil;
- if (PBHOpen(&fpb, false) == noErr) {
- fpb.ioParam.ioBuffer = (Ptr) &upref;
- fpb.ioParam.ioReqCount = sizeof(upref);
- fpb.ioParam.ioPosMode = fsFromStart;
- fpb.ioParam.ioPosOffset = 0;
- if (
- (PBRead((ParmBlkPtr) &fpb, false) == noErr) &&
- (fpb.ioParam.ioActCount == sizeof(pref))
- ) {
- memcpy(&pref, &upref, sizeof(pref));
- }
-
- PBClose((ParmBlkPtr) &fpb, false);
- }
- }
-
- /*
- * SavePreferences - save them in a preference file
- */
- SavePreferences()
- {
- OSErr err;
- HParamBlockRec fpb;
- char *routine = "\pSavePreferences";
-
- fpb.fileParam.ioCompletion = nil;
- fpb.fileParam.ioNamePtr = prefName;
- fpb.fileParam.ioVRefNum = prefVRefNum;
- fpb.fileParam.ioFVersNum = 0;
- fpb.fileParam.ioDirID = prefDirID;
- err = PBHCreate(&fpb, false);
- if ((err != noErr) && (err != dupFNErr)) {
- OSAlert(routine, "\pPBHCreate", prefName,
- fpb.fileParam.ioResult);
- return;
- }
-
- fpb.fileParam.ioCompletion = nil;
- fpb.fileParam.ioNamePtr = prefName;
- fpb.fileParam.ioVRefNum = prefVRefNum;
- fpb.fileParam.ioDirID = prefDirID;
- fpb.fileParam.ioFVersNum = 0;
- fpb.fileParam.ioFDirIndex = 0;
- if (PBHGetFInfo(&fpb, false)) {
- OSAlert(routine, "\pPBHGetFInfo", prefName,
- fpb.fileParam.ioResult);
- return;
- }
-
- memcpy(&fpb.fileParam.ioFlFndrInfo.fdCreator, "TAR ", 4);
- memcpy(&fpb.fileParam.ioFlFndrInfo.fdType, "PREF", 4);
- fpb.fileParam.ioCompletion = nil;
- fpb.fileParam.ioNamePtr = prefName;
- fpb.fileParam.ioVRefNum = prefVRefNum;
- fpb.fileParam.ioDirID = prefDirID;
- fpb.fileParam.ioFVersNum = 0;
- if (PBHSetFInfo(&fpb, false)) {
- OSAlert(routine, "\pPBHSetFInfo", prefName,
- fpb.fileParam.ioResult);
- return;
- }
-
- fpb.ioParam.ioPermssn = fsWrPerm;
- fpb.ioParam.ioMisc = nil;
- if (PBHOpen(&fpb, false) != noErr) {
- OSAlert(routine, "\pPBHOpen", prefName,
- fpb.fileParam.ioResult);
- return;
- }
-
- fpb.ioParam.ioBuffer = (Ptr) &pref;
- fpb.ioParam.ioReqCount = sizeof(pref);
- fpb.ioParam.ioPosMode = fsFromStart;
- fpb.ioParam.ioPosOffset = 0;
- if ((err = PBWrite((ParmBlkPtr) &fpb, false)) != noErr)
- OSAlert(routine, "\pPBWrite", prefName, err);
-
- PBClose((ParmBlkPtr) &fpb, false);
- }
-
-