#ifndef _OMEGA_MSG_H
#define _OMEGA_MSG_H

#include <graphics/rastport.h>
#include <intuition/intuition.h>
#include <exec/ports.h>

#include "misc/systemdefs.h"

// Message types

#define OMEGAINPUT		0		 
#define OMEGAOUTPUT		1
#define OMEGARENDERER 	2	 

// Messageport defines

#define INPUTSIGNAL 	1<<(basePort->mp_SigBit)		// These two used to be different :)
#define OUTPUTSIGNAL 1<<(basePort->mp_SigBit)		//
#define MAINSIGNAL	1<<(coordPort->mp_SigBit)		// Are these two used any more?

// Define our message types

#define OM_START			0x00
#define OM_STOP			0x01
#define OM_QUIT			0x02	
#define OM_INIT			0x03	
#define OM_TEMPO			0x04
#define OM_EFFECT_START	0x05
#define OM_EFFECT_STOP	0x06
#define OM_EFFECT_QUIT	0x07
#define OM_EFFECT_VALUE	0x08
#define OM_RENDER			0x09
#define OM_CONFIG			0x0A
#define OM_ABOUT			0x0B
#define OM_CANCEL			0x0C
#define OM_TEMPO_STOP	0x0D

// This struct is getting somewhat bloated - perhaps find a way of whittling
// it down a bit - 29/12/99

typedef struct{
	Message 	om_Message;			// Normal msg
	UWORD		om_Type;				// Input or output 
	UWORD 	om_ID;				// Unique identifier - also used for plugin type identifier
	UBYTE		om_Class;			// Type of message sent
	MsgPort 	*om_Port;			// The port we need to send quit/start/stop msgs to
	Screen 	*om_Scr;				// For private use of Output Class 
	UBYTE 	om_EffectNo;		// 
	UINT 		om_Tempo;			// Current Tempo
	UBYTE		om_Value;			// New value to be stored
	UINT 		om_Track;			// Which track data refers to!
	char 		**om_Effects;		// Pointer to list of output effects
	UBYTE 	*om_Misc;			// Use this to point at extra info needed
} OmegaMessage;

#endif