mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-24 19:34:01 +00:00
ANSI+GitHub Workflow
This commit is contained in:
@@ -116,6 +116,7 @@ static int ush_cmd_help(void) {
|
||||
ush_writeln(" cd [dir]");
|
||||
ush_writeln(" exec|run <path|name>");
|
||||
ush_writeln(" clear");
|
||||
ush_writeln(" ansi / ansitest / color");
|
||||
ush_writeln(" memstat / fsstat / taskstat / userstat / shstat / stats");
|
||||
ush_writeln(" tty [index]");
|
||||
ush_writeln(" dmesg [n]");
|
||||
@@ -677,6 +678,128 @@ static int ush_cmd_ansi(void) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u64 ush_ansitest_u64_to_dec(char *out, u64 out_size, u64 value) {
|
||||
char rev[10];
|
||||
u64 digits = 0ULL;
|
||||
u64 i;
|
||||
|
||||
if (out == (char *)0 || out_size == 0ULL) {
|
||||
return 0ULL;
|
||||
}
|
||||
|
||||
if (value == 0U) {
|
||||
if (out_size < 2ULL) {
|
||||
return 0ULL;
|
||||
}
|
||||
|
||||
out[0] = '0';
|
||||
out[1] = '\0';
|
||||
return 1ULL;
|
||||
}
|
||||
|
||||
while (value > 0U && digits < (u64)sizeof(rev)) {
|
||||
rev[digits++] = (char)('0' + (value % 10U));
|
||||
value /= 10U;
|
||||
}
|
||||
|
||||
if (digits + 1ULL > out_size) {
|
||||
out[0] = '\0';
|
||||
return 0ULL;
|
||||
}
|
||||
|
||||
for (i = 0ULL; i < digits; i++) {
|
||||
out[i] = rev[digits - 1ULL - i];
|
||||
}
|
||||
|
||||
out[digits] = '\0';
|
||||
return digits;
|
||||
}
|
||||
|
||||
static void ush_ansitest_emit_bg256(u64 index) {
|
||||
char num[4];
|
||||
char seq[24];
|
||||
u64 digits;
|
||||
u64 p = 0ULL;
|
||||
u64 i;
|
||||
|
||||
if (index > 255U) {
|
||||
index = 255U;
|
||||
}
|
||||
|
||||
digits = ush_ansitest_u64_to_dec(num, (u64)sizeof(num), index);
|
||||
if (digits == 0ULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
seq[p++] = '\x1B';
|
||||
seq[p++] = '[';
|
||||
seq[p++] = '4';
|
||||
seq[p++] = '8';
|
||||
seq[p++] = ';';
|
||||
seq[p++] = '5';
|
||||
seq[p++] = ';';
|
||||
|
||||
for (i = 0ULL; i < digits && p + 1ULL < (u64)sizeof(seq); i++) {
|
||||
seq[p++] = num[i];
|
||||
}
|
||||
|
||||
if (p + 7ULL >= (u64)sizeof(seq)) {
|
||||
return;
|
||||
}
|
||||
|
||||
seq[p++] = 'm';
|
||||
seq[p++] = ' ';
|
||||
seq[p++] = ' ';
|
||||
seq[p++] = '\x1B';
|
||||
seq[p++] = '[';
|
||||
seq[p++] = '0';
|
||||
seq[p++] = 'm';
|
||||
seq[p] = '\0';
|
||||
|
||||
ush_write(seq);
|
||||
}
|
||||
|
||||
static int ush_cmd_ansitest(void) {
|
||||
u64 i;
|
||||
|
||||
ush_writeln("\x1B[1;96mANSI test suite\x1B[0m");
|
||||
ush_writeln("styles: \x1B[1mbold\x1B[0m \x1B[7minverse\x1B[0m \x1B[4munderline\x1B[0m");
|
||||
ush_writeln("16-color demo:");
|
||||
(void)ush_cmd_ansi();
|
||||
|
||||
ush_writeln("256-color palette (0..255):");
|
||||
for (i = 0ULL; i < 256ULL; i++) {
|
||||
ush_ansitest_emit_bg256(i);
|
||||
if ((i % 32ULL) == 31ULL) {
|
||||
ush_write_char('\n');
|
||||
}
|
||||
}
|
||||
ush_write_char('\n');
|
||||
|
||||
ush_writeln("truecolor demo:");
|
||||
ush_writeln(" \x1B[38;2;255;64;64mRGB(255,64,64)\x1B[0m \x1B[38;2;64;255;64mRGB(64,255,64)\x1B[0m \x1B[38;2;64;128;255mRGB(64,128,255)\x1B[0m");
|
||||
|
||||
ush_writeln("cursor control demo:");
|
||||
ush_write(" 0123456789");
|
||||
ush_write("\x1B[5D");
|
||||
ush_write("\x1B[93m<OK>\x1B[0m");
|
||||
ush_write_char('\n');
|
||||
|
||||
ush_write(" save");
|
||||
ush_write("\x1B[s");
|
||||
ush_write("....");
|
||||
ush_write("\x1B[u");
|
||||
ush_write("\x1B[92m<restore>\x1B[0m");
|
||||
ush_write_char('\n');
|
||||
|
||||
ush_writeln("erase-line demo:");
|
||||
ush_write(" left|right-to-clear");
|
||||
ush_write("\x1B[14D\x1B[K");
|
||||
ush_write_char('\n');
|
||||
|
||||
ush_writeln("ansitest done");
|
||||
return 1;
|
||||
}
|
||||
static int ush_cmd_kbdstat(void) {
|
||||
ush_writeln("kbdstat:");
|
||||
ush_print_kv_hex(" BUFFERED", cleonos_sys_kbd_buffered());
|
||||
@@ -1154,6 +1277,8 @@ void ush_execute_line(ush_state *sh, const char *line) {
|
||||
success = ush_cmd_clear();
|
||||
} else if (ush_streq(cmd, "ansi") != 0 || ush_streq(cmd, "color") != 0) {
|
||||
success = ush_cmd_ansi();
|
||||
} else if (ush_streq(cmd, "ansitest") != 0) {
|
||||
success = ush_cmd_ansitest();
|
||||
} else if (ush_streq(cmd, "memstat") != 0) {
|
||||
success = ush_cmd_memstat();
|
||||
} else if (ush_streq(cmd, "fsstat") != 0) {
|
||||
@@ -1208,3 +1333,5 @@ finalize_stats:
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user