annotate mlk-client/main.cpp @ 211:ac99f440ee44

client: add more javascript bindings
author David Demelier <markand@malikania.fr>
date Fri, 04 Jan 2019 17:00:04 +0100
parents 1599919b5de6
children e50f51702df4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * main.cpp -- main client file
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr>
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
19 #include <cerrno>
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
20 #include <cstring>
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
21 #include <fstream>
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <iostream>
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
23 #include <iterator>
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
211
ac99f440ee44 client: add more javascript bindings
David Demelier <markand@malikania.fr>
parents: 210
diff changeset
25 #include <malikania/client/js/context.hpp>
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
26
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
27 int main(int argc, char** argv)
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 {
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
29 -- argc;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
30 ++ argv;
191
bfc6b9c9081a Client: widget store position and size
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
31
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
32 if (argc == 0) {
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
33 std::cerr << "usage: mlk-client main.js" << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
34 return 1;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
35 }
191
bfc6b9c9081a Client: widget store position and size
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
36
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
37 try {
211
ac99f440ee44 client: add more javascript bindings
David Demelier <markand@malikania.fr>
parents: 210
diff changeset
38 mlk::client::js::context ctx;
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
39 std::ifstream input(argv[0]);
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
40 std::string script(
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
41 std::istreambuf_iterator<char>(input.rdbuf()),
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
42 std::istreambuf_iterator<char>()
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
43 );
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
45 if (!input)
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
46 throw std::runtime_error(std::strerror(errno));
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
47 if (duk_peval_string(ctx, script.c_str()))
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
48 throw mlk::js::duk::get_stack(ctx, -1);
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
49 } catch (const mlk::js::duk::stack_info& ex) {
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
50 std::cerr << argv[0] << ":" << ex.get_line_number() << ": " << ex.what() << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
51 std::cerr << ex.get_stack() << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
52 return 1;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
53 } catch (const std::exception& ex) {
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
54 std::cerr << "abort: " << ex.what() << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
55 return 1;
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
56 }
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
57
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
58 return 0;
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 }