diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-02-11 16:53:12 +0100 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-02-11 16:53:12 +0100 |
| commit | 90830c13b6a143f1c370a2007100d2fdb069a090 (patch) | |
| tree | ac54c209978a58efdd455a00cb41ee8dad1db4a4 /kel_cmds/c++/kel_cmds.cpp | |
| parent | 23d213d4263a746e3da9c360a1fc663020d324e9 (diff) | |
| download | apps-dev_tools-90830c13b6a143f1c370a2007100d2fdb069a090.tar.gz | |
Dangling changes. no clue when this happened
Diffstat (limited to 'kel_cmds/c++/kel_cmds.cpp')
| -rw-r--r-- | kel_cmds/c++/kel_cmds.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/kel_cmds/c++/kel_cmds.cpp b/kel_cmds/c++/kel_cmds.cpp index b7ea512..1ced1a9 100644 --- a/kel_cmds/c++/kel_cmds.cpp +++ b/kel_cmds/c++/kel_cmds.cpp @@ -2,8 +2,75 @@ #include <iostream> +#include "common.hpp" + namespace kel { +namespace sch { +using namespace saw::schema; + +using CmdArgs = Args< + Struct< + >, + Tuple<> +>; +} + + saw::error_or<void> kel_main(int argc, char** argv){ + saw::data<sch::CmdArgs> args_d; + { + saw::data<sch::CmdArgs, saw::encode::Args> args_data{argc, argv}; + saw::codec<sch::CmdArgs, saw::encode::Args> args_codec; + + auto eov = args_codec.decode(args_data, args_d); + if(eov.is_error()){ + return eov; + } + } + saw::data<sch::CommandConfig> cmd_data; + { + // Parse from file + } + + bool running = true; + while(running){ + std::array<char, 256ul> buffer; + std::cin.getline(&buffer[0],buffer.size()); + if(std::cin.bad()){ + return saw::make_error<saw::err::critical>("unrecoverable stdin error"); + } + if(std::cin.fail()){ + return saw::make_error<saw::err::critical>("stdin format error or line too long"); + } + if(std::cin.eof()){ + return saw::make_error<saw::err::critical>("stdin EOF"); + } + + const std::string_view cmd{buffer.data()}; + + { + auto eov = print_cmd_options(); + if(eov.is_error()){ + return eov; + } + } + + if(cmd == "q" or cmd == "quit"){ + running = false; + std::cout<<"Quitting..."; + }else { + uint16_t cmd_id{}; + auto res = std::from_chars(cmd.data(), cmd.data() + cmd.size(), cmd_id); + if(res.ec == std::errc{} and res.ptr == (cmd.data() + cmd.size())){ + auto eov = execute_command_group(cmd_data, cmd_id); + if(eov.is_error()){ + return eov; + } + }else{ + std::cout<<"Failed to parse input as uint16\nRepeat input..."<<std::endl; + } + } + } return saw::make_void(); } |
