/************************************************
Copyright © Simon Fraser 1994–5
All rights reserved.

This file contains the main AfterDark functions for initialization, drawing
and closing the module.

************************************************/

#include "Starter.h"

#define ErrorMsg(m) BlockMove(CtoPstr(m), params->errorMessage, 1 + m##[0]);


//--------------------CleanUp--------------------
void CleanUp(ModStore** storage)
{	
	if (storage)
	{	
		/*dispose of other memory allocated by your module here*/	
		DisposeHandle((Handle)storage);
	}
}

//---------------------DoInitialize--------------------
OSErr DoInitialize(Handle *storage, RgnHandle blankRgn, GMParamBlockPtr params)
{
	Handle storeHand;
	ModStorePtr ModStorage;

//Allocate memory and initialize variables here}
	storeHand = NewHandle(sizeof(ModStore));

	 if (!storeHand)
	{
		ErrorMsg("Sorry, couldn’t allocate memory");
		return ModuleError;
	}

	*storage = storeHand; 	/* store a reference to our storage where After Dark™ can keep it. */
	
/*lock down our storage so we can refer to it by pointer.*/
	HLockHi(storeHand);
	ModStorage = (ModStorePtr)*storeHand;
	
/*Initialize the fields in your structure*/
	ModStorage->frames = 0;

	HUnlock(storeHand);
	return noErr;
}


//--------------------DoBlank--------------------
OSErr DoBlank(Handle storage, RgnHandle blankRgn, GMParamBlockPtr params)
{	

	/*Fill the screen(s) with black*/
	ForeColor(blackColor);
	FillRgn(blankRgn, ¶ms->qdGlobalsCopy->qdBlack);

	return noErr;
}

//--------------------DoDrawFrame--------------------
OSErr DoDrawFrame(Handle storage, RgnHandle blankRgn, GMParamBlockPtr params)
{
	ModStorePtr	ModStorage;
	
	/*Lock the storage handle, so we can refer to it by pointer (for speed)*/
	HLock(storage);
	
	/*Make a pointer reference to storage*/
	ModStorage = (ModStorePtr)*storage;
	
	ModStorage->frames ++;
	
	/*We're done -- unlock the storage handle*/
	HUnlock(storage);
	return  noErr;
}

//--------------------DoClose--------------------
OSErr DoClose(Handle storage, RgnHandle blankRgn, GMParamBlockPtr params)
{
	/*Dispose of all the memory that we have allocated*/
	CleanUp((ModStore**)storage);
	return noErr;
}



//-----------------------------DoSetup-----------------------------------
OSErr DoSetUp(RgnHandle blankRgn, short message, GMParamBlockPtr params)
{
	/*I don't handle this message*/
	return noErr;
}


//------------------------------DoAbout---------------------------------
OSErr DoAbout(Handle storage, RgnHandle blankRgn, GMParamBlockPtr params)
{
	/*I don't handle this message*/
	
	/*Beware! If you do write your own About box routines here, the
	storage parameter that is passed is NOT allocated or initialized.
	You have to do all this yourself (as in DoInitialize). */
	return noErr;
}



//--------------------------DoSelected------------------------------
OSErr DoSelected(Handle storage, RgnHandle blankRgn, GMParamBlockPtr params)
{
	/*I don't handle this message*/
	return noErr;
}