]> AND Private Git Repository - loba.git/blob - options.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Wip++...
[loba.git] / options.cpp
1 #include <cstring>
2 #include <iostream>
3 #include <unistd.h>
4 #include <xbt/log.h>
5 #include "options.h"
6 #include "misc.h"
7
8 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simu);
9
10 namespace opt {
11
12     const char* program_name;
13
14     const char* platform_file;
15     const char* application_file;
16
17     int help_requested = 0;
18     bool version_requested = false;
19
20     bool bookkeeping = false;
21
22     cost_func comp_cost("1e9, 0"); // fixme: find better defaults
23
24 } // namespace opt
25
26 namespace {
27
28     const char* on_off(bool b)
29     {
30         return b ? "on" : "off";
31     }
32
33 }
34
35 int opt::parse_args(int* argc, char* argv[])
36 {
37     char* tmp = strrchr(argv[0], '/');
38     opt::program_name = (tmp ? tmp + 1 : argv[0]);
39
40     int c;
41     opterr = 0;
42     while ((c = getopt(*argc, argv, "bc:hV")) != -1) {
43         switch (c) {
44         case 'b':
45             opt::bookkeeping = true;
46             break;
47         case 'h':
48             opt::help_requested++;
49             break;
50         case 'c':
51             opt::comp_cost = cost_func(optarg);
52             break;
53         case 'V':
54             opt::version_requested = true;
55             break;
56         case '?':
57             WARN1("invalid option -- '%c'", optopt);
58             break;
59         }
60     }
61     if (opt::version_requested || opt::help_requested)
62         return 1;
63
64     switch (*argc - optind) {
65     case 0:
66         ERROR0("missing parameter -- <plaform_file>");
67     case 1:
68         ERROR0("missing parameter -- <application_file>");
69         return 0;
70
71     default:
72         opt::platform_file = argv[optind];
73         opt::application_file = argv[optind + 1];
74         for (int i = optind + 2 ; i < *argc ; ++i)
75             WARN1("unused parameter -- \"%s\"", argv[i]);
76         break;
77     }
78
79     return 1;
80 }
81
82 void opt::print()
83 {
84     INFO0(",----[ Simulation parameters ]");
85     INFO1("| platform_file.......: \"%s\"", opt::platform_file);
86     INFO1("| application_file....: \"%s\"", opt::application_file);
87     INFO1("| bookkeeping.........: %s",     on_off(opt::bookkeeping));
88     INFO1("| comp. cost factors..: [%s]",   opt::comp_cost.to_string().c_str());
89     INFO0("`----");
90 }
91
92 #include <iomanip>
93 void opt::usage()
94 {
95     const int indent1 = 6;
96     const int indent2 = 12;
97
98 #define oo(opt, arg) std::setw(indent1) << (opt) << " "               \
99     << std::setw(indent2) << std::left << (arg) << std::right
100 #define o(opt) oo(opt, "")
101
102     std::clog << "Usage: " << opt::program_name
103               << " [options] <platform_file> <application_file>\n";
104
105     std::clog << o("-h")
106               << "print help and exit (use -hh or -hhh for extended help)\n";
107     if (opt::help_requested < 1)
108         return;
109     std::clog << o("-V") << "print version and exit\n";
110     std::clog << o("-b") << "activate bookkeeping\n";
111     std::clog << oo("-c", "[fn,...]f0")
112               << "polynomial factors for computation cost ("
113               << opt::comp_cost.to_string() << ")\n";
114
115 #undef o
116 #undef oo
117 }
118
119 // Local variables:
120 // mode: c++
121 // End: