/*=========================================================================
*
* Zooload.c	- loading functions for ZOO file
*
* Version			1.0
* Revision date
*
*=======================================================================*/
#include "ZooLoad.h"

#include "conventi.h"

//--- Global statics --------------------------------------------------------

int gs_iNb=0;


//--------------------------------------------------------------------



/****************************************************************************
*		Description:	register the loading function for the ZOO file
*
*		Parameters:		
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*****************************************************************************/
void MLT_vInitZOOLoad()
{    
  SCR_fn_v_RdL0_RegisterCallback(M_CS, MLT_xLoadCS,SCR_CRC_c_RdL0_ForSection);  
  SCR_fn_v_RdL0_RegisterCallback(M_AllCollideSets, MLT_xLoadAllCollideSets,SCR_CRC_c_RdL0_ForSection);  
  gs_iNb = 0;
}

/****************************************************************************
*		Description:	load AllCollideSets section in ZOO file
*
*		Parameters:		p_stFile	: script file pointer
*						szAction	: section or entry name
*						szParams	: parameters
*						cType		: action type
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*****************************************************************************/
SCR_tde_Anl_ReturnValue MLT_xLoadAllCollideSets(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType)
{
  MLT_tdstZoo *p_stZoo;
	
	switch (cType)
	{
		case SCR_EA_Anl_BeginSection:
			p_stZoo = (MLT_tdstZoo*)calloc(1,sizeof(MLT_tdstZoo));
      
			SCR_M_RdL0_SetSectionLong(0,0,(unsigned long)p_stZoo);
			SCR_M_RdL0_SetContextLong(0,0,(unsigned long)p_stZoo);
			break;

		case SCR_EA_Anl_Entry:
			break;

		case SCR_EA_Anl_EndSection:
			break;
	}
  return  SCR_ERV_Anl_NormalReturn;
}

/****************************************************************************
*		Description:	load CS sub-section in ZOO file
*
*		Parameters:		p_stFile	: script file pointer
*						szAction	: section or entry name
*						szParams	: parameters
*						cType		: action type
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*****************************************************************************/
SCR_tde_Anl_ReturnValue MLT_xLoadCS(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType)
{
  MLT_tdstZoo *p_stZoo;
  xString sFile, sAction, sIdent;
	
	switch (cType)
	{
		case SCR_EA_Anl_BeginSection:
			SCR_M_RdL0_GetContextLong(-1,0,MLT_tdstZoo*,p_stZoo);
			SCR_fn_v_RdL0_SplitSectionName(SCR_M_RdL0_GetCompleteSectionNameR(0), sFile, sAction, sIdent);
			if (!MLT_bExistIn(p_stZoo->sCS, sIdent))
				strcpy(p_stZoo->sCS[gs_iNb], sIdent);
			strcpy(p_stZoo->sZDR[gs_iNb], "");
			strcpy(p_stZoo->sZDM[gs_iNb], "");
			strcpy(p_stZoo->sZDE[gs_iNb], "");
			strcpy(p_stZoo->sZDD[gs_iNb], "");
			gs_iNb++;
		break;

		case SCR_EA_Anl_Entry:
			SCR_M_RdL0_GetContextLong(-1,0,MLT_tdstZoo*,p_stZoo);
			if (strcmp(szAction,M_ZOOActionZDR)==0)	
			{	
				strcpy(p_stZoo->sZDR[gs_iNb-1], szParams[0]);
			}
			if (strcmp(szAction,M_ZOOActionZDM)==0)	
			{	
				strcpy(p_stZoo->sZDM[gs_iNb-1], szParams[0]);
			}
			if (strcmp(szAction,M_ZOOActionZDE)==0)	
			{	
				strcpy(p_stZoo->sZDE[gs_iNb-1], szParams[0]);
			}
			if (strcmp(szAction,M_ZOOActionZDD)==0)	
			{	
				strcpy(p_stZoo->sZDD[gs_iNb-1], szParams[0]);
			}
			break;

		case SCR_EA_Anl_EndSection:
			break;
	}
  return  SCR_ERV_Anl_NormalReturn;
}



/****************************************************************************
*		Description:	search given zone in the array
*
*		Parameters:		p_sArray	: array of existing zones
*						sIdent1		: zone to search for
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*****************************************************************************/
BOOL MLT_bExistIn (xString *p_sArray, xString sIdent1)
{	
	int i;

	for (i=0; i<gs_iNb; i++)
	{
		if (!strcmp(p_sArray[i], sIdent1))
			return TRUE;
	}
	return FALSE;
}


/****************************************************************************
*		Description:	find index ofthe given zone in the array
*
*		Parameters:		sIdent	: zone to search for
*						p_stZoo	: array of existing zones
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*****************************************************************************/
int MLT_iIndex (xString sIdent, MLT_tdstZoo* p_stZoo)
{	
	int i;

	for (i=0; i<gs_iNb; i++)
	{
		if (!strcmp(sIdent, p_stZoo->sCS[i]))
			return i;
	}
	return -1;
}

