#include "parse_tool.h" #include #include #include #include #include #include #include using namespace std::chrono_literals; struct parameters_t{ tool_env default_env{}; std::string exec; std::chrono::microseconds delay = 0us; }; parameters_t parse_cmd(const std::vector& args) { parameters_t ret; auto it = args.begin(); for(;it!=args.end();it++) { if((*it)[0]!='-') { ret.exec = *it; } else { switch((*it)[1]) { case 'c': ++it; if(it->size()>=2) ret.default_env = parse_toolenv(ret.default_env, it->begin(), --(it->end())); case 'd': ret.delay = std::chrono::microseconds{std::strtoll(it->c_str()+2, nullptr, 10)}; break; } } } return ret; } int MAIN(std::vector args) { bool used_tmp = false; std::string code; auto parameters = parse_cmd(args); if(parameters.exec.empty()) { used_tmp = true; std::stringstream command{}; auto v = std::getenv("EDITOR"); command<< (v!=NULL ? v : "vi"); std::array buff; parameters.exec = std::tmpnam(&buff.front()); command<<" "<> sstr.rdbuf()); if(used_tmp) { std::filesystem::remove(parameters.exec); } code = sstr.str(); tool_env glob = parameters.default_env; parse_tool p{code, glob}; while(p.has_queue()) { std::this_thread::sleep_for(parameters.delay); p.execute(); } return 0; } int main(int argc, char** argv) { std::vector args; for(int v=1;v