reman3/Rayman_X/cpa/tempgrp/IPT/P5/IPT_Scpt.c

620 lines
27 KiB
C

/*=========================================================================
* IPT_Scpt.c :
* Script read
*
* (c) Ubi Studios 1997
*=======================================================================*/
#include "IPT_CPA.h"
#include "MemIPT.h"
#include "ErrIPT.h"
#include "IPT_Def.h"
#include "IPT_Hdl.h"
#define D_IPT_Input_StructureDefine
#include "IPT_KDef.h"
#include "IPT_Str.h"
#undef D_IPT_Input_StructureDefine
#include "IPT_Main.h"
#include "IPT_Scpt.h"
#include "Tmp.h"
#if !defined(U64)
void IPT_fn_vComputeArrayFromList(void)
{
unsigned long i,j;
IPT_tdxHandleToEntryElement hEntryElement,hEntryElementNext;
IPT_tdxHandleToKeyWordElement hKeyWord,hKeyWordNext;
/**** Destroy arrays ****/
#if !defined(ACTIVE_EDITOR)
if (IPT_g_hInputStructure.d_stEntryElementArray!=NULL)
{
for (i=0;i<IPT_g_hInputStructure.ulNumberOfEntryElement;i++)
{
IPT_fn_vFree(&IPT_g_hInputStructure.d_stEntryElementArray[i].d_stKeyWordElementArray);
}
IPT_fn_vFree(&IPT_g_hInputStructure.d_stEntryElementArray);
}
#endif /* ACTIVE_EDITOR */
/**** Allocation of the EntryElement array ****/
IPT_g_hInputStructure.ulNumberOfEntryElement = LST2_M_DynamicGetNumberOfElements(&IPT_g_hInputStructure.hEntryElement);
if (IPT_g_hInputStructure.ulNumberOfEntryElement!=0)
IPT_g_hInputStructure.d_stEntryElementArray = (IPT_tdstEntryElement *)IPT_fn_p_vAlloc(IPT_g_hInputStructure.ulNumberOfEntryElement* sizeof(struct IPT_tdstEntryElement_ ));
LST2_M_DynamicForEachMovingElementOf(&IPT_g_hInputStructure.hEntryElement,hEntryElement,hEntryElementNext,i)
{
IPT_g_hInputStructure.d_stEntryElementArray[i].p_szActionName = hEntryElement->p_szActionName;
IPT_g_hInputStructure.d_stEntryElementArray[i].p_szEntryName = hEntryElement->p_szEntryName;
IPT_g_hInputStructure.d_stEntryElementArray[i].lState = hEntryElement->lState;
IPT_g_hInputStructure.d_stEntryElementArray[i].xAnalogicValue = hEntryElement->xAnalogicValue;
IPT_g_hInputStructure.d_stEntryElementArray[i].bIsActivate = hEntryElement->bIsActivate;
IPT_g_hInputStructure.d_stEntryElementArray[i].ulNumberOfKeyWordElement = LST2_M_DynamicGetNumberOfElements(&hEntryElement->hKeyWordList);
if (IPT_g_hInputStructure.d_stEntryElementArray[i].ulNumberOfKeyWordElement!=0)
IPT_g_hInputStructure.d_stEntryElementArray[i].d_stKeyWordElementArray = (IPT_tdstKeyWordElement *)IPT_fn_p_vAlloc(IPT_g_hInputStructure.d_stEntryElementArray[i].ulNumberOfKeyWordElement*sizeof(struct IPT_tdstKeyWordElement_));
LST2_M_DynamicForEachMovingElementOf(&hEntryElement->hKeyWordList,hKeyWord,hKeyWordNext,j)
{
IPT_g_hInputStructure.d_stEntryElementArray[i].d_stKeyWordElementArray[j].u_ElementUnion = hKeyWord->u_ElementUnion;
IPT_g_hInputStructure.d_stEntryElementArray[i].d_stKeyWordElementArray[j].ucResult = hKeyWord->ucResult;
IPT_g_hInputStructure.d_stEntryElementArray[i].d_stKeyWordElementArray[j].ucMinCounterInput = hKeyWord->ucMinCounterInput;
IPT_g_hInputStructure.d_stEntryElementArray[i].d_stKeyWordElementArray[j].ucMaxCounterInput = hKeyWord->ucMaxCounterInput;
if ( hKeyWord->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionJustValidated
||hKeyWord->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionValidated
||hKeyWord->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionJustInvalidated
||hKeyWord->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionInvalidated)
{
LST2_M_DynamicGetNextElement(hKeyWord)->u_ElementUnion.hEntryElement = IPT_fn_hGetEntryActionHandle((char *)(LST2_M_DynamicGetNextElement(hKeyWord)->u_ElementUnion.hEntryElement));
}
#if !defined(ACTIVE_EDITOR)
LST2_M_DynamicIsolate(hKeyWord);
IPT_fn_vFree(&hKeyWord);
#endif /* ACTIVE_EDITOR */
}
#if !defined(ACTIVE_EDITOR)
LST2_M_DynamicIsolate(hEntryElement);
IPT_fn_vFree(&hEntryElement);
#endif /* ACTIVE_EDITOR */
}
}
/*************************************************************************/
void IPT_fn_vReadInputScript(char *_szName)
{
SCR_fnp_st_RdL0_AnalyseSection(_szName, SCR_CDF_uw_Anl_ForceAnalyse);
}
void IPT_fn_vEndReadInputScript(void)
{
/**** Transform list in array ****/
IPT_fn_vComputeArrayFromList();
}
/*************************************************************************/
IPT_tdxHandleToEntryElement IPT_fn_hGetEntryActionHandle(char *_szKeyActionName)
{
/*
IPT_tdxHandleToEntryElement hAction = NULL;
SCR_tdst_Link_Value *p_xIndex;
p_xIndex = SCR_fnp_st_Link_SearchKey(&IPT_g_hInputStructure.stEntryLink,_szKeyActionName);
if (p_xIndex!=NULL&&SCR_M_e_Link_GetState(p_xIndex)==SCR_ELS_Link_Initialized)
hAction = (IPT_tdxHandleToEntryElement)SCR_M_ul_Link_GetValue(p_xIndex);
return(hAction);
*/
unsigned long i;
IPT_tdxHandleToEntryElement hAction = NULL;
for (i=0;hAction==NULL&&i<IPT_g_hInputStructure.ulNumberOfEntryElement;i++)
{
if (!stricmp(IPT_g_hInputStructure.d_stEntryElementArray[i].p_szActionName,_szKeyActionName))
hAction = &IPT_g_hInputStructure.d_stEntryElementArray[i];
}
return(hAction);
}
/*************************************************************************/
SCR_tde_Anl_ReturnValue IPT_fn_eAddKeyActionScriptCallBack(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
IPT_tdxHandleToEntryElement hEntryElement;
/* SCR_tdst_Link_Value *p_xIndex;*/
if (M_IsTitle)
{
/*
Mmg_M_SetModeAlloc4Ch(IPT,E_ucIPTMemoryBlock,C_ucMmgDefaultChannel);
MMG_fn_vAddMemoryInfo(MMG_C_lTypeIPT,MMG_C_lSubTypeIPT,0);
if ((hEntryElement = (IPT_tdxHandleToEntryElement)Mmg_fn_p_vAlloc4Ch(sizeof(struct IPT_tdstEntryElement_),C_ucMmgDefaultChannel))==NULL)
M_IPTFatalError(E_uwIPT_AllocNewKeyAction);
*/
MMG_fn_vAddMemoryInfo(MMG_C_lTypeIPT,MMG_C_lSubTypeIPT,0);
hEntryElement = (IPT_tdxHandleToEntryElement)IPT_fn_p_vAlloc(sizeof(struct IPT_tdstEntryElement_));
memset(hEntryElement,0,sizeof(struct IPT_tdstEntryElement_));
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,hEntryElement);
LST2_M_DynamicInitElement(hEntryElement);
LST2_M_DynamicAddTail(&IPT_g_hInputStructure.hEntryElement,hEntryElement);
LST2_M_DynamicInitAnchor(&hEntryElement->hKeyWordList);
hEntryElement->lState = -2;
hEntryElement->bIsActivate = IPT_C_TRUE;
if (_ap_szParams[0]!=NULL&&!stricmp(_ap_szParams[0],IPT_C_ParamOptions))
{
MMG_fn_vAddMemoryInfo(MMG_C_lTypeIPT,MMG_C_lSubTypeIPT,0);
/* if ((hEntryElement->p_szEntryName = (char*)Mmg_fn_p_vAlloc4Ch((strlen(_p_szName)+1)*sizeof(char),C_ucMmgDefaultChannel))==NULL)
M_IPTFatalError(E_uwIPT_AllocNewKeyAction);
*/
hEntryElement->p_szEntryName = (char*)IPT_fn_p_vAlloc(strlen(_p_szName)+1);
strcpy(hEntryElement->p_szEntryName,_p_szName);
}
hEntryElement->p_szActionName = (char*)TMP_M_p_Malloc(strlen(_p_szName)+1);
strcpy(hEntryElement->p_szActionName,_p_szName);
/* p_xIndex=SCR_fnp_st_Link_CreateOrGetLinkFromKey(&IPT_g_hInputStructure.stEntryLink,_p_szName);
if (p_xIndex!=NULL&&p_xIndex->eState==SCR_ELS_Link_NotInitialized)
{
SCR_fnp_st_Link_SetValue(&IPT_g_hInputStructure.stEntryLink,_p_szName,(unsigned long)hEntryElement);
}
else if (p_xIndex!=NULL&&p_xIndex->eState==SCR_ELS_Link_Initialized)
{
M_IPTFatalError(E_uwIPT_NewKeyActionAlreadyExist);
}
*/
}
else if (M_IsEntry)
{
IPT_tdxHandleToKeyWordElement hKeyWordOrderElement,hKeyWordElement;
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,IPT_tdxHandleToEntryElement,hEntryElement);
hKeyWordOrderElement=IPT_fn_hAllocKeyWord();
hKeyWordOrderElement->u_ElementUnion.swKeyWord = IPT_fn_swGetKeyValue(_p_szName,IPT_g_hScriptKeyWordValue);
LST2_M_DynamicInitElement(hKeyWordOrderElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordOrderElement);
/**** All following keyword take a key in parameter ****/
if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_KeyJustPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_KeyPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_KeyJustReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_KeyReleased)
{
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swKeyWord = IPT_fn_swGetKeyValue(_ap_szParams[0],IPT_g_hScriptKeyValue);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
}
/**** All following keyword take a pad in parameter ****/
if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_PadJustPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_PadPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_PadJustReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_PadReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickOrPadPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickOrPadJustPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickOrPadReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickOrPadJustReleased)
{
/**** Pad Number ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swPadNumber = atoi(_ap_szParams[0]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
/**** Pad Action ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swPadAction = IPT_fn_swGetKeyValue(_ap_szParams[1],IPT_g_hScriptPadValue);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
}
/**** All following keyword take a joystick in parameter ****/
if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickAxeValue)
{
/**** Joystick Number ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyNumber = atoi(_ap_szParams[0]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
/**** Joystick Action ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyAction = IPT_fn_swGetKeyValue(_ap_szParams[1],IPT_g_hScriptPadValue);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
/**** Joystick Min Value ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyValueMin = atoi(_ap_szParams[2]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
/**** Joystick Max Value ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyValueMax = atoi(_ap_szParams[3]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
}
/**** All following keyword take a joystick in parameter ****/
if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickJustPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickJustReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickReleased)
{
/**** Pad Number ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyNumber = atoi(_ap_szParams[0]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
/**** Pad Action ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyAction = IPT_fn_swGetKeyValue(_ap_szParams[1],IPT_g_hScriptPadValue);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
}
/**** All following keyword take a Entry Handle in parameter ****/
if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionJustValidated
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionValidated
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionJustInvalidated
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionInvalidated)
{
hKeyWordElement=IPT_fn_hAllocKeyWord();
/* hKeyWordElement->u_ElementUnion.hEntryElement = IPT_fn_hGetEntryActionHandle(_ap_szParams[0]);*/
hKeyWordElement->u_ElementUnion.hEntryElement = TMP_M_p_Malloc(strlen(_ap_szParams[0])+1);
strcpy((char*)hKeyWordElement->u_ElementUnion.hEntryElement,_ap_szParams[0]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
/*
if (!IPT_fn_bIsAValidEntryActionHandle(hKeyWordElement->u_ElementUnion.hEntryElement))
M_IPTFatalError(E_uwIPT_UnknownActionValue);
*/
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hKeyWordElement);
}
/**** All following keyword can have time notion ****/
if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_KeyPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_KeyReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionValidated
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_ActionInvalidated)
{
if (_ap_szParams[1]!=NULL)
{
hKeyWordElement->ucMinCounterInput = atoi(_ap_szParams[1]);
if (_ap_szParams[2]!=NULL)
hKeyWordElement->ucMaxCounterInput = atoi(_ap_szParams[2]);
}
}
else if ( hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_PadPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_PadReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickReleased
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickOrPadPressed
||hKeyWordOrderElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_JoystickOrPadReleased)
{
if (_ap_szParams[2]!=NULL)
{
hKeyWordElement->ucMinCounterInput = atoi(_ap_szParams[2]);
if (_ap_szParams[3]!=NULL)
hKeyWordElement->ucMaxCounterInput = atoi(_ap_szParams[3]);
}
}
}
return(eReturnValue);
}
/*************************************************************************/
SCR_tde_Anl_ReturnValue IPT_fn_eSequenceCallBack(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
IPT_tdxHandleToEntryElement hEntryElement;
IPT_tdxHandleToKeyWordElement hSequenceKeyWordElement,hSequenceOrderKeyWordElement;
IPT_tdxHandleToKeyWordElement hKeyWordElement;
long ulNumberOfSequence;
SCR_M_RdL0_GetSectionLong(C_ParentSection,0,IPT_tdxHandleToEntryElement,hEntryElement);
if (M_IsTitle)
{
hSequenceKeyWordElement=IPT_fn_hAllocKeyWord();
hSequenceKeyWordElement->u_ElementUnion.swKeyWord = IPT_fn_swGetKeyValue(IPT_C_SequenceSection,IPT_g_hScriptKeyWordValue);
LST2_M_DynamicInitElement(hSequenceKeyWordElement);
LST2_M_DynamicAddTail(&hEntryElement->hKeyWordList,hSequenceKeyWordElement);
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,hSequenceKeyWordElement);
SCR_M_RdL0_SetSectionLong(C_ThisSection,1,0);
}
else if (M_IsEntry)
{
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,IPT_tdxHandleToKeyWordElement,hSequenceKeyWordElement);
SCR_M_RdL0_GetSectionLong(C_ThisSection,1,unsigned long,ulNumberOfSequence);
SCR_M_RdL0_SetSectionLong(C_ThisSection,1,ulNumberOfSequence+1);
hSequenceOrderKeyWordElement=IPT_fn_hAllocKeyWord();
hSequenceOrderKeyWordElement->u_ElementUnion.swKeyWord = IPT_fn_swGetKeyValue(_p_szName,IPT_g_hScriptKeyWordValue);
LST2_M_DynamicInitElement(hSequenceOrderKeyWordElement);
LST2_M_DynamicInsertBetween(hSequenceOrderKeyWordElement,hSequenceKeyWordElement,LST2_M_DynamicGetNextElement(hSequenceKeyWordElement));
if (hSequenceOrderKeyWordElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_SequenceKey)
{
hSequenceOrderKeyWordElement->u_ElementUnion.swKeyWord=IPT_E_KeyWord_SequenceKeyEnd;
if (LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement)!=NULL)
LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement)->u_ElementUnion.swKeyWord=IPT_E_KeyWord_SequenceKey;
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swKeyWord = IPT_fn_swGetKeyValue(_ap_szParams[0],IPT_g_hScriptKeyValue);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
if (_ap_szParams[1]!=NULL)
{
hKeyWordElement->ucMinCounterInput = atoi(_ap_szParams[1]);
if (_ap_szParams[2]!=NULL)
hKeyWordElement->ucMaxCounterInput = atoi(_ap_szParams[2]);
}
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicInsertBetween(hKeyWordElement,hSequenceOrderKeyWordElement,LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement));
}
else if (hSequenceOrderKeyWordElement->u_ElementUnion.swKeyWord==IPT_E_KeyWord_SequencePad)
{
hSequenceOrderKeyWordElement->u_ElementUnion.swKeyWord=IPT_E_KeyWord_SequencePadEnd;
if (LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement)!=NULL)
LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement)->u_ElementUnion.swKeyWord=IPT_E_KeyWord_SequencePad;
/**** Pad Action ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swKeyWord = IPT_fn_swGetKeyValue(_ap_szParams[1],IPT_g_hScriptPadValue);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
if (_ap_szParams[2]!=NULL)
{
hKeyWordElement->ucMinCounterInput = atoi(_ap_szParams[2]);
if (_ap_szParams[3]!=NULL)
hKeyWordElement->ucMaxCounterInput = atoi(_ap_szParams[3]);
}
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicInsertBetween(hKeyWordElement,hSequenceOrderKeyWordElement,LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement));
/**** Pad Number ****/
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.swJoyNumber = atoi(_ap_szParams[0]);
hKeyWordElement->ucMinCounterInput = 0;
hKeyWordElement->ucMaxCounterInput = 255;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicInsertBetween(hKeyWordElement,hSequenceOrderKeyWordElement,LST2_M_DynamicGetNextElement(hSequenceOrderKeyWordElement));
}
}
else if (M_IsEnd)
{
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,IPT_tdxHandleToKeyWordElement,hSequenceKeyWordElement);
SCR_M_RdL0_GetSectionLong(C_ThisSection,1,unsigned long,ulNumberOfSequence);
hKeyWordElement=IPT_fn_hAllocKeyWord();
hKeyWordElement->u_ElementUnion.ulNumberOfSequence = ulNumberOfSequence;
LST2_M_DynamicInitElement(hKeyWordElement);
LST2_M_DynamicInsertBetween(hKeyWordElement,hSequenceKeyWordElement,LST2_M_DynamicGetNextElement(hSequenceKeyWordElement));
}
return(eReturnValue);
}
/*************************************************************************/
SCR_tde_Anl_ReturnValue IPT_fn_eActivateDeviceScriptCallBack(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
if (M_IsEntry)
{
if (M_ActionIs(IPT_C_ActivatePadAction))
{
unsigned long ulPadNumber = atoi(_ap_szParams[0]);
if (IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_Pad00DeviceEvent+ulPadNumber]==IPT_C_ActivateJoystickDevice)
M_IPTFatalError(E_uwIPT_AlreadyActivateAsAJoystick);
if (IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_Pad00DeviceEvent+ulPadNumber] == IPT_C_ValideDevice)
{
fn_wJoyAddActiveJoystick((short)ulPadNumber);
IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_Pad00DeviceEvent+ulPadNumber] = IPT_C_ActivatePadDevice;
IPT_g_hInputStructure.ucOnePadActivate = IPT_C_ActivateDevice;
}
}
else if (M_ActionIs(IPT_C_ActivateJoystickAction))
{
unsigned long ulPadNumber = atoi(_ap_szParams[0]);
if (IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_Pad00DeviceEvent+ulPadNumber]==IPT_C_ActivatePadDevice)
M_IPTFatalError(E_uwIPT_AlreadyActivateAsAPad);
if (IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_Pad00DeviceEvent+ulPadNumber] == IPT_C_ValideDevice)
{
fn_wJoyAddActiveJoystick((short)ulPadNumber);
IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_Pad00DeviceEvent+ulPadNumber] = IPT_C_ActivateJoystickDevice;
IPT_g_hInputStructure.ucOnePadActivate = IPT_C_ActivateDevice;
}
}
else if (M_ActionIs(IPT_C_ActivateKeyboardAction))
{
if (IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_KeyboardDeviceEvent] == IPT_C_ValideDevice)
IPT_g_hInputStructure.p_ucValideAndActiveDevice[IPT_E_KeyboardDeviceEvent] = IPT_C_ActivateDevice;
}
}
return(eReturnValue);
}
/*************************************************************************/
SCR_tde_Anl_ReturnValue IPT_fn_eKeyDefineScriptCallBack(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
unsigned long ulKeyNumber;
unsigned long ulKeyMaxNumber;
if (M_IsTitle)
{
ulKeyMaxNumber = atoi(_ap_szParams[0]);
Mmg_M_SetModeAlloc4Ch(IPT,E_ucIPTMemoryBlock,C_ucMmgDefaultChannel);
MMG_fn_vAddMemoryInfo(MMG_C_lTypeIPT,MMG_C_lSubTypeIPT,0);
if ((IPT_gd_hKeyAndPadDefine = (struct IPT_tdstKeyAndPadDefine_ *)Mmg_fn_p_vAlloc4Ch((ulKeyMaxNumber+1)*sizeof(struct IPT_tdstKeyAndPadDefine_),C_ucMmgDefaultChannel))==NULL)
M_IPTFatalError(E_uwIPT_NoMemory);
ulKeyNumber = 0;
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,ulKeyNumber);
SCR_M_RdL0_SetSectionLong(C_ThisSection,1,ulKeyMaxNumber);
}
else if (M_IsEntry)
{
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,unsigned long,ulKeyNumber);
SCR_M_RdL0_GetSectionLong(C_ThisSection,1,unsigned long,ulKeyMaxNumber);
if (M_ActionIs(IPT_C_KeyDefineAction))
{
if (ulKeyNumber>ulKeyMaxNumber)
M_IPTFatalError(E_uwIPT_TooMuchKeyDefine);
if (IPT_fn_p_szGetKeyPointerOfName(_ap_szParams[0],IPT_g_hScriptKeyValue)==NULL)
{
if (IPT_fn_p_szGetKeyPointerOfName(_ap_szParams[0],IPT_g_hScriptPadValue)==NULL)
{
M_IPTFatalError(E_uwIPT_UnknownKeyValue);
}
else
{
IPT_gd_hKeyAndPadDefine[ulKeyNumber].uwBasedKey = IPT_fn_swGetKeyValue(_ap_szParams[0],IPT_g_hScriptPadValue)|0x8000;
IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szFrenchKey =
IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szAmericanKey = IPT_fn_p_szGetKeyPointerOfName(_ap_szParams[0],IPT_g_hScriptPadValue);
}
}
else
{
IPT_gd_hKeyAndPadDefine[ulKeyNumber].uwBasedKey = IPT_fn_swGetKeyValue(_ap_szParams[0],IPT_g_hScriptKeyValue);
IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szFrenchKey =
IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szAmericanKey = IPT_fn_p_szGetKeyPointerOfName(_ap_szParams[0],IPT_g_hScriptKeyValue);
}
if (SCR_fn_uc_RdL0_GetNumberOfParameters(_ap_szParams)>1)
{
Mmg_M_SetModeAlloc4Ch(IPT,E_ucIPTMemoryBlock,C_ucMmgDefaultChannel);
MMG_fn_vAddMemoryInfo(MMG_C_lTypeIPT,MMG_C_lSubTypeIPT,0);
if ((IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szFrenchKey = (char *)Mmg_fn_p_vAlloc4Ch(strlen(_ap_szParams[1])+1,C_ucMmgDefaultChannel))==NULL)
M_IPTFatalError(E_uwIPT_NoMemory);
strcpy(IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szFrenchKey,_ap_szParams[1]);
if (SCR_fn_uc_RdL0_GetNumberOfParameters(_ap_szParams)>2)
{
Mmg_M_SetModeAlloc4Ch(IPT,E_ucIPTMemoryBlock,C_ucMmgDefaultChannel);
MMG_fn_vAddMemoryInfo(MMG_C_lTypeIPT,MMG_C_lSubTypeIPT,0);
if ((IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szAmericanKey = (char *)Mmg_fn_p_vAlloc4Ch(strlen(_ap_szParams[2])+1,C_ucMmgDefaultChannel))==NULL)
M_IPTFatalError(E_uwIPT_NoMemory);
strcpy(IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szAmericanKey,_ap_szParams[2]);
}
else
{
IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szAmericanKey = IPT_gd_hKeyAndPadDefine[ulKeyNumber].p_szFrenchKey;
}
}
ulKeyNumber++;
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,ulKeyNumber);
}
}
else if (M_IsEnd)
{
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,unsigned long,ulKeyNumber);
SCR_M_RdL0_GetSectionLong(C_ThisSection,1,unsigned long,ulKeyMaxNumber);
if (ulKeyNumber>ulKeyMaxNumber)
M_IPTFatalError(E_uwIPT_TooMuchKeyDefine);
IPT_gd_hKeyAndPadDefine[ulKeyNumber].uwBasedKey = 0xffff;
}
return(eReturnValue);
}
#endif /* U64 */
/*************************************************************************/
signed short IPT_fn_swGetKeyValue(char *_szKeyName,IPT_tdxHandleToScriptValue _hScriptValueTable)
{
long i;
signed short swReturn = -1;
for (i=0;_hScriptValueTable[i].swKeyValue!=-1&&stricmp(_szKeyName,_hScriptValueTable[i].zsKeyName);i++);
if (_hScriptValueTable[i].swKeyValue==-1)
{
M_IPTFatalError(E_uwIPT_UnknownKeyValue);
}
else
swReturn = _hScriptValueTable[i].swKeyValue;
return(swReturn);
}
/*************************************************************************/
char *IPT_fn_szGetKeyName(signed short swValue,IPT_tdxHandleToScriptValue _hScriptValueTable)
{
long i;
char *szReturn;
for (i=0;_hScriptValueTable[i].swKeyValue!=-1&&_hScriptValueTable[i].swKeyValue!=swValue;i++);
if (_hScriptValueTable[i].swKeyValue==-1)
{
M_IPTFatalError(E_uwIPT_UnknownKeyValue);
}
else
szReturn = _hScriptValueTable[i].zsKeyName;
return(szReturn);
}
/*************************************************************************/
char *IPT_fn_p_szGetKeyPointerOfName(char *_szKeyName,IPT_tdxHandleToScriptValue _hScriptValueTable)
{
long i;
char *szReturn = NULL;
for (i=0;_hScriptValueTable[i].swKeyValue!=-1&&stricmp(_szKeyName,_hScriptValueTable[i].zsKeyName);i++);
if (_hScriptValueTable[i].swKeyValue!=-1)
szReturn = _hScriptValueTable[i].zsKeyName;
return(szReturn);
}
/*************************************************************************/
signed short IPT_fn_swConvertAZERTYtoQWERTY(signed short swAZERTY)
{
long i;
for (i=0;IPT_g_ConvertAZERTYtoQWERTY[i].swAZERTYKeyValue!=-1&&IPT_g_ConvertAZERTYtoQWERTY[i].swAZERTYKeyValue!=swAZERTY;i++);
if (IPT_g_ConvertAZERTYtoQWERTY[i].swAZERTYKeyValue==-1)
return(swAZERTY);
else
return(IPT_g_ConvertAZERTYtoQWERTY[i].swQWERTYKeyValue);
}
/*************************************************************************/