+}
+
+enum
+{
+ OPT_HELP_FORMATS = CHAR_MAX + 1
+};
+
+static struct option long_options[] = {
+ { "trajectory-file", 1, 0, 't' },
+ { "graph-file", 1, 0, 'g' },
+ { "help", no_argument, 0, 'h' },
+ { "verbose", no_argument, 0, 'v' },
+ { "help-formats", no_argument, 0, OPT_HELP_FORMATS },
+ { 0, 0, 0, 0 }
+};
+
+int main(int argc, char **argv) {
+ int c;
+ int error = 0, show_help = 0;
+
+ strncpy(global.trajectory_filename, "", FILENAME_SIZE);
+ strncpy(global.graph_filename, "", FILENAME_SIZE);
+ global.verbose = 0;
+
+ while ((c = getopt_long(argc, argv, "t:g:hv", long_options, NULL)) != -1) {
+
+ switch(c) {
+
+ case 't':
+ strncpy(global.trajectory_filename, optarg, FILENAME_SIZE);
+ break;
+
+ case 'g':
+ strncpy(global.graph_filename, optarg, FILENAME_SIZE);
+ break;
+
+ case 'h':
+ show_help = 1;
+ break;
+
+ case OPT_HELP_FORMATS:
+ print_help_formats();
+ exit(EXIT_SUCCESS);
+ break;
+
+ case 'v':
+ global.verbose = 1;
+ break;
+
+ default:
+ error = 1;
+ break;
+ }
+ }
+
+ if(error) {
+ usage(&cerr);
+ exit(EXIT_FAILURE);
+ }
+
+ if(show_help) {
+ usage(&cout);
+ exit(EXIT_SUCCESS);
+ }
+
+ if(optind < argc) {
+ ifstream *file_in_tracker = new ifstream(argv[optind]);
+ if(file_in_tracker->good()) {
+ do_tracking(file_in_tracker);
+ } else {
+ cerr << "Can not open " << argv[optind] << endl;
+ exit(EXIT_FAILURE);
+ }
+ delete file_in_tracker;
+ } else {
+ do_tracking(&cin);
+ }