/* Copyright (C) 2012 Modelon AB This program is free software: you can redistribute it and/or modify it under the terms of the BSD style license. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the FMILIB_License.txt file for more details. You should have received a copy of the FMILIB_License.txt file along with this program. If not, contact Modelon AB . */ #include #include "fmi2_xml_parser.h" #include "fmi2_xml_model_description_impl.h" static const char* module = "FMI2XML"; int fmi2_xml_handle_VendorAnnotations(fmi2_xml_parser_context_t *context, const char* data) { if(!data) { jm_log_verbose(context->callbacks, module, "Parsing XML element VendorAnnotations"); } else { /* might give out a warning if(data[0] != 0) */ } return 0; } int fmi2_xml_handle_Annotations(fmi2_xml_parser_context_t *context, const char* data) { if(!data) { jm_log_verbose(context->callbacks, module, "Parsing XML element Annotations"); } else { /* might give out a warning if(data[0] != 0) */ } return 0; } int fmi2_xml_handle_VariableTool(fmi2_xml_parser_context_t *context, const char* data) { if(!data) { size_t len; fmi2_xml_model_description_t* md = context->modelDescription; jm_vector(char)* bufName = fmi2_xml_reserve_parse_buffer(context,1,100); jm_string *pvendor; char* vendor = 0; if(!bufName) return -1; /* */ if( fmi2_xml_set_attr_string(context, fmi2_xml_elmID_Tool, fmi_attr_id_name, 1, bufName)) return -1; pvendor = jm_vector_push_back(jm_string)(&md->vendorList, vendor); len = jm_vector_get_size(char)(bufName); if(pvendor ) *pvendor = vendor = (char*)(context->callbacks->malloc(len + 1)); if(!pvendor || !vendor) { fmi2_xml_parse_fatal(context, "Could not allocate memory"); return -1; } memcpy(vendor, jm_vector_get_itemp(char)(bufName,0), len); vendor[len] = 0; context->anyToolName = vendor; context->anyParent = jm_vector_get_last(jm_named_ptr)(&md->variablesByName).ptr; context->useAnyHandleFlg = 1; } else { /* don't do anything. might give out a warning if(data[0] != 0) */ context->useAnyHandleFlg = 0; return 0; } return 0; } int fmi2_xml_handle_Tool(fmi2_xml_parser_context_t *context, const char* data) { if(!data) { size_t len; fmi2_xml_model_description_t* md = context->modelDescription; jm_vector(char)* bufName = fmi2_xml_reserve_parse_buffer(context,1,100); jm_string *pvendor; char* vendor = 0; if(!bufName) return -1; /* */ if( fmi2_xml_set_attr_string(context, fmi2_xml_elmID_Tool, fmi_attr_id_name, 1, bufName)) return -1; pvendor = jm_vector_push_back(jm_string)(&md->vendorList, vendor); len = jm_vector_get_size(char)(bufName); if(pvendor ) *pvendor = vendor = (char*)(context->callbacks->malloc(len + 1)); if(!pvendor || !vendor) { fmi2_xml_parse_fatal(context, "Could not allocate memory"); return -1; } memcpy(vendor, jm_vector_get_itemp(char)(bufName,0), len); vendor[len] = 0; context->anyToolName = vendor; context->anyParent = 0; context->useAnyHandleFlg = 1; } else { /* don't do anything. might give out a warning if(data[0] != 0) */ context->useAnyHandleFlg = 0; return 0; } return 0; }