#include "anyproc.hpp" #include #include int main(int argc, char **argv) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " " << std::endl; return -1; } PyEval eval(argv[1]); const auto progress_indicator = [] (float progress) { if (progress < 2.5f || progress > 90.0f) { std::cout << "\r \r"; return true; } std::cout << unsigned(progress) << "% \r" << std::flush; return true; }; bool had_nl = false, had_begin = false, first_token; const auto result_printer = [&] (const char *token) { std::cout << token << std::flush; if (token[0] == '\n') had_nl = true; if ((had_nl || first_token) && token[0] == '>' && token[1] == '>') { had_begin = true; return false; } first_token = false; return true; }; for (;;) { std::string expr; std::cout << ">>> " << std::flush; std::getline(std::cin, expr); eval.begin(); if (expr.empty()) continue; bool no_value = expr[0] == '$'; if (expr.find("import ") == 0) { eval.load_module(expr.substr(7, expr.size()-7)).finish(); } else if (no_value) { eval.expression(expr.substr(1, expr.size()-1)).finish(); } else { first_token = true; had_begin = false; eval.expression(expr).run(progress_indicator, result_printer); if (had_begin) { eval.get_inference().append("> \n"); std::cout << "\r \r"; } else if (!had_nl) { std::cout << '\n'; } had_nl = false; } } }