- } else if (!strcmp(arg, "--calls")) {
- calls = trace::CallSet(argv[i++]);
- } else if (!strcmp(arg, "--color=auto") ||
- !strcmp(arg, "--colour=auto")) {
- color = COLOR_OPTION_AUTO;
- } else if (!strcmp(arg, "--color") ||
- !strcmp(arg, "--colour") ||
- !strcmp(arg, "--color=always") ||
- !strcmp(arg, "--colour=always")) {
- color = COLOR_OPTION_ALWAYS;
- } else if (!strcmp(arg, "--color=never") ||
- !strcmp(arg, "--colour=never") ||
- !strcmp(arg, "--no-color") ||
- !strcmp(arg, "--no-colour")) {
- color = COLOR_OPTION_NEVER;
- } else if (!strcmp(arg, "--no-arg-names")) {
- dumpFlags |= trace::DUMP_FLAG_NO_ARG_NAMES;
- } else if (!strcmp(arg, "--thread-ids")) {
- dumpThreadIds = true;
- } else {
- std::cerr << "error: unknown option " << arg << "\n";
+ break;
+ case CALLS_OPT:
+ calls = trace::CallSet(optarg);
+ break;
+ case COLOR_OPT:
+ if (!optarg ||
+ !strcmp(optarg, "always")) {
+ color = COLOR_OPTION_ALWAYS;
+ } else if (!strcmp(optarg, "auto")) {
+ color = COLOR_OPTION_AUTO;
+ } else if (!strcmp(optarg, "never")) {
+ color = COLOR_OPTION_NEVER;
+ } else {
+ std::cerr << "error: unknown color argument " << optarg << "\n";
+ return 1;
+ }
+ break;
+ case THREAD_IDS_OPT:
+ dumpThreadIds = trace::boolOption(optarg);
+ break;
+ case CALL_NOS_OPT:
+ if (trace::boolOption(optarg)) {
+ dumpFlags &= ~trace::DUMP_FLAG_NO_CALL_NO;
+ } else {
+ dumpFlags |= trace::DUMP_FLAG_NO_CALL_NO;
+ }
+ break;
+ case ARG_NAMES_OPT:
+ if (trace::boolOption(optarg)) {
+ dumpFlags &= ~trace::DUMP_FLAG_NO_ARG_NAMES;
+ } else {
+ dumpFlags |= trace::DUMP_FLAG_NO_ARG_NAMES;
+ }
+ break;
+ default:
+ std::cerr << "error: unexpected option `" << opt << "`\n";