/*========================================================================= * 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;ip_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&&ihKeyWordList); 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); } /*************************************************************************/