303 lines
11 KiB
C
303 lines
11 KiB
C
/*=========================================================================
|
|
*
|
|
* ZooSave.c - loading functions for ZOO file
|
|
*
|
|
* Version 1.0
|
|
* Revision date
|
|
*
|
|
*=======================================================================*/
|
|
#include "ZooSave.h"
|
|
|
|
#include "conventi.h"
|
|
#include "main.h"
|
|
#include "print.h"
|
|
#include "system.h"
|
|
|
|
#include "geoobj.h"
|
|
|
|
#include "ModLib.h"
|
|
#include "ObjLoad.h"
|
|
#include "ZooLoad.h"
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
/****************************************************************************
|
|
* Description: save ZOO file
|
|
*
|
|
* Parameters: p_stFile : script file pointer
|
|
* sFileName : file name
|
|
* p_vPtr : data pointer
|
|
* xAction : script action
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void MLT_vSaveZooFile (SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
|
|
{
|
|
xString mes, sComment;
|
|
|
|
if (g_bIgnoreZoo)
|
|
{
|
|
sprintf(sComment, "Unit directive, the unit is stored in file result 1");
|
|
SCR_M_SvL0_SaveComment(p_stFile, sComment);
|
|
sprintf(sComment, "And correspond to the value of one unit exprimed in meter");
|
|
SCR_M_SvL0_SaveComment(p_stFile, sComment);
|
|
SCR_M_SvL0_SaveDirective(p_stFile, M_SetCurrentFileDouble,SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 3, "%d,%.2f", 1, 1.0);
|
|
SCR_M_SvL0_SaveBlankLine(p_stFile);
|
|
|
|
sprintf(mes, "%s%s", M_ZOO_HEADER, SCR_CC_sz_Cfg_SectionIdMark);
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, mes, SCR_CC_C_Cfg_EOL);
|
|
|
|
SCR_M_SvL0_SaveEntry(p_stFile, M_VersionNumber, SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%d", 1);
|
|
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: save AllCollideSets section in ZOO file
|
|
*
|
|
* Parameters: p_stFile : script file pointer
|
|
* sFileName : file name
|
|
* p_vPtr : data pointer
|
|
* xAction : script action
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void MLT_vSaveAllCollideSetsSection (SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
|
|
{
|
|
xString mes;
|
|
|
|
if(xAction == SCR_EA_Ntfy_AddSection)
|
|
{
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
}
|
|
|
|
if ((xAction == SCR_EA_Ntfy_AddSection) ||
|
|
(xAction == SCR_EA_Ntfy_RebuildSection) ||
|
|
(xAction == SCR_EA_Ntfy_AddOrRebuildSection))
|
|
{
|
|
sprintf(mes, "%s%s", M_AllCollideSets, SCR_CC_sz_Cfg_SectionIdMark);
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, mes, SCR_CC_C_Cfg_EOL);
|
|
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: save zones section in ZOO file
|
|
*
|
|
* Parameters: p_stFile : script file pointer
|
|
* sFileName : file name
|
|
* p_vPtr : data pointer
|
|
* xAction : script action
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void MLT_vSaveZoo (SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
|
|
{
|
|
MLT_tdstGeometricObject *p_stGeometric, *p_stObj;
|
|
SCR_tdst_Cxt_Values *p_stVal;
|
|
MLT_tdstZoo *p_stZoo;
|
|
xString mes, sFile, sAction, sIdent, sIdent2;
|
|
xString sForme, sHabillage, sName, sSection, sSection1;
|
|
long lNoPhy, lNoLod;
|
|
char *sPhysicalName;
|
|
int i;
|
|
|
|
|
|
p_stGeometric = (MLT_tdstGeometricObject *)p_vPtr;
|
|
sPhysicalName = p_stGeometric->sPhysicalSection;
|
|
|
|
if(xAction == SCR_EA_Ntfy_AddSection)
|
|
{
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
SCR_fn_v_SvL1_ToPrevLine(p_stFile);
|
|
}
|
|
else
|
|
SCR_fn_v_SvL1_DeleteSection(p_stFile);
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 1;
|
|
|
|
if (!g_bIgnoreZoo)
|
|
{
|
|
sprintf(sFile, "%s.zoo", "temp");
|
|
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_AllCollideSets, "");
|
|
if(SCR_fn_c_RdL0_IsSectionExists(mes))
|
|
{
|
|
p_stVal = SCR_fnp_st_RdL0_AnalyseSection(mes, SCR_CDF_uw_Anl_Normal);
|
|
p_stZoo = (MLT_tdstZoo*)SCR_M_ul_RdL0_ExtractLongValue(p_stVal,0);
|
|
|
|
SCR_fn_v_RdL0_SplitSectionName(sPhysicalName, sFile, sAction, sIdent);
|
|
sprintf(sFile, "%s%s.zoo", g_sDirectorySave, g_sFileIn);
|
|
sprintf(sIdent2, "CS_%s", sIdent);
|
|
i=MLT_iIndex(sIdent2, p_stZoo);
|
|
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_CS, sIdent2);
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
SCR_fn_v_SvL1_ToPrevLine(p_stFile);
|
|
if ((!strstr(p_stGeometric->sName, "!NOCOL"))&&(!strstr(p_stGeometric->sName, "!nocol")))
|
|
{
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(mes), SCR_CC_C_Cfg_EOL);
|
|
SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDR, SCR_CC_C_Cfg_NoChar);
|
|
if (i!=-1) SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stZoo->sZDR[i]);
|
|
else
|
|
{
|
|
p_stObj = MLT_pFindInLib(MLT_p_cGetSectionName(mes));
|
|
if(p_stObj != NULL)
|
|
{
|
|
sprintf(mes, "%s%s", g_sDirectorySave, p_stGeometric->sName);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, mes);
|
|
}
|
|
else
|
|
{
|
|
sprintf(mes, "%s%s", g_sDirectorySave, p_stGeometric->sName);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, mes);
|
|
}
|
|
}
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
SCR_g_ui_SvL0_IndentationLevel = 0;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ((!strstr(p_stGeometric->sName, "!NOCOL"))&&(!strstr(p_stGeometric->sName, "!nocol")))
|
|
{
|
|
SCR_fn_v_RdL0_SplitSectionName(sPhysicalName, sFile, sAction, sIdent);
|
|
sprintf(sFile, "%s%s.zoo", g_sDirectorySave, g_sFileIn);
|
|
sprintf(sIdent2, "CS_%s", sIdent);
|
|
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_CS, sIdent2);
|
|
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(mes), SCR_CC_C_Cfg_EOL);
|
|
|
|
SCR_fn_v_RdL0_SplitSectionName(p_stGeometric->sName, sFile, sAction, sIdent);
|
|
MLT_vSplitModuleSectionName(sIdent, sForme, sHabillage, &lNoPhy, &lNoLod, sName);
|
|
MLT_vComputePhysicalSectionName(sIdent, sForme, M_Collide, lNoPhy, sName);
|
|
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, sAction, sIdent);
|
|
|
|
SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDR, SCR_CC_C_Cfg_NoChar);
|
|
p_stObj = MLT_pFindInLib(sSection);
|
|
if(p_stObj != NULL)
|
|
{
|
|
sprintf(sSection1, "%s%s", g_sDirectorySave, sSection);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection1);
|
|
}
|
|
else
|
|
{
|
|
sprintf(sSection, "%s%s", g_sDirectorySave, p_stGeometric->sName);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
|
|
}
|
|
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 0;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: save zones section from OBJ file
|
|
*
|
|
* Parameters: p_stFile : script file pointer
|
|
* sFileName : file name
|
|
* p_vPtr : data pointer
|
|
* xAction : script action
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void MLT_vSaveZooFromObj (SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
|
|
{
|
|
MLT_tdstObjElement *p_stGeometric;
|
|
SCR_tdst_Cxt_Values *p_stVal;
|
|
MLT_tdstZoo *p_stZoo;
|
|
xString mes, sFile, sAction, sIdent, sIdent2;
|
|
int i;
|
|
|
|
p_stGeometric = (MLT_tdstObjElement *)p_vPtr;
|
|
if(xAction == SCR_EA_Ntfy_AddSection)
|
|
{
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
SCR_fn_v_SvL1_ToPrevLine(p_stFile);
|
|
}
|
|
else
|
|
if( g_bIgnoreZoo && (g_cCategoryType == C_Family))
|
|
{
|
|
SCR_fn_v_SvL1_DeleteSection(p_stFile);
|
|
}
|
|
else
|
|
return;
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 1;
|
|
|
|
if (!g_bIgnoreZoo)
|
|
{
|
|
sprintf(sFile, "%s.zoo", "temp");
|
|
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_AllCollideSets, "");
|
|
if(SCR_fn_c_RdL0_IsSectionExists(mes))
|
|
{
|
|
p_stVal = SCR_fnp_st_RdL0_AnalyseSection(mes, SCR_CDF_uw_Anl_Normal);
|
|
p_stZoo = (MLT_tdstZoo*)SCR_M_ul_RdL0_ExtractLongValue(p_stVal,0);
|
|
|
|
SCR_fn_v_RdL0_SplitSectionName(p_stGeometric->sSectionObj, sFile, sAction, sIdent);
|
|
sprintf(sFile, "%s%s.zoo", g_sDirectorySave, g_sFileIn);
|
|
sprintf(sIdent2, "CS_%s", sIdent);
|
|
i=MLT_iIndex(sIdent2, p_stZoo);
|
|
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_CS, sIdent2);
|
|
SCR_fn_v_SvL1_ToEndSection(p_stFile);
|
|
SCR_fn_v_SvL1_ToPrevLine(p_stFile);
|
|
|
|
if (!p_stGeometric->bFlag)
|
|
{ SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(mes), SCR_CC_C_Cfg_EOL);
|
|
if ((i!=-1) && strcmp(p_stZoo->sZDR[i], ""))
|
|
{ SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDR, SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stZoo->sZDR[i]);
|
|
}
|
|
if ((i!=-1) && strcmp(p_stZoo->sZDM[i], ""))
|
|
{ SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDM, SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stZoo->sZDM[i]);
|
|
}
|
|
if ((i!=-1) && strcmp(p_stZoo->sZDE[i], ""))
|
|
{ SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDE, SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stZoo->sZDE[i]);
|
|
}
|
|
if ((i!=-1) && strcmp(p_stZoo->sZDD[i], ""))
|
|
{ SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDD, SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stZoo->sZDD[i]);
|
|
}
|
|
if((g_cCategoryType != C_Family) && (i==-1))
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stGeometric->sSectionMod);
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 0;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!p_stGeometric->bFlag)
|
|
{
|
|
SCR_fn_v_RdL0_SplitSectionName(p_stGeometric->sSectionObj, sFile, sAction, sIdent);
|
|
sprintf(sFile, "%s%s.zoo", g_sDirectorySave, g_sFileIn);
|
|
sprintf(sIdent2, "CS_%s", sIdent);
|
|
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_CS, sIdent2);
|
|
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(mes), SCR_CC_C_Cfg_EOL);
|
|
}
|
|
|
|
if ((g_cCategoryType != C_Family) && !((g_cCategoryType == C_Bank) && g_bCreateBasicFamily))
|
|
{
|
|
SCR_M_SvL0_SaveEntry(p_stFile, M_ZOOActionZDR, SCR_CC_C_Cfg_NoChar);
|
|
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, p_stGeometric->sSectionMod);
|
|
}
|
|
|
|
if (!p_stGeometric->bFlag)
|
|
{
|
|
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
|
|
}
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 0;
|
|
}
|