From f4b6bff4ec0974315e7aa62f3b6d9687c560f66b Mon Sep 17 00:00:00 2001 From: aristocratos Date: Thu, 6 May 2021 20:32:03 +0200 Subject: [PATCH] Init --- CHANGELOG.md | 0 CMakeLists.txt | 2 + CODE_OF_CONDUCT.md | 76 +++++ CONTRIBUTING.md | 33 +++ Img/logo.png | Bin 0 -> 11515 bytes LICENSE | 202 ++++++++++++++ Makefile | 23 ++ README.md | 184 +++++++++++++ btop | Bin 0 -> 317528 bytes btop.cpp | 671 +++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 1191 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CMakeLists.txt create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 Img/logo.png create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100755 btop create mode 100644 btop.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..139878e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,2 @@ +file(GLOB sources *.h *.c *.cxx *.cpp *.hxx) +add_executable(btop ${sources}) \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..4ef2c68 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at admin@qvantnet.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..fc8c323 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,33 @@ +# Contributing guidelines + +## When submitting pull requests + +* Explain your thinking in why a change or addition is needed. + * Is it a requested change or feature? + * If not, open a feature request to get feedback before making a pull request. + +* Split up multiple unrelated changes in multiple pull requests. + +* If it's a fix for a unreported bug, make a bug report and link the pull request. + +* Purely cosmetic changes won't be accepted without a very good explanation of its value. + +## Formatting + +### Follow the current syntax design + +* Indent type: Tabs + +* Tab size: 4 + +## Optimization + +* Avoid writing to disk if possible. + +* Make sure variables/vectors/maps/classes etc. are cleaned up if not reused. + +* Compare cpu and memory usage with and without your code and look for alternatives if they cause a noticeable negative impact. + +For questions contact Aristocratos at admin@qvantnet.com + +For proposing changes to this document create a [new issue](https://github.com/aristocratos/btop/issues/new/choose). diff --git a/Img/logo.png b/Img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..75a2f04a3d14fd7a930cf57ada9122f6c7fb8fcc GIT binary patch literal 11515 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 zKVstOClone and compile + +``` bash +git clone https://github.com/aristocratos/btop.git +cd btop +make +``` + +>to install + +``` bash +sudo make install +``` + +>to uninstall + +``` bash +sudo make uninstall +``` + +>to clear any compiled files + +```bash +make distclean +``` + +## Configurability + +All options changeable from within UI. +Config files stored in "$HOME/.config/btop" folder + +#### btop.cfg: (auto generated if not found) + +"/etc/bpytop.conf" will be used as default seed for config file creation if it exists. ("/usr/local/etc/bpytop.conf" on BSD) + +```bash +#? Config file for btop v. 0.0.1 + + +``` + +#### Command line options: + +```text +usage: btop [-v] +``` + +## LICENSE + +[Apache License 2.0](LICENSE) diff --git a/btop b/btop new file mode 100755 index 0000000000000000000000000000000000000000..97ca7be3421fc359a076a3e5cea689ef6a95283c GIT binary patch literal 317528 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; + +//? ------------------------------------------------- GLOBALS --------------------------------------------------------- + +const vector> BANNER_SRC = { + {"#E62525", "██████╗ ████████╗ ██████╗ ██████╗"}, + {"#CD2121", "██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ██╗ ██╗"}, + {"#B31D1D", "██████╔╝ ██║ ██║ ██║██████╔╝ ██████╗██████╗"}, + {"#9A1919", "██╔══██╗ ██║ ██║ ██║██╔═══╝ ╚═██╔═╝╚═██╔═╝"}, + {"#801414", "██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ╚═╝"}, + {"#000000", "╚═════╝ ╚═╝ ╚═════╝ ╚═╝"}, +}; + +const string VERSION = "0.0.1"; + +const map DEFAULT_THEME = { + { "main_bg", "#00" }, + { "main_fg", "#cc" }, + { "title", "#ee" }, + { "hi_fg", "#969696" }, + { "selected_bg", "#7e2626" }, + { "selected_fg", "#ee" }, + { "inactive_fg", "#40" }, + { "graph_text", "#60" }, + { "meter_bg", "#40" }, + { "proc_misc", "#0de756" }, + { "cpu_box", "#3d7b46" }, + { "mem_box", "#8a882e" }, + { "net_box", "#423ba5" }, + { "proc_box", "#923535" }, + { "div_line", "#30" }, + { "temp_start", "#4897d4" }, + { "temp_mid", "#5474e8" }, + { "temp_end", "#ff40b6" }, + { "cpu_start", "#50f095" }, + { "cpu_mid", "#f2e266" }, + { "cpu_end", "#fa1e1e" }, + { "free_start", "#223014" }, + { "free_mid", "#b5e685" }, + { "free_end", "#dcff85" }, + { "cached_start", "#0b1a29" }, + { "cached_mid", "#74e6fc" }, + { "cached_end", "#26c5ff" }, + { "available_start", "#292107" }, + { "available_mid", "#ffd77a" }, + { "available_end", "#ffb814" }, + { "used_start", "#3b1f1c" }, + { "used_mid", "#d9626d" }, + { "used_end", "#ff4769" }, + { "download_start", "#231a63" }, + { "download_mid", "#4f43a3" }, + { "download_end", "#b0a9de" }, + { "upload_start", "#510554" }, + { "upload_mid", "#7d4180" }, + { "upload_end", "#dcafde" }, + { "process_start", "#80d0a3" }, + { "process_mid", "#dcd179" }, + { "process_end", "#d45454" } +}; + +map>> MENUS = { + { "options", { + { "normal", + { "┌─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐", + "│ │├─┘ │ ││ ││││└─┐", + "└─┘┴ ┴ ┴└─┘┘└┘└─┘" + } }, + { "selected", + { "╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗", + "║ ║╠═╝ ║ ║║ ║║║║╚═╗", + "╚═╝╩ ╩ ╩╚═╝╝╚╝╚═╝" + } } + } }, + { "help", { + { "normal", + { "┬ ┬┌─┐┬ ┌─┐", + "├─┤├┤ │ ├─┘", + "┴ ┴└─┘┴─┘┴ " + } }, + { "selected", + { "╦ ╦╔═╗╦ ╔═╗", + "╠═╣║╣ ║ ╠═╝", + "╩ ╩╚═╝╩═╝╩ " + } } + } }, + { "quit", { + { "normal", + { "┌─┐ ┬ ┬ ┬┌┬┐", + "│─┼┐│ │ │ │ ", + "└─┘└└─┘ ┴ ┴ " + } }, + { "selected", + { "╔═╗ ╦ ╦ ╦╔╦╗ ", + "║═╬╗║ ║ ║ ║ ", + "╚═╝╚╚═╝ ╩ ╩ " + } } + } } +}; + +//? ------------------------------------------------- NAMESPACES ------------------------------------------------------ + +namespace State { + atomic MenuActive(false); +}; + +namespace Fx { //? Collection of escape codes for text style and formatting + const string e = "\x1b["; //* Escape sequence start + const string r = e + "0m"; //* Reset foreground/background color and text effects + const string b = e + "1m"; //* Bold on + const string ub = e + "22m"; //* Bold off + const string d = e + "2m"; //* Dark on + const string ud = e + "22m"; //* Dark off + const string i = e + "3m"; //* Italic on + const string ui = e + "23m"; //* Italic off + const string ul = e + "4m"; //* Underline on + const string uul = e + "24m"; //* Underline off + const string bl = e + "5m"; //* Blink on + const string ubl = e + "25m"; //* Blink off + const string s = e + "9m"; //* Strike / crossed-out on + const string us = e + "29m"; //* Strike / crossed-out off +}; + +namespace Mv { //? Collection of escape codes and functions for cursor manipulation + string to(int line, int col){ return Fx::e + to_string(line) + ";" + to_string(col) + "f";} //* Move cursor to line, column + string r(int x){ return Fx::e + to_string(x) + "C";} //* Move cursor right x columns + string l(int x){ return Fx::e + to_string(x) + "D";} //* Move cursor left x columns + string u(int x){ return Fx::e + to_string(x) + "A";} //* Move cursor up x lines + string d(int x) { return Fx::e + to_string(x) + "B";} //* Move cursor down x lines + const string save = Fx::e + "s"; //* Save cursor position + const string restore = Fx::e + "u"; //* Restore saved cursor postion +}; + +//? --------------------------------------- FUNCTIONS, STRUCTS & CLASSES ---------------------------------------------- + +inline size_t ulen(const string& str){ //? Return number of UTF8 characters in a string + size_t len = 0; + for (char c : str) if ((c & 0xC0) != 0x80) ++len; + return len; +} + +string color_to_string(string hexa="", unsigned r=0, unsigned g=0, unsigned b=0, string depth="fg"){ + //? Generate escape sequence for 24-bit color and return as a string + //? Accepted arguments: hexa="#000000" to "#ffffff" for color, or "#00" to "#ff" for greyscale + //? Or: r=0-255, g=0-255, b=0-255 + //? depth=string "fg" or "bg" for either a foreground color or a background color + depth = (depth == "fg") ? "38" : "48"; + if (hexa.size() > 1){ + hexa.erase(0, 1); + for (auto& c : hexa) if (!isxdigit(c)) return ""; + + if (hexa.size() == 2){ + string h_str = ";" + to_string(stoi(hexa, 0, 16)); + return Fx::e + depth + ";2" + h_str + h_str + h_str + "m"; + } + else if (hexa.size() == 6){ + return Fx::e + depth + ";2" + ";" + + to_string(stoi(hexa.substr(0, 2), 0, 16)) + ";" + + to_string(stoi(hexa.substr(2, 2), 0, 16)) + ";" + + to_string(stoi(hexa.substr(4, 2), 0, 16)) + "m"; + } + } else if (r && g && b){ + r = (r > 255) ? 255 : r; + g = (g > 255) ? 255 : g; + b = (b > 255) ? 255 : b; + return Fx::e + depth + ";2" + ";" + to_string(r) + ";" + to_string(g) + ";" + to_string(b) + "m"; + } + return ""; +} + +string ltrim(string str, string t_str = " "){ //? Left-trim from and return string + size_t t_str_size = t_str.size(); + while (str.substr(0, t_str_size) == t_str) str.erase(0, t_str_size); + return str; +} + +string rtrim(string str, string t_str = " "){ //? Right-trim from and return string + size_t t_str_size = t_str.size(); + while (str.substr(str.size() - t_str_size, t_str_size) == t_str) str.erase(str.size() - t_str_size, t_str_size); + return str; +} + +string trim(string str, string t_str = " "){ //? Left-right-trim from and return string + return ltrim(rtrim(str, t_str), t_str); +} + +vector ssplit(string str, string delim = " ", int times = 0){ //? Split at (0 for unlimited) times and return vector + vector out; + if (str != "" && delim != ""){ + size_t pos = 0; + int x = 0; + string tmp; + while ((pos = str.find(delim)) != string::npos){ + tmp = str.substr(0, pos); + if (tmp != delim && tmp != "") out.push_back(tmp); + str.erase(0, pos + delim.size()); + if (times > 0 && ++x >= times) break; + } + } + out.push_back(str); + return out; +} + +map c_to_rgb(string c_string){ //? Return a map of "r", "g", "b", 0-255 values for a 24-bit color escape string + map rgb = {{"r", 0}, {"g", 0}, {"b", 0}}; + if (c_string.size() >= 14){ + c_string.erase(0, 7); + auto c_split = ssplit(c_string, ";"); + if (c_split.size() == 3){ + rgb["r"] = stoi(c_split[0]); + rgb["g"] = stoi(c_split[1]); + rgb["b"] = stoi(c_split[2].erase(c_split[2].size())); + } + } + return rgb; +} + +class C_Term { //? Collection of escape codes and functions for terminal manipulation + bool initialized = false; + struct termios initial_settings; +public: + int width = 0; + int height = 0; + bool resized = false; + string fg = "" ; //* Default foreground color + string bg = ""; //* Default background color + const string hide_cursor = Fx::e + "?25l"; //* Hide terminal cursor + const string show_cursor = Fx::e + "?25h"; //* Show terminal cursor + const string alt_screen = Fx::e + "?1049h"; //* Switch to alternate screen + const string normal_screen = Fx::e + "?1049l"; //* Switch to normal screen + const string clear = Fx::e + "2J" + Fx::e + "0;0f"; //* Clear screen and set cursor to position 0,0 + const string mouse_on = Fx::e + "?1002h" + Fx::e + "?1015h" + Fx::e + "?1006h"; //* Enable reporting of mouse position on click and release + const string mouse_off = "\033[?1002l"; //* Disable mouse reporting + const string mouse_direct_on = "\033[?1003h"; //* Enable reporting of mouse position at any movement + const string mouse_direct_off = "\033[?1003l"; //* Disable direct mouse reporting + + bool init(){ //? Save terminal options and check valid tty + if (!this->initialized){ + this->initialized = (bool)isatty(STDIN_FILENO); + if (this->initialized) this->initialized = (0 == tcgetattr(STDIN_FILENO, &this->initial_settings)); + if (this->initialized) cin.sync_with_stdio(); + } + return initialized; + } + + void restore(){ //? Restore terminal options + if (this->initialized) tcsetattr(STDIN_FILENO, TCSANOW, &this->initial_settings); + } + + bool linebuffered(bool on=true){ //? Toggle need for return key when reading input + struct termios settings; + if (tcgetattr(STDIN_FILENO, &settings)) return false; + if (on) settings.c_lflag |= ICANON; + else settings.c_lflag &= ~(ICANON); + if (tcsetattr(STDIN_FILENO, TCSANOW, &settings)) return false; + if (on) setlinebuf(stdin); + else setbuf(stdin, NULL); + return true; + } + + bool echo(bool on=true){ //? Toggle terminal input echo + struct termios settings; + if (tcgetattr(STDIN_FILENO, &settings)) return false; + if (on) settings.c_lflag |= ECHO; + else settings.c_lflag &= ~(ECHO); + return 0 == tcsetattr(STDIN_FILENO, TCSANOW, &settings); + } + + bool refresh(){ //? Refresh variables holding current terminal width and height and return true if resized + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + this->resized = (this->width != w.ws_col || this->height != w.ws_row) ? true : false; + this->width = w.ws_col; + this->height = w.ws_row; + return resized; + } + + C_Term() { + this->init(); + this->refresh(); + this->resized = false; + } + +}; + +C_Term Term; //* Make C_Term globally available as Term + +struct C_Key { + string last = ""; + + const map KEY_ESCAPES = { + {"\033", "escape"}, + {"\n", "enter"}, + {" ", "space"}, + {"\x7f", "backspace"}, + {"\x08", "backspace"}, + {"[A", "up"}, + {"OA", "up"}, + {"[B", "down"}, + {"OB", "down"}, + {"[D", "left"}, + {"OD", "left"}, + {"[C", "right"}, + {"OC", "right"}, + {"[2~", "insert"}, + {"[3~", "delete"}, + {"[H", "home"}, + {"[F", "end"}, + {"[5~", "page_up"}, + {"[6~", "page_down"}, + {"\t", "tab"}, + {"[Z", "shift_tab"}, + {"OP", "f1"}, + {"OQ", "f2"}, + {"OR", "f3"}, + {"OS", "f4"}, + {"[15~", "f5"}, + {"[17~", "f6"}, + {"[18~", "f7"}, + {"[19~", "f8"}, + {"[20~", "f9"}, + {"[21~", "f10"}, + {"[23~", "f11"}, + {"[24~", "f12"} + }; + + bool wait(unsigned timeout_ms=0){ + struct pollfd pls[1]; + pls[ 0 ].fd = STDIN_FILENO; + pls[ 0 ].events = POLLIN | POLLPRI; + return poll(pls, 1, timeout_ms) > 0; + } + + string get(){ + string key = ""; + while (this->wait() && key.size() < 100) key += cin.get(); + if (key != ""){ + if (key.substr(0,2) == Fx::e) key.erase(0, 1); + if (this->KEY_ESCAPES.count(key)) key = this->KEY_ESCAPES.at(key); + else if (ulen(key) > 1) key = ""; + + this->last = key; + } + return key; + } + + string operator()(unsigned timeout_ms=0){ + if (this->wait(timeout_ms)) { + return this->get(); + } else { + return ""; + } + } +}; + +C_Key Key; + +class C_Theme { + map c; + map> g; + + map generate(map& source){ + //? Generate theme from map, default to DEFAULT_THEME on missing or malformatted values + map out; + for (auto& item : DEFAULT_THEME) { + if (source.count(item.first)) out[item.first] = color_to_string(source.at(item.first)); + else out[item.first] = ""; + if (out[item.first] == "") out[item.first] = color_to_string(item.second); + } + return out; + } + +public: + + void swap(map source){ + this->c = this->generate(source); + } + + C_Theme(map source){ + this->c = this->generate(source); + } + + auto operator()(string name){ + return this->c.at(name); + } + + auto gradient(string name){ + return this->g.at(name); + } + + auto rgb(string name){ + return c_to_rgb(this->c.at(name)); + } + +}; + +struct C_Banner { + string banner_str; + + C_Banner(){ + size_t z = 0; + string b_color, bg, fg, out, oc, letter; + this->banner_str = ""; + for (auto line: BANNER_SRC) { + fg = color_to_string(line[0]); + bg = color_to_string("#" + to_string(80-z*6)); + for (unsigned i = 0; i < line[1].size(); i += 3) { + if (line[1][i] == ' '){ + letter = ' '; + i -= 2; + } else{ + letter = line[1].substr(i, 3); + } + b_color = (letter == "█") ? fg : bg; + if (b_color != oc) out += b_color; + out += letter; + oc = b_color; + } + z++; + if (z < BANNER_SRC.size()) out += Mv::l(ulen(line[1])) + Mv::d(1); + } + this->banner_str = out; + } + + string operator() (){ + return this->banner_str + Fx::r; + } +}; + +C_Banner Banner; + +//? ------------------------------------------------- FUNCTIONS ------------------------------------------------------- + +void argumentParser(int argc, char **argv){ //? A simple argument parser + string argument; + for(int i = 1; i < argc; i++) { + argument = argv[i]; + if (argument == "-v" || argument == "--version") { + cout << "btop version: " << VERSION << endl; + exit(0); + } else if (argument == "-h" || argument == "--help") { + cout << "help here" << endl; + exit(0); + } else { + cout << " Unknown argument: " << argument << "\n" << + " Use -h or --help for help." << endl; + exit(1); + } + } +} + +uint64_t time_ms(){ + return chrono::duration_cast(chrono::system_clock::now().time_since_epoch()).count(); +} + +//? --------------------------------------------- Main starts here! --------------------------------------------------- +int main(int argc, char **argv){ + int debug = 2; + int tests = 0; + + // bool thread_test = false; + + //? Init + + if (argc > 1) argumentParser(argc, argv); + + if (!Term.init()) { + cout << "No terminal detected!" << endl; + exit(1); + } + Term.echo(false); + Term.linebuffered(false); + + + if (debug < 2) cout << Term.alt_screen << Term.clear << Term.hide_cursor << flush; + + C_Theme Theme(DEFAULT_THEME); + + + //* Test MENUS + for (auto& outer : MENUS){ + for (auto& inner : outer.second){ + for (auto& item : inner.second){ + cout << item << endl; + } + } + } + + + string korv5 = "hejsan"; + if (korv5.starts_with("hej")) cout << "hej" << endl; + + + State::MenuActive.store(true); + + if (State::MenuActive.load()) cout << "WHUUUU and time: " << time_ms() << endl; + + //cout << korv2.size() << " " << ulen(korv2) << endl; + + //* Test theme + if (tests>0) for(auto& item : DEFAULT_THEME) cout << Theme(item.first) << item.first << endl; + + // if (thread_test){ + // int max = 50000; + // int count = max / 100; + // atomic running; + // running = true; + // thread ttg1(C_Theme::generate, DEFAULT_THEME); + + // for (int i = 0; i < max; i++) { + // // C_Theme tt(DEFAULT_THEME); + // // tt.del(); + // auto ttg1 = async(C_Theme::generate, DEFAULT_THEME); + // auto ttg2 = async(C_Theme::generate, DEFAULT_THEME); + // auto ttg3 = async(C_Theme::generate, DEFAULT_THEME); + // auto ttg4 = async(C_Theme::generate, DEFAULT_THEME); + // // ttg1.wait(); + // // ttg2.wait(); + // map tt1 = ttg1.get(); + // map tt2 = ttg2.get(); + // map tt3 = ttg3.get(); + // map tt4 = ttg4.get(); + // if (i >= count) { + // cout << Mv::restore << "(" << i * 100 / max << "%)" << flush; + // count += max / 100; + // } + // } + // } + + + + if (tests>1){ + string lk = "first second another lastone"; + + for (auto& it : ssplit(lk)){ + cout << it << flush; + switch (it.front()) { + case 's': cout << " <=" << endl; break; + default: cout << endl; + } + } + } + + + // if (tests>2){ + cout << " " << Banner() << endl; + // } + + if (tests>3){ + auto nbcolor = color_to_string(DEFAULT_THEME.at("net_box")); + auto nbcolor_rgb = c_to_rgb(nbcolor); + auto nbcolor_man = ssplit(nbcolor, ";"); + cout << nbcolor << "Some color" << Fx::r << " Normal Color" << endl; + cout << "nbcolor_rgb size=" << nbcolor_rgb.size() << endl; + cout << "R:" << nbcolor_rgb.at("r") << " G:" << nbcolor_rgb.at("g") << " B:" << nbcolor_rgb.at("b") << endl; + cout << "MANUAL R:" << nbcolor_man.at(2) << " G:" << nbcolor_man.at(3) << " B:" << nbcolor_man.at(4) << endl; + + auto ccc = color_to_string("", 100, 255, 100); + cout << "\n" << ccc << "Testing..." << Fx::r << " normal." << endl; + } + + + if (tests>4){ + string trim_test1 = "-*vad "; + string trim_test2 = " vad*-"; + string trim_test3 = trim_test1 + trim_test2; + + cout << "\"" << ltrim(trim_test1, "-*") << "\" \"" << rtrim(trim_test2, "*-") << "\" \"" << trim(trim_test3, "-") << "\"" << endl; + + + string testie = "Does this work as intended? Or?"; + auto t_vec = ssplit(testie); + for(auto& tp : t_vec){ + cout << "\"" << tp << "\" " << flush; + } + } + + + //if (tests>5){ + cout << "Width=" << Term.width << " Height=" << Term.height << endl; + //} + + // map dict = { + // {"Korv", "14"}, + // {"Vad", "13"} + // }; + + // cout << dict["Korv"] << ", " << dict["Vad"] << endl; + + // vector> test = { + // {{"first", 1}, {"second", 2}}, + // {{"first", 11}, {"second", 22}} + // }; + + //cout << test[0]["first"] << " " << test[1]["second"] << endl; + + // for (auto& m : test) { + // cout << endl; + // for (auto& item : m) { + // cout << item.first << " " << item.second << endl; + // } + // } + + + + if (debug == 0){ + cout << Mv::to(Term.height - 1, 0) << "Press q to exit! Timeout" << flush; + string chr; + string full; + int wt = 90; + bool qp = false; + while (!qp && wt >= 0){ + int wtm = wt / 60; + int wts = wt - wtm * 60; + wt--; + cout << Mv::to(Term.height - 1, 26) << "(" << wtm << ":" << wts << ") " << flush; + if (Key.wait(1000)) chr = Key.get(); + if (chr != ""){ + cout << Mv::to(Term.height - 2, 1) << "Last key: LEN=" << chr.size() << " ULEN=" << ulen(chr) << " KEY=\"" << chr << "\" CODE=" << (int)chr.at(0) << " " << flush; + full += chr; + cout << Mv::to(Term.height - 5, 1) << full << flush; + if (chr == "q") qp = true; + chr = ""; + wt++; + } + } + } + + if (debug == 1) Key(-1); + Term.restore(); + if (debug < 2) cout << Term.normal_screen << Term.show_cursor << flush; + return 0; +}