#define SCC_INIT( ci, name, libbase )													\
	(ci)->ci_Hook.h_Entry = (ULONG (*)())name##_Dispatcher;						\
	(ci)->ci_Hook.h_Data = libbase;														\
	(ci)->ci_instsize = sizeof(struct name##Data);


#define SCC_DECLARE( name )																\
																									\
static ULONG	__asm name##_Dispatcher( register __a0 Class *cl,				\
													register __a2 Object *obj,				\
													register __a1 Msg msg );				\
static ULONG	__saveds __asm _name##_Dispatcher( register __a0 Class *cl,	\
													register __a2 Object *obj,				\
													register __a1 Msg msg,					\
													register __a6 struct Library *base );


#define SCC( name )																			\
																									\
static ULONG	__asm name##_Dispatcher( register __a0 Class *cl,				\
													register __a2 Object *obj,				\
													register __a1 Msg msg )					\
{																									\
	return _name##_Dispatcher( cl,obj,msg, cl->cl_Dispatcher.h_Data );		\
}																									\
																									\
static ULONG	__saveds __asm _name##_Dispatcher( register __a0 Class *cl,	\
													register __a2 Object *obj,				\
													register __a1 Msg msg,					\
													register __a6 struct Library *base )\
{																									\
	struct name##Data		*data = (struct name##Data *)0;							\
	ULONG						methodID = msg->MethodID;									\
																									\
	switch( methodID )


#define SCC_Method( MethodID )											\
		case MethodID:

#define SCC_MethodMsg( MsgStruct )										\
			struct MsgStruct *methodMsg = (struct MsgStruct *)msg;

#define SCC_Method_End														\
			break;

#define SCC_SCAMethod( MethodID )										\
		SCC_Method( SCCM_##MethodID )										\
		{																			\
			SCC_MethodMsg( SCCP_##MethodID )								\
			SCC_InitData

#define SCC_SCAMethodX( MethodID )										\
		SCC_Method( SCCM_##MethodID )										\
		{																			\
			SCC_InitData

#define SCC_SCAMethod_End													\
			break;																\
		}


#define SCC_InitData															\
		data=INST_DATA(cl,obj);

#define SCC_Method_SuperDefault											\
		default: return(DoSuperMethodA(cl,obj,msg));

#define SCC_Method_SuperReturn											\
		return(DoSuperMethodA(cl,obj,msg));

#define SCC_End																\
}

