/*
 *   SFC_SF.H  Stateflow S-Function header file.
 *
 *   Copyright (c) 1995-2000 by The MathWorks, Inc.
 *
 *   $Revision: 1.5 $  $Date: 2000/06/23 14:28:42 $
 */

#ifndef _SFC_SF_H_
#define _SFC_SF_H_


#ifndef FORCE_S_FUNCTION_LEVEL_ONE
#define S_FUNCTION_LEVEL 2
#endif

#if S_FUNCTION_LEVEL==2
#define MDL_RTW
#define MDL_INITIALIZE_CONDITIONS
#endif



#include <math.h>
#include "simstruc.h"

#include "mex.h"
#define real_T double
#define int_T int



typedef void (*VoidFunctionPtr)( void * chartInstance);

typedef struct {
	void				*chartInstance;
	char sFunctionName[50];
	unsigned int chartInitialized;
	real_T					sampleTime;
	void (*sFunctionGateway)(void *chartInstance);
	void (*restoreLastMajorStepConfiguration)  (void *chartInstance);
	void (*restoreBeforeLastMajorStepConfiguration)  (void *chartInstance);
	void (*storeCurrentConfiguration)  (void *chartInstance);
	void (*initializeChart) (SimStruct *S);
	void (*terminateChart) (SimStruct *S);
	void (*mdlRTW)(SimStruct *S);
} ChartInfoStruct; 

extern BuiltInDTypeId sf_get_sl_type_from_ml_type(mxClassID mlType);

extern void mdlInitializeSizes(SimStruct *S);
extern void mdlInitializeSampleTimes(SimStruct *S);
extern void mdlTerminate(SimStruct * S);
#if S_FUNCTION_LEVEL==2
	extern void mdlInitializeConditions(SimStruct *S);
	extern void mdlOutputs(SimStruct *S, int_T tid);
	extern void mdlRTW(SimStruct *S);

#else
	extern void mdlInitializeConditions(double *x0, SimStruct *S);
	extern void mdlOutputs(double *y, const double *x, const double *u, SimStruct *S, int_T tid);
	extern void mdlUpdate(double * x, const double * u, SimStruct * S, int_T tid);
	extern void mdlDerivatives(double * dx, const double * x, const double * u, SimStruct * S, int_T tid);
#endif



#endif

