diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/slang-replay/main.cpp | 104 |
1 files changed, 101 insertions, 3 deletions
diff --git a/tools/slang-replay/main.cpp b/tools/slang-replay/main.cpp index 7f042f91b..adce34c56 100644 --- a/tools/slang-replay/main.cpp +++ b/tools/slang-replay/main.cpp @@ -1,10 +1,108 @@ #include <stdio.h> +#include <filesystem> + #include <replay/recordFile-processor.h> -#include <replay/decoder-consumer.h> +#include <replay/json-consumer.h> +#include <replay/replay-consumer.h> +#include <replay/slang-decoder.h> + +struct Options +{ + bool convertToJson {false}; + Slang::String recordFileName; +}; + +void printUsage() +{ + printf("Usage: slang-replay [options] <record-file>\n"); + printf("Options:\n"); + printf(" --convert-json, -cj: Convert the record file to a JSON file in the same directory with record file.\n\ + When this option is set, it won't replay the record file.\n"); +} + +Options parseOption(int argc, char *argv[]) +{ + Options option; + char const* arg {}; + if (argc <= 1) + { + printUsage(); + exit(1); + } + + int argIndex = 1; + while(argIndex < argc) + { + arg = argv[argIndex]; + + // For anything not starting with a '-', it is a file name + if (arg[0] != '-') + { + option.recordFileName = arg; + argIndex++; + } + else if ( (strcmp("--convert-json", arg) == 0) || + (strcmp("-cj", arg) == 0) ) + { + option.convertToJson = true; + argIndex++; + } + else if ( (strcmp("--help", arg) == 0) || + (strcmp("-h", arg) == 0) ) + { + printUsage(); + exit(0); + } + else + { + // Unknown option + printf("Unknown option: %s\n", arg); + printUsage(); + exit(1); + } + } + + if (option.recordFileName.getLength() == 0) + { + printUsage(); + exit(1); + } + + return option; +} int main(int argc, char *argv[]) { - // TODO: This is just a place holder binary - SlangRecord::RecordFileProcessor recordFileProcessor("input.capture"); + Options options = parseOption(argc, argv); + + SlangRecord::RecordFileProcessor recordFileProcessor(options.recordFileName); + + + std::filesystem::path jsonPath = options.recordFileName.begin(); + jsonPath.replace_extension(".json"); + + SlangRecord::JsonConsumer jsonConsumer(jsonPath.string()); + SlangRecord::ReplayConsumer replayConsumer; + + SlangRecord::SlangDecoder decoder; + + if (options.convertToJson) + { + decoder.addConsumer(&jsonConsumer); + } + else + { + decoder.addConsumer(&replayConsumer); + } + + recordFileProcessor.addDecoder(&decoder); + + while(true) + { + if(!recordFileProcessor.processNextBlock()) + { + break; + } + } return 0; } |
