From: <aa...@us...> - 2007-08-01 10:23:20
|
Revision: 292 http://gull.svn.sourceforge.net/gull/?rev=292&view=rev Author: aajjan Date: 2007-08-01 03:23:22 -0700 (Wed, 01 Aug 2007) Log Message: ----------- NEW : Extend IncVarAction action Modified Paths: -------------- seagull/trunk/src/command-actions/C_IncVarAction.cpp seagull/trunk/src/generator-scenario/C_ScenarioControl.cpp Modified: seagull/trunk/src/command-actions/C_IncVarAction.cpp =================================================================== --- seagull/trunk/src/command-actions/C_IncVarAction.cpp 2007-07-25 12:15:27 UTC (rev 291) +++ seagull/trunk/src/command-actions/C_IncVarAction.cpp 2007-08-01 10:23:22 UTC (rev 292) @@ -21,6 +21,7 @@ #include "GeneratorTrace.hpp" #include "GeneratorError.h" + C_IncVarAction::C_IncVarAction(T_CmdAction P_cmdAction, T_pControllers P_controllers) : C_CommandAction (P_cmdAction, P_controllers) { @@ -36,25 +37,83 @@ C_MessageFrame *P_ref) { T_exeCode L_exeCode = E_EXE_NOERROR ; + static char L_tmp_string [250] ; + T_pValueData L_mem = NULL ; + size_t L_current_size ; + unsigned long L_result = 0 ; + char *L_value = NULL ; + int L_value_size = 0 ; + char *L_endstr = NULL ; - T_pValueData L_mem ; + L_mem = P_callCtxt->get_memory(m_mem_id); - + switch (L_mem->m_type) { - case E_TYPE_NUMBER: - L_mem->m_value.m_val_number = L_mem->m_value.m_val_number ++ ; + L_mem->m_value.m_val_number += m_position ; break ; + case E_TYPE_SIGNED: + L_mem->m_value.m_val_signed += (T_Integer32)m_position ; + break ; + + case E_TYPE_STRING: + memset(L_tmp_string, 0, 250) ; + L_tmp_string[0] = '\0' ; + + L_value_size = L_mem->m_value.m_val_binary.m_size ; + ALLOC_TABLE(L_value, + char*, + sizeof(char), + L_value_size + 1 ); + + memcpy(L_value, L_mem->m_value.m_val_binary.m_value , + L_mem->m_value.m_val_binary.m_size); + L_value[L_value_size] = 0 ; + + L_result = strtoul_f (L_value, &L_endstr,10) ; + if (L_endstr[0] != '\0') { + L_result = strtoul_f (L_value, &L_endstr,16) ; + if (L_endstr[0] != '\0') { + GEN_ERROR(E_GEN_FATAL_ERROR, "typedef size value [" + << L_value << "] bad format"); + L_exeCode = E_EXE_ERROR ; + break ; + } + } + + L_result += m_position ; + sprintf(L_tmp_string, "%lu", L_result) ; + L_current_size = strlen(L_tmp_string); + FREE_TABLE(L_mem->m_value.m_val_binary.m_value); + L_mem->m_value.m_val_binary.m_size = L_current_size ; + ALLOC_TABLE(L_mem->m_value.m_val_binary.m_value, + unsigned char*, + sizeof(unsigned char), + L_mem->m_value.m_val_binary.m_size); + + memcpy(L_mem->m_value.m_val_binary.m_value, + (unsigned char*) L_tmp_string, + L_mem->m_value.m_val_binary.m_size); + FREE_TABLE(L_value); + break; + + case E_TYPE_NUMBER_64: + L_mem->m_value.m_val_number_64 += (T_UnsignedInteger64) m_position ; + break ; + + case E_TYPE_SIGNED_64: + L_mem->m_value.m_val_signed_64 += (T_Integer64) m_position ; + break ; + + default: GEN_FATAL(E_GEN_FATAL_ERROR, "Unsupported type [" << L_mem->m_type << "] for increment function"); break ; - } - return (L_exeCode); } Modified: seagull/trunk/src/generator-scenario/C_ScenarioControl.cpp =================================================================== --- seagull/trunk/src/generator-scenario/C_ScenarioControl.cpp 2007-07-25 12:15:27 UTC (rev 291) +++ seagull/trunk/src/generator-scenario/C_ScenarioControl.cpp 2007-08-01 10:23:22 UTC (rev 292) @@ -1925,6 +1925,20 @@ L_actionData->m_mem_id = add_memory (L_actionArg); + L_actionData->m_position = 1 ; + L_actionArg = L_action -> find_value((char*) "value"); + if (L_actionArg != NULL) { + L_position = (int)strtoul_f (L_actionArg, &L_end_str, 10); + if (L_end_str[0] != '\0') { + GEN_ERROR(E_GEN_FATAL_ERROR, "bad format, [" + << L_actionArg << "] not a number"); + L_ret = -1 ; + break; + } + L_actionData->m_position = L_position ; + } + + break ; case E_ACTION_SCEN_CHECK_VALUE: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |