diff options
Diffstat (limited to 'src/user/highway')
-rw-r--r-- | src/user/highway/line.c | 20 | ||||
-rw-r--r-- | src/user/highway/main.c | 6 | ||||
-rw-r--r-- | src/user/highway/vars.c | 21 | ||||
-rw-r--r-- | src/user/highway/vars.h | 1 |
4 files changed, 37 insertions, 11 deletions
diff --git a/src/user/highway/line.c b/src/user/highway/line.c index cefdf92..5d1e543 100644 --- a/src/user/highway/line.c +++ b/src/user/highway/line.c @@ -17,12 +17,12 @@ static inline uint8_t hex_to_int(char ch) { } void ensure_color() { - const struct no_null_sn *fg = get_var((struct no_null_sn){.data = "_color_fg", .length = 9}); - const struct no_null_sn *bg = get_var((struct no_null_sn){.data = "_color_bg", .length = 9}); - if (fg && bg) + const struct no_null_sn *color = get_var((struct no_null_sn){.data = "_color", .length = 6}); + //fgbg + if (color) term_set_color( - (hex_to_int(fg->data[0]) << 4) | hex_to_int(fg->data[1]), - (hex_to_int(bg->data[0]) << 4) | hex_to_int(bg->data[1]) + (hex_to_int(color->data[0]) << 4) | hex_to_int(color->data[1]), + (hex_to_int(color->data[2]) << 4) | hex_to_int(color->data[3]) ); } @@ -100,13 +100,19 @@ void run_line(const char *original_line) { term_clear(); term_paint(); } + else if (blockequ(line, "color", 6)) { + new_color(); + ensure_color(); + term_paint(); + } else if (blockequ(line, "help", 5)) { term_add_sz("Highway is a command shell for Portland OS. It includes variable support and a couple of pseudo-commands. Variables are addressed by surrounding with \"$\". The following list shows each of the pseudo-commands.\n\n" " source FILE\t" "run each command in FILE\n" - " clear\t\t\t" "clear the screen\n" - " echo STRING\t" "print STRING\n" " set VAR VALUE\t" "set $VAR$ to VALUE\n" + " color\t\t\t" "new color scheme\n" + " clear\t\t\t" "clear the screen\n" " vars\t\t\t" "dump variables\n" + " echo STRING\t" "print STRING\n" " quit\t\t\t" "exit highway\n" " help\t\t\t" "show this\n"); term_paint(); diff --git a/src/user/highway/main.c b/src/user/highway/main.c index c9ceee2..59586c1 100644 --- a/src/user/highway/main.c +++ b/src/user/highway/main.c @@ -5,12 +5,10 @@ #include "cmds.h" #include "line.h" +#include "vars.h" void main(const char *arg) { -//syslogf(" this task: 0x%2h", this_task); -//syslogf(" stdio task: 0x%2h", stdio_task); -//syslogf("calling task: 0x%2h", calling_task); - + new_color(); source(*arg ? arg : "user/default.rc"); ensure_color(); diff --git a/src/user/highway/vars.c b/src/user/highway/vars.c index 82062c4..ed9fa3a 100644 --- a/src/user/highway/vars.c +++ b/src/user/highway/vars.c @@ -3,6 +3,7 @@ #include <knob/format.h> #include <knob/block.h> #include <knob/heap.h> +#include <knob/rand.h> #include <pland/pcrt.h> @@ -80,4 +81,24 @@ void dump_vars() { term_addf_no_ww("$%ns$\t= %ns\n", node->name.length, node->name.data, node->value.length, node->value.data); term_paint(); } +} + +static const char hex_digits[] = "0123456789abcdef"; +static char color[] = {'1', '0', '.', '.'}; + +static const struct no_null_sn color_name = { + .data = "_color", + .length = 6 +}; + +static const struct no_null_sn color_value = { + .data = color, + .length = 4 +}; + +void new_color() { + const uint8_t bg = gen_rand() % 0x30 + 0x38; + color[2] = hex_digits[bg >> 4]; + color[3] = hex_digits[bg & 0xf]; + set_var(color_name, color_value); }
\ No newline at end of file diff --git a/src/user/highway/vars.h b/src/user/highway/vars.h index fc4d197..eca58d4 100644 --- a/src/user/highway/vars.h +++ b/src/user/highway/vars.h @@ -13,5 +13,6 @@ const struct no_null_sn *get_var(struct no_null_sn name) __attribute__ ((pure)); void del_var(struct no_null_sn name); void dump_vars(); +void new_color(); #endif
\ No newline at end of file |