321 lines
11 KiB
C
321 lines
11 KiB
C
/*-----------------------------------------------------------------------------
|
||
* Description : AI - handle acces to field value in Perso structure
|
||
*-----------------------------------------------------------------------------
|
||
* Creation date : 23/10/96 Author : Olivier Couvreur
|
||
*/
|
||
|
||
#include "AIUseCPA.h"
|
||
|
||
#include "specif/AIOption.h"
|
||
#include "AIMacros.h"
|
||
#include "AI_Erm.h"
|
||
#include "AI_Struc.h"
|
||
|
||
#include "StrIntel.h"
|
||
#include "Convert.h"
|
||
|
||
#include "specif/AiTools.h"
|
||
|
||
/*
|
||
unsigned char fn_ucSetFieldValue(enum tdeFieldId_ eFieldId, HIE_tdxHandleToSuperObject hSuperObjPerso, struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
enum tdeVariableType_ eType;
|
||
tdstGetSetParam stTempGetSetParam;
|
||
tdp_fn_cSetFunctionPtr p_fn_cSetFieldFunction;
|
||
|
||
eType=fn_eGetFieldType(eFieldId);
|
||
|
||
switch (eType)
|
||
{
|
||
case E_vt_Float:
|
||
{
|
||
M_Full_GetSetParam_Float(&stTempGetSetParam,M_ReturnParam_xValue(p_stGetSetParam));
|
||
}
|
||
break;
|
||
case E_vt_Vector:
|
||
{
|
||
M_Full_GetSetParam_p_stVertex(&stTempGetSetParam,&M_GetSetParam_stVertexValue(p_stGetSetParam));
|
||
}
|
||
break;
|
||
case E_vt_Perso:
|
||
{
|
||
M_Full_GetSetParam_Perso(&stTempGetSetParam,M_GetSetParam_p_stSupObjValue(p_stGetSetParam));
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
M_Full_GetSetParam_Integer(&stTempGetSetParam,M_ReturnParam_lValue(p_stGetSetParam));
|
||
|
||
#if defined(__DEBUG_AI__)
|
||
{
|
||
unsigned char ucTruncated=(unsigned char) (M_GetSetParam_Type(p_stGetSetParam)==E_vt_Float);
|
||
long lValue=M_GetSetParam_lValue(&stTempGetSetParam);
|
||
|
||
switch (eType)
|
||
{
|
||
case E_vt__128To127:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<-128) || (lValue>127) );
|
||
break;
|
||
case E_vt_0To255:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>255) );
|
||
break;
|
||
case E_vt__32768To32767:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<-32768) || (lValue>32767) );
|
||
break;
|
||
case E_vt_0To65535:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>65535) );
|
||
break;
|
||
case E_vt_PositiveInteger:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) (lValue<0);
|
||
break;
|
||
case E_vt_Boolean:
|
||
case E_vt_1bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>1) );
|
||
break;
|
||
case E_vt_2bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>3) );
|
||
break;
|
||
case E_vt_3bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>7) );
|
||
break;
|
||
case E_vt_4bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>15) );
|
||
break;
|
||
case E_vt_5bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>31) );
|
||
break;
|
||
case E_vt_6bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>63) );
|
||
break;
|
||
case E_vt_7bit:
|
||
if (!ucTruncated) ucTruncated = (unsigned char) ( (lValue<0) || (lValue>127) );
|
||
break;
|
||
case E_vt_None:
|
||
default:
|
||
break;
|
||
}
|
||
|
||
if (ucTruncated)
|
||
{
|
||
char MyMsg[100];
|
||
sprintf(MyMsg,"Field id %d from p_stMind %p (%s)\n",eFieldId,hSuperObjPerso,AI_M_szGetPersoName(AI_M_stGetMindOfSuperObj(hSuperObjPerso)) );
|
||
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningTruncateAffectation, C_ucErmNoOpenInfoWindow,MyMsg);
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
p_fn_cSetFieldFunction=fn_p_fn_pGetFieldSetFunctionPtr(eFieldId);
|
||
return(p_fn_cSetFieldFunction(hSuperObjPerso,&stTempGetSetParam));
|
||
}
|
||
*/
|
||
|
||
/*
|
||
unsigned char fn_ucGetFieldValue(enum tdeFieldId_ eFieldId, HIE_tdxHandleToSuperObject hSuperObjPerso, struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
enum tdeVariableType_ eType;
|
||
tdp_fn_cGetFunctionPtr p_fn_cGetFieldFunction;
|
||
|
||
char ret=C_INVALID_SET;
|
||
|
||
//extremly important
|
||
M_GetSetParam_Clear(p_stGetSetParam);
|
||
|
||
p_fn_cGetFieldFunction=fn_p_fn_pGetFieldGetFunctionPtr(eFieldId);
|
||
ret=p_fn_cGetFieldFunction(hSuperObjPerso,p_stGetSetParam);
|
||
|
||
eType=fn_eGetFieldType(eFieldId);
|
||
|
||
switch (eType)
|
||
{
|
||
case E_vt_Float:
|
||
{
|
||
MTH_tdxReal xValue=M_GetSetParam_xValue(p_stGetSetParam);
|
||
M_Full_GetSetParam_Float(p_stGetSetParam,xValue);
|
||
}
|
||
break;
|
||
case E_vt_Vector:
|
||
{
|
||
MTH3D_tdstVector *p_stVertex= &M_GetSetParam_stVertexValue(p_stGetSetParam);
|
||
M_Full_GetSetParam_p_stVertex(p_stGetSetParam,p_stVertex);
|
||
}
|
||
break;
|
||
|
||
case E_vt_Perso:
|
||
{
|
||
HIE_tdxHandleToSuperObject hTempSuperObjPerso;
|
||
hTempSuperObjPerso= M_GetSetParam_p_stSupObjValue(p_stGetSetParam);
|
||
M_Full_GetSetParam_Perso(p_stGetSetParam,hTempSuperObjPerso);
|
||
}
|
||
break;
|
||
default:
|
||
{
|
||
long lValue=0;
|
||
// important pour les valeurs sign<67>es qui ne remplissent pas la structure GetSetParam
|
||
switch(eType)
|
||
{
|
||
case E_vt__128To127:
|
||
|
||
lValue=(long) M_GetSetParam_cValue(p_stGetSetParam);
|
||
break;
|
||
case E_vt__32768To32767:
|
||
lValue=(long) M_GetSetParam_wValue(p_stGetSetParam);
|
||
break;
|
||
default:
|
||
lValue=M_GetSetParam_lValue(p_stGetSetParam);
|
||
break;
|
||
}
|
||
M_Full_GetSetParam_Integer(p_stGetSetParam,lValue);
|
||
}
|
||
}
|
||
return(ret);
|
||
}
|
||
*/
|
||
|
||
|
||
/* Set ****************************************/
|
||
#if defined(__DEBUG_AI__)
|
||
unsigned char g_ucFieldTruncated=0;
|
||
#define M_INIT_TRUNCATED_FIELD() g_ucFieldTruncated=0;
|
||
|
||
#define M_NONE(x,a,b) 0
|
||
#define M_INF(x,a,b) ((x)<(a))
|
||
#define M_SUP(x,a,b) ((x)>(a))
|
||
#define M_INF_SUP(x,a,b) ( M_INF(x,a,0) || M_SUP(x,b,0) )
|
||
|
||
#define M_TEST_TRUNCATED_FIELD(p_stGetSetParam,expression,a,b) \
|
||
g_ucFieldTruncated=fn_ucIsThereFloatIfYesConvertItToInteger(p_stGetSetParam); \
|
||
if (!g_ucFieldTruncated) \
|
||
{ \
|
||
long lValue=M_GetSetParam_lValue(p_stGetSetParam); \
|
||
g_ucFieldTruncated=##expression(lValue,a,b); \
|
||
}
|
||
|
||
#define M_CHECK_TRUNCATED_FIELD(eFieldId,p_stPerso) \
|
||
if (g_ucFieldTruncated) \
|
||
{ \
|
||
char MyMsg[200]; \
|
||
sprintf(MyMsg,"Field %d from p_stMind (%s)\n",(eFieldId),AI_M_szGetPersoName(AI_M_stGetMindOfSuperObj(p_stPerso)) ); \
|
||
M_AIWarningErrorAndNeverStopForDebug(E_uwAIWarningTruncateAffectation, C_ucErmNoOpenInfoWindow,MyMsg); \
|
||
}
|
||
#else
|
||
#define M_INIT_TRUNCATED_FIELD()
|
||
#define M_TEST_TRUNCATED_FIELD(p_stGetSetParam,expression,a,b) (void) fn_ucIsThereFloatIfYesConvertItToInteger(p_stGetSetParam);
|
||
#define M_CHECK_TRUNCATED_FIELD(eFieldId,p_stPerso)
|
||
#endif
|
||
|
||
void fn_vSetFieldTypeComport(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
#if defined(__DEBUG_AI__)
|
||
M_VerifyTypeOfParamAction(p_stGetSetParam,E_vt_Comport);
|
||
#endif
|
||
}
|
||
|
||
void fn_vSetFieldTypeVector(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
#if defined(__DEBUG_AI__)
|
||
M_VerifyTypeOfParamAction(p_stGetSetParam,E_vt_Vector);
|
||
#endif
|
||
p_stGetSetParam=p_stGetSetParam;
|
||
}
|
||
|
||
void fn_vSetFieldTypeFloat(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
if (!M_IsFloatType(p_stGetSetParam))
|
||
{
|
||
M_Full_GetSetParam_Float(p_stGetSetParam,MTH_M_xLongToReal(M_GetSetParam_lValue(p_stGetSetParam)));
|
||
}
|
||
}
|
||
|
||
void fn_vSetFieldTypeInteger(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
fn_ucIsThereFloatIfYesConvertItToInteger(p_stGetSetParam);
|
||
}
|
||
|
||
void fn_vSetFieldType0To255(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
M_TEST_TRUNCATED_FIELD(p_stGetSetParam, M_INF_SUP, 0, 255);
|
||
}
|
||
|
||
|
||
unsigned char fn_ucSetFieldValue(enum tdeFieldId_ eFieldId, HIE_tdxHandleToSuperObject hSuperObjPerso, struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
enum tdeFieldTypeId_ eFieldType=fn_eGetEngineFieldType(eFieldId);
|
||
tdp_fn_cSetFunctionPtr p_fn_cSetFieldFunction=fn_p_fn_pGetFieldSetFunctionPtr(eFieldId);
|
||
tdp_fn_vSetTypeFunctionPtr p_fn_vSetFieldTypeFunction=fn_p_fn_pGetFieldTypeSetFunctionPtr(eFieldType);
|
||
|
||
M_INIT_TRUNCATED_FIELD();
|
||
|
||
/* pre process*/
|
||
p_fn_vSetFieldTypeFunction(p_stGetSetParam);
|
||
|
||
M_CHECK_TRUNCATED_FIELD(eFieldId,hSuperObjPerso);
|
||
|
||
/* write field*/
|
||
return(p_fn_cSetFieldFunction(hSuperObjPerso,p_stGetSetParam));
|
||
}
|
||
|
||
/* Get ******************/
|
||
|
||
void fn_vGetFieldTypeComport(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
#if defined(__DEBUG_AI__)
|
||
M_VerifyTypeOfParamAction(p_stGetSetParam,E_vt_Comport);
|
||
#endif
|
||
}
|
||
|
||
void fn_vGetFieldTypeVector(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
#if defined(__DEBUG_AI__)
|
||
M_VerifyTypeOfParamAction(p_stGetSetParam,E_vt_Vector);
|
||
#endif
|
||
p_stGetSetParam=p_stGetSetParam;
|
||
}
|
||
|
||
void fn_vGetFieldTypeFloat(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
if (!M_IsFloatType(p_stGetSetParam))
|
||
{
|
||
M_Full_GetSetParam_Float(p_stGetSetParam,MTH_M_xLongToReal(M_GetSetParam_lValue(p_stGetSetParam)));
|
||
}
|
||
}
|
||
|
||
void fn_vGetFieldTypeInteger(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
if (M_IsFloatType(p_stGetSetParam))
|
||
{
|
||
M_Full_GetSetParam_Integer(p_stGetSetParam,MTH_M_xRealToLong(M_GetSetParam_xValue(p_stGetSetParam)));
|
||
}
|
||
}
|
||
|
||
void fn_vGetFieldType0To255(struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
if (M_IsFloatType(p_stGetSetParam))
|
||
{
|
||
M_Full_GetSetParam_Integer(p_stGetSetParam,MTH_M_xRealToLong(M_GetSetParam_xValue(p_stGetSetParam)));
|
||
}
|
||
}
|
||
|
||
unsigned char fn_ucGetFieldValue(enum tdeFieldId_ eFieldId, HIE_tdxHandleToSuperObject hSuperObjPerso, struct tdstGetSetParam_ *p_stGetSetParam)
|
||
{
|
||
enum tdeFieldTypeId_ eFieldType=fn_eGetEngineFieldType(eFieldId);
|
||
tdp_fn_cGetFunctionPtr p_fn_cGetFieldFunction=fn_p_fn_pGetFieldGetFunctionPtr(eFieldId);
|
||
tdp_fn_vGetTypeFunctionPtr p_fn_vGetFieldTypeFunction=fn_p_fn_pGetFieldTypeGetFunctionPtr(eFieldType);
|
||
char ret=C_INVALID_SET;
|
||
|
||
/*extremly important*/
|
||
M_GetSetParam_Clear(p_stGetSetParam);
|
||
|
||
/* read fields*/
|
||
ret=p_fn_cGetFieldFunction(hSuperObjPerso,p_stGetSetParam);
|
||
|
||
if (ret==C_VALID_GET)
|
||
{
|
||
/* post process*/
|
||
p_fn_vGetFieldTypeFunction(p_stGetSetParam);
|
||
}
|
||
return(ret);
|
||
}
|
||
|
||
|