Prefs.c

//
//      This is sample code which will make QTVR object movies from Linear QuickTime movies.
//
//      © 1991-1996 Apple Computer, Inc.  All rights reserved.
//
 
#include "MakeQTVRObject.h"
#include "extern.h" 
 
OSErr   RetrievePrefs()
{
    OSErr                   err = noErr;
    ConstStr255Param        fileName = "\pMakeQTVRObject Prefs";
    short                   refNum;
    Handle                  myData;
    long                    myEOF;
    short                   globalRef;
    
    // Find the prefs folder
    err = FindFolder(
        kOnSystemDisk,
        kPreferencesFolderType,
        true,
        &gPrefSpec.vRefNum,
        &gPrefSpec.parID);
        
    if (err != noErr)
        {
        UserMessage("\pCan't find Preferences folder.");
        return 6;
        }
        
    PLstrcpy(gPrefSpec.name, fileName); 
    err = FSpOpenDF (&gPrefSpec, fsRdWrPerm, &refNum);
    if(err)
        {
        //fill in default prefs and save to disk
        gPrefInf.dropMode = false;
        StuffQTVRObjectFileFormat1x0 (kStandardObject,
                                    60,
                                    36,
                                    1,
                                    1,
                                    0,
                                    0,
                                    Long2Fix(360),
                                    0,
                                    0,
                                    Long2Fix(180),
                                    0,
                                    0,
                                    &gPrefInf.objectInfo);
 
        SavePrefs();
        }
    else
        {
        //Get the prefs out of the file
        FSClose(refNum);
        err = FSpOpenDF (&gPrefSpec, fsRdWrPerm, &globalRef);
        if (err != noErr)
            {
            UserMessage("\pCan't open Preferences file.");
            return 1;
            }
        err = GetEOF(globalRef,&myEOF);
        if (err != noErr)
            {
            UserMessage("\pCan't open Preferences file.");
            return 1;
            }
        err = SetFPos(globalRef,fsFromStart,0);
        if (err != noErr)
            {
            UserMessage("\pCan't open Preferences file.");
            return 1;
            }
        myData = NewHandle(myEOF);
        HLock((Handle)myData);
        err = FSRead(globalRef,&(myEOF),(Ptr)*myData);
        if (err != noErr)
            {
            UserMessage("\pCan't open Preferences file.");
            return 1;
            }
        FSClose(globalRef);
        gPrefInf = **((PrefInfo**)myData);
        HUnlock(myData);
        DisposeHandle(myData);
        
        
        if ((gPrefInf.objectInfo.numberOfColumns <= 0) 
            || (gPrefInf.objectInfo.numberOfRows    <= 0) 
            || (gPrefInf.objectInfo.fieldOfView     <= 0) 
            || (gPrefInf.objectInfo.startHPan   > gPrefInf.objectInfo.endHPan)
            || (gPrefInf.objectInfo.startVPan   < gPrefInf.objectInfo.endVPan) 
            || (gPrefInf.objectInfo.initialHPan < gPrefInf.objectInfo.startHPan)
            || (gPrefInf.objectInfo.initialHPan > gPrefInf.objectInfo.endHPan) 
            || (gPrefInf.objectInfo.initialVPan > gPrefInf.objectInfo.startVPan)
            || (gPrefInf.objectInfo.initialVPan < gPrefInf.objectInfo.endVPan) 
            || (gPrefInf.objectInfo.loopSize        <= 0))
            {
            UserMessage("\pPrefs file is corrupted.  Please delete it and retry.");
            return (1);
            }   
        }
    return 0;
}
 
OSErr   SavePrefs()
{
    long            bytes;
    OSErr           err;
    short           fRefNum;
    Handle          data;
    
    FSpDelete (&gPrefSpec);
    err = FSpCreate (&gPrefSpec, kAppCreator, 'pref', smSystemScript);
    if (err != noErr)
        {
        UserMessage("\pCan't create Preferences file.");
        return 1;
        }
    err = FSpOpenDF (&gPrefSpec, fsRdWrPerm, &fRefNum);
    if (err != noErr)
        {
        UserMessage("\pCan't create Preferences file.");
        return 1;
        }
    bytes = sizeof(PrefInfo);
    data = NewHandle(bytes);
    HLock((Handle)data);
    **((PrefInfo**)data) = gPrefInf;
    err = FSWrite(fRefNum,&bytes,(Ptr)(*data));
    if (err != noErr)
        {
        UserMessage("\pCan't create Preferences file.");
        return 1;
        }
    HUnlock((Handle)data);
    FSClose(fRefNum);
    FlushVol(gPrefSpec.name,gPrefSpec.vRefNum);
    DisposeHandle(data);
    return 0;
}