summaryrefslogtreecommitdiff
path: root/kel_cmds/c++/kel_cmds.cpp
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2026-02-11 16:53:12 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2026-02-11 16:53:12 +0100
commit90830c13b6a143f1c370a2007100d2fdb069a090 (patch)
treeac54c209978a58efdd455a00cb41ee8dad1db4a4 /kel_cmds/c++/kel_cmds.cpp
parent23d213d4263a746e3da9c360a1fc663020d324e9 (diff)
downloadapps-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.cpp67
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();
}