125 lines
5.3 KiB
C
125 lines
5.3 KiB
C
/*---------------------------------------------------------------------------*/
|
|
/* Intell.h : Test pour le module d'intelligence.*/
|
|
/* auteur : Olivier Didelot.*/
|
|
/* date : 07/08/1996*/
|
|
/* 970120 : fnc fn_vInterpretComportNPerso (Fabien Morales) */
|
|
/*---------------------------------------------------------------------------*/
|
|
#if !defined(__INTELL_H__)
|
|
#define __INTELL_H__
|
|
|
|
struct tdstGetSetParam_;
|
|
struct tdstIntelligence_;
|
|
#if defined(ACTIVE_EDITOR)
|
|
/* to active error intercepting while running : not finished yet*/
|
|
#define ACTIVE_EXEC_CHECKING
|
|
#if defined(ACTIVE_EXEC_CHECKING)
|
|
/*#pragma message("ACTIVE_EXEC_CHECKING is defined ==> editor will run automaticaly if an error occured in AI while running");*/
|
|
#endif
|
|
#endif
|
|
|
|
/*///////////////////////////////////////////////////////////////////////////*/
|
|
/* PLEASE Never use p_stEvalTree directly, but use theses macros instead ! //*/
|
|
/*///////////////////////////////////////////////////////////////////////////*/
|
|
|
|
/* Oliv' - 27/11/1998*/
|
|
#ifdef U64_AIDEBUG
|
|
struct AI_tdstMind_ *fn_p_stGetCurrentMind();
|
|
void fn_v_SetCurrentMind(struct AI_tdstMind_ *p_stMind);
|
|
#endif /* U64_AIDEBUG */
|
|
/* EndOfOliv'*/
|
|
|
|
/*** DR ***/
|
|
#if ( (defined(ACTIVE_EXEC_CHECKING) && defined(ACTIVE_EDITOR)) || defined(ACTIVE_AIDEBUG) ) && !defined(U64_AIDEBUG)
|
|
|
|
void fn_vSetStopAIEngineFlag();
|
|
/*void fn_vReSetStopAIEngineFlag(); *** DR ****/
|
|
unsigned char fn_ucGetStopAIEngineFlag();
|
|
struct AI_tdstMind_ *fn_p_stGetCurrentMind();
|
|
void fn_v_SetCurrentMind(struct AI_tdstMind_ *p_stMind);
|
|
unsigned char fn_ucGetErrorFlag(HIE_tdxHandleToSuperObject p_SuperObjPerso);
|
|
|
|
#include "ActConst.h"
|
|
|
|
#include "AI_Struc.h"
|
|
|
|
#define M_EvalOneParameter(p_SuperObjPerso,p_stTreeOut,p_stTreeIn,p_stParam) \
|
|
if ( (!fn_ucGetErrorFlag(p_SuperObjPerso)) && (!fn_ucGetStopAIEngineFlag()) ) \
|
|
(p_stTreeOut) = fn_p_stEvalTree( (p_SuperObjPerso), (p_stTreeIn), (p_stParam) ); \
|
|
if ( (fn_ucGetErrorFlag(p_SuperObjPerso)) || fn_ucGetStopAIEngineFlag() ) \
|
|
{ \
|
|
M_Full_GetSetParam_ActionReturn((p_stParam), (C_ACTION_FINISHED | C_ACTION_ENGINE_STOP)); \
|
|
return((p_stTreeOut)); \
|
|
}
|
|
#else
|
|
|
|
#define M_EvalOneParameter(p_SuperObjPerso,p_stTreeOut,p_stTreeIn,p_stParam) \
|
|
(p_stTreeOut) = fn_p_stEvalTree( (p_SuperObjPerso), (p_stTreeIn), (p_stParam) );
|
|
|
|
#endif
|
|
|
|
#define M_EvalTwoParameters(p_SuperObjPerso,p_stTreeOut,p_stTreeIn,p_stParam1,p_stParam2) \
|
|
M_EvalOneParameter((p_SuperObjPerso),(p_stTreeOut),(p_stTreeIn),(p_stParam1)); \
|
|
M_EvalOneParameter((p_SuperObjPerso),(p_stTreeOut),(p_stTreeIn),(p_stParam2)); \
|
|
|
|
#define M_EvalNextParameter(p_stValue) \
|
|
M_EvalOneParameter(p_SuperObjPerso,p_stTree,p_stTree,(p_stValue)) \
|
|
|
|
#define M_EvalNextTwoParameter() \
|
|
M_EvalNextParameter(&stParam1); \
|
|
M_EvalNextParameter(&stParam2);
|
|
|
|
#define M_vEvalNextVarId(p_stResultMind, ucResultVarId) \
|
|
{ \
|
|
HIE_tdxHandleToSuperObject p_stResultOwnerPerso; \
|
|
if ( M_GetTypeInterpret(p_stTree) == E_ti_Operator ) /* if the dsgvar is passed through an ultra operator, parse it */ \
|
|
{ \
|
|
/* make sure it is an ultra operator */ \
|
|
SAF_M_AssertWithMsg((M_eOperatorIdInterpret(p_stTree) == eOperator_Dot),"the argument is not a dsgvar reference"); \
|
|
/* skip the operator node to go to the arguments */ \
|
|
p_stTree ++; \
|
|
/* get the perso argument of the ultra operator */ \
|
|
p_stTree = fn_p_stOperatorGetPerso(p_SuperObjPerso,p_stTree,&p_stResultOwnerPerso); \
|
|
} \
|
|
else \
|
|
/* the dsgvar reference is owned by the calling instance */ \
|
|
p_stResultOwnerPerso = p_SuperObjPerso; \
|
|
\
|
|
/* get the mind of the owning perso (where the dsgvar is stored */ \
|
|
p_stResultMind = AI_M_stGetMindOfSuperObj(p_stResultOwnerPerso); \
|
|
/* get the dsgvar index (the second argument of the ultra operator if relevant */ \
|
|
ucResultVarId = M_ucVarIdInterpret(p_stTree); \
|
|
p_stTree ++; \
|
|
}
|
|
|
|
struct tdstNodeInterpret_ *fn_p_stSwapNextParameter(struct tdstNodeInterpret_ *p_stTree);
|
|
struct tdstNodeInterpret_ *fn_p_stSwapNextParameter2(struct tdstNodeInterpret_ *p_stTree);
|
|
struct tdstNodeInterpret_ *fn_p_stSkipThisArgument(struct tdstNodeInterpret_ *p_stTree);
|
|
struct tdstNodeInterpret_ *fn_p_stEvalTree(HIE_tdxHandleToSuperObject p_SuperObjPerso, struct tdstNodeInterpret_ *p_stTree, struct tdstGetSetParam_ *p_stValue);
|
|
struct tdstNodeInterpret_ *fn_p_stIntelligenceEvalTreeEngine(HIE_tdxHandleToSuperObject p_SuperObjPerso, struct tdstNodeInterpret_ *p_stTree, struct tdstGetSetParam_ *p_stValue);
|
|
ACP_tdxBool fn_bIntelligenceEngine(HIE_tdxHandleToSuperObject p_SuperObjPerso, struct tdstIntelligence_ *p_stIntelligence);
|
|
|
|
#if defined(__DEBUG_AI__)
|
|
void fn_vTestGetDsgVarOrField(unsigned char choice,unsigned char ucVarId,unsigned char ucIndex,enum tdeFieldId_ eFieldId,HIE_tdxHandleToSuperObject p_SuperObjPerso ,struct tdstGetSetParam_ *p_stValue);
|
|
#endif
|
|
|
|
#include "TypePtr.h"
|
|
void fn_vSetProcedureActionReturn(tducActionReturn ucActionReturn);
|
|
tducActionReturn fn_ucGetProcedureActionReturn(void); /*AR980313*/
|
|
|
|
/*////////////////////*/
|
|
/* Global Variables //*/
|
|
/*////////////////////*/
|
|
#undef EXTERN
|
|
#undef extern
|
|
#if !defined(__DeclareGlobalVariableIntell_h__)
|
|
#define EXTERN extern
|
|
#else
|
|
#define EXTERN
|
|
#endif /*__DeclareGlobalVariableIntell_h__*/
|
|
|
|
EXTERN struct tdstIntelligence_ *g_p_stIntelligence;
|
|
EXTERN unsigned char g_ucNRule;
|
|
EXTERN ACP_tdxBool bSomethingDone;
|
|
|
|
#endif /* __INTELL_H__*/
|