]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/src/Import/src/FMI/fmi_import_context.c
Switch to full JavaSE-11+ compatibility
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / src / Import / src / FMI / fmi_import_context.c
1 /*
2     Copyright (C) 2012 Modelon AB
3
4     This program is free software: you can redistribute it and/or modify
5     it under the terms of the BSD style license.
6
7      This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10     FMILIB_License.txt file for more details.
11
12     You should have received a copy of the FMILIB_License.txt file
13     along with this program. If not, contact Modelon AB <http://www.modelon.com>.
14 */
15
16 #include <stdio.h>
17 #include <stdarg.h>
18
19 #include <JM/jm_named_ptr.h>
20 #include <FMI/fmi_import_context.h>
21 #include <FMI/fmi_zip_unzip.h>
22 #include <FMI/fmi_import_util.h>
23
24 #include "fmi_import_context_impl.h"
25
26 #define MODULE "FMILIB"
27
28 fmi_import_context_t* fmi_import_allocate_context( jm_callbacks* callbacks) {\r
29         jm_log_verbose(callbacks, MODULE, "Allocating FMIL context");\r
30         return fmi_xml_allocate_context(callbacks);\r
31 }\r
32 \r
33 void fmi_import_free_context( fmi_import_context_t* c) {\r
34         fmi_xml_free_context(c);\r
35 }
36
37 void fmi_import_set_configuration( fmi_import_context_t* c, int conf) {
38     fmi_xml_set_configuration(c, conf);
39 }
40
41 fmi_version_enu_t fmi_import_get_fmi_version( fmi_import_context_t* c, const char* fileName, const char* dirName) {
42         fmi_version_enu_t ret = fmi_version_unknown_enu;
43         jm_status_enu_t status;
44         char* mdpath;
45         jm_log_verbose(c->callbacks, MODULE, "Detecting FMI standard version");
46         if(!fileName || !*fileName) {
47                 jm_log_fatal(c->callbacks, MODULE, "No FMU filename specified");
48                 return fmi_version_unknown_enu;
49         }
50         if(!dirName || !*dirName) {
51                 jm_log_fatal(c->callbacks, MODULE, "No temporary directory name specified");
52                 return fmi_version_unknown_enu;
53         }
54         status = fmi_zip_unzip(fileName, dirName, c->callbacks);
55         if(status == jm_status_error) return fmi_version_unknown_enu;
56         mdpath = fmi_import_get_model_description_path(dirName, c->callbacks);
57         ret = fmi_xml_get_fmi_version(c, mdpath);
58         jm_log_info(c->callbacks, MODULE, "XML specifies FMI standard version %s", fmi_version_to_string(ret));
59         c->callbacks->free(mdpath);
60         return ret;
61 }