starkernel: color the console prompt (FABRIC.md item 4.4h)
console.c's emit_prefix() now wraps [VMName] (brackets included) in FABRIC.md 4.4's locked orange (0xFFA500), and repl.c's two "ok> " call sites send FABRIC.md 4.4's locked cyan (0x55FFFF), both as real SGR escape sequences through the existing font_8x16.c/vt100.c pipeline -- 4.4b already established this needs no dependency on TTF-TEXT/4.4j. Sent through both raw_putc() (serial) and vt100_putc() (framebuffer), matching the existing dual-path pattern, so an ANSI-aware serial terminal renders the same colors as the framebuffer. Three-arch verified: amd64/aarch64/riscv64 all reach ok>, POST Failed: 0, identical dict-hashes. Color applies correctly to any VM name (confirmed via the [Hermes]-prefixed PARITY:BIRTH line in all three logs, not just [Hera]). amd64 screendump confirms the rendered colors directly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
f33353430f
commit
ae7c9429b4
@@ -196,9 +196,18 @@ static void raw_putc(char c) {
|
||||
* framebuffer (vt100_putc) -- mirrors console_putc()'s own serial/framebuffer
|
||||
* split so the prefix reaches both outputs, not serial only. No recursion
|
||||
* into console_putc itself (would re-trigger the line-start prefix check). */
|
||||
/* FABRIC.md 4.4: the bracketed VM name (brackets included) renders in
|
||||
* standard web orange, 0xFFA500 -- not in the classic 16-color ANSI
|
||||
* palette, so sent as a literal 24-bit SGR sequence rather than a palette
|
||||
* index. Same dual serial+framebuffer send pattern as the rest of this
|
||||
* function. */
|
||||
static void emit_prefix(void) {
|
||||
const char *p;
|
||||
int fb = fb_is_available();
|
||||
static const char *color_on = "\x1b[38;2;255;165;0m";
|
||||
static const char *color_off = "\x1b[39m";
|
||||
|
||||
for (p = color_on; *p; p++) { raw_putc(*p); if (fb) vt100_putc(*p); }
|
||||
raw_putc('[');
|
||||
if (fb) vt100_putc('[');
|
||||
for (p = g_active_vm_name; *p; p++) {
|
||||
@@ -207,6 +216,7 @@ static void emit_prefix(void) {
|
||||
}
|
||||
raw_putc(']');
|
||||
if (fb) vt100_putc(']');
|
||||
for (p = color_off; *p; p++) { raw_putc(*p); if (fb) vt100_putc(*p); }
|
||||
raw_putc(' ');
|
||||
if (fb) vt100_putc(' ');
|
||||
}
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
#include "starkernel/arch.h"
|
||||
#include <stdint.h>
|
||||
|
||||
/* FABRIC.md 4.4: "ok>" (including its trailing space) renders in bright
|
||||
* cyan, 0x55FFFF -- reuses FB_ANSI_PALETTE[14]. Sent as a real SGR escape
|
||||
* so it colors both the framebuffer (parsed by vt100.c's apply_sgr()) and
|
||||
* any ANSI-aware serial terminal, per 4.4c's "identical on both" goal. */
|
||||
#define SK_PROMPT_TEXT "\x1b[38;2;85;255;255mok> \x1b[39m"
|
||||
|
||||
const char lithos_version[64] = LITHOS_VERSION_STR;
|
||||
|
||||
/*===========================================================================
|
||||
@@ -187,7 +193,7 @@ int sk_repl_step(VM *vm)
|
||||
const char *vn = console_get_vm_name();
|
||||
int is_hera = (!vn || (vn[0]=='H' && vn[1]=='e' && vn[2]=='r' && vn[3]=='a' && vn[4]=='\0'));
|
||||
vm->emergency_console = is_hera ? (vm->zuse_session ? 0 : 1) : 0;
|
||||
console_puts("ok> ");
|
||||
console_puts(SK_PROMPT_TEXT);
|
||||
}
|
||||
|
||||
sk_readline(input, sizeof(input));
|
||||
@@ -234,7 +240,7 @@ void sk_repl_run(VM *vm)
|
||||
const char *vn = console_get_vm_name();
|
||||
int is_hera = (!vn || (vn[0]=='H' && vn[1]=='e' && vn[2]=='r' && vn[3]=='a' && vn[4]=='\0'));
|
||||
active->emergency_console = is_hera ? (active->zuse_session ? 0 : 1) : 0;
|
||||
console_puts("ok> ");
|
||||
console_puts(SK_PROMPT_TEXT);
|
||||
}
|
||||
|
||||
sk_readline(input, sizeof(input));
|
||||
|
||||
Reference in New Issue
Block a user