✨ beautiful unicode output info
This commit is contained in:
parent
0f61f8e18e
commit
5a165d3255
7
makefile
7
makefile
|
@ -112,7 +112,12 @@ build/nasal_type.o:\
|
|||
src/nasal_type.h src/nasal_type.cpp | build
|
||||
$(CXX) $(CXXFLAGS) src/nasal_type.cpp -o build/nasal_type.o
|
||||
|
||||
build/nasal_gc.o: src/nasal.h src/nasal_type.h src/nasal_gc.h src/nasal_gc.cpp | build
|
||||
build/nasal_gc.o:\
|
||||
src/nasal.h\
|
||||
src/util/util.h\
|
||||
src/nasal_type.h\
|
||||
src/nasal_gc.h\
|
||||
src/nasal_gc.cpp | build
|
||||
$(CXX) $(CXXFLAGS) src/nasal_gc.cpp -o build/nasal_gc.o
|
||||
|
||||
build/nasal_import.o: \
|
||||
|
|
|
@ -45,7 +45,7 @@ private:
|
|||
|
||||
std::string format_location(expr* node) {
|
||||
std::stringstream ss;
|
||||
ss << " → [";
|
||||
ss << " ⇒ [";
|
||||
node->get_location().dump_begin(ss);
|
||||
ss << "]\n";
|
||||
return ss.str();
|
||||
|
@ -90,10 +90,10 @@ public:
|
|||
|
||||
public:
|
||||
void dump(code_block* root) {
|
||||
util::windows_code_page_manager wcpm;
|
||||
wcpm.set_utf8_output();
|
||||
util::windows_code_page_manager wm;
|
||||
wm.set_utf8_output();
|
||||
root->accept(this);
|
||||
wcpm.restore_code_page();
|
||||
wm.restore_code_page();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -23,4 +23,40 @@ cli_config parse(const std::vector<std::string>& args) {
|
|||
return result;
|
||||
}
|
||||
|
||||
std::ostream& help(std::ostream& out) {
|
||||
out
|
||||
<< "\n"
|
||||
<< " ,--#-,\n"
|
||||
<< "<3 / \\____\\ <3\n"
|
||||
<< " |_|__A_|\n"
|
||||
<< "\nnasal <option>\n"
|
||||
<< "option:\n"
|
||||
<< " -h, --help | get help.\n"
|
||||
<< " -v, --version | get version.\n"
|
||||
<< " -r, --repl | use repl interpreter.\n"
|
||||
<< "\nnasal [option] <file> [argv]\n"
|
||||
<< "option:\n"
|
||||
<< " -a, --ast | view ast after link/optimize process.\n"
|
||||
<< " --raw-ast | view ast without after-processing.\n"
|
||||
<< " -c, --code | view generated bytecode.\n"
|
||||
<< " -s, --symbol | show analysed symbol info.\n"
|
||||
<< " -e, --exec | execute directly.\n"
|
||||
<< " -t, --time | show execute time.\n"
|
||||
<< " -d, --detail | get detail info.\n"
|
||||
<< " -f, --ref-file | get referenced files.\n"
|
||||
<< " -dbg, --debug | debug mode.\n"
|
||||
<< " --prof | show profiling result, "
|
||||
<< "available under debug mode.\n"
|
||||
<< " --prof-all | show profiling result of all files, "
|
||||
<< "available under debug mode.\n"
|
||||
<< " --limit | use limited execution mode "
|
||||
<< "(readonly api enabled).\n"
|
||||
<< "file:\n"
|
||||
<< " <filename> | execute file.\n"
|
||||
<< "argv:\n"
|
||||
<< " <args> | cmd arguments used in program.\n"
|
||||
<< "\n";
|
||||
return out;
|
||||
}
|
||||
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
|
||||
namespace nasal::cli {
|
||||
|
||||
|
@ -67,4 +68,6 @@ const std::unordered_map<std::string, option> cli_options = {
|
|||
|
||||
cli_config parse(const std::vector<std::string>&);
|
||||
|
||||
std::ostream& help(std::ostream&);
|
||||
|
||||
}
|
50
src/main.cpp
50
src/main.cpp
|
@ -18,45 +18,9 @@
|
|||
#include "repl/repl.h"
|
||||
#include "cli/cli.h"
|
||||
|
||||
#include <unordered_map>
|
||||
#include <thread>
|
||||
#include <cstdlib>
|
||||
|
||||
std::ostream& help(std::ostream& out) {
|
||||
out
|
||||
<< "\n"
|
||||
<< " ,--#-,\n"
|
||||
<< "<3 / \\____\\ <3\n"
|
||||
<< " |_|__A_|\n"
|
||||
<< "\nnasal <option>\n"
|
||||
<< "option:\n"
|
||||
<< " -h, --help | get help.\n"
|
||||
<< " -v, --version | get version.\n"
|
||||
<< " -r, --repl | use repl interpreter.\n"
|
||||
<< "\nnasal [option] <file> [argv]\n"
|
||||
<< "option:\n"
|
||||
<< " -a, --ast | view ast after link/optimize process.\n"
|
||||
<< " --raw-ast | view ast without after-processing.\n"
|
||||
<< " -c, --code | view generated bytecode.\n"
|
||||
<< " -s, --symbol | show analysed symbol info.\n"
|
||||
<< " -e, --exec | execute directly.\n"
|
||||
<< " -t, --time | show execute time.\n"
|
||||
<< " -d, --detail | get detail info.\n"
|
||||
<< " -f, --ref-file | get referenced files.\n"
|
||||
<< " -dbg, --debug | debug mode.\n"
|
||||
<< " --prof | show profiling result, available in debug mode.\n"
|
||||
<< " --prof-all | show profiling result of all files, "
|
||||
<< "available under debug mode.\n"
|
||||
<< " --limit | use limited execution mode "
|
||||
<< "(readonly api enabled).\n"
|
||||
<< "file:\n"
|
||||
<< " <filename> | execute file.\n"
|
||||
<< "argv:\n"
|
||||
<< " <args> | cmd arguments used in program.\n"
|
||||
<< "\n";
|
||||
return out;
|
||||
}
|
||||
|
||||
std::ostream& logo(std::ostream& out) {
|
||||
out
|
||||
<< "\n"
|
||||
|
@ -67,7 +31,8 @@ std::ostream& logo(std::ostream& out) {
|
|||
<< " \\_\\ \\/ \\__,_|___/\\__,_|_|\n"
|
||||
<< "\n"
|
||||
<< "ver : " << __nasver__
|
||||
<< " " << nasal::util::get_platform() << " " << nasal::util::get_arch()
|
||||
<< " " << nasal::util::get_platform()
|
||||
<< " " << nasal::util::get_arch()
|
||||
<< " (" << __DATE__ << " " << __TIME__ << ")\n"
|
||||
<< "std : c++ " << __cplusplus << "\n"
|
||||
<< "core : " << std::thread::hardware_concurrency() << " core(s)\n"
|
||||
|
@ -75,9 +40,9 @@ std::ostream& logo(std::ostream& out) {
|
|||
<< "repo : https://gitee.com/valkmjolnir/Nasal-Interpreter\n"
|
||||
<< "wiki : https://wiki.flightgear.org/Nasal_scripting_language\n"
|
||||
<< "\n"
|
||||
<< "presented by fgprc members\n"
|
||||
<< " - http://fgprc.org\n"
|
||||
<< " - http://fgprc.org.cn\n"
|
||||
<< "presented by fgprc members:\n"
|
||||
<< " - http://fgprc.org\n"
|
||||
<< " - http://fgprc.org.cn\n"
|
||||
<< "\n"
|
||||
<< "input <nasal -h> to get help .\n\n";
|
||||
return out;
|
||||
|
@ -96,7 +61,8 @@ std::ostream& version(std::ostream& out) {
|
|||
}
|
||||
|
||||
out << "nasal version " << __nasver__;
|
||||
out << " " << nasal::util::get_platform() << " " << nasal::util::get_arch();
|
||||
out << " " << nasal::util::get_platform();
|
||||
out << " " << nasal::util::get_arch();
|
||||
out << " (" << __DATE__ << " " << __TIME__ << ")\n";
|
||||
return out;
|
||||
}
|
||||
|
@ -195,7 +161,7 @@ i32 main(i32 argc, const char* argv[]) {
|
|||
// run directly or show help
|
||||
if (argc==2) {
|
||||
if (config.has(nasal::cli::option::cli_help)) {
|
||||
std::clog << help;
|
||||
std::clog << nasal::cli::help;
|
||||
} else if (config.has(nasal::cli::option::cli_version)) {
|
||||
std::clog << version;
|
||||
} else if (config.has(nasal::cli::option::cli_repl_mode)) {
|
||||
|
|
125
src/nasal_gc.cpp
125
src/nasal_gc.cpp
|
@ -1,4 +1,5 @@
|
|||
#include "nasal_gc.h"
|
||||
#include "nasal_gc.h"
|
||||
#include "util/util.h"
|
||||
|
||||
namespace nasal {
|
||||
|
||||
|
@ -258,15 +259,27 @@ void gc::clear() {
|
|||
}
|
||||
|
||||
void gc::info() const {
|
||||
util::windows_code_page_manager wm;
|
||||
wm.set_utf8_output();
|
||||
|
||||
using std::left;
|
||||
using std::setw;
|
||||
using std::setfill;
|
||||
using std::setprecision;
|
||||
|
||||
const char* used_table_name[] = {
|
||||
"object type", "gc count", "alloc count", "memory size",
|
||||
"detail", "time spend", "gc time", "avg time", "max gc",
|
||||
"max mark", "max sweep", nullptr
|
||||
"object type",
|
||||
"gc count",
|
||||
"alloc count",
|
||||
"memory size",
|
||||
"detail",
|
||||
"time spend",
|
||||
"gc time",
|
||||
"avg time",
|
||||
"max gc",
|
||||
"max mark",
|
||||
"max sweep",
|
||||
nullptr
|
||||
};
|
||||
const char* name[] = {
|
||||
"string",
|
||||
|
@ -297,21 +310,33 @@ void gc::info() const {
|
|||
len = std::to_string(size[i]).length();
|
||||
indent = indent<len? len:indent;
|
||||
}
|
||||
auto indent_string = std::string("--");
|
||||
auto indent_string = std::string("──");
|
||||
for(usize i = 0; i<indent; ++i) {
|
||||
indent_string += "-";
|
||||
indent_string += "─";
|
||||
}
|
||||
const auto last_line = "+" + indent_string + "+" +
|
||||
indent_string + "-" + indent_string + "-" + indent_string + "+";
|
||||
indent_string = indent_string + "+" +
|
||||
indent_string + "+" + indent_string + "+" + indent_string;
|
||||
const auto first_line = "╭" + indent_string + "┬" +
|
||||
indent_string + "─" +
|
||||
indent_string + "─" +
|
||||
indent_string + "╮";
|
||||
const auto mid_line = "├" + indent_string + "┼" +
|
||||
indent_string + "┼" +
|
||||
indent_string + "┼" +
|
||||
indent_string + "┤";
|
||||
const auto another_mid_line = "├" + indent_string + "┼" +
|
||||
indent_string + "┴" +
|
||||
indent_string + "┴" +
|
||||
indent_string + "┤";
|
||||
const auto last_line = "╰" + indent_string + "┴" +
|
||||
indent_string + "─" +
|
||||
indent_string + "─" +
|
||||
indent_string + "╯";
|
||||
|
||||
std::clog << "\n+" << indent_string << "+\n";
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "object type";
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << "gc count";
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << "alloc count";
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << "memory size";
|
||||
std::clog << " |\n+" << indent_string << "+\n";
|
||||
std::clog << "\n" << first_line << "\n";
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "object type";
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << "gc count";
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << "alloc count";
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << "memory size";
|
||||
std::clog << " │\n" << mid_line << "\n";
|
||||
|
||||
double total = 0;
|
||||
for(u8 i = 0; i<gc_type_size; ++i) {
|
||||
|
@ -319,46 +344,54 @@ void gc::info() const {
|
|||
continue;
|
||||
}
|
||||
total += static_cast<f64>(gcnt[i]);
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << name[i];
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << gcnt[i];
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << acnt[i];
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << size[i];
|
||||
std::clog << " |\n";
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << name[i];
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << gcnt[i];
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << acnt[i];
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << size[i];
|
||||
std::clog << " │\n";
|
||||
}
|
||||
std::clog << "+" << indent_string << "+\n";
|
||||
std::clog << mid_line << "\n";
|
||||
|
||||
auto den = std::chrono::high_resolution_clock::duration::period::den;
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "detail";
|
||||
std::clog << " | " << left << setw(indent) << setfill(' ') << "time spend";
|
||||
std::clog << " | " << left << setw(indent) << setfill('x') << "x";
|
||||
std::clog << " | " << left << setw(indent) << setfill('x') << "x";
|
||||
std::clog << " |\n+" << indent_string << "+\n";
|
||||
const auto den = std::chrono::high_resolution_clock::duration::period::den;
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "detail";
|
||||
std::clog << " │ " << left << setw(indent) << setfill(' ') << "time spend";
|
||||
std::clog << " │ " << left << setw(indent) << setfill('x') << "x";
|
||||
std::clog << " │ " << left << setw(indent) << setfill('x') << "x";
|
||||
std::clog << " │\n" << another_mid_line << "\n";
|
||||
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "gc time";
|
||||
std::clog << " | " << setw(indent-3) << std::setprecision(4) << worktime*1.0/den*1000 << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "|\n";
|
||||
const auto gc_time = worktime*1.0/den*1000;
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "gc time";
|
||||
std::clog << " │ " << setw(indent-3) << setprecision(4) << gc_time << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "│\n";
|
||||
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "avg time";
|
||||
std::clog << " | " << setw(indent-3) << std::setprecision(4) << worktime*1.0/den*1000/total << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "|\n";
|
||||
const auto avg_time = worktime*1.0/den*1000/total;
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "avg time";
|
||||
std::clog << " │ " << setw(indent-3) << setprecision(4) << avg_time << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "│\n";
|
||||
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "max gc";
|
||||
std::clog << " | " << setw(indent-3) << std::setprecision(4) << max_time*1.0/den*1000 << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "|\n";
|
||||
const auto max_gc = max_time*1.0/den*1000;
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "max gc";
|
||||
std::clog << " │ " << setw(indent-3) << setprecision(4) << max_gc << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "│\n";
|
||||
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "max mark";
|
||||
std::clog << " | " << setw(indent-3) << std::setprecision(4) << max_mark_time*1.0/den*1000 << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "|\n";
|
||||
const auto max_mark = max_mark_time*1.0/den*1000;
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "max mark";
|
||||
std::clog << " │ " << setw(indent-3) << setprecision(4) << max_mark << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "│\n";
|
||||
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "max sweep";
|
||||
std::clog << " | " << setw(indent-3) << std::setprecision(4) << max_sweep_time*1.0/den*1000 << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "|\n";
|
||||
const auto max_sweep = max_sweep_time*1.0/den*1000;
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "max sweep";
|
||||
std::clog << " │ " << setw(indent-3) << setprecision(4) << max_sweep << " ms";
|
||||
std::clog << setw(indent*2+7) << " " << "│\n";
|
||||
|
||||
std::clog << "| " << left << setw(indent) << setfill(' ') << "concurrent";
|
||||
std::clog << " | " << setw(indent) << (flag_concurrent_mark_triggered? "true":"false");
|
||||
std::clog << setw(indent*2+7) << " " << "|\n";
|
||||
std::clog << "│ " << left << setw(indent) << setfill(' ') << "concurrent";
|
||||
std::clog << " │ " << setw(indent)
|
||||
<< (flag_concurrent_mark_triggered? "true":"false");
|
||||
std::clog << setw(indent*2+7) << " " << "│\n";
|
||||
|
||||
std::clog << last_line << "\n";
|
||||
|
||||
wm.restore_code_page();
|
||||
}
|
||||
|
||||
var gc::alloc(const vm_type type) {
|
||||
|
|
|
@ -18,7 +18,7 @@ var table_character_set = [
|
|||
"┷", "┳", "⊥", "﹃", "﹄", "╮", "╭", "╯", "╰", "╳"
|
||||
];
|
||||
|
||||
var selection_box = ["○", "◉", "☐", "▣"];
|
||||
var selection_box = ["○", "◉", "☐", "▣", "☑", "☒"];
|
||||
|
||||
var char_ttf=[
|
||||
[" "," "," "," "," "," "],
|
||||
|
|
|
@ -7,8 +7,8 @@ use std.io;
|
|||
use std.unix;
|
||||
use std.math;
|
||||
|
||||
var is_windows_platform=os.platform()=="windows";
|
||||
var is_macos_platform=os.platform()=="macOS";
|
||||
var is_windows_platform = os.platform()=="windows";
|
||||
var is_macos_platform = os.platform()=="macOS";
|
||||
|
||||
if (is_windows_platform) {
|
||||
runtime.windows.set_utf8_output();
|
||||
|
@ -17,72 +17,72 @@ if (is_windows_platform) {
|
|||
var cpu_stat = func() {
|
||||
if (is_windows_platform or is_macos_platform)
|
||||
return nil;
|
||||
var cpu=split("\n",io.readfile("/proc/stat"))[0];
|
||||
cpu=split(" ",cpu);
|
||||
cpu={
|
||||
name:cpu[0],
|
||||
user:cpu[1],
|
||||
nice:cpu[2],
|
||||
system:cpu[3],
|
||||
idle:cpu[4],
|
||||
iowait:cpu[5],
|
||||
irq:cpu[6],
|
||||
softirq:cpu[7],
|
||||
var cpu = split("\n", io.readfile("/proc/stat"))[0];
|
||||
cpu = split(" ", cpu);
|
||||
cpu = {
|
||||
name: cpu[0],
|
||||
user: cpu[1],
|
||||
nice: cpu[2],
|
||||
system: cpu[3],
|
||||
idle: cpu[4],
|
||||
iowait: cpu[5],
|
||||
irq: cpu[6],
|
||||
softirq: cpu[7],
|
||||
};
|
||||
return cpu;
|
||||
}
|
||||
|
||||
var cpu_occupation = func() {
|
||||
var first_in=1;
|
||||
var first_in = 1;
|
||||
while(1) {
|
||||
var cpu0=cpu_stat();
|
||||
var cpu0 = cpu_stat();
|
||||
if (first_in) {
|
||||
unix.sleep(0.1);
|
||||
first_in=0;
|
||||
first_in = 0;
|
||||
} else {
|
||||
for(var i=0;i<10;i+=1) {
|
||||
for(var i = 0; i < 10; i += 1) {
|
||||
unix.sleep(0.1);
|
||||
coroutine.yield(nil);
|
||||
}
|
||||
}
|
||||
var cpu1=cpu_stat();
|
||||
var cpu1 = cpu_stat();
|
||||
if (is_windows_platform or is_macos_platform) {
|
||||
coroutine.yield(0);
|
||||
continue;
|
||||
}
|
||||
var t0=cpu0.user+cpu0.nice+cpu0.system+cpu0.idle+cpu0.iowait+cpu0.irq+cpu0.softirq;
|
||||
var t1=cpu1.user+cpu1.nice+cpu1.system+cpu1.idle+cpu1.iowait+cpu1.irq+cpu1.softirq;
|
||||
var interval=cpu1.idle-cpu0.idle;
|
||||
coroutine.yield(t0==t1?0:(1-interval/(t1-t0))*100);
|
||||
var t0 = cpu0.user+cpu0.nice+cpu0.system+cpu0.idle+cpu0.iowait+cpu0.irq+cpu0.softirq;
|
||||
var t1 = cpu1.user+cpu1.nice+cpu1.system+cpu1.idle+cpu1.iowait+cpu1.irq+cpu1.softirq;
|
||||
var interval = cpu1.idle-cpu0.idle;
|
||||
coroutine.yield(t0==t1? 0:(1-interval/(t1-t0))*100);
|
||||
}
|
||||
}
|
||||
|
||||
var mem_occupation = func() {
|
||||
if (is_windows_platform or is_macos_platform)
|
||||
return {MemTotal:math.inf,MemFree:math.inf};
|
||||
var meminfo=split("\n",io.readfile("/proc/meminfo"));
|
||||
var mem_res={};
|
||||
forindex(var i;meminfo) {
|
||||
var tmp=split(" ",meminfo[i])[0:1];
|
||||
tmp[0]=substr(tmp[0],0,size(tmp[0])-1);
|
||||
mem_res[tmp[0]]=num(tmp[1]);
|
||||
var meminfo = split("\n",io.readfile("/proc/meminfo"));
|
||||
var mem_res = {};
|
||||
forindex(var i; meminfo) {
|
||||
var tmp = split(" ", meminfo[i])[0:1];
|
||||
tmp[0] = substr(tmp[0], 0, size(tmp[0])-1);
|
||||
mem_res[tmp[0]] = num(tmp[1]);
|
||||
}
|
||||
return mem_res;
|
||||
}
|
||||
|
||||
var random_generator = func() {
|
||||
var rise=[" ","▁","▂","▃","▄","▅","▆","▇","█"];
|
||||
var total=0;
|
||||
var statistics=[];
|
||||
setsize(statistics,70);
|
||||
var rise = [" ", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"];
|
||||
var total = 0;
|
||||
var statistics = [];
|
||||
setsize(statistics, 70);
|
||||
while(1) {
|
||||
for(var i=0;i<10;i+=1) {
|
||||
total+=1;
|
||||
var u=rand()*rand()*(rand()>0.5?-1:1);
|
||||
statistics[int(size(statistics)/2+u*size(statistics)/2)]+=1;
|
||||
}
|
||||
var s=["","",""];
|
||||
foreach(var st;statistics) {
|
||||
var s = ["", "", ""];
|
||||
foreach(var st; statistics) {
|
||||
var max_rate=100/size(statistics);
|
||||
var rate=st/total*100;
|
||||
for(var i=size(s)-1;i>=0;i-=1) {
|
||||
|
@ -97,12 +97,12 @@ var random_generator = func() {
|
|||
}
|
||||
var tmp="";
|
||||
for(var i=0;i<size(statistics);i+=1) {
|
||||
tmp~="-";
|
||||
tmp~="─";
|
||||
}
|
||||
println("\e[16;1H \e[32m|",s[0],"|\e[0m");
|
||||
println("\e[17;1H \e[32m|",s[1],"|\e[0m");
|
||||
println("\e[18;1H \e[32m|",s[2],"|\e[0m");
|
||||
println("\e[19;1H \e[32m+"~tmp~"+\e[0m");
|
||||
println("\e[16;1H \e[32m│", s[0], "│\e[0m");
|
||||
println("\e[17;1H \e[32m│", s[1], "│\e[0m");
|
||||
println("\e[18;1H \e[32m│", s[2], "│\e[0m");
|
||||
println("\e[19;1H \e[32m╰", tmp, "╯\e[0m");
|
||||
coroutine.yield();
|
||||
}
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ func() {
|
|||
|
||||
var tmp="";
|
||||
for(var i=0;i<70;i+=1) {
|
||||
tmp~="-";
|
||||
tmp~="─";
|
||||
}
|
||||
|
||||
var s=["","",""];
|
||||
|
@ -181,11 +181,11 @@ func() {
|
|||
}
|
||||
}
|
||||
}
|
||||
println("\e[7;1H \e[32m+"~tmp~"+\e[0m");
|
||||
println("\e[8;1H \e[32m|",s[0],"|\e[0m");
|
||||
println("\e[9;1H \e[32m|",s[1],"|\e[0m");
|
||||
println("\e[10;1H \e[32m|",s[2],"|\e[0m");
|
||||
println("\e[11;1H \e[32m+"~tmp~"+\e[0m");
|
||||
println("\e[7;1H \e[32m╭"~tmp~"╮\e[0m");
|
||||
println("\e[8;1H \e[32m│",s[0],"│\e[0m");
|
||||
println("\e[9;1H \e[32m│",s[1],"│\e[0m");
|
||||
println("\e[10;1H \e[32m│",s[2],"│\e[0m");
|
||||
println("\e[11;1H \e[32m├"~tmp~"┤\e[0m");
|
||||
|
||||
var s=["","",""];
|
||||
foreach(var occ;mem_occupation_log) {
|
||||
|
@ -201,10 +201,10 @@ func() {
|
|||
}
|
||||
}
|
||||
}
|
||||
println("\e[12;1H \e[32m|",s[0],"|\e[0m");
|
||||
println("\e[13;1H \e[32m|",s[1],"|\e[0m");
|
||||
println("\e[14;1H \e[32m|",s[2],"|\e[0m");
|
||||
println("\e[15;1H \e[32m+"~tmp~"+\e[0m");
|
||||
println("\e[12;1H \e[32m│",s[0],"│\e[0m");
|
||||
println("\e[13;1H \e[32m│",s[1],"│\e[0m");
|
||||
println("\e[14;1H \e[32m│",s[2],"│\e[0m");
|
||||
println("\e[15;1H \e[32m├"~tmp~"┤\e[0m");
|
||||
|
||||
println("\e[20;1H Press 'q' to quit.");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue