comparison OrthancStone/Resources/Graveyard/Deprecated/Applications/Wasm/StartupParametersBuilder.cpp @ 1512:244ad1e4e76a

reorganization of folders
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 07 Jul 2020 16:21:02 +0200
parents Resources/Graveyard/Deprecated/Applications/Wasm/StartupParametersBuilder.cpp@553084468225
children
comparison
equal deleted inserted replaced
1511:9dfeee74c1e6 1512:244ad1e4e76a
1 /**
2 * Stone of Orthanc
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
6 *
7 * This program is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU Affero General Public License
9 * as published by the Free Software Foundation, either version 3 of
10 * the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 **/
20
21
22 #include "StartupParametersBuilder.h"
23 #include <iostream>
24 #include <cstdio>
25 #include "emscripten/html5.h"
26
27 namespace OrthancStone
28 {
29 void StartupParametersBuilder::Clear()
30 {
31 startupParameters_.clear();
32 }
33
34 void StartupParametersBuilder::SetStartupParameter(
35 const char* name,
36 const char* value)
37 {
38 startupParameters_.push_back(std::make_tuple(name, value));
39 }
40
41 void StartupParametersBuilder::GetStartupParameters(
42 boost::program_options::variables_map& parameters,
43 const boost::program_options::options_description& options)
44 {
45 std::vector<std::string> argvStrings(startupParameters_.size() + 1);
46 // argv mirrors pointers to the internal argvStrings buffers.
47 // ******************************************************
48 // THIS IS HIGHLY DANGEROUS SO BEWARE!!!!!!!!!!!!!!
49 // ******************************************************
50 std::vector<const char*> argv(startupParameters_.size() + 1);
51
52 int argCounter = 0;
53 argvStrings[argCounter] = "dummy.exe";
54 argv[argCounter] = argvStrings[argCounter].c_str();
55
56 argCounter++;
57
58 std::string cmdLine = "";
59 for ( StartupParameters::const_iterator it = startupParameters_.begin();
60 it != startupParameters_.end();
61 it++)
62 {
63 std::stringstream argSs;
64
65 argSs << "--" << std::get<0>(*it);
66 if(std::get<1>(*it).length() > 0)
67 argSs << "=" << std::get<1>(*it);
68
69 argvStrings[argCounter] = argSs.str();
70 cmdLine = cmdLine + " " + argvStrings[argCounter];
71 std::cout << cmdLine << std::endl;
72 argv[argCounter] = argvStrings[argCounter].c_str();
73 argCounter++;
74 }
75
76
77 std::cout << "simulated cmdLine = \"" << cmdLine.c_str() << "\"\n";
78
79 try
80 {
81 boost::program_options::store(
82 boost::program_options::command_line_parser(argCounter, argv.data()).
83 options(options).allow_unregistered().run(), parameters);
84 boost::program_options::notify(parameters);
85 }
86 catch (boost::program_options::error& e)
87 {
88 std::cerr << "Error while parsing the command-line arguments: " <<
89 e.what() << std::endl;
90 }
91 }
92 }