-void strlower(char *str)
-{
- while (*str) {
- *str = tolower((int) *str);
- str++;
- }
-}
-
-enum {
- OPT_NONE = 0,
- OPT_HELP,
- OPT_LIST,
- OPT_VERBOSE,
- OPT_DEBUG,
- OPT_NAMES,
- OPT_FIELDS,
- OPT_NO_DELTA,
- OPT_CLOCK_OFFSET,
- OPT_CLOCK_CYCLES,
- OPT_CLOCK_SECONDS,
- OPT_CLOCK_DATE,
- OPT_CLOCK_GMT,
- OPT_CLOCK_FORCE_CORRELATE,
-};
-
-static struct poptOption long_options[] = {
- /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
- { "input-format", 'i', POPT_ARG_STRING, &opt_input_format_arg, OPT_NONE, NULL, NULL },
- { "output-format", 'o', POPT_ARG_STRING, &opt_output_format_arg, OPT_NONE, NULL, NULL },
- { "help", 'h', POPT_ARG_NONE, NULL, OPT_HELP, NULL, NULL },
- { "list", 'l', POPT_ARG_NONE, NULL, OPT_LIST, NULL, NULL },
- { "verbose", 'v', POPT_ARG_NONE, NULL, OPT_VERBOSE, NULL, NULL },
- { "debug", 'd', POPT_ARG_NONE, NULL, OPT_DEBUG, NULL, NULL },
- { "names", 'n', POPT_ARG_STRING, NULL, OPT_NAMES, NULL, NULL },
- { "fields", 'f', POPT_ARG_STRING, NULL, OPT_FIELDS, NULL, NULL },
- { "no-delta", 0, POPT_ARG_NONE, NULL, OPT_NO_DELTA, NULL, NULL },
- { "clock-offset", 0, POPT_ARG_STRING, NULL, OPT_CLOCK_OFFSET, NULL, NULL },
- { "clock-cycles", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_CYCLES, NULL, NULL },
- { "clock-seconds", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_SECONDS, NULL, NULL },
- { "clock-date", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_DATE, NULL, NULL },
- { "clock-gmt", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_GMT, NULL, NULL },
- { "clock-force-correlate", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_FORCE_CORRELATE, NULL, NULL },
- { NULL, 0, 0, NULL, 0, NULL, NULL },
-};
-
-static void list_formats(FILE *fp)
-{
- fprintf(fp, "\n");
- bt_fprintf_format_list(fp);
-}
-
-static void usage(FILE *fp)
-{
- fprintf(fp, "BabelTrace Trace Viewer and Converter %s\n\n", VERSION);
- fprintf(fp, "usage : babeltrace [OPTIONS] INPUT <OUTPUT>\n");
- fprintf(fp, "\n");
- fprintf(fp, " INPUT Input trace path\n");
- fprintf(fp, " OUTPUT Output trace path (default: stdout)\n");
- fprintf(fp, "\n");
- fprintf(fp, " -i, --input-format FORMAT Input trace format (default: ctf)\n");
- fprintf(fp, " -o, --output-format FORMAT Output trace format (default: text)\n");
- fprintf(fp, "\n");
- fprintf(fp, " -h, --help This help message\n");
- fprintf(fp, " -l, --list List available formats\n");
- fprintf(fp, " -v, --verbose Verbose mode\n");
- fprintf(fp, " (or set BABELTRACE_VERBOSE environment variable)\n");
- fprintf(fp, " -d, --debug Debug mode\n");
- fprintf(fp, " (or set BABELTRACE_DEBUG environment variable)\n");
- fprintf(fp, " --no-delta Do not print time delta between consecutive events\n");
- fprintf(fp, " -n, --names name1<,name2,...> Print field names:\n");
- fprintf(fp, " (payload OR args OR arg)\n");
- fprintf(fp, " none, all, scope, header, (context OR ctx)\n");
- fprintf(fp, " (default: payload,context)\n");
- fprintf(fp, " -f, --fields name1<,name2,...> Print additional fields:\n");
- fprintf(fp, " all, trace, trace:domain, trace:procname,\n");
- fprintf(fp, " trace:vpid, loglevel.\n");
- fprintf(fp, " --clock-cycles Timestamp in cycles\n");
- fprintf(fp, " --clock-offset seconds Clock offset in seconds\n");
- fprintf(fp, " --clock-seconds Print the timestamps as [sec.ns]\n");
- fprintf(fp, " (default is: [hh:mm:ss.ns])\n");
- fprintf(fp, " --clock-date Print clock date\n");
- fprintf(fp, " --clock-gmt Print clock in GMT time zone (default: local time zone)\n");
- fprintf(fp, " --clock-force-correlate Assume that clocks are inherently correlated\n");
- fprintf(fp, " across traces.\n");
- list_formats(fp);
- fprintf(fp, "\n");
-}
-
-static int get_names_args(poptContext *pc)
-{
- char *str, *strlist, *strctx;
-
- opt_payload_field_names = 0;
- opt_context_field_names = 0;
- strlist = (char *) poptGetOptArg(*pc);
- if (!strlist) {
- return -EINVAL;
- }
- str = strtok_r(strlist, ",", &strctx);
- do {
- if (!strcmp(str, "all"))
- opt_all_field_names = 1;
- else if (!strcmp(str, "scope"))
- opt_scope_field_names = 1;
- else if (!strcmp(str, "context") || !strcmp(str, "ctx"))
- opt_context_field_names = 1;
- else if (!strcmp(str, "header"))
- opt_header_field_names = 1;
- else if (!strcmp(str, "payload") || !strcmp(str, "args") || !strcmp(str, "arg"))
- opt_payload_field_names = 1;
- else if (!strcmp(str, "none")) {
- opt_all_field_names = 0;
- opt_scope_field_names = 0;
- opt_context_field_names = 0;
- opt_header_field_names = 0;
- opt_payload_field_names = 0;
- } else {
- fprintf(stderr, "[error] unknown field name type %s\n", str);
- return -EINVAL;