| 60 | : argc(argc_), argv(argv_) {} |
| 61 | |
| 62 | void run() |
| 63 | { |
| 64 | // Remove program name |
| 65 | argv = &argv[1]; |
| 66 | argc--; |
| 67 | |
| 68 | if (argc == 0) printf("%s\nTry running 'br -help'\n", br_about()); |
| 69 | |
| 70 | bool daemon = false; |
| 71 | const char *daemon_pipe = NULL; |
| 72 | bool isInt = false; |
| 73 | while (daemon || (argc > 0)) { |
| 74 | const char *fun; |
| 75 | int parc; |
| 76 | const char **parv; |
| 77 | if (argc == 0) |
| 78 | br_read_pipe(daemon_pipe, &argc, &argv); |
| 79 | |
| 80 | fun = argv[0]; |
| 81 | if (fun[0] == '-') fun++; |
| 82 | parc = 0; |
| 83 | QString(argv[parc+1]).toInt(&isInt); |
| 84 | while ((parc+1 < argc) && ((argv[parc+1][0] != '-') || isInt)) { |
| 85 | parc++; |
| 86 | QString(argv[parc+1]).toInt(&isInt); |
| 87 | } |
| 88 | parv = (const char **)&argv[1]; |
| 89 | argc = argc - (parc+1); |
| 90 | argv = &argv[parc+1]; |
| 91 | |
| 92 | // Core Tasks |
| 93 | if (!strcmp(fun, "train")) { |
| 94 | check(parc >= 1, "Insufficient parameter count for 'train'."); |
| 95 | br_train_n(parc == 1 ? 1 : parc-1, parv, parc == 1 ? "" : parv[parc-1]); |
| 96 | } else if (!strcmp(fun, "enroll")) { |
| 97 | check(parc >= 1, "Insufficient parameter count for 'enroll'."); |
| 98 | if (parc == 1) br_enroll(parv[0]); |
| 99 | else br_enroll_n(parc-1, parv, parv[parc-1]); |
| 100 | } else if (!strcmp(fun, "compare")) { |
| 101 | check((parc >= 2) && (parc <= 3), "Incorrect parameter count for 'compare'."); |
| 102 | br_compare(parv[0], parv[1], parc == 3 ? parv[2] : ""); |
| 103 | } else if (!strcmp(fun, "eval")) { |
| 104 | check((parc >= 1) && (parc <= 4), "Incorrect parameter count for 'eval'."); |
| 105 | if (parc == 1) { |
| 106 | br_eval(parv[0], "", "", 0); |
| 107 | } else if (parc == 2) { |
| 108 | if (br::File(parv[1]).suffix() == "csv") { |
| 109 | br_eval(parv[0], "", parv[1], 0); |
| 110 | } else if (br::File(parv[1]).suffix() == "mask") { |
| 111 | br_eval(parv[0], parv[1], "", 0); |
| 112 | } else { |
| 113 | br_eval(parv[0], "", "", atoi(parv[1])); |
| 114 | } |
| 115 | } else if (parc == 3) { |
| 116 | if (br::File(parv[2]).suffix() == "csv") { |
| 117 | br_eval(parv[0], parv[1], parv[2], 0); |
| 118 | } else if ( br::File(parv[1]).suffix() == "csv") { |
| 119 | br_eval(parv[0], "", parv[1], atoi(parv[2])); |
no test coverage detected