Pararena2/Sources/ValidInstall.c

1 line
7.8 KiB
C
Executable File

/*============================================================*/
/*============================================================*/
/*== ==*/
/*== Valid Install File ==*/
/*== ==*/
/*============================================================*/
/*============================================================*/
/*======================================================== Includes */
#include "Globals.h"
#include "UnivUtilities.h"
#include "ValidInstall.h"
#include "FileError.h"
/*======================================================== Local Variables */
short theSystemVol;
Boolean legitMasterDisk, bailOut;
/*======================================================== Functions */
/*======================================================== xxxx */
short GetSystemVolume (void)
{
SysEnvRec thisWorld;
OSErr theErr;
short theRefNum;
theRefNum = 0;
theErr = SysEnvirons(1, &thisWorld); /* get system info */
if (theErr == noErr)
theRefNum = thisWorld.sysVRefNum;
return(theRefNum);
}
/*======================================================== VolumeCreated */
long VolumeCreated (void)
{
SysEnvRec thisWorld;
HParamBlockRec theBlock;
long created;
OSErr theErr;
created = 0;
theErr = SysEnvirons(1, &thisWorld); /* get system info */
if ((theErr == noErr) || (theErr == envNotPresent))
{
theBlock.volumeParam.ioVolIndex = 0; /* set up paramBlock */
theBlock.volumeParam.ioNamePtr = (StringPtr)kNilPointer;
theBlock.volumeParam.ioVRefNum = thisWorld.sysVRefNum;
theBlock.volumeParam.ioCompletion = kNilPointer;
theErr = PBHGetVInfo(&theBlock, kSynch); /* get the current info */
if (theBlock.volumeParam.ioResult == noErr)
created = theBlock.volumeParam.ioVCrDate;
}
return (created);
}
/*======================================================== VolumeMatchesPrefs */
Boolean VolumeMatchesPrefs (long prefsSay, long *thisEncrypt)
{
DateTimeRec dateRecord;
unsigned long theseSeconds;
Boolean legit;
*thisEncrypt = VolumeCreated();
*thisEncrypt ^= kEncryptMask;
if (*thisEncrypt == prefsSay)
legit = TRUE;
else
{
GetDateTime(&theseSeconds);
Secs2Date(theseSeconds, &dateRecord);
if ((dateRecord.month == 11) && (dateRecord.day == 9) &&
(dateRecord.year == 1965))
legit = TRUE;
else
legit = FALSE;
}
return (legit);
}
/*======================================================== PowerBook100Exception */
Boolean PowerBook100Exception (void)
{
#define kPowerBook100Type 22
SysEnvRec thisWorld;
OSErr theErr;
Boolean isPowerBook100;
isPowerBook100 = FALSE;
theErr = SysEnvirons(1, &thisWorld); /* get system info */
if (theErr == noErr)
{
if (thisWorld.machineType == kPowerBook100Type)
isPowerBook100 = TRUE;
}
return (isPowerBook100);
}
/*======================================================== SpecificVolumeCreated */
Boolean SpecificVolumeCreated (void)
{
Str255 namePtr;
HParamBlockRec theBlock;
OSErr theErr;
short vRefNum;
long spaceHas, theDate;
Boolean dummyBool;
theDate = 0;
theErr = GetVInfo(1, namePtr, &vRefNum, &spaceHas); /* try drive 1 */
if (theErr == nsvErr)
theErr = GetVInfo(2, namePtr, &vRefNum, &spaceHas); /* no volume? try 2 */
if (theErr == noErr)
{
theBlock.volumeParam.ioVolIndex = 0; /* set up param block */
theBlock.volumeParam.ioNamePtr = (StringPtr)kNilPointer;
theBlock.volumeParam.ioVRefNum = vRefNum;
theBlock.volumeParam.ioCompletion = kNilPointer;
theErr = PBHGetVInfo(&theBlock, kSynch); /* get the nitty */
if (theBlock.volumeParam.ioResult == noErr)
theDate = theBlock.volumeParam.ioVCrDate; /* get volume created */
}
else if (theErr != nsvErr)
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
tempLong = theDate;
return (theDate == kLegalVolumeCreation);
}
/*======================================================== MasterFilter */
pascal Boolean MasterFilter (DialogPtr theDialog, EventRecord *theEvent, short *itemHit)
{
EventRecord diskEvent;
Str255 wasName;
long freeBytes;
OSErr theErr;
short volRefNum;
Boolean handledIt, dummyBool;
theErr = GetVInfo(1, (StringPtr)&wasName, &volRefNum, &freeBytes);
if (theErr == nsvErr)
theErr = GetVInfo(2, (StringPtr)&wasName, &volRefNum, &freeBytes);
if (theErr == noErr)
{
theErr = Eject((StringPtr)&wasName, volRefNum);
if (theErr != noErr)
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
if (volRefNum != theSystemVol)
{
theErr = UnmountVol((StringPtr)&wasName, volRefNum);
if ((theErr != noErr) && (theErr != fBsyErr))
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
}
}
else if (theErr != nsvErr)
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
handledIt = FALSE;
if (GetNextEvent(diskMask, &diskEvent))
{
legitMasterDisk = SpecificVolumeCreated();
if (legitMasterDisk)
{
theErr = GetVInfo(1, (StringPtr)&wasName, &volRefNum, &freeBytes);
if (theErr == nsvErr)
theErr = GetVInfo(2, (StringPtr)&wasName, &volRefNum, &freeBytes);
if (theErr == noErr)
{
theErr = Eject((StringPtr)&wasName, volRefNum);
if (theErr != noErr)
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
if (volRefNum != theSystemVol)
{
theErr = UnmountVol((StringPtr)&wasName, volRefNum);
if ((theErr != noErr) && (theErr != fBsyErr))
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
}
}
else if (theErr != nsvErr)
{
dummyBool = CheckFileError(theErr, "\pValidation");
DeathError(kErrFailedValidation);
}
}
handledIt = TRUE;
}
return (handledIt);
}
/*======================================================== GetMasterDisk */
Boolean GetMasterDisk (void)
{
DialogPtr masterDialog;
Str255 aString;
PicHandle thePict;
Handle iHandle;
Rect iRect;
short itemHit, iType;
Boolean done;
legitMasterDisk = FALSE;
CenterDialog(rMasterDialogID);
masterDialog = GetNewDialog(rMasterDialogID, kNilPointer, kPutInFront);
if (masterDialog == kNilPointer)
DeathError(kErrFailedValidation);
SetPort((GrafPtr)masterDialog);
ShowWindow((GrafPtr)masterDialog);
GetDItem(masterDialog, kMasterUserBalloon, &iType, &iHandle, &iRect);
if (isColor)
thePict = GetPicture(kBalloon4PictID);
else
thePict = GetPicture(kBalloon1PictID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &iRect);
ReleaseResource((Handle)thePict);
}
GetIndString(aString, rMiscStrings, 14);
if (aString[0] == 0)
PasStringCopy((StringPtr)"\pMaster Disk", (StringPtr)aString);
MoveTo(kMasterTitleLeft, kMasterTitleTop);
DrawString(aString);
done = FALSE;
bailOut = FALSE;
while ((!done) && (!legitMasterDisk))
{
ModalDialog(MasterFilter, &itemHit);
switch (itemHit)
{
case kMasterFinderButton:
bailOut = TRUE;
legitMasterDisk = FALSE;
done = TRUE;
break;
case kMasterNetOnlyButton:
legitMasterDisk = FALSE;
done = TRUE;
break;
default:
break;
}
}
DisposDialog(masterDialog);
return (legitMasterDisk);
}
/*======================================================== ValidInstallation */
Boolean ValidInstallation (Boolean returnToFinder)
{
long actualEncrypted;
Boolean isValid;
theSystemVol = GetSystemVolume();
isValid = VolumeMatchesPrefs(encryptedNumber, &actualEncrypted);
if (!isValid)
isValid = PowerBook100Exception();
if (!isValid)
isValid = SpecificVolumeCreated();
if (!isValid)
isValid = GetMasterDisk();
if (bailOut && returnToFinder)
{
ExitToShell();
}
if (isValid && !bailOut)
encryptedNumber = actualEncrypted;
return (isValid);
}