From f67188b1d85dfa4bf13929a32294e9afdaad6ecf Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Wed, 15 Apr 2020 17:50:30 +0900 Subject: [PATCH 001/102] help-browser: first pass at new help documents --- .gitignore | 1 - apps/help-browser.c | 101 ++++++++++++++---------- base/usr/share/help/0_index.trt | 5 ++ base/usr/share/help/file-browser.trt | 7 ++ base/usr/share/help/help-browser.trt | 3 + base/usr/share/help/package-manager.trt | 5 ++ base/usr/share/help/terminal.trt | 8 ++ 7 files changed, 88 insertions(+), 42 deletions(-) create mode 100644 base/usr/share/help/0_index.trt create mode 100644 base/usr/share/help/file-browser.trt create mode 100644 base/usr/share/help/help-browser.trt create mode 100644 base/usr/share/help/package-manager.trt create mode 100644 base/usr/share/help/terminal.trt diff --git a/.gitignore b/.gitignore index 85908872..bb385eb4 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,6 @@ /base/usr/bin/* /base/usr/lib/* /base/usr/share/python-demos -/base/usr/share/help # Generic /base/usr/share/aclocal diff --git a/apps/help-browser.c b/apps/help-browser.c index 2038ef4e..994626a9 100644 --- a/apps/help-browser.c +++ b/apps/help-browser.c @@ -1,7 +1,7 @@ /* vim: tabstop=4 shiftwidth=4 noexpandtab * This file is part of ToaruOS and is released under the terms * of the NCSA / University of Illinois License - see LICENSE.md - * Copyright (C) 2018 K. Lange + * Copyright (C) 2018-2020 K. Lange * * help-browser - Display documentation. * @@ -22,6 +22,7 @@ #include #define APPLICATION_TITLE "Help Browser" +#define HELP_DIR "/usr/share/help" static yutani_t * yctx; static yutani_window_t * main_window; @@ -32,19 +33,19 @@ static int application_running = 1; static gfx_context_t * contents = NULL; static sprite_t * contents_sprite = NULL; -static char * current_topic = "This is the ToaruOS Help Browser. No help document is currently loaded."; +static char * current_topic = NULL; /* Markup Renderer { */ #define BASE_X 0 #define BASE_Y 0 #define LINE_HEIGHT 20 +#define HEAD_HEIGHT 28 static gfx_context_t * nctx = NULL; static int cursor_y = 0; static int cursor_x = 0; static list_t * state = NULL; static int current_state = 0; -static int size = 16; struct Char { char c; /* TODO: unicode */ @@ -66,6 +67,13 @@ static int state_to_font(int current_state) { return SDF_FONT_THIN; } +static int current_size(void) { + if (current_state & (1 << 2)) { + return 24; + } + return 16; +} + static int buffer_width(list_t * buffer) { int out = 0; foreach(node, buffer) { @@ -73,7 +81,7 @@ static int buffer_width(list_t * buffer) { char tmp[2] = {c->c, '\0'}; - out += draw_sdf_string_width(tmp, size, state_to_font(c->state)); + out += draw_sdf_string_width(tmp, current_size(), state_to_font(c->state)); } return out; } @@ -84,7 +92,7 @@ static int draw_buffer(list_t * buffer) { node_t * node = list_dequeue(buffer); struct Char * c = node->value; char tmp[2] = { c->c, '\0' }; - x += draw_sdf_string(nctx, cursor_x + x, cursor_y, tmp, size, 0xFF000000, state_to_font(c->state)); + x += draw_sdf_string(nctx, cursor_x + x, cursor_y, tmp, current_size(), 0xFF000000, state_to_font(c->state)); free(c); free(node); } @@ -92,10 +100,18 @@ static int draw_buffer(list_t * buffer) { return x; } +static int current_line_height(void) { + if (current_state & (1 << 2)) { + return HEAD_HEIGHT; + } else { + return LINE_HEIGHT; + } +} + static void write_buffer(void) { if (buffer_width(buffer) + cursor_x > nctx->width) { cursor_x = BASE_X; - cursor_y += LINE_HEIGHT; + cursor_y += current_line_height(); } cursor_x += draw_buffer(buffer); } @@ -107,10 +123,13 @@ static int parser_open(struct markup_state * self, void * user, struct markup_ta } else if (!strcmp(tag->name, "i")) { list_insert(state, (void*)current_state); current_state |= (1 << 1); + } else if (!strcmp(tag->name, "h1")) { + list_insert(state, (void*)current_state); + current_state |= (1 << 2); } else if (!strcmp(tag->name, "br")) { write_buffer(); cursor_x = BASE_X; - cursor_y += LINE_HEIGHT; + cursor_y += current_line_height(); } markup_free_tag(tag); return 0; @@ -125,6 +144,13 @@ static int parser_close(struct markup_state * self, void * user, char * tag_name node_t * nstate = list_pop(state); current_state = (int)nstate->value; free(nstate); + } else if (!strcmp(tag_name, "h1")) { + write_buffer(); + cursor_x = BASE_X; + cursor_y += current_line_height(); + node_t * nstate = list_pop(state); + current_state = (int)nstate->value; + free(nstate); } return 0; } @@ -132,7 +158,7 @@ static int parser_close(struct markup_state * self, void * user, char * tag_name static int parser_data(struct markup_state * self, void * user, char * data) { char * c = data; while (*c) { - if (*c == ' ') { + if (*c == ' ' || *c == '\n') { if (buffer->length) { write_buffer(); } @@ -245,36 +271,30 @@ static void resize_finish(int w, int h) { static void navigate(const char * t) { - if (!strcmp(t,"file-browser.trt")) { - current_topic = - "File Browser
" - "The File Browser shows files. Double click to navigate through the file system."; - } else if (!strcmp(t,"terminal.trt")) { - current_topic = - "Terminal
" - "It's a terminal emulator. Supports a large set of xterm escapes, plus 24-bit color."; - } else if (!strcmp(t,"help_browser.trt")) { - current_topic = - "Help Browser
" - "A bit meta, reading about the Help Browser from within the Help Browser...
" - "This is an incomplete port of the original Python Help Browser, which was, effectively " - "a very bad web browser, built off of the expanding text label widget library."; - } else if (!strcmp(t,"package-manager.trt")) { - current_topic = - "Package Manager
" - "Install additional third-party software through packages from the ToaruOS Package Repository. " - "Packages can be installed by double-clicking. Dependencies will automatically be installed. " - "At this time it is not possible to remove packages."; - } else if (!strcmp(t,"0_index.trt")) { - current_topic = - "Welcome!
" - "Welcome to ToaruOS. This Help Browser is still a bit experimental."; - } else if (!strcmp(t,"special:contents")) { - current_topic = - "A list of topics should go here, but, alas..."; + if (current_topic) free(current_topic); + + char file_path[1024]; + + if (t[0] == '/') { + sprintf(file_path, "%s", t); } else { - current_topic = - "No help document exists for this topic."; + sprintf(file_path, "%s/%s", HELP_DIR, t); + } + + FILE * f = fopen(file_path, "r"); + + if (!f) { + current_topic = strdup("File not found."); + } else { + fseek(f, 0, SEEK_END); + size_t size = ftell(f); + fseek(f, 0, SEEK_SET); + + current_topic = malloc(size+1); + fread(current_topic, 1, size, f); + current_topic[size] = '\0'; + + fclose(f); } reinitialize_contents(); @@ -301,7 +321,7 @@ static void _menu_action_forward(struct MenuEntry * entry) { static void _menu_action_about(struct MenuEntry * entry) { /* Show About dialog */ char about_cmd[1024] = "\0"; - strcat(about_cmd, "about \"About Help Browser\" /usr/share/icons/48/help.bmp \"ToaruOS Help Browser\" \"(C) 2018 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); + strcat(about_cmd, "about \"About Help Browser\" /usr/share/icons/48/help.bmp \"ToaruOS Help Browser\" \"(C) 2018-2020 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); char coords[100]; sprintf(coords, "%d %d &", (int)main_window->x + (int)main_window->width / 2, (int)main_window->y + (int)main_window->height / 2); strcat(about_cmd, coords); @@ -340,7 +360,7 @@ int main(int argc, char * argv[]) { menu_set_insert(menu_bar.set, "go", m); m = menu_create(); - menu_insert(m, menu_create_normal("help","help_browser.trt","Contents",_menu_action_navigate)); + menu_insert(m, menu_create_normal("help","help-browser.trt","Contents",_menu_action_navigate)); menu_insert(m, menu_create_separator()); menu_insert(m, menu_create_normal("star",NULL,"About " APPLICATION_TITLE,_menu_action_about)); menu_set_insert(menu_bar.set, "help", m); @@ -348,8 +368,7 @@ int main(int argc, char * argv[]) { if (argc > 1) { navigate(argv[1]); } else { - reinitialize_contents(); - redraw_window(); + navigate("0_index.trt"); } while (application_running) { diff --git a/base/usr/share/help/0_index.trt b/base/usr/share/help/0_index.trt new file mode 100644 index 00000000..44775624 --- /dev/null +++ b/base/usr/share/help/0_index.trt @@ -0,0 +1,5 @@ +

Welcome!

+ +This is a demo file. It contains text with markup!
+ +It is XML-formatted, I guess? diff --git a/base/usr/share/help/file-browser.trt b/base/usr/share/help/file-browser.trt new file mode 100644 index 00000000..20ca655b --- /dev/null +++ b/base/usr/share/help/file-browser.trt @@ -0,0 +1,7 @@ +

File Browser

+ +Provides a graphical representation of the file system.
+ +Double click to navigate through directories or open files.
+ +A right-click context menu provides additional options. diff --git a/base/usr/share/help/help-browser.trt b/base/usr/share/help/help-browser.trt new file mode 100644 index 00000000..df4cb8a9 --- /dev/null +++ b/base/usr/share/help/help-browser.trt @@ -0,0 +1,3 @@ +

Help Browser

+ +Displays HTML-escape markup files describing applications. diff --git a/base/usr/share/help/package-manager.trt b/base/usr/share/help/package-manager.trt new file mode 100644 index 00000000..8911599f --- /dev/null +++ b/base/usr/share/help/package-manager.trt @@ -0,0 +1,5 @@ +

Package Manager

+ +Graphical interface to the msk command-line utility.
+ +Double click packages to install them. Dependencies will be installed automatically. diff --git a/base/usr/share/help/terminal.trt b/base/usr/share/help/terminal.trt new file mode 100644 index 00000000..e36c4352 --- /dev/null +++ b/base/usr/share/help/terminal.trt @@ -0,0 +1,8 @@ +

Terminal

+ +Terminal emulator providing extensive ANSI escape sequence support.
+ +Supports most xterm-compatible escape squences, as well as 24-bit color.
+ +Text display supports anti-aliased (using either the native SDF renderer, or +the Freetype backend, if available) as well as bitmap fonts. From 8fb8a153b818171f2061ef92f229504c30aeff85 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 16 Apr 2020 20:08:29 +0900 Subject: [PATCH 002/102] panel: weather widget is double size --- apps/panel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/panel.c b/apps/panel.c index 824e487d..024f7eee 100644 --- a/apps/panel.c +++ b/apps/panel.c @@ -310,7 +310,7 @@ static void update_weather_status(void) { if (widgets_weather_enabled) { widgets_weather_enabled = 0; /* Unshow */ - widgets_width -= WIDGET_WIDTH; + widgets_width -= 2*WIDGET_WIDTH; } return; } @@ -318,7 +318,7 @@ static void update_weather_status(void) { weather_status_valid = 1; if (!widgets_weather_enabled) { widgets_weather_enabled = 1; - widgets_width += WIDGET_WIDTH; + widgets_width += 2*WIDGET_WIDTH; } if (weather_title_str) free(weather_title_str); From 8f7cda92fac8fa592898ffade5a0d556f07549a8 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 21 Apr 2020 11:04:26 +0900 Subject: [PATCH 003/102] inflate: Add DEFLATE decompressor and gunzip util --- apps/gunzip.c | 98 +++++++ base/usr/include/toaru/inflate.h | 37 +++ lib/inflate.c | 485 +++++++++++++++++++++++++++++++ util/auto-dep.py | 1 + 4 files changed, 621 insertions(+) create mode 100644 apps/gunzip.c create mode 100644 base/usr/include/toaru/inflate.h create mode 100644 lib/inflate.c diff --git a/apps/gunzip.c b/apps/gunzip.c new file mode 100644 index 00000000..70f5ac0a --- /dev/null +++ b/apps/gunzip.c @@ -0,0 +1,98 @@ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * This file is part of ToaruOS and is released under the terms + * of the NCSA / University of Illinois License - see LICENSE.md + * Copyright (C) 2020 K. Lange + * + * gunzip - decompress gzip-compressed payloads + */ +#include +#include +#include +#include +#include + +#include + +static uint8_t _get(struct inflate_context * ctx) { + return fgetc(ctx->input_priv); +} + +static void _write(struct inflate_context * ctx, unsigned int sym) { + fputc(sym, ctx->output_priv); +} + +static int usage(int argc, char * argv[]) { + fprintf(stderr, + "gunzip - decompress gzip-compressed payloads\n" + "\n" + "usage: %s [-c] name...\n" + "\n" + " -c \033[3mwrite to stdout; implies -k\033[0m\n" + " -k \033[3mkeep original files unchanged\033[0m\n" + "\n", argv[0]); + return 1; +} + +int main(int argc, char * argv[]) { + int to_stdout = 0; + int keep = 0; + + int opt; + while ((opt = getopt(argc, argv, "ck")) != -1) { + switch (opt) { + case 'c': + to_stdout = 1; + keep = 1; + break; + case 'k': + keep = 1; + break; + default: + fprintf(stderr, "%s: unrecognized option '%c'\n", argv[0], opt); + break; + } + } + + if (optind >= argc) { + return usage(argc, argv); + } + + FILE * f = fopen(argv[optind],"r"); + + if (!f) { + fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno)); + return 1; + } + + if (!to_stdout && strcmp(&argv[optind][strlen(argv[optind])-3],".gz")) { + fprintf(stderr, "%s: %s: Don't know how to interpret file name\n", argv[0], argv[optind]); + return 1; + } + + struct inflate_context ctx; + ctx.input_priv = f; + if (to_stdout) { + ctx.output_priv = stdout; + } else { + char * tmp = strdup(argv[optind]); + tmp[strlen(argv[optind])-3] = '\0'; + ctx.output_priv = fopen(tmp,"w"); + free(tmp); + } + ctx.get_input = _get; + ctx.write_output = _write; + ctx.ring = NULL; /* Use the global one */ + + gzip_decompress(&ctx); + + if (!to_stdout) { + fclose(ctx.output_priv); + } + + if (!keep) { + unlink(argv[optind]); + } + + return 0; +} + diff --git a/base/usr/include/toaru/inflate.h b/base/usr/include/toaru/inflate.h new file mode 100644 index 00000000..5f532e05 --- /dev/null +++ b/base/usr/include/toaru/inflate.h @@ -0,0 +1,37 @@ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * This file is part of ToaruOS and is released under the terms + * of the NCSA / University of Illinois License - see LICENSE.md + * Copyright (C) 2020 K. Lange + */ + +#pragma once + +#include <_cheader.h> +#include + +_Begin_C_Header + +struct huff_ring; + +struct inflate_context { + + /* Consumer-private pointers for input/output storage (eg. FILE *) */ + void * input_priv; + void * output_priv; + + /* Methods for reading / writing from the input /output */ + uint8_t (*get_input)(struct inflate_context * ctx); + void (*write_output)(struct inflate_context * ctx, unsigned int sym); + + /* Bit buffer, which holds at most 8 bits from the input */ + int bit_buffer; + int buffer_size; + + /* Output ringbuffer for backwards lookups */ + struct huff_ring * ring; +}; + +int deflate_decompress(struct inflate_context * ctx); +int gzip_decompress(struct inflate_context * ctx); + +_End_C_Header diff --git a/lib/inflate.c b/lib/inflate.c new file mode 100644 index 00000000..ba21aca1 --- /dev/null +++ b/lib/inflate.c @@ -0,0 +1,485 @@ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * This file is part of ToaruOS and is released under the terms + * of the NCSA / University of Illinois License - see LICENSE.md + * Copyright (C) 2020 K. Lange + * + * libtoaru_inflate: Methods for decompressing DEFLATE and gzip payloads. + */ +#include +#include + +#ifndef _BOOT_LOADER +#include +#endif + +/** + * Decoded Huffman table + */ +struct huff { + uint16_t counts[16]; /* Number of symbols of each length */ + uint16_t symbols[288]; /* Ordered symbols */ +}; + +/** + * 32K ringbuffer for backwards lookup + */ +struct huff_ring { + size_t pointer; + uint8_t data[32768]; +}; + +/** + * Fixed Huffman code tables, generated later. + */ +struct huff fixed_lengths; +struct huff fixed_dists; + +/** + * Read a little-endian short from the input. + */ +static uint16_t read_16le(struct inflate_context * ctx) { + uint16_t a, b; + a = ctx->get_input(ctx); + b = ctx->get_input(ctx); + return (a << 0) | (b << 8); +} + +/** + * Read a single bit from the source. + * Fills the byte buffer with one byte when it runs out. + */ +static uint8_t read_bit(struct inflate_context * ctx) { + + /* When we run out of bits... */ + if (ctx->buffer_size == 0) { + /* Refill from the next input byte */ + ctx->bit_buffer = ctx->get_input(ctx); + /* And restore bit buffer size to 8 bits */ + ctx->buffer_size = 8; + } + + /* Get the next available bit */ + int out = ctx->bit_buffer & 1; + + /* Shift the bit buffer forward */ + ctx->bit_buffer >>= 1; + + /* There is now one less bit available */ + ctx->buffer_size--; + + return out; +} + +/** + * Read multible bits, in bit order, from the source. + */ +static uint32_t read_bits(struct inflate_context * ctx, unsigned int count) { + uint32_t out = 0; + for (unsigned int bit = 0; bit < count; bit++) { + /* Read one bit at a time, from least to most significant */ + out |= (read_bit(ctx) << bit); + } + return out; +} + +/** + * Build a Huffman table from an array of lengths. + */ +static void build_huffman(uint8_t * lengths, size_t size, struct huff * out) { + + uint16_t offsets[16]; + unsigned int count = 0; + + /* Zero symbol counts */ + for (unsigned int i = 0; i < 16; ++i) out->counts[i] = 0; + + /* Count symbols */ + for (unsigned int i = 0; i < size; ++i) out->counts[lengths[i]]++; + + /* Special case... */ + out->counts[0] = 0; + + /* Figure out offsets */ + for (unsigned int i = 0; i < 16; ++i) { + offsets[i] = count; + count += out->counts[i]; + } + + /* Build symbol ordering */ + for (unsigned int i = 0; i < size; ++i) { + if (lengths[i]) out->symbols[offsets[lengths[i]]++] = i; + } +} + +/** + * Build the fixed Huffman tables + */ +static void build_fixed(void) { + /* From 3.2.6: + * Lit Value Bits Codes + * --------- ---- ----- + * 0 - 143 8 00110000 through + * 10111111 + * 144 - 255 9 110010000 through + * 111111111 + * 256 - 279 7 0000000 through + * 0010111 + * 280 - 287 8 11000000 through + * 11000111 + */ + uint8_t lengths[288]; + for (int i = 0; i < 144; ++i) lengths[i] = 8; + for (int i = 144; i < 256; ++i) lengths[i] = 9; + for (int i = 256; i < 280; ++i) lengths[i] = 7; + for (int i = 280; i < 288; ++i) lengths[i] = 8; + build_huffman(lengths, 288, &fixed_lengths); + + /* Continued from 3.2.6: + * Distance codes 0-31 are represented by (fixed-length) 5-bit + * codes, with possible additional bits as shown in the table + * shown in Paragraph 3.2.5, above. Note that distance codes 30- + * 31 will never actually occur in the compressed data. + */ + for (int i = 0; i < 30; ++i) lengths[i] = 5; + build_huffman(lengths, 30, &fixed_dists); +} + + +/** + * Decode a symbol from the source using a Huffman table. + */ +static int decode(struct inflate_context * ctx, struct huff * huff) { + int count = 0, cur = 0; + for (int i = 1; cur >= 0; i++) { + cur = (cur << 1) | read_bit(ctx); /* Shift */ + count += huff->counts[i]; + cur -= huff->counts[i]; + } + return huff->symbols[count + cur]; +} + +/** + * Emit one byte to the output, maintaining the ringbuffer. + * The ringbuffer ensures we can always look back 32K bytes + * while keeping output streaming. + */ +static void emit(struct inflate_context * ctx, unsigned char byte) { + if (ctx->ring->pointer == 32768) { + ctx->ring->pointer = 0; + } + + ctx->ring->data[ctx->ring->pointer] = byte; + ctx->write_output(ctx, byte); + ctx->ring->pointer++; +} + +/** + * Look backwards in the output ring buffer. + */ +static uint8_t peek(struct inflate_context * ctx, int offset) { + return ctx->ring->data[(ctx->ring->pointer - offset) % 32768]; +} + +/** + * Decompress a block of Huffman-encoded data. + */ +static int inflate(struct inflate_context * ctx, struct huff * huff_len, struct huff * huff_dist) { + + /* These are the extra bits for lengths from the tables in section 3.2.5 + * Extra Extra Extra + * Code Bits Length(s) Code Bits Lengths Code Bits Length(s) + * ---- ---- ------ ---- ---- ------- ---- ---- ------- + * 257 0 3 267 1 15,16 277 4 67-82 + * 258 0 4 268 1 17,18 278 4 83-98 + * 259 0 5 269 2 19-22 279 4 99-114 + * 260 0 6 270 2 23-26 280 4 115-130 + * 261 0 7 271 2 27-30 281 5 131-162 + * 262 0 8 272 2 31-34 282 5 163-194 + * 263 0 9 273 3 35-42 283 5 195-226 + * 264 0 10 274 3 43-50 284 5 227-257 + * 265 1 11,12 275 3 51-58 285 0 258 + * 266 1 13,14 276 3 59-66 + */ + static const uint16_t lens[] = { + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, + 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 + }; + static const uint16_t lext[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, + 4, 5, 5, 5, 5, 0 + }; + + /* Extra bits for distances.... + * Extra Extra Extra + * Code Bits Dist Code Bits Dist Code Bits Distance + * ---- ---- ---- ---- ---- ------ ---- ---- -------- + * 0 0 1 10 4 33-48 20 9 1025-1536 + * 1 0 2 11 4 49-64 21 9 1537-2048 + * 2 0 3 12 5 65-96 22 10 2049-3072 + * 3 0 4 13 5 97-128 23 10 3073-4096 + * 4 1 5,6 14 6 129-192 24 11 4097-6144 + * 5 1 7,8 15 6 193-256 25 11 6145-8192 + * 6 2 9-12 16 7 257-384 26 12 8193-12288 + * 7 2 13-16 17 7 385-512 27 12 12289-16384 + * 8 3 17-24 18 8 513-768 28 13 16385-24576 + * 9 3 25-32 19 8 769-1024 29 13 24577-32768 + */ + static const uint16_t dists[] = { + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, + 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 + }; + static const uint16_t dext[] = { + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, + 10, 11, 11, 12, 12, 13, 13 + }; + + while (1) { + int symbol = decode(ctx, huff_len); + + if (symbol == 256) { + break; + } + + if (symbol < 256) { + emit(ctx, symbol); + } else if (symbol == 256) { + /* "The literal/length symbol 256 (end of data), ..." */ + break; + } else { + int length, distance, offset; + + symbol -= 257; + length = read_bits(ctx, lext[symbol]) + lens[symbol]; + distance = decode(ctx, huff_dist); + offset = read_bits(ctx, dext[distance]) + dists[distance]; + + for (int i = 0; i < length; ++i) { + uint8_t b = peek(ctx, offset); + emit(ctx, b); + } + } + } + + return 0; +} + +/** + * Decode a dynamic Huffman block. + */ +static void decode_huffman(struct inflate_context * ctx) { + + /* Ordering of code length codes: + * (HCLEN + 4) x 3 bits: code lengths for the code length + * alphabet given just above, in the order: ... + */ + static const uint8_t clens[] = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + }; + + unsigned int literals, distances, clengths; + uint8_t lengths[320] = {0}; + + literals = 257 + read_bits(ctx, 5); /* 5 Bits: HLIT ... 257 */ + distances = 1 + read_bits(ctx, 5); /* 5 Bits: HDIST ... 1 */ + clengths = 4 + read_bits(ctx, 4); /* 4 Bits: HCLEN ... 4 */ + + /* (HCLEN + 4) x 3 bits... */ + for (unsigned int i = 0; i < clengths; ++i) { + lengths[clens[i]] = read_bits(ctx, 3); + } + + struct huff codes; + build_huffman(lengths, 19, &codes); + + /* Decode symbols: + * HLIT + 257 code lengths for the literal/length alphabet... + * HDIST + 1 code lengths for the distance alphabet... + */ + unsigned int count = 0; + while (count < literals + distances) { + int symbol = decode(ctx, &codes); + + if (symbol < 16) { + /* 0 - 15: Represent code lengths of 0-15 */ + lengths[count++] = symbol; + } else if (symbol < 19) { + int rep = 0, length; + if (symbol == 16) { + /* 16: Copy the previous code length 3-6 times */ + rep = lengths[count-1]; + length = read_bits(ctx, 2) + 3; /* The next 2 bits indicate repeat length */ + } else if (symbol == 17) { + /* Repeat a code length of 0 for 3 - 10 times */ + length = read_bits(ctx, 3) + 3; /* 3 bits of length */ + } else if (symbol == 18) { + /* Repeat a code length of 0 for 11 - 138 times */ + length = read_bits(ctx, 7) + 11; /* 7 bits of length */ + } + do { + lengths[count++] = rep; + length--; + } while (length); + } else { + break; + } + } + + /* Build tables from lenghts decoded above */ + struct huff huff_len; + build_huffman(lengths, literals, &huff_len); + struct huff huff_dist; + build_huffman(lengths + literals, distances, &huff_dist); + + inflate(ctx, &huff_len, &huff_dist); +} + +/** + * Decode an uncompressed block. + */ +static int uncompressed(struct inflate_context * ctx) { + /* Reset byte alignment */ + ctx->bit_buffer = 0; + ctx->buffer_size = 0; + + /* "The rest of the block consists of the following information:" + * 0 1 2 3 4... + * +---+---+---+---+================================+ + * | LEN | NLEN |... LEN bytes of literal data...| + * +---+---+---+---+================================+ + */ + uint16_t len = read_16le(ctx); /* "the number of data bytes in the block" */ + uint16_t nlen = read_16le(ctx); /* "the one's complement of LEN */ + + /* Sanity check - does the ones-complement length actually match? */ + if ((nlen & 0xFFFF) != (~len & 0xFFFF)) { + return 1; + } + + /* Emit LEN bytes from the source to the output */ + for (int i = 0; i < len; ++i) { + emit(ctx, ctx->get_input(ctx)); + } + + return 0; +} + +static struct huff_ring data = {0, {0}}; + +/** + * Decompress DEFLATE-compressed data. + */ +int deflate_decompress(struct inflate_context * ctx) { + ctx->bit_buffer = 0; + ctx->buffer_size = 0; + + build_fixed(); + + if (!ctx->ring) { + ctx->ring = &data; + } + + /* read compressed data */ + while (1) { + /* Read bit */ + + int is_final = read_bit(ctx); + int type = read_bits(ctx, 2); + + switch (type) { + case 0x00: /* BTYPE=00 Non-compressed blocks */ + uncompressed(ctx); + break; + case 0x01: /* BYTPE=01 Compressed with fixed Huffman codes */ + inflate(ctx, &fixed_lengths, &fixed_dists); + break; + case 0x02: /* BTYPE=02 Compression with dynamic Huffman codes */ + decode_huffman(ctx); + break; + case 0x03: + return 1; + } + + if (is_final) { + break; + } + } + + return 0; +} + +#define GZIP_FLAG_TEXT (1 << 0) +#define GZIP_FLAG_HCRC (1 << 1) +#define GZIP_FLAG_EXTR (1 << 2) +#define GZIP_FLAG_NAME (1 << 3) +#define GZIP_FLAG_COMM (1 << 4) + +static unsigned int _read_32be(struct inflate_context * ctx) { + unsigned int a, b, c, d; + a = ctx->get_input(ctx); + b = ctx->get_input(ctx); + c = ctx->get_input(ctx); + d = ctx->get_input(ctx); + + return (a << 24) | (b << 16) | (c << 8) | (d << 0); +} + +static unsigned int _read_16be(struct inflate_context * ctx) { + unsigned int a, b; + a = ctx->get_input(ctx); + b = ctx->get_input(ctx); + return (a << 8) | (b << 0); +} + +int gzip_decompress(struct inflate_context * ctx) { + + /* Read gzip headers */ + if (ctx->get_input(ctx) != 0x1F) return 1; + if (ctx->get_input(ctx) != 0x8B) return 1; + + unsigned int flags = ctx->get_input(ctx); + + /* Read mtime */ + unsigned int mtime = _read_32be(ctx); + (void)mtime; + + /* Read extra flags */ + unsigned int xflags = ctx->get_input(ctx); + (void)xflags; + + /* Read and discord OS flag */ + unsigned int os = ctx->get_input(ctx); + (void)os; + + /* Extra bytes */ + if (flags & GZIP_FLAG_EXTR) { + unsigned short size = _read_16be(ctx); + for (unsigned int i = 0; i < size; ++i) ctx->get_input(ctx); + } + + if (flags & GZIP_FLAG_NAME) { + unsigned int c; + while ((c = ctx->get_input(ctx)) != 0); + } + + if (flags & GZIP_FLAG_COMM) { + unsigned int c; + while ((c = ctx->get_input(ctx)) != 0); + } + + unsigned int crc16 = 0; + if (flags & GZIP_FLAG_HCRC) { + crc16 = _read_16be(ctx); + } + (void)crc16; + + deflate_decompress(ctx); + + /* Read CRC and decompressed size from end of input */ + unsigned int crc32 = _read_32be(ctx); + unsigned int dsize = _read_32be(ctx); + + (void)crc32; + (void)dsize; + + return 0; +} diff --git a/util/auto-dep.py b/util/auto-dep.py index dbe00f04..b18be993 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -19,6 +19,7 @@ class Classifier(object): '': (None, '-ltoaru_pex', []), '': (None, '-ltoaru_auth', []), '': (None, '-ltoaru_graphics', []), + '': (None, '-ltoaru_inflate', []), '': (None, '-ltoaru_drawstring', ['']), '': (None, '-ltoaru_jpeg', ['']), '': (None, '-ltoaru_rline', ['']), From 9b0e35eb3e40c6477c3703a6694a2b5332cdaffc Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 21 Apr 2020 16:35:46 +0900 Subject: [PATCH 004/102] make: Disable serial console in BIOS for 'make headless' --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8c85e9ca..f2c0c615 100644 --- a/Makefile +++ b/Makefile @@ -331,7 +331,8 @@ fast: image.iso headless: image.iso @qemu-system-i386 -cdrom $< ${QEMU_ARGS} \ -nographic -no-reboot \ - -fw_cfg name=opt/org.toaruos.bootmode,string=headless + -fw_cfg name=opt/org.toaruos.bootmode,string=headless \ + -fw_cfg name=etc/sercon-port,string=0 .PHONY: shell shell: image.iso From 8e74bee6d038d5d1efcd0604f63d0160b7820275 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 21 Apr 2020 16:36:13 +0900 Subject: [PATCH 005/102] png: First pass at a PNG decoder (only 8bpp rgba, non-interlaced for now) --- apps/imgviewer.c | 3 + apps/png-test.c | 9 + base/opt/logo_login.png | Bin 0 -> 9804 bytes base/usr/include/toaru/png.h | 11 ++ lib/png.c | 357 +++++++++++++++++++++++++++++++++++ util/auto-dep.py | 1 + 6 files changed, 381 insertions(+) create mode 100644 apps/png-test.c create mode 100644 base/opt/logo_login.png create mode 100644 base/usr/include/toaru/png.h create mode 100644 lib/png.c diff --git a/apps/imgviewer.c b/apps/imgviewer.c index 6c1d54a7..4ac6b0b3 100644 --- a/apps/imgviewer.c +++ b/apps/imgviewer.c @@ -26,6 +26,7 @@ #include #include #include +#include /* Pointer to graphics memory */ static yutani_t * yctx; @@ -153,6 +154,8 @@ int main(int argc, char * argv[]) { int status; if (strstr(argv[optind],".jpg")) { status = load_sprite_jpg(&img, argv[optind]); + } else if (strstr(argv[optind],".png")) { + status = load_sprite_png(&img, argv[optind]); } else { status = load_sprite(&img, argv[optind]); } diff --git a/apps/png-test.c b/apps/png-test.c new file mode 100644 index 00000000..3a5b364f --- /dev/null +++ b/apps/png-test.c @@ -0,0 +1,9 @@ +#include + +#include +#include + +int main(int argc, char * argv[]) { + sprite_t sprite; + return load_sprite_png(&sprite,"/opt/logo_login.png"); +} diff --git a/base/opt/logo_login.png b/base/opt/logo_login.png new file mode 100644 index 0000000000000000000000000000000000000000..05e49c93e0569a775b55f1340940cb47c04ebaf8 GIT binary patch literal 9804 zcmV-SCbQXzP)sNoMcv>AqX7=l$cH zs#|sYc26&NlIb|#=egZ?tvXfpt>5|WM@T7I4Z`)$03HXNsULd_&n@8lz@7T>AHcsz z&q-F@=xLnB0K{rU6t4d~;2L0T9ozgK@N(dz(sNd4`DvVn#)?D~u3rHT0aHSPkqShr z{u?QX6a<3Qkm_MVY?Ze4e}Sh;&k0WcVVuTRhqcOQyMQTxv6h9A2#}!vDCAEC0EsE- zH6*bu0iFoF8hGi5$9x(OLKv%j*2tf&ae_5tL32@1>51&E7Yo<_(Txu7H2&vcH6qRd zF+i`D64X+nN{SS#{6eGN5g19n{a0^(n5Xez$BB%Ue*vCUdQ(CrG^lrs6{c$SIhKP3bw|NJoAerwoMaH-K}1CFwbLZ)6**>4*T&0-gsvO7G|*1og0*V#b0>u(EhG z6M-hB1zZ5!xRC*##;FV8`d0$a1)dHx^?TO=e;_^QKi0La6ZsJbc037u6nKo0!uW#4 zN)izX$G4@K9rIM_IUionz)s`TgmC>?lz@6JaLEc^OM$0J&-uujx4Rx9>VaGaTn{j| zXkx~N4+n_2G@X)~0Q{!(oWESxj!xsGK)C)k;8##&d9U=GBPaO&6lzBNG5xrlf^A`R zBPvH**vC2~HJf1H6iK53&;x#4dd^qZG_Lg$Q4j7Au%q5K%G2`z5f``R#?5o2=e%d# zJ35V#Lb(3V0Ph2)^;=!wDbjO3sXwoxRIrE8Ctrzp03wmta~

EzEXE@tRB9q;<(o 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 +#include + +_Begin_C_Header + +extern int load_sprite_png(sprite_t * sprite, char * filename); + +_End_C_Header + diff --git a/lib/png.c b/lib/png.c new file mode 100644 index 00000000..12d96632 --- /dev/null +++ b/lib/png.c @@ -0,0 +1,357 @@ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * This file is part of ToaruOS and is released under the terms + * of the NCSA / University of Illinois License - see LICENSE.md + * Copyright (C) 2020 K. Lange + * + * libtoaru_png: PNG decoder + */ +#include +#include + +#include +#include + +/** + * Read 32-bit big-endian value from file. + */ +unsigned int read_32(FILE * f) { + unsigned char a = fgetc(f); + unsigned char b = fgetc(f); + unsigned char c = fgetc(f); + unsigned char d = fgetc(f); + return (a << 24) | (b << 16) | (c << 8) | d; +} + +/** + * Read 16-bit big-endian value from file. + */ +unsigned int read_16(FILE * f) { + unsigned char a = fgetc(f); + unsigned char b = fgetc(f); + return (a << 8) | b; +} + +/** + * (Debug) Return a chunk type as a string. + */ +__attribute__((unused)) +static char* reorder_type(unsigned int type) { + static char out[4]; + out[0] = (type >> 24) & 0xFF; + out[1] = (type >> 16) & 0xFF; + out[2] = (type >> 8) & 0xFF; + out[3] = (type >> 0) & 0xFF; + return out; +} + +/** + * Internal PNG decoder state for use with inflate. + */ +struct png_ctx { + FILE * f; /* File being decoded. */ + sprite_t * sprite; /* Sprite being generated. */ + int y; /* Cursor pointers for writing out bitmap data */ + int x; + char buffer[4]; /* A buffer to hold a pixel's worth of data until it can + be written out to the image with the right filter. */ + int buf_off; /* How much data is in the above buffer */ + int seen_ihdr; /* Whether the IHDR was seen; for error handling */ + + unsigned int width; /* Image width (dup from sprite) */ + unsigned int height; /* Image height (dup from sprite) */ + int bit_depth; /* Bit depth of the image */ + int color_type; /* PNG color type */ + int compression; /* Compression method (must be 0) */ + int filter; /* Filter method (must be 0) */ + int interlace; /* Interlace method (we only support 0) */ + + unsigned int size; /* Remaining IDAT chunk size */ + int sf; /* Current scanline filter type */ +}; + +/* PNG chunk types */ +#define PNG_IHDR 0x49484452 +#define PNG_IDAT 0x49444154 +#define PNG_IEND 0x49454e44 + +/* PNG filter types */ +#define PNG_FILTER_NONE 0 +#define PNG_FILTER_SUB 1 +#define PNG_FILTER_UP 2 +#define PNG_FILTER_AVG 3 +#define PNG_FILTER_PAETH 4 + +/** + * Read a byte from the IDAT chunk. + * Tracks when an IDAT has been read to completion and + * can load the next IDAT (or bail of this was the last one) + */ +static uint8_t _get(struct inflate_context * ctx) { + struct png_ctx * c = (ctx->input_priv); + if (c->size == 0) { + + /* Read the CRC32 from the end of this IDAT */ + unsigned int check = read_32(c->f); + (void)check; /* ... and in theory check it... */ + + /* Read the next IDAT chunk header */ + unsigned int size = read_32(c->f); + unsigned int type = read_32(c->f); + + if (type != PNG_IDAT) { + /* This isn't an IDAT? That's wrong! */ + fprintf(stderr, "And this is the wrong type (0x%x), I'm just bailing.\n", type); + fprintf(stderr, "size read was 0x%x\n", size); + exit(0); + } + } + + /* Read one byte from the input */ + c->size--; + int i = fgetc(c->f); + + /* If this was EOF, we should handle that error case... probably... */ + if (i < 0) fprintf(stderr, "This is probably not good.\n"); + + return i; +} + +/** + * Paeth predictor + * Described in section 6.6 of the RFC + */ +#define ABS(a) ((a >= 0) ? (a) : -(a)) +static int paeth(int a, int b, int c) { + int p = a + b - c; + int pa = ABS(p - a); + int pb = ABS(p - b); + int pc = ABS(p - c); + if (pa <= pb && pa <= pc) return a; + else if (pb <= pc) return b; + return c; +} + +/** + * Handle decompressed output from the inflater + * + * Writes pixel data to the image, and applies relevant filters. + */ +static void _write(struct inflate_context * ctx, unsigned int sym) { + struct png_ctx * c = (ctx->input_priv); + + /* Put this byte into the short buffer */ + c->buffer[c->buf_off] = sym; + c->buf_off++; + + /* If this is the beginning of a scanline... */ + if (c->x == -1 && c->buf_off == 1) { + /* Then this is the scanline filter type */ + c->sf = sym; + + /* Reset the buffer, advance to the beginning of the actual scanline */ + c->x = 0; + c->buf_off = 0; + } else if (c->buf_off == 4) { + /* + * Obtain pixel data from short buffer; + * For color type 6, this is always in R G B A order in the + * bytestream, so we don't have to worry about subpixel ordering + * or weird color masks. + */ + unsigned int r = c->buffer[0]; + unsigned int g = c->buffer[1]; + unsigned int b = c->buffer[2]; + unsigned int a = c->buffer[3]; + + /* Apply filters */ + if (c->sf == PNG_FILTER_SUB) { + /* Add raw value to the pixel on the left */ + if (c->x > 0) { + uint32_t left = SPRITE((c->sprite), (c->x - 1), (c->y)); + r += _RED(left); + g += _GRE(left); + b += _BLU(left); + a += _ALP(left); + } + } else if (c->sf == PNG_FILTER_UP) { + /* Add raw value to the pixel above */ + if (c->y > 0) { + uint32_t up = SPRITE((c->sprite), (c->x), (c->y - 1)); + r += _RED(up); + g += _GRE(up); + b += _BLU(up); + a += _ALP(up); + } + } else if (c->sf == PNG_FILTER_AVG) { + /* Add raw value to the average of the pixel above and left */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->x > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + + r += ((int)_RED(left) + (int)_RED(up)) / 2; + g += ((int)_GRE(left) + (int)_GRE(up)) / 2; + b += ((int)_BLU(left) + (int)_BLU(up)) / 2; + a += ((int)_ALP(left) + (int)_ALP(up)) / 2; + } else if (c->sf == PNG_FILTER_PAETH) { + /* Use the Paeth predictor */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + uint32_t upleft = (c->x > 0 && c->y > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y - 1)) : 0; + + r = ((int)r + paeth((int)_RED(left),(int)_RED(up),(int)_RED(upleft))) % 256; + g = ((int)g + paeth((int)_GRE(left),(int)_GRE(up),(int)_GRE(upleft))) % 256; + b = ((int)b + paeth((int)_BLU(left),(int)_BLU(up),(int)_BLU(upleft))) % 256; + a = ((int)a + paeth((int)_ALP(left),(int)_ALP(up),(int)_ALP(upleft))) % 256; + } + + /* Write new pixel to the image */ + SPRITE((c->sprite), (c->x), (c->y)) = rgba(r,g,b,a); + + /* Reset the short buffer */ + c->buf_off = 0; + + /* Advance to next pixel */ + c->x++; + if (c->x == (int)c->width) { + /* Advance to next line; next read is scanline filter type */ + c->x = -1; + c->y++; + } + } +} + +int load_sprite_png(sprite_t * sprite, char * filename) { + FILE * f = fopen(filename,"r"); + if (!f) { + fprintf(stderr, "Failed to open file %s\n", filename); + return 1; + } + + /* Read the PNG signature */ + unsigned char sig[] = {137, 80, 78, 71, 13, 10, 26, 10}; + for (int i = 0; i < 8; ++i) { + unsigned char c = fgetc(f); + if (c != sig[i]) { + fprintf(stderr, "byte %d (%d) does not match expected (%d)\n", i, c, sig[i]); + goto _error; + } + } + + /* Set up context for future calls to inflate */ + struct png_ctx c; + c.sprite = sprite; + c.x = -1; + c.y = 0; + c.f = f; + c.buf_off = 0; + c.seen_ihdr = 0; + + while (1) { + /* read chunks */ + unsigned int size = read_32(f); + unsigned int type = read_32(f); + + if (feof(f)) break; + + switch (type) { + case PNG_IHDR: + { + /* Image should only have one IHDR */ + if (c.seen_ihdr) return 1; + + c.seen_ihdr = 1; + c.width = read_32(f); /* 4 */ + c.height = read_32(f); /* 8 */ + c.bit_depth = fgetc(f); /* 9 */ + c.color_type = fgetc(f); /* 10 */ + c.compression = fgetc(f); /* 11 */ + c.filter = fgetc(f); /* 12 */ + c.interlace = fgetc(f); /* 13 */ + + /* Invalid / non-standard compression and filter types */ + if (c.compression != 0) return 1; + if (c.filter != 0) return 1; + + /* 0 for none, 1 for Adam7 */ + if (c.interlace != 0 && c.interlace != 1) return 1; + + if (c.bit_depth != 8) return 1; /* Sorry */ + if (c.color_type != 6) return 1; /* Sorry */ + + /* Allocate space */ + sprite->width = c.width; + sprite->height = c.height; + sprite->bitmap = malloc(sizeof(uint32_t) * sprite->width * sprite->height); + sprite->masks = NULL; + sprite->alpha = (c.color_type == 4 || c.color_type == 6) ? ALPHA_EMBEDDED : 0; + sprite->blank = 0; + + + /* Skip */ + for (unsigned int i = 13; i < size; ++i) fgetc(f); + } + break; + + case PNG_IDAT: + { + /* First two bytes of IDAT data are ZLIB header */ + unsigned int cflags = fgetc(f); + if ((cflags & 0xF) != 8) { + /* Compression type must be 8 */ + fprintf(stderr, "Expected flags to be 8 but it's 0x%x\n", cflags); + return 1; + } + unsigned int aflags = fgetc(f); + if (aflags & (1 << 5)) { + fprintf(stderr, "There are preset bytes and I don't know what to do.\n"); + return 1; + } + + struct inflate_context ctx; + ctx.input_priv = &c; + ctx.output_priv = &c; + ctx.get_input = _get; + ctx.write_output = _write; + ctx.ring = NULL; /* use builtin */ + + c.size = size - 2; /* 2 for the bytes we already read */ + + deflate_decompress(&ctx); + + /* The IDATs contain a ZLIB stream, so they end with an + * adler32 checksum. Skip that. */ + unsigned int adler = read_32(f); + (void)adler; + } + break; + case PNG_IEND: + /* We don't actually have anything to do here. */ + break; + default: + /* IHDR must be first */ + if (!c.seen_ihdr) return 1; + //fprintf(stderr, "I don't know what this is! %4s 0x%x\n", reorder_type(type), type); + /* Skip */ + for (unsigned int i = 0; i < size; ++i) fgetc(f); + break; + } + + unsigned int crc32 = read_32(f); + (void)crc32; + } + + /* + * Data in PNGs is unpremultiplied, but our sprites expect + * premultiplied alpha, so convert the image data + */ + for (int y = 0; y < sprite->height; ++y) { + for (int x = 0; x < sprite->width; ++x) { + SPRITE(sprite,x,y) = premultiply(SPRITE(sprite,x,y)); + } + } + + return 0; + +_error: + fclose(f); + return 1; +} diff --git a/util/auto-dep.py b/util/auto-dep.py index b18be993..35a5ce21 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -22,6 +22,7 @@ class Classifier(object): '': (None, '-ltoaru_inflate', []), '': (None, '-ltoaru_drawstring', ['']), '': (None, '-ltoaru_jpeg', ['']), + '': (None, '-ltoaru_png', ['','']), '': (None, '-ltoaru_rline', ['']), '': (None, '-ltoaru_rline_exp', ['']), '': (None, '-ltoaru_confreader', ['']), From 4725c3f585c1008d0b61f635465250a6e9e3e062 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 21 Apr 2020 18:13:40 +0900 Subject: [PATCH 006/102] file-browser: Recognize PNGs by extension --- apps/file-browser.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/file-browser.c b/apps/file-browser.c index 221521d4..383b2db9 100644 --- a/apps/file-browser.c +++ b/apps/file-browser.c @@ -614,6 +614,10 @@ static void load_directory(const char * path, int modifies_history) { sprintf(f->icon, "image"); sprintf(f->launcher, "exec imgviewer"); sprintf(f->filetype, "JPEG Image"); + } else if (has_extension(f, ".png")) { + sprintf(f->icon, "image"); + sprintf(f->launcher, "exec imgviewer"); + sprintf(f->filetype, "Portable Network Graphics Image"); } else if (has_extension(f, ".sdf")) { sprintf(f->icon, "font"); sprintf(f->filetype, "SDF Font"); From c68cd7e1e8db65ca85d6ae8a94dc9b5ff85dc050 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 23 Apr 2020 18:44:07 +0900 Subject: [PATCH 007/102] graphics: make jpg/png support seamless with load_sprite --- apps/file-browser.c | 3 +-- apps/glogin-provider.c | 3 +-- apps/imgviewer.c | 11 +--------- apps/wallpaper-picker.c | 5 ++--- base/usr/include/toaru/graphics.h | 1 + lib/graphics.c | 34 +++++++++++++++++++++++++++++++ lib/icon_cache.c | 26 +++++++++++++++-------- 7 files changed, 58 insertions(+), 25 deletions(-) diff --git a/apps/file-browser.c b/apps/file-browser.c index 383b2db9..963206ca 100644 --- a/apps/file-browser.c +++ b/apps/file-browser.c @@ -32,7 +32,6 @@ #include #include #include -#include #define APPLICATION_TITLE "File Browser" #define SCROLL_AMOUNT 120 @@ -1060,7 +1059,7 @@ static void draw_background(int width, int height) { } } - load_sprite_jpg(wallpaper, wallpaper_path); + load_sprite(wallpaper, wallpaper_path); if (free_it) { free(wallpaper_path); diff --git a/apps/glogin-provider.c b/apps/glogin-provider.c index b475290b..dad04933 100644 --- a/apps/glogin-provider.c +++ b/apps/glogin-provider.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #define TRACE_APP_NAME "glogin-provider" @@ -295,7 +294,7 @@ int main (int argc, char ** argv) { TRACE("Loading wallpaper..."); { sprite_t * wallpaper = malloc(sizeof(sprite_t)); - load_sprite_jpg(wallpaper, WALLPAPER); + load_sprite(wallpaper, WALLPAPER); float x = (float)width / (float)wallpaper->width; float y = (float)height / (float)wallpaper->height; diff --git a/apps/imgviewer.c b/apps/imgviewer.c index 4ac6b0b3..26a803cc 100644 --- a/apps/imgviewer.c +++ b/apps/imgviewer.c @@ -25,8 +25,6 @@ #include #include #include -#include -#include /* Pointer to graphics memory */ static yutani_t * yctx; @@ -151,14 +149,7 @@ int main(int argc, char * argv[]) { decor_width = bounds.width; decor_height = bounds.height; - int status; - if (strstr(argv[optind],".jpg")) { - status = load_sprite_jpg(&img, argv[optind]); - } else if (strstr(argv[optind],".png")) { - status = load_sprite_png(&img, argv[optind]); - } else { - status = load_sprite(&img, argv[optind]); - } + int status = load_sprite(&img, argv[optind]); if (status) { fprintf(stderr, "%s: failed to open image %s\n", argv[0], argv[optind]); return 1; diff --git a/apps/wallpaper-picker.c b/apps/wallpaper-picker.c index a1507bda..abe55c89 100644 --- a/apps/wallpaper-picker.c +++ b/apps/wallpaper-picker.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include @@ -157,8 +156,8 @@ void set_hilight(struct TTKButton * button, int hilight) { void load_wallpaper(void) { if (wallpaper.bitmap) free(wallpaper.bitmap); wallpaper.bitmap = NULL; - /* load JPG */ - load_sprite_jpg(&wallpaper, wallpaper_path); + /* load wallpaper */ + load_sprite(&wallpaper, wallpaper_path); /* Ensures we render correctly when scaling */ wallpaper.alpha = ALPHA_EMBEDDED; } diff --git a/base/usr/include/toaru/graphics.h b/base/usr/include/toaru/graphics.h index 5855fec3..d9808978 100644 --- a/base/usr/include/toaru/graphics.h +++ b/base/usr/include/toaru/graphics.h @@ -75,6 +75,7 @@ extern void blur_context_box(gfx_context_t * _src, int radius); extern void sprite_free(sprite_t * sprite); extern int load_sprite(sprite_t * sprite, char * filename); +extern int load_sprite_bmp(sprite_t * sprite, char * filename); //extern int load_sprite_png(sprite_t * sprite, char * file); extern void draw_sprite(gfx_context_t * ctx, sprite_t * sprite, int32_t x, int32_t y); extern void draw_line(gfx_context_t * ctx, int32_t x0, int32_t x1, int32_t y0, int32_t y1, uint32_t color); diff --git a/lib/graphics.c b/lib/graphics.c index a4d19a2f..9f361ab4 100644 --- a/lib/graphics.c +++ b/lib/graphics.c @@ -11,6 +11,7 @@ #include #include #include +#include #include @@ -395,7 +396,40 @@ void blur_context_box(gfx_context_t * _src, int radius) { _box_blur_vertical(_src,radius); } +static int (*load_sprite_jpg)(sprite_t *, char *) = NULL; +static int (*load_sprite_png)(sprite_t *, char *) = NULL; + +/** + * TODO: This should probably use some config file or plugin path + * for better discovery; we could rename these libraries and + * not have applications / other libraries depend on them + * directly and instead go through libtoaru_graphics. + */ +__attribute__((constructor)) static void _load_format_libraries() { + void * _lib_jpeg = dlopen("libtoaru_jpeg.so", 0); + if (_lib_jpeg) load_sprite_jpg = dlsym(_lib_jpeg, "load_sprite_jpg"); + void * _lib_png = dlopen("libtoaru_png.so", 0); + if (_lib_png) load_sprite_png = dlsym(_lib_png, "load_sprite_png"); +} + +static char * extension_from_filename(char * filename) { + char * ext = strrchr(filename, '.'); + if (ext && *ext == '.') return ext + 1; + return ""; +} + int load_sprite(sprite_t * sprite, char * filename) { + + char * ext = extension_from_filename(filename); + + if (!strcmp(ext,"png")) return load_sprite_png(sprite, filename); + if (!strcmp(ext,"jpg") || !strcmp(ext,"jpeg")) return load_sprite_jpg(sprite, filename); + + /* Fall back to bitmap */ + return load_sprite_bmp(sprite, filename); +} + +int load_sprite_bmp(sprite_t * sprite, char * filename) { /* Open the requested binary */ FILE * image = fopen(filename, "r"); diff --git a/lib/icon_cache.c b/lib/icon_cache.c index 82286f6d..7f4a723b 100644 --- a/lib/icon_cache.c +++ b/lib/icon_cache.c @@ -37,6 +37,12 @@ static char * icon_directories_48[] = { NULL }; +static char * prefixes[] = { + "png", + "bmp", + NULL +}; + __attribute__((constructor)) static void _init_caches(void) { icon_cache_16 = hashmap_create(10); @@ -73,14 +79,18 @@ static sprite_t * icon_get_int(const char * name, hashmap_t * icon_cache, char * char path[100]; while (icon_directories[i]) { /* Check each path... */ - sprintf(path, "%s/%s.bmp", icon_directories[i], name); - if (access(path, R_OK) == 0) { - /* And if we find one, cache it */ - icon = malloc(sizeof(sprite_t)); - load_sprite(icon, path); - icon->alpha = ALPHA_EMBEDDED; - hashmap_set(icon_cache, (void*)name, icon); - return icon; + char ** prefix = prefixes; + while (*prefix) { + sprintf(path, "%s/%s.%s", icon_directories[i], name, *prefix); + if (access(path, R_OK) == 0) { + /* And if we find one, cache it */ + icon = malloc(sizeof(sprite_t)); + load_sprite(icon, path); + icon->alpha = ALPHA_EMBEDDED; + hashmap_set(icon_cache, (void*)name, icon); + return icon; + } + prefix++; } i++; } From c6da6020f46c5375724112295296ce97d7e41e30 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 23 Apr 2020 18:45:10 +0900 Subject: [PATCH 008/102] png-test: remove --- apps/png-test.c | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 apps/png-test.c diff --git a/apps/png-test.c b/apps/png-test.c deleted file mode 100644 index 3a5b364f..00000000 --- a/apps/png-test.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -#include -#include - -int main(int argc, char * argv[]) { - sprite_t sprite; - return load_sprite_png(&sprite,"/opt/logo_login.png"); -} From 3cacd56bced5ca595c3e2232146601b4782e6c19 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 23 Apr 2020 20:15:56 +0900 Subject: [PATCH 009/102] bmp: Set ALPHA_EMBEDDED on load --- apps/about.c | 1 - apps/cat-img.c | 1 - apps/compositor.c | 6 ------ apps/glogin-provider.c | 1 - apps/imgviewer.c | 1 - apps/panel.c | 10 ---------- apps/pong.c | 3 --- apps/showdialog.c | 1 - apps/snow.c | 3 --- apps/tutorial.c | 9 --------- lib/graphics.c | 4 ++++ 11 files changed, 4 insertions(+), 36 deletions(-) diff --git a/apps/about.c b/apps/about.c index 383f0a43..7b6ed10a 100644 --- a/apps/about.c +++ b/apps/about.c @@ -149,7 +149,6 @@ int main(int argc, char * argv[]) { ctx = init_graphics_yutani_double_buffer(window); load_sprite(&logo, icon_path); - logo.alpha = ALPHA_EMBEDDED; redraw(); diff --git a/apps/cat-img.c b/apps/cat-img.c index ccb1fadb..4bc4e478 100644 --- a/apps/cat-img.c +++ b/apps/cat-img.c @@ -91,7 +91,6 @@ int main (int argc, char * argv[]) { while (optind < argc) { sprite_t * image = calloc(sizeof(sprite_t),1); load_sprite(image, argv[optind]); - image->alpha = ALPHA_EMBEDDED; sprite_t * source = image; diff --git a/apps/compositor.c b/apps/compositor.c index c6c42089..839bb7cb 100644 --- a/apps/compositor.c +++ b/apps/compositor.c @@ -2175,17 +2175,11 @@ int main(int argc, char * argv[]) { TRACE("Loading sprites..."); #define MOUSE_DIR "/usr/share/cursor/" load_sprite(&yg->mouse_sprite, MOUSE_DIR "mouse.bmp"); - yg->mouse_sprite.alpha = ALPHA_EMBEDDED; load_sprite(&yg->mouse_sprite_drag, MOUSE_DIR "drag.bmp"); - yg->mouse_sprite_drag.alpha = ALPHA_EMBEDDED; load_sprite(&yg->mouse_sprite_resize_v, MOUSE_DIR "resize-vertical.bmp"); - yg->mouse_sprite_resize_v.alpha = ALPHA_EMBEDDED; load_sprite(&yg->mouse_sprite_resize_h, MOUSE_DIR "resize-horizontal.bmp"); - yg->mouse_sprite_resize_h.alpha = ALPHA_EMBEDDED; load_sprite(&yg->mouse_sprite_resize_da, MOUSE_DIR "resize-uldr.bmp"); - yg->mouse_sprite_resize_da.alpha = ALPHA_EMBEDDED; load_sprite(&yg->mouse_sprite_resize_db, MOUSE_DIR "resize-dlur.bmp"); - yg->mouse_sprite_resize_db.alpha = ALPHA_EMBEDDED; TRACE("Done."); TRACE("Initializing variables..."); diff --git a/apps/glogin-provider.c b/apps/glogin-provider.c index dad04933..f5602e9b 100644 --- a/apps/glogin-provider.c +++ b/apps/glogin-provider.c @@ -260,7 +260,6 @@ int main (int argc, char ** argv) { TRACE("Loading logo..."); load_sprite(&logo, LOGO); - logo.alpha = ALPHA_EMBEDDED; TRACE("... done."); /* Generate surface for background */ diff --git a/apps/imgviewer.c b/apps/imgviewer.c index 26a803cc..0a251eb8 100644 --- a/apps/imgviewer.c +++ b/apps/imgviewer.c @@ -154,7 +154,6 @@ int main(int argc, char * argv[]) { fprintf(stderr, "%s: failed to open image %s\n", argv[0], argv[optind]); return 1; } - img.alpha = ALPHA_EMBEDDED; width = img.width; height = img.height; diff --git a/apps/panel.c b/apps/panel.c index 024f7eee..fc87389f 100644 --- a/apps/panel.c +++ b/apps/panel.c @@ -364,7 +364,6 @@ static void update_weather_status(void) { char path[512]; sprintf(path,"/usr/share/icons/weather/%s.bmp", icon); load_sprite(tmp, path); - tmp->alpha = ALPHA_FORCE_SLOW_EMBEDDED; hashmap_set(weather_icons, icon, tmp); } @@ -1367,7 +1366,6 @@ struct MenuEntry * menu_create_clock(void) { if (!watchface) { watchface = malloc(sizeof(sprite_t)); load_sprite(watchface, "/usr/share/icons/watchface.bmp"); - watchface->alpha = ALPHA_EMBEDDED; } out->_type = -1; /* Special */ @@ -1525,9 +1523,7 @@ int main (int argc, char ** argv) { sprite_logout = malloc(sizeof(sprite_t)); load_sprite(sprite_panel, "/usr/share/panel.bmp"); - sprite_panel->alpha = ALPHA_EMBEDDED; load_sprite(sprite_logout, "/usr/share/icons/panel-shutdown.bmp"); - sprite_logout->alpha = ALPHA_FORCE_SLOW_EMBEDDED; struct stat stat_tmp; if (!stat("/dev/dsp",&stat_tmp)) { @@ -1538,13 +1534,9 @@ int main (int argc, char ** argv) { sprite_volume_med = malloc(sizeof(sprite_t)); sprite_volume_high = malloc(sizeof(sprite_t)); load_sprite(sprite_volume_mute, "/usr/share/icons/24/volume-mute.bmp"); - sprite_volume_mute->alpha = ALPHA_FORCE_SLOW_EMBEDDED; load_sprite(sprite_volume_low, "/usr/share/icons/24/volume-low.bmp"); - sprite_volume_low->alpha = ALPHA_FORCE_SLOW_EMBEDDED; load_sprite(sprite_volume_med, "/usr/share/icons/24/volume-medium.bmp"); - sprite_volume_med->alpha = ALPHA_FORCE_SLOW_EMBEDDED; load_sprite(sprite_volume_high, "/usr/share/icons/24/volume-full.bmp"); - sprite_volume_high->alpha = ALPHA_FORCE_SLOW_EMBEDDED; /* XXX store current volume */ } @@ -1553,10 +1545,8 @@ int main (int argc, char ** argv) { widgets_width += WIDGET_WIDTH; sprite_net_active = malloc(sizeof(sprite_t)); load_sprite(sprite_net_active, "/usr/share/icons/24/net-active.bmp"); - sprite_net_active->alpha = ALPHA_FORCE_SLOW_EMBEDDED; sprite_net_disabled = malloc(sizeof(sprite_t)); load_sprite(sprite_net_disabled, "/usr/share/icons/24/net-disconnected.bmp"); - sprite_net_disabled->alpha = ALPHA_FORCE_SLOW_EMBEDDED; } /* TODO Probably should use the app launch shortcut */ diff --git a/apps/pong.c b/apps/pong.c index 8b83546f..053e74dd 100644 --- a/apps/pong.c +++ b/apps/pong.c @@ -233,11 +233,8 @@ int main (int argc, char ** argv) { fprintf(stderr, "Loading sprites...\n"); load_sprite(&left.sprite, GAME_PATH "/paddle-red.bmp"); - left.sprite.alpha = ALPHA_EMBEDDED; load_sprite(&right.sprite,GAME_PATH "/paddle-blue.bmp"); - right.sprite.alpha = ALPHA_EMBEDDED; load_sprite(&ball.sprite, GAME_PATH "/ball.bmp"); - ball.sprite.alpha = ALPHA_EMBEDDED; redraw(); update_left(); diff --git a/apps/showdialog.c b/apps/showdialog.c index 32565da5..2dbb2c71 100644 --- a/apps/showdialog.c +++ b/apps/showdialog.c @@ -180,7 +180,6 @@ int main(int argc, char * argv[]) { ctx = init_graphics_yutani_double_buffer(window); setup_buttons(); load_sprite(&logo, icon_path); - logo.alpha = ALPHA_EMBEDDED; redraw(); struct TTKButton * _down_button = NULL; diff --git a/apps/snow.c b/apps/snow.c index caa5a3f9..4be7665e 100644 --- a/apps/snow.c +++ b/apps/snow.c @@ -110,9 +110,6 @@ int main (int argc, char ** argv) { } load_sprite(&snowflake, "/usr/share/snowflake.bmp"); - snowflake.alpha = ALPHA_EMBEDDED; - snowflake.masks = NULL; - snowflake.blank = 0; wina = yutani_window_create(yctx, 100, 100); if (argc < 2 || strcmp(argv[1],"--no-ad")) { diff --git a/apps/tutorial.c b/apps/tutorial.c index 28a22ab1..c564b974 100644 --- a/apps/tutorial.c +++ b/apps/tutorial.c @@ -328,19 +328,10 @@ int main(int argc, char * argv[]) { /* Load icons */ load_sprite(&logo, "/usr/share/logo_login.bmp"); - logo.alpha = ALPHA_EMBEDDED; - load_sprite(&terminal, "/usr/share/icons/48/utilities-terminal.bmp"); - terminal.alpha = ALPHA_EMBEDDED; - load_sprite(&folder, "/usr/share/icons/48/folder.bmp"); - folder.alpha = ALPHA_EMBEDDED; - load_sprite(&package, "/usr/share/icons/48/package.bmp"); - package.alpha = ALPHA_EMBEDDED; - load_sprite(&mouse_drag, "/usr/share/cursor/drag.bmp"); - mouse_drag.alpha = ALPHA_EMBEDDED; load_page(0); diff --git a/lib/graphics.c b/lib/graphics.c index 9f361ab4..0e684e9d 100644 --- a/lib/graphics.c +++ b/lib/graphics.c @@ -470,6 +470,10 @@ int load_sprite_bmp(sprite_t * sprite, char * filename) { #define _BMP_G 0x100 #define _BMP_B 0x10000 + if (bpp == 32) { + sprite->alpha = ALPHA_EMBEDDED; + } + for (y = 0; y < height; ++y) { for (x = 0; x < width; ++x) { if (i > image_size) goto _cleanup_sprite; From e5996aa4b409349a6f20e7dd5df7193cb103bdda Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 23 Apr 2020 20:55:27 +0900 Subject: [PATCH 010/102] graphics: remove unneeded ALPHA_EMBEDDED's in libs --- lib/decor-fancy.c | 1 - lib/icon_cache.c | 3 --- 2 files changed, 4 deletions(-) diff --git a/lib/decor-fancy.c b/lib/decor-fancy.c index 051d97e7..8a119ef1 100644 --- a/lib/decor-fancy.c +++ b/lib/decor-fancy.c @@ -42,7 +42,6 @@ static int (*freetype_draw_string_width)(char * s) = NULL; static void init_sprite(int id, char * path) { sprites[id] = malloc(sizeof(sprite_t)); load_sprite(sprites[id], path); - sprites[id]->alpha = ALPHA_EMBEDDED; } static int get_bounds_fancy(yutani_window_t * window, struct decor_bounds * bounds) { diff --git a/lib/icon_cache.c b/lib/icon_cache.c index 7f4a723b..008adf0f 100644 --- a/lib/icon_cache.c +++ b/lib/icon_cache.c @@ -49,7 +49,6 @@ static void _init_caches(void) { { /* Generic fallback icon */ sprite_t * app_icon = malloc(sizeof(sprite_t)); load_sprite(app_icon, "/usr/share/icons/16/applications-generic.bmp"); - app_icon->alpha = ALPHA_EMBEDDED; hashmap_set(icon_cache_16, "generic", app_icon); } @@ -57,7 +56,6 @@ static void _init_caches(void) { { /* Generic fallback icon */ sprite_t * app_icon = malloc(sizeof(sprite_t)); load_sprite(app_icon, "/usr/share/icons/48/applications-generic.bmp"); - app_icon->alpha = ALPHA_EMBEDDED; hashmap_set(icon_cache_48, "generic", app_icon); } } @@ -86,7 +84,6 @@ static sprite_t * icon_get_int(const char * name, hashmap_t * icon_cache, char * /* And if we find one, cache it */ icon = malloc(sizeof(sprite_t)); load_sprite(icon, path); - icon->alpha = ALPHA_EMBEDDED; hashmap_set(icon_cache, (void*)name, icon); return icon; } From 7dfb9c34ceba0d262e091e12bb13e2a95d08183e Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 24 Apr 2020 14:30:12 +0900 Subject: [PATCH 011/102] png: replace several BMP assets with PNGs --- apps/about.c | 2 +- apps/compositor.c | 12 ++--- apps/glogin-provider.c | 2 +- apps/panel.c | 20 ++++----- apps/pong.c | 6 +-- apps/tutorial.c | 2 +- base/usr/share/cursor/drag.bmp | Bin 9354 -> 0 bytes base/usr/share/cursor/drag.png | Bin 0 -> 1213 bytes base/usr/share/cursor/mouse.bmp | Bin 9354 -> 0 bytes base/usr/share/cursor/normal.png | Bin 0 -> 718 bytes base/usr/share/cursor/resize-dlur.bmp | Bin 9354 -> 0 bytes base/usr/share/cursor/resize-dlur.png | Bin 0 -> 951 bytes base/usr/share/cursor/resize-horizontal.bmp | Bin 9354 -> 0 bytes base/usr/share/cursor/resize-horizontal.png | Bin 0 -> 643 bytes base/usr/share/cursor/resize-uldr.bmp | Bin 9354 -> 0 bytes base/usr/share/cursor/resize-uldr.png | Bin 0 -> 854 bytes base/usr/share/cursor/resize-vertical.bmp | Bin 9354 -> 0 bytes base/usr/share/cursor/resize-vertical.png | Bin 0 -> 710 bytes .../share/icons/24/applications-generic.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/mouse-relative.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/mouse-relative.png | Bin 0 -> 330 bytes base/usr/share/icons/24/mouse-status.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/mouse-status.png | Bin 0 -> 336 bytes base/usr/share/icons/24/net-active.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/net-active.png | Bin 0 -> 322 bytes base/usr/share/icons/24/net-disconnected.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/net-disconnected.png | Bin 0 -> 463 bytes .../usr/share/icons/24/utilities-terminal.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/volume-full.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/volume-full.png | Bin 0 -> 464 bytes base/usr/share/icons/24/volume-low.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/volume-low.png | Bin 0 -> 282 bytes base/usr/share/icons/24/volume-medium.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/volume-medium.png | Bin 0 -> 348 bytes base/usr/share/icons/24/volume-mute.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/24/volume-mute.png | Bin 0 -> 292 bytes base/usr/share/icons/panel-shutdown.bmp | Bin 2074 -> 0 bytes base/usr/share/icons/panel-shutdown.png | Bin 0 -> 458 bytes base/usr/share/icons/watchface.bmp | Bin 78538 -> 0 bytes base/usr/share/icons/watchface.png | Bin 0 -> 11960 bytes base/usr/share/icons/weather/01d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/01d.png | Bin 0 -> 392 bytes base/usr/share/icons/weather/01n.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/01n.png | Bin 0 -> 363 bytes base/usr/share/icons/weather/02d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/02d.png | Bin 0 -> 491 bytes base/usr/share/icons/weather/02n.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/02n.png | Bin 0 -> 409 bytes base/usr/share/icons/weather/03d.bmp | 1 - base/usr/share/icons/weather/03d.png | 1 + base/usr/share/icons/weather/03n.bmp | 1 - base/usr/share/icons/weather/03n.png | 1 + base/usr/share/icons/weather/04d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/04d.png | Bin 0 -> 514 bytes base/usr/share/icons/weather/04n.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/04n.png | Bin 0 -> 439 bytes base/usr/share/icons/weather/09d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/09d.png | Bin 0 -> 290 bytes base/usr/share/icons/weather/09n.bmp | 1 - base/usr/share/icons/weather/09n.png | 1 + base/usr/share/icons/weather/10d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/10d.png | Bin 0 -> 258 bytes base/usr/share/icons/weather/10n.bmp | 1 - base/usr/share/icons/weather/10n.png | 1 + base/usr/share/icons/weather/11d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/11d.png | Bin 0 -> 470 bytes base/usr/share/icons/weather/11n.bmp | 1 - base/usr/share/icons/weather/11n.png | 1 + base/usr/share/icons/weather/13d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/13d.png | Bin 0 -> 687 bytes base/usr/share/icons/weather/13n.bmp | 1 - base/usr/share/icons/weather/13n.png | 1 + base/usr/share/icons/weather/50d.bmp | Bin 2442 -> 0 bytes base/usr/share/icons/weather/50d.png | Bin 0 -> 678 bytes base/usr/share/icons/weather/50n.bmp | 1 - base/usr/share/icons/weather/50n.png | 1 + base/usr/share/logo_login.bmp | Bin 54570 -> 0 bytes base/{opt => usr/share}/logo_login.png | Bin base/usr/share/panel.bmp | Bin 5514 -> 0 bytes base/usr/share/panel.png | Bin 0 -> 198 bytes base/usr/share/pong/ball.bmp | Bin 10138 -> 0 bytes base/usr/share/pong/ball.png | Bin 0 -> 2349 bytes base/usr/share/pong/paddle-blue.bmp | Bin 60138 -> 0 bytes base/usr/share/pong/paddle-blue.png | Bin 0 -> 8638 bytes base/usr/share/pong/paddle-red.bmp | Bin 60138 -> 0 bytes base/usr/share/pong/paddle-red.png | Bin 0 -> 5708 bytes base/usr/share/ttk/active/button-close.bmp | Bin 394 -> 0 bytes base/usr/share/ttk/active/button-close.png | Bin 0 -> 223 bytes base/usr/share/ttk/active/button-maximize.bmp | Bin 394 -> 0 bytes base/usr/share/ttk/active/button-maximize.png | Bin 0 -> 152 bytes base/usr/share/ttk/active/ll.bmp | Bin 462 -> 0 bytes base/usr/share/ttk/active/ll.png | Bin 0 -> 301 bytes base/usr/share/ttk/active/lm.bmp | Bin 174 -> 0 bytes base/usr/share/ttk/active/lm.png | Bin 0 -> 1028 bytes base/usr/share/ttk/active/lr.bmp | Bin 462 -> 0 bytes base/usr/share/ttk/active/lr.png | Bin 0 -> 291 bytes base/usr/share/ttk/active/ml.bmp | Bin 162 -> 0 bytes base/usr/share/ttk/active/ml.png | Bin 0 -> 198 bytes base/usr/share/ttk/active/mr.bmp | Bin 162 -> 0 bytes base/usr/share/ttk/active/mr.png | Bin 0 -> 1085 bytes base/usr/share/ttk/active/ul.bmp | Bin 1458 -> 0 bytes base/usr/share/ttk/active/ul.png | Bin 0 -> 384 bytes base/usr/share/ttk/active/um.bmp | Bin 270 -> 0 bytes base/usr/share/ttk/active/um.png | Bin 0 -> 230 bytes base/usr/share/ttk/active/ur.bmp | Bin 1458 -> 0 bytes base/usr/share/ttk/active/ur.png | Bin 0 -> 2101 bytes base/usr/share/ttk/inactive/button-close.bmp | Bin 394 -> 0 bytes base/usr/share/ttk/inactive/button-close.png | Bin 0 -> 209 bytes .../share/ttk/inactive/button-maximize.bmp | Bin 394 -> 0 bytes .../share/ttk/inactive/button-maximize.png | Bin 0 -> 159 bytes base/usr/share/ttk/inactive/ll.bmp | Bin 462 -> 0 bytes base/usr/share/ttk/inactive/ll.png | Bin 0 -> 263 bytes base/usr/share/ttk/inactive/lm.bmp | Bin 174 -> 0 bytes base/usr/share/ttk/inactive/lm.png | Bin 0 -> 205 bytes base/usr/share/ttk/inactive/lr.bmp | Bin 462 -> 0 bytes base/usr/share/ttk/inactive/lr.png | Bin 0 -> 262 bytes base/usr/share/ttk/inactive/ml.bmp | Bin 162 -> 0 bytes base/usr/share/ttk/inactive/ml.png | Bin 0 -> 189 bytes base/usr/share/ttk/inactive/mr.bmp | Bin 162 -> 0 bytes base/usr/share/ttk/inactive/mr.png | Bin 0 -> 192 bytes base/usr/share/ttk/inactive/ul.bmp | Bin 1458 -> 0 bytes base/usr/share/ttk/inactive/ul.png | Bin 0 -> 318 bytes base/usr/share/ttk/inactive/um.bmp | Bin 270 -> 0 bytes base/usr/share/ttk/inactive/um.png | Bin 0 -> 217 bytes base/usr/share/ttk/inactive/ur.bmp | Bin 1458 -> 0 bytes base/usr/share/ttk/inactive/ur.png | Bin 0 -> 355 bytes base/usr/share/ttk/toast/default.png | Bin 0 -> 1710 bytes lib/decor-fancy.c | 42 +++++++++--------- lib/png.c | 2 +- 129 files changed, 51 insertions(+), 51 deletions(-) delete mode 100644 base/usr/share/cursor/drag.bmp create mode 100644 base/usr/share/cursor/drag.png delete mode 100644 base/usr/share/cursor/mouse.bmp create mode 100644 base/usr/share/cursor/normal.png delete mode 100644 base/usr/share/cursor/resize-dlur.bmp create mode 100644 base/usr/share/cursor/resize-dlur.png delete mode 100644 base/usr/share/cursor/resize-horizontal.bmp create mode 100644 base/usr/share/cursor/resize-horizontal.png delete mode 100644 base/usr/share/cursor/resize-uldr.bmp create mode 100644 base/usr/share/cursor/resize-uldr.png delete mode 100644 base/usr/share/cursor/resize-vertical.bmp create mode 100644 base/usr/share/cursor/resize-vertical.png delete mode 100644 base/usr/share/icons/24/applications-generic.bmp delete mode 100644 base/usr/share/icons/24/mouse-relative.bmp create mode 100644 base/usr/share/icons/24/mouse-relative.png delete mode 100644 base/usr/share/icons/24/mouse-status.bmp create mode 100644 base/usr/share/icons/24/mouse-status.png delete mode 100644 base/usr/share/icons/24/net-active.bmp create mode 100644 base/usr/share/icons/24/net-active.png delete mode 100644 base/usr/share/icons/24/net-disconnected.bmp create mode 100644 base/usr/share/icons/24/net-disconnected.png delete mode 100644 base/usr/share/icons/24/utilities-terminal.bmp delete mode 100644 base/usr/share/icons/24/volume-full.bmp create mode 100644 base/usr/share/icons/24/volume-full.png delete mode 100644 base/usr/share/icons/24/volume-low.bmp create mode 100644 base/usr/share/icons/24/volume-low.png delete mode 100644 base/usr/share/icons/24/volume-medium.bmp create mode 100644 base/usr/share/icons/24/volume-medium.png delete mode 100644 base/usr/share/icons/24/volume-mute.bmp create mode 100644 base/usr/share/icons/24/volume-mute.png delete mode 100644 base/usr/share/icons/panel-shutdown.bmp create mode 100644 base/usr/share/icons/panel-shutdown.png delete mode 100644 base/usr/share/icons/watchface.bmp create mode 100644 base/usr/share/icons/watchface.png delete mode 100644 base/usr/share/icons/weather/01d.bmp create mode 100644 base/usr/share/icons/weather/01d.png delete mode 100644 base/usr/share/icons/weather/01n.bmp create mode 100644 base/usr/share/icons/weather/01n.png delete mode 100644 base/usr/share/icons/weather/02d.bmp create mode 100644 base/usr/share/icons/weather/02d.png delete mode 100644 base/usr/share/icons/weather/02n.bmp create mode 100644 base/usr/share/icons/weather/02n.png delete mode 120000 base/usr/share/icons/weather/03d.bmp create mode 120000 base/usr/share/icons/weather/03d.png delete mode 120000 base/usr/share/icons/weather/03n.bmp create mode 120000 base/usr/share/icons/weather/03n.png delete mode 100644 base/usr/share/icons/weather/04d.bmp create mode 100644 base/usr/share/icons/weather/04d.png delete mode 100644 base/usr/share/icons/weather/04n.bmp create mode 100644 base/usr/share/icons/weather/04n.png delete mode 100644 base/usr/share/icons/weather/09d.bmp create mode 100644 base/usr/share/icons/weather/09d.png delete mode 120000 base/usr/share/icons/weather/09n.bmp create mode 120000 base/usr/share/icons/weather/09n.png delete mode 100644 base/usr/share/icons/weather/10d.bmp create mode 100644 base/usr/share/icons/weather/10d.png delete mode 120000 base/usr/share/icons/weather/10n.bmp create mode 120000 base/usr/share/icons/weather/10n.png delete mode 100644 base/usr/share/icons/weather/11d.bmp create mode 100644 base/usr/share/icons/weather/11d.png delete mode 120000 base/usr/share/icons/weather/11n.bmp create mode 120000 base/usr/share/icons/weather/11n.png delete mode 100644 base/usr/share/icons/weather/13d.bmp create mode 100644 base/usr/share/icons/weather/13d.png delete mode 120000 base/usr/share/icons/weather/13n.bmp create mode 120000 base/usr/share/icons/weather/13n.png delete mode 100644 base/usr/share/icons/weather/50d.bmp create mode 100644 base/usr/share/icons/weather/50d.png delete mode 120000 base/usr/share/icons/weather/50n.bmp create mode 120000 base/usr/share/icons/weather/50n.png delete mode 100644 base/usr/share/logo_login.bmp rename base/{opt => usr/share}/logo_login.png (100%) delete mode 100644 base/usr/share/panel.bmp create mode 100644 base/usr/share/panel.png delete mode 100644 base/usr/share/pong/ball.bmp create mode 100644 base/usr/share/pong/ball.png delete mode 100644 base/usr/share/pong/paddle-blue.bmp create mode 100644 base/usr/share/pong/paddle-blue.png delete mode 100644 base/usr/share/pong/paddle-red.bmp create mode 100644 base/usr/share/pong/paddle-red.png delete mode 100644 base/usr/share/ttk/active/button-close.bmp create mode 100644 base/usr/share/ttk/active/button-close.png delete mode 100644 base/usr/share/ttk/active/button-maximize.bmp create mode 100644 base/usr/share/ttk/active/button-maximize.png delete mode 100644 base/usr/share/ttk/active/ll.bmp create mode 100644 base/usr/share/ttk/active/ll.png delete mode 100644 base/usr/share/ttk/active/lm.bmp create mode 100644 base/usr/share/ttk/active/lm.png delete mode 100644 base/usr/share/ttk/active/lr.bmp create mode 100644 base/usr/share/ttk/active/lr.png delete mode 100644 base/usr/share/ttk/active/ml.bmp create mode 100644 base/usr/share/ttk/active/ml.png delete mode 100644 base/usr/share/ttk/active/mr.bmp create mode 100644 base/usr/share/ttk/active/mr.png delete mode 100644 base/usr/share/ttk/active/ul.bmp create mode 100644 base/usr/share/ttk/active/ul.png delete mode 100644 base/usr/share/ttk/active/um.bmp create mode 100644 base/usr/share/ttk/active/um.png delete mode 100644 base/usr/share/ttk/active/ur.bmp create mode 100644 base/usr/share/ttk/active/ur.png delete mode 100644 base/usr/share/ttk/inactive/button-close.bmp create mode 100644 base/usr/share/ttk/inactive/button-close.png delete mode 100644 base/usr/share/ttk/inactive/button-maximize.bmp create mode 100644 base/usr/share/ttk/inactive/button-maximize.png delete mode 100644 base/usr/share/ttk/inactive/ll.bmp create mode 100644 base/usr/share/ttk/inactive/ll.png delete mode 100644 base/usr/share/ttk/inactive/lm.bmp create mode 100644 base/usr/share/ttk/inactive/lm.png delete mode 100644 base/usr/share/ttk/inactive/lr.bmp create mode 100644 base/usr/share/ttk/inactive/lr.png delete mode 100644 base/usr/share/ttk/inactive/ml.bmp create mode 100644 base/usr/share/ttk/inactive/ml.png delete mode 100644 base/usr/share/ttk/inactive/mr.bmp create mode 100644 base/usr/share/ttk/inactive/mr.png delete mode 100644 base/usr/share/ttk/inactive/ul.bmp create mode 100644 base/usr/share/ttk/inactive/ul.png delete mode 100644 base/usr/share/ttk/inactive/um.bmp create mode 100644 base/usr/share/ttk/inactive/um.png delete mode 100644 base/usr/share/ttk/inactive/ur.bmp create mode 100644 base/usr/share/ttk/inactive/ur.png create mode 100644 base/usr/share/ttk/toast/default.png diff --git a/apps/about.c b/apps/about.c index 7b6ed10a..93d23615 100644 --- a/apps/about.c +++ b/apps/about.c @@ -76,7 +76,7 @@ static void redraw(void) { static void init_default(void) { title_str = "About ToaruOS"; - icon_path = "/usr/share/logo_login.bmp"; + icon_path = "/usr/share/logo_login.png"; { version_str = malloc(100); diff --git a/apps/compositor.c b/apps/compositor.c index 839bb7cb..6478c89d 100644 --- a/apps/compositor.c +++ b/apps/compositor.c @@ -2174,12 +2174,12 @@ int main(int argc, char * argv[]) { TRACE("Loading sprites..."); #define MOUSE_DIR "/usr/share/cursor/" - load_sprite(&yg->mouse_sprite, MOUSE_DIR "mouse.bmp"); - load_sprite(&yg->mouse_sprite_drag, MOUSE_DIR "drag.bmp"); - load_sprite(&yg->mouse_sprite_resize_v, MOUSE_DIR "resize-vertical.bmp"); - load_sprite(&yg->mouse_sprite_resize_h, MOUSE_DIR "resize-horizontal.bmp"); - load_sprite(&yg->mouse_sprite_resize_da, MOUSE_DIR "resize-uldr.bmp"); - load_sprite(&yg->mouse_sprite_resize_db, MOUSE_DIR "resize-dlur.bmp"); + load_sprite(&yg->mouse_sprite, MOUSE_DIR "normal.png"); + load_sprite(&yg->mouse_sprite_drag, MOUSE_DIR "drag.png"); + load_sprite(&yg->mouse_sprite_resize_v, MOUSE_DIR "resize-vertical.png"); + load_sprite(&yg->mouse_sprite_resize_h, MOUSE_DIR "resize-horizontal.png"); + load_sprite(&yg->mouse_sprite_resize_da, MOUSE_DIR "resize-uldr.png"); + load_sprite(&yg->mouse_sprite_resize_db, MOUSE_DIR "resize-dlur.png"); TRACE("Done."); TRACE("Initializing variables..."); diff --git a/apps/glogin-provider.c b/apps/glogin-provider.c index f5602e9b..0b7398c9 100644 --- a/apps/glogin-provider.c +++ b/apps/glogin-provider.c @@ -56,7 +56,7 @@ static int BOX_COLOR_G=0; static int BOX_COLOR_B=0; static int BOX_COLOR_A=127; static char * WALLPAPER = "/usr/share/wallpaper.jpg"; -static char * LOGO = "/usr/share/logo_login.bmp"; +static char * LOGO = "/usr/share/logo_login.png"; #define TEXTBOX_INTERIOR_LEFT 4 #define EXTRA_TEXT_OFFSET 15 diff --git a/apps/panel.c b/apps/panel.c index fc87389f..d1e531bc 100644 --- a/apps/panel.c +++ b/apps/panel.c @@ -362,7 +362,7 @@ static void update_weather_status(void) { if (!hashmap_has(weather_icons, icon)) { sprite_t * tmp = malloc(sizeof(sprite_t)); char path[512]; - sprintf(path,"/usr/share/icons/weather/%s.bmp", icon); + sprintf(path,"/usr/share/icons/weather/%s.png", icon); load_sprite(tmp, path); hashmap_set(weather_icons, icon, tmp); } @@ -1365,7 +1365,7 @@ struct MenuEntry * menu_create_clock(void) { if (!watchface) { watchface = malloc(sizeof(sprite_t)); - load_sprite(watchface, "/usr/share/icons/watchface.bmp"); + load_sprite(watchface, "/usr/share/icons/watchface.png"); } out->_type = -1; /* Special */ @@ -1522,8 +1522,8 @@ int main (int argc, char ** argv) { sprite_panel = malloc(sizeof(sprite_t)); sprite_logout = malloc(sizeof(sprite_t)); - load_sprite(sprite_panel, "/usr/share/panel.bmp"); - load_sprite(sprite_logout, "/usr/share/icons/panel-shutdown.bmp"); + load_sprite(sprite_panel, "/usr/share/panel.png"); + load_sprite(sprite_logout, "/usr/share/icons/panel-shutdown.png"); struct stat stat_tmp; if (!stat("/dev/dsp",&stat_tmp)) { @@ -1533,10 +1533,10 @@ int main (int argc, char ** argv) { sprite_volume_low = malloc(sizeof(sprite_t)); sprite_volume_med = malloc(sizeof(sprite_t)); sprite_volume_high = malloc(sizeof(sprite_t)); - load_sprite(sprite_volume_mute, "/usr/share/icons/24/volume-mute.bmp"); - load_sprite(sprite_volume_low, "/usr/share/icons/24/volume-low.bmp"); - load_sprite(sprite_volume_med, "/usr/share/icons/24/volume-medium.bmp"); - load_sprite(sprite_volume_high, "/usr/share/icons/24/volume-full.bmp"); + load_sprite(sprite_volume_mute, "/usr/share/icons/24/volume-mute.png"); + load_sprite(sprite_volume_low, "/usr/share/icons/24/volume-low.png"); + load_sprite(sprite_volume_med, "/usr/share/icons/24/volume-medium.png"); + load_sprite(sprite_volume_high, "/usr/share/icons/24/volume-full.png"); /* XXX store current volume */ } @@ -1544,9 +1544,9 @@ int main (int argc, char ** argv) { widgets_network_enabled = 1; widgets_width += WIDGET_WIDTH; sprite_net_active = malloc(sizeof(sprite_t)); - load_sprite(sprite_net_active, "/usr/share/icons/24/net-active.bmp"); + load_sprite(sprite_net_active, "/usr/share/icons/24/net-active.png"); sprite_net_disabled = malloc(sizeof(sprite_t)); - load_sprite(sprite_net_disabled, "/usr/share/icons/24/net-disconnected.bmp"); + load_sprite(sprite_net_disabled, "/usr/share/icons/24/net-disconnected.png"); } /* TODO Probably should use the app launch shortcut */ diff --git a/apps/pong.c b/apps/pong.c index 053e74dd..03e1a6ed 100644 --- a/apps/pong.c +++ b/apps/pong.c @@ -232,9 +232,9 @@ int main (int argc, char ** argv) { ball.vel_x = -10.0; fprintf(stderr, "Loading sprites...\n"); - load_sprite(&left.sprite, GAME_PATH "/paddle-red.bmp"); - load_sprite(&right.sprite,GAME_PATH "/paddle-blue.bmp"); - load_sprite(&ball.sprite, GAME_PATH "/ball.bmp"); + load_sprite(&left.sprite, GAME_PATH "/paddle-red.png"); + load_sprite(&right.sprite,GAME_PATH "/paddle-blue.png"); + load_sprite(&ball.sprite, GAME_PATH "/ball.png"); redraw(); update_left(); diff --git a/apps/tutorial.c b/apps/tutorial.c index c564b974..773ddf29 100644 --- a/apps/tutorial.c +++ b/apps/tutorial.c @@ -327,7 +327,7 @@ int main(int argc, char * argv[]) { window = yutani_window_create(yctx, width + bounds.width, height + bounds.height); /* Load icons */ - load_sprite(&logo, "/usr/share/logo_login.bmp"); + load_sprite(&logo, "/usr/share/logo_login.png"); load_sprite(&terminal, "/usr/share/icons/48/utilities-terminal.bmp"); load_sprite(&folder, "/usr/share/icons/48/folder.bmp"); load_sprite(&package, "/usr/share/icons/48/package.bmp"); diff --git a/base/usr/share/cursor/drag.bmp b/base/usr/share/cursor/drag.bmp deleted file mode 100644 index 93e97b35b42cf773a65075b209e2eb2276baa246..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI0OK1~O6o%6#YNBW~Dn4q`kd{cK6(Lg1Mx+W|xlvax+_@-%2yQFBB1r3FqYD=z zT6Cef6Wj&^0(0n>nLGFOpELJ0Z9Lan z>r&Q=-xhGppu!b)xtW9f^!C3nX_&ZN**{lf)A<`ZqtI(*p#`0CP6V6?I1woG2vk5n zDM#A`(L2Eo;3+c)s67Olz*%qz@L4&S*4_@WpTPrg5d?wVebCxpL90|(S4&k@)i>Nf z0(SRdnRe)wR4OGM9UT%32JP+x=O@R9io4d{-Q6w3@Zl@++rS0D`Cykh&Gm5`cmgv$G$jMj{-liYWf%b)Xuql1ndT-^g(N{ML+MsC2$br)!)_C#qpCX{;bD$ z_#9jTjez5;6h4@>ze69KtJeU}2<(sf8ZYkE`045C5uo+cZ*y6G%W@53TVKF!a0V3H zhZWkR(J1@82@-(1A|?*wUg_`e@0Y&5K0SX=S<2QR&2huFq^_>+JFa&@v3=kerA8I^ zNF*Yiot^CS1>o7{j)f%BO8?;CpbQKQQ2%StYAMHh_khwrIyx%#_4PlHE~XER{a)~f z{b=pnlbFtj$K#RV;b9pX8p>Nvw;?c-4=s4kJ&yB(8vfTRQBlRytX=P^)+@(5#|-06 z?IR;2GB!3Q6B83MH8mx(v$HZkKQEa~MwXVAD0zh$KBUm^NwC&En!XpLzZlx-jG>?F z+kW5%Yqgv{pwYbJg5!sAA0HpjTTZu=L%V0K!cFy8_<+3YAPjhJW?ve$CQ?7g%;e;x zUO%IjvaE-HF)o|GI_|~PjxLmCeK6L~%Xqr#{zd&9?=v$qT0hrIwxNypoS*9bVErtm zc5|Oeqff36{605pVmWnwpnlHPxw*O3^k>WB<|Wt%N)dPVV>asL8qIN%tG}#%t}_b@ z3;FbOeQN_-K{4hknkm?>ma( zAkI^291F^acs#E5 zUag<|SVKdDowe&&W_?H`5;8qKt@hwD(Vo)>yo(RW;Po~!FDLEV Z7y6*l&z!3h0Ve`Z1e^#s5hz9k{s7s|rf&cM diff --git a/base/usr/share/cursor/drag.png b/base/usr/share/cursor/drag.png new file mode 100644 index 0000000000000000000000000000000000000000..54c05076e6a92604b8880318551b77a8ad5fbfd9 GIT binary patch literal 1213 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 HP!oaQw=rt8 diff --git a/base/usr/share/cursor/resize-dlur.png b/base/usr/share/cursor/resize-dlur.png new file mode 100644 index 0000000000000000000000000000000000000000..785e6fc7ef8df23d5ad9feef9154582a0516ce9f GIT binary patch literal 951 zcmV;o14#UdP)u` zBm_%>x@h8PVwi9s{s}TT$YL~cvC(P@_@n7k!oU&1Iw7fq;ry{cfVPjr+k--iltN1r z?~`2a(tGdj`+VQD^0Zu zz~hExSr11?M`>wkVQy}Yd_KQbPkx(gOH!)%w_Z4d63i0=R%GzFXUfFLpji z9f$|z`15c$EWkAI*f5NB@zH2h48tgPzOKXr90pzt4h~9JSC<5XK`G&Ualuwqd?o7v z0njv!p`jrb78bB=n{+x&BoYzVb>qNGU<&w#>g{v?xZj@G)10em8n$hd$z+H`BDk*m z33v_6Py_K$c>tUKDVv*{>Fn$TI14NTKMMO@wZ@fD>5@_=CMFQsShlvcwUJCF?Zw5# z2dHJ?PhgcQzky16jt1a9a1}TO9AfjAgk@kHc!FAimAyc(gh~R?ffGOrs`=8`m}R_A zBfo%o;5X_mRE?sRjQUcK0ZD^K0ZG6 Zz+dn{LP}6|J~;pY002ovPDHLkV1n%#o>~9^ literal 0 HcmV?d00001 diff --git a/base/usr/share/cursor/resize-horizontal.bmp b/base/usr/share/cursor/resize-horizontal.bmp deleted file mode 100644 index 0ad21df42baffcb1bf05b7e4827f8d6ba7b35dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI0J&O}j6ozNl?@z=J5D{I>M-dX(Ml6+WtZcTlw-f|X1TEEK!B#5^weSb%50GsW zOcM~&hlB(Ifj~k6xjyf8W)NL5%$=kAtsqVzA?xx4!~*|F^V=CTLcapr(IU=ElA=72e14wwVxfH`0e#17~g zFA+<;RM()S4Ym*6_^xE554^#6vmUx81s3zs28|8er)!hN_2 zXCb5>>HmyG`v;ETDK>ft*FbYgJ+p9`oT01vE`?7F?Jg=YiQ*)*Ox@J{t6_JjC;&(v*M}+i}R_Xr?@_m)s zDepsiwI-bh&C!t1z55Mljn=gq;sxnThx#Neopiu~NsV>sK0tzfWe%7F=72e14wwVx PfH`0em;>g(S{(QZGxcwW diff --git a/base/usr/share/cursor/resize-horizontal.png b/base/usr/share/cursor/resize-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..20888504e2a958ca64ee45f74b4679d2a2ad2dd7 GIT binary patch literal 643 zcmV-}0(||6P)%$ zL>o&nSO~T@7FLqV;`{*Gi3B4g$dO8m5ZuT@Fd7Ki9gDZ|4n1^lcY`SNgDJMy|GfXq zym_D~ilQirq9}^;k79EASN@jHkqk-i0jGgtN{#(zcnEC9T3L#k2m`cm)w%|p&6sp8 z)_MkP#osG4VSrY(T9r8I4d5cKiY8?o1Ef}~39tj$RhckAt6VP2U@%x3xD8Z*6TtD5 zaRw0I_oZI13-AKhiKBU%FhHwRDoMZJmmmn12677#*>7SePZI{XZ>^PXw=1L3NXFx_ z1VJE^$wa2psmx|Gna}4EMUiCXClgor!;&Z@G$8wE<26Ppq}l>2zc`9IkqVy1*@>4~oDA;Ay2&Syt{Ya22;o)5aEiYxFH} z2iOKqvVv7wSel3p+ypM+s+jg2SdX<{;@0vuu#xoe-XRS{zzlc|oCn?jAIR2b5BC;4 z$8}&A_>xpFZHo%Hi@gDS0=^|pcmTy%YaIwUWHGYLm>0(a*O{~!_9h`DrwgknilQir dqA1G$&v)3$8%Gwbbm9O2002ovPDHLkV1kJC3U2@a literal 0 HcmV?d00001 diff --git a/base/usr/share/cursor/resize-uldr.bmp b/base/usr/share/cursor/resize-uldr.bmp deleted file mode 100644 index a97f35eaa39931013e8aa6720c54266a5b82fb6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI0yK9qC7{S~;W?N@B4KK^TBzL+mi{FDF6pip5&FzE9q(ysO1&G&VDuh4f6j)Bglcc7mH zbWaRYzpXv=y<^R^(Eb#SXJKDktM1-ukoKLR|1pTLwLeBc=X#g#RobOp_pI%+J{v)` z?_q1-Xw7V-z29PWK5L$%xsJ4Nbk1z%d%v}7&iPp_NQ2G_tzqSjn`zfx?Y3rU?t94d zyKogQ!zqxqUiT_P2O84<27bYP$ig$|wpU&99f@J=;`J>kk8DuBhi-RMbVhcbGYlVS z$p27(p-?cBlar?7eAiypeCTd+O}mVX){iNbN~Y0h#Caq+!8$p?OU9fB?Q8pd=dBYF z`#&=?6X);BBhmf=h0_q_0XkP*i`f5awHoK|%7Jsa+#kd~1f5MO&|YyZba%Z5edjat z^Yby}z{(?k(>DR9LHb>r1Fh*hpl8rNUIgWiLUnNubjN9~Tns(K4v;?Gz4~rw*EL7N Xhj+j`;2rP|cn7=#-U08x);sVQ^jvMo diff --git a/base/usr/share/cursor/resize-uldr.png b/base/usr/share/cursor/resize-uldr.png new file mode 100644 index 0000000000000000000000000000000000000000..884c910fa3932477604ddb8d224eb570470b91af GIT binary patch literal 854 zcmV-c1F8IpP)t`g`)KqN>i?Vg0)L`4WN~p(sZ{zIUm}M)_4eVu zJv{TjD*cLEIL1-E{e>A%X96HqsZ<;vAA^H~1FNg6 z@FRZ1zF5G8x)1Sac0#CDtB#J2?CtHz<#N{6*5q=zYq)|z@yK@?BwD6Z0jVg8EG#UT zo}RY7y=`o4%=-Fzs!%Arhk0DarE`4a!pP!wKA#Wx1>cN}jMO$aH$%Bx4m&$LA(zY5 z@G)M+fF2W(!B_YRAE1bv!^6Y1jg5^^E|?yp2kNzt&(I=jX=1hFagGGFz$3)yqL&RnO6A>S_DI(?UzUr~j zETYwg{T$xG(@x#;vC@h=-N0*j0pH?lydoCS6YkZ#u&@71vil5Mqobn%YnT#8ww@5c z!=qD}ot+I!OG^RY;SD@5j&eOivpX#|&&2-zeyG)IVR?Bu;CsBKO#$7Qs(=a(@cH54 z;ioe*Gbg*)bow7AMD29mX+6*`jXJrCE0dFxhK7bt>WO=3Yf!r-fOz|HJD<-_OiWBz zSy_?EWMs2hTU%S49t^Zax8iLIZ{tl2iQ|6O*`ntMaXGq!KeQ;On*s*KA@W5$Q-9WQ zm%HLR`VM{t!y-sMl=j>=-=qW}* gLPA19Lc*iuZ(2M-QUBciv;Y7A07*qoM6N<$f}+WSxBvhE literal 0 HcmV?d00001 diff --git a/base/usr/share/cursor/resize-vertical.bmp b/base/usr/share/cursor/resize-vertical.bmp deleted file mode 100644 index 0f233e1ed5a03875e72f4d6efee8f867778b0a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI0Pm5Af7{>3UkrHJ|n*kjzG%Z{Rfn+XY7?@R?p)V0F+Xg`t#Pn}dA0UEu?SeKf z1eeiT6#t_rDk_?$D7`(;?Ve#$7^dAhabEm+ulF3`_rCYsd(XLhcaL@*FOKm22;B79 za$G0C7PRLt{eeII5XU+GIC}?&4^_iix985<(e|?yuobWsFuVd=@Fyn5c}QOYmqF05 z1n9m44!}N$0Uk3Ul=}zBeg)6LJrD=F=b+r*!&O|@l~^qH9s938L znXx0`a9ARdh(x1NulD(T-uumCp-|`-`aA|vpiBLs;#~Ee=(PkLV@GQ$oiK`B>~3zSF2U2R4T^$HyRD8*Xu_52ZKRr zwOZ0_HjVY~bUM;*w~h7h^?K6nc8&EP3)54+j~*CL$zyC4BPe?j>Eod4ee zH-HOtTEDQKTnpX?55P09?$38AufY?*_2Vs|)B2I~;}Q4)eu9(!Tvsl9*!B_Vw0?(< zH>TfWE6HS1YPFj1*`1&b C5^2x? diff --git a/base/usr/share/cursor/resize-vertical.png b/base/usr/share/cursor/resize-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..eab8421f343052a9961dc2758962a4c77e036273 GIT binary patch literal 710 zcmV;%0y+JOP)pr_9pAOt?g&m_W>0Kg2G#$^j&KA#`1{|>wcUI9`3TjI^l zqyQWQB%lREW&MX=_D&9ykr01?K3}TjKd;as;jcyM;nw zS1I*YDYajrlya0(H}d)X2>1Y8M++zJKvMz^a38o^DwXJVy9@>c0CKq;!{Lxlr$ez= z1bBj$xX9{}S{oiZdG(-LtxCV&7vJ~A_kHR0dQz!W1Q-Ihfh!m~)SJdbr%d)G4h8=V zxC2~e!?Sct66JE)YVfwQ(;jdRxD{VVad`^7M`tCBU^BhGkf@=T%@^p@im~9q{{I6W sa0;D?_=Zlsqz(uB9hH%hk+CLz0u7l9y93>ioB#j-07*qoM6N<$f_P~wLI3~& literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/24/applications-generic.bmp b/base/usr/share/icons/24/applications-generic.bmp deleted file mode 100644 index 550015b7de73a7d6a497d12af095273dd79e81dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmdT_NlX)A6s~&m;8Ekz*kxu~@Bosiu~F)RB9zSq1(8J&#fnfi0YN07g3-7uxT8p1 zaNi@rB{3RY5{+AkG0MS%(Tf*PpYNNQw(-V+F>%tbeSPoc`})2Ab;g(6I@+dRt@2(c z7;j>PZGvqSD^h-+_?6r9L$;p7SzI&)n(P2`!7m^s$ib8NW_9oa7ZH&8F6 z)h1e7(?us$bdv2zn-<|Onxo)cfr1Mw6L9V~suC`3la6_9@XjE_xl= zhPS=qYo~Z>6+g}5XVG+5`1c3qskmOG;^rC^x7Vt;Q>@~y3C7H^#-1yy4gK??cUH9M zjXLe3LqEG^cAQ(LH^N_*sG>KZp>Ms0hb0;wZxEE4keE5v*mG~4id&*bEqbI*SH9ur zsLYOM#hGQzi11e?X?Rkm;aSj){t7o<2wqkiVBBBs)@$sccAw~lbgqgY&aYcEI%Q@d z4cVFSd}>oPysC2JO|=_uYdm;g>%m78jG1GNJ=CYpBhl#%7_+-p6w%LiH%H@Vivh;WvBsVcrp9yA#{+X#H{|?#^f@W|ZpqGv=hKwo#+L?z`-kxU+7^x9 zZIg5`W{w){8K{$aZS?5p6Y_9h=EVKFEa%M~=1%=feyitW_4!)8pH~0B{8LqwFVIjS z|6^)ZC2OcQ!I(ML*b|g{N$GqQC4xYLisHE{cz-OMt#D_M7q95|d*9^9etNxLSOD(7 V{`@NUN5cY;+v?}9Jc9r0>ksp)#)$v` diff --git a/base/usr/share/icons/24/mouse-relative.bmp b/base/usr/share/icons/24/mouse-relative.bmp deleted file mode 100644 index f21979a4efd5e4448177024708037d530752f156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH{y$ZrG6h>1Ov7jjEP#nbB-CgS7)WzLb&_M;2BF=q5A4k7W6A8gWX>LKGm!5_+ z;oO@a8Yfw(UXkIQf=CmnscLcrK7;2AG3u zNkFJ+qxA{f&m0%Pe1z*@&K4*euAey!+_$lZn>FS6CER&_Dfc(Oq}%mNyN#cBgzm`m cEa`J&2q*7h6>jF@|E60(-R?T-{{Qa46Y3m$i~s-t diff --git a/base/usr/share/icons/24/mouse-relative.png b/base/usr/share/icons/24/mouse-relative.png new file mode 100644 index 0000000000000000000000000000000000000000..553ea5149f3bfa74a495dd5b9eaf2fea404a7f30 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4M=LZ9 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/24/mouse-status.bmp b/base/usr/share/icons/24/mouse-status.bmp deleted file mode 100644 index ae78dc55b365db4d8bac8e81213b341a78a78ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH`y$ZrG6h_lJh@gm*PU@tqgPU6yCl~c8TwMj79Qp{piBIAnIP2u!;Gj^yPZKG@ zLTOS^=%uG2O?vK4(s~2GAYS3)J_9w0Bbp+|5sYt2Z`hR)2=Tdu*B?&RK-|`iJ29L0 zlRMzx_!}Ut7{h%7a|=1ja7;oT*1iR2&{4VM47@j44dbHr=|CENCxm>ubDb%g6BkTX~4m<$`zLuN- diff --git a/base/usr/share/icons/24/mouse-status.png b/base/usr/share/icons/24/mouse-status.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ab6f33f0dfa0ef950b9c83dfacdcc2b29cb7a1 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4g{j)eDmW}{I1fn;Z(i9RmyU;0*5${_v?A*O1@^D|3bgX$8*<{#ul4Ni)T6Trm#eq z8Hr`Io~e4`dGpv=n-fu|A1TJo{>YZM|G#JD{4ER5^3L1Pmo1Ydzx(p3=d51Ab*1%OKd1>*wt@9k1=?<`njxgN@xNA+}ef8 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/24/net-active.bmp b/base/usr/share/icons/24/net-active.bmp deleted file mode 100644 index 03b70a4888e3891adbaa069fd3d5dff7003874ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmZ?r?c!trgDxOh1H=+g%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Sel7gg`?^y z3ISeVG#!It5SyBS5oq38ApQ@3!B(kBGLy)4Y@!S xsP{b{J3a#CG$}A2ajgBKW1r=S?b9tE@s0RUGL3uyoV diff --git a/base/usr/share/icons/24/net-active.png b/base/usr/share/icons/24/net-active.png new file mode 100644 index 0000000000000000000000000000000000000000..d778416b4c283a3970d8ac8aa66b02bbbec7eb0e GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4bO&jlaczM$Iw0P~ja*7Xk4Y@k;d NJYD@<);T3K0RZkbe*ORe literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/24/net-disconnected.bmp b/base/usr/share/icons/24/net-disconnected.bmp deleted file mode 100644 index cfa5b149eab9af2facdcfe6744b1b7e8a91903d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH|JugH-6ozMa<6|YF^ifF!g#@9|kqr?Mk@zdyC^Rav{(+B^!0o`LSOyP(zMtCdBq6*s~q~V+S;#P^lvlPkhXd_3})lpZ$ek_ z%wo-al|1W1=&kN$AK%7L!IK|r&wpEElpLMGP*?Z6PyksE{s#2?6~g>8##z=*Ty=!{ zroF^-Y0KvD?}io~Z6)KizwOdqg_h;-z$f=1hWY>i diff --git a/base/usr/share/icons/24/net-disconnected.png b/base/usr/share/icons/24/net-disconnected.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2be5bf4c0e120a695563187b11934964665216 GIT binary patch literal 463 zcmV;=0WkiFP)nVu`&?Jv6w3ki@Q6H+U3B)-ksU++KZ_xf%iTF4eh-Hnu;+v@_<>-&{Yy8t%6=G z+bn~TwW|?pvIcq!sN^&RHVxVVO?cmq4e*`=e*(=F!TkemITOuW`~cbnJ%0lqxarD= zPo}2DH`xW%Y~NN!CA}hprHq4YeYHz9tK>6lfB#j10e}uN`kR1CpgoIEKbAb<*2elneE>L+X^f@H8;1Y@002ovPDHLk FV1fxIx0(O| literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/24/utilities-terminal.bmp b/base/usr/share/icons/24/utilities-terminal.bmp deleted file mode 100644 index 70dd5e49bc5d530f9bd71ab810745399e79938b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmdUw%T7~K6o#vg95@0B6e#6>E%#FHmjW%9wv>|EP@vI50^$HsXF73;GQ_co`Wz<4 ziTVIO&hP%VoSjNSWB>zCSnQsjeZIBUzy5O?OP${L+2hpwe{G`XBJTJ?zI$9T*MB|u z6P#Wg^7-7KFP6x@@Ge|;y?fn_H?)s7t4#QBIAFqlJ2W(;;o;%i2-xS5NJKq7J!)xb zvC-Pvsdq0m3WFkxGMZ*Q*}8XDBt*l6#A;juhkFc?&QeZ2yK zfU2vjRasf7ii(OW!!ZBiQ)7F3yE-~L)Y;jouC6Y-@|o}HiJa6+0&R?8V&Y>W4QtIA~{VG}GwlsG`xRT{#~a z84*5UA2rYu{n87Xq1R=t%wETb4R3sWTvJn1nx3B4%*>2kIiH-I)Y#aV$VDD{q8BtH z2Yp=D$}koB;OG`_3U07Jq{QSJlM;_`Z&p{t(#XQPqZuU4n{lksN z<62o+(c0RYlF6i9S65e+NF;17@|WjeF8G1DU)ISm9Ur}6z+GQoS2ml~=H{kdGntH1 zsg%u2U*wpWn6O$g4}9VEP+ME;dN54KM_bsi;wRh67q*n!+fm==CklT$RPVc!$ETiTCavhZ#|nOXriu55+CD1j;qjibPm4+)6qGD% z3a#j2c6Qc!f%l515ziqSd2=>Q$HyZn_-7@Bz8ov?^SPGKj#Mg@w7a{jd_J#@jSbr) zbB9k&%ndK$S8oO$-!L7Y{mG5A0^d&*_;I3<4@cVBf23lus6wHjTrOwl;?<9L@$%*R z%YAB?j*tJick$I;>j= O*th-rYkq?N>*F_rG2{gR diff --git a/base/usr/share/icons/24/volume-full.bmp b/base/usr/share/icons/24/volume-full.bmp deleted file mode 100644 index b5c5d51c9145a02f5262d686816c9a9c81f3aeec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH|&nrYx6vyw7q7cfD*w~R3OFO-d4V(D~SlLpF4gbI_DEXn&D`FMnT@>W`_A{>bI$jkckg+3lEp%oD_sTdTVOAArPcfNE52Hb~sH=KQ2jucwdd-@_)#pRs+Qwz6|! z-Bw@T{}}MyrZeCZe1R!&1|)U~SbbSruMxA7Bk%RD@e9~} diff --git a/base/usr/share/icons/24/volume-full.png b/base/usr/share/icons/24/volume-full.png new file mode 100644 index 0000000000000000000000000000000000000000..dd46a91182e1b506185bf472c9ca9806ff80bbf8 GIT binary patch literal 464 zcmV;>0WbcEP)Nfo5JpGMk#_qq`f~{Tx6$Hvus)-vWh+ z1E8>lnSqZ6nFjLLH>i3aBJIFuCbAsNwFOY~_tMCGA*lJEXk@-1)clV$GCv<`KC$6L u>-dGm8;m92?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4x2Xenuv$y`4vEe?AQ2MD`Nz$$xx`v= z3gP1S&)w{Nd%HJx2KjZ|6`k_oD0Ta(a;4sqgslf{2mZ(X z%noGGRC8!{Z7zS8P3$E^UF&x4ogcupDKv({&^==prBSnhgze>{*PRXL2XH&8JIZ_C zG6!WNV2vQWw@wi{L1!orJ(`2|Rv0FydRo_k$5-J)j(hM&d=pd8Nqv)<6L^VZdQOt} zy3R1gQkP=p4xZq6>mxs@F=HI>edITosqfFq!1v?%_6>a5S8<#E?0{E*j?lCI6t3>C fykFF#daZ5jU58%x?)O1hG{>jDZ!*W2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4v;j}nG&}7QD1m0~4%sGuMb34KmgZ|Xu*mHz`)3N+!0BYLx-bPW<=y^OGMS^Tw0L2vwK12 z$E#1PINb%8N3Hl@5a%k@vzEVM-qGhLF0#sgvibTYDDLvg1ceHfxXT=qb@+2{KL nT0ZUl>H?orKi_Em-G6U#@{3cv8D-Oeo@DTJ^>bP0l+XkKcI}4S literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/24/volume-mute.bmp b/base/usr/share/icons/24/volume-mute.bmp deleted file mode 100644 index 486e5bdf9003782318e92586afecf11e65f1f580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeHHF%H5o3=A+aFoIy?EnS#c_)1q^&~LE;6G&8o#}r@NL#HT&3IYp_>bi~XJKJ%a zt&6d%S7G<9$-I?;Te=Y}W-lj=;I&ElpB1+h-t)VU8Tj@ zzoGK?79M^KQ*F#i@veq-F@YcWd~C!hM(mmR(BL30Vs1~c;TywL8+^G!_~;ewsud&l z%$QhzLL8r*FZ!)~Jags}(mHEe4}9O5&k%>^L=O0+_`b;J*TMai8XVvHzopEx$NGH- E?#C=TWdHyG diff --git a/base/usr/share/icons/24/volume-mute.png b/base/usr/share/icons/24/volume-mute.png new file mode 100644 index 0000000000000000000000000000000000000000..f169e613f1967b9be454af8565a689f6e8a4ceba GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4ls9Wub8&q&xbNF);In1x$wd?RBU7C2%|EHqxJrw`QM-b} zN%M!w1c#ju%MTW}zh`SwkYLSKTKI8G)a;#x68Ao9ni*EJar1~h<6XYV^@8=rb5e5- zJ(iPr;BBD(Fq}tevSn1f?jFmWBc^xnWIR)TW!oG->rQ2_{Tk!nroJ<#RA;R8vb*(V gZOEt1tAEw!?uZoTNj)?BEzq$Hp00i_>zopr0B%Zb5C8xG literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/panel-shutdown.bmp b/base/usr/share/icons/panel-shutdown.bmp deleted file mode 100644 index 3e983e40ec13c4faddaa425effc5a25345d9b719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2074 zcmeH`yGnyW5QSHR#tYHT!ph##Midd!h=LZ0Z(`vEL9Dz~K8V^X=qo7N7{Nwu1Y2+A z?{{=3gvEtPK(KJgmz|wGd)Ulws*9t2;Vbs}-h`1zR~QQ=@`G{+jmkGnEs7ADpHQ8v zt=NKh?Dh)(b58t_BBB90rwH*iW`uo4a=~M{uy525T>9M znPxnKSCGc*J%siaPJ*l_O$%U$pz6`mW(TCE6}@u)-22Jn(b{`u{sN!0z(Dq5#UUn`w>{30d{~v;IY8+ z2=oKn>U1;sXK0UFQ}5N4(7rTJT?5fDhFNbuy=Q1iY$t z4HmL+w*9)jM^$#J8Fox88&zKwVJl0pC@})k>@hbuXZGbv_B2gU_oMF{cgn zDpn)3S{bzTJ&s>o2dca^37`%f0b6B{(0{zgE2SPVW}Br(yZ`_I07*qoM6N<$f)Jg$ AYXATM literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/watchface.bmp b/base/usr/share/icons/watchface.bmp deleted file mode 100644 index aac606aa827804be7a09326caf1c7e4de1e0b6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78538 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 diff --git a/base/usr/share/icons/weather/01d.png b/base/usr/share/icons/weather/01d.png new file mode 100644 index 0000000000000000000000000000000000000000..2752e83f093748956cad53c6930b027b2c5384e8 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4+)e>vgs;^Bp_`ondIbfM>h{YS*YhT}nvTy0Wkx-rzb6JLQL4Eqca+W_! zy{5^-o*VPU!u@D$)44$rjF6*2UngAL8m1qC} literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/01n.bmp b/base/usr/share/icons/weather/01n.bmp deleted file mode 100644 index 22f1cd36a36d85b4dcb58d091f858bfff87ac1d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmZ?r?c!trgDxOh1H=+g%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Sel7gg`?^Q zMF?mBqq_@;&jIm!ApQ)*mw~t!h_!&2T)+m@+X=*ff%rcT{0AsL5r|oVm=wSQRKE_0 zcLMP=AO@MS6^Oq9F*dt)1I02{s~`KbgvAdn1{>7sv+11+{=V(5x>&3<{GeKuj&OIe=!R1Mw*!o&dx; LKs*WtcL)FgkW;>1 diff --git a/base/usr/share/icons/weather/01n.png b/base/usr/share/icons/weather/01n.png new file mode 100644 index 0000000000000000000000000000000000000000..7fdd331903a7297e30ccea51793cc84fd83b0453 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4H#(d0?&rHd?@}k#PdhV7xyb+A$+X}LVwLK(MV_~O6@IHUKVPT$WLHCs z38RcygWb&)(h*t=is_}yZ-qWYm~V(-iaQvhO8u| zSjol?8;KIe@8cZZPWN%fSjpG?=A83A{@=alo_kaMnYi<58UE8ysfak$PD~=iFN?pB zrLwH!eE*zO@6fys*p5-##6OZ(!gkd|0gS^wT)+k-;HOqZ?Has679Q0obIlX;D;KBC z7oiZsY?&Oblk0duZPcfSTz3TSAXi;?e$q#O8o%^@$Wwp9L%#*zj`DBiso!eo53_z% zNS_Kg2KPPN&R3{2t<$A-&Abj|pW0v!Y_wm<8v%KKrezEbIeT)3dQ|SJ5jXoi6CYE# zrgj;AzvuZ*Y!G5F1xFz7*E%#pHw-{I1X-H6c};pP_q_mdL!*PW^lk>}5oFuMwVvO2 zPtGoE!kI^Y6Fxs%^2qn=QJ>%+#`9JF{zB>$R>qHc;OO@~t?88K{9#__yELfe)uE BC))r3 diff --git a/base/usr/share/icons/weather/02d.png b/base/usr/share/icons/weather/02d.png new file mode 100644 index 0000000000000000000000000000000000000000..675345d75c51c82c07018cdc9aac0fce444cc145 GIT binary patch literal 491 zcmVRsKphY1wF-pgTCehZv(A6zy-PjjWwE};t02W zDvX#7eAgZ11}!O8J1MFc=n*s&q~@$~R|8eP0GGfk&<}XlTmev=g3XxfYM>2Jb0B6M zH0xKcnK*bm=q&>NWgtzU70@~84s-w-1Wo#IbtI_Qb^u%jl|j>HelKASK0u3c2_~$c zAMme-ENIl>Y}7#WpiEeTIZ)lW2kHb}{BlR_Myc>X$7Xz#a@!8WkAs%E0Z#nZP)b;| zBpZoRk@tJ3=adRUuMRs=IR(68x)7Tn584NPnxOX(P!)7<`88+@w>LtqpgvFzv;;cE hKWK-bq66rU+BX17!zD0tiW~p{002ovPDHLkV1i&`#AyHk literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/02n.bmp b/base/usr/share/icons/weather/02n.bmp deleted file mode 100644 index 46563ff1b8c619f02cfe35b99b3f8a73522ddd48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH{y-Pw-6u{q8lQe3HKBka}C~_%-mMC#)h>DsT8v1}2t+h6|MBq??4!KDbw6?X> z5E0SP66DlhP*d~)QP}V3dvJN6&%6#nJ^Xp^@!az}kBj#vrcxoJ_@wyWgiagNh!}p! zkk2=lkg)U=45Rdsu#lLT+elu#_AQ=vwMDib&3G)<-z* z#UY>ue_+mbwLm`vU>VNf9*&^9)-9m62@c>33h-i&GIw}m{-AKnd>g`EeOZ$R$Me(i zoLXPG9^_1T((udsj92jc$UkfPSIYV2cihLC{y`6a2mY%Xd+b+oJ2~94Pcc}pvd;(W z=D~Cv)sEEUJbJv7U#iyUUPrAT*5DH4d>uj*#$X!Sp{~~tz97uPFv!`ycE6WSjIROI zvv;TCbJyaQ|Cs9Eaj(&danC6JPv!$UK6fp?6UCo)=XGMdlZspJ?4XWMt;ID0a$n1y XWS}l?JdLmlH?Rj$weSD@_wB$phdo*W diff --git a/base/usr/share/icons/weather/02n.png b/base/usr/share/icons/weather/02n.png new file mode 100644 index 0000000000000000000000000000000000000000..527f928d5ec4743f60fa933503b177d9fdaf973a GIT binary patch literal 409 zcmV;K0cQS*P)Hxk!GW_0a{Pz{5g{|664%hk!fS^Ai;O7JL=}b`1dC|g1z!LdJ{uY~h zLxS$euadjukSvaI(=3zMWRC0>U-Jz)B`aeDO{x9?WheJ}O{nd000000NkvXXu0mjf D^7*Yw literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/03d.bmp b/base/usr/share/icons/weather/03d.bmp deleted file mode 120000 index 2802226f..00000000 --- a/base/usr/share/icons/weather/03d.bmp +++ /dev/null @@ -1 +0,0 @@ -02d.bmp \ No newline at end of file diff --git a/base/usr/share/icons/weather/03d.png b/base/usr/share/icons/weather/03d.png new file mode 120000 index 00000000..4568cc8a --- /dev/null +++ b/base/usr/share/icons/weather/03d.png @@ -0,0 +1 @@ +02d.png \ No newline at end of file diff --git a/base/usr/share/icons/weather/03n.bmp b/base/usr/share/icons/weather/03n.bmp deleted file mode 120000 index ba14749e..00000000 --- a/base/usr/share/icons/weather/03n.bmp +++ /dev/null @@ -1 +0,0 @@ -02n.bmp \ No newline at end of file diff --git a/base/usr/share/icons/weather/03n.png b/base/usr/share/icons/weather/03n.png new file mode 120000 index 00000000..d3dfe499 --- /dev/null +++ b/base/usr/share/icons/weather/03n.png @@ -0,0 +1 @@ +02n.png \ No newline at end of file diff --git a/base/usr/share/icons/weather/04d.bmp b/base/usr/share/icons/weather/04d.bmp deleted file mode 100644 index 1cc47a0d6d64da6d015682011dc941dc680df0b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH|%_~Gv7>Dm55+kwkSwj&!Wn&>}7Cy7Ujp)6!0B@#7TEM><|A{$@%7nF~! ztSnh5`5MoUdv&_ay)$=avhp_1ocEmfyuWkaduPsx4#WzrZ;SE002MYND`Mp;Li{%T zgSxiGE$jDVMZ1S)oj|H>PO20Ca9$%NO~4FvK^~-IA@X`*4OXBBcHk4@2G{s)P;bzL zUj|-QOzap;ouK{)`6ti-ZrjRG+uX|oT2;mxrTDK|)Yn=YhJH(ywWWV!=vU&q-=SG= zI{u}huXk}qKOG&foOPFe9sT<(t)cf@Awx-u%YT$^=zvprhBvr^IVb_0 zCBxwSUq|sL!OKR7na@P^*4p#6mTHnodkQ+C83y4Hlq(HCn|JZLc6tj$b9+#x5(GRYQLZq9VZ5$N_IF7bF2;+^Cg`8tBY7jm`s9W1ak0&$6@ zl5I1^pT)d~XIO3a&fy{s4B`7%^b6!iE21tr*6dYesu}MmcgSUOhRl;EjqgI6aYv!h z!R}^!AM=cC`i84E}|q+Db9++m^>E@{v+tnmnJ7c%8f;CpTD&yr;qybu(MX8!X~R zarT|MEqrRNP1W=2bDMF literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/04n.bmp b/base/usr/share/icons/weather/04n.bmp deleted file mode 100644 index d99f1a15d494c9807dc8a4756d7002b530f3586a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH{D@X)U6hPnlWBr3$7BQ@XA{K*142BJU!Xjuf3uY0qnM4q_h@WWIs==Znc9TJ^ zVzQY8@wcAq&dBA#=*)OAdD*jb-|xJc_hw$PRBm*iQRaUI@&OrFaJAAx`%P;VDF#t- z?(64@dk+>U?Pua8HXhXojeI!F^4#!bLFtOfZV*LSEWuE>X>N6}B-0a4LH z+c9WQ()^9_C(sLi?EccN@8up>r<$Xk{MpbibL}Yqps`#0*UFzK_xDggZ<_p4`DHIo zDW~y7joJ46-IVW)=8*mE^8E4)IqFv79Bv`%-oC3pW1M^oKShB)PYLHZh~d@q&e8uh zVh&v|@5VkfL(&*!jO_g*ynvhy%g_dsFazQDIz*l}r(FP;5ohAtbvX+1!MZTsxAp5Q3T`_?~bkGN7WjR{*Vo_CQV0={Vp` zPz&@4>Vcj>$Dj&m2ec1bwrAI~!Vf@^(*`$@*Pbg-ISYIV^fdxLDvjTuv!D~u9jKEL zK1e&6%P_nOdL0w$rwdy21+ARmgIu`qc{`{)1&;tz)-VT{3|~N+D!76U(92oS_SU-0 zu{~YTf-jgMc@-xC$Dmt&{_LT?%K+QJ77zpXKpm)gXP<#X;LX`9CTsKV5>pOVD^^+p hUXuQrDBaz_)dxEIZHa7CxRd|@002ovPDHLkV1gf8u5$nY literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/09d.bmp b/base/usr/share/icons/weather/09d.bmp deleted file mode 100644 index 5a388ae604d41cdad7bd24c0d885eaf927c8ae76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmZ?r?c!trgDxOh1H=+g%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Sel7gg~L=G z8!-4ffcPmCgV-Q3Y5|aW|Iu(e70m~^8{PaTB$!Xg|8KCE|C$8z3Hg5&7V}qj2IAj${XjtxbaY#P~lM$^0Y|%m$?~V*OtQG`EsOvq9!l>VJ?Kga9%ACzQ?z*+Izv zgwh!y^9jilN@s-h6Y@VX=?tG8g#1rzI>TiLA^%gF&WQ0pG3gAK`-$~Gp>&4Jd`kU~ X%Uon}O8k#(4n8)y{>NwLP?7@xo)2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4fhyMF-jQGIfIq#CfpZkqRo61xwm6`>%v*rYN&vPndcj3|VcM%9; z;b2u{F?eX$5b!F(XNg4E;Z6_PmL`Gi4;M@JEMNr^K@Kr&&5SmZyy^>7ngy9poJ(*P aVPM#8B5vfAYxNcAR0dC1KbLh*2~7aCe_=HM literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/09n.bmp b/base/usr/share/icons/weather/09n.bmp deleted file mode 120000 index 9cd57e20..00000000 --- a/base/usr/share/icons/weather/09n.bmp +++ /dev/null @@ -1 +0,0 @@ -09d.bmp \ No newline at end of file diff --git a/base/usr/share/icons/weather/09n.png b/base/usr/share/icons/weather/09n.png new file mode 120000 index 00000000..cca1f5de --- /dev/null +++ b/base/usr/share/icons/weather/09n.png @@ -0,0 +1 @@ +09d.png \ No newline at end of file diff --git a/base/usr/share/icons/weather/10d.bmp b/base/usr/share/icons/weather/10d.bmp deleted file mode 100644 index 2ab7599d02b764fc2452440173c8e9c5d470a86d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmZ?r?c!trgDxOh1H=+g%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Sel7gg`?_* zZ3wUdlTZf`KZRlt8ze?805b1C8g8ee`55DW|MpX~x G5C8x~ZJy`= diff --git a/base/usr/share/icons/weather/10d.png b/base/usr/share/icons/weather/10d.png new file mode 100644 index 0000000000000000000000000000000000000000..7c15092dd2edba3a3cb30cb93bedf115fe7512b8 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4nBZ zmIu6I+;PdlCta5D+INa5r!bxi*)+q$a8KJ~Pu2f7B_#fp8yNhl=Q=7YVEBkv-f?A% vzyZ;dF3W|AbQid39c0(=Q(c^(!pLylC(pjuY}rPjQy4s5{an^LB{Ts5Cv{iU literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/10n.bmp b/base/usr/share/icons/weather/10n.bmp deleted file mode 120000 index 275ca5e5..00000000 --- a/base/usr/share/icons/weather/10n.bmp +++ /dev/null @@ -1 +0,0 @@ -10d.bmp \ No newline at end of file diff --git a/base/usr/share/icons/weather/10n.png b/base/usr/share/icons/weather/10n.png new file mode 120000 index 00000000..6e012271 --- /dev/null +++ b/base/usr/share/icons/weather/10n.png @@ -0,0 +1 @@ +10d.png \ No newline at end of file diff --git a/base/usr/share/icons/weather/11d.bmp b/base/usr/share/icons/weather/11d.bmp deleted file mode 100644 index 0a9cb3c224a194f0bd8f36d081fc9a860b9f21fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmeH`y-EW?5P&y{qA6lyVJZ>9N)Qn%?GDt+LVLkS5CRqw5VXq^_zsqqf^Q%yA{OFL zXQz#*pc23Fc4U$DZud?bamaVOxw-x3GTBWQJ9YCB9j0uVz{Q6W%3|@YPH+@z-sf(i`CfdO`he&3JRVVgTQ$ zLmzWr%@}_VjtQ8AA=rUSxU%zM#;-L){Zp*H0PV@EGuL~M+`Dr)X1)eh$cldQ*Px!* zaVy6^Tf!~x@&MA?@1m?`mF1A$~b`vR`9E&eox)hP!9a$d46p>$@~q+lB+!hjoy;Ga$Xp+w&-s4&W zR1BVyaV%pIr+AMw%-|0;D9(n=p9!)~a=|B+@eY~3EO?B}lC>ImowvwTQ}{gj(hywr z5m_1pzeBzc0q^=N>9?<07y;h(WR-ZMVc(kS5I_3;!EN$wgz8^4C?a#@Q;#Fr^)K?X z;!X0L{L_&h8XZjPFu29`y#UB*UM9V}1Dqbq=4IqW~wIePFYIS16_UjP6A M07*qoM6N<$f(>28YybcN literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/weather/11n.bmp b/base/usr/share/icons/weather/11n.bmp deleted file mode 120000 index f459c00f..00000000 --- a/base/usr/share/icons/weather/11n.bmp +++ /dev/null @@ -1 +0,0 @@ -11d.bmp \ No newline at end of file diff --git a/base/usr/share/icons/weather/11n.png b/base/usr/share/icons/weather/11n.png new file mode 120000 index 00000000..b227917d --- /dev/null +++ b/base/usr/share/icons/weather/11n.png @@ -0,0 +1 @@ +11d.png \ No newline at end of file diff --git a/base/usr/share/icons/weather/13d.bmp b/base/usr/share/icons/weather/13d.bmp deleted file mode 100644 index 3fdeed061a7ed45701920abf35c168912dbb6b14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2442 zcmds%xk`gU6otnHM8w`sixe)=Mjt?fAPP2uFJLRFY%IhF2#60LK809{ppDVW!UZfW z1S_@B&V})O@%~{L$m+zxLr(5w?zv~?zyD+k%cXu-K}p|R;*hb+jkq2%%HItBke>$c zT=nA$3o9F0qS@HptneS|ihkU|)WCDwPq<@0Rw3h*>)_|L#)Bec%v`&e@p(6|y@uE| zU%VNIKub*{4EQORQ|-Py9>p#l)e!fZgCWqMrG{EOYGG6PFX>K2_L+~KA?trwKj}v+ z+7s!i#iJHjdrzL9BK`-`_W4{@9{ZCkONW*kYU}NP$F%6*Y<#D@mJ^0 zX#W4qoS8d(TPQiF56MFW6Dkr2>oj5Zrv@w!En2=6tXlZCkCxwZTV%Nk} z?$XYgnytzOB~!^%WRqOLh<1>a+{wyMtMPw7t0w%rsqW2>~HtJVZ{fiY*K^U|Ka_q0~78<=q`*J(K0 z|Joy+H>URRb%8fd3A4f&o=b;}yQ}2k56Ig&W85Fujn`-jv)(v0SfJ+uj!Kg{@tv?= zdVz~dE@30qD|tn@CNywRC&r~o9PM*_1omcAmB*BP_O6RcK2zl}dvoXBr_{;K)Iq%c{t-E$XD z@Q<+V|AV$RzSz%h5UQN-6F*YrqyBk*c;KiDC#?#2N0#pl zD2b3~%1lBE`iCQbp=A`-n4OPFHC#c6>(_o}wgn5IhdGV(^nx!DFKr9F23O$Io@54;}N+fMCWaLAr>)OJ2$E6gK$GW1-+V?U0v?ts_x+@MD5T(L%t-dTQ+ z(DRV>6xd+xyilG4kKyIldZ7Jct)8>&c^K#6 zGjfIY{uYq;H+hdjdvd2#`%@411icfzlxsg!dmpZOm-*s#E{g+A@A?!@`=&GIpYdbx z-S9*3+N1FI;onye;=Nqy+bIzAfaL>^uf&6y7vTEM~{no;$v}epHn&$gG zy07kahddi--{A((u7g3eRo3cV0=YsSwxD-WFCPzj{;NmlKxgY3GmC7^KVwv@{}KIX L#1T8N9}fHhnBZYX diff --git a/base/usr/share/icons/weather/50d.png b/base/usr/share/icons/weather/50d.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9f14b8e9458645245d06ad30190eebb197de6f GIT binary patch literal 678 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�IJ-X-IJY>u-&P(%RjfYwn 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 VM$^D(8W>FjqiJ9?4bUVF007yxbzJ}e diff --git a/base/usr/share/panel.png b/base/usr/share/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7336272182bce5efb8ab222e1efb82e6124fb8 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^20$#s!3HGNb8JolDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#E-N#ui0;+dXIOwjZk{fVArXh) z-Y^tApdi9}kX^V~uz@M%^72E>7eBV!vfqyL{G`1~U{azopr0H{1RE*O%|pQ2tu~MW-|LUuV+fDc>%f5tu+_LDhlc<_=TOGk-a*B`dn z90|6O@_Z}xZR_*l8;Sp{?YXyG<3;B^6MLQibiusuMgNEw|N5zT$;F%FrI&1u{V(}@ zADOd;2QNR#(m@xUoz&ghVw3HW;(Ru~JyPe?KKz;2V}1nxwg!Lh?f4cuj4!)%QyegL zW4!#bjWOXj8{!p(*5^;Oq0CvsgO?1S=n$vIpUk8Myky9V8(nnL zE#KHGb=Tw?EdPry{c)HQG47X54ED}_+b{Q!Z5Zrx#eUG0kH^7Rt&2BITNe|rek|U2 z_1ZY3C1Z2e@ZhaJ(NX=On+>sHvy-;l{e)>pdp~?lPFC5XXSeJx>QX-2H#srkvJLU7 z+*f=2`ouJG+GBCZHEZKd*FGADUH3@5<@&$ITha8Ea%|2T9=v48(m@xUbhE)0n{4;^ zGSYg{Bf2%6xnxhO4{G#)shdi^zb5m;p2BiyVuBCm!+-x!y#0nX@y;1*;)od!#t}1H z%CR|Xc<_=TO9x$aswFnqs=k!CH2oR2|JKL!Z2hi@Mb@+&6<_+Q5As?*$PGF3=EU;0 z=?^EqhYIc^XRVHR{o#Rl_l*6{F=3|TtpqLXemdVPVR)Jt=I!nmXJ z#rZRoPkM%WldIxPFa2_WJ^Lt6>@7@3&1$f}_vSyx`)1!ClWw^$-k23SfTYcRq(ydM1SKF~d&hYgaDQUqlK9l3#qsGs-4&l{$=IAVJk=kvbW~sHW`iv@^)Wpe7MNh`xN|o5 z)ZUo5H&-9aU8lq%&sh7Qx64;OMLo)8dBAS*A@k&;cPuM=4I{kA-+5%A{ z`6UYr8Jn|)2e0^$m21@(y4hfhO}1euF-c4%ChlVmX4q>?JOecI+1uRP+!^1)uhA!k0haPbiSFWmjd_|nn^al*3sapJOhg^bNvtNxH7TYO1fbkfZR zTWqooLy1XZf(^#@tcRT+p2@n;KzaAp7xYbne3d3rw)VSe{>+Jo1d}S-J5e<})o(+0)N{@1nD0PuNr8gGpRj$hu zdko*#?wecipZ>t?`1XT0#dlgVHpd@4c*&5ZgRb6~I4jv?8;0K8f)UpCPF&v!G=Ajs zrv9uaIJ@1i#nZj6$*DEvEG~7Cb=eyWIWJ%AHJsmEeRG_#=EnHm!?WW1kIXD&Y|a`U zyky9VXN`%PXT!O#cd-ovEHJ^=^sV&6Gjj9p!aIz{k9>Ca-07LE)<)@5c}LX;-HpUs z+?{7~S|6>kko)q+p2G|O57*uhKVCPzkg+*yc<_>`F`G*gnf2dk^=Sk6#}@ee&8u z#^$Wy!ApiL9dyx2HydoR$u2IaX{ zOa|dS13$!M5Z?RnWf0!O@ncZli}Ga<-c$1f4Z?SW>dPQ}$KlJMd{?W!^v7lNednzC z<)?b-exq_18(rU>dwtQzy5Fkmy>fK@9YFQR`QohXp8M4w-|j}o-(^%^{B(zLAM1WI zss8xs8=m)k|G$4H)9Xw1$DQBvOZT09uTMK3lOan-@AsJDc6R0O_1%4aXS}Qbj_hAC Cwzi-E diff --git a/base/usr/share/pong/ball.png b/base/usr/share/pong/ball.png new file mode 100644 index 0000000000000000000000000000000000000000..90e3159691113ae0a32b2cccd319acd685641bb9 GIT binary patch literal 2349 zcmV+|3DWk7P)DJ3IuWyOHd#e!E~gwkzBi`NNJ%E5DJRCg)Jp($3{Ez?l~0q^Uci0 z@kfMguJrWY?9RLQ{O|vK-w}7`nT(6F1DwM-4eTPE1a^Uw`5U)^Jv`rqcYzyR@%?A9 zygU_ac;@gTzz(qj>7s)_mI)^)gBkt+h4fTlJ zH)PM?I?M&twU?dTnja)Gz}KaUS2fw&2r0bmaPni5}{WdH*n5*wz8nZ}4df)VQ& z$pAbeF`_o2773p$k@u~)pTBaHvxk8h4rL=Tkw9#NeJx-|W|$7dFkm`l0QoLj?-M(z zU^du?MMMp^h}nor#7!ZNur27RCHjvD_W?MQW%|x%XC&FgZz_nd55!@Hg#il#Q4=5w z8AxSi#ZI#4$~Y*hHL;JvhK*=uB-j#-BN|7-xJ2I@3mAZ(Z?c(nAjv!Z1yJT-rvmZF zJOKzZEX;_S03}w2WbnGdPF8><)tcIeS~heW(-lX8jc8mFVgeKn7U->5)Xacyt$MR5 zkQ68W37kN|zoEqKIWf!{h)~q4u~NaTcrOrK%0h*a4c@9}BQD!Lg9&j-xW7RDX2k*A zKFU2yMui(R-x zT*d@AHqeca4!j!XhP)Dy_Y7bw%lyN}NMhsPK;UJFuV*HPIb)c2tjvi+0Wl{Qa1&OB z&%{WH7mba=$Ra(DnTg6qx`%N=`1`V?Gm()m^S0j}G8=D@vsmBNx~s`}ha4-KVVlkx zh|U2NFrMAS>(>Aj^{FG7IR=2zLND%SG84 zfOF*X$B#>m0VOTBegatq6DF>?I)iHXD~wo5M|!4uwnPKsNqx)$TGq{AOafXmhvS0W zakA{^2AtCfDYHFR@}y*_eG*u9xVhL+1zrVYT`tx$q84!*@iw0yaw;)ej!jww0BP3x?F2S{v4%$|&iTUCp=#tOh~gW#gI zJa7?Eg;|6H0CtDm?SNU$PiyvCv)B&U8dF`4)nd;qC7G2KDjSR$gc_37r>M^Q&i5PJ z-HV(v5)k2JV`Ru$(52t?h3=m6r&X}p?5J}FMa_U}+@hB4Aira}wsEYixh99?WVD6z z-2tYIR7cX8V!_}U=%+4%G(ce>hIyOG4ONBsh|Q9mY}R-xD>Bg-N#msQf(#{f0Ablz z*wcK6l(?o;ykxPod;eVHMNU6TnvqhGRD(R~{S@7)>lQBh!ddXtA4}u*0PF#;GnN-0 zvB;!c?P_pq6`xBsY?3+wIny0mgTYD`Y%6nh>l`MB=gn;~b#K7AjWkC3mQ8Ejl*-Pg zrE0A!O2p1_LL_-7%{BpzC0jN?eU;cZB=Q>6=M|ZXoP`l@jN~?^tqI<`9_zKXnIW2X zy88YS?A#F#tyszdv6Qp5w6zhLl)ak(Z2)H0tJdC-yW(IV_YA(cLGauWv;sg|iJAb! zl*!V8$ZV{pC=JZA+D-YJSgZwCErmBSBYu1BQ6eilb7>cHNVyGw6WjMqUNxF*U!_xXBgYFR}3&@J$vV_YK{N zSfQ13pblC6KBchozE&@tljWNI6lNNrSexEm2l5(}AU|@Qf!_l` z_6*sMEs?VkF-=)$)Rh{$YE7#rbig&{-02BQ-3qAKO}f+@Q?gf^!jX~dP`c}>6LA%Q zk3skIOR?-+YoLWVcHNF~(&Y%_BCAt*UL5k=tJtEe*OzVns&Xr`?8pB2;p%!9W#ml; zz6)&0he^FuR^94q&f_c9UBF90^c3x&zRTFVX|;Upkj6ts-Yg$lu9c8o2H*k6o!k|V zsTW&}GT2!APU~zey3Yp;%WUNNITR-1l%d8-zWTKazkKrqv;QvP@?tY24)qmwM4(&?a^R^8y?zG%$ar z9Jzg-2R*fgT7qHcwGJi+Jpk`;#Wx=G9DZVTlnXrIE5I4|_y6E9v>(s?@$?kT3-E)1GG2(EaP;H3|545Ac+HSuUVFdqdCvnMcGq2({NHQ!|1Z+iq!S+(@f z{I|JuY5ecf1Fw73ZTZ8#`#;-$;AXSAbcXdsZ@A^sZCY>9x>M^zTA$F`?74U>&*8be z2Cv0yp2e0!pK~w0&ug?kptY~Phdz$i<~?|?L+v~5@t>vFyhH1gTEnh4-g3p}&5!wv z&Cfjab2e|g_FkKxd(h`?e*UV@-`sisFWPJISf0akc@18R*X;M;y>8dyy-%}mpTFOz z*SSk8ufO@Rn?8N>*6Tla^9xsg!Rhus;9qXu-s?{7r(xtZd2QaK-;?*ohJ9?^^_VO4 zTzrt%+q~)KPuu*g-s3b|{P);@J}I0b8(Xm#xR$_nCV9Tl@Kb zowq#Vvp2u^fG^w+gKV%5V*gdb!pgt*!~quGllN|0unF6avwOZD%mc$4+Slt@f?7K_r?ZnY1{Vk%ZMeO_qOZqbr1$(#&*X3tG{&fOY;IpW7#*p z@)=@FW5LGxv){fApW?%V{lNPT3|Gq+*#AJ*m-Py!2}}Dhww|`*m$vaZ?vvj}ULqz> zd(G{?C!QQj#_(mEUlxX6eo(LA;csV*FW$5Hf~~u9GP&AV$q|QeI(Qaeln=`Odke?B z+Bd>7;_E=4U|Z+0?f9a0elj@r&aLzNH!mud;se?LVAg$l1|e_uahX+FsXa2N(V!*5C{Abw;0Ht1w_YIMA5(1=?mWtue=wZo}`z7ZpeE zz-HV3uQtDOZLN1`_kH@C{UR*GCwh&&Kev8=Y;8RT2K2IVpwkY0EgtWf(&uVlD4zV8 z3xn;yP8hEH@?ODHeld4upKN_T``CibjREa%9Ea9zzYj4*%`-1Lo(2ZlfBn`1Q~c8L z#dCR$v+%v^2^j7S4)pUrpTYc?w_jN?wfG`_DEoi)`mfmh>J7bg+qihNli45i0<(?#+#WHdSU0!v1+gSQ4Et~R*SgIrJcXsX5}$o!?dS(`q-)iE&DPpQ}l=AE3 z3uAbUa6IPgdKIR`7?1t6hYO2+(zV3-w>h$BJ&gU?_rk$EVZ{yd)DlzXK>QH$Nuc6;t0plROUwIsfww|7dL%< z`vCi|T(5y;im&05ue1hs{?&W9AK9ZG#{TU4;28B!ah!ZRe4&_Md{G$Q^SCQF?|Ix+ zy&99SjQDDv*e5ebthH1R{}FI39Phe;wq3=PxNTod7#=SS^Aaxm$XLoJ#N#TqRFkZ= z=tuV8di;?6G=I2`Q~#{fOBc>D^={P&K4C_g6$i|?-O z)+qEN)Wg$rR_xDyB96{g#qrX&)Gys?|0cNzUdtEu0~nt0p!MQD{G!M3Sf0akE4I*EOC51vMO{CI z>#;xki8#AD2REo0#FTl_@zfaJ`-BH?-uuK}x@}zgn>jOl0^eJw42~>Z=h*v6 zw#EMJCq34=DjZk*F5IB@C8pww^237R8ew4xPp~+?iYKesa%~Ssn(L?Jtk|FZL>%-S z?*HI;*T1gei7DqOc&*QSV0h9soA>p4ul9ju_+*K#nIpUheU)b@r{t{IpZ!=I$yGDQ z6~}`ci7E4#n1=ml>S+PI+aX752oU87;;dqAo z4dWo+&N0=#Ab#*c?EmKLHt%EgzvCDDM((06j@Xh$8C*yEs;*m~oS?H}fA(W>C||he zP|xXHr8-`9qqu?gBab>qDL=u5*!)|ve_pwt$COVx2kSLP{#|jsdyx}zR_xDyB94)( zn&aEtAg18O6i>GQDc5g)YhLk7;>$h}-#h=VIHI~9eR5Lnjs4k=#nHW!^+#d%^I2;duYk9#Siq!184A1)oqSsf&7z;z-qz;>eVRqdXZCdZ|u*$ z6UWH8=&B`G701Jk&Qruxd~xeTWP4+HhH$Wq2mfsO1in)f!x8Du!S&><6ZB&2&weZp z|R=7UrEbB$*-rc==?9aX%hib<)_gQq+sN=1v;D&NeV#>U*FM{C_!Z9tdD9(mY zI<|NX>qc?J^{}~Ka|d!(=iVJPB=%=Nf@9Q<(ueMyf&*=crV2O6Q^eHp1wN4d-@?#xnT?zJtRY5e_utDra@>Jx0IB{_NX0M(wc9t(@zg!?~*JpX)~QExA_tmCxI; zBn%%Ah7UZam+^olK2dDxIin^X;kx>Da+Y)N@%laXXFq~N=T?+^Cpxo`n+w!(%qT_q<-u)h=B8%|3ze ziY;nlIAX5PISZYo<07dcyZVsWpM4w0=sUnc?bymygX3^RTB`URU*HGqzj5=yZ>z;^ z?sJTZ`{oHbSkEnvP!Fl=>zu`V7Y^m#9knp_XFr028n|6MG%ur1u*RkLLyLqP#1uIy zzK|aZ!%f;*!hvswPvAQ^Dz-{%bzQeUDZRL^AxCRr?9YA_2Q_f19V6$CTs3iA@j*;E z&x+I7YYfkq{qt%p_6fO5&!Hx|whyj%&QgBoJuCN4HDs$6#{TTb<4EoJYUwI+u5wlC zIQ5TwE3H9YARqC0e~@^x{g2&z=moVt`25G#eU2~jgxux4wQwYL-TEZCH#LMlgj#qA z4r)0wD{5eBhi3ce!;!1tcYB@Eq`i`k~IOi_83Y~5(Vs1RrzA(4t3;Q7$vKz}y=0AQTZw-#P z9tsCscg|XBi07pAA=EbmAH1+uu<$qYM0_W2g(Inl?sJ(tkb5WnK5F4se;fO=uW-z@JUGy~ z&bi%lC|6khDqukIoijfA(!0%-(8d zrQ?~@a^t9+`@Sc2uA<+dZkQV#Q|$}e|Dszqe=sj$0%Q3^u|<8?b9oK&h3mRro4ii$ z&3{*2&dQs;pI8NPYZV>y!7cY_@gy9cg z`~juU)yfYe;55H|(zIu|NAx9HR!-{16Q{=Umru z)w1G-Y6dX{x8sMGJW&{?)mV6pV@tY==N8vXpIB#&+&kA0^;0`)dhE}B1jnkDgQIJQ z^r3TZ=c?j(xH0)cKKP^We4^HqdVy#0$%k%xoO84}0@qd7owKa7$h|dlNIzA5;Zbc8 z`?C)mLzB?YQp2S zt-%r1!{jV*Fh7}VNNQnglYMYlTWx8Q1xNR?t*a_mHOIvbYTodL?EYh6_~Vy-bFcEt z;*)Ts>!I@Al6%3S+?!e$9G;P`HCFtPJ^m%7qu7Ti) zu5ulR<5f4Dr-&*0qA>i)cRgjpG9LMczu^Yx>KY2wj-3E*KqC7TpWN@9FrO$}>;JtWH zW?4tH$)vGjfA*s|zQR3a)$;0}M(rTyqN|*%(CJk-5>s%(elUio2@6Yj@C!ca*eb5y ztb8Yqbj~98jv68y?x(sIa$YR@bv_mn`?C)m)`&HmUNi|fsDV{GN*|UUajr7Qm2asT z#FRdF+x^{7+x%&-Khe&8_K9Pw@^95cxc;cpS?EP-2*(oWr|1i(n$9^Vv&M@3*=HQq zh|&QA2YukqAw{HIQmA!PE`~KKI+2V-mx_c4l z-kN7s4WSmUacpbF*q=Q()*7*Ap`!*?-{IP!Jh{qM!a=-LOg**y0ESmRy%x9e2|Vf8 zTDYE^)w$QT@S1fk)cMYw7vf_GlU9uV*$0lR(YnlgdN$2W7aYu`se#lE>)g^+uH)jk zx$#ora7@V;jp5H;^^6V6cyynA0^jvmo|AgGv-E-(@SG<3}LMmV}JI6L*HvhkG)g6Y^AMk2@cH`x^|3QrJjkp zVI1&V@dJhr3&V$B{j6Hx(S7{Qv1N`>M+yh8<=i`JNcV-aHW^xRna9Qc>UeQOI1*F%0sFuAIkj~A!@6(87PVa*K?AIFFEu1Jof+voH;Lw5w0rE&zTjxh z-g7Hv7DJP`mNO$+YKQwj>bNvIaZjG&bGI*q;V*g_Pkb^s0uFJVoW=ZvULF0;42W7d zw8^9uquqPX8~d{xhv&L|EKN8TjW}zP;HX{}8=R}e+rbTR=<_#*@B7xxU$F2CK1pne zBi34I-+@ClWX2&KG;6FekF$2K9whc>FC264k-62DwxX7&22wkctKc}?AWsof_yPN0 z``lW(&3z-b^jO!!&RMA;RSVl6;E=A1R^+?Io{vsFNbJu(aJcu_)`-j(qDiRb%oe2A zgF_mlIIfry4*TN!ghLqq@^!V0NB7w$vLxn8-qaNOwErlzBRc+Z+QELw3}yT|_Q zGY)2u*18~Kt3CyN%=ZG(nS2(d5xXx> zEuU%!`4df!ZRDxp3t{-k_t!F>_=Nn6MnN-@ds{EMhUmEAsOikCS2$X`PrX#^&wd0) zpNCOechXk$v#I6Oz|OhORf8ME)bk3%4?KVK5ti_9Ut-I3#5t>SFEylUA$?)`bZ{{L znKZ9H^iWIhQS-Oca8#}u94Dsmh3x;UA9#Tmx4F-;1xL*F%DsFRC*yd) zRu8hA6A=5euW)qlG3Ia4y4F_e19cpUx>dD9y_0ip*FWV}IL+s83_p0==C4@7Q$7ht zp5>f1a&KygUYp|~)>xV``B+G6-f{lVHT&RLjx`%cv~Fuev=w!C#zFo}uKEk*)`}_l z;s@o69})(ZZhz$aIn6aoJH=Xh6D#SJvj89bxfx;?}9@;NcXn!Lw5TkJ+1t) z*6gKqtr4F+;h+XmJDhXXZ-nEHslxEr|Nh%IEUf*M95fBf`Pw|JOeRhVQ7Q z+xCe$qB_z!i`+{MK^M3dGF!AZDXlm(Z}%WIcVBwK*q?nT4$pOGt=rlv{cLbJ=T;s6 zOL3g|ffL5?!@|K59`18&QAfn}KfC>z)|M+A^y$%9@&`J*dXVa+4#6>w7xY}$nmt-~ zXe(-Y>2=qR&bj6Wc?w_1{{QnIUg*Vb?sMJ}M~s7BVsG5#$TjO|e z&3R?ZfQ+CIdW(=HDVt@3pX7^Ciot`6F>(1IrIMjEbbICu>RpEwxA^YF( z;#$IDpNKcb^~za1m)DrJ2|AP+nR^g4@7zmqj)rXHI)B(4`?D90IyYwExUqYvfkPTm z?=du@YkAi|<7kd6H~sYwE1ur)qRm}ze6bg|xzBkEu9LI$oWk)G>w=-Nj6<52UdlMG zTITKphmNnEgk$Q>M=uBt>Cctc9hyWq=m9(Dn&aXDabyht@gzpedlVcrI^25NP+m0>$&GnGnYaFVDuIZD;vgYj`A5ugMNm-#`Cwdd({uLBL*YSOyW zMeb**<;EdhMXpkgC64Ti|Mc?B->~Et?&EJfh8kiVdhXCzt$CR%j$UdP4%tZT@Y%-? z*=v@V*;UVcm@(wI2mTO_(R)nVin`2vivGg6DmY~S|NYP3H;>J*U_l5IvXISmDrn41ego$E;x-x9#)x55VCW!@#lCduUEVUtXFdI67DT=*!9% zjRU`YRQEY&k$Z!Kny%O2xVp7F{xA;pgo**56EOLM&v?w@_QBD!s~N}W1$+L+yk~`j z8c5C+pWy?(_}G8>ZZB?gAAjR9u7%Mi%o~D(V^hN6o^Tt7Y&sRkG~2BiTxLE!W9Z`r zj;n!V(unjO)Iez{!l2*^OhK?J|S&aoWir&xRj6a7bUENvP$)0Utj0|$1)p@{n>+KneBd!=U@2L=PD6b;OL&#{&4S68j)EKbs8=B z(I0uKZ6==n_9t%la%{nM{f);|O)rhb%sM?t&8z8c*Eq&3PB^eJGv3&rec*Ipz|M5r7+35wV_dvHA2byHY@e{)FQ+Ig%t!}Sy=&@@Y((XO4 zc8|`i!8m$`rCFTMYrr38#i6-H`Qs=K_a4!@#_?k3S94r3^>;t@YA@o;TvzU;*F}dJ z2U^koI0i>%ac9C&vv$vRiK|^WIJPN&tZ`H=r%qrqG4=8P`f4w32M4v#8tZjEHwg}o zd3x5+vmg9%1V_!>PmZfTW-w;$9arFZIy|5Jv5iCemAM->8i(@J-~Hqrn~(qW_jqxe zoaI_bA7ZU|3J$&J5gdHS({ZKquv9C;@9f3%eQ@;5hZ%!=+U}vGU!$$46XYkj@$t93 z#*5qB$KOhuwB~hOJ;Sf%9zC-k`0*SGYtmiX4!y_PA9n{wpVO{$ zZdP%%FAmi`KaArw!tgq;kN@;*q_ehg zsJC7G@zm99bhkhD!!eFID@QNK22b+GDL9mK|KWeW&WrqeIdS-y?J@P^2o4_`JSz^> z@*_BIU&qxU{*Wzvw#iqYavcBb^_zdtDu4Wc9R3c)J?W1XKkgxasP=H&_xQYfK6%c0 zG(Jb>a^)-K+Iu4J9*#r(N9xCRJwG>fFgo$1xH7MJIlEzB|o* zIM?UM{EB(vd78s*;n4RhkDDj1=DX*1E~;~PnJ4NPMB&K1{Q}IXHIvVAoYlFzj;r9f zxy~Uw$Hxs;$D=Olah!h=$JIE$q|O6KT-CYl)A6XByL+CGbLv?18b^I+;=&zw-o~MG z2gY{|l&|W1299%1=QC^{Klk|z=j=Ry#^Liz29Aq$UIyo))cHOa?>w1t{?!FPZ)xDr zxn`WJwe$QdzKe5F&Lf*~`255RcwV2*UG()=?2ik2o~6#|{U>qWt8j2`ufMZ>udX5^zT9Py=|^hG=IO=$DZq4GS1%| z=OXL8=X}4mzRObIuRRyvOEnH1TbptC7~#^R^BvxCuD-q>z;{5-=l6s;MtHHmx6Sp+ z=5rdxxvx2gx4%1a-oHn`!f}zWYrr|~IrgmcWbp?xljXZC7vwq<#-U>eW5#=tulq55 z=fJZczI%58ufx)_(J}kUcL>LKZ1bJx>AUnJ_nw#Q;w-b#F*5-N*MJNTu2;)(!siOd zsD)f_N$0xjdo`Tjz;{zPfASu?PElr~Ju~5Zpra?`T9(o7#<6_=F4r(QH`k3aj%8*7 z4tkJ_b{#Lz;xcRK9(`ONF4vl9jm38r^L=5y@4)xw&{=%9X2h1hPeFWn={E7k-*}9_ zQ>*9ryAtDCGWESEj^S~x)VRh3*8fe~*TEhL^+MVAM*1QB9%dDZVnZdOUxMqgV z!{YceT9NPejhe3WpT{+qbPn#|h`!&*we9$B2ta@9WOSiffGTMasDBs`i zb9u+Lyu@`l!ZBQ5&r6>_KFAu^hSOun3%>q}zE8<{&2_D%=^90v@z2*_SzVg}fAG0$ z<$DI%b3fNTFpl{eCbQ-pIO_Tae4mMHIi9=gKz5H_+Wi7wmlGUQFSTgii*}vV?g^(J zBwCU0(_fhD)}|-CVSP=qp|M6StYd}Fz2fQMy1tj`{0rZeU*WtLw{;(XSQqI!+uehV^D_pHnk%kq;dA;riZ3{a*F7IN zrfa2Y?tUS!LqB?ut!vlzIZQq$K-YWmbuFde&*$#~bPs}dA6juso9Ox|`Ar$}%*a`q zXIV3SO=ks?nhIXHigA5#X40`la znk`oDt=}T!8i>ii)CaWuJ@q>#(e7wP=I$5vcV*D-E3LR(XVlj$qEAmBf_~>3w&ps& zS9Fek=O;L}w4#3}_3@fFs4sL4v3~FC>ce%_bu|2lE%k`h?A6kJuHlM59?NsAM|8e9 z*QE0GO7t1=9==u-ztNys;OhF1`i#?KoYa5tH~Rw|)>y4gT+{PgCUrhma@OFw<|o!D z%3J1%vD|~dgSFC%!O^vl{+9ExoO_u8o!{Rj8(LBGQRZ=(n^d1p?!6el6IWU>*It@y zdesp3A?V)B9L)8uBOP1j3Gp>8?j!D)-_ei54e|tY3(rXOn!L8Jxy$z+Gbhn`BIEZ5 z6)XGlBi8`oxy%*qkGY1ZH=u@icA}iccVW#Dea8ijV!q4X!g3G(jv`tSjb&}JTr-tx zx>P^axtE-U&eD95ddT%U&?tP~eC}TOp#3m>LEogu@*JMaYmlqR=kYTx@}I9AL+!Xszx%pqljRunyDs4G@UCm&1^!*+oi#nbHA?R7<5TD? z@zZr3jwnvZTjsm+DlxQLDR5Qn_@7s>t%Xu^ELpbh9 zUWv|PR#O}~hrb)%bCc~FQn|PFqV$R9a=Pvdvuo#HLkX z-*P^dYN2O~$|uQLqaIR66er{$*AnGm>?V%9xJ~`0X6P|I)^&qp9jdA8Ty_8Hw|$PU z<)`Ug{_dK-RSTnzbtNS-W!gV;}*lM5X_=xQm?}@X*(7upH z=CSZ<&GGsjVP6xq`wrflb8&NBJ8YjM?bB`!~a}Gxldc zf}@YI`MUJX-XBIE(z%zM#km1p*NY?M-`OXMFJl3Z78s-_=~wIvV(M0Ds^&)Zfc-n$ z(z#2{?cX8;hiuxmGxlfS{<~{>j)mM%-^GjWP0ljcnFEC*j;+Nfw%hgxL;FHK?1-sw zBfYG&DEWl<;&&|`Qk z&#}fG9Oriv7aY{B!lB=n*y_vkxyKLLbN{^m($#f7)~F%My~$Y%*HsU@jyP`(pQxS~ z3w+T6gK`w}gyDAiN96Oa_^KEqmh1;GkZY%ya@{aDW{y{`;(GWa=gO8{Hpc$! zyB;%Yq5F{Jtl&^@NL_~`PrSxjYw&%>0$;GdF_;(eg|PG7s()8WyNMglRs9=FI^UBX z=(yT}&9OiGu{csgI`@v8#d&hnb=SiwwiNT^Q?5~0e!(|d_(=EhH}g9&)!e8$zHq#9 z6*)Jx<8JsPHKb>9*1gtQobOk4-P)HrLjKj~OHG9Dj<5Iy48#%(Uv!@0Ij$S#Msb|$ z(pis;T&3U0IHq>&>yM>|DEE4nReI4mD_mDSSxJRBc5 z^q&5mS90!-+Oand#h+`4^4^lOwzxhx(y@h4$X&sLZ?f=%{)XS2r-&(QL%31%s^}4O zT)C=p?s}#>b0ECPKL2gLUAb2{dIq%QtY~;R(i+7+DIAWk84DO12fss|nBuvE8|u?m zIP{(zJ3cPw9^w!8A=d9452>8BaJ@N_*rG>NJ)lqY=N{X$!|jzX5>w&Eq({hA(YaeQ z#QAfMAF|JXn{OxgTK7&lYjDJMB>7i3!joVjjxklmn&?`BPtYo0nU;M;{ibHyl_Jt$#BZ@86#PZ1!U-5zWV6ZR1Az$dZ)FNKXJ%@2f zkC3abX`Opa&OHc+b8nq*gc50%1BJId$?wSH$u)i^&37u;@PwnJ} zd)dxaSMS!j`K;rI?74r}K6J10$H-Z&;o%5zQL#1oBv`}+_+VUMSova#spf|DNOIK) zIyZL4{_MGb*B;$lIg4XdUDvIBsUsa*s)_N5<7;4%Z-N0{*cVewb=??soE|Xx@EDyN zJ7a(L+`nrdIV(DAaJ@N#Mp5qMT$P4e&WeFs(nG8BBpdqf|y#kG3lxkauxQ) z{_MkM{cYE6`eXOFa9wqM#S!waW=_R-d{Xh{&mP-te_`Nn@deMRm?|8+Ca-Nh0>@9u zRcFFMuP%)+bDesa{9CcrJi#Xe3vt%V7-nB+PL-IVZj3r!J>W_DFrRh&kUjSwx0lX> zBli_YsOy?L%p9>#zP@~t_yP-j@xl+maDVG5`yx2>TE&g3;~bwnNms?r*q=T3AGheU9kDg>gyRd2G4S-_zJWuJ zb?uvD${M%p_$hiMcE$eex&NenaNYH=>j)Z!yw$Pg{;D}|o3TCiuY9r8KKC14H_VMa zIgYKdKl@4c=WpTqnj@8enfUu;80s;6sB9UTnuyxIrC1MUUjOjUTe-{?qoFpL9J$YoSr5*qVJ(c4ParnimVd zqebZd;JE7F3G4+CFNDd@`_fj2Q>FXAJF&5mTy3hjIfOV}JJJ z?B2fLIMlDh5wzASZ;9{DUE5f8U?4YGPf`2GQ}j(;H+YZj_dV|4u|NB9kK4Y#xZWH= zYmL~tpX{1&G!}d_7WZj^mB*GZ(6@=H(zyF_9NS`l_HBDl`nNgaIzm5EwH>|X*qVLP zc4K=M7#3f2o+75yH+fcd05|S7j@FFKUPo-1?`te0#@YunhT)45Q|bTqkEzRo1CF3k zMr?hBXF}vI$5;Esw&R202jWRNO8#@rSjE(r?xoe|SV=r(pZ|8+ZF9tZRrl=S`{a{> z1w6gX32Efn7t}t-l=3Z_>JV<+U4QU=I6^;Cu@%1K6Y5FD7koLgsNH(Z@CCJxV*_ZB z1G#ZoaKMpOY;_KnPX-ppSYzS#z)-oC98tB8Jau?XT^1bfN65d5E%SZy$qI{ngMTIr zvoClqufa^=(3qNVd?Nh#`KvyE@7lxj(LYOUh41l+;;XSZhKM7_Qpb~W)bIthFEO>J zrt^+?=T#2WR9)jlNn3n0h9Es{SXY|Mfu|FF@?>I;m+WA+qL&P z0}l1<RJ+?Ojv9?_Rkn*U+8=L&Qk}*6nLF`Dyf|+x?Hl}~ z+~isT1~f=~amG9a4s4eFVECfoc;hWsY<}U&FE|)WY9iM|puW4FsK$fEngu+>krx=M zUU-(E=bWYXfdN~wxiMVYY&IVVmbYI2xd-ELY=!Um1g%1R=`+XX!c+G9KIhryMSO9F zn8H@sjqPAyy(Tz*?50mY97kfy^&Ov38?0nb?Yp)tsRhxC2%6SiTa?7d?P12{fQ_uUmNZ+XOLAC5zxtLq~16)ffpzR|+| z#!&S_xX<7VY-?MwdGj^hMVTaA0ff-nHW^9;cjk zY4f)04y^I*6USHlV%r-7_6Ng(zQ7i2l5M-w(0Iaz z#(-_uxNY~Ye}CqT1x&=`A>1EW%zgN;#ckFBe&9Wu5BLEL*tW~&VNSJk%d*>0TNpc(8pB`*}@XyK5Zw^WLX%dY9e1 z?jyh9n@?)-+FocIbQ-aXex?^Vq!;6{JcsA<8oXBPC0?KRqNW{}TX)&H?|sxxbimMK yx;=1RrrW$W@3CE{_qFlR$Dxza%k(dIYSCBHU+#;G$MPJW%WFh?A8JP)|Nj7}QtyEP diff --git a/base/usr/share/pong/paddle-blue.png b/base/usr/share/pong/paddle-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..517c94ef1b3e7b08eccde736984da75bceab2ee5 GIT binary patch literal 8638 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 QA^-pY07*qoM6N<$f?@%c=>Px# literal 0 HcmV?d00001 diff --git a/base/usr/share/pong/paddle-red.bmp b/base/usr/share/pong/paddle-red.bmp deleted file mode 100644 index ba08e31778c88dd94701efab12a978090c97fc6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60138 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 x#}>z~+d=ir%`@TO{VJ!D>FLPLX&$Ywx{}1gKu diff --git a/base/usr/share/pong/paddle-red.png b/base/usr/share/pong/paddle-red.png new file mode 100644 index 0000000000000000000000000000000000000000..67ca88bcaf168386dbe77c69fa117a76257608e3 GIT binary patch literal 5708 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 literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/active/ll.bmp b/base/usr/share/ttk/active/ll.bmp deleted file mode 100644 index 054f155f9400e476ecb134fce66fbe8a0b542f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcma)%y$%6E6h`kN;wKV~5S2uw&?z*w5Q$18S}L!g^#q=6qxCrB9IS{aOy=zD?)Tk$ zzgcdsSv=N-=NXzWvKU2`_Z9lB^MucGrHJ>A<$8B2g@4b=w=ty@FN`F5#2oUe`@aTt zXn?s}pvPMMYHjF34+b!VvbQ={i$08D3Nx649{XFbK7j>n;Q&W4gFWnTy?V;?{1ZLq ebH4qpSC677O3Z40^ErPHzdYX0{N{81x91L-qC+15 diff --git a/base/usr/share/ttk/active/ll.png b/base/usr/share/ttk/active/ll.png new file mode 100644 index 0000000000000000000000000000000000000000..e050e2f894e4d9288c299a0da8f4c786031082e1 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjQhwOH=O_B-6dOnRJexo;H#g(OQ{BTAg}b8}Pk zN*J7rQWHy3QxwWGOEMJPJ$(bh8~Mb6iaI=9977~7$DTWzc{qWG?ScEY*-jY>TP&YW zV6-}7zR3K9(Oivoffw;poKuo@1oWHSJsRcK-+0_|{@Sfdnd1RhL)G5>IJ`ZylvU_I z>$+?aR`#5ajmg<>vwM?1UYEXCxZ+NtvB_cT|lY^h#7&H6HF^GFav27AimBE!9XSq{AXZ*BL*k;pkkN=u{0B!LXcft XKr9W!RzREv#Q*K=>=-_O{tUwaKI9a( diff --git a/base/usr/share/ttk/active/lm.png b/base/usr/share/ttk/active/lm.png new file mode 100644 index 0000000000000000000000000000000000000000..920f783f6652cec9fb11eb853eda6f74bffa9bc6 GIT binary patch literal 1028 zcmV+f1pE7mP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vha^@@u$G>}uJ%WG;9>-{$*&FQf_pdSO({88J zcizTE6GT9MlBePP^LvC}xQHx=q~^Kg9C4+R3RgUMyso->ifQ$6zun_Id5C3CFhqh; zu2;`nenQUB=PhsBPK8`w43%?F9PcOUHpIRi+>vZYLYITM4Tri732)EodOxmh#a!H8 zx6ro!*z+q5KDUN0iE-9Ume41TX1U4kJy3B4!e1EKtkpUO$! z=g0FqIUmo8hg`VvjnRFK^V(fa8C%YKQ}-42**kb*ePzTw|k#5EGwl7?~RjwE&?5M&TwGTr?VNQlyImdc$!L zNco9{mfN!2HF7xaFLV2rTjf3@%(r7`9?Ac}tF3C99)@vJmNG072yNKgY28at`F z5`4Fh*W@Z7s4LBm4c2%}3&4LUy&W!DpaqJG@hV`lz6~Hnh(Hkx2?)eYqLe8bb1)(# z(gCO<^jS~`u#hTu1j$Jx0}iSHzOlw=sj~7V#)l9fRB{jln<5pkQc|2BOO7*CRWzw; zR#VraHA|iqmb2ygMXe^5Of8$4Td^8kJh^&ybNAx4a1nfQwV)o0mr`nl(+bNKt1A?0 zJ@}9#9eU)$4nN9K8;2$>HEp?B^Hy5z+@+(Ad+ye~mtIdgag@$<>X}bF{VZo4IBG*i z8anc@;iH66A8NGA_G9}G)M!)VMQSSALk&{1+XT(eiB4u9#)$yjCIOPbJeftOlz5Vx z%wl0wg))NF38&K}27>7%)I000JJOGiWi z000000Qp0^e*gdg32;bRa{vGh*8l(w*8xH(n|J^K00(qQO+^Rf1Q-Pm0oQoMHUIzs z8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b04YgCK~xCWCB!ii03Zwm yuw2=&fS1ZaF-~3p3}lET3P0U_VHXZ8m@po|q6Pc<L3$XA8C-C%!N4h=_&Dew$?S zc=Kk<{k^dK-1NPQZcSk`YihsM{bTS#M}Lyp`?Yd+y!gexYvW5uFQ5*@%F$9vR?}0B zd>zpiE#X?%OjVnRkr;};K#RBgt+ii?rI?Gc(1=;*erKI4aS$7^5a{ruFJ38x@CiEn n=u1z$EXL@d#gD$^V~$^%lj`JS4(27hd$8g|KIULv{tKEXmO(=w diff --git a/base/usr/share/ttk/active/lr.png b/base/usr/share/ttk/active/lr.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bc08123ed7053134ef2a3f31fcdaae5075fbc8 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjQhwOH=O_B-6dOnQR<(w$U*LXst}5hc#~xw)x% zB@E6*sfi`2DGKG8B^e6tp1uL$jeO!jMRlGojv*44bI%{-JmetI`cPj@-P=QT-Zlwu zkGYo7trdnGfs;QPX*(K!keK%OXJxXCyXn#?2PDu- agZ%l8&hhiL9B%?$!rN+ RAeIJVDi(P=vF21s-{BT!(&0CYlRXL)k}PqJC~?lu%}vcK zVQ?-=O)N=GQ7F$W$xv|j^bH7a^>bP0l+XkK2EjPC literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/active/mr.bmp b/base/usr/share/ttk/active/mr.bmp deleted file mode 100644 index a853e1804c96662c8fa16d7cdfc20c4804cb08d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ?rUBmzZT|lY^h}nRc5sVcWn1Qqe5MSqoU?39){xdMZ5rdO^P%%t`Segk<;eR_j SyELGf6%b1UF&7Yn><0jmgA5P= diff --git a/base/usr/share/ttk/active/mr.png b/base/usr/share/ttk/active/mr.png new file mode 100644 index 0000000000000000000000000000000000000000..7978e46f1111797804f7085bf35668e4dcb5f41d GIT binary patch literal 1085 zcmV-D1j74?P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vta@-&chW~Sl9>J0j634-O%=895eqS)&WRpyi zPHNVGL6(Fbgg5j*zeo6mi#TzJYMydR2d44IpC`&z#J&yO2Dc%h%fPV}hq4t3Z_Dv|KFeN7c6+^q zy5+~7Ut#dMG*nTHlP0o=I`UzbGWyO(G{mhsE+lt;ihg+246L%pwQ2X>yuDjrl zs99hF^RrK)s72`V6tp-@jg;@Wetv!CdAMEQ$e&T)y*H@2yeA#@)}T$~nNWJPAC8m0 zjEC1q7q?fIQ`$X#9(Q`Y@gNs&d}A~pqhG5lF=5GRFX~?6>OtZ`3(;bP>@hL*XqPz@M#z{p(Xf{Q|fO|mp`K(E*i zf>D0>Ld$Gk<|;W1H}ZhpLr_L|jyN-vvB7HEN>qP-HBtZfAd5j;>hLjnRvLatDv!D1x5=r7rb2{ zP|C@tobl8%op$<}&r&&5sj+HJ)vDKAOXDUDdE8R7<}J6+JUdX4y_I!$6&HN4@#Mn<#3oN6cxYu?fj$- zUkQApHEU7B^VIFwT;X(We(T`ebgiHL%tuS`H_rHs84ZZyJcv*b*2>HLv+%R_OGSN@ zw=>%@%w4W6$HF?R6qt>vwB@jC$Bg64)13i|UDw)=H00006VoOIv00000008+zyMF)x010qNS#tmY4c7nw4c7reD4Tcy000McNliru zeSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{001FL zL_t&t*JH4=v-{7$z>vnkz+lC|z#z@Qz`(`8z`zUuFq#5_Pk86Q00000NkvXXu0mjf DsiyE( literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/active/ul.bmp b/base/usr/share/ttk/active/ul.bmp deleted file mode 100644 index dca7f524e15024446ad304e4a9b06ce521b3ed60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1458 zcmbu9PfEi;6vn50?#12@iN{) zPvGkLeU&GV!hn#_UnlAO=FK-lC;8-k#m%oLd_RH>&;kv2-~zNq=>ORK1&?}(bAKO~ zm*)@K@!xi7LF8PVy9r`&4+k$PQf*p|KF>s5`%iX=sy9M;G5_1`JyE+S51ZI zehut^5KO^W9LF-79;?Ha-YVDzhad%SQ4~p;B{G{tTDO7UmjT}$oI3(l5CpGb7=EJe zJOj=fJ*~Ngd%kDrvMw_)?+tJwLYM1dPP(ki49v^5aUbYemsy#CdAT-@;hw3dE;BGM Seb(pRa-8+l)yy2jJmd!-Yc~!6 diff --git a/base/usr/share/ttk/active/ul.png b/base/usr/share/ttk/active/ul.png new file mode 100644 index 0000000000000000000000000000000000000000..586c7dee7086d99c3c543bf4c1b0fc85f40772f0 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^Ahse08<2buY2^W=7>k44ofy`glX(f`uqAoByDx`7I;J!1GQfVVMZs7*%d%R_7YEDSN1#H!c5Y7uMF0%2MS4+xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~Ou&ba4!^IQ@2_A>Sbb9@qJEw=4~iT5+W1 z$dL>m|lc&PG-3urFV8?Y(brJEEv0bn3@eTP4OT=_`(w zxo}D3PxxWdaI5bGljHU;Uk-JE^4qT1^gt8QOXm7^OsgL(2M9rNcOyB0^=cO2p9k>3+=^^;MI z-N#7--*x1|c4Qwr~Jc<|cIL~3sZeitwj|Uk7!JW4Y z!S$s1PTKa!c@Qhg2YGM4XgL*xn1^ura+@0e=JMwtq?G8o4oWGewMNtTJ&ZBTS_|hK n^WLKgAt1)cQcB1O>_4Ag!dgc+SQW>)|O*-JcqUD@w&3o~hJt`_3^4-}Ftag8W(&d<$F z%`0JWE=o--Nlj5G&n(GMaQE~L2yf&Q2P$&(ba4#fxIXukA#a0$1nWcn{zg%D(E|bO zp)DFcij2JW-sVDV(@w`0ZD7gXz^Z$r*HA0mnnn1p-O^QRA2z-J^WF9(zfo}L?UH>! P!x%hW{an^LB{Ts5CqB z6*#({6G^#^eIO*{Ykuzc&bzPhlAgXVneuqT?;}_P9ndm+#=-Rf^^f&m@K_yU%=9#A zes*6K{(D`hi4p|C3{e!_!SO*GurKx_-EMaVn-_+mXqtK$FE!@&S93UKt{2C#Xl!1u z*Aq=sFG&*7*z(de6-`qw%QDf}^0dQyo7eC6MPu^@gMnz8dc)yRG`74v&qdSJ8;wSy zvE^xp_wa79Z~p9~@pvp6csKA)z%H2Xx1uOS1Mdp;W3U5OLAftqF56P^eBSxSKD|Kg z2yENDhsoiW@B0(fU9bgK0KW}o7IFlR!f2ugllJwJ+mLq#T@O><9q%` W9M3xYVc%5_9l~*hwW?ls==}if^EVFw diff --git a/base/usr/share/ttk/active/ur.png b/base/usr/share/ttk/active/ur.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b04cbb25dc24fed62a08c0d11167489403fe95 GIT binary patch literal 2101 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 diff --git a/base/usr/share/ttk/inactive/button-close.png b/base/usr/share/ttk/inactive/button-close.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d0a75ff8ee27fa4ffb3955bbf52b15fbc4ea00 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPq2NScJnD^B?Gl4>qC9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^`~o-U3d5|>+h9l01BIGDEn|20c)Pc@fI(=!!i)!n}t8&nQS v#A_NEw<>quSy!{EpuoSvGXHMqw3+sHoQgHA51cH4hA?=#`njxgN@xNAcA-4R literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/button-maximize.bmp b/base/usr/share/ttk/inactive/button-maximize.bmp deleted file mode 100644 index 64595454315a78cecf6f4c6e7d55856e0c9eb3e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmZ?r?P6pAgDxOh1H>Fq%*dd?zzmWB$_sNtFo+8U{}~wIh{4G{s2Cb^-t(Oxu{QvVcgf+qsH07zERAXQ;NaI{lygK*}NTa8#pUXO@geCwHASbE- literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/ll.bmp b/base/usr/share/ttk/inactive/ll.bmp deleted file mode 100644 index 37d17bd282613af85d6041511ce3ecc383387eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmZ?rJ;%rZ23kl0m@(Jg@dfUE%-# z{~2h6L0&}0$o7E5S%H`vi1~q70E&^-faJx2*bIn0f!G&{VQN5Tfb@gp|J&KwA!B4U gAoD$-Y8d|f`2)vLe}l{c*$*-wWCmOwq?QOZ06LYS_W%F@ diff --git a/base/usr/share/ttk/inactive/ll.png b/base/usr/share/ttk/inactive/ll.png new file mode 100644 index 0000000000000000000000000000000000000000..0649352250146204dc4f3337217d51d4c151f857 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjQhwOH=O_B-4nESj1ObsA+rA;}Wgh!W@g+}zZ> z5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%q9jij#}J9jz2|rHGCA_NUQFI1psbN#Ju{)` z*ZU?miIXg6RMMJjC#Bl{J|#a>(^#?K`0B0Gl6kcC{8l)1`nPU-#D4EW_4&}A%Jb)4 wVm=<|doC5Ua7OR#GauPSZ#>+!`M&Hc?zK0S8LU5tg1pS&>FVdQ&MBb@0Hq^XVE_OC literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/lm.bmp b/base/usr/share/ttk/inactive/lm.bmp deleted file mode 100644 index 81dd77df4b90152e11964e7d2d3b76049fefcb20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmZ?rUB>_cT|lY^h#7&H6HF^GFav27AimBE!9XSq{AXZ*BL*k;pkkN=u{0C9!vFvO YGXOEjegPo%1>*m9c6JPZ{``Sq0QI68mjD0& diff --git a/base/usr/share/ttk/inactive/lm.png b/base/usr/share/ttk/inactive/lm.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4a78dfb44eec60fd245d34ca0c530529044d95 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrE!3HEhySY692^0spJ29*~C-V}>VN3FMcVYMs zf(!O8pA1r4;1O92)P5a=8J#p{R{#asOFVsD+3#?RuxN?DGD?#J3Q3l@MwB?`=jNv7 zl`uFLr6!i7rYMwWmSiZnd-?{1H}Z)C6=`_7IEHXsS3PMc$Y8+1vSAC?Dh~Fq`E9$? o6HW@kl0m@(Jg@dfUE%-# z{~4%&LEb^e*vu3FssUksAm#>QRv-rHL00PvA*=asXJ?0uLFz!} dp_ujO&mRUT2C4M`%7g61rv_v%$bF=$0RT#`q4xj) diff --git a/base/usr/share/ttk/inactive/lr.png b/base/usr/share/ttk/inactive/lr.png new file mode 100644 index 0000000000000000000000000000000000000000..4dddcc5eb807f98515033117381ec3a874de587a GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjQhwOH=O_B-4nESg4L(hp|=g(OQ{BTAg}b8}Pk zN*J7rQWHy3QxwWGOEMJPJ$(bh8~Mb6iV{6t977~7_x2y;Y;fRVd47ax%?r8j+y8H8 z&0v(0uwTyd^`Vo(8@@zmmjd6lp$Tki3s$V)`Ex@Ag4ij;lOVYpmMMzdZc=>)ldeg^Ri~Z?CQbd5po+)z4*}Q$iB}tY}vi literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/ml.bmp b/base/usr/share/ttk/inactive/ml.bmp deleted file mode 100644 index 91556d317e23db3058916fb8b85f77dcf9e0fe2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ?rUBmzZT|lY^h}nRc5sVcWn1Qqe5MSqoU?39){xdMZ5rdO^P%%t`SeglkLXh18 MK||LyGT0A&vgrT_o{ diff --git a/base/usr/share/ttk/inactive/ml.png b/base/usr/share/ttk/inactive/ml.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0ac658b1b9bcaa4633cbcfb86e5f5872f7a926 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ&0V4mNy#E2jDGqXXVpw-h<|Rlr$=lt9;Xep2 z*t>i(P=vF21s-{BTvF_zFVdQ&MBb@0J+IAYybcN literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/mr.bmp b/base/usr/share/ttk/inactive/mr.bmp deleted file mode 100644 index 259e94b5c7c49b9aaefd1b3cc3cf4242f3b3c3fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ?rUBmzZT|lY^h}nRc5sVcWn1Qqe5MSqoU?39){xdMZ5rdO^P%%t`Segk<;eR_j OJ71uf01$)hhXDYKTMMQD diff --git a/base/usr/share/ttk/inactive/mr.png b/base/usr/share/ttk/inactive/mr.png new file mode 100644 index 0000000000000000000000000000000000000000..457296ab41071b2918a28c05c263bcc0abb190d2 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ&0V4mNy#E2jDGqXXVpw-h<|Rlr$=lt9;Xep2 z*t>i(P=vF21s-{BTvG1fR9^2iz}Bw6AbQR1ARo12zopr0Du@e-v9sr literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/ul.bmp b/base/usr/share/ttk/inactive/ul.bmp deleted file mode 100644 index 56d05b20ecfb4ce7dde8e9288bf98ad6ae72f3e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1458 zcmbu9TTX;P5Jh_w6JvZOZb1JeYyiUh{fP79R{V7ZE@xbf%a{fDQPxG7+>EKjNQDFG z=1^4AbXVKmnVaKH&#%gb@}O+oy*t(Gqu&3x`bL{eh;xU-RsHkJa^tVp6GPl+|E;oB zB+D|1b~IK62ojUY_Sdm|js7Lag@6vJ}G1S5=h|tG&9e zg)sAx1K;$TrV+yQ+O`#9wbyl>5N5u>b$l;36+-zz4zDjsq_8q6XA^tzdjsz-KJ)zx`ig+6lJ+ diff --git a/base/usr/share/ttk/inactive/ul.png b/base/usr/share/ttk/inactive/ul.png new file mode 100644 index 0000000000000000000000000000000000000000..32570926206806c11cc2c3ec95e2a560893e3c11 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^Ahse08<2buY2^W=7>k44ofy`glX(f`uqAoByDx`7I;J!1GQfVVMZs7*%d%R_7YEDSN1#HA}ppF6Zu^C0)-??Tq8=H^K)}k z^GX<;i&7IyQd1PlGfOfQ+&z5*!W;R-fr@5&x;TbdoPImeknfNK56km!-+~;3mRdYz z50sk6VE@4U!~Y9Q6dnp_P7r8Xt5f-8>-7(Lt!wvwU=f(WaK4m-^@IcW7YDX)4SShb zw`}7-Y!I_+o%K*X3XTeh+jcgQu&X%Q~lo FCID-Kc3%Jh literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/um.bmp b/base/usr/share/ttk/inactive/um.bmp deleted file mode 100644 index 2cdb7424930c76f412d6d08dc0ca618a4d87e519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcma*iI}So25Cu@wTH_LQ9sK{FAgrJ%KD#u!Z2S~%yJ_Z}ex7GuPeQbNv| cl~Pb^Wvw+#y?2Z;zRI07p|n#{d8T diff --git a/base/usr/share/ttk/inactive/um.png b/base/usr/share/ttk/inactive/um.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec051bcd2b6f6b944d9e31a4c0bce8ee9738b28 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf&!3HEHb{^ah5-1LGcVbv~PUa<$!O>_4Ag!dgc+SQW>)|O*-JcqUD@w&i?C=|vRvW}1`0`*xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~MKgx;Tb#Tu=V-|Gz!6Ftdn(k)eUX2V)>{ z!|2A%n}5?EJ$%@BLP_xd|Nrem9D077t5z^Gc%L;g|9RtjEl@v$r>mdKI;Vst06IfL A+W-In literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/inactive/ur.bmp b/base/usr/share/ttk/inactive/ur.bmp deleted file mode 100644 index 08d8edd95a1736728fa020a51b8506ffe0bea688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1458 zcmchXTS~+*6oxZS1(ERrZb08G-9St4=_PG(UfhbWuE6Dti*XsV03VM3sZ`E{286(b ze$DO6$$^mQ{ozv0SxS<-TZ>?Qb?)4Pigb|woLrDzOY0})AWR* zDE4sf!A7{0W!VWXFVAz5_? zN(cLX`t=X;Bq^WnWXj_qJ*9^>%^9y>?*0k0zow*UYD diff --git a/base/usr/share/ttk/inactive/ur.png b/base/usr/share/ttk/inactive/ur.png new file mode 100644 index 0000000000000000000000000000000000000000..27d796d5b59fce2b1ec8e59bac23684455639da9 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^Ahse08<2buY2^W=7>k44ofy`glX(f`uqAoByDx`7I;J!1GQfVVMZs7*%d%R_7YEDSN1#HA}prH(%C(MKq1Kz*N775{M_8s zyb=cIqSVBa)D(sC%#sWRcTeAd@J2pyprU=AE{-7%&;>z1PeTI{EdU{S+M17>=mJ95fOz-!q=zqwYv2E9h?;XquJQfF-KK1Ni zd3HcVf{C|akJyY&I>la^X1<&G6?0zix_3mP+#$o2Va4}(QzjjgP(QbGYR8OKtF9ej z^hi%<6cC(K9FeWrmBe_4;cefvyv3_ltYUY2`|o?FQd399>;tYjvx@7c=+}0bPuQpb rXVK&QzJJeu%vx;t%(-uGza`_6@GwQL9U6OpK4I{5^>bP0l+XkKP#S~N literal 0 HcmV?d00001 diff --git a/base/usr/share/ttk/toast/default.png b/base/usr/share/ttk/toast/default.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ec4a622d284d96b53dc7c2d6e14745f423bd6f GIT binary patch literal 1710 zcmeHI`&W_&80Lc{FDEBjYFTD^>*UlNirGx3Vn+FC-ZO&KG)VzdQIOLbRF-B|hss2} zMNBP4aOtPwC3Iw0Dv^|l7IV|3jcQF~YS`!x*nhD1oacR?_c`xR&pGdTN)JRutTEqU z4uiqg;Pzr;VK4w=CMT|=2Q@o?N?k?6_BT7@CjSIb(7)slsR`))L(b=2p&_zP1L z_Nq_2^oiUC3cf#L#1}MZ=?0DqVZtR=OGh>bWE1S#a|j&Ty7BO_WH#O&BEG0#O~2|; z5{5uUMm9T_Ud|k=M8o|n^=a!mrm1rC6BY-Bts(lqnR)0u&a-A=KZKPw_r+Mn=$CI_hqF49+g;v@g<<^_A4?15yRNLTqL~$7;@DVVP4HGkk|( zqm|7sl&wTP>%25h6NKu$P9+2!MQ3rm_H)OFu<9TOpYDWQriiv;Wr%6hSUAAF_ zVku`TM=w?hnny3=yNd#xs#bll^O0|&XAglR7u68ui7ast3XROZhf+WP<~9X2fKOej zj9A=_lbBCGZ3(Q2aYUaXjl7nD#fUWix3i}jH_bb0x2a$B$he2N%6-Z?e@qsqH8$+* zojGUW4n22nm8eg%Sx(%hV~uH~XS(?i|K2lz7!af-`|&sV-HYA7rxDV_Pr zolWqAIpI%aP)ML6=KXQQHMZbw{M4v5c*u2wjzt>Xo}gN?!52Bvd9%)&bOJZr*pIan zkKOqYH%RDX12L5zuDw6cqi-TX1sIEL%it&Ip8W*4Ws-GMz+b&3nOPia)e2X=>+a=x z;4XfcncJuHHEJ9QXgDUXZqwQ6k6ab-(us{xAXx_wj&YjJ6pND#Vw@uSxfr+a!TwjiZ<3i~CVs*y}W|{-wE*YH_gG>UrZgz+XXOC3@klFiC_g152!#P?sH$2KnnIFrLP9%4kV>%N^XkKb^4 zg3ZDo8VVzQXRnZymcuPu5>!Zv8Uja@HfqNYjtt8{1hTsS(Sc_(Rn03&xTV+I5%FB* zrP6vW;z-G!KKCj=u4){jtbXZm?Z^Zo2oSMuNUzSxb5J+&Zu~?qoFr0rrgJ)y^3XTS zyL8X@TdN8p3l3vgdk>HJX1r&benPasyd}ZE=j!kJrL6nSZFcTy*`e;XWc~u25z#&; z#-pif$b=*j`GRq9KPPyhLlbc+lco=AJ=+W?!?9WfN@5K` zXDK_18Y{m}k{sgh zzh7x{m*@_3IJa4-YWPHyzLAm;TQO{iF*bv1#y>SqURx2{L z5aH;Y^wGRYhocW!lFL|^vD zKy7c+fd3#Sd51$+(G3?u@yh2;Ot-Cxa3`94wRp0o_@j1lrIs^a2W~A$d~x9iAO)v~ Uiet-XjM)Oig-2mqLsL%w3k47}QUCw| literal 0 HcmV?d00001 diff --git a/lib/decor-fancy.c b/lib/decor-fancy.c index 8a119ef1..11d31070 100644 --- a/lib/decor-fancy.c +++ b/lib/decor-fancy.c @@ -200,27 +200,27 @@ static int check_button_press_fancy(yutani_window_t * window, int x, int y) { } void decor_init() { - init_sprite(0, TTK_FANCY_PATH "active/ul.bmp"); - init_sprite(1, TTK_FANCY_PATH "active/um.bmp"); - init_sprite(2, TTK_FANCY_PATH "active/ur.bmp"); - init_sprite(3, TTK_FANCY_PATH "active/ml.bmp"); - init_sprite(4, TTK_FANCY_PATH "active/mr.bmp"); - init_sprite(5, TTK_FANCY_PATH "active/ll.bmp"); - init_sprite(6, TTK_FANCY_PATH "active/lm.bmp"); - init_sprite(7, TTK_FANCY_PATH "active/lr.bmp"); - init_sprite(8, TTK_FANCY_PATH "active/button-close.bmp"); - init_sprite(9, TTK_FANCY_PATH "active/button-maximize.bmp"); - - init_sprite(INACTIVE + 0, TTK_FANCY_PATH "inactive/ul.bmp"); - init_sprite(INACTIVE + 1, TTK_FANCY_PATH "inactive/um.bmp"); - init_sprite(INACTIVE + 2, TTK_FANCY_PATH "inactive/ur.bmp"); - init_sprite(INACTIVE + 3, TTK_FANCY_PATH "inactive/ml.bmp"); - init_sprite(INACTIVE + 4, TTK_FANCY_PATH "inactive/mr.bmp"); - init_sprite(INACTIVE + 5, TTK_FANCY_PATH "inactive/ll.bmp"); - init_sprite(INACTIVE + 6, TTK_FANCY_PATH "inactive/lm.bmp"); - init_sprite(INACTIVE + 7, TTK_FANCY_PATH "inactive/lr.bmp"); - init_sprite(INACTIVE + 8, TTK_FANCY_PATH "inactive/button-close.bmp"); - init_sprite(INACTIVE + 9, TTK_FANCY_PATH "inactive/button-maximize.bmp"); + init_sprite(0, TTK_FANCY_PATH "active/ul.png"); + init_sprite(1, TTK_FANCY_PATH "active/um.png"); + init_sprite(2, TTK_FANCY_PATH "active/ur.png"); + init_sprite(3, TTK_FANCY_PATH "active/ml.png"); + init_sprite(4, TTK_FANCY_PATH "active/mr.png"); + init_sprite(5, TTK_FANCY_PATH "active/ll.png"); + init_sprite(6, TTK_FANCY_PATH "active/lm.png"); + init_sprite(7, TTK_FANCY_PATH "active/lr.png"); + init_sprite(8, TTK_FANCY_PATH "active/button-close.png"); + init_sprite(9, TTK_FANCY_PATH "active/button-maximize.png"); + + init_sprite(INACTIVE + 0, TTK_FANCY_PATH "inactive/ul.png"); + init_sprite(INACTIVE + 1, TTK_FANCY_PATH "inactive/um.png"); + init_sprite(INACTIVE + 2, TTK_FANCY_PATH "inactive/ur.png"); + init_sprite(INACTIVE + 3, TTK_FANCY_PATH "inactive/ml.png"); + init_sprite(INACTIVE + 4, TTK_FANCY_PATH "inactive/mr.png"); + init_sprite(INACTIVE + 5, TTK_FANCY_PATH "inactive/ll.png"); + init_sprite(INACTIVE + 6, TTK_FANCY_PATH "inactive/lm.png"); + init_sprite(INACTIVE + 7, TTK_FANCY_PATH "inactive/lr.png"); + init_sprite(INACTIVE + 8, TTK_FANCY_PATH "inactive/button-close.png"); + init_sprite(INACTIVE + 9, TTK_FANCY_PATH "inactive/button-maximize.png"); decor_render_decorations = render_decorations_fancy; decor_check_button_press = check_button_press_fancy; diff --git a/lib/png.c b/lib/png.c index 12d96632..45a50eb7 100644 --- a/lib/png.c +++ b/lib/png.c @@ -185,7 +185,7 @@ static void _write(struct inflate_context * ctx, unsigned int sym) { } else if (c->sf == PNG_FILTER_AVG) { /* Add raw value to the average of the pixel above and left */ uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; - uint32_t up = (c->x > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; r += ((int)_RED(left) + (int)_RED(up)) / 2; g += ((int)_GRE(left) + (int)_GRE(up)) / 2; From 22ded9bdcee9a25f0af5f85aa2e4928449424cc5 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 24 Apr 2020 21:52:58 +0900 Subject: [PATCH 012/102] inflate: gzip multibyte values are LE... --- lib/inflate.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/lib/inflate.c b/lib/inflate.c index ba21aca1..facd08a4 100644 --- a/lib/inflate.c +++ b/lib/inflate.c @@ -413,21 +413,14 @@ int deflate_decompress(struct inflate_context * ctx) { #define GZIP_FLAG_NAME (1 << 3) #define GZIP_FLAG_COMM (1 << 4) -static unsigned int _read_32be(struct inflate_context * ctx) { +static unsigned int read_32le(struct inflate_context * ctx) { unsigned int a, b, c, d; a = ctx->get_input(ctx); b = ctx->get_input(ctx); c = ctx->get_input(ctx); d = ctx->get_input(ctx); - return (a << 24) | (b << 16) | (c << 8) | (d << 0); -} - -static unsigned int _read_16be(struct inflate_context * ctx) { - unsigned int a, b; - a = ctx->get_input(ctx); - b = ctx->get_input(ctx); - return (a << 8) | (b << 0); + return (d << 24) | (c << 16) | (b << 8) | (a << 0); } int gzip_decompress(struct inflate_context * ctx) { @@ -439,7 +432,7 @@ int gzip_decompress(struct inflate_context * ctx) { unsigned int flags = ctx->get_input(ctx); /* Read mtime */ - unsigned int mtime = _read_32be(ctx); + unsigned int mtime = read_32le(ctx); (void)mtime; /* Read extra flags */ @@ -452,7 +445,7 @@ int gzip_decompress(struct inflate_context * ctx) { /* Extra bytes */ if (flags & GZIP_FLAG_EXTR) { - unsigned short size = _read_16be(ctx); + unsigned short size = read_16le(ctx); for (unsigned int i = 0; i < size; ++i) ctx->get_input(ctx); } @@ -468,15 +461,15 @@ int gzip_decompress(struct inflate_context * ctx) { unsigned int crc16 = 0; if (flags & GZIP_FLAG_HCRC) { - crc16 = _read_16be(ctx); + crc16 = read_16le(ctx); } (void)crc16; deflate_decompress(ctx); /* Read CRC and decompressed size from end of input */ - unsigned int crc32 = _read_32be(ctx); - unsigned int dsize = _read_32be(ctx); + unsigned int crc32 = read_32le(ctx); + unsigned int dsize = read_32le(ctx); (void)crc32; (void)dsize; From 046ec9538f490c026bab1ab8b5cf334a468d4a83 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 24 Apr 2020 21:53:20 +0900 Subject: [PATCH 013/102] vmware: initialize vmware_mouse_byte or it resolves incorrectly by linker --- modules/vmware.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/vmware.c b/modules/vmware.c index 2e1c6a02..65cb373c 100644 --- a/modules/vmware.c +++ b/modules/vmware.c @@ -140,7 +140,7 @@ static void mouse_absolute(void) { vmware_send(&cmd); } -volatile int8_t vmware_mouse_byte; +volatile int8_t vmware_mouse_byte = 0; static void vmware_mouse(void) { /* unused, but we need to read the fake mouse event bytes from the PS/2 device. */ From 066c2a592c25f66447acc12d067e06b34cc4fa4b Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 25 Apr 2020 06:24:15 +0900 Subject: [PATCH 014/102] make: disable audio output in headless target Avoids pulse warnings clogging the screen for now, and I don't ever use the audio output from a serial console anyway (plus it's not very reflective of the user experience we're trying to provide with the headless mode, since you don't get audio over serial normally anyway) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f2c0c615..1113787b 100644 --- a/Makefile +++ b/Makefile @@ -330,7 +330,7 @@ fast: image.iso .PHONY: headless headless: image.iso @qemu-system-i386 -cdrom $< ${QEMU_ARGS} \ - -nographic -no-reboot \ + -nographic -no-reboot -audiodev none,id=id \ -fw_cfg name=opt/org.toaruos.bootmode,string=headless \ -fw_cfg name=etc/sercon-port,string=0 From 888323bcea6070707cf1893e9b060ba406894549 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 25 Apr 2020 07:02:46 +0900 Subject: [PATCH 015/102] getty: Pass more args through 'headless' make target --- Makefile | 5 +++-- base/etc/startup.d/99_runstart.sh | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 1113787b..a6f06d6f 100644 --- a/Makefile +++ b/Makefile @@ -329,10 +329,11 @@ fast: image.iso .PHONY: headless headless: image.iso - @qemu-system-i386 -cdrom $< ${QEMU_ARGS} \ + @qemu-system-i386 -cdrom $< -m 1G ${KVM} -rtc base=localtime ${QEMU_EXTRA} \ + -serial null -serial mon:stdio \ -nographic -no-reboot -audiodev none,id=id \ -fw_cfg name=opt/org.toaruos.bootmode,string=headless \ - -fw_cfg name=etc/sercon-port,string=0 + -fw_cfg name=opt/org.toaruos.gettyargs,string="-a local /dev/ttyS1" .PHONY: shell shell: image.iso diff --git a/base/etc/startup.d/99_runstart.sh b/base/etc/startup.d/99_runstart.sh index c15f4851..8a551f4e 100755 --- a/base/etc/startup.d/99_runstart.sh +++ b/base/etc/startup.d/99_runstart.sh @@ -6,10 +6,12 @@ export-cmd START kcmdline -g start export USER=root export HOME=/home/root +export-cmd GETTY_ARGS qemu-fwcfg opt/org.toaruos.gettyargs + echo -n "Launching startup application..." > /dev/pex/splash echo -n "!quit" > /dev/pex/splash if equals? "$START" "--vga" then exec /bin/terminal-vga -l -if equals? "$START" "--headless" then exec /bin/getty +if equals? "$START" "--headless" then exec /bin/getty ${GETTY_ARGS} if empty? "$START" then exec /bin/compositor else exec /bin/compositor $START From 1bbf9fba5d65ca3ffe8eafed81375d7698cd1891 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 30 Apr 2020 19:02:28 +0900 Subject: [PATCH 016/102] libc: support precision for %d? --- libc/stdio/printf.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 0c37ee7e..57fb94dc 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -2,9 +2,10 @@ #include #include -static void print_dec(unsigned int value, unsigned int width, char * buf, int * ptr, int fill_zero, int align_right) { +static void print_dec(unsigned int value, unsigned int width, char * buf, int * ptr, int fill_zero, int align_right, int precision) { unsigned int n_width = 1; unsigned int i = 9; + if (precision == -1) precision = 1; if (value < 10UL) { n_width = 1; @@ -28,6 +29,8 @@ static void print_dec(unsigned int value, unsigned int width, char * buf, int * n_width = 10; } + if (n_width < (unsigned int)precision) n_width = precision; + int printed = 0; if (align_right) { while (n_width + printed < width) { @@ -248,7 +251,7 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { *b++ = '+'; buf++; } - print_dec(val, arg_width, buf, &i, fill_zero, align); + print_dec(val, arg_width, buf, &i, fill_zero, align, precision); } b = buf + i; break; @@ -261,7 +264,7 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { } else { val = (unsigned long)va_arg(args, unsigned long); } - print_dec(val, arg_width, buf, &i, fill_zero, align); + print_dec(val, arg_width, buf, &i, fill_zero, align, precision); } b = buf + i; break; @@ -275,7 +278,7 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { buf++; val = -val; } - print_dec((long)val, arg_width, buf, &i, fill_zero, align); + print_dec((long)val, arg_width, buf, &i, fill_zero, align, 1); b = buf + i; i = b - buf; *b++ = '.'; @@ -283,7 +286,7 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { for (int j = 0; j < ((precision > -1 && precision < 8) ? precision : 8); ++j) { if ((int)(val * 100000.0) % 100000 == 0 && j != 0) break; val *= 10.0; - print_dec((int)(val) % 10, 0, buf, &i, 0, 0); + print_dec((int)(val) % 10, 0, buf, &i, 0, 0, 1); } b = buf + i; } From 7c4bc2c4c3ddb62d546996b9c760680d6c423771 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 30 Apr 2020 19:02:40 +0900 Subject: [PATCH 017/102] yutani-kbd: keyboard test tool --- apps/yutani-kbd.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 apps/yutani-kbd.c diff --git a/apps/yutani-kbd.c b/apps/yutani-kbd.c new file mode 100644 index 00000000..1965313e --- /dev/null +++ b/apps/yutani-kbd.c @@ -0,0 +1,103 @@ +/* vim: tabstop=4 shiftwidth=4 noexpandtab + * This file is part of ToaruOS and is released under the terms + * of the NCSA / University of Illinois License - see LICENSE.md + * Copyright (C) 2015-2018 K. Lange + * + * yutani-test - Yutani Test Tool + * + * Kinda like xev: Pops up a window and displays events in a + * human-readable format. + * + */ +#include +#include +#include + +#include +#include + +static int left, top, width, height; + +static yutani_t * yctx; +static yutani_window_t * wina; +static gfx_context_t * ctx; +static int should_exit = 0; + +char * modifiers(unsigned int m) { + static char out[] = "........"; + + if (m & YUTANI_KEY_MODIFIER_LEFT_CTRL) out[0] = 'c'; else out[0] = '.'; + if (m & YUTANI_KEY_MODIFIER_LEFT_SHIFT) out[1] = 's'; else out[1] = '.'; + if (m & YUTANI_KEY_MODIFIER_LEFT_ALT) out[2] = 'a'; else out[2] = '.'; + if (m & YUTANI_KEY_MODIFIER_LEFT_SUPER) out[3] = 'x'; else out[3] = '.'; + if (m & YUTANI_KEY_MODIFIER_RIGHT_CTRL) out[4] = 'c'; else out[4] = '.'; + if (m & YUTANI_KEY_MODIFIER_RIGHT_SHIFT) out[5] = 's'; else out[5] = '.'; + if (m & YUTANI_KEY_MODIFIER_RIGHT_ALT) out[6] = 'a'; else out[6] = '.'; + if (m & YUTANI_KEY_MODIFIER_RIGHT_SUPER) out[7] = 'x'; else out[7] = '.'; + + return out; +} + +void redraw(void) { + draw_fill(ctx, rgb(0,0,0)); + + int w = width - 1, h = height - 1; + + draw_line(ctx, 0, w, 0, 0, rgb(255,255,255)); + draw_line(ctx, 0, w, h, h, rgb(255,255,255)); + + draw_line(ctx, 0, 0, 0, h, rgb(255,255,255)); + draw_line(ctx, w, w, 0, h, rgb(255,255,255)); +} + +int main (int argc, char ** argv) { + left = 100; + top = 100; + width = 500; + height = 500; + + yctx = yutani_init(); + wina = yutani_window_create(yctx, width, height); + yutani_window_move(yctx, wina, left, top); + + ctx = init_graphics_yutani(wina); + + redraw(); + + char keys[256] = {0}; + + printf("\033[H\033[2J"); + + while (!should_exit) { + yutani_msg_t * m = yutani_poll(yctx); + if (m) { + switch (m->type) { + case YUTANI_MSG_KEY_EVENT: + { + struct yutani_msg_key_event * ke = (void*)m->data; + if (ke->event.keycode >= 'a' && ke->event.keycode < 'z') { + keys[ke->event.keycode] = (ke->event.action == KEY_ACTION_DOWN); + } + printf("\033[1;1H"); + for (int i = 'a'; i < 'z'; ++i) { + printf("\033[%dm%c ", keys[i] ? 0 : 31, i); + } + fflush(stdout); + } + break; + case YUTANI_MSG_WINDOW_CLOSE: + case YUTANI_MSG_SESSION_END: + should_exit = 1; + break; + default: + break; + } + } + free(m); + } + + yutani_close(yctx, wina); + + return 0; +} + From 7be561c1b1cc13e820e784f12b11b8a08a17b45c Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 30 Apr 2020 19:24:07 +0900 Subject: [PATCH 018/102] kbd-test: raw vga text version of kbd tester --- apps/kbd-test.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 apps/kbd-test.c diff --git a/apps/kbd-test.c b/apps/kbd-test.c new file mode 100644 index 00000000..5ff67b79 --- /dev/null +++ b/apps/kbd-test.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +static unsigned short * textmemptr = (unsigned short *)0xB8000; +static void placech(unsigned char c, int x, int y, int attr) { + unsigned short *where; + unsigned att = attr << 8; + where = textmemptr + (y * 80 + x); + *where = c | att; +} + +static void clear_screen(void) { + for (int y = 0; y < 24; ++y) { + for (int x = 0; x < 80; ++x) { + placech(' ', x, y, 0); /* Clear */ + } + } +} + +#define BUF_SIZE 4096 +static char keys[256] = {0}; + +static void redraw(void) { + int i = 0; + for (int c = 'a'; c <= 'z'; ++c, i += 2) { + placech(c, i, 0, keys[c] ? 0x2 : 0x7); + } +} + +static void print_scancode(unsigned int sc) { + char buf[10]; + sprintf(buf, "%d", sc); + + int i = 0; + for (char * c = buf; *c; ++c, ++i) { + placech(*c, i, 1, 0x7); + } + for (; i < 4; ++i) { + placech(' ', i, 1, 0x7); + } +} + +int main(int argc, char * argv[]) { + clear_screen(); + int kfd = open("/dev/kbd", O_RDONLY); + key_event_t event; + key_event_state_t kbd_state = {0}; + + while (1) { + unsigned char buf[BUF_SIZE]; + int r = read(kfd, buf, BUF_SIZE); + for (int i = 0; i < r; ++i) { + kbd_scancode(&kbd_state, buf[i], &event); + if (event.keycode >= 'a' && event.keycode < 'z') { + keys[event.keycode] = (event.action == KEY_ACTION_DOWN); + } + print_scancode(buf[i]); + } + redraw(); + + } + +} From cc8b933cda309e0dac878f2dddc21806abdc1ffc Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 30 Apr 2020 20:25:08 +0900 Subject: [PATCH 019/102] libc: support not printing 0 digit with precision of 0 --- apps/test-printf.c | 11 +++++++++++ libc/stdio/printf.c | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 apps/test-printf.c diff --git a/apps/test-printf.c b/apps/test-printf.c new file mode 100644 index 00000000..c47be46c --- /dev/null +++ b/apps/test-printf.c @@ -0,0 +1,11 @@ +#include + +int main(int argc, char * argv[]) { + printf("%.3d\n", 42); + printf("%.10d\n", 12345); + printf("%.1d\n", 0); + printf("%.0d\n", 0); + printf("%.0d\n", 1); + printf("%.0d\n", 123); + return 0; +} diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 57fb94dc..8f2faf00 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -7,7 +7,9 @@ static void print_dec(unsigned int value, unsigned int width, char * buf, int * unsigned int i = 9; if (precision == -1) precision = 1; - if (value < 10UL) { + if (value == 0) { + n_width = 0; + } else if (value < 10UL) { n_width = 1; } else if (value < 100UL) { n_width = 2; From a5cf4fe540d574f8bcdbbdd5660dd7d08036b17e Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 1 May 2020 13:34:54 +0900 Subject: [PATCH 020/102] linker: properly resolve dependencies that were missing at compile time --- linker/linker.c | 96 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 22 deletions(-) diff --git a/linker/linker.c b/linker/linker.c index cd5c6a61..83e00c7d 100644 --- a/linker/linker.c +++ b/linker/linker.c @@ -607,6 +607,58 @@ static void * do_actual_load(const char * filename, elf_t * lib, int flags) { return (void *)lib; } +static uintptr_t end_addr = 0; +/** + * Half loads an object using the dumb allocator and performs dependency + * resolution. This is a separate process from do_actual_load and dlopen_ld + * to avoid problems with malloc and library functions while loading. + * Preloaded objects will be fully loaded everything is relocated. + */ +static elf_t * preload(hashmap_t * libs, list_t * load_libs, char * lib_name) { + /* Find and open the library */ + elf_t * lib = open_object(lib_name); + + if (!lib) { + fprintf(stderr, "Failed to load dependency '%s'.\n", lib_name); + return NULL; + } + + /* Skip already loaded libraries */ + if (lib->loaded) return lib; + + /* Mark this library available */ + hashmap_set(libs, lib_name, lib); + + TRACE_LD("Loading %s at 0x%x", lib_name, end_addr); + + /* Adjust dumb allocator */ + while (end_addr & 0xFFF) { + end_addr++; + } + + /* Load PHDRs */ + end_addr = object_load(lib, end_addr); + + /* Extract information */ + object_postload(lib); + + /* Mark loaded */ + lib->loaded = 1; + + /* Verify dependencies are loaded before we relocate */ + foreach(node, lib->dependencies) { + if (!hashmap_has(libs, node->value)) { + TRACE_LD("Need unloaded dependency %s", node->value); + preload(libs, load_libs, node->value); + } + } + + /* Add this to the (forward scan) list of libraries to finish loading */ + list_insert(load_libs, lib); + + return lib; +} + /* exposed dlopen() method */ static void * dlopen_ld(const char * filename, int flags) { TRACE_LD("dlopen(%s,0x%x)", filename, flags); @@ -731,7 +783,7 @@ int main(int argc, char * argv[]) { } /* Load the main object */ - uintptr_t end_addr = object_load(main_obj, 0x0); + end_addr = object_load(main_obj, 0x0); object_postload(main_obj); object_find_copy_relocations(main_obj); @@ -742,33 +794,36 @@ int main(int argc, char * argv[]) { end_addr++; } - list_t * ctor_libs = list_create(); - list_t * init_libs = list_create(); - + /* Load dependent libraries, recursively. */ TRACE_LD("Loading dependencies."); + list_t * load_libs = list_create(); node_t * item; while ((item = list_pop(main_obj->dependencies))) { - while (end_addr & 0xFFF) { - end_addr++; - } - char * lib_name = item->value; - /* Reject libg.so */ + + /* Skip libg.so which is a fake library that doesn't really exist. + * XXX: Only binaries should depend on this I think? */ if (!strcmp(lib_name, "libg.so")) goto nope; - elf_t * lib = open_object(lib_name); - if (!lib) { - fprintf(stderr, "Failed to load dependency '%s'.\n", lib_name); - return 1; - } - hashmap_set(libs, lib_name, lib); + /* Preload library */ + elf_t * lib = preload(libs, load_libs, lib_name); - TRACE_LD("Loading %s at 0x%x", lib_name, end_addr); - end_addr = object_load(lib, end_addr); - object_postload(lib); - TRACE_LD("Relocating %s", lib_name); + /* Failed to load */ + if (!lib) return 1; + +nope: + free(item); + } + + list_t * ctor_libs = list_create(); + list_t * init_libs = list_create(); + while ((item = list_dequeue(load_libs))) { + elf_t * lib = item->value; + + /* Complete relocation */ object_relocate(lib); + /* Close the underlying file */ fclose(lib->file); /* Store constructors for later execution */ @@ -779,9 +834,6 @@ int main(int argc, char * argv[]) { list_insert(init_libs, lib); } - lib->loaded = 1; - -nope: free(item); } From 3a130854e7370cbe9a19b65925762ff6f1ae7c78 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 2 May 2020 12:15:21 +0900 Subject: [PATCH 021/102] file-browser: fixup ellipses for file types --- apps/file-browser.c | 220 +++++++++++++++++++++++++++++++------------- 1 file changed, 157 insertions(+), 63 deletions(-) diff --git a/apps/file-browser.c b/apps/file-browser.c index 963206ca..a81c1fbf 100644 --- a/apps/file-browser.c +++ b/apps/file-browser.c @@ -60,9 +60,9 @@ static int available_height = 0; /* How much space is available in the main wind static int is_desktop_background = 0; /* If we're in desktop background mode */ static int menu_bar_height = MENU_BAR_HEIGHT + 36; /* Height of the menu bar, if present - it's not in desktop mode */ static sprite_t * wallpaper_buffer = NULL; /* Prebaked wallpaper texture */ -static sprite_t * wallpaper_old = NULL; -static uint64_t timer = 0; -static int restart = 0; +static sprite_t * wallpaper_old = NULL; /* Previous wallpaper when transitioning */ +static uint64_t timer = 0; /* Timer for wallpaper transition fade */ +static int restart = 0; /* Signal for desktop wallpaper to kill itself to save memory (this is dumb) */ static char title[512]; /* Application title bar */ static int FILE_HEIGHT = 80; /* Height of one row of icons */ static int FILE_WIDTH = 100; /* Width of one column of icons */ @@ -76,13 +76,18 @@ static ssize_t file_pointers_len = 0; /* How many files are in the current list static uint64_t last_click = 0; /* For double click */ static int last_click_offset = -1; /* So that clicking two different things quickly doesn't count as a double click */ +/** + * Navigation input box + */ static char nav_bar[512] = {0}; static int nav_bar_cursor = 0; static int nav_bar_cursor_x = 0; static int nav_bar_focused = 0; +/* Status bar displayed at the bottom of the window */ static char window_status[512] = {0}; +/* Button row visibility statuses */ static int _button_hilights[4] = {3,3,3,3}; static int _button_disabled[4] = {1,1,0,0}; static int _button_hover = -1; @@ -98,6 +103,7 @@ static struct menu_bar_entries menu_entries[] = { {NULL, NULL}, }; +/* Right click context menu */ static struct MenuList * context_menu = NULL; /** @@ -190,6 +196,27 @@ static int print_human_readable_size(char * _out, uint64_t s) { #define HILIGHT_GRADIENT_BOTTOM rgb(56,137,220) #define HILIGHT_BORDER_BOTTOM rgb(47,106,167) +/** + * Clip text and add ellipsis to fit a specified display width. + */ +static char * ellipsify(char * input, int font_size, int font, int max_width, int * out_width) { + int len = strlen(input); + char * out = malloc(len + 4); + memcpy(out, input, len + 1); + int width; + while ((width = draw_sdf_string_width(out, font_size, font)) > max_width) { + len--; + out[len+0] = '.'; + out[len+1] = '.'; + out[len+2] = '.'; + out[len+3] = '\0'; + } + + if (out_width) *out_width = width; + + return out; +} + /** * Draw an icon view entry */ @@ -206,17 +233,8 @@ static void draw_file(struct File * f, int offset) { sprite_t * icon = icon_get_48(f->icon); /* If the display name is too long to fit, cut it with an ellipsis. */ - int len = strlen(f->name); - char * name = malloc(len + 4); - memcpy(name, f->name, len + 1); int name_width; - while ((name_width = draw_sdf_string_width(name, 16, SDF_FONT_THIN)) > FILE_WIDTH - 8 /* Padding */) { - len--; - name[len+0] = '.'; - name[len+1] = '.'; - name[len+2] = '.'; - name[len+3] = '\0'; - } + char * name = ellipsify(f->name, 16, SDF_FONT_THIN, FILE_WIDTH - 8, &name_width); /* Draw the icon */ int center_x_icon = (FILE_WIDTH - icon->width) / 2; @@ -275,21 +293,12 @@ static void draw_file(struct File * f, int offset) { draw_sprite_alpha_paint(contents, icon, x + 11, y + 11, 0.3, rgb(255,255,255)); } - int len = strlen(f->name); - char * name = malloc(len + 4); - memcpy(name, f->name, len + 1); - int name_width; - while ((name_width = draw_sdf_string_width(name, 16, SDF_FONT_BOLD)) > FILE_WIDTH - 81) { - len--; - name[len+0] = '.'; - name[len+1] = '.'; - name[len+2] = '.'; - name[len+3] = '\0'; - } + char * name = ellipsify(f->name, 16, SDF_FONT_BOLD, FILE_WIDTH - 81, NULL); + char * type = ellipsify(f->filetype, 16, SDF_FONT_THIN, FILE_WIDTH - 81, NULL); if (f->type == 0) { draw_sdf_string(contents, x + 70, y + 8, name, 16, text_color, SDF_FONT_BOLD); - draw_sdf_string(contents, x + 70, y + 25, f->filetype, 16, text_color, SDF_FONT_THIN); + draw_sdf_string(contents, x + 70, y + 25, type, 16, text_color, SDF_FONT_THIN); char line_three[48] = {0}; if (*f->link) { @@ -300,10 +309,11 @@ static void draw_file(struct File * f, int offset) { draw_sdf_string(contents, x + 70, y + 42, line_three, 16, text_color, SDF_FONT_THIN); } else { draw_sdf_string(contents, x + 70, y + 15, name, 16, text_color, SDF_FONT_BOLD); - draw_sdf_string(contents, x + 70, y + 32, f->filetype, 16, text_color, SDF_FONT_THIN); + draw_sdf_string(contents, x + 70, y + 32, type, 16, text_color, SDF_FONT_THIN); } free(name); + free(type); } else if (view_mode == VIEW_MODE_LIST) { sprite_t * icon = icon_get_16(f->icon); uint32_t text_color = rgb(0,0,0); @@ -326,21 +336,12 @@ static void draw_file(struct File * f, int offset) { draw_sprite(contents, icon, x + 4, y + 4); } - - int len = strlen(f->name); - char * name = malloc(len + 4); - memcpy(name, f->name, len + 1); - int name_width; - while ((name_width = draw_sdf_string_width(name, 16, SDF_FONT_THIN)) > FILE_WIDTH - 26) { - len--; - name[len+0] = '.'; - name[len+1] = '.'; - name[len+2] = '.'; - name[len+3] = '\0'; - } + char * name = ellipsify(f->name, 16, SDF_FONT_THIN, FILE_WIDTH - 26, NULL); draw_sdf_string(contents, x + 24, y + 2, name, 16, text_color, SDF_FONT_THIN); + free(name); + } } @@ -404,9 +405,18 @@ static int has_extension(struct File * f, char * extension) { return 0; } +/** + * Forward/backward history; we're always in the middle of these. + * When we navigate somewhere new, clear the forward history, but + * keep the back history and append the previous location. + */ static list_t * history_back; static list_t * history_forward; +/** + * Update the status bar text at the bottom of the window + * based on the selected items in the file view. + */ static void update_status(void) { uint64_t total_size = 0; uint64_t selected_size = 0; @@ -444,7 +454,11 @@ static void load_directory(const char * path, int modifies_history) { DIR * dirp = opendir(path); if (!dirp) { - /* XXX show a dialog */ + /* + * Display a warning dialog with the appropriate error message for + * why this directory failed to load. XXX This uses `showdialog` + * but it should use a dialog library like with the buttons. + */ if (!fork()) { char tmp[512]; sprintf(tmp, "Could not open directory \"%s\": %s", path, strerror(errno)); @@ -455,6 +469,7 @@ static void load_directory(const char * path, int modifies_history) { return; } + /* Free the previously loaded directory */ if (file_pointers) { for (int i = 0; i < file_pointers_len; ++i) { free(file_pointers[i]); @@ -478,18 +493,21 @@ static void load_directory(const char * path, int modifies_history) { free(current_directory); } - _button_disabled[0] = !(history_back->length); - _button_disabled[1] = !(history_forward->length); - _button_disabled[2] = 0; - _button_disabled[3] = 0; + /* Set button displays appropriately */ + _button_disabled[0] = !(history_back->length); /* Back */ + _button_disabled[1] = !(history_forward->length); /* Forward */ + _button_disabled[2] = 0; /* Up */ + _button_disabled[3] = 0; /* Home */ char * home = getenv("HOME"); if (home && !strcmp(path, home)) { /* If the current directory is the user's homedir, present it that way in the title */ set_title("Home"); + /* Disable the 'go home' button */ _button_disabled[3] = 1; } else if (!strcmp(path, "/")) { set_title("File System"); + /* If this is the root of the file system, disable the up button */ _button_disabled[2] = 1; } else { /* Otherwise use just the directory base name */ @@ -761,14 +779,18 @@ static void reinitialize_contents(void) { #define BUTTON_SPACE 34 #define BUTTON_COUNT 4 +/** + * Render toolbar buttons + */ static void _draw_buttons(struct decor_bounds bounds) { + + /* Draws the toolbar background as a gradient; XXX hardcoded theme details */ uint32_t gradient_top = rgb(59,59,59); uint32_t gradient_bot = rgb(40,40,40); for (int i = 0; i < 36; ++i) { uint32_t c = interp_colors(gradient_top, gradient_bot, i * 255 / 36); draw_rectangle(ctx, bounds.left_width, bounds.top_height + MENU_BAR_HEIGHT + i, BUTTON_SPACE * BUTTON_COUNT, 1, c); - //ctx->width - bounds.width, 1, c); } int x = 0; @@ -778,12 +800,17 @@ static void _draw_buttons(struct decor_bounds bounds) { ttk_button_draw(ctx, &_up); \ x += BUTTON_SPACE; i++; } while (0) + /* Draw actual buttons */ draw_button("back"); draw_button("forward"); draw_button("up"); draw_button("home"); } +/** + * Determine what character offset the cursor should be at for + * a given X coordinate. + */ static void _figure_out_navbar_cursor(int x, struct decor_bounds bounds) { x = x - bounds.left_width - 2 - BUTTON_SPACE * BUTTON_COUNT - 5; if (x <= 0) { @@ -801,6 +828,12 @@ static void _figure_out_navbar_cursor(int x, struct decor_bounds bounds) { free(tmp); } +/** + * Recalculate the location of the cursor indicator bar + * based on the current cursor character offset; + * also handles cursor bounds within the text + * (eg. to avoid cursor moving beyond the beginning) + */ static void _recalculate_nav_bar_cursor(void) { if (nav_bar_cursor < 0) { nav_bar_cursor = 0; @@ -814,7 +847,12 @@ static void _recalculate_nav_bar_cursor(void) { free(tmp); } +/** + * Draw the navigation input box. + */ static void _draw_nav_bar(struct decor_bounds bounds) { + + /* Draw toolbar background */ uint32_t gradient_top = rgb(59,59,59); uint32_t gradient_bot = rgb(40,40,40); int x = BUTTON_SPACE * BUTTON_COUNT; @@ -825,6 +863,7 @@ static void _draw_nav_bar(struct decor_bounds bounds) { ctx->width - bounds.width - BUTTON_SPACE * BUTTON_COUNT, 1, c); } + /* Draw input box */ if (nav_bar_focused) { struct gradient_definition edge = {28, bounds.top_height + MENU_BAR_HEIGHT + 3, rgb(0,120,220), rgb(0,120,220)}; draw_rounded_rectangle_pattern(ctx, bounds.left_width + 2 + x + 1, bounds.top_height + MENU_BAR_HEIGHT + 4, main_window->width - bounds.width - x - 6, 26, 4, gfx_vertical_gradient_pattern, &edge); @@ -835,21 +874,11 @@ static void _draw_nav_bar(struct decor_bounds bounds) { draw_rounded_rectangle(ctx, bounds.left_width + 2 + x + 2, bounds.top_height + MENU_BAR_HEIGHT + 5, main_window->width - bounds.width - x - 8, 24, 3, rgb(250,250,250)); } - /* Draw the nav bar text */ + /* Draw the nav bar text, ellipsified if needed */ int max_width = main_window->width - bounds.width - x - 12; - int len = strlen(nav_bar); - char * name = malloc(len + 5); - memcpy(name, nav_bar, len + 1); - int name_width; - while ((name_width = draw_sdf_string_width(name, 16, SDF_FONT_THIN)) > max_width) { - len--; - name[len+0] = '.'; - name[len+1] = '.'; - name[len+2] = '.'; - name[len+3] = '\0'; - } - + char * name = ellipsify(nav_bar, 16, SDF_FONT_THIN, max_width, NULL); draw_sdf_string(ctx, bounds.left_width + 2 + x + 5, bounds.top_height + MENU_BAR_HEIGHT + 8, name, 16, rgb(0,0,0), SDF_FONT_THIN); + free(name); if (nav_bar_focused) { /* Draw cursor indicator at cursor_x */ @@ -863,7 +892,12 @@ static void _draw_nav_bar(struct decor_bounds bounds) { } #define STATUS_HEIGHT 24 +/** + * Draw the status bar at the bottom of the window + */ static void _draw_status(struct decor_bounds bounds) { + + /* Background gradient */ uint32_t gradient_top = rgb(80,80,80); uint32_t gradient_bot = rgb(59,59,59); draw_rectangle(ctx, bounds.left_width, ctx->height - bounds.bottom_height - STATUS_HEIGHT, @@ -874,6 +908,8 @@ static void _draw_status(struct decor_bounds bounds) { ctx->width - bounds.width, 1, c ); } + + /* Text with draw shadow */ { sprite_t * _tmp_s = create_sprite(ctx->width - bounds.width - 4, STATUS_HEIGHT-3, ALPHA_EMBEDDED); gfx_context_t * _tmp = init_graphics_sprite(_tmp_s); @@ -890,6 +926,9 @@ static void _draw_status(struct decor_bounds bounds) { } } +/** + * Redraw the navigation input box (while typing) + */ static void _redraw_nav_bar(void) { struct decor_bounds bounds; _decor_get_bounds(main_window, &bounds); @@ -898,6 +937,9 @@ static void _redraw_nav_bar(void) { yutani_flip(yctx, main_window); } +/** + * navbar: Text editing helpers for ^W, deletes one directory element + */ static void nav_bar_backspace_word(void) { if (!*nav_bar) return; if (nav_bar_cursor == 0) return; @@ -920,6 +962,9 @@ static void nav_bar_backspace_word(void) { _redraw_nav_bar(); } +/** + * navbar: Text editing helper for backspace, deletes one character + */ static void nav_bar_backspace(void) { if (nav_bar_cursor == 0) return; @@ -935,6 +980,9 @@ static void nav_bar_backspace(void) { _redraw_nav_bar(); } +/** + * navbar: Text editing helper for inserting characters + */ static void nav_bar_insert_char(char c) { char * tmp = strdup(nav_bar); tmp[nav_bar_cursor] = '\0'; @@ -948,12 +996,18 @@ static void nav_bar_insert_char(char c) { _redraw_nav_bar(); } +/** + * navbar: Move editing cursor one character left + */ static void nav_bar_cursor_left(void) { nav_bar_cursor--; _recalculate_nav_bar_cursor(); _redraw_nav_bar(); } +/** + * navbar: Move editing cursor one character right + */ static void nav_bar_cursor_right(void) { nav_bar_cursor++; _recalculate_nav_bar_cursor(); @@ -1287,7 +1341,7 @@ static void open_file(struct File * f) { /* "SELF" launchers are for binaries. */ sprintf(tmp, "exec ./%s", f->name); } else { - /* Other launchers shouuld take file names as arguments. + /* Other launchers should take file names as arguments. * NOTE: If you don't want the file name, you can append # to your launcher. * Since it's parsed by the shell, this will yield a comment. */ @@ -1333,6 +1387,14 @@ static void _menu_action_select_all(struct MenuEntry * self) { redraw_window(); } +/** + * Set the view mode for the file view + * We support three modes: + * - Icons: Standard view, label centered below icon. + * - Tiles: Like Windows Explorer, labels left-aligned to the right of + * the icon, with extra details also displayed. Bold file name. + * - List: One-line-per-file, icon on the left, left aligne file name. + */ static void set_view_mode(int mode) { switch (mode) { @@ -1358,6 +1420,10 @@ static void set_view_mode(int mode) { redraw_window(); } +/** + * Dropdown action handler for view mode entries; + * use menuitem action to determine which view mode to set. + */ static void _menu_action_view_mode(struct MenuEntry * entry) { struct MenuEntry_Normal * _entry = (void*)entry; int mode = VIEW_MODE_ICONS; @@ -1371,6 +1437,17 @@ static void _menu_action_view_mode(struct MenuEntry * entry) { set_view_mode(mode); } +/** + * Receive pastes, which are presumed to be file names of files + * which have been copied and should now be pasted into a new + * directory; will not overwrite if pasted into the same directory + * or a directory with a file with the same name. + * + * XXX: Calls `cp` to perform actual copy. + * + * TODO: Actually check if clipboard contains a file name. + * TODO: Handle pastes into the navbar of arbitrary text. + */ static void handle_clipboard(char * contents) { fprintf(stderr, "Received clipboard:\n%s\n",contents); @@ -1445,6 +1522,9 @@ static void toggle_selected(int hilighted_offset, int modifiers) { redraw_window(); } +/** + * Handle button hover highlights + */ static int _down_button = -1; static void _set_hilight(int index, int hilight) { int _update = 0; @@ -1464,6 +1544,9 @@ static void _set_hilight(int index, int hilight) { } } +/** + * Handle toolbar button clicking + */ static void _handle_button_press(int index) { if (index != -1 && _button_disabled[index]) return; /* can't click disabled buttons */ switch (index) { @@ -1508,6 +1591,9 @@ static void _handle_button_press(int index) { } } +/** + * Scroll file view up + */ static void _scroll_up(void) { scroll_offset -= SCROLL_AMOUNT; if (scroll_offset < 0) { @@ -1515,6 +1601,9 @@ static void _scroll_up(void) { } } +/** + * Scroll file view down + */ static void _scroll_down(void) { if (available_height > contents->height) { scroll_offset = 0; @@ -1536,11 +1625,21 @@ static void sig_usr2(int sig) { signal(SIGUSR2, sig_usr2); } +/** + * Desktop mode responds to sig_usr1 by resizing the window + * to the current display size. + */ static void sig_usr1(int sig) { yutani_window_resize_offer(yctx, main_window, yctx->display_width, yctx->display_height); signal(SIGUSR1, sig_usr1); } +/** + * Accept keyboard arrows left/right/up/down and select the appropriate + * file in the file view based on the currently selected file; if multiple + * files are currently selected, the first one (up/left) is used as the basis + * for the new selection. + */ static void arrow_select(int x, int y) { if (!file_pointers_len) return; @@ -1654,11 +1753,6 @@ int main(int argc, char * argv[]) { menu_set_insert(menu_bar.set, "view", m); m = menu_create(); /* Go */ - /* TODO implement input dialog for Path... */ -#if 0 - menu_insert(m, menu_create_normal("open",NULL,"Path...", _menu_action_input_path)); - menu_insert(m, menu_create_separator()); -#endif menu_insert(m, menu_create_normal("home",getenv("HOME"),"Home",_menu_action_navigate)); menu_insert(m, menu_create_normal(NULL,"/","File System",_menu_action_navigate)); menu_insert(m, menu_create_normal("up",NULL,"Up",_menu_action_up)); From 1c0e741c990bec9bbca9aa00b0bee7ce9e456b79 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 5 May 2020 00:07:02 +0900 Subject: [PATCH 022/102] inflate: fix missing byte read for compression type in gzip deflater --- lib/inflate.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/inflate.c b/lib/inflate.c index facd08a4..6d0348e0 100644 --- a/lib/inflate.c +++ b/lib/inflate.c @@ -429,6 +429,9 @@ int gzip_decompress(struct inflate_context * ctx) { if (ctx->get_input(ctx) != 0x1F) return 1; if (ctx->get_input(ctx) != 0x8B) return 1; + unsigned int cm = ctx->get_input(ctx); + if (cm != 8) return 1; + unsigned int flags = ctx->get_input(ctx); /* Read mtime */ @@ -465,7 +468,7 @@ int gzip_decompress(struct inflate_context * ctx) { } (void)crc16; - deflate_decompress(ctx); + int status = deflate_decompress(ctx); /* Read CRC and decompressed size from end of input */ unsigned int crc32 = read_32le(ctx); @@ -474,5 +477,5 @@ int gzip_decompress(struct inflate_context * ctx) { (void)crc32; (void)dsize; - return 0; + return status; } From 0e38268863c4e59b901d7959cea719ca616c4263 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 5 May 2020 00:07:17 +0900 Subject: [PATCH 023/102] gunzip: use status code from gzip_decompress --- apps/gunzip.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/gunzip.c b/apps/gunzip.c index 70f5ac0a..22634654 100644 --- a/apps/gunzip.c +++ b/apps/gunzip.c @@ -83,7 +83,9 @@ int main(int argc, char * argv[]) { ctx.write_output = _write; ctx.ring = NULL; /* Use the global one */ - gzip_decompress(&ctx); + if (gzip_decompress(&ctx)) { + return 1; + } if (!to_stdout) { fclose(ctx.output_priv); From c43fc42b8abeaaf15531132edc2507bc75bfc401 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 5 May 2020 00:07:29 +0900 Subject: [PATCH 024/102] tar: rewrite to support reading from stdin --- apps/tar.c | 89 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 35 deletions(-) diff --git a/apps/tar.c b/apps/tar.c index 33d9b544..23b1a2c9 100644 --- a/apps/tar.c +++ b/apps/tar.c @@ -20,6 +20,7 @@ #include #include +#include struct ustar { char filename[100]; @@ -44,11 +45,11 @@ struct ustar { char dev_minor[8]; char prefix[155]; + char padding[12]; }; -static struct ustar * file_from_offset(FILE * f, size_t offset) { +static struct ustar * extract_file(FILE * f) { static struct ustar _ustar; - fseek(f, offset, SEEK_SET); if (fread(&_ustar, 1, sizeof(struct ustar), f) != sizeof(struct ustar)) { fprintf(stderr, "failed to read file\n"); return NULL; @@ -64,13 +65,6 @@ static struct ustar * file_from_offset(FILE * f, size_t offset) { return &_ustar; } -static unsigned int round_to_512(unsigned int i) { - unsigned int t = i % 512; - - if (!t) return i; - return i + (512 - t); -} - static unsigned int interpret_mode(struct ustar * file) { return ((file->mode[0] - '0') << 18) | @@ -137,9 +131,8 @@ static void dump_file(struct ustar * file) { #endif #define CHUNK_SIZE 4096 -static void write_file(struct ustar * file, FILE * f, FILE * mf, size_t off, char * name) { +static void write_file(struct ustar * file, FILE * f, FILE * mf, char * name) { size_t length = interpret_size(file); - fseek(f, off + 512, SEEK_SET); char buf[CHUNK_SIZE]; while (length > CHUNK_SIZE) { fread( buf, 1, CHUNK_SIZE, f); @@ -151,11 +144,26 @@ static void write_file(struct ustar * file, FILE * f, FILE * mf, size_t off, cha fwrite(buf, 1, length, mf); } fclose(mf); - fseek(f, off, SEEK_SET); - /* TODO: fchmod? */ chmod(name, interpret_mode(file)); } +static void _seek_forward(FILE * f, size_t amount) { + for (size_t i = 0; i < amount; ++i) { + fgetc(f); + } +} + +static void usage(char * argv[]) { + fprintf(stderr, + "tar - extract ustar archives\n" + "\n" + "usage: %s [-ctxvaf] [name]\n" + "\n" + " -f \033[3mfile archive to open\033[0m\n" + " -x \033[3mextract\033[0m\n" + "\n", argv[0]); +} + int main(int argc, char * argv[]) { int opt; @@ -166,7 +174,7 @@ int main(int argc, char * argv[]) { #define TAR_ACTION_CREATE 2 #define TAR_ACTION_LIST 3 - while ((opt = getopt(argc, argv, "ctxvaf:")) != -1) { + while ((opt = getopt(argc, argv, "?ctxvaf:")) != -1) { switch (opt) { case 'c': if (action) { @@ -195,6 +203,9 @@ int main(int argc, char * argv[]) { case 'v': verbose = 1; break; + case '?': + usage(argv); + return 1; default: fprintf(stderr, "%s: unsupported option '%c'\n", argv[0], opt); return 1; @@ -202,40 +213,45 @@ int main(int argc, char * argv[]) { } if (!fname) { - fprintf(stderr, "%s: todo: stdin/stdout\n", argv[0]); - return 1; + fname = "-"; } if (action == TAR_ACTION_EXTRACT || action == TAR_ACTION_LIST) { hashmap_t * files = hashmap_create(10); - FILE * f = fopen(fname,"r"); + FILE * f; + if (!strcmp(fname,"-")) { + f = stdin; + } else { + f = fopen(fname,"r"); + } if (!f) { fprintf(stderr, "%s: %s: %s\n", argv[0], fname, strerror(errno)); return 1; } - fseek(f, 0, SEEK_END); - size_t length = ftell(f); - fseek(f, 0, SEEK_SET); - char tmpname[1024] = {0}; int last_was_long = 0; - size_t off = 0; while (!feof(f)) { - struct ustar * file = file_from_offset(f, off); + struct ustar * file = extract_file(f); if (!file) { break; } - if (action == TAR_ACTION_LIST || verbose) { - fprintf(stdout, "%.155s%.100s\n", file->prefix, file->filename); - } - - if (action == TAR_ACTION_EXTRACT) { + if (action == TAR_ACTION_LIST) { + if (verbose) { + fprintf(stdout, "%10d %.155s%.100s\n", interpret_size(file), file->prefix, file->filename); + } else { + fprintf(stdout, "%.155s%.100s\n", file->prefix, file->filename); + } + _seek_forward(f, interpret_size(file)); + } else if (action == TAR_ACTION_EXTRACT) { + if (verbose) { + fprintf(stdout, "%.155s%.100s\n", file->prefix, file->filename); + } char name[1024] = {0}; if (last_was_long) { strncat(name, tmpname, 1023); @@ -249,8 +265,9 @@ int main(int argc, char * argv[]) { FILE * mf = fopen(name,"w"); if (!mf) { fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); + _seek_forward(f, interpret_size(file)); } else { - write_file(file,f,mf,off,name); + write_file(file,f,mf,name); } struct ustar * tmp = malloc(sizeof(struct ustar)); memcpy(tmp, file, sizeof(struct ustar)); @@ -276,31 +293,33 @@ int main(int argc, char * argv[]) { if (!mf) { fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); } else { - write_file(hashmap_get(files,tmp),f,mf,off,name); + write_file(hashmap_get(files,tmp),f,mf,name); } } + _seek_forward(f, interpret_size(file)); } else if (file->type[0] == '2') { char tmp[101] = {0}; strncat(tmp, file->link, 100); if (symlink(tmp, name) < 0) { fprintf(stderr, "%s: %s: %s: %s: %s\n", argv[0], fname, name, tmp, strerror(errno)); } + _seek_forward(f, interpret_size(file)); } else if (file->type[0] == 'L') { /* This is a GNU Long Name block; store its contents as a file name */ size_t s = interpret_size(file); - fseek(f, off + 512, SEEK_SET); fread(tmpname, 1, s, f); tmpname[s] = '\0'; - fseek(f, off, SEEK_SET); last_was_long = 1; } else { fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, type_to_string(file->type[0])); + _seek_forward(f, interpret_size(file)); } } - off += 512; - off += round_to_512(interpret_size(file)); - if (off >= length) break; + size_t file_size = interpret_size(file); + if (file_size % 512) { + _seek_forward(f, 512 - (file_size % 512)); + } } } else { fprintf(stderr, "%s: unsupported action\n", argv[0]); From 75ece46da9de7c6a4d361da2d5084f64549fccb1 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 5 May 2020 10:03:09 +0900 Subject: [PATCH 025/102] gunzip: support decompressing from stdin --- apps/gunzip.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/apps/gunzip.c b/apps/gunzip.c index 22634654..fa6f38dd 100644 --- a/apps/gunzip.c +++ b/apps/gunzip.c @@ -13,6 +13,9 @@ #include +static int to_stdout = 0; +static int keep = 0; + static uint8_t _get(struct inflate_context * ctx) { return fgetc(ctx->input_priv); } @@ -34,11 +37,9 @@ static int usage(int argc, char * argv[]) { } int main(int argc, char * argv[]) { - int to_stdout = 0; - int keep = 0; int opt; - while ((opt = getopt(argc, argv, "ck")) != -1) { + while ((opt = getopt(argc, argv, "?ck")) != -1) { switch (opt) { case 'c': to_stdout = 1; @@ -47,18 +48,21 @@ int main(int argc, char * argv[]) { case 'k': keep = 1; break; + case '?': + return usage(argc, argv); default: fprintf(stderr, "%s: unrecognized option '%c'\n", argv[0], opt); break; } } - if (optind >= argc) { - return usage(argc, argv); + FILE * f; + if (optind >= argc || !strcmp(argv[optind],"-")) { + f = stdin; + } else { + f =fopen(argv[optind],"r"); } - FILE * f = fopen(argv[optind],"r"); - if (!f) { fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno)); return 1; From ccceaed7692062bb8c36163e2fb167879850b3f3 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 5 May 2020 10:03:21 +0900 Subject: [PATCH 026/102] tar: support -z flag for extraction by piping to gunzip --- apps/tar.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/tar.c b/apps/tar.c index 23b1a2c9..91faf54d 100644 --- a/apps/tar.c +++ b/apps/tar.c @@ -170,11 +170,12 @@ int main(int argc, char * argv[]) { char * fname = NULL; int verbose = 0; int action = 0; + int compressed = 0; #define TAR_ACTION_EXTRACT 1 #define TAR_ACTION_CREATE 2 #define TAR_ACTION_LIST 3 - while ((opt = getopt(argc, argv, "?ctxvaf:")) != -1) { + while ((opt = getopt(argc, argv, "?ctxzvaf:")) != -1) { switch (opt) { case 'c': if (action) { @@ -203,6 +204,9 @@ int main(int argc, char * argv[]) { case 'v': verbose = 1; break; + case 'z': + compressed = 1; + break; case '?': usage(argv); return 1; @@ -231,6 +235,31 @@ int main(int argc, char * argv[]) { return 1; } + if (compressed) { + int fds[2]; + pipe(fds); + + int child = fork(); + if (child == 0) { + /* Close the read end */ + close(fds[0]); + /* Put f's fd into stdin */ + dup2(fileno(f), STDIN_FILENO); + /* Make stdout the pipe */ + dup2(fds[1], STDOUT_FILENO); + /* Execeute gzunzip */ + char * args[] = {"gunzip","-c",NULL}; + exit(execvp("gunzip",args)); + } else if (child < 0) { + fprintf(stderr, "%s: failed to fork gunzip for compressed archive\n", argv[0]); + return 1; + } + + /* Reattach f to pipe */ + close(fds[1]); + f = fdopen(fds[0], "r"); + } + char tmpname[1024] = {0}; int last_was_long = 0; From 571cda2928ef335af3418c77280dbf8c91f1f573 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 5 May 2020 19:02:22 +0900 Subject: [PATCH 027/102] tar: support -O, arguments for -x --- apps/tar.c | 80 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/apps/tar.c b/apps/tar.c index 91faf54d..cf3df877 100644 --- a/apps/tar.c +++ b/apps/tar.c @@ -143,8 +143,10 @@ static void write_file(struct ustar * file, FILE * f, FILE * mf, char * name) { fread( buf, 1, length, f); fwrite(buf, 1, length, mf); } - fclose(mf); - chmod(name, interpret_mode(file)); + if (mf != stdout) { + fclose(mf); + chmod(name, interpret_mode(file)); + } } static void _seek_forward(FILE * f, size_t amount) { @@ -164,6 +166,15 @@ static void usage(char * argv[]) { "\n", argv[0]); } +static int matches_files(int argc, char * argv[], int optind, char * filename) { + while (optind < argc) { + if (!strcmp(argv[optind], filename)) return 1; + optind++; + } + + return 0; +} + int main(int argc, char * argv[]) { int opt; @@ -171,11 +182,13 @@ int main(int argc, char * argv[]) { int verbose = 0; int action = 0; int compressed = 0; + int to_stdout = 0; + int only_matches = 0; #define TAR_ACTION_EXTRACT 1 #define TAR_ACTION_CREATE 2 #define TAR_ACTION_LIST 3 - while ((opt = getopt(argc, argv, "?ctxzvaf:")) != -1) { + while ((opt = getopt(argc, argv, "?ctxzvaf:O")) != -1) { switch (opt) { case 'c': if (action) { @@ -207,6 +220,9 @@ int main(int argc, char * argv[]) { case 'z': compressed = 1; break; + case 'O': + to_stdout = 1; + break; case '?': usage(argv); return 1; @@ -220,6 +236,10 @@ int main(int argc, char * argv[]) { fname = "-"; } + if (optind < argc) { + only_matches = 1; + } + if (action == TAR_ACTION_EXTRACT || action == TAR_ACTION_LIST) { hashmap_t * files = hashmap_create(10); @@ -291,46 +311,56 @@ int main(int argc, char * argv[]) { } if (file->type[0] == '0' || file->type[0] == 0) { - FILE * mf = fopen(name,"w"); + FILE * mf = to_stdout ? stdout : fopen(name,"w"); if (!mf) { fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); _seek_forward(f, interpret_size(file)); } else { - write_file(file,f,mf,name); + if (!only_matches || matches_files(argc,argv,optind,name)) { + write_file(file,f,mf,name); + } } struct ustar * tmp = malloc(sizeof(struct ustar)); memcpy(tmp, file, sizeof(struct ustar)); hashmap_set(files, name, tmp); } else if (file->type[0] == '5') { - if (name[strlen(name)-1] == '/') { - name[strlen(name)-1] = '\0'; - } - if (strlen(name)) { - if (mkdir(name, 0777) < 0) { - if (errno != EEXIST) { - fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); + if (!to_stdout) { + if (name[strlen(name)-1] == '/') { + name[strlen(name)-1] = '\0'; + } + if (strlen(name)) { + if (!only_matches || matches_files(argc,argv,optind,name)) { + if (mkdir(name, 0777) < 0) { + if (errno != EEXIST) { + fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); + } + } } } } } else if (file->type[0] == '1') { - char tmp[101] = {0}; - strncat(tmp, file->link, 100); - if (!hashmap_has(files, tmp)) { - fprintf(stderr, "%s: %s: %s: %s: missing target\n", argv[0], fname, name, tmp); - } else { - FILE * mf = fopen(name,"w"); - if (!mf) { - fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); + if (!to_stdout && (!only_matches || matches_files(argc,argv,optind,name))) { + char tmp[101] = {0}; + strncat(tmp, file->link, 100); + if (!hashmap_has(files, tmp)) { + fprintf(stderr, "%s: %s: %s: %s: missing target\n", argv[0], fname, name, tmp); } else { - write_file(hashmap_get(files,tmp),f,mf,name); + FILE * mf = fopen(name,"w"); + if (!mf) { + fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); + } else { + write_file(hashmap_get(files,tmp),f,mf,name); + } } } _seek_forward(f, interpret_size(file)); } else if (file->type[0] == '2') { - char tmp[101] = {0}; - strncat(tmp, file->link, 100); - if (symlink(tmp, name) < 0) { - fprintf(stderr, "%s: %s: %s: %s: %s\n", argv[0], fname, name, tmp, strerror(errno)); + if (!to_stdout && (!only_matches || matches_files(argc,argv,optind,name))) { + char tmp[101] = {0}; + strncat(tmp, file->link, 100); + if (symlink(tmp, name) < 0) { + fprintf(stderr, "%s: %s: %s: %s: %s\n", argv[0], fname, name, tmp, strerror(errno)); + } } _seek_forward(f, interpret_size(file)); } else if (file->type[0] == 'L') { From 286bd07812206f3b726d055392476ae6d2eec296 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 8 May 2020 11:22:43 +0900 Subject: [PATCH 028/102] tar: fix handling of hardlinks --- apps/tar.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/tar.c b/apps/tar.c index cf3df877..a0c2e93d 100644 --- a/apps/tar.c +++ b/apps/tar.c @@ -19,7 +19,6 @@ #include #include -#include #include struct ustar { @@ -242,8 +241,6 @@ int main(int argc, char * argv[]) { if (action == TAR_ACTION_EXTRACT || action == TAR_ACTION_LIST) { - hashmap_t * files = hashmap_create(10); - FILE * f; if (!strcmp(fname,"-")) { f = stdin; @@ -292,7 +289,7 @@ int main(int argc, char * argv[]) { if (action == TAR_ACTION_LIST) { if (verbose) { - fprintf(stdout, "%10d %.155s%.100s\n", interpret_size(file), file->prefix, file->filename); + fprintf(stdout, "%10d %c %.155s%.100s\n", interpret_size(file), file->type[0], file->prefix, file->filename); } else { fprintf(stdout, "%.155s%.100s\n", file->prefix, file->filename); } @@ -320,9 +317,6 @@ int main(int argc, char * argv[]) { write_file(file,f,mf,name); } } - struct ustar * tmp = malloc(sizeof(struct ustar)); - memcpy(tmp, file, sizeof(struct ustar)); - hashmap_set(files, name, tmp); } else if (file->type[0] == '5') { if (!to_stdout) { if (name[strlen(name)-1] == '/') { @@ -342,15 +336,23 @@ int main(int argc, char * argv[]) { if (!to_stdout && (!only_matches || matches_files(argc,argv,optind,name))) { char tmp[101] = {0}; strncat(tmp, file->link, 100); - if (!hashmap_has(files, tmp)) { - fprintf(stderr, "%s: %s: %s: %s: missing target\n", argv[0], fname, name, tmp); + FILE * mf = fopen(name,"w"); + if (!mf) { + fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); } else { - FILE * mf = fopen(name,"w"); - if (!mf) { - fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, name, strerror(errno)); + FILE * source = fopen(tmp, "r"); + if (!source) { + fprintf(stderr, "%s: %s: %s: %s\n", argv[0], fname, tmp, strerror(errno)); } else { - write_file(hashmap_get(files,tmp),f,mf,name); + while (!feof(source)) { + char buf[4096]; + ssize_t r = fread(buf, 1, 4096, source); + fwrite(buf, 1, r, mf); + } + fclose(source); } + fclose(mf); + chmod(name, interpret_mode(file)); } } _seek_forward(f, interpret_size(file)); From 69324a4e3dc82676c7ef02ae3bb9184861968743 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 8 May 2020 11:24:33 +0900 Subject: [PATCH 029/102] msk: use native inflater for tgz packages (slow, but nicer) --- apps/msk.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/msk.c b/apps/msk.c index dcde7b32..b4369c86 100644 --- a/apps/msk.c +++ b/apps/msk.c @@ -361,10 +361,9 @@ static int install_package(char * pkg) { } char cmd[1024]; - sprintf(cmd, "cd %s; ungz %s /tmp/%s.tar; tar -xf /tmp/%s.tar; rm /tmp/%s.tar", + sprintf(cmd, "cd %s; tar -xzf %s", confreader_get(msk_manifest, pkg, "destination"), - confreader_get(msk_manifest, pkg, "source"), - pkg, pkg, pkg); + confreader_get(msk_manifest, pkg, "source")); int status; if ((status = system(cmd))) { From 431a6aaf2a94b155bce1f869b7d923cc820ee183 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 30 May 2020 16:36:31 +0900 Subject: [PATCH 030/102] png: support more color types; fix idat sequencing --- lib/png.c | 283 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 217 insertions(+), 66 deletions(-) diff --git a/lib/png.c b/lib/png.c index 45a50eb7..37662b76 100644 --- a/lib/png.c +++ b/lib/png.c @@ -98,6 +98,8 @@ static uint8_t _get(struct inflate_context * ctx) { unsigned int size = read_32(c->f); unsigned int type = read_32(c->f); + c->size = size; + if (type != PNG_IDAT) { /* This isn't an IDAT? That's wrong! */ fprintf(stderr, "And this is the wrong type (0x%x), I'm just bailing.\n", type); @@ -131,6 +133,202 @@ static int paeth(int a, int b, int c) { return c; } +static void write_pixel(struct png_ctx * c, uint32_t color) { + SPRITE((c->sprite), (c->x), (c->y)) = color; + + /* Reset the short buffer */ + c->buf_off = 0; + + /* Advance to next pixel */ + c->x++; + if (c->x == (int)c->width) { + /* Advance to next line; next read is scanline filter type */ + c->x = -1; + c->y++; + } +} + +static void process_pixel_type_6(struct png_ctx * c) { + /* + * Obtain pixel data from short buffer; + * For color type 6, this is always in R G B A order in the + * bytestream, so we don't have to worry about subpixel ordering + * or weird color masks. + */ + unsigned int r = c->buffer[0]; + unsigned int g = c->buffer[1]; + unsigned int b = c->buffer[2]; + unsigned int a = c->buffer[3]; + + /* Apply filters */ + if (c->sf == PNG_FILTER_SUB) { + /* Add raw value to the pixel on the left */ + if (c->x > 0) { + uint32_t left = SPRITE((c->sprite), (c->x - 1), (c->y)); + r += _RED(left); + g += _GRE(left); + b += _BLU(left); + a += _ALP(left); + } + } else if (c->sf == PNG_FILTER_UP) { + /* Add raw value to the pixel above */ + if (c->y > 0) { + uint32_t up = SPRITE((c->sprite), (c->x), (c->y - 1)); + r += _RED(up); + g += _GRE(up); + b += _BLU(up); + a += _ALP(up); + } + } else if (c->sf == PNG_FILTER_AVG) { + /* Add raw value to the average of the pixel above and left */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + + r += ((int)_RED(left) + (int)_RED(up)) / 2; + g += ((int)_GRE(left) + (int)_GRE(up)) / 2; + b += ((int)_BLU(left) + (int)_BLU(up)) / 2; + a += ((int)_ALP(left) + (int)_ALP(up)) / 2; + } else if (c->sf == PNG_FILTER_PAETH) { + /* Use the Paeth predictor */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + uint32_t upleft = (c->x > 0 && c->y > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y - 1)) : 0; + + r = ((int)r + paeth((int)_RED(left),(int)_RED(up),(int)_RED(upleft))) % 256; + g = ((int)g + paeth((int)_GRE(left),(int)_GRE(up),(int)_GRE(upleft))) % 256; + b = ((int)b + paeth((int)_BLU(left),(int)_BLU(up),(int)_BLU(upleft))) % 256; + a = ((int)a + paeth((int)_ALP(left),(int)_ALP(up),(int)_ALP(upleft))) % 256; + } + + /* Write new pixel to the image */ + write_pixel(c, rgba(r,g,b,a)); +} + +static void process_pixel_type_2(struct png_ctx * c) { + /* + * Obtain pixel data from short buffer; + * For color type 6, this is always in R G B A order in the + * bytestream, so we don't have to worry about subpixel ordering + * or weird color masks. + */ + unsigned int r = c->buffer[0]; + unsigned int g = c->buffer[1]; + unsigned int b = c->buffer[2]; + + /* Apply filters */ + if (c->sf == PNG_FILTER_SUB) { + /* Add raw value to the pixel on the left */ + if (c->x > 0) { + uint32_t left = SPRITE((c->sprite), (c->x - 1), (c->y)); + r += _RED(left); + g += _GRE(left); + b += _BLU(left); + } + } else if (c->sf == PNG_FILTER_UP) { + /* Add raw value to the pixel above */ + if (c->y > 0) { + uint32_t up = SPRITE((c->sprite), (c->x), (c->y - 1)); + r += _RED(up); + g += _GRE(up); + b += _BLU(up); + } + } else if (c->sf == PNG_FILTER_AVG) { + /* Add raw value to the average of the pixel above and left */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + + r += ((int)_RED(left) + (int)_RED(up)) / 2; + g += ((int)_GRE(left) + (int)_GRE(up)) / 2; + b += ((int)_BLU(left) + (int)_BLU(up)) / 2; + } else if (c->sf == PNG_FILTER_PAETH) { + /* Use the Paeth predictor */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + uint32_t upleft = (c->x > 0 && c->y > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y - 1)) : 0; + + r = ((int)r + paeth((int)_RED(left),(int)_RED(up),(int)_RED(upleft))) % 256; + g = ((int)g + paeth((int)_GRE(left),(int)_GRE(up),(int)_GRE(upleft))) % 256; + b = ((int)b + paeth((int)_BLU(left),(int)_BLU(up),(int)_BLU(upleft))) % 256; + } + + /* Write new pixel to the image */ + write_pixel(c, rgb(r,g,b)); +} + +static void process_pixel_type_4(struct png_ctx * c) { + /* + * Obtain pixel data from short buffer; + * For color type 6, this is always in R G B A order in the + * bytestream, so we don't have to worry about subpixel ordering + * or weird color masks. + */ + unsigned int b = c->buffer[0]; + unsigned int a = c->buffer[1]; + + /* Apply filters */ + if (c->sf == PNG_FILTER_SUB) { + /* Add raw value to the pixel on the left */ + if (c->x > 0) { + uint32_t left = SPRITE((c->sprite), (c->x - 1), (c->y)); + b += _BLU(left); + a += _ALP(left); + } + } else if (c->sf == PNG_FILTER_UP) { + /* Add raw value to the pixel above */ + if (c->y > 0) { + uint32_t up = SPRITE((c->sprite), (c->x), (c->y - 1)); + b += _BLU(up); + a += _ALP(up); + } + } else if (c->sf == PNG_FILTER_AVG) { + /* Add raw value to the average of the pixel above and left */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + + b += ((int)_BLU(left) + (int)_BLU(up)) / 2; + a += ((int)_ALP(left) + (int)_ALP(up)) / 2; + } else if (c->sf == PNG_FILTER_PAETH) { + /* Use the Paeth predictor */ + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + uint32_t upleft = (c->x > 0 && c->y > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y - 1)) : 0; + + b = ((int)b + paeth((int)_BLU(left),(int)_BLU(up),(int)_BLU(upleft))) % 256; + a = ((int)a + paeth((int)_ALP(left),(int)_ALP(up),(int)_ALP(upleft))) % 256; + } + + /* Write new pixel to the image */ + write_pixel(c, rgba(b,b,b,a)); +} + +static void process_pixel_type_0(struct png_ctx * c) { + unsigned int b = c->buffer[0]; + if (c->sf == PNG_FILTER_SUB) { + if (c->x > 0) { + uint32_t left = SPRITE((c->sprite), (c->x - 1), (c->y)); + b += _BLU(left); + } + } else if (c->sf == PNG_FILTER_UP) { + if (c->y > 0) { + uint32_t up = SPRITE((c->sprite), (c->x), (c->y - 1)); + b += _BLU(up); + } + } else if (c->sf == PNG_FILTER_AVG) { + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + b += ((int)_BLU(left) + (int)_BLU(up)) / 2; + } else if (c->sf == PNG_FILTER_PAETH) { + uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; + uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; + uint32_t upleft = (c->x > 0 && c->y > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y - 1)) : 0; + b = ((int)b + paeth((int)_BLU(left),(int)_BLU(up),(int)_BLU(upleft))) % 256; + } + + /* Write new pixel to the image */ + write_pixel(c, rgb(b,b,b)); +} + + /** * Handle decompressed output from the inflater * @@ -151,71 +349,24 @@ static void _write(struct inflate_context * ctx, unsigned int sym) { /* Reset the buffer, advance to the beginning of the actual scanline */ c->x = 0; c->buf_off = 0; - } else if (c->buf_off == 4) { - /* - * Obtain pixel data from short buffer; - * For color type 6, this is always in R G B A order in the - * bytestream, so we don't have to worry about subpixel ordering - * or weird color masks. - */ - unsigned int r = c->buffer[0]; - unsigned int g = c->buffer[1]; - unsigned int b = c->buffer[2]; - unsigned int a = c->buffer[3]; - - /* Apply filters */ - if (c->sf == PNG_FILTER_SUB) { - /* Add raw value to the pixel on the left */ - if (c->x > 0) { - uint32_t left = SPRITE((c->sprite), (c->x - 1), (c->y)); - r += _RED(left); - g += _GRE(left); - b += _BLU(left); - a += _ALP(left); - } - } else if (c->sf == PNG_FILTER_UP) { - /* Add raw value to the pixel above */ - if (c->y > 0) { - uint32_t up = SPRITE((c->sprite), (c->x), (c->y - 1)); - r += _RED(up); - g += _GRE(up); - b += _BLU(up); - a += _ALP(up); - } - } else if (c->sf == PNG_FILTER_AVG) { - /* Add raw value to the average of the pixel above and left */ - uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; - uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; - - r += ((int)_RED(left) + (int)_RED(up)) / 2; - g += ((int)_GRE(left) + (int)_GRE(up)) / 2; - b += ((int)_BLU(left) + (int)_BLU(up)) / 2; - a += ((int)_ALP(left) + (int)_ALP(up)) / 2; - } else if (c->sf == PNG_FILTER_PAETH) { - /* Use the Paeth predictor */ - uint32_t left = (c->x > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y)) : 0; - uint32_t up = (c->y > 0) ? SPRITE((c->sprite), (c->x), (c->y - 1)) : 0; - uint32_t upleft = (c->x > 0 && c->y > 0) ? SPRITE((c->sprite), (c->x - 1), (c->y - 1)) : 0; - - r = ((int)r + paeth((int)_RED(left),(int)_RED(up),(int)_RED(upleft))) % 256; - g = ((int)g + paeth((int)_GRE(left),(int)_GRE(up),(int)_GRE(upleft))) % 256; - b = ((int)b + paeth((int)_BLU(left),(int)_BLU(up),(int)_BLU(upleft))) % 256; - a = ((int)a + paeth((int)_ALP(left),(int)_ALP(up),(int)_ALP(upleft))) % 256; - } - - /* Write new pixel to the image */ - SPRITE((c->sprite), (c->x), (c->y)) = rgba(r,g,b,a); - - /* Reset the short buffer */ - c->buf_off = 0; + } else if (c->buf_off == 1 && c->color_type == 0) { + process_pixel_type_0(c); + } else if (c->buf_off == 2 && c->color_type == 4) { + process_pixel_type_4(c); + } else if (c->buf_off == 3 && c->color_type == 2) { + process_pixel_type_2(c); + } else if (c->buf_off == 4 && c->color_type == 6) { + process_pixel_type_6(c); + } +} - /* Advance to next pixel */ - c->x++; - if (c->x == (int)c->width) { - /* Advance to next line; next read is scanline filter type */ - c->x = -1; - c->y++; - } +static int color_type_has_alpha(int c) { + switch (c) { + case 4: + case 6: + return ALPHA_EMBEDDED; + default: + return 0; } } @@ -275,14 +426,14 @@ int load_sprite_png(sprite_t * sprite, char * filename) { if (c.interlace != 0 && c.interlace != 1) return 1; if (c.bit_depth != 8) return 1; /* Sorry */ - if (c.color_type != 6) return 1; /* Sorry */ + if (c.color_type < 0 || c.color_type > 6 || (c.color_type & 1)) return 1; /* Sorry, no indexed support */ /* Allocate space */ sprite->width = c.width; sprite->height = c.height; sprite->bitmap = malloc(sizeof(uint32_t) * sprite->width * sprite->height); sprite->masks = NULL; - sprite->alpha = (c.color_type == 4 || c.color_type == 6) ? ALPHA_EMBEDDED : 0; + sprite->alpha = color_type_has_alpha(c.color_type); sprite->blank = 0; From 802ae6a6165283b53eee775cdd7d2161feaa5281 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 30 May 2020 16:37:10 +0900 Subject: [PATCH 031/102] sdf: switch font format from bmp to png --- base/usr/share/fonts/sdf_bold.sdf | Bin 651146 -> 108829 bytes base/usr/share/fonts/sdf_bold_oblique.sdf | Bin 651146 -> 121381 bytes base/usr/share/fonts/sdf_mono.sdf | Bin 651146 -> 96604 bytes base/usr/share/fonts/sdf_mono_bold.sdf | Bin 651146 -> 99735 bytes .../usr/share/fonts/sdf_mono_bold_oblique.sdf | Bin 651146 -> 110906 bytes base/usr/share/fonts/sdf_mono_oblique.sdf | Bin 651146 -> 108295 bytes base/usr/share/fonts/sdf_oblique.sdf | Bin 651146 -> 116045 bytes base/usr/share/fonts/sdf_thin.sdf | Bin 651146 -> 103514 bytes lib/graphics.c | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) diff --git a/base/usr/share/fonts/sdf_bold.sdf b/base/usr/share/fonts/sdf_bold.sdf index 30f7b33f08ca02995dbbe65ed224c88c9d71bb38..fd60c43f57311c3a79ec6c7a8af8792ef95d3d4e 100644 GIT binary patch literal 108829 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%0DqrqE3v0cwKey4_ml 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ÕsDTWu~7c02VpIM_nk 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

7PAOr9f$%r&H7WlS)#KbQLI>k9>$6 zmUi@^2qGj-IE8 zE2AU!W>e=Nz_Z$Xo7mfX!jZ{G{^LDSr9hj~+w+;&q84<~YzpT)^ZCwv-c#@I4x}o( zi6dNhD%StR7V)8IcJzE_K9BcW?IJlE6@S$R{@N2&3bZM`y(jLJq#WrgP%pX#L6Rq4qg#eWuTzj|>f z^P`iKV>Kmo9dYU7o7f%>y2RU_s8XOb&J#&l*JDajj&v0$nU8#k9Il|}Zaw3&lCE<% z7#_0Xmg?!3n&dTAdU8ndpM6#1aG8%5*4lbm`505axlAPY5*H|e^AtMP`;1G{Ci3B; z*?7)TQ`S45psdJM-t~otVR)r_PMxCSK6O=kdKU7l8i!ZO(}>n9L+XolD`e$kO!?Lm zRhgWp(6QcUwuq0-<-EC8n3U%_jh^<*fk*Cldm5~a%D%hiU38fc`gn5mBOd}iK!MWy zD1CersmjN(-k!W^@XAV>bT^F-|Hb)Kfs$J=6G9(PrYavIpO1VTTLF>ZskR70 znNRK|TR~VpRrwJ4eB|TEgwV&6H4029P;v`qLg?ekROLhD^O28ZD@*(p1$j7l25c!>Iiy)NwPA@ZpLL?#YbP-%SR<1lXNf14VEoAy9E8 z^pe`1u;KraPgOodKGFF&;t;iMuaBqoMBzYz5?ZjKqIG?JYDJJtRVG9}RSaR$05_GY zEF6{(r(8YNJCB?pl;8I(LNOzWfeg(Rhba^R5hNdSC{nL6ICLpG|rU|KDWgFiJhgF-}fv;1V<7AWj>*o zSX`U`nNL+dL_Qb!IARdg{xwabkEiu3;Xr{BT9D84qVsgOm7eEQB@j6}2wAD1(xjV@ zL-`;H>lHg2H^1*$hzO1(1j>9uFR{2b|1+Pee29E5@^M5UxczIIMjub>iN;sU*vInl z69=9$N3qj(_k=d@$xF@TBcCb@K}@8{3a#BERp~e^RqmOmhoWcQ+rAg^w!3)rRUC~7 zfGEG0Sn5h(H{=it2gLcXPz?~#zFX_pf*@@~ukXeot|wL82M#`UVE@B=_uLsCldDWb z`tGhas z_}PO`KK#J$+bhk7Hnc5Btyo@7=aE%$969_!{ft#X@sayMNlya5t^!qqvv%H*N-aG{>N*YMwzJSd6aYZ)%d9C;CyEs zYpq?$yLsm5$y29gD?9$C*zE=fBdAanMUxMaPn83)X?A-)4hKSItaU%!k^$N#Wed6| zhSzv?3{}Mut4W{;a8u$)?Ijj^*K7Bbz?Q)1Y39|(?Bn?C0ufL}fKdpcN>!xP^IC}O zMwM;-x~5SkLXC=Z{_y?-Pa9t_(c4DNnzQ|7d74sIwIhSYk>RBps?s6ysd6DgS=F*q zE8RFmJ`NW`h1`Gc)Um@)Ke~7KZB~7pPb*!|qd)X?+^b`_Dvo}tF;s^DFbk6iM+eeO{?jIV}3uvaew&COPt`4#kN3tiJ50Oum3o+Y~O1GVEm2T^#Tf=-l4i`dY zJkpO^_Xi(~3s_}kn~^^cKYOUwqp#wq)CM)3$$q#v(t3$N-hBJ+2Of5T4UIACB9A#7 zb%SuIYQP~>X(L)aZ-BTiRCQ*w=|_k9PapTnu$wkfCVV|7R${U`^xV-G)Dujy!fEJ4 z?Pq&+E_T)P5=W{hoDY#tl?%~X*&IF3$KgU)5jWS_E@h?dh?^IVK6hyUzWbsceHBNy zk=nzN)Jvo{-g4J{`}TXlLSu}&$YTyeT_Kbz3lxKh>vuY7qVhh z9e&}|IrRlvDJ>|yq#SU%&*v@<-^!>v3nCvPpQ-?YPpD|tDD++JB58c&;|L%~%om%f za%EMvWK(7C5Jz4M0*AGC>zYrL9Dlv)#wBslLdS7FEKrP}0D`Hq&$psDgfMNy1c(4f z`Fg(FB&sg86lLfFrX7fg_=ps7A^091}_z-HgX<(I_7l zECph5nL3KSq7X`zU5V=oab2kDOsjeg4ur=o2oKd6M_Gw-&V00&^;+$!wG^%G(<^0c z_i(Hx>$#m zNQ-#65K3EPEIgm80HSqnGxXe-73`{RHbXvDuBzk2gvKJbk%d0j|8gR7EF_FKvjaQTpXr7YNi?Kv-Yow%a3>=@8^X|T26o?AEN9i zbQi@TbghG`1RVK%RH)La8674%I|D+QaN1m`i*oMgK&E@!9eXWzxAYwxiR)?(gtL?p zTQ9IZO8TxP3ZE%<30cv6Ehj|{YNSiPW=)<2JZ@W}L709a_2xAaws{nx1 zF5--$UG&_Ml?biTF>?7xqpFlus&ri(AStT_wLO{|!-}{RmuQp=T-ldX@`1;!o~J|T zllBG#R&WSm+K9PS*;ngl3`ag66{?mORK4cv&L~$Vyq?IE#i(-kD3;Q#ouEJxMT#8r z#mK4&LU90rM^!D5LYRz1`H1E7*)A1OMFhr-L;HBZM;cWCic7baj|f#=2y-FQs8U%a zOV`B#a&lU*Y>%eKP${dpEDi%7+h?nM;2EbUCPI{i*}E7HA*@%b?3>Ha7>;~CVpLHF zmaC>4D-(V%A=+Y8QJ#KY)d)XBD5aNJ9MpV1Rdr^Ag^>LP_HX^pgre}NVgshh%!geqT1ze&AB za0r5csv5smsnW_xbknrg(xXc3sxFpg36VPbpgroOTf;|*Lrp#0G!a%pq*9eH-4X|g z$!Njk#!yXHajBj^&M%3zq_%n36T3rrgxN1K98ry;@X7|_$mb(YmF+P#y+uVEYE)cL zv?gFE-T3AxkmT;*N$Vx~6&IB%TV{Yi>njKNR2jRfi)E>NBwHC^zE-+%aVd_{)MLA< zelM9qBvX|yUBv-fa#}FCF{I?QdXlr2@=tMrJB zydBckzG^b_0cQCiCMvRuR=)sHy>z1x7KbHCKAQ-$5b0FqOV{E6H90L9G)79PX%&~F zQS_Qv8EM<*k)GHE!Y9mri{YrzC~~_t3`ag6byPL>78Px^@5VUKukgoq3Dw`Ij91aF z4km!3fvVVW60g1&s|6@Bax0!NY53D<<^#;|!Ck#7s~A-P%H*Szm8FV4>n+M&sLGda zNmZ(zN7|#QF>Irh;&S!8rb?y3Vao!hL)cQ0!Dl^z+K8KiBcBfuSA;6+EOp&jACL6i zNFB&p9C1Swk88!OWIYE^6IDXOI{zwFrCrrz<|`ky&!cd@u_Gqw6Y9>J!K@L^%R*L^> zsj^lZnPKh)~squ&tyjVjM389bYP?ay;Oo)7{@*y%w!sGck@*!L_$!)$4 zR+4cjE6EUBLDg2^$mCof&(SCaN|tUWgg%}_RlamHA@ZrphsY!ekLTmahj7s(xA{6) zNyee9BtvWkRa=20lXHDMN23%dS-P1J`gjgi`O?jV$fqhFB9kOMo{u9R!bOwZ=IdZ3 z8Hcix46zkdZ3T`@&h_yejZ&aw>1IOc<2h92OE(iDpQ?O_Op@?;K8}0{7fo`TuY;9j z9Lh>E#8yzX6*w|E*T-`-N`aE4n+c(h=TMa|-Assls`4Q+Ny6j#IPxJ}G|6qg4px$J zC@aYjTS3)U;K<}$AJ5S!1xl7~CWJnoLshS+%7@4#36JOF$cJ#zB)9oGSV_jA ztRzEh1yx&tBa?G|JV&DxC|SCh5c+ryRr%7*gvh5VA0m?^Jf4puAHqeG+~(_GB^igZ zk_@pGRBZ*0OwRT39F0<-Wa(x?=;PB=@ro*-HC9i`mupWD`BddYGoosT zc;vt{M_+vDv{O{S|J<3=7!;p7_{6?@@497k&?dgM+?P|oyW4+NIz)Jca;$2p|L(2$ zwud(BKmPbZ6y)e1nVOmsuU0nn;_GDf9J{>_?>~qW?D~iB-*8S_qxi(p39Siy4)pa6 z;v*sjEZAw)g zoclOleao&a2!5;kithA9SX}>4I4=C~v6s&FwT8xL78aKl=BLMpap=I=Q!gHU=D;KO zdlk>uk1g{Jx88o&J-cP+uhuN_WfnGT3<5|M$ms+3I3}fI?_FPx3urBuPoly*V>mWJ z6k7`MEVkPVRXu+gWx4oF7Cen$b87;hq`hp+A+s!^2!bFvaZjL@oKl;z_R;r>!hxl>Z2l>?=Pth7j z9v}QxPY^YDYU$mW|6unC2hvU~wmWpbA1d{?7bb_H=*JE}_2}N+w`~lXUfy!kt~<-R z8MZQ-FGLyxoNfP62%s*3oQHSsee`Lk;&lHuh~I!z(%QpRsg3n~P4wJ+#{sPoJ>Sn| zHgTF+dyS6dfS#|3o_E$n&(}IpJ?BHuErdM*y#_*>FH6sF+I5Fku9NZ=d+CF&cqI$B zwc|DCVx0(0>!IP--@CiE5(IUTd+%3L9^C8P-d`;uSX8L;fV)F5vmQqL62TMWZ6kj( zeSNCEyt=k_=@PZ~%5rH!6~M68a#=Ei29R9%>fYUV z1Z6)3Qpr+U9<`A1f>{-+;8tZoNExoOa2n9Y@dS)*_*Yrp9BW^^bmi(5JF2g?hx>8r z%fZKLi+OE09n}}!dgmT%#A=Q3*Lq@?wvy_11RsTfJLLeGQhB7xR?lZT#CBUw@lFg$ zh#x>sKzUc?fPX0;DDP?>rJu{_H2m|KnHgB%97R5T3e`hrW+LazTcc!{t#Hy>vfEo? zx0BY^*zI8YG8B4rbac9dJG!o{wZ}$B$2LOGq2_xZdg8!S=Bx%P@@}iS)>OK8T3g%u z&W8F-5SGze2MtPD9(?M+6OZsf;@9^j=@P)+hn?pSK3!4>xQF-d2~bw3a)G-;96Cfr zSjiW&f?)cpc!;{qyd9ob<^(DF%nOuscF7NbLL;R3vp;yY3lZ6Rg%AeCF^GdaqnZ z4nK47z!MMcg~d=&bXIepECnUFCm()bw{Oo?sB(~{K!DjpPkI>RP(EiH|4sCKVVU~+ z@;v&+@cEe~8~&*|4T5yah8>;2*2WTdiysfCX!w&4@Abvb4J&2yfjkaDzF66VPi8t);eh5;T${4 z8XHq|G7+By8iy>s1zco_sX~1i6J}58}f{#Hxdy%X(CM z^~$wN%ZsTYiJQ^A#Ni?*K%B$6%Gu`8(o2&&8fR*v0CujOhoZ>^dmVEug%9Yeo|YmI zYtVD@=s9u+Jx60=ZA~I~nmc0F60FUD$ep<5XnMBvJLdZa==lQ=J&E4^;;GX#IMH?L zq>Nj9d-U1rT27fzBag?P@jDi4E$Pt763v-2r(b%JG!~OWbw+0s@wubU^QRP)){?7B zOckmeo>CwbgjHNSK-v%k`;5F|rru*sX<$cdPq4Xy_?yvM{$4%wM<6=T^OlL+wE)qneGVq|i5d46+JU=rPJucL+IM)jOg-wv?q4 zo=q|6ng7~{>^Eqj4^L&no-83R<!X&V1g_dd@#=zSEtVQ51dC@#=_jxNUOiqys}|t910MK`QlI0acOa3c5-w8noen6M$tV`X>vq5h9>70LDnS58i1Qh*I>UF#4vCbs*Yn3Ivt`t zN)C`sZ(uy|z}#R7;VCCPS}3-cvj*%jQ47%oAo2F`_R5v3w8(Pq)X8IP1~p^}dtvRS zGo32bc|Ta2mZIj7(E?h_c6HytTxVr@VX*J)OUDi$dXn|PbQl&JmW;{X!mFbY*5y0X znn7%e9#;Pd-Gtwk5r{JZUgP4C4J|%p)tVMo?=yY|a2|e!ALYA)PqOO}o6?!0+1XhH z*2SWPe?Ecl!?pf-X@yhPOG><5lI=!D&bJX^r|UAT{gIK8c@uZv2>)DcrT(EgPRl@) zZ+5uVyt1J)4hSmaz)i*#=W?DzymD}QiO^g?`UkQ<#s^?ASVh0X3y)ID1etK7k}V=+ zfo(#`8cCsN4`qca0#AStUe~Z$7J5#z2^KH;YU{o|#S>X9rWND5pbxrM9HIfB5M3Hv zSYEwyc?FA0=g8kNOD8w z2wP7;5ru&5$kzRt7E%Q0Ve;SD54+t4;?UhG5I5VRk)$yErQ09i$`POVMb6l zD%zAg_+;=I=~21kfN(Th!fGu>TuDXl8gF;3aGUi)YC^MfP1Xy`kOoN`Z#QxF&IZQY zO~0D&tRO7|?X=Qa9BUp>MWf6!k_OntxWXXH7V*eJhq6B;{R4|e^CL80k&h0uO|^+S zp$W+hFLJgBleIJsw}^sM@rBh2RYzZBM~WaMoj4>?W=_dT;LN3yN6pwkwvx$wLPV*| zDYx++Str)NX7Z~n8i0>DL<2x!eAF>S;;vv-1;JV}dXDgNKxL7EL=}X!>&F9rxb}~~ z2o@PFc$)=M?`ia1y08MuWRRAV7%yIuB_MQGv4emp3SkX)szI=}(jIDoK~ZO({wa-o zm;!NY34u6S$Du_MXsq})6a#|aX}uh;Q-LI#a@T*BMi-(*?kFG}U*j#;&ynFaF)@Kz zh6gHIKOdi%kk06>clN61=;fHW=Ml??<6`6PZG45Qt=~Vly?y2KRmsa(U0xD}`v2^` zIgDJ_l|J4WWp-e|Gm&Q|umL$RAV)SJM@nX#n1Tc-Q8K2|nZPil%%KDcQY-~xOh)XE zd+%oNOWNH`NX8^U#uPw+fd1e2opbK;?tRtuXtLe&pI;efRkhx!yPkccXQM|@4I&X; zNolhKuPv5y5m@^Wmlx~d>lxy_PPQD;iGw9W_xSu>oH(XM`t#`GjP@DOc}P$l$7(w( z7)*r3vmrLXJYe@QHuM#v6(2r*NlOT6@xb6Gdrw3cn6sGwnyB2w6A`8Q5HkQ4Opm&= zw0(9T9R0!B{)!7daPRjlOM|>Kw}SodSHtKg&SuuDc7k=N#ZUh29k=D&!M;Acf4T|A zje|hS#@&@Ygzug0E}JPO_<0`!)b~&?3R~w#hZGE?A7wG$4RIaCsa^pz4XWlc@KVLY zfguCv&eEnu8w?3Mfa6}RihSaR?Aj+9g!?|;>>9}N?O}KC$G3+BFgZ?!+~tkM!xKAZ_~_Y7>_p$O+Rh56NF=5ky6cK{Nd}tmODtV%$i(&^Wbq6Ev{+ilSxghG zm>&$rC86>Q*@tj|L8Om?BwX4)#TH?=j@FzOLbB-6lG>~toUAkyb~As52Er1-Ce?LADkVoF5Q721;EnJ`w*0}?Dde#J4dMB_g^t+#Krt? zZ_}Rr0}OEkYgLWo{1$#3A@{~H@1o6RG{(m7)&9xWG8j2na(wza`*`bdlB*xr$-QLB z?%t1YmlTe4vmJQAnWJ`(o^ib6ZQK8xR6=WKXL37i>&9Kgo@i&M-Cdb4uYsQ%o*S#Y zINn@YUb_dj`;6$t6Bt^eunBIBIk|X3@5iM?mk?UW1~?_r{9s*!K=}ZopIC;*Fy+$E zgJZmSa{qLDWqExc+RO7FN6Ak+E2IXl0Er1dh(EHEbO{->96A~4i{>pdDs|z2y)9d(#IfxOVT#)z&3#`dJ25n6r#h!S<^y$zN`zgwY8OQP#6jI z-bqMmO^PAYk|_tZ$XPRdp4`*2=~j*|9-SXyTcLH)fq7>MI@!bXV>tX}TfO;_87(^y z5O>cYoQZN{b;{*Zs9%Wr#3u^w*$^|<+%b7yL1?y4E_h(K?=J72jj#f2m{(0gC@RcQ zcW>WXLOm;elD;mB@PPW({CuAH_RzM?uf`B3_|>pn`PG==*6eTKx$*Nw6GP3=4y!Y6 z@oU6$#bsGpqIG%>C(hS*VS_TpmWdBLjjr9GjRv)-Dt_Kd_^$eEHe0G6;|74 z&v02FwzXn-iRYBN7Xh&iM0fI2c_nO&c2-oj8CM33O`M^eqyk@iBDqtkHmai zej)vJoW<@i?gZ{=T73xFB#PfHcT1Q-3lRiSY>|W>YB!(%bw~>X3i7UP@BuCp!#O@f z%f9;682(BhT6)xeg&26|zmgi-r{}{xLmdp~A{AXa@#4zC*@KJId&`dKqY&8R6VNW0 zlVQEPI9^{5a%y5e)qrKPo!I|M_l-5%yIIfa6b5obae#2RxB`A~F`D)h)zQvihPnqc zFi47j3Lo!~mS+7N;^EQJ5ft*IpC29_9S(QOBj|vdbHvHGcI9|(@$GACYf#8jeEa&^ z+WPCmb22pv2@1f?eDfJ=u*d}(Nk=f$b{wB6sY4YHsV}A zRxG{`LF{NFeGE)0r#L!%oe+nn0MaZogDvlz-M=_HSTWD~IK=Ix&C~P46%uY3;=r%`{2}H?qzsM?rC};GoVtg*YYz)&47~}Qz zm!QE=o*~CWc@8^FVjci=JSUoBT4c4*3RnCWy5y%bD`-@+JO?;)+KSgnJ=_p?TcHUr zUzj1TaqO7>u`Q05|LNNcZ1o1g`UJ&mrcJ|aONQvwgC9}o+3(T9*xwGGXB(k?8amZ0 zA6oG+_XDvSj~hIXI5ItJ(#Gx?Fw4Vb_!r8~u)_n#7HPhn0RbX$O0f<*FX7y&Ub4@d z;2zZZ#vj_0Nnd(s8msUYL1{oejx}fxv|R#gyDqsPBpXM-@AK2$m8Fg2GfbMFNU|9I zS(`A87i@2X=$JzgO8o{jZA5YCdkbWEPSJ|-aC6J;u&YC~3_JVz0ltG1>ig^PpT|uk z&YkZqLqfhw6qIM9e<73XBQIy)#uaza-UH928wjl>ms0YF0WA5$3pLE~+|X3Cgi`pf z%xd&8wA`&TD_mMwPUwp5dJa77V}-(t8{%Ybhuh(qOz=&Fb=Vo?FNl9;`hSvjFrKF8 zAS?dGietyzR|G_d2WxTl^gbX)3=9s^;<@58%YO!Lvf77MJ~)Qw5l80F{*AUc3zrd6 zBi%u^FfjRt=Z8AsSrGIlobN9$pI#UZhp`)43><{C=*xZ&ik{q|BW?z)KF%D5j0fis zBw*4YpWZRup(in=_^ag|0Np=3-dtMQJ-x6`tx*DFWUMXX;efs4@o=_+m6i45rp95eP`RUAxHM&T!Msgy8 zwo{*Qb(|KEA7C8>hj%-qEWr_xqrKv97FY|kO}XKv9$`!O-4(VbpltW(;JK&dTG9a` zeM}DMTS{z<2G7myQ~o<}lhr=7^1(4Yk2tdQENM^A%$NOKG?=F-yo5m@@g$f*=kc(SvD@0!U6WN$!1F*OAf!34E-b^$@`E|z)$7340k_QI^^ z7ejA&;ctOiN`bm;6+|DVu%~!xrLim|GID) zrPcvt8gz;qxp4Ydpi^&UYy$wp;$v z@f=|#$X2KI{NVil=>|gx8SSPFse$#}E%fjZFwz_6%y6HjJs) zuPr_qo25gE0MGL%`O`omtv&AfF@3_?Tm3vV;qqC9%RHcw8!GGiHdQ_zDWoSJ=xhjx{b&~i zPEn{NjO+`3JIAuISy{WgINhQ3dg`TzOfjVA>xARB7x|Yi5HaODYSo`jqFTaKuE*v!SKfv<=*2<_4-El@7 zYdNcz7zLK#Z-M8u0RUqMh7Vm6;<p5-aJInBJ^V5lENVS$YkHwM8eTPKh z1c{LH$|1(5P8Rh+vi}^!41q{^D%ssPi@2n$5C+yxw72stoFA3gS7G z00t*NNB2695dNA}DzTiURYSopiQ^R{ADln()mRf;uI5OCcv+?QZVB{U+V((*(Fyt(5C^kSf42F&niUy3vMR6;$?bjJ z!0H;fY)@;%u8ZwU(&~x%0|g-h&mgWoeymD;wAD*m7>SetEiu85@mh-Php2dlJH=aw znp`bq(DDmcGB*ixO9uD$!YAA~pp4gf&BF68VQBH(^eB^9p;bflq2Ud#P86n9_Uzr2 z&7A{OIXphtqF3wlzg`MKTmygHO156EJgvneC(Oi|H4fXI_&3MHEv+AtJD;vD+Nbk= zs55`xE-xezxZD}7LtmWIg-Cnb@=324-~KA`aBnoe9dQ{hD(#;g?`%r{ki#{&7a_JW-o3engh^w#QJ-|3hB(fP5_T(MB?#lr zP;d@VL~&b@eSJKq(MPm5sp9~p*uJRn8n;iB2po8hSuofDu2K9vLw!cWSa7X0#0Kg# zgTk+^Kqq_x<^hjE?^300lSN99kQj*PU5ltao^WFqnqT)dLVdZiNsfwT%!A7~7G&8rWSVr-fkvCh! z!}yfQM=U{`mGS)aK9HNfI0VyQfGM~x)p$*6e$J|nW@lIZ_HLgBZ_4_SCW%kbw5|2XOa; zbkI3z!pEosSDTVT6`8MQg|L@%TZ}mfPGzK<{S`S@h{jY7ehQ0o|s+5 zRQ=J~QML7a74iMJi=a6E3F<&~MezGcZbu0c#naG&cyXFs?yZGB>*t8NVwL71zMb;R zkRrM#u1HSn0KD3N8Px0;GyHKM4e*HXeEiQL{u}Q##E~{Nge9&!N zmq)&ajS~Tn5R%+?fK@$vf-8cgxR$l0G3=UKbS>`KxcNLm_^gf?5b*dh9E1pb>7q%Z z?V*k%50uvSrCU-LV2CT6KH>_2wcz`Ba1GiALUEszdVIw^aIXS_VhL$8Vu}F_VPnW* zdCALHy6|RT=o%9J`B~m@N4`KMPfEWW!U0kUs9_W;e&Y;qPiRs@Y^#JcFGx#^!+?Fd>qsm-BmOI1EPjbX&c z#=srJt>=)PD#r;TW`#;vUW^7-)t(K(X}dewe?&P85I2hLw=B=CHN<6R^N>>b20{m+ zJ_F@P)yTkeCfGhc1KXDe0IZ$j-%!9PcTPmeynb47FPO-mpAp>_;cGyp(im_#MBrZ7 z6@^hBejG-3kM&h`nZ*)Dq0aD9%H?yK)a6xhB!t7Am#i8 z(^-zNXv=eJ4RI3m8D)o%Nwca^`2Yg{2;CbTb76s@rV*^DZwu|p+IlcjkJ?TF` z9<81t*9Q$ZE{6!*i=yThqxWG1LWc3xLiUg_`~akmmj!hg)yL*P-kl$!OtOh(tE(uE zx=Ar8_bB!GQROJHbTTIID%~<#z$&!XSv2PRxtET@%vm|A*E7UqYD@SHJNxYV?bGo* zWQI2x-yWh2%QP-6y9XU+)7?$W;9<@Eiq#f`LCT**7!5O{`ib#S8@drXcSH7?d8F+4zK12nJ8t_<>KHdtl*?{h~wL!+R z&r%{<(?IJ|h!XcWNTLjGBysz{V#S%>2$6{eLnvc=Y3T_NR+z0`c9`{|c-%;zSS#y{ zN|46VRSMGk1PoOV+p9ulA#$sZJYx<2@=3pJl;^QfYJ~vC7ofOCn?q-T01aBA4t?zVYjVK5!=eaLd6d!4|rqko^EJZ zJBBn(lbrCeJ;WA*RnP5(8yImZA&BbkI)8@H07IOL$VhBA9aJf6wIR-JeKZuWZZV_? z90!KQ8CV;5PJ5k<<`4!zLi!GX*e<>|%V}4f9|s*}8JFTp(PAGB#_npr_Fg{pMDw03eOqePCI+xIr;lQCBm#E0WeY)k*iyH-@*GX-Z$`mbbNe-w?TqN ziRWQw_lS7^+S61e^o0q1T%?R^VuTm;@C!&jKq0p_+(MnN=%P?314I;ZRPHQn7@baO z8peb;RqWFsF~(@ZL5va2mdxfMjY`7PP=Cy^(S%UxVDy#Agop&Yv85)Ssj@SwEg`X8 z>Vj8|Q_M$nyrZoT8>Ko)PC}4d`D6yxl9Eu%UV{TpA;0tT^Wg@}sOwBRS~Mn46AIx7gR4tw7aKkL)#n zYU10oU}Bs&wQ2x$Qj@p9iu7K{?Yd7aD(7;0sh<~g$RL>c!Z;Lq;ubygWzqUBp(8^b z#8b%a7T*q@;C+`~pMGxLYd^Y)%GbmZlIydS+oy_I1Ji^{WE5b^N4rOZLd0}7(3hIg zKCsn4K?&k9s~RMI7NVDEi%@}0IM!e%9P?NfTUIQG!eUQ8ES?@|Adzas%~c;RJ&g~; zP7)-EaT}Kq2+6Q;m{0%fPw1e+O3x@m{SZzqspytgHywiOX_g($T1MgqwFl19)gYG& z#~;(D#(G}%YUZQXddakufA6(vsN&o20z-kK;!=yWyW`dBQ-STpA5=kA_>F_l6|!WZQ9WZ>}jYcgnqR9p*S|lUSu9c2ap#`d8NNA3QjRhAq8sC zWA;-R6p?2k3U{)aA6|*SYGwRuIF^P_&O}-J6HITjbsm1sP?eB3#B)IG8i0Lufg}WwZSmo3E9| zn{wUyES5fKrPymJqlaC|xgljn>Q1ONVRWp1-(_m3ia11Mqrh{M?C$v5@sAqTvcDSn zIV(q!pR-dF`1$$yF=9@|&;Oh%2^$3b3k=^tq!X@4w!0r3z_`=DVH5G3IEV$43hGWG zWzb@UoDbHfaO^_JWKcFQdo=A?9%Rlja*G4QlxC=5IU!qx5jZ40uA$Z>oOl=Kv=DWj zGdUQ=ym#{BfIbtC;kV~&;J3yQDZtHRiXO1Ce8u(ClJS9*1hIgu%0M?Cb3HB|qE2<+ zV_8DdIc!(gwC174Ts`~7zYuFZsX;c06o{KDJx92Vxcs|s|9m=xEn=|jz`;vah-$QN zzr&8pR5rHtynZ>9S=8md^;-C?}G|#;hi0ncJa>Amj{Q32Y8E8 z)*iOyc+U7YTsUU37V&VX`tn-hWUv})Ywz$M}Nih4+*DJ0#AG)=b@wA`+=0ak+jSL1iFf_fugeBIyyD;xLr*)}mU zeUXqC;WGGZ4kVZk5fhJdH+#V>91IA(o904=BY&zM$Y1gU`BVO{^(VTbKF5`yo!zx< z)s-2KZ!fIp6bH$j8Avswo=nZpJ^fmi_SYBR?yC|#40Ey}I_u=tw><4YTwj=Ags(Fm zO)&VtLFOJKbj~Rd>2k3S)&SR;mB@NV!~7~+y)zUuyNF{6&b9s!yllFyFjIJxb* zSnGBr+32%F(dwNv!9nF#>9gHJQ=EqybMx>U{e!QY=S||rmtTz((`>XdU6|<*X#wT3 zyQYQo!aYkp9VMyB44h>RkYn@qBlw@!Y0?p^U8}O9*!bo=JQ(w zi|%;v0wVkDKn*O;qH)`4<+3Zup;&;pJ8`_uM7?R(;9F`X!K z5*pTT!y1LEt#Gv7=2uiVSmf8XRN<@2?KG^zMGH?m;$2l&260#y_=;f4*J6i@)tNaN zatfqOmt+%pj%WOR!lO0hbigSP`EuC;n5aO!9a%={#erCMbauSV-1~!*lLPDI+W4~) z)d|NwX@SLAv?&l;IqXX8^=A%6Q4Rqp%(5|X)_Zl0zIE0eAq-xq1gUI%#b19i9pV}- zx0s4qAJHU*J)IoCSMe1V7U6sC2`8YWaJD%`ch!6T7VrM&K|X{aV5vhj11ktb{Kj|Y zFtc{YYx1k5Rq;-m0W~DqT53%XnlEn7M++!?oG^w1PJl?4%b6z_r^n26D)8gyvlqvs z0d`l`_Gw=`SA$2W(B2F+Io_Q=hhtx^ZA;u>IAFb0eJdS`dK&)_U=DXt=hyyWewbw(@G#i%-g3SO8}46 z8yHf1#K}m0AM@P8);Yz0o|dUQX^m#Bgl#6z=^6hp;n5m&I^Yxtzm71SXaV4~h-)mk zOg$G-9XYQo5lc1BV1b0n5-Dzt8&>>TffzY_96nxf^O0acP9I~GAaDwQSOj$sCv`2q zH|q|EzW&39AOG1L{qa|Kc8^>-JTILqGio z?MM98Z;0*Gyb#xDxoIi|)_(Qbr=NaG!7uQf->HDr;k5#HZ`Gd1VtJ{beR5Ms9C@jq-Mqlkh z-`>i`I~59n)y{J2lJRaB4_P~S84W%o&O+lw6oE>)bH}?cmYaJ`}dAr--;B7s%-4+%qSGv-PVfMDvYp{S}TwVk5+I4LO%~d zpDK=@qNSfy%1%PjQo{XW}m zf8#~4l_$eT@PeyIPusVELO^k`bcTzB4R6e+R6IWTSkT&%1P`9l*9ni-;L`yoKopO@ z{Y%C*Ua}0cp(_>HeM7S1B^OaW_5b(n|I`j3+7Hef+Sz4TPhY+0!tYvHESbd_dfu4?k0@}YjRFVG*OQ)wvjU>qapE{@ix7dHo4kSLq*g20F?37vjhfFRs zHFL^q-vU5i%Z<4=Y7+0RqbV@PS`PgDY( zjoN{zWWe~Da*owcrUCh(_q0LQFnX^3Qw5x76~8!qI1L*Q^oFT^vs^*(dHBQi?-dWG zk5eJ4=YQUwQ2OEYVG@M&Mi$&TJwEWlU8twZ5)_wWQ#H=)^Ru}%05eXU5D_*h^(=f` zEn^=0@pQ6VG^2-?twOdE$+of)jV(4F z);r|lX%PA8kf00Ex+_+f5N_nEKsv^oYF1iI`e$@i)o;3aEN`a43)t>vo|TV3K4v+= zp%w0OJKPmO)JuPx+D)b(8SGzj52GN%#Xg?gV}C324Is3Ztxo)xd+2s#sMH|w$u zPH7Mf)<=Xha}A|v|DsKd8$V)9aP(qfnib%z2WOZo@iW!xlzL02jT_=m4mQzh!bJK@ zC}>@B=rRuxw|P25&aQOB9`j(EKbG$2_CMAjtzoU6RXDKhePmT~Y!@Txs0SXf zM_%jUZpC)>1%VzwK=8UYFRVSKHA3LPZcD zwv5=|>hkX(b^Hcj@0(lw5lHC4r9HfCEOVoI%*WVbt7%P#$R!GWfYNt|pI=Q!A}aMYtOt?BnQK*K2>jI)a!_ythF}?*qUOt?MbW zm3V8VdU(;oPDAgu^cIgC{} zA1NX&(XMLPo?@;g=&`RgRbL9LSVJQVH96EANxEVBLBXXyM7lxfx45C z5z(oEJ^YXF{-y@07NFly>5Uc+fb@GbAJ?F%u(er=M_*_P@ zch#8oz;E)cvOrvWCgrhoLgKFiLTH|XgE^*^wfsRuux_6*qLdlPoj`R>YW#@D zX+v36)@Ie-SN*vE(@*!YR3NObxMRrMP~yf0UYmQU8~Fp8gCUg;Av<-DefjhHjH*nm zVeKzQ<&SskHQ?zG`S+C=^U;5xXj(C7CtIe0_`N__*h8<@w_VRFp3}RIuw4}>t`fsN zWe1Obj>7${dz-cce*-YH%M`wp{{zSW=s#zSX%GB9;fE*I*u3mF>1ApW{VE_*|G~8M zFH)Xu|GrO$u-puG1Xw{?!{Mj#l=K96SI3k8X^UU}H|Djxw^=U~4)XSquHCD`}| z`}TS-hoyBSEG?-8_dOAfF(thczd$FuO%X~m}WYFj18WBiPfbGiK^%- zRxY<1yA85=AZnG)XhP=$sUE2Zf~Eckl{dbe5kF6dh(I%ho541Sqpp7vrpBdD%s{gwMw)wvv;$S^h@@l-`g*jLB=y%_I@i$brE(X8FD)z#3CM)Fs&|OA3 zs6FtW@PnsVRGGkUev99Pm#K&7R{@dY|DwSCt?wccSw%BiWp6r!@PpU#_ToDD&a+3T zp)}hRC*CYh`$e@|#Ssh;J*6RkZmkE>0oVq6QSwp*NcoHyfh7u7&d@^2UD4fIp$kz@ zCjEBtVT?AULaB4&l||OX52w2wRh!BSNy3Sjp2fyKVmF|}nN8^Y!soy_fWyZyt6Q&u zOoyn-t&#NDPk1ehUKxl6;*S799rOT6vF8bGt66a?@=KA1xr%OpsON$TxA~)scR+Et zsc9Je2h46`$;ZKN3GwxI?!p{yTp&dSDDV6naj+c?cGvEvt#( z+*3U$56i3rEElFjNZtjPVvlr~-P!0Kra0izC_`7#Y@>;{qRxqSEFHm+Fa{z3%hUWb zgxBn^%zjbMNR?DrukReiwvP_>wplmADp(Gb+$!ED4$$96nnJzxlPVyU566A|mu~EY z1=Gflr)M!)E53&=yXm#Owy||@hf)Hf=h>bUl2V%cuw8Flb-Y`mIxG9()u~2ZJnA2( zL!d9A{XQBMP)WP_fvR+@`ycC?sv4z*c)tYcKvc8xANDuXUr_z3KEfzqxV*WKf{w=r z=$pBC=X(^OSzKE84siSTHkQ3P6sx(VS#7zlDPt3ZL58pB*Hqxgs;WSubKMSpGxfA0 zhpM*tDj-sR-s;XFT6m-K@Y3Qk3fS`1O_*4i4nZ>%(}P(IpS_*Yn}T(BXZY5lqS&|J z;{;Z>_m0qB{N!k#+r|D|nJ}jPN{9d~_pW^>$45G}VuMR-Z7R!ohqe7t3-}>SgcqzC zYG(IV$<-0VT-SMx;1_%bzls77j#pOq8$V8;d(P⋙;Wok6^XhI1x>jMZwYBWADhX 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 diff --git a/base/usr/share/fonts/sdf_mono.sdf b/base/usr/share/fonts/sdf_mono.sdf index 3e896b769367e1c9cc6b692a71f45d301bac8f48..dc9c7aa48338cecc76e6568ada6e78d3ff03a31d 100644 GIT binary patch literal 96604 zcmYIvV|1O**Y+LTHkw9_(Xg>?vti>jwrw?N*x0shwXuC-oA3GkpAYYcv(7rR)|t8H zn!WdIO@xwyBnl!SA^-p=(o$k7004Ce0FaUJ-~k{ih-n@C1^Hc8QVjSAi<{^M|3Yw( z(slv>B&`2F5I{yIK6nt$Sz2BkZV#Fi6P@OkvCta;`~hh(VKw)a(@t%Zla`-M&k)1_ z=G@l4g2L3O*ZarC^7O;Oo_V#IE~YSK=COc(0c`|1UGw@;mUAb=s%&AOS_y_avR`iw zA|wXP#7pdE!}_s4=OD+HhNs0LMOb~IjQy9BGjsuw z!krS7;rZKc8@;4d{y{KoS)Fn>yY)-Z=ybj8J&pNo`Dba{n9=ESz9W{LmMuvY#j$w% z8jCoYp|zK8eX|`v|K^3`L@;ouU&YoyuS-=1arp4JGg8;M3Y~~VOyk^K(MA)^W@C^a z@}>T-`$z&#^@#t?%!mKBP*|S@!Sx+^kr%MClJhla-}joBye5zTR7ztuazAY!`otbkL)~oA?|usLgfy9zpjr+wR_t3g#-VkmQ$TFsn=5f z?OyTk5^B58F9sH4f-f$TswIH4{a51IFTG}K&P+J$~om!}ZTCmX78RkW3XgOW9EG)k9QE9>=Q#CE^pJ9X*{Z_=!(c)Vm(kQ#MV`5?q@&k;I~E|0k1>;S@`20i z9lOoVi$g0cxE?mV`v;NZ^Zt2zH><3B`fx0lQZE9ONW}N`~L_yrTehP9-frPz1KJImHe z(+dpvC{!=z%YKcx-pEO$kXcwE+p~rViuTKYa(wl20eQ@c4})G9aP-Ff^DIQ%b~;XQ zf{n2e(n+AhASg~Nq{d+8DJ?7GG=LSD^`eAI@RUY+}y%}f>RecBDnq_}hxZ*28 zkAa<;lhs=qKMj-q_HhK)j5dDozAWZ!Ov9zCXqvcl zgzd6CY|>8u#dm=%=FngFxH*P0K!1=f+U170Y{kILfDPgJ)l%CB$|hv%XQwyk>OVS3$vYmiBt#V6$_khhJZ z4ac=h23hL4gle7LtGaD;v~gcQ35PJ?AhTe|Yy1#*WxJnlqsCQEYB#AfB4-`KHwp7m zU*xC23b1074=(z8eSc5D$-SXXF|XY72a{P=Vk!0WdZq8|98~9I67p8_==|$yALko_ z#I$GCw-Tk%tILd1>x7z!Krc9X}kBR%G zsj~|KOn_dSa(1rcu2AX^*R+-!^Lg=Mm3ALL{V%bxpG}88Hp%(wzqX7_g@Oe@V}p^v zNRrl7eG-$BXr8cQAV{*4;Qh!uM$znKuU$1T=&0X@{$bD_73Viri>foB? z#%_XVFHR;YAU9{bs4c> z{a^qcMq$%VA7n}8rR^yEY2%jIepML}69YYlxUoAQBae=246KP>2#m?KRq(gJ+$91> zQ{LH&UQA?NwD-Z3SsZdO7E@o4w@$dR$7me~ zEoj9A$J6tb1l9C7P@zuE)Kg~XIT9zHpVD}|jqUgO%-XOR?Ky!0Tn&sNyQ2RI_8%&& zev5o#5>;M=#ufj83D;SH!^Ya|%{jQm1_PD1C5xX4m#5S&cg`+GW2H;`84Yn3Va|Db zjr5uhjWmgzci~*^Y5#1iMx9}OR8%p-Tu};biW?oQeoE7{0RvEIC#4J7BQ`0rkJP$76tFS9;|w|XK5sIQCS0BW zdPPJtri<9eAsduqH$JZZgsf+ke#tP8>}f1pb-6L1Jg${!wXuIghR{zNTgV$3&3;>s zSrRnC?L4xK9MkKf`88+zj))0u9d8l_irTwtS|qfTeb<`%jlIn481?x*{-~~*OD+90 zEvb>Mv8e-R1`F93<(|M<9v+tk-y|C8Gb%kq_=vMtt0n?)9G$&>v);uuQy(OI&DM zcS%>6Nsc~+kIK{b>vI;2?#*|cXB*zb(C{$*(a#AN+|e6z!5Hp7Onju6Bo%^)_i95SO6>mLHO7yh4%|t>~2Mtws?A+yoq~lUmlkx zAl}tek*}dZT!(<-9Qqaqs_;O}h^*rzV8&xD{z zEWQW!SBHt@*ueQC{h9kEcy3I<6ZiNgPNKTdUf46N|;$Hhm?=V?T8c z)M~ub_#F*BveGt2QpMXPhPehv4O+_hU!cu!gH2%o6#k^3j!BlF+x)&<|5W@rH zMhws=ey|5*TBw0Hxop{I`vwpV)(E~H?VF`@9{k~Bxj +8kUl>Wmb6RhBJ@!#j7< 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 z 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%0D;EXJM`IphU<)jKi=E!mFgI5vGYTzkgw+S_B+MPL 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 L`swU_cmw|j2Zfq) diff --git a/base/usr/share/fonts/sdf_mono_bold.sdf b/base/usr/share/fonts/sdf_mono_bold.sdf index 651c043ce069996e236dfe107d77135eee89a9a4..cd2957af9334c7b7ced119a2a43b33749ec5fd64 100644 GIT binary patch literal 99735 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 literal 651146 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�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 diff --git a/base/usr/share/fonts/sdf_mono_bold_oblique.sdf b/base/usr/share/fonts/sdf_mono_bold_oblique.sdf index 695138289c89c4ea4f247a858df4585380fe5553..bf5c9355d569f2ddcf380d89fe65e9a0cf0a3971 100644 GIT binary patch literal 110906 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

H>IOrwDZ^%) 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 literal 651146 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

j6(4rtP>!5MXx6-HlmUQ^ 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 ASpWb4 diff --git a/base/usr/share/fonts/sdf_oblique.sdf b/base/usr/share/fonts/sdf_oblique.sdf index e5eed8bc1283db6041120c660c346b83f105737c..3e7cc98cd9047d8eeb67eecaca8116278d3d770e 100644 GIT binary patch literal 116045 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 z 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�R(w0>(56X}78(a#SVvf^x9QD_OKJ^VE3dg= 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

bH1$`$2GtRv*Wh z$`IwB%;Z`Qqf3tY@s+;$<(w|2WvpI>8Zrkih}<2V$d6*`I7?aWYt6dTgT0;I{lmxC zxY^OoT?#`;)d;)bJZmgv4M>WWr{(l=G^(QKmfa<}JA0)vw&^r{*Mh?Rplbsq13;Oi46ujgD&k-4B?VJOQ$OTIbfKt7%eHK>Jr! zd)(w;a*eBBIhmk%Pw|W2lv?r%2Z!D2ueDOB!F5vyx&?#{peQyCzGe+t7NLbP?%)#D zBU2I6l$7j==P3)YNQ>;HM511%19>7Yerl$yRq`sPjbC&-#0e0yYpsh^C%u1&LpHqU z8|*`1V4OntcnlETT>g3z%jeN%5H>hMmVR3CRDqTl8;E|v=rA}m_C=jtcC0~zj9#OY z@T`7qaD-9mf)%B7%Ta|rx7Dp579UR&P`Jhgz9>4{Nu;;qEW!+sz z5+H1K-+XhjOi{$45F(grd8htbF{d#(m-InfSS7`&tX!AZX=>q34kni>DZQJ`t!kyK z!GEhQcj0mdQDjy}+UrPuZ&Uk61%z#RrA!-30bI*R<$cIk0?cEESW&dKnHDz?G z8=z&|DD_E6GcQ}ztBDi}vANR@Khez9s_3+?9d!aoJxlb!4nXYktmXGAYVPB($2ops zbf+o)>_Y$-9ZoGf6%bN1Vadu8$8a8)JSedv735JF4())^FT6(-VIHfF>LIs~J%Lhb z&}9mGGb%0CJ1V_bj4JFNzxD`ZFb^2&r^*htGyj8hK@o&m-ISNxKe`|4TncoRNpZyJ z&g8txGn32RW`~lOJOid|RV!T${#$Li3zsv9BC~pu-&+HGD%GR4RZ)wT_4+5aQBF+h zU3Pybu9g%k^X1>H|GR|Cvs##uNoF1TqgjWH}^%=Q|6^=WgxHvsT19%36h;OhK8!8AZ(uj#QZE=i9 z0*+M~q?pGZ%6{HpVAmIqkJy=BY68{=N*aPy&|?5!e%aR9qlf}vcK)@Yl!zAXy;)fYMcQ`QjAHsyUXloDLt2pQx0psl|H6@T_PLE(i_0^h-xW_^r0wh09sbe`ECz-XE&! ziO*9%#HogQmk5t;uy9gqmtDnS@&FK3WAkMldPvW)ZN4Ba32TS}~TkaCmk|;0`(@tSqMERMdsuwOSfGE>pwpO^l*EEWA)(<-m z$XzVW5>O3#Q@c)HB4X+kcj5`ox)37?Zxc@iZ>}Jk>~DYjo={Hi)mgP9Nh5mdeIsz- zqD#dcTHf|+{U#^C_F?E!O}FoSu!DUZc>G$nup>5fA$S!?-$s&1QRp7al^|AHS*~xM z2fAi(@b+2U&v9gFE&KAcXmLR4%-y$fh}QP;7NSyVbfd$+(raR$O=5?lOL&@JYaF~0 zt)~?m|8}~iCy2P`n0;5^6Kn~>R@aLGa`qHHwA)RbeGTz@KNJ4Zdzwh{exM-|VhHqu z)<|?LX>so+Kv1OcLMcaIQepDl1jy6)t0-&=Q#f_k3|OM-CC&X zRmFnD=czkq*-S-NH2#y01)Q{ya3PDKvlnkeFvt-uAar6lM#D!aA$p_#_%-SHihfoA zkU$HbRC16OSB}q`xO6{sL?SA{Z+CJvTinl-NNU-2W5bKPZy%yp;>h$NAA7 z`fTkV(P#N|(LF6%9D0bxCe$S#w-BM^d>TpoVzMw~vc7a1pVjX*4zT&x*c&vvW8WHd zM`+p>M~JkrQ;SPv%!gyJ-D-HDk-w{S(|hwvs(X0X6m_d&DHV=wmDD6OkJtI-q|Ug;P5 z85_mZZ6_^Vy9WcT1}cN0W%2xShb97ia6oKr?_KqGu*3oNiCz=z2u~Bd!eq-xj3q=m zZ1JT&Z=Fjj2sLp|raQUygS{HlJUDr_XzQ+4i$kfoY=jyV`i&N18QZERKv}r$ZR>L_ ze^xkfOl+d}!n1ockk*cD^(9!3DlhM7acc;7>)?g~xfN|-efHI;K9(Ekay~omKFt|9 zU7@)qi9+a#y8$5XHTBZ z_P2MiY!VDDa?mf{fZ&7vm*}L!K#SZc9Vf)|UfV_Bkbt|~UKK0$>1Pxjz{N&swK8l% z$sSJ{M&$kVQ+xmeC)>_r^yz9_LRUD50?*?#VOwv=`dr&`2P=rAJ@w)3$D7DR6 zrRA-a(}b*=2WXMa^FU&M8_m9g_*hz8-re7!|En9~sK3IoTO{6 zm>R-$kfiWzc|*HOGWj))X5hrm?W_hu)Bf8ZwWOaV0NU^OP9p-f$~A|h7Ooc+M3teA zl9E=IUyRSu{|a{=*7jyWaU8d&&K=VH<~AfW{1goc>&Dwa>0*xboDWNbIG{{TH|#9srBuoq07Z7{kcGS+q);Qyiu~g zIYT<9Ubi(5W^Ma<|1;L;sTGjb56&ns&?QBIK~(iBZc&?=x*IWzxJ`bS?`62ph0l4h zZ+`jtrx32$VVJg}N81N?YK@oh5ov6O_&KU)#aZ>_`M}?VQ}kmTAqQApC9DSzKGgQY z&!IN!aEH;V&kwp)(bQ>ycqK9SaKHniW?=|vx`Xj}ZysR-g5qlvX5p)q6nSTO~Ai_l)u%B%)x$utv7e??jci= zun;oHKkUqKUe}WraWRDu>ntK2aWZv zf$$rrpMXUwspnx3Z6=jWBGXlvhc=JGLJw%Mi-U*a(EQOrFfuB-JA5$dr|Gpy}>{uB~l-!Jx0l zitke1R$?g>I*K}-=x$$L<0x1!XnXw%JVDL^5Ug!jFR>NL^4+<`%o~^EwtxQ3lYC4) z`Fq!}1VnEAxQ0G17G7%Te}zZ@KA*hLZ^7q&DuX{{8^3)&KB6??@RK&R((T6TwPWz^1d*Ximlrr4T*%9xOff-|2# z$E9@G3s?I^8N-q+cY&bFueC;R5%G-0X#(yJZx)E|Ynen1aZrc1_Tjm?!E8du<&NlX zmI*lrAN`F=w3r>gfQGJoPCZ7>N%*ZLq*Y^zXo`ckh)K+HQf((ITT3-K8AK)JBX|ow z;z5UJMsg!naLghJc0TM!;?Eyy)bP9gk|Y%lH9z`+kAb#PZWTm0Z_R|-T<9YR_&)lH zFU35zcwYVCBlj1H|GEvm8{zPCyNw;FAVxz;{N$SOR<@TcHN=%TQn)J>+$MfZ5k&|X zUso7a1wnZOw+N!Pu6H*3v#%i3|Hg~S?zncXdUW-c2&j-=p;sJXgK8H@PPTNNyB*vk5boU?=$8{X&HN3eAg`0g-EbgQP3EC0~{@VE5V}$WX zM!GP}of6Z86v)^eo;-LR%sBEv7}6COB{A6`+<)G zhT@7GQ|Uf0AzUnxpJH`wZ^aRWxLv!vQqBV+x14vH(KClM)C_7P;|6)`tNMA0ni1M9%`WZ;09)NI=;74pbjvrZ zH!$hW@SD?v1u*~%`xwzUo15D^mx#loEDi-7nz}KH6#4j2B%M@7Cy>ggy{z1bgP{O&cyI^R(%(@KB19M!3=ZP_YsC_w z-OfA`x^#r3sf2lG=$Y_2Byjyux+xEzAr1^{U;v5pm>5bLQ?Qp<;L@_3M&;Txb7&zc z+!buzDb)j9<*2%cc^DDDRuEJgaSGvTrp(xlD=Hzjz7(+?M<*>m9kU&9H2cBB+=AYd z6j1C)u&TXO_Vx|!dN1N3V!@uw&Jj)qxpH*!%9RJf948?yo8mHAAf_F)qYjb7cDLY( zPt*AQozWzVc1eT+{_0`w6!CGlCmFjC!Z*}3sAoZNDbA5%g0YEDw33l+Kg{0*}JNR^tFiGz`4tm1~q3?v#%h&B0X}2KxrO(Ssh_UR~8CrbVUJG_JvYFZ7=d`Q`6M zc{fHuO^%$NVPWnrlb3Rp(~8FELAJ;GhV-Sy{Pr{@ti4?nw@OxnXJ*@b07^uz-1oec zZ{wYbI4sBxASy_RVc*4(bm>NjFe=QuQPON8BZzTMb(qJc93Bs{ex5XhqF%)a2loR3 z3fZKUirqwrJo92XeIx9r)AcyAsRG!DIObOjJaReFOZC*1%p$~UqpBe2)P-R6HB9IX z-VoDTHTw!eE-SG}sUfa?Hk+B1Mu8OnpcQ z92slZGx#YW0(5GWxdus!Qa9fRzlI+8?{150BU36IX83W1VfH+UBZ?#0n-a&~>`Mpq3%Ur)ymB zN#JLRgE^fpC%QAIuBTf6b+D+mdch4T3Y+{2xxIh{;b;((E* zeCI8f|LNzguY)>Llib}1hk_Vs*mvroN? zk-YNRlr~I{#Il}LKa{;prZ}DspcRN!Q(2CjM>51o+?@(Ru=7318fR2)U4w*+UVVdf zP@`}SV`ZeSbRBG1!~v$fY6d&Od?W%{qo22TU zwy2zXB10T8o-p`*$_U6b^U0L8q}MW&xED@R@E?DvM};GLF^4zVojI+NUPG8yWx{Mw zL6B)_6UVi4&fKaTO_^q2LEusnVv)GG6nmMT<~(da@MPK#p{slyv=)<>GXFe@8K`vr zCkE(00;3PzSC~2P=J&;|z$mB1jnr~tPA5Mo5yyXJrAek@#3qoK;vj;8_-Kkd-$s;e zps~oZc)W?x`wRhb3^ktn(pNxD zxX{LH#r+Tq34P8?%`&>eb)e>22uu~3XjR9Tt)5IW8%TL{CU|M7?lvI9b}%d3QaNC8 zcZz~)6kK_^eadteNnCq^>)b>F0tQnY!rXBwkINwN>0~fTiA1Q0i#QxAMD4-?!mS24 z30xY%jc&OttW?<;AiFpuFAfaC1X#7oMER;76(})(8pWVDj{wno-mT7v9pr`13|pzR zCliq*n>3OC^kzw&c`%V~B2cvlF9sV(!4Fky{FrL>X>h=Z(^1lcJkvldMN&a9 z>Xm9enf5U+>NY^5f}q14bgp@8?bDo6rYpq6z+DHDR=TqI=>E0yzgZtHmvT?49Ve2N z0|aRyconx9gcJ!wYi~^gWMx}BvfR(EG`LSnJ4hWYCgDrUo^BO^{B&Rl5*+8KOaUCS zEgiSBxcaK3D@M2jwqy9<>o>C10I^q6CITn#$DW&t0+o$YFL8ikT}lZeKq1M+G$Kek zgocK@uu(&Rru;s~&sv`5sHPx#&u_S$S`S;smhcAQJdm5pq}g^NH4ZsktpJ~e99FSq zU5Lq)HR`qHQY|yYH8?;ldnm$ED(O-FX&?rABiB_w6$GPRdAFL-I6G};UqS3c0uZ5- zArtM>#G=BhTB9`92L~_rLo!(yHrc4#1bg}Fy;79X*h(oI3`$pSYSj*opC47WwSXu0 zj%IcgNtLcFEOE4RbdCM=@F$2~0;Q%ntvJE(C}w17a92k-vt(IOlr?!nBis?1+p&-F z{n={33P0Fz2Kzv~kXjRuwvROEBwWszh8Y1;f(S$rty{ATiH`yu3{=sDRYBnYlYWjb zjbb26Rp2Nfde5t!noEnw4VecSUFN}wu%u2SXH}yzWhurJ)+Vh!#8k?f>$PdAIuVJo z%jusM2W-5mq@$)76NNQCBj+5n5X+F15H}L_3O<*BtYfh7kwjC**_RNvr!xyr&#{;B zX-+2772NWS<@EhPq}P^IHA!J|ejVr&|1; zC1ruClY?BcZ~-R@7DS3T|Kbe+^$VS0?vRREdM`(iH^vrIq#%K*1x^YOK&#?w2#NHNd5$V%4p-(_`pC?`Y zN?RIebmBRcA}fLg8|U$zJ28@Z*Nquzt;8szcA`NnQa!4rCa(cNN!fuy@U;Zd5XjB# z6V_!(p7gR;RSA*Ur=g9Er+`>MCl^};6DKJ&&d=LOtP%o-I}zLe=#hJE+*Y6~#C<+N z;HT3S0&=LcGbVK4W^`6BRCQD>>Yec4c|R5$)tX{^dHYz(4&p`zHx1H1b&XRm8mZQ@ zkGj_Mo%;tRa&C`!?upb6C$<75-g7%wuju1E0*ujT9Eq}JhvO54vwAOy~9&x0mfbQ*rP2Be|_kRqN&xwbM)cc|l!Vs5J*5?rT+18~a(WPTV7@gIbFHfup z?;ZD}(4wy!)IUM_y?^}4xuIA+g%KF<^6$=_fg#W0CFs(z5{sygXBi>gi%#z zzWA^xNm#t4Uvp=N&_off)yDl&sd@=RoruGoB#WLIBDQw8$p(-aom~qh;^*Z2>gM+D z=KAs!9(yV=+PWyPNepv`b`D#d8|2G|NW>wElv{o*mi!so7NBIb*4S*~v3QJ_GJ%#X zQec~N!H4DbZyL3>hXWX-Da-YV6`+^vJew_hqq4#E1ct#p1Y+>KULZaX1}#x3vJVe0 zT<`T|T8s+!y?Qy6EiLGnUy+_!el=}Bkd?<(4<2hnVE zz|ia<*OW4(+Be`^!%A1{T;O;vMl?bQrH$5#nv_|ib|D$2{XpvsnMQLR6l26MF276H z)OX+g?XVD54LI?;cWPR>|GAr3Hg`~$*)QcGH#uf!bQEACr?Vb%{vbycccHZ+3@M0u zRmp{ZMAC)Gpa%J@0sH$?oCRzJ>4VNz=SM2?b&T|K#CcTT_EDG&O5Q@isL3kFa%3EA zvIawgHLeq+!Jagg_J(80*#wN@_I_20@_C_P$N#>I}{RfhxtsU@EF`NWJ^k zAdHC&M}>j4{KuJ(A^Oh)q?*UxF(oByB$+1?&c+glb&ZrRczXP{n7R-X_qj|X_ZDqm z$f;JJ4i4OkqNJzIkKT-Wt@_bSn_(T{6xf%{Q93FMAA@)yXV!q57Qx{@r zNwR5>dqywhu&YlG2g`C=7qrg&dl0SI7SWUtPEfGZWE!jRR1mgU(^DJmhXj`Oi&V!! zz8v4p435IdVD&`r6Wo-CEzx~+4k8N%X2kTN2~aNcI`z&+n;t7K9 zS}K(VL-RoVn{LQ^9{_<-q)rI4v24iVa2Vo{{<6K2w?l|QJX|uXwe#r4&)GzZdE`yu z8RyfF6Ddb!q4qRNdIQnA2akA*@c%X{gFsmhU&!WXiDF{kGGqy&IH2fFY<>@7;-Uen z62fB=#lDfQo^r4igf8dgS^>>qKQdW$%39`ycuBs|&Vcp*z3;m4mCnDvp3Gf%}H`3CL=$?`s$5Wvn;;ru&bCmia(gDIRR=c&ovfPlQOymQCv!Q@d9}WW? z4=^sXi59mx1~!1;zy^~ULJXdl*-y+vOV^gCT!F(D2*mEkZwFHkB3MlG7W+2=n0TQ- z7k+kd$lh31&WjjTy&w9{pXl7VDfm=)ictwQfi5Q33RCLuMP<2+(_B zc+|f}5FM55jc$Hh_@hG7eZXIxenuRruCLDB?wxwDJqTV7I;{F>LzMR;&=t3%HA1DK zy=-4Z(RSaSF3u8eiZjS&L}?Hx|41#i_A)0}_6IC;Fv!yW{GH+e;V(QydK_qjqKNUf zY+E`ZvVc(^4g(zKs^}k7I7m998hc9yIF@-=M)T-SzrdkS@W8Wi_WU>*ers`XZ+!7y$f$&#d{}7@yjGadPK~D+l~B`@%9RP7N1jbz!06(bbX9aA zFuw6*`ViyibwZY=QD$`k3Nf}BUy1& z5l7mCfF}Jd4=>;_B>6Ansde^)Ow!$rjO*q4)?UiXxapr5e?Ar_&jVn{Px=XhpUZ#% zmbcB$2boP@!06$aM$vs)Dz~M+D-u$-=m~r_3roT*0t=W$WvdYL_vTtdoD_qGh+0fhJRFm=D zY#)5d|MGv!JYMo;UU_)ceoP$-E5GyAgRfTL)e8LoaRoF|)*OhXTdzBv_++ocWEbc= z|D)AUb(chR>PJ4&~6u%}!R9KcF zD;`!2XA-FU{3MhJdbbl%?AQIcHh8Uy;Q@W zL`dp|#8yw|Un|?n5@dN)!2!^*==%Hn&rccW0U;gXiuX?@7CSEd48W5U3C}s6l}t(% z+$0ViPBN~qw27_dae7$Qc#Ky1_EuXafY_Lpja~uPr*>ZFAzN#OoF8k5E2(dYX>#unr>M#Fs9pKWuS)-;YB-K&u&7<)T*!Jwv zg%57hoft<|dhN=7))|2>XM9?|57#$)y)(>;?i-7PP&mSjRxP-T6Ot8hl#XXW>SB%9 zs#vY5;pFAwZe(XT$2K{v)DE|v#b`)H^u}sKTA$iAf?l$(PiC`Ka`jP!@|;=Pn&Y|_ z{pPh>=bMEJWkt6K>7d-oK^9x{xXjB(#Wh7;)BOM9AhFjNaq*>y~YUetcA)2B#vWr zG7v!uWi&Wnte!WY&&So891b7mr{0aFQ}=oJM0^%wmv$J_N<-S%aB7zX)|IH;GU8aH z4)y2SvLHIy_%AB2?xOc2I+6?hii{lp|3!cI80I!8IAW688y7Q{Zz5L>y4FXC^}n;! zfz=JO$z+%y8APxD66dJsJv5T&xm~IDR!~a%`CZp2?t(c2W$(6!LE5NZ;wH zTV6(Z96NzP)N#CI*ufR)N~rxD)Xp++D^dFowRsIn@S{T0b(Q`e=9|Bw;5?g)-?3St zq{)7_lDnqzsF7{L8^HeHsPK-0Jn8tEuBDMDwDLEWfHH5x$C7Eblygxql0p)-AzbKh zuQVc3Zp@&H$#6ZBeH>LzlJP95oZ+FxPz2_8<2Ug#TA%v?eU;{ zU1|rcqRdpW6TTiN;>8?A5P6|?Z1m&jEBUY_t-Ew zq_e&#(^{0sz_TdDLYf?n$~}WdUtdUl4KtGVS550Gg*qI-;gvWBQiEK!TC^^~u@(t0 z#qK>FiAi418aI;{y0Ce%8^zQ+aT;RP*7@r4O5q0?(!e?#cW^bjTA$ie&&hLi83jFR zuaAk`{tYxM{6ZvmlaZILRF9h1_!~=Sx!GaD8}PpM`CCYLBhe@N?tVpyz`)h!dYvB7y@zG*=0GvalI`veena7DUW zpW3Yh&*tv!f-OIni|rdM!7V-Ev{R#X4QQpqh9JM)A5aQYJ2s&1Wm6JG zw_X%e#}z=G6qC31KgTvvVzPmtD!fWQY*jmr;*;V+@82ogDwpOe-oJIBN6g#!SX;#}}-UeT!;?rw3NWQkk$7k&`bpwUP!h z?`G0<_(`vpt-XZg@-Zr9rjmv|BalaUv8ep+=_SfivhptaCuuFZ4oD)V3yel>wz#JH z+^16)DV&9$xAz|t!%Z&WsbxPK!nd9?2d6B|i0Y-M`?wYCVCV`N--52zr*^NCj)v-1 z)PI@QNnK4F30oJS)lJDpHEaDyTZ5jM6MQbx51Oa@cl^F98e4*_=YeyR`k_QcV?k4>)8< zY;O;8l_7QbG(3*4rq7B6W8H52_pRIs|t+Lds(+@we zwE~-;p~aR?0zc72PrOaMuqvud^^;LX9bG@zUv0_pYud#A&HU-TVqk-fOSB@^{#UJ0 zSRu9{AKS8G{~l|H*@5h^K3%O(?aoEKq%iHWOm?p4Xc)eZDcNl^%k*GH zm85E0hH#&ELNqm~Py5KC&4vl?Q`&RzTGF?R&)DOvBQlOUMAyWLrY&iq@CD{8z0i-O zAIS*57FCicW3|c?c&~|6}lHl(C(l&-=KLHdTrq&l-TVY^57v`8-Q}ruMXWG z@@J@@3!kIIz}4xYw52>@XPLziITTRfR-3|DWlynZqSKXk&BYih~yYf?D6k}mGf*f9$& zD$wZeN^H<9y&o#p>&}xs*nw|$#ZE{%jTu`>L&)fx2iK>o^{L(YobB3NeacNQBhC7E zI^v`!94~Y=CHMLh_~Y@XvF=2edU`ra)ux}P`&>g0OC^t^LVrnVNwQMY4D^bx{m4W2 zv5iVq%{5TaW(iXUFLc~7ODIZ_1bfN--2u#9TiXXWXuybrLNAc!j*8Y=ZSaV0PBe&* zSP;=vw5p+{*i-Q85j&sS2O=^_H*)nr-UC=LW8drBE0VJj--#^_C6QuG%r>OLO0+0 zNgRC&3077Wa`MO&=iR^LRAZ;Y?d?OfhK4O`bSPTOw^KB<)aQ2}&+cPG?#3{>K3%O( z?at@C2l}l56YJR*i-(6~$=1uFdE)47&$SvZhw(1cg9%wk)k0?JJ{L*5j_UNYUCf;0 zt1JvEdM(8*nmo=WZDbHJ9h=>GmA)Jsv{~XpM^7#CDbMqz8oKLI$20aie}opwkJu5@ zOd-8HD$YaO?y+@i@D4ZA5ii--TQC4TdA5K~faUtDtbn`R8wj(|!*ZOOA+s;19AEu@ zcfkcIhsfp*HR9b({6dAhb2GSCB_W|Dk~4?5w{ITKYbAWgcGKvHcoP<@rb>D(T^zld zKU-Xjh>ukrn&MoWcn)p;5hsss?*}}7q}eeov2|D7BwxwnU!rsN_7O}p03RK^>(kZx z)b4!FX06tYz8!idb$l~Rkwnl@^l=$^N~u>>+ZAHv(N@O}XhN_nC29(O&gcBSm9bS< zGbiu(Dhnuzdr)X`c%2y(Ad(;1Y`Qfeh4=HT-5qBLHC*vR_x(7Be1&`Yujo_3s3a1y zUp>`*5ag0VJeI()u7Ot@gP>FPIs7=Mgna3TT;LkqA=QA3hA^AS#5Mht( zP`h(&Rtnfkn%$H|sqfqjelj=`>4lVK#^0{b3Q06gr?gwoR!_K{lu5__v8mDN7jF#3o={csFQ`V=e^{L(0ihRD> zeV&fQEf}}&?^ZExLtbZEquXXw51z{HEaMYZ!81O$@WWch7Jxe`4 zGNu9F=;rn@F4-qgHsQ9F7L%i(eUG5~iNR3T7ck3<}uG;T|*Z0C4(=D^RC zacBy$@TjHt^>dNR_(aN-exHkciGOMl6Q@s(j~-uTVN_<`yG^9nc9{-O^Xu9uHe4CR z#kt~z9`{4eUD5DWitkHKrs2H%TZt6f?Kj%M!i70yBr())Uw;m;J$#Qss6?$)QP^{L(0 zif3X{IcmY8pm#qKCCv00Ezir0+m@;K+js3+5FUMZDz~$YPZXhA<#zeXe`*=q1byuv zU{_fiy%8s3e2$A#KVwPEp?Gt8O4UjzHbfZ&OMs+cPg>M@AYt&PfdmG=X zTP)3=!;N$Y=^)uV$8tiQg*{DdOpheIZ4k$5PBLUuv6mIHG?r4k@&}y;=^S;J-$2%P zX^$ye@4ox)d(e?Sr(KoKjsDf?Yjt<;vM3cixowAX2C3IQ!%&B)XHObV(s`wpCu>cVLOLN3aJ%HR*W1Q{l!!ka{#Pu`0HXJ}p4y=O$ zlD?7D$``utNA`cnNaibv5!N^anZO!% zrZHa1=(QxI6=0dtk3<4?4$l?(nU9}r#hf|lL3S@Sbw6d6u3P@ab2XWx@=OrR? zTq_)HG~+Kj8i4BcpXlieLo#x=V(@m)w`TtHE9m@($>4ql&45mgu4N)e?;PBCklyvt z9{3y}UH%f%O>sq(XNF1oPK#@UWZy&-!6yax)Zh6lL>1BBFqp89iCU_fuRi%R^=yW( zvT>+b%i7b8V42U23Gw5b|3mf8KD`iFv-UAseU&O(7M*}9I`$cATxlXJmpXF@Iostz zKgG=k!CUsZd$bvd(=M(W#x22VrL>y`_paphy&w8U9*Lmqrrr8P5G+6Nf5pao9ARTyv8liIAIXFT;=t$g zFL=O>jR0Y-a7fdXxLlt=td<*+VTyx+DQ`>Hx2BQgEV#f>1A4@_w~z1cJ-E6v^K=Qq z9qKW3i`nDrIfRUXipwG8V2+hi(ANb4d61B{_Cy5VBw;P}@k&y$TpkwW)IZpq*wyMx zqXaw+#^+4BoXAqleC|v*TXvrVTTVY)CE{*&f#O(g39szvs`-Linu&^^YTik}+p>|l$ zdA{Y+L&CCV&1pI!3#k-F8F;F{{1Rsngn*$@Kdcq4T!;doR6Th#5K%D2A+q5q>@wVz zL6|$`F}NlW!!TdWE{^sv^K*phAuMOWv(SW924KY9y+!H4JVQ()Lw9L*raiQO{mC-v zKkI^|)5k>cr56s+$mL-rEhZF|G%AY`X4=l*l+XXhG(TJ)>Q8Jhor0)Lzgwc8Cv2;J zNq)|uZEw{#jh_p?30&y3q%B)tr(OEbHGhnRhLU_q?d~uY1|WPcQY);;%OjXy`=J(4 zkj&~w+xudTyMaw=XngjA1g2yCAZ+_w!@S`WZmRKVI0_hqrH2r6_cs_L8Of_L8ePG( z*mMoMgNI)vYo2%QynU_U&c>y`w`%e2@T}+HvWEm00;aN)L|FXTG8BM2ZuRCgy4X73pnV5c9ZGs&Wmmcb=D| z>_kOt=-9QAU`%4TJbB$;LvpeJfEfLfWJ@7r>gy&9_ zr}>qnVNomYWPDKv7PVme@J`?R_4YMRAeTw%rternU{LG!)%nSRhS6Woo=gPY`C37$ ze70EJAS#z}sR%xs&?mT6%v*O;9K+lhygdp^_WW~6OoefjANnCx$LS@-`79ujQDs34 z-B$=QhP`F1;+7}eN~I0f1rZI>1os7P=c5TnTF!euWpYgr?whz{nj!Ubqzj+j4aG6Q zl~M`W5a)x$w;M~2bi9Of`Io2?Y4A-Qd$arfAI!kRWztAc5S-gu0xxW`a*W{V; zC1n{JcJr&vq;bK;;mVE9I&{K~TPW@MOyfWY7QAqf=zTt)-#pd;8p2x&-6lU&C@w9>VdU^Yb7Z;6clEfXR?o&c<9_JHncaVt^iGO z7OIHoIhFY}hN&^dnGcflIKriDQ@=aklMB5!bLVqfQgf6ZOnzepB+Y#F(gy2-WZSuB zbS~E*u~doACmo52s?5i7h1CAzZSwi{F(!27Ufw1`SZyWQFtJKJTtc?;mmEh%CnP_s z7&=#ey*?N&bk@_=jOQtVNobcYS{QyTwN&_i(v<^Ta-hhGz%Vt4t<%DvJKg{5*XHV# z8%N?mEjY7Qru-lQ!Q->DcXWQYm_gDXL~Y~Bl(0Ju6Qv@rxr7r5y@_-&gQp9ox-+%& z0&G4A42K9KDLF{eTU^6)Y5D}1o(jlFC!`%GnBp#{!`z|XnCk%6%Ej#|lH&GHZ{~C4 z>Y3zThdw)>-+|91O9E0`_aqF&w=RfnpO`P6uIS^I!f6(HMrw`8*&uY z0u2}W|JwU<7&)#xePWgE1_Hc}_P-n0fE+9!M;2g5O1w^_g#;*3qLorRSO`?6kb(>; zmIE;+BhJLrbKgf#+C7tS7!Lt5mH+_)^#8u!_1>#`uexhEl#f*boUU%xt9SnH3pfio z^1#7Dvd?WgT|^?M%6XTIv%?c6Z`pSaxh6}5%y|H#)%y17%y2^+`^ct<@xbH?=q;0* zdrcK5BuyABD%mj_iUtVv)1chi8atdP4+yX|g5;W@5vXtw^ zVbV!jl+8eyjWX6XoAHfrbApbn_o~|!b!ydx#q&%sr6rv*g}tJBZO|#jR?GAtvnTL; z6_Z?xZ%t^F###k*?mwJTn>h%$Azp`14CqizVK3>rpRIHLKZGt?!2#bSc54WoN z^H|_GRjRO4^(%F^4HW<*s@^prhZ6bPHuG$q9qp`v$*9M~p_kZpRmCwV1q^@$4=5L2 z?n}Uvvbzi*gt!e|y4d4tGj})_uX~v+kFR(Mw=B1uxnnp=YYmnvKZIkO=s9Gv)D`&P zrm(8M1~v7f`gWC!+CoQqULq9WP7O$(AZxVbkfwMEcfU!obX02C0HMU6hB2?_2;o+Kd&nW(CWEoc?L%}QSStCR6A0F4#}pbK~4Q6 z`#FwAYr5%i_{l)oV{i_$>jl$(ErN5f?p|B22j}7mvmj?<)_wan8Qdk|>oQjN_RAXo zGm@YueF>ee)F6Xao3>r@aylQZ+U3};zY2n~* zkt}Ts764tDV>LgM=}pGL+Q^a!>0&CCu1J24;F+q6v@{@zf~rq)MwmHxHihif^RW?=hgYzoZD;P{6;Uo+z?d`s@ZjZ7GU+4bdlgP5pzr$s8z zfNrT4&(S)&s!W9+y(--?_0x$N2OBEFL_R`HwIJk%i?qyJ-33X|F?3Cr@%cSC=em)! zWWzI*DDNggU!#hw<>nr6ZuI;M^|>2RKquM^lb|T;xK{8UXzSq|!)buqQmGBbHxYs! zxpbfsHVtYeEv_DZtd-bmad3~Ik7%5X3{Y;MhfA$vp>sG-|NXarr-+onR}7qRnVSwz zb&lWmnxrIvvCnB#i)L$(TDj%u-hf*1eKc zE=P&_Zqy>!gq7Y{r=BBP96vfJGKT;ecY)egWNM~K?Re=C`&Jzwbkj$rHW=T;&mk=! zfLnM6i7Kw*`(QAoT?jruW77Bf$;bfEbPT7ZUG20HpO`h|Z7ejbCXHq4wD?>5S`hS0 z^}ebcK^=DNh6s)qND)U*3-QEmioywOMLwlVc#AG;C$XkSNCOGqCHj~$YmF#ds`m5f z0-PlpumvJnRJC6}yX;Ao?ncoO(sD@W&&7&3C>`OY21{IA4Hs!=esFU4XOFQyHW#Fi z5@SwZNnfHweLp?u+|9kG7sgWQ@dbC!3PiG4gE2g21u%w8z4VZ5>QIE@szfg?_an0> z@SKcnqUR9o6^_>Fg>f*ddn|n)^pJQM3phkZ&qL!=JsI{eKgRpXWR2s5;S3KL;<6Th zYqt)%tV@S5Wah$#2BcNp%CQ2JJzFs4AR(*df}~Za1tAG+PY(BXHo@XIXmC6` zMqvXr7BTF?P)T2U=5bfm_8}@XumR0W@U3amDE8z^cR5>NkLQdO4;5iYad+nqx7vLA z=s9OvHGVYA;ZD@Zd>*dlBD}XuGK2BbGNJ-l^T8h?STxx^yO%yeVzc0O!$^SGQ6ZDj%?Xak7i+!mg z1vW8V;t0Q2?MVLS7+86+N=6zhw_^peSG$Oqm>$42W0x?f zSxhTQ&jM`sXW~ir_*v%p+Jh!^6b+ELZgzICjr_wKd+0)BT(uQ-^z?q*A!ech6Bg55 z1o2o%dj=X+QP9hL9ME~}X^gsrlXpW+jptqF6mNdbLa(kbtpE_Nl_ZTooujoQILb`- zw-9NvzH@Xwt+Saib9$bo>*C2%*_ZxI;;<7m;GDPTYt^)?nGcRS2qE7zvq8g4@6vPj zRyHuK08%r3sq6_iX+qQ>{=PU`+vbg2^8m1;=zA^|)1eV=WVf@Y@i9J*CABSFU|qM; z#3)(2zoA<_jvt9l196&K+@j$iWS(ut>+YT-N{Sbb*fA6#bW@@jg|9xSBUTgoxE8(^`OI1 zr5XA4QK=1X(!?zwN<*X&YRv<{KqosT$$_pi_JB0SA!FiFqiN{^`w|?`vz}hwtsY0Q z0Br#h2T7m_YvOhe7cw|`Y4N2aD*@8ysfFKFwc7gT4r-t=<=s%gR(Pa5TH89r!(LAa zkwq;R(?n|Fy)1rbQc~!Qk!SI!EIn1-&CIkBP(May7A*pIpgmxp8#P zxoEMYx_A(0*UHy;2mGuKEJOo@tW6HIx)U+u@y1HS?={$C7LSArsI6{PmZ@wYPae$3 z%#|uO<6jKd`SXK1x{2{WY5_q-jFw(dI|!VJEzgpkwTbNbJQF?>er6WWm*9Y&_w@4a zU;Ph8$7wblh>(LMP$#Tz=MPuZ$?NoR3p%D&P*sRFc}dfuK8!j`71K2>_=oy{&;+Q1 zN#!Ia-Rop?_u%-H(xIHqC%TmQB;d!u4yq#Gsp)uH%;)SP2 z`ZX&Q`M~mxP zn{hxvu~zMfzIgslCm^r zTE^Le_X@A}$Q)tWgZlV_Hhen({f{3b-+Lrd#^CDSChZ=Y1JmIHPZjUC?WiVlGadj# z%9dB$^ku1<{%5gbFYhKDEm`CCR$vIlTJg!Ysa*#=KCg3UqV58_OkuW8)4!3g28!Z0 z`U!k8kyf<=us&GZ4W6yf{jh%q|4+ChSE+%rV>s(~-GPjKw8?B7#JgDs1VBkm_S;Gh z2yD8F*=ax=82wiko?Sm%Hu-^(m8+EIGBg``JL2dC(qpw+WvALbptt&x`DPH4r1uZ4 zl_avz(EijSTdIHZef}$amYY$Zu??$OD|xbd_|haoml&}VI2(g?8d6)mGeKl&!KK^& zum3&MG9bV8qKuyDYz5?Eq2GT8U|yvLLUU+;m4x1lgXx9aXG=5j^R#23HD;?u4eYGHh57~>w!0{p-bUlD83Im3KkY8K={W2;Dv1&S z^~0VvEQYr*q&Qn8pUA>ClGRcmJ*`#@ttWxBdO$ZV^^Xm|SggUdg5>pYuf49zB}7Ew_k?$>tr5ohxzBLB-5}z z!z%_l^4jZw^n5ZtwC;YjdJz7yF)&%(;{6NOie@sCR&9BgUaIbRZ~uF?0>jIiZ`*<= z^HIk8N3_Y?|GnQQbLTSYp7esSO~ zo-aCB+(kJcg})_TI!2g>JM&m}Hod{Mk!iJu1+mV=B-w5(-j2fag=^Iw&%ma>r2q02 zSbPwde=;Acwp#r5yv_gJdtYNY>Mvu_iVl{LqdLzo0F57cp?FB2}zs%dmxA>8l z?5FO2T7jQd;2&=V3ccD}P|27cuBu%t^bw1cH~)BR^$#$kDB0(_;L4}kQ7YaqVUja5 z)B;n>KfrS3CdFmU$bYj_&g^8+{=@J!xP?&yTu#TZG3JG*T(UkYt1ZD`hB&wkd!>Vn zo|bR&!n6A;y};ZUazl9UUJi7{l_xv&cIGR%;KuX%u{Oc`!Ct@mGoGrUP0w9~mT?O! z&r`hF`)qcXKcElk*cJ?L>BY|dUhaM@UQ0u0tFZn{=B}4#7=-eprW#$W((r~$tNfCh zW%0|GUfI9V2bq?$?^^1Pclz1#i1b)`IC{yMA9Cv(J$>J`m#wslesDbWd<~qFS8|u% zaPuD4iHZ`gd~-Trb)8&S(Z@B2vwtgRGWTPJcOFl`5ZWrdF*P42yf_<-_(HjG)Pv}?aZ zB*V)yLS_Bnc&O>CeNF(MSqP73V0nGe##u2uhfk=S;r{g4O<{)P8iZNyR?cJ|mjZ8l zo((5c<01Z6&VUU6AG9_e8x>v9`b~=*UK>Rr3Ps;@&4pnNnz~RSQgj0%p zi!|IBql1@yGq76SMY_RI>Y<+=wx*wrh(*t8#gJBuzpgO%Hy9I|q+JX5tDC)OK`ZNr z4lFnxf1p09eWD1TZ@eiPkshs`dwNZ{4G!X=Y$|pFJ;p;0v3D2xFQGFX#TOoe<4^JY zf{88o?>x>F5y-5cR-%wehFJon&f*Qc<+XKRj#L zR43*0BAADhBK;G^jXX9Xf3$Y5KsgM52Drly#mfsGud`U4MT$1KDF;%1%b$~!EeB^q zR}@?=(@q6BN3N7C^}wwV^laCbhycjvGwwd`2ggJ7Q7zZ@J9h*=;qfX7-%c&PCXPtk zK^UXybU|hpKHtf2*3!|3yRgxj^Z?I09@4S3eR#)BJn}{y&X8^A{_5EbrC-`*=$MRp zedplh3^i_!2kT$OFfvZbS?}6s$<5?ygHlbTApuP~k~eIrlVWJNQ80J4gS>nUpaUo= zM-51L3C#@vX&O;3MD&-b&BB!fDZiz+<4%i=qAXzZYGo`;DJjR~wW% zBGl*@N@0>WY^js76>%`PAW%sa&iK#3w%N1&+dyF|;Z+^h;u#S;|E&@YR=n3&3qdKB zt0jrN0uEDzO&v)2tsIsX8AZXcGDBK?^JM0|jDgutUi{X4(g#)BkAX)$C)rk%AYhMm1RlD=P(*K0(fg&U$+ZJ?&38m%D5AwD&(JN zAP;Gg-;E<-X-q{7y^P)y?4N&Crn5Y7)guNHFMo+06ToBFdw z&c>7+c=4^nj^}EFQb$Bd0VT>>De3Zt4RsPn<(D8+?t&%-kkknh=)H_(*f=i8Q3`)Q z?;RB77ew|7F|c+xd^jGwjKHw!rD8=d49nvtybqTLYr|q)F)0-K^xN@TQAZ@BZY{opUnCxqRDzNU z=?kz6jf@UHCHoX!;J-x16HP!Zs3UtOWdF`<@~@h^ToQseQ~Uy zZ4`Z!BubO{b~Px5do=&kI?`+6LTy0W8U#>l%I8iOQqvJ&j4V=8KTXondwU{mOW^@z zlG04^q5C>EcDO{vwS{ZJVX2F&g6OTB_a{7jF!#NX?NN7B->^tAHw?*Uv~CK)hKBXJN}|r9vg?15|E4*TUVJJ&9IYo}m-F4&( zCCx={*?LaPrKX!bWPSjc@zESraUQHrQ3SJ%LEQMtVm(9(d40b+Lt1cTB@3Q^Ba+OR zwX|BDRNFWOU;p`Tt297Xgx2?sMN{u! zE^?q?vIPjly)wSy`c|$=2@UB(^Ay4PfdhH(za(Fred`Vjyl9i4cgT4zhLq&|`uQyr zbcb^gz%j%tepGPI!PmdQX%0%D3LIH1%wqpbwC9E-R&)w6GJnV>tIN3qll=U0!_ zO@0&|rvV{K4}oH^6s;Entr*g^X4uJ`H7RhhN(`z&pc>YI@;Mmf71Vv7QhkLgt0*sv zf;8uQleNv`d0DeT6%+XX6V&6dLq5N_oSz?}VEiQt$G5WTk6VFPe(ve ztx65b9YXI9Q-jp&wZf6KI``B=GLm@x`QU{`&-)at2xY*^=C)ji^XZP>Ezk!9f>=z? zNuogccy=GHq0-&6Zvg0rr0DlP22t$rt;s&-HtpBnd`AQ?_#6O1i^EW%sn5Y2&j_c$ zr{8J&q0p$Yf|(tQXQC=mX?DQoaJYqmuBq-`_Gp_fvv0 zkfb^U4A2$Q;koKX*jo3jhGm#NX3S>KY>t#FPSkh4>$q;_U|>pRCNl{Q7a z^rrIJSu&yEP+yUNQLBZLv4^P7wz`I%w=<5}lhz;4uTc7G7nPmXx4}R>zMSKS;QU{l zyYZt1CY)vQP&Gaky6G$2RonBCWUYO`3g}v}hRH~KaG|U1JGe8u9JsnB*@GOW)LKn) zcFa_MH<;VqR|N9GThW|19hXaPhBH^jzvLh1J&i-M7ob$Z>b_OSLmlSkuq>Cn67=s1 z34MT^11EYpY?AZuf4F6Wj(L;WrFv*KXxOcT@KV2qMwr%c0Xq@U=d?3@@u?cEOT)eI z#i`Vr+<-{GiiX3=XIHVX1Pv-%QM~^0Q(B|v#3vMXr$tT0sG0>ZKe9@VtCNG-JcOwb^)`VSSYVf>Gqsw~FLOymm_G57 zOb!50V1kd`<%*eHpKIzN6_`Z@JAOVR0s+gCTJx@B5YON|4BF}DvJdB8sDK&u+*6A0p?Pf?i68lAQnW!z~kZ*9Hq(4^-Z#Gucj$zRfhk;1f#$U8=2j zbit?rDmZs*e+}DvUp-%WR%nx`*Eq(QLbppmhY4Da6W|>W*6SPIUWqZh7fN_@|_ZJD#6U9z9y4BCc9imhY6h%Thw%!O9vc zrV<4SEdxVZC+HcR_szBbOApS86@C;Hv`(TwE zfB-xI{j;87hfo{YiQV)s2cJcG4_twl@in$qoWa&P_z{6~Z)u+$*W3)wT~-^W=VFHA zegNxY>{KKInG6jJR87o9Am~Dv6QmE5b898iISq2ROVF)uxW-Os0f;U`mG=0CcezFw z$D9KCeXarpbWsU+bit?rYQX>izpntG^n7K5T>0D|i|S{|#(_^1@c?w={_6SVjC+H- zZDE{2Nu{c?!TH(6HQD*Ud;!fDSboU%r00i1b5yHSBclD@8^2J#d*jV_1aE;HY_2>2 zgF#JXgEw}W6x3tm7%McJPj^YnAkjAVC5Q8LrpmkTDsZk2QU>Oimr!;(pf^>WoZ|>M zk4Hhp!LAFO3j<#*+$XZU`yz(r-(>s8q}EiJ=$2>zP^=YHt*9(7r4XZ`-E>?oGdRCE z+v;CEGNOHmS@2MW4(!Dzp9~C(_OX!AbArB@oQqLa$+;5reK{y%>3gA57*^zapXZ({ zw_F3e)Cj}8v?GEb1$4RT7g~4U9Uz{2;Pns5d5iM7T6NJujIxyLeI}HP%a|SoRiZ z2WbohG2ffQc)qoNejyBLyKLso;5_(t(8B4(<@q^kfwR=SLeqdUHh_1re4YUnrE-CD zO6v6@-MM3CX7?9L>L6B%6tPwtkZ(?@koh8OsJHHNX`zAnkWTgR6@Pn-hV-Fej#EKo z^Obbc9+n!&AQE*6`Z#ia%LH9yXE=Xmo-6c)x>d&Ab^2QU9Dt;((uLpjk3Gs?x=B=3 zX;9tKm~6^tp~o3;=&h1Y)!jf0hBOZD`~K?boczO|sd=Z!P=j;f#b|1$Yyg!o8Aa;b z?|m$_DqjGV67{J6)t{+7r;E(6BF>y@R@Pw!cnljp1kXzmLHdlYEx^s-Jn_^5<~u;T zd%$rD=nY;&IvfG#sgGUS%>~YBV5?X4R{ICzcDq+%nM*b()(T)Qd);k_?;TA*3FrOi z?eP>zXnoKusKP^P(;8NTppPWyw@lDQ7p`n2%*+}vm%OHWu;f2PB%mZ;=@=>fA^&tZ zKQxz&XRi6M8|xMh-yWw&a|~IyyKp{-h)vJehfv2{!=o(V)Zgx(LOLZpO`PCXx6eiH zrc{n;eF->Un_Xmz7Nh6K^K0UnF9ghYW{;KL|B!|f9_ z_0a#6CJll+6p#%?oIA;$&aWkAl9&m;IU8-ix87wSu-Xo-A)V1UjY-buiCT_v(=U zJ9peCgPw`|<*WIvHmn9gA4|@apo7({ox*%emb(YVu@iqXr`@OUnrgkm!t!99l;kTN zBW1T$I*CHa`ve_S&ZTB;YbqHSE$QP9N)FFg9LOi8sjkv<<=Qp+On??!2{NKmIaoTO z=hM`a%^IdF-~n)B;FaA$W_6RISdxvhd=P2oLuvhe1;8yySy>coW{unvy2udR;ppC2 zXB!pxip%pI2XNy0`+Eq93`z z^c`zwe0yUl!mb9>!Go_1&Y{p!x5loz!DgPT#q#^d)Dx!N<7ndCUOjOqpS*?Kmo2DW za9fVba2F_SqsjR#6ZC%y1bsNC19nS6lmhhPFO&*53p1;%{ljVdz57qtaZ1B3-p?<7a$#2+0q2RQ-iD&@p~5+QhD7Dw;@dTL+W`{Vb6w0< z)esUk@esu}eg!p)U{AfF2X{f08@rp7+{mU$a-NI4+SqkV?g0iG$=;Ui!kAQ=7UoKT^)0K zjA|4;uMzYckn>w6=)uZ>Aef|F_2A%M$mQ;BK!yLK$yYi?N`KHlGyD0UMcNj=!Cc($ ze+d~$#G=e2j?_kcBp$8poWbQ48wuC*LndA5l342`dC8>kG;@F@VmaBGO!m%;AWzlS zf?l4^FQ!`{X~1*P!BKdGLhcv@J&>NO4T_nU9(+F6@-wC}Il?TEc|a6#@cV$HJ0z7# z2zs1dSOFe=OUajIkH;?UB)EN2#4x?ela~_ zD49rhy}&_s|(xPTA(prIl%b9$Y_t{_Qnm)gV8#6>%m$?t;mH)&O7*1rTHj7z{pX#E@lho->r4 z`>sD+@YIODrI8liwyHEY|1p!`ko~5EQ<1wHBKil7#9WgXq0?pPZAF|T1`G+NqDK=T2qK}b0wZ;i$>;Nds|M$yB1Ee2&jGax=gL}1 zBIy)tV0{rYSc`%S9}EXIR=>mP*CNU9wCv~PX6n4Y}E-*V_(o`6`3ZCA21ymeNrayJOf+pL25$fsVM9~ zS3ZqJQ`RN$X#lCiWm$ZdsfatJqkCP^VDtkb2LOEop-Y#uQ-aVt&-j4P4GArVQBjNL>eIW%;P+!Rg99kT)7$}8a0!z_0Z~{)q?0EJ7}-TfqK@Me zbVw6rUI&=-X_Vvb&Def$IEVUNbm8C9#}@v5%s5du960@0S*O?Q(R_ZsKM}1&GdE+$ znqlkN`{-yeZPz6{gSKs@=MRx(L)NGQwpj}Z@doE0wj$9FIMDqI0&_d`9GUU@zDGZ{ zfBSN99)?kH70daz%hq=Y`XD*K(CtTuw%own*mti`O;bE4KF6eUO~rf%j)sIwx7bJqbM}La%@KM4N@=g?ISjtSwg)p9s@dj1_1arEyqeA-`UqaVU#9K#R* zVy@9e6%Dm^Qdl#Ho$8n1xYQrFL{)@`@UDHNa1LK2!HHG-dDh|>zT~2ZqsU|7pn;>~ zp!iK}%`luN--J+rzts5i<=|Xw43e*Q+4ysvc1h3&ln5P*Kz5PH&S&Mwu8D;y#M-G-i7Zjlvv;@XSbhw2MnGO^kdtvl3d|>^2zxxK#&l%4!#6(yYZ_m$;t0u-$`oj&8 zC(c4G29^;(2ZC{kpGIp~I{AX24@u{D?hKIg9zoAsGmAxD;tS`lMI@F|xR=|u6r3B& z2mV;aMtZKuT@uhsc~^&|NuMt1mN`N3B{W{!K~A}<0xL$P^qk>o8{)!@6CjQ`%90lc zg?nhCqx+?N`bT7PfhB>5>fK6`f}Wt+RAb1(`>BGNOp^SP3xjXofFe$r48cA0iGxAy zOKK%p+oHj^XGZ;wb64?|X70>GA+4}FwG+<8)m^b&;T@!Bh%IDXyYL`9-4Hn6fLQ?B zW4-{5wTP`*1m{-T$hF_1K)L1oa4`wT!uNs&06iIl$7*O_XqX`laOat9k&a#_lqoyD01+qjtO| zqK}0K))z}KsG_Uu=cMSSh&!6M=F!1D+>OtvD{#AGUw`F-trmp~(YAZjsmBs4Os_$B zjzbr4G)07*u2V}s*R%jTC@OTeiAC6i=K;L%OC0TUkI(VTrcG6WqUKmmznfSUPYDo; zYb|i|pn=augRzXG=T6ZPS}YNi9LR9KSD$xA(2oa{?RZ>Q6(VZmavORD`Fdx|e8!fq z!oQo+aMLA2-d1kgQgBXHACs4;c8iH4E~r;iml;UK**R9eBoG5MLuasg&1M&u;P+ws z>e_*Qf-x#h8k2>miR1cQ@;VaGA)+RuT(nX>z}H`XjyQbe0Tbmk<8zA$jd*%#I9Go- zabCTA^8DNH!MKYe4yj+m^`)bTOSp%!#5yuwA!}h=1ZqSmJ1ZK0e1Un>97wh7ML_XKGe=2XsC&>Mse5GltIBO# z3eGuYNS&(PB99_gZ62gesKko4n-V`vJ5EV zlC}@JL7E*|ut80iRYyQ}1i|(fC^k5Jm9AcCg%!}RpFg_}Ft3UT?j^)MAt8VA{0Ygr z@=2{^HyqvgWn(K`3dFZsk0smiSw|XG3yA^j$!?fvP{w!_yeZ$XXz9YMsLYwwF*iTEY6pI8Xtq$zcPTlrvuj z&chc6+CcCnEUgEZL#P{M+EqoIgjA{0l6>^h=45SS`w+UW`qR28W#V%eaLdoq)yq(? z)~kVw|J5_ZU7BzMFwbzIAE9hd9E~} zZ|v@NY`NZP?Q=|hwP?=;QKKh!3jRLx8){6KqQ7&mVd}M0H(EuBOOTjtvW0;mK?6K!pRz3(XWUeu9in9_k&m<8)ZXn-v*L{ZiOdm zjN8MKa84QW_22yVcfYe*Vz-fiGcQbAmapW)kgu zOpMi&GBM4k+q=5xe{_Wd&}q_l+FVvWi5JD5h_CR;?1U-V9Ly_-!5XGzTh_fOdK8i5 zHtV0u;<{JSDA+NhpV{fkZ`pYB+u)f#qZ+lHf!~s()%_mqSJ%V7fL$#(Mc8!*&Y#bq z+%~}Za=WK8q_}nF0{U@7;x+|~l`RIDJ|RB9q&xl|KB^>dBEZyO$->pi{v&7xs(_wq zIB$jYssdF2_M;@9`}_G>&U_iZoqP;aQxeq_%E;2c3= z(0Do@-?)2UVfF-yzU7j(I^bg^r-~${(9!K> z`CMMUxc3M?<6x&8NcpWhAp34S6O@D>|EV4vBoA7Ww1(q@{@k{!Hu|po9GoKej_wB4 z^XCoAZ3F#Wk^$n%h`gF|PO_*)tGOP-ciyM=jvi~s`AQ9;X;piI4sqx26`&qkc-p>) zr=ju>Px9Fe&R(T4A(J^F9c=D{+@2lpZzO&D&wSSWEN9+K%$PSZU;>~^2CSSDqnlfW zF_Bm&Lk$8aU7Umi`i)q6BX=7~^eT8oayfw#~Hb%e{q~NY$5in3`)awzHY z$6L%5)k_jpJa{W#+_$0QaaF#18TW_57nHASelupqf;ZadPhViXuCPAK<&#Mr=WXfx zuz-JpOb_i{Z~zLV^!NC;3S((UkSwx+hm#x6r=Yk+QnCm9rh}_Ehd_mPtajTg=$Vgx z`2))ylrJF-Nmq+8NmSD|M6iPics({It?fkZ%xOS&7ktUvg=^{nIgv4GCN{1Qu3-VM*X7bb=91r9 zwP~k%*267?L17axqCWx&^?^1&74iU8w*ouOZu~z)W4DwZvGjK+zYV{@`&#sw?cIM5 zoIiVwJuTZdcK1?S?zyxc?65{dTNM%*!wkV=E`q4;fERvGJ^3~)>LMeEVzJJxp^fgGd;O6}Xk!%d zv+BzK^kD;M)XjO&bC$~?4iV@1> zokX#vw0r%v$^lNJA15!7FX?%v4)JoDDV=L;SLvNzjQ_>H$n3}MVw%j*6pCS?$ubo^ ziZ(xec?m0!_U>0pY+l;7@w?}3$u>#r1^iR+8VZ^4I={;f3rS*ai$I(zfw4&7Tlbe3@U%Ep|Pq3jp)$nGFnYW~e&Z}?y)t5;z z!^;GaA8krEUW=a^{$E%D0O9g%Lk=DR9PwlP(p|TBf?(Brs@v+P??0`;Pb+Y1EAW4m z;0Ti;Q2{QctKb2VqQPv8Z*gmT^mp^30;6YQ)DYh!@?h6EN;NOkwOuQ(N4O8wyJH@L zx^Hzhx@D-1Xs^VYbk_=I6vm|9rugfZd3S2;@D~Q+4>|Wys_68xzw({0z~2lpf92JG zqtbw3nPHDpz5A~l%7gJOe9d+8V>W+mi}A}lzJ*$+&q|TpDP$ zegEBF_KO#Qb4)qY%5W&J4oin>jY7b|J!BnPf6t1cIp<5i=B3s^HHZ+_*82cRGqVt04*N&n#@kxG16>QfFi(t;eaya4PgB9*ny=+!} zIR8FN`)1YCs`Ol@ocK2mrR6K4lS2c|m5FK_xIB`xk{n;2$K$SUUi|J@zSQcsbVT_R z*MK->kv|&tCas;E;_!4Otxk7)7#XbKZ? zmC3#0#Pz2_L-4}!EqoNA=v>-XIJQL&UCVVczJ zX<|NJ;@z=|d8@bnz{rNr1gZSx%U~aBA@yu8O=+=hZ@GE=8rE6Byu_F)H>AJ>a>0_# z{&Ks!Tkk6FBFPUKZ&K5L!%$Zl$*7-fKq7eMBt%?t|Kz2o@*$3I;REu?hl5o9T7Rhc z^cKr`?{Eu}2ZMRUE#iY59_h|d0li{4Bfgk3hC5OzkCgu7d8B~=$~j)ukVPh5o%c=NNWw3miVcA zc)9Bp9ma5du;AUkrZy^V^}+iRlFX{QDB)x5Lq#8;Z12x(e6fK)>uvB7vJ|OYcmpmI;h|Oo}d|%KI*+sIJ%eU~6 zN?-pa9?0q}Sev;&ET5xVsBq`?lmSxO$s*GwiZJmo(3ybhU1U*U;v-9cc;m$+?8^4I?AM2-pbI@|61Ufs|UZ1Q@Bw_Kz73${p;oP_U zgHQo*D2jFJI}#3LUiMS-U{yRmWneN5xOWSCn7=z)p8jptiZVG_2ZVL5O(qtmEt*VXbE-4<0O>cCVO$rCIY9Z}bmIrR}1hEQN;$Ix%Reyn-2xKqu8`1I#72 z#s*T0Yu2IpYf{GIGFO(64umVCP{DyRIZZ&&P{f@DCZEf_uxvr z>5mp_hr3E(TeP^@4UwqE*lFID_1(jhvooZ@JlF;eK^-PPT7l@tx3G~p&}O;G7XiAU zc!tL#xY$Ek8)0-wxMOIrLYD+1DaT)REjG-6;`Bv}H*ZBk^8C9JqwG9V{u#QgS8ag| zoCxL*S0)GN0Pmx{?X8`?BOLbW{+eda%FjRs=ifX-QSTi<`DA?!1~o|FFj7KLaoGH5z?J zlrohh;3$w(OAf@Ds1g8RYYDM5{tSR<40RGi^Z`thpbp}xpe`tVv9MkMxkwfOa$-q~ zcPoR+CE8n{O4B+>H8U&l)0uh7-DSby#fAWebWLv?3tV_Kf=0Y17%KD5K<@ zNOF*rGhjJgKzrEwKb}wD5|IR%jT_fxz2=F8G&!??IkH)Uj)7g*i==smx-?qOm>Js>CZ2bi>T+~+eg81bBETmVw^E|p4UNilLuOM$z7;+gKA zjQUO_YG955ZJpwT%+Ak_kB(1pu5f>}UgT@UyZbG!qO!*m6uIcP@Bzj7Vlp~Av9+1| z^I2b63n_h3!Ydmn5;2kRE|f)*mJCDyvF_YdD`a0ZRB9kn7I{Q(@o@@1>>!3TvSsc7 zgPL!6r*ZYNhD!z{5ldIMrx(+`HHuEWFt)Y*^Z9g3mJMgX6;c_TKb{}1txWKgWc0qK zLT&2;;tBoXG9{G#ubJ|GzFOVm1J8a+_; zg?hOfkds{`OhSE7TY>^c){a>_6h$5c(0${4P$|zgvbAYiLnc+b_c05%IR1}^Z+t@v zLZ%g|u2^y#jN&2Kb-C7ejsfY@Z8=(s=(+#h7FXBLzBQBWx6hwK5!7p8g9{u-pgmxg zOrhv4`ixe9T^$`;>}|6k2Ju{t*LPmQMM6~H0a;^4eWU@Qtf#3F)28F~G9VbLB^Lne zRiVX+h@Fv4pvwVpD%kg*xo6v;Y?ok=+V9HMgL6rLK$IgT05(L)&Jx?IdPltqD=;hB zON5}OKCTGn8>h2N5I}ASlyVT)QEV2auJXb{!5(u_CwoBWa-HskR8ZLwBqg2!iEOY(qaz4It8c?>*X3iPE8hpe075r)Ia&CQ<=@r?H8;BeuPS6$nws* zo5Io*XVB_qa2Hsc>i(+VeZr~{o$5(EeK)(fR9X)hg;I`Z7w6FS7!4sqw|O$VzzSy& zDdaqB@fenyFxldOeM4PP*}_H^IF9FQmsv6u#WmFxoma$plEe}W_RO?Ukjn%jWrjzaYqTA*+b)l0bIkaRW$%}l|oZf!lCZayrB4X@7~ zY>(YYsolGI6%b2kD98I0d8}pNP|{0Y&xb7Z!{p&#GFhO}h1AFV6krZ%9Gjr-F*Kzk z>-_{W?nNe_=duCIj9sD74eDTB)TDx#O&`uhKiGnEjOs(yr`S9PFG0qF)eIJua*95- zF(@|LTYd0gWs|CjlkIb@=u*JBXP^UN1vCEX|FR~F!nv3$R1C?GmLh`L$)18bF5o$;em8HR%>MX8| z3M+9c0c4y%n$J%rs}Ct0ZSO*2gSvJF6GHi7si|Q5U$%fMS4_6k zql3M@16V-jASd5gO(kogdzsT_IgdDiQJSj8h$~wS`!lpsk`EuH7kS33yuOlVF-LLy zn;RHAiftUDmOTW-4cZOZQ0%Xcu5~6z&ij?--o<3srYP5g7m%})=ikeyfy{%`PzA4e zHuQD6I$QmlVDS1o1-$$(j9on<=LH8)5sy;Jmvmlu|DCth2^N43K8Wm{tgKcoPJJA% zqGI8d)X7cV0MLPS*G@Ay7i*u$20OFMOH=i+E)W2nJXVH8(qxpUzDIL5u7&b>K8Ym?EZZO+@+L-0; zv{nx`9pW!)Qem}LR=1ANDN_N>A3{Jx6+>Hb^^f)6y=+zc?%s$ z&}QWvuAVC|6ZE;yA1myN))wMC%5|rbY(&z9iVZ&wwwI zZ>w;gDHIQ8k7oy@)%=t#rEb2+&u*pRaAvXiv{~xiA}J@9ZJ8V4;aK;6W#gQTG(N5<50fZ&MHn6xH+LTPM`bc zhT!ul&hG#xe(UH%4q~oH1&6PPmz6knDH7t8U|2_c&|1$gpFFvoPqjEso_*JkE|4xH zc_4#55Jb?vLw*rmV*kV|wxXD(o^5@dZocXX2A73%SJ2B57tV#DsK0t0EW~>vD^an5 zy-0^3`Zy&yzwUzh58pp$J@d(Vf^)0+_JGtMBCz<=(!-YeB8tSdx+$_5QfnMKL7qjC zCIMJtJnkEdTo1RhaR|D13PyhkI8QtSePhm#wgt|iQ2QM4TjSeTnP~-6xGIK%G8eEFR7%URi1Cx>&#zJo&ZVHudj#4aejs~qy8K!( zFoKln;7EC%e#0Y6H53nGS8`4}z6E_Vgo&qkbp3D_ya-r8emjT#wKPhmHW<+LHQ2YFaQ;t@sR2+23g`;w zG#wqQ=F4_at*HU$V0ZxP2>1ar3O8W~^}mpT=YEC+4PP~C?&<9#GWj+g6lu03kmD_N zI1d4YV1Br^iq!)700UnYUL-QeltN#a+mgC6y!+;_Z%GknWDtr`6nG_=Ll_5-y9(b1 z;FoOxJ?cBd-jwz~YjO4LIZnzNDoD|{=7Rc-qxBUOF$SQcAhVMloRo|m z>20Wve)^5-efD=ZIXXO_#{a7@*ao&zA16`QHH@MH9sz?hq35(Z%JobX;#D|TMbthF zf`(=O^FNU012Mp&p`*d=)G7s;B`5mW0oyLC#HG!y?}2kCs|N*~%YomWUCmG#OjLaz zQ=$bl$}fKwlTOSUQ|VdUsfPn}P>Vsx5HU(Ig8mg90Ns6P`G3SWFG0^KNG0!@M?gec zhh0Wnq31w8Z-`Bp`kMogq(`uHO(tN(1I&dZqrff0%HbRmQ zPqv}?&w(7TXu`P~At4Lnyb7FCQU|w`VQ613b;VQ%87wD|3S}ecW_ldHw;2DaiVW0^ z#2_|Ts2`h=RfoQr=D}5};9=sYg-VzFoj0=<*B}*VlNIHZ4S) zqnRHb9UKEQd{2yG(f9rFfr)4@z^r5P47}5M3qsnE^OIB3QW8z+^sL z4l*}z5R?B)qHgrD31I58?Ocg#Z~(h$_O2s4oEt8Kst*Fy7i7nuBqWlBm9uxDY!so^ z_F&w8e2r?q^tdNGpe_vsMy9a85bq2>a#@4pj#cn8k0HhoaXe!}*pI?g* zE@Fw`KHn~(PUawk|4(<~DRVoFJ5C9CI4GJy?|=*saljxOz}P@{A66=dPu3$aixfj- z1yYNP>+b;P+mM~fDbrd6^TEY*1AbcNh-p@cAFPZ z)*f_l-U86O1ya{NTN%vSStk-X2g31&*FCsJ8>OCyD%O4rztK5>Q2GLJ^pS690kAN8 zC)4T49$iZu9v!;VXTTuoIVO8C-QQea-#*5I0hbKG`LS_$$$~2DA?Ng>b~_&Xx}gP@BIRrO_gG(f%?@WzD&4sNyhJDXCx7cr{CxtpV!cz{#7 z&fpv#rf%^_E2VeQ3am1W?+f5uaS2r=Fqr_1cGrZl1S7t+x=r}P&X~WG@!@?q&p=%~ z#JHciu%;e#4IppAd8UWMFszn4Mp)Owq1=NE3}U}HZ`@zCyHB8+za@3#zRn;il!>0B9=xnTYJszgqdPkW*P8(M$;GLt+=&9LMJAjBp}+~# zp9ZOcd|ze6oqma}-T8cO3K?p$02I-)vlTFlv+j_MM+KhHOo*ED7l}Sc8>p{Dtc4>0 zE=4H-j=nGz68*|L{DUc|oa$IUsJkcz3<3Z-^3!z{h;{`348ZwGLNbQWU-`LXrGwH5 zE&3RO^PSc0KAeMBgPV(Bso&8&1+I?loa)7kXaHv>fOB`m;yyj0TQv0ZGcy+TI2sY? z=}-)x)B?^KBUZ^yq=0U%w9z6s7flhRXSg*H&>?3|XQzh;5F(*bC77GPQw**O=StL{ zLO%nCZ^)gQj?*-EB9=n&Mq;L_6**G;Q>W))SA(M90Ze6-&+p5<+jevJm;W?!gZ&^e z#cJ7I&RBF&;>hoQN??{1*Rh9OA4*&wekhX312`aj{ndRk?zRG{1prEn=PEnv)Je3| zBMXeLwJ2!wexl86(P6|bHbZS*>WrhlAF;f~0*E;-Q9GJm-7V9E0=)bA(?CEJQoB{E z1I}UhP~0GTGVKcVTnpwVydVZ%V}B4Ea{ZJ(zBEKs^j5kJJ}C0-Kzvgm1qwv;2847m z0OvV9SK>#K`mUVQ!v;OyY|(Q}rAp7~FCnP-!}s2PPr17DOT%s&Q|;zLfhhCFy?AVq zuWOq}Gkl>(RE49V0TM<6_?O6_gPspN99SzD5lMU&&~vj7(%+F6#E$6<0RgM4J5x+p z!ve(LDfsXjoRf10kOOC*AMY~8ze3MpcBKXippFAofO;LyL(YL~##eBC5jdCop05@T ziX(8yQSjdQ3*g-Da>imLTz4P$J^;t?J)#PLnh5%4sKFM(6_|KN6KFm7kKRr#NCcU` zB!Ec(7fMX=yTs|T2%|)s%|50mLI1kaU5-kqIo(c1;k;k~6f@8eS)MJzx!NH~Dh(?D zZ2j(=OfTqqwHj{lp%E_>YHeA#XaPxrF62Nu6>N~!xP)_n1SF!*Kj)-QA@mHu`B8{T zwj}@JB=!F4v6I~2$wZ&QrGizF1) zsOer20B{D#K9JxVxETVV@D*ZI-4gfzB(JEWU*!`PRqm5;@;BZz*Ea@=@V-9e^G%DD<3;Y+rtQ_bwS^ ziqZpc4s)wN1C1`ZE4lhVvq+St0P{O(D;7G|8$VJ`WDN!!5;i7Pd z{b_yoRTW59Lg)T)hZ|n;mmHS{jnBKia-v`K9-$Ak+@;I10x>n6(%tRgP_f& zs|cQVODg(+)gSgv3fkY0b(dQRl6@W^;Re;QXQLva?s-#Xj+sDLGI=uN1Abn9%9U@Q zVU{>^aI~dfssZN?g6DWxSQgsP|NR%_ff*uCt9L1YL?4H%Ytsu?PULeTE?PY;;9R(L zSWCqnfjovNU13rbP99txtq20>0*?k!(AHjDP*7o15bZyT8LENdJczISb1*;(=S-qN zp)fO0^SSbRMfQFPzTMC6kr**%8*4M1;lJD?8a1`l#3k6~UDpj*3dY+^^(2Jyl^P^}mWnz(WDG3G{24I>sZ9#e-UOOJ3tEN}dJ2HisP4pb47|f2Xd{iofG|kN!9J~ zY;#M0EtIbT=i(zHlw5+am68L<>E2kBC}-|AQe{DFnv-K9pblChY-80QZYlMGdJptX}908f6Hq@|-|J_&j2r{^(-3V|F`P{_S)I#Vv^f#6;yj56+ zd~PjVx)Xnt0%Q$v>47cmRpL?t1|O}7tBWHAA`=Z~DdqE|1Hh;!+f1AQ?HXCu{oVcj zU3fv*$<1{12{+`HJNERAS?@|&B7^gr@$K};yZ7m*WWG7L8sF~z?MK26lc+MSHuPCc zU&nZ!$ytZda2VXda&II%Vk{Un6BA4@!MX1TwFIzhGDeeLQCk3W`br^*%ZjJ1F}sfU zu?slIPGRXk6tguZa!TXevTzOtKrje6x1g9AR#U$WC1YN<`$ey`A zokG~wE4NrXoP!=2kcW4S0XgDR)zV;NAs?kyg96munEv#670$=$;R5f%W1P#2Rkgb$ zar9Sd+%IVdg&PEzZyX-OVh)hUnc6=-kT{^Gz8zdQRLGYK6AH#X!630i)(j8RMX#%G51l@^5W!EtOiIsTZpQ^Hf^(wb z&*8X%0v#M`5~q=j0G$IF9SrMmF7aw#P}PhV z6Ez8eVZ0RNC}ot16Eh^2`Z!*tfL$^_-&4=Iv$}Sc!Fljk60JU;9&SOHMM@F)Y+syh z01&a=8dpq*EJmm}Zr`6>iW=wchwuF1E%Vx;(tcSuhlWX02!y38tyQ|~!TBF4IrjB% zzrZEtm|WlzkTa!RZudiOby^Kry(FXR zx!+7_{m@yAv#XiifaWxzjbQieE_pYn)w$W7pOVcP7_$39FW@UeP7GM(2-#)e#zF*h zJa>^ewIKA-Oit8Ec~ex>@JJG-mXa&c1>hVlgc+qvYLN5qT@?;c2ZEqMA?H#Y2FZlc zy)N2OIQMiD8EsBBdS*RGL=_+jtho5E!W~lm88gk2td=VX89{eS2U*2Gxlx}SMq)7K z1d3Y`?P|Ej*ww%zY*QUfM`>ZOYxLZ-Z4dDTVgv!`Ooa2%M?7N;pM~O!PivoYFT+(s2>1 zqcchgNa{f{Px=FnPR%E&1$9xPhj?)R(FAbLb`K%v0U5#j>$+&6;+DCj>H&1HqVr4G z+SOKs-OpXHGL<`p^DKQ-&}KAX4tC*g?|lyBu&=y>3;)2_u0T#s^cgbAxCROaDKfs` zFGFi^LqC}*ld-~w5+MyByEQoXd@@v7PB%gSk@WOarjwya#asaNA5@*CjV!@A9f;tl ze5H0xasPM*{lwAQ3KVP^oM%hBvVJ03CFNrej^>XA&=oI$N?WQM?}L0h#k;#7z5fow z=djLnj9wPb8BKUnM%69>=Nc+jq36I?o)VeXf|ZT+iK*m(tl+#2ZU{kzdDdlx^Fbh| zw_aW~RMUQU6UvANo>U!iEraoD%lN&*14uI7j@m%yS7&ePIz9^0@L@nULUgycSE<^aNZ?p5S{&=Lp57Nv=g z=tczsa2_6Xv2_{jhM*(*c1l#o&gIn}*OnzccaZAy?cya1;aMEI7=m@Wwz_?M25;mE z7!~1$fZWyNN6mO@tuvXtlU>4cx%cxsw-Us82wP&5V&XCFB97yuiw13-v0VUF>; z!Uh$uzrl^^WN09t1Awq`aOf1~0l4}Qw}@f^pyA939>?*@T3kJYPZzTokTC?`PSA!v z2W+;;>fXXn38hr!jDPqJsyFECoWTT~7kW`nq=;8jnO}5pO3z@M$+>nma9=7x+7Y@% zgroXE7C3STFFubeJMrN~&-fShpzouS7mZ^96HSo1ctS9*!nxZZ3FxPiI+sC3!t1YY zATxk~xnLk?G_uuIrP?+fQYlo>k@Ez(0e~?&`CgI9Tl4gYu644ty|aY`JgW~G^+iCh zz`0xEa1ceB0FMC<1M-?ceoK&yBTP64lmk<_)@E5a*Lcva15Ct;nS=F@Ye z7$Ca@Z47dwsMsUHXA!UVKfs_5dwC@^i#rqj^?}^ZiIz<4QgsbU7Z18D3=&N+ZI3%# zA}*DS^x<7F&>Nv}_q$w_)uG(*ujph<;zWKiq=uX9A22BVGt$wWL+0ru2$)m|KkmH6 z^*2KO_I8e_^df{D?Cgu$OzqDqa{Ecl=sCFhW4MGFK_@JV5jM|=Sj4!ge@&2Di$Cx9 zT1YbX2;laY1BaL$|94$5S7Z`ggXrRt4z7Yq0x#SwE;ULVDkoE;=gwh}4@Fwe`Sie& zcp$w2iZ&c-dL+R>mHh3R^Fvbb6Q3Yc1A>O(w08Bp$m{H09Eeei`a6LoO`#c!4M!(Bocp-qV(i( zI?qMos562&1kYnoL?|-0rcmRMbyu$p71k_&`?8cg8xwQF(AP?myRsf@{In>;igh%>l{vVGcW@MrPbZ_&K^)C2!sWQYNHX zC@-n~A;(K=H5qa-=6DODD{kAShm49cem7~~i6HvBpT(@xA)I{$sm11%`DAoU{v|}6 zgj2o=`yMDrlFe-oC2-=sERqhwIawH*+AEpmUog*vx#yV*vIggYNyNgr1JXP@J381u zIO5$Y^?2Bt0s}b~1-Aqog?znKi>`0)?(J^zZUcNgHl&1evOZR;5puu!hr<#e!5}!9 z7t<3)DJS{dc{n&4T$0>Vo5--`b*LlNp#E_^k|&3AsUZdO*3r1yMr0oaoUgmJxP$s1)J7O-kHTN#|g&Ie38-AA4fyEefDh#PPT=bGkDOFTlwCwgf~R!rbU za-9o+Zw}|e!;$9&LyzEE1c1u51#P|P1(gDHbHrh}GB`g)`3R`?HNH)WY~!eAaDK$; z!_kx?h#D|+zCB}*kA#{t5<~Jj8=!YL9y3OyY?<73fL-s8uLkOxI?Tl=X%lue9Qwt1 zARVGKr85Lr2nfhO&5zC(5w0a${r=6V5{rVB|==@8VD3LhB0a#CBYYix)zOwP@6*1(ejKc+Tuduy9%#ULnXU~ZWC^63|FP9UEik{8IWg5~4-ErWAd`qUI~ zj-2bcr@FP1M~TKVi~}^z*~@spurojAovM3Aj#iLpODXzP1r{sTs75F=8f&7HZ!UD z7O8Ph?+9a+4$QP*>JashY+R@rc69Nc5C*FShrQ~(CjIu&%#q(J6 zC=!>xq=~KSO)!glWFK&}HUK>clxwAKI9zcd91m&p7VOlmY#r-7*j%!60`+Ck4Dh0!qIWR&vG zmbxd+biNhh7V@G>o?psej66iiPN}7#oGew`q6p7ggt=D1oT=Dov(3_s2-hc8801w& zek~jm+NY^e#+iWwB1|SGxOAv=&Q-(KAlap5>KQ#NW=Yg2b}1&b)R#-6%&(+)o?nb> zAo7J3UCW&m5^&i`GE0PlC~ z2K_#m%G53m+(W-zdd_a7-h`m6x8IgD6FicB74)3A(6$_DTaY9TtTa<7LKy()qr!j` zAo&x;Dr9iZg9W)h^2ya6*LE44Q(TdRti*EYsLSsg%S#;the5wNug5|^Im0Otp&*g6 zS|ocEyB_n2n*{3mx^Cu-F?E+z+Efh|V~!qtrI9SW>tVJS!Ppxg5fwiyyo4mYG?ejL z+dxRj1uU@OwG6zd;_kLUCVow{0k$3F1iGNI1rEvYjfq*^ViBEFIMzxA+X*XL&~QsI z|6iov`*mmcapqswOn;OOvsjcGsm09oKx)d+2{Y+4jXPg10z^a3A=hB1cy&)BUd3~+ z$}yl5DaE5zmwq)|COv~ehrHsmU#Ee)XDovhWY_pX3ecuKVq8mMH(1n%b=cwC*^kTv zwjyAx0OG?FzgXF(AP?zs&aUK4u&YyjfX{+{S~3HDpu%)A0z%z>yuS^&F)KNO7| zuza^gunctE)FL`O9%xOEqIEKJJS>2%4mrm%r@p{d8#-tmD(;GMnABo1AV*$4NO0ID zArtQdSfRx+umN^>Y#l`>ljUa}&M_bm9{T)zpcNiPvdDD<^mZ1{)@jMmbC2NLok~ zO{38o^nD=YSrvuu5#jMrbt3)V)D1=v)JLq1DJrrYr|8ZN*1n9fFL5*QIv)B|hFC-h z%?zA0sL??v+-cwfw0$LzA$PY&&z)}-*m$(MegL*i3pMcX8FZ_X(lh5|jnge!Fy@;v zK(!W5lv&3N!hoP>3w+hD2Ii&nnJ$C&r78`h9Z-5SPl;_jhei)F^hI_LgRkI_SZ6~f zqBaSv(BK%N(K0sjI1&E-4bxUk=99sz=z^>sER=TGb%*U4GXYM+}o+T=$2nZ`4*DrSLA=)Y- zcUIRHJn9Cc2#S7kADNc4d0Hx+-`Y>)5)IHbzT3gPXTxzfOS5nS z9j3c%3to6+s_o)F16e~P-#$E*2=3|0KD_-&dSx@Sq8lSy7#tz6@-uY7OjKm3n8*SX z!dEbJ?tI>#OmNjqwKedZwUmu#O*VTuX$Zl*hC`w=o?>BLqmMpk5f6{J33rL0lARmT zVq}Vxc?^_@El`>-x+YAow60kN9c#Lm_+3)`_}JxAF!Q5fKv zo?bAfz?)Z92dmo*ya8G+0bxyzM%IW&MG7ZmhOqE#i(W7;Rg1p$2ajF@fmwY2?76EiIT#5)mkBkca$fOSy(9G7^6+2#V#4;jqKVr(!sLr*?I%`ytbs%TP z&6FWpPh(riL4syUYLhb)6&WfE^yAm4P2RVNC$2iB*QzX4S^~pC8bv5CchC0pOz$o@ z4lZrVqtbhBBLecN4x0 zOp}O4Jo(+t9NR*%uBPU=%i&|^$ZcUl@>Mvp2KWXyAkzk6Zaim;phGKO&P4sgjVgV- z;F?PFB63oxWcgPQf2mvYjziC5D!+#IXkj1Lqjc3#V|iD4B!&G|A;IK?oD1SJpq#$2 zD*S?3RxZ4Pp!xE&uCmRLo+RwElR~oGz;bBg$~BSHDU}P=c;mI#ux^9Z z>Ak;~^;xXyprb{SKDh87yiYkq?`T}PJ+Z?_1h^y1Ak4KSdZlPYyx!Z)kuAiCW2eOZ z6wFUpzV_aquf1^t9}F&4YG4OaEW?XmZtX_)k$M}v6D^TwgoHx&|17}Rxx(*X8``6V zeORxGC4)Yfu6$Kpgs3A##i5WiD4{_Di90c_+}==aM9P-Y z6OI=$K#FKYV%{?nk8J_0tEoBOc1csCfAs4czb=)?<;;8)R1NiNeW_9tW98H`%r+ej zb$T+p8`($Ja^P0*v}lBgo-3E3t{1`B3;VEc(N))ND;s&oD}a&$fvaSbxrec9zKum% zhU|@Y>+33yQ@kFg<=QG5DIpiK+=?ZOF7rlxIX)iyF>mr!9TXu#`p|`U_l&_dH=2ke zYvJ95n zpFJg!{lAXomwH*_p+$XIuZy~pHFK{3epYziNV>q|=v1~y%g`HRI>CLs(ReOQ-^j(;H}w0PdMu!;y4QrVE7Yj~qQDcy|a2zk6EYt+?N#xpNV`Q3N4K!K`0zVlhej=rdb^_6y#8NpSCS3umjwDto@umFkdU$=86hx@QzZ>OvFM1T69A8iHxKc1Y`OaK4? diff --git a/base/usr/share/fonts/sdf_thin.sdf b/base/usr/share/fonts/sdf_thin.sdf index 9fa057bf1c867f327e81ef5004b65906f0fb9e9d..23926ac35a92e99ad9c87f0c3a85b3f8964f561b 100644 GIT binary patch literal 103514 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 z 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 literal 651146 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�SRa7>}!s|t6>N#8l@GBRohYf5T;?_}I3q8?mUrY!a(l&`w6k$kX%^qAb0 zIp_+|(-+9&fTAo!tDzW9FnRB9>JBk#64Z?6f?vKGf53_r}y4qUyH_GrE|LzRzDt@Fx6NiI-w7mK2 zuf6sUHGF|3<6`hGb!W7>Gz@a;fCCA~L;%<;qhZ~C#eUaXJQ zDcRv`CUGCq*tzodiUR)~1DQdM0fPf-uKzwg4z*6zU}(s&&mJVgdG8b|*n2}x_V%e;^LS0L5wVN9C{pwR=! zjkdMq-deTTt_UDcSsy_}?h}$Th#I0r4@oSNtXU49|8mg$ulX-;Q+}6A-nZhxkyAsk zwL&+q2E9}Q?!Zv=7U7|`5}MPj@I7wi5tHzGxv0oLBh;@sR6k=_Uj@hrj>_EbM+_=i zcAZzhel_o37*mKfr6K2*#HsdbWeDQx8@2st;?p`=CQ63hw}$md$YegZ1f#QqHTQz3 z9q45riS41GGAbd4R4dBo3<*Dk_jN0CdB8y)iawG#YfVG}(XWrG_3@h=^Zb|MSoTqC zljDJ3oh9#E@wk8zmMVNIqy>{_&&@ui#4>a7pSxk}B_2a7$o4talG>5HvsbNFLbX;d znXwMYFh}JeL*Y*7ivS)WE=UB->I0MxVtNTWj7Z*z9xF=;;$9{VhDx(p^t?5hr${E2 zGkZ2e1&w3PZBWZFP6zD7djQ$2^ItVPYza|olZ@$xM+0IctZ31S?Mgw)Q65>XjMM^{3Pcp#4^F&F{$PCwnXava-IzlrqS((Wn?=*^?5N&%`&do;_*usI(%* z$`(t}tV?WHwbZXb!Sf7L;%3sJib_<;B=6)BLMXd9*FhSC!$T&ItZ zgQd3-XVQWA>(HpW5IN@gFTQOEqShm+qzJ8P$JGG&uz=2|N?O4Bwk6cj8A|`{Qer=! zck!r=JnexQN#hFWklewx<=ZEt%AkfwSotFb8R94p`w3&yLG_`NA+LS|0lGFo*%mk^ z4RF%{$PlW~&1n$hCXty_(>W8y3Wrvsw=*aG-dKsSCQ)6BRJy3oi2|L>Vs?S_K;Pc4 zRqpHdk;LxRax;{Hlhrn1Jo3OKOJ9F0DWLmnKnAeRs2DPGPv)x;H`;-ytw4A`AG#1Z z=J~I8|M=Tq3_-9>)&))*tq7Tg%EI@IakBL+jU}He&J3Vz#Mau0mQ!LspLg-7j66d` zqw{4Y-5FAldv|*|N>(u&TZok@7b2kZ%Onn4W2z%<`2Z7T z8Mg%~>52N?p3~slujR32^^9ml5N2thbsJabE|E;Pg=%QO6b1+e^v6i@$L!9`h0v9k zyL|*}cLR?u#NR6EE5f|ufr(h}B016W=v42WKB6Z!ZG@FF7#)aDhDOze$T81<@ohs8 z-5yga2@8T1m*ln8kdA`S15g_#?ITcPuiW0nqdW3+{j3Ux`@&l%n!UZ{m0`zbvTiJf zQCqptlg0*t&0|Lc90kzAVT6AAh<$CFb2zS~VhVGlur89$vkowm27Vb534i<8ZPia6 zSt@}qYc+Di1_v$=Ak4bt_!r5`JW4oLiK)Fc%#u9#=7X7%p)eNd3Cg}bM-IMv&XXtr z(9n+5<$n*>?uPZX3o(>w3j5(dBo8w9d^imm5$W_HDT|3st4LJ`qH;&c=c)^lW1jya zjzbXLd2lL$I8zp6(L`Ix$)Tgm`8=fkTChqcm9S3lgKHisvG0D~#iKj&e6A`^8RiR7 zz1jgdNnPfHQu1ncrTdkzd6=tyjzTv8%El(ibXbVCnuR`$%L{A~2`Nyn>D5T_OoWk$ zWwI@xv@tWVt?i(4*5U5@(n3rC-pvUO2weHNTVXlYw)e%jy}P+g>vnZxNbYL=w$QjH zVe`REt?&A%R={6}4L*-_<$btzyp{d63(>_jj)+gVplZ>`+4EZ+=uPpV*%W=)Uk0Gl}7h;G?-h!mmDXsdeeB}ABvJVy@KxXob zbFg`RS1ci>@Od5c?mTq+=(fr6h*Yw)eVi6dl^kxotCi%K_p!V$X}OVtf0yZ_k@u|& z6Z;rTiFqG&IWNZ}`rgnfgXz3yv%_^^bl#yllBh~#nz(*l5IP{oL{jE)Pnik{7c_wGMjSOc^vtMjt-CgtPOc`!de z!)5@^ogd-`+C<0i1&x(*Zi7)^;;9}T*Q^Ta3T^JlUA#l`$&6N_=TahXIPnt=}K ztex2VyD|<$&D*sT2SGLL9**+c0gl_pi-+^)|Mz@;C_^e_?*tbX!m`}B$EV+k+Umg< za=1VL?o>~Ap14u!NAg6ikGBV&J=s}XUS8Wl68?Fc&naNYh>+j+Vt%x}w!E~wy0HUc zw1xll^$1l%_lr?A<>hW4UHVSu36EWfE`8?^p~zV8nx!yBA3V(ud73Mm*Hruk#5Ljb zKqb4_c9lwYXJ;3%F3MG~qI^y90695j0fwn!aeeH-gg!=7V%kTO_|oMFd_FtgrB}w% z$|g>?(-V~FtV^OoC9(9^;rjAYQ?ue7VN}L}Fa)0-ZNm9u>u3%ga`WU2TDS+a>M>yRKDzpya^sJaAXF`I=g7W#6HGSV$w&GS`*&D zqn+mm8(>$Z+oj$4vp#2t&<9I-ZY(~5y4m&3g(T)Z0YZ0%brSC?`dL_{h|=b$poIg) zKb<{4pPxU+z0Mu0;x!Y5#DfGe8+|Z7}3fJ&_@SXz1&g?k_H#mQw7m==82cfF&#FTRcXE1C% zr$?e$%g)js;V zm7DyB_CXaisIc2qArc+|tM@#xlcmt0rGr&6p_U8Nd z?%iiCrG6u6=mRI^jJ$XEi-sqo_Y@!wAOV2=zCxAfM<~tK<|sd%zY<10Jzh4)>b40z zyPkuh<}}~ndj52VXGjscNu(EalVl(+P*nKl?wvb4tMRjk&xLa6{J95+2Vc;AP`ric zhEsEh3z+x3)n`e+^HF`xQK?MR996fEE`8^HbRk|fpJ!|?cIU3I<;xgVj(Ps;l6c^r&mkmJ2EfGPF2T+kCiHkcU!OfYJ=~Zxu22F!cjny*OGM>4AQ9{6q_ zUHZ=Z=t6X<^`$~AL#e2zIW|WWK_BBsR^f+yOerP$n&p`1zkU#(cc}z6oEpy-qe|A0 zzD{+R`kMDqVs!0o)O@cn|Fc zK4xLamI*yx&$;#PET5d6p!t*Klhc!BdX4gQ&;99ab|Dh;_JJ3xvA$MNn&NgpFe)$OB8-+3Qhh*!(!b76C8G>pw}y;VsK{4z$BW1j!| zL44k&k`aDO*nRRfY{0yXHBV2le6{sgaPbmP&gJ!|hhj5Y7Rs-9eiZwa>}emqTMzH{ z{^AO{1Ykat&6CqTgdRfgjMI4$#xk%N~psvPtD*AL?JE|oO>e=|IC%4)#;;5D}stS{q|%I#7jZVj$# z@D+hGz=4)*%>7E7Rx&(Xc0u{@(l5x{cXkGhO4QapXPkI{N~8VxGv0*gEMwj-bxmBb zp5r9Hm@VU;%_CgDR;W1B8BZ?gHoGThs%6mg9A%_aj*K|)$sta^J9i%$|Mqz(e8j4A z)i+h4kMW}_`oQcCd9D=@my(bt>8jI5^Bm0auoJAAG>I6Q9uBwiLwa(;d*@_-gGs=eDzCf` zyQ56ubIkb=CH@}6LL2zJs&1RkuV7zDL0Foqn_lqP!u1^X3q8o?dcM90Pn*gGeflnH z5YRF_I}4v@&!4w_zH4*UUomC+sPaCz=Jcn7|Lz3Onh9Lnq`jO!l2LvC?DQFLf-bf< z7(IcQ-UlEO%=2H#Jmh^O5J{UHkLG$b&gNpjx{CAMRm{Cf=-qY)z4QfKwGVbSmIvzI z=X0feK2~n`v$88u<+H0Ute{rvw)aJ$Moq|e+k~z=1JrwRJzu2V{A77SuIEpv#pCIo zZ(X*6-J4gF${b?;{OlxrX0!8l4A<}8GMFeO^s6%bJfASCY(0do>{fJEKRpUcY)B&c zdSrb}g@8Na=`(o3@qW%^mJEcfoajHO54(GX`(R@pvOXGZa?E|rJ6fE^UAvgwtGJ)r z9sB*>qB6l=dkzO&gkDLQr39v8J-W`jn1l-L_V!Rtqa=k)THHS=q^UDS2!s_7hp zbNd0#ZX{EK9~{0^?T)W!-3z*{U{{km#OJgCtj4Q3&5$j31Ek&gD93fcG~s++jB2#L zUFeE4*Jm8fsC_EeHfJa2kF1Y%m_^U&6W+(@8N~EarI?%kt2+-_A1OrhbZ$~fLw8p(>GW7dbn--TG`K`z5=dy`bo?1pk;e?;SrKKAPo{qLO1Ne zb7uJo^3}y@;t$v7rI*sK zgjc`~iC+8d-6w?@=S}rPAr@A}?UhNPDY{qBkRR5E1c^B2^kc&Mbmt-MW87R-{o$5r zdTs?Hr+r+7KO7`g;))JlE$Iz=Fe$M@yS+VJ<~(xH_U{;g^a#UxEbc`RWvaULloGFo&*A1Qj<1KS3sP{R z<~;a=M)lp<$(mt~^Wc1*{-Q|N)whqFt16XTC;xUtcp5c)?b~coF!bNuxxPkvo0Q%yM>rP`uiUbA+l(n9v%{ z6Jt)CtKsv9h*zVt%;}L9oOtPRsl;g)Lg*g9X2(tAGNf|`XO2<9u2SYFm-_p+P{Mo7GFsTG* zR;Z+_w}~U-Q#LBk+@dutR*q~Qu(N=IG)?L6U&|rJ%vGQg=94*>mtMDgGLCu6j4G4n z_m8J^cNG$0`lLQ;?9y(N1Z`Qe*%i7PSUVDmM|NLc1*z)a6L_U5<)xRzCM%-F;j8055r3I3zTG2+cNz)|6ja?muBXPWP|O=W=ae6L6%vvY8Cd~~>joG)q>rgE_K{f&1V zdiIaGpQ9>(3Joy}EpA_Z*`_1ya^%Qei!8CIvAQg~kHmofwuqu*EPyKxqD*UxRsEU{ zk&o)(eb#yKMAh|sWC<~x2QnX(WmZ+pku7&)7x{R79xRhv4l!n~QYsmj?=|mZLcUko z3L_= zOm1Y9#>f)NWfLTBSE_o95Gl)_UVu)|nw{itm&iV2TxOQ1msiEBDCjKdMZbtl9EG;ml;aPb~&?dY1p`5XGqOBThfmwy2vNIuL_-o%2zJ zC80M?oIRTdO%$9%gpH?XuAEB7=WoyZ2&0;uzrAnG>wPp>LkKGzQDH#HANAN3=#_M@ zm(aK8qvBnuTPZ`S-2Zj{2z(I$d}M_Z$Nlul4{X9D>$T^k4v1!zXQ7cmfDd7U3pW0) zl))09x8y{ZBr@`T_9nGCsb;DQaaXjZN{kt*J29Z$ zeYcr<-xg##M2BmW@>X>_ZwF$K&$H@7aY?xE#x<2)*zI^3goI+tB6^!jylhG(p|lFx zx9hQFeZ)~Yom67)(>{!-9+Fbp-WK&f>iefIA?qlz_J9{IG3KZ*g@6RwHIC>Rj!{WA zDtU9a@|88UFY6<|Ismjx^(vQW)iZYSFROr7J}1dGEA`d-t6E8&Se>p|atZ^ox>+3$ zuf(TF{a8oj($k8bd95wRZZ`R4CSQi|>xV%2J?OJg zd$Nv5?86}{J8c*dA9PQ&_r@w<#5@+j3-iEosToA2O?R%Q*H_E>h@*;h!hz(U3MFFL zJ!@X?qlanZ5tUHxeUyp&r*DDzi12H=KU_8{c{ANX`)F7C&?=@nk^s=6c9Bbrk_h5d zRX(TEwH(hMro~SO_}m#ilxMW1_=MF`E1?II9sl}s^L98$f|FQ#g`e|v_xEOMnXHCG{g z*oTpY5=HsDvnNt6NkLlAX;E$BjuPo;YK6H|PxQLfDAR>i|I{FqYMXVf5%VJ^!Y9i| zu(RXz9C3igQE{R9!4$Bfdn3}V%O3({b);*%PZwh7=_{>?L#Epk3iVX<$Sl0Ppuud(wk|*!yK< zc&>x~?6u$Ae49g&{|*MjK3UdQ}e0+@HOMRTt7C z$>Kv4S}9^YYaPmwEQvWIY>mB)m5xe#coUzS^<*BAKjO=ETrH}qL5$_|*vBOxhy^}% zM5d35^o6PV!%e(1U6NbxyzR>`vzO0MQ3R@H@<|G|hjd?d&-;Frp}b_k;ZYx3>C9 zQ@{N^DWOhZKgXN(zZ1(`pMgS9u@~xF(c3Q@Dc@oR$!N~#f4L$SMS%oA^)(1{`mf9@|MZd|fCN8vM5gy4gZ=q0UVHslzw$-&74ap<@0(no6fcFy zKss&G_IS?M!`|6g^PW*P>4Y#v9~@F^s-%k>9n1&0FwnY8(*PP>?Kz4@zV?egtOX5O z4eye)zgBmz!jJ3{12>Ba%;AU+)=!`H;}Sif zuv}tO9QE@56^P5s)=w~_XCSpr^s4wqzwsJ0d{w&_^n&Im#V*1GcS0FAk zTR*{!pMgZT-LK*s|H}V<%U85}b{9rs||i{E+4~ zvvW$w-OIMU-nbF+2WfJY`0p6^%noutx<5>pUKK@!)3gRCAgbsFmS;eTn%@S%l> z`eUVihZ-%tJHUiq5|B~d#P-&_^M^n*mH(;yDKt+Xyxs7SyrrX@epjGVCnWK68s&+U z2aXO|QZv7$DV?M#F!1v1zq1K`9X`oJS5*hlwz3|Tg~<9S{S(`a zq+rvvQ3B_#$aH}T87(BUL#1eQw~z3bMnne?&-}H6xB7r@ad_`YRiC3_-p=j|-rEcM z2+sXOUg4apFeVQ#==?!fqG)P9=}B+BIE9z?wkpOG(e|ebbm|UmIarVn>2ICvT>%Sy z$d2ft(>e1hp3q6rXYWtXyedhDlYjbRGkagy_|Jl-Zc1cHWnLqATsw_I;bI77_0eHM z7_xZ1q&VHWB%>oL7QQ5G?rEo(eW+7HqT5IE7m0N%BIqnmCJT?UsH-9#BTkh(CGQ<) zx{GKqK1x1Aaag&HkgZ#>nL4;+OdgIJBM%GglNdz_q{6%~Y}f;=dT>g5>1o9gB`qE0 z^t%F`rpy#!cbuG?9nnJ~Ko-F>p%b0sasOV?c}|*2;sF1AOJb2L^Xj8cRz%wx9rnid zAB24k@C@m|`zYkg=Owu}jBbdoU?kM1L+Z`V=9OahL*MaajT10iNy z|D?V3;4~idq@|3h_@~mxn@PB`h`ZzDTnR`xRU#Mq$!

Oc^S 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

yvdZ`i95S;Xf0vd9j#2E1WXURMzm4W#u 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�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 S@V8#itNI7}+y8lCGw|Qb|J%+0 diff --git a/lib/graphics.c b/lib/graphics.c index 0e684e9d..a5de636d 100644 --- a/lib/graphics.c +++ b/lib/graphics.c @@ -422,7 +422,7 @@ int load_sprite(sprite_t * sprite, char * filename) { char * ext = extension_from_filename(filename); - if (!strcmp(ext,"png")) return load_sprite_png(sprite, filename); + if (!strcmp(ext,"png") || !strcmp(ext,"sdf")) return load_sprite_png(sprite, filename); if (!strcmp(ext,"jpg") || !strcmp(ext,"jpeg")) return load_sprite_jpg(sprite, filename); /* Fall back to bitmap */ From 79bdb6fc0250a203f4713f427472f7bc3368b90d Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 12 Jun 2020 18:12:33 +0900 Subject: [PATCH 032/102] png: replace icons --- apps/file-browser.c | 8 +++---- apps/help-browser.c | 2 +- apps/package-manager.c | 4 ++-- apps/panel.c | 2 +- apps/showdialog.c | 2 +- apps/terminal.c | 2 +- apps/tutorial.c | 8 +++---- .../share/icons/16/applications-generic.bmp | Bin 1162 -> 0 bytes .../share/icons/16/applications-generic.png | Bin 0 -> 529 bytes base/usr/share/icons/16/back.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/back.png | Bin 0 -> 625 bytes base/usr/share/icons/16/bookmark.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/bookmark.png | Bin 0 -> 586 bytes base/usr/share/icons/16/calculator.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/calculator.png | Bin 0 -> 671 bytes base/usr/share/icons/16/clock.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/clock.png | Bin 0 -> 902 bytes base/usr/share/icons/16/config.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/config.png | Bin 0 -> 800 bytes base/usr/share/icons/16/exit.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/exit.png | Bin 0 -> 512 bytes base/usr/share/icons/16/file.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/file.png | Bin 0 -> 359 bytes base/usr/share/icons/16/folder.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/folder.png | Bin 0 -> 467 bytes base/usr/share/icons/16/forward.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/forward.png | Bin 0 -> 600 bytes base/usr/share/icons/16/help.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/help.png | Bin 0 -> 821 bytes base/usr/share/icons/16/home.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/home.png | Bin 0 -> 599 bytes base/usr/share/icons/16/menu-tick.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/menu-tick.png | Bin 0 -> 267 bytes base/usr/share/icons/16/mines.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/mines.png | Bin 0 -> 883 bytes base/usr/share/icons/16/missing.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/missing.png | Bin 0 -> 574 bytes base/usr/share/icons/16/new.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/new.png | Bin 0 -> 417 bytes base/usr/share/icons/16/open.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/open.png | Bin 0 -> 473 bytes base/usr/share/icons/16/package.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/package.png | Bin 0 -> 431 bytes base/usr/share/icons/16/refresh.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/refresh.png | Bin 0 -> 758 bytes base/usr/share/icons/16/save.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/save.png | Bin 0 -> 566 bytes base/usr/share/icons/16/star.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/star.png | Bin 0 -> 803 bytes base/usr/share/icons/16/up.bmp | Bin 1162 -> 0 bytes base/usr/share/icons/16/up.png | Bin 0 -> 651 bytes .../usr/share/icons/16/utilities-terminal.bmp | Bin 1162 -> 0 bytes .../usr/share/icons/16/utilities-terminal.png | Bin 0 -> 544 bytes .../share/icons/48/applications-generic.bmp | Bin 9354 -> 0 bytes .../share/icons/48/applications-generic.png | Bin 0 -> 1320 bytes .../share/icons/48/applications-painting.bmp | Bin 9354 -> 0 bytes .../share/icons/48/applications-painting.png | Bin 0 -> 1824 bytes base/usr/share/icons/48/c.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/c.png | Bin 0 -> 2163 bytes base/usr/share/icons/48/calculator.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/calculator.png | Bin 0 -> 1274 bytes base/usr/share/icons/48/clock.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/clock.png | Bin 0 -> 1745 bytes base/usr/share/icons/48/drawlines.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/drawlines.png | Bin 0 -> 1197 bytes base/usr/share/icons/48/exit.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/exit.png | Bin 0 -> 1104 bytes base/usr/share/icons/48/file.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/file.png | Bin 0 -> 2171 bytes base/usr/share/icons/48/folder.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/folder.png | Bin 0 -> 1152 bytes base/usr/share/icons/48/font.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/font.png | Bin 0 -> 1408 bytes base/usr/share/icons/48/gears.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/gears.png | Bin 0 -> 2345 bytes base/usr/share/icons/48/h.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/h.png | Bin 0 -> 1999 bytes base/usr/share/icons/48/help.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/help.png | Bin 0 -> 2240 bytes base/usr/share/icons/48/image.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/image.png | Bin 0 -> 1951 bytes base/usr/share/icons/48/julia.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/julia.png | Bin 0 -> 2269 bytes base/usr/share/icons/48/mines.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/mines.png | Bin 0 -> 2892 bytes .../share/icons/48/package-uninstalled.bmp | Bin 9354 -> 0 bytes .../share/icons/48/package-uninstalled.png | Bin 0 -> 669 bytes base/usr/share/icons/48/package.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/package.png | Bin 0 -> 1025 bytes base/usr/share/icons/48/plasma.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/plasma.png | Bin 0 -> 2736 bytes base/usr/share/icons/48/py.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/py.png | Bin 0 -> 1813 bytes base/usr/share/icons/48/sh.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/sh.png | Bin 0 -> 2262 bytes base/usr/share/icons/48/star.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/star.png | Bin 0 -> 2078 bytes .../usr/share/icons/48/utilities-terminal.bmp | Bin 9354 -> 0 bytes .../usr/share/icons/48/utilities-terminal.png | Bin 0 -> 1227 bytes base/usr/share/icons/48/wallpaper-picker.bmp | Bin 9354 -> 0 bytes base/usr/share/icons/48/wallpaper-picker.png | Bin 0 -> 3864 bytes lib/icon_cache.c | 4 ++-- util/optimize.py | 21 ++++++++++++++++++ 103 files changed, 37 insertions(+), 16 deletions(-) delete mode 100644 base/usr/share/icons/16/applications-generic.bmp create mode 100644 base/usr/share/icons/16/applications-generic.png delete mode 100644 base/usr/share/icons/16/back.bmp create mode 100644 base/usr/share/icons/16/back.png delete mode 100644 base/usr/share/icons/16/bookmark.bmp create mode 100644 base/usr/share/icons/16/bookmark.png delete mode 100644 base/usr/share/icons/16/calculator.bmp create mode 100644 base/usr/share/icons/16/calculator.png delete mode 100644 base/usr/share/icons/16/clock.bmp create mode 100644 base/usr/share/icons/16/clock.png delete mode 100644 base/usr/share/icons/16/config.bmp create mode 100644 base/usr/share/icons/16/config.png delete mode 100644 base/usr/share/icons/16/exit.bmp create mode 100644 base/usr/share/icons/16/exit.png delete mode 100644 base/usr/share/icons/16/file.bmp create mode 100644 base/usr/share/icons/16/file.png delete mode 100644 base/usr/share/icons/16/folder.bmp create mode 100644 base/usr/share/icons/16/folder.png delete mode 100644 base/usr/share/icons/16/forward.bmp create mode 100644 base/usr/share/icons/16/forward.png delete mode 100644 base/usr/share/icons/16/help.bmp create mode 100644 base/usr/share/icons/16/help.png delete mode 100644 base/usr/share/icons/16/home.bmp create mode 100644 base/usr/share/icons/16/home.png delete mode 100644 base/usr/share/icons/16/menu-tick.bmp create mode 100644 base/usr/share/icons/16/menu-tick.png delete mode 100644 base/usr/share/icons/16/mines.bmp create mode 100644 base/usr/share/icons/16/mines.png delete mode 100644 base/usr/share/icons/16/missing.bmp create mode 100644 base/usr/share/icons/16/missing.png delete mode 100644 base/usr/share/icons/16/new.bmp create mode 100644 base/usr/share/icons/16/new.png delete mode 100644 base/usr/share/icons/16/open.bmp create mode 100644 base/usr/share/icons/16/open.png delete mode 100644 base/usr/share/icons/16/package.bmp create mode 100644 base/usr/share/icons/16/package.png delete mode 100644 base/usr/share/icons/16/refresh.bmp create mode 100644 base/usr/share/icons/16/refresh.png delete mode 100644 base/usr/share/icons/16/save.bmp create mode 100644 base/usr/share/icons/16/save.png delete mode 100644 base/usr/share/icons/16/star.bmp create mode 100644 base/usr/share/icons/16/star.png delete mode 100644 base/usr/share/icons/16/up.bmp create mode 100644 base/usr/share/icons/16/up.png delete mode 100644 base/usr/share/icons/16/utilities-terminal.bmp create mode 100644 base/usr/share/icons/16/utilities-terminal.png delete mode 100644 base/usr/share/icons/48/applications-generic.bmp create mode 100644 base/usr/share/icons/48/applications-generic.png delete mode 100644 base/usr/share/icons/48/applications-painting.bmp create mode 100644 base/usr/share/icons/48/applications-painting.png delete mode 100644 base/usr/share/icons/48/c.bmp create mode 100644 base/usr/share/icons/48/c.png delete mode 100644 base/usr/share/icons/48/calculator.bmp create mode 100644 base/usr/share/icons/48/calculator.png delete mode 100644 base/usr/share/icons/48/clock.bmp create mode 100644 base/usr/share/icons/48/clock.png delete mode 100644 base/usr/share/icons/48/drawlines.bmp create mode 100644 base/usr/share/icons/48/drawlines.png delete mode 100644 base/usr/share/icons/48/exit.bmp create mode 100644 base/usr/share/icons/48/exit.png delete mode 100644 base/usr/share/icons/48/file.bmp create mode 100644 base/usr/share/icons/48/file.png delete mode 100644 base/usr/share/icons/48/folder.bmp create mode 100644 base/usr/share/icons/48/folder.png delete mode 100644 base/usr/share/icons/48/font.bmp create mode 100644 base/usr/share/icons/48/font.png delete mode 100644 base/usr/share/icons/48/gears.bmp create mode 100644 base/usr/share/icons/48/gears.png delete mode 100644 base/usr/share/icons/48/h.bmp create mode 100644 base/usr/share/icons/48/h.png delete mode 100644 base/usr/share/icons/48/help.bmp create mode 100644 base/usr/share/icons/48/help.png delete mode 100644 base/usr/share/icons/48/image.bmp create mode 100644 base/usr/share/icons/48/image.png delete mode 100644 base/usr/share/icons/48/julia.bmp create mode 100644 base/usr/share/icons/48/julia.png delete mode 100644 base/usr/share/icons/48/mines.bmp create mode 100644 base/usr/share/icons/48/mines.png delete mode 100644 base/usr/share/icons/48/package-uninstalled.bmp create mode 100644 base/usr/share/icons/48/package-uninstalled.png delete mode 100644 base/usr/share/icons/48/package.bmp create mode 100644 base/usr/share/icons/48/package.png delete mode 100644 base/usr/share/icons/48/plasma.bmp create mode 100644 base/usr/share/icons/48/plasma.png delete mode 100644 base/usr/share/icons/48/py.bmp create mode 100644 base/usr/share/icons/48/py.png delete mode 100644 base/usr/share/icons/48/sh.bmp create mode 100644 base/usr/share/icons/48/sh.png delete mode 100644 base/usr/share/icons/48/star.bmp create mode 100644 base/usr/share/icons/48/star.png delete mode 100644 base/usr/share/icons/48/utilities-terminal.bmp create mode 100644 base/usr/share/icons/48/utilities-terminal.png delete mode 100644 base/usr/share/icons/48/wallpaper-picker.bmp create mode 100644 base/usr/share/icons/48/wallpaper-picker.png create mode 100644 util/optimize.py diff --git a/apps/file-browser.c b/apps/file-browser.c index a81c1fbf..6f525f8f 100644 --- a/apps/file-browser.c +++ b/apps/file-browser.c @@ -462,7 +462,7 @@ static void load_directory(const char * path, int modifies_history) { if (!fork()) { char tmp[512]; sprintf(tmp, "Could not open directory \"%s\": %s", path, strerror(errno)); - char * args[] = {"showdialog","File Browser","/usr/share/icons/48/folder.bmp",tmp,NULL}; + char * args[] = {"showdialog","File Browser","/usr/share/icons/48/folder.png",tmp,NULL}; execvp(args[0],args); exit(0); } @@ -1289,7 +1289,7 @@ static void _menu_action_paste(struct MenuEntry * entry) { static void _menu_action_about(struct MenuEntry * entry) { /* Show About dialog */ char about_cmd[1024] = "\0"; - strcat(about_cmd, "about \"About File Browser\" /usr/share/icons/48/folder.bmp \"ToaruOS File Browser\" \"(C) 2018 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); + strcat(about_cmd, "about \"About File Browser\" /usr/share/icons/48/folder.png \"ToaruOS File Browser\" \"(C) 2018 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); char coords[100]; sprintf(coords, "%d %d &", (int)main_window->x + (int)main_window->width / 2, (int)main_window->y + (int)main_window->height / 2); strcat(about_cmd, coords); @@ -1470,14 +1470,14 @@ static void handle_clipboard(char * contents) { struct stat statbuf; if (!stat(destination, &statbuf)) { char message[4096]; - sprintf(message, "showdialog \"File Browser\" /usr/share/icons/48/folder.bmp \"Not overwriting file '%s'.\"", cheap_basename); + sprintf(message, "showdialog \"File Browser\" /usr/share/icons/48/folder.png \"Not overwriting file '%s'.\"", cheap_basename); launch_application(message); } else { char cp[1024]; sprintf(cp, "cp -r \"%s\" \"%s\"", file, current_directory); if (system(cp)) { char message[4096]; - sprintf(message, "showdialog \"File Browser\" /usr/share/icons/48/folder.bmp \"Error copying file '%s'.\"", cheap_basename); + sprintf(message, "showdialog \"File Browser\" /usr/share/icons/48/folder.png \"Error copying file '%s'.\"", cheap_basename); launch_application(message); } } diff --git a/apps/help-browser.c b/apps/help-browser.c index 994626a9..128a5fd9 100644 --- a/apps/help-browser.c +++ b/apps/help-browser.c @@ -321,7 +321,7 @@ static void _menu_action_forward(struct MenuEntry * entry) { static void _menu_action_about(struct MenuEntry * entry) { /* Show About dialog */ char about_cmd[1024] = "\0"; - strcat(about_cmd, "about \"About Help Browser\" /usr/share/icons/48/help.bmp \"ToaruOS Help Browser\" \"(C) 2018-2020 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); + strcat(about_cmd, "about \"About Help Browser\" /usr/share/icons/48/help.png \"ToaruOS Help Browser\" \"(C) 2018-2020 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); char coords[100]; sprintf(coords, "%d %d &", (int)main_window->x + (int)main_window->width / 2, (int)main_window->y + (int)main_window->height / 2); strcat(about_cmd, coords); diff --git a/apps/package-manager.c b/apps/package-manager.c index d26f0384..abadf363 100644 --- a/apps/package-manager.c +++ b/apps/package-manager.c @@ -341,7 +341,7 @@ static void install_package(struct Package * package) { static void _menu_action_about(struct MenuEntry * entry) { /* Show About dialog */ char about_cmd[1024] = "\0"; - strcat(about_cmd, "about \"About " APPLICATION_TITLE "\" /usr/share/icons/48/package.bmp \"ToaruOS " APPLICATION_TITLE "\" \"(C) 2018 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); + strcat(about_cmd, "about \"About " APPLICATION_TITLE "\" /usr/share/icons/48/package.png \"ToaruOS " APPLICATION_TITLE "\" \"(C) 2018 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); char coords[100]; sprintf(coords, "%d %d &", (int)main_window->x + (int)main_window->width / 2, (int)main_window->y + (int)main_window->height / 2); strcat(about_cmd, coords); @@ -439,7 +439,7 @@ int main(int argc, char * argv[]) { char * args[] = { "showdialog", "Package Manager", - "/usr/share/icons/48/package.bmp", + "/usr/share/icons/48/package.png", "Only root can manage packages.", NULL, }; diff --git a/apps/panel.c b/apps/panel.c index d1e531bc..8b42600f 100644 --- a/apps/panel.c +++ b/apps/panel.c @@ -824,7 +824,7 @@ static void launch_application_menu(struct MenuEntry * self) { struct MenuEntry_Normal * _self = (void *)self; if (!strcmp((char *)_self->action,"log-out")) { - if (system("showdialog \"Log Out\" /usr/share/icons/48/exit.bmp \"Are you sure you want to log out?\"") == 0) { + if (system("showdialog \"Log Out\" /usr/share/icons/48/exit.png \"Are you sure you want to log out?\"") == 0) { yutani_session_end(yctx); _continue = 0; } diff --git a/apps/showdialog.c b/apps/showdialog.c index 2dbb2c71..e9acd6ba 100644 --- a/apps/showdialog.c +++ b/apps/showdialog.c @@ -74,7 +74,7 @@ static void redraw(void) { static void init_default(void) { title_str = "Dialog Prompt"; - icon_path = "/usr/share/icons/48/folder.bmp"; + icon_path = "/usr/share/icons/48/folder.png"; copyright_str[0] = "This is a demonstration of a dialog box."; copyright_str[1] = "You can press \"Okay\" or \"Cancel\" or close the window."; diff --git a/apps/terminal.c b/apps/terminal.c index 4b6e51e1..ce30ea4f 100644 --- a/apps/terminal.c +++ b/apps/terminal.c @@ -2179,7 +2179,7 @@ static void _menu_action_toggle_free_size(struct MenuEntry * self) { static void _menu_action_show_about(struct MenuEntry * self) { char about_cmd[1024] = "\0"; - strcat(about_cmd, "about \"About Terminal\" /usr/share/icons/48/utilities-terminal.bmp \"ToaruOS Terminal\" \"(C) 2013-2020 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); + strcat(about_cmd, "about \"About Terminal\" /usr/share/icons/48/utilities-terminal.png \"ToaruOS Terminal\" \"(C) 2013-2020 K. Lange\n-\nPart of ToaruOS, which is free software\nreleased under the NCSA/University of Illinois\nlicense.\n-\n%https://toaruos.org\n%https://github.com/klange/toaruos\" "); char coords[100]; sprintf(coords, "%d %d &", (int)window->x + (int)window->width / 2, (int)window->y + (int)window->height / 2); strcat(about_cmd, coords); diff --git a/apps/tutorial.c b/apps/tutorial.c index 773ddf29..f8d8cbc3 100644 --- a/apps/tutorial.c +++ b/apps/tutorial.c @@ -328,10 +328,10 @@ int main(int argc, char * argv[]) { /* Load icons */ load_sprite(&logo, "/usr/share/logo_login.png"); - load_sprite(&terminal, "/usr/share/icons/48/utilities-terminal.bmp"); - load_sprite(&folder, "/usr/share/icons/48/folder.bmp"); - load_sprite(&package, "/usr/share/icons/48/package.bmp"); - load_sprite(&mouse_drag, "/usr/share/cursor/drag.bmp"); + load_sprite(&terminal, "/usr/share/icons/48/utilities-terminal.png"); + load_sprite(&folder, "/usr/share/icons/48/folder.png"); + load_sprite(&package, "/usr/share/icons/48/package.png"); + load_sprite(&mouse_drag, "/usr/share/cursor/drag.png"); load_page(0); diff --git a/base/usr/share/icons/16/applications-generic.bmp b/base/usr/share/icons/16/applications-generic.bmp deleted file mode 100644 index a2c249df283683e6e301ae9320d9646c053105fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmbVL*>6m77`>KPiT9ZYF>`0;F7qGEy!1spG^8QcT1uk!rKMDhDp74jLK=H4wN&c` zZEPW=mQuuCDq`Q`0U_~poO8E|C+23(eDk}%-#Op;zVA0h#f^gv?`h7Y~49*gYr@8K&ox$;0X&j^GVQTH8&JOyLpQbU%h<|CJ zg)56KbT6@Ry~2-Ix$atI;lg}h>jZV$=}CT6-&T4F`*wS&jr+@OJgTcZ7w;Hfu6FRW#_@D}Ds4|gwW*%g zGQTGw{{^`p>s@@^kj2l9S$uEE;`2Heuh+QfqqclpV{NLXqdenz*iR1;pSeDf|Bbv~ zO|A^xL27ROn{Qv*} diff --git a/base/usr/share/icons/16/applications-generic.png b/base/usr/share/icons/16/applications-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..26500e435b822168f13acd4da38419df9b5aa343 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqraz%V~EA+rIQVVm<5c%NmGloo7&14CMC2VV({7<+)QNF@h*;y?0;OhlWv+xPmBcd8rCm2|M z;;doO4=^qX@?21+wBfAk6WwXo6C^Vpi0)Z1>+qs9t>aHFESty4EetTim#-e7=}dJ&WDMv)!9iIHXP9FZ5ep@LGcZ)&BE8 z*;W2>^M8qYw;34TswJ)wB`Jv|saDBFsX&Us$iT=z*T6*A*dWBf(#p`x%GgpH$S^RN iT{6QFMMG|WN@iLmZVj(A75)M>FnGH9xvXDvEyRTzQs@*Lg&K>g_WX@R?(PmvqkT@bw<^8c6Q8vj4gXb;Bw8|?q@ zsk8gPvD5+s&rH>SQV7u>T;wkQy9lUvWwG`D<6YiF;q7%!AUA=+1!T_uWySXY&rS{} z8t-ZKLD9de((V71ImtxhL%m@z{b2VO1Kq!^HR%8CW%)$m<5Lr0`aymGhabp{o!wFY zAFi(k;|J@i{@+3=F)g#t#;LApIZ!HAC_L-U*5SU+icH<5P2TLH3|y^!S6A sfMmv@=~@5Z9h~z2+~RU#(+`FjyZY1qFRKYACH=z8pd|mm%pjHq0Mp1$%K!iX diff --git a/base/usr/share/icons/16/back.png b/base/usr/share/icons/16/back.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab79924b69bb49b35d8e79ba2a4a49fa5ce0f39 GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<9bgQ#}JFtOD9?TO9u+Ho{zcT!4~P@AXfKLfM1*SsF1fpOG`_N z50{3ulF~fgGZNDRn4V-LP)*R(p($IJ#u552b(2VJk8+v9G zncUy`e4gZkxvu)A%ol%%7@lX;FqoQr^J?q;^_(2+GM)8P7d*`<*<>%nr+p-8<22@n z4Xi6CU%p)A@Uv&$KLLi4YeEywKiv32T=K=M!}f=rE^c95plb24d9~rSgO6rU^I3Dj zR)=M!@?*i9SA|#g7(BkVt*~@v@t#%L?Kgau`)zr$C%(+*NV>xkzP`TGX7T2q+Cok5 zT)6Q>AS08XVag}QhLmTm6O2@5+d4k!PK#ZweQ(MtV*_33%Efj&ls>!&61w<(@tOJa z&0;p46kg+fz(8KshEp&rd%co$^xtwv;~h2Jr!_2C_53GV-&@(j!EiGrNmHQn@%wkX zs*-PRT6mM2LF4K9!mZQm4l=)P=&-e@sN!}Bu&=Q9oPN8x$dKLp_KpkJp4spFHg}cx z88u<=Gc$Bw-Y$FiM&Ma1AA|eWPX)I5G4e}{-raksoA^Xz6PHx5W!c{U-s`Jf^Vj}= zRJ3B=`uYn+!1z=xag8WRNi0dVN-jzTQVd20Mh3bDCc4H3AqJLKhGtgAmfApufx+yO g8IC9#a`RI%(<*Umc%`ZE7pQ^3)78&qol`;+0Qh45?*IS* literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/bookmark.bmp b/base/usr/share/icons/16/bookmark.bmp deleted file mode 100644 index acae97e1f8b2f700a3bde9c3f0cef7755892cf0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Seglo!o!l1 zx&I|4bIt>?s*Fq?7A0UIkQ_)2NG(VYOdW{--@st^e|7cQ?vudBNWu9uL0ki3DxuK!9(JwV*~UtfPGieBRMgUrB<@wp$LKA0Rn z{dRUo|A&NJ`EP2v4~#=XF8_CMIELaLeELE93JahA&&zxAKR5R&m~C!;fN1?jMtk7; zK<4DPO!zn5Ez_*cM%fH}! L1T>cz8kT=bk0#mp^XN-B9)9PDwiz!8~ zx^;DW3lG=3F#Kg+de5^#$m)G~*eYK~28YOLQ={~Ktr-^OopM@zG-!A1?#?yZ`{JUN zrwC0}3En<~t7H1~$gJ&|CbQ3+J~&SAdx8xKFM|JT*>`*yUGruuZoXOCvM zZ9ciza4N4B!+YE2Ztj|S{zXf_$IP7*VDa6E!J$Rb$*XJ8f#;Tu0vwiqcP>kl4m@)9 ztEoLZGegwt*L%8@?o`-FD{P*2=GIBeoqKA&Ezhbo@V0r~EM&2L8qO%zZrhTAcOv>!Df8S6?}o|NNU>*4uhpyKBtr+?4la zo>z40H`lbd3!{3@oh- r&8&kx4Py>UftDnm{r-UW|Zo%#G literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/calculator.bmp b/base/usr/share/icons/16/calculator.bmp deleted file mode 100644 index b7b7ec65654bd5c9d24296bfe8c96355e5defafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcma)5xvC;T6zy4=C+@-4SQ@Hk7kx^6Mzf^pG!3X7s@`;SfKY#lN{=N(- z%Kt}s3PgUs67T(fG%)X)QkIiO-S+hg6($8JhXbrS>@n#IuQs2uvjeM@p$0% zdNCf4VX;_XGMO-+&(UtTb@j}fw$tfU;!h?M5O4ML`$(TiBv2}qM4!!OLA+PL+wI_X zyAcY7B!8dJ2ZAxV77PY)I-LyTlbg+EV$VHetpw-GxP$-BdlgWUf zo^_;BDO@fWL;Zfgmpu=M!;*vF?+3vgcqXicF^u+)zG=&PwfVo+a=l(3>ht+L%x1GL zlF1|<>B(8GR&={vbUGczLA_o_wOU1`QW2lG+f6UN+~33DfOI+yo6QEh-42JtA@|Yc xa>-gO7UTKp-QOBx4TnQH-~0UzJ@9--qY-;hdwrVKRlb9q`U$S zhE{x<_FXQ*z{zT-rN*b0bAM%2lbw%0ShTx4*Qe<`s^3(Ywudef9vhH{=a`~c@Ag1sjIHuJXytZzTa}L zA3IqBynf!zn|}FnaN1@`r;eo>T}^Z6%I4+gdtTo1ot5E6TjGRen(683Pb$yV*ggOH zb*jzzKrch7-V3F&iY>wZ{|a4}id0uu$Hc~(M!hJp(pWmJ=+|@a=7S81EJ0qUHnBKd z-ty~Dq<4eOc}p9cBb#*c^73AM|IKjc{(a##Mb|(Bx&Hm^8ME3RTWpEaT{6X@FZg-x z?PVHVCceMr6j~B2WR#Y&Joxl!(>m9{koPYaKS}3iXJ?-?XHGz$g0plyi4? z4+(93|NBeT-lc7!V)IUK+7f&H=q8;dQ+BN5ZpfVV=H0uXX{y=T*&0jd&0^s9oHXZn zVNd2Ph9iYB;_u(Ri_j7CQ4?<1AJ32)`S0AO9-Y%Q2Np*9d#!9gd-kmT`_B4@Qrb!v$wmnj6$#V` zqE@9MK8g4&Q50ObP=ngmg`jf!-Kk@Aq_o3azi;M#_sqTL9QO?NyBvSn*{_Yo!)4s! z9&vXl!}8xB{0VwoUf{UZ&FwvX{!&Q%?|S@AB5i(f2$F86QPO1Zz4-%}_Q zA6b5`QmJ6G+2Hkhkw_#EjYi>exnQ+g=SrpWy<9G*v+FqY{FT+hY&N4%D4<*}qgX5= zpU)$mP9vF2@>qdD07j!RD#CD5t;J$NtJOlI(LlXkUt#$Det0~d6-FcyA&d{pSsqKJ z(z!;XL9^LJr_({Z-QK_;T)W*a?t^9_KHjl4_z*C{;qVXkZPFOS z;SiI_WCJ4@3}R>J8FqI+ih*CcZY6N^Q&{)`dLAd`eyy zJba(+bIg-G2K6D#BIcAl#{5KH7ykzcgZkiSAwDXV3Pz(527>{z*(`Z%!8j$ai))2G XXeB;~(<(bRSqAOt9eI8IEbV^-*vVMv diff --git a/base/usr/share/icons/16/clock.png b/base/usr/share/icons/16/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..7d003ac6c105763d73c07fa0c9110c585e5e1dff GIT binary patch literal 902 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(-BV>#}JFtxs&5PqRT~&+nY;rDw{ZEeyjPxN;v=0(oi z#y&sH>wXuX4v)Mn&%~!kw>u@imh+NaBl*U3({wY8_5e)`#O`RC^Aum5J%*8a8EJN&WY zPyfo5nyHb~Hswaooi|VG^rkBxKW?;llur>Fq zsj1oBzi~rh`e{Q8i;j*jmkMQESbQ&^c>a0DvdZG>YU`4ck}s>R#k!Z4#{Sn@821t^p;+^{PgM5>KlX!e5{U N22WQ%mvv4FO#opnpOXLp literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/config.bmp b/base/usr/share/icons/16/config.bmp deleted file mode 100644 index c929248473bfa8b09203515d954cfef18796ca08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcma)4T}YZ?6t>lV7$jpQ;ZOOSB$9vm12b4N!&0QC2qDQpB_$f7D+eNCm_-`>2_n%h z=6yGVt~S`st_Hi_Z8w9lXuBD7Q+syaZ#pDCqL=S{-+RvUJm;MEyr0Wo=@D?NLhn4; zqn33E6oPJs5dO9IpE0+!AQ1e21TIhDRU5eN_s(sJJiNz3q3}gtU*B`GyFB0yS0$+r&KD1 z+wDd$7=+*N$Mp0xY&Khy^74vWK@;iDhlYmW^Z5{oL@+-;k3b;6`BXnTI5^nWKb6U3 z$K-z|{yVa=TrNLTDwP~Rkw_pKjbdS80dsS6(CKtgIbcA}nj{W_8RI62NY;2%dEFzc7vAKVu zx>B-EE!%$?85!aDTU%RPuS~zUx5xEUE|*a#6xewmj*X37*E0W9uh(OBb@jqxv3#Wc zmDz0O`rqB%1|qY?do4D`+$tTn@UE6O+lrr|pc%sK&X~YUSqDY&LOtc!*>&c}C|} x64uG(+iR%yZ@b+Nm&=98$;nHH!*N3SloaFR^Ti&}8CCROGwXFaoqU|@vA?Wq_|5SSetagIUuKM@4f3cZ{9q#REYO*#_n~$FKyCs(%k!HhGAQc9lzp{wU;knPH#(m zQ?mQ+eCGwX-^#t*_3rkzy^B_9aW*lm4ddRH`}ofvnUg6(bBdQ-&diuK?Ny1@`O7a$ z9#r1@zTfWBmoHzKolZnMo$zJgQ+&d{^vl;rj~?~L=&>J@IAqZB{&$9n)Qj)G-}CYF z#|y+vbXr*89yn#~&!0bY%x23fISM>@@PMKD;Df0}q8DC&m5IG>9(%oZmWRrujS)FF zd_`P8*u3wFE7wt1S2xvsdg|Z5eb0C4Sv(hTI`G-XLv!^Ls|QNUGVd*&QgqdvK!$nC}Q!>*kacg*`sqh!5fx*+& K&t;ucLK6VAh_wM#%q3a?z!jt?tS;X_u?a|D))1x_@9M3qr$bgN>!*g)cm5< zuDo-9KNn9Vr+lH@7>fvB$5-3mjCbNKbi*#(Kr^@qgXDQ57mObncR(64&;(KMFmu|c zkbi^udN=^-qF&|O;Ju3B{yXM5CT5}5@^GDL=FY&cQOMtG^#oD(a|uuI4EL}ErTp4Y zXHYL2O*=~Lhk1CgxnlP(e~)PvE&4NT2HvQDi<;NP7+=7L>HYk=<%RD5l-eZd{MC>J z=}tg?^>YopS26709r+P_!Gc9;hM*4)VFil$)6}$&-UF|BVLS#pi{86Z`}^mwHJ0HV zuHYJcZ%Uot`)AN=|0MXn`B;vB&ioVq^zWl@gH{-TPUs3yZ4Z2J6mvnYzUz5^g1#}0 Jqev6_zX8+7%18hJ diff --git a/base/usr/share/icons/16/exit.png b/base/usr/share/icons/16/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..7a65328d984b0cec168c3fb33fd81f9d29e03eb2 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj11EZa%i(`nz>E28B9x;vrY#;8g3_Ws4O=HQnOG>>l>61HdaFmHP zDMrk264-g{n45I7Sdwl>>(sdk${b=%-qrP1m)WJ-U{64*ICn9}4Z0$%;6Xp?qPIz?}tMg)#{Y`-{Sk zmf9(*W-O5VcgjA%WkZMPnde&hd&&)KoA*Dw{!#ZD{|qPA_(!!|)<3#xeO$!#GmfjO z8MfP><vU3N8k zN)iX%V-lod-wWipE;MhFk~?g*p*{7^BZ<452ld*dXNQZP@t7RJvu`>ucvVYWBT7;d zOH!?pi&B9UgOP!efv$mxuCYOgfu)t9nU%4nHjrUpFuP=iBZ`LH{FKbJO57S=X)62$ PYGCkm^>bP0l+XkK+NHmY literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/file.bmp b/base/usr/share/icons/16/file.bmp deleted file mode 100644 index 8ce4635b5221959b83b091325f618edc935b8477..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`SeglkLiTOj zwsmgZxbo??4Xgfd#g0L89osgnW?Qvt6}mAXz5l;{{YngO2bzzr{~5?mBK3pZfvz9y zW+L^2)Z)~C?b@~f_%O&0eENxT13vxu>;}n=+CM16pVIW(1xo)!0#F`APrso23o--j Q4v<+`Fh~xRPm%L406N~VE&u=k diff --git a/base/usr/share/icons/16/file.png b/base/usr/share/icons/16/file.png new file mode 100644 index 0000000000000000000000000000000000000000..e5cf4e56fb8fea7ff4c3ea29be698868a167e4de GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gyysi%u$h{fr*lN9+58Hlv)cUREhGw{hbHGS8}$kJB8^X!0+gJ{$0 zGdbc3zAGvvrcKF>%<}vZa{1f;d-sio+p;tz0|z%<`SJ?BDArF?af; zPA=WhZf4FaGqbo)LL}_KE^QBnQ=4RXrIQ(A`Aj+Vj$9T#Vk#l{NBU1vv*(6&kCTJG zvS>Z|$YlF<-i8?`zg5*MXhr_GzI!rjQO)M;@_Tb9#!vU&;BF0cuxg2GL`h0wNvc(H zQ7VvPFfuSQ&^0j8H8uz_u(UEXvof~S1~Lo`W|z!xMA49&pOTqYiCe=fO@+Te4Gf;H KelF{r5}E)E3x7ZW literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/folder.bmp b/base/usr/share/icons/16/folder.bmp deleted file mode 100644 index b688583761d66267e9760e31e01fbe48c3aef497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Segk<;o*pg zi2r0_xZY{;D*sm|ijagsdSLdhO_%w!FoNSFi0&(4^02IVx9koTg*tpAU!bs z`|EA~pXhTX34`>&^dIl`{(p9QC`lNk2d4kR^yvSW7N(MfL3&{NZ!F6Ge|>ccNf@LD zrvKr(>i>7PwvdEDdSLor?dtyjaNiV?Fh~zf|EFWK{=Yo2@c*+Di;2P@wIDq({a3e5 z|Nr~aDv~fr4@iGvVj|oen0ds~K)sI}8yo*$xpL+I+qZ8?!azNbfO@@w_z%d8=g*&` g=m+sZ;y5tKUay9R22geenehZo9kM)HmPg?N05hbXu>b%7 diff --git a/base/usr/share/icons/16/folder.png b/base/usr/share/icons/16/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..432a85516ae1bd34cceb265d1270054942057e1e GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqoAjYV~EA+sS^zS4m$|A{y&!1%&p=bBIb9RQ)8k9!_sOM^K+UL z_B;|P^nBmcCO0Mc!m&w=ni>m^Cg;oOvkFLeX?(tYvHEj53xmc|J;pN(a~Aj~uARFq zv#MWK(Eda0B$d7?Mb-w#6i#o7%>hbqExn@Dwa9>jsUT>Y>L;7{4vRir!Ho~@SIlFd z-ce9k+WYv!6juFib(=f)4zMyDpWm>`yl2Br?spFkd{k%npj&a>)Mk6yoA~Cai`-$e zF7#YqBfR3E{lR0OSg!D~%s1_k-N+Jp^>1#1LM2mffl1AxLYDU|vEQ4fs?A`YezQS< zk9Drh;ixnFrJ&D^#dq}><*R&2Zm1|_46_e|8Fd{z`%R! z?fxHVw1?vbnT9`#Jm6*s6}roS?c3Mv{{MKFH(q?K6C%GP&jMtIYq6UgT>s(j!2f3_ zhZBt#Fb&8f#~;4*1df;MtLy&1J2>V4 k?*3$;y+rE;nR_3UF4i_j{@>D-NUC0teoFHX$P7XN02}~Q&Hw-a diff --git a/base/usr/share/icons/16/forward.png b/base/usr/share/icons/16/forward.png new file mode 100644 index 0000000000000000000000000000000000000000..5f81b61e1f7b2c3429ea1a0ddb368b3b2b8c3402 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<1|kf#}JFtYbTxdiVhTM+rPK?LxuO$3g(rDtgM3Ri<-naG>$pQ zS_sN?{9xm(ZQR#z;}P=@4nLNUOp7c63le%d9;wb+5@Hy4NyGAEK^c427S3M5zv}F%bQmD9QyFWLUig?hBs{6BO>RR2VA>w@=*Uy z_J-fPpIyn!O8~gq(%Z-R=vzD(6g7atVuxvb`xc?h7+lle67tBG*&N>{`HRQ!R0gC`m~yNwrEYN(E93 zMg~R(x&|h?#s(nqdvK!$nC}Q!>*kacg*`sqh!5fx*+&&t;uc GLK6V*qWgdV literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/help.bmp b/base/usr/share/icons/16/help.bmp deleted file mode 100644 index 405311facb1e952c767362e3c5e330f1bf7bdf6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcma)5O-~bH5MIAeCjJD^ejU7u7cQnE2TV5Gk6^6Tn)rE8G*Kc6)XuzoEW1m~j`M7{wM%R8%|5&H&NDOb%)GO;^&PtfV|DPm znQ_3x4&k7%3k>s#{RLoaE)s;&Bh;Qcd#gzN?|0`mhKC&v#}lX1`Q7DmsVoDKyIFTg z6vcnJ?`5u!Z4^(Vqz9Yo=>3C}G}3b10LyytcAaveQR-nE*p|n^egfzDt~XGGeMVc3 zRRwcu>$Qe)j$tjoNlYL>}-*y^80YoyI%Q(5J4`C1g{x zq;KX)&*w-@FO~GL8SAWP9|!vJl;h|jpPMFo>=q>CyX?0}S|&x)Z|+$*w$-1vy3x}l z*G(UvU8Sjk%N0;p7YzSu+-UEW;vG>u+(Zev5?Y4O|NW~f7azQ%nD^&dctkXeiV xIuxL($NN`a diff --git a/base/usr/share/icons/16/help.png b/base/usr/share/icons/16/help.png new file mode 100644 index 0000000000000000000000000000000000000000..025cbe9cff226d1bb4e0a9e272d54ebc8dab8984 GIT binary patch literal 821 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ?aLuV~EA+++bhtXh#uSW zy)$BO^d2jTH5B=ky-K&_avRsD1FbtWVz(%)o$VB>v9iOdwMjn0bke>jdr!{3?aTY~ z!=c8+b34D!vp$o$qPxUOR(TOm!*Q>bd<+lf$TLM0#+K(578Y)fI*k`ne|u~xjZHoz&%iK+Yq`a}+sn>w_1~5&YUiP8ye!jdDicsGOY_02`xgHA@Zd(v zg%alJt%@y#+#J}d-j!RP3C*sQ`;w)5G&qL?XD+Wu8I85~P1J$6G_`OfKc-J6zmpMTKNGAm#b*XrBq zym~Ix^2t5Duf0}oI9lVdF-AEe%Kpfi3>K;M6W0qF9PY3$4Qc0N__>HVqj&Qz76YXx zukSE21Pd{EJf9;U`8<8%CJwWXDM}g!bE13swp`M*cy)xXWce7W67rgmHX*L@i^ox5%_mb|OqW_#TJzOIhWnHLNSOV3Cg-q{8(j=1~Uw!T4aysZ#UTG@)1!`dMboFyt=akR{09FoW=>Px# literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/home.bmp b/base/usr/share/icons/16/home.bmp deleted file mode 100644 index 34fc5d3f55e230d769d4b94916c74f0f2ecefd53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmbW0JxBs!7{{-VHE3vTXlROPY-$oDNLqqGXowpks3kChDDVU)1&NRZhrk@dte`@J zQX?!AN-)t3Z0Pzr6m+Pu;OYIJzK3@ZXvh8Tz4v+kzvrD^)1<3gP#+ijt}}WYbO-}N z7dot8?5Tro;~_!NUcodzW#f%j*G@w)X|-DEpJ?vZ>>!22zP5nF&pnv$r}*j+UD`)l z0$DiRkJ^SQ=^WKaxy^Lv7j>Z4oPopr3;P(QJ!Xyjzyg&{H+7)aoPopr8@GirzG;nz z&?pZlG!6*tRoAD`-P~FzH@tR0SCS)irO4Luho^guMUTU^7%YftJSt( l&I@xbj33NU6h-G_kNO|r+zCmNaGf#Z&5&#E8?L-=`wI$Etq=eJ diff --git a/base/usr/share/icons/16/home.png b/base/usr/share/icons/16/home.png new file mode 100644 index 0000000000000000000000000000000000000000..307d9fa3ae0ef9539bbba6432f0c3ecc2f83968a GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<5W)<#}JFtQzvcgyX+w1+Mj&9Z}9>bCxuqu6$0@Nok!RMmbrUP z{>!x_qJ~xTW$=Xy&ELc`97HxW3b=&v&6+FOuWr_=n4G_HQoiN;yNiFXJI3rW>51hB zDT~9I!PB1pEZSLfT=&zznfLX?xb1lkUp^plIBV;!v%57CaYtQ@_J#N?-)RnFuS5*FK$JEOGKac!2U(dnt=c0(}`WFQ`I<9va z8g#bzerJ-eH(_1Dz`n4P`EJCkc18X+Lx%Y8Oqo8pvlg#;&ag5dCGg#u!0GMH9CO3- zzq1L(*GaoPD+@Wsdtf6=f&iP(`|k#o_dH6>-hBMn?l|L>%+eg*g0+UJ>Ke z@Jlr`Z&`AwAa~WgB|5V>d9JE^rTX3YSn=e$bVGjlr1vXddvYC~Th)2&yPxwy=8|hR zjxXkfT(uIo#Tc~EAXfb6=Zy|`8FKjAoXggz2Kc;cQ0n10#I@*i)7%WESDTJ~a@V-- z=>Pu5*UOjO7AMs+#n_y*v&ns0w(AGCVA=6@cUvK2V63T@xJHzuB$lLFB^RXvDF!10 zBLiIn6J2A25CcmqLo+L5OKl*-z+iUC3`Z0Vx%nxXX_dG&ywX(o3)H~i>FVdQ&MBb@ E0FJrzo&W#< literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/menu-tick.bmp b/base/usr/share/icons/16/menu-tick.bmp deleted file mode 100644 index 51767cdffe29d0f09f7ffebfc3ac10f62d256f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB${*o_U=SAy{xdMZ5rdO^P%%t`Sel7gg`?`o z4gq9Nh)t%RuZ#rWyS}eZZ8$@D7OA0x=H|lLCUO_QmvAUQh^kMk%5tcu7QcJu|bG|rIn$Xm9eEZkYQjjyJUtViiX_$l+3hB+!|hK SD*Od%VDNPHb6Mw<&;$U`p-)l( literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/mines.bmp b/base/usr/share/icons/16/mines.bmp deleted file mode 100644 index a4bd03fd4b9bf1ea7c85e3bf477d0b99d1b5783d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcma)5%We{37{$xBt!>g!N-0n%ml>dRfHE^OTqbQ$NJ}dwY`WFGaqAQG9ZWSofJxQF zjfqj?E10&hFeWuV#pgL+8PbId35S2?|G#to^Ih=wPws~FbAsO&z`ZGMg%Y7VJi+;o zxohxs`jJp*_6_;nN6&+U|6OnYBe1c$y80m!iCkd)jP>Qp%E~w#4qr{d=Tq!`!Pz-t z&HyJGjZ&(Ky+3%CwY4?Dvmj3ReiJ+cN6#38_bY%JAGsfo$Cb-x#;&ig%f`lrq*5tK zCX*72#grdtPUGHT{h7^XWpi^=d5k45olZ-!Sd^`;Ey?HeszcoX)Pavntlv%3RDEis zQYA6Xg5+{J6M1CgY$nx?~ zY`ZPHySviucBNWs!IFpM>_>F+XQK@AY~* z1LP6Rr_pF=59{^1_Ln&m)FB`FbAD@>onPb=^ub){h2YEt{yAejqdw*#`2X-fSjGO^ ka=CmCpP!J|DRd|Bc7>Igz$XSLoS$_NW?ZoFf z0!;U+PiYJeQ#C_v;Lx^NgvCnrS9)Mk>G0~HgUeo5@n@07cr$zQa>(A6sPxm zT=k2qqOh{^=j;EjXO?|XQ>Px# literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/missing.bmp b/base/usr/share/icons/16/missing.bmp deleted file mode 100644 index a8cde2ba94ece229db8b1027eb4fe3c4c3c66a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`SegloLiTOj zwsmgZxbo??4Xgfd#g0L89osgnW?Qvt6}k~1z5l;{{fZTzK6&$hTx9?M%^OdG@M9;N zax;CkLS!?Zf$YSlAEejHwBo;w?bQD!dSyUd`rpc?_k)3E0kRojH)GQeve(Xb`hR!d zP5+(T7yWl|oA=+@XYqea+pfdZr)gM#?7mvHAg3H;juKccV3&fY?$1+Ny&aO=UIc|^qBG*F&=00yPH1c`7OWv zd(OV%eaZ|bzQxOUBpLoRh-V*NqM$MF@@BjF=YNE8wtkne${hH zm)bh>X6y)UUFEgCNnmno!wk^{;Pjtn=}%Q~3{yduJ`PoFDh3X~LoZpV!xW-r?ZzQZ@~*IF}!8 zwPVityv8fQ$WbkEjVMV;EJ?LWE=mPb3`Pb<2D%0&y2b_}29{QaW>&_Q+CYYZ!R(S5 fjwl*(^HVa@DsgLgrK#{2sDZ)L)z4*}Q$iB}eUkAL literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/new.bmp b/base/usr/share/icons/16/new.bmp deleted file mode 100644 index ce4d11f91caeb9cd5a36be5747e17d6fb85f25f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Seglo!oyoO zuKK@q15p^H7TpN2-mhQ3{>OzQ`z!xzE`ayb4ceVc4-PQmygJ}K8_S)|4 z2ActO$6?LFn5sR zepq~f^uXMKWG_Mg!}KG&gPiz-nFFGM=?rEsjK=AIWPLF9aMk~xNPxxvl;mFk5>TB1 diff --git a/base/usr/share/icons/16/new.png b/base/usr/share/icons/16/new.png new file mode 100644 index 0000000000000000000000000000000000000000..ae9bd3a81eca3793313266c6c02a73e855653bbe GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_G!IzNd?0h{frVUaG^CrWSS<^3yZ#b2+ z!*xn@S$Uelgp=g~+b{pUY}j$mv|vN!vdfmwf7-sUzSqaFVcKe5uPKHT1N=6}t#$df zrgg1Ps&3BG>c`((U+;2bwbA}I_4R&+!pYu;3)?SOvO5?}{3%ml^?t?Hu8M^zws&VU ze@W4w@}rSu!Nt>>tp(2(J3m!*@c+i#DemF5RU}U1=B??QE-JrDv!5{0>)y5rzRx55 z^K~;$GHA4X7BhI^$B^-zd*YLuFEs3CIhoB(&wib3V|R|_&$qejxt`3Jtsk}a0?@0f zC9V-ADTyViR>?)FK#IZ0z{o(?z(m*BAjH7Z%FxWp*iswFFff>1GQ$x?LvDUbW?Cg~ V4X-p6{sJ{Hc)I$ztaD0e0svy%q5l8? literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/open.bmp b/base/usr/share/icons/16/open.bmp deleted file mode 100644 index a0c6de5c980dbaa945a0875f4b626611f02f831b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Segk<;o*pg zi2r0_xZY{;D*sm|ijagsdSLdhO_%w!FoNSFi0&(4^02IVx9koTg*tpAU!bs z`|EA~pXhTX34`>&^dIl`{(p9QC`lNk2d4kR^yvSW7N(MfL3&{NZ!F6Ge|>ccNf@LD zrvKr(>i>5)H~qh}wS_1QQVY@p(|=-d{r^|Hx=F$yJs|ywiHUG?VCE4^gY-5wHvYeU z{W@6~q!)yrJ$ptL2I_qb(tqX3mH%(wz9k6*^*jRV^#R5~h^^ diff --git a/base/usr/share/icons/16/open.png b/base/usr/share/icons/16/open.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5083fb0dcebc0f7cefc6b1a6e2ff9b3f79ea67 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iqqwJwV~EA+xf2Zim;yyy&mSl+X;Mp*G8UAUHcxoTr;*NTa$y%s z8vB+_>|ETj4T-{LW)pg5%rN-%^lXj#XI&9CsYBnl=|6w6?=_=}=OxB>4aKj{tl9ea zV8VwJeHHZ|YS&-S{84wG2_NpV+$z{4lwx(<#CE%QNgTIW zlmYvxjg1%XiG=)9JaykcXx1ct-LGu!Kj&<}ere^w%&+^zeAaa@msa0(?g{&g=3=Fk zsS|5~;ig*R8c~vxSdwa$T$Bo=7>o>z40H`lbd3!{3@oh-&8&kx4Py>UftDnm{r-UW|&BU{_ literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/package.bmp b/base/usr/share/icons/16/package.bmp deleted file mode 100644 index 0f2fb4a0945857ce71e9108360f9c4b75aad20f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmbW0KTASU9EMMS)}W8j7jeiX8XB_6HHyF~3YvnrP#_lsha3Wn2v?~ns3DE0Kob`w zTQsgB{rDK#*n=e_cg;b_2D#hDr4#t`u{dlHe{m-T8^m9B&R~Q1(Zo4y z5P$XP4mOA%%M_te_C7(hj+yvd7d2=+zkh*f9W(I{@=ctUJGiQKao_0S$@@m3)knMk zGk|+$`FanRuU(v!KCqwjhW?6^fyVJo2}J9d$^B6`3ys6;7Z9yuCjNT*0UF8M3W(M* a6Mr*Xg+?M*2hloazCU_{@|MP5>HY$MXN~;; diff --git a/base/usr/share/icons/16/package.png b/base/usr/share/icons/16/package.png new file mode 100644 index 0000000000000000000000000000000000000000..021fb87f6f211ef07d459cdb3e0875a9983301f3 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_G!It*47)h{frplMVft97Wpp-<8~yW5Srs$a&+|gn*3Qx2qWUHXnZ= z64P{maY5^~2^XSfNpOjsIJDv2u7*}N9|P!c|Nc+&Sk|6jwFeI8unB#LnL#z)X?#4Y&Jn7IAq%AeT+b9tm}AJ#PP3Mt5Jw(vZ=jrGQ{<^N43a$0_t z|6?q;802y9z1Sh3$5l&QBT7;dOH!?pi&B9UgOP!efv$mxuCYOgfu)t9nU%4nHjrUp jFuP=iBZ`LH{FKbJO57S=X)62$YGCkm^>bP0l+XkKy$Pgx literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/refresh.bmp b/base/usr/share/icons/16/refresh.bmp deleted file mode 100644 index 29bd92e3bf5e0ca7e4f8dd1ab8cfe95dc49a40ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Sel7gg+O&8 z#lBL>g&y*r1#a>nHVIn6O7|DK%l>Z&kpExfr})3nUG5$bFD`VGQ!H_lC&sL+K=uDu z=j#67Rb%ykUz79yZS`*d`w|RS0>z2Zzof`R?*E)Lz5hqr-Tt5I5Bz_2YUKZ(c!Pxn z#Ocom+20wd`TtnA-~aQ|qW@o-lk)%Y#JJz3UP|FbZnA{jU{&NM|G&&z@&D;b5&sYL zg#W+3DEI%p)fNBG%*z9r;ezB3mIeog$N~>p`$A6{n7M2Xq1x9#ZYc3o_*d*H|NrQe z3^M{{J&B!`8=S%VPC~xyk(~ z@lyDIdVbOWlXHvS6nn^P6uT*a)J-V@##3{k{Qr#wn*TQx8U8EtRsfmZ4>VI7$&Fq` z9`YZ6{6|1+P~ZyI3(^mc=V|dO|F@T${6ElS|9@A5^Z#mpmH!ixj6v=Pseu8ITS0zB z24;osG9Qb8?q8f^{Qpp!$Ny6kL;jzi5%>Sn-1PrIzlfE%DI=@L#v|Ws6P4aT{`$YI$@l-&1)2Zvtt$Qha6|3?`9K0f Lpt!@Ohf;9>jP3gv diff --git a/base/usr/share/icons/16/refresh.png b/base/usr/share/icons/16/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..e37efc84fc0392d61b02b80e535db2258c9f8c96 GIT binary patch literal 758 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilZmH`V~EA+rIYS@2Ny~l-+%u7n>RkwrBjkF%-U>jlrMBeVAl(! zKrXJ9W|qH#x8xOe^L}dm*Rg0#cbtNBnD84Vo#=x%T4y{hxiDu(@tvDDZ&p_B@=SNu zeX+CpL8YC|{pY_~|83657Y=lnUXsgWbb;HAzafvoXhvJOu(1Aj<{#h8oSvsQ9$WVB zny}!JTmH&o-HEB1%};i3-_Gzymf^zB;@H{_m)iwPHZtmXo_Nl!uxM$s${VIzZ0^4# zMD!%tyqBoW~1_$kD=rKt;^f?aUNdf zq%XE{kHP7%r8fIE{;TC`h?-pa{MNR0PZxK6)4gV2RCxWEpXs~%*Saq+X~{caIMcQ~ zr8Mo)zrL-DRBk=|r1?%8{mm;2369)23dx9&)-I!hA`0FGp`gYm#!gGO3TJLm!bozTnf6>DqO#7b{)d3TgYKdz^ zNlIc#s#S7PDv)9@GB7gGH89aNHV84Wv@$faGPcwPG7Jo6m&|ZP(U6;;l9^VCTf-|& Rg}*=z44$rjF6*2UngE8COcnqD literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/save.bmp b/base/usr/share/icons/16/save.bmp deleted file mode 100644 index f195e036142b579991f753771fe46d123d1f46f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Seglo!oyoO zuKK@q15p^H7TpN2-mhQ3{>O!{oI3n}@0$7lzkK-&QcIHlvj?{SFZb8~-x#d>e^FOC zQ2$Dz^~3aTu5|ssr{3XzQ>f1Wu7W70h6WTPu)6=!@%{hH0}TFeulN0bwB7gr{zk|D z+bhk0?$Df@=dOut23GwmCpG?`lx+L|RA0pZopm1n7w1^~-&Jk)e^Zh6|As(yWHYep zfBWj?|E{b+pc&TxEB*BTSB6;rpOA{~1Y||7RqsJ<0dbkjeE_!K)uVK0#)b2b(?0_fS_Ubk~Lj pB2N3!^@I3Z)-7ji2!-n<$$pT2QqvE*8wRWX|3m^T?x!UG0stxKs}BGG diff --git a/base/usr/share/icons/16/save.png b/base/usr/share/icons/16/save.png new file mode 100644 index 0000000000000000000000000000000000000000..a6db08ca199cc8dcb526d0105363e42c80e64d82 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iV~MAWV~EA+tCQ_Lm=Yz9&A0Xu(LTu0F7himAeM!9I+tp$D68Jn zYY`U&p2!@`-RgSbf&ibRfS#lZt7Sx7uruq_Zf|i#&*jtZtz7xtv}3_U%{<%7$A5qP z{qdt+jR-@9zn`d&*NW-Id5f~1ef{aV_~WlXOD2U*<=>=Z{-t65!r6=dZC|iL zz<_(sF3p49AxFL?a)^`0UsW}ALvaCL*$#1MG2vCS0+EF__nW3Yp10xd z2A00yEUsg2zc%cA)>I(w^39lUk%*#uoMeyu`2g8Pd8@$Q+pW%J6CdxwFM zqFUk_QIe8al4_M)lnSI6j0}tnbPY^&jSWH!EUgU9tc)$SfeZtK*(Ea^Q8eV{r(~v8 W;@0p=Q{gXA1B0ilpUXO@geCx)pyGG{ literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/star.bmp b/base/usr/share/icons/16/star.bmp deleted file mode 100644 index 7c0a09806004695d3950f7e17b9cccf3ec36ff98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcma)5ZAepL6h3nr<_9#yz+kKo3M2X;sUS1TtkjY;iZmnw6G<_Gs6Q24m&>vr{m7L1 z6I51gEkBB|FB)3V3aeG>oVvEDO;!z&)vDdw)48=9LlnK-v**3{Ip?|0Iq$p7yxM5` zd)4yq365FeP|;jc%M9~9iT^@=3|}Dne^chxoktX6x)?P{VmzI@Y9_&C;E>nj(_%@u za+0b{tt1#VRMR+~UrKr-G!0L&@S$^1UDHxPRYoNzn`;KBx(U?W3#zxQ<7b6aP)$Z- zKvVY^TLytOj-N=p+9yYK>no~k*zXaU?kkkjnSVn3|n6y5h zIm~Z-i5;#GvRNa;4XpeKEOG*KdPU5*_G%yZ6ZuVLolbi5mzif;u)WiVJsuJHL%?SC zu$DEJvBo@y2u-_pRAp$&BEhWG$+(N>`6K1RBUHMAsPIZC@dAazKptyslxN`rmavAd zPePLIyBKx8?O=F+4zcIo%Wqhr_el^w1IK(o#R#zf6R?{#a=4H6>>-UcQn?RpKcKOT zh`Q7v&#Ob;pRD^`D6#oa-t9-ZV+^JJ-%vU%p_nxa8O()@m3+1Y#yXDo+z*PoM{$7rC}Iy8ufO)P&x_1eG0L9za*md&Z${2RSgz8w#P=6N2u#HJ57?emeLej`!j)&$4t#bjKK)6G?RX&Q$pm@j9wDFQ8MmCgPNLe*h!|hN1uf diff --git a/base/usr/share/icons/16/star.png b/base/usr/share/icons/16/star.png new file mode 100644 index 0000000000000000000000000000000000000000..e43684a4131d62620851aa0a1471f031f6bbf72b GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iQ=+GfV~EA+-pRfmA%!AG>)$7r9Fx3!Qu1)1v~R{jHbse+MUH8? zN+$|}MO?g#pDz+K{j!zw)>gilqcdFM1yUq@+E|@bUS4oo+jFHb=g`dW_s-1z{(t)k zmx~kiVs;dqx0SJYeu&Ssru)O;*(PsV0=aY-3D)HGzn?wDZ=&*<4=-1%Y(Kn`b*AXK zZDn)6$miHUI(s`tr$yT%AS9+}r_q-7SG%NQcCFTza{Zm(l+p5SR@-0SLxvL%sfh5s z4P9=rZ|$Xrw?jB*`-wDpXf-snoO^e#_-tyOc?XYn_vaqF-r9)|%`8>Rl*^)fryrjX7t}D8Djkqs4g>Kqm%e3AGn}hWSn?xW4Ncz5{dq$b==YOUUnL6I@vleyXWS#%1k}GRuQoiTjS<$K2v{o!uHhv z`ycC?akVacwM(l+m;aKJ1=}G*hqQ}Vbhd64Vx47v@5OAJsb21>p^_fl$IX5iZf{AB zzS1UIa#l%Ti{sMd+X}9WGyXYL&VF}l^5#o>s%_7<-}o*r{J7ISd9ijxTkA4M1&`C4 zIaH%Xk7QnHsz_g+K6B2DndhI)`FD?_|G%1X{iCPF@663M^LL(Z5qt1~BT7;dOH!?p zi&B9UgOP!efv$mxuCYOgfu)t9nU%4nHjrUpFuP=iBZ`LH{FKbJO57S=X)62$YGCkm L^>bP0l+XkKO;uR1 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/16/up.bmp b/base/usr/share/icons/16/up.bmp deleted file mode 100644 index 2d7794fef3567665607400e0ac3c10ef7f77f55f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmZ?r?P6g7gDxOh1H=MQ%*dd?zzmWB%3tS&U=SAy{xdMZ5rdO^P%%t`Sel7gg=DJp zDRPs0THr4CzYrCJ#6WU{jD1q*Cij0*wBrAzsmdrACs&Fh~sO zCZhDOD>C}Or`j9^gT#o{zp29N|G{QQ6buq0R{!=or~k*hyihPm42OQxd=J^PK)H87 z3{vxdcZ=8mGZRBlFh~rl2Ba3G2No6}{{QLe7XP<5`GWD8DbfEg&WJ<7ATgLcP%TIg zO#gL|{*@JO|F11b2ji;?(%@`tVnDSZJuv+N1#Ysxi#_E3Z*2|!e|vc$Uc93{^mmb` zqF)ih{UCF~i=bxg?2P>Xa9tHvyr(Dncd@4;NG;56WEyIQ;{Uz<3ICsMZ9&06F`yf9 z>V=sTTI3-IQuqJBl(he^_x6D?ko~9FLm>tz2UCZShMTc_V#nqFIurcBT^(V zBdSSXaAIBSnj_D=JEUC;7FJKqyA%C=QmeMBc-tOR)rAYxBnr=*nLG3KqOBz*U6BT3*&#d1j6$bFWTi*I)cBDKN2WVU2ZL%sg$8N$$(jADxZ*8>Tcn zyJmIhz5l{DBE05(D^0NS9ucV&C)dxGk0$IyZ3y%`Fh4*4#C|Ewy>_*TlGcEf_=ig_)E^$ zncZ6(7QSY@5LcOzd!AP*>xI^q$8AQ(LjxCEGs@NJ>{(!@FCiIV#PdU$dDgk}|Ej$D zS{o1i%K35-|-qqwe-F)9{aQ_OoG`Dt#E1UHn_b$Qd)dNl2 zzM9_Id#x7!cD%i_@mnAefZy-`7i_sUn+ZP z=ktMH6gYRg-J)Z$SpLWlhr@`)Vu;7%NF)+6Mx#-LLLt$mFM8Saq0UdGQpjX7$Y!(1 z<#IBn(`nI)L?V(6HFkX{emIxQW2EPWfY4=(V{jrSPwHYnM_+Bicem>UWcyh zf<~i(TCE1^&`&a%lv2!+mcq}^9s8*{e6bj-Y7z|2(RZkUvFc@HTIEVjyh56$H%=Z^?eSQV! zrxhF@U*N%qW2Ez0$$>Sf92I}KH%8#>B|Kl&a9x~W_WTI5*$mWeHk*;rql9`HW#9$Z)df8@XY2UQj~7|Hz!pVF7t diff --git a/base/usr/share/icons/16/utilities-terminal.png b/base/usr/share/icons/16/utilities-terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..ef07a1bd06aaa824c818ae4e75aed62a2c89929f GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|iW1OdpV~EA+rI+`1i8u-z_*h^1y>Ev)`)rwVjgB{Z5;JE0QfX_N znE!yAb6?x^j+q^HO*d8BkC%N9nR+nR-1uBv5ueCq&%ZBzW!!xKJ^s#LUj830PlC#J z&&}T+9kyCjQ`LpVc=0ta&DJ@_mg#)$hjl`xo=tOR@X#zQO0%i{KlyU_b)Lf)4o(p= zJSL~e;>7V+Z2JL$9Tnf3zbq;G^hhkDQ`gZ&U}D`o#)t>cezQ*MdH846mm6uG~_XgUTaGmb!J6)y}T|y@!pzg2CmDlzjrt{Q{pkxjA<7iy^ttA*DX4iiFao?|3B7S zOk3?%yxOa8)Oq4*)!w=f#s9c7{p=X-=30T`MYY5=q9i4;B-JXpC>2OC7#SED=o*;l y8XJTdSXvpHSs7bu0~rPevrA?;qG-s?PsvQH#I50#rovyK1_n=8KbLh*2~7Z`E8mO& literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/applications-generic.bmp b/base/usr/share/icons/48/applications-generic.bmp deleted file mode 100644 index 26c694984fa5bb48376ace6eca8276db6f64b20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI1*N;_I6vi)__~u_=Ow8Qgj1TiTGY`C25EaBO_JR#j1`!#A0WM|0g1uwIg1sPC zu%IF;qJm(7?-z}eP4;aw_~Bqr#3n`fH*uQ(zvSArw+a+Tt0a8zEd z@o=r4`|!t@OAN8(AQw589iEfR6_*~ClS>p!C*)+{(3~t*EF7Pc1>RACprtWRb*Pqp)zVgnY6$U%+szXTa*M#8^DJ$cZjAC3;j7b)rVT7V5IZ)n$=alOa0BXg#zRA^z~YU2(?=1-a8< z#fb&E%fsC#6~u=>#$1ad2f4_JHZ+-@q(;=nX|cMP$E+skXsEZE^-xdssi#8x;R3gN z6!)H7l$8$mol+EVe*iXa^NA$~xyZRfwU{2XP$RV9JG4+2JZ3d99n`~mq@kXgtDc&p zy%FMX93MEfC=V(gI;|)VJ3MlFQFaEKM+~v#KrcC)deEZqwNMv4)~aKf_B}n4_)7cS zJVh-+{NVt{M-`7vD$3)NO0w#V6i?_8tUhxn?7Gb(hFEfti=3thE!2qGP#3(0$IM@* z!}pcd0#7BiP(OwEb8qALr1E^~tdcyfc;@UB&+4%qY@E5o5Q|Q7nI2yYbxCy;|DnTt zMZcS;tQOW6A^zMOE^vJAoRX|jtesqv=O>rtg>wh-qMif)8grOS46)=Om+3Jr)WvEt zs3WZhzM|ikd!9;a;r6P;Pg;i%|CDda3w|$6Da$&=%jcEl6^B>PFN+Vm&K%|vW7^iL zCUT-Bsg0}4Dy?&?4tj)sH&0oQTVJr}vfrX1#Gm`Z0ZwpSuXt^0SvDwM@2$ui0WiiK z<`P3JImk7rC9MlJ!C!to=z03xdV?OfzQ9kd8bbWJuknTJo6{Klfx!;Q=SOZd1HJvnn6+8T@c*|-L z(qLYqAK07dX`U18OFSdYM(ntat?lO14gO}=*EoNJ6R2R+32I>>3Y zFb(U~Pre4c#QsD-@Vwwz!86bA1>Z*@{&2?|tR-BG_czM(+j%wletu1U01XE{=Ne;Z z@^z4dT;wzj^hK&6^%8weKk(e3r+HQkrv@SZ)PB2q0PbJvdcw(g|J10<&kO4E%fh<+ z>cBbI7&9HzgjjNri=5k313f`+(+})V^mMoegT36Y4?_H@J6>kp@deyjZ{z*jqPqOP zxGsMTq~M%urh~b}5K9hnk@ExB51X~8sR8>E`)jf%*}m#}Ip`txY^IMx{9D)lJLU7E zdIf&)g!i9I_Ljevrr?}wrh&P{P`B0^(9iH^Px3v)o|-%tyuHXg)V2ry$NXdWPwf30 z`~DgG^DFl653zrLi~aj^?0>(+{`X_-f4}p+C>FH-|9N+Jx5R{2{#{*N5)&MM-oYgA wFIG<6Lt=vRxA%B4zrVA0koGRj-YNZ;kGAe`w@*y(uHicJ8Cijm706`%2Hr5!lK=n! diff --git a/base/usr/share/icons/48/applications-generic.png b/base/usr/share/icons/48/applications-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8633f6abfdb9f469d67924fbdc9b902c023076 GIT binary patch literal 1320 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 O0000zGRZUcf)z=xhwzQ5>%&g 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 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/calculator.bmp b/base/usr/share/icons/48/calculator.bmp deleted file mode 100644 index f173e801a86d23ddc12803871219d8a1cc36c2a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI1xlb%d5Qo=?o)cSg>db*1AQAX)c!?uBa7KVE{|U&cbDQNf_bCwfeP0rSfI|=v z5Fn61h||k`9}-cyzxJ!uFznm6J2N{tcq5A0-J0&-*VWavGrezrihdWdN7VfP!`Kh+ z?32j1kzlgx+hT=q z+DdP(SU1;-}x1mKMp+&riv?9{oh^lKJRg{Xz3jPEJZiMMc{D?sm$@8J{~Q z>JNhdcm_y}L{%AD%Yz*p0+i(6Tf1*4_=Y6I*oT#1p zGRe^^2CX{y6#l_!=4-67r*M7(C~Xn?G3{3BpGVob@RP{`2#58-K4k zo^Ctlls2qiwEf0k`ROlg3xfaR;^NifkG7xq*VNRA^82YV>C`Rf{SVrP!Snic^ZThW zsn)Ha`7bXoZT=AdAZm=WzPS5z*B`X~#J{$-R+K;8I-)fs-FD9UgSKJtoImhiU0sD< zceKu-9Tb1MaSS5qYq=9v zU)=W5)zu}vy}i=d*l6FEmX?Y>N1_!3KmFa`-`l?Eb82cz+S=MgdECs-_uRW~Zf?rf z)|RZUu3E<3-CgPF>9MajHa6_D_3Z4d{cLGzNw&AQrKqUL&L#Y48wSt$So#syv@z+{FpRKK}($Uc&n!E4~ z4GqcY=%_F^+3duR#sM?@#7=*2L}iCbJohy(a{TjwEgCflOHzLFzb-G z!`t26ZJ%oxi{=;iNfQ$jvbeY?3kwUvelB_8+^6N<#Cc!G9O_!u`1|FjzsJYN`1(bI zb%{1UxL{~+Z?|*e&ad(Dal21FJv}WmGc(p08{?$*5CdYuI$?aw8*57W(Kb4s*RPX5 z(ftoPnJ|5J@X3EfTv$Vy+=Hf0CNeaQcFf2ANt7Bv{*s4b-8-lbnnwFCvv1)wfB5Z~ aG1%Wx$^8%w&3t2T%$oAb|FK=>Bk(W$pZm%H diff --git a/base/usr/share/icons/48/calculator.png b/base/usr/share/icons/48/calculator.png new file mode 100644 index 0000000000000000000000000000000000000000..30ab27b672d02ebd1f52af3fe2ef62a415a5e050 GIT binary patch literal 1274 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 H)e+0TVrxt| diff --git a/base/usr/share/icons/48/clock.png b/base/usr/share/icons/48/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..a868c4948f24f5e966affa91df3152b899ac43d3 GIT binary patch literal 1745 zcmV;?1}^!DP)V({}!FF7oF6`2ElGocBHN zIY+@-{T_G+_zkcQcpI<*{{emkepVFqmWX*P)8JR@HuB#W|6cTfiUrVr1NN4bl(;<} z4_mfuVe{tAtY5#Lva&J&CMPEu9UbN2!-w3xdzb$HehkAH1o~7>>oljPo?Cn(7jUg8 z)j(HeWu+WAa6m>zMkJR^(-hM*bN)9nG9m{L9+b+;N&#*uiu%ElgX_Ak0i889HPYAD zCkyFK24Yi(^6AiZYIT4yovx6hqBH!lYgiG&Od4OwR3^5x4p%e%X~1&}ps9E&pXO?P+q z`~?2#Cri)%Lh9=35+H52+e>v_&l~=;*4Eb7_uARHtR`AoS_B9IxPDu+ApH9c4GnMZ zF_93tc5PWr?AWnG6hIp;Nm)^*)53}fL~O-w*(DHIUaVx{Xks;br+hVgx-Or2Aw z$>;OwhG8t+o81nf(6YfBhJnxL!!V2sudU>AxkO}oPM$lhy;h%pzND#>NF*d24rkXM zm&+xpn)|k+skgT`+b|Z3y>@z=rC3ZPU$cwQ-08Zfr$>P7-E8(6a5|miFJHd2FDkyN z6lfZ#>Y|z#sTNgN~I8y>56S_5C|-(fmh59 zfWKV1a;4x4DH@GReSN)XnkI^(2q1v$+__Us)0C;HsU^LTuU@?>z}G6U&f#z%BH1G! zIUEjx!64~$8q+kne*HSzw{PdhjT@+{il%9NpeT4h{nWCvK9kXIw*&kdpeYatWcROy z>|t{$(?@%Idp0UoX(nSJ5D?%WD)2NKjiM+@_9#Y~J~}!&FijJ$*K1h>W-^YCj|2Ru z0?(g4duG`n%carLQGgdJ@a*y9$1BZKupT{n1n^u1euzXOE6r1|?%lfw@IVC^7+9v| z(?a$4_X7k~fJ7p3b$EDqrJ3^9;NT#sRB8bJzooo*^5n^t=E_@V&z=S7npNm@I)|-Z zEltxDuh(mJw_>;3v#V`(3pF-2=Dm3F;w)3YgtY4E=^-AEXMbP1bcuitAceRAZ;k?d3AVr69tC6h_%=;$zk&Nqh4 zX0rt?8PQ?`A|k4)ip^%zX7bK^jF3*JKdP^2TY$OgHIy9@}Xf!IZSj^H0%zbTj`0!x?zOgC|KXkj@A~HRl&3uMxl>xus zpPjz9ZQCZmXI8;y_yl>w=i9{j=8;C?AvVZ@6S-pDocroBseC$yR{CU-? zRUf9UC`pq`JDAii!#V#>U2Y`t&JJo;>0H{riMMp$Exi@*40@;9tcIZiRul zasgFLe{xgJ^yfA&fFFRLf$yvw?0*|Mod{K(H821G03~!qSaf7zbY(hYa%Ew3WdJfT zGB7PLHZ3tSR53U@FflqcI4dwYIxsN5kJW7e001R)MObuXVRU6WZEs|0W_bWIFfuSL nFg7hQGE^}*IxsOhH8?9UIXW;f&eCns00000NkvXXu0mjfs0co| literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/drawlines.bmp b/base/usr/share/icons/48/drawlines.bmp deleted file mode 100644 index 99d40509bc2d25718882289e378075949ff8a940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI1J!=$E6ozLNwDJdt2o@`>*obVoyG1O5MIwrA8VegG3Zm5t+6J+*v#}No*k~i9 z7JqqcGr2veV3E#y)$=aKL>Wm$-Q$wpL5PTGa+|t=b)Pv*FpY!oZGdDb+Sv@ zX?pVh@8|v*x0B0d+4Lvd+P?Ed9jWE1)Pb9EON~G$->pri;GD@T7jwIk+trpBtT2oH zSHItPqtU2M2D9Q`aQAvW*Cxy3EzL~%AME^bpB}$+-B*YCTP|~#$HzrUy@|c}cHVW5 zp8Yp>|I4itZLi<{JaHe|>)v>OI)*ss{L=eE_+b}^??YYw&h5{x4nO;ngIVHl`HS^T z9u~!qb`-ODvTIH9fYsqA_RLR-|DyS=AJ&JM{>83&@}W%s8cY239IGv*^mP-PQ^oJI zvrZL1V|WKqE`wjsbtwL;;7^S`@lpIkK7`oo#NR%>CDKe5+0z{YpcIbbi#uf2UA)`_3E zOG7b!+N}>w`S}jaGY8U43cvNCDSxrX9DNW!>&l0ae(0Ae4`uHky?a8>z`Sx`+3WB# z79V2#VrN{8pT1di>b?hX+f22Ij@jI(2eT#=cDc z~(pyl2jg)a~P0LT4uOrKD z8U4D}qYUN1_NyM_zq$RvS=0DX>GS(s@T)B}Kh!oWzg?4DSYK>iT()Gca$sX`*Q~0~ z%K!E7_cUg(;R7a4?QeZiU42d2H6I_UzQHm5(B2mF|9?Il4qcnf=N}9Pu1z-K=M1Je tzj(iQ!L`Y9ex2jB`TS02kU9&~nbJC!iaYGO+H`ge>*m@-U=x8X`wKOs==lHu diff --git a/base/usr/share/icons/48/drawlines.png b/base/usr/share/icons/48/drawlines.png new file mode 100644 index 0000000000000000000000000000000000000000..5af1b744048be971c47fca9ed537ff50a3f6dbdb GIT binary patch literal 1197 zcmV;e1XBBnP)=pcn@N<+g@bU<#O@pD#5REf|I&3jp~2 ztIOQ}HEoW2kKO~|iwnB}s6Y1|06)Lmux`TlhlcO zM59sjSQ7B!fxYH&C0h728<%ErjlLY*?r-?o;0T8e3Aes6^Nk}@;D3J$f7+f|}DIZCzxUbiAw+5j52E;2>VtZcq|K>+$0V-H}DK1qX6g58WoI+Q+BmDDVSJ6{PHU9}~^8ZM4Kq{ds#0Azl@MQlnX`D_pvbA>HS0UC^ z(jo6Cz>cl8ON1bAZ{l<|IZ1%uJ&+wb)kaCcPut&G%x*etUVj;In}noLmt3uA4T6oN!#ky49x;baz)B__hxS7m7hX zU)LG{cE)0{@oYBhmlj{J`p?|1Ah3|j{-J2*io&ojAue4Mq z-k<;g03~!qSaf7zbY(hYa%Ew3WdJfTGB7PLHZ3tSR53U@FflqcI4dwYIxsN5kJW7e z001R)MObuXVRU6WZEs|0W_bWIFfuSLFg7hQGE^}*IxsOhH8?9UIXW;f&eCns00000 LNkvXXu0mjfHd82h literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/exit.bmp b/base/usr/share/icons/48/exit.bmp deleted file mode 100644 index 36c65bc2a94305026eafc7d7466ef790193947fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI0TZm3k6vxjPB-13hHRi#%O~M0`LYiqJH5xK5i9ER_c`#xW@gULgKnO`{h|D~T z7y2Gti{eEn_mXl=hDuQC>AirP9AJGkeZ9(w&FQ}PWzg{vrnszew%;{7Z5RF`loyU#*xdKje5kW~ zUD{>(928>#1upZy($^csAJKeCf!Scm$JN;_feKD3?m`jxpFj<)Un>lk8^uhTljPeCmX z+JLevAB>+_u+$xY5uA#3~_AF zP>1)-xO~QQ!B0+}ow}b-@XH_>!(x-K%SPFJhMEfT`8z6KV!7fUkA8ldzV^Tu{*5ND z0e;^Yv8~zAB}h2q(p>SA^PK7L9ejC~+iUXb;mg=;>ht{6eNQutoU?5qr`=yux*$Kt zl7aMEzl2``T{ZDx@b%cWo!0!5VTR%4Sh)9}ns{&cnpxXv@{_|}cU%K~_Vc>Xyw*;e zpZ8h4hpc_Ci}UvYAKx`CxA>VZ&ObK`JI8Q3CH`ILS8FYNIp6gjK99J}byT_}CH^Ru z$6zT}JbWjx&qBH$zt8njHX>-yCk+P;Cl5a#liQq^8s+mDTKKtE4^{n>D$f@`$8$z8L@`T@?*p~a^iWNz9>2p> zKr%L8{OphC=UqrRlce@t%_l#{!0UnE-;%JuMZJNL%so@z{OofAbRTjV!$*{#1!?xQ z`1#$f9$F3YzTB8ae4bto4TdbcZ~kI19EbG0H^c89!xqJBV?Os!gJG9(Y%UP~Obq|c z0^z?L!~di}_&3Gy?=KL3UZ?gR%x?{)1;Q_9$7JwwE#^QxlO&!b^?Cjz;cKr>zW7@( duRf%|wa9rKm%4oajB6v!_<#O?pB;R!#V_{~_SFCY diff --git a/base/usr/share/icons/48/exit.png b/base/usr/share/icons/48/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..ba945078dff345e21208e70b1fd59a2cd3a57e42 GIT binary patch literal 1104 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 WWLV_x(x1Mc0O^*wd)nf;zP|x~r!vX_ diff --git a/base/usr/share/icons/48/file.png b/base/usr/share/icons/48/file.png new file mode 100644 index 0000000000000000000000000000000000000000..02a4403b471a7590afc894988108f39bd84a1978 GIT binary patch literal 2171 zcmZ`)c{JPG8VyoHT1|Z>_V|KIeSnp(BaSVq_La@tcZtOyG8;C!OsvvBl2TGAh9=ijK%f9 z&$DbBg7kz!N1|?lWT`G(;>eLw><$73+q=4Fz;1aPsLBiXO{Sf$Y*>wt^lV{71Zj0P zLR}~t?AO}a)ORmw5wpS!ZHl^r&@-CdIn5Bx3ZXnfj=!RrjIJK}w0pohTOK*rlQ*AO zIBzm<6d-Xp18a(j3=Bl<)WGp)Scgg{PoC@xDz~(>>?}&+a5!H_p1ZJ8Qc`|-vxIm# zs;aBoB_Z0G1`dF|Tq=;-J}c@>od z7Z340ziNkPC6 z(Ue*~UsqQ*rDKLuTMK_aLg#Y9DHdoBjD|_(@pRO(A-GJH(xxT~R;swTxY_e{xJARA zosBRvf@;WImv1UEAA+?(Xg; zl)Xn>?)ewa7dAIHA<1_qLUFmI29JwR5k7TpgL({e)w``zs&EO;vN3S-Q2DiDgaoLy z^#ab$0!9(puzb?ooY)y15HMelqfjVUiuc+xnXjW3-^c8Bc2X-no9~aW%#GCq zT)%$ZOI}p#VMd@Hy<^4#28LrToScA?)?=0M%!#>i=##{};J`?bG@oZ}_ ztFvu*817$_r+k^bwzcReDk_>)Qui#E1uZa)n9dLR`0-=z4Z-NBaQODxl+1X4f4`%f zTm6eGrd7^#TeILKB0tnyCl8fJz!cjrEicFIe$%8h7ri9%rH+c~R+|A7-c+cs9QyF# z&z_#6sor)(Vt4n$ixI{JAA$|8B>cG7?&D1+=YIP}E-NcDj9waMM|aU$@^k}oM_%f^ zg+ieSI`drfyCe~@rk(qZ@!#j3I)rLPegE5CiU#iVW6sU_e{P6N@svhD8XlZGw ze5wV&5vBQ*%@8WT*Ra6$3S}?7dv+Rl)e7!abt&)7x!#_ho+sS%gMsjxv7YH^HGO@3 zjM@n$NwL+>jh6QCzsQ#-CMF&c%J!sT;L|lyiO}8etDX+G8$GyOuJg(+F$nt^QsTZa z*PD-^zkSD0%wx0BFt9=Jhr5DhEDU@@OOC~2Su-(e*N%i%{CMw5yNMC^3qav*+ zJ13d)q0Y88aDAntr)NLF;24ht1%$lA2ekkqYmPTll8l^e5qdkd#+5de&B(S^|Iip8 zQx@7^XiBYaam#kTt!dA#s6bp?-3!8Uf&`V`{PDqPWvqP`DX+a9iaPlQ0cw?M2Clcq^3JNXc9>ScVEf1ZZ&E=*;Vzjgp7>LX^60GIcst8CdR(ary3?f zMIB99TDs*Q5J2mg$#cvQRCxkEqd)bk8B4b+-oA6iAoP=UOw1+8G~bC(wg9oE8AT?` zBKNn?i4mzi1qa6Vkb|02i1X*C0YZjHMovJ$09)>YXD?o;D@g{tq64n0uGV%V5_h&1 zr2)UCwF1_Y0f-J{r>a8Qe6)|Yn&*i;k4)_C={gu1)@-(O)8xY4@a5(X_R#47^2UF{@3kwTg!NLEEHR=2GNr{JK5za*XXM#W=zyM|E_W~XQ zWMXP+YLf5+?kh1<~U=O#4Q-Ka-X({4SC0EqnQSI9iyS;Wgl&_fCkuq|N9y~FMJcqndiZ)fxQt3f@@`Beym!B{SY8oe1P zxExbaRTbdllgwmFy`4f86cm`mZGf@%I+wK{cDDl^8Q9^Nq5;a()CMVQ3CBjccLW;@ z2?S~FK0;4;yp8#<=<;htqPazdb+xrfqV)US>0tTPq_UfEIk~D|#~x(yZ!E+^-4xES z&Q*1_9>!_q>?opt^lZwZLC#9;PU0`VF_v7UVa{eQaqt8a`L=<)pjr zpH0GW35T|zb>yI<6do_XCSsxbN=3LNC(EI$%k^r$gBtI~dT^)J??>={v}~r{NlmAB zj^AC{iUz1%k=wJzw!qJ>5rzFN%FjEBWbFGp2}mFvlnzQ0WuU38b6wle7^Q8jZ+HP^ lWQ;;JXO4vY4YpMar*95z3K9 z7Xu-KAP~hRr)Y*YDQTV}mkfwP5xiv*DhOuLAN|pP_3Hh)__muPN15^cY}|Z$hu`z= z@p<3p``xKAx_pTta4VPJi>0vX78o8k+`=Pr+<*6<@yF>K42Hjc8H|y!`PzZm-Y=Z( z6BT;i02~Q3>CQQh23lyMjYiEY4+A%TCOpRH-6h>8JtRFWJvztHKnqQ@ z(MT)J+B&!la@;>r0_Y4?@a?OG|@&Qt=i|nb?~#fM_MF3DXo&CrFh9M zIi^dJ`~M^D{rKKA&_WY!G~O%GOgq=XJ>FxnSYWkURftxaX=e|HhK2^*btz9^pYsu2 zN2AP{X3ZaBG#Zg;i^qZVMer6aLzgQ|m(fO}SQke`M9|MYwA^GeA;lhxL)jtlZ4TFU zG$z|(!^~#0b`5$iE-nrk4l~;Gmf~dD)4J|(?oy;X%&X)a(5|0rc;2pGYeGk17`oqm zR@WUVe2P|cd^|5rfm^CP#)i}=c#Bt}r((6PJGyZtttkl!37S9OX0xFrEef4)J%iq= zNL_bajGNM;@`C(Z=r7BPg72Nx=-U>h>wINKS~ts{*XCa^@-T;vh)Vc|2+NeZYxeVC1bGJsq0Q}Pp0*|Apg(wAFoQn z;I1^B`6xr*HK(DoDrsukztH7!{YHOZT`GoKUd6EIHGQ``n^u}>e}LcnZQ>tp&cNB$ z94S}d?ad8X#eBcrZV%zLKiOf!xt4YCf4o77XchBf@rTo&=}g2(Yd*ehD^jA7eFeyJ zI#$RYisW~<{LEJ{dY}mBJ}ptA3!l6}^Yb!$E9bv4ClwbDmEip0ElPAz=DaD#nIQAe z;&%skVLHa!-^R%2ZY3HMtC%xo_Qkw*zF(4!%N^wy{i0HdXchCD;;-cVcewL##aoRF z-fc=mtC%aqzk~kP>eul@XDu#uexO8GPSn!eBzxx|_s?gIE?hm?fH7aA5?%eWf#x=u ze;55ej~hSs?8JDt8qwO-;yxjJ=M4R)4!(zuk;`DY{lIb{fb7r_J0s4EiHxL?^hzRYHsa5;GdY7fC|mv zALIOohK4XTHKpsscxeXz%kpRAT*I~9$a=1Qt^eR>&iN(zccZp%u6G|;%MJRk_xd;c xnCkw(IWajo`LE6g`Fk_%)0;i>;Mf1#b7B_z_@C_4;P;$=JU@Z?3Cw;1e*kLF9kKub diff --git a/base/usr/share/icons/48/folder.png b/base/usr/share/icons/48/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..05b5b5837368661fbc11694a749a455673ebddb1 GIT binary patch literal 1152 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%d7r0?V@Srmw=?(W$%Kj=tN(uPu4>;@mi!45H#)j_EZm^es5G&y zNv`u)@B9Oqe+2GrH>hJW&(m1pc)`VFN_1f4HilHS?Dv0m{?{xk+uPTaJiD|k?8)SH zX(jz-&wf9%etu`>-Vc25Km2dop>yMH*?!i2>|yx@Zx>5E-hB7&UHSarhAQWp{OaoJ zt#|X{e;+zFW9#3)e{CO3zAd6~Um$)rXJx~$a{2peKUZ^P*c{XRBLDes{KdCrkEdA1 zuULCh>c;ImcVc2ABWK>4TUJ)K?2N3RpWih;e*WWIO*IqNUVgb?>%3pS%RBv+GYfAm zUC90Q_ut6RyUmVVyLL_g!1c{)Mb3X#HK@neZa=$Nf8R{gnb{Bf@7F)tF8^)5hQjXc ze_l3SWd87TO=T?aNhN-}8kPxK3c75|<#la#@F(7qeLqcr_h;mMiR4ucYjn zK2LOFGzj(UF$^|5c4ms@u}UFBdA=Vn3{&|gXezp7t(JMM3zp*Bb#RH3+6v);yY zlU0fzHGHjzRaoj1%AqLim%PSRtMKQ25nl(EWZjFIEh00c;^XUYzW&;zSv+%#*hJoN z0p?Qf-iIF_pa0F2ke#iaYg@Z*%Z190oE=RM7M_VqnE!q$J3BkSdwj~ut4D(#S*e^{ zqZ!8+U#_6g`q}@~mDi7qA2Y3O3vVoDj2Bf|&v9aoUdOfOjBTvfSm$U?FicBkbm}mf zG3kMglj&{7w@in4!XIvI5O9)uQ=mIx-%CD=DVm8!txKjvZc)8f6|(zg_e`^SM?x8% zYqF$R^lp=TI{U9x;+)6pR(DJ`eX#d@f$Fh}d)d1fUOyCNZ<%5=IWBq4;a|&^PjIfP zy~y}HMs2EFbbIzL=3|O~Em~WcS`3%1za^DC>wUvUxtFHbZvBfmkYHf(H{qk)Evr+P z7Tj7J`ME}S&c=+_0TGuDJ}6OXc>MVB^wXzL>&)8!K(>JQ{-;?yc zlO-+64_!S{Yb)-~q}JNexj3QBzrMx7@X(P$k=glwn4=uzABDZU5Dm=UswJ)wB`Jv| zsaDBFsX&Us$iT=z*T78I&?v;v!pgwV%G5&Jz|zXVV1NJBToett`6-!cmAEyWyOeto PsDZ)L)z4*}Q$iB}QStz4 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/font.bmp b/base/usr/share/icons/48/font.bmp deleted file mode 100644 index 9ce675cb09014ec98497b6fe0b75182297723781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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 O0000`t0GN_hgMfM*wlgVn@rKayhN%OJ1FU7 z8)-K)>2`s?0qrkgF?6Y4NQQ&LKc7U1KSJ#h)o|F;mQZ zCPO6{PoN2QA9vXP66R=0SJB0sezi*;cnMnoszx5(AY*L@VgvjKdde>JyAFRmMTY8S zlz4PH84nITaqt_qQv3@HesJ#tPh(GP9y;f?H^yE;JOw{}AV&(9c)Eq+U+R?kHO1gM z8p_t2aSCZ(k09l254E9cAnC=k)6uH%&KB5>QFp)^n5*5z{Qu2~S~AwXjX2ClJo(wj zSp8yu3Stkuo?_-PX*Yr${P&C<=w>{GR(p@R$A3h@>-1xB_t6>aM$(Lbw?9>&naI}* zq}%Gz!B8G9R=$T{nn=InYtrw=TCg3pwIrOc){*gO1SnHnM2x=cG7J_{_YRQzX>)MFH=!M;a1WVGO1qj=zMp5{R+CS zBg2tq^^EbH{yed}p4eVW?5d?!$nCbx)Z%U+eQwAS-Un^w(dfyoq$vXTNwl!BT@kWh zXr|~nOmT~FPndkyf5@tzKFw)Mh@Dl?p~0hv&;{~mt~ydm0i{;zeX5V5$joAjd#Vj_ z0o(6ITpt8axcohyLArN*CMqOFHdE}An12i{B+m^^Jk~yu9Xp7}pAKO^=GUVwx0bFW zo}`?*XkfvMy#JhtbP!Fc~9nl&ROF_=yU%QihUY;&E;MW5f9zO zME5=k!+xA2Qc5}Q{%M?BBXi0*ENpIm750A{_HXo`e;GPN*|znWe-6bjE+ftQGStRf z^8QD=0bFAL)@>Z!>wE_xe&VOjWJ@t}w-R;dF!}Y!JL!)d;ge3pQ~{dO?oX{=>k&cG z&nU6)7dJMM(vA9F0meSQMvDb?l|c)P=of z?(PN`MUDH`Q&V7jvBnyz!P8BChWAS+V(%utGfPNy=$-Tzh+|yD(Kh0oeZ&%)75OW4 z$SH?!YN!sm(O<`d6#x7Oq*=F?v^z?%C%Qv1k1!>j?y_lkZp;yN_gFjhT|#=fAXbjG z5*y|s=2sDqDfbk>XMjdkOq66^B4CvHf$0$-4s7PHbo;MpAb&He}!QbRzGgP7X z`NG$W{19=5vDiQ9cZxN9iFd6l%v?#kk*oKa{zzbJG$jA9HS%n_-NoR>r zSNrpLf)tK+QvLo6;;3Sbrl^BP-w)0sJPLM>)M34YEOTo&f%!ly_B^LZyZuqpdcGq= z>{?}p#QL^{r)B(wUp7rgyWi^;Rq2%*&hfrPC>2a43~>Ka{@=k^X;uWNu7LYbi6E&%p;lNDWr` zW43l>ax#BpxBvJ{Nzz?&xuTjSDQMmh4%WP$mi7;D-$DBVF(RYz`|k%LWloBY<}Dc+ zA|Eb;|KTfMKLk!1BAGXX>l*SDZ08X_cVR5hYLk)UovTw*JFmLk+mRocXLG!HeAnzj zJrS`jBSXA!@+q6`JaYJZ_+ZAB+*}#r92m8p7&A?T{Yy-yWylRb;6EJ>zdQ_t6C%dp zgHNuyTv?w5vz0%q(=pg@BfcJL_Qnn`S~Lu>WrQalRjcoOE=h9ThY!9%996WqT=OqE zomKD$qn`3*^oXC&q2F-f_HjH@W3l}GOis=$)W<(z4eLDX)dlrlZqu;6E@oo#L|jAW^+4gXa{QlFIofa{;%Np8dCo4CR5=1 zADSE+%T3wYdk`<;{HFD3X=NYU?diiXZUVVwd7efidf&npfps@%&V}K#ZUu1#4$3n# U<)N<+yfz|_SYX5g18RZ)0dEbfT>t<8 diff --git a/base/usr/share/icons/48/gears.png b/base/usr/share/icons/48/gears.png new file mode 100644 index 0000000000000000000000000000000000000000..14cf19e2ba3f5bbcb85b5fc9ab48b5f5b7c021e6 GIT binary patch literal 2345 zcmV+^3D)+BP)D6 z!bM!fMVuE33pbzk{GUQ*=G>m51SlzaQ}lgbQE_azDSiIp5_fy$!5M zJ$=f`YA%=naV~?3i?=UwI0_d@nfg#;m!9yF@(?n(GrP#e5+EiDN?## zsi_I<89)9#YHKHdIRtpU-&!zg)GycTdX|=GQ7uYE->_|Kn-Fr2QszxU=t${6DUMWE zdkcr0`S~I*Z^f=)uv1N#(6YCz?BFGR-(_Vj*&GNos9>-yT3LB~2Efv#YPc!G*s*^Q z0OQBMb5(KiYe$2@j#Gg^(@g;7<%f~d2Y}msSwTU;vnmj1c(7+|S=oW%rr#st_bM1{ zRl#7V3I^Mc{^xt2Zy|<}pO>G%$_@rw?8?geXUfa#E?5W+It$r$bPZ@9fU-a-fZe-$ z!y^=0k749FH7!$sA*6IqmvY2chFyS^egKXiUwTg{^!%;u?XR?ev;ihfO5}o)lD7cJ z$hc*_+dYwZy!ASuT&d`b!!E$Kn*bO!YNes;?t9(tiCLiX1A&I`@p(3LI*W?_xXk0Z z@>-Xx7$NAWuFhyacyN0BLJ1gj8qLjpu*l>2`k~a+$tV^3)V8An)E1@8qe?|?7Q%74 z)cy4mD^IET$JN!oq6zH>e6nKUsZ)EhG%fv3j8P98M*iiR zp2Hmtm)&q!OD~JtvAY3&HR4Moz%);ohYrpD?Y@0^+hgX5JgJR9vp(bYW7&IU*A5h@ zP}jfqK6O+qy5mUhfd@y3DTc(E)Zpc5z2%_i!V3U++)L4>ES6;wt+9oByYqOJ?NhCR z1+m|d*SbceY2eqHuXJ{KHMO(Q;91q3s7@BZ!+kw6DZRJ+K_@(3JSZ;bbd@MGSTMuQ zlha%r-e1*!6M!e@gGs?{d! zjV_sWVca2ia830!{n0DD za0+k_l6?1M!Y6UNoy^NCblt{%W1%z!8cfJC669?l+W@x)?dFp#&hMAwSv{~UojK!m z=J+*evzcjuv)lmdYy*?Pu&`HDrprIg&VfP~I3?H$QY7diu_~5IFzd1uu!^qua;j=# z=j4HiO>2|Q9KXh#OAMSP=RqDICXwH+?O^)m1~5dzohcGD0lV7ZP#9#l5Vs}}MCr8c zWcHE@P!);ilbyVpE4d-85}nVYI0`h!6iM$sLO_08v7j-6vA45#wdB8qtqLExEAwjYb1IX(>wUMo!H z-lbzPOWg@Y3P{snS|-fRfmrwMGGvg=W#0Z)ENL1olxQ2ecxbAN#XgCVt0h;ffKZ$% zRm~g)C^e{a2$<*j;uuZ9%WXC%d=BtCAZGW33ye!i46qcKwu#Lx7-ALBGH4HcY-82L zc(2K#JzFLYp=3MWRBY`b4^U|^$0>Txfxd`Hc%nJXozI{d!iyn$Z%i}xC!M?BllXT&ZjK99n+o0Rr=KpEyCIu^1IC15 zWVVFSNi186E!Q{k1EjWsV%Iu$w->OfIlvF|!KW|hpB-z{^PTO5FdyDfHCVb zSvSsLvI$wKqW=MXFLFs%|F1TjG!>8E*u=X4l(^tvWH6iuCSZaA)h7Hjo#Hf&TDL%y zI|gz4I|Dw9k^g!p^_ya-m;5lJ={$^eBk3lt?hbkj?gzwJ9USL4iGmowID@5|VhJY= z1^Ipj^k8K>-v_p*3OZ{|>`r@dUqK4m!!~!t;b(E!IW)8fC}2ur$-Ckfx4w9ar*=jX zKLqup>w!Q(IBc`^+6I39jYhT)^}h!F3fR?s|6ATpxWQuMD4oVk4ZGIFtdDBF5y!Erd2^4K49O?W{{}JH z1@~S==4}7~03~!qSaf7zbY(hYa%Ew3WdJfTGB7PLHZ3tSR53U@FflqcI4dwYIxsN5 zkJW7e001R)MObuXVRU6WZEs|0W_bWIFfuSLFg7hQGE^}*IxsOhH8?9UIXW;f&eCns P00000NkvXXu0mjf2WwmG literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/h.bmp b/base/usr/share/icons/48/h.bmp deleted file mode 100644 index 0e97abbb3bc678e06f509d963ec26ed985eedfef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/help.bmp b/base/usr/share/icons/48/help.bmp deleted file mode 100644 index ed5e9c66b9ea12d36cd44a98c393435d21a81797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmds+Sx^*L6oxTLWvfc10%exBB$el&sWJ~H@_;CU5TZb_FHuxP2_T@33Ij@^;DSL# z1&OFQhyk=Th(J)5pzH_=$S$iI6h$9gSWeF0VN#tLgqfaJtaSNHPv3jb{m#9o&%NDk zZX5fRk#NNF|65qI#x=v}bE7v=!sSgL{3HAvKgh`F-+xBtmP>=x1-kxyL)VHr)SJO| z-e#Gw;LbO!c`OUoB9`^IaE@yzLmkvb8?=Ru={nxxj%TtK8XFtOo0^)Inwgp1vb3~( zXlG~l%)!B7)XB*S!a1&WavAFU!gVc7Oia)gHm2iv$I8me%ii9;5S$*aP87P_mg4-) zDJA$jI;)sNxm#w_rEpV0IL9@V#jQ1`kYzR_+~yLu_i%J{gsoTQ!@J(z-a*dJ&V4S< z&J?=LhK>Y%PX)|br2JYhp-u9-dGNcJZ3XZ=y=*@gxwyErF*_-ItSM{bw|enT=3ge; z+UT>mg>5fnKjfYZjClgMS9&a^)X=%IaclZ?B4jT2VZV?2l4~wL<@l@u`=%9(DL-uX zOJi62@<;e=3R`Ji!F_(h^KHmneCg`yD#T0dngvuGG3%9Tum61X{RNMo6dz`CyJi;` zXF3=(pGvmPnHD7kS-=N<=K=9vjhNXRu!u^d=T58Q0;~{A`rHqPI0sOeuN_^9F?%hf zTy3|Xeb6P2tU2b%*V~awVi!=^uKBNpiefBim6zjGx%EAc`F6z3DWwgS$64yF&VqRA zuS}m*J*7vfa-Xf)fJyQ^7iO$A51y1_C3rv(Hyw*T0sgwC#pW=C`olkf1=Un zPp0-^Y>aN6*(9kCux<2nVpOelEe~;@7UfE{iPBYnYy~x>1yb*o<63^)Zz&PVZlwAd z)Q4)DYqmxVeZ)Cu#M8~0s*=3uTC(BlDmQFvHK_b$QE%xnE<>MY7liW7eLP=SBRj;4ePnPmSq8vZ(j!2`&D?))HB4 zgOORAMf~@{U!w}4ri}HnsIOe5&EHlki)}Dgt3n1u{LjGOn5m#<&dYKLdkD?rLHku% zY=f^ML-ACTzv*l^wVYGRqTAIOn)vjfqg)o-U~D`SF6I~Fr#>^1+J29cMR#h>Xz@Sn ztdzwz7@1WZKf?W6o*qfvEGlm3lk*kc7=A%6#MeH_qt@;nq1+btA7yXA7kDNjd**yQ)l5}>M2Q*r2Z-R zAN5?5WLJ}?C8X9aZmTUv;$M8So87lTVl5_vNYNm8H(=@Qpa7>7u*lRJ&n9%NN$~KE;vUb_Z^fF@0!dL z{YGvT)`uO+5UR~hmTfMobCQVX7w_)z{b8cM<+_Hs2a>FrBz zMY_;7QV{@Kcy|xma&b;&2l)(pKD_rG_2RvEq#}^`o}+@(@l>DxD|MEtsIT(0Ae`eG z%8--U?-6d3%WYvp-`qGAo4)0Ee!w#j-b3P96wjuEtmosxIj*4$b$(=KyffCfpZ{b1 FzX8^}#f$&| diff --git a/base/usr/share/icons/48/help.png b/base/usr/share/icons/48/help.png new file mode 100644 index 0000000000000000000000000000000000000000..d3d2f695f3c9c0eaca382eb55b19363fba1729f1 GIT binary patch literal 2240 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 H_k{lfD$*v> literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/image.bmp b/base/usr/share/icons/48/image.bmp deleted file mode 100644 index 6e52570142d5c60dc8d104c65dc40eaba3e46330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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 diff --git a/base/usr/share/icons/48/image.png b/base/usr/share/icons/48/image.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d1c2d7e4b5a0596b3e3e3649fd6aa6b712cda6 GIT binary patch literal 1951 zcmV;Q2VnS#P)L5au%6+(GQf>4E^RqJ(-i1Lobr9yp(l9%KS9*`nL zidqCbq!B7Xh#*u#Q-{Q9>ePX*V%3G1VfZ^d`4jw$n`1trMlarG_?J0pr6~n{B96EG} zv9Yn2bGh8lHXMPKBt}O^UpjH(#A`hv@F*o&KOReI`zPJJ0h@_%uh-@ag+E{N1$U19XWDj`HQTS;{5sZ zJq7Yf`|o%XTWh&??b`Bu*uQ^&PYJX`MA)-uPsi=MT7{f*eDBO9iu1SeJk9XfI7Wlk zV3c4~v(&9;r352_5W;Z{4{g-AwZqpAPdSWs7zJ82OHVmGy?U&k z5@^SFel*3vw(WfN;0rwW#pk*7#;^IwLSS4IbQ^pNu&*qhb{Gw28E^}9`&qkX z1=htv?RfpiC=I{K6VzJ1d|9Fv+(Vbks`WK%4{J!RYRUAsB>2)P21q!$9efZe_ zLeom3gjno-^U9w{BmyqJagnE<*#ogdiz1y6N`(T}I%<`Wa;doh zC;?*>o)PNxkm>9H=AA2-2~>9$>RJJ7wor|d)T(u6@63WzEasP}l;#;6`!aL)%FNCG zmB4GN<*Y?3kFXX|uhj{BgA#@Bnbwtv>b)(Fk7xzU z7OK@lR0Lw{RPuL;qZ-yhkQt#=$P;AJBojVCDvc6_V6g}TgM$RgES^?;X3sAAHf^H6 zFU!*18Q%Qe1+W%t-F@TrT!GEwyYbC#X0N_UD&aFY@+{e{qolWtl1RiX&40w!Z9@!= z?ZpcMv@sYB3m@LZhIKs85H>=V=HBDZ^ex`{&F}F7k46+Barf6ZT@%>h{ehrwoSUUN z5(!H(GlFkQQ1~r=^Z{N;F<)>jO{ZDN@1RyJke{2S7Dl8}8s~%{=};QNx}}(pX*67O z-=w-fICX8IyC2RH-r_vWEefkZ+RMtLM!#3+cO7_BtbT1+E~ zDHa@}6j8l_bq;W7tr!|nMAdb+(Ac;T_=4wqgcU=*B-AT0e!{VM&*GdSiXu`OA(<5B z?}832)pCq&Shj2xtOMi4WU~%YFf!^fuvw^Ag?BEkg90l<3DoKhoYN>1vv|*v$rx%y zuyIW6LKK45LLyLX{w(a;3qitBE(z6=PgEEB`W%&tqh5!_dB^N+T57BV0p}dYjvWJ_ z5jm`bg(7U-7LzYR6bf-eFxscI7~=U37ioN7Q7J=y$x^E}4=bWV0$<2x4W1|D3lR(V zVoJpZzAt1`8IB%3%GtALd#gbExEI+N5e>vFEee}A8?IjqQBLFeknQt`LqmBn;>KJ^ zu@qx17$YbHgM%KvFU;JkQZ8A%KvAn&v;lCd#_G9+M1+}lcdS_#191ek<^5Pd;6X63 zx?Q6Rg(@UGNVMwuQme=4Cb~M2wa=V zz0i{y8(x78PvHL+dfc($32b-^J&3^aH+|ElO^+L=(B3F@OW7eFgZFfFu#x0Z2$lOC3HntbYx+4WjbwdWNBu305UK#FfA}P lEip1wF*rIfF*-FkD=;}aFfh*2ZP5S#002ovPDHLkV1jkQk*WXy literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/julia.bmp b/base/usr/share/icons/48/julia.bmp deleted file mode 100644 index be4d02315fa1bef7a8db04991f9be6acfe917e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI13v5$m6vywYuWjuf>;W5N8w1^VIFP{v+M(!}gqMg$ox=D4tt+;h-JF>s$-0mygXpwe8Y_eu&-|fBM{l4Eh z-#O5UJH3m4id7uvDA z-zBwxOtVFk2;&&(Ad@7YWMGsCvof<_KUG**h~nbnXcA@?cGtP{^70T(LiQFuX7k2o$hBTb%e+Wg;zs7<$6&hO4e4<@x4IRE z^=@6SVE6O6%inJ}Z~p5F|7Cj`f^%;<4bw9%Iv+Di)gGi*HY2tA1*n-t$b0rH*rvN6 zE%5mJC{KDxkEWpGW$to@^r=Yr9ps;V-U`kh^Slf48e(Q{5_O&%6LxsvIN^e6%rdH$ zWhi6kVp3xpZg`iN=aHUEeQUw}wY46^zuI_?9;`#KSdWB1`|Wet*`L*?+U-fcBF%Lp zaaJ>i?K%c+MlF=&JYwf+UxLN47+R(s>dnj0Yt0UnZt_5xLhDi94Cx-yXORbnb?$Rw zB$zLS%g=cw&{q?Muh5)Q1mxty7}MeKb6!iKTqpP~&k^qv zUi7JPqtBvOQF820jQZAzYfrXdR2yJ9@;7AL07%MNcCiM5tvb94@&~^{so4Xy_ef~z zMbJjgKoR+!G|Lx9u`jsvdHcWDF`mQWAGptF`vl4>y04I*7;bW*@T+>LX$7zhn+w^L z4CCM#FqFLpdBRUH<=J7Ix*O)4aen&;vh%TQjz`S(N2qTJWJ`kH&yY40F;f@e+WoEQ zQBC=3RjVG~sg$1s;~*S<&XepfdOlp@#o(oGT>WD!lnjSHr>q+NjIzOuxDm5qyLT6Q zt@sGqH8pfi_FwO;gK5xMB+l6dwdXbdKC;mQW91&ClvknuMi-Qo9(@gX4;MOw!_WJQ zX+sOF3q8nP@eY!!UxKmfYnTgefojY4&l||5m{VcScR-Et*){OmIma^T$I>3>+#0fq zAj=Bk#@&ge1t)a-@tzYdzy0%iU3cqaE@V7h2Q_DmZyv>fn8In0%!wW54P=Pq*qCjn zxc9}4l9UbGZHtk##LT{>_2@&fVhwt~Otvr=&xfUK zFVv~?k$7J%a>;kp)jt0j6`}ud-qC8^xO`nROcU>hxt!L)n(k*%V$%^{xf8|#rT%ll zY_Ij5hMslD5qH}**h=O>Znrb{WnaqJcxOO;+OU|+bfOW`bzi?x8eAI z2GxkXH*zjWqgrPCN0bw0uZ5O8P@hvVTM;v~9I>Sb{COl8zbSJ#tWyrabj3tyj^i*) zu7e?G3guby#bK3@<5H2e{V-BzQ+}RL`wH#nT=TL0a;dJ1ls|v3FMo0ksn-W{T5!d4 z9>i9xhGNZznve^1!lRJ4pMX~K6eQZ8g7Nb?g?xwoN7-@`IW55O-)YY{_!Ekb{)Lp= zt5867pS};%{>62m*mJlxkCdNdm}_+&i}ys0_IT+b5Bje-f{||@$Cdk=QGBo!l}&9Z zI(7=ik{T%SS!7oghC#P>(nW?kt{O8Ny(rt`Mcge^KV07gm0GRJ4Yk&z`-|Y_mTT%j z_Hg}&`wwVe12L|R{7G9&dOS?)d>8GNH@l!tYQls%4|291f?8A#L&i|pCfEA;Wn&zS z;}#+F`MoGuO7~QdP^}=XY}IQ&vDb<@xb3-}YEZIYSNZw=tRS@~$Ckf-&`T4DL-6Qk}Cw|2} zTt9O?+j$=T9!GJ;wY(l5tOwQj@prf|X!8$Hvaf<=Oc@F`kgaDDJ6|VZy;=WYasQ|LU$PpD@W&XZj0in&6y zUE$|3izpuidma$BOxo&u?q#3mdX-zYHJ=xK0$a|}gNd8hI23c>`L6Pdv3QNyUaSk( zh=EL@j#J66*$=rU9`a!WMhA&cF@C7_zvAyaKHHCDZUog@TyF{C-xMO@>^#2sezEw) z_!qnF=D)BwyIAXRKKn=6@BbZsKX*7Bh$iX$`@h|8M>I)0Kfi;~-(T#Qo`Gl*;ur7n lqWS%ucn2xog^8H>Kexi}%q~9B^zNEjyFc9)=(d0){R1!Gs!IR> diff --git a/base/usr/share/icons/48/julia.png b/base/usr/share/icons/48/julia.png new file mode 100644 index 0000000000000000000000000000000000000000..a15160877442567743f67f28d5432412ea7b74d9 GIT binary patch literal 2269 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 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/mines.bmp b/base/usr/share/icons/48/mines.bmp deleted file mode 100644 index f8aac1da5a6e923aee77a0e29c1c2ecbd8684b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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 EH~lZFasU7T diff --git a/base/usr/share/icons/48/mines.png b/base/usr/share/icons/48/mines.png new file mode 100644 index 0000000000000000000000000000000000000000..e6e6302bea7b3488873153210c3c2c367521e674 GIT binary patch literal 2892 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 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/package-uninstalled.bmp b/base/usr/share/icons/48/package-uninstalled.bmp deleted file mode 100644 index 91b3a2b695077967e5eec591683621f8ce483529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI2>rT`_7>0`yHFEF}BL}0Dh|#F1oC6q6649uCycPd?1>B&Qqwj-#$!sICNk4Y; zB|G8S&bH;9r_gqa2bo|%UUwGS;-&J+~Qyrar|KS7u zZm;!w;^@4A^}v`~;=YWF8{(F@Ehfa|kih{LoN&VtSDcOAIY&dbx-TAzIWaFD4GG%D z0T-Nb!?Ar0eBN$~X)z;e@m#zT%i>MLTWtq{+oNq9aH$1uIC2d*)Bl|NB`J3QD*ueQ z-!r=7Z2#=r&$^b3xZgj?KO^@4DF2Mu|5*MRvHu78XT<)8^3RC<_vN1v`|rs=BldqU z|BTpwSN<8X|F--yV*f4qXT<)S^3RC<*X5rP`>)DBBlcgBe@5&-h&lOHv|)ed`5CeQ zYx!ry{x9X95&OT8e@5)j`c^cP$}EY_C(r)RRF7s#nI+Nrd~-HSrVO3UX=f$ zvY>8Q(6;P*>g=lc^k9o(R^^X9a8755zrjN0fbB)>*4BDUX$PGRPv6Y}%kL z+NACOT_gUi`y7hs`3vorMCTtUA9o6CZ#yD#4#RjUiOj|oXP3LGuzs}>Na;>JG8w;eVVxD#>V0r|92aej|vDpXvuKDuUZgQ+R!BaKykgY zX2k;bl1BG-Pw}wbZx56z8J>O9w}|Hs)A<9(5-;t%`p%-@=mCKp_uUV8tdr*xer8+$ z;zYTE)3Im1x1DMqaLhQBFu&kwGy}7a_RS^c2UcHEKE7$gEm{6K-VbCd4siq}vutV5 z_s_4%+R8q!;`WNImThZWf4OBz%~RX-u)AD!Wb)!_fm|AEww?ttiL zTu=4q&xm+yeEyH`f~g))Gmjq-d1@IO^f-x9Sl_g1^^xS_sw z)|Q{m9z2GUx9|Eqp7C~>pyVCD4^L0;ad^|8qWRi;^0bYgZ(P$#E&pxKq@+HrhUYZL z4iAS&`Sl73@ruAxzgp@o%!p_QqHwt=OUfx-U%tGOr|a`RI%(<*Um UICm-cB2WW^r>mdKI;Vst0591OlmGw# literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/package.bmp b/base/usr/share/icons/48/package.bmp deleted file mode 100644 index 0d76c7fe2a0bc57fd50477b00b01f8614aacbf0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI1Sx8h-7{{lDN@#nCi0Gk*9wQ2hh#FHPY}2C1NKCZFX;Dkepv)Y}8XIV_%>|PJ zNk!UFf-JRY6%)iP!)Pxeg2?EhhveV)AN}ewSV;Gh9q2N@xp(e4^FP0H?gw*cCL+o| z$rafA^1NG^+QR_XMAsm;NPGK;ZuqiigUj{f;fjb{o~{jj-4E<*M}zte5Ld!=8!QYF zh6=-kkbZ^^bfFX7=%~JO7}$7C*v5Xth0($oVXQE&pP>U?=tMU<(v{9S56+46WS{ZE zBw?~JO_(ms=qETf9q2+Qy3vuYdL1|qUYn7^1YwFWSBMf~gjgZ2hc&YQ8|Zi(n+|lL z6W!=IN}w~{Z@E2t;Pzyj$WQn6IdGeZuDglubnfvFP1*|+QU9<_KA4F5&r9~hMAU!& z)x%1PBI>{4)D4)3`g_jYhKZ>E zrm{wui25g&--n5)e`-|=Oho;+oo|EFw7%_x6{qu=r~c`e+Tk?KuRCGI>3rs?e@4v{ zI8EcLPFQg|pLy!P#eZjbbfSZG2Lg*Ny_>*cXKXce3e-3Kj#=_4Xv=^ zWcDgwWtTY5c5lp*zW`hZ+)3Gp%*e-@BQ=h3y8Z#IIGMd5BR?7;>ibpQ1kZuj2ur=C v*k0Z7#~i%z5?1VFEz2qWUEKux4+~51HtJ{dKd`3@oq|38zy7}hc30p#-(v<) diff --git a/base/usr/share/icons/48/package.png b/base/usr/share/icons/48/package.png new file mode 100644 index 0000000000000000000000000000000000000000..1981bfa1371da9b98d29bfb01a75e3d14bf792ee GIT binary patch literal 1025 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%+1}H|F(l*O+X&xmVMmF&wDifomrZ;xe-ZWy$ymu7w`N&_^VbC( zKh$l$UaQt$>RRuxUe2cD|AA)qK*x&_TVAd7*qHR8Ic(#yS;uPLygO6zB5zV}=b^kw zsfzqO*6+`J+IQag{qJ*a46!8-IhI^}bZaX&nwBdGa=8t%ru)vFG02{Py+D+22o=-+d$1@buT-{YD!$&6vflweQQ)V&jmH zzjN4m-5!hWp71y0c6j8~j|q=;^;g_F)H~b%vM;NSZfqdi)jzLq&a6nPu}HF3VEEGO z6Zz(F{(G69w{M?MEPj2sOz(u>`t|uDXG^^~T~Ggft-P^7NsQAmwA7t(=K`_YEB7BP z5LmqNgvrhGYZon>q9qv->2sE~rpT)DmBrW7o7O69m9VNimQ;U!Ptlv;%aU<9sTH2r zwU@dyWWDq`>Mp#|<3ynXgT(xK+i&c?ojH5nnjaH?_r5)ow{%L%gB2xgznVJ>3?5iq zRdcz^dR=ROEhFp2f{a;DxK=YvJ9#Q8%Wq<4RZ&vQsVP=`2}z&cgm&-UT)94VU+J-p zpMPrW7w=OLRs7p ztbfO5>8ni6gN;(#qdrbg-sH>rqG$WP;#mGIs%@GLhS#djPugmJONcr5jKi~^YqtsH z={V&3S6Qnqh<*8XMnjot#B-L4{Vg_n4)4D;oMxJFz52js$qzOBCEh1$8RPU7&!;cA z&8)}$;otd}d7L|S4*XVqa+PO7*x!v$#WWOlo;|3U!nnlp=$_*6x$O*>SllBgFtRYT zFuE}ENPLz{K7U4Jqu_Bha|QuCm1alCa@M{ta*7vL6z}?q*Bu{4vFk7%}1m; z6B$exR2f*4r}UWS2~F;C<@(&v7_7$Xzm|aH3i?h~kJ`x?wso-DHYJ!(dQKBbOpVs3qf4BSulC z+$z@@R4CVqLGJf!?w4~8=bZhU&-Z!vu2yU9v-)e+oV6T2@AK^UectE&J-^%Yd-rbE zdgP7H|BdAM64Z_oa#dV{u5f)@N`O8_|IE1`|GQ?b(w~i8__b~L*ABco?tiL*5Kqfb z#FUdnrxM%*weks)RWiq9KT@}DT}w+#%TGw=nBKkIsi~=!pFrO+pZQUK3)M4Ab!L;D z9X{`DusN$}2^`a4AWVU2Fw}}!5$i;6J=l791}YRVb2q_*&=K0fZDxfy-<<0s;TvaX zuQ*%7ee>W0m<_ujGneZpVOucHHq!2JmczMIS2UxQB<4l>UGs32Q5gg!79#zgy^yM{dQ$2{cc+Qt3O>$bcVXI6R1r=aLM z1DjwRo?p*fBr=od-5~kf!pCsTB7BUvv-FohC$qA|?l@;#$vM(S*cx!03fo}@bG1SK zuw5oL>~Tm^9Cd@4uoAw2slZ%`=%QU7@(*_Q13vl}W-jV|zc;;q!x1Hbal z27Unf<8tT^mCf3O;^xoDN6x-wuGWxX)j0Nt#h}cqjQuvWvC6FA!d{+5uCk;O%qxA( zfz7Z5=E0wX`1=!iow1X-vxb+y9=%>5Z%StuNwJ>v{N7Mne%}RFV8cvPYQEyG@cCO9 z#M&yFb&9Y5+!f9~XRa0y_VO#UeFQo?7hd+hqo~eOuInuMi!rzMs&`-!d;+83ZnNvi z8^hTn&N>^zJ*nL7tUCM-(xIkR<)~}+9Hf-yzMdeT$uOm)Tz4`0xrbSDakGAT$j{!W z?AQ##_=vNvFbT9vj)%@fb!DHMvKebnL$dtm0T>K#f%Y!>)3s(zxc&j&N1lC!yHg?L z{qlBtxABY=Yf4Yv#8{<*K9=I`zqvbu{rPU@OZ3lqgr0Ut zWo_A_B~MHyd*ZL_qt7fEX6`!B0rYIOw-C4J9^cXaww3YEf;=+h^TLhvDl(U|hd>#^ z=l$Zz+}j=|gKV%4WX}PRYIY~jnv;kA4+qtO@Omu@VOAJDDX+d2)Gmt{|1?yAFdpyhS}5X=(uHtH)&CDcP4#=`E9GNN-YE+!B5JemB-EanslqIsm%gzq1Cy-IEqo=hg3)v=k6CQ(lP!+1dU7$Ugy&-Zk$XfEiCQuCR zJ1YsADaH5hqxS~bw;&tn{?Z9%1s0x%z`*Sdtg< z77zO;-o@uWpuN}ExbM>T1+AeiJOb>ss&!P0sU}lwc7dBAiGP9b$p6dpDNGbQpFhuJ za1S-6&!Zh_RY%B<&7m`>#{G)@HIMo;hqZmhe52tHAbD#?(RvgKy0!vT2O71KpSM3P zdCk|m@6u9(Tt*(vH4>C9Rq<$745C=GDjSvb)kI5rOW|Y|_ihLFI~xzfVFbJli-6kT z92AEXQt%$MfHA7BhQUA> z0`k!r@Fg4qFF*FQ1t5K?rN*>_)TP-$#riJexE)O2-vVi%Row|%LosViuM21| z`vf+#{$s2qler?Y3$mG7&c&6VbsyzkRVIpK?OM}eCTPypunR7N?S_pYpC!+j^63sZ zM-9dGRiK?uwN!JEjzc~lXctfxQ%-9MTFcE`2~+brdjM2*jf1(c5u~q7@N1xsjVnLv zJI%NqumM(r^sUNgGwg@+kgJV-CnyIgk7^yns~rlionXvbcn{=Q;#@X4%ln=RLhNVzK=rzEw&ec~q<_WOQPzmBp65QT{|lG~1K~0F zEhq{?yvgV-DcBj>(6$AwM^#=SUwyUX(`z94Gvxb<<+1VgFTcJ5T8H##rvZ7qyprvE z*b0(Wa?5u#=a=v=SO}lOd{_XA3)YxJF1diu$tJVmWq1fAeIfszSAm{#Qhm4)`3v&> zMzG$Aw2HZiV(V}4V0`&cG0w*cF|J(YW#3CH-;m5dC+7RgmrDS<+Ef@1qu^Cg{(b{= zo?IK*gI(~^uX&F0oAOOVDC6Uz96hb02$l(Apa-86!>1K*dd>j2Bfk9ddHHT6CjSw} z?*^@1vP=J3i(*%O*+4l{`kn@o`+49U!+)pp0Bsw19D2cbdezlYT4C^#s`iJ)Fu3Vtf?OR1_-<-2)v#J~khYGREs{B5en_A-?>Z z8LwQU*fs3zeMs@D7|>eI0PBim(w+yMmkmCHanK!FLS;zgy8@^8k*ZOsAq(@aqjfyY z^)axHXJrKWaRkpC5M?aw$FL2u^_&$j9NI%_eEHWgUO7X#(%T@5@v?(tW<5HmwJ8^? zjp({;vJ4bk-QZ3rhK!DPRd)xphIXKLw7S&ytm!)J(Ux(q0kY+gClnKl;4{#kqnORq z{M+C|7zB?%gZT1me^rh+4jGUGlKC>6rGEtEV_RScoP=ET=kw=#w0(g1vckN3>3zw6 zuhNyaFX;Q6C!q;zz!nu*Be}%ubs@4c&uQZBB+ojJ&ty}J`8ZobI~iUA#Z`KI`9F`! zc8FFsP%KN=$3Sv#faS0dmV#nSYqe9b6o!C&yaf7n)gc`u_fQxHe4pi>fcm_X@LfYS z#y$$efST3ID|;$uC^t*?=`a=sf!^`^#+P6Fa(>~L-=8;b+}QFHzm&gGqehmWh{~_u zVEpeFv!1AE`3dBY{f?KPf4__U1{wP;EcTny|8pDDyJV03<)`1SCF|9{s~Whf0q6b; Dwnpl0 diff --git a/base/usr/share/icons/48/plasma.png b/base/usr/share/icons/48/plasma.png new file mode 100644 index 0000000000000000000000000000000000000000..46d4144d082f93f9d84b182208c9a54f2e4779c6 GIT binary patch literal 2736 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 Q{|9)ry}jL<_x~jS1qyxuPyhe` diff --git a/base/usr/share/icons/48/py.png b/base/usr/share/icons/48/py.png new file mode 100644 index 0000000000000000000000000000000000000000..f843e41744c59cd0b946cc507c398e43d1f90421 GIT binary patch literal 1813 zcmV+w2kQ8VP)iesrfR6;_4_zPN;0Db90c>u%%B`>`37@oq5oe(u5 z!hk|#rH*BYZB-HNwsD*|>-w^1_gr?*nd!r>H@m|1b-g%0>8CT=Gc)J=`OVC4=A4D+ z+{8{dFI>2wnb`{;%*GD#+t&gl}l1L=5EbH>MYuDa9^audt(>@rQwrmRmK@>#*#Bsc@C~s#y zJw2ay>kXhW0Bx(!QmUqLTg0PBkGB1NczBpF40mk1cK`uv!#QMVf>4Bs2(u_bYdV(O zaZmbKzCkGwp(V7e+q7p}8U}eNfHDPieb|9OP_ko^OV1LR(1Nay+d)IT5hFvn%j#+} zz}6J$H4Xl@Jbwz6tIpUk06J^z;{L| zl}b!cPal7PX~U)!$Zbt@N1Q%= znsho%7={!I1?J}F7#J8}aBvXUb=ln9L`un>J9qFr@6f{c1+bktA5S0vLudwvhIst= zF$)U|2qEa~>||(Yi2L{NGdnwrQVJmiwr%g}Y;<%ZQ1@em24Y}jWP~sbDHe+q3I*1R z>rBTpnEjI2(pbKvZK;KPyN~M9$h_d&U;Y-oy}blMKwn=UK@hO8u)yNtVv_)BY-(x> z&-2h)qm;t7ZBjuy00MzVqfLeNsey7drYE^~?_RZEDP^_Ye%D1q0M^&ntL3q=F`hhm zLL!kMl}c5kJTo&xOG^um0Cqc2?7@QVPQ`XlrXD48x-xf#}3H5aA|r;{#5eI>nhYXGo{hWHK3U-MR(9 z*|TTKWHKx+eSqm3xL@=srXx&GVr@tq&*Z7UN`JbqZXej~*xV2RnVkhyqQAeNFbtWP zn7}X$9LHgJc$nqoWp3WQS+0wqm@Z*|YSQw^LJN(yG{vqG*1AbH%>Eztfv6m%hYufe z?%X+&$s{W)E1W-n9?$a_85zO0Z4ASpR4Ne!0fu4V`##Id%goQuV|WscCQ{L%#qS@W z#_ry|TV1?YuUw_qVMR1OY)1G+gw) z0U8;(wjaD(K9VQ}I!34%mHh~R>W>HNujwDQ;>-+%D;KNc(F&RV(vBazj@1arftP6i z{%@+{x2^|$M$-Y@D;KNf&ewklT7inuTJyqig2fN>#}6R+quo#iJ@yNGVW?m%o}gMr&XX;+40-pMLdH6`%^#D1bv*jd((j zKfm@jzB1TeC${XJHRZhr?8wt-ZRFRkzVkWaYh3GnWu+qr*!;`o`c%2Ca9wwO@rUmp zpEXcg{e7Jb7=lQr4U}|IgzNP_c^mtx@Rx z?%(<5i^&5&qv>a%pS(R=Gv^ggufM{?uScGrv(V%}p3?p5UmMonP5{-vC`Ly|8}`5h zS|tM<0N|i6+sy(HyEJluB+vyUfYypz6*p_#sJN)OQPaN$ROPx=RzOtarHcC%&jaf~ z4hRndKt+UE5o_0omK8VnU*WZ0YkC`3H6B-d3#M4PMwR>9+Ghf}HThnRi_-uA03~!q zSaf7zbY(hYa%Ew3WdJfTGB7PLHZ3tSR53U@FflqcI4dwYIxsN5kJW7e001R)MObuX zVRU6WZEs|0W_bWIFfuSLFg7hQGE^}*IxsOhH8?9UIXW;f&eCns00000NkvXXu0mjf Duyam9 literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/sh.bmp b/base/usr/share/icons/48/sh.bmp deleted file mode 100644 index cf08ccbf39df5615d08c2ece5e89112cf382f999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmd^E`A^)(6(^}wRf<%x_rWf^``wfKv@zy1E>~;}6myvS2$#X~0fwkxEH#Q!A4*f@ zha^gr$cpkylUA*wBzF31|F2KqXTHpKS=5TfgA*yMd@?g{-n{wDdvD%+ExHCCCyLbX zvHX8uP8I3PDHO zh3&RtJblxJXQN*Hb<&3~u6yvu-#Kuv&4KrNocL{B6?aLyphq1KG2DHy6nAC)fYQKNj*C<=^MRS^Hn}ztd8D%>P!{Z;XE+5I`Xa1p}CAbgDeqzvRGYBObh1^eg_~ z&-sq<|KhqAp9%gkbu@oW@(%`sCubYJIx zyfk3U|Ala;?of>z@Atd2IZtli&H3@CUOOf_e|W#iSHnJ|eSb~zFDWTOA-L7z#J9p% z^Z9hxjlE07c(=!)a!T_j?{~VLIFK6jrPNui&-;>y1daJW6bhjb+`K6KXYKn+j$hyK z;#<~J=|9TJAI`D9BMDZE07V<=dw!fDO4H+wBg8$#Wjmr9$AH z(X#6jKkjFWe>55eQBzZ+T0K5#o3bK^9ojhQ8tR$iAB)96(4OwUiq2sSU3VpiI@mQr-pM9~~uLQ6}_G2Q&NCmoyO zACJe8kH*GEq|<4I%F0T_6LDBc%We~L){Ml3GU>BbNJ(F8RaI4?y1M$9&HOz~@lPZY z$j8Hn4{`tgeJm|4;o8UmLRb6L?_zv>9QF0}um&a&-8?{aeGe&Fd*j9pT)TD+w{G3S z_VzY*cXyTU@bEDD`ucGG{CTyXDgHXo)9DKFS*4)t5FD2a(nuYV**dn&z9av&aq_V# z{)}}dBXu#oi$rEkFe&-)mg-ySyGUgk5Kk{7o|zG>OMgXVmtmzhB&RN`T(ND?&dFhl ze_2@>G?<&Zf7Y#O{^!n}!~Fcbx?g9_o%T)fXFbUU>wPZt9BT(_J8KSG>Tpi?IcA@C znz|h8HI!>Rx;4e0dk{@cO{zYy=5K6l;O5Pnn3(TP^ zGH&0#joH~*PsQ$~#h{wBe1CY?IoHt8pz@tL&v&-AwpNWf$38(h=LvpSaE^9N z@uxk4e6L)&g6ZjL+`D&A;dwYA<_nf0l zx9l?(rup+*i+@w1AE&0KFg7-Z&CN|LEG#Jh^1FxMq>K;i%fP^Z@-cN-f7tTKAS?V(1w2Wh}(=B76W2Nopx2E`W zUxG2GPw8*wG`}(V-OF6&eV`9Hrkr(O>oE5_J3F&-`j&INFFXTd`hRemza4Q+_U}j9 zSFAJa)2F<5^uHd{=Q;*FrdC%{B_E~EfGi^7YKe@}l1O6hhJ}vhn{?|S{t2USa zq2K@flH8B*XUxwMn*Sm9_vMXw8Nchb+5FGV%d_Z{{~`CM2K;`EKkL|8g8X}WdY%~a U`w{-M{R;3%{ynev{Ux>k0W<{%00000 diff --git a/base/usr/share/icons/48/sh.png b/base/usr/share/icons/48/sh.png new file mode 100644 index 0000000000000000000000000000000000000000..ed428267540f63852ffc86fdd7e7810cd928fc49 GIT binary patch literal 2262 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 HmwEmMqCCm; diff --git a/base/usr/share/icons/48/star.png b/base/usr/share/icons/48/star.png new file mode 100644 index 0000000000000000000000000000000000000000..32e63477472c0d7f833837fbfe6cea06924e80da GIT binary patch literal 2078 zcmV+(2;ujMP)%AItiLni~u`vm0XQf)8Du}R{ zUMM0G71*MbKxv?+F&7iS0a}AE>%`c*JA0Y054M}N*|le>S29&UX>?Y*+VlN?XU;j_ z*&X=*`X5~qM2p5dEgJ7g5V_hXXO4rr_`1XHJOPqOH2h-I&-ha=_EB;c8OfXFwe^%Q zss~APuJ*|Zz`?!D6N*?{Ub~p`#dRo(^74_rlsz#3c?q`7E?Z#9FDM{C-$`j%nMEep z`a}Q(HLMc8U%7Y*U;qY{b#+L1L+Du>gia^HU3J zuv+s*gv;azh&0Hvs?1wZh5>KPNPytaaY@)*SyxAD>WtVCkOg%M0k#}?8~2O@K4NVZniEq+AwIEz7LZ8;LQPuF}jEdWO}zGkyK z>gH6Grxl$FG`FG@yWLjPvWqn{2Ec&r<+Zg~6p>bRs#OHcubzvPY@d$3)858b4YfND zuQiF!03QZ^0Rag<0bT(<34RFy0Y0IK(r<3sq&N%m8Q*;-*wNSFp<&)XeAs?v4ktFd z1FPMR&Eddiw_~&0u{x~SY&PuqHk^gd38Ia0q9@wnheJfeQS_)zOxMvPG4yB*JsKyb z$I+t+bUlF{Ns>qyV|qi3f(mH&!CT@zjVcS``l4m4@y{;DmYEsaPkT z0aN;!v~DC02e{k{iXypnBO(Rt-l)-O0SLCyw!R^8?QUoLTDzk_bqD68I81&HlEtQv zewM~hmVxQI8Rp!d2V;o@-`k+E55O{(T!-7}cu< zbq)X=-;ZrL#IKx%uGd$r{T4;Vt|vgk*!t#Ah-cDiYM=`4 z;x$Dmzh1gxg}tJ-+GM1sK9SSeu8#+~czz&e7;@_djo(bA&GbZgSYtJCWMO@sXUUhp zFxsKa2s2;oS1yOR(*9Wpcy)tDn;BhMjkLi%REs3X=2n(1cy7&d#8i22ve>1Oe `SgoRK+>SWJIjj@GJ~KDqq9jM zuit_Jt8xY)V5M)C*My+d)@eSye0~c8R^|j?^ly+A{#hPVf}&xa3un6c%gNh>hjq-P zmoK0IG-UIai|K+nw1*limO!zuaMCDBBgxHc_vyIQE#vXz0f62I!<(yWi$%@iA{3Ds z-t7U4ito@KYS_uuX}tqVk_Jz}jUvbx#ex2ZoH~A$zyI~#jaVZ2jSU)GHfU@y;>PML z?V*m7$Nx!xZzLnUA`CnpfohmfBhvr^8vL`|jLYrOD;A5O9D%=Qj9C+>C3R(%_Su_qlw&3tf*N zOTZ5{X>_Ig^0sZnfqlWfwA{HBeY^XfzNNO_MrD;{bfy|DsY6(kdJu3Wm!$v<9<_xB9$H=sUS@c>O4M~xzC2SUcKQzznj z`-e&5afxaHmmBhu=IX#y3W?G5>Au^;r4OzX9*VXlEi`Y`%yo*45FIBHIL9yS zc1pn9b7fO0BweFgZFfFwW9#(EtDd07*qo IM6N<$f`yjgr2qf` literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/utilities-terminal.bmp b/base/usr/share/icons/48/utilities-terminal.bmp deleted file mode 100644 index 83cb6e77da3b6ba7371bb57898954c6175ca1681..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmeI1%WqXx6o)UGICBKFw6}#8TA&n4DWyPx(q8(0zf0fkZK*^aeGx?^#xX-QP95lo z#5i!^KpB{5B&abu@jvk2Se|dw-_7Rq?$Q!syh(3Zlza9%cYkZG-&*^Wo9cO3mT<3! z(ccdutKP6ZiIT*dtVHX7zx~{JyYaF_BJ(GaY8zbF!ghbYv0cYqzyCA?d!pTP$&{S8 zqJI=eRuNfcju@;ki~XP4+FEO9XviglS$TKd$B!SkT(T(N(oBZ`)TvXJ3r3zJe(62K zUsY9Q2M!!?R!~r2g@uKdOeUQb6%|>?w|)Ee+1|Z-UyH#Q z;y-=*bcVIKxY)3R2M^kzLx(a}Qc_|v|2lrUhd7Bz@hFzp5eJN0@rxJ6($Z2peE6`l zBS(%{$mD}R_Ys%kA(qz}$5#B+)zukhSj)=Fth~J3jvhUlv17-MnasbAAO74&JbodGiNfqFye<*R8-iB6DNYkx_r5hxQNG(g_`(r&?EH6PBjH%i2v-_ zvoG*gR#w`{lP6!8N%W6QvkD&!f8ta;ii5gP6KRV$=ns0G-q=Yk#F%aVaE|%RaH2PA zM%>wqH4H!eiOG+JTu~F%16`>WuMz`{q5Pjacg``0x2C4Xh!^8N3?G@U$p?R8^kX3( zem(qJ(Bt&QPU^tkA^!8{&%6D_i*H?BopBwzaN)ux(;9yG6BG9n2YH|-)I++W7F)&e zvVLH{5I=nEFJ|6fym-;->+9{(rAy8(U%qTIU1J?T{P}$D_v4@*=t{Map41c6L0WoQ zPqRme9}e~xGn`khTyf_!&v#d^UfpC|$MC~nvG6&n2f9)%LNTbPHJ3uOmCq0HYkzUW z+t}D>O-)UfN~N4#yLQcFy2d(w`1^5?E7c+tgS4cc=B(RlCczfsXKzg0@WI;L+-xl^ zE!NuFy2-fCI)3>3aiA}1sahxoUrWqb&I#s{-_PhMTMgg~@yEHv+}_@99UUFcIy*Z} zrfaMd8~((hda#!t13f_u>IZrn7G|q@0Uc2Tbd>E}fHA}`osds>;DWWQtIN8(yRE0E zXOnTAbz)H*+^<^D8;U_%(u`#;F)|@9(#P zfq{(ip6jgpad5vMgX%y((9_IU`dK>iYY^{)_&kL%#Lu2_cKBc(8XB_U;o(g-I5_Cm z@gr8%!jFNPYc|je=qO$T^#RWqny1+`1Y?LF&7cDq$SL`S5AM;?Q5zc@v+LKd+sO2| zwS6#Wt@mfG<^36Jes9`R_a?1reZm@6#;jwYC!;0uMNdmds)66j^ucyD1Y?L_dMA(M z6ZX{oDXaSGrVYGp1?%`I?P{SqP=oH_ ze)l=-rI|zx=mVXR(oi;jG^9DiS>X2od?9}F?)q?i&`Q6*W657uEdP%+m*>JLhO!@) zt@o29TUc1IbUJNwb5Tsw)2=Q~S0f{?X4H<)L5tK|8jAC4mTC_9JrLrDF~qNZyCVLw zZ*N)c=Qph4n_C8Z$&V{8j`AlfwzRZli;IgkKR<6XGc!(8+u_gF1Dpjr;fFEAkKV}} zK7HfER`=H3VvU6waEK(-KxL7>)5FQ`QHhDe2%_K{$UL9GiTuM9qf1dp+}QX zSFPZ;HLLvQjx{{GX*20Lmv^yGO-(udFq^oazR`K`GW{?^rGL(`?dXR+Lj24~`lDlF zz>0oeHu9Z(y5jUx|JjmNJ-%&2cb{t>-HTn?;f!GB>Ksu2au$cq0P(}5=LpU)&7XMx z!WiNoA0Kx;M-6HorLE-2-6;2~&*ONuYQ;aTSodl)f1){xFWlsPBI`r?>hH6vFP5zE*EMTjp0wf75qFM}0}O8Ji6-5=-IzN( zGx@pqXQzLD`Mn!IzxaJ7+xZJ)h@W2cpWBF`V|>7x-yO65p+Uzdki`(^0H1E-j&MesDy65>#bBE_Q zX~+LPM%vHzyCjSuer94WScsqNxnj{gc;WxgIa_kc;`}_H=aOyk^Bs(v&5x&(mP;1# n>wCOh{{BwiLF&6O^~C@Ar}7TFUb*z$HLSa@-3;tzAd&bN9X3fg diff --git a/base/usr/share/icons/48/utilities-terminal.png b/base/usr/share/icons/48/utilities-terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3c7da1caf17fa015fb8f4dea97401a28b9d0b5 GIT binary patch literal 1227 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%h11i;F(l*O+nK)EDy}le>O=2NPN`N)E;AKwZV$ET&|kyGELZel zn_SBro0s7qE_YO1o~*!8$8k{R%A6^zg;P_HA2saUot<*2(>OL%PVH()`KtKx6pm+& zi{jIEy{`OK`7iXUNz6m8|M?wFe@`?@QjklW9uOQKl`|BtJQ7MDDj;^8MC)nVP!plPlT_o>_UH5uMQP zZL|Nq^6dP|jJ2m_H~1$P{4TFrZ>Lo8O5VlY@W%u9GcKQgtiC=|?n|)Hw2r+SU;7Ae zGMg8wVb?@apxy%2)xZ=y-7c~yP*c>fW z|JUa7@#_u_AKt{5-2d14Z@0Ywi=*3tddDpsOPSW#I!@W}@t>^A0>gCK046nK_b0bJ z+e(DbByU?U(;Aej-SzGo$IeL#OwBBl4%;oizo#ciEBMGegYY)9>mim8L?_H)vH9_Y z*DCgGZ}~gHy?_idQWK7Ze#CwUm$UN_r%=@IL^j>#m>WY$1k8(Zn_CVk72l0Nt zS#DIV&|cvY@>ps^%N@~W`gX3RLDxCuf9~OkpObyn;ilC76OCp}HBasq+l5?fn49{U z>C=;L7ZKZ=iyr9-KXFcNiDAqud1ZCsNT-pZ>x!NU+6#JWrgF?@sE&E+bX6zzHlzGc zCH5Lat?r%Ko-VVyosWttnOstWzegf9w#g{%S#3OIO^s(|J*5OTsua zKIH{SE>!W9vJMbiSkv=~Y1X39mQP2z^KQ8~+&147#OUDGpnC5J`oNm%L{AE$@DIUBrsz7%-c$H6L91`viNB{@?U#-v1Z= z=ITDS|4}qETW-erPGCu)TH+c}l9E`GYL#4+3Zxi}42%qP4a{^6jY149tPBjTOf9qx nEUgR-_V-`SMbVI(pOTqYiCe?DOSu<;8W=oX{an^LB{Ts5V;v(= literal 0 HcmV?d00001 diff --git a/base/usr/share/icons/48/wallpaper-picker.bmp b/base/usr/share/icons/48/wallpaper-picker.bmp deleted file mode 100644 index 38e99ee0f728b1a85d93cd80e932724238b54511..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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 aI4dwYIxsNK(rwWI0000= png_size: + print(f"{i}: keeping png") + os.remove(i) + else: + print(f"{i}: keeping bmp") + os.remove(i.replace(".bmp",".png")) + + From 0a01944f00ce98a0684fdbe09b97a6af4bf9961f Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 27 Jul 2020 10:21:50 +0900 Subject: [PATCH 033/102] v1.13.0 --- kernel/sys/version.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/sys/version.c b/kernel/sys/version.c index 77bb4e93..c8efb841 100644 --- a/kernel/sys/version.c +++ b/kernel/sys/version.c @@ -17,7 +17,7 @@ char * __kernel_version_format = "%d.%d.%d-%s"; /* Version numbers X.Y.Z */ int __kernel_version_major = 1; -int __kernel_version_minor = 12; +int __kernel_version_minor = 13; int __kernel_version_lower = 0; /* Kernel build suffix, which doesn't necessarily From fc9016631777da38321f5a372c9964edb05d06eb Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 9 Nov 2020 19:13:23 +0900 Subject: [PATCH 034/102] bim: update from upstream --- apps/bim.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index 1579f531..b29fa057 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,9 +1,9 @@ /** * This is a baked, single-file version of bim. - * It was built Thu Feb 27 21:56:23 2020 - * It is based on git commit 83e6cc609584bd31e961c3873a9f3a5c7c2973ec + * It was built Mon Nov 9 19:12:55 2020 + * It is based on git commit 8e290a15fa796eed3cb2edf9a656f2b00c4d33fa */ -#define GIT_TAG "83e6cc6-baked" +#define GIT_TAG "8e290a1-baked" /* Bim - A Text Editor * * Copyright (C) 2012-2020 K. Lange @@ -43,8 +43,8 @@ #include #include -#ifdef __TIMESTAMP__ -# define BIM_BUILD_DATE " built " __TIMESTAMP__ +#ifdef __DATE__ +# define BIM_BUILD_DATE " built " __DATE__ " at " __TIME__ #else # define BIM_BUILD_DATE DATE "" #endif @@ -3161,6 +3161,7 @@ int statusbar_build_right(char * right_hand) { */ void redraw_statusbar(void) { if (global_config.hide_statusbar) return; + if (!global_config.has_terminal) return; if (!env) return; /* Hide cursor while rendering */ hide_cursor(); @@ -3258,6 +3259,7 @@ void redraw_statusbar(void) { * Redraw the navigation numbers on the right side of the command line */ void redraw_nav_buffer() { + if (!global_config.has_terminal) return; if (nav_buffer) { store_cursor(); place_cursor(global_config.term_width - nav_buffer - 2, global_config.term_height); @@ -3274,6 +3276,7 @@ void redraw_nav_buffer() { * or shows the INSERT (or VISUAL in the future) mode name. */ void redraw_commandline(void) { + if (!global_config.has_terminal) return; if (!env) return; /* Hide cursor while rendering */ @@ -8997,6 +9000,7 @@ BIM_ACTION(append_and_insert, ACTION_IS_RW, "Insert a new line after the current line and enter insert mode." )(void) { set_history_break(); + unhighlight_matching_paren(); env->lines = add_line(env->lines, env->line_no); env->col_no = 1; env->line_no += 1; @@ -11072,29 +11076,29 @@ int bash_paint_string(struct syntax_state * state, char terminator, int out_stat int syn_bash_calculate(struct syntax_state * state) { if (state->state < 1) { - if (charat() == '#') { + if (charat() == '#' && lastchar() != '\\') { while (charat() != -1) { if (common_comment_buzzwords(state)) continue; else paint(1, FLAG_COMMENT); } return -1; - } else if (charat() == '\'') { + } else if (charat() == '\'' && lastchar() != '\\') { paint(1, FLAG_STRING); return bash_paint_tick(state, 10); - } else if (charat() == '`') { + } else if (charat() == '`' && lastchar() != '\\') { paint(1, FLAG_ESCAPE); return bash_paint_string(state,'`',20,FLAG_ESCAPE); - } else if (charat() == '$' && nextchar() == '(') { + } else if (charat() == '$' && nextchar() == '(' && lastchar() != '\\') { paint(2, FLAG_TYPE); return bash_paint_string(state,')',30,FLAG_TYPE); - } else if (charat() == '"') { + } else if (charat() == '"' && lastchar() != '\\') { paint(1, FLAG_STRING); return bash_paint_string(state,'"',40,FLAG_STRING); - } else if (charat() == '$' && nextchar() == '{') { + } else if (charat() == '$' && nextchar() == '{' && lastchar() != '\\') { paint(2, FLAG_NUMERAL); bash_paint_braced_variable(state); return 0; - } else if (charat() == '$') { + } else if (charat() == '$' && lastchar() != '\\') { paint(1, FLAG_NUMERAL); if (bash_special_variable(charat())) { paint(1, FLAG_NUMERAL); return 0; } while (c_keyword_qualifier(charat())) paint(1, FLAG_NUMERAL); From e5a1054585da60fd528ca601a5d55f55fb2a5aef Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 10 Nov 2020 09:53:12 +0900 Subject: [PATCH 035/102] lspci: Add some class codes --- apps/lspci.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/lspci.c b/apps/lspci.c index b1643046..c27731a1 100644 --- a/apps/lspci.c +++ b/apps/lspci.c @@ -31,6 +31,8 @@ struct device_class { {0x0604, "PCI bridge"}, {0x0680, "Bridge"}, {0x0880, "System peripheral"}, + {0x0c03, "USB controller"}, + {0x0c05, "SMBus controller"}, }; struct { From f83815b7d781385c4d51493e82e1e918656923a3 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 10 Nov 2020 10:09:35 +0900 Subject: [PATCH 036/102] boot: add warning when unable to find boot drive --- boot/moremultiboot.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/boot/moremultiboot.h b/boot/moremultiboot.h index 42b41124..75a8ad51 100644 --- a/boot/moremultiboot.h +++ b/boot/moremultiboot.h @@ -916,6 +916,9 @@ static void boot(void) { do_it(&ata_secondary_slave); } + print_("Unable to find boot drive, can not continue.\n"); + print_("Please try GRUB or the EFI loader instead.\n"); + while (1); } #endif From 812e74e801fe3f6dcbbb1113351298e30eba85ec Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 20 Nov 2020 14:06:33 +0900 Subject: [PATCH 037/102] bim: Update to latest --- apps/bim.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index b29fa057..870bcb39 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,9 +1,9 @@ /** * This is a baked, single-file version of bim. - * It was built Mon Nov 9 19:12:55 2020 - * It is based on git commit 8e290a15fa796eed3cb2edf9a656f2b00c4d33fa + * It was built Fri Nov 20 14:06:22 2020 + * It is based on git commit 496849bab42290f42e9928f510a1d91534fe2a51 */ -#define GIT_TAG "8e290a1-baked" +#define GIT_TAG "496849b-baked" /* Bim - A Text Editor * * Copyright (C) 2012-2020 K. Lange @@ -55,7 +55,7 @@ # define TAG "" #endif -#define BIM_VERSION "2.6.1" TAG +#define BIM_VERSION "2.6.2" TAG #define BIM_COPYRIGHT "Copyright 2012-2020 K. Lange <\033[3mklange@toaruos.org\033[23m>" #define BLOCK_SIZE 4096 @@ -4425,7 +4425,19 @@ void write_file(char * file) { return; } - FILE * f = fopen(file, "w+"); + char * _file = file; + + if (file[0] == '~') { + char * home = getenv("HOME"); + if (home) { + _file = malloc(strlen(file) + strlen(home) + 4); /* Paranoia */ + sprintf(_file, "%s%s", home, file+1); + } + } + + + FILE * f = fopen(_file, "w+"); + if (file != _file) free(_file); if (!f) { render_error("Failed to open file for writing."); From f04be777ecfc49db6afb5e44c1e499a0fc8a8785 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 20 Nov 2020 14:35:20 +0900 Subject: [PATCH 038/102] wallpaper: new wallpaper --- base/usr/share/wallpaper.jpg | 2 +- base/usr/share/wallpapers/miyajima.jpg | Bin 0 -> 966337 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 base/usr/share/wallpapers/miyajima.jpg diff --git a/base/usr/share/wallpaper.jpg b/base/usr/share/wallpaper.jpg index 370a89de..0dc9bfca 120000 --- a/base/usr/share/wallpaper.jpg +++ b/base/usr/share/wallpaper.jpg @@ -1 +1 @@ -wallpapers/nikko.jpg \ No newline at end of file +wallpapers/miyajima.jpg \ No newline at end of file diff --git a/base/usr/share/wallpapers/miyajima.jpg b/base/usr/share/wallpapers/miyajima.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b5b3d1ea209419618eeeebdf4edf0a42582a80d GIT binary patch literal 966337 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

#R|SImQ;Bf7=lD^9q50N1Z~3X+Q0jiyJ_% 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

36_@SLhjTY2-FI74w{qpC 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 Ay`U%Tzhrmd-cHk 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ȓk@x%WKd29o*#P}@Olxwd# zaVj{$IV2qown4N))^_oLHzfQ8p>2?2OgiCGxj7xzTWv~`k;JFU0AS<2$YZ zHCSiY=!hGQblpYm>~%xAE*rvQeoS|rX)LxD0zwjnHn4kj{!uwSv?&PX4|h(9#~Eg8 zVY?^m)9SJ|^xOM|<2T1WZ*}%o^QF@*>jFGVJr3rTOfw@*kcRm!q^BtkBq`;kOA5do z3UX8qi9FG;0`bkw;ijK8^nMGFeV6uZVdOKGSuM^7am}c`K^j+G^zm1(hTYMo-&>`4 z>;~!VWgaEhLZq^}HJWn?atyfdECeWp0=CNV4+Rx|9Axp(+{Tze1AmcOZa)@8FvFFN zl;XlkqIDjhoerqpmt$J*%dRsrm*lpp>kJQ+R{`?r4YZV{DeRn~!GVu{!$J&fZmU`8 zWP8s$jgmV0c&6KbVJ?m07VWv9)EJT|aY#WbaamqK!B8tuC$Iqb(F=hTJkoCF z?Adw~Umehn%Ug3rCHnNr%!Ip8tIn3>b+Q7TZEh`SPhP_c0FVd1HOX8HtI0ILK(zk= zai_{|D$^Ckl`Y1aX-IR39M+%@e&G9b>!`3PyFh|GZf<_&Y^?_0-CH@=WyiK_t-E{B z(u6HlT44xb(uEur-Dyihs33vpP*y=YwBZqAn{zhgd8*(wu zjUc#qwCHQhSa+QeP%nz=rP;c5*n8Eo)EHN7qbftw6&9AsZm;Dy%Wa8p5DsML=Yy)252K*h8x6xz^ol@=pXXfWJ-Ft^)apE4R;Q9^>Et;nldGr^^D##swo@hcPUEI?q#EOrAP$7lt#SOkuvOZ~P9=oZ1Z#;H0=4(Gbym%gHIYHYC!Su>$ifVg8~_G9WWN>YEFZg0!V2)QR_mDoi#vP z?Qz|ey@anvq{#XEit)CZ4Y+AP_=Q)*rJjBi@fo*0zC*fqcb6~+lpcYg>I(a{O-8WylC!)OCL>gz zog`7{u_C;N1hhnoT~v0K@kkB%%0y(S;BknR9CaFwe6E`fv9!<~Hh$vD_;DnT$BeWRV$_FZ&aVDCCSb~8DuGMH|ar87(zhf$n`h` z<2uf;HO0ZZd94%N_BEy3u6#%=HMf&)3IpxBy>luQ8!iK|iW-vaX_7x{;7Qj-ieNq}R*yy7^axl-mh4jvEv zDxC0fM}qXK+_}<_u%tMYr4AIH34EaA7(Ev5e%wcWG3_MftYGv%FYuH0S~ebYd*8_a z03}@4WlEX3Hids`ZYcq}oi%BZNmA4Oe~BtV&rzJ`?65VM#CPdtW(M?4g=7h-sfAGq;uF>!KDj6R(`rK zoMpn+$;?e^XnBA>n*RXGrs_1~LfjVSGUA<6N<(Up2dCvwhSJgi9SKr``i$p}duvtN z3HWCr((g|)O`kwNEo2)IgNlcZNTGl9fGBusZ~g+m=P??k35uI31*sI|5``=Jxp7b* zd@LXQnb*(SOCDN!6Z!e#x9&X5<{J>L-wt<5qHV?9QIQgo zkb3kXW9zGIc-nbe;z!I8{4Bmqgcp<0ACa;5RTqYag;s+CGtal?DYZ1X z?I0yUb>gQdoDZkpSiU~ziC9k6e;fY*3+IBZe6z?+puYnu6h;ti-i))& z=dY5-oM9}q)2Z|6?fy=`^S<4_^dZODQwC^6fQ4k{bq8fgQ95|QixPBE;@-`c#m ztJcOCHd4$(QEWQqeP`9n*k?NEZi)_*S_`DIl&u`dJ%8(|RS>*gV5umPl$9mo0RCAW zzWu+xm}^2tM}uR{Ao{T&0+WEB`fJ@$T04nmP?ZGwz$#ZyzBEJoLW79~ewNx&!;UCq zsW=(^bQcN*d4!h$6m3;$OjgjJU_bWjrJi+7zzKOO9#cu+qDOAu`)E#9QM##d7As9M zkm^Fa4x{g`jh9~c6Qb%=1{`y%Ng*d0#<=F$Tx5g|QcI+;TjUZ!9kH$!ie2rEuZxW7 zMgywA`|H$HgPIP>2N5Wv4Y}NP&b_KHbE-m2+M^&6z+cxI^_3wT4$HPHNJ0K%WO{my zdz>#A2@A7diwU5&oxmg9cGrX20)fYKigv|GnF$L+=^&1SI+rj)F*&^xhGaGuf=BPE z0)*zet#MIXYG|cCteuEx?u6`gk4D>Oe4msN{d07t7NNM#G@%OeLLU0lfLI~A`T z5-cH;xu>eOVOw^+y=_Ue=%utJEHC*WjEsZrq{E)~2b9U=Y-9yfY&PIqmW`2f(Ir$H zZQ4|){KS<2K*=LdWMa!Rn&3B8jLBp`w)S24F5K7~i$tqVi777esk%BG^v;yxusQ$% z3GN$`C%P*2)f&38lY9W2jd9x|F*XMyI)X0B9{Xu#)|y(+FCkdR<)h+(+JvrCk7j9q zKED*UYiZspiI#@~eD!0O=dZZ?F~}eb;~v!sIm*XRFr_Hud+T!2DSY9;+AZ2$u$6yT zTBWi&tw3W-Wn^|OPvGI4hw8NjvGC=p)FU?~#3$4NCpw^)ia0G)JQJg5p zLvlP|Sae!5&ofzMs34JrjaXxFiClI|k^X$o~wjLt|Lrl!l zBhe|0;ORxJ{orYfA{=I9R8-bL1oFndd&XNUiKXZAGwwPsT0CA1H>I7* z;{<7IE^gw#9caPoHp<=SVqP#uGP?Rh)fv6S{GxlV!(AIU`*N!PLICz#WFVxLs*< zAOYK5LnU+$4t3=f*jV?}`GWG{!fRTE6+F!#sMu~SI1+xkGlqyQG*Lwf%;P6XN)?1IMG#*J zNcDSZ7q-=;PhV!g&9a>8EpDi;euzfn^>QOlL=}9+W9d>#RC?=e0j2ZohFbX^q)?&i z)s$sX&l;JfS4(Ohzwf4+RZP*N8+PUZr!Iee9jdZcs|wh-(yl5Fb^P@ttAes^I_g#v zmFgrYD;D0VC23EqLU6P|Q8a0QpmolILXdLiOuz?y47E$0N64wCIOV7oE?W4-Koj`& z62;q3TbIc=&b`W{0!CxK4_!zFB@a-0(t7K(S4Qdzrv3pL_R!oDks&LI{)!p)&iTnr%A)dufCgXX*Wx%mbK)9@^YcyQF}CAY`Uvz%8-zhWaFlik%^W|O2MVfN0vJ2 zH!(EXQ?<=+k5y8|FG8+L-j^ABYJ~EtbDN}kvQZif`2WI48LXD{1 zkX8@#6Rvh{Qm~>VTyPeys!pZK<={d<+!X%+^CauMu2Qz7*Kom4P_eIay?B|&K2E9O*ugzR=bN>Jke){iy42CDr>+uvu93QFI33y)QX;ZYi%w=N^58qrba`$8u z{2H?XAcsfqu6B+?bZrS)S1U{>9&r8jAomoznAFLe&4ow_^Zow1gr^n zB@X95eNyB!^D8J^DO-DN_;OM?D0L%5#b6}|DgDx|O2iaMp^}sR8qz}>c@}a>4?52~ zi%WSGMd3&B9VwFDS7@zq9c@vOY0oAKk0YKxT|L8{-V2#x*t0*18pT3_`;u8&lf<6K zUr6C}_JFWlP?ormsM=qP3f;QmqZ!K_PCpi}&JcL87JP9M!$he2v&EIiaiqm!ddXKo zg=@nJtrl0E#2ozs=WcB)qjBpk$(iOYDp>EGEs-lBZ3NyV51H0h`|z){%vzN8Uwx33 z1diibJlV_1TTC2r8$!RU`-4fgsO2t5LU^Ox>ba2@xmrF}v8xdH((ykDh>~H$o-=|v zD_TAugh>XLXNl*Af&%lJ@2gbzF77EwQ-N;&e)`t2t;dOD9OvcFOKA8P@aU%gUZpA* z(B!9CZYP=vBG%`FU{xAh;*Cs?L8GEN5(gA^)>23FI@az8!y8C?tt~H0BbUCS4JInm z@Z>VeMpe}6K$4|Nh0fY!HIS~qW1=o?Um7_F2=HlFhq+Ens-^7?CrxzwEF%AqUe#^&=KiZQO8LL^1i zs(Eili5ixr$ZY{c9=O-Fw6nv@khMLzOTRtlbx!p;_s*?&ix26Q2MCj!HF{fUNQ%|D9oG&3XdM2U`PA$Vkguyi!Py0m{v^BX z^)(FI)c2GdS<9szdVTev;Fw{~=2)+4vrKXFG^*3Vjegy`>QX6wVpOu8$4qgSJ~~Nz zGVu10P)CXVs)a?}DKFCIIT*R>0HQAz*6rJD#!bghh#g^3!*4g!BS~XMh# zk`wQ%RX{3|)a5wT=H6-4o&;m2g($WVn8iG^0=zeK`zdeB zamft22l;+c!U)ggd-XaeY~Y31G@(hGU3EpOJnCw$2Ex)nSmYKD*S>waeY8<4Yh)7( z!>-gN-)!AY@MTQ1B{(Mtj2i#}?nwjKXpD0ZI{!*mi44kJQ zUw`$}kN|FqLV9%vH3>M~yBeglh_AzR^h#3DUrvN$ra$`{vtcA_s;-f-H0??TM5t(kpzunoXS$mVTprBPzbKROc~^|p>&kor`meR>6C^~R;l zK&1lEO{Nb~B{dzk=A{j-w1V)C2pR3uB`J$|~7c)bw&GeXo|Qh`o>D=$ZJNeNLx z)P2VuBfs4B&(lR~jp~6cZ7l>S^{IC4Nt=o@t5Tr49}&!g+iq|HM#6;aiAa03!*?xspfuR1T~# zTImbN{Y7T@p=(;(-<7{mfp^-uaM%1L?KOj4uNG*I#Der!KvSirkyms&!dHS4wY?Rm zIUInH(n-JoGmiF&q;}+A)BLJDj9Fce6G_n5*ZE$}d@$^|6h94eE@%)C9;secR5u~y zB)sw?E94ZX9STu&d6AqT=b%snpc>6)J?4%6Qqt=chcN^KR= z#QOdHOr^pHs-0mjCFxx-dKj^!ep&7{OasY`ov-|TRp&EqU=5yIKDwIq)jPkpUQLN_ zKX6L6-<-O=?@yz~ZJs1D+tS*MA5ydFN&<@d{{U78xYwNP4{_>#pPv=Mj_!Ea-|cOm zfAiPN%{RYhw_m%e6cm+#287g?v78X8D+y0eyme>X=k262UL4{)zUtG3+#H1Uchqn5 zL0%zt>X(1`UZ~Kj^VXG9(;}xHLn#GKy8-bf00Iy7FpT}P@1}Trg9~eWDSju*E2b5t zH{-bZuQ4quWLkfRO^>)KRJPlhXICv~GpbKG5MwyxnJt%)pbr%JvUw~(oE>eW zo0>^1@63LS<%N#{gnw@?z8mZFP~H;k$L-&X1=BLM8azr#q1P&JxC&N@u-;|1bHoy* zDNZ599w{dP_V;dC1e`op_CD!&Sm=0>FYqVhU*%MAXw==D*gq8ZwLa%@)+9itRT_2I ziX3&RXsNgxDG5$erX=wsWBHDZ93CoXn8`FIyuK8M#)$E!7tkM#{(6+x#uc4wT@H9e zv)ZUkr$&Xd)B|30p-FAX)n}r*gaF@MDKa1D)Tv<#&#NTM8$mxd_G{gL;TBL2>3|hY z7wGC%Chwx#w|rN4vx^j}Jr?PVo063V9E2%oTnWvxJtZU|CCNTvPf`%k7|0k5U_Txj z>8Hddq&=QiM}gPignR~7WYjzuc%`?aTGYuZwXIh!q*WV&5hy%bsJ)2`02Kzum=c0; z6i5TsNhVOdh;`i8(`DQjmSajl)DB{L{{V5-SKC)~T{d^Xn{!x2I&`Sj>$;ChaJH?VT;~EB z+W62&_-fm`YVq-N;p=D96`+W_Xzg02sWM$CT#w%RMEcq)*iC7TM| zsL6z$OG~dwtI9DDRtjV zC66{5&;i?V_x^TDRAWe{UT(aIFD=Bd(`jfZWM!7re-R*(PuJUCb4w@N!{`*T+}XHj z1;7GaZ~p*OfZNdpZe2!X9rdB9n2v^`Tdcb+gaEHBx${at`M;K&`+C1!FOfn}NZ5ZW z$Am}QaLLU>Jr->;YK^Rxt3ecQ+Wz`cF zBay;Onn$kM2OHHv_?)pOU9H`A)x5V@sn;!21|!LNNb=onmrF_nbwZHipsNIeMC zT*bLf9W+4UwI>H8@2|}0R!`Y0hQ)_byLNkTVU@Jp3QbxNTu_u46{@99;f3V({#$I% zQ$wI3Z8!(v8Pm@k+^ln{*Htt> z7W%TBs8OX`%9$=Zj<(yZ)S|Z1(78-VZLcB5I=1_e&=R)R!@RqNP3I(T9r$`_zx?Su z_J=_qF1_ace6{IadU$F_<9h3=Y=+ZR;9UW?D)r>KR7kEtYNII?hX71C)kUBdUrgrA zh%fnAW+0IfmXaFa;?%{6%a_h>hr3RsdT4dmLP|TObT}Xi*T+$MP}^hsZ((A(D)+)x z)2C`SM$ENl!Iwv++t8)l71;HM;zUIe*(@$-a!i!Arr2SDX?c?2_}lYVXhQ zKy(yu#aWj<(PY19RPOpsS&EEw&vqknSYA?@jFQ8xAzg_}h;a(WaHObbAmWa87T9q7 zrJ~{U8KrAlcE71aZ=y9u5`33@vZhktaVIJY@_+;b+aLStE}}m?5ZYv8kF9&I&}yg0 ztx2xhPP!E?ZN3i>NytLflAuriA^M#Sq|sInZ)WJ+G^6zhZsV;**;^i+CQZLls=XP- zN?kgT%3PB$km7<`Ldrtb-=;@lsWIWZomGxDJM-S~9YASk$IVff?YH8e#PzzHC97@C zr?9HhoK<1!i-=uzsDM-y%2I++84L3lm1Lg10+W=ePmz(1_j_GD7R!fA?Ee4-kWbIs zPS5}Y_O|uA>O~H>w#R3dR`>WQv8XV1w#nUU4F(OafW+92%2Q9U>}Sf}$aDp|;@uti zo_Hi4xz}ZMk-QSy1TSQ8ziK#~ub;Crm$+%B$3d~s06wd)ht*Nd#F@BWCMyvmwD#a! zOI;<^f5b&H63k{AP{2JnEcEwUz4T6Q>sU4e=5;@wO1s)T2{>$w!g;dI>&yXO>c4uq z%3g;x>dO)q+Mh7hDK0Okm=x=Z3G3>1-!0aX;ZR8(daU4rKKd)- zb0cf~e#H&4hds>y0BwCOJlrk6ZtC0$gu3-<_vveGY`;oc5#$CG5**h zQi1%hK$;;eWscMlvdgqeRa;obod-fuY>qlX`T<)p^#7!Q; z+%33}&G%Y`N1W+`{c598X(A0q7?{hZLL6YBai+Z5RIf3d!N;hoQX%_3t;w#=D7QvoV~qxB;OzwOBV|sE`d;b^icO2jVX2G>yN98rPik>g{Gj z>xB`QlET$XEjCb)`hiO?E#E81L%xUHqniE1RRXi zpUuvedR~Nz+Uq#%#_e2Go3f$drmIFb1%nFHr=j{oCyeWcsZe3U#XY9E4<)x2%8RIX zK2vCPFDL}+<@`1y1bKkd%Z|MO6{$T=x>ouTdo0^HtHkfYb9ti;Z>x*1x(7f&H+u`Q zTCQ)4f|Y0QyjZo!G)uSTC{yc~e9EK%?LF6=9&2fil_+{5$EL-O#sKuVmGvtpT3>0F*E^X|V@&%{KG1w@bv;TX&*b&>Xbw zT0<7xC{D14Ta{Lt>LyfP&k!;d^Jjw?bgtiMj?>xuRx;O5BG$#*{xqM;s zkU1FMLH_`m)aU;I_@mCgHjjvFZY+p4MZHa=M2?wNq@nm|aVSV(v?D2O^uSIA0R4|` zXK|cCdyj(CWVZPm=9TdcZ(4NE4A$~#bar4jRH!!8&n3bNQmJ8lPa;R*Y~UW+?kk`A zl5Xf9qUKXu`d})okFBUXuv6ykvlAgqko-85c~aEnMnPNdC2tfY76=q>GWpZi3Ieia#9{F;|k!!*kQEyH(L9Oc&abSe!^dF*krdLO=ug zZQ&>w_Xi!duX9E=F?^Z_3Io7+pEJ6|wdW@-vBYe&g5%=q+t6q~;ayPcR2!Ctm9ZU7 z@rIX@+WIJRNDd=EnIjnfoOQ;q(!nk~q+eS3=(mu~21FNKFJG8f4${+WHy?tn+^r@W z6*3GsZKdWBg4k`}EqUwHEGTjvKL9$o#te@pFgE^w&dV>H9Q zxm9`0H&2}nnKWewM>V{F^JQF44ioHuA~kIx{Z2<_-R$4VXJanLj5)`;MUP!V*FOv$ zu%q0REw;FAE2dg1GU^o!~KYixPI#=#NCzY&9zIaRBT!n+(na^cT|PblPLvCTa6IEn0UB4x5l3pz?U=s z02W#S`fJ!Rh~m^QpXNWj=lG{q9aY`Vx~m)DzeE{tnq{32$OsHl7+RZc)Zmb$$#ayD zpc9ss!bm&;(mYyW+6Hu9!eL`Mk6+K8{*;bsl<%A`Ga&jB{{W>xf=IwWr(E^bC7V`_ zHrr0*iS+qgDN_`m<&aXfav90?@AcQY+|!|54Qs}sE-ooi7TBprR!>5omiJW5E0LKI(&APVQ#7&H@5RQj|u#WFd92XuCw1 zSD~UKVJg}gzNI3g_ zbO|UuPCXi$Pld_g(s~7B_s*h4qsJ{W%0=WO0RVbRv;FnL0Yzy$r6jPRj1kbN9dwEc z4R9rJ;YI>htZRo=A$x?~)g=tCBiQ3y=!ya63A{t-!jE1(b>NQhzPiwH1Y@qfOTpAr zRMEoHSIFd@0!ERtFKn3HwB*QXxb5`fvCHz%oKDEF5>1q=FaY2hJrbVUm?e10TdtKF zQ!avqCEaGo5KTJk6XKU)51@NJL;r&WgD4C*tv)ua`mJnjFyeB3nsnsM~I20DbYT1{Vo4 zInj~msIzkhGem&cUUc}*_>V}LxwUC~FI#prD!X`=gf9U^j;C8b9l-#I2aT2=iSf3H zk7jpUN8nk#G^?7&mqedY;PO;wA;g-pu(QG}I$`V7qtI?+)WOYi%U%tM0 z>IH7t971fTRJD)}bQ{$)8USCo@E9rAmx;8EQZsTX%W3R!Qb;+`;RHI+WGy-s<)_7e z!R!mNbG7SoICevdK8DkhPQID!?+|oN9Lwka(QxMET?K-u{{Rl1+N|<@7VF_T>HMRu zpZfGeOITs-E=BIel5$ne)!ZmTK_trQ&Ory6c7*t45SX)q???&b)Fo8!v+q(>0d zF=L8x-%)=I4mv5fj5&+&_=Df9I#$(D(fKbxcLi&Ps$-84)p0N48M$&s6IpzJ`@^OG z0MH^QWk3G_2p$IMs(gNKM^LKM-~Rv*>R zA{`fh{33sfin#n^U$w|;VcNT-5!4qBn1_PI!?F~-aqksHR!@9lQf zVJ*g%w17R8sw}=7$x75=aaTsrEf_uGn&Xiz4>>)d#eJ{@wr;2 zMMFlQu7mvAte=4gI_X-$$H;Ezm9HJuHxb2k6@IGHzvw)@69hYnUwpJZSv znIX5PeZbxl&GC-p(_(JRAbT$ zXQ|bMWmHbZ)OxXPUyI*Ou&RlpQ`Ae0p%sgV{>cvu!#k zsPcs?R$ZM1E~PmdiE8kD6k?hyOJmfJZ>EM?h}WUplGkCxD=m-D8if#1+Tc}dcUh6u z&n*o8T9C9sMOAl=h{-BGNd2`i@)1J;Rn=<9OHL?;arVZg+9Ea}nM0teE2D}rrQ|%p zF&k*2DpZG}0fKac)TX0c650cb&*i0z7K$VREallb3CEbP-%g`Dh?mStxNPiN5PO{f%0M;0b@+wph%&ho z8*)LK!Dx=-N5;nN+>I_rXw^dazOxr9mh;GKuM_R9mkWO>3oFEB)QRbk}y z9;2<+D}&guIgBiNkFe^ojak2)SjRD(op&LpmqqM14t-Y5@cVpOlqgKR^Nj)k?~P@1 zB72J3VM`kTSJPfDt!s9l<;I%YaGsb}sm=@B<#afM7}ZMer;dRxGqK>*dxP0}w8i0? z>J?sR765Ls=Hu=~#krM*HkX#L;?KTyp@s%P+bbO3pL&*K`VHi>jS$s05RqopsAnpu1CmxT+`lgQx4QCkoOszDMl~$(dVM{Kld9 zUX0wpa9A9H{I$rn%t>Tv!`61#h!I=d7?mnjONbIdEfe?E#}GgFVhW((%;wD$y)n11 z)H`Z15I6x5!0-0g&L#f<#VhO4M&S^(=l70%)@GHtu0xnZ$R`|C)D3NTBxkX;^51IS zTa`sG;3_10qjLU!j6*yURIr24jSr2QW~<)JHSU_id*ij6nw_{MbXhI)EdZpe-(KLf z`1MitsiBzxXBvj%?v0sIk1-Uqt;QA=$)lX={m?}#2rD6tkoTCw1DL5ypdf@(A#PFO)$)0)F()iAFaNrj+s9s-Dt?P$zE`(92+@Fy(@DhZK z$ZRv}QIR<(52k)dI<2cf2 zRjx;~S#g8PE|l)W_zB&M=DP}|a!{V8Qi9UAq)I_gB=_h&^-soqr^LjC&0)7It_AFV zZba>Tji9{&qg(V#VuuoiNeN3ZqotOUk73g~_{L6Lxf8lW)UUl@;zx;&*vCZHsR}xq zE(TM`dyb@y4X!WH?wz*v35%2uAs_Eh9%&>D^K7T4qC}vfIK~QO^*RJb+zrohf{xr= z>^;9NHw@E(s^DyH7KRmaRoV`k4Sre{T)`-LLm+3V>-GNtO*$U$?n}Hk`%~IZ+l!3f_>XUv&{~0T!ju$|)jc?<1J|!i{WMtPd2tPL6qB}xGkytmQa0Cf z;JsC|ol~zc$qqu4$V-i@t})Z!IOuVvMDs&I=uU3pDX*E>1g&-|$ zy2^4tKAHL+{`!l1GImmUm^Q6XZ0#zgT)e6;&9`7mW|L#wmAQbo#59PsNzWt@rE%m` z5CFj$3C}=qc7R9#)sQ}6DLcy}adU2ikN*G@=B)3G{T3{5729jEwC6mxZT-5nt+@$t zz!H)2?6{Sz4#P4IdY;GYtDYNd#C!cu$z?d3Ster|H98NP_Qw72A>p@t_MY6^&Cjr7 zPK|HTlTC^8vK)vIo+)S?GNc7@2?{`1Aq7N%oaZdu$=hX)qu1iE=87R9YujLL@V}qg zS$iL~HfG3J^c|$I<35U9AL0^Hi4T_+r(cotPN_;g%A9>_>3}(406J<6kziF zC2uci=8DvPPx(Prh)rL&*34C>vh$N;IZ&-Orcg>6XXKXAaYP&dK4}Rb^DR0_tuE~E z!|!U<&W7jxb_{F1vN)4$dsye(^Ep$ zi1B7EZn)GY)S-u5;Og8`Qh$~ZIdxtFv*SIDGB{{|l=ePEFAR(lId%DU^RKEeq10<8 ziw2KZX_>IA49Fq1Wf)=R-gRd<@4;yQ0MdHtc%+giit|lm<6}<8mg%U!Iv@|Fd)6kj z{uKA+L&H_SvvhwHa1}ij}0`lFc?Ohoz+@UUEZ@t;{6ggam@D_2aEWc*5whPh~@2*xd^hYkE6x=l&J>ZG13nTMql8Z!Xo{Ql{Uu>Lo%vsn;U^0Nm=a zoKjGRmWI+p0SZSXttnB;)yON5^~VOLn=^twh*S$${Y0c$pGYP*!x8tb1}cL z-o9$Mdn#Ka8zc0TP_HdI{XAB@+b@MDgX=S9Y~TA%uw(93a^JP6^lDvt@{EU99wap3 zhT3T$A+)E=Ss4mY&mLtd7^chOxidy(V~b0T=xcia0EKgl!ZBN&`gs}%jB@G$J1ptOAqNj;9=dDbE4T2a{i2R3-L*7CbR1uw}8n)INLC6Qg_s zZwhCJTZh73q2ou-w5Hya>a*1PotUPbcjTiFDm#xiFYprED^c>u1*DXu9OagAmrXZm z%ib0@@z(Y!Cva%7@q-*sE2-WmLIrLIhQG?hJ}$f__>=It;)irRJzuuPI-tGv+o*K= zB7MCixZCeUsM1oDge-GQfz+drAZN`49OWsu!O4njW;mT=I{U#@nfR}YXYvbdtrhAE zbRg_)XFCgaU96hi@w>vF%cxH;k$j#rP(OpU+oG31>ho-!S z)Zb-gQj&6e6r|)5G)HooMBN+B_EC(;*jO7Sgl4z5c_Q{wc|JnX&BGs2mN&k9nA9Y&4Mm8Ws!Dd?SCg9x)!d|>C?9g zqjXGb53>#|RV)rgKsJxt3MwDC(sOsGaqzFAxWg`shesPfxVZeu`Y9@m1-Ez`jVVHr zEe#>XAI8{8%DR#280n2lM%0|%DQI2}2VvE>UIy;H6$g9Ww|2<H zHoEPDPfEWN{liVSI%~~Z?bh4UZQb3cR+)}d%Wdt;Vy7LX1P2|YOS)lsi8$&=LQ(-8 zn`{hp)wszrLK^L@$K%WVDtR#kGrEqn(fB=*{#ZhXXhkuyAfffMNx;bPz zmYSjtmJN?h9a`>52CqQUzZ|ypc15FSwON9e>62o;C;j%WAv5Miz>%#|rl5dr#= z=!-nva3$tdA!>7)Tu8BdHn4y^w%lL4TITf{dcsjFq;0rX;O$xv+ti=k%4lqL*Q37> zROmE`_Vk*hoU!2ivr%Iv**cflSNok^CjPtfVon5N?53pX#@HMh`RG9VZ zwH0%>cW_%$Bg>*jbt#)raijtKiISas0IUGPp2+|y#>xR3aGJ+vWD5-)(a@4~zahV! zQZx}~9FNjOd3oL5aNINvNENx-{{Xa`@K=pm(zfC3Ei%sAnN2{YGcl+XnDHT{0-nn) zrAR|)_6bT9269POef5=e&YzlB8@GLyw}-|c&g^+=o26}6U&o?3wC(AM4yJ9wsUBlx zA%|KC;gUUIj-O7SbM@4lA3}dTP;+uXAhnfUe0;oBFK#_tn}5VFxxsSnWf@LzPzf?6 zEe!$m$aypeFIx-ZJ>th{$gOJHS{{XI{ z;(0=j6I&Kj+}p9&)BY6$e0VSL_qx~m@0;svh?Hr6HBhNiCb-A(6>#delG=dj#|1zI z9#|?m<6OqGmB&tqeHk~%=2V3*I13{*W&fA#w^|4!pWm~kQ#ewoH zF-?OVpc{_RbR-~ulyT|$Yp{j@c}?o5c#cj+Pc}rx+-#HLp51din}S2K97|EtSSfcW z2_R)7A8se@(Cf15lZ*cV0lqZ8RW8-i_v(jBLR4e_01a`M@Sv2HtsU|2f*U#d9BYlB zEdlLw;UfP4F8;`Oe`Xb3ONAP05*}z^bpBTvE^$8nIW1pLw!AfRlmen2gXk2EN~;Mr zw5OO`F2DF3@)QW>lG!Ox9nJ{v>;{H4M?0at%)BI6^oFjAl|r1|2Dwv*OZmwKX^_Q6 zQ;BVqo}5D}&kjWL=A`t&&Ys4`Gm;n$fKRv!Kb{J|BQ6|S2Wn^%0QDw^#F|vE#2Kho z^}g2mu}hMQjQR1SHCBY;kos{C0A)&Bqoagsw7=|@Ah zw9Bn*-blG;S=in}>P-&N% z642oZWo;#Gp-vE#t-OY%7Z9YSm;FY=hUJmO*%;h7c=Y}}cOHtPiogd4mOykZcJx1R z@ziVK*F&SVO?)3oy7x!JV6^Mk1nJXiQ7G}gQnN-wzc)ya8|8p`2*TQmrFpH#P$AAy zS0rc6bDa3eW;SOtMGp4IW9#F!`qJkFYx4MSE6ti8xNZiUZW>L2*G_Jw1y|rjbK=ps z7R{R6XXH$SO@|%n5T9-K5UA18`gtcPWeVrP_xdTul3HsEe>$-3tJ$cW?FF9=bw3l} zJasw+pN*XU*2>YTq2s66f7I^)02-pN5F1BWxF5WjdaT_tWqNaTDDS2@N}|G$;!s`< zjD-IH^uCOzQjz}v?Fr98(z^#GjFE)u8?UJ!{{S$00bRW5^Xv_HbsccgMMCQD>UdUNNeC%mPl2n6~XaVa4x3mWGboJRM> zV7cG8`Wm6-d-;zFLH2(b%GOK)4QTFz{{T?3NA7CP$yBtJPD)a`1sU1X zomuL+4jwodJ^d=ieuMPQ$K7MR%`Jq3neFn`I^KJ5Tw75>wS18vA^L>mqa!EE;*{~v zur8CH#~S1=Es(i-W(Tk}1yzvEV`^o>WG9+wDT0@o0~|w-q>?_xdHqh09+?Bx4a1rO z2Zbt2bscWeuwL6Z4y=lc?7obUAThT@*;@l8Mnme7cH4TqPi2ocenE6aX*| zb&-b&(LDBNRuk`T-=3>klf*kl4sk)_{{WZg(NG(!Dt%{YZyRc}P+>A?ZAF~hN>>!E zpy=vPTn;5(ula}2>vO@_$n#-)0jF5^()ri4Gf4a?nDeV>_-Sg4@cfY)wwmG{QoyJM zd5xzW)S`?Lob>#?^Q~7O)*&9+e=8mA!+E7L-HvaqetN5ZzfD!GyeqWYN{lMJ6;$D@ zkN9sAqO=~p2Oxd_0ION3+xn~lFIJG#>CpaoEnZhX4-zns+TqMSdXLW)sUwH&Kq^~JhVc3m+~rQN6OV33*k?qEmzu`cr`c2H%HfM4y$=5Xf1=J_ zBWZud_I8bKv=mvPP?}2!Qn7*=Lb9*?%XEFaYSRir%(DLg5~%YT+Cawm54ZfUM?3*h z_R8LWXr}G#RYj@GsKumRa9>iC(Ulh8nx~&=sYfVqtSj3JBoGD$uvrDtWynt2k?(M& z_lX;ojqLPrN;(1m0L5$T0MEU=KhUB;s=EREg3zT_+Jeczg^PL)E3O{cR-rLr1gKNjPmJv_G3Fpvk(3<0dP z&vb^}y0nTh;GNT&l~2n-e8C+@xmFL~uear)Ho`9}c~hjLD@xq&j-(EU>;3i0)lBV6 z>^efF%tD_Yl&MNd3eG!YOhVF7q?oW8Qf8Lha71>K#Hk0bwsgU6l$7mDpUhG!r#7;X zGn|rAJAd)lQ025iDGQ?!XiqXRfs_ONwcb_U&=Wy2Qa)9eSa7eY;+{QtjRDScY$Fc! z5R_%c+IQxaBYqd&uWpo=UKv5mWb=uK#!uW-P-h(3XzGTX-fDoPy zRhROq4APz$aCN6=}=}NLK4`s4*2fr6njrMslO0 z!vm#t1iZ7cfmhW{#JDe))l9V-DPWu#80o8lj~+Wga;-0P&hDtXrrg-{*uTX00oLDe zdXJuS{<<*9ox-C~nh1k!%B=)^wpL$Q@>Z0OFYrDMumqw zVbS+1!~s~OSgtV9Jr9wNn%8jbm~lY2EY^NJ*+PR>K)Spa?qxk{b^05?p1*+WOBWf0 zjn-yv1vT9vk>N`Ha!6@Zmx0gu4w(M{R*I5e=yG1jf)9dA_C#Mi(%l0eyfKGT((TAvoIe9p#m4&O1PCBSn{;0erE!lHz7)Ij&<%( z6vNFXl2|2KJ@wH_4z!2MlkKjki%ZieZ`5T5P?AYL+7yxoHq&rIWpyieZ@e{JcN{dx zjS0dC&qV5rCy6zVrKiN z#86OBIP0rsy^n3GcgG}dJQ&KayPV%6?CyZr&SR0SIel=0EDpxbHP~Dlqn?Yh}V~rN+b@N@{j_T z35(zp(hH+_d2(MR!$H#R1oH@<2ov-LX9#D zO3rj@u$Hgmq19U8YVmcflUIyVqtja0O36$R{PYx)r`T0otx;~grq$m~w5sW2OTwxtwS&v` z(c0x%EJ&`~xYXK`3!mRc1y;)yD>lu$IFz3^`|4Jcb17Q3rQQ^j{{S)&+o1%(v?kIyq=5hHR@1ZA;q|?gRfHZl7NL0I%*_nrqw+Kz9|PoEkT3e16y#14ti=dREbUL(g0Wl=w+#Q zl|2?xe6EMvP~}QJ$}Z!WJf(Hfn8bvxRbB5aWq3M%CaTFwt?JTGntfjSd94(YaWxf) zR}=g*%?Lm4NB;murP;N6^$t-#{S6Zf+0^c9O7_6t=?u z0Bv=+ta9`6oD&HOa8U?i7lPK zx+vfvM{r~8by<$jl zsI$0`0)bji8^Vboki8A?_2J%~WK)@O$Vp0)k^MTzWo8*1xA+)MiK^AF)gjR0h7h1I zJ8HGv<#fUtgKE{mEu}3g$k6(xS*i%F)KaMjm)ArDrdj||&XlkDfcDpHq9!wC1R$+v zw!9PxP&N9yNQ$&2UB;%{1wrRUTsc|t>ikpgtseA1W9iHF=vbXYS{+yP>x?GVt~=FX zO{PX>K?zqZt05%lN<}<2q87CB82jr*fabCS zSI0QpOY(qM2Z-7_Xxj-ElKY_?m;mS4<3qxCYnGPcEfHX>$FO!Kb-l=lxYGHux3UzI z+pewnqrk^1x7kS8c!1_xR+)5Et#^}2t|+A{P8)FcJvH-}zxtNG_b(5MOip zAiL%j0N`;4pw6|OpED0BUptKUa{}e6w(ooPB4vdF6#AT2Wcdm65Uc~AzOh+&*}`I4 z3i|I1&*7&Ptt47Ba=BtvsE_{u0j@%96b2J$3XB9g^wsM=)P4;`pt`%shny?pF0~RnfQ5_U^G;^PoU= zUQ1$E5Zi3FkU-B&s1CzfIs5J}TF9ejIH95o zy1Y5xanyrLb|lsm0Yj}h$3FU5(6kFjAf18_s_ib~QyoEi(w35i8QE&kktM+4^$%{iBilx7(S$PE zI+P=Gcz)eaB`r&{3#C1l)RxM6boz{R8e%zO2SS&Xra_>;f-%|sk5!RQnQ&cfBj)5o zA-Kp`S{gYgs=ui8_UJve=S$i;x+%v8X3KWv2i_Kq!!D@m>9bu4LnTTobYvfLK7b#m zwyd$FV+P8vE*H4lRdrjm?$}jU+M2N?vf;v?WdjF4hzr!Ivqa|UqNkD>!>H=J zrNUJi&S{}G`a(FZu3BVXS_b`7|<}uOqQS~asH7O{WOOO@Nl_QFqN`OuQ z?a%^q`V45SY3NX;cUQMIcBLisug<42QfuX$lFAZ5alpc# zY-EK006Qce+OWikK2SRDJ<5lQ$7cdE&1QK_iFFE4My*3ZL+B* zsWB&;zr&$AUUgX|X(-2}V>ri7!rhVv!P$)g2kLZLXUWZ-%y+T$8m~vTgX6h#Th^V+ zc=(^$cb_@$SsHh@wjN|Nos?Kza9Jg2aKl^Jg+1@Zw4z#tq@%fXyo%MtzFK7q&h zS0C$fi+ruor>CiC(ASNfO5Ynn;*-Pv@ZI%WXKi;HpE|QhtxKoBNLz)OK(ZQX)drm6 zwV*iK)6F2H@jZ21V|-5p4bGmF6J4im83gP#^#$L`pWE9l`)1p>;nWhDGw9Z;p{3T_ zR#sLM$PD!ZEhqLGRh;dkTQuqGX}pPA^6*aY8v0VKd{plJleZth_9ED-Ql;)hOEP74 z)S*mwmz0PtAqteH!Q`Sj5ZVYKYUEBr6{F-p=0w-ljiK-S2zYb$vdG4|i^(?%d+G-xs+0EHiILxBt{{R%TGVH7*4?eY7{uc?!vs@#pik(}dB=kTS^pG`MlJ0Ff zbn**9jR|85fY!b?PQI%2ooYpx=a&_<@rMD1+DJG6DX@;8Ob%bBmUKMM)1V(UD02)g z9Nk>w@Ff2L3+3AaQx^pWokn3IGs##eZLh_Jw1nsE0VIR;I_5-jxy)+@hx{nuO4mU= zlATA1@+b0;*5Y`L*iEUws5UO-?o4`Ba&@e^aVeZ#b1kX%*$%79LW61ZTuKK%Jc;z@ zg0X7ccRD86*nG{Ze>qCAy~^Qqti)+AP!x$Y4~)M zV6O9PUY}%)Ja-mc&(>HCaXM^lk9ha!Elt)wC4K~Ac!s1{?f8YJRB9EPYE<1a1tx6N zywi`Uhp@{kLQ#~Y1(S}x_&QVlGb^?2yFTF1lk0mcMsYk(^zYLLfi2rFV;aDTE?o+;%#V~)E~P6Zo z+pcvyF{QjVUlK>>%&e|Vt&=_ge`x3Vfv?CfCpOt8wP5Ua-|(F#UG2XWCu;FIpfxdv zKZMgzrW5Q`S1AExpHK(eTE~v`g#Q3*MSRN2HNW?00Nv6X^q}27C0WYbdsA^fAeT<* z)+Hv5Xjxa}K`uM4at%gmtt__CDi|Y#6*e>1)DknQ?1^6=4h$Q(AE)_NSTG5=w`lDe z(m(qe`cn6Y!F(D20R0NKJ>6B04T_Ze4ix&Ua1q6WI-;hfNGJph0_(1jKKl8-V|iwM z9kdt!0GL}QQ{Kwcd0VmXyJj7;=vstXW>0j};8ZMrhA28yxoOSe(q{!|#`KwVQ z{{UMAKlELH=>y!IR3=4@0+l)GIT9Fjw5(%1Qi2H|uBPHSK|X2_#`n!MV1Cjs-b$!^ zYgiN=$G0sn@dAr5-MrCBs!Na3N+QrO0g^_~i5XR_0>tmL^Md|a|Qr;Wxd!F&MESrw``9|)^U&7{GQJ}V@wA86}>&0$y zNeL-WoXdbD;~4h?R+BM|u-&?Rm2({FCI!Ndnrr^n`0LlMzV)8GGF3M==C?K;k#<=V zsjk~wZ)(qo)GGUMA~#2$YgN?5#_H)I=+InEHQ$+Rv|otxa>RAImsnC<%VT1aS2Wlq z`|n}H`+RlNS~^`-1u$|Y$i|2fMwzzMTJ4X9l~rK)f(f*D=HYc)=SQvW?7Mo0I-w5V zX}6nF{{X|&xhic$)*vzx;d#}?w`mAUQXk^uX=I_|+Je=H1C6egXXq&TTZ!rFm~k!1 zHQu@&<7E1t=&khW;>qfeUBuSlTy4s!&!|GHpZAn5?MqJwITlij|{cMWyR&h*3nsgvnjcfk^+PB)aR&L3}O}n&oTfg}0 zS3UQUd}AufRw2!Y0#27_52_oae?~N zHk{fUE9V!*CumQ2iusS^r&M~&h_5?Img{ZFl?8GcXgC2+eo? zKHWvpSdUhD)F}BbxbRvsPY_%LWcSI(-$R+e$SpC$pBxaF$k0#&ilGTGdlHU{PG?bs$mb?9;_ zbLoVo4<&~Si%viXt`vm>f)7Fg8VP%t>OTZbtUR1YyB{UIuN#f(_V|S_x=lc=mu0)= zDY>=vl(?RVDk}}A@6eQuN0_gaKqGx7X@QWxbGEscsTUXOwg@!17S6l7l3vM?U=sKfb0K(Xy0W+?uIc zwK5~tj733&mPCi#!H(Ayl=*-t}ao~NdS@ER10jgW@CL2Z4PyZb3KW$FrucSTn3+OWok!&=-X(_?ekpI1m0iwF zU*YV;dZV%&y*B4?X{p>~Oi)YH-lRxUq`Xc}Sa~pHkbSs0pTcvXWI`S!Ok=wsJhjj~ zXgx)RlanFR-~l6#GAPnpkcjXpO-WNt zrW@%?t8IBxjbJt$;tJA|rH&ybNe%>uCyh2kK$l;KTd(0yi9*~y2KdF0)>nzpRo7oM z1Muj!{{X`_z2Q%{Z`g(`8|8H9ab3gDp_UX<+E(I}NFj$A2y6fn+E7A$WU0SsUgyrs z8@Bwl-{*FGY;-{Od5w=ARy>fjwS5Ljz|N^!CCHWMdKc&wi%vc?4XPGsd6W5n zH8WR-ITX_TDq~4*JuRoCIgjQPsa!&`2*?De=N&S129bXB*{~GNqZOL=-Z?$?QrhFO zIYrgBNi8`glF}zKd5xM&Oafaz1}O``f_~#0O4nN zh##pIdLQ{zU9oiwKK}rVc*%A{Y?`xamWZeUDT=lJAL-;mKwb~^5D#r!O905mF%9U~ zsQC5M(PrYvIQb$|f4g5p@ad|(E;@{>U8=^}7bASNWE!;wYCu_N^D9wpeR7^bDgb|& zdmUvR8FSk=`+KB*c`ajf=7gW!-f8^vRo>*&-nlmJrFfz+@@CK{QR;!U0G>%hi){7B zWr9A#j{f<)^{?|3b<@VKO`0QeQN6A_ixu@s%(NTL9K`XZ@@Y#C`edG}GFaTPV zt~t-qcusw_sN=H-WjLOL>HZc^*{DM?7}lN7&d=XPt9J`*p*>06(Hk!kiw(vC}xs(;3<2^A3Oy&v00*iJLAx zIDX=lCg;GK! zp^^_&syswAjEqSW`SOn*}@2D1osYPq3(n@4zPsMs?{L8Wh-1HKr&9AOWD81SW|EL2fnuK--&IRmE{sT4API zBzcPiCmpozG%`;ppp(hTjwb4|KI-^c+b2ILQoQGeDA!+pl0C?+Njh!YG z&5fmI^6;X}h0kza3h%Y22G86|l@^$Pl+2~2ACNlw?+lsKit1)!9fY&;?F^>CmZ%*nFP6^ zeIJ4QQetRpiuI4fKg1tvH_FykVAYvn#+&4{t~q}(=OGTpkD>K&B*Hbxi5=2?3eL2i=RLZy^(LueUMI$At= zGUT(eW%&%pZ3HE4Sa+8E$ram?=VQQG${5KRAAK=2(P1}~Zi2?il5Fg(nkR;By`{1c zN;KGOvlrG@y%?^l>7LRAN?nW{i8fP0V=T{UtaoPrfRM&3C zRqN_27GnV?uq};Q#l)j$RHN~Ex*#g|g=*YVX0vFs>Fa>ro@W$ejdLXA!L4aho8P!= z*;W@8w{5i02_rlPuW)N4VyJUZVYps@_^RI;P5V%E!;XaHpTae?;n=TcrD8ayWNrin zo)&!f%CU@|!&(q1ESrxpQq*g1p;S;zSn5`OgGDJkoxTI)!@8d1_4AmbXCasgsMf;thdlS&{J z+bt<-z)qk~iZd8We;SzbhC^qs+d*`V3C2L=<*H-IIW3>tL+t@Y5fG(l%{s&BAt%4n zK$L>i)B(+M(Y_jMlUS)RkfJ?9Sq>`3(OZ5GBe{a~&%*6mM2dSH$?B2Z>*ichfH<$N zaA%UxwA~fLxXH=()=p8X+vEPwo`I8rpeDi9d?^RpUPJ_i$rw1-l!3L$NILfFK#-GK zKYc>FDcVJS4!zNK%Hc``U}{3wtkRFFAQsMz8KftmYnhCNetNTk$q9l6tTBZvr(>%) z+^VH*6hAo%N{%{dkmQ+aN+O&N4!VQLMT}~Q=#DF8tmRsZg)64C(3P5$A$qGA&rMjyRcx(L6Hr2k(=90{u`pAr zZGH4+nn_6-k)>5s+J~#Qj0siJ#Eor>n6{*(ulwkLs_7zDU8#2{1m)lFuO!~eRz`Dh@QGAZyE#z|RUT|F43TQ2AdqDq!=_0x^n zD0fci1B-+6*G|jBbz<8NVJYjNxGAE@G6w)Npq8$KNx^rQeF5Px!E2`5#F$*w2i2~*oI1yc<3r_3dpyUL!qJ2`UmKi>;Z5gcvF6R(|?t7U- zm#_QiqAW-lrgIoJW?8}I@(rG zO?XC1nUQrw33>1U_ty+$FLQ#e8w%QPVL?&`KP?J?E2imOwr<f0tb3E1}^)J+rV{k=7b}{{WX$Xd!vjQ60av5K_>@MD!o!(=DJ?lyq9An;=5(czIrmY{MDdM<)bGHd$kF{2I?P7Pg=(zp{0C4-}!gqML)+*#$)KXIOduKf~4E z{JJ^fg110#1=nO>Y4{$fxbjQ1^>_D1m6wYT6y#hJ$zEGg;N}e`TPl}N0|aL&)m;2d z&Ks+YZVnoDTKi_Ue&4p@HNq+Z0Dn%XGICtELa8cjJUFhTeRLOSRfHo&6 z(`)iVhh24Wl+v<7;~ocH2UQX@Kvzvoao+Ml@1r%gg5ySzgw8)cmkGyS`X@v^itfC_ z^PnlFSCUiPTw$V~$8kZe(VeDGZRdipI-KbDVOg1jKt(pwa3w{3YXB(rCs1%Akb7&g zf_DbhRQZjN=)qrbJ81E~f-G4CC!1Gn#HQYHTX^}L)G&UUJ6uaue-M$c3q#U2mKEK) z5FJ|}rIvz+PkmUjZcKIatlWOnGgLeA7N$+1*a)XZR~!r^X}%0Yr?pSVhbAp7!{I8u zTBYAnQCVSSw7HOR(;BwpL=1CEyV)Ff&6)sPo~qTYdE16*S_+$QIL}aZ^H-i(7w8-a zG8s%e6`Fim?2FZ_U5m1o>W7r96|1jJYB)Af2bExbzTu2(gTT}xO@*CvP`2Wq@@=@U zEMZ<=sW{-~$U3c$u+71D4{Kx^l{vXp>t6M?rP8apOoGYd=BFO4X-*$BnDT>ZuW9{} zW^N*$bi7@H70%kzF`viwRcg3}p8_jiQq%#;Z* zX^Ui$kQ!f9=#lYg3GWpNJ)Gh(Gh(WX#?Rfm7H`N?>XjDK(z$giz}1XWU}Ot4tDhGb z#n4?U`tq&r4Nh{Zm8yfUzJ&2EEoV5@j4XkpmAfi@r{y`^&pM!5s_IKoal|>ET~42A zX3DM2aW+)u)b4e~w)d1e^%hr>wq8j{Sjut_ax}Jd5#&Tc3g3ff%ZHTSQ`LI&;XitI zc0G+wt5o+2A}W<8(>smw~ikk6J6 z1djMV=Nepw7hb^(wZlLya@0Mjy(#R}oV6*hM|d2UBBT&UaC&#t#`+c08!KfGR@hya zs-Srm{{YIZO6s`M6r6v2YIg3cotpsAA*+YNj^EF3$)(q75z0~k%F?huaiTDjs0*Eg z95pCPZ-o1jnBtdgZgELS%0rDUv!Bf>#*KbRM-q*PD4}6^n5Cr+Q*U-3NOLGc>Op-z zm~jX8&b;9W{lnyf=(0K$4OF{)OxsO7EA}cX2tdkQYA`rX2skXOu6lcS)SDax_gzRN zsdm_BmP$t?~La@`Zr)(v+XS`>;t^o{PRe&y!%mF zoXA{x(HwDOm&`^41dwx%3Rg@Yr@o5DN;)N7HaR|NSMIH&s6}y+b;D>RDI`A9+fqq5 zC)AOF{{Y9^Mjg9O$WL??sZcjX9?YF@nuWJojV(!(L*FSUm{BJQDol%0{7iD}tWd))=cHmT`xUU8*ATy7C)V-B(yb@eO1Y_^Pa?iJe|bzCSk%n9)R z7B|`@D;F!?XLFi=xxWFT&=)<00;%CX>Z3-lOu2u+*VPJ@BD3cbAO8U9wQc#1l!X+4 zwu289bpwZU*w?Y&*9U6{PjIApd4vVGbU?p(v_kFgxi!xmmwi8L?Utt8>{jb(q1S0M zL>E|{6}RR-(`S-G9#C<$l_UYlwC9R>Xl5w?07}yB28wb`FwAg_S=V2Q`KuzO@gMPj zyEe6IOfMJHDAB0R zcJNUD08+|(9m?=KyHMZ9*I*XM+5Z3!Hw|mX6b}-$3Zkksy}sF*w#7D6uarrVG1xS> zmnqb(T%>ublP4>{!;$@7qBB{hW3makQAQi?)AB}dvkE^ zon-~sHuMQos%<4fIZRltKf{seGslQ0-9Tv2gDl*w*p*j13{g4GJ2anhKgaUCgz*`_ zo+GaB6WfD+Ufv~cYjPEnwovNnx1iiop+<`)qd8?xG}~?f;u~T+On{+;`N3RDfm*hh zc$lrkXDb0NCtkV%@ZX~O)cjK*WK8EsKxo?QbMxA@SJgU|ZeFt}`|kk4Ks~>BRRs{= zF-1C@Z7$jHXo@Kg~*Y^|s<1QWlOy81-j^t@c+eIRlpb-cepoEb?>l9K8tG3 zDma^1`=T3lCX;qGzFLZ70YO zS~5$@Dme%XZKkrEo=+fS1dsq-`hQYy;G19{>o0jaHG-?f#)sDYeH5Ka6OnCuX_r;a z<|Iu%U_XgTY;`}s_xor>7URYa_I`=zUfFntQ-;Jd=2TYTzP2_-q=~K}wRuts-EBP* zOE?P0z77x9u7NG~6ns-St!udGE!u@&s&91AR+}2nfWnrndGVf7uyM?}#Gc>OgbaNT z+fk99(2w8uOyT7d#PePM0F~bWFXT$AJWAX`vt?gfV-4b}?S*bz_2jk7fOsYMWX63b z`VXB>eI+M2ECbg(bzzRlA!{Vqe%te{exWAWv2qEHtdi%~hPr&lhtF>sq4w7Yb}JCA zmfT=M-AgJVEj$pUv~Sz5%|{}ndP*KzczdPJI8Y=TcwNmMJJ0_Bs8q9p3uGISckclH zdzAyQ6zb)PZSCE?a9j(D#jmk;wP}Ujb;Q*u)CQu_>MT84j@lHpNsgCgp-FAjlXg@-qFW$C+v zb?(h>+P1CQWil;(vssl!syjZLP;thg!&|W8!BCYor{z#8@2RAzgoflg?4=N0Y5By~ zx*)-+&b(a+Pg0QEDYFlM*t*L^cbuLj1K7Ly{I8TZNLnR_8;Pnnpe&2PpHscP90}c9a3F zb+E>maQI0^5F0E)dw zMKeyVI(Jfy46$SmNL`5m4sgabm1%d*U00{*BO2&S`=)*rD4^?4* z34JQWYQv!g%nwOzwee0pvQCF6&?rcGK`1i#ysFlvsdC-6<(%bWO#wz(q(ur2JrSh` zB!+l`RQPAiC`V;4icT|;+*rG5+aEPvm*>*_uXMg##tdgj1=mi#b>~|Ss)q3cZ`!pD z?TtF!xRW;D-aBGiV>-m7yBbqd;HsRbQaIqN=HyY9j4%HH)-umdnbzS)G;mYJIwC$G z^L+!a&@47^joEb90?Ar^2yo@o$Gllz`J9J0A9n7V?%Q3q-O2N{x-C<0>6P|rk>w>5 zpu?R`8iN)Y9pOu=sTkvQOaG~N&Uy%3E_%2J`1(Qtf^7SsZF~pw= zy7M~q7ApE)y)i>41x+;DQSv|U z6DK*!K&^bgrF)@a?zq|W0_)sPzXf3g11dJm_R(k{c@sqYz|+^69g5ugZqqeVn{auu z<a^8EU^NTXPW=`h8Ko49~Z=LNrH0kuqZq`K28a zfVZSL5|i#Qo<8~LeY%9vl#q+fA4xu2Dq_$sW z+z)SI*Huh&9L_>J`=5!geGsoE5=T-u_Gkx{fqv@+Lr$qnvv#umwWNPJsT5>SgoLlB zKQJJSee=ZrW9zFd5GTul`%$8^oKjcg;^Z@ZEGnC15?G}@M{VZRX!RAxZbEVjl$DoK zK+jQb4MR7?Kxe`TKbdfN$z8|>Ug{MNhLrz#g!xVk+yVr4ltg;GRM=6ago z!>=Q^;UkFryJx0#l7)sjY>kNi3e@Mz&lNQ84Si9Uh-#ywU}%lo^d-clKWo>XsT41h zEzCs9QV2?da28NV^7?BuvO=UMKVW}KzBKn7c{wy7n)v?!g=6fVB-va^f-PNJk5BTw zG~2rp)UbBi$J@FJ*oSY{Zn}%|3g13NdO-dqI!{raDe^LoSpXFSldN_*eAAbctu22V zk@3v-6ZlHF_OYs^Ue|W-xgom5+WeK&Bt>}`Qz7iFwut`#?QQUH@ zBQ4bPP{=_&NX|2;8rY)IrTSS3&PQKu4d#hbj1x(Nss-OAJq9}ddVx(h_Ss(@r{N(< z8RUBEMXRD+R}-NiG!hTu$Qt8?1t_IF$-B`~6dFoK0LM*4_#!pua+)p+MdFg!DbH+Z zE+icjA@1e7Umd1KaV08bV2+xBbC-k2H)%Cd-C-(nD~d_u(Io5E@v`WZr$U>?a;*(V z=3eLN_a6F>GtTI|k-TWWMz2gSk2XG2+?{YZ+LN)F%b`*%*V=Fs<*7O|WCLWQv0Mt} z`janYmoPs1@p#;+HW!YFD}49P&e)B=n|@tW+HI(;sYpte0Z{|CtT1q7&3Fw-XJm|6 z$t8Icx}Ol8(DC2mCI;78kGjPK)RLDQX+#C2E3wzovA8r`KMS;Y)|LWJEhiAn5isbz zOuwzjHZOzeRB10Ip&o!zqNDG_Sh&lk;vV&>n250}$$vGTB&J4lb!y6Gz_4Yxg#-6G z`)>#ZxUIGEE;d85iUUe`waEQ7aHwd6*)ttw%(kKqd*@JdLETM{b4`V2Z1;$}-)`k1 zEE?PG$5MxwlsHC4s~~g2-DDm)RrRSxoGxu-apdX)xlG zB!|6f>Mafh5(*$eVJJcqfD$#BmS;-qD@7DRfjmeV>!24JMk0bvR5;J|aio*?8s|Af z<=0fz+I%+C$!w$n^&0nhofL>@3a;O+=d!lS-hN$1Ln%^FdJ;8tfr%{73bQXFIGR_E ze-Td>bdAQV$b(5*3POk+PQItWxNFz}E9U%fh_TiJ!IjyL)F!D)Q8_x^#NI~I`PM_s zk1MJj2~%da(ud+u)TMtbZE^^C-T_;$!AFE^e)fRW`l3)l0Q$9u;=DpeJ4L+Vygo9( zN|N!P;i}Tx`dXi+27-```f;Fe-05U~sJuf8HZfr9xA+>bZ0O)Qc;rfI@O!Ed;b7jwHgh^oV0*Fm8yKM8p%r0;qg~S+O;uuc#gPk zNacsB3m}fUR)Gf#WNx}mO~qXxt3XZN5%?in`Q-7KNy3uW@)Zx9DlZn+5{fJ+9R`USyibi zZMF%?`e_`Tu^3jEctz)Ba$3F`s+Aata6wVX{{SwiCgP20-Dx4=CC%A6srY59#q0b% zU-~pA@n-m=JA<0pMz^q)W*!6NRnY$cmqa{Gq;7`Z6!7hp(XbmkQH@e%ONya|4&zij zM>Vc#T22?k+}8~kq23&=N9mOI0-GZV9@_ce5|}x~eMf}jmb5JoNI_~kQ;%(Cr8ZW^ z22)eeao0di2I{^Qk8`gnQCz6x=U!3*m(6)~aOof0US3S3JQ8)_7i^@HARm2pitjRO zQFIp0bvA_uYJ;vdq=gK7>G(-XOoD46B}D4VB2{Fe4bMtSur$ynl4NR=iohz)H5Zgt z1wBhZMh2d-+S)+nh?S^L ztl7yURxCOsBx)Y0HG)Po%Suh{Q1XyL#*7MC>`650n^!}kha{wq)YTrOP@(J8!-cW=lDKb{AT2C|$J0i`12!4acOU5$~YN07Q)0SGL^23^v(PewwXwsHd93 z;I3;jq{L8wtai~NkXjs&k`J$~8=jSx7fdam5VAgL@5+e36nft;kSf@jQ(154H9Ll zVvz->4pNb+S_u?X!k9x0{vT~{s8yg{%WO)gy4q8pN%qhlQxP{+jrXo2wCb~ta5&_B zwNaMK3qye5G*#HB!je3<(ht`Qa81>r|bx2Sn#pQ3+8!^jgsb9`biqs3{F&?Wll=bV1d~ zii(ta+HGeX*o~RMT}YuhLk0dxHD=sVH!(khJD6~Bw#kej2RB+ zrD0T&MVSRIt(0fqrj`ZPtQ|GAaRwa;mOQkjAfEWtxtvh@T@zZxBHWbGN#ayAR+j`f z&B`=NSTu?gS0f8$AxjGYYGuv=CoJ|BmfEkAq}?f>HL?Pb0!bR@>RcPjsbpX>^A$_{ zQ)AC8oWd;HE54*6tH6%cNVkvnD(U z%^^x7`HAR8ljjT;wQ%K2hW^e`VF*aET(w~qV7|0-P6CQ@HQ|{rLau+%xIYyf{G!xt z9vw~!)a_0}A83Pvj=9wT09NueD=WwSm5Uv`(YC@`jb_@{l!*zfQ<`xLI6h-TPeq%M z#)>QF6L73)Ne*hHJa_nBvMv3+H-(K&Loc!kl7{`q*IM2I#O8F|vK<%BeXQURM*)0I z)nF-7+-av83mNB(9eo5*)qHvFk%WS#tUal{@5+-u!mXK7ndA!8%LP~-`cpGD40z4E zRe!*^7H<;EV_MThuS_-qM{szoIc*QW7LS`khl}uMTH8 z&*!Pf%JFSgMXzY@DOrxfmlZx!{#whp&U*I$0O!$l3M3T|F}j;ilM-v70x(Ob8ts6f zZ6$JCP_0TT>Nh1-rW-)QQniAm6OO}EW313daAO6z3Es78?K&$pN;^n>l8~U|E*vO?u!7&plkUH}Dg|Il}bW**JwEQwz3&5@a0Fm}s z{w&r#hnW7`Ab;s2>q@xWe-5`r-Qo{#cCq@)Zd7lXR`iFYg%jn9flK(pzy)C(#!pYL zL#-6EHLy7J7Css*Y;Z{FSP9hf{PkLQ#1)^p))dYD+Dkdwdp6B>;kow)hW`N0xP(T9 zZ&d2&F~J^{xTK}98ubMxS_#1F6of+|jQCT2AZodi$r|}uYg>Q*(tkbc=Yv^$iDqwW z(l1!(cJHchMa4Q_%p@Skcl3D?ldg18>1Y%29N&0F5`1X^UwQ> z-Twg4lx^THhqZgD@b!;l)~y;Z@rvE6e65L9LJ;igqcQx*rKR~_$znTdOR6eS_&je%-Y73?@IX#-II0D0-~UYz_icKVZaZ3|u~ZUE!=W%odX7JJ!H5$TLK z=0u2;aw*Du*H)zzg%a@ukd*5+p65vO8Q5Rv$!qv8Ab?H%&I4Zotq-5YS@yljHsRmf zqKe8~L^?cZ%(Rl6DGGHcbwI1RB`yyAa*b#8GLk(0p>2z~cz6z?Z|D!)d=&xlEVZs} z%kX7)u||_6AHwe>)h9ICR#7T6NeN2Q=uQfm1A^2$A1egoBv^2{12QYbpW!FQ>b$S;jdacLnmrX6jxr5utRY{&*GC`EdWJ-;d<})#4rcA>tSio`wsZV^ZR{yq zrzN7+($#J@BgmArG#33*nub_Yt*t6-I?P7_=ue~)m8INhW1Qi*k^R7YkMf+RN0iR@ z_LK7;WtXjrmG2kA7l|val&KV}E)OEPWyJEETydBvOmY*&YX!0#BOabT2So=2ah#Y( zkK0vWBT2@Toq+kfO+696h>M!mpWrvcHsaeC^~WMqecGYY;6Rqj*)bI4IFjX<{DPe0 z$VUh~)Q~w81oKjL40bqV%+d$#C+ZQN#tb;z(sXbG%D^VN{{X@o_>S6?e-HZ|wYzBS z2I$o(YE5#X6`2Xb+xhtN14{zfj)Uwfm-daPd@`GN-g!Q=FBOo;8j~AJWmsMDaNs z<~yD9{{Xbt*njm~UJmHpQ2zk9U&mAPcfc=KW6BWa)gY+%gmaPDf>ICP@he#p@9IAM z7M=0-kwWqQ@0A1g2p<0ciE<-&Y+7tqSpFFv(zzEc*A@K1EpO5bC;)W9LZm2;{{YJ$ zeMV3GHZ#KhfAX2Zb6qs^9;Jif&Hn)8smkzfLgB_&Qwz`X$5Hr$WBZKi5266@znv!W zExhjk0Dmvbn4w$QgjQ^dyb7>*#ftlmyxcL#$CAo{C>j3%HDd?io|vllr&s;Ht6b~MQ;PwX9gh^tr8}P7%kR3vbDaFjumB2Hv^+96 zC&wY%w1PhW0B?fN=80mI_D%l)cQM+wBT`5GLcIM{Q;U}qaIgE0vf=p{SM`lGrjWh~ zGF#j$i7OU6Z~p+OT#3c;0#1RnKldNtDptp|t_wSRsC79D zMWsi#Hm)=GWybBb6}puoGj!SuXsX654#JRGRK)p`+Z+UR$N>fR)^tgE9>OZgB8Nj| z+ECYD4;n*_#5g#b8rkq5H(hkl6K7xn15lKQ;4Zv?%I}xR*?m9sPSK7 zTHCrSsbnQzGV2MASCrbKHbV$Reon2|JciOnyO0+HpynX&Ro!j-z}Ls1OUB;QLeL52 zX%$v~d+W=U$Gdugx#?p-->YYFH&%i-vi|^yPqApW6Zgf-a7(B-BF3fG>u=4b(URCu zE|+6b;6Cb#76e#xQgGablBmKlKm!J(&>Nm=7Dv4NX#W6eefe=umghTOP#jLfm%Uf8 z*d6qtsMS{%H-r@UsM>1fZpq$TX6$B}3QaPPaaF5D2AHXiSJOH>om8gV^D0oM#!`}^ zTT4xh1R-E@aUq28*D!;jtty8td-Ndx0Fn`3g51^;A8qeZ7D*?X=#H9#JgWLDfsL4> zcuJ?-)@2gZxhpmsxMyzYbW5%3bUR%jML>d}52#H(w@4VG_bEf|nuE6t?|Yicoc06~hF z{c;9RtdZB;{dJ%1oY6H@O{L-X6ciMAmirNTN&6JmXLrnUDg|dgb zIDS!{Dp^;dC_=_e65HMD3S?st!n_>oGB z**&YK?bW!96k_{a+trdP=1Ne?an68Vo78^})*JGuT zt<`k#^1SG~u}|J#6L$6Sd-#*vn!LI(mb-45Yf*433i%g_*|5|PxDr03EB z1LSaFh8E#Z&a;{U2>~%e-~%b4KSQS(UJ)+e8gu{A)t(vA*BwA=rm3C zYlt!!@>qF;i$iOvAnoWyA3spDj`pjDjJYwSG*}#6do(t+I_%(io8m9P)n!SvX_o%s zNAR6pxgs%aRIbVE+i5Fh3ztAr9o&?lcVu2$~MYl0D$mC_&gK;0OE_& z!7sxGM5i1++Dv2+JYzh)b^ha8^e9KeElS9>X|rgb_LpxU%%jjLaIMiz`GrRKNvY zfg5)^({=+v-aC>&O)OePyJK5aTlqFs!%n#Au%4Ql)qJH9(uy^%sEx;f(z2x`$J>hQ zuLO=uC_z&Aq&L}TlOUEC3eai)08{SIy1*Bp=ryrL6LCXj4RI`PAm3F8SrijO zg_jVkr=OJF^A1v$g4Fjaufl1(U~zD^f>r+j?*Je8e&bAm-1MXZ;vPNfq45iEL!#ew z8%c50^VKR{MX0Rw8IY*UeU*Z7{cH@6ZCPO#Iyb+-w4Y0(^;En|N!Y{v!NcEHK8lLk zrd4Xx?7O|DxHk^q2$jiw8uMx@hUPGEJu(45PX7R1S>}IOOC9dtqeF+$QsJ;c*vdLP zUwipa)lS`Z>e<`-g3D70N?WSRZ6GA83vK6$dSjr%@;^*!pB_Q_<~;ZhpjY{r-Q3aow%7 zisiBS`PEi%5ZrJJPd7ClyZhF&@D~QBU)@WJ-j=ZJ8hsvG;yPT%M_|Zorw6BXB`-6ZPdIg-*zVAP~76p-$H)gb@;(Z3!M^};@KTR zPc^U|Berr#>8Il7?ODot8~0kEobyEf(`#*e!&Bb?eimVFop*IDJB6N2(5bZwR5x8c zBTPw5W*r=G53Q`>H~<6n)_;%B*foT8)ctWh0f$vK78zIaBi;%DHL&OVNXI za*(H1kgP+=SDtmsgbpbYSYj*g7Kz4y)@e)R~gGXppjub!kJ8$;VxAJ>b|XBu4EiJ8G!> zNd!95f=aN_Pf|~F(?kLVlVp*^(Z zR=SueEQZj8k0ocJJ^q;2hRA%xlWC;IlJXQmA+T}N>yQ1l7dYB80Hfx)LW25~V_wjy z(Fs2-o?{9lu6pa7ttAjS)W1E&FSb*RV4XrnhLKCc%T2F_zE3&_vqx`fFob2l z8_IoYJx@$)DT(Z}V#((#U7PJwACEw;BAG|Ep~a>>i$-0R!!?h-bOZn3BHD zhSrF}nM;H_#Em1>Kc^~Gq!FEWl$1VjnAEFO`dcb~T!f`586>MjWG->gC_ZMiTA(~i zc;B#gu9G1NtTbLq4gyv?<5##G9$B0XDqPMd96;*4l<~Xq7p?9*`84`%RbEk103~|* zM+e|SIwUL)7vr`F1!7x@_M2atro5=Gq4vL|`)F@(Fr?gX4R9f7t&Z`5T-!QYVY4Ag2~Ij4X0v!unbx$}d{?t& zC{GZ+Fe`hH8FA!GQi6s$op%d_h@W(ao5h3My3JL3tFxr7<*4;J)}A=S8%rfL=0}p4 zmwx9&pn-N*O-ymMU@P?0OHr8e6Ug-!F@jE^$O15!rHs`PoSk}rQ|C2ll-dd8e4zCW$QAi>kLRqS1e~f z`p0oVBf49T6LM9pkzLs6x81lMR4}5Z{{YLZkxy*frPKc{#{xQ zCc@p-Y2i)|*amZwp_tggy;$n>zqv4z^*wJq7rSP*(a+2ShPfmD` z=++}EiV*GA`wxV)v}lNHo)RfT^Idf z-Y7rljlGdIh2fSp8cG%*frI{CD?bx28>=i%6xhhoUiLkb-5NR&mbl=3HA9h*URJ9U z7%(FCTJq71YPrrOTrf~yNdRg$q9_!(Q-pQYOO*Ln&p7?{?qa(^d@moqy=8iWP1kZe z>y}rjCKDELdgzTRBvNFTln;FoM3jX}Ne!O5n?|Y*C^q4j_=a@!K`AScZCX}JvUOt^ zRkD=_A$-@SlGm#4F&WU@EfuDejCo}%p$=COgb|MU z&|I92S9gN=p+IPLsw%7QSAUqSpM6LK7pPVp{%3!EN|I732A%$2U3!v_QFX=T3jDP; zr6dRn<{2c7GSr*G5SpJ^IMXfJD)5%1xKiN!^kCf(Nu*gvn4}~QTJd5VoTnpH1^~{6 z<|v2iq+!m<1D2DOsn{K=A*0FUM_p9THCMRC(WSK4nxypWs<{=kdn-Q4qj`lVhLv$s zI;#$yZWTudhqu#F4ncENeR|YWh(F8z+B0ON0>xil7DK8kA+Dd6j@eWMXd10%INH>F zqCZVc%8ba$h<@I2zUcni8>CIf(xU2gb?`Y(qt2UXG=`_p7PopM-|37s;-v+j)6iah>3#X}hTb zP66kq_td$;QT;oBMAW^>rn&$xr}x*a6$1-`e&y**c^zI)@2?OPdnYK0rO!!NAiA9m zz$rD338g)7YA=G?fyvN-ZK9Ci5oI+j!(?EN+F_sstL&8Jg}D5HQhoGGLoLx5P!^V1 z1!vpeQU=nm8mBc1lPN(+Sk$OefNB=G9*X>Bg(w_@@1Z;db^^0r{{UJHP7b=lGJ5tJ zubcv{v1}EX?s{!Pk1c0{fCuTSiD9y|FiWK&D*e>tb`%uh2O5lV>W=psLpJ8)J07|a zx5ym6x^3{=67jr;tAdqy{Nxn4hd-z5syv4Bm4A$Rf`qNz%S50Q=fBrV2Nd{jsFu~b z65~kZzM6}im<`bq$(0IZY^;OR-(2Qi<+LGOl}~`BDI{t_%9vmUK*+gcC0OJ&Dnurf zOwdqjmKDy;nmoO=ljxpsa zDkELhaRlD9=u^PVnG*>*3hQ# z@>d1tm~YHer>c5&*GB3F!iihc*C?q@s|57xra%;ylIY6S}6gYwgm0)mKINx>Q!E@@iq3}K6_bqF5d z+eviVgOccVryJs;q%@^uAGW5)U+xMM&5x5IVciVhn~ihFrZUQCDpQRD7lHVI_t%4C z4&7exE*T>q%pIZ@jl5K~It@;S`xqXwrp^YUSOK<`r^<^Dlag+!jjiHh-lkTcrac)R zO5Ofjgku_QjC}&Iyl2?qEJj>>QG2hkt6>8&9+)->8tt%6*QCjM+V$zIPvcs?_bNt*(gV zWV-ZcLdYBe=rS}%OB`&sYim`X#IdHqWOEBOx<0&oPWYto#d0%lZj*6qY`UDX;*zM*A}wYRIc-u$^l+AEY(Ki?j5nJ=1$6r_@z5!be-kt9rE zFBUu&pF1VdaK<+$QLd-SUlqOU@pZH+LEWoOcLWIi1lXq~Ab(LQ2m6geD6yt*^i3=b z*tl7sJ+I&Mr`#iLtnq`i`=GHLT%waXoD&wVkc<*Qz*ca2{c-tglVfE=Myz=%e4ZC0 z7+)FY1M_{A#NA4*9^08#Tg^#J5gd@*hDcBtNg#}LIR5~qlzW)s09A%585c8!EWval z;JF@ht1h}FI<=|AI_V)ql5>vWcl&9c)va&tnZPqIBneq|ytS}q%7T1!eIw#6-Je=}Z zG>J>c8th)rXA`f#U(ZCVcnxG8Z9oH;$GfGU&Z{T*z1l6z+piM!Ykz&Mgj16@W@~h6 zd(vLx60GW_Jc+d!?z_dcDN34$`jo6CpcFY_Ci4P#UyK~Xvw{8x%9cNgV$Bw55)If# z@_u%Mw+F=q9ox3k+z~-(_S1K61!ej>5pbs%sJ9xO5V}x58>}I;ASXQnz&(kPgwvQj z8b0MhNqL^fk+FIB&>s=9o$wca&rgB7THBFm%K3=fX}ZggQFb{{Q}SX(gxW_;c|g0B zDZ`FQ;yU-1SZC`UXR8u;T*neHM#4|wdZX}Lw=4E1fepX4FItqzb(x<%RF?e4R+YHJ zljSoT0ZLX7BgbGQX9WQych*-rSlyk<(V?UK{XT1J!!ch63Fda=PoW`rDCw zZNi7C<17JkCT8`0uCj2#Qvd>-0$G0Xz=yun&*`h2fuy zzYbSu{{RYXhY|tw z4n%}9T!@^*R6eKp`XCpV;>rj*?cqRQ)FEB+tH-HrcZB}{3U+l_=BH9C?$;`cW-8Y? zu+vf7GlJBTI3-L=DL_f$8YkEdGXp#G%6f|U>b)ox20L$iK09ynDYwQo+k$5O?MB;O z_4leZ2-Z6=rO%j@6-h($0!z7M08*s3R+XhGR~3)y8Ps@S4TeV#8~6nr_}|;Lj?~qB zNKteRvhgW@d{y@j-tgD9GA|3w64Km;;}s<^ntloxaK5Z5v@`>yDq6_xoP*O|ozVXP zrZKXb2j@o9@JEz5q_1mj!n~@*d=~lfv2kwigwKVp!gyES`|h1qxu@@Fr&VP|aY|xk zI-OCH`NEU}oNW>l7y?2`96D#Fsqv$3PFtMT&;Zxd?p5Yk{U$S7U1aiu@3(yeSDJf= zDlMV#{JQS?{c<}p?|t&Dwz@-Y0Ph%|!(Mgpd+|z^riO4ba1Kct&^3kmZ3FvSKI(wV z*5EzF{^<^$gjxG9QhZnK^ynWGuZQo2%XR~Nf2e)IpnZO;ey)498}3C1IO+#c!U>Igr1OVjctUIaMC6&29RlE_1cv~mCpfu}Yr~W@;7;u35`VO|{w@CiDvOU(W|9`` z+J{%KDcj;a`fRI@5O*8#wuf=9DHUTtZ5^Kwglx)7$OAmnwz!S92s zE^#G0$dCRhNMU|Ff-~1&EnTV^dutVJP#&TDh2uh{-d-R6QX9X-LYSe*OnYIrp|Igk zB-57rt3ty0w2p5B!LEs0w`=5ae?mR~0JxL+<<&Ik93f*^MboOfYykdx8Yp#lyZ4yA z_dX>>RM=A~dxd#hRkvv9hYUR;TNdRadgOCcvO{ntECqzN$ZN~um8}YMOtrP#8xBxM zU-vk9YwB$)-ftjvce%)R!pC*4{{Y+9Kw5mQKDYM*o#GE*sdWo;Y^hb7Z+iE>b5JeH z-J3e63Cb-6ZN#RaDTfl6o?A4L&47ZHwI)h}7NjqkB{Jj8=D61@T5M1@MV)s#yMIkW z4nJd*1IWH-I8oG4CALTH0P=%JOR{yl(|d_jq--oW8wIpGIZ~FWl&7ZJbVxGM^0VhP zl|-ik;Zv$*x0Z!1U(1gjjy%=^QrXQ!?qu{QWxgT8{KMq0xB0r)xf&tX{t1u=H*rDR}7k?a4MAe0mkU8xZpu?pzEq|t+0giTG~Py zN?J-@$SuyAEOrV4fS?80+}B^@bEzX^8HI^1ORrlenZ?|qwinY=LrT4dz!%{!S@9xbmVj*qKeKq#;>t2w|dxpdk4tC2KCIpV~)bMI3Rn zN)#;9fU~2U(_8D;!$haEjmgY2K4W`3yQ>^%QERs%s2wWB>HxPuNWW~Yn|#GZ!?oxD{hOd$2UCg5?!O+zj^wI#(MB~6^1sATrzk)zKHVp8`L*6Y{vqOsyx-o}n9 z_C4|k00X>+3I)gzdc%uTiRL;U>WGFGHVsRB3w~YE&*3ZfOzjORngiwjE{O0mm3< zFxs-&Brho9pXQIqN0+pIt|6mpAIbhxe%tXcXXeGk7`aXW#t$Z-9cU73@DQ;UlGV?8NBTpQ5WN`iE8vHmFr=O zdrIWX6!RSe0~zE~lhFMKZAsj&tLTQn1Ki`({gn&iqjS7M?ER%x+`X5e+Se=_B0PyV zwX<-SBD*3QQ|1@qO%4XyakO$#LeQ>YE00u!uGfR`{2cj=Gm_G4mBUeYTDNm%wjkU&%ng}Mks58K`v>~k>u@x8t6d>#C5Oe6I`oNrq;K6!|X`*b>|(L?NIIoafpB6 zS&uK&V?3}F=_83`pfu}l7Qj~(g$BP)F=rw-_uHW5AGmsbcd>eS)w+3eG1_Hdrt&-f+&)sh@C%pGCJXtsW z+`{biqoJ_c(Yq-&cZ6!*;@&&EZr*iEErcnFbQz4is&p13!dwNmloFtX)u0b8YwpU{ zp`J?6Uc)~T3}YP7<68A3oBsgf?R@>ombk&fog|Vq<$~-{&;efVcIkZ;w)E>#&GA8H z(j2C#A0@e$q-gLMN@1M`1W!*kQjyS`*CdBhPP2FCY84 zUVoLA-knL?eY(9XLLEjeI9N1g)EIKvXu_83&|HGWHguq(;)rhl$7z% zRGBSfM*PRFqK%RVkQ$!7HdzNsF-(pko5TA&$O3a3skNeH~2NFJw)2*rh00{CX-kW=I-Tr*XnU_9D zWfFiXn!_kmW?x54r7n3zX(QB9;x$>s*fH|^9{>)XCsIAvUbe0HRNtwE(u<-^d4Xd6 z4OsFaecOtBlEc&iQ&@n-WiH`q2bw&zDZ!qH7yxIv&NQ^ATkA>q+GvZ?(WN@MB4>yR zi-6+4hDN3pNG|0{buA&%kTcsVj{a42t6#{b z*C_BKI_p%smO^2;rtn9ai1X01)1V7&K!4NR5>9(a+~d1N`-yMSLOAJ?G!NS2Uhvo7 z#ZPXesIlC*=CqWgwOVb(AsNr}*h}DbJ$+vP0Dobs+%^+40qQ=4g>|1TV?W6KMXdL} zw#wYusWs|+E_100RXyhxob!a^fO9>@TUY>Ruk(raAa8gSz-I{Dbagx42jBQ#FZO~r zf2O)d3oY*d0O==xar%@ex6I0N#)N6`l&4r=AQlyc6>$Ps;#QzP5<_7sLE`5e;QRIC`D(W!qkuW4^$NkW zm*sM~wP5IpJX&4SoZAZ)3r;A>x-TjPURro{#Ck0;1P``kulCd2JO2O?_x+*6=I`NW z^W}T7<8S+%)9wMk%H96}3;T2BE)DRjNREd*&Bv7-D5v_6;@(gP++p+#dt+F?Xr4== zZ~Z^x?6iChn#+IgKhNE1N_y%_-4wC&YmpKgZOJSJ6XYHbGSa{01iLFEAJCj0`Ob%) zRd&}ouduEAZd3`SFS74Epy6Ln%y$P}ZCWetl$3YDd&@%c%wU80_x}K2?XL!lP;ekw z=$;@ch)%H5016{HA6)+c@1h3=uz-MR(t=kEqmqzFKYk;&gUCy-nN7xlK%OdmOKpdP ze-G9F01!K~Qw>uoEfE?jR1)O*N*HP@S?;x{eL4VCdIPHtAH(J1IW2}Rs;`J~2(Y3u z$ZCSY{{RnfkDX`5e~Su6!EaX6&}~|E&R$~KolBDYuD3XZmRNh4!AjDX6U+hYQU)+} zuj1avHvxw%FX+P$^#{43LkDTw4j{3RnF{C>K{1`1l%%xldc z{Utyx?>Si{;ClhD82X~JVPH~YS+*$`6}vjxtU*hWDlr|8F)3FPrk0*60FQE<>#>eP zJX9ukGft|hv|!r%^WhXwS!$z5rq8#Yr=-Y~WXXsaD_|*0I4&(Eu&nnaXznIFo^AEN zy7MXc)$T^SNp?^#owuRhHto&)Rvh|UD`uj${Ies`g0i3KB!iLcdTB}6SuqDfjT8Ce z6f{K04kfSw1O;IJ+0cf{M1oQ>NeaO@>(qTU;t^T0Z8AuVhYNi|8Y;;8>&HYu3$-a1 zpA1B5OUlP2jN|K#b8S&$1@0{gKos#wLcgSceL_u2=7D~R<|Rv4eCx4YF1!K&T&OK> z7Zf`lx+3VH0AC?Kvng&UVJUCEy3?xUtsJ2$g*N*kUHWwU=yDwtYm}s>Fxrq35u6XE zhII-|alKcNAMF}gJAE8eE<`?r)tycjfO_L!PWB#I%d4XK@3xGE(2{pvJ~x_GM~ zYwJ{3#$CGl+7zS}6?6l(yc!oQuGnwPB=GwUcGm`~+3@S(X8iF3ax+1;DGs_^AY>%t zReVEQ@A+}CW_u`ZgT5c6z+u1ouCxw}F@UtZz-e;x6QD&SYeA7ap+f5%xQ4xX{9 zk?i(B=&aqwvFk#D_XFbrwKRCne+{16)B(q=X~=z>na5;|+;$f1R#)HOjI8SHITZVT zcL1P5N>{B053@9T!BJ*=MBRZ{SA6_cUi*^!(&kp(QdXnW%sScOaEPF-7Dqda$tWZh zLDj1hYI2n1hl+_kNjlKQ6C)Zdtkb?{YMPXUCttu(Y8KZiNa78j$w4E!)nq^2~t;gsVC zs&(`3EyP2viuy+f;pLU0-qvN5%|4RccUm112T`mpMoBMQ+O=l;_ zFDp+5Fkn*;Q6sH5Esxtvi5#5}f|)yPLRtR+f)DAh8JrZqPSeqSX5EU)vX+4TH3KO{ zY#=9X#BHDe9lqKTeU!@wC|{P=J8Cvj!K9Mf2c|Koq6Z|_(H%7sZ4fyoTl#B?Ru?Nt z#x>AaQVy#FT^g?@GTZ~cjL@P=V&kDFq0xZR2$aUA_FFx4Mg%t$7jV3NM?U&~Ad!@y z+Psb`J#}RmRnj|E5@ZE0zKlg6+Fh4AXF7ohfUeA?C*M)!UM{8FdFxA`i&1k_n`{_nl6z>NrQF2H z%6TX7=z+<1#=bWT2ezghm3&H0mX$QHbU@^ku%nAopjujeS|D<+mIZEDmlu{%mHz;J z6geR1Rm){vX$eML{`#GSBONOmi*vT5C;6Y>Ua-B$rdzlhT5-&4tK6%HDu{EkwaW@Y zskDa@w31GsQ5w`eUdI(+duT)>v{J0^RREP7>IkJ(S2O7;pin?g+DMz&mPKKhhfu@+0dspZ%))o{JbmIkt zq=JzJIi)2&`X?==Tu4$(6@URc6WX8-s!9WjD;;%TFws2$vWjRNmB&=s3qgpiYdMgm zqdKUR>aJtiT^0mHaYjeeNx2ZKLX{DpmmIO%TmY0OmE6i)chW!r>U2UFAr96p7M}${ ztp1weG>X;&gX`7`4o{Ph(_ZH&!ZaOPvI|)upUbAX&QaLPLY0eQP2?8;0Jgo(m;n#J zY^hIU%lGf7=wc zIteHD)6B~$H{b-~F8NDAAMZz}{Muo;X;<*!;H9DOyrpz9kN&M0xt?ifaPK8GP2X8a zAem?P(S}+JxNxnJH5Td)oq~X!q>!(`%6;q<8 zDXIm}9Duc~YC+nezC9G$@3t9liX0!lh#nHg5=x7keJ#>>yZ!a!B9mZ4cOCBgZK(O4 z+6<30n2r%@wz{t9ler>F!Tj`t-bq#w#sF1D<5Ou~U^s^df3B-}O15FOF=t+_h7t?7!1p>Efwa?Tgh+P{w5Q4s{{Ve>1<)v=`=09a z0Z@1Q>TR_nq64|F-;~I0-oKuV(P&R{il^Q0)XKR#{q#yh)|4gDSACcHhlu@jMvW5h zI;Ymf!lzJ>UhDTdiQP$sNmMF|86IvjKDyvjwFfy)ND5L_o|=%+aOx8ZdoD(f>&hoT zT~9((HVOu_ajGaFtEVoSVUYrsmR?Z4Rqk{qp2C5_Q3FzJTA;dfqWf2_H4+SW(t4E* z5;*LrO)UUbzu|4=)o-|~j*Ribjs~M60BQ-6$XmjbJr2@>6uv7%eL?)Rh#lnz8(wVu zPA;fFT(rtVthYKyZ_GvjP}F-X2A9&klF4+D_s*z7p;4k#+e2-L>p&i})2KRw7;jW> zX`{-WoY8bcw~oQl?+SR6X~rKmzP^QHOo@zZEyBH_pN37zk+JB2klp>W)g-|Ax0z7D zTW)np>!~r^#@60U4iD`FJ*0FTu05sk0~`39Xg3;KZRMyV&g2pfxg%V5Uq9m>%gusI z+B>U9Usd{qU95VkNJ$D)AbE&6^q+7>kS<|$6_A<-$K5>^Y^YnbisD>NULh{KpXMZb zfj;@rjE`fiF2|DQJADFYY*KFj01r1KSGLwZ-EsG0kn|NYd8rEgNa@`D^myiuS8}{i zS9qBZ&F(neDqF^1h!t;j<4$qgN%}jm+VbSbkUK1^t~zSUCJ38bg1(9D{4K=Ce33X^ zA2n~k;bUm;y_bPodX$D_wMY($aTGFC5ua8&_0R@Oqj?@{JUEoYh=w?C*ZElz$CG$l zx6*1maMZI=rn;vaTx1m#r6;K%duqX~1Q6;WYqLK=myXuV2)%t3`D*y~dDg`%b*;sD z;BaPS8Mj^o=?{Y3cmFXE^iGO@d|HvDVu6DamiieC$Ey;9jb#Wzg>NK&1l)SD|;mx2iL z)%G3GLDZf4JhuM;RC1pcCS~EhoT1y+m9N14i1bwjE5&^IR~n#QcC31IX%e`+Vsc7j zg&b!J$-wW^P!TBW991Co7 z02L`&>Tr8|X*WE!nN@2eHY4#QJ*!Te9)&~h`*ivBXVzOlapfT?QBdTw#3+&XB|v7aXWgDf+5k z=blBz!CD9k83&JF>Fe)}3GZk+1Xf1=T}o{-J;gdwS)U!Z9*XZKl$Q7oK9P)e9YFi{ z)Y|5^QPn`TO%N?+!L@{{UI`GW7Bso8;#S*kpApF9Q@%`aZ-xT{9P_5bY#~r<>)&<=j)nvWphuoDNwv@@_ zpx##NZ4g)K1t~d6^$SiLEf$v=ZQ1k({FR&Hum^UGZl;4rtB3dt#M)PeJ;j@J(suIa zsMhUz>}|%O*-DvEVb<42eJK(a`%QXOR8|>zE-Q{gx)7Y}P-l#STd1OadMuoH(gGUu zRN&k2t#ACR$Klhn8-u@F>2i1l-s=tuW7>|^Ev?AC=#_Puv*3!-8&q`5yd=F;*z!own&|;i%1`I&k4qMRFX$Ce_(Z+-j1WtoqBmMWcKov4$!_OP_0^I zN?o&UTJWiqs%&P@7{!%J%V6iCQrT<1azW~KkP~xE=XigWzJ4)}0g>(;LBIXKo=Lvm zz)V;)>gbGyY7^JjGE8VGSK zE>xXml8||MVU9Tc#(zy7IXmLKYvhxbIU|MFpydSm^Izwx9^YRMz8kmFWD4f-?9I1v z)oC%MGfb#d>F8XD=vWQ7+FbxEf`L4fo+s&@HtgA>Z8X>TRd8T3X+xgd0=EF@Mzww@ z#>(4^18b6~+h@15S`24cZ7xTm(;AKDDI5@vep*K&lq3wCoOID0Gu)osFX)Gj-El(^GY}K?>+mCOuR;=(;a#)WQIjf0$ljhkHXrbXiHyd;{#}N{%(xFf z5>+Q+)#U<%cSZPO<6|{$e93mWLWyFDv=VY&7Gk2vUj4%8I|I zP5%I{Od)d|G&JIR-{+V419(g)BtACNfh`^tr$csnZ|+?9jQAmZJvY02D0`bzv#ZpB zZQIe28kuj_%y=thr%x0qDoWMWBq!3Lgn&mA>d?m;ngZyfcXW$8dTxye1;&~&G>z}` za*g~h>&aSn-4AEJ8{QM|{llNRQZZC)Jg1jVF7fZbNRy$W53V;S1%+Ib<+AcDT{uMBgR8Qhp&<$8kZHieNxE(jx zq;aZDh@*DJ$3wC21M}*=p|0Hv+^_ba9i|y>Jr`}ZNp3d4LW6PNc`?cF&=QILR6F!f zajb?(Y*+>4YF-DpG?l%=idW0o-kq5~^6)-kZFsbm*5#>?uO!KLgOVG-aUsLUDJQW5 z{+h-1Vo5zu)o!K87|~w*qQL3h*I#<5JRI$k_WH+ZbJpAM)grC;32YB2C21*6M|ELc zNcS45!GK3IpU~gcX}zM%enVQ#L1`U#uy5QIm1fCymtI6^2yCe|=})w=)Ph2?Gmn2T zcl+tM-dgQ^3Hqw8BO7MKE@?Wsfc(Gwld==ru;n__x+>2}5(?|}2N`84z(8hL;@Hn) zmh<_OpthLD5&5WA8E!M>W3&F2i~j)3(l6jwTRUvAWNq8F^Ncv}lEjGl3&D8#!16sn z%D9q!y6e!i7PyhU{g*hS-7Z{Zhho$6KhBD@-7Ct~-R}>!*63MvgC;FAeC^ovC{kKa zpAbJKG^x;KG*9x~Lv;tz;tyf<1QT<^qkLuUcFw<$Bz(fo@reiPV|!}Y-kR!O8h`ko zUY;u&RqK}(7s4&uWk{&4xzTMKetWWzzvno`1lWt0$z4e+H5n-&fTM%;2Uew^&f{7e z_>$ld?6x?8yBxlx27+&|k@fej83O#eb^~kamd5LD%U4aRcEVlLZp4`xzvB_1(V$SK zIT>%K2$h8yE-6HEQWn`NRteQ};dVsFkZWLRwVU{K@<;7r#*dyuKmv8%hj)9_?rwqB zx)QS<(Aj3QL$2C4k!DQ|i1rP&S(2A!)YwfjhfAGxR3V~7pb+bCwGuljETu8{$Zvua z5)`|T3tOh=oQ|KkhJ!mkbE2_uHAPI<9G@N#W-~G3Er{+JYmFt==2RS3 zIX(n(q5w$M;PANO=gN?PO@XxyHRjhs?L&R!X+>jlIKX(W;r*|b&tt@wOw!#hp6x7_-r$4rGzxvzPM6H?C_-BL>t<)MiSD2d5zJmc)N z8*RKPL;yypc&nj z0Jv#i5qqs+$cObkpZ#7t9|Pw{<~)^QarkQ44;1%RN$uXVRZx0|B4R1hS)TlL`CdX+ zp_bGF{bMT*c1ee!m5?!1lwA`!kPN67usFf+!Gdfvx!;qR)3P!^6TXm~U66 zy>r{}TZH4%kxi;9K`BonRvTMxtdNxF037u0b;4d81&@E=TPXd%Z?verV zBvL{jWj&+GmHByqF_IEXuIlWaE9>a2?+Ov`cpe^Q-}{|SL@MRwHcfhEJ+yHwB1vz^ zZ9x7NC8Q%D^#mPA%)(1Ry3+pZJICb5pNO(3US7zW8VT~|BzuXi{L$T#kN%m}0a@bG z<9TQw(n<=??p6J@<_c8r(4{tJOpA(>B1DHmP=%nflpKy^uaQ5n104=@!&n?mrRRBJ z6tRzw&AqqxVqMWpsJCV{GA+vI@X6PE(u>Ubo={Myp@#xomO@7qIuwN#fKULFtp^3l z{S3v!nuyu8uZK66k5ICle+`+~tYPKm1W|SAd-Cc#-T>IW!i;{*k#=|%wrnlWxbB+O z9%7%RR~xuv{{ZyhQ=Wb^O*!NvkwcM!UUdzUczGmpAOohxS&NIhcz_NXiq*C?-1zP1 z=&MEpGB_y4n7Pexqs#zyrnLiV-%YEkvOF`fbnT6PABT&|+j4s@$eBu|xk4+EPLprA z!%jnWP08l6z;$mjwDab{Q$q@6L1{-eX!0cO*zIT&d-Gipr^jta{aPz52&Be{V@TTq zz^z9uXlV55T@OxORcPkY?CrDS>v8-sQnvmh#^|vsu^oNO>D9`8=P8bo^Dx%fX;PKV zrcuE0j>~G#5aLp+7UtyshB?c>V}*Bg8ucLEZgt$BB1JT~Sfe^zR=58E5vKd*&59&6 zin`EO?H(2Z{knFY(L~-_HQij5Df-1G_@Km7aTeKm`48Dd%TY?t739Wf@Hh&>lb*TM zqLGqgxDB~a{{ZY1hmgm!A&zm>JbTY&uhV21Lx_a!HSKa$?74Cv(>D6wOfQ^o%ZX2$ zF0(ENp_S#;N%9o(c_{w?A+BRQo>0|`5A6VpCEm0HPo-bP`2eaPv#qANTjT*QaPv1? z_zt?23E@5Zy{~f7ZmX8it3avRTYih4RXVv-GNfi55?hFHAS{^8m+MT1qo)KTfhh_r z31dBsA@Q(+3#!1OtA}2?H&TPcA1CzWk)@@r4x()6!~X!cSLg>y>tF$HMZHvWZ1+nuUj<1~V}+8xsWvfB^Cu1j59p!lGSO+5|Yv@QWNQ zJkq)IcaUjl1zn1GBph_gy66uj%mk)bDZ~WoiA8VxV(m#1*4k&#(8dx1LXV>={{Y+R z*RHr+c`MCyH@|2Pd}1+6YT&*DD+{DjTXHMCLU}Z=m>C_8OL;x|XYHo3d(ttUC;TPy zyOF*A1N{A!1>>puq@DCd!A+L?sHG_mrb`ZCZT|ozw#E-YoFzCT+mGK@xC9JWF!fpP zFxMQGynk-LMDJ@Vw0r8GT)5z^E-^k8K1Y(Y07}x+>^@FEtAGRSQj^%~mp!k?b69r- zkGM=>xs!)THgzA71rBb+CgIj9X_Dx1ZwL-4pgJW$bEA0QnZGa=JBh?3 zz?Gc~UGgPU+aFJDi%Jx?7E%g%Axr214k;Np{M$d4pW^ZtWw?HAf67mR!oi5be>Jb+ zX&($1RVQV@?os@%F{ND&*EHY@F{q(34obT~&KqS8{*3W9yq z0qxS`8d#dgl6C(81pU@OA}I^l){O;x>2H6Bt3+%?*M3sssGE;=>++J~c>e$~ubdIm z;O~%>Gwt6V`RR@0@4S|@^l18D-D!9u59yroxpR-smHoD?(rVP|rPUTWT4vVdv6Yfk zQyJ44J;!cMxJUjY?Tu1ZXst+S+wzfYN)bem>nSW@Nl^*NIUjDC;_qnXF%Gb}FQ?|% zDpBQ!SxG!d$6Oz-f3~Cz8&EDJQi$J5F7MylTUEBaKkn3PF6fe!3U$Laiiz#V!90Ow zX9~#o>yK{wYZh2rC^I*iz87CKrb{GrRT-yv)%=zr-Ho3A0BF-|D3b2&yYX>lU#V%L z=k5Yjn7#IYD^e!L5urLQS zEY$U1JkR4f`TfaAq2P!<7S`mOv*J0j)YwOhslK2)$n^mclBd=O{#KMfT}O=2;j;RD zNK@dw{w)an&@btFO4eUlZ9j;dV0P=TiOPSdSJ`6&kS~Q?k?S}Z>!>b~;Hm!r30r}8 z-B9m)GjJ+yOsrYEg;A!tA>@Ep6>1Wq5s&E%KH5S50GCa^1_rUiVh8YkV4=qDV&-SLK4T;SE0N9;lY2>z~OR(=+tr6CoRu{oCRO4zX{*X}Oa6Z}}6@&={pY8zszm+U0 zxmZ{_5X=wKkBYE*lI3v~)K)}=*~jI{hmg3z@6K^+cXRr>2b*v45rK_(5En@#i(eaH$BvfycEHpe1uk>j z^hng^E;LCJ5`dzHi9$!d2W@&Lw8#Nbke0_`e>wjE8UFwfSH9`^m8sEdsBxI|`3h~8 zRC)joHTMr>@S%?wJ*(s1*yl>=dor9hmJPBOi%Zg8F}m3l%chijeGo#6o)U)lUTCuEmp5nd2NanJlVa zYWSh}LR?mjnAP27#ax!lJeR>4!N#}ve$lg@oK_n@*}IOwSO)#u%ZkOTyG^S?aiz4f z2vTv|TRd#IvRPoPCSMPi75gOU7qw=N194|KkNhe+Bk`h>QWRm%nk_9$IlC7~P)Mu2 z{{Zn0fN&r^6Gw{A;+a)98oeWWab>M|-LN03p<0#o--PtXrw!pD;Aph%3*oUT zaZ>8(XQ=CxYcDSyA=|Ayd=OU3Vi&{BntO>a)4<2oI$ZIWIBtkILt1uMX2f_mp;4u@ zw;`h-kLlGmZxefgR~S4!jVojAme$g3x_fD2I!6?a!&w}>w>+(;7CTr1H4)oj1SKOH zr+cic_?iGnNJ3YTduV*bCRzbebE(X{NK<3>*My`Z2%1z>n_dHo8KSj z7YjK$;vfs*8R&Haby7*GAoM!vz0`q8sW|9$!>F|+n$SBPaZDRYIGh~o%2t`n&I!>P zHC!%Gvt;p6$u2XqePx6*h77(Hb>TbI^6f{sOw`_(Do&plam8 z6hJ?otmAHqwnyrtqr6tWzg!2aHq?woN#&zcf#+_80 zIqFClI#uC26O^PW>L(nuyTW!i6+KIkr4gj1R&Xi!P7;CF+g0)_Xo7ZBNXCFpsn(4a zEU!iCPBrvM9KLNVXjZ2a)JPh(iORZ2^-z-`_w@Jn)2wnzNYs1Ky7v7vVC1uyo2~#? z^y*-sIg5c$PJ3!W$PSDpn1{fO4M;gI_<>V2mlVpu&WhKhq=6gS^`gp?m1v>q2{Gwe zcBR-_v!~;0}LQyt&GxTc`&S zo?78j0Yz72q_jqTv@(hUtgm?k3+t$b)3T}VS9v;rJrD%D)J$dN%xXkvlya7ef~1UU zCv*}QGotfB*DVOO4A!Y?Un9pvYml78Jtm4&vN-9u+?0|uycz+|;M4KBBP?oKJqU#U z9Wn|^MkRlR6m;XLJZOL$s&NhylCjfOnFB=rIMo!}u}D%$9^+J5C1`P4teZKWD?uYv zvmI5-28!OYWTlqUO0=!&r0oJbi(X4jg!1X5#@k6q?Nhjwv^>5%v|`N^SnDcThTD?g zQJ$Jz?WFX2rZq|{Ye^vkuiHT>wzotlU$>gVh(@4{)}V^@yx1zkV_ro9kmI)des@&+ z{WaorT>%nWltdv(AwK#G%4Q&rVZ}>Kfsbt{;Gc~&sT2gB-Lw)Dv7tMGX&iw*+8q?@ z3JJI+r2$=Wu7;aTf`e-{A{21F5Li>7c0#~!DIuZJq?3+NXy-z+`TsZvo2Qt$va#`E9QXL8l zI3Im*G;F5lR;i_C_<82|^F6iD#4{#{9^tuGpHarM+3!U`iM1SBTha9f7s9Ka{zraRyF?NDT(SEB>Zewi5OPS!I(?pC>QJLV1T7$qnHJO)sA1MclK+tDB z+FW6>w$;N)jS`r-%&efLvycvyV|87Afq7%&-ME*o?|%gfK4EtW$LFoL2_h_V;=X^! zzpaoO7OVJwSZ`W(Lor_O<>&irH^p)UvYJ}&XJB+ug=E^Zl|k<%wsPi3#D zz2xxl6`x$VScMTwLcvf^*FkoRJ0nQhXKl-#xpx!Oo=Sk_oa0>}7N+oWCW+P*6MKO{ zlS+0SRwzkEc&%yDjs>Sh^nM&!od|4-kKR{l7enGn4Jo$O#XL@m&Smr-5rG~oR@5O^ z+sZ_`3S`pdt*5wuLi9jR%7=?_k%5#LENpoBgD0M{GAQci}(y{45$G?}~xYktc+ZsoCgTP&c&g8G_E zrD>9Ybo5-eWpA+f?hh7(LoVeS>^F}Kro^Xzf$#JxrAT!?TaCPZO{eUAwO^A99_wy} zCB}V_j##;|^#`Z$tQYs&X3W-JrQIk}C3=#F6V;)g!gPzFo!XGFPWDqRmKpR~2gCN+ z)2>+TZZp+5kHkKxqB??!&)4a$#~3ya>Zr#iB%PVi^i2FjctYAu;fA+s)Re=Y#YvA) zjsjJmVyt)5@J}OK%H5Ng+-gjDJP(NbtZlhlW8zoBycsa<+k!;;1eTWBQzW>QpyYK= z^yVw0!MtGuDKNaro4JA zXAjEG$II-b2Tr~}%E$JVYVfzK%*?XoPmepy9#Mu!StGANJNDCW9M;oBd9CD_aAdKs zk}@26jn(gBd_gZ8exD+Vxpv8^zL@SIiOruStfr$NVh+078hn#`A|un>XdZh*TSCPh*#s7O)Dj?~L}-?~pa5v}ghOC*+m* zIBo3?qKDx7E4HV!8~fq*u$u12-%nJdI+d-;a#RxMmX#c3l5pq0;p?3A)FP7`A|czh zkB|9SY>doY$qSn8$rLm{`+EDezKObgSJSS_yk<8>pDKw}rYMA|4XI5B4g!jjuTmAz zeQ}R%HTq{qAN0+FvswHfw*I7J_V{aFy+^@Xmi<<*A?Q_j&|*{}y5dyKsPE)2kWZ)| zP#}L|dudVu6|q^z$2>3ZjXEnTwRzI^@`%j)rYr1+z)LM9T$Z)r8Awla_=b9bG_4n& z>SUPO!1o&S&+zG!+k@H!(g@*Ep64K5>h|!RprKBag)KnqIGS;n)h)L>GnU$%lkxo zE)q|PuU_!`ElKb%+-nB!@ab^dHced0hiRsZ37&7INlqF{$OS%-<^kjfQPV@>!O+M{ z#{U4ySA{*(M#eDM8h`QY@mtPcDG{7@D{4b%rBpytPh~04R5SU5)9tF`BdbpbeNn?2 zBpk-iGd@9M?;f5AD|^4cbe-+++Wj$CwWE7cD%T~kAqi~Nf*)uxBs!zP4xzS=Lej9d z+Ddw0a%@g08XpbQ^@R|Th#vm$K723{?;bRr7(Xd z?e1Jq=(NF8l}STbjm~=;)Y(UyA{N6dowG|vsL=j;EZZyMd$Tmn^}9BD zttu@R&9ayL8ojwyxrlBL@#khbgv4ltW6NyEc?)qwE6rL55Rg=DrQvxDfO0n6Z%xf; zZ|15`8NeAPNewg>`3s^e*G+m2kJYl@-iJ?hB;w2AZz0Z@Py)3A$mw_M@bgDj)qaCp+!nWr z9dZQAL|7ELP;NG)p~$O_kDYbLkoI_#7MyK-^NuAaCsngUEAtu%{h)fQuF;L*ay72~ z?<5QHsz07&DI0sn7ljSftW+&qBgCDHSEwP6HRv#ISj%xOm8r5w=hpyW{XbEs=88hs z64Ebg)AL13j0+ylQDk^)wH}^m%CclVZ#?Wk3Z0UMf<3U59^bM4`a(e~W9zA;{x>5t z8XR^6{7MS(IU3_*Wj=1ysHz;v)tW3Buc0J3h>umGHz5g9dZkKbZX_RKpmH&h?19Mv zaOx=hbWL!Vi8!c?>C%?-$wwum^YYk$4;*JDJx5J$cqCf-Xx{PJcuGy1}@H$798BHJW12`bqeZhM<*DuX=?6v?4nc`XxCL80Ij1#J;t; z$2q}Lf^*pUSRFys2oaD6fKE0?W<$<(x455i0DOndeSu49l`f~1nJA1~E(6^;?fT^D zI^V@REalY7?%mg#<+@`?k0zM`l(q|BGUiB6B|77nBd2mxl6~{8R)l;0H~cSl-S)`u z8Xx*VzpDCLNT;_IKqR(+tbx#HCkIk#Cr<_5Vr4GzSog;h)lUj_t9Cw~85BhI0BhoQ`uoqGlsS%$ z7QR-33vAw`XgcVB>GuoLwW@a}=8a}i_uAd8y)n9VIs3KuYH{ImL})TutJK>|d_fp$ z9kU4m1Y`N_^*n&n3~P(p8ZPJ$T|VV6Gnm+WX$b|OxcUqF0pa1~nQm3jx%7Vy+mm8$ zEvH*Hi#ugbp;MJvst#EOtccm|3YN z&ydjTdT1<@byRF_J(_0_y|O!$G-x)nsIL=ds8*zrTG4-cZUrWjuseylcPc8-U|mr! z_bZg@m(Dph3Z+))mZJ*cC$ZE$ha7PnSfhUui!Bq3 zfA_Q@_l{ax61Nn}m>gDt$;XVp90EZeKKr68rh{?gdaEZ#kb5UOxtqUtVXy>>I`umf ztyYTm-cJ&=$F196c6MqtM!9!h)Y`inCAST#I}$Fb%5BjWu2%DjOK{N<4oM1iNKcnB zJb`$&*sH?f{P}JYXwg=6&|OyAn?D~bD#tI27GSZg)yC*)t!urC&{;cH`tsfu@Tt5M z`+oVqJZsVnigddgACqeA)VsRkxMnWkl<0NX=&Q$RFvO~g&^U z+FKj|?^gN^6g-Z!-}fF}F0Ey-<#}|oxws-UTZ_~KmZuMCQMWU(y01ew+ zsugp4JYHSZX?LyNQ>;?$IuyChyxj_!R8?9lR8>0KNR--R)DrGWQd)5VDIox)(&cfd zz#7O}0BC@n}yf=gM)5Yv$gxYlQ~sxS~e3Z>=Dmr`V0M@XDI4g}Rn* z=+^K0iK4@_>vnsx-$hcsY0+P()nWy>nC(k1@>`C}329N_`AS(rTyH{`GyO%@z|hT2 zAMI_B8cyT^upLd%G*eOHJBPWU&T)MKV##x;TkC5k`H8In8h}F6UKXeBtcx8LJ>In1 zq1_c4T(wr|@SJVNntdrPt!dz;gq8jx*jmB~Ddyl$HDxC;MUwFbt=6ye=R?pfgIz4R zQGTER>uEaJut)s$-mIufG)Pe{R+97|HYA1=+S)iNN`X-vhI@KP+x>K#!(<)cw4ztG z5zC@1z9F$1NnkRSA>!!)ETj>VP!o~V^eWH`A!D>?LC46Iy5CJjpXDW3r^AOrR2p$1 zFDVVJ3n$Wq0i1n3zf9}Se=w@qd8PCkO@N|kSIx6#((c>3_OCZhgv4a|awQ%usng}M z$}{~=EybZJLUN)`0MAVy9ydrx0?mJ)&m@*~{exIen$n|oo5$6&v5KJ6w^wWKn|g~; zg#7x2R=EucW<4N(E-ch}Dq6hN&wdGZLjF406B6;PPY__HPa&O*PlUr$A3I zv8Tf+#J!;q@&~ZDt&v^b1@3jS(aLGSokxvBvA!r|?w;q}`$KZXhfBKCQJ!V9^982b zoj#!*G{`~4Axm3{OqC%)Es_jgL;y3Z3HT|2jGI!z1$ods$H-XI)|F;2AMK};8cGjo z*T5GZ>wReJr%R<$_$s-)OKo3@=e7%UtyQSge}mE|e-4hr@$K-#%Ty;FdMcKOQ!%$> z$8f1BQ1g6B#&Gz2yev%-tx4B+SRB9tH099lLFuZ_@D3%#qvH<7nYsYhngh52 zJfx6y=duofjR^s3zYiBxc7eS+e`Ck03Y``<-_&F=DcGD{3Pgs`hLkh>w;PV8o4_Z` z%eVj_6NboROiz>wJj3Qbc5l;96}-oMvAvO9j#IC^Z{R?$U33(IVeYbC_^i&`=`2*C zu+6+nQWGvhnUsMXt<*Y+At**1TWZWtF)An?VzZDepN>EL9uruy>LX8eRi20UR{C13 z{bQZ&5rM$|+Xq^%podW0{{UtG0M%LqCE}*|6ZewixLs|Dw5S`OWz|sBh^{`=h!QC6 zL(c?`P9b6EkT4I}6M?62VgCTTwvMHb8}$w@`vqCVr7g*Q?AaqbUXEyQ&d5%0OK)$i zuLd>L*|$td^%>+ysZ$`-4MXMP$8xOvWik?ZyrAVll#JxBiaV7Yn;L0l&ud&OUb=X1 z&~5HQ%z`L5W94bRI(NU^MGegp??Jv8ZQC8n2Z&9|q+C}^4l;&lv0lBFqgIfZNMUnS z^KKqN$t#GK{Hy|m5R3qloj1jDC1HXZY3rul>msYb9sGP%e+Y^r`kBFYhP&Um@`21x zn}`~86aWeDhMOUp&x<-bRacQQ7Q|GwFs%s)eRR0xht{=cAS$U=o^k$YS?htNxUNg# z;l-d=Hokr1dVlF_fA=RiK09UN;l$rAo=1=oul~2c-qoP2ilmoo1yi^vt%-6TR&bRi z50wCZoiKWRHIQ(okhg7lAO!(v#{ic=Xum*xY|ob={{Wt;N?M&+$tf}&UvBuq0mnm- zGmL1C)S)+J_UyQ8R6XUQS#Vq*D)l9Y7Vi?3BrDEBMl;Y7(JCkCdwWf>G{9fy{3sb* zG6M&P@|pOdlM;ilmz724aG4R7!6e|GOG8OlPUnl5>)fBd4{$+tTwr*paR&xr$WMZ& zw?fv1b<2+~;98rBIznaDTWwfdu^WA)sU5v11toCpy$ucp7*<8 ze)sgSoZ+x?U^T7WkEpMz(H{7sqF>(C_e2F)sR@hvU(=nULEi&8k!)vh;{RINV5#NNlSL$O~Ix zM>*(La0UU@uVx#H_8ztID=#C+&gL77_yAX?e-C<7)Gr0L6&{{Hn6K?K9u%w)`A&aP|)+eA^M@T67pz^&BKM5tN{+LG`*+zW)Gq5=kfO zN!4|dpDYAYIAuvfLRPG)LnoJ0jY$Yn?WWmz&;khL2^kn22^#R!sd6@!d+|xPpA-wi z_^2nsp8joRscw9$Kf@TU+j1mSd4zv7t;GejJ$Wg@Is%-Jt>+Cq9i#s6#}|1J2h#p( zqb;0C#P$zsN0=o2e#;g3(WU%$JT3Tox$o`L@u@+r+HN7J^-6^dGahpdxS-h$B*tu@ zEV;z+QCI*TfD^5k3jYA`e={+nD2OB856xzHvv|%P3*PA(M~Ddn>52+QUv4 z0**pTKjD7APQCrL^nU93IWDq|{4{u*zx*w4jkUivJuVy7%R;5|wC1LuxgFExxP_r% zBoY+ciWvtZzqXgm!)|6fq9=6T25gv_O`5fC-v#|E_#W|@V|e87*+KCUVlB3XMV~Ia zNe=T}CZd1?@l;3z@h2%b9FU}|-(M5sJU(t0mgwK(^60+V!t){GSd5jON6lMN>MYBG zhm(R9k?Hz$)kt_DSeVORsja+>i$lkD;@jnELpODuN3X?4Jac)4Jq_{`?s%p?NcyK% zb{&S(;7I$Ax<#%m$Sv`&xc(5`8s>?%KNEV5l;fUL8<)2c>MXXD`dyy|=Nnl*+`N?z zzeJ5N_Bu`*&NpfL{uC)4$(~!#kEi^Pf)&~e?{B;~d`I_VYj+0srO}z(7}U#(-fm>n zw1-|HOuT{2f#wx}a5|CsX^HVA&EfI6jj}8ss7khY@p9hRI;;csKSb-tzr~Nk$Ak-7 zsX(Az&};X=ZB4?Wz;rLjbxAl|svQ6a2N}uNcyF_rSyO`XK?{iSylhyFyINik_=fQx zx;yJsUgTewtm(CSoYz+Oohd{%j+{Upl0JZaHT7IB6^)4AP|>pao_80?$#*bu3wit! zJ|Oqyr@M5Y2v^h3)v1-Hb4_(`a#SaAk^wz#!fOjYJb!M%JW+jh#Mpst4Iej7%AjO;nYK&)FV3`gm+4E z^+AQCBrQXy(^DjDfY@FNYyfnvK4&DT5reMAM=~UW`H!wRJkd^W8Z7|)>&H}|YcFf;*(j9u;x1`BKNGe*JXq*A9q`A<-Y2{$y z;dxmDnV~_}sC6m}>V;8`w$_CZq^MwmG|MGqjkc7WnDRpEcwN$@rZdgRZCFxBAnUII z;*{YcHwOjm*TC1tJsI00>w^qdZ8o`eCcImpRl zwOYXpFKQF7crV$ig36OmiZlNJDA7j{$qEMw0+FM5G}-!7oYMj?>@~-69ET~l5(e~L z-d-Ozj-Nz$rW{@>``e*a1iI<6lDHQ%LHyhU0O@ z0i}cLzDsgc5%oIWMoA0j83Cc@lLr=_<3>x0Q~P@^8#R_yAdGVv&XCIvF`8EVJ3hp&f_K;SBCju7^lh;8h zrlzj`Ee#o|7ZNkjYsjNel5sd4b>vo$6q3)jqzWhtg)9w9=|~DmEqUk;yru$8OZFNW zQv%l{`;(}WroI({+fiMjxbLZ0rP?;RS;@w{Gzv*I_S96Gl5@Xbro5z?PyYahe=Qli zp}e7L+x}4}Kc1e6wvm&!QN(-31E4)9|$? zGwA@=7F6jO_tm2tqOE(Zt|`o^L>y>x6lj8xQaCr;wt@|m!BNvzLb0Q?1iQ*kI##9R zY7!6^m=u&oSAo#|^qbtQB56|e<`z^Am3xAICL(G?Rdgp+^1WL?%0v+w;*pW09_48h zX*keHO|&d|TwoO|Blg$OU@HeKNLr^Ksp+dooU3JxLrag}BTq5O7si-98|pt@FbPUI zi4znPoDELO0b=+f52m}!gy`*bn3z4kO-MNj(WepG;(85CIV|{;#V$hHBL}949F>v~ zQB4-KwtxkCC~{5kBHA_7roaWy@1h4K9||d?-TB5|{`#0HSI0=Ijdb(l{LKEkm?$Nv zngzg@8yR1>*Ip%b1chR-g)~TBqNW0_Z#s%q&kENmM1@&boGv<`KDwAoye4p4CBf6a zq?K^h5L1}SMn;59ArPIr04*Pf`)FjZa;SQhAS*adq#mMJqL)GByzu_oWsgC8R-`Gm z=PVu{+fK(KMo5&yR>9y1Z~JN1KGl4YBxKu4NdEwb{j^eSB@A>@4baPL{3l3c4HKB{ z)lShV<+7hnvzbG6p~V{`n`HsApSGx{I;&<46@fvh1{(*LVWk1pMdpH%dg$`U5byWZ zi~`kc&(%p=mnWR~9%g#|blaPv6mB-GYkp^((n(ja(ozL&39zJPaZ(A!m2$9PLv_}Z z#GGho;7~xf5kd;O4Ri}#LeEKP$iT;aca?Y)OKT|vC#SxG_NHSfpUeTCpG_|2r{hrd zc^C@8(45rk5M|3Wq$|~^@+O+-qX zzc$jd*Ic#QPS{G5uUhviSjZ?&H6ZFyb5agXQ0kMZ2O&A3Cf}VQz*t~=mQWEYkKDxDrV5;Vd)V$r#eJtS*p5I+qGGI~$NNeF6t5}8p^K^mGkbttK|g)@|_olG*js0Vod37PiO3Lb$55mnuma9@Rup!i#+gOmi9^y=dD&V>lT(LGA?YuO4|M!DU{{eh^R++HlU8c z{k4|P{{X}#Z@4UN?7|MH?j#CE>QosLTW!#Al@rwJrScZIFQrR~Be-C5TBfPjrADmc zlI)IXC)nym%yP=f3)%aEhrb?&%rDCXk<=Y{j^ZXD9iVCrxMy1xyK%~7D2ADA z(v(ZAt?aEBcx{o3I^SDwG1;z)ZAEQmS>wp#MiO#pv>wlULMI)OI;h$@s??@UB1tZ| zp2TR3b9t?2eXzpGl5W&$q;F|7-}@$(?M^Dhke@<|bT{iZiXOXo}$ zE;RbmlsTR%&O7O+LTg3!-XXzpbD|~s619HA-rHxrR^g-8USV?rc&anl^?k;XnX)l_ zvxsoncx3+o(%c}=6dnOYI&0U?+MhADnl4C-j;Z$~eMY$)yv^l1ttSKao>n|EW6V4{ ztc5M7sqz%Vs3>s?Aw%CIQ6$|J^#*>PSVWB*g{=M^J}K!|OqpAGdt4?wX+#)mkgq~l z^v||*PD1)~cMIko*6=X-jFAclUwYTq#bQ-Lgk(Z_FQr49PBOfLKDpCOj2%MxhD2|M zM+fMtwcK!KzNl4q67o23TTdq`KbSi7k&s5IIHr7W=3})~M)!DA+x!0j&#l`*sxnFr01@xoK-IP2}# z-`i1`x=7v2zk+*HfL(Dy|tfyLx&7M1_O>ps=y%m;UJO7j*7`i z8T;rs^13Irgzk1L8;6yg$-6mknvZ+NmLH8N$da0o7=${~!jPmK6sR1Gefnz2*UUib zwQlTWj0phqSLWGx)_$H^r*6#wx|&;Pw$)NPLS#3PdaKz$AJ?(`*ZnDJ{+^ykWsu^$ z0y%C-yWV1~eZK0*xUBt_@he0%Xz?S@TC?QT;5rc{u3Wt<$5GeWW83ekvGT(u4(aea zEQdCJ6S>Rnqpr8;di#o}9NQld9vr7RaP56Tb(%v?70RcU3WhR9R>3DH2|lC{a1U)i z`ixwf6KGFg^ZcW;FB2qxO@hwiwD+{1n`ok20Ulp-rJaWOnnO=8@l||Zg*+C?3wcLTzpWAX0HOLt*-mn)9(A>GG^tUg zCH9IP;iV|ZS++(*gUH+@z^tTPn}z?91? zW6oK~Q%(QZtczM zX0ZLcf9}&%`Bn8yTW(XsX@eL%Q^84buQFpGcK^zz>-V-B|)$Sdxd#C_5??wSmha0cuVF`gc+P0L`pxx!Gp*H}hI%hDhds zG!AdbAMicOBGFw*i{9eApN7dy`jj}rLu>%*%T0_7{Q^!p{{Wj^W1rd?4^jug7bXY< z41uPIYmb(`KK*^(Xo_pJ=I#}^BdxVFQE27H^XpocPDt!A)P9-mqdc@sO>9D1Hq3DY zZtbqyzya~|_tIhnNR)+BDF{o7Q|VhoAoWU6l@a-8J^rWPKye+BYkYr%&wcZWB+yYG z5=YTO+0}V-B-Ja;$S%f}Tbseb_*`w5oNYgt0ipr-7&;7w+)GY{6SL;VYaS`U4|Uh_ z7CrdFc+RZtHQ}}X6n4_(iZ;FL)7ZBoO6gAc>6ZGi`-A38h!rD&7JqAQfQwJ9nps}xY`|m#8a$@vLzud zCOT>hC_Y+JPE@B=!OrN2U6K9{Vg{sHm3$pB5dn4iU z*s52cwJcI#Qynz67s-TqEjXzh)S>36$#z=9fN?FBk_h9H-W;8zlA6Ph%5v9`7~=I6vhPcPwJ@}y z0HwwjrQrHTdn888P~gGN?QD%lq2Ix28IhKAoYLdS-73v>8jGvn-m~wFnYJyDvD-y_ zZ51(egSs&)6uGfH;^Xbar&il)J58+miu{RhDZ`({lmbq4<|J;F?-GA)e8R4mJ0dtE zb6i1v_1C)LUsMNF@x|kQ%kYmv@c#g`z9Da#HOF&a@35$mYmcq=<1N(2j?+?7;*4)v zT?HswatJ*@8fCmY1mqXJptKKl*McbHJXpfeBs}ETiL297ehACO{{W1S6utxNvFLkI zy>&(|)~lbLJRz@bZ!mKzWq+Nho7*ZXKB7=d()m>*ZT3 zJgz&%czGS1n%~6f4}l63<;|NcGdKbJNv*dB^Ho?_cWoMv@K9#Q zsMi$yn~Qmxl+7kWaAPf&SVF=A6V$lOk28|bK*E5|a4aQZcM>PTsR-l)gNB_+aMR)T z)p6l_dDXeTK0H8poS6l>w5Yb#-B_m?i)|fCVZ4Paic^M(PfTXu4Z$pr$enZ2XNK)46S6LG&(zpzdPY~x22S5kEeNcN~ z=YOZyi;v2}*83a>YDwHNqvCCQX?C=z@F>*uHWn1(O56j!P}oub0Mw-)(_cQxXk<)i z{Lp>Y{{V+Oo>}B3xB9q`kO(U1j?+8SE=(ASX-`EAO_Ez5%_(@Hk)Qce7IFUo+Xj`D z$G0FKFP@6)hXekO3x|Op3qLZSS0@@0r3k<}kK!thIVT>EJBd9zV0F;swikNW&376x zlo`#T9{hAp3FDngEuR86k8b<6gg?4SiNkgTM8g zx?Shtr^Lmwmak2ys;a3?uE~avl)J6Q(&&>Zw)hsrhiLL9HtPX6D-M>(4Y}mq#RzEa zB6Zl*4Z$0aOVl4ruCuQqgVK`Dsl!q<_5J|(qJc$Y*JomBArg$Aa?mx%52t@H8G~n4g{{ZO~ zUjyUuL$AF3_Y(N2+&g1M5-uI(+gNo6({UvbYAQ6_UR0V@Og7s5mQ2AhaioMRG6aPG z04%x_B=Nb74do`eU4Q(x+ocobuDueRNK1r(b8|MYTm72sd}ssL*IC`bqPMl%hhN*v z-F2GvwMI*odXsf%@>NhVBU39i_an@76*DGUXIwOf0ubWMr-{P2tcbYtfDVM!A6f(C z52BndaXj(sMA+Z<-SqJys_%Y<6Zk{D_Y=c*#mn%+;tR`{Roj$Jm${b}$u-r+Vvx%W zPN`JX>H?JWvQ<)b3^qy!l^sP#EGe~DXSJD`M8?_s;7X2})&SoqMtDa{*XYo&pK$Cp4Tk~(X8>u1DXo(dblWeaD~ zw$-V!Z(8-i{9@o;wLzoaEukof7Lc}EjE4}zNRFvXbqkit+$(&t<7jDREvpjZITAF6 zv7>7wUcB1%K6HP|pAE<4%I1~EhJx!(TNSXdYQa4SI{{W6<=i!^rmax4D;Ghv-mT6= zOCsfuNKA*K$U^+Jy4x?f@(Y1aB_4B)w2)Sup~Q|_suPF265AKHziRm{L5cA&v99UT zu813H({W(F)6UeH|9J$j8yCGVD8+1q;Rhq=esF)1rhm>>$eSUa`_ds7J%AF31J73CA6e+5%j zS1x%8331Gv`(R@yNHiCa0k0eU{LyVVE+m{@R^vDK>+<~h6mw3yDciTTbiKuvt8H zQV8^FF!2XNllplaOirM6tpOVSekC!J!p2rN>R7-hU~v`!)Pg>Gb-f2gO(w*-_V30N zYQKh!iLOSzu39VzvMHOTWW%S#radw@1Wsl}HOCu`DaD7K;US!<1@z<*#aegC23HR3 z@+2IMCsvY4@*&k=3Zf5z*QP=^X2#=Pt{g-?;9omHXuUaunRMc8km0VN5OiAKX18+9 zh|}I9r`=Fc-Cn64*{@L3J(R_x-0>NHGwg{3rwzzkQ4rY!i7v9V=glNzvhXBqoq%q@ zxE`gZh&ALapAA9TZLu@sFqwlJw`;}ec0?xka-Y05)CpRckrOMrx z{{Vq7ocR zh{DhmE*XuG+_Gk%1-DXa$Svuq*T5<9o+E`P4rs@_C9WKxT{MRs`=d(S^&TNm-WE4% z#jrdbOs?M+)VcNhioE5h400_gwESh(Rc5Xe}-3pmvJv~fY4?t}N$u()= zYJOs2HWioNT~X-`@xdp{&TuoN__PvdxsXNX??JG$;1~h5Yr&;w4(G^}{{YkCTVb-@_igDBr^+J88R6{udSSS0BxAx|UY1fon@)33C}wE?CIcS0SPa zOB!!lzfa8;$_L3LVbTs$S6&y>*TsIY7YW&v25N7-1M`2D85yhEO}j_{?L9T5I(71 zBpog=h<|Y(06{+>f$s`@yMjb&b7X}{w?hxQ=T2WR{D4){pz4H-djLBOopNW08O`VP zQFBbM4e=H6B?9jCgi~?1N!Dv>*Qf6edq@g*J!bJ9ub{m=gVFOGu8wvV6j~ zxG1OCU<7`6I@0jiUhM39>0cphC&c7n#K z1a?cQUrxGz1)SA;(FfJP;Dt$_Ani#%w(NR3{^3Y`N90VV{6n`=)uJS_k#o&NXAl6- zCXnK~^yqM`{{Z4Tv|}3BInU;$WwJ>*Z(#BIfW3aQD0BA4*S2lCIAx^MX_WX98&Y!G z5{8>XiharGK*zb)$|s%EWs-WYqGGeM#{hJ%qO<;0skL~OCZ9=)a60u+?Tmef57SVf zj@P-!xz`$C7m9~9fRqv6+=2JhkWPvGM$%(2dF3tvl@s+nfB5{hFf>!MMPnDacS@~ba4reH9dpdTucmCV(z4W~=Rp-yfL;nE2#S)QiHRI;3MmEH`?|%c0 zWi3C#K4l0bg{2@Uy}?AJyOYEyr2Z{#{hAycIE+AV&adRK{?g0FSsO-8a+A{Q=koMe zf|jDxR#y%=S#V%v=NVA|5$*o~&NZ!f?pQ8w1f4|``7@kEG=w2YC<+O|T6*{V&Na^U zD3@N#)9?0VcWUHobN4G?N|fy?sX=PF8ajvxWuss^xL-Qu=Pc1hQ7 zy817$xsGey5jtpo%h)&&gJh{;O_eLEbCiM5WA+;PdqJ&N)1E-vRh@ioUp0RZ+s(Az zBQo=bm&A>C!cO)0e(_Uk)7LUJCT&F$#B=`u)lk-!3yty}!EHwew@`JZ z;CwUnP)iH+x>Y=DJ-CubFxH8`dh^rc4e=V=UmbhjZr@uwK%YyAM7L2HQYSQ)q&V?e zS^Nq;5>er3OBW8O*z;)Mh&_u|3%jsb00Z;VM6={WYR& zEoh(?PE4mt?q?MzSasJaQ0BOmr7CPEi9I@F8tZHl7oDp?TEpN`Pm^?fMlH!QVwXNq zhg}LP{1{JtW&N*l94LyiwOP8axQip@$ zMUPDj#NUcW$jsUw5EW`*rzME%lC`pwCj*H(`meK@W^7^1bzdj;qYJQ{mW>uxcPyX; z^g7iv*;uy{5w6H@o!zt7M0)+dQ*ni~;2@!7X$<@r^5UWurwrn9Vn{X7dl&Hf_{iJ0 zB_1uOx-~>L>JShgaeejj?lbJvk+`{`eOH8gK@_b4#cs<##Wv7hp$<}R_-ig;BnO6d zjhBVwM(sk_N1qGZp-nf=4dqv$F1KM$OZaGz(CQVYF*`V31HxY*x$U;E8-62uLB03g z+U&}emb76<)Z0g{zLmkV@nT@rU^w0uPC+0wWvVZQ&CRN$)6r_aRJCJ1QPze0XBndH zXCvTwE;K^E{5gCocNX=lM|QD8b+(kCNmFEMhdhy*Y#-^^L{Q8Ig z0E3=NU;YpZ-9X(x6^n|g4aNmcex#B3^mzT94R**+JSIm>& zTD~2_L;x(e6ylw&sxnOFyy04pQgxtc04%HCT;!2=mvgBo+Wj7D(BDg~sDchgH3zgf zQAdhLFxXbU)cAq8Ee8;o^A?^s?5$B|aP~^H*gR3prE1Lak#@*{5&TKqV;_v_r~Mt5 zvbj8E{JX01@$nUL*4CiqLBo^&Z95MPV>&AN_^X}OIogf%s?n=$KIG+eUQSh^X7Kj8 zn)QHz#Okw4kyA*ofpu!UlsrjR^r-S@uuCen)2l(ML>J& z6PtkO&dYIyo+Jv?jU~BkhZ3&iRB|(vtprcz3*(5v&+nzkO|+z3Z`^B$;Mzsh?f9X0BrrV2@U10TM;PKbi7B&8@EYAS1mER9C3Oj75XzPk2-b$;Zp zuD#t}Up2yQc_y{{{@UW06p?k#`siIz^(g@dCR#Ri;WSrfU4#$31YzMHRAWqU)0RwoY`+P1OchAj*=tzJEPF1vMph}b1)?c&Y;V*S7;P8g@rlP>7k%Xol0{7l&Axa`c_vaB5jp71{hWk9U}Lu zNSSJOnN0+annp<#oG~IQd?0`@G=tu(;$r(7D>U6_ilzd4N$Q_gWXo1$3bW7-C zrU2A~kW6c&vGf@lm~soFOEnukhNcPwn4QL8jCARu0+)Lfgk>$P9O!_hUmAZJsJ6(; zwJ=hTiAq!MWi+4*pWj7kNl6kWqF!7Ia_{%iK}xzbRZYEtK>lyH*Ih#8q^#S#I@$hj z_t%$@t$MCx@;vqAHxw%|wLIZC)Ph;=32Jpb@&}H*N?pi`odci%Xih3LRElZ&Pi+9X zO|4C4Qo;V8?XL$FBG8&5j0*ZA-$iTC+{H6Tp(R9mKem}vlptUixwEpt%XM zu6sUGl*%%FwOuyq>m3m~?pp7poUGV~?gwy#{{X(BNb0(~C2=Yl?WuukB%u^K$eWFH+d%iyAvNv4u+b*C_-$>oHTrWrA631BJmo{_`U4xDCE z8HUsi!B8zE>7UeCQ4rDEQLv}*0*Aho$i)r_&}EjDu(oS==`*PG-l*h=-iqrs`J{~j72FzI)~|}Bb}uQ%qS*J zu~Uq)Je73&X@KBRc}OZEuGF|=i;a=`YHgyR;zEF#8dzVR**~U=2&B8gyHS;DgQ0?l zl6z>48l>fMtx#oA^ey62dgo0>3a@cd6$_?ZM0p`61Gb!OAf=xSG)f zv$F^ZHuoLVBhD-K>yxRs87y-R+Jda!rbOi{mvg4skD^ieedPMyyO~T^5bM1_$m^)S z4OHXG(LvR&^(sMa3q4oUM~(ryPF#|`Gx$rkm#qUSY6V0N`p)rg>(-ZpIGF6MdwNNI zG2LyooEFbd(^V{au&y3-SbucwsVUs&>cOQE$n_tdv{=&r078~;CL`PPE9+x!O0_!0 z4khI!At$DFL!9BxR?C7kkkG1Y&epGAx5TQo26K(L+K)4y=T*)Ch4xHtB?b-~V|cKh zTXpT!+iA!(cq@|}pHWX!jV|CXMI4xTR~2V-x>21!buF9LV1*?rW$b#Au9(+e^2q5_ z4`$?sK<1kZ^-|EG(jiE%(cQ|ONd#vjIvh?fbrkO!l;h$CDvIo4bV%=1UtphBMl{o+ z4l56hojx?(qe`z=aL$D_b=b6pyxJ0Z^zHZ5T@NU$Us2%vS`I51j%`X7-3{-eR4j*S z4J4*YmU5L3ZAFngv;?h(1@?Eb%k5Y+K>H(ZQ!e_ngHnix613y0dIO`$djh%bmlbym zEe%o|iL_UK(bUE1V9!x$wQ?bq5L5aMbT~bP>t+wh(%f3LT$0Q z2qs6#Ew-H~{6~&3MwWg%d9A4J_Ibl6v}T~}Ld&(uU&bpBO-q>bTq^?~Q=z%dE+&`L zaIp+{@x{%k0X17Q60qbld84RW4y6;hO@$2j8z}7ENA9lQ58gO83u)Bdzje6nQjNqR zY`mQ5@U&$Qb9TRTD2lDxb+*>y>cZoxSam8s+;nFL zSOt8iGlj{+-a%=vnDtSWdK-ZSE~!gx86%R8bE32rOUmL;HlaZ~Y`Jl$QRhTI`~mQD^iXQnbny(?b$-Ci9Md{N>U zt}<*NwwLdvr+4SWHqYO5XDYOYQ*YLik2NzRFnoysc?mt=2MxXTx5SS`_r>D_ zJ2C3<(A%w4X^KymG&uOrnZ-pb$Z(LMlab#YG+rMpf?m&|=z3}LOJSKLw&f1+uJG7` z?!6BC?y{tN&f_S!Zy3e5f7ExCXQv{1&|1 z-QwE&`re5jZ=|LamLnw2qyyx+9!h{N94Pw1Um_L>&N|}&8usE#6t?|A*z_Z!!110R z9w;UuKyEf5pD$jb)oE&Ot%qFRxto2uEUFbcRnXI~%SH)r<>5|bj%gf+Hy;Fy9;6=G zBWnX5%s}R9Ywj1xCz+CFIgiu5^aOoXk3rZQO766*FAv*8d$TY6b$iw6CaX0;rsGI8 znqu5_DB~V`QG^jP#;5IRI6CVwU9>Z=5g2m08l6Cr<(Rk!0{n< z_;m2uP26qtsn>2>2A<@)bI}ls$bGwmi1L;NndUNk08eb+T;ju^MWx{j=U3v)yY{)^?ilrPt|- zmlferrOOLTib@&_>OHZHeL+d7J;Y>!JtO|*lL zt_c4CI=Q-=0B~*D^(*FQHYR{dqD=l(J5y$YonEn0Rx z4uw*wREvm%O_ZnIsCiB$I4=JHDaKs^Cp?lzP!tEyI2=S^I{K18@c;q!wesI;Cj&M* z=l~@2w-W=jn|p}QkIZW!TO7(UD0`u^ty$j@WNERO3P?g3XcN*erK__|KUrG}))u3xgIv0kW4bR{(S zk$k}&DfJX`ZG@+qfmf*@9M)N*bO|&oIm%hp&1u$Cj5ZeOn7nJyU%jY-PrWl zXmyJH(9?0HEUcz8abJ@qwy=8~G*oa#0+LDg0iFg%UP;(}XnoP4$(7Dy0MMVIHS|N? zA-1;Zu{Q?%@cA0^nGqI6%M}Qx!&1ygmrkS2apy{Sj4#Y-Eu^a$FRY(@F$cUBBEIjJGAyfgUs!P}pWmC#hPT zlI*rhRgd^b-vLl_iII&z+FSF#wI-P#AduFMYyJb5QSY_0{{Y$1@V&Ut+*Pj{b1Lsa zwFR{X)1kmq1tzg3GzhWezE#tUOf7|=3?55S9+Jrl%X?Xq6XOsK!6)KR=lreLvG}rx zohy!ptN#E^1ATV{SI1@Rb$M>flR{cm>1XBA;!nO^Pe1IPVWm9AKX=t^u>)g|BgFGp z{?lJFhYG>FTJ-|!)1*v_98O9S9t%>x^(hGh=%Mt|c1)M%PtMiA0k{Rd16tGP-LIve zQRcdp9g`MJIj#^0aO8IjJ(NEA>-uUZ_R(IBM{}|49v=@6N?)rGW7HmYrBfsoAskA8 zB_y_#bo!p8WACm=1C6`$MeKQB6GU-zC+bR%i&s^0v}w~~q)3Qzr6(aSthSTi9+8vx z*BJh306V4~3C71SXYF>^;eHpciyv;zrm_NGPy#rl!2X8}K5(OOT$-wES&!7 z{vqXfnBIx{v)H<({}c2mW^}7(+tL93)ITZ3L~^zRkP?=igWt>HsWa*InoG{x)S0_WLafs^es1K( zrcs@uGb&PPj!lN3T&TD5>GNbV%gKClLrF`xO0{>6!eT9W*O>RKTcLD*g!q%9t;>9J zO47qXG*e4}6=tkgPwoT24OX?G?+xEq@M#ys6%TS^hGE2+BBm@WDn#_ncbH2tVKE@3 z#3i+QdAI-|Wks}w9cG<~&(xU4g8Gs3{PNXmTa=;(W-7RE&m+Ld)^c8+}q#3W}CfbtWuE z22&l%0HSC#-IHVs2f~h^3stetFX~>>@y>aP4JFPLKoxcf@$P`v7gD^uao*J$M}_|Y z@e=pa@u6L`lqR7|HxuxwmAQ@%Xbeb;5hy@ON`gWH5_%_=Rh?opd+ zu=Hg%>X~plq>z=8q;$akp64S6d*d>eGi^8XUpw}*g=65z-_pce)bIJCQ^zLb(n?|M zr_ptfPCl#f@Q$->4CNFz_dqnNPC8$qx7fN<+z z9sUJ;pN!-}^2lED+q>?P(g>mphK=9E9dx=+=v%>SZj~mfvh`|(xpppwq*AL5-LoUQ zY73tpG^nlw`Hr@bkmRO<3Y<|ffD1iNr#3cDB~4^=169(Ef1i4k85r4R@K`*g0yOFY z_--r7HKECcu=edXy}dP;sne@+>5yYkqp52xO>rJuP$Q+alr3cROPEJP>t7HG5`1#x z$XN)wvQL+ZM>0o+5tegB)BxXIs2;lY_~Y8!J{KAhtDJtfd1A06rJYX1SlmITYH$*zRU2|(*H=@U8 zI6sJqF=BI{V4Xk~(%aLUmiY-6sj3&ExA#wOwl{36v`cc*v|~9Za&EYjs+2mNOUYSo zEOGK7i0V;kw6h{SP&lUmxJk}>)xndMD@%#}fPibn>u0Xy>aU#+CNueK_mD^@z-dFE z6f_!j>Q!O6JFyB@=k48ruojdWJQk)w`IN?_ww9>TBvhrts76v-CAJ@Gd|1sSr1W)a z9-vN}gBP|EK6e`+k*?$bLDz6vN%Zj1S5KJeUMfGl2{0!v&p*oOc;d{8FPQ|g<$ zSff!GwqrR+qfx07E_$2N7e=Mh;z4HPX)={5j0P0b(&M^@*#Tuu=g^d`!D2~dZf)vI ztEnXNX-9pH-_2BzW|h6&0BxVz0B>k6^r|Ef2EKz)PVS!6ZUx=38-H)vR-epCk+U^w zv}w}o%VFxP3X@1-v^O3y($jHXTZjxc@lv024m_NogyeuLb_o=j4RaJf!2}c z$EG2W@?7fKTS!R&d-TuPYclfk>hoJ58(hjA#J6j;YNfhqS#qjDa4)Mt4zQG;)Vcn; zn|tJ;6U)je5K2mFb?VK=hsGhnL}V+5#z4p)_dUL({d8#D=2#n=L30};noh#i4dHuroZQ{-uEdtw<3>#| zvqgyFIFg3s5EibuO1#CPJbkl{y>ibUf!NqFmg{Fz>OX;MtAyo@z98^)17YZB{LLe) zwi&bcDyi~Mywx_WBiEt6dL&M5ArG`L1_IKRsE(OBpk#(f8hW=+cTa&@2gDa%}|+gwrV^KaXFFm1VTWGxJ#JrKgeQsBli3KWpB^iM2nSHYzd2EzXU5%C**cJ-xz z?ZYhg_RllTxUuN%cAcP=?dfu>5DI)az-8J1nP3 zuxJe)UMm%t<0dN@4U$WbnCbUE)7eZ zra$RN(5hBKAH~m^A2sX@*z22cpv*u@3jmftX}_(nfH^1D4`JA6CqF^kroL3>0g%3f zAMGI#(<$>1*-J|dBRFler=n5QAM_ug*J_IFLv=GIdy?XzF^`tCgN|$Je%*gPNTC!% zMx41+#@$+Y;9vqefIs^>AZ>&|Q`E>|xMk%K4>ADHPjjx9TMJZ6oof?+v@s5aC*hM- znN^1!QlnjTg;QR21Dj8+YD$!XdlK1LIPQ{0wjRdGBY2Y--KhN*N814z;SVSCP`n|f z)Y_&vs$w|F2Z8E(Pr6r``_bT?!{!^~< zj#VC7abAo60JC8@(tLH-UwFs>2Xr~jxA;Qj06>A4x|7E z0mc9T0qv_80E}2v`BFO|+mOPj4yY_P;4WhxquWO3DKQ8O?70>Aw6Pryd90z*tQB?W zG5-Kva1cr$=W8i%&-QU3NS)(_+Jn*CA~gy1l`UOIVbklZf3{}$cmZxbh-r3ft$WzI zs|i|Cqk>5o*TuU*YwSW7Quwz6@1Enp;dB>QW;g3)_UR_dv3_VFJ!mnA!QvoTXx zxTGtA44z1gJ91eawQ+~TSR2~Qph!)U_q&ywuJ(JwyozMB?jGw+{wH6Mo=z>^sAu1b zN4BAtn`4p@qBcAJF)3eROV8tkP6H4&b?J+g7wYuLCidwW;x5U0xI zJdNFX`SF|Zmm0OV4DRi6QcZdBm!qTGr(iX<_H&4lFk^OD{{U!se{TVK-FW42Ql!%- zt{k?Mg(XB`LmK*|FAr^n@*Jog41_o)4Dl#I?!>v|gtp)$dB;@QTpu0nCYFZ}k7PB#61~ItQh2Yb z@8;Y$0^*Wid8WWT&U4dWCH9L5V@OL^)i@?+>Z2UXOStB3d3gBqmi9s+@^JYHEPS^adw8URU3 z;^i7pN$IJejn~402E4p=Uzv`#-NHtG+JlGzF&j&cigJxbmRw4MO8o|smPV^6VQ}b) zoTa{)JzF`)(@S%UPj+tQL-OepR^h`c{j^ad0$I>JotNlvYB635Luv$lwHLjP2$9Dl z9IZ{Ey)H^!MV8rh!Rj98RJqVb=8~`QCzY-NdR5?R?zn1cj3qd-4m+KE=ZwW0ZG9_( z%J)^TKrI(sa+=w2^(YbAlMc>1&jn}#;deX`gPML`-F31w-m{Z6Tt5_RqqadpCw>+ie zg?sAWHt4D(cB|z+qm<*9wz}pivE^}9nU;=86hU@hPYmqLKhFe|-=XtJz9Ti>XhK_`2#<`X>!bRHKq} zseqJ`^qnyS%sDCVuBBZ2Qc!82D0+1Qqjsj@LI@qS2bDIb$&NVm8UZMvBp-?u?WlsM zNhV>BGw|qut~sEhDij2$j3-kLq!%*LWj>OXHV+LMlG0uA=)TROf|KaejF~9-R24># z#GE7b)ZHzG=EX%v7#>=`4{cUYPF4_#N;Z<;L8^IKs&42c=FC%Vp1KnuvXY(pC}$=u z$r#VRtzn9SsFl`H&fZ2^-9g5sEdY;>4XeV?V4;Nc_SICX_Z(3~51tKR{WP1EixAbz zASJbG2-d4hrcWmnG**N+6%$8`=St2!^#_^@tX3tnPU6t%?WCUlRfHf?n{p`);~v^v zy;w0p*BHZR3DgV1ZGl&JY(=R`16>bB4OPv>Oj?{#DfiJs#Uiv6HzER?JyW4Q)|y~R zp`w$G1dx~kER-B{8jhV*>2l{zy5L<+9|VJ`A)S(xw)s9XJ@qlNT18`8P>{AqPPo^I zwO2Egw5k`LtR=kun(9*0^xH{f^>6!X1;iq>T9AIz%UJULzM6+?N@x=Mx15fZC@1@9 z?3k`lRdsbP##*$%lGj6R2Ucgi6h?GV^0-b`hcB5nyJja<85;v!5*&506^ah#o1&x@vt=Nl}8s?@t>ywrP= z8*Rva1dub6swv@n3ee-s*MwtHwypb;Ia_H#)1Q4!8@^wC+8 zEiW!TgPu};6r7D0^$iF|6~zlw zW7a6LR@#uf4}58snBEdEY>~MzPw^?T8(LUbMU3>(fn!h)JI>3~AB6?_h!pWdl;A>$ z00XR_7hrR&Esq5xH2DpDIYDek@&OQiJDf4S7QJWbAI zAy_o1l&auEPcVg%(1JC?9;-ewW^1jb3GSxeTK4ouYtiAQr&5wikTHz{Mvzv+fbl8h zm@($i?XN8;v()T|mh($d;!n1v3vJ83)RWrM8oSd>s7Co_T^v?Ar0KgW7eE9%PNYDG zPI@yCkm{UDf`&3NsJp$oe-koHS938?o7=Q14ZBpQ!N>+mmlqCFzK!gc7M#o&<6`z% z&*YtHCCnWAVCi=@v@7i`f$e8KEi2%|ZS2dM#H~rX=uFElx|V@)Ba#QyA7lRjwx-(- zZz*3P_RooB;pNz{0SGh1FNDhFru3VR!fEN0z@nwH23FAj0I1Upb6jb{ikAuYxK2!R zKF5#pse5+px@>yebvi8PV##57!00pdBSz;9(Cn}Bv0&m+^BOicTAOA3Qd>Kn35!+Ex)x0i5iFPCw@XJ*84cyGh6@UH7Z(VF#DGL+kHG!w)S57+%W zXmUy_g3God)8EpSlNE^c`087+!V-k#YvuS-2mb&cwv=?l1Ys*rbZn>%`K#F*zZy-I zCd`ReWuT(fMoa!%jHvYF*&Rn;VtV6I63Y{V!>JlRCnEr31%cU(4rQtAMyz9+5_qtyeT=sJByoOCf{Q_hFPebvmoKNB(naq69|RgZBybn@~- zTakP#a4xA=IEuLKI@?XR9cl;4N>G&X7#PM!?TsIh#L(Nl(eNM`@HwLEL9dV=8d6%q z+N-a0AynM9T#DjI588y2akzHbczIY$3t!1U9ri zZuA{C9aLPKp8TLu=53`$Z1}Kz^qG`tDj_LxBoKJ3s(OLjq0^;|1WCE*RaPtUvRiRB znR>U(d2Tl7p`piWOvYi6=z3FVT0zG}C=UMsuA>@gi3bTYESxCtMXRrhF&>+d0Xd1^l{c6|AxXxfXlD0-uuWL0| z&>a;iO7Qo)-XM2=`2PU1n^hG#G%77l>8q+FkQ<2xGhTbDzMvnT>EHkXKJHlmee$5U=4$W>a5$Nc!AOK;{|Ah;6X zAeD1%X(c3d_tOFfLR(j`+@_QhqB(?BB!}c(*sgG_M3#-N!QEb`2KeT-Zbo zaT#trXtC7KLR*f~AC$GE;2$sgLIKiq;71gqX6P(e&i;WNyiRB17#*vCAo>cgaI&2Hx6?#DKRTeI?|AcbojC0ad5ZC=2oU%Nl8#kfxvkwX-YLo z#qb~cc1q!>8rPX5{Z@m5XU1oIVcK1b@C~8wID*h)?d1-7p9mtWEw?eWr&3!ZZ za@KNddyicQ)o5{#VGz9tF8UAftG$ojH13weQa5c+wude%JZXFy>V!Qkw4@|`K=V>R zA?>7uu5pp4abw?V#!Pm$XoYE^9-O49y_ZZF3<^L|EK?RC$15O}Hp5M!C!iQ4H-BGD30aD{dj-b=c zHm;~bL&)MVQc&_Ra0Y&(!z1l^Ie%{;`1M~M_KUNKJifv055Ni@>ZEz#_SKyfbtL>XnI~;pHu5_v)`WpO{jAnt|m>N%bWu9$tO)cr!6%$*}Q5Z--BUEBI#+ zb|bDmL9?d2^&9oqMQV6**ji1K@k+g{sy5zTcQrcIuq&}B@6zEeu=CY9R90cBmn1gP z1S!SLEiE7vg#xZA3jtir$eV&WUM!K;w6b>iTC~UE^0$gO7Lw2n9rY~$>s@uP`CFI4 z=fb1IRrlcvx8f(nSB1KxTbFalpLD${m2*_hVd)Ne@5EST-UyE<2RN!fl(vhVNLV0h zgZ*ASO6&a^2FB4V0DI3dHgA7*8rHV8?5hU?yn8YM@W zYQ(6#*lp{l zss`|NxlPdbLu+j7ev4R?8od)JONuxY#ZuJM>1{`_5yPue`f0EFdt6*tC0Cb>3Qj+Vl}DI*dH=9AD4g(Ikt zU~DXox{sEtjc}7HN0(_w-(-)vxE!!z*D4+vd@@0~m~E!EmSuYIkvWcjVkbQHZTLwY z3fy@NB055SMNg*y>c1{Q3^Ppc5C^-u54!K%uW)h3R$ewc4xFUA{114KeOJAEz2M7b zQ{mUbmfdV*ntW)|?b}I#S!O5!zv2!LGFp-V9SoOUJ-Uwi`HogW$;f-$d`kMp93Q5} z4IV?_HToZUMz?)+swIn4z2qfDn|dLsN%D#2S!a`rN=Nl5fy5`=kTqQHcQ)EK)mX+G z9!p|(_uF>8NTKc5(e47vwUU!VvP7JtGY`pb7Q`K_Go{H5s`>1CNS620Pt3jk=P; zek29*Qrb~40@ax70P6_6oQu7l_r49Wt64R+p_oor1UT3 zc5ZVC(Y0PRM1nl%9TNEN$Pvm~L!Eczd4~OJ$fLL#)ua3Rg}1MGO|&4|yUPOBwkQ-i zR!j=@N+fx(BU5F-YO`wA6lDdeWratlwwIe(33b^7s|_hliL&y{OPglw_?`KNo;G@a z22YLeu*1qI*3>!&Yq@O#HLZOJt|_+V@wzo9d`Hl>pEKxH=sU?Sxm>)_Z>FzGMG17; zlW_$Pl3tS3nCn<|X=|*6`M!tBU1B)^kC2_gZrypTUF;8)>~unWY-tazh<2w#Z7m|j z*#mo_uTHitl_LDNBGkM=+WVzxOssCk@|cy%UHNRvfFL}>Qz{KEY93m|DYU2zHu5AR zEXj`vhQd-yG6M3LYS!t_mu^P9k}jD>N6(PUsyqi=Jj4yq zzWQz@lVsE_9g(u-KYKu=+?NOV^7g63q{cTZ(uBxNQsTQ-LMhTdRSh=7s!s-5`8L^W zg1ELLiqhs69_b)Z?`g5-AX~NEZcUTso1S4D{GgY&nAtp_oyRSm4ILe|a)5fYXde$Z z4BL<4-qa1p-TwfUZHLm_tC8E~w5UvnMMg8onGN|4wDhpd##~C8cZf=`3bikdt!NC@#9NC;JG;Q0zixvVpJ5$4}8=Y|YeWb#??mA2ArA@G^ za%-@oEg?Qzzr;&Tp-Ae3$!JL-N(tr?to+l7M(0RCaU%NZ@fN>Of7vd78fJWNY|Ug$ zqU)_m1b1`JKxlwRMS1)=HnYQxX56M-_N0gE6&UZbXMu1?%P%;kVK2r@p|GqD%1Ixe zbL0A+*tSiM+7FT4eDB+gtkXX;#RA>#?Cx*U{{Z1K@#OWvVs1lsbc;nJa+^*D) z?=Jl2uYF_C5#|pu+NcFsY(yQHy*x}ndfuSeQ*G<6h}_o`X42+Dqb`jeEAYftAUVZR zq_H+Ux4vYKd6nfPs5qjFE-d_pVN>qGJCV)IX!8@)7LY5gUY%;V98f=r2Si)SK>eVG z@{0kXy$fCmy0LUGp%=tL=Bm!!J8NTYy3I;0vW6ONr3xBeuTm;Z1{-QLNtF0yFSfTI zT3cyvJlY&m06u0Dg}4k+fh5lWo|=ZZYpH2A4Rrt$>AJD@t13w)jusLd)KPm#uiECe zh_Y#Eh->5q=&N(W> z5?fbHB^={30$m^nnD-BX0N5kOng^D|B>kVnb9q6oQQrV=2^8S(0$yBw&ILm6e)C>+ z{{R+=+-m)jtE$i1h0}b7(N0RAknG7&6wswkO8lqPq`L+5w&wy=rbF+$0B-TFMY=Q@NhJb2%S5g5!^iJMf zeitN>5YPpJd-ip6jS3vsxCDTGDLU}`;Yc0AsBP+{MvErXu&ufznvkzOSduC%q3J=l z-*H$rs+|dt3#quAXFJhZJ1G8jq>SuWM((ZQz`E(91z_} z-2N<YU!?SMa4+iO}1vE zYi(V-^2og>g{n1f;&s--kkiU*iH5luT({Dd7r44S&IRC&DB+KZ8}c3lr9Zc;S}%Im zz}R%&u9d7YWMs(PNQq=E{pb7LV?ko5pWN=Xy;`&`DKzVHki|yXZ4n{BZZk`WV;0cL zd7%LbMmhkHuWrX#qI*a8w>GtOBWHI&5*v|Sg;lqp-gLJRwxK$Fgy47ir1Eeda6=;* z$GP^`BWEkQPv(o#5L?VYHU9tzo~<<$UATT=C@7LlmA;j8&Pl-O?i17L)anCQqMB@W zfuLM8IuD0Rm44-Q#?=)XX)v>nIrO#k7;~AQh9?8fR2#!KC1TvDvdiV*U@l}Q5!5>!!-r4@xkykx{WYNB zZF41Q+gkUHmP3pdx;J&w{oPh!w&1Z0e%}=kV0IF2DBa{tu}?PKc(lZcDDihc<&WF)AtpK{>)*;y?*F>)St}8b%qI z$Ck(}ACh`VT_Z!IG(tMtxG~D>|bY881E2=4#~Bs8)!$w#jg{dyeh z=cTtNGTAlNXx^O+Odey6`c$5v{{TIN?a{_$`T$v3P(oeA=mE->a3Dz6iSz0)ISa&DrKg!_d(7W&X>*Tg|a4H96JFbi6p4?}0wXiqTuQRRMtJH)(tc5MuKtA0Mcxhw@#Kh+aHJIW ze-Td8_Fuw1QB&&`%qC3KB;q4Sx{u!)uaAO$gc))+3fS>cn&BKK?Pz}vJ|1n|kF-!_ zujZ<+q&ZTk$UK(ghp9O_&*$d5CTeHxSD4uCftsK%5gsreU3~1m$HX;DiS>DIIKbqH z!1O9n9kHgcxNjisW&Np4oWdQ+9_VV-wyh5fF%^F9txVQ03a?ZlN0RxT$w>AY(`E0= zJduiMKxk}2&aNo7nXqyELbm1gzBJ(EXBs9YJ=5rE816^cQI9FOZ{&#{OlHX)y?Cqf zf7#ut+THk>P1}_+mU)s}XpAKNI&11a&SXz4UG?&>YB6Dn#D$EXPbKjR*12HaqH8R1 zP)Pb~g-kB#0}~r1SR96Q2|?s3jC$=t_ZQ$L5|Av#yqRe(l#fp?y7?EiV3&}-%k0r> zVGGjgr22I^CE2nN+DE#MHS>o+=Q}{RZJDiZ=yp!%*%9CQb=PBseLTUgoJo&G(UTvF zkco9$^4bqGQfWi#7BvHnC=^2P>RDT%4c6b=GjFJ`%b8haDoP0hn9iHS;j>EdqE9C^ zjBe}5KZ!q#itgpqrP1iCamf6LNltJ^zMa6hQz550VEE4wbHQs@p7JOa`rTbme1nQB zU-?eHgB-C%9a{PHu+222(lNFCHeXj-lDM>2h*#0GrDo!=Mb$SC2bNt(Ru#42A95;= zBb5>CAAcZTiGSeO<92Ij(oin zm>~$yg8Zm1DZqf9r0ON$1=hq%satyq;qIxpRR-H;DwY&SVVzL%4k984RjA>-GqeK2 z*0yiMZnZL=ht)||N%+xNa4#htRrq?h6fgy=D6vr*B3nbI%Daj4$0BFNcZWeBcxq8J-cd6MQU#1uraA3v?Phi&b+1usTWm~sE~@(nNS_h zyP#5B9{n{1CZyd@d~3>Mbe_Gsn&H9M^VbK0nAs$u>~+=Dn$v-Ut}iHCfP}PgdjqCn z8l`4BD!%lWR{i)mJr%rN@W|-&YZ{MNs!@zd(Iq9rf2YRo0qZRHdE- zXI*P4b@m%0I+DB!FkT`k~!^dgyR zN!b8&2VO)0WtxL!S=QWWs@%{*gqp^4rWoo<$r_B48?S9L$B>eeD@>k>Gus+uJy*#R zL2u~+eQvbzBH>*^X;QG$!D=Xi5nzz(+nvo7^LFF1w9k_=*>z!sdd7_ zJ9Ng3HcL6GHlr5+;A&$;BGffjN}DGdkU?_+P%@{jl@b-Hf|Y!0y^j3UeX` zP;!k;vQin2)E!ctl6^WSYodsaLdvIvp4toDXw7XVPsJ(irCiWT>yC;ls?iBLBvFN3 zJJeiA<#L8czMc)Hs{P!pO|_=vppo>_vmF(VGc{K=y24svJw3HoChF=DN&Llxwnlxl ztAcsEAj`H;N)^{p0d$pFToS^h5ube$v_dY`JhY>SpGn7arKZsqGpe-h`f&091KU-y zIatN2e-15T9y*wr9g%8; z>U5BmA5ZqzdsNF~Q7=H?uA@=y5rkT+CIDo^e;!=g^;q9_!o=s;0O(3~k5r8-qM zD%-#Vwt_~eoWTNa6};Q6tBMAu#p_h9-)cGLFN;UNu+uGan@}BU&61@O8b7v-*Dny6 zMzx=5SW{>A*Nc~fNlfkwa285Sf7?WkN+>eLVF^mI+H;bNU)xSLViHcq1gILVl8~|x z-}ciDoYGy`$a;OQ7;`Fb9e$c9n!;V!z!bcDf0G$XJ+w0}tKEf!lsbJvEU;Koh7Y!j z&et^zMCP3pk6~_wX4G*Wbd>;{d+9l#Y>LJVhef)*Y+n^I*^Y!soB;!_RjQeIc_%=v zqv8z%b!6NABPdm5B@RqM&(%XnzY0ba%QIttR8Jc5wrh=Kt+G}38W(+umXlHg);*r~k~h>j zC%SqS7qs3W?kje&7S_DoB0ElF%u(u}Zn^f?fn%FPbY4B|lyb1-W7C>-)1tL}U*0t7 zdnDWR%9{=*V$qK&V3W|E!$4`Lm0j%D56Fipq0OOd8X2!+fmWh-UukYj+Q8dJJ88N% z#@V=P1L8l!ExUSVxn@U9YQp&`#v4dV9{0vQj=I7F zY1??K?g#A*us8`Fr-zUESxUD;s@ip@DK%)X!~2N7Wn zJB>lrXio^*Pq;j~0TXR zqa&wWD0;JwowP|I5{8iNuimJ*zYaOAb6VX=2d7IL`~FJA@j+YLYwKzoy{*+#r%V+_ zA~89I1W0IcDpFR1>c$h-Jun%!JUrY!Sp~N2Mxx${JJda@KTss zll?t&oE&u1OsfNBdpk?ub?aZ@TOJ|1h);InD|U5ZN+ zYnC*+gunqBwe<-0-s!O0NO8pwigjtWUSPI~At09B4WTGY$?L}nP*PH!HoPl~ zyAmNAwFl+XPl}}DoE{wcjDtcdkB?n{_SNn-UU+V=h5N_B9_eodfw>h*1bW~2cW|Vt zTWvZTs8gmvrmiX@^9fSHknl=*6@M|MCm0IOo+(?H8CzR^Ae;Q~Sd6G0hGga<$a(iT z3i+Rst2UR#4GNp$S8i(bx(jeB#?P|Ya(ByNU&JEU+m+@voGYIuxL~N|MX*nPzRtq! zFyF3#xcrp3Zd+NK7}%Dx;vH-HQa0UIHBNdPc}R#Ywpm$dl!Es+RDQ&9SAWl6I+8aF z4d~yQUq=(h^3v)gzfPvM{uNWSJ6g`dY)0K|%{+5NSailz>q{WWTxQgB$Y-HUbd%dD z1a#6b1%$Yd-)HKryGBaqQPG2tc?xJg9wijp%9}^D)l_Bzmg;JcrDVDI!p1Y7V2}Xo z^v0H8cO`+^5usc-(nOdpEL|U!J>QwzkqJfnpJ0W>mlg)YHFoDH5NC^NAekGACZ?_s7 zd(iQCR8i$a7+@UQn({qT0K2YHp)FC{+20jfF25Dm{VxhLd#sxa1dZX*nEB zmxvBV=+=|)P9Z5~zeuLWO3ZpwL8nG=K@6t{A518I`s+z{Ol=p+-TnazMzy$eJpSo5 zAN!B+SIN%7i4)Ja;k6wyq&Cw(F33nqIuI~A1oh57nb#gzL328gxsMaMgC;k~2_T-o z%4n&-!ezyvFob!68ss{0)GHW3{IHYzYo+2ghK=g~0EF0!w~h0Yr!Z*ry?&v2f$^94 zRo(mLe@@>o2Q~zGciqKkKE>}qr$~(rbr7QJBhD&$#?q%&<7f-zfKwbVJkpS@2M6N= z9JVZ@ruV;Jf1kXneks95WKv0v2RH593pIXQSl^)X3pe%6wCr}uK zn#hgAoxnM}jq2=GjV{lppGDt-pY~`s?nM>I9xgWy*|%uZ--`6gZ3<%NRaDXyml#5@ zmRL~=a}I*<6>&UHlg#$F5=RGPf=KcD^-bXW9VB)#-M{-mKI=3GsI}>C&wMca4)|rg zhT&~S$+G2s1VlGPuH028>ayubOjO20QJt2z6v`5Wl#CpXO2NU#vpIZgGa@q^onZTg z@35|`Yr^HTc%elqQd)REl!NRPra)KKB#(TKzEao-t>}A{aiS7& zM#_KvSR{Jszr{4HM~xvg;2TJGGpj;Y*v3aS1O1dnk&(difHwYBo-^LVF1k1aub{7( zPK+?@RHVpx&nj}CNp;RxQkz?6^60g6_R*XBEAwyimoFWy&=$}%@*w;68mfQBg~BO& zWl5pa>Wg8?mt{Cl;>jsP0!sla{{WQvrKF5>Jg{@5<|H?i9d-IE&IKEtnq_-OC=?0a z?CGb@{oAWrl}&CL&)8et` z#0O@o8_UPOe|ESrRG+(tBGu3%r+IGa}yJvAnw@Ow>$WB9Xi$MnR{bn zqhlyMwAeeAgG2q>xasA7h{tqy`)O?XBJ;Cvd%`8o)K%LOrPQpK{z)-fec5v#L?>EG zUtD>vxe{9_DqAt0l*2q%z$y)7wNLA=Q$^t}#*=z}DXxmb=>QwwXq&FY;@HU z%f2es4%*ma$J-a~N^6uVlQ#7wasnx}TOvetrmGfAhSKA4n}!*uyxgIYEuk3*3UT*A zlva7mjUK){-^td;ywxSLgB>Jcpb^v4*J=WYHLk$fP#z>Ld#>fREo(B+DlZX?)PTM+B<*c#B9yZH^0Ov{#h zsNUH%AcnZ@{J=N7rBQ)-r!`6)>W8Vn*f0N9*M8@r8-K&IVoM{ZMKZ`PU4Wa3cySOkyR zt)ty8w-Iy=xA$`jE&_$s-yRk3>&oZwz-aq`YMYrIirZ{j)dns&6%XQVwBjVfannz2 zEfwqmY9wD|Hc@ zN|EiF6m2ByM3c6MZxecrg_WMXZe9DIxfX`ocrJ+@ ztAlW-#BQN^!q^Nnko9m7#VVs;HRZ)n#^(=kQ>iX zwYHUUS5$`y2RH<*+)h9ndK=fn!~FH?7dYk<#}gS&%YW(QJ=e9zLQRc`70_x&y6FD^ zU_4lOYuy{n&^FO6TU8R&SKYRyQP;8wI5Owhz??*zj7sO9=tqT78QEImNVl8cQglV%4n5!t5}yxyXRFzgE>;_4SB3BL9mzIY4#=ryxP(~-Xtit zknmEu?IV~bYg?hAV!Run_lhJREl)=Mj5EF`$u6xW#is7<+Jn&1un4ZYY6+mX<8yBs zChOc6i*-7J>dC*MKL$fkP@?>(Wyh)X*JZ(wAgL;lnD}K)t@iS@7XeOHVSy7L3t2+B zPq-T9br2n(y+P$W0H}DjOw7xCmT#C>s3f(V%{+t?LWnK^lXt4rx31^NpzNL5;se9I zqjkA)Zq<4EOqvQ=^BkdFK1hnv5X*~8MX@3ytvvcUd4z`)r37&`E`hSHcC7uSZmtScVXr$xD6xaU)& z+*Y;cJhIi3c*2J4fiL+Dx$`ijA%eK!1R+alr1AtFF6HGzl^y=xTcX|G(rUFMQF`B= zhpISO**J1?H@(lxZE>K-v=T_6Wu~kFpde~5K%1S~F4%ZayEaPmq1(posP266z=RflWm0?>*U3**Nwb%KMc2Mm1e>r`$H>u*39WZc=6` zawR4+4k_ib>e*^H7YbS-@5FFHUOXl@Fu3aCHYZ+Z4K*UHUG332{MSo@8VxiXE&y`! zFx!Y|B+;&2Pg@Gg*xRD(x1}{-+-Yy7;JvF0u2td5h}3xuH7-MuY0Rybj|Ln>NJOa# z&l4H*lf3YbUPPTeLb>4bz6O6=_q_8F;0dOWA{yF0g;w4+cSC4x zUmY^++hUzqe(s?`rLLUS3>Vyfy*xMPI8d{PIK*xel8kU4EU>aNacje{b6>+7Bd9gk zcmCGx>E0xG>M2rjjvU9rCQz>EHHex3p_3Z`z#9 z%B{oXs-;%1N?JIsL6qV0+~yBABm}GyQ^D7IaZ4&}e!;?0T>XI90qMV>vDU!Y*x@rX z^$qMmWMfwy+~ebWYt+&5CiJ#9avo{S){w`Xm+BGL^G&n}At(v_Cm^J)Na^krd+Rv` zxyQ+AWHtdo_jLM<{kx>qDlE6=yc==fDFGo!;{Hz`%ZdE-%Xve{2yQMh0#mEfug}9w zy3G-!JeO%w8f6Fy^pKN+2izWCUf-6Z82gda)$||bWBs0xW;#w|`z(CV)K#liz-B#qs^l2yKyfNq zY@s71L#m1DJ=4?l`s$2_HmzT=paV+ir|mse%L(d@GOtZ$9otX-2>hy)q_WfpmnkJ) zV)6X6`A7=ojFJ!AEXMYuF(N z^5pcS6(r!3ocH_cw~kI*g27wg&?fjiVcG9D(0$jUJ8IG)M*bf98%wV_$Ph^xJpdg$ z;Aw^EhcbHhG63m}ar7W#DRrRRh`AJKla863f zkE9O7pSMj(l_cUZ)eX)JX)F22_@{W8bH+c7E6Z`BPI2pgl`r^BvccuVLW)XxfO;pI z!rVCe>+c@TUm=PtFC(EbB3vM}1K+059>w#T}T5+$E`)!>Z*+M28<AV#xlH{75S@lMAv%q->Swlc4uMy>;Jw3Jeo(+roULMHn zRq#GPllsme_XD8WRdOXbns*?sD^j?CJNEwoZS2)(nmz+kU0!JhDn08SSr&duxZu zoMjzX+Wn8qbhsg>qTcdb3OFP1_0F(mz#0p9!$}0hX)7;t$EO%N^)=&FH_1VGm;TXy z_QbmPj-6mz*J5QyrbEP-?7NWLnd%Nb_4V&!Fr3C292d&{w$JVcG_NrRV>YJ)fD(Fr zb@ZUnyyMFD9^hwHlJ>dM_cUNuObmg#>f(xaKV+^O{^4_b z_v?$29sXnpE}ukHcO4JDlgrJH7IrYJENoH_X(FtCB%c%u8^dj-D#Wtt47*Wrf`pb< z4-T02)rSP&v*t(~;Hx;l7l#rvuB*ab=-sQQeXrS9C00wa9+de|1e4tB>^L~F;KBm< z_Y%#MiB3S(LsmAv^r6xbTBuPULkk%TQ)C0CS(^*r$_h$O8Ic<~sR_wTg~C*m`C~^e z1tZAdQfN||SW-dgb;Cp{vcs)<2k?^dpf(=7mTU4HL_7{e=NiOu{uBD6Z42mp1Bn=! z-dY34H^xbB@}+I%Sfmu=C|;>}f3qCM+!f}3v?3ZAtuMep*0p3xGP-hue<_yBlXmZM88GL;=)<>W3?c zWjyGvvGFn3)nq~1&6A^`DYhYueTJ(}PE(3-G6ttJ5wq~&sSTKe2|rDEex=2A#t;{t zKNJgs#%c_PX(f#DIN^P#c zuz!gmC{V{Cp}d|&HZ`4~TifBmN4A$zimBdTah_P#4~@C{ z(%*1avW2fzY-YCgiYq80Kj0rteD5U9%vSCO#zK*o6K~!pq;vaeOPM~_#F@KEu!2cS z82;LiJl2WH6(Fs`b8qRfR^dw>0s3j!J7*LbdnSdSZ$0U;E&7QJt&l>y^wr!r^1Z5_ zT$rPBDcZjj_S5gT8JTDuK<}io_mujL@38yp#0TQQ8tpaAWDODS(qv$+42^MgZjxB{*HqFks{>qKI-$#%{w*u=(~u2P zbL^@c_HpK*6|EK{R(mMwfM0aD@$2uaW{L{1?w&*iDAx$pbZDB?)Nn?m0vRc+AXMPg zBuqr49A5^qPqvo>RLORVCTrZB#&l2+OSMWTX7$-e7zA@6P zuvApY{mwPuDM7;2WR?bdXpJK!w96clm6|C?ZFK51%L+;CPFBzf=rm@OtD2(fOr+-@O-vd>Ekc#n z@to>Fp%$R(xF}J;)PX^J6guUW*U?&-DH&L#DK)PpV=DL2npH+a5tRbzOKBN%`{=`E zOEWb^FfSIuKvTc2b<~rAwIv?&XkZ7wzM|ox>q31R@oa(o(fjBwYCBW-*Fs$AmHz;J z2!vo%j7rCxMi;2^uJb9XQp>9v?<(gqIkn>zap|rROTeS5OmF3Y2ezPBcTZlA>Fuc9 zFH(r9Mh7?==Q8gqgP9a^Jv9+hu|VNAsFy0`7=4g9)teZIP@ zm4?-XZ%-!7U?Aj-={H7Gk;$qbs>@}00F5m65Uikep?b;?;5`PHb%k#Zs6M?JKBLo6 z=PBsg5OrOYg%huHl+#!g4Ay`rUgs#hfkez$PH=T0BH@nIRJV>!h$W;m5@uf@_t6BX zZis~=Lvu0{pRSl=?IkpND{8`QDYSI<(;(WUoKmpqj3gi^jd-f(9a8e=7|Fs_p^&7~ zl8abc$KuYSS`kC7Ft4lTn;`u)z!bqim6|hB9#Acgr|GVuwMM^U#(ko)$k&7QOa|H= ztXa&)CyQWynwW7aL6n4R^Z>P%!ZcQtH@8&C)cZmd zOjd+13q?^~z-!;>rX!NllSBe-PPY%ql@xnx&VPADv1pnzNNqC6QU`qzt~7%9z$zm6 z;Q~1=oMY*x;2g(PmOa zNousdks7>BrQuGAj_mtYOxyj zqOPvbp*_-0v%F4I1Nl~mhep|>=2f2OU6U;-E-@ZXc%H!PxG|aNlq}qj(}DuyWV~wK z77fPSc}}_VrFd3V(^{tR=-n5Z%Rh-oCD&!Rc8h#%jml;{el1A>;DA(~Lpr6(iSU|N zn3FPK2rAq~(-yZ0rqbw9N$b~0*$V1C0w#|FomHR~9s>nF+VIfY@pvgaCf{n^nB(le ztS|6_bYeMz;~hm;UM}CNNU^4r5EI04P|#k`(iZF4Nd$Re#Z{JPhw80&ZKK!VT+gBR zTI5ipk)eNft8qWI&4(+I?a=^kB^vp%D5?2Z-Eu>2pHoEj#-P$m%_|YbI42a0HQ)k; zTBXzdnSs1wt?O+?y`sK;Lj+XeWow<8+uA)>W1vzilxAc` zmfD<9alcYYC#XKhM=dRzm=*AjF~y$D;%`eQ=BiukXD@AusQ&=k2Heyo7=B?_77j~8 zJpzZg(}0P4w5)JApAF)17_yI{@by+E$@rPKcM_!@oq5bfI-;B;74$>O$G6buQ7!Dj z09aIX!V}lux9{bn)VQlpp9<-$0foPRn+Oq5e>Kmji<(lXOGZHv|q$v*H$$<(E#xiQvGN>qY+_WVPq>!pNpwfu#r+`e(2?CwT8xuN}}^)yG3 z3F;`7O2bK+3f7TROt3tqMv7fR$9#f19)R`Ey3zrwr9muGK`$elXR5X~qh%Afl(#PG ztXS<3<|+HLXree;NK)USxbZ4R zGIGj@^#OzFJ$iH}wx5F{hb)`;{{TPA)$sl>*<1tmtp)Y}0H?>$`;`#mFE;X;TLmj= zd|ho>3POi)K?4MR4w`>+LRO|D9z{zS2kpL{4f?4o6N7t&Llaio8vZjI&Rm6Iw1DDC zDn7&OsJWc+xcMKzmEsdkjvHDYX6xZcbLI3}Mzyt8oj!F+?xfpMA=V{8bw*V^M5PH( z%8C#OLFAH=$RrcUof95c7O{oa2SeraUm)Un8KOyDB?lYSdG!Nre0un&*Pn?^&hUEm zQl+=E8dW~Iuy&ohb4Q;XIug2#4V5Xhl^^BvVYd_fvG0@AYe5DK8DtVDhdRA2eD60p zTsHG=10x62iyt7gzrbt8EB2p`rRY3=pzX_ZrU_m@Z%% zyqfd`e<@A}hRm$!^&B`e?#LF=4ketP-o zl*`QGHw)-a$7~WXG~T1>XnERHi7wmoYH}NJ)0>$4d_5twd2$fiKppUfg#LYWyT>qT zJpudDd}-RXqjxvoWww%}(%z|9u_F_OJuxXNBOvA8=eABxbh{(|kk|6l)8sZDCii$W z{DLHp7M9)DQs3pt~{^b7SKyW57(XTi1jL8^s-65)IKTq-^)KhR$IvfsOj&bPZPUN%(t!DhYBq0WXJ>iTr1X; ztqQwPRiRkA)Xy)O6JLnDVEJR0mI&$DC`j-9I)f!Gh4MSEH~2%F8NaQE7@b;J52+&l zx9?1@8=5^jjc?Hzn1Lp1fx_FX;=U+PsYCKon;((TyLO0}8@c@c6WF+hT)c@KG-x|{ zojzCZO3SIG``HRYlaDzumQ-=+4WRq~0OKc8beA{050V^Emhi$4hcNZC`~_W9YZ2r4 zx4G!0*PECuDobocSmZuUi8D{kr9-Fl9hT!!Hin1=YBto@SPmHCuxYQTW+KT$}Q%GnZ-2VEM;5I7oY5D+^!Xj+mbN$jZ z{0Vp2FpKi-*I`2qA20Y&kWPD$x0R3d{j@e3k*yvV^C{Q!oLL`w^YZ*d2lAM(^OGs6 zn6zN6uC!dUO~5aZR+N*~lGM_9j8{LoBe zwufRvL0M9ZDCDA^rFhBD=ZxthE|actY>z!G{5pI#PHHe>xC5$jVFlke(xM0>x%-Z~ zD~O~hWsq3wRq;cYEfSq`(b|nsg4Cv6d6lV`*$YaNk`6lO^Zf>Z_Xz;g!CK?WV41^h z56Avg)fBhomeA%rr`>5qT|WxcpMPLFep>4augD~ut-wDZP(J%?ty6w#R`m_t!mH73 z`b|(&YY-@o`43hcLwJuJZ*?uO6ty_MIA1o}DN;C+ZZYIxh&HU(`M+MC{g6R1Fgobp z%UcKhYIN74##?82_}Sw#g^jJFgQU|s#40(^W3Ai*B5hh z9egih2Egt{)#awOs!fH4Jv0ZyLN3kO71VFm$rqw)zO;C?D$Sp{JG8hBSes)}quMt; zEyPctL~@ZbBxO%^agbR|Hyi#lO?k+~1iUFrAPy;L8V0zIUal58>JFYh1Oxv7SE^qi z#4bkb$VKZ`(ks)bBp!{b27->3$-}Q!uxXF@QFRY zAKgd59$Pi2Z$VT>yfyeo+4}v1P26k8#C<~8x2+43LTVLSh2qR;uSi8eE~P+@wM<)( zQq1U;50;S)&}1@&2NvQ`+s>CGCPL!E!E`!Zf;2l(C8S-CO1e>A2o-jrKjREF*vmBmV$RdCt%Vm_JBs34r>=+*7}A{e3_i~v=(UK0p>0QAKXYI zOFX*lMV%;Yi+97m*X^wOAB9oAR~vN*w1i8drliDX=W~+dZo_VW$~M~%1b+{f!V>b& zoyBNMmF4uw<;yIx8H8eq>2>Eu0aKOV_5z2f@#Ts+QB;uU)&Lb30z#Yr2mzO=7gCd7?XGhbYV( z1#$YX3FYOa01^Nd&xknp4K!>#e9!0dZ~dh9qy0hwj}v)eVF92WtnaY${Hm{fT-n$4 zJA3KgE_^0arYhhPUyoj3~QO$BaF)IE_xG$LB;JX!u@72gm(9IR;pWHFu~KYf?s>-;`@H?;T@vCiu3e z$Cod4D)%EYe42F+{7pix)mv%8qEsd}qKX?QmlNmEb}%!n1r4ZiO0;;YO{nF$G55tq5{WQrC+_ zjU@@035d|-OphhPsBf)iBaS@N-dQflbd;2oxV5;fPM0uCxV;XeeLy3Av^;`u+4&mI z9$-Dk0Bj06x4PmF?Iy*W>PbE)Fj^Fyr+URjO7pcK(&(209E}pYBGZviRRAWr5yZ`Y zdJ*!fFBPsTUxuC$lD2{Lg#l>)0Mz!pu^VvKxq-gv&;zcUknK-}kh9#lA^_6!v7xQLemf^lW_U1SPbVXqFPss|@;OMc z()F{o-5qI6!rlJ>5qr_Q>c2L=g!S!ApiwSHsFyVgGW?v zS!HT-%UaZ=4oXIZ{5)KIe$GS4NogS7g00n7brq@iCJt_PUT13qIobp0wycn8oZQsi z4>rfl(x2MoT5UwR>y|}P`W^Xr&}JIrbt+P$Bn&GKOp>rd`Kej4%UD?9U*lTv-@NZY z2ZC=OA+pcfHP_ePbh_VaYX_T&v8k=M_L~~d-Hpeq+|)agRn2+d5*2t|lW z74pc&TUTc*p?pU-d5zPvk^~>S*6OYIP6shWAo(d z5>g}t`2i!A8&^JM9F?qd^JmAJNTbjj*0uL|eR^!R48X_CY;wvjwX4%^zCQi;t41}HeGuOgN7QP$j1kI0w-#a116b9G7cD+*Hf%SM{4voO zxbq-3_)$`i1p9hE_7fIACOqbbuJ1n=}+V-dNjEDngi;x854|*xr;~cEok%>Tz&L~w_;^BMfmM`RN%B$ zsf^2PGOQ&YOD%HFFjbCV{#gG2E;LL|cf-rKDI?=(S+0+^F0b4#{{U@&Dwh{MX4Jc5 zCVY_VZDsWmocXODX$i;FbU%OQrV;`51hnNG6fv>35SzE(iRex{M zTW%_TVYtpR>e>K#jk?N?G3|nspUfRm@YqBdqB3-`@+0|Hd`~6W7=`t%AAN;XctWnU z_5T1Z$JB(HmzeQVhxL?|sXa%skbkzd9@NA}BYN`b^QD^hHzq{{ZsVrF#H6_4?}|*Oy1icdw${$k53-fYSb|>fXyu>tDlc zxDUw%ly0OMP|}4GAC6yf3Qyd1Li5ymMy#P=4zaIv{T4%sIPxF-1)Bd=1BwJ-kwCtYZLoWN#x z5?~|O?x}d@U+Fk(jt5?zy9NB6$4=DctcT?z}#&#AjEYf$~{@#Pv z_**B#_xne?fhzH!?Y``6C8tQXKa56+E_J*lAvCxErLqvgB`1PAV;vLQSl%VS{;Jl-x1B^w683{{Z%N z5(ze>c}9fly~_UpX8!PbvMq+lrxjAVU#>*IdhP92rXIxn+( z8v&08nDt(aDJ5qhbSJL9dtBPB=rk61_?!5(r+7c`)lk0k>E zUrkl<3>dRx<$Al}oKjo~EH7RD7yI3_TiDyX)8ZR*<4w5vWw_Jd99aYC4{dzsjNwm= z3{W5MGpGQdqKw?1+j}+?Ee4*Yrv7=Y>ypY6}GzZvY>2!%~~uyQ)xjD zJspsEdt{NU<_8p-HyLF#7N0YQGG_Ksg^}-HfoAPf=;EaoCz!P(l8}+xR?POgAnGMm zKiKy;Xcc2_d>*&PtzR_d+s`E_UJ8q68gbs%W0qJcLF|07yHKy|bKxJl`*XL_-)4}N zx~56$k5K8P+wDXTeHCOqo{|W(3(wCI`$>K6o#iH*az%9tLxg&P`s-iAb7072wPEm2 z%z&;ixSR3HzA3*Febb1_8dZ7n5CH!Gh;=~!0B7Sa*Hq^G`&>c>e&Jnm-l|!BU264(IIQ((d+choWVk(2>=3Gvc#Mh za_n^%MhHb@#5&dK;pfD?M{gvywxyJDBeJ!f;yg4<(Q3GF6cK@{)RynWqO%$*8Z~8f z82oz5&A_bewJ`C(2I_V{#I~eBoo|m6HM+#*I4TS3uk-6e2MS|bvd?63 za_4TPwwJ`EUJY5bJ5W&d4(ihRoH4woM8*#laB$Uc{{RbKD`QBC!!oKvI2p?IgW`NJ z*`U6O!uY5lYPKzbyHwizX3KJtqCof7H!B6qJ1wpzb6y6h_8j)5HWu2!$kjBFmYr4P zatDR=WRam&Cm5SJ4nJK<9Bh$RbJt!7gJtma8P}Ir1mx#YB@hZ+EndU*)K`*gSFqQV zfL!a!OXAK3HO0_1NVu>Lyr!GTK7+0Us+DMlZk(1CkD=4p=TxNa(NkCAR$ova=UPlc zDQ9w`OM(ugc(MME)$r>m$mmu0s8Ujc<1cfsefqke; z2toCKeL8oFC`uruxz7L{R>~E$B^6PksoZqc zY^IgGEwoKegM^PxtK@pLiHb?MxK44UT;%ft;npxZ4MNH=O(aMAYt~fOc$olza-Drn zNEUUI0->kH2?rxex;jVawGSTOEACd(archMSBZwWp=t~t@# zQj#@x(9;YlIU1kD13mQ94v8rmq~acckJn8wq@L8}X9>=X3RTTfwHzoP%R~myh(fjG zI*ql~+7T^ed%IV0pc?U{yrW zsU~lgAar;8=zyyC!kn?V3kUu$_t%iSI#P7|`Abj*{{Ziykfa)k=vQ%lNd?~i`WXwv zkdAH2isTfYUG*MRCq9*hY)4zFNg(T#qtB|ctw=-!bks;hW0B1=E*l**G7-XYA&eyS z(8`*JsI}jr)EAT-29Le)Hm(3@mpWjP9I!>}% zQ5Pj>xXO<|Z?1+Js+*jv+NDIQStR@Dp_(8UYKm-1uLY+n?Vw8?qel8xl_KOzOb=M? z_0kW5(@mO!Mz49L0FN{FIuXXOjLe!U4R?Q>vY#_a%Z))>V&qv|NUDdBPcLm%%MBH# z#(ji4UXln`T`pr*ak&W9UCNH5*``C36+v0Z*Sj@7(Lv8q>U9$tQx6IzSvflAAyVcE zqLtStT;*_FBq<6DgXR(m_tP<2OCUCt%eN^GHjO^QX=ie`RxEbQQSsG4RE-w@`_0R0EL)9I7Yq9SGfWN+#78L;u7EX z(=k4hva?kL-Mm_YNJqERQ!cWH$)XyYOmV3SP(kmbw2Df|)C;*WWT~YkDLqHiRyc%O zs>*4lTQfqO?2=1I8P%zf2C9Jri;-QoX%`$ql-KsveDfzE$5+M>rF01 zO=YSGpq0+0W!N@tY1xR6F>Z0l&UIHlLpf|KC~@SvD&3t-g=^4)g8f`INM&@7S5d?m z#aLHvCuB%jLyGQw^!#I#C8Ug%#kEFa=8}GXq2;IORj$jD=*M&+w-7w{l+*iLXFTv~ zRb3eO%CxuohCtXNo*#~PPonG|-aLd$VtN*==Nz;dIKE>vQjdh*-Nmi{}B)H%P1yL+f&f;8914>dL1D=F}2hc?knbecHp%Z-|t8?Wp)HK)&WKit*tot{JMFG0UT=o2sJ!{TPN%JhiRfGDgQeWwL#n#P z_M?b2p7GTR_`b6v*c&NJpu~A!%W#38ewtCj+~T(W$j>DCA;)r1&w;llzx+|OK5|-0 zQV(wWh-*j)zTD2?KD*MfchAGDEzYL7Dl7)$)Y(U&#Qy-^oOU{ElbN;AX1$*FnzeEuX}rWK3+& zrnFmBV5}&o*yxiI)66z2<9^a`(-uRz*U?&4doF_l+g#x5PBgUe`E`IoyZ6qx$q6eb z1CBHMNRF!=__Nr1V$Fm90BN>_qYOJJCCErUmVc=@?WUPCobFS79`k5Z>pS_P+q!hq?3q>=bfPt!m$$PMh^v2n>h3#=aCSzE+EgzKAV-g@Jpwfstk z9a4Pe)5*xddn^va{%+cO8CyGOig$;PqWTXA_L3PI1lohsOLY3P(vT4)zHT(%q;hdXD#83C ziT?o9I%|+d9yDJd$(OMHlfeWO6IYW)sZ^Vn8l)ZOQjk_ukOvg=wq&VJ7V!&)?cOQ^eTpJk8#buBU8+Lq2v-BqXG*x%TYsC)i zZ3o3SdS+SfMwJN)X5XJlpA(!pu&2`_m!iCYN0^1Tob^h9PC*26E^usEorc@ol6>?f zQ1Q9u$Ip3gv>G)U8)&e%XZtWacN&Y~mh5ZV+L=5_)$`}`q*lVMy7H?OLGv1I-aKmWM}PzuQ0Xk zYkbgh+Vhb#o-H->`>!ZIH6A>x_Q#Ejn`aj+PW7u#L235aPS{#R1nS2aZ2+k7bGCB0w@SYVOOaezYa(&mL+<+zv2OQZ#BzyS7c4wot>&&bV{QWU1{oC zV?&-P!m2_4H%v@ID27&vC9=e0}PYx@a`sX}o8q!5*283V#03|PC z{8WA*_SVT*mbTpZv8>LhU6kP#8MtD`pXbSPwNPv*E>mkhUzQt5D(V7Kl;8|$33w(0 z%i8w$M?g=2``*cxdq>0@$s=o=^&lN=i~28Fwgbi<&iIAi+h=1ddzVW_<=YTEx}^oi z7YX{jMS%5By3^!3x;zK6oN%niZGj5^-o zba(Zw>%H#U)`7O@sHtupMr@qvX9J+goX-LdhvXnAJ??a4#*)J~7|Z`2d_O|mfTZ&?q> zuzi8|rqqbd$cImiLByHO1>lfMQneue0QW;sU<5V3C-dr!koPi4UH;aei2#qHqdZUV zy%L4uQXbepak)pgHtNuKbGK@#8TBByPKxT&Pp1L_D*1^Gxbo7H6~Ye#(fld);(|L$ z+<*t4{#~ftpwqQ(-qhh|RNgRxh2(|%COjD~2s?TETVbqZ&rpsyn z04iK5LP*cqeZIp<3+(yR5=G6LVCX(|uiNIO*W}cpHWKo9gskyTb*T3L0H^J#S1Mp}0bCg6Iu(5c7ydVNY; zZn~FJ0(`WoYst?-m1Gm_M!3VwNcBX@jqpbk+BG4*dXfjz;-D*DAndCqhh$f;2SuP!*OLHwx>HC_gihnl@2Ldm@NbDw-7z_))pHC zjx7~>S1p57NCV#Yai|n+`;mUv_de^tDHCo>fIWHKvZ!%o$cJsnW;!jZJVxWTrbSw8 z=&>9gN<8-b#~5{d)frm!ZV>^>0npc(7D;!I1dfgC{^c1%+~)@p(V?#ZbZc6CNuyf3 zTF{o2@{PPcASn?Vvh4buF4=E$?s%~4^$TpoG*>E-65sJAnPNjpegx*DCM+nd`Mz6? z!%$va%Ya3(^0>GX1<*UuvOU+SK52%TSu=TPJdg<+U3Z7A3TQX`e3T~5c;>oxQE%I{ z`n>BV-nOIIbP8hYlqOS9soSwCOvf$GS6?aV6v^*ThL#Tnc{0jWzgC%kA8t#WZ=0Ct zbh0cF=tVgCB_Yi09@e#>268kLy$1kngZ<4mzy{#@D6Ocx_p8J`2FltNVmVcxyA~6V zURQH$xjH%}(-g!=^O=yrK`jcR*q8H6bAFvI*@{vFT!0*n$HOm_X~=X3t=Xat^w5Jr z&8_;g8}f5II8MCn)xhjP01!sHk_aPKp9`_JJU94Ym9>>Px4nAexfrcnfysBBvm)!>;99o5yc&UA;)FUo-0Mih<6hF>WiyKY zrZ8UTX@{j zthAMC@^!DN@K~ADOZ~C}8Rm{lDY#>;3Hm$$%-Pt4eUrk4X=MTzjrRE?QUoK_i_~9;jjy>Ymy@Y#t_lqt+LB1>snpDS(kO9^cYSX4mjfm)KFtSy>p-b<)E zm{6c?qnOarwgaHlgnXC5jf}w77jkmC&A3yKD7R`(<=u4_b)uPF_I+9<>iyMuZuM^6 zg2eY13aLeP$~?NWi3pE26*eJTuP~K5q^Zdg6sMFK4Yq)U1-BMR#>N9!3Gh1CP+W8b z_yI#*btEZE46cy5@)nEScS-0&2BZ%XZ0SH%5kGKS)fv^h64KraDy>z%XcvSi)S~=G z%QOl+1+gK3m9P-Xq^dI5asL1;t!j56Tv|h51@dyS<|k7~*UXWxonF_|%<5)BT=?5N zd7d4n-PW|&^17?5v;P21B|K(3W$$j`)8krKodxQlqd7LzdUQABCZwp%s6837A44k# z`HTE3DJ5qqP)>n|B+x+XY30xwtvoss5x9(S#JXOW|6f8GgGYfoSTjoS)zX?C)!h^jK@oj8Xhwp5aW0@46I zvJkZO{`&NWjV{DFn|6mUo3^F4+X*?^T3T4+H57#)k>##i#gUPm;CbZdIlu?6Z8MI> z%a#H1zjnW5zC+A7jw8;!=DzC_ShUKE_XNs4CP$QGGNrVoI6x{=3wQ|~c@$uNxYny6 zx3Ug*U-|m1R7`hnTHc@W^hF!pM55Dn#*eua_>Hg}hL|j-S2r-}fF@nsCtl6*XW?Ri7@OT%|g{m|<&qf)mkU3nMu9$?1=v)~kp&^-;Nx*y;J` zvb-(L!j+Fl1DmZFDasG-6D9g4igefnzx82IHa z8g;J&vic;_#OOJWx22B_)`7R~>u$f{LDufNiz<8k1zeQ{_sJY(MXW-O(at{+L#_<> zAP$|gVHp0gZ<~H#pR&wKL!$3^JLE#Meh80Uyr_~Kc2&U4cwx3x#qh%fDJ1mh zl`Iqg0Ep^~+P~i$KiWR3+u6G@zE2Xp6x*b&`aG!;$`+?&xRm)vBMBir{{S#Y>8z5` z186GptVM47Rmo7`V%s%|wPkv`E)^=1>p3H^l{@q()2zlPKzII9&ytOvn*0a(Ru;g~ zDi-#~+BCYFl&P)TaFsR1^eTOAC2lDF%G9ENJu4^vA@xL!#6~?7#^df?fwR^PTXZ*O z@`*vWscaW26*=!E4K@h?C+ejr;UOcbC!o=>ab?SYBzlz@=4=e-d#DBAhsF2eDZkz? z_Z|(Ca9OqMD{kSXGc4qCh~wk2P-dNae{3;f~*z?W_7WO3a#b09tFo z-@;?Wm&6xmZXMd$8-m=08iQXH=&)^{C^9E zPS|C;Bcipz;2E4t8Ph~S0O@^I8M#*VTHiCN)rdbWJ}q@{=R+z5Ogxn@%t_)%JXD+# z59D=c6pWMyH)1R*S)qJxA=(gWK+|Z=Ga6jf@hT6vdC*(m zYBPx8@jy4AO7hyfL!TZrNhQuryiX*kb?AD2e)`@pily_X0su|^Sxa#-))rE>@xTM> z810YKQ|Fv zZ{IiS&CuiRooRBPP)iJ^oaZGI+qlEnP(9Rf zjYmZ>sHHD&UpHN-38Ge{Mhfm4bf^6^ytvU#`+{>HJ0l!Z9il?3Ua40dGb)pueZ`!q zPAHOeNTOs-riwzFCTZVqHk?|{rJAF1%XtkbD+k{i_m`2X>yVu7}R-D*! zQ;#~5zGw5+1B~P4$0sWWi+RHG;Cn9hS{-dtsu9R-O*oP|V+UDT8!I>6X<~aFL?$sU z8dPUYhG4dpA8>)!LlQ~`>6e(@r6-Tln3|$Xc9ojwwIc}7cT-7 zy8QxW{Y0fCI1;5Rf;GSPZ;Uyw4JBdt{{RYO<0J**o$+hPw(C#R-fX0{;TR)dV8)zF z5FvbTI~>6&3J8Vc2TcO2($VBCw3Ll`cF13hhe6a7gNpjxw^P@yy-Iw}O1ClPuhLGq zKvQd;pCD8pKnP`L@){W|35K>;4VTAbR9G2XDo^G$#<_&AJ(9F0GTd;SD4iSuNjLKo zs%{pekaMY0fD478T=UmmQc5MW$6j3! z_0)t79T44@A?l;oQ+35(LqAirKn^BqQ=xI3XG28*1YJh zpcEN)rm3MskIzX1Iy_Ak5Q4+cx4yi@Xw9Ul<`f6Y$U#d*2CnH5}$ybHjL=tqvbVNlL&Kq%J7t-&}_fl5_g%zCabEcS&mcmYC#|*k}N1j&7BI zRhPm^C0_b4ZJ;>OQ&y#EEh#>(+KZWMfVC zL{4onfmeCgMpvYAV*o4eA0Z?n79}jP)n3}5otmw#8PP;nWRR1k3q`Aj6fIDe0*+3- z*`kN2dDC0L>NW1od$dr~WT9l>>z$gAkw?FUbx; z$zxu^t8KEgASPq4zZ_tmnHs&CcNPUt4l_g1n^gD^Bp;NI>K|<;=eUhkiy&#(Ax+Az z&25D??m}_zuEYhYJ~~xY%EAXS7Bi;>+6$W6Le*>PeI>$UK0zn?POKru5^k#}laVxs zd)*a@iDjuydX73BH0)?&ZIqanN4kQwZQ1oZa*QQUnx!~XkP5Y)$qklT0cbIzFvVwd zA8_2)MMk9L#$>D^S?qnaVUE~Xz|s|FK$-6@2rB5m>ePqBQJ!;_eMBF9U1Q?MD{QJ9 ztf$243A|0$xTLFyeZ!I1>(Alw4u~z!l&K|dy+$QHP0Im&I~^|G9LGtbIN~pjz2u!s z#Js4~2C203_j@#MuuRvM5x(H9E@jk&+7Zwnq$=vuGC2 z6NqrP@cw5zy-QDQKaB?NAQsJQ%xNR46uzTNWMVoW+!ZuAab!G}IbZgFh&x*3inw)G z8*vV&1q(g(T`YC7v5H|C<_A?fPr5BQuw16ol7`uE9w|ZSGo|g-sw=V`BkZcbecXv6 zmW4%0(RJaP{lHeguWRJ^EHOG~FxR)`;kY4%h4U@i536Q4Z z)mdcuGEy)UaoJy8LzTc#8ZA!&ONwS8rn*xu3O*l&D(d&1S*Z{ix--n%u3F%+1UhDK&ZJvkqBC+u~@5RBM17tA>4 z0?ERAiEUSx(Ndl_s$5(ILPNN=WJ(@G_zmLR&~cnc(oBtG#RXL3rgMUy?W;$QSDRl*#wFOTqp%zL zCW#Ud660$rP#~nCT|xTjji7YhB{WZ#E=P+6UK=sumF8oj&)w-St)h=E4QYIplRxox)&LgPeixya$QkbPF?jZndbvilyf_^(MwkC z@pIcwQ!ZL-HE1mCzDUHLg)*;eLBm_3NaU@M)4=>Cl5BNo391H?;p1N{*`$hm-G}qLC zX-_AN=1dDYk1MIPcL0%k=)E)Ezkq(zc&e{fcWZUGLZL^!Zab1?TDMZ8MoQXT1;_GY z!b%(|N*31!oLii7wHFhN6sbPMwI^oSsyXkKK+bRxjF1ME%gZ@(i7WH->X^gF z7_4&#T0Zls{PJE){8@e*o+La|{AeosXS7y(vLfzWDh+By#$&B;Xfaa}P@R)0X&7$` ziu#g*L34^yoRtBsXA9ymL&I(7R@ko_*Y2@AYlP%w@nY5sYk(y5Zzv;QJv1FxvzsHb zwx-4G&4sXbdn}@tWn1x}NBL%au=1m{0d%K7iEA9xNhGOco~KyM=}tua&N`E8b%zUa zF-saW6bI1~2+?KTRCZ*rTvT*C`(a;%sV%5rk^cbWGx?9Ul3?$Sx)jW%!yV)r)O^SY zF*Q4lR;>a0YL7WLLu}4Z34OMuMjBT|cqufcqkoqqQem;9jEDsjfp6%Cf zMkCMM8bub{kg*saTgHn zPftxh&%7+sj}3Qixe~{@=PpfDK(E59-q5L-4b$LFlFV3&CB%huc??Nd;uXa_N`iXo z>C>>a!)pe;!q3@c+ley+A6G;Y2TLFijTOCJ_w=6cL{sLlvQnF43;D@E$97KyO-C+dw9G;ZKmH=Yqxc&Y1GrVOwpl9m}&KP z<24?dlzAU~Zgr`xtZ+K~=7ejx%E#K(Z$0BQO+`B2g0 z$dw*dR!$V*j1q!JV&Z~&b@l}Q+K2?SxcGf^R!@6a_C(#T{{Z%j{u4W|actd}+UeWH zxb+s{&@B2~x~*DU$^(N;Ax>Zu-9(H5?noZ`Hat#zt!qW={{RUdAs}g#U2{WjvBJ zGs7MyI3~jfDD!dLk4=5Ss;dfD+SgcU*Vk{J$_5n@G+nKw(k2fywHgYaSOqEM zg*VsiGLh3uP%r`M^;RND4;Fie{a}0wAcph?pb3#%NdhX8oD5)$jCT6!LzL%;gCJLJ{*!rD#l_Q)S69IP4tc zfCrtAcAFoUfUTz4wg8iMXi=f!ELk3!>#5y1@T(5DY1oz9_U+oM){jT8Dt*&NdIt2% zk5HdZQ^}~wT&4orL$wy0c((GA;UuL=$y;tLa(Zl(*I5)c6=O{|HQ&063(~d1n$gHK55!OCu59cF17-BMO8aX1bQ7oy|=QVi3=vk_*zeaGFfD%BDJ$4vBq-4iMn#5$Wu8n8@O}VWF%wzyAO& z55x)~Z1`UT!$L+)4NS{t3KHXj`22v7cym>KFYv_5gME?fL0Y;?|XDBkeN#JJVC>Le0}WS5Pef02pvQJKPq$`7$my z*2%1*LOxxWqm|(R5tWjr$RnX1Vsqc3@yhN4dHUTx{#qspf?ud5oNbMVZzc;!C_>i0fN}c9eR>F_b>pS?&Vo=-U~kj z;*rNAtQK>6YpC4nG)GYGICXCit=%w3nB4erlGhQ8HtVQCJ^hoDjYNtCr*%m86EjCo z@SyGMUfbS{gQ#t#^-Yrf9!))T`S4@ZAB?#T9;ZWI}?nBFux5w-im^Zx*RJP_`#(p@+9;q1LBkxIHLRQqz$q}h~t5+&2! zkkaBW<>DnpK6`ZcoJ#6a9Z5%7Z&@OX_PEkxWPQk6SV|TkvZqMo0rs_w5TG}d--*VBT-4WlSvwPg^Q=v04 z_XDsazK1E%-kMu=9(YO=W0ul@oaHAw49iK`#txaC1TKxC$cLTsfF`H5eB{ zt3qg6?{V(A&qThXY~_6q)1_M#OOm5+)+6DV%tv}llIj%6jG;WDnJvU-GlS6QlL*lt;x6d5 zDfaX#b(cQLr%b3%lP;lDqsf_hRvGf&1%xV0hSHYWTjeT9UJw*dRQi>qvD#d0feAQRMFhs#s2za0lf4|Y$rnB6<7)VOY1RjWmU+tZ%6FMIW9l>4$N zk=FClnQlTu(&QHuR?nEQg2?8sO6xAlN5t1K7ZcPs{-acDVMAR$NFqqvJdKow0j)Xu z>d|&AStOpP#`RVl75@O+e}<}UOwnP~>rLDyZ6c)sw_`;@Q#8hAL{PJoGPn(;TuD;D zm~u*$s*IP6Op?t&svz&Sp!?O{JV!eTvKl7r5H#L_9v0nw`}J2;Sh1>BWVWEjN|u2p zI#333N#cb25Dz2NAHJx|`}Ta5`2B^dG76Xf0B6+uS`yInwAajc9tk6!BRJSre!Q}M z`jM$~e^8V8s)o!$R#mi^X|6%HH_4;bZ20;zTMWi#@W@unE6)(8f zJr`vznoNkvLuP8G@s}yCBZEpx65+>8l#XAS)uSeUR1O{#sAm!5;C{K)$=7RpzYhQxI0yvk`8tk1EaL~w?$ZQ z19i$x23jOUhLu4`g!0&Lg8bCy3sDCOKEYTYhwrTq3+&{Xx}A0Rcr1?O#L&0q>^d%6IGJW$rKQ{G}trXZmz< zYi%{|HT-;0p3Budw&c)bIPyHSA^6FE0}IY@278{?yg%&_wPUQ*qP>q!azvZq#*jAsY0wv&LL*HJ(0`chtTSoS~b z`r6$8014Y(1)Jb5)41fuQ?hOevnJFD=u3)uY02VpeJMh}GIf{slOvyqy@RHUL%To9!7?i*z|`hn9OwSSDqP>^)j{{U#URh0II7T)@Q?liT1!BMs>D|&U= zbXHGcV(rKTb<+Ip>PS45;I-2DcsA%)oz^0VlhbHr`88Vd;TPVDVI{{UE0 zJ|Mm@XC@ZG*|HsfWwznjLANi-?5SyPrzxT`>Rng~j=>m83Y>GIy6x~deAtf|@VEMo z{l~+^5B~rd`-a-)GV@`ThbnXZCjQa>?=$2707&=kpPHUl>+-_HuRgr9}q!cE$>?E$KN%}2E+ zSE~#yX-kH;DYB-cjzD>f3oNt}Gu0Rw#=c9$G9=>seZ8Koy7z7VSJ!xSV}x)JAGmFw zQ>}fMf=j(*RM#d|$tcN_GGmgaKJs#0aa>B2e)-AQ)>#m1KpIl{1oHDt;_XQ`rL8)H z70QHq8hAEl&TS;{?lRg^G4&*B6STG>iH-xFJywtSvu>3SbUb%nFe6Jzfo+Hu{8gz~ z06=B5IuZ|HTuSkcR&acGMTjhFY^y#!kjeAN2SG#Nvwcm}NvG44hWU?`TH071paBE> zXI6*0;uRUEki9_oA$&CKedVD<@nOFf1ShF*8Fmf5N|eVmRUGENa^6a^2uNQ9j9`@K z`gMc$pN-3m;|wnK^73Cq_FIC+_O~Kd`f2lCuvnHopSQF~R(*?aM5a=pG#iNq8vzZp zkTHM;zIP^0MDknQSI~P1;xmOCPz8?=VqLZAA9Y>H5yxAVtSXSQ6_`Kb1 zr%Ow>?wL%bqA--aK-E@P2gk^}3qgg)C&!>l+P)b6Ial?f8m8X!Ot#WMQE^#1$MFwj z*!wLDZNt5**f_1_uzwgWlHA7Hi&v<%73VMyC5&qqo9xW+l0aJAPiP^Rs??S~^KJF{ z8M!nH{C9(Z5EAG*&rN|eCWu$jXGbXANBD=Z>AQ=zl?qFYrPAbeaTw3GiGw4t=Li{% zY_XO6>v;ays;1lSrA4z&TWy&NfmdHp8HaQv8thP{l>rxyk zV@ziDQdFB}WkUg&s!{tVLww9`N!ff31jhL>w|-1aG!}8LRdBt1L{XttncD3X`R!;w-HSv%}#;ySx^n+dqfI zN`OF_9D0&Fr&P1?Hx8>w7YAi*q_=zFzM4e|Q)$rigy+(o3JxrJsFlh1Fy+uJb-SAf zRkG(ThhwQYCml7X#my20mCoUPnN{4|R&*oDZJd5uuxy~Jcj7&vG*vbAtB7psW#Axo zPFuMn2rF%(WE7uq((Qe(*S8dp>8s=S$)0kwIF zk0C2q_*1YhMAaj&%Ww`u+gQFUksTGe;W+Y#1?ne;>McSQ9fZhAx+Hhk%y^sH=Ney9 z;cRnSEnacbq_Q=gcI#6Xjb9cHNyeg@8>Eyvk*^}PBH+Q!yolA#yrj8PVD{GtQVvP2 zpSGe!DFTsFeU7+@3Pr(#uM|gp9g807;mZY5^{`%sWOy6CJLs;sS*YjsT}Y5?lW0JC`nl7+af=LyHYtec=qv=XIhF&D^W zYA@MXLfut^Wz)lpKqFPt6?2ZoXwYd$L~yKoYPIK8a~m{K_k&4hI%rH5ps1MjJJbd#1)Lb&$exP+jA^wds@vR4AE$a0F91MR4tQiNJ#SagQT8j9r< zH2n8`(vVMmN|c%k?FuVSRjw3fg~QPUfSx)TMFDXNBAa)%xQ@Z9dntr11w?8VQ;ixR zO~GjmGNX^KoyR($%oRCs$B`yVkluUu)y!m4taDE?ibP3KAIge=(Fg=6Q3_&{mmW%r z$?K%%pb^+q?Q&z0XQXGc&4&|D(`HhpN z;en}no=O>`T=S&KOAA@=qDcS&1Ut6k!urh98lFf)&B9~jfMP@RRtMMTyuO2cwg$`Y)TtGM477FA=|{eo-% z0A$rUY5AEcIPcVGpXv-|fdugPzfzWmTFuqiQjywIlE_gHm@!fElDS)c<7AcIGef158-)xHK~N{klZPa za(j|_dt*mu8sYJjyZ8os#;KxwGu?`4y(5qxeG~rx!c1GBmOjnpH&T*s!`dXVeT`O|@UwPL z+<30hsxx0=rht5&y$RNTh&8y*4sOdqhm`r6TK(0ZMSsLKy*c8F8`C1PqLpME;Cty~ zHWQn^sKYBIkK072{iMjemHaxj5pkq8=M}c$!3Xu!gBsmhQ!!@t+8q=5zI9c^(5BQ= zrVw^*NU6h7p9 z@@O8X^3r^OxU{dLdoAr8d^ppEgr|aQUTv9c%cfVLyB12H2~%#2WMjUEGaS+yh3zL4 z#^N(}vFWbGUT!?gF;x`EZDS=zD(W<5u+Uhy%+T_oLlLCD)3me|DW?yZ7BV~Nz`3oZ z7CaMS3;2oHdvACtN>x?T#KbV84nP2KP#ppL9SO1SwLBNvEQ}16j$%AN%EA@qHy2_r z!x>LVg(@q#ZNNwl4F3Reu7(B;28DfC=0(SG!z4QW)6L=E8N0%YW0e|m8gdkJhrWwe ze-Qd-LZ>mLUg_=|hmVSTtR8wN9vGlPs&9S1+t9*;Gd$HK^#mkx?XJex7C&BzFKTjP zhXI_Ti9bPWUvGZaZI_5EMpY6)YAtpO`9qxAK~r3Zr7QZRpW9Q6z82~%FO~5B0B9wT zE{pXCf3aAa>_5OuQkm(?wy_qqdb5L8fmH^+U=OWcY>)llW4|m zEb`X1otQH|Z7^xi0i^6dT{CKRRG@*Ro#9|E7!Cp!oUYl@H^ zLWVnGJi!C<$WQP0(TKHN=L)g1`BS*5)Wo>lfTt4f6V+Wv7yx7Ijy*p5lx-xX<$GG& zKzrc&D|<&a9VTjE%&095$5W*vK3VhB0XgbJL?jP)KAm-C!W#jgTiDJ%7j^+Se5$n`z)8@S*@bmuDuZ4@!Ee<~VZB@-_O_v?hNl`~s;Bn}z5ON3yI-z@JY{icSrpD^)wSrt; z(T)UbsPh($TBkcAU-G>!{N#p`jNk%04E^(^!(8Wi*-RPQ$o1Qmr9{EF>B^_B;6q%5 zSu&$I6uzEgQWno2w^U<8bue>!rUY)7_F(T{OG(lx%|LmU0tW`9sb~cw@t=R+uDI6n zkP}l$+A+t(e3IT&hYa2?mhCXf4-DAIil402-f#Eyd&KZEZcx z*~N!<0?wqjANU)x8f6y+Ic}}jBO%9Blrtd;TZ?IGAqSe$vxOx{(|bR~n~LEZ$8>@2 z^Zr&V+D;Mvr!(Yc;m6^i{{Vyk04oi6I`|j(_S`E5?YsO=Sgu;tSMG~`EIOspaK?62 z8Z0So$eQGDmogXTt)b<%KbDd~1cWG&am4uMBOCn#U`Bu=-%t@ z9GYY04*dLvCOswPC_3c8;+shGmh-O@<^`kGkbposy@%Q?mSZ{wfkUs#y*xUqjv?&c z4?KBB`P@8o8=Knhy+*q&Z{hy{!w$%JN7@5J**jVIQ7#*q>GkTpLP>sgT2?p*pLF$6 z?3APgp&)TeQZ-4Nosp3XWRU4~?i(w<6~poH^CW^G0S&tII-Pyr4}!C6b@r&VcyB_J z$u5^2mM}&V+X_(c?UDVopeBa5ck&jQ#>I9pt!SjW9p@tWS5VM{h_Y^0PC;FsVknLGJ$1Ost-YN$q*>=C4Vok zC59bP1K&K<2X2}xi48V31pJTOs^~;=<+qggT;MCqnYaG{#3m?LDs(h96rY-^G}@a| z2s{!ABlkKFIpi8{La`#Ic|Y31Z_L$vg7fR*kG-3D;(Ns;PlbI$a3WjweG;0@-@bPQ zxkfWEDUB{G{{SLf3Q5b6UUg#%1uJ$sfL8@1=(t`K_{&i>DJ97;>QES1>V)WvT-UbsH)W4sw)8tsRmR^ zSsyH!6A;(|CHZkuzFkh5;t0&I9*uGez* zwE1ppo^=Ajr_y6VdL$@CLL*?Pmk1@68_K($sy$D9tK9X(PVp0g8yovAt^`u$nK{8O z6nw9|;yyrp6Z)!?0+5!=$SX^2;Y+~>rgPV!9reO_Sfh{qY=Ub`K0b;v)`%$(ObK&5 z>>C~MLA@VIV`2dq_VNZrAbgBNm6uS(J$IuI-Q z`>#FxU2WFZ>|K4k63vHQw5yc$lv}W>vp_b}!65=W<32-F=YmYe%f)?>c zP^~-;k!7kl`Qw^z5FSC!JIkisPH8$BxM^rCBV;0=!&v&X(bI&Sq*ph28*q0eDWUGoK7JyG=@zaw^3u&?oHDnWKPNBLQ_@rWu zvPwCja02K!HkxmtJ?(s~P!+1byf9oF7X8@$294qV*8czwR_-UQsOq0<(IGq}#eq7d zTA1_DoPDRFv;;WeO{}CpCD64f5K~t)Gd;FlWNW`o0ISq^`c}%pl1CJslN-u5(_K%9 z6?*BQyZKYTCF>p;W^c6Xn*RXaN^JVQ?@eF$?nRSKknAWH+G0kk!KBA_IZE28yqY>V z%TO+s68gw&CMsHY6ZL(S2Iw}w9jxBq7gczXzNu`OaNRF6oNVrVx2+C@hTZB&2CAD( zd^YXJguRib+#97#-8bt^TUW|p*p`iYpH3}aac45zD0ImG05uJl*6JCY)KcJ*<7j;f zbqe;)gdJD$nt0WHM+; z18dyhQ>oPMb@JFN{s$XmXpQX+K3xk%fHu%*2Af%+NmhOD0lC+8Dii4oLP_K^{UGPA zIvgDL{{XJ4W$#MRR+EQFW5AW;f4zOvdF67f=<$PR%wZ042R(So86VqReRe>8Ziydv zInL-v{{ZNtt4+psgA$B{g7Z!*9*)WgSRd+iyp9b3C!ppTFO=*@+$=%kg_Lavhz+sc z>Mf}CRoItZT1cnC1yUwD>#Uv#1RSYAsQdNDPUKfk;m=Mx*T}E6`vZrM#QmP)7&AOF zq8gonHZSs*UK@A%+TFhxS3=RY_e~S$isnjcze)@yBY0ttEoub%xp|5M1G)NXtiVPv zdt57R_3>ED{ssPzGvkI)Bf}bOe$%kf^}W?Uv>q$=yTd)NxE>qt%1v1ef7%@B6xr04 z+i?vv+lyn%DN>R_972MIe?kG!SohGT*`f4bN#oweW_w4CiNxcTt^Sz>rtkMyqCB+L zyq3M#t<>7B{{ZmbipJJTp4BoXUNkq8Dgj`j*1dcH?4h0@l#(;kL?yw*I8pvr$GFc7 z$>Cf?Lp5w@k5ClgOO~d^S8KjM8Bm1Fr#PRyo8-0#j-i zQHJA{>9Q8eUw%daK`2L*%1}>mdX|)bG7hG}Ze5kd&7-Q#RzA;7rud7ESh=5vE=_-K zro^c=c?hU6B&4a&A4pYsjO~u8O@y5yd)(B1=M?hL+=Dw-%5k!P=CtOM&ZVfjjNuXwktGfvvCU zxE@g5+hT(V=l~|Pt;Kgm&G^>3{6IsgwERof@m{7yk0r00mh`C&w!&7Wu3N4x)xH*{idE;8kb5gy zUg>0D0NqoCS=dnNw!mrNp^qcj#z7Q@#aS&kKtL~dC#m%G`YRJ{D)h>C@j7)ul9e`4;!+dtmieg|`sV}fs#lX?S~T=Qc3sF- zKJ1RNw^K}QrxIe}N=V5I$6u%&aoh9J+}h|^I8&&sHez$ zsC53ITtWQ6)ZintbALBn$t0HkbXm{GwcmIraVV5J)sV$8nACN-Pi8$$FFfN;g!2xh z4?~`j&=mvAzkFZts3S1AhiiK2^!y7c#$}b64GwOA8rSMPeki|h?Rv%au=e#{u$G!; z<6-vXx)yR>$`X{3k4pT;(m?wYto}(D{6+0=_U-Ba01His*JW_n%e3Yi`u_mPRm5vO zPuM@@4pK;fgq zfb{~$(JiqQHm-fMmt)P27K)@-BQ}SKBh6cRN4K)lff(NYFG{=@*;HF&!miudwv>k4 zj|$X7%XJ-{Q>hCipQ+`nFBf~I&z0wJO4RViHas>4>;UFYXHjYu>iuC6VbkgB zl_pE8;?!o^LX@`&{*-_TKVhXY+9YrtQ-_o^l4_TYe-Y1!j^x<8?_JqFi@j+RD6P_L zDOBs0p8o)zpyeVmXD}OABAzBxg5rV6+AdzgFyTy$tc&nE7wn=`HvjqQsU*h z2#6!NLG4q}hiKCYccGJ1~OMy1*@$^gDS6MD3|@@_|J7n6@kQ?f{rAy4^=b;Wv=vQ?6z za!Egb*F|q<*?`c6Bcyb^&M4c%{Q@TMZ>^iPYLvEEt=6K_op`7PHrvmjDOf$a6Qr}; zVZ(fbQU#|tY)#0{jwftQFX|%EwszZPcIJ_{*5s;nE{8*>vkD3vmV~7Zwt$h6NbA$7 z_a{2|W?OS7$#a}8*W9rk20SfmdLXOQ#{U3=y|tX0b>-ql(~AE960ao{R63#4-+?&M zA>moG>ee5E?A%isnmNFG!ttZydGRip;*)oz?GDi2B3|E7czm*SLDQ*3Q`vHO}IiHKshK-9l_OpZx4q$6C8nC@ct=24BYHKtJRAe{iZFc zp2a>j@3T`{a59wCWJi(?90Sx+2<@GG?=#p*97~u&`aUPNxW%A6m8N_v{9(Kzc%r%y zWl*c`QR+`5e7iMXC=Q?Ug=fCA8NSNq;J2ErEgmPdIC+kyJ5{P)Y$`EZD+)`9JW6`! zI?cW}LhkTa?2t*QUKMc8{oF*1Ot#d=S?*vT3S~@4k4fk z_SBa;q|)=OxC?6_{f?qo3LtZvs8h5X`sKFWM4EL;*2+#t6_KST#D-BsCt%_k5Ss;P zj}LzmUESJBgAO9$eQh>IQm0NepUw7q34tIjJ`c2#uz=#d5b(+It)bmbu|&Qkq!$26 z)U|67pX{^P{$Li%584>!Z4$cik+fSs;^vC0mdu|OQk_P4q>SfIaMw+Np+V1NIjyj< z%`@RIxYdfWR7zUb(O*Ink&RwU?Es0ol|vr@?H{t#UK_p)8IIhWst*&>AxPG1JKA?& zbgdpAv&?AJEAfwnCfh}1B*8{N_eQAS?JU>2x{rZFTP~vfCARIUX;`PAfO?NFLwB^3 z5mt(L6eFUXuY5YJi&B`}+GQ;PZ1p4{Xt?}(N4kkZcMD{CfQT(khqaudgu`hmeWBD2 z`aHZr<;bnaZ78k9qS|yzRzyn5kQUo#9QD{{mGTN+lt$KSyrA*5a!?a^KFk8yN?bpO z^ViTgPiW=~SY9zCVaAqntk!9>6T{0$>FhP4V_X(x@-U=mblOD8i9+~{opMJw1sK@J zIa=19&d{sNWu}T0rQ@bGT{c6Q30E-UvGldahhK-RJF=G4wLnUOfH~o;UlHRbHxX-5 zgTh+zvbhuR#HOLJe}yOi07j_KvC(u~X{shUv8Px&-R`1vPw2{<6- z*<~I5@G(@k9CdN&YQWEAYe$2|gX>kF&EVD1W-H5NE0j4ZZE#jFf6J{r97T^Ctjr+s&D)SEn|QlTieZ>D7K$5o;T|x5MF%dxnc$ z><5E6H6$|o^yBT_I>+bnfG<_G;rtfsMYHxZ!jwyQ%5iW&BOlYOW_J`aUaM<^!i06A z)3#-##S$7CLttQiHI>Mmysc&~IABCr2^jX$B&$|8M4Hb{c^m|aj#blML~iLNjO1&D zOd3h{*HqW-d3k(a;nxn!qjcTj*Y(s9T9I`**O6PYZsL8h-&`Wpfu$c%XOam6+f#1p zFFGLGnYA`bhOA-LR!_PHuDg&yI<$x?*$N1_WEPZ8b!!NkVb-aOtm+3 z_tZ)#O&?LzS5U;-U{hrA*XhY)weTE#ib7W%F9BE@tC|&c212iHSOo<~8mO8jZ4CB; zs||2b!gX6Dbe?Rsp(H4RdT1Q9REyFcZca0)0D|{gU57G8G-iae+@xYJvCf!iq@&!V zqOS?Ym}*VsISLrgbYZdyDXg=Qdi!gtDjK4ckaa6wL-jN#uDTbg4%L_h5(c`W;Du{3 z$5V|=6bCg7)R+K}HPBM8YJ#578R_}xfTbSQ6D_cn6QTl>k*kQ#`ECQBeH0a4J1ip` zMzR=n2bXP4Q%@SXcJ}TK6n``6uPV7C)n2v*=!FLV0Gssp*9bxkS3Q+Oo$ z0M&fT?;X0UQjFL8umpQ`)pNI33>qQp@6yW0+dAt4-4dbV60mT)p1uGSlIN$@XT_rQf3ey$@m}>MlfXs!lvKxI%!?iA=`Sq?jrV^!jQxoM=_n z<;HMFP)O6b!rXy4(N#{i;w2K|I%ihnWnSS$M^+MCQ7t$9v`}h{_Oi1y{gw|@VdoGfQ)U*@d0|1jiY`?y<*-q~(SXoV07TK47ilwBC z$saQOMx9O9A_&}fjt`AX#Z5yI72+tr8_tB)K%mKW5Krn0f06e$c`wo5X%X!W}ap4wwf zOJ@VFajdiA%yXzvvL5 z@`X!DQ5{bmGVCdwb#hQ;#2cej6usl7Ly~;xDJ%9GW9bb9p$e0~! zG6DhUpRS#Yg)p{?MqV)Rc1$i^+`1i#9d05+W4<)p93vj+l#WjqoQ(p8m*RRv8h6N= zVnTqyRy5OnoNSN2WmhL3EEGb5M~DhslBLg!$z=8;PPc%_&)QOBjzH~P72)9faH-2y(OW)ST_3_S74_CmOl*kV zL@P+=WTL_Z+_*bGUaLI@o*8PQmEmCePb}&9Mr17n?0{Vhou=qot>N~uA(U3F+p(oM zfs-9-&+VsT;w>H5wNI8nZKVv{lWNp=3>wIJm)cG_fN+0ZI~(JWTS{}C5vNMCo>V1Pr*>$;OJ5rssys}9|v_6ur!mlkrWNW{rW4a=qBK~k(Y$<3P˙ zOTjH+KZ$4YYlj$sz53?3>ZIw{;@*&lB1|4yl1lhFfIDgi3JOCg9hcwxL6Ewl8(mDi zf&x;96UZd>_t$$828)LzlUAWOw{Gnn?zYuWsX=MEiDdkpKnxVC=ugv8EaVsRTD}qO zJlL-ccewTU`7CXG?7ja0W!9agxoS;PSr{+0*;*I>05Bt77|eLP3+j;jVZx;?Xtp}F z8;j~~7ZjViCyS8?IP&uV3HSB* zEp=#5j=GcSfQG~Gpe=5tBP$-PCqDlA6pXD7%jGz-MIa#VP*21{-k{XBZl7|d-}7p* zCA89Ip`5r9TTxm`9ma9_V^GD5`h)|aUqbe4FDPX&H@#YIW~l!F&$(e28kbFysPiMO z4zjE|+km8l^dS4`r?SnCyDifsd=ICCZ90RZz5EGWG}YYIx(vFrOg%0;Ml%jC1>zQS zkFEjEKlapeVt9?TJyti`c@A7>l?iJ0x|ypwvOgS%|YYer`2w;IOI8T2l5u3%>qWgmOtSswwtkXY@K~| z7Lg=GeQ6a6WP~Xxc_5CXko2rz;Qg?AYHr1TQ$s6lh}OOx6<-$|D#z8q52!>XFP2z}OF35xQ z)>=Vn+snxLgvHfU=Re8%#7`|;mgn<-2|nkk#tu8<@aU}$YOR};w^9{-;sUKwwd|<( zBuC=7DYsNNp(SmFC4F696ag6@%Si9<_SLTmXnt2I>e8~@anEKTb56v4)^Mwd_YIqJ zUZPt?$(IWap)Yz}P;oDgm>9q(sO||G+O#!}YkUXru#bD?iboEvuc-T}ODk>!%Z8zD zdFht;pj>2@PFn^nb^6kAl9S{t`*Z;7&whZ95&838YXc-L+|&MAeU^gQThGM@fvu{# zuU)m=K}5L!0K^sysIzGfp_kSw6uA$#91=Zf49Fg1YyMv_*-$tbt)CwYh)mF1(cdGw zvV$ithhw~hsVwm74xa_PejdN=B1eTiossy7(`E{kdy&MQ!lc1KY!oPAxv^Qs78I2v zErgtoK7w*idx?8JBuAeg_ULP``TH#g4fc(bgB{F)UezMza2P9AVg&^`)dGT|f55<5+Gt*gTV@_II$Zr1tG+UvSkBgZb z%fV=7qvSQ&Ol)V0t4GAOcB?OFY}DS8o4@z178lc~crCkrn$=OkB4qlrX#qji zl(v+DRJRT=5RgAtNd{0FmkVeA2+!v~Mn^^!o06h2KRi z9K#P0mUoL1Xxi85bOUcwT5hh5+@U>m+7#(6(PmQSw@Q}dRL7ibI)~ki<0)y<+LVGo zUJewX6nYblCp9(AZB~Uj!DcL(?k?sW&DW&@97z1=mc40Bz@XEu_>XyO6*%SagV|h= zzB&AkgEU-?Yj3Eu&kvl0*e;1vbdjYP#3ZAzu)?`D6HG*vWn&H$tS`dPS`r>CPd=r7Du@ zTT)w&-y%6U>zq=No}`aqkzp>DR*O6HzPb=M*Q3ORAa@r-9c*EAg)R(cm7<67HiA0_m@3zW%=Byg)F zfu-_~9q#+2@2P0oir4-zXZd@5Y|>*mT9Z`2Xz?QffCGYYlvDozrZF1EW zl@|R?m{$Y}b8VRDbq*)hj0_{vk@=25eRMITplqEH7vo6sd5EvBr`@4nu4|FYR?4j1 zk?G5p{3yzPBs7jDOSr>Lq@Kk~C>i_c%{;9nrHoyq%!qZ+`3}D;N>ORmIt{j%b193g znsvR0skHOu$eR0YaxJv7w1ky}r~pcEq7Nb09)dS^ytVoN010gQx!CDJqFiBpu$yi2!qVJkTulD}n~{~P2?}OLanVN! zDbkqvs_5(ezg>X%Qme*ufvO;#ujD$qyiFZ8BSbT{_pK{vHW_sNs@UzkV)2})?9i!J zX4pO@8S)g=b{1+iqU?pXw-nL@g+gvVRsek`)F(GI)AI9J@g!~NG`}Ek$wV+>#$Cz< zbZvot@nnD0MN$dzGrW=ZmcZTna>=YWR(oshc>6O$tTLZ3_|4sN$yCdpdJxh_CrYCd zP?6~%alj-CJbYOmSY9YN^O4h)m&!HixYwm_siw?|IHe%lfD!qZJd4|}?RK3*w$)tM z+}*p}ea059&f1YJIwcyCB3b_c;I_U&`Xp&~^m^qMtf0s|+7g?tLvRj@MAe~bS_<=9 zq;}_OPWPxi>Tvbdr^!E8WAwPZO}~Pw zJ{=o>w)>H>H7nukE(Gb-{l=>~CZj$ZZmsm0M4+WhNgyS^VeU`YMtp92$nt3U1*rC? zi*YP6x#7^N;N(tR$|neZ{?#l8$wjtoKn3h82orA z`~7vs@`4&SD;tpMXURD-Jh-@Pe&r1+^|GmZi1yM)xGCzWwE?H)QrvkeUQ`sK2ps|7 zrpV8;xzwB-*HwGanC8DwbxYk-V_EkNiDyBS(GNom$wBIT$D4Sm&!l8)7(K~m zbGh#>@zc-+Tifvs`4Vi5ZpD9-YOtq>~kKn|TA&R9!8ka#~2X z;O>?}<}lY${{WcxYu{$pU)m-|7c1W0VW=bik=`fOqzd>AN~9uqb=?aGeJx90Y&=X+ z?PzbhyPkzkqM_&M_PQoI5eadU{H3t-k|aq)U_@c&HzD#!$Qsi(Et2E8(#A>Hl7Dq? zbSwZh)!WwVApRdTc`RfyhPPJ$1%}zsi+3p`>H9St+ao=YlXNe3uE($G)jB-__n%mR zifi!G=TmMrAhk`Hsghab3SV|Ci42fal@P3_nsSbOkg^5_i*o?h_h}`o_$kgD zCv@^T_89VXtwVqfHb+Ntl0LeG4dcth-Hj`E>Qc7Y*)_Q`XwW8G?o%mpDelrDmzM;o z4zkbv9?A_ole*_Nw#K-Cw-K#%%)M!qKbkD#Sg?3d!X&X&kFe{pdnbO1Ayc^6){>WS!nGXDU>o*gK3 z>Q2yBD)mc3nyQ61%cZ+5RLB8q z5CJ|-8w=QLe&pVuLaIOKYA-SX7FiXMT-ImuQ5>C@j_h5gqBDVlkjd;-ru6v^tU z?=3zBGFvI0#U#s_Ar1^eZzV+szo?`jf#0C%)N4t=fNU-<8WUCGR#)0Pl6EnMja~Q; z^Y&d+DOF1nRnuovWN@a?*rnBCB?>C?%dMeHS`Isf5T#(_)_Y@Av$?YtNPly=f%hNE z^jFx;Ft$j??OL(kaS~4!Ej|hS?QZ(iVag;Att4+2xEY0bPIapQgJL zUnG}R-lOGuAWr5sA_K3x%nzojr12mXNU_+PMvzcjxh45tkHXSfTS>>$(y{*lsC_l4 z;Qjf_TsLU?g0UQIIym{8(Z}dV(4lV**HneG<*=0`h*95+<73jNJfIYM=he*!KYX1_ zkK&GN^CRb{$#dE4mpzr_2tIYM%q!<&?|3^~;tt!~xelRFUaz$xvmNpLx7c|B5*t{? z0t!|SUfe+g=$sAhTG)?4r?}{>GaMtBJasmG<6m;Nd~#dXKFfHiySC!ku1ToW-K%Eit;IY|mY+0{hb(;su zs(|?w>CVF2>bG`|i$M7{n{t;(W(ryjgmEpWj~rlQ)RW)oubE~_B*~EYmAl0pn8120 ztMS_LZhSs?U}MAGu~KcTmva#8X^l74ap;IiOouvt65@&)2izAi+ghJwxIoL#?cO`A zqwnebtoOA%OZ2$Ciw}AC@alfc#NXl3X1d~58zZ0rCkMFp_ULu>=G$9Ae39V3OCcjA zQ=pLB$q%qnJwYU|zj8hQ08JA@fNiJAAneGlxFkp9GT{Ui^#=rX`gal(OhhQeDa$8bqGnG_`UQ2B);8N>+ zRFaocrhy71j`;_sE3>d5;!O>gU{$9N;u7$(Uk>gRZ35J)RX68yL`&j+0W zVWE(egn|0?#-tn=HeG4vpi@enLOLfq5pp;!f)@%~DB|K&o?J*Hs5!ycjW}vIT@nVm z#^E=r-y6F!Kk)j7;MHX^rFuf@ZgElkv-LWQaj^Fc9|U8Yp5d&8LR1^OX#mBn$azb3 zl&LEV3rWh%tsCjNUf&8=o02H2B_SZnQ z0!U6R%gU=_+z~5uDuc14#BmNb^J^gF9E}EScFh@U#)$aYQew;;)2jZCeh;26D!wfI zEkLQ<>Mm7is!Ta=DCE0)i5xan9=<(*M>^1>;mm9wH`qg54U?AF(9+s{2@*tF_u-&R~ySgB5bVWG{$a%E>D zoVy+*QR)I9lF=QzeKe_gEu`#ZY?&ns=Afi>_BsdmSxr!+vZHkfBOyb!j2`CfglLUW z#pSY_cYU&`*Db9QNLayBi~@AbS-BA#4okiWq#G=O<4fTqXl{)vZBuS(@uSIkzxW!_eQR3rlo;cUixOX3dW`Iih z*A(`4W|HQGo$Iz;T9Sn~Dmu`#94RYKF|8bVERa|$D<%|?9YP#-Gp(!C4}YeP9bqUz z2!fMkRjZWM%!wSS4I?TeLUY4S6x?{uk(Lw-?YR;`X?+S#4u~niDnVnZNK$SpjWSAI zg(+xKPeKkfIbdVPp)nRzksS)Uwv)yVWX%ZCY@wclNYGtKt~|M_{iWccT8EUAZ4}Ort3bs_=}o2SwdbS0l_A0iI)m5Vt_hmNQFF!)E7rwe44c_0wnBu}KLh%NqFy8!r+S^)3_|SQeiYSV}-1LVAz# z>mK=D3e-mvNKC4Br8Zk7wZ}=w{{Sw$$=(W^vD#HbyM7wz7hHEUPeCdN`gL)M#9tZR zAwLgm`Yf5eUk~VW-*w2;!PK6i8q;HOveCMt$l$GU*;6w<9x@X&l+unf{!LkqJErQt z{R>@{m9yRj8>Gr@*%ZuRj_B29Um7kOt9&jD7)Fa&?S8~k?YNDjS*bP%jGn`e_a5bs&TL>5fw_&B+Nlml>l6720H5*K@Bo^UT zq%}t6NtJ=yUL*z3DRNJ_)Je4Fjy**O^+PI8=pDfbc(&tImHJF5olnuH}w z#x=ue%?aBm7|>m5hJX}|CdNiItJ6$Glvvz|>7->U!Vrt85dA4Q)pUhg!W7d?VI9A= zlX9_Q{Of%>Xk{?cn!Jo_h@hr#x2P2$n7I%wzTVpXQ1&m)P|HYi;-!TpSWc_vj@85y zTCOh2QAttbs;S~v5KOD9iV;ec)ArR&v8y=cLUjajQOVLyWfaJg(=zTAfOQbn7da}! z*fF8RtJ9{RI|XL24bHK)vRrGRwe z9B%}odIY7&aVgMbD$^fQt*yMKsltVE)ojII<271PAo)=TPi-RY)w4#3J8%#~Yy6I; z#3^=FC1p66e?2nYk`CQHq&gcwBT*ql8cWNqmO66KoXbROwN9vYw7T&1YPTi2E6f*a zj%bon<3k7AR2dtsh9z=^_OPSnD1)Sq>e;&>3&FyWuD@L#Fry*SRX22ng{ucvQ3X{q zh(Q$@j&ma?P6mZs_Y}=CTv5O$TyP7`C4O<|ai{AT)WqPFK-3R(QynW;6#MAHK&8r5O){GDUL6m8bhs5ZwHH!p>)@P? z2#}qOClg^PB=H&@gwO~Y_P5=bg#@EH({M-uLy?xN%B_hYET}SnZCN&PNhicqB)duG zLW-LH+9;SM`!Y97sdP07p$l&VKTR()(HPq(soP>RkTSN%;nJ*_^CP+;%By>V-g-S% zPDX1OI=F@5&DB@EwB-YEQz|l>AfWUgO*F@~r47v_ArS(6Ie~szz*o~um$l774Irx$ z%Baki${12kKP^(_Fan;5#EMrw%}~UOvuaSu&Z*|qBT~@D)I_>kP^9z-(jXgNRW|C| zYo~dhLNb3X7*aC|sNA7Tmo$f4IM2A$i-1RHB`H{?Hy$`)wuW)^*8{An7SbQ8Q5MWK zEe-mJ>C;ndwOlRks(Ss~%B9IQMe?AG_SLpNQ(_t_oQzk>bx`!pt5qK%h7NztjZSR7 z+jSW61UoO)Ex$`(%a*61Y~nUMpN!|c0I>LC$+5zdVOsu zXtKb`#xOKiLgzZlT1mid1S3>|S)BQOrWKNU5;bcHiGqrznX<@i1>00N1b`N>I%$EB=Cq_;16<{;wx?|(TH9?JBo{L#p^P?@)aO|&te52F8`v!@ z5jP(ehgIlLf-4>cqqJg|J%ouXbNT#-ToJ0wnb{<&#}S;7QB=Q-&6 zvanlLGw-WBX&UD8ki9-IBbXIRZHDpPG&+e)ih|q?tMIzKFVAVF^Q!Tpa!o!V%3Dqo^Ss2HeiPp@=I*JwCzYO$R^NvinXDvMPT0wm(8gTd>e0m})S8R7$`HB2; zeI|=*)F8`mTIFC%Na;{g2a4G?tM{rfKKNJkvVQ%l=S;aS`;#Q%)rhyrRo|GwCHtAmDWX5%%bG z-uk3N=+Ww+_g`%`8PrP^q$|s1@-inz$4oW2)8%L6fTv z6!ynCaqz7-)PSmZv@f0zz(CyVrp<9wPUmeU@vt_nhjrXF+BI5@xD+#TQCO!;aln>? z?!{PnwV^y6ORTt@dXji&C$_c`OC06EXj`JgWaG<%BXMwWe|S~@038+6YV5n42P)aS zcTVNCWI227T>8}xl}4z1#JJ4W=u?DN-$x`Vm%Q}>z@+4;5TXW`mF3{Ix1j?1Xn%x5 z1F_!6NJn|3fHxe?HSbslHOAsB+5J=Cblu z0Z1NN5A}jl!sm}PhhD_|{{YG^bA#|f8d+%g5BXV-#JvWaNZ;#*i)JlzAiH%m?0F}f zic_yL+lxm$ddggJ#PS%=9O~{T86gGx(y5R{%#tJ9m>+$AD@1rlx+*tD-1vXAEo)(m zqM-i(i0AA70N_U{D4OKvn~IeN%OfgNd>dFGjw%jiLg^?_g z!q9K}gx9<5I;iE}EpoTrqdr zw{6qqB9`hO`3Q|Auz@p}N)XUXDMKkhBN^rDI{IGPo_1x(_L`@b z16>B2{{RSD(cixpJNb0Y@Y_k=t;e${7PB(yYNo`SQLG}0ns`&{5>p%b{!$*}mr|9M z$p9fhBxsUgVMN~3vuP(zg6%=PYl`GN!X$G;b?R!odZOFg;%(y(#765Yb!)r%dP27y zv=v5`Z$`XiM{P@w2mT|C##3ooabT%VaRV+SD61ovqTzUvGnB9wUi76WAL0&pdmcjw zst2!*oqW|Vwe#*hirE^D;@>+j4yjvbaA_-<0`FoTsGnysT@rUAD`z{tj6Pchconz zXdKmK+0Y9;bkpJW_5T25Hmda7IL%pGkG|FY#I7oOWz_B)g{E4=t`ri?c3DVE5yFa! z8zpK;Bo(Uz7)*+jFc$fE`FPsjK<7ik%#~ISzz&C92ba6WOj2&fZ=0sJZ+)2Gi+%p8ReW98 zJ_YtdwzlreqG~Q3z^X!dzIM&442NHF!l0nrvfWED5HZV(>saB0tXV zeicH`hLm?oL&RMKaj~M#x9B>ZH3Xhf*HTCAE6N}Ci#{P&hls7|t$115-c4<`%vTwU zRi7Q;O;Wz5UqLJDjt%jB2pH~{R7vEJH$Kns$e@R{>g~Nh&(VD6+HNb6G=>)GM%;YP z!_a+iz$`=X_wePn{v&tdgGJx1!KYd~c^aWEv3S<1wGSaCnNE-MGNQ1cpszXBIiVyU zPI-E`aW@=CDokh(Ah&EiPRHZ?D!vVY9$rZ2ATVm;O>MaTdRX!q> zt1I{_FQ_7cv=j%ThDEhuLRuSx5vI~gQS%FJQkGNEUSnU&Ww-2>$@XpKWK{@OId%>~@wzAwRmB2mY(SkW;H3WQU*088`zyx@bBRWj@nPYf?&x z+w~~&+~ThzDoRwG`mjLj?T$qL`j03s2f-7ZwihsU`f2r~#J~siONoFnDAov?vmyKNsOPSP;HUkkBsr4bRu;RW5Xx?8YRTtx4!Q>s3^BHb%?K z3by#}z01E5H|pKp9pm0pQK89)Y5d)>3g3fTY`hTsmJ7%RlS*v~N1ZXSw-%R5R_uPE zTE4;)7i2?NdYwu4(KdVsu8M)PO%$SL7eD@*Yeng(uqmKXF4UVE^fwOI(srKGsaco( zXZR&V+0R0MCg~*RXiyDy`d<`l(ilo%}&w3d(S&CVbmKWp_l>{~j!0k-~f45!r z=zKQ)qigq)WElhv=ObG>T@8Uc@4xOl)r|-PBHX)Uy9`^KOS3ycb-7r%tNV|5UzOSH z%uN3P;&rMOEtqX7ryEjy;U;Y^t^oa4Q@jia~wh&xfc*!el_N;cwTg~koKPI+VOw& zHT!uE^Q))^wV+Xd!lL5cR(H2@?JF8D@M~H;s59@oKIUo1rA4ng04%q|f~vUlSsp7ng`I&KX+Vn}G~jOU#?IIN%{n6$&F(-N0K;-G{K z4=b*7HIhFSuA^EHEj&F<>HMt+27FQRGE0E4PhH6#x&Rsnt#n#;fiqW8ECi{ z0OC1(4c*dH5*LgDdf6ctWN8#YMN@ zP03W0HA6g%kAa*bD)s3I4Duf_}~@4=b*#^Hohmg&wu>2DzjvQ)}~8 z46>&B7Wq?JAu9xDkqweZzEh?oJp817YL>@~k))!1{{WutD|`0#iYJ5fuF7SksejBV zViSrhQT804z#il)^3=l#V~>S>R9_%uz!ydCg`TpM1^ybUYND5(UHm06Oum3 zJV5J&oh}25bVcR_`YhMtA&N%)c*3CgZ77cPY8RDAs+KCwvinMq({(DBCRtK^)*Oc( zECm%FIh^1ik*!|~z8}NPr0R7VcxW}&jgo)#+Qjj9$HjPyalo+C%5^C zl>{M0R~T7yPmKJFBYtW=6g2ZCz#R=;?n2M;99(EJBgExtsw}alq>>MlLmc2Nb5L%= z%9~?HYh?Cj>fAk`yDBJ)N24m^lS-dQZOVOCj-en%p4wYbElHR1Z^%-?SPaT(Dj94R z*UD?M@|zT`)SAAa>8GH&^#-)u_+6eRB$C4I8VjqT8qw3MsJi?eL})4>e`~DSyQM1p zw=S0F%NDQ}e!aXaJ}H={!zGEHQD3#N?n!XEvZ6 zSW8IMSMAjLDxB=7LdZc_edwdpzP1%iL2htn^M|O5F4>tr%G{Z zlMdUtS-2xZN}eR9LRxktwt*bNlw-S&D##jVA14+wQby26h%G1T-ZVt0O>T)eDy0@KXV7D>$>S&R3tP} z0mj_smA2~qwp5jSf|784gzE!NGM;VM(Ad_pD+(gmhSjTe+w_#fTW%)aoTav;A69#H z?~W-W?fPnD^E96|5lwI&NPfYjv2IzF>cpm`2c3mbmBG$P92Xpv;U_(kfz#ZbN#~j1 zdML5Hj3?DaUb02CSN{MJPi0Obkp#2lp|DlNJ&!Fva#P#fof01L4IN5^)W(+{fn$Fh z6bhVMw&Qj9jv$z<%&R)`!i#S_>yL2doRfvLpQZoV1my2hvp6XcsGQvAeI$8LW z{uR$Lie<04*2Ma`VNtG4yQe;+sX;$5wMGrT+QB$bCy4s`heM9J2RpSA248jO`5$$v z$C144=Kki7;HpyZ+xNEm;g@d6kn508C4UHhPh>?~MY4?c0X|^JKT*(R>gyXQWPso` z(*17l-%6Jw8}!aCCqZ@TRbJ~=e~4E&!BFe>7}9u6P`B!SKCSz{sUgQ` z5;oG$sj)RA4?Yx1LJC|YsI$j$5cK2Rh(v|&@I zP#6ax4G3*XbEjea*$(HR&OdLo`yY-X;E}kEU1#TCW%93T^11k4$RE1LkVEXY zURu<60x|}0eTV1MT7t6eprv8SZEdBK$dsvELWkl#@%@gyx)~I>G^!Ov9A0U}tz3$N z9O#qN)zJOF`00srIBbGi*CjUc#Jq1!&Y0Xbi8 zozGu!H_aO%FLywJ9z4=cBW|{9;*LC2?Css*e|@g6443&~%C((ST|PvJ{J2R$!_7R9 zdW5aFTUZCE<&8rcW@KZDo3Z}@gnZ0-F(z~`I=4@{7?z_lF)g{z{oN_-Fcc7!;~DAD zXuBoIB`Isv*o-AXl-N%wWET*x!a1bpuebnfj`2}rhc_zHyYu0G7l&^R8)06%Xg*Ev zeuwT^XmUcl+I0{(!w}f=k3d~hi*%^q`a*xC>Y@z6m6Gt?o2S29S9zFi!@`WbcipeM zr`2a@C|h)wrIzwkrxu^7NnU?$hgJvo0I2}d)ZMFMT~`D$*X!OGZy+!95#@?q~RwW{`#MInozrKs7mcNol$$&PvSy|^D*4xL}_zE zgW4W-3Lc?Gr$l=ZmQq4b^3(2d-$V~2Avui)M2abOK@logDl1Py1~c^6i`uvv>P#Mv z^GA!wP~+bkn0Q>-ys0!MDS@2n@a+#&ff_N*4Zh3tRy)*|ijW*n6{L+`fXQ`P z{?<%zT0$6?AkC7uSKOYuGiW3p;^$dOwAo96K6q&PEhDzLKq!I4Cv@A+WCevX z>XJe34ud32aMdv$L)o&k_PfP}@nKA9bo%4S2_v9z>YFo!Lpa%9Vey$_BFfvo7rrhx zCA?UJU#cl+1Ov@_#_&-R=Z7TboyD4lE4iW4^Ij+y+R= zptV^1UO9TJ{xhmh;hLRO5%r*U<{dWiidWUSa%B{6j^zu9Zro%K^rm zI4D=&TiyeL=QfJUah$fZP*xD$4;Qyh^F;m`Dr(f8JbJ5JY)%x$KIvn!__1>-XFBAU z>Qa{_YRM-juC#HmFi=@ZeXp}4DS5zDXokhVBhLw@C6_;V$v6hu% z4iA66skoCaGPFD{L)r!HXTwVCes#GOmARindS_oB#gGG`VUxdX%L+l_&sotgR`i-)O>s z5_p|fN)@g-v|~z2LPm96BDRF7Gy%s;I477_#eh?friMZ|*)@=jK%xZA^nx>}ltHp< z7zMT0>95u97QZh>`b=vuLx>=OrDSTdhDs;`?WANY)2hj%R`5%ztM1BLkfmWge=Su_ z619p{1zC(zv(r_wGgR{)px(+=(?F_3E?=5=2VDUT#XOHE1a;AZ1C!=u;B-1GN?pM! zW(;GNhzf-!@@A3`T}Tz`QPSlo=U%X-%A#h;@11(rIZA@5ztE6%)xr?XW!|LfV4%1m zdZULVYC$aUp(d!Fqf-Sc@S`M*sErU5tHNUFAd{lEbd-%;w(^@+bD{#0k&0H8S6d1m zy-LzDM`+g9yj+g7;otABr5_b5O3U2EF~Ar90KUA3%0jhmP1nj(nLpn{a9pH$M%=$S zBM;~G&|DX-PBV9jN&f(goe1u{WJyY?DnfcIIn--Ztg?zwwJ3{|k&Nd?Vx!BLQh}Xk zyCjktJx|k5M*3OFrMGCK+_B^~tocXw(_&2*qJFAo*S8#QLPC-6pve6d?jzOPw^Vet z+A^PQS4!oj#v+x1W1$f}x(z5!s?nrUuJ;!l76;QsVicuRHLw1wSLddN$p>znQ$a0s z)LpubDEji$&?FsnHq>l_nb9kLOpp|>f3A|qio&j$s4s|$5kk(&q-@yd#a+eME>$u$bIxT)%pwE~?z8|hcb%R-e4dDSSNFHH$T zOyiPL4BO5F)x8bUgh=toUnNmWQ}}KcLk;)46+eKN-3)qOe_-DztdA0sI7%N zO&Qq9;v4O$jIdJ;jD*@-N&^Z>8j#3oMhqY*YLg8(4>bP(Z5flbbg-y8j0mJ0AZJZC zAqCN)s>LcI$sSnKESt?P_`-l)5<7B&kddywTL^7s6)30)TwWmiXaU{iVk{^}?O3uO zQr3~3Jsji&yP*k;+YT$Os|^p^MEyy%4#f_+weekjNmE1i(LYw;6gv=8%3X}rDOqi? z(?OPU^(Mv2teu;VDjDOYjAd{gP%hw6lQBwhXvjZp zLDmy7QU`vefpwD~l}*pSHRsQFLf8aBS5ilQ|d_QlcP3gIM7PT16td11+V$-Eo{O;IX;x9 zR&aoKRM`Q|x?GL1er2rnQhHqT)%X#P+F)h1l7@|yYp~w<$#&|$i9(l3xSIKrq64F+ z)2^*MW=RpHPUv40x~;+B){PGH+=^N%=?aMjv?!#WnL5j4kqmC}D)JI#nWLayfJL+< z+3RwAWbunBBZfN-P#0Rb0-UMu6A?|xO?Ek8x}eGG4}Dl-&Kg4N?aifzpvYY&=$B4@ zF)A+(|BUJg2!y|T9FcZ|G`nAPuJ1{`34ysr3@_j1RE3sV|wx)}lbXVBat9GjZ z!%edVao<)J;@Ar5_0RfSyjg&?QfPm)d0W=3pNhnf$+ z??&j%NP6ennY4*PpoB_}eAa@#rykmW9nnjp9uJnuJdBec?qwmUyNyDr)BZub$d?KM zc?oy~j{N{SXu|Msl?9oMb8DGJZjGUISyWgzbF8@iGN8a)GI<4X&tR-}Iy5D(cPZUU zUUoD;p;h&}c2wwfADyK-+OWL&Za95kZklP)2eyh`vN|VQRhLZMD3@z7pv+~Y%t^~@ z10JF}jP(Bh09`5BIx9UB-Mb|Lu245pZa8%@Dm&6bqLSk!xjDf4kGDbl>4?iqb)>Y; zY;Lx;tIbQ;d!p;IjW+RhG8CT&LM&Qq zpB4I(DpRdH7=V`nAzW5f?o?0r(edzH_jl`0G^Sq`WKs8QUy`Wlo*-^T)SZ62B1?&1 zrDZPX%LQDzWMCerx76y%+&(^0%BhDIkOXxWHY1oePeYc;2m#c-&8$xq4oxg9M|7c?4ZD!8BOU($GCO^9sE9khs$(FB z>a^d(lB=^@m%Q>3;+mIjP21ZB-kEUS?p(0ZA*itt3CeOpkd&(+s&ZGHWj<+8r_3vcmetU04nYA zqwr&qd3-qb1H{jQor$i`+zQp9K^u)gpt`4ji6#15Y7;{RUX_QFg?V6d^U9PuXG?JY zG{)yi1n%zHqJ4J!@J#V9XPrL`ihOo=>9z-5H$5yLs`Hua>u@ZZWIAY^^fJV0$*ICq zNLg(zzJQ>lEE3zCk`j6a3;~~QX#{b-)-}4Nk(A3EZH(`&{8ZFU?2_H%Z(X-V1&MR% zwFtFY&3Q#FNG+5)(R3f_S1u|Y0SCCxS^k`skPeA%a~!R6hN6l5`mafU*}?G7dSBiq z;`oJ&DwF;K+KR1NF#MNZOp{ZU8Bv=@l&GOX#zxM_ zUpcQzzpjg8?B5K0jxuS=(%?6{uRfG(e|J^w%|@pbNPSK#%T-cY`E;mYET@wH0Q;0H zuh{DZL+rWTO8P`GIjv)V*fsZnKBXl^p7d(`N_v!%R{pdUN`00{{T4m(=FY`pvhX?}J-YEQ;}c7qqjwc}6Q>vEe# zpwT2h4xLJ(FqJaXbogtAN|H_iS&pSRqty9|S5iiM0|h2?5#2zkXV;&>Hs3Fbn$ zWqqK}f(#GSM(cN4+kKCn*WGVDp5fBZ#6M9ZDXzX-(3%>NeJCGNMO_u`wIZUWNS$3< z4z1YZ&GSE?6r_>J{&?;8)&+v!&EUR+l@M%9gb)GK&r{R$!DX5LEv^3m1m6wHSBfpb zr> zN=i=^C+QJzNSweqv;#rrM(5x33+2!DnnpX2v#z9g0(1hp3j5oAtEb9%#}Shh{~zqg>m!Qe8l_)h3jeOO;t~J;Vl-T5HO08AwyCocAFd ztm70m!d)W+3^NrSN(z06d@4gG zFfG}@k>^cu2j8h4L}_-eTd_g}1zie!1;ULmv`7b`C|br(ZjBG$S?R1teyc}@80mW_ z4G$&!2p?aP`vLbCPKxO#l!D(ycNs@5O{cg&IwDBX+P}*Fw4Kw(%*cw`P)K>um0!pvvQ> z@?JOw*Hixhlxsu9+LO^#Fg@8M7Y^-M13}-Whx&ix+)UB!&D(rHBcifh> z8ch0z;_e+D&|;PV~OIDL!8i95S0Twb7MY z3vqun^zU7t0vml0r^Ab2{6KgS+UlL_w|DKoabEWWwynn&$EnH?R~96Pn^b#-B&DpG zboIub^*&%rNhng^Jd_znGI5O9Gh}N^OF-rq?)|4t^s%jY^;KL4hh$(v=JRux@{-=0 z{_EbT(bB;NiLG@#v$%C{4BkJlBNM}&pFyQ=1j!PF`W$vSFsiW{m0(J_=B-t&0W5LH$lFxcD%ZqryB11)tz#D zN_-jIwOO|Pr+Zx0xU5$d9!+M4wpHo0=G+|=l}ln0nF&b*m2%<$Cpa0^RQw|>4QO?u z=7aDi{z~_T@rW4qnsK4aVXkln`nWW=)RF-4Rz(Kpw`vyrJJ!*xN2}4QRC6YsP^73n z+?Jg|P*N0(g^r`K`u4`Cr;bQw<#5)Pp^~#YE@q$Z9efDa-_yrM4`NsU0LG910Ekl5 zhNDy=6}E>^rkqL_oM+q-o|x^R5?bz3tS4_}0BEfU`6@eWJ|3PIZ7uqlHoa#*cus0V zl2I2i)p(=_ISu>a?6g+b%bm!W$bO*#H2h3iUU*KA*~& zm1$V}t+q4=O$G$IBkoos$)_Qf#8=|Tbz>nTp+bT|PyDI`>JN#qI);bK#aCfxWJNos z1d>49-TM0b)je1EWLt44k8THrUDd5vmH6yB>LUu9{{SYXBN_FfUSnC#JE=eN`)GW! zNWdO$xBUF|Tdp1d0B9Y6{XY@KY|*-hi5Gg&(D!PvNJ#6F00%lY9y6zZAR|-t(F-#nm~gsR zY5*rsFX!f|ZwVA@^61`Icd0OG_XS~zvniBy$3v9Xs*=brRV6s%&8gP;PG6VEws0bP zQH5hyyg)?A8ws#9Cv6Azj}P0gzjcz~;!KI1kZ9GlyNf%#>#y$9{{T;#sA^Mh{{Rxc zFsn4nj(slWnIXEeS7TeQy!|fMawEo+B}kZ{(~kL(n4F^7^2^P>P=pUK;`y+{gTk6( z1-4t>Iyu%ks0~JkmtAO!C1%|;oJWj1wLH`v+#j`+c>{~IHb8coSR?_tP*(?v2%E`p zRbWqza#G-KRTf1@=GtGDxiq%Wh)$I-da}b5Sdw@U5`{^S;*yiavR{jbIu?g$T^X-K zzo8|>dH^-t3X{a!l`G@aHegRtZO|PzXbc9r7ZO0&l{WI9bnbLJ&u@Q(#+OIkFAp?l z*nRd?OLeMcu89$p&*BPjsV^&t87XC5uui2ck>kw6);FJlbsu+6dK_^{kqm=zG)?~i z+#>{g_ci|jN($Kvj$ZLt^XvCr2|*Ao=3Z{7^>x}*s&fiy3S~y27`WpMD5*dyLvBS; zAu22pPrQ{{Y%_C(@6qhAjU8>KL7*g1eyZT0pA@m>UCs+zU@yIxCaG z9U{59S9q>j_Qu>!pGLB#sx+(eBQ*-tI-m@pzddYY{n(Ne9BC;ENl8vZiPd)!ba>Gg zJi3V=w!=u*$FGsP*7jDM8L!BluWMUjr}t5KcAJrq;DJx8i`Te%k~uN zoXe3A(GHDC5oz(;Lxn|13*_?faq3#nbzvY4WHLrSXzs*pXVEntv8>Ck(T^wLBB00^f~{wPgvrz5#= z%b-S5!wdB;m`0_29<`E(%l z8A^R==solLUGUj?WiB7uKb1wr;SR^;JGlP<3d`}Kv&_BW`iXqRind;`IIWiQ0h1AF zPc#(_k;j5u{QZt~k>MGm{YCNglTSm?{YSlNIF18ZgeD*UuU~gx{edfdyXq^ zPK6=lvniC6Nm9lNRvRUF`ud3J_SXLZhd}oRxC;kwj*I48PIiLuO%cDtUz#r2i<$c# zRc4h;dK9KEYDe()QzexU(H>gaSk4Jj9ce2`BOJ5Su9xCX82~xri%BQveT-%?TnY>Nn{~yl0Oa-QgS;K0q#zz@k^u> zchHY=w&DzIFKOsO9^w`AZ|%Lcb9klj^RxFWK5KPrHa)35X#kR#PR|N&^Zrr^AM+%3 zIMcaLdod=L!1H`)Dh5W+)j=8RIer)XFGV~t+jp%yWNg}1%=6FIDYUgysuN#NMXoB; z!BNL^#h^deUp>q*yD86LpjO8mIk2=la4C3I@kn;1SonqSU2=UfZ3BDAWo)O`ujGU= z%cpQs*jL+^U#7m-?A;Ctj^8i2KXvjCXsq#xo#K9g1wtiieX_$zIV$9}bm(#0^Y8oW z@P$gWuZ4eyrDuFRCGPi(?ZCOD+g4`WTJl#!lH3sCuhv6<$%=xk0McAjXmMaD<-n2D z5G(RHoKR*n8M?W|UyxQXaJe#YrO9!oup09qeKsDxi#W%5{{WJZ^U4Gz2^~qm0VJNE znEwDxS)KG$lttRz{{Zaw_;0E2e~-9(ktMaNg|>9X)#R-y$`v`}sfdmB`>Dr49S4#% zo%Ww7LBsno`=6)7Q}$XPWpN#m#EYH#STEzC`>HqMDSS2JOUBmf?#*6Ph1s`^xbS5u zL@5zsFXdPm{{Zn!wm#U?{28yu;gK=h&_5kjXC8ZUIE;_;uZD_@OokQ2 z0F~sVtMcjxQTuA+v}1~;<$FbqmYVoCcukSw_s4~`Y~3^|F50%k#<_JUvP)%{!<$jo ztQ7wMG2qfjJxU7k+f<&>@e_f=iD~aUK(D=>;mytBZRQ#cPlu5BtEc^-o#BsL_=Qz% zI0y{0ZCaGNQ=k)qc>LMNumHS~)BL)x_GPYq0Fm30PuW;|S14|GCx8R)u%a#*PZZK& zM=JAKOmsAoRHZ3SB$5ZY_WgCEAOU4%1-edF^a z!m0dv{9@}qCHB6fwRZ=CdNs8wq`_iEVzC&#HY!51{G}Sa}%RJ;_Dc>+DVYE`C)cW*{gt@pHD zV@a7&q14)_Q=};lwCE{X4i0r0Sl7l{;h{vwk?_hK7xZWFKi})Sdb}J$YU_|+kw|#P zY4;b&N_?XsZjQx{$sj zuDZG!YS-VsyrRD+{wO5<^(L-6R;3Do$r|@CQ4LA+0ATB&fTUY%msEugn(-lZpoG?Q zC~>|jNFe(iM8B08g37Bm-@-=O@4dYu1;s&OZ#dZrbha`MHEqNAoY?Lfs;(i09z$q_ z)Qb8&pzE3seH9l@d7~x;Sc6oTl#j zj!(X(hId@Y{CeTpO`#p_Ja=EXqouLenC+Ei<8@~yJ1PGyWnFw>N68pPysrS z2;ihtl9SV1B9U6;-F5Sg{r<+0;}7GKrWmeTS66Vq!br% z$ih|ER*(f-Inf5mmHzSH-&R0(Rb!8NO4B6(-+yf_Ak`i+zRQwSPpeS?BLZ!FjI|S; z4Z#(pgy=|8ee@#KP~{~_m{PIVN=nTWF+Pekx9VsCKCM+u#c_`!F{Mop&t7Kxg zhD9*M#He*vm2*{t9bqb61m{5^GSU(+kVb}4nwh>v4xvbmQM8#MZH~JAW4ipZ(w<6W zI@#&%p*$yIaud0!foNB!NXpAraJ^O+jUybrI;)wA+83(E<);)WLyoHDVzG_-At}t1 zD3kTlZfz9Eb*70tPBjJMZ7$orM_myN>YTG9@2P|m5{i-2q13@qq=WK0ch_t#@~HVw zD1)zB?<$O#wP5O2y~-3VLBc`Cx(bO1a;$Td>Oi2msA{AMCmN6`XSGC1M^Z+n4JF>x z!b3k#(?kU-_9joVPI_pKDMzt3Q$!w`C@D9weQjj~XQrf;dlUFoC9pvX_tb$)zBETg zyB%di`G=?9U9_{KM)uA6>PknRe|+Liu&lpXVRnL2_Bfm7#0bT$F@@zwe-( z(vnF?&X(GwBxHBgZC6h*r8f$N=XXws(y20JB}_uITXi`t{{U?;(p5{rC48S`vXm3$ z`+YP}_13zSY-$@Yq=Ha79YyX|7}+7GbaQIYW-1a2hixY&t4WKN+T9RJxY$bs7YA;= zbQN(PNF#M#UzN6fTAYf|!Pg%MIyaltGValhmX)oFr;J zqBC*nFqcgW>BmxRiZ6jjIYG<0;qUa(+aj)-9TkbRbg;zc)Kl&>UTX@HcF|g|ZYl|h zPe2OB6QH^~D!uLj6SsA^B&7*=x$T`r*x4+(~}C>o45 zI`jke*Dc``27rg^a9SjUk*4UfLl#DT0P-mPCmY6x?P> z>(BwNie5H`Z+*3^y1-$`Dk=K$(O5v$4d9doTiYWAzN}$h`A&}6bx<)1QL*;&G@@hY z)O(#6)wrMg-qAtL|}eKQ_NjaN;I zWl;9^z$Ps~$*CZ#-62CvKZsjsC8Ob;>ndVxjPq1^5s?gf&ldV>4V)JOxh5G6Ix42+ z*vg=&DfGuY(m51?t4O$jYiiXVM++`>(kbw@yOMUla)l<~9$QbSHkTFC2Rb%RILXK6 zVyTJF#>wS)(63IZd%;e+Hh?tK>2da0^e7*;vhQyslvag}=4FLP+&7&xXf&v|VH0|Q!8HQl14O)*PxKw4CyR<(W* z2Ym^-a&=sMZ8W0j)?G%Z%&8RmibFA5B_Ixjj0|-A^~brS?4SWa+nrFlHsZMGsZh~1 zm7pZG%c;oEL+#&Fjg6FVN)ibfty*Ji-4O11K@1{H6e$Dw5=z`kLHxRna!AWJK{n!w z6>h>5muc*pT;|@u8Emg3+z_t0&;c!fFeE8s)r3#DEzr_g7@JW&$t==^?3&v!-N;nOcH+A1MgC&M?uXa+=?XC z;-)i!RcLEvw$ti;N^NQHYL3kV>27Yli3!xMBRt~Yhf`iyElka5*Xv+}pPgm+$> zS*cOcSwdcNJ1Hc9*ux+kW2bz8lb>wp_|I!!%970vdpU-|R@TFm=_!!SQRKGEs8{n8 zgOTZ055L=1asmh=bx{kLK@QliHu~&EDN-$(%|Q*m(u(3cC1kYwWmw1~sz^Og*qs|E z9LZ8QZoWki4Yb4t*N!hEpX-cLRI$}I#J|HnT`&ln*ISj5bU^q zQ-Gt%UlZbp{x}va%Qts+Y8;skDf#{z?H}S0)H!)>wHa~AO0WSXC2UctGBlFRFGehzD;mg70@30;LH$YV&-WLs(M2{L$q6X>owoFAv zXuj!C>g1T}WF;W+DoHpR$j5~=;!KgSC)dyGuaewJoenIF#dhu<9v5DlQ1Lw%pZ@?J z--H#3;r5?#_|@1-JyA5Pl`|1{P}*fu6Hlr=D7+=5KoZnD3@Ze;7ai7hV&*^a}@ z4ZJxZo)}3VkXyg{wNuPVXx&{nF}Sjgtc|zd`~=35(=oRmvw6zoUohasXC(0nLLFEb z{K}4g`T=ok%g>UN;pWF=P3z5nAM&t2#e?CEy_+qMxEXI=GBJwb#w(tm3h;1B_7C9tq_%{$^F&zu~jSsI+&a3DC&~V4gn%UwygSUtT z(eU;1UQ}+K({ag8^mvB0COu50%XNxPC>GEI>2awv`Cem60I-#^%!DNc2yxMCa|CZU)9i%|Q%yWEfu)Zv&zjnw3h#tg==l8cTX6Wg@hfG` zqwMU8%~qnrjxr;n!iY1!T8&>psYH?OY4sUGX9od(a@3{x0wmK9Wr!wojjN>k=dX|NKJ(IeH+b{N;q z9?2xebIIKO!un8<9z50&vrqp3M=4ueF&@>B#H9oCrFiM=4 zl)uDMg#Q330Y_Rs0>~sRb4Ms{r1+cpS?D&@>Zv`TmngDW?7q(^6-%|z`mbO*9w-qYK(JFVBzi+;mc&Mw@JA@l25^E2GN%sQp;3=rcb%x@!&JUFD6aahS zvOE5o=&%KTXo&7oU42L1)7q5z7R3soTtjUw*b$z6l#Yo~(Aik(dkmxx(?znuehCLP zxesi5)2JUpYv`$a2K2sm@4}Yfrq5i+bsROv}<@5zqWdR*4-cGl2}ML`qXg zZLckc6iaQPq&GPxb0y^(n$(Viz<78UYq=WgT?}kNJa2Ql9gp`_>TA;I3)tyFtk3=` zZ%U=3bFQs;-c<+UZAR6w>vUab6+w`9_{u8VhDRC?=`TA%p0Z+BIw5Z!V2TTDbS%^p%( zkcT7lace9fq1L)7Nq34B$jpRGQ9AY%TdvyOgV#VWW8#X&%3~d~Y2D+Y(z&~}%0L=w zNdk@6kOzk^4HgdD?qvO*yZ0WE{{U*$IZ_;i=IShiI%aGF%ow}D8Hq@tDZ3+yxTZ+G1%{RpoTO~*(w_0(! zT$mc}ZgEGU=sZ2gT`kWh zQW8?8+)t%#I)wnHoo!e`+gJ-ifl7i%#rEC!d0P4XJij~+tDCFOqgpo| z@eVOvKv0}qR?>0J#3gRFo?gXDN=AP@4UKb&@Ju4st5&040W+Ym(n_ zNhtv-1oS7M$(E z8}!*VmlrlWZ5P~Al1vD)<3tMig*k_xZ;DbDPZa`gAmJFZwXN-UvvsFI)U=wefa|8a zEad!mC69aA4uXg7*T?%>=7FzLG~Sdp@%V+Rc!AsMeM@P!FLo+Ysx?L`a->=mW}j}J z%wYL015>r6`fek)b;bW=!AeH&QQ0ZT|qag)R)~aInY_zQxs+YvKL(sragH zgD7UM~Bx|QJI|Wfjyf@nF-)|6i zZtCn@cvro1Zev+i%>k+DOnMVD=TqPah+0%zNfBRjn!C0_^TR6xQ5nUD5(Y&jv=ZWL zasfA9>I169$n5zzhFr75PjduqZRi7tZCKN-xb)Y}S$-dCk!-8mWiB{P(xpUAHVj2h zra*pc2#AZCtwD87O93frGFq!7^L0PW!w3LmjaKDC_X$BKa&^%D*1J*T-TJFMDO(hf zH~>a~RgppNk3--C_pN9l8zREEY>k?}ZPeB#+tRHoisu&nb_{eGGZ(6oe>c^M{DZlK`c%N`_;ldof-I}@R>vKevse50JSvC?v#31|)@ z{{T}f_YK>)6;!8#_9yL)Lc4O-cA4eVUAK%Yg67%6hO0KqQXXOSN^K1(N|#SsnDbh3 zk2xF)zyTnzmH4AhLqkNH8v*CK?GERox*M+>>Sw`RF`Q*F_jzcT$9cCz5CO8oR^DE2 zx>s~Bk zIggK!*Pq8ycj&&6!z7O)CcZg)M&9~-4FRvH3DYk$t?H`InxrkZs)X_+3>MIo41TC} zSo?L-4voSftgHu;qvW#^@!YzMILaz!9nC5u&LkWq#@ZzzIQGK9{MJUeT3HxAAq+^z zyn)c6{r>=?#H(5+l}%ngdV3LE4wWe(EP9;J=7a%^`}ff?iENz5q83RHh_rQ7PmQ{S zo07L`M7LRO^xISxmm$BH>%~$KwI{!%@kToL#y*Eucv3J%@cl0Sg;ntg`ct0Co2C4!tp-ZD4VnKUPTI*45w~I`UY%becB& zNi?XKIb|dqg#t13NKx{`PO3_B;n0yaj-}uS~}mjqgthr z6j@Hz8;-UmwxuZx4i(|lkX!5D2aW(8f$OTaWjWa)w`1+qT}z0;h-3nf-=ea7JKWH> z8-6zan9=}lp>$IrO+W!5xoVb@QZwz<0DE`(>x{>CJBU32Bh#W^Co(*f9e99zk5#O8 zf%>dJiI&jOE;d?uHpM!>S1#~Zl$jD`sfgtJ@A1qxW{;z4dC*)buAwae#*KF z{{UBst{Vp*iLbi#GR9&&D?OT==RCHXYD~9z^ukNdIC}eZKi^+H5t(G=3uaF%Y_H~e z{oUHG@ov50yEVMNyRPS`Rb4}h{68}xZiI~c0I&zyBk8Zb;$w__IO1-Fpbvl+zAcwI z$;*73^Adf;{j^H#UxvNG@gKf49g^A_Te2tI6&71@rsIVoGkm~yO7cKMZKKvn$6z~< zG)%16aWRb2od@M5vGC=}$!sx={{Wp&!FreR(y49FfuDxX-TXiHUJDSQT-8v^jR#0| z=uiq|NPLlwYj#_V6%}JVltQRy|R zt<;-h*rz!@Z0eIx>98R+$=MDqd{Ej#a!Qm)7{NVsce#a-K)EEUVp-F7{QIV6?EhMNFbmXF=*o}OLj&WCUT=3Zc z0BGCu&3%J{@Wybw5zVW**N^yKAb9ZIsD3Z}Sl;{TRCStZtkx8YY*euxBN5QR;r-*lcL$~(%vN{cS2*OJpj%W<_J0Z9O>K{ z^Ia$O$w+0xjNp0pS#sj|OMEK4Ovar%XJylA^1}s}oU<-OI);jg!COU39^JZU8qh<> zc+NAa)<>G7n}cwyf_m^Z-?E$V(O0twJkJ>EO`>jJw)+2DOvqS zeTJ{FeX(qh446?WgE!d*hVwvIm$kYa+jixZN0U!mQe!%{USYxNLXvPnAHKINk+Lv2 zY_L;A_+~6{)Fay#6h-Y-ZJCT_MiS#nDEvQM9RcV1!FU16RaYhC$Eq#3t`L;usEs-X ziBbEsQIh66BpA+jQi)0Xee_m^?RF|Td1dS*ldn5f5P3@V3*ZOi`d-{$toUrN#c0#3 zl0aqhtQOoO17AA!!-KL|%;9}M*$y<~1OCK^ZDY!TW3Dt^uZ()r7&!6|&(7 zT3k}fd#m5+s03m`3#S&8B$MCUT_%)3vXgaZ(o(Ez%54FDN}L%W^w%|AA*nSyype8O$lD;q-6@zxUF4yMycPi>VCdRdnB?MiZyT&K4C zZlr|;pdOkmSu#TVX-dnC$psL+;rNPtCa4!|30GF%(h!HRR#4hK{{T&IxF57Hj)RKH z@m>QQ%p?WmKKJ-)z4oHI^**skd9d1u1fY+7eLDw=!;-ex>2lI8GN5`Lb$KMRw2W)ZqL*=0 zO0q}3qV1I00=K+4!G|vEi}NY~d4s>_svaokavEBG5E@<=wf+JpTNDdgDKeT$ys_>z z@?J9(j(J~J;c_vo3tYt93J;K!iOu%^05H}*OlRK9Q5@~1+OLW`pN3jL^=Jnf{t32D z#lo(tV!`7jKl-%?K=IKs$=Z-|;((%mo}Ryb1j6e~HfE&Fav}ULC->L87b6K;R|~7g zS5WBv^%EO{D3z%vYjF@dx<7qz#^oU^Q&%g{v;P1UKfZ=ya+sB=71!a8?~mVH?A#Fq zt?@{?a6=>hF#Yv06O_cwP28`-&I6|gphSk^GRxpiKeB}j5c}kLhJy`+WRcTlFB~ z2375^)u7t^wOXP!9ZRj?p5tD2p&f-rR-*?HdTD6_v4zULyQyJ8cuuRPYPE&RtGlUu zRIg5|=4!Hxpc>3SElMPN>b>nvw5V5+#aaOfmcAuk#Og`~Du+n-)PY#l-==Ar51Ir{tRV5QvE z82fo7fvE$k1DcvV&wLNlQw~eHiKFZe<3tWh$i&g+KBM)~1CnoIL2YB(L?E+rXP(?B6r zOyzLe#kX2d<)~^EY_2HQkjp>=jTO48*>yye;KEV?$88(}k$#Cf%Zw$GdUn*(Q%V{T zJ#MJfcS#BZTqzNq%I(t@uVlsO9_{U&0nN2(i^T_uMtLH5$4kifQ2;5ia z%#|n2&VKqk7_Fhq=R(idJoicE@1~kGR*)Wa@+DbmZ=#O9$`j%vNrh^lw-S2lZ2=`a z2t%uwQzsva6&P_}x7SosGgYmH`Y1Zw z-elog7b<4$MIn6EoO|d_G?i{hcA zD?D^o6X&oj6YBSx$pJV z-yJnC9G3NFTXli*$sE1Dx}?Zvt3`XDOB3qi`gw1b!x%zB}E{Y4D8NnV8L!m@@3 zIYlb%ZaP2We|;?YK~_;>xi)tBY0^>Ve|-Ss3q^bdfkxEsa0WvA{q^tBf{>Cz(xVYy z`GxgXpzI)^+1JTcW|~1!Q0<|d6i?JBDYrajI9n2J5lvmUWSJBvY4l#xzvF*;4(&f z=?R!QsWTIeYK7}nm_k8`8PHeD7|w(tAX+Cq?4+rbw&b!_`bJ80Cjy88T-#J?a_Xz| zn@^W?KAMHn=pxl=xf>+I?Q)45r&G{sY<(#@h*fKwO(K|G zeNCQO^o(eopeC1uWNM-7`%`nuqpjvxQ7ZNWQ*4b6QIU@=Q1JHdZK+I5s-#>gXP_fe zbNP)02103ksMFh&`Us8^lp`u2Yt7k7%%YlAXbhFce~1Xqag7zS&`^>#x|DRQUL)_w zkfst!n>aYvgsw}!8K%`|bL?aqqv)u(*OaEzRuqwgomyk(%MqZcvbaNLHmn_%-FnTN zOLE(-yt2|y7M7#^I_^swDduWUC|{0CU9z;S%c_ZY*P2t3P?VuPQcrWFp2sjE03795 z-caQ;zKCuD+X!+{;!o2$WuQ6@R~pmWXtgaGgL|4oCIq&4hV#( zN*1EBdS^HT`wcAyG>mDmpO!|FD57ncsZpMnE<`zTURu)IZ2+Kqj=EbRj?&cF&|P64 zs?N5l^x5?#m6w=lPO_$zjJTtKo}W!C%u9eOW*P*jDzzHmuKcVjWogbq9Gx#99CYiA zbUA>V2olEqD5`6A_sYYwE=1cBEy*(7VB`3cE~z1E7|*3y1ZN}k)xIwens~Xv1IblQ zlN%)EAg{KT=h|C}mY$J!DwyNMrZiU|^ryVBmhEL2OdXsdX<)-6DeG?`3Yb+^dQ_Sy1unk0LS@oB`aF zk`Gba^4DT?(H`kGg)0dC!osiS?6%n6Z;Fh~x{m@H`4qWGcY#(9x_Jy|>y25nisoaA z=CkIIek2lW$wSFR&G6y0l?PpcK^H4>7&v8OPatvbFi$K1G7r;69CtOeT~ts{4}r#o z+6k_Bd#b{eVa43!smFmxhc2A7t8luc(_SpI=9GR5+owOtRkv4$>y66d z=OR=H?6_7`g}M`!djy~p?moZO`Rd*tGZAGQwO2n3d!(>H2tv2vi*{=WZgnOECKSTT znyDqsT>9rn`G<7HYEo&CJ_{{X@^=4{PwgG~?a zHCBNhM97khiEb<>$joEoCYlMZP?%~PNi&~D+GHfSjYUw^(O_P4B(wF`9|Z- zdC0`^Kg&uj{{U)!j{F}Ndq=tS+M=6cqqmO7W2~>GC$t#yR4a{}W z>q=XyQBy%|a!5Utwf7wbXB~x@SrN$)s|wTEnIz&E^F=YfQfS$_qrbz~r-D1&Pk?8` zuBE%S2J2AmO3e{2u!l=kBjSY$KI}rTld%OMNV*5E8B^%oH?~p6Mm5k@@sG>l_IlpJmDHG2i*G z=l=i+lg&LMT9V5lArsN(EkmM`8Bxgp0M~)}Y6hI@>3?FF4h?8O^q;8y6s#(Q-z87A zBM2mUU}P)QGEP7E?V~f9ppa6M!yhnd8uj;Rt4;0j<>7O8YLF>=so|E#xn|6WnKJ4% zyIvfZR+iSFl&MZMRG>@lW3NoB>!ur*JRmiWBd&!)4jl$VrJ7J20iXy3U46dmsXHUE zHp5kAHL#X5a458v(MgDHXkjtDx0Lcw*Yfb+^W0N|=(Q8v=TJGb0{-_z#2hjSMms>& z&gr#p@I`bg@+rGX73g%|DTe9qINM{{R*~GCV){I`H{UyZlIBEK(ymDTPyMi6z-pIc=o68DW&=OIMhbb;l5R@*_HH z8yh1sCbAKIeaQ(-5b+nz_W(5jpAu*R;%ew9{{R@CFzQ=DHkskm!zGH|;BQT4hU4@* zCN!@ps(WdU;{O1M)SS=zyk2NR0Z~evTc}7QB|)gL8t~HNO%-SO9Zz4Ht~m~Dk9Av| zNfvqwt33tjduv0>&hLr$izfUg_-s#xn`d_^cRuy*Em}<*e79PU6AGg@92|1 zc~HHerBVDHt9KyAdAgL%*Ofz5wa!jkVl^$PO()3&5>}}z%Yz_!Sm~a+;Um9MT`K-- z0_fuyA?@Fqy})RMEgin7O}OJ&lVPth=OPw)dDDTlXy~ z-u+SqNtaLV8`NYS!RDI5CArU+qgsAV{{Sj-T0ULa?KRV?h#j%%)W|KMqZ#LGoP55i z3zh{WG%L%K0p?yxRf1Bs%19q_75(++e$u@UD`sVQkFWSuUy1#`-)gqa#-;6N ziV7yu(IQfn{w=zt+X z+=~Ial>ACq_XHaz&8S>4-ln5+?`l;Y>Wy(i4N|)vtu?6cy!uyQg~Yy(*tGbtzxQs)psJ2U<#Hsyh|31al0@u=L72eX4KyhDY<`Ey6_FXRBrhPny4cfFNgiUXD6Qe}Wo_=(#OvV3V9$)IifGk_o@7sk*=g0tejF#;lHU_U#2W*h9F#-7 zI*%VBLGaU5o<<>_ZfGyKTU+#S+;zGm$6XbS!`>FGy`7!6b?xJ<)vZ?L#F0q5TecjU zx{dCYyoEJSfErn-yz>bnRAe@^1*J+^4>dnd6~6#MKbq%xD@- z5Px-O4#iw(yKNfvr)u3Bxp%PfuiW&Ce4Aq7wCc9pDt9T3F)gQRv!8Vji0v0w4r6a7 zLu>L-h45dJnyDjiXj>T60&EcOgpCKm!)mfcg?h^Y@02@TX1^`ogek-G@gngEbh zx4E|sGKH}h$BK(_xl}5hJ(|2IwW^xTL3hJ}A=cqLK05smJ0XNL+8!tmD3q-vCk=`h zL?y~*IX2Qp-7kMi)RDI1Rink1^!z>fCA9Dfqk7h!J!*m0!4+F83&qXZS%KlnD2B|4 zPSooRM&^_rZZW}5twkhc0)~_b!NAYws<@igk~|iSJDK(l;Cqo*hTzOP3|Now4n%Y% z&JFPj^4mf(2et|^k8BMn-~2$B$pmA#c!d<*$h)Terpaa0@P3k1;Xl^u+6qbPF@oCA zPri8PxztaJWsMAvO^~06E#)q6>)^16TR~HR`+(`G(*`xladUvP=OU~Wj4;y7+T(;%QYuwe!jlp!9 zRYIXuyd+z8%|535Hsvi2vGWM1N%~aqzH12=(O~61o(KR772a_G*M}(d z1OPmO&dJ1Zv5TW{Cf&+x@-R4#YC7{Cn(~rKuBywZcuLx9AHr;k{?6^?uU5QnCsR7K zeZeQ~jXru-Fd(biGZIZzpcGfxMepciNEU*>o9Ii4}<|pxf+9rwK1rnRQBn zrp-1g8+Aj^go2mcBrR)K1U5p3mmXY9h}}eiKohM|{o9-I*nHMYIt=VtS#4=HOIvLO zxPIEEfKII)kb(oJaOQ278@hEG15Ywe{T7Bte_5E(lGjjZswINCiPRkcYd|!0 zJ1ph6*4?Xq-_R`^a%&A+OthA6T0Hm?B}%BhPh`w`pz5M4&zAb9SDA0+%2VgO$tqe> z**d<)nbBkOKldGug1NKz#XZ$L+q%V*+7{IMG=vm1>`JiX%U8k5f;w*LTe2U;4i zaX{6+2 z2FFB`9gh%LLx3mC-jtQC$KmDj5*pUct!&{SEF?G1h^+yup-ShY+xBIPzx$m)x~q~S z+V?HTO1cws(5q;1`)SIJHan3ji;T9&LkN(Um@->DRF}#mwzhpqu95G4G)^0|7SS3y ziLeii5NP|T=&VF>N0&Pvvz*shI=7jkoIx56U`H_1qk$GyakFjx*YK;ntEH~~8%=Rh z?sub8=G0?}7TXR!5(3wrOJbWe5~G|Yv(zPiS@JBUmmi2Q5<5ngi>)80)y>ct;1-P?9GsZ75vSi6>A0radW@orLiCnO}VJhhL{o3W3xhE8@Jff|o-y8i&ub@?x$aJGr%5@bSSkZxLZ zcf1i}z&H-RsE(xUT1}-xyWV9fa<6gBb#8M3Tth^wIq&L_tmEA3jn1;>`YjXOIRWuR zdwFd$OM>OWJq@N+UgfFGZ3THbQ;w+}e!LK$?WLr3n(zTeCRV*kDzvXwA|}C`c2{Pk zN2W-rIn7GW6t`5`G1oaE7#R1{Oo{Gz4eLpFy{(M7-7RLiH2a3}x+-xViausNAu6o0 z>s(Zpo4`&xV~J4Cagqr4(^(vlL@%k)D~{()BZX^PtG?u~OS|@R-`zV_vWKR?fYm;G zIpl{%18C$x^nwO*euM3-c02|w`57S4{{YIAwN%6wtOwML&Cp3`m9G7b%K0%`>GRdXll84Su|ymmgL5av&-E?JU`VV zr*4|qXUy1mVSj;l{{V`y96KHPTuiWa4L|+Ag??N%u&2X%43_|mCdOLS6OIk7epw_A znH-1cHIc>35<5-k{DR!%;TA#5>HH`D9kv;&w(LTkM5-l9HY&1mxrOFM|fbC>fS1eRj66#5F- zNkPYRjF0crUwL4r+W3>SaP(fZf3o9f3XSW$TZdDD##=NR3@8pM9ZN5{G1YND^A?ex z{3BR@Z6s-qIPa9GD)KeZWus^T1<+TA_oiT*vy5{m}xtxaZu zWzb~R!MV%VWuHFyTDA6ad8gU`k z)VGOmCxTTWP86p-5>hZRfxp0tSa4Y!zqm94zInu-6#PNb#rsLWmcKQ$KiRj~t%BVz z5!ZI<-!+COUDjj>@7lBpZKX|s`jnSy2?`l5Hc*Dg9*Fa^+>B>Eugc1g6|uBaPUq92 z(0d~eEAk|j+PrK$JpRkp{{R>pl{09(E^ZF!z~p67tyzw+c!E;0jtN!|d=-O_x9P8+ z@YuU-)-?4YeFH9D!x_#U0Y3qMW&GDeg+QsYH={01b<_Hv`8tZ*i2-`D-qjCR8?1NJ?LMVV23yut9eN>-lRf?Ot1< z!fb!;`z>#>IP8}x@{jHNmF%|o-?Y7&*z2oxDzlnlss#>A&o)TPIU%xA57#Q3_m;~@&qTI_;VBsU z4SlPH@XQ=2Kx=hhA>%wxH!C2!pH6{S^n3exwxv<0TXz*sn&W{hE2m9bSDr^X30GWc z_u^sX0v^z+*`LHQsIkR*!SLev_gLug(O9rNSzN1b-@lR z)b}58*9*nHmm@W@V~s6uI7hV6%Zgh&sl(>Hn!GAfH!kYBHz9|T+iRY=MF}`0IN`_o z>wN@A9u`J-rGm?pWn@Vx+S4dIr6v`xB7~ISzv&7ePris@x7x4mXdyP;QXN~4jFmP| zQ={p!gFMt)r6|lv3HBqVh}Fxr@%9!9xg2%K&baN@xk(8B0K#SQRom_Mx2}3q%5B*7 zMwALq(L+^SS{BWO@KxUdnb7Anh5b}*Rm`iiZRnR9q=n3-vg(K2pdEgB;t=*(E(`Ct zmiR$aZYU`9(kbu~ZZMZd71OS`MX9yLtLu!U05R>Ua?*%#Ut45w1w&os(Qv%l;II_o z0Cd-=DRXGQ27p!+p4#CHyw($EV>isKlix$+2%$Y-bv)z zvOS2`2{xqC3TaY>9;Y2qW-^tbLj)*lY?bUb3hUuxhO04nxA=7J?)lPRn8hWeNm5A# zC>`~w;hb(*2n4L(65%n<4vWaI7{3my?`7)p9ED1Cagw9Nr3V<-(>PZhWX%AT^NuUP z9T_E|Wh#}qQKL&-Y0;E|oPrcFtz1*GL13(exQ~g{LK~0U=3f;ZXii7d zQnk)nU7(g(DnCtga-=i~lamURM!nStl%LGuU3DeIvR+DtNBZllpwi(^qp{bNl1_0t z^6LDA0D5bLSY8H^9gBC$wkmDQWzsmP9E~HB0F|oK2Q0+(uC_DBoodm9)L-IiNI(Pe z>mi-NgokCf!s8sEYOe}c#MYu4KwVv3zt5@{@C|lXk@3JfqG~_Hx#vg=t9AbX$EBUX zJd=#$qs0}{{v(Yz*ej|I-Fum8{j~i6g^%WHV0PECG1aRo2INN+u ziSd~U&Z(LY{%w2x9mAqCc*yZf!trF(*Fq65IXy6S7jUZRiry?8)gD?KyC%AnsSc73 zm6rrDSVNlUqi8kBvJwn0N<4zBVzlv1jA?Y+N{Ozve1&w;V>+SA zY$}%iac#P=4zBS=ikfmkK$2fllvABsHM%5=lm)_q;tn+2S`?h;L@;T@y_|Ks2Ej8A5w@&|Kup0#yugR)phWGSHq!P6mMO(VMbxhD)8sxVoK2rj-nVp*hH)T6oPh z#NdIYp5T~cN|1(B!TefP;?t3m6s$VBn!qa3ua48vO-gE;TMNJ|{`y8(=~=@ysi@O= zkHw@UZ7Wz`VRrMGNk6`pAw11hdu-Lg3BtAdm5EyIJUF4Bpf zv)B9U$|NW%nFk~tcFG%qf}Ea2>Oi2msy*iV_SA!roWz5T5!`;dkSH!?rq3`Aa5XUG zv*WbY==kh4FyyP^O7VqT~*~JN+Dn0T;*Ab^4uM|38>ue zr9=l0f3Bcfy9RTwbrCM&lIQiG-(C$1NrjmA6vf(%mzDUB-$rO#J|6czlCYHNS6xh% zx#95_0H&cb;=oQcGVm6em}IkLq{>6iHctY7O-Zr@hF&273D@Gg31wVJ#))CUQ8|T< zUv0auf-$^)9v|+XK zJA*mTzLbzBqD~Z`Q;jZnPsW+P-c)g}jgi+VkB++a>Y)9X4>keDjTWU<#Hc^1!b}%O{m+B%N0PCygDoEqDu|6Clu86bZ!0Q z)k%aUE@va_tnO4?rD||xuo1#tE-}kK+NyA(wAlL62)-vRg03pmD%Pt4Cb%FewWrT7 zS^f3G)q2>P0*)1_33sZ`@2-f_S!JziT1{(9_G#w?^+6YZ?2FjhacRl$x5-Bc>q@FnkO3RDN+ed82nvtzaTXy@(s<;YUP{}ye zcPBBRnRCNiY2~T7l*#^-%t;?Yb;m&TF!qp&DiwNkxM@ljg%Y2xhuJtThlN~MkxyHy z$xeCx9SO~IN^&OxrmgyIIqGt}_L4^*aiJ1z5#TEKc&QPpB0CYA0U^vB4KWd*SGjD2 zG|hm+tdJ0LyaV}by{#^~AXhhr-bQV>%`)Bs5y<26*IOrwT1dizpjk<%$9V-FqP`&h zx|w|y2C%tD?q!zMElk5@104d0(-6M(P?jQqw;swg%W)E7wTB)!NgsV#W&KE}sZd%{oT_t9 zt&m1h%&A8|fBp4qgj~@|w=yP!=7+5-GLt@aHTDOTR~e<38d2ru^HC?K*z3~dy?}y( zU}KanwFOpj!3R;wLp2;Bg{*`IAHW@~REhjT|a81{C*Dq?@ktz2?w-XR^ zOnDe64gMsgsJ?j^7fZ&HcJU#@#;=VE4o-oJ`h^%$=Ml8?Cy z_>-mE6>CP@g>K1C9<8*e!!gv91gLRJQ_KvH#heUeb=9W??W2+9$Zne{DOY@QN0>l4{0jPLya$#! zW{dMn{z4zMWzUBiVm$riH&1{nm-r!gBt zqtFDQ@`ROj!)tW(>8AMB5z552i!A{E04lS9@iB>#T3tdyM!zHTBj0QK8?VrnHXV;V zDMV842(tkoWTkN4WaspFoqW`S-3t1#J*(tBX#G)hjkuSoD|y8-u9?eZ9;2^* zx`TtQy+)`8k3DEjYwuBOs6|raG|^usB(xXl>4L(@AGUxG=eaoO-buc<{{Yx0Q)+V< zxnWyzVTW3m21Kb6nIULv$?}3wNbFVSpZy0$0EY&p1s0dO#TwU5&zhBP2g|^HMJNkO zn@eD<0#118kOv_^enU*Hv!F1Eo1~F1Z0v%gxDpRkOt_3EtuV# z@AjXN)9$eU0E_ghqah^SrSgkIh;*^HP?Oi7p0pg$geXV_^s}% z-Ziej7rX7V7VY(X(qYpe?WI1YS#eaGHF9H~4o8IFAu|hc3n5EN(xjCVR(%@icqCBb zwiX&1---3`(Pdrj9P(v4ce3;WqU)B%qs(NGztUf_1|)Jwd|j0 zp^gT}9Tt>| zIb?vMJ9N>5KNV}mTuA9&fR^N5(kLPVt^Xn+gJHf6Rrr-ccy$|6zp1k zvqo%iCzCHY?84_m{{Y(jv){6Yhc762K0!wflAH%H8YS;OMyj>-2^+@Xc1G<`?fCEs zr@KR`%5*rN_%26!AYk?P!>)Gv>yieSk0e}3-Gz>^Ty^7D%eV$RDP}Virk0kc zKBWQ2&PvjPN{LEABHspSqcqc3*G&hh+s=slD%`fj@OzhDy6eT6WJk+bTF`6?-oB+8>(Qk`I*GE?rQ5~QbrWu_XM`p~c#QY-|K z2Lly>M^Zd=Bm?iRyKHS%m&qqEnu)Mz9c&O=X1+Rd?lou%OX6Wvx+&X-Xj+$L8jDuB zV%qgO^Y2r<_vTNkwM`Uyf66emC_re{D(tD25>GXcIcfzNSg`qA_mQ@M-#||>zx^#g z#;Q{Sc{w*0MGm#fD4j2v75>S~{BX*!A4r+H3Bv@*(g@ zi(h^(OU^tQ)hfgkZiW3ztKdI5K`JNC;oP|7hn23< z!$|lKf!E#-rLPuS9@6%IX>d2Orx0tQ74rmZMx#Cs@GT45XD)rFrpuivsSb!H zJH#jlBtu3507_FP<73H^BNs_ zRp;Vjqq|m*j{T7HDK}**+J{WI*>aN_mLs=OQ`FXOnDA=p1q@UcBZi~`mssGYp5%}f zt9)4C5WWdT1E@NksPfxYu?Ibv~f9nv%u98Y_d-Xs7zfneCMw7C>L3Rw>THkmJ9@$}ownBA>ciX` zkB5!Dy!QUtx9L|^KXhsI$jPs!oh`?JnIN9VA(5bfa5BiUo$2x z_mHz1Dj0F!F+5a4yu_B<7(EjC>8$RJ=D)(W@CO&$cGK>Qww62e`%!df;}p9tFU&Z< zI|@E|U)!Mo6ZRTW*3y}imF@??{S;-5LZn4oQHZ2F4H58i_WI ze9bLx>o0DdGSJxH6_stZy02SRi#hfq&U&A8+zzuf5$cskr^#j_8VYh_;!+(_5yc0L zhS8JIog@sKE*^HY^9?i>JFNg-)GKr4Ya5f14lKovdwEW$n9=VzlT~(aVcC`B?`(N`INB<6gu0@jX2!mHds zA!9o`Jb>GSn#~TR3;nOKV#%L#!m;c{OjT^ZHTf|co?Un;Ei#5=rBB2|N(=^?30E*RWH_Ea zY+=U7DF9ijpf0*uutlBhs-wa)FlH>#!N8XWw)w1{UTt;)!5|GNcm=C>-8PM*v-Y;w zTQUPumtzPb})2*62$boEJGv}sq$Y|&Gjh2ciIxDsVwGw<7d<58|cYR;?2i6UT?5?Y*^_W(7>!n_Ta33p>1wFk62mg($e5>HTjgqskg1VLTFZ`kAv{N= zCq>K2eEDWK><-o70O?n?Xa=@}g^d8_x>S*?!UdYiO+;r^*_v%9+)P~1CB)ykE&wF@HPh>7Sj6!i|R zBA%$pUOcG{xYOV*g%FpLP!f3|8ZQuQ{{T%dA<#HDSN&}U>u^PTwY?Jf4vpC`85^l% zqdM9CoB3+?AlcKXuK*X#*?zmXx6~Uxru2K4ZkR<@HIp`dCC8Fzs(hM-w_0UM^Gaem z2L+Mm$HE;cTV-Gl85&~eZjxzw_2~AVm)D`xXn9oL$1@|5=bAq7ZHpYg-5bY)PQ-Vc zTM^8yyFR~iZT7`e;`nC09lrLmRbCTM+IIy{jdIW}sjMNH4ssHs@jQ~lgaFt|nQ*pJ zHBFw#a-=WF9Fo!04(q)@sy<_`;_Rr{R>XX#IA6@ki6d4o-fzG2plX{%gC1!eew z^5~ZBrDj|4+)N0tB}tFxD+@~0{B}?X$sGcL#(L-JtkVU&lh^oKd4X(g1M^j3Pc-8F zvnnaefv?Q<=di_e5{{XA>($wMz2!X+_1g!0G(j?WkC{&~nDQLM+q&Af0 za-^K3A$jc5RQDn7R8o5mw(&SNYU@h7A%tVww!hEiXR8*qQF?>C6}V_wb(BlHov`9{mr|XMLV@PU8L3 zs1$wLkEvP)^ryK{hg4-C977li_TZvYugkuFEn_%)xn*hdTfElXPV)%M!i^54d2f{# z4K^uFQWZg(qi^~6=H3<>LO}dP`p?r^Tvj*&Teiy�|IuxYzhvJK;NXQ)zp-eO(m? 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%0ADHMd`?Ws4!R(gBCN;(-o*Rr&ZsI-Ey~F7 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 Tmvn1@!=tu!KF}rH!oUC7nhf*_ literal 0 HcmV?d00001 From 211436f09ade8911d492eb75dc65d1617e0036e6 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 21:52:04 +0900 Subject: [PATCH 039/102] github: check in actions workflow --- .github/workflows/build.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..cd41a6c1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,23 @@ +on: + push: + tags: + - 'v*' +name: Build Release Image +jobs: + build-image: + runs-on: ubuntu-latest + steps: + - name: Clone Repository + uses: actions/checkout@v2 + - name: Pull Builder Image + run: docker pull toaruos/build-tools:1.8.x + - name: Run Builder + run: docker run -v ${GITHUB_WORKSPACE}:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-travis.sh + - name: Publish Release + uses: actions/create-relase@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ToaruOS ${{ github.ref }} + draft: true From c0fe173e4936f980421c256057f795141f04ee06 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:00:38 +0900 Subject: [PATCH 040/102] github: add manual build; run for all pushes? --- .github/workflows/build.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cd41a6c1..fa5ddd53 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,7 +1,4 @@ -on: - push: - tags: - - 'v*' +on: [push, workflow_dispatch] name: Build Release Image jobs: build-image: @@ -14,6 +11,7 @@ jobs: - name: Run Builder run: docker run -v ${GITHUB_WORKSPACE}:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-travis.sh - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') uses: actions/create-relase@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 3796a8704862c26ff46ce7c500beca7781ba5cc1 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:06:58 +0900 Subject: [PATCH 041/102] github: I'll get this working eventually. --- .github/workflows/build.yml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa5ddd53..536be676 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,8 +1,8 @@ on: [push, workflow_dispatch] -name: Build Release Image +name: Build Image jobs: build-image: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Clone Repository uses: actions/checkout@v2 @@ -10,12 +10,27 @@ jobs: run: docker pull toaruos/build-tools:1.8.x - name: Run Builder run: docker run -v ${GITHUB_WORKSPACE}:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-travis.sh - - name: Publish Release + - name: Upload Image + uses: actions/upload-artifact@v2 + with: + name: image + path: ./image.iso + - name: Create Release if: startsWith(github.ref, 'refs/tags/v') - uses: actions/create-relase@v1 + uses: actions/create-release@v1 + id: create_release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: ToaruOS ${{ github.ref }} draft: true + - name: Upload Image + if: startsWith(github.ref, 'refs/tags/v') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./image.iso + asset_name: image.iso + asset_content_type: application/x-iso9660-image From 82a02483f5b10952619f107ce76bca9069c617ca Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:07:45 +0900 Subject: [PATCH 042/102] github: ... --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 536be676..05e0de84 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,6 +27,7 @@ jobs: draft: true - name: Upload Image if: startsWith(github.ref, 'refs/tags/v') + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: From 035e980e8e9e9304ad68b3b414de731db0e3e44b Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:11:56 +0900 Subject: [PATCH 043/102] github: purge travis-ci --- .github/workflows/build.yml | 2 +- .travis.yml | 24 -------------------- README.md | 2 +- util/{build-travis.sh => build-in-docker.sh} | 0 4 files changed, 2 insertions(+), 26 deletions(-) delete mode 100644 .travis.yml rename util/{build-travis.sh => build-in-docker.sh} (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 05e0de84..b3100c22 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,7 @@ jobs: - name: Pull Builder Image run: docker pull toaruos/build-tools:1.8.x - name: Run Builder - run: docker run -v ${GITHUB_WORKSPACE}:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-travis.sh + run: docker run -v ${GITHUB_WORKSPACE}:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-in-docker.sh - name: Upload Image uses: actions/upload-artifact@v2 with: diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 10958c9b..00000000 --- a/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: c -script: - - docker run -v `pwd`:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-travis.sh -sudo: required -dist: trusty -serivces: - - docker -before_install: - - docker pull toaruos/build-tools:1.8.x -notifications: - irc: - channels: - - secure: "YIH2do6BypI1ZiXONyldvW/xt8O2j/PDb3sPzGUwJql08pItH3t3MPN3JHtKEBU7+/yFB58HbA2C8B1gu/oAGs2tqMCFYiapVUYYv5CudvMt+XkBzxgKRFwPcvPtz+lAjVbIM0SXDdlrfjczDGKPnEvCYBIu+ZYlz8dgn5DEVX8=" - use_notice: false - skip_join: true -deploy: - provider: releases - api_key: - secure: Lcs5kHe9HAwcVLdm8c0FkAb77U9yzUQdI5PmTU1AnFyHtrPmW1+9d6HeYSPLHm+cPAUdWKqouJNKW7s76Sqhz+4IDcwro7VkbV/fd9NFQCOf9Jb5QScmCZndmYVQUiUmy/7wVqGdy+vatKEsnngctT7aVVhJ5SrWoCPmcttUez8= - file: image.iso - skip_cleanup: true - overwrite: true - on: - tags: true diff --git a/README.md b/README.md index d054761b..18c0333b 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ You can skip the process of building the cross-compiler toolchain (which doesn't git clone https://github.com/klange/toaruos cd toaruos docker pull toaruos/build-tools:1.8.x - docker run -v `pwd`:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-travis.sh + docker run -v `pwd`:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-in-docker.sh After building like this, you can run the various utility targets (`make run`, etc.) by setting `TOOLCHAIN=none`. Try `TOOLCHAIN=none make shell` to run a ToaruOS shell (using QEMU and a network socket - you'll need netcat for this to work). diff --git a/util/build-travis.sh b/util/build-in-docker.sh similarity index 100% rename from util/build-travis.sh rename to util/build-in-docker.sh From f59aab9c4326fd1ec65ea15083b5a97e6fc00715 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:13:00 +0900 Subject: [PATCH 044/102] v1.13.1 --- kernel/sys/version.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/sys/version.c b/kernel/sys/version.c index c8efb841..8d3b00c2 100644 --- a/kernel/sys/version.c +++ b/kernel/sys/version.c @@ -18,7 +18,7 @@ char * __kernel_version_format = "%d.%d.%d-%s"; /* Version numbers X.Y.Z */ int __kernel_version_major = 1; int __kernel_version_minor = 13; -int __kernel_version_lower = 0; +int __kernel_version_lower = 1; /* Kernel build suffix, which doesn't necessarily * mean anything, but can be used to distinguish From a0a2fc3348e7218f1ec3ca7612500b5f8833a1c3 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:40:08 +0900 Subject: [PATCH 045/102] github: try to add release notes template to drafts --- .github/workflows/build.yml | 8 +++-- util/generate-release-notes.sh | 63 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 util/generate-release-notes.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b3100c22..4d355443 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,11 +10,14 @@ jobs: run: docker pull toaruos/build-tools:1.8.x - name: Run Builder run: docker run -v ${GITHUB_WORKSPACE}:/root/toaruos -w /root/toaruos -e LANG=C.UTF-8 -t toaruos/build-tools:1.8.x util/build-in-docker.sh - - name: Upload Image + - name: Upload Branch Image uses: actions/upload-artifact@v2 with: name: image path: ./image.iso + - name: Draft Release notes + if: startsWith(github.ref, 'refs/tags/v') + run: bash util/generate-release-notes.sh > notes.md - name: Create Release if: startsWith(github.ref, 'refs/tags/v') uses: actions/create-release@v1 @@ -24,8 +27,9 @@ jobs: with: tag_name: ${{ github.ref }} release_name: ToaruOS ${{ github.ref }} + body_file: ./notes.md draft: true - - name: Upload Image + - name: Upload Release Image if: startsWith(github.ref, 'refs/tags/v') uses: actions/upload-release-asset@v1 env: diff --git a/util/generate-release-notes.sh b/util/generate-release-notes.sh new file mode 100644 index 00000000..8c686586 --- /dev/null +++ b/util/generate-release-notes.sh @@ -0,0 +1,63 @@ +#!/bin/bash +VERSION=$(git describe --exact-match --tags) +LAST=$(git describe --abbrev=0 --tags ${VERSION}^) +CHANGELOG=$(git log --pretty=format:%s ${LAST}..HEAD | grep ':' | sed -re 's/(.*)\:/\*\*\1\*\*\:/' | sort) +cat < Date: Tue, 8 Dec 2020 22:45:30 +0900 Subject: [PATCH 046/102] github: should be body_path --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4d355443..8f2cb4e1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: with: tag_name: ${{ github.ref }} release_name: ToaruOS ${{ github.ref }} - body_file: ./notes.md + body_path: ./notes.md draft: true - name: Upload Release Image if: startsWith(github.ref, 'refs/tags/v') From 30a6d5bc1d4dd11abb2caf3b222b84ae3f5eceb2 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 22:52:43 +0900 Subject: [PATCH 047/102] github: do a deep fetch to get all tags --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8f2cb4e1..9a6c194c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,8 @@ jobs: steps: - name: Clone Repository uses: actions/checkout@v2 + with: + fetch-depth: 0 - name: Pull Builder Image run: docker pull toaruos/build-tools:1.8.x - name: Run Builder From f2eb103fe8a8c8aa2fffb3c6d8d043bbabe7a749 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 8 Dec 2020 23:02:43 +0900 Subject: [PATCH 048/102] github: dumb soft linebreaks --- util/generate-release-notes.sh | 38 +++++++--------------------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/util/generate-release-notes.sh b/util/generate-release-notes.sh index 8c686586..010600cf 100644 --- a/util/generate-release-notes.sh +++ b/util/generate-release-notes.sh @@ -1,7 +1,7 @@ #!/bin/bash VERSION=$(git describe --exact-match --tags) LAST=$(git describe --abbrev=0 --tags ${VERSION}^) -CHANGELOG=$(git log --pretty=format:%s ${LAST}..HEAD | grep ':' | sed -re 's/(.*)\:/\*\*\1\*\*\:/' | sort) +CHANGELOG=$(git log --pretty=format:%s ${LAST}..HEAD | grep ':' | sed -re 's/(.*)\:/- \`\1\`\:/' | sort) cat < Date: Fri, 11 Dec 2020 13:49:18 +0900 Subject: [PATCH 049/102] bim: update to latest master --- apps/bim.c | 221 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 186 insertions(+), 35 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index 870bcb39..fc3fb7b3 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,9 +1,9 @@ /** * This is a baked, single-file version of bim. - * It was built Fri Nov 20 14:06:22 2020 - * It is based on git commit 496849bab42290f42e9928f510a1d91534fe2a51 + * It was built Fri Dec 11 13:47:59 2020 + * It is based on git commit 8dd9969f9b534bd2453146a678c8fcdf8f6f3b06 */ -#define GIT_TAG "496849b-baked" +#define GIT_TAG "8dd9969-baked" /* Bim - A Text Editor * * Copyright (C) 2012-2020 K. Lange @@ -63,6 +63,7 @@ #define LINE_FEED '\n' #define BACKSPACE_KEY 0x08 #define DELETE_KEY 0x7F +#define DEFAULT_KEY_WAIT -1 enum Key { KEY_TIMEOUT = -1, @@ -867,7 +868,7 @@ int bim_getkey(int read_timeout) { uint32_t c; uint32_t istate = 0; - while ((cin = bim_getch_timeout(read_timeout))) { + while ((cin = bim_getch_timeout((timeout == 1) ? 50 : read_timeout))) { if (cin == -1) { if (timeout && this_buf[timeout-1] == '\033') return KEY_ESCAPE; @@ -900,10 +901,10 @@ int bim_getkey(int read_timeout) { } if (timeout >= 2 && this_buf[0] == '\033' && this_buf[1] == 'O') { switch (c) { - case 'P': timeout = 0; return KEY_F1; - case 'Q': timeout = 0; return KEY_F2; - case 'R': timeout = 0; return KEY_F3; - case 'S': timeout = 0; return KEY_F4; + case 'P': return KEY_F1; + case 'Q': return KEY_F2; + case 'R': return KEY_F3; + case 'S': return KEY_F4; } timeout = 0; continue; @@ -927,25 +928,25 @@ int bim_getkey(int read_timeout) { } if (timeout >= 2 && this_buf[0] == '\033' && this_buf[1] == '[') { switch (c) { - case 'M': timeout = 0; return KEY_MOUSE; - case '<': timeout = 0; return KEY_MOUSE_SGR; + case 'M': return KEY_MOUSE; + case '<': return KEY_MOUSE_SGR; case 'A': return shift_key(KEY_UP); case 'B': return shift_key(KEY_DOWN); case 'C': return shift_key(KEY_RIGHT); case 'D': return shift_key(KEY_LEFT); - case 'H': timeout = 0; return KEY_HOME; - case 'F': timeout = 0; return KEY_END; - case 'I': timeout = 0; return KEY_PAGE_UP; - case 'G': timeout = 0; return KEY_PAGE_DOWN; - case 'Z': timeout = 0; return KEY_SHIFT_TAB; + case 'H': return KEY_HOME; + case 'F': return KEY_END; + case 'I': return KEY_PAGE_UP; + case 'G': return KEY_PAGE_DOWN; + case 'Z': return KEY_SHIFT_TAB; case '~': if (timeout == 3) { switch (this_buf[2]) { - case '1': timeout = 0; return KEY_HOME; - case '3': timeout = 0; return KEY_DELETE; - case '4': timeout = 0; return KEY_END; - case '5': timeout = 0; return KEY_PAGE_UP; - case '6': timeout = 0; return KEY_PAGE_DOWN; + case '1': return KEY_HOME; + case '3': return KEY_DELETE; + case '4': return KEY_END; + case '5': return KEY_PAGE_UP; + case '6': return KEY_PAGE_DOWN; } } else if (timeout == 5) { if (this_buf[2] == '2' && this_buf[3] == '0' && this_buf[4] == '0') { @@ -6031,7 +6032,7 @@ BIM_COMMAND(buffers,"buffers","Show the open buffers") { BIM_COMMAND(keyname,"keyname","Press and key and get its name.") { int c; render_commandline_message("(press a key)"); - while ((c = bim_getkey(200)) == KEY_TIMEOUT); + while ((c = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); render_commandline_message("%d = %s", c, name_from_key(c)); return 0; } @@ -8948,7 +8949,7 @@ int read_one_character(char * message) { place_cursor_actual(); } int c; - while ((c = bim_getkey(200))) { + while ((c = bim_getkey(DEFAULT_KEY_WAIT))) { if (c == KEY_TIMEOUT) continue; if (c == KEY_CTRL_V) { if (!global_config.overlay_mode) { @@ -9742,7 +9743,7 @@ void normal_mode(void) { render_command_input_buffer(); refresh = 0; } - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (key != KEY_TIMEOUT) { refresh = 1; if (!handle_action(COMMAND_MAP, key)) @@ -9755,7 +9756,7 @@ void normal_mode(void) { render_command_input_buffer(); refresh = 0; } - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (key != KEY_TIMEOUT) { refresh = 1; if (!handle_action(SEARCH_MAP, key)) { @@ -9812,7 +9813,7 @@ void normal_mode(void) { if (env->mode == MODE_NORMAL) { place_cursor_actual(); - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (handle_nav_buffer(key)) { if (!handle_action(NORMAL_MAP, key)) if (!handle_action(NAVIGATION_MAP, key)) @@ -9820,9 +9821,10 @@ void normal_mode(void) { } reset_nav_buffer(key); } else if (env->mode == MODE_INSERT) { - place_cursor_actual(); - int key = bim_getkey(refresh ? 10 : 200); + if (!refresh) place_cursor_actual(); + int key = bim_getkey(refresh ? 10 : DEFAULT_KEY_WAIT); if (key == KEY_TIMEOUT) { + place_cursor_actual(); if (refresh > 1) { redraw_text(); } else if (refresh) { @@ -9843,7 +9845,7 @@ void normal_mode(void) { } } else if (env->mode == MODE_REPLACE) { place_cursor_actual(); - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (key != KEY_TIMEOUT) { if (handle_action(REPLACE_MAP, key)) { redraw_text(); @@ -9863,7 +9865,7 @@ void normal_mode(void) { } } else if (env->mode == MODE_LINE_SELECTION) { place_cursor_actual(); - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (key == KEY_TIMEOUT) continue; if (handle_nav_buffer(key)) { @@ -9895,7 +9897,7 @@ void normal_mode(void) { } } else if (env->mode == MODE_CHAR_SELECTION) { place_cursor_actual(); - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (key == KEY_TIMEOUT) continue; if (handle_nav_buffer(key)) { @@ -9925,7 +9927,7 @@ void normal_mode(void) { } } else if (env->mode == MODE_COL_SELECTION) { place_cursor_actual(); - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (key == KEY_TIMEOUT) continue; if (handle_nav_buffer(key)) { @@ -9954,7 +9956,7 @@ void normal_mode(void) { redraw_commandline(); } } else if (env->mode == MODE_COL_INSERT) { - int key = bim_getkey(refresh ? 10 : 200); + int key = bim_getkey(refresh ? 10 : DEFAULT_KEY_WAIT); if (key == KEY_TIMEOUT) { if (refresh) { redraw_commandline(); @@ -9969,7 +9971,7 @@ void normal_mode(void) { } } if (env->mode == MODE_DIRECTORY_BROWSE) { place_cursor_actual(); - int key = bim_getkey(200); + int key = bim_getkey(DEFAULT_KEY_WAIT); if (handle_nav_buffer(key)) { if (!handle_action(DIRECTORY_BROWSE_MAP, key)) if (!handle_action(NAVIGATION_MAP, key)) @@ -10059,6 +10061,15 @@ int has_function(char * name) { return 0; } +int find_function(char * name) { + for (int i = 0; i < flex_user_functions_count; ++i) { + if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { + return i; + } + } + return -1; +} + BIM_COMMAND(call,"call","Call a function") { if (argc < 2) { render_error("Expected function name"); @@ -10132,7 +10143,7 @@ BIM_COMMAND(show_function,"showfunction","Show the commands in a function") { i++; if (this && i == global_config.term_height - 3) { printf("(function continues)"); - while (bim_getkey(200) == KEY_TIMEOUT); + while (bim_getkey(DEFAULT_KEY_WAIT) == KEY_TIMEOUT); } } @@ -10507,7 +10518,7 @@ BIM_COMMAND(whatis,"whatis","Describe actions bound to a key in different modes. if (argc < 2) { render_commandline_message("(press a key)"); - while ((key = bim_getkey(200)) == KEY_TIMEOUT); + while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); } else if (strlen(argv[1]) > 1 && argv[1][0] == '^') { /* See if it's a valid ctrl key */ if (argv[1][2] != '\0') { @@ -10731,6 +10742,10 @@ void dump_map_commands(const char * name, struct action_map * map) { } } +void call_user(int c) { + run_function(user_functions[c]->command); +} + BIM_COMMAND(mapkey,"mapkey","Map a key to an action.") { if (argc < 2) goto _argument_error; @@ -10791,6 +10806,19 @@ BIM_COMMAND(mapkey,"mapkey","Map a key to an action.") { } } + /* See if it's a user function */ + char _tmp[30] = {0}; + if (has_function(action) && (!action_def || action_def->action == call_user)) { + /* Map a new action for this user function */ + if (!action_def) { + add_action((struct action_def){action, call_user, ARG_IS_CUSTOM, "(script-defined function)"}); + action_def = &mappable_actions[flex_mappable_actions_count-1]; + } + options = "a"; + sprintf(_tmp, "%d", find_function(action)); + arg = _tmp; + } + if (!action_def) { render_error("invalid action: %s", action); return 1; @@ -12363,6 +12391,129 @@ BIM_SYNTAX_COMPLETER(java) { } BIM_SYNTAX_EXT(java, 1, java_brace_keyword_qualifier) +static char * syn_js_keywords[] = { + "abstract","arguments","from", + "await","break","case","catch","class","const", + "continue","debugger","default","delete","do","else","enum","eval", + "export","extends","final","finally","for","function","goto", + "if","implements","import","in","instanceof","interface","let","long", + "native","new","package","private","protected","public","return", + "static","super","switch","synchronized","this","throw","throws", + "transienttrue","try","typeof","volatile","while","with","yield", + NULL +}; + +static char * syn_js_types[] = { + "int","float","double","short","var","void","byte","char","boolean", + NULL +}; + +static char * syn_js_special[] = { + "true","false","null", + NULL +}; + +void paint_js_format_string(struct syntax_state * state) { + paint(1, FLAG_STRING); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == '`') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '`') { + paint(1, FLAG_STRING); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '$' && nextchar() == '{') { + paint(2, FLAG_NUMERAL); + while (charat() != -1 && charat() != '}') { + paint(1, FLAG_NUMERAL); + } + paint(1, FLAG_NUMERAL); + } else { + paint(1, FLAG_STRING); + } + } +} + +int syn_js_calculate(struct syntax_state * state) { + switch (state->state) { + case -1: + case 0: + if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { + paint_c_numeral(state); + return 0; + } else if (!c_keyword_qualifier(lastchar()) && (charat() >= 'A' && charat() <= 'Z')) { + while (charat() != -1 && c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); + return 0; + } else if (charat() == '/' && nextchar() == '/') { + /* C++-style comments */ + paint_comment(state); + } else if (charat() == '/' && nextchar() == '*') { + if (paint_c_comment(state) == 1) return 1; + } else if (find_keywords(state, syn_js_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, syn_js_types, FLAG_TYPE, c_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, syn_js_special, FLAG_NUMERAL, c_keyword_qualifier)) { + return 0; + } else if (charat() == '=' && nextchar() == '>') { + paint(2, FLAG_PRAGMA); + return 0; + } else if (charat() == ':' && c_keyword_qualifier(lastchar())) { + /* Assume things before parens are important? */ + int original_i = state->i; + state->i--; + while (charat() != -1 && c_keyword_qualifier(charat())) { + paint(1, FLAG_TYPE); + state->i -= 2; + } + state->i = original_i; + paint(1, FLAG_PRAGMA); + return 0; + } else if (charat() == '<') { + paint(1, FLAG_TYPE); + while (charat() != -1 && (charat() == '/' || c_keyword_qualifier(charat()))) { + paint(1, FLAG_TYPE); + } + return 0; + } else if (charat() == '>') { + paint(1, FLAG_TYPE); + return 0; + } else if (charat() == '\"') { + paint_simple_string(state); + return 0; + } else if (charat() == '\'') { + paint_single_string(state); + return 0; + } else if (charat() == '`') { + paint_js_format_string(state); + return 0; + } else if (charat() != -1) { + skip(); + return 0; + } + break; + case 1: + if (paint_c_comment(state) == 1) return 1; + return 0; + } + return -1; +} + +char * syn_js_ext[] = {".js",".jsx",".ts",".tsx",NULL}; + +BIM_SYNTAX_COMPLETER(js) { + for (char ** keyword = syn_js_keywords; *keyword; ++keyword) { + add_if_match((*keyword),"(javascript keyword)"); + } + for (char ** keyword = syn_js_types; *keyword; ++keyword) { + add_if_match((*keyword),"(javascript type)"); + } + + return 0; +} + +BIM_SYNTAX_EXT(js, 1, c_keyword_qualifier) char * syn_json_keywords[] = { "true","false","null", NULL From dffac24f3a3147eb2cb0d351428958a16c196b5a Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 15 Dec 2020 15:50:20 +0900 Subject: [PATCH 050/102] sh: implement 'time', but only with 'real' time at the moment... --- apps/sh.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/apps/sh.c b/apps/sh.c index 88e56b96..b0aa8c28 100644 --- a/apps/sh.c +++ b/apps/sh.c @@ -441,6 +441,11 @@ void tab_complete_func(rline_context_t * c) { command_adj += 1; } + if (command_adj < argc && (!strcmp(argv[command_adj], "time"))) { + cursor_adj -= 1; + command_adj += 1; + } + /* sudo should shift commands */ if (command_adj < argc && (!strcmp(argv[command_adj], "sudo") || !strcmp(argv[command_adj], "gsudo"))) { cursor_adj -= 1; @@ -2287,6 +2292,45 @@ uint32_t shell_cmd_rehash(int argc, char * argv[]) { return 0; } +uint32_t shell_cmd_time(int argc, char * argv[]) { + int pid, ret_code = 0; + struct timeval start, end; + gettimeofday(&start, NULL); + + if (argc > 1) { + pid_t child_pid = fork(); + if (!child_pid) { + set_pgid(0); + set_pgrp(getpid()); + is_subshell = 1; + run_cmd(&argv[1]); + } + + do { + pid = waitpid(child_pid, &ret_code, 0); + } while (pid != -1 || (pid == -1 && errno != ECHILD)); + + reset_pgrp(); + handle_status(ret_code); + } + + gettimeofday(&end, NULL); + + time_t sec_diff = end.tv_sec - start.tv_sec; + suseconds_t usec_diff = end.tv_usec - start.tv_usec; + if (end.tv_usec < start.tv_usec) { + sec_diff -= 1; + usec_diff = (1000000 + end.tv_usec) - start.tv_usec; + } + + int minutes = sec_diff / 60; + sec_diff = sec_diff % 60; + + printf("\nreal\t%dm%d.%.03d\n", minutes, (int)sec_diff, (int)(usec_diff / 1000)); + + return WEXITSTATUS(ret_code); +} + void install_commands() { shell_commands = malloc(sizeof(char *) * SHELL_COMMANDS); shell_pointers = malloc(sizeof(shell_command_t) * SHELL_COMMANDS); @@ -2313,4 +2357,5 @@ void install_commands() { shell_install_command("jobs", shell_cmd_jobs, "list stopped jobs"); shell_install_command("bg", shell_cmd_bg, "restart suspended job in the background"); shell_install_command("rehash", shell_cmd_rehash, "reset shell command memory"); + shell_install_command("time", shell_cmd_time, "time a command"); } From f38a61f6c4cd153a75aeca2fffccc48fc3849399 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 15 Dec 2020 16:59:30 +0900 Subject: [PATCH 051/102] sh: always ensure that prints to the shell's stderr --- apps/sh.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/sh.c b/apps/sh.c index b0aa8c28..5f62f330 100644 --- a/apps/sh.c +++ b/apps/sh.c @@ -58,6 +58,7 @@ int SHELL_COMMANDS = 64; char ** shell_commands; /* Command names */ shell_command_t * shell_pointers; /* Command functions */ char ** shell_descript; /* Command descriptions */ +FILE * shell_stderr; /* specifically for `time` */ /* This is the number of actual commands installed */ int shell_commands_len = 0; @@ -1707,6 +1708,9 @@ int main(int argc, char ** argv) { install_commands(); + int err = dup(STDERR_FILENO); + shell_stderr = fdopen(err, "w"); + if (argc > 1) { int c; while ((c = getopt(argc, argv, "Rc:v?")) != -1) { @@ -2326,7 +2330,7 @@ uint32_t shell_cmd_time(int argc, char * argv[]) { int minutes = sec_diff / 60; sec_diff = sec_diff % 60; - printf("\nreal\t%dm%d.%.03d\n", minutes, (int)sec_diff, (int)(usec_diff / 1000)); + fprintf(shell_stderr, "\nreal\t%dm%d.%.03ds\n", minutes, (int)sec_diff, (int)(usec_diff / 1000)); return WEXITSTATUS(ret_code); } From 545425ce36080142b33acc1246fa7beefa51af21 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Wed, 16 Dec 2020 10:15:03 +0900 Subject: [PATCH 052/102] sleep: don't just crash on missing arg --- apps/sleep.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/sleep.c b/apps/sleep.c index 383b3cd6..d4f64737 100644 --- a/apps/sleep.c +++ b/apps/sleep.c @@ -13,6 +13,11 @@ int main(int argc, char ** argv) { int ret = 0; + if (argc < 2) { + fprintf(stderr, "%s: missing operand\n", argv[0]); + return 1; + } + char * arg = strdup(argv[1]); float time = atof(arg); From 03d580fb7ebc356c4fa1f14c2109cf5689d047d2 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 21 Dec 2020 10:07:23 +0900 Subject: [PATCH 053/102] kill: fix bad signal specifier check --- apps/kill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kill.c b/apps/kill.c index 45c4d5bb..6600448b 100644 --- a/apps/kill.c +++ b/apps/kill.c @@ -94,7 +94,7 @@ int main(int argc, char * argv[]) { s++; } } else { - if (!isdigit(argv[1][1] < '0')) { + if (!isdigit(argv[1][1])) { struct sig_def * s = signals; while (s->name) { if (!strcmp(argv[1]+1,s->name)) { From adb33b9b88a713f3e001de5cba90beb859bc2e22 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 21 Dec 2020 10:07:30 +0900 Subject: [PATCH 054/102] bim: update to latest --- apps/bim.c | 974 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 633 insertions(+), 341 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index fc3fb7b3..1569cc75 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,9 +1,9 @@ /** * This is a baked, single-file version of bim. - * It was built Fri Dec 11 13:47:59 2020 - * It is based on git commit 8dd9969f9b534bd2453146a678c8fcdf8f6f3b06 + * It was built Mon Dec 21 10:05:55 2020 + * It is based on git commit 2f178bfc82de3207eefbc7b7c490ccac46cb07dc */ -#define GIT_TAG "8dd9969-baked" +#define GIT_TAG "2f178bf-baked" /* Bim - A Text Editor * * Copyright (C) 2012-2020 K. Lange @@ -55,7 +55,7 @@ # define TAG "" #endif -#define BIM_VERSION "2.6.2" TAG +#define BIM_VERSION "2.7.1" TAG #define BIM_COPYRIGHT "Copyright 2012-2020 K. Lange <\033[3mklange@toaruos.org\033[23m>" #define BLOCK_SIZE 4096 @@ -202,6 +202,8 @@ typedef struct { unsigned int can_italic:1; unsigned int can_insert:1; unsigned int can_bracketedpaste:1; + unsigned int can_sgrmouse:1; + unsigned int history_enabled:1; unsigned int highlight_parens:1; unsigned int smart_case:1; @@ -217,7 +219,6 @@ typedef struct { unsigned int autohide_tabs:1; unsigned int smart_complete:1; unsigned int has_terminal:1; - unsigned int use_sgr_mouse:1; unsigned int search_wraps:1; int cursor_padding; @@ -293,6 +294,7 @@ typedef struct _env { unsigned int crnl:1; unsigned int numbers:1; unsigned int gutter:1; + unsigned int slowop:1; int highlighting_paren; int maxcolumn; @@ -333,6 +335,7 @@ extern struct theme_def * themes; extern void add_colorscheme(struct theme_def theme); struct syntax_state { + buffer_t * env; line_t * line; int line_no; int state; @@ -351,7 +354,7 @@ struct syntax_definition { int (*calculate)(struct syntax_state *); int prefers_spaces; int (*completion_qualifier)(int c); - int (*completion_matcher)(uint32_t * comp, struct completion_match ** matches, int * matches_count, int complete_match, int * matches_len); + int (*completion_matcher)(uint32_t * comp, struct completion_match ** matches, int * matches_count, int complete_match, int * matches_len, buffer_t * env); }; extern struct syntax_definition * syntaxes; @@ -368,38 +371,6 @@ extern struct syntax_definition * syntaxes; #define MODE_COL_INSERT 6 #define MODE_DIRECTORY_BROWSE 7 -extern global_config_t global_config; - -extern const char * COLOR_FG; -extern const char * COLOR_BG; -extern const char * COLOR_ALT_FG; -extern const char * COLOR_ALT_BG; -extern const char * COLOR_NUMBER_FG; -extern const char * COLOR_NUMBER_BG; -extern const char * COLOR_STATUS_FG; -extern const char * COLOR_STATUS_BG; -extern const char * COLOR_STATUS_ALT; -extern const char * COLOR_TABBAR_BG; -extern const char * COLOR_TAB_BG; -extern const char * COLOR_ERROR_FG; -extern const char * COLOR_ERROR_BG; -extern const char * COLOR_SEARCH_FG; -extern const char * COLOR_SEARCH_BG; -extern const char * COLOR_KEYWORD; -extern const char * COLOR_STRING; -extern const char * COLOR_COMMENT; -extern const char * COLOR_TYPE; -extern const char * COLOR_PRAGMA; -extern const char * COLOR_NUMERAL; -extern const char * COLOR_SELECTFG; -extern const char * COLOR_SELECTBG; -extern const char * COLOR_RED; -extern const char * COLOR_GREEN; -extern const char * COLOR_BOLD; -extern const char * COLOR_LINK; -extern const char * COLOR_ESCAPE; -extern const char * current_theme; - struct action_def { char * name; void (*action)(); @@ -446,16 +417,6 @@ struct command_def { } \ int bim_command_ ## cmd_name (char * cmd __attribute__((unused)), int argc __attribute__((unused)), char * argv[] __attribute__((unused))) -extern buffer_t * env; -extern buffer_t * left_buffer; -extern buffer_t * right_buffer; -#define NAV_BUFFER_MAX 10 -extern char nav_buf[NAV_BUFFER_MAX+1]; -extern int nav_buffer; -extern int buffers_len; -extern int buffers_avail; -extern buffer_t ** buffers; - extern const char * flag_to_color(int _flag); extern void redraw_line(int x); extern int git_examine(char * filename); @@ -473,7 +434,7 @@ extern int bim_getch_timeout(int timeout); extern buffer_t * buffer_new(void); extern FILE * open_biminfo(void); extern int fetch_from_biminfo(buffer_t * buf); -extern int update_biminfo(buffer_t * buf); +extern int update_biminfo(buffer_t * buf, int is_open); extern buffer_t * buffer_close(buffer_t * buf); extern int to_eight(uint32_t codepoint, char * out); extern char * name_from_key(enum Key keycode); @@ -504,6 +465,7 @@ extern int run_function(char * name); extern int has_function(char * name); extern void find_matching_paren(int * out_line, int * out_col, int in_col); extern void render_error(char * message, ...); +extern void render_commandline_message(char * message, ...); extern void pause_for_key(void); #define add_match(match_string, match_file, match_search) do { \ @@ -567,7 +529,8 @@ extern struct mode_names mode_names[]; struct completion_match **matches __attribute__((unused)), \ int * matches_count __attribute__((unused)), \ int complete_match __attribute__((unused)), \ - int *matches_len __attribute__((unused))) + int *matches_len __attribute__((unused)), \ + buffer_t * env __attribute__((unused))) #define paint(length, flag) do { for (int i = 0; i < (length) && state->i < state->line->actual; i++, state->i++) { state->line->text[state->i].flags = (flag); } } while (0) #define charat() (state->i < state->line->actual ? state->line->text[(state->i)].codepoint : -1) @@ -621,7 +584,7 @@ global_config_t global_config = { .yank_is_full_lines = 0, .tty_in = STDIN_FILENO, .bimrc_path = "~/.bimrc", - .syntax_fallback = NULL, /* syntax to fall back to if none other match applies */ + .syntax_fallback = NULL, /* Syntax to fall back to if no other match applies */ .search = NULL, .overlay_mode = OVERLAY_MODE_NONE, .command_buffer = NULL, @@ -647,6 +610,7 @@ global_config_t global_config = { .can_italic = 1, /* can use italics (without inverting) */ .can_insert = 0, /* ^[[L */ .can_bracketedpaste = 0, /* puts escapes before and after pasted stuff */ + .can_sgrmouse = 0, /* Whether SGR mouse mode is availabe (large coordinates) */ /* Configuration options */ .history_enabled = 1, .highlight_parens = 1, /* highlight parens/braces when cursor moves */ @@ -663,7 +627,6 @@ global_config_t global_config = { .autohide_tabs = 0, .smart_complete = 0, .has_terminal = 0, - .use_sgr_mouse = 0, .search_wraps = 1, /* Integer config values */ .cursor_padding = 4, @@ -713,6 +676,44 @@ char * name_from_key(enum Key keycode) { return keyNameTmp; } +/** + * Theming data + * + * This default set is pretty simple "default foreground on default background" + * except for search and selections which are black-on-white specifically. + * + * The theme colors get set by separate configurable theme scripts. + */ +const char * COLOR_FG = "@9"; +const char * COLOR_BG = "@9"; +const char * COLOR_ALT_FG = "@9"; +const char * COLOR_ALT_BG = "@9"; +const char * COLOR_NUMBER_FG = "@9"; +const char * COLOR_NUMBER_BG = "@9"; +const char * COLOR_STATUS_FG = "@9"; +const char * COLOR_STATUS_BG = "@9"; +const char * COLOR_STATUS_ALT= "@9"; +const char * COLOR_TABBAR_BG = "@9"; +const char * COLOR_TAB_BG = "@9"; +const char * COLOR_ERROR_FG = "@9"; +const char * COLOR_ERROR_BG = "@9"; +const char * COLOR_SEARCH_FG = "@0"; +const char * COLOR_SEARCH_BG = "@17"; +const char * COLOR_KEYWORD = "@9"; +const char * COLOR_STRING = "@9"; +const char * COLOR_COMMENT = "@9"; +const char * COLOR_TYPE = "@9"; +const char * COLOR_PRAGMA = "@9"; +const char * COLOR_NUMERAL = "@9"; +const char * COLOR_SELECTFG = "@0"; +const char * COLOR_SELECTBG = "@17"; +const char * COLOR_RED = "@1"; +const char * COLOR_GREEN = "@2"; +const char * COLOR_BOLD = "@9"; +const char * COLOR_LINK = "@9"; +const char * COLOR_ESCAPE = "@9"; +const char * current_theme = "none"; + struct ColorName color_names[] = { {"text-fg", &COLOR_FG}, {"text-bg", &COLOR_BG}, @@ -997,7 +998,7 @@ enum Key key_from_name(char * name) { while (*name) { if (!decode(&state, &c, (unsigned char)*name)) { if (candidate == -1) candidate = c; - else return -1; /* Multiple characters */ + else return -1; /* Reject `name` if it is multiple codepoints */ } else if (state == UTF8_REJECT) { return -1; } @@ -1017,6 +1018,7 @@ buffer_t * right_buffer = NULL; /** * A buffer for holding a number (line, repetition count) */ +#define NAV_BUFFER_MAX 10 char nav_buf[NAV_BUFFER_MAX+1]; int nav_buffer = 0; @@ -1037,7 +1039,7 @@ buffer_t * buffer_new(void) { buffers = realloc(buffers, sizeof(buffer_t *) * buffers_avail); } - /* TODO: Support having split buffers with more than two buffers open */ + /* TODO: Clean up split support and support multiple splits... */ if (left_buffer) { left_buffer->left = 0; left_buffer->width = global_config.term_width; @@ -1065,10 +1067,10 @@ buffer_t * buffer_new(void) { * Open the biminfo file. */ FILE * open_biminfo(void) { - /* TODO This should probably be configurable line bimrc */ + /* TODO: biminfo paths should probably configurable with an arg, like bimrc */ char * home = getenv("HOME"); if (!home) { - /* Since it's not, we need HOME */ + /* ... but since it's not, we need $HOME, so fail if it isn't set. */ return NULL; } @@ -1085,6 +1087,58 @@ FILE * open_biminfo(void) { return biminfo; } +/** + * Check if a file is open by examining the biminfo file + */ +int file_is_open(char * file_name) { + /* Get the absolute path of the file to normalize for lookup */ + char tmp_path[PATH_MAX+2]; + if (!realpath(file_name, tmp_path)) { + return 0; /* Assume not */ + } + strcat(tmp_path," "); + + FILE * biminfo = open_biminfo(); + if (!biminfo) return 0; /* Assume not */ + + /* Scan */ + char line[PATH_MAX+64]; + + while (!feof(biminfo)) { + fpos_t start_of_line; + fgetpos(biminfo, &start_of_line); + fgets(line, PATH_MAX+63, biminfo); + if (line[0] != '%') { + continue; + } + + if (!strncmp(&line[1],tmp_path, strlen(tmp_path))) { + /* File is currently open */ + int pid = -1; + sscanf(line+1+strlen(tmp_path)+1,"%d",&pid); + if (pid != -1 && pid != getpid()) { + if (!kill(pid, 0)) { + int key = 0; + render_error("biminfo indicates another instance may already be editing this file"); + render_commandline_message("\n"); + render_commandline_message("file path = %s\n", tmp_path); + render_commandline_message("pid = %d (still running)\n", pid); + render_commandline_message("Open file anyway? (y/N)"); + while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); + if (key != 'y') { + fclose(biminfo); + return 1; + } + } + } + fclose(biminfo); + return 0; + } + } + fclose(biminfo); + return 0; +} + /** * Fetch the cursor position from a biminfo file */ @@ -1092,7 +1146,7 @@ int fetch_from_biminfo(buffer_t * buf) { /* Can't fetch if we don't have a filename */ if (!buf->file_name) return 1; - /* Get the absolute name of the file */ + /* Get the absolute path of the file to normalize for lookup */ char tmp_path[PATH_MAX+2]; if (!realpath(buf->file_name, tmp_path)) { return 1; @@ -1121,20 +1175,23 @@ int fetch_from_biminfo(buffer_t * buf) { if (buf->line_no > buf->line_count) buf->line_no = buf->line_count; if (buf->col_no > buf->lines[buf->line_no-1]->actual) buf->col_no = buf->lines[buf->line_no-1]->actual; try_to_center(); + + fclose(biminfo); return 0; } } + fclose(biminfo); return 0; } /** * Write a file containing the last cursor position of a buffer. */ -int update_biminfo(buffer_t * buf) { +int update_biminfo(buffer_t * buf, int is_open) { if (!buf->file_name) return 1; - /* Get the absolute name of the file */ + /* Get the absolute path of the file to normalize for lookup */ char tmp_path[PATH_MAX+1]; if (!realpath(buf->file_name, tmp_path)) { return 1; @@ -1151,14 +1208,15 @@ int update_biminfo(buffer_t * buf) { fpos_t start_of_line; fgetpos(biminfo, &start_of_line); fgets(line, PATH_MAX+63, biminfo); - if (line[0] != '>') { + if (line[0] != '>' && line[0] != '%') { continue; } if (!strncmp(&line[1],tmp_path, strlen(tmp_path))) { /* Update */ fsetpos(biminfo, &start_of_line); - fprintf(biminfo,">%s %20d %20d\n", tmp_path, buf->line_no, buf->col_no); + fprintf(biminfo,"%c%s %20d %20d\n", is_open ? '%' : '>', tmp_path, + is_open ? getpid() : buf->line_no, buf->col_no); goto _done; } } @@ -1170,8 +1228,10 @@ int update_biminfo(buffer_t * buf) { fprintf(biminfo, "# Cursor positions and other state are stored here.\n"); } - /* Haven't found what we're looking for, should be at end of file */ - fprintf(biminfo, ">%s %20d %20d\n", tmp_path, buf->line_no, buf->col_no); + /* If we reach this point, we didn't find a record for this file + * and the write cursor should be at the end, so just add a new line */ + fprintf(biminfo,"%c%s %20d %20d\n", is_open ? '%' : '>', tmp_path, + is_open ? getpid() : buf->line_no, buf->col_no); _done: fclose(biminfo); @@ -1184,18 +1244,18 @@ int update_biminfo(buffer_t * buf) { buffer_t * buffer_close(buffer_t * buf) { int i; - /* Locate the buffer in the buffer pointer vector */ + /* Locate the buffer in the buffer list */ for (i = 0; i < buffers_len; i++) { if (buf == buffers[i]) break; } - /* Invalid buffer? */ + /* This buffer doesn't exist? */ if (i == buffers_len) { - return env; /* wtf */ + return NULL; } - update_biminfo(buf); + update_biminfo(buf, 0); /* Clean up lines used by old buffer */ for (int i = 0; i < buf->line_count; ++i) { @@ -1223,7 +1283,7 @@ buffer_t * buffer_close(buffer_t * buf) { /* Remove the buffer from the vector, moving others up */ if (i != buffers_len - 1) { - memmove(&buffers[i], &buffers[i+1], sizeof(*buffers) * (buffers_len - i)); + memmove(&buffers[i], &buffers[i+1], sizeof(*buffers) * (buffers_len - i - 1)); } /* There is one less buffer */ @@ -1235,53 +1295,15 @@ buffer_t * buffer_close(buffer_t * buf) { return NULL; } - /* If this was the last buffer, return the previous last buffer */ + /* If this was the last buffer in the list, return the previous last buffer */ if (i == buffers_len) { return buffers[buffers_len-1]; } - /* Otherwise return the new last buffer */ + /* Otherwise return the buffer in the same location */ return buffers[i]; } -/** - * Theming data - * - * This default set is pretty simple "default foreground on default background" - * except for search and selections which are black-on-white specifically. - * - * The theme colors get set by separate configurable themes. - */ -const char * COLOR_FG = "@9"; -const char * COLOR_BG = "@9"; -const char * COLOR_ALT_FG = "@9"; -const char * COLOR_ALT_BG = "@9"; -const char * COLOR_NUMBER_FG = "@9"; -const char * COLOR_NUMBER_BG = "@9"; -const char * COLOR_STATUS_FG = "@9"; -const char * COLOR_STATUS_BG = "@9"; -const char * COLOR_STATUS_ALT= "@9"; -const char * COLOR_TABBAR_BG = "@9"; -const char * COLOR_TAB_BG = "@9"; -const char * COLOR_ERROR_FG = "@9"; -const char * COLOR_ERROR_BG = "@9"; -const char * COLOR_SEARCH_FG = "@0"; -const char * COLOR_SEARCH_BG = "@17"; -const char * COLOR_KEYWORD = "@9"; -const char * COLOR_STRING = "@9"; -const char * COLOR_COMMENT = "@9"; -const char * COLOR_TYPE = "@9"; -const char * COLOR_PRAGMA = "@9"; -const char * COLOR_NUMERAL = "@9"; -const char * COLOR_SELECTFG = "@0"; -const char * COLOR_SELECTBG = "@17"; -const char * COLOR_RED = "@1"; -const char * COLOR_GREEN = "@2"; -const char * COLOR_BOLD = "@9"; -const char * COLOR_LINK = "@9"; -const char * COLOR_ESCAPE = "@9"; -const char * current_theme = "none"; - /** * Convert syntax highlighting flag to color code */ @@ -1317,10 +1339,9 @@ const char * flag_to_color(int _flag) { } } - /** * Find keywords from a list and paint them, assuming they aren't in the middle of other words. - * Returns 1 if a keyword from the last was found, otherwise 0. + * Returns 1 if a keyword from the list was found, otherwise 0. */ int find_keywords(struct syntax_state * state, char ** keywords, int flag, int (*keyword_qualifier)(int c)) { if (keyword_qualifier(lastchar())) return 0; @@ -1362,6 +1383,9 @@ int match_and_paint(struct syntax_state * state, const char * keyword, int flag, return 0; } +/** + * Paint a basic single-quote string. + */ void paint_single_string(struct syntax_state * state) { paint(1, FLAG_STRING); while (charat() != -1) { @@ -1378,7 +1402,9 @@ void paint_single_string(struct syntax_state * state) { } } - +/** + * Paint a simple double-quote string. + */ void paint_simple_string(struct syntax_state * state) { /* Assumes you came in from a check of charat() == '"' */ paint(1, FLAG_STRING); @@ -1405,7 +1431,8 @@ int simple_keyword_qualifier(int c) { /** * These words can appear in comments and should be highlighted. - * Since there are a lot of comment highlighters, let's break them out. + * Since there are a lot of comment highlighters, this is provided + * as a common function that can be used by multiple highlighters. */ int common_comment_buzzwords(struct syntax_state * state) { if (match_and_paint(state, "TODO", FLAG_NOTICE, simple_keyword_qualifier)) { return 1; } @@ -1415,7 +1442,7 @@ int common_comment_buzzwords(struct syntax_state * state) { } /** - * Paint a comment until end of line, assumes this comment can not continue. + * Paint a comment until end of line; assumes this comment can not continue. * (Some languages have comments that can continue with a \ - don't use this!) * Assumes you've already painted your comment start characters. */ @@ -1442,7 +1469,7 @@ int match_forward(struct syntax_state * state, char * c) { } /** - * Find and return a highlighter by name, or NULL + * Find and return a highlighter by name, or return NULL if none was found. */ struct syntax_definition * find_syntax_calculator(const char * name) { for (struct syntax_definition * s = syntaxes; syntaxes && s->name; ++s) { @@ -1471,9 +1498,17 @@ void add_syntax(struct syntax_definition def) { } /** - * Calculate syntax highlighting for the given line. + * Calculate syntax highlighting for the given line, and lines after + * if their initial syntax state has changed by this recalculation. + * + * If `line_no` is -1, this line is taken to be a special line and not + * part of a buffer; search highlighting will not be processed and syntax + * highlighting will halt after the line is finished. + * + * If `env->slowop` is currently enabled, recalculation is skipped. */ void recalculate_syntax(line_t * line, int line_no) { + if (env->slowop) return; /* Clear syntax for this line first */ int is_original = 1; while (1) { @@ -1534,40 +1569,66 @@ void recalculate_tabs(line_t * line) { } /** - * TODO: + * The next section contains the basic editing primitives. All other + * actions are built out of these primitives, and they are the basic + * instructions that get stored in history to be undone (or redone). * - * The line editing functions should probably take a buffer_t * - * so that they can act on buffers other than the active one. + * Primitives may recalculate syntax or redraw lines, if needed, but only + * when conditions for redrawing are met (such as not being in `slowop`, + * or loading the file; also replaying history, or when loading files). + * + * At the moment, primitives and most other functions do not take the current + * buffer (environment) as an argument and instead rely on a global variable; + * this should definitely be fixed at some point... */ -void recursive_history_free(history_t * root) { +/** + * When a new action that produces history happens and there is forward + * history that can be redone, we need to erase it as our tree has branched. + * If we wanted, we could actually story things in a tree structure so that + * the new branch and the old branch can both stick around, and that should + * probably be explored in the future... + */ +void history_free(history_t * root) { if (!root->next) return; + /* Find the last entry so we can free backwards */ history_t * n = root->next; - recursive_history_free(n); - - switch (n->type) { - case HISTORY_REPLACE_LINE: - free(n->contents.remove_replace_line.contents); - /* fall-through */ - case HISTORY_REMOVE_LINE: - free(n->contents.remove_replace_line.old_contents); - break; - default: - /* Nothing extra to free */ - break; + while (n->next) { + n = n->next; + } + + /* Free everything after the root, including stored content. */ + while (n != root) { + history_t * p = n->previous; + switch (n->type) { + case HISTORY_REPLACE_LINE: + free(n->contents.remove_replace_line.contents); + /* fall-through */ + case HISTORY_REMOVE_LINE: + free(n->contents.remove_replace_line.old_contents); + break; + default: + /* Nothing extra to free */ + break; + } + free(n); + n = p; } - free(n); root->next = NULL; } +/** + * This macro is called by primitives to insert history elements for each + * primitive action when performing in edit modes. + */ #define HIST_APPEND(e) do { \ e->col = env->col_no; \ e->line = env->line_no; \ if (env->history) { \ e->previous = env->history; \ - recursive_history_free(env->history); \ + history_free(env->history); \ env->history->next = e; \ e->next = NULL; \ } \ @@ -1576,10 +1637,15 @@ void recursive_history_free(history_t * root) { /** * Mark a point where a complete set of actions has ended. + * Individual history entries include things like "insert one character" + * but a user action that should be undone is "insert several characters"; + * breaks should be inserted after a series of primitives when there is + * a clear "end", such as when switching out of insert mode after typing. */ void set_history_break(void) { if (!global_config.history_enabled) return; + /* Do not produce duplicate breaks, or add breaks if we are at a sentinel. */ if (env->history->type != HISTORY_BREAK && env->history->type != HISTORY_SENTINEL) { history_t * e = malloc(sizeof(history_t)); e->type = HISTORY_BREAK; @@ -1588,7 +1654,15 @@ void set_history_break(void) { } /** - * Insert a character into an existing line. + * (Primitive) Insert a character into an existing line. + * + * This is the most basic primitive action: Take a line, and insert a codepoint + * into it at a given offset. If `lineno` is not -1, the line is assumed to + * be part of the active buffer. If inserting a character means the line needs + * to grow, then it will be reallocated, so the return value of the new line + * must ALWAYS be used. This primitive will NOT automatically update the + * buffer with the new pointer, so if you are calling insert on a buffer you + * MUST update env->lines[lineno-1] yourself. */ __attribute__((warn_unused_result)) line_t * line_insert(line_t * line, char_t c, int offset, int lineno) { @@ -1633,7 +1707,11 @@ __attribute__((warn_unused_result)) line_t * line_insert(line_t * line, char_t c } /** - * Delete a character from a line + * (Primitive) Delete a character from a line. + * + * Remove the character at the given offset. We never shrink lines, so this + * does not have a return value, and delete should never be called during + * a loading operation (though it may be called during a history replay). */ void line_delete(line_t * line, int offset, int lineno) { @@ -1663,7 +1741,12 @@ void line_delete(line_t * line, int offset, int lineno) { } /** - * Replace a character in a line + * (Primitive) Replace a character in a line. + * + * Replaces the codepoint at the given offset with a new character. Since this + * does not involve any size changes, it does not have a return value. + * Since a replacement character may be a tab, we do still need to recalculate + * character widths for tabs as they may change. */ void line_replace(line_t * line, char_t _c, int offset, int lineno) { @@ -1687,7 +1770,14 @@ void line_replace(line_t * line, char_t _c, int offset, int lineno) { } /** - * Remove a line from the active buffer + * (Primitive) Remove a line from the active buffer + * + * This primitive is only valid for a buffer. Delete a line, or if this is the + * only line in the buffer, clear it but keep the line around with no + * characters. We use the `line_delete` primitive to clear that line, + * otherwise we are our own primitive and produce history entries. + * + * While we do not shrink the `lines` array, it is returned here anyway. */ line_t ** remove_line(line_t ** lines, int offset) { @@ -1699,6 +1789,8 @@ line_t ** remove_line(line_t ** lines, int offset) { return lines; } + /* When a line is removed, we need to keep its contents so we + * can un-remove it on redo... */ if (!env->loading && global_config.history_enabled) { history_t * e = malloc(sizeof(history_t)); e->type = HISTORY_REMOVE_LINE; @@ -1723,7 +1815,11 @@ line_t ** remove_line(line_t ** lines, int offset) { } /** - * Add a new line to the active buffer. + * (Primitive) Add a new line to the active buffer. + * + * Inserts a new line into a buffer at the given line offset. + * Since this grows the buffer, it will return the new line array + * after reallocation if needed. */ line_t ** add_line(line_t ** lines, int offset) { @@ -1768,7 +1864,10 @@ line_t ** add_line(line_t ** lines, int offset) { } /** - * Replace a line with data from another line (used by paste to paste yanked lines) + * (Primitive) Replace a line with data from another line. + * + * This is only called when pasting yanks after calling `add_line`, + * but it allows us to have simpler history for that action. */ void replace_line(line_t ** lines, int offset, line_t * replacement) { @@ -1797,8 +1896,14 @@ void replace_line(line_t ** lines, int offset, line_t * replacement) { } /** - * Merge two consecutive lines. - * lineb is the offset of the second line. + * (Primitive) Merge two consecutive lines. + * + * Take two lines in a buffer and turn them into one line. + * `lineb` is the offset of the second line... or the + * line number of the first line, depending on which indexing + * system you prefer to think about. This won't grow `lines`, + * but it will likely modify it and can reallocate individual + * lines as well. */ line_t ** merge_lines(line_t ** lines, int lineb) { @@ -1814,14 +1919,15 @@ line_t ** merge_lines(line_t ** lines, int lineb) { } /* If there isn't enough space in linea hold both... */ - while (lines[linea]->available < lines[linea]->actual + lines[lineb]->actual) { - /* ... allocate more space until it fits */ - if (lines[linea]->available == 0) { - lines[linea]->available = 8; - } else { - lines[linea]->available *= 2; + if (lines[linea]->available < lines[linea]->actual + lines[lineb]->actual) { + while (lines[linea]->available < lines[linea]->actual + lines[lineb]->actual) { + /* ... allocate more space until it fits */ + if (lines[linea]->available == 0) { + lines[linea]->available = 8; + } else { + lines[linea]->available *= 2; + } } - /* XXX why not just do this once after calculating appropriate size */ lines[linea] = realloc(lines[linea], sizeof(line_t) + sizeof(char_t) * lines[linea]->available); } @@ -1852,7 +1958,11 @@ line_t ** merge_lines(line_t ** lines, int lineb) { } /** - * Split a line into two lines at the given column + * (Primitive) Split a line into two lines at the given column. + * + * Takes one line and makes it two lines. There are some optimizations + * if you are trying to "split" at the first or last column, which + * are both just treated as add_line. */ line_t ** split_line(line_t ** lines, int line, int split) { @@ -1884,9 +1994,9 @@ line_t ** split_line(line_t ** lines, int line, int split) { memmove(&lines[line+2], &lines[line+1], sizeof(line_t *) * (env->line_count - line)); } - /* I have no idea what this is doing */ int remaining = lines[line]->actual - split; + /* This is some wacky math to get a good power-of-two */ int v = remaining; v--; v |= v >> 1; @@ -1921,6 +2031,19 @@ line_t ** split_line(line_t ** lines, int line, int split) { return lines; } +/** + * Primitives end here. Everything after this point that wants to + * perform modifications must be built on these primitives and + * should never directly modify env->lines or the contents thereof, + * outside of syntax highlighting flag changes. + */ + +/** + * The following section is where we implement "smart" automatic + * indentation. A lot of this is hacked-together nonsense and "smart" + * is a bit of an overstatement. + */ + /** * Understand spaces and comments and check if the previous line * ended with a brace or a colon. @@ -1938,6 +2061,13 @@ int line_ends_with_brace(line_t * line) { return (line->text[i].codepoint == '{' || line->text[i].codepoint == ':') ? i+1 : 0; } +/** + * Determine if a given line is a comment by checking its initial + * syntax highlighting state value. This is used by automatic indentation + * to continue block comments in languages like C. + * + * TODO: Why isn't this a syntax-> method? + */ int line_is_comment(line_t * line) { if (!env->syntax) return 0; @@ -1954,6 +2084,12 @@ int line_is_comment(line_t * line) { return 0; } +/** + * Figure out where the indentation for a brace belongs by finding + * where the start of the line is after whitespace. This is called + * by default when we insert } and tries to align it with the indentation + * of the matching opening {. + */ int find_brace_line_start(int line, int col) { int ncol = col - 1; while (ncol > 0) { @@ -1982,7 +2118,11 @@ int find_brace_line_start(int line, int col) { } /** - * Add indentation from the previous (temporally) line + * Add indentation from the previous (temporally) line. + * + * By "temporally", we mean not necessarily the line above, but + * potentially the line below if we are inserting a line above + * the cursor. */ void add_indent(int new_line, int old_line, int ignore_brace) { if (env->indent) { @@ -2084,7 +2224,9 @@ void add_indent(int new_line, int old_line, int ignore_brace) { } /** - * Initialize a buffer with default values + * Initialize a buffer with default values. + * + * Should be called after creating a buffer. */ void setup_buffer(buffer_t * env) { /* If this buffer was already initialized, clear out its line data */ @@ -2199,7 +2341,7 @@ int codepoint_width(wchar_t codepoint) { return 1; } /* Skip wcwidth for anything under 256 */ - if (codepoint > 256) { + if (codepoint > 127) { if (global_config.can_unicode) { /* Higher codepoints may be wider (eg. Japanese) */ int out = wcwidth(codepoint); @@ -2211,6 +2353,13 @@ int codepoint_width(wchar_t codepoint) { return 1; } +/** + * The following section contains methods for crafting terminal escapes + * for rendering the display. We do not use curses or any similar + * library, so we have to generate these sequences ourself based on + * some assumptions about the target terminal. + */ + /** * Move the terminal cursor */ @@ -2218,6 +2367,11 @@ void place_cursor(int x, int y) { printf("\033[%d;%dH", y, x); } +/** + * Given two color codes from a theme, convert them to an escape + * sequence to set the foreground and background color. This allows + * us to support basic 16, xterm 256, and true color in themes. + */ char * color_string(const char * fg, const char * bg) { static char output[100]; char * t = output; @@ -2287,10 +2441,8 @@ void clear_to_end(void) { } /** - * For terminals without bce, - * prepaint the whole line, so we don't have to track - * where the cursor is for everything. Inefficient, - * but effective. + * For terminals without bce, prepaint the whole line, so we don't have to track + * where the cursor is for everything. Inefficient, but effective. */ void paint_line(const char * bg) { if (!global_config.can_bce) { @@ -2382,7 +2534,7 @@ void restore_cursor(void) { void mouse_enable(void) { if (global_config.can_mouse) { printf("\033[?1000h"); - if (global_config.use_sgr_mouse) { + if (global_config.can_sgrmouse) { printf("\033[?1006h"); } } @@ -2393,7 +2545,7 @@ void mouse_enable(void) { */ void mouse_disable(void) { if (global_config.can_mouse) { - if (global_config.use_sgr_mouse) { + if (global_config.can_sgrmouse) { printf("\033[?1006l"); } printf("\033[?1000l"); @@ -2463,6 +2615,10 @@ void unset_bracketed_paste(void) { /** * Get the name of just a file from a full path. * Returns a pointer within the original string. + * + * Called in a few different places where the name of a file + * is needed from its full path, such as drawing tab names or + * building HTML files. */ char * file_basename(char * file) { char * c = strrchr(file, '/'); @@ -2504,8 +2660,12 @@ int draw_tab_name(buffer_t * _env, char * out, int max_width, int * width) { } while (*t) { + /* File names can definitely by UTF-8, and we need to + * understand their display width... */ if (!decode(&state, &c, (unsigned char)*t)) { + /* But our displayed tab name is also just stored + * as UTF-8 again, so we essentially rebuild it... */ char tmp[7]; int size = to_eight(c, tmp); if (bytes + size > 62) break; @@ -2533,7 +2693,7 @@ int draw_tab_name(buffer_t * _env, char * out, int max_width, int * width) { } /** - * Redaw the tabbar, with a tab for each buffer. + * Redraw the tabbar, with a tab for each buffer. * * The active buffer is highlighted. */ @@ -2600,7 +2760,8 @@ void redraw_tabbar(void) { } /** - * Braindead log10 implementation for the line numbers + * Braindead log10 implementation for figuring out the width of the + * line number column. */ int log_base_10(unsigned int v) { int r = (v >= 1000000000) ? 9 : (v >= 100000000) ? 8 : (v >= 10000000) ? 7 : @@ -2610,10 +2771,12 @@ int log_base_10(unsigned int v) { } /** - * Render a line of text + * Render a line of text. * * This handles rendering the actual text content. A full line of text - * also includes a line number and some padding. + * also includes a line number and some padding, but those elements + * are rendered elsewhere; this method can be used for lines that are + * not attached to a buffer such as command input lines. * * width: width of the text display region (term width - line number width) * offset: how many cells into the line to start rendering at @@ -2630,8 +2793,7 @@ void render_line(line_t * line, int width, int offset, int line_no) { /* * When we are rendering in the middle of a wide character, - * we render -'s to fill the remaining amount of the - * charater's width + * we render -'s to fill the remaining amount of the character's width. */ int remainder = 0; @@ -2804,13 +2966,20 @@ void render_line(line_t * line, int width, int offset, int line_no) { } } + /** + * Determine what color the rest of the line should be. + */ if (env->mode != MODE_LINE_SELECTION) { + /* If we are not selecting, then use the normal background or highlight + * the current line if that feature is enabled. */ if (line->is_current) { set_colors(COLOR_FG, COLOR_ALT_BG); } else { set_colors(COLOR_FG, COLOR_BG); } } else { + /* If this line was empty but was part of the selection, we didn't + * set the selection color already, so we need to do that here. */ if (!line->actual) { if (env->line_no == line_no || (env->start_line > env->line_no && @@ -2822,6 +2991,10 @@ void render_line(line_t * line, int width, int offset, int line_no) { } } + /** + * In column modes, we may need to draw a column select beyond the end + * of a given line, so we need to draw up to that point first. + */ if ((env->mode == MODE_COL_SELECTION || env->mode == MODE_COL_INSERT) && line_no >= ((env->start_line < env->line_no) ? env->start_line : env->line_no) && line_no <= ((env->start_line < env->line_no) ? env->line_no : env->start_line) && @@ -2838,6 +3011,10 @@ void render_line(line_t * line, int width, int offset, int line_no) { set_colors(COLOR_FG, COLOR_BG); } + /* + * `maxcolumn` renders the background outside of the requested line length + * in a different color, with a line at the border between the two. + */ if (env->maxcolumn && line_no > -1 /* ensures we don't do this for command line */) { /* Fill out the normal background */ @@ -2851,7 +3028,7 @@ void render_line(line_t * line, int width, int offset, int line_no) { j++; set_colors(COLOR_ALT_FG, COLOR_ALT_BG); if (global_config.can_unicode) { - printf("▏"); + printf("▏"); /* Should this be configurable? */ } else { printf("|"); } @@ -2861,7 +3038,12 @@ void render_line(line_t * line, int width, int offset, int line_no) { set_colors(COLOR_ALT_FG, COLOR_ALT_BG); } - if (env->left + env->width == global_config.term_width && global_config.can_bce) { + /** + * Clear out the rest of the line. If we are the only buffer or the right split, + * and our terminal supports `bce`, we can just bce; otherwise write spaces + * until we reach the right side of the screen. + */ + if (global_config.can_bce && (line_no == -1 || env->left + env->width == global_config.term_width)) { clear_to_end(); } else { /* Paint the rest of the line */ @@ -2994,12 +3176,18 @@ void redraw_line(int x) { draw_line_number(x); + int should_shift = x + 1 == env->line_no || global_config.horizontal_shift_scrolling || + ((env->mode == MODE_COL_SELECTION || env->mode == MODE_COL_INSERT) && + x + 1 >= ((env->start_line < env->line_no) ? env->start_line : env->line_no) && + x + 1 <= ((env->start_line < env->line_no) ? env->line_no : env->start_line)); + + /* * Draw the line text * If this is the active line, the current character cell offset should be used. * (Non-active lines are not shifted and always render from the start of the line) */ - render_line(env->lines[x], env->width - gutter_width() - num_width(), (x + 1 == env->line_no || global_config.horizontal_shift_scrolling) ? env->coffset : 0, x+1); + render_line(env->lines[x], env->width - gutter_width() - num_width(), should_shift ? env->coffset : 0, x+1); } @@ -3158,7 +3346,7 @@ int statusbar_build_right(char * right_hand) { * The status bar shows the name of the file, whether it has modifications, * and (in the future) what syntax highlighting mode is enabled. * - * The right side of the tatus bar shows the line number and column. + * The right side of the status bar shows the line number and column. */ void redraw_statusbar(void) { if (global_config.hide_statusbar) return; @@ -3488,7 +3676,7 @@ void render_status_message(char * message, ...) { } /** - * Draw an errormessage to the command line. + * Draw an error message to the command line. */ void render_error(char * message, ...) { /* varargs setup */ @@ -3793,7 +3981,7 @@ BIM_ACTION(goto_line, ARG_IS_CUSTOM, /** - * Processs (part of) a file and add it to a buffer. + * Process (part of) a file and add it to a buffer. */ void add_buffer(uint8_t * buf, int size) { for (int i = 0; i < size; ++i) { @@ -3952,6 +4140,7 @@ void read_directory_into_buffer(char * file) { files[count].filename = strdup(ent->d_name); count++; ent = readdir(dirp); + free(tmp); } closedir(dirp); @@ -4088,6 +4277,12 @@ void open_file(char * file) { } } + if (file_is_open(_file)) { + if (file != _file) free(_file); + close_buffer(); + return; + } + struct stat statbuf; if (!stat(_file, &statbuf) && S_ISDIR(statbuf.st_mode)) { read_directory_into_buffer(_file); @@ -4110,6 +4305,7 @@ void open_file(char * file) { if (env->syntax && env->syntax->prefers_spaces) { env->tabs = 0; } + update_biminfo(env, 1); run_onload(env); return; } @@ -4194,6 +4390,8 @@ void open_file(char * file) { } } + update_biminfo(env, 1); + fclose(f); run_onload(env); @@ -4243,7 +4441,7 @@ void try_quit(void) { * Switch to the previous buffer */ BIM_ACTION(previous_tab, 0, - "Switch the previoius tab" + "Switch the previous tab" )(void) { buffer_t * last = NULL; for (int i = 0; i < buffers_len; i++) { @@ -4354,7 +4552,7 @@ int git_examine(char * filename) { } else if (from_count > 0 && to_count == 0) { /* * No +, all - means we have a deletion. We mark the next line such that it has a red bar at the top - * Note that to_line is one lower than the affacted line, so we don't need to mes with indexes. + * Note that to_line is one lower than the affected line, so we don't need to mess with indexes. */ if (to_line >= env->line_count) continue; env->lines[to_line]->rev_status = 4; /* Red */ @@ -5558,6 +5756,7 @@ BIM_COMMAND(tabindicator,"tabindicator","Set the tab indicator") { render_status_message("tabindicator=%s", global_config.tab_indicator); return 0; } + if (!global_config.can_unicode && strlen(argv[1]) != 1) return 0; if (display_width_of_string(argv[1]) != 1) { render_error("Can't set '%s' as indicator, must be one cell wide.", argv[1]); return 1; @@ -5572,6 +5771,7 @@ BIM_COMMAND(spaceindicator,"spaceindicator","Set the space indicator") { render_status_message("spaceindicator=%s", global_config.space_indicator); return 0; } + if (!global_config.can_unicode && strlen(argv[1]) != 1) return 0; if (display_width_of_string(argv[1]) != 1) { render_error("Can't set '%s' as indicator, must be one cell wide.", argv[1]); return 1; @@ -5581,17 +5781,6 @@ BIM_COMMAND(spaceindicator,"spaceindicator","Set the space indicator") { return 0; } -BIM_COMMAND(global_sgr,"global.sgr_mouse","Enable SGR mouse escapes") { - if (argc < 2) { - render_status_message("global.sgr_mouse=%d", global_config.use_sgr_mouse); - } else { - if (global_config.has_terminal) mouse_disable(); - global_config.use_sgr_mouse = !!atoi(argv[1]); - if (global_config.has_terminal) mouse_enable(); - } - return 0; -} - BIM_COMMAND(global_git,"global.git","Show or change the default status of git integration") { if (argc < 2) { render_status_message("global.git=%d", global_config.check_git); @@ -5634,7 +5823,7 @@ BIM_COMMAND(indent,"indent","Enable smart indentation") { return 0; } -BIM_COMMAND(noindent,"noindent","Disable smrat indentation") { +BIM_COMMAND(noindent,"noindent","Disable smart indentation") { env->indent = 0; redraw_statusbar(); return 0; @@ -5832,24 +6021,12 @@ BIM_COMMAND(recalc,"recalc","Recalculate syntax for the entire file.") { return 0; } -BIM_COMMAND(tabs,"tabs","Use tabs for indentation") { - env->tabs = 1; - redraw_statusbar(); - return 0; -} - -BIM_COMMAND(spaces,"spaces","Use spaces for indentation") { - env->tabs = 0; - redraw_statusbar(); - return 0; -} - BIM_COMMAND(tabstop,"tabstop","Show or set the tabstop (width of an indentation unit)") { if (argc < 2) { render_status_message("tabstop=%d", env->tabstop); } else { int t = atoi(argv[1]); - if (t > 0 && t < 32) { + if (t > 0 && t < 12) { env->tabstop = t; for (int i = 0; i < env->line_count; ++i) { recalculate_tabs(env->lines[i]); @@ -5862,6 +6039,24 @@ BIM_COMMAND(tabstop,"tabstop","Show or set the tabstop (width of an indentation return 0; } +BIM_COMMAND(spaces,"spaces","Use spaces for indentation") { + env->tabs = 0; + if (argc > 1) { + bim_command_tabstop("tabstop", argc, argv); + } + redraw_statusbar(); + return 0; +} + +BIM_COMMAND(tabs,"tabs","Use tabs for indentation") { + env->tabs = 1; + if (argc > 1) { + bim_command_tabstop("tabstop", argc, argv); + } + redraw_statusbar(); + return 0; +} + BIM_COMMAND(clearyear,"clearyank","Clear the yank buffer") { if (global_config.yanks) { for (unsigned int i = 0; i < global_config.yank_count; ++i) { @@ -6883,6 +7078,7 @@ void draw_search_match(uint32_t * buffer, int redraw_buffer) { env->lines[i]->text[j].flags &= (~FLAG_SEARCH); } } + int my_index = 0, match_count = 0; int line = -1, col = -1, _line = 1, _col = 1; do { int matchlen; @@ -6892,6 +7088,8 @@ void draw_search_match(uint32_t * buffer, int redraw_buffer) { for (int i = col; matchlen > 0; ++i, --matchlen) { l->text[i-1].flags |= FLAG_SEARCH; } + match_count += 1; + if (col == env->col_no && line == env->line_no) my_index = match_count; } _line = line; _col = col+1; @@ -6902,15 +7100,17 @@ void draw_search_match(uint32_t * buffer, int redraw_buffer) { place_cursor_actual(); redraw_statusbar(); redraw_commandline(); - if (redraw_buffer != -1) { - printf(redraw_buffer == 1 ? "/" : "?"); - uint32_t * c = buffer; - while (*c) { - char tmp[7] = {0}; /* Max six bytes, use 7 to ensure last is always nil */ - to_eight(*c, tmp); - printf("%s", tmp); - c++; - } + set_fg_color(COLOR_ALT_FG); + printf("[%d/%d] ", my_index, match_count); + set_fg_color(COLOR_KEYWORD); + printf(redraw_buffer == 1 ? "/" : "?"); + set_fg_color(COLOR_FG); + uint32_t * c = buffer; + while (*c) { + char tmp[7] = {0}; /* Max six bytes, use 7 to ensure last is always nil */ + to_eight(*c, tmp); + printf("%s", tmp); + c++; } } @@ -6968,6 +7168,8 @@ BIM_ACTION(search_accept, 0, /* Leave command mode */ global_config.overlay_mode = OVERLAY_MODE_NONE; + + draw_search_match(global_config.search, global_config.search_direction); } /** @@ -6978,19 +7180,24 @@ BIM_ACTION(search_next, 0, )(void) { if (!global_config.search) return; if (env->coffset) env->coffset = 0; - int line = -1, col = -1; + int line = -1, col = -1, wrapped = 0; find_match(env->line_no, env->col_no+1, &line, &col, global_config.search, NULL); if (line == -1) { if (!global_config.search_wraps) return; find_match(1,1, &line, &col, global_config.search, NULL); if (line == -1) return; + wrapped = 1; } env->col_no = col; env->line_no = line; set_preferred_column(); - draw_search_match(global_config.search, -1); + draw_search_match(global_config.search, 1); + if (wrapped) { + set_fg_color(COLOR_ALT_FG); + printf(" (search wrapped to top)"); + } } /** @@ -7001,19 +7208,24 @@ BIM_ACTION(search_prev, 0, )(void) { if (!global_config.search) return; if (env->coffset) env->coffset = 0; - int line = -1, col = -1; + int line = -1, col = -1, wrapped = 0; find_match_backwards(env->line_no, env->col_no-1, &line, &col, global_config.search); if (line == -1) { if (!global_config.search_wraps) return; find_match_backwards(env->line_count, env->lines[env->line_count-1]->actual, &line, &col, global_config.search); if (line == -1) return; + wrapped = 1; } env->col_no = col; env->line_no = line; set_preferred_column(); - draw_search_match(global_config.search, -1); + draw_search_match(global_config.search, 0); + if (wrapped) { + set_fg_color(COLOR_ALT_FG); + printf(" (search wrapped to bottom)"); + } } /** @@ -7979,7 +8191,9 @@ BIM_ACTION(delete_at_column, ARG_IS_CUSTOM | ACTION_IS_RW, if (direction == -1 && env->sel_col <= 0) return; int prev_width = 0; - for (int i = env->line_no; i <= env->start_line; i++) { + int s = (env->line_no < env->start_line) ? env->line_no : env->start_line; + int e = (env->line_no < env->start_line) ? env->start_line : env->line_no; + for (int i = s; i <= e; i++) { line_t * line = env->lines[i - 1]; int _x = 0; @@ -8384,7 +8598,9 @@ BIM_ACTION(insert_char_at_column, ARG_IS_INPUT | ACTION_IS_RW, int inserted_width = 0; /* For each line */ - for (int i = env->line_no; i <= env->start_line; i++) { + int s = (env->line_no < env->start_line) ? env->line_no : env->start_line; + int e = (env->line_no < env->start_line) ? env->start_line : env->line_no; + for (int i = s; i <= e; i++) { line_t * line = env->lines[i - 1]; int _x = 0; @@ -8413,21 +8629,17 @@ BIM_ACTION(insert_char_at_column, ARG_IS_INPUT | ACTION_IS_RW, } recalculate_tabs(line); inserted_width = line->text[col-1].display_width; + if (i == env->line_no) env->col_no = col + 1; } env->sel_col += inserted_width; - env->col_no++; + env->preferred_column = env->sel_col; + place_cursor_actual(); } BIM_ACTION(enter_col_insert, ACTION_IS_RW, "Enter column insert mode." )(void) { - if (env->start_line < env->line_no) { - /* swap */ - int tmp = env->line_no; - env->line_no = env->start_line; - env->start_line = tmp; - } env->mode = MODE_COL_INSERT; } @@ -8438,18 +8650,6 @@ BIM_ACTION(enter_col_insert_after, ACTION_IS_RW, enter_col_insert(); } -BIM_ACTION(delete_column, ACTION_IS_RW, - "(temporary) Delete the selected column." -)(void) { - /* TODO maybe a flag to do this so we can just call delete_at_column with arg = 1? */ - if (env->start_line < env->line_no) { - int tmp = env->line_no; - env->line_no = env->start_line; - env->start_line = tmp; - } - delete_at_column(1); -} - BIM_ACTION(enter_col_selection, 0, "Enter column selection mode." )(void) { @@ -8666,9 +8866,8 @@ int read_tags(uint32_t * comp, struct completion_match **matches, int * matches_ fclose(tags); } - /* TODO: Get these from syntax files with a dynamic callback */ if (env->syntax && env->syntax->completion_matcher) { - env->syntax->completion_matcher(comp,matches,matches_count,complete_match,matches_len); + env->syntax->completion_matcher(comp,matches,matches_count,complete_match,matches_len, env); } return 0; @@ -8746,6 +8945,9 @@ void draw_completion_matches(uint32_t * tmp, struct completion_match *matches, i * Autocomplete words (function/variable names, etc.) in input mode. */ int omni_complete(int quit_quietly_on_none) { + int retval = 0; + int index = 0; + int c; int (*qualifier)(int c) = simple_keyword_qualifier; @@ -8785,14 +8987,18 @@ int omni_complete(int quit_quietly_on_none) { int matches_count; /* TODO just reading ctags is rather mediocre; can we do something cool here? */ - if (read_tags(tmp, &matches, &matches_count, 0)) goto _completion_done; + if (read_tags(tmp, &matches, &matches_count, 0)) { + goto _completion_done; + } /* Draw box with matches at cursor-width(tmp) */ - if (quit_quietly_on_none && matches_count == 0) return 0; - draw_completion_matches(tmp, matches, matches_count, 0); + if (quit_quietly_on_none && matches_count == 0) { + free(tmp); + free(matches); + return 0; + } - int retval = 0; - int index = 0; + draw_completion_matches(tmp, matches, matches_count, 0); _completion_done: place_cursor_actual(); @@ -9065,6 +9271,7 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW, "Paste yanked text before (`P`) or after (`p`) the cursor." )(int direction) { if (global_config.yanks) { + env->slowop = 1; if (!global_config.yank_is_full_lines) { /* Handle P for paste before, p for past after */ int target_column = (direction == -1 ? (env->col_no) : (env->col_no+1)); @@ -9101,13 +9308,13 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW, replace_line(env->lines, env->line_no - (direction == -1 ? 1 : 0) + i, global_config.yanks[i]); } } + env->slowop = 0; /* Recalculate whole document syntax */ - for (int i = 0; i < env->line_count; ++i) { + for (int i = env->line_no - 1; i < env->line_count; ++i) { env->lines[i]->istate = 0; } - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + int line_to_recalculate = (env->line_no > 1 ? env->line_no - 2 : 0); + recalculate_syntax(env->lines[line_to_recalculate], line_to_recalculate); if (direction == 1) { if (global_config.yank_is_full_lines) { env->line_no += 1; @@ -9199,13 +9406,13 @@ BIM_ACTION(expand_split_left, 0, } BIM_ACTION(go_page_up, 0, - "Jump up a screenful." + "Jump up a screenfull." )(void) { goto_line(env->line_no - (global_config.term_height - 6)); } BIM_ACTION(go_page_down, 0, - "Jump down a screenful." + "Jump down a screenfull." )(void) { goto_line(env->line_no + (global_config.term_height - 6)); } @@ -9297,7 +9504,7 @@ BIM_ACTION(smart_backspace, ACTION_IS_RW, } BIM_ACTION(perform_omni_completion, ACTION_IS_RW, - "(temporary) Perform smart symbol competion from ctags." + "(temporary) Perform smart symbol completion from ctags." )(void) { /* This should probably be a submode */ while (omni_complete(0) == 1); @@ -9382,7 +9589,7 @@ BIM_ACTION(enter_line_selection_and_cursor_down, 0, } BIM_ACTION(shift_horizontally, ARG_IS_CUSTOM, - "Shift the current line or screen view horiztonally, depending on settings." + "Shift the current line or screen view horizontally, depending on settings." )(int amount) { env->coffset += amount; if (env->coffset < 0) env->coffset = 0; @@ -9390,19 +9597,24 @@ BIM_ACTION(shift_horizontally, ARG_IS_CUSTOM, } static int state_before_paste = 0; +static int line_before_paste = 0; BIM_ACTION(paste_begin, 0, "Begin bracketed paste; disable indentation, completion, etc.")(void) { if (global_config.smart_complete) state_before_paste |= 0x01; if (env->indent) state_before_paste |= 0x02; global_config.smart_complete = 0; env->indent = 0; - /* TODO: We need env->loading == 1, but with history (manual breaks, though) */ + env->slowop = 1; + line_before_paste = env->line_no; } BIM_ACTION(paste_end, 0, "End bracketed paste; restore indentation, completion, etc.")(void) { if (state_before_paste & 0x01) global_config.smart_complete = 1; if (state_before_paste & 0x02) env->indent = 1; - redraw_statusbar(); + env->slowop = 0; + int line_to_recalculate = (line_before_paste > 1 ? line_before_paste - 1 : 0); + recalculate_syntax(env->lines[line_to_recalculate], line_to_recalculate); + redraw_all(); } struct action_map _NORMAL_MAP[] = { @@ -9499,7 +9711,7 @@ struct action_map _COL_SELECTION_MAP[] = { {KEY_CTRL_V, leave_selection, 0, 0}, {'I', enter_col_insert, opt_rw, 0}, {'a', enter_col_insert_after, opt_rw, 0}, - {'d', delete_column, opt_norm | opt_rw, 0}, + {'d', delete_at_column, opt_arg | opt_rw, 1}, {-1, NULL, 0, 0}, }; @@ -9996,16 +10208,13 @@ static void show_usage(char * argv[]) { " %s [options] -- -\n" "\n" " -R " _s "open initial buffer read-only" _e - " -O " _s "set various options:" _e - " noscroll " _s "disable terminal scrolling" _e + " -O " _s "set various options; examples:" _e " noaltscreen " _s "disable alternate screen buffer" _e - " nomouse " _s "disable mouse support" _e " nounicode " _s "disable unicode display" _e - " nobright " _s "disable bright next" _e - " nohideshow " _s "disable togglging cursor visibility" _e " nosyntax " _s "disable syntax highlighting on load" _e - " notitle " _s "disable title-setting escapes" _e - " history " _s "enable experimental undo/redo" _e + " nohistory " _s "disable undo/redo" _e + " nomouse " _s "disable mouse support" _e + " cansgrmouse " _s "enable SGR mouse escape sequences" _e " -c,-C " _s "print file to stdout with syntax highlighting" _e " " _s "-C includes line numbers, -c does not" _e " -u " _s "override bimrc file" _e @@ -10023,6 +10232,23 @@ static void show_usage(char * argv[]) { #undef _s } +/** + * These methods deal with user functions, which are defined in scripts. + * User functions can be called as actions, or called from the command line. + * They are also used to define themes and preload actions for different filetypes. + * + * Right now, user functions are essentially just a list of commands to run, but + * eventually they should be replaced with a proper scripting language with support + * for looping, conditionals, variables... + * + * Also all of run/has/find loop over the whole index individually, and + * `has` and `find` use the exact same logic, so we probably only need one + * of them (find) and not the other? + */ + +/** + * Delete a user function by deleting all of its commands. + */ void free_function(struct bim_function * func) { do { struct bim_function * next = func->next; @@ -10032,6 +10258,9 @@ void free_function(struct bim_function * func) { } while (func); } +/** + * Given a function name, run that function. + */ int run_function(char * name) { for (int i = 0; i < flex_user_functions_count; ++i) { if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { @@ -10052,6 +10281,9 @@ int run_function(char * name) { return -1; } +/** + * Does a function by this name exist? + */ int has_function(char * name) { for (int i = 0; i < flex_user_functions_count; ++i) { if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { @@ -10061,6 +10293,9 @@ int has_function(char * name) { return 0; } +/** + * Locate a function by name. + */ int find_function(char * name) { for (int i = 0; i < flex_user_functions_count; ++i) { if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { @@ -10195,9 +10430,6 @@ BIM_COMMAND(runscript,"runscript","Run a script file") { if (!strncmp(linebuf, "function ", 9)) { /* Confirm we have a function name */ if (was_collecting_function) { - free_function(new_function); - render_error("Syntax error on line %d: attempt nest function while already defining function '%s'", line, function_name); - retval = 1; break; } if (!strlen(linebuf+9)) { @@ -10303,6 +10535,89 @@ BIM_COMMAND(rundir,"rundir","Run scripts from a directory, in unspecified order" return 0; } +/** + * Enable or disable terminal features/quirks and other options. + * Used by -O and by the `quirks` bimrc command. + */ +int set_capability(char * arg) { + char * argname; + int value; + if (strstr(arg,"no") == arg) { + argname = &arg[2]; + value = 0; + } else if (strstr(arg,"can") == arg) { + argname = &arg[3]; + value = 1; + } else { + render_error("Capabilities must by 'no{CAP}' or 'can{CAP}': %s", arg); + return 2; + } + + /* Terminal features / quirks */ + if (!strcmp(argname, "24bit")) global_config.can_24bit = value; + else if (!strcmp(argname, "256color")) global_config.can_256color = value; + else if (!strcmp(argname, "altscreen")) global_config.can_altscreen = value; + else if (!strcmp(argname, "bce")) global_config.can_bce = value; + else if (!strcmp(argname, "bright")) global_config.can_bright = value; + else if (!strcmp(argname, "hideshow")) global_config.can_hideshow = value; + else if (!strcmp(argname, "italic")) global_config.can_italic = value; + else if (!strcmp(argname, "mouse")) global_config.can_mouse = value; + else if (!strcmp(argname, "scroll")) global_config.can_scroll = value; + else if (!strcmp(argname, "title")) global_config.can_title = value; + else if (!strcmp(argname, "unicode")) global_config.can_unicode = value; + else if (!strcmp(argname, "insert")) global_config.can_insert = value; + else if (!strcmp(argname, "paste")) global_config.can_bracketedpaste = value; + else if (!strcmp(argname, "sgrmouse")) global_config.can_sgrmouse = value; + /* Startup options */ + else if (!strcmp(argname, "syntax")) global_config.highlight_on_open = value; + else if (!strcmp(argname, "history")) global_config.history_enabled = value; + else { + render_error("Unknown capability: %s", argname); + return 1; + } + return 0; +} + +BIM_COMMAND(setcap, "setcap", "Enable or disable quirks/features.") { + for (int i = 1; i < argc; ++i) { + if (set_capability(argv[i])) return 1; + } + return 0; +} + +BIM_COMMAND(quirk,"quirk","Handle quirks based on environment variables") { + if (argc < 2) goto _quirk_arg_error; + char * varname = argv[1]; + char * teststr = strstr(varname, " "); + if (!teststr) goto _quirk_arg_error; + *teststr = '\0'; + teststr++; + + char * arg = strstr(teststr, " "); + if (!arg) goto _quirk_arg_error; + *arg = '\0'; + arg++; + + char * value = getenv(varname); + if (!value) return 0; + + if (strstr(value, teststr) == value) { + /* Process quirk strings */ + while (arg) { + char * next = strstr(arg, " "); + if (next) { *next = '\0'; next++; } + /* Quirks disable default-enabled options; continue on error by default */ + set_capability(arg); + arg = next; + } + } + + return 0; +_quirk_arg_error: + render_error("Usage: quirk ENVVAR value no... can..."); + return 1; +} + /** * Load bimrc configuration file. * @@ -10336,7 +10651,10 @@ void load_bimrc(void) { } struct stat statbuf; - if (stat(tmp, &statbuf)) return; + if (stat(tmp, &statbuf)) { + free(tmp); + return; + } char * args[] = {"runscript", tmp, NULL}; if (bim_command_runscript("runscript", 2, args)) { @@ -10345,64 +10663,7 @@ void load_bimrc(void) { int c; while ((c = bim_getch(), c != ENTER_KEY && c != LINE_FEED)); } -} - -/** - * Set some default values when certain terminals are detected. - */ -void detect_weird_terminals(void) { - - char * term = getenv("TERM"); - if (term && !strcmp(term,"linux")) { - /* Linux VTs can't scroll. */ - global_config.can_scroll = 0; - } - if (term && !strcmp(term,"cons25")) { - /* Dragonfly BSD console */ - global_config.can_hideshow = 0; - global_config.can_altscreen = 0; - global_config.can_mouse = 0; - global_config.can_unicode = 0; - global_config.can_bright = 0; - } - if (term && !strcmp(term,"sortix")) { - /* sortix will spew title escapes to the screen, no good */ - global_config.can_title = 0; - } - if (term && strstr(term,"tmux") == term) { - global_config.can_scroll = 0; - global_config.can_bce = 0; - } - if (term && strstr(term,"screen") == term) { - /* unfortunately */ - global_config.can_24bit = 0; - global_config.can_italic = 0; - } - if (term && strstr(term,"toaru-vga") == term) { - global_config.can_24bit = 0; /* Also not strictly true */ - global_config.can_256color = 0; /* Not strictly true */ - } - if (term && strstr(term,"xterm-256color") == term) { - global_config.can_insert = 1; - global_config.can_bracketedpaste = 1; - char * term_emu = getenv("TERMINAL_EMULATOR"); - if (term_emu && strstr(term_emu,"JetBrains")) { - global_config.can_bce = 0; - } - } - if (term && strstr(term,"toaru") == term) { - global_config.can_insert = 1; - global_config.can_bracketedpaste = 1; - } - - if (!global_config.can_unicode) { - global_config.tab_indicator = strdup(">"); - global_config.space_indicator = strdup("-"); - } else { - global_config.tab_indicator = strdup("»"); - global_config.space_indicator = strdup("·"); - } - + free(tmp); } /** @@ -10438,8 +10699,9 @@ void initialize(void) { #undef CLONE_MAP - /* Detect terminal quirks */ - detect_weird_terminals(); + /* Simple ASCII defaults, but you could use " " as a config option */ + global_config.tab_indicator = strdup(">"); + global_config.space_indicator = strdup("-"); /* Load bimrc */ load_bimrc(); @@ -10494,22 +10756,41 @@ void dump_mapping(const char * description, struct action_map * map) { printf("\n"); } +int sort_regular_commands(const void * a, const void * b) { + return strcmp(regular_commands[*(int *)a].name, regular_commands[*(int *)b].name); +} + +int sort_prefix_commands(const void * a, const void * b) { + return strcmp(prefix_commands[*(int *)a].name, prefix_commands[*(int *)b].name); +} + void dump_commands(void) { printf("## Regular Commands\n"); printf("\n"); printf("| **Command** | **Description** |\n"); printf("|-------------|-----------------|\n"); - for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { - printf("| `:%s` | %s |\n", c->name, c->description); + int * offsets = malloc(sizeof(int) * flex_regular_commands_count); + for (int i = 0; i < flex_regular_commands_count; ++i) { + offsets[i] = i; + } + qsort(offsets, flex_regular_commands_count, sizeof(int), sort_regular_commands); + for (int i = 0; i < flex_regular_commands_count; ++i) { + printf("| `:%s` | %s |\n", regular_commands[offsets[i]].name, regular_commands[offsets[i]].description); } + free(offsets); printf("\n"); printf("## Prefix Commands\n"); printf("\n"); printf("| **Command** | **Description** |\n"); printf("|-------------|-----------------|\n"); - for (struct command_def * c = prefix_commands; prefix_commands && c->name; ++c) { - printf("| `:%s...` | %s |\n", !strcmp(c->name, "`") ? "`(backtick)`" : c->name, c->description); - } + offsets = malloc(sizeof(int) * flex_prefix_commands_count); + for (int i = 0; i < flex_prefix_commands_count; ++i) offsets[i] = i; + qsort(offsets, flex_prefix_commands_count, sizeof(int), sort_regular_commands); + for (int i = 0; i < flex_prefix_commands_count; ++i) { + printf("| `:%s...` | %s |\n", !strcmp(prefix_commands[offsets[i]].name, "`") ? "`(backtick)`" : + prefix_commands[offsets[i]].name, prefix_commands[offsets[i]].description); + } + free(offsets); printf("\n"); } @@ -10922,17 +11203,7 @@ int main(int argc, char * argv[]) { break; case 'O': /* Set various display options */ - if (!strcmp(optarg,"noaltscreen")) global_config.can_altscreen = 0; - else if (!strcmp(optarg,"noscroll")) global_config.can_scroll = 0; - else if (!strcmp(optarg,"nomouse")) global_config.can_mouse = 0; - else if (!strcmp(optarg,"nounicode")) global_config.can_unicode = 0; - else if (!strcmp(optarg,"nobright")) global_config.can_bright = 0; - else if (!strcmp(optarg,"nohideshow")) global_config.can_hideshow = 0; - else if (!strcmp(optarg,"nosyntax")) global_config.highlight_on_open = 0; - else if (!strcmp(optarg,"nohistory")) global_config.history_enabled = 0; - else if (!strcmp(optarg,"notitle")) global_config.can_title = 0; - else if (!strcmp(optarg,"nobce")) global_config.can_bce = 0; - else { + if (set_capability(optarg)) { fprintf(stderr, "%s: unrecognized -O option: %s\n", argv[0], optarg); return 1; } @@ -11316,6 +11587,23 @@ int syn_bimcmd_calculate(struct syntax_state * state) { } } return -1; + } else if (match_and_paint(state, "quirk", FLAG_KEYWORD, cmd_qualifier)) { + if (charat() == ' ') skip(); + while (charat() != -1 && charat() != ' ') paint(1, FLAG_TYPE); + if (charat() == ' ') skip(); + while (charat() != -1 && charat() != ' ') paint(1, FLAG_NUMERAL); + if (charat() != ' ') skip(); + while (charat() != -1) { + if (charat() == 'n' && nextchar() == 'o') { + while (charat() != -1 && charat() != ' ') paint(1, FLAG_DIFFMINUS); + } else if (charat() == 'c' && nextchar() == 'a' && charrel(2) == 'n') { + while (charat() != -1 && charat() != ' ') paint(1, FLAG_DIFFPLUS); + } else { + while (charat() != -1 && charat() != ' ') paint(1, FLAG_ERROR); + } + if (charat() == ' ') skip(); + } + return -1; } else if (match_and_paint(state, "mapkey", FLAG_KEYWORD, cmd_qualifier)) { if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } for (struct mode_names * m = mode_names; m->name; ++m) { @@ -11325,11 +11613,15 @@ int syn_bimcmd_calculate(struct syntax_state * state) { while (charat() != ' ' && charat() != -1) skip(); /* key name */ if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } for (struct action_def * a = mappable_actions; a->name; ++a) { - if (match_and_paint(state, a->name, FLAG_TYPE, cmd_qualifier)) break; + if (match_and_paint(state, a->name, FLAG_TYPE, cmd_qualifier)) goto _found; + } + for (struct bim_function ** f = user_functions; user_functions && *f; ++f) { + if (match_and_paint(state, (*f)->command, FLAG_TYPE, cmd_qualifier)) goto _found; } match_and_paint(state, "none", FLAG_TYPE, cmd_qualifier); + _found: if (charat() == -1) return -1; - if (charat() == ' ' && charat() != -1) skip(); else { paint(1, FLAG_ERROR); return -1; } + if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } while (charat() != -1 && charat() != ' ') { if (!strchr("racnwmb",charat())) { paint(1, FLAG_ERROR); @@ -13081,8 +13373,8 @@ int syn_markdown_calculate(struct syntax_state * state) { /* Go backwards until we find the source ``` */ int count = 0; for (int i = state->line_no; i > 0; i--) { - if (env->lines[i]->istate < 1) { - while (env->lines[i]->text[count].codepoint == ' ') { + if (state->env->lines[i]->istate < 1) { + while (state->env->lines[i]->text[count].codepoint == ' ') { if (charrel(count) != ' ') goto _nope; count++; } From db23c987a96c75937ccec15c6189a1f6584fe06e Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 1 Jan 2021 17:19:44 +0900 Subject: [PATCH 055/102] Pull in Kuroko (as a submodule, but with build integration) --- .github/workflows/build.yml | 1 + .gitignore | 3 + .gitmodules | 3 + Makefile | 37 ++++++- apps/kuroko.c | 159 +++++++++++++++++++++++++++++ base/usr/include/toaru/rline_exp.h | 1 + kuroko | 1 + lib/rline_exp.c | 103 +++++++++++++++++++ libc/stdio/printf.c | 1 + util/auto-dep.py | 15 +++ 10 files changed, 321 insertions(+), 3 deletions(-) create mode 100644 .gitmodules create mode 100644 apps/kuroko.c create mode 160000 kuroko diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9a6c194c..06826cb3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,6 +8,7 @@ jobs: uses: actions/checkout@v2 with: fetch-depth: 0 + submodules: true - name: Pull Builder Image run: docker pull toaruos/build-tools:1.8.x - name: Run Builder diff --git a/.gitignore b/.gitignore index bb385eb4..2573aa58 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,6 @@ # SDL /base/usr/include/SDL + +# Kuroko build files +/base/usr/share/kuroko diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..47e008c2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "kuroko"] + path = kuroko + url = git@github.com:klange/kuroko diff --git a/Makefile b/Makefile index a6f06d6f..5bf652cc 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ LC=base/lib/libc.so ## # APPS = C sources from apps/ # APPS_X = binaries -# APPS_Y = generated makefiles for binaries (except init) +# APPS_Y = generated makefiles for binaries # APPS_SH = shell scripts to copy to base/bin/ and mark executable # APPS_SH_X = destinations for shell scripts APPS=$(patsubst apps/%.c,%,$(wildcard apps/*.c)) @@ -63,7 +63,7 @@ tags: $(SOURCE_FILES) ## # Files that must be present in the ramdisk (apps, libraries) -RAMDISK_FILES= ${APPS_X} ${APPS_SH_X} ${LIBS_X} base/lib/ld.so base/lib/libm.so +RAMDISK_FILES= ${APPS_X} ${APPS_SH_X} ${LIBS_X} base/lib/ld.so base/lib/libm.so ${KUROKO_FILES} # Kernel / module flags @@ -162,13 +162,15 @@ base/cdrom: mkdir -p $@ base/var: mkdir -p $@ +base/usr/share/kuroko: + mkdir -p $@ fatbase/efi/boot: mkdir -p $@ cdrom: mkdir -p $@ .make: mkdir -p .make -dirs: base/dev base/tmp base/proc base/bin base/lib base/cdrom cdrom base/var fatbase/efi/boot .make +dirs: base/dev base/tmp base/proc base/bin base/lib base/cdrom base/usr/share/kuroko cdrom base/var fatbase/efi/boot .make # C Library @@ -192,6 +194,34 @@ base/lib/libc.so: ${LIBC_OBJS} | dirs crts base/lib/libm.so: util/lm.c | dirs crts $(CC) -nodefaultlibs -o $@ $(CFLAGS) -shared -fPIC $^ -lgcc +KUROKO_OBJS=$(patsubst %.c, %.o, $(filter-out kuroko/rline.c kuroko/kuroko.c, $(sort $(wildcard kuroko/*.c)))) kuroko/builtins.o +kuroko/builtins.c: kuroko/builtins.krk + echo "const char _builtins_src[] = {\n" > $@ + hexdump -v -e '16/1 "0x%02x,"' -e '"\n"' $< | sed s'/0x ,//g' >> $@ + echo "0x00 };" >> $@ +kuroko/%.o: kuroko/%.c + $(CC) $(CFLAGS) -fPIC -c -o $@ $^ + +KUROKO_CMODS=$(patsubst kuroko/src/%.c,%,$(wildcard kuroko/src/*.c)) +KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/usr/share/kuroko/$(lib).so) +KUROKO_CMODS_Y=$(foreach lib,$(KUROKO_CMODS),.make/$(lib).kmak) +KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/share/kuroko/%.krk,$(wildcard kuroko/modules/*.krk)) + +KUROKO_FILES=$(KUROKO_CMODS_X) $(KUROKO_KRK_MODS) base/lib/libkuroko.so + +base/usr/share/kuroko/%.krk: kuroko/modules/%.krk + cp $< $@ + +.make/%.kmak: kuroko/src/%.c util/auto-dep.py | dirs + util/auto-dep.py --makekurokomod $< > $@ + +ifeq (,$(findstring clean,$(MAKECMDGOALS))) +-include ${KUROKO_CMODS_Y} +endif + +base/lib/libkuroko.so: $(KUROKO_OBJS) | dirs crts ${LC} + $(CC) $(CFLAGS) -shared -fPIC -o $@ $^ -lgcc + # Userspace Linker/Loader base/lib/ld.so: linker/linker.c base/lib/libc.a | dirs @@ -305,6 +335,7 @@ clean: rm -f base/lib/crt*.o rm -f ${MODULES} rm -f ${APPS_Y} ${LIBS_Y} ${EXT_LIBS_Y} + rm -f ${KUROKO_FILES} ifneq (,$(findstring Microsoft,$(shell uname -r))) QEMU_ARGS=-serial mon:stdio -m 1G -rtc base=localtime -vnc :0 diff --git a/apps/kuroko.c b/apps/kuroko.c new file mode 100644 index 00000000..b7c5240c --- /dev/null +++ b/apps/kuroko.c @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include "chunk.h" +#include "debug.h" +#include "vm.h" +#include "memory.h" + + +int main(int argc, char * argv[]) { + int flags = 0; + int opt; + while ((opt = getopt(argc, argv, "tdgs")) != -1) { + switch (opt) { + case 't': + flags |= KRK_ENABLE_TRACING; + break; + case 'd': + flags |= KRK_ENABLE_DEBUGGING; + break; + case 's': + flags |= KRK_ENABLE_SCAN_TRACING; + break; + case 'g': + flags |= KRK_ENABLE_STRESS_GC; + break; + } + } + + krk_initVM(flags); + + KrkValue result = INTEGER_VAL(0); + + if (optind == argc) { + /* Run the repl */ + int exit = 0; + + rline_exit_string=""; + rline_exp_set_syntax("krk"); + //rline_exp_set_shell_commands(shell_commands, shell_commands_len); + //rline_exp_set_tab_complete_func(tab_complete_func); + + while (!exit) { + size_t lineCapacity = 8; + size_t lineCount = 0; + char ** lines = ALLOCATE(char *, lineCapacity); + size_t totalData = 0; + int valid = 1; + char * allData = NULL; + int inBlock = 0; + int blockWidth = 0; + + rline_exp_set_prompts(">>> ", "", 4, 0); + + while (1) { + /* This would be a nice place for line editing */ + char buf[4096] = {0}; + + if (inBlock) { + rline_exp_set_prompts(" > ", "", 4, 0); + rline_preload = malloc(blockWidth + 1); + for (int i = 0; i < blockWidth; ++i) { + rline_preload[i] = ' '; + } + rline_preload[blockWidth] = '\0'; + } + + rline_scroll = 0; + if (rline_experimental(buf, 4096) == 0) { + valid = 0; + exit = 1; + break; + } + if (buf[strlen(buf)-1] != '\n') { + fprintf(stderr, "Expected end of line in repl input. Did you ^D early?\n"); + valid = 0; + break; + } + if (lineCapacity < lineCount + 1) { + size_t old = lineCapacity; + lineCapacity = GROW_CAPACITY(old); + lines = GROW_ARRAY(char *,lines,old,lineCapacity); + } + + int i = lineCount++; + lines[i] = strdup(buf); + + size_t lineLength = strlen(lines[i]); + totalData += lineLength; + + int is_spaces = 1; + int count_spaces = 0; + for (size_t j = 0; j < lineLength; ++j) { + if (lines[i][j] != ' ' && lines[i][j] != '\n') { + is_spaces = 0; + break; + } + count_spaces += 1; + } + + if (lineLength > 2 && lines[i][lineLength-2] == ':') { + inBlock = 1; + blockWidth = count_spaces + 4; + continue; + } else if (inBlock && lineLength != 1) { + if (is_spaces) { + free(lines[i]); + totalData -= lineLength; + lineCount--; + break; + } + blockWidth = count_spaces; + continue; + } + + break; + } + + if (valid) { + allData = malloc(totalData + 1); + allData[0] = '\0'; + } + for (size_t i = 0; i < lineCount; ++i) { + if (valid) strcat(allData, lines[i]); + rline_history_insert(strdup(lines[i])); + free(lines[i]); + } + FREE_ARRAY(char *, lines, lineCapacity); + + if (valid) { + KrkValue result = krk_interpret(allData, 0, "",""); + if (!IS_NONE(result)) { + fprintf(stdout, " \033[1;30m=> "); + krk_printValue(stdout, result); + fprintf(stdout, "\033[0m\n"); + } + } + + } + } else { + + for (int i = optind; i < argc; ++i) { + KrkValue out = krk_runfile(argv[i],0,"",argv[i]); + if (i + 1 == argc) result = out; + } + } + + krk_freeVM(); + + if (IS_INTEGER(result)) return AS_INTEGER(result); + + return 0; +} diff --git a/base/usr/include/toaru/rline_exp.h b/base/usr/include/toaru/rline_exp.h index a3a5fd0e..d57605ac 100644 --- a/base/usr/include/toaru/rline_exp.h +++ b/base/usr/include/toaru/rline_exp.h @@ -10,5 +10,6 @@ extern int rline_exp_set_prompts(char * left, char * right, int left_width, int extern int rline_exp_set_shell_commands(char ** cmds, int len); extern int rline_exp_set_tab_complete_func(rline_callback_t func); extern int rline_exp_set_syntax(char * name); +extern char * rline_preload; _End_C_Header diff --git a/kuroko b/kuroko new file mode 160000 index 00000000..a9fffce7 --- /dev/null +++ b/kuroko @@ -0,0 +1 @@ +Subproject commit a9fffce795bef002469b6c1cb17aef7962a785bd diff --git a/lib/rline_exp.c b/lib/rline_exp.c index 46a2bffe..f3c98999 100644 --- a/lib/rline_exp.c +++ b/lib/rline_exp.c @@ -726,6 +726,95 @@ int syn_py_calculate(struct syntax_state * state) { return -1; } +void paint_single_string(struct syntax_state * state) { + /* Assumes you came in from a check of charat() == '\'' */ + paint(1, FLAG_NUMERAL); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == '\'') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '\'') { + paint(1, FLAG_NUMERAL); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else { + paint(1, FLAG_NUMERAL); + } + } +} + + +char * syn_krk_keywords[] = { + "and","class","def","else","export","for","if","in","import", + "let","not","or","print","return","while","try","except","raise", + "continue","break", + NULL +}; + +char * syn_krk_types[] = { + /* built-in functions */ + "self", "super", /* implicit in a class method */ + "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ + "list","dict","range", /* builtin classes */ + "object","exception","isinstance","type", + NULL +}; + +char * syn_krk_special[] = { + "True","False","None", + NULL +}; + +int paint_krk_numeral(struct syntax_state * state) { + if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { + paint(2, FLAG_NUMERAL); + while (isxdigit(charat())) paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && (nextchar() == 'o' || nextchar() == 'O')) { + paint(2, FLAG_NUMERAL); + while (charat() >= '0' && charat() <= '7') paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && (nextchar() == 'b' || nextchar() == 'B')) { + paint(2, FLAG_NUMERAL); + while (charat() == '0' || charat() == '1') paint(1, FLAG_NUMERAL); + } else { + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + if (charat() == '.') { + paint(1, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } + } + return 0; +} + +int syn_krk_calculate(struct syntax_state * state) { + switch (state->state) { + case -1: + case 0: + if (charat() == '#') { + paint_comment(state); + } else if (charat() == '"') { + paint_simple_string(state); + return 0; + } else if (charat() == '\'') { + paint_single_string(state); + return 0; + } else if (find_keywords(state, syn_krk_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { + return 0; + } else if (lastchar() != '.' && find_keywords(state, syn_krk_types, FLAG_TYPE, c_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, syn_krk_special, FLAG_NUMERAL, c_keyword_qualifier)) { + return 0; + } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { + paint_krk_numeral(state); + return 0; + } else if (charat() != -1) { + skip(); + return 0; + } + break; + } + return -1; +} + /** * Convert syntax hilighting flag to color code */ @@ -767,6 +856,7 @@ struct syntax_definition { } syntaxes[] = { {"esh",syn_esh_calculate}, {"python",syn_py_calculate}, + {"krk",syn_krk_calculate}, {NULL, NULL}, }; @@ -1579,6 +1669,8 @@ static void call_rline_func(rline_callback_t func, rline_context_t * context) { place_cursor_actual(); } +char * rline_preload = NULL; + /** * Perform actual interactive line editing. * @@ -1600,6 +1692,17 @@ static int read_line(void) { for (int i = 0; i < full_width - 1; ++i) { fprintf(stdout, " "); } + + if (rline_preload) { + char * c = rline_preload; + while (*c) { + insert_char(*c); + c++; + } + free(rline_preload); + rline_preload = NULL; + } + render_line(); place_cursor_actual(); diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 8f2faf00..111362c9 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -217,6 +217,7 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { case 'p': if (!arg_width) { arg_width = 8; + alt = 1; } case 'x': /* Hexadecimal number */ if (alt) { diff --git a/util/auto-dep.py b/util/auto-dep.py index 35a5ce21..81f1a9e2 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -36,6 +36,8 @@ class Classifier(object): '': (None, '-ltoaru_menu', ['', '', '', '', '']), '': (None, '-ltoaru_textregion', ['', '','', '']), '': (None, '-ltoaru_button', ['','', '']), + # Kuroko + '': ('../../../kuroko', '-lkuroko', []), # OPTIONAL third-party libraries, for extensions / ports '': ('freetype2', '-lfreetype', []), '': ('pixman-1', '-lpixman-1', []), @@ -101,6 +103,8 @@ def todep(name): name = name.replace("-l","",1) if name.startswith('toaru'): return (True, "%s/lib%s.so" % ('base/lib', name)) + elif name.startswith('kuroko'): + return (True, "%s/lib%s.so" % ('base/lib', name)) else: return (True, "%s/lib%s.so" % ('base/usr/lib', name)) else: @@ -173,4 +177,15 @@ def toheader(name): libraries=" ".join([x for x in _libs]), includes=" ".join([x for x in c.includes if x is not None]) )) + elif command == "--makekurokomod": + libname = os.path.basename(filename).replace(".c","") + _libs = [x for x in c.libs if not x.startswith('-ltoaru_') or x.replace("-ltoaru_","") != libname] + print("base/usr/share/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) {includes} -shared -fPIC -o $@ $< {libraries}".format( + lib=libname, + source=filename, + headers=" ".join([toheader(x) for x in c.libs]), + libraryfiles=" ".join([todep(x)[1] for x in _libs]), + libraries=" ".join([x for x in _libs]), + includes=" ".join([x for x in c.includes if x is not None]) + )) From 18cd88cf4e7ffca215c4726163d798a0d504ea63 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 1 Jan 2021 17:26:06 +0900 Subject: [PATCH 056/102] kuroko: Don't have our build produce builtins.c, assume it's already there. --- Makefile | 6 +----- kuroko | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 5bf652cc..61adec3b 100644 --- a/Makefile +++ b/Makefile @@ -194,11 +194,7 @@ base/lib/libc.so: ${LIBC_OBJS} | dirs crts base/lib/libm.so: util/lm.c | dirs crts $(CC) -nodefaultlibs -o $@ $(CFLAGS) -shared -fPIC $^ -lgcc -KUROKO_OBJS=$(patsubst %.c, %.o, $(filter-out kuroko/rline.c kuroko/kuroko.c, $(sort $(wildcard kuroko/*.c)))) kuroko/builtins.o -kuroko/builtins.c: kuroko/builtins.krk - echo "const char _builtins_src[] = {\n" > $@ - hexdump -v -e '16/1 "0x%02x,"' -e '"\n"' $< | sed s'/0x ,//g' >> $@ - echo "0x00 };" >> $@ +KUROKO_OBJS=$(patsubst %.c, %.o, $(filter-out kuroko/rline.c kuroko/kuroko.c, $(sort $(wildcard kuroko/*.c)))) kuroko/%.o: kuroko/%.c $(CC) $(CFLAGS) -fPIC -c -o $@ $^ diff --git a/kuroko b/kuroko index a9fffce7..30613c63 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit a9fffce795bef002469b6c1cb17aef7962a785bd +Subproject commit 30613c6354415e0bca104dfd1a7c650a57ab37ea From b8aecc7a3774d8a7c89e0446afd707031a1ea746 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 1 Jan 2021 18:08:30 +0900 Subject: [PATCH 057/102] rline: officially adopt rline_exp as the only rline, and bring in some improvements from kuroko --- apps/kuroko.c | 3 +- apps/sh.c | 87 +- base/home/local/.eshrc | 3 - base/usr/include/toaru/rline.h | 20 +- base/usr/include/toaru/rline_exp.h | 15 - kuroko | 2 +- lib/rline.c | 2388 ++++++++++++++++++++++------ lib/rline_exp.c | 125 +- util/auto-dep.py | 1 - 9 files changed, 2050 insertions(+), 594 deletions(-) delete mode 100644 base/usr/include/toaru/rline_exp.h diff --git a/apps/kuroko.c b/apps/kuroko.c index b7c5240c..097e270a 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -5,7 +5,6 @@ #include #include -#include #include #include "chunk.h" #include "debug.h" @@ -72,7 +71,7 @@ int main(int argc, char * argv[]) { } rline_scroll = 0; - if (rline_experimental(buf, 4096) == 0) { + if (rline(buf, 4096) == 0) { valid = 0; exit = 1; break; diff --git a/apps/sh.c b/apps/sh.c index 5f62f330..cdc0963b 100644 --- a/apps/sh.c +++ b/apps/sh.c @@ -38,7 +38,6 @@ #include #include #include -#include #ifndef environ extern char **environ; @@ -67,7 +66,6 @@ int shell_interactive = 1; int last_ret = 0; char ** shell_argv = NULL; int shell_argc = 0; -int experimental_rline = 1; static int current_line = 0; static char * current_file = NULL; @@ -364,26 +362,6 @@ void sig_break_loop(int sig) { } } -void redraw_prompt_func(rline_context_t * context) { - draw_prompt(); -} - -void draw_prompt_c() { - char * ps2 = getenv("PS2"); - if (ps2) { - char buf[1024]; - int display_width; - print_extended_ps(ps2, buf, &display_width); - fprintf(stdout, "%s", buf); - } else { - printf("> "); - } - fflush(stdout); -} -void redraw_prompt_func_c(rline_context_t * context) { - draw_prompt_c(); -} - void tab_complete_func(rline_context_t * c) { char * dup = malloc(LINE_LEN); @@ -699,48 +677,30 @@ void add_environment(list_t * env) { } int read_entry(char * buffer) { - if (experimental_rline) { - char lprompt[1024], rprompt[1024]; - int lwidth, rwidth; - - char * ps1 = getenv("PS1_LEFT"); - print_extended_ps(ps1 ? ps1 : FALLBACK_PS1, lprompt, &lwidth); - - char * ps1r = getenv("PS1_RIGHT"); - print_extended_ps(ps1r ? ps1r : "", rprompt, &rwidth); - - rline_exit_string="exit"; - rline_exp_set_syntax("esh"); - rline_exp_set_prompts(lprompt, rprompt, lwidth, rwidth); - rline_exp_set_shell_commands(shell_commands, shell_commands_len); - rline_exp_set_tab_complete_func(tab_complete_func); - return rline_experimental(buffer, LINE_LEN); - } else { - rline_callbacks_t callbacks = { - tab_complete_func, redraw_prompt_func, NULL, - NULL, NULL, NULL, NULL, NULL - }; - draw_prompt(); - return rline((char *)buffer, LINE_LEN, &callbacks); - } + char lprompt[1024], rprompt[1024]; + int lwidth, rwidth; + + char * ps1 = getenv("PS1_LEFT"); + print_extended_ps(ps1 ? ps1 : FALLBACK_PS1, lprompt, &lwidth); + + char * ps1r = getenv("PS1_RIGHT"); + print_extended_ps(ps1r ? ps1r : "", rprompt, &rwidth); + + rline_exit_string="exit"; + rline_exp_set_syntax("esh"); + rline_exp_set_prompts(lprompt, rprompt, lwidth, rwidth); + rline_exp_set_shell_commands(shell_commands, shell_commands_len); + rline_exp_set_tab_complete_func(tab_complete_func); + return rline(buffer, LINE_LEN); } int read_entry_continued(char * buffer) { - if (experimental_rline) { - rline_exit_string="exit"; - rline_exp_set_syntax("esh"); - rline_exp_set_prompts("> ", "", 2, 0); - rline_exp_set_shell_commands(shell_commands, shell_commands_len); - rline_exp_set_tab_complete_func(tab_complete_func); - return rline_experimental(buffer, LINE_LEN); - } else { - rline_callbacks_t callbacks = { - tab_complete_func, redraw_prompt_func_c, NULL, - NULL, NULL, NULL, NULL, NULL - }; - draw_prompt_c(); - return rline((char *)buffer, LINE_LEN, &callbacks); - } + rline_exit_string="exit"; + rline_exp_set_syntax("esh"); + rline_exp_set_prompts("> ", "", 2, 0); + rline_exp_set_shell_commands(shell_commands, shell_commands_len); + rline_exp_set_tab_complete_func(tab_complete_func); + return rline(buffer, LINE_LEN); } int variable_char(uint8_t c) { @@ -1713,11 +1673,8 @@ int main(int argc, char ** argv) { if (argc > 1) { int c; - while ((c = getopt(argc, argv, "Rc:v?")) != -1) { + while ((c = getopt(argc, argv, "c:v?")) != -1) { switch (c) { - case 'R': - experimental_rline = 0; - break; case 'c': shell_interactive = 0; { diff --git a/base/home/local/.eshrc b/base/home/local/.eshrc index e6632d70..f5589659 100644 --- a/base/home/local/.eshrc +++ b/base/home/local/.eshrc @@ -1,9 +1,6 @@ export PS1_TITLE="\[\e]1;\u@\h:\w\\007\e]2;\u@\h:\w\\007\]" export PS1_RIGHT="\[\\e[1m\e[38;5;59m\][\[\e[38;5;173m\]\d \[\e[38;5;167m\]\t\[\e[38;5;59m\]] \[\e[0m\]" export PS1_LEFT="${PS1_TITLE}\[\e[1m\e[38;5;221m\]\u\[\e[38;5;59m\]@\[\e[38;5;81m\]\h \[\e[38;5;167m\]\r\[\e[0m\]\w\U\\\$\[\e[0m\] " -export RLINE_THEME="sunsmoke" -# Old prompt -export PS1="\e]1;\u@\h:\w\\007\e]2;\u@\\h:\w\007\\e[1m\e[s\e[400C\e[16D\e[1m\e[38;5;59m[\e[38;5;173m\d \e[38;5;167m\t\e[38;5;59m]\e[u\e[38;5;221m\u\e[38;5;59m@\e[38;5;81m\h \e[38;5;167m\r\e[0m\w\U\\\$\e[0m " if equals? "$TERM" "toaru-vga" then export RLINE_THEME="default" else export RLINE_THEME="sunsmoke" diff --git a/base/usr/include/toaru/rline.h b/base/usr/include/toaru/rline.h index d955ad95..08926cca 100644 --- a/base/usr/include/toaru/rline.h +++ b/base/usr/include/toaru/rline.h @@ -1,8 +1,5 @@ #pragma once -#include <_cheader.h> - -_Begin_C_Header struct rline_callback; typedef struct { @@ -30,12 +27,11 @@ typedef struct rline_callback { rline_callback_t rev_search; } rline_callbacks_t; -extern void rline_redraw(rline_context_t * context); -extern void rline_redraw_clean(rline_context_t * context); -extern void rline_insert(rline_context_t * context, const char * what); -extern int rline(char * buffer, int buf_size, rline_callbacks_t * callbacks); -extern void rline_reverse_search(rline_context_t * context); - +extern int rline(char * buffer, int buf_size); +extern int rline_exp_set_prompts(char * left, char * right, int left_width, int right_width); +extern int rline_exp_set_shell_commands(char ** cmds, int len); +extern int rline_exp_set_tab_complete_func(rline_callback_t func); +extern int rline_exp_set_syntax(char * name); extern void rline_history_insert(char * str); extern void rline_history_append_line(char * str); extern char * rline_history_get(int item); @@ -47,6 +43,8 @@ extern int rline_history_count; extern int rline_history_offset; extern int rline_scroll; extern char * rline_exit_string; +extern char * rline_preload; -_End_C_Header - +/* Legacy stuff */ +extern void rline_redraw(rline_context_t * context); +extern void rline_insert(rline_context_t * context, const char * what); diff --git a/base/usr/include/toaru/rline_exp.h b/base/usr/include/toaru/rline_exp.h deleted file mode 100644 index d57605ac..00000000 --- a/base/usr/include/toaru/rline_exp.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include <_cheader.h> -#include - -_Begin_C_Header - -extern int rline_experimental(char * buffer, int buf_size); -extern int rline_exp_set_prompts(char * left, char * right, int left_width, int right_width); -extern int rline_exp_set_shell_commands(char ** cmds, int len); -extern int rline_exp_set_tab_complete_func(rline_callback_t func); -extern int rline_exp_set_syntax(char * name); -extern char * rline_preload; - -_End_C_Header diff --git a/kuroko b/kuroko index 30613c63..2677c7ac 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 30613c6354415e0bca104dfd1a7c650a57ab37ea +Subproject commit 2677c7aca781773f528bce06914c05c36d230f4d diff --git a/lib/rline.c b/lib/rline.c index 4022d1d8..b03b5836 100644 --- a/lib/rline.c +++ b/lib/rline.c @@ -1,66 +1,34 @@ /* vim: tabstop=4 shiftwidth=4 noexpandtab * This file is part of ToaruOS and is released under the terms * of the NCSA / University of Illinois License - see LICENSE.md - * Copyright (C) 2015-2018 K. Lange + * Copyright (C) 2018 K. Lange * - * rline - a line reading library. + * Experimental rline replacement with syntax highlighting, based + * on bim's highlighting and line editing. * - * Implements an interface similar to readline, providing more - * complex line editing than what the raw tty interface supplies. */ - -#define _POSIX_C_SOURCE 1 -#define _XOPEN_SOURCE 500 -#include - +#define _XOPEN_SOURCE +#define _DEFAULT_SOURCE #include #include -#include +#include +#include #include - -#include +#include +#include +#include +#include +#include +#include +#include #include -static struct termios old; - -static void set_unbuffered() { - tcgetattr(fileno(stdin), &old); - struct termios new = old; - new.c_lflag &= (~ICANON & ~ECHO); - tcsetattr(fileno(stdin), TCSAFLUSH, &new); -} - -static void set_buffered() { - tcsetattr(fileno(stdin), TCSAFLUSH, &old); -} - - -void rline_redraw(rline_context_t * context) { - if (context->quiet) return; - printf("\033[u%s\033[K", context->buffer); - for (int i = context->offset; i < context->collected; ++i) { - printf("\033[D"); - } - fflush(stdout); -} - -void rline_redraw_clean(rline_context_t * context) { - if (context->quiet) return; - printf("\033[u%s", context->buffer); - for (int i = context->offset; i < context->collected; ++i) { - printf("\033[D"); - } - fflush(stdout); -} - char * rline_history[RLINE_HISTORY_ENTRIES]; int rline_history_count = 0; int rline_history_offset = 0; int rline_scroll = 0; char * rline_exit_string = "exit\n"; -static char rline_temp[1024]; - void rline_history_insert(char * str) { if (str[strlen(str)-1] == '\n') { str[strlen(str)-1] = '\0'; @@ -104,473 +72,1945 @@ char * rline_history_prev(int item) { return rline_history_get(rline_history_count - item); } -void rline_reverse_search(rline_context_t * context) { - char input[512] = {0}; - int collected = 0; - int start_at = 0; - int changed = 0; - fprintf(stderr, "\033[G\033[0m\033[s"); - fflush(stderr); - key_event_state_t kbd_state = {0}; - char * match = ""; - int match_index = 0; - while (1) { - /* Find matches */ -try_rev_search_again: - if (collected && changed) { - match = ""; - match_index = 0; - for (int i = start_at; i < rline_history_count; i++) { - char * c = rline_history_prev(i+1); - if (strstr(c, input)) { - match = c; - match_index = i; - break; - } - } - if (!strcmp(match,"")) { - if (start_at) { - start_at = 0; - goto try_rev_search_again; - } - collected--; - input[collected] = '\0'; - if (collected) { - goto try_rev_search_again; - } - } - } - fprintf(stderr, "\033[u(reverse-i-search)`%s': %s\033[K", input, match); - fflush(stderr); - changed = 0; +#define UTF8_ACCEPT 0 +#define UTF8_REJECT 1 - uint32_t key_sym = kbd_key(&kbd_state, fgetc(stdin)); - switch (key_sym) { - case KEY_NONE: - break; - case KEY_BACKSPACE: - case 0x7F: /* delete */ - if (collected > 0) { - collected--; - input[collected] = '\0'; - start_at = 0; - changed = 1; - } - break; - case KEY_CTRL_C: - printf("^C\n"); - return; - case KEY_CTRL_R: - start_at = match_index + 1; - changed = 1; - break; - case KEY_ESCAPE: - case KEY_ARROW_LEFT: - case KEY_ARROW_RIGHT: - context->cancel = 1; - case '\n': - memcpy(context->buffer, match, strlen(match) + 1); - context->collected = strlen(match); - context->offset = context->collected; - if (!context->quiet && context->callbacks->redraw_prompt) { - fprintf(stderr, "\033[G\033[K"); - context->callbacks->redraw_prompt(context); - } - fprintf(stderr, "\033[s"); - rline_redraw_clean(context); - if (key_sym == '\n' && !context->quiet) { - fprintf(stderr, "\n"); - } - return; - default: - if (key_sym < KEY_NORMAL_MAX) { - input[collected] = (char)key_sym; - collected++; - input[collected] = '\0'; - start_at = 0; - changed = 1; - } - break; - } +/** + * Conceptually similar to its predecessor, this implementation is much + * less cool, as it uses three separate state tables and more shifts. + */ +static inline uint32_t decode(uint32_t* state, uint32_t* codep, uint32_t byte) { + static int state_table[32] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xxxxxxx */ + 1,1,1,1,1,1,1,1, /* 10xxxxxx */ + 2,2,2,2, /* 110xxxxx */ + 3,3, /* 1110xxxx */ + 4, /* 11110xxx */ + 1 /* 11111xxx */ + }; + + static int mask_bytes[32] = { + 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, + 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x1F,0x1F,0x1F,0x1F, + 0x0F,0x0F, + 0x07, + 0x00 + }; + + static int next[5] = { + 0, + 1, + 0, + 2, + 3 + }; + + if (*state == UTF8_ACCEPT) { + *codep = byte & mask_bytes[byte >> 3]; + *state = state_table[byte >> 3]; + } else if (*state > 0) { + *codep = (byte & 0x3F) | (*codep << 6); + *state = next[*state]; } + return *state; } -static void history_previous(rline_context_t * context) { - if (rline_scroll == 0) { - memcpy(rline_temp, context->buffer, strlen(context->buffer) + 1); +#define ENTER_KEY '\n' +#define BACKSPACE_KEY 0x08 +#define DELETE_KEY 0x7F +#define MINIMUM_SIZE 10 + +/** + * Same structures as in bim. + * A single character has: + * - A codepoint (Unicode) of up to 21 bits. + * - Flags for syntax highlighting. + * - A display width for rendering. + */ +typedef struct { + uint32_t display_width:4; + uint32_t flags:7; + uint32_t codepoint:21; +} __attribute__((packed)) char_t; + +/** + * We generally only have the one line, + * but this matches bim for compatibility reasons. + */ +typedef struct { + int available; + int actual; + int istate; + char_t text[]; +} line_t; + +/** + * We operate on a single line of text. + * Maybe we can expand this in the future + * for continuations of edits such as when + * a quote is unclosed? + */ +static line_t * the_line = NULL; + +/** + * Line editor state + */ +static int loading = 0; +static int column = 0; +static int offset = 0; +static int width = 0; +static int full_width = 0; +static int show_right_side = 0; +static int show_left_side = 0; +static int prompt_width_calc = 0; +static int buf_size_max = 0; + +/** + * Prompt strings. + * Defaults to just a "> " prompt with no right side. + * Support for right side prompts is important + * for the ToaruOS shell. + */ +static int prompt_width = 2; +static char * prompt = "> "; +static int prompt_right_width = 0; +static char * prompt_right = ""; + +int rline_exp_set_prompts(char * left, char * right, int left_width, int right_width) { + prompt = left; + prompt_right = right; + prompt_width = left_width; + prompt_right_width = right_width; + return 0; +} + +/** + * Extra shell commands to highlight as keywords. + * These are basically just copied from the + * shell's tab completion database on startup. + */ +static char ** shell_commands = {0}; +static int shell_commands_len = 0; + +int rline_exp_set_shell_commands(char ** cmds, int len) { + shell_commands = cmds; + shell_commands_len = len; + return 0; +} + +/** + * Tab completion callback. + * Compatible with the original rline version. + */ +static rline_callback_t tab_complete_func = NULL; + +int rline_exp_set_tab_complete_func(rline_callback_t func) { + tab_complete_func = func; + return 0; +} + +static int _unget = -1; +static void _ungetc(int c) { + _unget = c; +} + +static int getch(int immediate, int timeout) { + if (_unget != -1) { + int out = _unget; + _unget = -1; + return out; } - if (rline_scroll < rline_history_count) { - rline_scroll++; - for (int i = 0; i < (int)strlen(context->buffer); ++i) { - printf("\010 \010"); - } - char * h = rline_history_prev(rline_scroll); - memcpy(context->buffer, h, strlen(h) + 1); - printf("\033[u%s\033[K", h); - fflush(stdout); + if (timeout != 1) return fgetc(stdin); + struct pollfd fds[1]; + fds[0].fd = STDIN_FILENO; + fds[0].events = POLLIN; + int ret = poll(fds,1,(timeout == 1) ? 50 : -1); + if (ret > 0 && fds[0].revents & POLLIN) { + unsigned char buf[1]; + int unused = read(STDIN_FILENO, buf, 1); + (void)unused; + return buf[0]; + } else { + return -1; } - context->collected = strlen(context->buffer); - context->offset = context->collected; } -static void history_next(rline_context_t * context) { - if (rline_scroll > 1) { - rline_scroll--; - for (int i = 0; i < (int)strlen(context->buffer); ++i) { - printf("\010 \010"); - } - char * h = rline_history_prev(rline_scroll); - memcpy(context->buffer, h, strlen(h) + 1); - printf("%s", h); - fflush(stdout); - } else if (rline_scroll == 1) { - for (int i = 0; i < (int)strlen(context->buffer); ++i) { - printf("\010 \010"); +/** + * Convert from Unicode string to utf-8. + */ +static int to_eight(uint32_t codepoint, char * out) { + memset(out, 0x00, 7); + + if (codepoint < 0x0080) { + out[0] = (char)codepoint; + } else if (codepoint < 0x0800) { + out[0] = 0xC0 | (codepoint >> 6); + out[1] = 0x80 | (codepoint & 0x3F); + } else if (codepoint < 0x10000) { + out[0] = 0xE0 | (codepoint >> 12); + out[1] = 0x80 | ((codepoint >> 6) & 0x3F); + out[2] = 0x80 | (codepoint & 0x3F); + } else if (codepoint < 0x200000) { + out[0] = 0xF0 | (codepoint >> 18); + out[1] = 0x80 | ((codepoint >> 12) & 0x3F); + out[2] = 0x80 | ((codepoint >> 6) & 0x3F); + out[3] = 0x80 | ((codepoint) & 0x3F); + } else if (codepoint < 0x4000000) { + out[0] = 0xF8 | (codepoint >> 24); + out[1] = 0x80 | (codepoint >> 18); + out[2] = 0x80 | ((codepoint >> 12) & 0x3F); + out[3] = 0x80 | ((codepoint >> 6) & 0x3F); + out[4] = 0x80 | ((codepoint) & 0x3F); + } else { + out[0] = 0xF8 | (codepoint >> 30); + out[1] = 0x80 | ((codepoint >> 24) & 0x3F); + out[2] = 0x80 | ((codepoint >> 18) & 0x3F); + out[3] = 0x80 | ((codepoint >> 12) & 0x3F); + out[4] = 0x80 | ((codepoint >> 6) & 0x3F); + out[5] = 0x80 | ((codepoint) & 0x3F); + } + + return strlen(out); +} + +/** + * Obtain codepoint display width. + * + * This is copied from bim. Supports a few useful + * things like rendering escapes as codepoints. + */ +static int codepoint_width(wchar_t codepoint) { + if (codepoint == '\t') { + return 1; /* Recalculate later */ + } + if (codepoint < 32) { + /* We render these as ^@ */ + return 2; + } + if (codepoint == 0x7F) { + /* Renders as ^? */ + return 2; + } + if (codepoint > 0x7f && codepoint < 0xa0) { + /* Upper control bytes */ + return 4; + } + if (codepoint == 0xa0) { + /* Non-breaking space _ */ + return 1; + } + /* Skip wcwidth for anything under 256 */ + if (codepoint > 256) { + /* Higher codepoints may be wider (eg. Japanese) */ + int out = wcwidth(codepoint); + if (out >= 1) return out; + /* Invalid character, render as [U+ABCD] or [U+ABCDEF] */ + return (codepoint < 0x10000) ? 8 : 10; + } + return 1; +} + +void recalculate_tabs(line_t * line) { + int j = 0; + for (int i = 0; i < line->actual; ++i) { + if (line->text[i].codepoint == '\t') { + line->text[i].display_width = 4 - (j % 4); } - rline_scroll = 0; - memcpy(context->buffer, rline_temp, strlen(rline_temp) + 1); - printf("\033[u%s\033[K", context->buffer); - fflush(stdout); + j += line->text[i].display_width; } - context->collected = strlen(context->buffer); - context->offset = context->collected; } /** - * Insert characters at the current cursor offset. + * Color themes have also been copied from bim. + * + * Slimmed down to only the ones we use for syntax + * highlighting; the UI colors have been removed. */ -void rline_insert(rline_context_t * context, const char * what) { - size_t insertion_length = strlen(what); +static const char * COLOR_FG = "@9"; +static const char * COLOR_BG = "@9"; +static const char * COLOR_ALT_FG = "@5"; +static const char * COLOR_ALT_BG = "@9"; +static const char * COLOR_KEYWORD = "@4"; +static const char * COLOR_STRING = "@2"; +static const char * COLOR_COMMENT = "@5"; +static const char * COLOR_TYPE = "@3"; +static const char * COLOR_PRAGMA = "@1"; +static const char * COLOR_NUMERAL = "@1"; +static const char * COLOR_RED = "@1"; +static const char * COLOR_GREEN = "@2"; +static const char * COLOR_ESCAPE = "@2"; +static const char * COLOR_SEARCH_FG = "@0"; +static const char * COLOR_SEARCH_BG = "@3"; - if (context->collected + (int)insertion_length > context->requested) { - insertion_length = context->requested - context->collected; - } +/** + * Themes are selected from the $RLINE_THEME + * environment variable. + */ +static void rline_exp_load_colorscheme_default(void) { + COLOR_FG = "@9"; + COLOR_BG = "@9"; + COLOR_ALT_FG = "@10"; + COLOR_ALT_BG = "@9"; + COLOR_KEYWORD = "@14"; + COLOR_STRING = "@2"; + COLOR_COMMENT = "@10"; + COLOR_TYPE = "@3"; + COLOR_PRAGMA = "@1"; + COLOR_NUMERAL = "@1"; + COLOR_RED = "@1"; + COLOR_GREEN = "@2"; + COLOR_ESCAPE = "@12"; + COLOR_SEARCH_FG = "@0"; + COLOR_SEARCH_BG = "@13"; +} - /* Move */ - memmove(&context->buffer[context->offset + insertion_length], &context->buffer[context->offset], context->collected - context->offset); - memcpy(&context->buffer[context->offset], what, insertion_length); - context->collected += insertion_length; - context->offset += insertion_length; +static void rline_exp_load_colorscheme_sunsmoke(void) { + COLOR_FG = "2;230;230;230"; + COLOR_BG = "@9"; + COLOR_ALT_FG = "2;122;122;122"; + COLOR_ALT_BG = "2;46;43;46"; + COLOR_KEYWORD = "2;51;162;230"; + COLOR_STRING = "2;72;176;72"; + COLOR_COMMENT = "2;158;153;129;3"; + COLOR_TYPE = "2;230;206;110"; + COLOR_PRAGMA = "2;194;70;54"; + COLOR_NUMERAL = "2;230;43;127"; + COLOR_RED = "2;222;53;53"; + COLOR_GREEN = "2;55;167;0"; + COLOR_ESCAPE = "2;113;203;173"; + COLOR_SEARCH_FG = "5;234"; + COLOR_SEARCH_BG = "5;226"; } -static rline_callbacks_t _rline_null_callbacks = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; +/** + * Syntax highlighting flags. + */ +#define FLAG_NONE 0 +#define FLAG_KEYWORD 1 +#define FLAG_STRING 2 +#define FLAG_COMMENT 3 +#define FLAG_TYPE 4 +#define FLAG_PRAGMA 5 +#define FLAG_NUMERAL 6 +#define FLAG_ERROR 7 +#define FLAG_DIFFPLUS 8 +#define FLAG_DIFFMINUS 9 +#define FLAG_NOTICE 10 +#define FLAG_BOLD 11 +#define FLAG_LINK 12 +#define FLAG_ESCAPE 13 + +#define FLAG_SELECT (1 << 5) +#define FLAG_SEARCH (1 << 6) -int rline(char * buffer, int buf_size, rline_callbacks_t * callbacks) { - /* Initialize context */ - rline_context_t context = { - buffer, - callbacks, - 0, - buf_size, - 0, - 0, - 0, - 0, - 0, - }; +struct syntax_state { + line_t * line; + int line_no; + int state; + int i; +}; - if (!callbacks) { - callbacks = &_rline_null_callbacks; +#define paint(length, flag) do { for (int i = 0; i < (length) && state->i < state->line->actual; i++, state->i++) { state->line->text[state->i].flags = (flag); } } while (0) +#define charat() (state->i < state->line->actual ? state->line->text[(state->i)].codepoint : -1) +#define nextchar() (state->i + 1 < state->line->actual ? state->line->text[(state->i+1)].codepoint : -1) +#define lastchar() (state->i - 1 >= 0 ? state->line->text[(state->i-1)].codepoint : -1) +#define skip() (state->i++) +#define charrel(x) (state->i + (x) < state->line->actual ? state->line->text[(state->i+(x))].codepoint : -1) + +/** + * Match and paint a single keyword. Returns 1 if the keyword was matched and 0 otherwise, + * so it can be used for prefix checking for things that need further special handling. + */ +int match_and_paint(struct syntax_state * state, const char * keyword, int flag, int (*keyword_qualifier)(int c)) { + if (keyword_qualifier(lastchar())) return 0; + if (!keyword_qualifier(charat())) return 0; + int i = state->i; + int slen = 0; + while (i < state->line->actual || *keyword == '\0') { + if (*keyword == '\0' && (i >= state->line->actual || !keyword_qualifier(state->line->text[i].codepoint))) { + for (int j = 0; j < slen; ++j) { + paint(1, flag); + } + return 1; + } + if (*keyword != state->line->text[i].codepoint) return 0; + + i++; + keyword++; + slen++; } + return 0; +} - set_unbuffered(); +/** + * Find keywords from a list and paint them, assuming they aren't in the middle of other words. + * Returns 1 if a keyword from the last was found, otherwise 0. + */ +int find_keywords(struct syntax_state * state, char ** keywords, int flag, int (*keyword_qualifier)(int c)) { + if (keyword_qualifier(lastchar())) return 0; + if (!keyword_qualifier(charat())) return 0; + for (char ** keyword = keywords; *keyword; ++keyword) { + int d = 0; + while (state->i + d < state->line->actual && state->line->text[state->i+d].codepoint == (*keyword)[d]) d++; + if ((*keyword)[d] == '\0' && (state->i + d >= state->line->actual || !keyword_qualifier(state->line->text[state->i+d].codepoint))) { + paint((int)strlen(*keyword), flag); + return 1; + } + } - printf("\033[s"); - fflush(stdout); + return 0; +} - key_event_state_t kbd_state = {0}; - - /* Read keys */ - while ((context.collected < context.requested) && (!context.newline)) { - uint32_t key_sym = kbd_key(&kbd_state, fgetc(stdin)); - if (key_sym == KEY_NONE) continue; - if (key_sym != '\t') context.tabbed = 0; - switch (key_sym) { - case KEY_CTRL_C: - printf("^C\n"); - context.buffer[0] = '\0'; - set_buffered(); - return 0; - case KEY_CTRL_R: - if (callbacks->rev_search) { - callbacks->rev_search(&context); - } else { - rline_reverse_search(&context); - } - if (context.cancel) { - context.cancel = 0; - continue; - } else { - set_buffered(); - return context.collected; - } - case KEY_ARROW_UP: - case KEY_CTRL_P: - if (callbacks->key_up) { - callbacks->key_up(&context); - } else { - history_previous(&context); - } - continue; - case KEY_ARROW_DOWN: - case KEY_CTRL_N: - if (callbacks->key_down) { - callbacks->key_down(&context); - } else { - history_next(&context); - } - continue; - case KEY_CTRL_ARROW_RIGHT: - while (context.offset < context.collected && context.buffer[context.offset] == ' ') { - context.offset++; - printf("\033[C"); - } - while (context.offset < context.collected) { - context.offset++; - printf("\033[C"); - if (context.buffer[context.offset] == ' ') break; - } - fflush(stdout); - continue; - case KEY_CTRL_ARROW_LEFT: - if (context.offset == 0) continue; - context.offset--; - printf("\033[D"); - while (context.offset && context.buffer[context.offset] == ' ') { - context.offset--; - printf("\033[D"); - } - while (context.offset > 0) { - if (context.buffer[context.offset-1] == ' ') break; - context.offset--; - printf("\033[D"); - } - fflush(stdout); - continue; - case KEY_ARROW_RIGHT: - if (callbacks->key_right) { - callbacks->key_right(&context); - } else { - if (context.offset < context.collected) { - printf("\033[C"); - fflush(stdout); - context.offset++; - } - } - continue; - case KEY_ARROW_LEFT: - if (callbacks->key_left) { - callbacks->key_left(&context); - } else { - if (context.offset > 0) { - printf("\033[D"); - fflush(stdout); - context.offset--; - } - } - continue; - case KEY_CTRL_A: - case KEY_HOME: - while (context.offset > 0) { - printf("\033[D"); - context.offset--; - } - fflush(stdout); - continue; - case KEY_CTRL_E: - case KEY_END: - while (context.offset < context.collected) { - printf("\033[C"); - context.offset++; - } - fflush(stdout); - continue; - case KEY_CTRL_K: - context.collected = context.offset; - printf("\033[K"); - fflush(stdout); - continue; - case KEY_CTRL_D: - if (context.collected == 0) { - printf(rline_exit_string); - sprintf(context.buffer, rline_exit_string); - set_buffered(); - return strlen(context.buffer); - } - /* Intentional fallthrough */ - case KEY_DEL: - if (context.collected) { - if (context.offset == context.collected) { - continue; - } - int remaining = context.collected - context.offset; - for (int i = 1; i < remaining; ++i) { - printf("%c", context.buffer[context.offset + i]); - context.buffer[context.offset + i - 1] = context.buffer[context.offset + i]; - } - printf(" "); - for (int i = 0; i < remaining; ++i) { - printf("\033[D"); - } - context.collected--; - fflush(stdout); - } - continue; - case KEY_BACKSPACE: - case 0x7F: /* delete */ - if (context.collected) { - int should_redraw = 0; - if (!context.offset) { - continue; - } - printf("\010 \010"); - if (context.buffer[context.offset-1] == '\t') { - should_redraw = 1; - } - if (context.offset != context.collected) { - int remaining = context.collected - context.offset; - for (int i = 0; i < remaining; ++i) { - printf("%c", context.buffer[context.offset + i]); - context.buffer[context.offset + i - 1] = context.buffer[context.offset + i]; - } - printf(" "); - for (int i = 0; i < remaining + 1; ++i) { - printf("\033[D"); - } - context.offset--; - context.collected--; - } else { - context.buffer[--context.collected] = '\0'; - context.offset--; - } - if (should_redraw) { - rline_redraw_clean(&context); - } - fflush(stdout); - } - continue; - case KEY_CTRL_L: /* ^L: Clear Screen, redraw prompt and buffer */ - printf("\033[H\033[2J"); - fflush(stdout); - /* Flush before yielding control to potentially foreign environment. */ - if (callbacks->redraw_prompt) { - callbacks->redraw_prompt(&context); - } - printf("\033[s"); - rline_redraw_clean(&context); - continue; - case KEY_CTRL_W: - /* - * Erase word before cursor. - * If the character before the cursor is a space, delete it. - * Continue deleting until the previous character is a space. - */ - if (context.collected) { - if (!context.offset) { - continue; - } - do { - printf("\010 \010"); - if (context.offset != context.collected) { - int remaining = context.collected - context.offset; - for (int i = 0; i < remaining; ++i) { - printf("%c", context.buffer[context.offset + i]); - context.buffer[context.offset + i - 1] = context.buffer[context.offset + i]; - } - printf(" "); - for (int i = 0; i < remaining + 1; ++i) { - printf("\033[D"); - } - context.offset--; - context.collected--; - } else { - context.buffer[--context.collected] = '\0'; - context.offset--; - } - } while ((context.offset) && (context.buffer[context.offset-1] != ' ')); - fflush(stdout); - } - continue; - case '\t': - if (callbacks->tab_complete) { - callbacks->tab_complete(&context); - } - continue; - case '\n': - while (context.offset < context.collected) { - printf("\033[C"); - context.offset++; - } - if (context.collected < context.requested) { - context.buffer[context.collected] = '\n'; - context.buffer[++context.collected] = '\0'; - context.offset++; - } - printf("\n"); - fflush(stdout); - context.newline = 1; - continue; - } - if (context.offset != context.collected) { - for (int i = context.collected; i > context.offset; --i) { - context.buffer[i] = context.buffer[i-1]; - } - if (context.collected < context.requested) { - context.buffer[context.offset] = (char)key_sym; - context.buffer[++context.collected] = '\0'; - context.offset++; - } - for (int i = context.offset - 1; i < context.collected; ++i) { - printf("%c", context.buffer[i]); - } - for (int i = context.offset; i < context.collected; ++i) { - printf("\033[D"); - } - fflush(stdout); +/** + * This is a basic character matcher for "keyword" characters. + */ +int simple_keyword_qualifier(int c) { + return isalnum(c) || (c == '_'); +} + + +int common_comment_buzzwords(struct syntax_state * state) { + if (match_and_paint(state, "TODO", FLAG_NOTICE, simple_keyword_qualifier)) { return 1; } + else if (match_and_paint(state, "XXX", FLAG_NOTICE, simple_keyword_qualifier)) { return 1; } + else if (match_and_paint(state, "FIXME", FLAG_ERROR, simple_keyword_qualifier)) { return 1; } + return 0; +} + +/** + * Paint a comment until end of line, assumes this comment can not continue. + * (Some languages have comments that can continue with a \ - don't use this!) + * Assumes you've already painted your comment start characters. + */ +int paint_comment(struct syntax_state * state) { + while (charat() != -1) { + if (common_comment_buzzwords(state)) continue; + else { paint(1, FLAG_COMMENT); } + } + return -1; +} + +int c_keyword_qualifier(int c) { + return isalnum(c) || (c == '_'); +} + +void paint_simple_string(struct syntax_state * state) { + /* Assumes you came in from a check of charat() == '"' */ + paint(1, FLAG_STRING); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == '"') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '"') { + paint(1, FLAG_STRING); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); } else { - printf("%c", (char)key_sym); - if (context.collected < context.requested) { - context.buffer[context.collected] = (char)key_sym; - context.buffer[++context.collected] = '\0'; - context.offset++; - } - fflush(stdout); + paint(1, FLAG_STRING); } } +} - /* Cap that with a null */ - context.buffer[context.collected] = '\0'; - set_buffered(); - return context.collected; +void paint_single_string(struct syntax_state * state) { + /* Assumes you came in from a check of charat() == '\'' */ + paint(1, FLAG_NUMERAL); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == '\'') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '\'') { + paint(1, FLAG_NUMERAL); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else { + paint(1, FLAG_NUMERAL); + } + } } -static char * last_prompt = NULL; -static void redraw_prompt(rline_context_t * c) { - (void)c; - printf("%s", last_prompt); - fflush(stdout); - return; +char * syn_krk_keywords[] = { + "and","class","def","else","export","for","if","in","import", + "let","not","or","print","return","while","try","except","raise", + "continue","break", + NULL +}; + +char * syn_krk_types[] = { + /* built-in functions */ + "self", "super", /* implicit in a class method */ + "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ + "list","dict","range", /* builtin classes */ + "object","exception","isinstance","type", + NULL +}; + +char * syn_krk_special[] = { + "True","False","None", + NULL +}; + +int paint_krk_numeral(struct syntax_state * state) { + if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { + paint(2, FLAG_NUMERAL); + while (isxdigit(charat())) paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && (nextchar() == 'o' || nextchar() == 'O')) { + paint(2, FLAG_NUMERAL); + while (charat() >= '0' && charat() <= '7') paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && (nextchar() == 'b' || nextchar() == 'B')) { + paint(2, FLAG_NUMERAL); + while (charat() == '0' || charat() == '1') paint(1, FLAG_NUMERAL); + } else { + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + if (charat() == '.') { + paint(1, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } + } + return 0; } -static void insert_tab(rline_context_t * c) { - rline_insert(c, "\t"); - rline_redraw_clean(c); + +int syn_krk_calculate(struct syntax_state * state) { + switch (state->state) { + case -1: + case 0: + if (charat() == '#') { + paint_comment(state); + } else if (charat() == '"') { + paint_simple_string(state); + return 0; + } else if (charat() == '\'') { + paint_single_string(state); + return 0; + } else if (find_keywords(state, syn_krk_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { + return 0; + } else if (lastchar() != '.' && find_keywords(state, syn_krk_types, FLAG_TYPE, c_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, syn_krk_special, FLAG_NUMERAL, c_keyword_qualifier)) { + return 0; + } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { + paint_krk_numeral(state); + return 0; + } else if (charat() != -1) { + skip(); + return 0; + } + break; + } + return -1; } -void * rline_for_python(void * _stdin, void * _stdout, char * prompt) { - last_prompt = prompt; +int esh_variable_qualifier(int c) { + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '_'); +} - rline_callbacks_t callbacks = { - insert_tab, redraw_prompt, NULL, - NULL, NULL, NULL, NULL, NULL - }; +int paint_esh_variable(struct syntax_state * state) { + if (charat() == '{') { + paint(1, FLAG_TYPE); + while (charat() != '}' && charat() != -1) paint(1, FLAG_TYPE); + if (charat() == '}') paint(1, FLAG_TYPE); + } else { + if (charat() == '?' || charat() == '$' || charat() == '#') { + paint(1, FLAG_TYPE); + } else { + while (esh_variable_qualifier(charat())) paint(1, FLAG_TYPE); + } + } + return 0; +} +int paint_esh_string(struct syntax_state * state) { + int last = -1; + while (charat() != -1) { + if (last != '\\' && charat() == '"') { + paint(1, FLAG_STRING); + return 0; + } else if (charat() == '$') { + paint(1, FLAG_TYPE); + paint_esh_variable(state); + last = -1; + } else if (charat() != -1) { + last = charat(); + paint(1, FLAG_STRING); + } + } + return 2; +} - redraw_prompt(NULL); - char * buf = malloc(1024); +int paint_esh_single_string(struct syntax_state * state) { + int last = -1; + while (charat() != -1) { + if (last != '\\' && charat() == '\'') { + paint(1, FLAG_STRING); + return 0; + } else if (charat() != -1) { + last = charat(); + paint(1, FLAG_STRING); + } + } + return 1; +} + +int esh_keyword_qualifier(int c) { + return (isalnum(c) || c == '?' || c == '_' || c == '-'); /* technically anything that isn't a space should qualify... */ +} + +char * esh_keywords[] = { + "cd","exit","export","help","history","if","empty?", + "equals?","return","export-cmd","source","exec","not","while", + "then","else","echo", + NULL +}; + +int syn_esh_calculate(struct syntax_state * state) { + if (state->state == 1) { + return paint_esh_single_string(state); + } else if (state->state == 2) { + return paint_esh_string(state); + } + if (charat() == '#') { + while (charat() != -1) { + if (common_comment_buzzwords(state)) continue; + else paint(1, FLAG_COMMENT); + } + return -1; + } else if (charat() == '$') { + paint(1, FLAG_TYPE); + paint_esh_variable(state); + return 0; + } else if (charat() == '\'') { + paint(1, FLAG_STRING); + return paint_esh_single_string(state); + } else if (charat() == '"') { + paint(1, FLAG_STRING); + return paint_esh_string(state); + } else if (match_and_paint(state, "export", FLAG_KEYWORD, esh_keyword_qualifier)) { + while (charat() == ' ') skip(); + while (esh_keyword_qualifier(charat())) paint(1, FLAG_TYPE); + return 0; + } else if (match_and_paint(state, "export-cmd", FLAG_KEYWORD, esh_keyword_qualifier)) { + while (charat() == ' ') skip(); + while (esh_keyword_qualifier(charat())) paint(1, FLAG_TYPE); + return 0; + } else if (find_keywords(state, esh_keywords, FLAG_KEYWORD, esh_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, shell_commands, FLAG_KEYWORD, esh_keyword_qualifier)) { + return 0; + } else if (isdigit(charat())) { + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + return 0; + } else if (charat() != -1) { + skip(); + return 0; + } + return -1; +} + +char * syn_py_keywords[] = { + "class","def","return","del","if","else","elif","for","while","continue", + "break","assert","as","and","or","except","finally","from","global", + "import","in","is","lambda","with","nonlocal","not","pass","raise","try","yield", + NULL +}; + +char * syn_py_types[] = { + /* built-in functions */ + "abs","all","any","ascii","bin","bool","breakpoint","bytes", + "bytearray","callable","compile","complex","delattr","chr", + "dict","dir","divmod","enumerate","eval","exec","filter","float", + "format","frozenset","getattr","globals","hasattr","hash","help", + "hex","id","input","int","isinstance","issubclass","iter","len", + "list","locals","map","max","memoryview","min","next","object", + "oct","open","ord","pow","print","property","range","repr","reverse", + "round","set","setattr","slice","sorted","staticmethod","str","sum", + "super","tuple","type","vars","zip", + NULL +}; + +char * syn_py_special[] = { + "True","False","None", + NULL +}; + +int paint_py_triple_double(struct syntax_state * state) { + while (charat() != -1) { + if (charat() == '"') { + paint(1, FLAG_STRING); + if (charat() == '"' && nextchar() == '"') { + paint(2, FLAG_STRING); + return 0; + } + } else { + paint(1, FLAG_STRING); + } + } + return 1; /* continues */ +} + +int paint_py_triple_single(struct syntax_state * state) { + while (charat() != -1) { + if (charat() == '\'') { + paint(1, FLAG_STRING); + if (charat() == '\'' && nextchar() == '\'') { + paint(2, FLAG_STRING); + return 0; + } + } else { + paint(1, FLAG_STRING); + } + } + return 2; /* continues */ +} + +int paint_py_single_string(struct syntax_state * state) { + paint(1, FLAG_STRING); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == '\'') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '\'') { + paint(1, FLAG_STRING); + return 0; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else { + paint(1, FLAG_STRING); + } + } + return 0; +} + +int paint_py_numeral(struct syntax_state * state) { + if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { + paint(2, FLAG_NUMERAL); + while (isxdigit(charat())) paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && nextchar() == '.') { + paint(2, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + if ((charat() == '+' || charat() == '-') && (nextchar() == 'e' || nextchar() == 'E')) { + paint(2, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } else if (charat() == 'e' || charat() == 'E') { + paint(1, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } + if (charat() == 'j') paint(1, FLAG_NUMERAL); + return 0; + } else { + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + if (charat() == '.') { + paint(1, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + if ((charat() == '+' || charat() == '-') && (nextchar() == 'e' || nextchar() == 'E')) { + paint(2, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } else if (charat() == 'e' || charat() == 'E') { + paint(1, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } + if (charat() == 'j') paint(1, FLAG_NUMERAL); + return 0; + } + if (charat() == 'j') paint(1, FLAG_NUMERAL); + } + while (charat() == 'l' || charat() == 'L') paint(1, FLAG_NUMERAL); + return 0; +} + +void paint_py_format_string(struct syntax_state * state, char type) { + paint(1, FLAG_STRING); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == type) { + paint(2, FLAG_ESCAPE); + } else if (charat() == type) { + paint(1, FLAG_STRING); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '{') { + paint(1, FLAG_NUMERAL); + if (charat() == '}') { + state->i--; + paint(2, FLAG_ERROR); /* Can't do that. */ + } else { + while (charat() != -1 && charat() != '}') { + paint(1, FLAG_NUMERAL); + } + paint(1, FLAG_NUMERAL); + } + } else { + paint(1, FLAG_STRING); + } + } +} + +int syn_py_calculate(struct syntax_state * state) { + switch (state->state) { + case -1: + case 0: + if (charat() == '#') { + paint_comment(state); + } else if (state->i == 0 && match_and_paint(state, "import", FLAG_PRAGMA, c_keyword_qualifier)) { + return 0; + } else if (charat() == '@') { + paint(1, FLAG_PRAGMA); + while (c_keyword_qualifier(charat())) paint(1, FLAG_PRAGMA); + return 0; + } else if (charat() == '"') { + if (nextchar() == '"' && charrel(2) == '"') { + paint(3, FLAG_STRING); + return paint_py_triple_double(state); + } else if (lastchar() == 'f') { + /* I don't like backtracking like this, but it makes this parse easier */ + state->i--; + paint(1,FLAG_TYPE); + paint_py_format_string(state,'"'); + return 0; + } else { + paint_simple_string(state); + return 0; + } + } else if (find_keywords(state, syn_py_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { + return 0; + } else if (lastchar() != '.' && find_keywords(state, syn_py_types, FLAG_TYPE, c_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, syn_py_special, FLAG_NUMERAL, c_keyword_qualifier)) { + return 0; + } else if (charat() == '\'') { + if (nextchar() == '\'' && charrel(2) == '\'') { + paint(3, FLAG_STRING); + return paint_py_triple_single(state); + } else if (lastchar() == 'f') { + /* I don't like backtracking like this, but it makes this parse easier */ + state->i--; + paint(1,FLAG_TYPE); + paint_py_format_string(state,'\''); + return 0; + } else { + return paint_py_single_string(state); + } + } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { + paint_py_numeral(state); + return 0; + } else if (charat() != -1) { + skip(); + return 0; + } + break; + case 1: /* multiline """ string */ + return paint_py_triple_double(state); + case 2: /* multiline ''' string */ + return paint_py_triple_single(state); + } + return -1; +} + + +/** + * Convert syntax hilighting flag to color code + */ +static const char * flag_to_color(int _flag) { + int flag = _flag & 0xF; + switch (flag) { + case FLAG_KEYWORD: + return COLOR_KEYWORD; + case FLAG_STRING: + return COLOR_STRING; + case FLAG_COMMENT: + return COLOR_COMMENT; + case FLAG_TYPE: + return COLOR_TYPE; + case FLAG_NUMERAL: + return COLOR_NUMERAL; + case FLAG_PRAGMA: + return COLOR_PRAGMA; + case FLAG_DIFFPLUS: + return COLOR_GREEN; + case FLAG_DIFFMINUS: + return COLOR_RED; + case FLAG_SELECT: + return COLOR_FG; +// case FLAG_BOLD: +// return COLOR_BOLD; +// case FLAG_LINK: +// return COLOR_LINK; + case FLAG_ESCAPE: + return COLOR_ESCAPE; + default: + return COLOR_FG; + } +} + +struct syntax_definition { + char * name; + int (*calculate)(struct syntax_state *); +} syntaxes[] = { + {"esh",syn_esh_calculate}, + {"python",syn_py_calculate}, + {"krk",syn_krk_calculate}, + {NULL, NULL}, +}; + +static struct syntax_definition * syntax; + +int rline_exp_set_syntax(char * name) { + for (struct syntax_definition * s = syntaxes; s->name; ++s) { + if (!strcmp(name,s->name)) { + syntax = s; + return 0; + } + } + return 1; +} + +/** + * Syntax highlighting + * Slimmed down from the bim implementation a bit, + * but generally compatible with the same definitions. + * + * Type highlighting has been removed as the sh highlighter + * didn't use it. This should be made pluggable again, and + * the bim syntax highlighters should probably be broken + * out into dynamically-loaded libraries? + */ +static void recalculate_syntax(line_t * line) { + /* Clear syntax for this line first */ + int line_no = 0; + //int is_original = 1; + while (1) { + for (int i = 0; i < line->actual; ++i) { + line->text[i].flags = 0; + } + + if (!syntax) { + return; + } + + /* Start from the line's stored in initial state */ + struct syntax_state state; + state.line = line; + state.line_no = line_no; + state.state = line->istate; + state.i = 0; + + while (1) { + state.state = syntax->calculate(&state); + + if (state.state != 0) { + /* TODO: Figure out a way to make this work for multiline input */ +#if 0 + if (line_no == -1) return; + if (!is_original) { + redraw_line(line_no); + } + if (line_no + 1 < env->line_count && env->lines[line_no+1]->istate != state.state) { + line_no++; + line = env->lines[line_no]; + line->istate = state.state; + if (env->loading) return; + is_original = 0; + goto _next; + } +#endif + return; + } + } +//_next: +// (void)0; + } +} + +/** + * Set colors + */ +static void set_colors(const char * fg, const char * bg) { + printf("\033[22;23;"); + if (*bg == '@') { + int _bg = atoi(bg+1); + if (_bg < 10) { + printf("4%d;", _bg); + } else { + printf("10%d;", _bg-10); + } + } else { + printf("48;%s;", bg); + } + if (*fg == '@') { + int _fg = atoi(fg+1); + if (_fg < 10) { + printf("3%dm", _fg); + } else { + printf("9%dm", _fg-10); + } + } else { + printf("38;%sm", fg); + } + fflush(stdout); +} + +/** + * Set just the foreground color + * + * (See set_colors above) + */ +static void set_fg_color(const char * fg) { + printf("\033[22;23;"); + if (*fg == '@') { + int _fg = atoi(fg+1); + if (_fg < 10) { + printf("3%dm", _fg); + } else { + printf("9%dm", _fg-10); + } + } else { + printf("38;%sm", fg); + } + fflush(stdout); +} + +/** + * Mostly copied from bim, but with some minor + * alterations and removal of selection support. + */ +static void render_line(void) { + printf("\033[?25l"); + if (show_left_side) { + printf("\033[0m\r%s", prompt); + } else { + printf("\033[0m\r$"); + } + + if (offset && prompt_width_calc) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("\b<"); + } + + int i = 0; /* Offset in char_t line data entries */ + int j = 0; /* Offset in terminal cells */ + + const char * last_color = NULL; + int was_searching = 0; + + /* Set default text colors */ + set_colors(COLOR_FG, COLOR_BG); + + /* + * When we are rendering in the middle of a wide character, + * we render -'s to fill the remaining amount of the + * charater's width + */ + int remainder = 0; + + int is_spaces = 1; + + line_t * line = the_line; + + /* For each character in the line ... */ + while (i < line->actual) { + + /* If there is remaining text... */ + if (remainder) { + + /* If we should be drawing by now... */ + if (j >= offset) { + /* Fill remainder with -'s */ + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("-"); + set_colors(COLOR_FG, COLOR_BG); + } + + /* One less remaining width cell to fill */ + remainder--; + + /* Terminal offset moves forward */ + j++; + + /* + * If this was the last remaining character, move to + * the next codepoint in the line + */ + if (remainder == 0) { + i++; + } + + continue; + } + + /* Get the next character to draw */ + char_t c = line->text[i]; + if (c.codepoint != ' ') is_spaces = 0; + + /* If we should be drawing by now... */ + if (j >= offset) { + + /* If this character is going to fall off the edge of the screen... */ + if (j - offset + c.display_width >= width - prompt_width_calc) { + /* We draw this with special colors so it isn't ambiguous */ + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + + /* If it's wide, draw ---> as needed */ + while (j - offset < width - prompt_width_calc - 1) { + printf("-"); + j++; + } + + /* End the line with a > to show it overflows */ + printf(">"); + set_colors(COLOR_FG, COLOR_BG); + j++; + break; + } + + /* Syntax hilighting */ + const char * color = flag_to_color(c.flags); + if ((c.flags & FLAG_SEARCH) || (c.flags == FLAG_NOTICE)) { + set_colors(COLOR_SEARCH_FG, COLOR_SEARCH_BG); + was_searching = 1; + } else if (was_searching) { + set_colors(color, COLOR_BG); + last_color = color; + } else if (!last_color || strcmp(color, last_color)) { + set_fg_color(color); + last_color = color; + } + + /* Render special characters */ + if (c.codepoint == '\t') { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("»"); + for (int i = 1; i < c.display_width; ++i) { + printf("·"); + } + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else if (c.codepoint < 32) { + /* Codepoints under 32 to get converted to ^@ escapes */ + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("^%c", '@' + c.codepoint); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else if (c.codepoint == 0x7f) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("^?"); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else if (c.codepoint > 0x7f && c.codepoint < 0xa0) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("<%2x>", c.codepoint); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else if (c.codepoint == 0xa0) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("_"); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else if (c.display_width == 8) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("[U+%04x]", c.codepoint); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else if (c.display_width == 10) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("[U+%06x]", c.codepoint); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); +#if 0 + } else if (c.codepoint == ' ' && i == line->actual - 1) { + /* Special case: space at end of line */ + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("·"); + set_colors(COLOR_FG, COLOR_BG); +#endif + } else if (i > 0 && is_spaces && c.codepoint == ' ' && !(i % 4)) { + set_colors(COLOR_ALT_FG, COLOR_BG); /* Normal background so this is more subtle */ + printf("▏"); + set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); + } else { + /* Normal characters get output */ + char tmp[7]; /* Max six bytes, use 7 to ensure last is always nil */ + to_eight(c.codepoint, tmp); + printf("%s", tmp); + } + + /* Advance the terminal cell offset by the render width of this character */ + j += c.display_width; + + /* Advance to the next character */ + i++; + } else if (c.display_width > 1) { + /* + * If this is a wide character but we aren't ready to render yet, + * we may need to draw some filler text for the remainder of its + * width to ensure we don't jump around when horizontally scrolling + * past wide characters. + */ + remainder = c.display_width - 1; + j++; + } else { + /* Regular character, not ready to draw, advance without doing anything */ + j++; + i++; + } + } + + set_colors(COLOR_FG, COLOR_BG); + + /* Fill to end right hand side */ + for (; j < width + offset - prompt_width_calc; ++j) { + printf(" "); + } + + /* Print right hand side */ + if (show_right_side) { + printf("\033[0m%s", prompt_right); + } +} + +/** + * Create a line_t + */ +static line_t * line_create(void) { + line_t * line = malloc(sizeof(line_t) + sizeof(char_t) * 32); + line->available = 32; + line->actual = 0; + line->istate = 0; + return line; +} + +/** + * Insert a character into a line + */ +static line_t * line_insert(line_t * line, char_t c, int offset) { + + /* If there is not enough space... */ + if (line->actual == line->available) { + /* Expand the line buffer */ + line->available *= 2; + line = realloc(line, sizeof(line_t) + sizeof(char_t) * line->available); + } + + /* If this was not the last character, then shift remaining characters forward. */ + if (offset < line->actual) { + memmove(&line->text[offset+1], &line->text[offset], sizeof(char_t) * (line->actual - offset)); + } + + /* Insert the new character */ + line->text[offset] = c; + + /* There is one new character in the line */ + line->actual += 1; + + if (!loading) { + recalculate_tabs(line); + recalculate_syntax(line); + } + + return line; +} + +/** + * Update terminal size + * + * We don't listen for sigwinch for various reasons... + */ +static void get_size(void) { + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + full_width = w.ws_col; + if (full_width - prompt_right_width - prompt_width > MINIMUM_SIZE) { + show_right_side = 1; + show_left_side = 1; + prompt_width_calc = prompt_width; + width = full_width - prompt_right_width; + } else { + show_right_side = 0; + if (full_width - prompt_width > MINIMUM_SIZE) { + show_left_side = 1; + prompt_width_calc = prompt_width; + } else { + show_left_side = 0; + prompt_width_calc = 1; + } + width = full_width; + } +} + +/** + * Place the cursor within the line + */ +static void place_cursor_actual(void) { + int x = prompt_width_calc + 1 - offset; + for (int i = 0; i < column; ++i) { + char_t * c = &the_line->text[i]; + x += c->display_width; + } + + if (x > width - 1) { + /* Adjust the offset appropriately to scroll horizontally */ + int diff = x - (width - 1); + offset += diff; + x -= diff; + render_line(); + } + + /* Same for scrolling horizontally to the left */ + if (x < prompt_width_calc + 1) { + int diff = (prompt_width_calc + 1) - x; + offset -= diff; + x += diff; + render_line(); + } + + printf("\033[?25h\033[%dG", x); + fflush(stdout); +} + +/** + * Delete a character + */ +static void line_delete(line_t * line, int offset) { + + /* Can't delete character before start of line. */ + if (offset == 0) return; + + /* If this isn't the last character, we need to move all subsequent characters backwards */ + if (offset < line->actual) { + memmove(&line->text[offset-1], &line->text[offset], sizeof(char_t) * (line->actual - offset)); + } + + /* The line is one character shorter */ + line->actual -= 1; + + if (!loading) { + recalculate_tabs(line); + recalculate_syntax(line); + } +} + +/** + * Backspace from the cursor position + */ +static void delete_at_cursor(void) { + if (column > 0) { + if (the_line->text[column-1].codepoint == ' ') { + /* Delete this space */ + line_delete(the_line, column); + column--; + if (offset > 0) offset--; + + while (column > 0 && the_line->text[column-1].codepoint == ' ' && (column % 4 != 0)) { + line_delete(the_line, column); + column--; + if (offset > 0) offset--; + } + } else { + line_delete(the_line, column); + column--; + if (offset > 0) offset--; + } + } +} + +/** + * Delete whole word + */ +static void delete_word(void) { + if (!the_line->actual) return; + if (!column) return; + + do { + if (column > 0) { + line_delete(the_line, column); + column--; + if (offset > 0) offset--; + } + } while (column && the_line->text[column-1].codepoint != ' '); +} + +/** + * Insert at cursor position + */ +static void insert_char(uint32_t c) { + char_t _c; + _c.codepoint = c; + _c.flags = 0; + _c.display_width = codepoint_width(c); + + the_line = line_insert(the_line, _c, column); + + column++; +} + +/** + * Move cursor left + */ +static void cursor_left(void) { + if (column > 0) column--; + place_cursor_actual(); +} + +/** + * Move cursor right + */ +static void cursor_right(void) { + if (column < the_line->actual) column++; + place_cursor_actual(); +} + +/** + * Move cursor one whole word left + */ +static void word_left(void) { + if (column == 0) return; + column--; + while (column && the_line->text[column].codepoint == ' ') { + column--; + } + while (column > 0) { + if (the_line->text[column-1].codepoint == ' ') break; + column--; + } + place_cursor_actual(); +} + +/** + * Move cursor one whole word right + */ +static void word_right(void) { + while (column < the_line->actual && the_line->text[column].codepoint == ' ') { + column++; + } + while (column < the_line->actual) { + column++; + if (the_line->text[column].codepoint == ' ') break; + } + place_cursor_actual(); +} + +/** + * Move cursor to start of line + */ +static void cursor_home(void) { + column = 0; + place_cursor_actual(); +} + +/* + * Move cursor to end of line + */ +static void cursor_end(void) { + column = the_line->actual; + place_cursor_actual(); +} + +/** + * Temporary buffer for holding utf-8 data + */ +static char temp_buffer[1024]; + +/** + * Cycle to previous history entry + */ +static void history_previous(void) { + if (rline_scroll == 0) { + /* Convert to temporaary buffer */ + unsigned int off = 0; + memset(temp_buffer, 0, sizeof(temp_buffer)); + for (int j = 0; j < the_line->actual; j++) { + char_t c = the_line->text[j]; + off += to_eight(c.codepoint, &temp_buffer[off]); + } + } + + if (rline_scroll < rline_history_count) { + rline_scroll++; + + /* Copy in from history */ + the_line->actual = 0; + column = 0; + loading = 1; + unsigned char * buf = (unsigned char *)rline_history_prev(rline_scroll); + uint32_t istate = 0, c = 0; + for (unsigned int i = 0; i < strlen((char *)buf); ++i) { + if (!decode(&istate, &c, buf[i])) { + insert_char(c); + } + } + loading = 0; + } + /* Set cursor at end */ + column = the_line->actual; + offset = 0; + recalculate_tabs(the_line); + recalculate_syntax(the_line); + render_line(); + place_cursor_actual(); +} + +/** + * Cycle to next history entry + */ +static void history_next(void) { + if (rline_scroll > 1) { + rline_scroll--; + + /* Copy in from history */ + the_line->actual = 0; + column = 0; + loading = 1; + unsigned char * buf = (unsigned char *)rline_history_prev(rline_scroll); + uint32_t istate = 0, c = 0; + for (unsigned int i = 0; i < strlen((char *)buf); ++i) { + if (!decode(&istate, &c, buf[i])) { + insert_char(c); + } + } + loading = 0; + } else if (rline_scroll == 1) { + /* Copy in from temp */ + rline_scroll = 0; + + the_line->actual = 0; + column = 0; + loading = 1; + char * buf = temp_buffer; + uint32_t istate = 0, c = 0; + for (unsigned int i = 0; i < strlen(buf); ++i) { + if (!decode(&istate, &c, buf[i])) { + insert_char(c); + } + } + loading = 0; + } + /* Set cursor at end */ + column = the_line->actual; + offset = 0; + recalculate_tabs(the_line); + recalculate_syntax(the_line); + render_line(); + place_cursor_actual(); +} + +/** + * Handle escape sequences (arrow keys, etc.) + */ +static int handle_escape(int * this_buf, int * timeout, int c) { + if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c == '\033') { + this_buf[*timeout] = c; + (*timeout)++; + return 1; + } + if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c != '[') { + *timeout = 0; + _ungetc(c); + return 1; + } + if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c == '[') { + *timeout = 1; + this_buf[*timeout] = c; + (*timeout)++; + return 0; + } + if (*timeout >= 2 && this_buf[0] == '\033' && this_buf[1] == '[' && + (isdigit(c) || c == ';')) { + this_buf[*timeout] = c; + (*timeout)++; + return 0; + } + if (*timeout >= 2 && this_buf[0] == '\033' && this_buf[1] == '[') { + switch (c) { + case 'A': // up + history_previous(); + break; + case 'B': // down + history_next(); + break; + case 'C': // right + if (this_buf[*timeout-1] == '5') { + word_right(); + } else { + cursor_right(); + } + break; + case 'D': // left + if (this_buf[*timeout-1] == '5') { + word_left(); + } else { + cursor_left(); + } + break; + case 'H': // home + cursor_home(); + break; + case 'F': // end + cursor_end(); + break; + case '~': + switch (this_buf[*timeout-1]) { + case '1': + cursor_home(); + break; + case '3': + /* Delete forward */ + if (column < the_line->actual) { + line_delete(the_line, column+1); + if (offset > 0) offset--; + } + break; + case '4': + cursor_end(); + break; + } + break; + default: + break; + } + *timeout = 0; + return 0; + } + + *timeout = 0; + return 0; +} + +static unsigned int _INTR, _EOF; +static struct termios old; +static void get_initial_termios(void) { + tcgetattr(STDOUT_FILENO, &old); + _INTR = old.c_cc[VINTR]; + _EOF = old.c_cc[VEOF]; +} + +static void set_unbuffered(void) { + struct termios new = old; + new.c_lflag &= (~ICANON & ~ECHO & ~ISIG); + tcsetattr(STDOUT_FILENO, TCSAFLUSH, &new); +} + +static void set_buffered(void) { + tcsetattr(STDOUT_FILENO, TCSAFLUSH, &old); +} + +void rline_redraw(rline_context_t * context) { + if (context->quiet) return; + printf("\033[u%s\033[K", context->buffer); + for (int i = context->offset; i < context->collected; ++i) { + printf("\033[D"); + } + fflush(stdout); +} + +void rline_insert(rline_context_t * context, const char * what) { + size_t insertion_length = strlen(what); + + if (context->collected + (int)insertion_length > context->requested) { + insertion_length = context->requested - context->collected; + } + + /* Move */ + memmove(&context->buffer[context->offset + insertion_length], &context->buffer[context->offset], context->collected - context->offset); + memcpy(&context->buffer[context->offset], what, insertion_length); + context->collected += insertion_length; + context->offset += insertion_length; +} + +static int tabbed; + +static void dummy_redraw(rline_context_t * context) { + /* Do nothing */ +} + +/** + * Juggle our buffer with an rline context so we can + * call original rline functions such as a tab-completion callback + * or reverse search. + */ +static void call_rline_func(rline_callback_t func, rline_context_t * context) { + /* Unicode parser state */ + uint32_t istate = 0; + uint32_t c; + + /* Don't let rline draw things */ + context->quiet = 1; + + /* Allocate a temporary buffer */ + context->buffer = malloc(buf_size_max); + memset(context->buffer,0,buf_size_max); + + /* Convert current data to utf-8 */ + unsigned int off = 0; + for (int j = 0; j < the_line->actual; j++) { + if (j == column) { + /* Track cursor position */ + context->offset = off; + } + char_t c = the_line->text[j]; + off += to_eight(c.codepoint, &context->buffer[off]); + } + + /* If the cursor was at the end, the loop above didn't catch it */ + if (column == the_line->actual) context->offset = off; + + /* + * Did we just press tab before this? This is actually managed + * by the tab-completion function. + */ + context->tabbed = tabbed; + + /* Empty callbacks */ + rline_callbacks_t tmp = {0}; + /* + * Because some clients expect this to be set... + * (we don't need it, we'll redraw ourselves later) + */ + tmp.redraw_prompt = dummy_redraw; + + /* Setup context */ + context->callbacks = &tmp; + context->collected = off; + context->buffer[off] = '\0'; + context->requested = 1024; + + /* Reset colors (for tab completion candidates, etc. */ + printf("\033[0m"); + + /* Call the function */ + func(context); + + /* Now convert back */ + loading = 1; + int final_column = 0; + the_line->actual = 0; + column = 0; + istate = 0; + for (int i = 0; i < context->collected; ++i) { + if (i == context->offset) { + final_column = column; + } + if (!decode(&istate, &c, ((unsigned char *)context->buffer)[i])) { + insert_char(c); + } + } + + free(context->buffer); + + /* Position cursor */ + if (context->offset == context->collected) { + column = the_line->actual; + } else { + column = final_column; + } + tabbed = context->tabbed; + loading = 0; + + /* Recalculate + redraw */ + recalculate_tabs(the_line); + recalculate_syntax(the_line); + render_line(); + place_cursor_actual(); +} + +char * rline_preload = NULL; + +/** + * Perform actual interactive line editing. + * + * This is mostly a reimplementation of bim's + * INSERT mode, but with some cleanups and fixes + * to work on a single line and to add some new + * key bindings we don't have in bim. + */ +static int read_line(void) { + int cin; + uint32_t c = 0; + int timeout = 0; + int this_buf[20]; + uint32_t istate = 0; + int immediate = 1; + + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + fprintf(stdout, "◄\033[0m"); /* TODO: This could be retrieved from an envvar */ + for (int i = 0; i < full_width - 1; ++i) { + fprintf(stdout, " "); + } + + if (rline_preload) { + char * c = rline_preload; + while (*c) { + insert_char(*c); + c++; + } + free(rline_preload); + rline_preload = NULL; + } + + render_line(); + place_cursor_actual(); + + while ((cin = getch(immediate,timeout))) { + if (cin == -1) continue; + get_size(); + if (!decode(&istate, &c, cin)) { + if (timeout == 0) { + if (c != '\t') tabbed = 0; + if (_INTR && c == _INTR) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("^%c", (int)('@' + c)); + printf("\033[0m"); + loading = 1; + the_line->actual = 0; + column = 0; + insert_char('\n'); + immediate = 0; + raise(SIGINT); + return 1; + } + if (_EOF && c == _EOF) { + if (column == 0 && the_line->actual == 0) { + for (char *_c = rline_exit_string; *_c; ++_c) { + insert_char(*_c); + } + render_line(); + place_cursor_actual(); + if (!*rline_exit_string) { + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + printf("^D\033[0m"); + } + return 1; + } else { /* Otherwise act like delete */ + if (column < the_line->actual) { + line_delete(the_line, column+1); + if (offset > 0) offset--; + immediate = 0; + } + continue; + } + } + switch (c) { + case '\033': + if (timeout == 0) { + this_buf[timeout] = c; + timeout++; + } + break; + case DELETE_KEY: + case BACKSPACE_KEY: + delete_at_cursor(); + immediate = 0; + break; + case ENTER_KEY: + /* Finished */ + loading = 1; + column = the_line->actual; + render_line(); + insert_char('\n'); + immediate = 0; + return 1; + case 22: /* ^V */ + /* Don't bother with unicode, just take the next byte */ + place_cursor_actual(); + printf("^\b"); + insert_char(getc(stdin)); + immediate = 0; + break; + case 23: /* ^W */ + delete_word(); + immediate = 0; + break; + case 12: /* ^L - Repaint the whole screen */ + printf("\033[2J\033[H"); + render_line(); + place_cursor_actual(); + break; + case 11: /* ^K - Clear to end */ + the_line->actual = column; + immediate = 0; + break; + case 21: /* ^U - Kill to beginning */ + while (column) { + delete_at_cursor(); + } + immediate = 0; + break; + case '\t': + if (tab_complete_func) { + /* Tab complete */ + rline_context_t context = {0}; + call_rline_func(tab_complete_func, &context); + immediate = 0; + } else if (column == 0 || the_line->text[column-1].codepoint == ' ') { + /* Insert tab character */ + insert_char(' '); + insert_char(' '); + insert_char(' '); + insert_char(' '); + immediate = 0; + } + break; + default: + insert_char(c); + immediate = 0; + break; + } + } else { + if (handle_escape(this_buf,&timeout,c)) { + render_line(); + place_cursor_actual(); + continue; + } + immediate = 0; + } + render_line(); + place_cursor_actual(); + } else if (istate == UTF8_REJECT) { + istate = 0; + } + } + return 0; +} + +/** + * Read a line of text with interactive editing. + */ +int rline(char * buffer, int buf_size) { + setlocale(LC_ALL, ""); + get_initial_termios(); + set_unbuffered(); + get_size(); + + column = 0; + offset = 0; + buf_size_max = buf_size; + + char * theme = getenv("RLINE_THEME"); + if (theme && !strcmp(theme,"sunsmoke")) { /* TODO bring back theme tables */ + rline_exp_load_colorscheme_sunsmoke(); + } else { + rline_exp_load_colorscheme_default(); + } + + the_line = line_create(); + loading = 0; + read_line(); + printf("\r\033[?25h\033[0m\n"); + + unsigned int off = 0; + for (int j = 0; j < the_line->actual; j++) { + char_t c = the_line->text[j]; + off += to_eight(c.codepoint, &buffer[off]); + } + + free(the_line); + + set_buffered(); + + return strlen(buffer); +} + +void * rline_exp_for_python(void * _stdin, void * _stdout, char * prompt) { + + rline_exp_set_prompts(prompt, "", strlen(prompt), 0); + + char * buf = malloc(1024); memset(buf, 0, 1024); - rline(buf, 1024, &callbacks); + + rline_exp_set_syntax("python"); + rline_exit_string = ""; + rline(buf, 1024); rline_history_insert(strdup(buf)); rline_scroll = 0; diff --git a/lib/rline_exp.c b/lib/rline_exp.c index f3c98999..8d7417ba 100644 --- a/lib/rline_exp.c +++ b/lib/rline_exp.c @@ -1,11 +1,9 @@ /* vim: tabstop=4 shiftwidth=4 noexpandtab * This file is part of ToaruOS and is released under the terms * of the NCSA / University of Illinois License - see LICENSE.md - * Copyright (C) 2018 K. Lange - * - * Experimental rline replacement with syntax highlighting, based - * on bim's highlighting and line editing. + * Copyright (C) 2018-2021 K. Lange * + * Line editor with syntax highlighting based on older, smaller version of bim. */ #define _XOPEN_SOURCE #define _DEFAULT_SOURCE @@ -24,6 +22,7 @@ #include #include +#include #define ENTER_KEY '\n' #define BACKSPACE_KEY 0x08 @@ -885,7 +884,6 @@ int rline_exp_set_syntax(char * name) { static void recalculate_syntax(line_t * line) { /* Clear syntax for this line first */ int line_no = 0; - //int is_original = 1; while (1) { for (int i = 0; i < line->actual; ++i) { line->text[i].flags = 0; @@ -906,26 +904,9 @@ static void recalculate_syntax(line_t * line) { state.state = syntax->calculate(&state); if (state.state != 0) { - /* TODO: Figure out a way to make this work for multiline input */ -#if 0 - if (line_no == -1) return; - if (!is_original) { - redraw_line(line_no); - } - if (line_no + 1 < env->line_count && env->lines[line_no+1]->istate != state.state) { - line_no++; - line = env->lines[line_no]; - line->istate = state.state; - if (env->loading) return; - is_original = 0; - goto _next; - } -#endif return; } } -//_next: -// (void)0; } } @@ -1669,6 +1650,106 @@ static void call_rline_func(rline_callback_t func, rline_context_t * context) { place_cursor_actual(); } +void rline_redraw_clean(rline_context_t * context) { + if (context->quiet) return; + printf("\033[u%s", context->buffer); + for (int i = context->offset; i < context->collected; ++i) { + printf("\033[D"); + } + fflush(stdout); +} + +void rline_reverse_search(rline_context_t * context) { + char input[512] = {0}; + int collected = 0; + int start_at = 0; + int changed = 0; + fprintf(stderr, "\033[G\033[0m\033[s"); + fflush(stderr); + key_event_state_t kbd_state = {0}; + char * match = ""; + int match_index = 0; + while (1) { + /* Find matches */ +try_rev_search_again: + if (collected && changed) { + match = ""; + match_index = 0; + for (int i = start_at; i < rline_history_count; i++) { + char * c = rline_history_prev(i+1); + if (strstr(c, input)) { + match = c; + match_index = i; + break; + } + } + if (!strcmp(match,"")) { + if (start_at) { + start_at = 0; + goto try_rev_search_again; + } + collected--; + input[collected] = '\0'; + if (collected) { + goto try_rev_search_again; + } + } + } + fprintf(stderr, "\033[u(reverse-i-search)`%s': %s\033[K", input, match); + fflush(stderr); + changed = 0; + + uint32_t key_sym = kbd_key(&kbd_state, fgetc(stdin)); + switch (key_sym) { + case KEY_NONE: + break; + case KEY_BACKSPACE: + case 0x7F: /* delete */ + if (collected > 0) { + collected--; + input[collected] = '\0'; + start_at = 0; + changed = 1; + } + break; + case KEY_CTRL_C: + printf("^C\n"); + return; + case KEY_CTRL_R: + start_at = match_index + 1; + changed = 1; + break; + case KEY_ESCAPE: + case KEY_ARROW_LEFT: + case KEY_ARROW_RIGHT: + context->cancel = 1; + case '\n': + memcpy(context->buffer, match, strlen(match) + 1); + context->collected = strlen(match); + context->offset = context->collected; + if (!context->quiet && context->callbacks->redraw_prompt) { + fprintf(stderr, "\033[G\033[K"); + context->callbacks->redraw_prompt(context); + } + fprintf(stderr, "\033[s"); + rline_redraw_clean(context); + if (key_sym == '\n' && !context->quiet) { + fprintf(stderr, "\n"); + } + return; + default: + if (key_sym < KEY_NORMAL_MAX) { + input[collected] = (char)key_sym; + collected++; + input[collected] = '\0'; + start_at = 0; + changed = 1; + } + break; + } + } +} + char * rline_preload = NULL; /** diff --git a/util/auto-dep.py b/util/auto-dep.py index 81f1a9e2..38a30ebe 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -24,7 +24,6 @@ class Classifier(object): '': (None, '-ltoaru_jpeg', ['']), '': (None, '-ltoaru_png', ['','']), '': (None, '-ltoaru_rline', ['']), - '': (None, '-ltoaru_rline_exp', ['']), '': (None, '-ltoaru_confreader', ['']), '': (None, '-ltoaru_markup', ['']), '': (None, '-ltoaru_json', ['']), From ac83b77055aa8b11f4e818d2ebe025b5c9e44161 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 1 Jan 2021 20:53:24 +0900 Subject: [PATCH 058/102] rline: try to fix escape timeouts? --- lib/rline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rline.c b/lib/rline.c index b03b5836..1f18d14d 100644 --- a/lib/rline.c +++ b/lib/rline.c @@ -222,11 +222,11 @@ static int getch(int immediate, int timeout) { _unget = -1; return out; } - if (timeout != 1) return fgetc(stdin); + if (immediate) return fgetc(stdin); struct pollfd fds[1]; fds[0].fd = STDIN_FILENO; fds[0].events = POLLIN; - int ret = poll(fds,1,(timeout == 1) ? 50 : -1); + int ret = poll(fds,1,10); if (ret > 0 && fds[0].revents & POLLIN) { unsigned char buf[1]; int unused = read(STDIN_FILENO, buf, 1); From c26493f813373524cc5c5bfbe177198f08d2fc7f Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 1 Jan 2021 21:09:02 +0900 Subject: [PATCH 059/102] kuroko: sync with upstream updates to dicts and lists --- kuroko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kuroko b/kuroko index 2677c7ac..6e4ff9f7 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 2677c7aca781773f528bce06914c05c36d230f4d +Subproject commit 6e4ff9f791876b2de2f3b99728d9de615cfd3c66 From e43b27798717929accf124b883fd0097d0ae3fdd Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 8 Jan 2021 08:44:08 +0900 Subject: [PATCH 060/102] kuroko: Update to latest release candidate --- apps/kuroko.c | 369 ++++++++++++++++++++++++++++++--- base/home/local/.bimrc | 6 + base/usr/include/toaru/rline.h | 15 ++ kuroko | 2 +- lib/rline.c | 92 +++++++- 5 files changed, 445 insertions(+), 39 deletions(-) diff --git a/apps/kuroko.c b/apps/kuroko.c index 097e270a..2cc631ca 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -1,34 +1,270 @@ +/** + * Kuroko interpreter main executable. + * + * Reads lines from stdin with the `rline` library and executes them, + * or executes scripts from the argument list. + */ #include #include #include #include #include +#ifdef __toaru__ #include #include +#else +#include "rline.h" +#include "kuroko.h" +#endif + #include "chunk.h" #include "debug.h" #include "vm.h" #include "memory.h" +#include "scanner.h" + +static int enableRline = 1; +static int exitRepl = 0; +static KrkValue exitFunc(int argc, KrkValue argv[]) { + exitRepl = 1; + return NONE_VAL(); +} + +static int pasteEnabled = 0; +static KrkValue paste(int argc, KrkValue argv[]) { + pasteEnabled = !pasteEnabled; + fprintf(stderr, "Pasting is %s.\n", pasteEnabled ? "enabled" : "disabled"); + return NONE_VAL(); +} + +/** + * Given an object, find a property with the same name as a scanner token. + * This can be either a field of an instance, or a method of the type of + * the of the object. If we can't find anything by that name, return None. + * + * We can probably also use valueGetProperty which does correct binding + * for native dynamic fields... + */ +static KrkValue findFromProperty(KrkValue current, KrkToken next) { + KrkValue value; + KrkValue member = OBJECT_VAL(krk_copyString(next.start, next.length)); + krk_push(member); + + if (IS_INSTANCE(current)) { + /* try fields */ + if (krk_tableGet(&AS_INSTANCE(current)->fields, member, &value)) goto _found; + if (krk_tableGet(&AS_INSTANCE(current)->_class->methods, member, &value)) goto _found; + } else { + /* try methods */ + KrkClass * _class = AS_CLASS(krk_typeOf(1,(KrkValue[]){current})); + if (krk_tableGet(&_class->methods, member, &value)) goto _found; + } + + krk_pop(); + return NONE_VAL(); + +_found: + krk_pop(); + return value; +} + +static void tab_complete_func(rline_context_t * c) { + /* Figure out where the cursor is and if we should be completing anything. */ + if (c->offset) { + /* Copy up to the cursor... */ + char * tmp = malloc(c->offset + 1); + memcpy(tmp, c->buffer, c->offset); + tmp[c->offset] = '\0'; + /* and pass it to the scanner... */ + krk_initScanner(tmp); + /* Logically, there can be at most (offset) tokens, plus some wiggle room. */ + KrkToken * space = malloc(sizeof(KrkToken) * (c->offset + 2)); + int count = 0; + do { + space[count++] = krk_scanToken(); + } while (space[count-1].type != TOKEN_EOF && space[count-1].type != TOKEN_ERROR); + + /* If count == 1, it was EOF or an error and we have nothing to complete. */ + if (count == 1) return; + + /* Otherwise we want to see if we're on an identifier or a dot. */ + int base = 2; + int n = base; + if (space[count-base].type == TOKEN_DOT) { + /* Dots we need to look back at the previous tokens for */ + n--; + base--; + } else if (space[count-base].type == TOKEN_IDENTIFIER) { + /* Identifiers we will consider as partial matches. */ + } else { + /* TODO: What if something the user typed as a partial token was a keyword? + * The scanner will give us the keyword's token type... + * Need to split token types between word-y and non-word-y + * so we can quietly ignore keywords and let them continue... */ + free(tmp); + return; + } + + /* Work backwards to find the start of this chain of identifiers */ + while (n < count) { + if (space[count-n-1].type != TOKEN_DOT) break; + n++; + if (n == count) break; + if (space[count-n-1].type != TOKEN_IDENTIFIER) break; + n++; + } + + if (n <= count) { + /* Now work forwards, starting from the current globals. */ + KrkValue root = OBJECT_VAL(vm.module); + while (n > base) { + /* And look at the potential fields for instances/classes */ + KrkValue next = findFromProperty(root, space[count-n]); + if (IS_NONE(next)) { + /* If we hit None, we found something invalid (or literally hit a None + * object, but really the difference is minimal in this case: Nothing + * useful to tab complete from here. */ + free(tmp); + return; + } + root = next; + n -= 2; /* To skip every other dot. */ + } + + /* Now figure out what we're completing - did we already have a partial symbol name? */ + int length = (space[count-base].type == TOKEN_DOT) ? 0 : (space[count-base].length); + + /* Take the last symbol name from the chain and get its member list from dir() */ + KrkValue dirList = krk_dirObject(1,(KrkValue[]){root}); + if (!IS_INSTANCE(dirList)) { + fprintf(stderr,"\nInternal error while tab completting.\n"); + free(tmp); + return; + } + krk_push(dirList); + KrkValue _list_internal = OBJECT_VAL(AS_INSTANCE(dirList)->_internal); + + /* Collect up to 256 of those that match */ + char * matches[256]; + int matchCount = 0;; + for (size_t i = 0; i < AS_LIST(_list_internal)->count; ++i) { + KrkString * s = AS_STRING(AS_LIST(_list_internal)->values[i]); + + /* If this symbol is shorter than the current submatch, skip it. */ + if (length && (int)s->length < length) continue; + + if (!memcmp(s->chars, space[count-base].start, length)) { + matches[matchCount] = s->chars; + matchCount++; + if (matchCount == 255) break; + } + } + + /* Now we can do things with the matches. */ + if (matchCount == 1) { + /* If there was only one, just fill it. */ + rline_insert(c, matches[0] + length); + rline_place_cursor(); + } else if (matchCount) { + /* Otherwise, try to find a common substring among them... */ + int j = length; + while (1) { + char m = matches[0][j]; + if (!m) break; + int diff = 0; + for (int i = 1; i < matchCount; ++i) { + if (matches[i][j] != m) { + diff = 1; + break; + } + } + if (diff) break; + j++; + } + /* If no common sub string could be filled in, we print the list. */ + if (j == length) { + /* We could do something prettier, but this will work for now. */ + fprintf(stderr, "\n"); + for (int i = 0; i < matchCount; ++i) { + fprintf(stderr, "%s ", matches[i]); + } + fprintf(stderr, "\n"); + } else { + /* If we do have a common sub string, fill in those characters. */ + for (int i = length; i < j; ++i) { + char tmp[2] = {matches[0][i], '\0'}; + rline_insert(c, tmp); + } + } + } + + krk_pop(); /* dirList */ + } + free(space); + return; + } +} +/* Runs the interpreter to get the version information. */ +static int version(void) { + krk_initVM(0); + krk_interpret("import kuroko\nprint('Kuroko',kuroko.version)\n", 1, "",""); + krk_freeVM(); + return 0; +} int main(int argc, char * argv[]) { int flags = 0; int opt; - while ((opt = getopt(argc, argv, "tdgs")) != -1) { + while ((opt = getopt(argc, argv, "dgrstV-:")) != -1) { switch (opt) { - case 't': - flags |= KRK_ENABLE_TRACING; - break; case 'd': - flags |= KRK_ENABLE_DEBUGGING; + /* Disassemble code blocks after compilation. */ + flags |= KRK_ENABLE_DISASSEMBLY; + break; + case 'g': + /* Always garbage collect during an allocation. */ + flags |= KRK_ENABLE_STRESS_GC; break; case 's': + /* Print debug information during compilation. */ flags |= KRK_ENABLE_SCAN_TRACING; break; - case 'g': - flags |= KRK_ENABLE_STRESS_GC; + case 't': + /* Disassemble instructions as they are executed. */ + flags |= KRK_ENABLE_TRACING; + break; + case 'r': + enableRline = 0; break; + case 'V': + return version(); + case '-': + if (!strcmp(optarg,"version")) { + return version(); + } else if (!strcmp(optarg,"help")) { + fprintf(stderr,"usage: %s [flags] [FILE...]\n" + "\n" + "Interpreter options:\n" + " -d Debug output from the bytecode compiler.\n" + " -g Collect garbage on every allocation.\n" + " -r Disable complex line editing in the REPL.\n" + " -s Debug output from the scanner/tokenizer.\n" + " -t Disassemble instructions as they are exceuted.\n" + " -V Print version information.\n" + "\n" + " --version Print version information.\n" + " --help Show this help text.\n" + "\n" + "If no files are provided, the interactive REPL will run.\n", + argv[0]); + return 0; + } else { + fprintf(stderr,"%s: unrecognized option '--%s'\n", + argv[0], optarg); + return 1; + } } } @@ -37,15 +273,45 @@ int main(int argc, char * argv[]) { KrkValue result = INTEGER_VAL(0); if (optind == argc) { - /* Run the repl */ - int exit = 0; + /* Add builtins for the repl, but hide them from the globals() list. */ + krk_defineNative(&vm.builtins->fields, "exit", exitFunc); + krk_defineNative(&vm.builtins->fields, "paste", paste); + + /* The repl runs in the context of a top-level module so each input + * line can share a globals state with the others. */ + krk_startModule(""); + krk_attachNamedValue(&vm.module->fields,"__doc__", NONE_VAL()); + /* Set ^D to send EOF */ rline_exit_string=""; + /* Enable syntax highlight for Kuroko */ rline_exp_set_syntax("krk"); - //rline_exp_set_shell_commands(shell_commands, shell_commands_len); - //rline_exp_set_tab_complete_func(tab_complete_func); + /* Bind a callback for \t */ + rline_exp_set_tab_complete_func(tab_complete_func); - while (!exit) { + /** + * Python stores version info in a built-in module called `sys`. + * We are not Python, we'll use `sys` to pretend to be Python + * in emulation mode, so we use a different module to store + * this sort of thing: kuroko + * + * This module won't be imported by default, but it's still in + * the modules list, so we can look for it there. + */ + KrkValue systemModule; + if (krk_tableGet(&vm.modules, OBJECT_VAL(krk_copyString("kuroko",6)), &systemModule)) { + KrkValue version, buildenv, builddate; + krk_tableGet(&AS_INSTANCE(systemModule)->fields, OBJECT_VAL(krk_copyString("version",7)), &version); + krk_tableGet(&AS_INSTANCE(systemModule)->fields, OBJECT_VAL(krk_copyString("buildenv",8)), &buildenv); + krk_tableGet(&AS_INSTANCE(systemModule)->fields, OBJECT_VAL(krk_copyString("builddate",9)), &builddate); + + fprintf(stdout, "Kuroko %s (%s) with %s\n", + AS_CSTRING(version), AS_CSTRING(builddate), AS_CSTRING(buildenv)); + } + + fprintf(stdout, "Type `help` for guidance, `paste()` to toggle automatic indentation, `license` for copyright information.\n"); + + while (!exitRepl) { size_t lineCapacity = 8; size_t lineCount = 0; char ** lines = ALLOCATE(char *, lineCapacity); @@ -55,6 +321,7 @@ int main(int argc, char * argv[]) { int inBlock = 0; int blockWidth = 0; + /* Main prompt is >>> like in Python */ rline_exp_set_prompts(">>> ", "", 4, 0); while (1) { @@ -62,26 +329,50 @@ int main(int argc, char * argv[]) { char buf[4096] = {0}; if (inBlock) { + /* When entering multiple lines, the additional lines + * will show a single > (and keep the left side aligned) */ rline_exp_set_prompts(" > ", "", 4, 0); - rline_preload = malloc(blockWidth + 1); - for (int i = 0; i < blockWidth; ++i) { - rline_preload[i] = ' '; + /* Also add indentation as necessary */ + if (!pasteEnabled) { + rline_preload = malloc(blockWidth + 1); + for (int i = 0; i < blockWidth; ++i) { + rline_preload[i] = ' '; + } + rline_preload[blockWidth] = '\0'; } - rline_preload[blockWidth] = '\0'; + } + + if (!enableRline) { + fprintf(stdout, "%s", inBlock ? " > " : ">>> "); + fflush(stdout); } rline_scroll = 0; - if (rline(buf, 4096) == 0) { - valid = 0; - exit = 1; - break; + if (enableRline) { + if (rline(buf, 4096) == 0) { + valid = 0; + exitRepl = 1; + break; + } + } else { + char * out = fgets(buf, 4096, stdin); + if (!out || !strlen(buf)) { + fprintf(stdout, "^D\n"); + valid = 0; + exitRepl = 1; + break; + } } if (buf[strlen(buf)-1] != '\n') { + /* rline shouldn't allow this as it doesn't accept ^D to submit input + * unless the line is empty, but just in case... */ fprintf(stderr, "Expected end of line in repl input. Did you ^D early?\n"); valid = 0; break; } + if (lineCapacity < lineCount + 1) { + /* If we need more space, grow as needed... */ size_t old = lineCapacity; lineCapacity = GROW_CAPACITY(old); lines = GROW_ARRAY(char *,lines,old,lineCapacity); @@ -93,31 +384,45 @@ int main(int argc, char * argv[]) { size_t lineLength = strlen(lines[i]); totalData += lineLength; - int is_spaces = 1; - int count_spaces = 0; + /* Figure out indentation */ + int isSpaces = 1; + int countSpaces = 0; for (size_t j = 0; j < lineLength; ++j) { if (lines[i][j] != ' ' && lines[i][j] != '\n') { - is_spaces = 0; + isSpaces = 0; break; } - count_spaces += 1; + countSpaces += 1; } + /* Naively detect the start of a new block so we can + * continue to accept input. Our compiler isn't really + * set up to let us compile "on the fly" so we can't just + * run lines through it and see if it wants more... */ if (lineLength > 2 && lines[i][lineLength-2] == ':') { inBlock = 1; - blockWidth = count_spaces + 4; + blockWidth = countSpaces + 4; continue; } else if (inBlock && lineLength != 1) { - if (is_spaces) { + if (isSpaces) { free(lines[i]); totalData -= lineLength; lineCount--; break; } - blockWidth = count_spaces; + blockWidth = countSpaces; + continue; + } else if (lineLength > 1 && lines[i][countSpaces] == '@') { + inBlock = 1; + blockWidth = countSpaces; continue; } + /* Ignore blank lines. */ + if (isSpaces && !i) valid = 0; + + /* If we're not in a block, or have entered a blank line, + * we can stop reading new lines and jump to execution. */ break; } @@ -125,9 +430,10 @@ int main(int argc, char * argv[]) { allData = malloc(totalData + 1); allData[0] = '\0'; } + for (size_t i = 0; i < lineCount; ++i) { if (valid) strcat(allData, lines[i]); - rline_history_insert(strdup(lines[i])); + if (enableRline) rline_history_insert(strdup(lines[i])); free(lines[i]); } FREE_ARRAY(char *, lines, lineCapacity); @@ -138,14 +444,17 @@ int main(int argc, char * argv[]) { fprintf(stdout, " \033[1;30m=> "); krk_printValue(stdout, result); fprintf(stdout, "\033[0m\n"); + krk_resetStack(); } } } } else { - + /* Expect the rest of the arguments to be scripts to run; + * collect the result of the last one and use it as the + * exit code if it's an integer. */ for (int i = optind; i < argc; ++i) { - KrkValue out = krk_runfile(argv[i],0,"",argv[i]); + KrkValue out = krk_runfile(argv[i],1,"__main__",argv[i]); if (i + 1 == argc) result = out; } } diff --git a/base/home/local/.bimrc b/base/home/local/.bimrc index eda5a937..0c0e1400 100644 --- a/base/home/local/.bimrc +++ b/base/home/local/.bimrc @@ -1,4 +1,10 @@ # Load theme files +quirk TERM toaru-vga no256color no24bit noitalic +quirk TERM xterm-256color caninsert canpaste cansgrmouse +quirk TERM toaru caninsert canpaste cansgrmouse +tabindicator » +spaceindicator · + rundir /usr/share/bim/themes # Fallback order - last successful theme "sticks" diff --git a/base/usr/include/toaru/rline.h b/base/usr/include/toaru/rline.h index 08926cca..f192074a 100644 --- a/base/usr/include/toaru/rline.h +++ b/base/usr/include/toaru/rline.h @@ -27,6 +27,19 @@ typedef struct rline_callback { rline_callback_t rev_search; } rline_callbacks_t; +typedef enum { + /* Base colors */ + RLINE_STYLE_MAIN, + RLINE_STYLE_ALT, + /* Syntax flags */ + RLINE_STYLE_KEYWORD, + RLINE_STYLE_STRING, + RLINE_STYLE_COMMENT, + RLINE_STYLE_TYPE, + RLINE_STYLE_PRAGMA, + RLINE_STYLE_NUMERAL, +} rline_style_t; + extern int rline(char * buffer, int buf_size); extern int rline_exp_set_prompts(char * left, char * right, int left_width, int right_width); extern int rline_exp_set_shell_commands(char ** cmds, int len); @@ -36,6 +49,8 @@ extern void rline_history_insert(char * str); extern void rline_history_append_line(char * str); extern char * rline_history_get(int item); extern char * rline_history_prev(int item); +extern void rline_place_cursor(void); +extern void rline_set_colors(rline_style_t style); #define RLINE_HISTORY_ENTRIES 128 extern char * rline_history[RLINE_HISTORY_ENTRIES]; diff --git a/kuroko b/kuroko index 6e4ff9f7..cdd3272d 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 6e4ff9f791876b2de2f3b99728d9de615cfd3c66 +Subproject commit cdd3272d0e1d918257daee191a191fcc4071d3e4 diff --git a/lib/rline.c b/lib/rline.c index 1f18d14d..ead861b6 100644 --- a/lib/rline.c +++ b/lib/rline.c @@ -530,11 +530,27 @@ void paint_single_string(struct syntax_state * state) { } } +void paint_krk_string(struct syntax_state * state, int type) { + /* Assumes you came in from a check of charat() == '"' */ + paint(1, FLAG_STRING); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == type) { + paint(2, FLAG_ESCAPE); + } else if (charat() == type) { + paint(1, FLAG_STRING); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else { + paint(1, FLAG_STRING); + } + } +} char * syn_krk_keywords[] = { - "and","class","def","else","export","for","if","in","import", - "let","not","or","print","return","while","try","except","raise", - "continue","break", + "and","class","def","else","for","if","in","import", + "let","not","or","return","while","try","except","raise", + "continue","break","as","from","elif","lambda", NULL }; @@ -544,6 +560,7 @@ char * syn_krk_types[] = { "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ "list","dict","range", /* builtin classes */ "object","exception","isinstance","type", + "print", NULL }; @@ -564,7 +581,7 @@ int paint_krk_numeral(struct syntax_state * state) { while (charat() == '0' || charat() == '1') paint(1, FLAG_NUMERAL); } else { while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == '.') { + if (charat() == '.' && isdigit(nextchar())) { paint(1, FLAG_NUMERAL); while (isdigit(charat())) paint(1, FLAG_NUMERAL); } @@ -572,17 +589,39 @@ int paint_krk_numeral(struct syntax_state * state) { return 0; } +int paint_krk_triple_string(struct syntax_state * state, int type) { + while (charat() != -1) { + if (charat() == type) { + paint(1, FLAG_STRING); + if (charat() == type && nextchar() == type) { + paint(2, FLAG_STRING); + return 0; + } + } else { + paint(1, FLAG_STRING); + } + } + return (type == '"') ? 1 : 2; /* continues */ +} + int syn_krk_calculate(struct syntax_state * state) { switch (state->state) { case -1: case 0: if (charat() == '#') { paint_comment(state); - } else if (charat() == '"') { - paint_simple_string(state); + } else if (charat() == '@') { + paint(1, FLAG_TYPE); + while (c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); return 0; - } else if (charat() == '\'') { - paint_single_string(state); + } else if (charat() == '"' || charat() == '\'') { + if (nextchar() == charat() && charrel(2) == charat()) { + int type = charat(); + paint(3, FLAG_STRING); + return paint_krk_triple_string(state, type); + } else { + paint_krk_string(state, charat()); + } return 0; } else if (find_keywords(state, syn_krk_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { return 0; @@ -598,6 +637,10 @@ int syn_krk_calculate(struct syntax_state * state) { return 0; } break; + case 1: + return paint_krk_triple_string(state, '"'); + case 2: + return paint_krk_triple_string(state, '\''); } return -1; } @@ -1069,6 +1112,35 @@ static void set_fg_color(const char * fg) { fflush(stdout); } +void rline_set_colors(rline_style_t style) { + switch (style) { + case RLINE_STYLE_MAIN: + set_colors(COLOR_FG, COLOR_BG); + break; + case RLINE_STYLE_ALT: + set_colors(COLOR_ALT_FG, COLOR_ALT_BG); + break; + case RLINE_STYLE_KEYWORD: + set_fg_color(COLOR_KEYWORD); + break; + case RLINE_STYLE_STRING: + set_fg_color(COLOR_STRING); + break; + case RLINE_STYLE_COMMENT: + set_fg_color(COLOR_COMMENT); + break; + case RLINE_STYLE_TYPE: + set_fg_color(COLOR_TYPE); + break; + case RLINE_STYLE_PRAGMA: + set_fg_color(COLOR_PRAGMA); + break; + case RLINE_STYLE_NUMERAL: + set_fg_color(COLOR_NUMERAL); + break; + } +} + /** * Mostly copied from bim, but with some minor * alterations and removal of selection support. @@ -1359,6 +1431,10 @@ static void place_cursor_actual(void) { fflush(stdout); } +void rline_place_cursor(void) { + place_cursor_actual(); +} + /** * Delete a character */ From eedda5a9dbac6a6f14caa75825ba2faadd637fb3 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 10 Jan 2021 11:34:56 +0900 Subject: [PATCH 061/102] Update Kuroko with new library paths --- Makefile | 10 +++--- apps/kuroko.c | 81 +++++++++++++++++++++++++++++++++++++++++++++--- kuroko | 2 +- util/auto-dep.py | 2 +- 4 files changed, 84 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 61adec3b..fe318746 100644 --- a/Makefile +++ b/Makefile @@ -162,7 +162,7 @@ base/cdrom: mkdir -p $@ base/var: mkdir -p $@ -base/usr/share/kuroko: +base/usr/local/lib/kuroko: mkdir -p $@ fatbase/efi/boot: mkdir -p $@ @@ -170,7 +170,7 @@ cdrom: mkdir -p $@ .make: mkdir -p .make -dirs: base/dev base/tmp base/proc base/bin base/lib base/cdrom base/usr/share/kuroko cdrom base/var fatbase/efi/boot .make +dirs: base/dev base/tmp base/proc base/bin base/lib base/cdrom base/usr/local/lib/kuroko cdrom base/var fatbase/efi/boot .make # C Library @@ -199,13 +199,13 @@ kuroko/%.o: kuroko/%.c $(CC) $(CFLAGS) -fPIC -c -o $@ $^ KUROKO_CMODS=$(patsubst kuroko/src/%.c,%,$(wildcard kuroko/src/*.c)) -KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/usr/share/kuroko/$(lib).so) +KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/usr/local/lib/kuroko/$(lib).so) KUROKO_CMODS_Y=$(foreach lib,$(KUROKO_CMODS),.make/$(lib).kmak) -KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/share/kuroko/%.krk,$(wildcard kuroko/modules/*.krk)) +KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/local/lib/kuroko/%.krk,$(wildcard kuroko/modules/*.krk)) KUROKO_FILES=$(KUROKO_CMODS_X) $(KUROKO_KRK_MODS) base/lib/libkuroko.so -base/usr/share/kuroko/%.krk: kuroko/modules/%.krk +base/usr/local/lib/kuroko/%.krk: kuroko/modules/%.krk cp $< $@ .make/%.kmak: kuroko/src/%.c util/auto-dep.py | dirs diff --git a/apps/kuroko.c b/apps/kuroko.c index 2cc631ca..1b4737ac 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -9,12 +9,15 @@ #include #include #include +#include #ifdef __toaru__ #include #include #else +#ifndef NO_RLINE #include "rline.h" +#endif #include "kuroko.h" #endif @@ -24,6 +27,9 @@ #include "memory.h" #include "scanner.h" +#define PROMPT_MAIN ">>> " +#define PROMPT_BLOCK " > " + static int enableRline = 1; static int exitRepl = 0; static KrkValue exitFunc(int argc, KrkValue argv[]) { @@ -38,6 +44,7 @@ static KrkValue paste(int argc, KrkValue argv[]) { return NONE_VAL(); } +#ifndef NO_RLINE /** * Given an object, find a property with the same name as a scanner token. * This can be either a field of an instance, or a method of the type of @@ -205,6 +212,15 @@ static void tab_complete_func(rline_context_t * c) { return; } } +#endif + +static void handleSigint(int sigNum) { + if (vm.frameCount) { + krk_runtimeError(vm.exceptions.keyboardInterrupt, "Keyboard interrupt."); + } + + signal(sigNum, handleSigint); +} /* Runs the interpreter to get the version information. */ static int version(void) { @@ -214,10 +230,27 @@ static int version(void) { return 0; } +static int modulePaths(void) { + krk_initVM(0); + krk_interpret("import kuroko\nprint(kuroko.module_paths)\n", 1, "",""); + krk_freeVM(); + return 0; +} + +#ifdef BUNDLE_LIBS +#define BUNDLED(name) do { \ + extern KrkValue krk_module_onload_ ## name (); \ + KrkValue moduleOut = krk_module_onload_ ## name (); \ + krk_attachNamedValue(&vm.modules, # name, moduleOut); \ + krk_attachNamedObject(&AS_INSTANCE(moduleOut)->fields, "__name__", (KrkObj*)krk_copyString(#name, sizeof(#name)-1)); \ + krk_attachNamedValue(&AS_INSTANCE(moduleOut)->fields, "__file__", NONE_VAL()); \ +} while (0) +#endif + int main(int argc, char * argv[]) { int flags = 0; int opt; - while ((opt = getopt(argc, argv, "dgrstV-:")) != -1) { + while ((opt = getopt(argc, argv, "dgrstMV-:")) != -1) { switch (opt) { case 'd': /* Disassemble code blocks after compilation. */ @@ -238,6 +271,8 @@ int main(int argc, char * argv[]) { case 'r': enableRline = 0; break; + case 'M': + return modulePaths(); case 'V': return version(); case '-': @@ -270,6 +305,26 @@ int main(int argc, char * argv[]) { krk_initVM(flags); + /* Attach kuroko.argv - argv[0] will be set to an empty string for the repl */ + if (argc == optind) krk_push(OBJECT_VAL(krk_copyString("",0))); + for (int arg = optind; arg < argc; ++arg) { + krk_push(OBJECT_VAL(krk_copyString(argv[arg],strlen(argv[arg])))); + } + KrkValue argList = krk_list_of(argc - optind + (optind == argc), &vm.stackTop[-(argc - optind + (optind == argc))]); + krk_attachNamedValue(&vm.system->fields, "argv", argList); + for (int arg = optind; arg < argc + (optind == argc); ++arg) krk_pop(); + + /* Bind interrupt signal */ + signal(SIGINT, handleSigint); + +#ifdef BUNDLE_LIBS + /* Add any other modules you want to include that are normally built as shared objects. */ + BUNDLED(fileio); + BUNDLED(dis); + BUNDLED(os); + BUNDLED(time); +#endif + KrkValue result = INTEGER_VAL(0); if (optind == argc) { @@ -282,12 +337,14 @@ int main(int argc, char * argv[]) { krk_startModule(""); krk_attachNamedValue(&vm.module->fields,"__doc__", NONE_VAL()); +#ifndef NO_RLINE /* Set ^D to send EOF */ rline_exit_string=""; /* Enable syntax highlight for Kuroko */ rline_exp_set_syntax("krk"); /* Bind a callback for \t */ rline_exp_set_tab_complete_func(tab_complete_func); +#endif /** * Python stores version info in a built-in module called `sys`. @@ -321,17 +378,20 @@ int main(int argc, char * argv[]) { int inBlock = 0; int blockWidth = 0; +#ifndef NO_RLINE /* Main prompt is >>> like in Python */ - rline_exp_set_prompts(">>> ", "", 4, 0); + rline_exp_set_prompts(PROMPT_MAIN, "", 4, 0); +#endif while (1) { /* This would be a nice place for line editing */ char buf[4096] = {0}; +#ifndef NO_RLINE if (inBlock) { /* When entering multiple lines, the additional lines * will show a single > (and keep the left side aligned) */ - rline_exp_set_prompts(" > ", "", 4, 0); + rline_exp_set_prompts(PROMPT_BLOCK, "", 4, 0); /* Also add indentation as necessary */ if (!pasteEnabled) { rline_preload = malloc(blockWidth + 1); @@ -343,10 +403,14 @@ int main(int argc, char * argv[]) { } if (!enableRline) { - fprintf(stdout, "%s", inBlock ? " > " : ">>> "); +#else + if (1) { +#endif + fprintf(stdout, "%s", inBlock ? PROMPT_BLOCK : PROMPT_MAIN); fflush(stdout); } +#ifndef NO_RLINE rline_scroll = 0; if (enableRline) { if (rline(buf, 4096) == 0) { @@ -355,6 +419,7 @@ int main(int argc, char * argv[]) { break; } } else { +#else char * out = fgets(buf, 4096, stdin); if (!out || !strlen(buf)) { fprintf(stdout, "^D\n"); @@ -362,7 +427,11 @@ int main(int argc, char * argv[]) { exitRepl = 1; break; } +#endif +#ifndef NO_RLINE } +#endif + if (buf[strlen(buf)-1] != '\n') { /* rline shouldn't allow this as it doesn't accept ^D to submit input * unless the line is empty, but just in case... */ @@ -433,7 +502,9 @@ int main(int argc, char * argv[]) { for (size_t i = 0; i < lineCount; ++i) { if (valid) strcat(allData, lines[i]); +#ifndef NO_RLINE if (enableRline) rline_history_insert(strdup(lines[i])); +#endif free(lines[i]); } FREE_ARRAY(char *, lines, lineCapacity); @@ -446,8 +517,10 @@ int main(int argc, char * argv[]) { fprintf(stdout, "\033[0m\n"); krk_resetStack(); } + free(allData); } + (void)blockWidth; } } else { /* Expect the rest of the arguments to be scripts to run; diff --git a/kuroko b/kuroko index cdd3272d..21477f7c 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit cdd3272d0e1d918257daee191a191fcc4071d3e4 +Subproject commit 21477f7c86d6a213d1b9723332c81f309a048efe diff --git a/util/auto-dep.py b/util/auto-dep.py index 38a30ebe..e6000c8f 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -179,7 +179,7 @@ def toheader(name): elif command == "--makekurokomod": libname = os.path.basename(filename).replace(".c","") _libs = [x for x in c.libs if not x.startswith('-ltoaru_') or x.replace("-ltoaru_","") != libname] - print("base/usr/share/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) {includes} -shared -fPIC -o $@ $< {libraries}".format( + print("base/usr/local/lib/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) {includes} -shared -fPIC -o $@ $< {libraries}".format( lib=libname, source=filename, headers=" ".join([toheader(x) for x in c.libs]), From f05522baca1d148e51e6e7146c8736118bcb9494 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 21 Jan 2021 21:20:59 +0900 Subject: [PATCH 062/102] kuroko: synchronize and begin work on Toaru bindings --- Makefile | 13 +- apps/kuroko.c | 183 +++++++++++++----- base/usr/include/toaru/rline.h | 1 + kuroko | 2 +- lib/graphics.c | 12 +- lib/kuroko/_yutani.c | 274 +++++++++++++++++++++++++++ lib/rline.c | 331 +++++++++++++++++---------------- util/auto-dep.py | 6 +- 8 files changed, 601 insertions(+), 221 deletions(-) create mode 100644 lib/kuroko/_yutani.c diff --git a/Makefile b/Makefile index fe318746..085b73c4 100644 --- a/Makefile +++ b/Makefile @@ -194,11 +194,11 @@ base/lib/libc.so: ${LIBC_OBJS} | dirs crts base/lib/libm.so: util/lm.c | dirs crts $(CC) -nodefaultlibs -o $@ $(CFLAGS) -shared -fPIC $^ -lgcc -KUROKO_OBJS=$(patsubst %.c, %.o, $(filter-out kuroko/rline.c kuroko/kuroko.c, $(sort $(wildcard kuroko/*.c)))) +KUROKO_OBJS=$(patsubst %.c, %.o, $(filter-out kuroko/src/module_% kuroko/src/rline.c kuroko/src/kuroko.c, $(sort $(wildcard kuroko/src/*.c)))) kuroko/%.o: kuroko/%.c - $(CC) $(CFLAGS) -fPIC -c -o $@ $^ + $(CC) $(CFLAGS) -DDEBUG -fPIC -c -o $@ $^ -KUROKO_CMODS=$(patsubst kuroko/src/%.c,%,$(wildcard kuroko/src/*.c)) +KUROKO_CMODS=$(patsubst kuroko/src/module_%.c,%,$(wildcard kuroko/src/module_*.c)) $(patsubst lib/kuroko/%.c,%,$(wildcard lib/kuroko/*.c)) KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/usr/local/lib/kuroko/$(lib).so) KUROKO_CMODS_Y=$(foreach lib,$(KUROKO_CMODS),.make/$(lib).kmak) KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/local/lib/kuroko/%.krk,$(wildcard kuroko/modules/*.krk)) @@ -208,7 +208,10 @@ KUROKO_FILES=$(KUROKO_CMODS_X) $(KUROKO_KRK_MODS) base/lib/libkuroko.so base/usr/local/lib/kuroko/%.krk: kuroko/modules/%.krk cp $< $@ -.make/%.kmak: kuroko/src/%.c util/auto-dep.py | dirs +.make/%.kmak: kuroko/src/module_%.c util/auto-dep.py | dirs + util/auto-dep.py --makekurokomod $< > $@ + +.make/%.kmak: lib/kuroko/%.c util/auto-dep.py | dirs util/auto-dep.py --makekurokomod $< > $@ ifeq (,$(findstring clean,$(MAKECMDGOALS))) @@ -216,7 +219,7 @@ ifeq (,$(findstring clean,$(MAKECMDGOALS))) endif base/lib/libkuroko.so: $(KUROKO_OBJS) | dirs crts ${LC} - $(CC) $(CFLAGS) -shared -fPIC -o $@ $^ -lgcc + $(CC) $(CFLAGS) -DDEBUG -shared -fPIC -o $@ $^ -lgcc # Userspace Linker/Loader diff --git a/apps/kuroko.c b/apps/kuroko.c index 1b4737ac..ccf4f7a3 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -55,7 +55,7 @@ static KrkValue paste(int argc, KrkValue argv[]) { */ static KrkValue findFromProperty(KrkValue current, KrkToken next) { KrkValue value; - KrkValue member = OBJECT_VAL(krk_copyString(next.start, next.length)); + KrkValue member = OBJECT_VAL(krk_copyString(next.start, next.literalWidth)); krk_push(member); if (IS_INSTANCE(current)) { @@ -64,7 +64,7 @@ static KrkValue findFromProperty(KrkValue current, KrkToken next) { if (krk_tableGet(&AS_INSTANCE(current)->_class->methods, member, &value)) goto _found; } else { /* try methods */ - KrkClass * _class = AS_CLASS(krk_typeOf(1,(KrkValue[]){current})); + KrkClass * _class = krk_getType(current); if (krk_tableGet(&_class->methods, member, &value)) goto _found; } @@ -93,7 +93,9 @@ static void tab_complete_func(rline_context_t * c) { } while (space[count-1].type != TOKEN_EOF && space[count-1].type != TOKEN_ERROR); /* If count == 1, it was EOF or an error and we have nothing to complete. */ - if (count == 1) return; + if (count == 1) { + goto _cleanup; + } /* Otherwise we want to see if we're on an identifier or a dot. */ int base = 2; @@ -102,15 +104,11 @@ static void tab_complete_func(rline_context_t * c) { /* Dots we need to look back at the previous tokens for */ n--; base--; - } else if (space[count-base].type == TOKEN_IDENTIFIER) { - /* Identifiers we will consider as partial matches. */ + } else if (space[count-base].type >= TOKEN_IDENTIFIER && space[count-base].type <= TOKEN_WITH) { + /* Something alphanumeric; only for the last element */ } else { - /* TODO: What if something the user typed as a partial token was a keyword? - * The scanner will give us the keyword's token type... - * Need to split token types between word-y and non-word-y - * so we can quietly ignore keywords and let them continue... */ - free(tmp); - return; + /* Some other symbol */ + goto _cleanup; } /* Work backwards to find the start of this chain of identifiers */ @@ -125,6 +123,7 @@ static void tab_complete_func(rline_context_t * c) { if (n <= count) { /* Now work forwards, starting from the current globals. */ KrkValue root = OBJECT_VAL(vm.module); + int isGlobal = 1; while (n > base) { /* And look at the potential fields for instances/classes */ KrkValue next = findFromProperty(root, space[count-n]); @@ -132,41 +131,83 @@ static void tab_complete_func(rline_context_t * c) { /* If we hit None, we found something invalid (or literally hit a None * object, but really the difference is minimal in this case: Nothing * useful to tab complete from here. */ - free(tmp); - return; + goto _cleanup; } + isGlobal = 0; root = next; n -= 2; /* To skip every other dot. */ } /* Now figure out what we're completing - did we already have a partial symbol name? */ int length = (space[count-base].type == TOKEN_DOT) ? 0 : (space[count-base].length); - - /* Take the last symbol name from the chain and get its member list from dir() */ - KrkValue dirList = krk_dirObject(1,(KrkValue[]){root}); - if (!IS_INSTANCE(dirList)) { - fprintf(stderr,"\nInternal error while tab completting.\n"); - free(tmp); - return; - } - krk_push(dirList); - KrkValue _list_internal = OBJECT_VAL(AS_INSTANCE(dirList)->_internal); + isGlobal = isGlobal && (length != 0); /* Collect up to 256 of those that match */ char * matches[256]; - int matchCount = 0;; - for (size_t i = 0; i < AS_LIST(_list_internal)->count; ++i) { - KrkString * s = AS_STRING(AS_LIST(_list_internal)->values[i]); + int matchCount = 0; + + /* Take the last symbol name from the chain and get its member list from dir() */ + KRK_PAUSE_GC(); + + for (;;) { + KrkValue dirList = krk_dirObject(1,(KrkValue[]){root}); + if (!IS_INSTANCE(dirList)) { + fprintf(stderr,"\nInternal error while tab completting.\n"); + goto _cleanup; + } + KrkValue _list_internal = OBJECT_VAL(AS_INSTANCE(dirList)->_internal); + + for (size_t i = 0; i < AS_LIST(_list_internal)->count; ++i) { + KrkString * s = AS_STRING(AS_LIST(_list_internal)->values[i]); + KrkToken asToken = {.start = s->chars, .literalWidth = s->length}; + KrkValue thisValue = findFromProperty(root, asToken); + if (IS_CLOSURE(thisValue) || IS_BOUND_METHOD(thisValue) || + (IS_NATIVE(thisValue) && ((KrkNative*)AS_OBJECT(thisValue))->isMethod != 2)) { + char * tmp = malloc(s->length + 2); + sprintf(tmp, "%s(", s->chars); + s = krk_takeString(tmp, strlen(tmp)); + } - /* If this symbol is shorter than the current submatch, skip it. */ - if (length && (int)s->length < length) continue; + /* If this symbol is shorter than the current submatch, skip it. */ + if (length && (int)s->length < length) continue; - if (!memcmp(s->chars, space[count-base].start, length)) { - matches[matchCount] = s->chars; - matchCount++; - if (matchCount == 255) break; + /* See if it's already in the matches */ + int found = 0; + for (int i = 0; i < matchCount; ++i) { + if (!strcmp(matches[i], s->chars)) { + found = 1; + break; + } + } + if (found) continue; + + if (!memcmp(s->chars, space[count-base].start, length)) { + matches[matchCount] = s->chars; + matchCount++; + if (matchCount == 255) goto _toomany; + } + } + + /* + * If the object we were scanning was the current module, + * then we should also throw the builtins into the ring. + */ + if (isGlobal && AS_OBJECT(root) == (KrkObj*)vm.module) { + root = OBJECT_VAL(vm.builtins); + continue; + } else if (isGlobal && AS_OBJECT(root) == (KrkObj*)vm.builtins) { + extern char * syn_krk_keywords[]; + KrkInstance * fakeKeywordsObject = krk_newInstance(vm.objectClass); + for (char ** keyword = syn_krk_keywords; *keyword; keyword++) { + krk_attachNamedValue(&fakeKeywordsObject->fields, *keyword, NONE_VAL()); + } + root = OBJECT_VAL(fakeKeywordsObject); + continue; + } else { + break; } } +_toomany: /* Now we can do things with the matches. */ if (matchCount == 1) { @@ -191,12 +232,24 @@ static void tab_complete_func(rline_context_t * c) { } /* If no common sub string could be filled in, we print the list. */ if (j == length) { - /* We could do something prettier, but this will work for now. */ - fprintf(stderr, "\n"); + /* First find the maximum width of an entry */ + int maxWidth = 0; for (int i = 0; i < matchCount; ++i) { - fprintf(stderr, "%s ", matches[i]); + if ((int)strlen(matches[i]) > maxWidth) maxWidth = strlen(matches[i]); } + /* Now how many can we fit in a screen */ + int colsPerLine = rline_terminal_width / (maxWidth + 2); /* +2 for the spaces */ fprintf(stderr, "\n"); + int column = 0; + for (int i = 0; i < matchCount; ++i) { + fprintf(stderr, "%-*s ", maxWidth, matches[i]); + column += 1; + if (column >= colsPerLine) { + fprintf(stderr, "\n"); + column = 0; + } + } + if (column != 0) fprintf(stderr, "\n"); } else { /* If we do have a common sub string, fill in those characters. */ for (int i = length; i < j; ++i) { @@ -205,10 +258,11 @@ static void tab_complete_func(rline_context_t * c) { } } } - - krk_pop(); /* dirList */ } +_cleanup: + free(tmp); free(space); + KRK_RESUME_GC(); return; } } @@ -249,8 +303,9 @@ static int modulePaths(void) { int main(int argc, char * argv[]) { int flags = 0; + int moduleAsMain = 0; int opt; - while ((opt = getopt(argc, argv, "dgrstMV-:")) != -1) { + while ((opt = getopt(argc, argv, "dgm:rstMV-:")) != -1) { switch (opt) { case 'd': /* Disassemble code blocks after compilation. */ @@ -268,6 +323,10 @@ int main(int argc, char * argv[]) { /* Disassemble instructions as they are executed. */ flags |= KRK_ENABLE_TRACING; break; + case 'm': + moduleAsMain = 1; + optind--; /* to get us back to optarg */ + goto _finishArgs; case 'r': enableRline = 0; break; @@ -284,6 +343,7 @@ int main(int argc, char * argv[]) { "Interpreter options:\n" " -d Debug output from the bytecode compiler.\n" " -g Collect garbage on every allocation.\n" + " -m mod Run a module as a script.\n" " -r Disable complex line editing in the REPL.\n" " -s Debug output from the scanner/tokenizer.\n" " -t Disassemble instructions as they are exceuted.\n" @@ -303,6 +363,7 @@ int main(int argc, char * argv[]) { } } +_finishArgs: krk_initVM(flags); /* Attach kuroko.argv - argv[0] will be set to an empty string for the repl */ @@ -311,7 +372,9 @@ int main(int argc, char * argv[]) { krk_push(OBJECT_VAL(krk_copyString(argv[arg],strlen(argv[arg])))); } KrkValue argList = krk_list_of(argc - optind + (optind == argc), &vm.stackTop[-(argc - optind + (optind == argc))]); + krk_push(argList); krk_attachNamedValue(&vm.system->fields, "argv", argList); + krk_pop(); for (int arg = optind; arg < argc + (optind == argc); ++arg) krk_pop(); /* Bind interrupt signal */ @@ -323,11 +386,28 @@ int main(int argc, char * argv[]) { BUNDLED(dis); BUNDLED(os); BUNDLED(time); + BUNDLED(math); #endif KrkValue result = INTEGER_VAL(0); - if (optind == argc) { + if (moduleAsMain) { + /* This isn't going to do what we want for built-in modules, but I'm not sure + * what we _should_ do for them anyway... let's just leave that as a TODO; + * we do let C modules know they are the __main__ now, so non-built-in + * C modules can still act as scripts if they want... */ + KrkValue module; + krk_push(OBJECT_VAL(krk_copyString("__main__",8))); + int out = !krk_loadModule( + AS_STRING(AS_LIST(OBJECT_VAL(AS_INSTANCE(argList)->_internal))->values[0]), + &module, + AS_STRING(krk_peek(0))); + if (vm.flags & KRK_HAS_EXCEPTION) { + krk_dumpTraceback(); + krk_resetStack(); + } + return out; + } else if (optind == argc) { /* Add builtins for the repl, but hide them from the globals() list. */ krk_defineNative(&vm.builtins->fields, "exit", exitFunc); krk_defineNative(&vm.builtins->fields, "paste", paste); @@ -419,7 +499,7 @@ int main(int argc, char * argv[]) { break; } } else { -#else +#endif char * out = fgets(buf, 4096, stdin); if (!out || !strlen(buf)) { fprintf(stdout, "^D\n"); @@ -427,7 +507,6 @@ int main(int argc, char * argv[]) { exitRepl = 1; break; } -#endif #ifndef NO_RLINE } #endif @@ -468,10 +547,13 @@ int main(int argc, char * argv[]) { * continue to accept input. Our compiler isn't really * set up to let us compile "on the fly" so we can't just * run lines through it and see if it wants more... */ - if (lineLength > 2 && lines[i][lineLength-2] == ':') { + if (lineLength > 1 && lines[i][lineLength-2] == ':') { inBlock = 1; blockWidth = countSpaces + 4; continue; + } else if (lineLength > 1 && lines[i][lineLength-2] == '\\') { + inBlock = 1; + continue; } else if (inBlock && lineLength != 1) { if (isSpaces) { free(lines[i]); @@ -512,9 +594,20 @@ int main(int argc, char * argv[]) { if (valid) { KrkValue result = krk_interpret(allData, 0, "",""); if (!IS_NONE(result)) { - fprintf(stdout, " \033[1;30m=> "); - krk_printValue(stdout, result); - fprintf(stdout, "\033[0m\n"); + KrkClass * type = krk_getType(result); + const char * formatStr = " \033[1;30m=> %s\033[0m\n"; + if (type->_reprer) { + krk_push(result); + result = krk_callSimple(OBJECT_VAL(type->_reprer), 1, 0); + } else if (type->_tostr) { + krk_push(result); + result = krk_callSimple(OBJECT_VAL(type->_tostr), 1, 0); + } + if (!IS_STRING(result)) { + fprintf(stdout, " \033[1;31m=> Unable to produce representation for value.\033[0m\n"); + } else { + fprintf(stdout, formatStr, AS_CSTRING(result)); + } krk_resetStack(); } free(allData); diff --git a/base/usr/include/toaru/rline.h b/base/usr/include/toaru/rline.h index f192074a..b6face56 100644 --- a/base/usr/include/toaru/rline.h +++ b/base/usr/include/toaru/rline.h @@ -51,6 +51,7 @@ extern char * rline_history_get(int item); extern char * rline_history_prev(int item); extern void rline_place_cursor(void); extern void rline_set_colors(rline_style_t style); +extern int rline_terminal_width; #define RLINE_HISTORY_ENTRIES 128 extern char * rline_history[RLINE_HISTORY_ENTRIES]; diff --git a/kuroko b/kuroko index 21477f7c..a69ee8ef 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 21477f7c86d6a213d1b9723332c81f309a048efe +Subproject commit a69ee8efcaaa685d99c9093e8223a5e2e0c25de3 diff --git a/lib/graphics.c b/lib/graphics.c index a5de636d..ed1ac95a 100644 --- a/lib/graphics.c +++ b/lib/graphics.c @@ -399,13 +399,7 @@ void blur_context_box(gfx_context_t * _src, int radius) { static int (*load_sprite_jpg)(sprite_t *, char *) = NULL; static int (*load_sprite_png)(sprite_t *, char *) = NULL; -/** - * TODO: This should probably use some config file or plugin path - * for better discovery; we could rename these libraries and - * not have applications / other libraries depend on them - * directly and instead go through libtoaru_graphics. - */ -__attribute__((constructor)) static void _load_format_libraries() { +static void _load_format_libraries() { void * _lib_jpeg = dlopen("libtoaru_jpeg.so", 0); if (_lib_jpeg) load_sprite_jpg = dlsym(_lib_jpeg, "load_sprite_jpg"); void * _lib_png = dlopen("libtoaru_png.so", 0); @@ -419,6 +413,10 @@ static char * extension_from_filename(char * filename) { } int load_sprite(sprite_t * sprite, char * filename) { + static int librariesLoaded = 0; + if (!librariesLoaded) { + _load_format_libraries(); + } char * ext = extension_from_filename(filename); diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c new file mode 100644 index 00000000..ed7035e8 --- /dev/null +++ b/lib/kuroko/_yutani.c @@ -0,0 +1,274 @@ +/* Kuroko bindings for Yutani */ +#include +#include +#include "kuroko/src/kuroko.h" +#include "kuroko/src/vm.h" +#include "kuroko/src/value.h" +#include "kuroko/src/object.h" + +static KrkClass * Message; +static KrkClass * Yutani; + +static KrkInstance * module; +static KrkInstance * yctxInstance = NULL; + +#define S(c) (krk_copyString(c,sizeof(c)-1)) + +/** + * Convenience wrapper to make a class and attach it to the module, while + * handling stack push/pop to keep things from being prematurely GC'd. + */ +KrkClass * krk_createClass(KrkInstance * inModule, const char * name, KrkClass * base) { + if (!base) base = vm.objectClass; + KrkString * str_Name = krk_copyString(name, strlen(name)); + krk_push(OBJECT_VAL(str_Name)); + KrkClass * obj_Class = krk_newClass(str_Name); + krk_push(OBJECT_VAL(obj_Class)); + + krk_attachNamedObject(&inModule->fields, name, (KrkObj *)obj_Class); + + krk_tableAddAll(&base->methods, &obj_Class->methods); + krk_tableAddAll(&base->fields, &obj_Class->fields); + krk_pop(); /* obj_Class */ + krk_pop(); /* str_Name */ + + return obj_Class; +} + +#define DO_FIELD(name, body) \ + { krk_push(OBJECT_VAL(S(name))); \ + if (krk_valuesEqual(argv[1], krk_peek(0))) { \ + krk_pop(); \ + body \ + } krk_pop(); } + +#define TO_INT_(name) { return INTEGER_VAL((msg-> name)); } +#define TO_INT(name) { return INTEGER_VAL((me-> name)); } +#define WID() DO_FIELD("wid", TO_INT(wid)) +#define STRUCT(type) type * me = (void*)msg->data + +static KrkValue _message_getattr(int argc, KrkValue argv[]) { + assert(argc == 2); + KrkInstance * self = AS_INSTANCE(argv[0]); + + yutani_msg_t * msg = self->_internal; + if (!msg) return NONE_VAL(); + + DO_FIELD("magic", TO_INT_(magic)); + DO_FIELD("type", TO_INT_(type)); + DO_FIELD("size", TO_INT_(size)); + + switch (msg->type) { + case YUTANI_MSG_WELCOME: { + STRUCT(struct yutani_msg_welcome); + DO_FIELD("display_width", TO_INT(display_width)); + DO_FIELD("display_height", TO_INT(display_height)); + } break; + case YUTANI_MSG_WINDOW_MOUSE_EVENT: { + STRUCT(struct yutani_msg_window_mouse_event); + WID(); + DO_FIELD("new_x", TO_INT(new_x)); + DO_FIELD("new_y", TO_INT(new_y)); + DO_FIELD("old_x", TO_INT(old_x)); + DO_FIELD("old_y", TO_INT(old_y)); + DO_FIELD("buttons", TO_INT(buttons)); + DO_FIELD("command", TO_INT(command)); + DO_FIELD("modifiers", TO_INT(modifiers)); + } break; + case YUTANI_MSG_WINDOW_FOCUS_CHANGE: { + STRUCT(struct yutani_msg_window_focus_change); + WID(); + DO_FIELD("focused", TO_INT(focused)); + } break; + case YUTANI_MSG_RESIZE_OFFER: { + STRUCT(struct yutani_msg_window_resize); + WID(); + DO_FIELD("width", TO_INT(width)); + DO_FIELD("height", TO_INT(height)); + DO_FIELD("bufid", TO_INT(bufid)); + } break; + case YUTANI_MSG_WINDOW_ADVERTISE: { + STRUCT(struct yutani_msg_window_advertise); + WID(); + DO_FIELD("flags", TO_INT(flags)); + DO_FIELD("size", TO_INT(size)); + DO_FIELD("name", { char * s = me->strings + me->offsets[0]; size_t l = strlen(s); return OBJECT_VAL(krk_copyString(s,l)); }); + DO_FIELD("icon", { char * s = me->strings + me->offsets[1]; size_t l = strlen(s); return OBJECT_VAL(krk_copyString(s,l)); }); + } break; + case YUTANI_MSG_WINDOW_MOVE: { + STRUCT(struct yutani_msg_window_move); + WID(); + DO_FIELD("x", TO_INT(x)); + DO_FIELD("y", TO_INT(y)); + } break; + case YUTANI_MSG_KEY_EVENT: { + STRUCT(struct yutani_msg_key_event); + WID(); + + DO_FIELD("keycode", TO_INT(event.keycode)); + DO_FIELD("modifiers", TO_INT(event.modifiers)); + DO_FIELD("action", TO_INT(event.action)); + DO_FIELD("key", TO_INT(event.key)); + + DO_FIELD("kbd_state", TO_INT(state.kbd_state)); + DO_FIELD("kbd_s_state", TO_INT(state.kbd_s_state)); + DO_FIELD("k_ctrl", TO_INT(state.k_ctrl)); + DO_FIELD("k_shift", TO_INT(state.k_shift)); + DO_FIELD("k_alt", TO_INT(state.k_alt)); + DO_FIELD("k_super", TO_INT(state.k_super)); + DO_FIELD("kl_ctrl", TO_INT(state.kl_ctrl)); + DO_FIELD("kl_shift", TO_INT(state.kl_shift)); + DO_FIELD("kl_alt", TO_INT(state.kl_alt)); + DO_FIELD("kl_super", TO_INT(state.kl_super)); + DO_FIELD("kr_ctrl", TO_INT(state.kr_ctrl)); + DO_FIELD("kr_shift", TO_INT(state.kr_shift)); + DO_FIELD("kr_alt", TO_INT(state.kr_alt)); + DO_FIELD("kr_super", TO_INT(state.kr_super)); + DO_FIELD("kbd_esc_buf", TO_INT(state.kbd_esc_buf)); + } break; + } + + krk_runtimeError(vm.exceptions.attributeError, "no attribute '%s'", AS_CSTRING(argv[1])); + return NONE_VAL(); +} +#undef DO_FIELD +#undef TO_INT_ +#undef GET +#undef TO_INT +#undef WID + +static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { + fprintf(stderr, "Creating connection.\n"); + if (yctxInstance) { + krk_runtimeError(vm.exceptions.valueError, "class 'Yutani' is a singleton and has already been initialized."); + return NONE_VAL(); + } + + KrkInstance * self = AS_INSTANCE(argv[0]); + + /* Connect and let's go. */ + yutani_t * yctx = yutani_init(); + if (!yctx) { + fprintf(stderr, "Connection failed?\n"); + krk_runtimeError(vm.exceptions.ioError, "Failed to connect to compositor."); + return NONE_VAL(); + } + fprintf(stderr, "Attaching field...\n"); + self->_internal = yctx; + yctxInstance = self; + krk_attachNamedObject(&module->fields, "_yutani_t", (KrkObj*)self); + + return argv[0]; +} + +static KrkValue _yutani_display_width(int argc, KrkValue argv[]) { + KrkInstance * self = AS_INSTANCE(argv[0]); + yutani_t * ctx = self->_internal; + return INTEGER_VAL(ctx->display_width); +} + +static KrkValue _yutani_display_height(int argc, KrkValue argv[]) { + KrkInstance * self = AS_INSTANCE(argv[0]); + yutani_t * ctx = self->_internal; + return INTEGER_VAL(ctx->display_height); +} + +static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { + KrkInstance * self = AS_INSTANCE(argv[0]); + + int sync = (argc > 1 && IS_BOOLEAN(argv[1])) ? AS_BOOLEAN(argv[1]) : 1; + yutani_msg_t * result; + if (sync) { + result = yutani_poll((yutani_t*)self->_internal); + } else { + result = yutani_poll_async((yutani_t *)self->_internal); + } + + if (!result) return NONE_VAL(); + + KrkInstance * out = krk_newInstance(Message); + krk_push(OBJECT_VAL(out)); + out->_internal = result; + + return krk_pop(); +} + +static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { + if (argc != 2) { krk_runtimeError(vm.exceptions.argumentError, "Expected two arguments"); return NONE_VAL(); } + KrkInstance * self = AS_INSTANCE(argv[0]); + yutani_msg_t * result = yutani_wait_for((yutani_t*)self->_internal, AS_INTEGER(argv[1])); + KrkInstance * out = krk_newInstance(Message); + krk_push(OBJECT_VAL(out)); + out->_internal = result; + + return krk_pop(); +} + +KrkValue krk_module_onload__yutani(void) { + fprintf(stderr, "Loading...\n"); + module = krk_newInstance(vm.moduleClass); + /* Store it on the stack for now so we can do stuff that may trip GC + * and not lose it to garbage colletion... */ + krk_push(OBJECT_VAL(module)); + + /** + * class Message(object): + * MSG_... = ... # Directly from the library headers. + */ + Message = krk_createClass(module, "Message", NULL); + /* All the MSG_ constants */ +#define TYPE(type) krk_attachNamedValue(&Message->fields, "MSG_" #type, INTEGER_VAL(YUTANI_MSG_ ## type)) + TYPE(HELLO); TYPE(WINDOW_NEW); TYPE(FLIP); TYPE(KEY_EVENT); TYPE(MOUSE_EVENT); + TYPE(WINDOW_MOVE); TYPE(WINDOW_CLOSE); TYPE(WINDOW_SHOW); TYPE(WINDOW_HIDE); + TYPE(WINDOW_STACK); TYPE(WINDOW_FOCUS_CHANGE); TYPE(WINDOW_MOUSE_EVENT); + TYPE(FLIP_REGION); TYPE(WINDOW_NEW_FLAGS); TYPE(RESIZE_REQUEST); + TYPE(RESIZE_OFFER); TYPE(RESIZE_ACCEPT); TYPE(RESIZE_BUFID); TYPE(RESIZE_DONE); + TYPE(WINDOW_ADVERTISE); TYPE(SUBSCRIBE); TYPE(UNSUBSCRIBE); TYPE(NOTIFY); + TYPE(QUERY_WINDOWS); TYPE(WINDOW_FOCUS); TYPE(WINDOW_DRAG_START); TYPE(WINDOW_WARP_MOUSE); + TYPE(WINDOW_SHOW_MOUSE); TYPE(WINDOW_RESIZE_START); TYPE(SESSION_END); + TYPE(KEY_BIND); TYPE(WINDOW_UPDATE_SHAPE); TYPE(CLIPBOARD); TYPE(GOODBYE); + TYPE(SPECIAL_REQUEST); TYPE(WELCOME); TYPE(WINDOW_INIT); +#undef TYPE + /* Structure bindings */ + krk_defineNative(&Message->methods, ".__getattr__", _message_getattr); + krk_finalizeClass(Message); + + /** + * class Yutani(object): + * _internal = yutani_t * + * display_width = _internal->display_width + * display_height = _internal->display_height + * + * def __init__(self): # Call yutani_init(), attach _internal + */ + Yutani = krk_createClass(module, "Yutani", NULL); + krk_defineNative(&Yutani->methods, ":display_width", _yutani_display_width); + krk_defineNative(&Yutani->methods, ":display_height", _yutani_display_height); + krk_defineNative(&Yutani->methods, ".__init__", _yutani_init); + krk_defineNative(&Yutani->methods, ".poll", _yutani_poll); + krk_defineNative(&Yutani->methods, ".wait_for", _yutani_wait_for); + #if 0 + krk_defineNative(&Yutani->methods, ".subscribe", _yutani_subscribe); + krk_defineNative(&Yutani->methods, ".unsubscribe", _yutani_unsubscribe); + krk_defineNative(&Yutani->methods, ".query_windows", _yutani_query_windows); + krk_defineNative(&Yutani->methods, ".focus_window", _yutani_focus_window); + krk_defineNative(&Yutani->methods, ".session_end", _yutani_session_end); + krk_defineNative(&Yutani->methods, ".key_bind", _yutani_key_bind); + krk_defineNative(&Yutani->methods, ".query", _yutani_query); + krk_defineNative(&Yutani->methods, ".fileno", _yutani_fileno); + #endif + krk_finalizeClass(Yutani); + + + /** + * class MsgKeyEvent(Message): + * type = Message.MSG_KEY_EVENT + */ + //KrkClass * MsgKeyEvent = krk_createClass(module, "MsgKeyEvent", Message); + + /* Pop the module object before returning; it'll get pushed again + * by the VM before the GC has a chance to run, so it's safe. */ + assert(AS_INSTANCE(krk_pop()) == module); + return OBJECT_VAL(module); +} + diff --git a/lib/rline.c b/lib/rline.c index ead861b6..76a25411 100644 --- a/lib/rline.c +++ b/lib/rline.c @@ -13,21 +13,39 @@ #include #include #include -#include #include #include #include #include -#include #include +#ifndef _WIN32 +#include #include +#else +#include +/* How do we get this in Windows? Seems WT asks the font? */ +#define wcwidth(c) (1) +#endif +#ifdef __toaru__ #include +#else +#include "rline.h" +#endif + +static __attribute__((used)) int _isdigit(int c) { if (c > 128) return 0; return isdigit(c); } +static __attribute__((used)) int _isxdigit(int c) { if (c > 128) return 0; return isxdigit(c); } + +#undef isdigit +#undef isxdigit +#define isdigit(c) _isdigit(c) +#define isxdigit(c) _isxdigit(c) char * rline_history[RLINE_HISTORY_ENTRIES]; int rline_history_count = 0; int rline_history_offset = 0; int rline_scroll = 0; char * rline_exit_string = "exit\n"; +int rline_terminal_width = 0; void rline_history_insert(char * str) { if (str[strlen(str)-1] == '\n') { @@ -161,7 +179,6 @@ static int loading = 0; static int column = 0; static int offset = 0; static int width = 0; -static int full_width = 0; static int show_right_side = 0; static int show_left_side = 0; static int prompt_width_calc = 0; @@ -211,30 +228,15 @@ int rline_exp_set_tab_complete_func(rline_callback_t func) { return 0; } -static int _unget = -1; -static void _ungetc(int c) { - _unget = c; -} - -static int getch(int immediate, int timeout) { - if (_unget != -1) { - int out = _unget; - _unget = -1; - return out; - } - if (immediate) return fgetc(stdin); - struct pollfd fds[1]; - fds[0].fd = STDIN_FILENO; - fds[0].events = POLLIN; - int ret = poll(fds,1,10); - if (ret > 0 && fds[0].revents & POLLIN) { - unsigned char buf[1]; - int unused = read(STDIN_FILENO, buf, 1); - (void)unused; - return buf[0]; - } else { - return -1; - } +static int getch(int timeout) { +#ifndef _WIN32 + return fgetc(stdin); +#else + TCHAR buf[1]; + DWORD dwRead; + while (!ReadConsole(GetStdHandle(STD_INPUT_HANDLE),buf,1,&dwRead,NULL)); + return buf[0]; +#endif } /** @@ -281,7 +283,7 @@ static int to_eight(uint32_t codepoint, char * out) { * This is copied from bim. Supports a few useful * things like rendering escapes as codepoints. */ -static int codepoint_width(wchar_t codepoint) { +static int codepoint_width(int codepoint) { if (codepoint == '\t') { return 1; /* Recalculate later */ } @@ -496,37 +498,11 @@ int c_keyword_qualifier(int c) { return isalnum(c) || (c == '_'); } -void paint_simple_string(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '"' */ - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '"') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '"') { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_STRING); - } - } -} - -void paint_single_string(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '\'' */ - paint(1, FLAG_NUMERAL); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '\'') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '\'') { - paint(1, FLAG_NUMERAL); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_NUMERAL); - } +void paintNHex(struct syntax_state * state, int n) { + paint(2, FLAG_ESCAPE); + /* Why is my FLAG_ERROR not valid in rline? */ + for (int i = 0; i < n; ++i) { + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); } } @@ -540,7 +516,15 @@ void paint_krk_string(struct syntax_state * state, int type) { paint(1, FLAG_STRING); return; } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); + if (nextchar() == 'x') { + paintNHex(state, 2); + } else if (nextchar() == 'u') { + paintNHex(state, 4); + } else if (nextchar() == 'U') { + paintNHex(state, 8); + } else { + paint(2, FLAG_ESCAPE); + } } else { paint(1, FLAG_STRING); } @@ -548,9 +532,10 @@ void paint_krk_string(struct syntax_state * state, int type) { } char * syn_krk_keywords[] = { - "and","class","def","else","for","if","in","import", + "and","class","def","else","for","if","in","import","del", "let","not","or","return","while","try","except","raise", - "continue","break","as","from","elif","lambda", + "continue","break","as","from","elif","lambda","with","is", + "pass", NULL }; @@ -560,7 +545,7 @@ char * syn_krk_types[] = { "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ "list","dict","range", /* builtin classes */ "object","exception","isinstance","type", - "print", + "print","set","any","all","bool","ord","chr","hex", NULL }; @@ -645,6 +630,7 @@ int syn_krk_calculate(struct syntax_state * state) { return -1; } +#ifdef __toaru__ int esh_variable_qualifier(int c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '_'); } @@ -888,6 +874,23 @@ void paint_py_format_string(struct syntax_state * state, char type) { } } +void paint_simple_string(struct syntax_state * state) { + /* Assumes you came in from a check of charat() == '"' */ + paint(1, FLAG_STRING); + while (charat() != -1) { + if (charat() == '\\' && nextchar() == '"') { + paint(2, FLAG_ESCAPE); + } else if (charat() == '"') { + paint(1, FLAG_STRING); + return; + } else if (charat() == '\\') { + paint(2, FLAG_ESCAPE); + } else { + paint(1, FLAG_STRING); + } + } +} + int syn_py_calculate(struct syntax_state * state) { switch (state->state) { case -1: @@ -949,6 +952,32 @@ int syn_py_calculate(struct syntax_state * state) { return -1; } +void * rline_exp_for_python(void * _stdin, void * _stdout, char * prompt) { + + rline_exp_set_prompts(prompt, "", strlen(prompt), 0); + + char * buf = malloc(1024); + memset(buf, 0, 1024); + + rline_exp_set_syntax("python"); + rline_exit_string = ""; + rline(buf, 1024); + rline_history_insert(strdup(buf)); + rline_scroll = 0; + + return buf; +} +#endif + +void rline_redraw(rline_context_t * context) { + if (context->quiet) return; + printf("\033[u%s\033[K", context->buffer); + for (int i = context->offset; i < context->collected; ++i) { + printf("\033[D"); + } + fflush(stdout); +} + /** * Convert syntax hilighting flag to color code @@ -988,11 +1017,14 @@ static const char * flag_to_color(int _flag) { struct syntax_definition { char * name; int (*calculate)(struct syntax_state *); + int tabIndents; } syntaxes[] = { - {"esh",syn_esh_calculate}, - {"python",syn_py_calculate}, - {"krk",syn_krk_calculate}, - {NULL, NULL}, + {"krk",syn_krk_calculate, 1}, +#ifdef __toaru__ + {"python",syn_py_calculate, 1}, + {"esh",syn_esh_calculate, 0}, +#endif + {NULL, NULL, 0}, }; static struct syntax_definition * syntax; @@ -1321,15 +1353,18 @@ static void render_line(void) { set_colors(COLOR_FG, COLOR_BG); - /* Fill to end right hand side */ - for (; j < width + offset - prompt_width_calc; ++j) { - printf(" "); - } + if (show_right_side && prompt_right_width) { + /* Fill to end right hand side */ + for (; j < width + offset - prompt_width_calc; ++j) { + printf(" "); + } - /* Print right hand side */ - if (show_right_side) { + /* Print right hand side */ printf("\033[0m%s", prompt_right); + } else { + printf("\033[0K"); } + fflush(stdout); } /** @@ -1380,31 +1415,37 @@ static line_t * line_insert(line_t * line, char_t c, int offset) { * We don't listen for sigwinch for various reasons... */ static void get_size(void) { +#ifndef _WIN32 struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - full_width = w.ws_col; - if (full_width - prompt_right_width - prompt_width > MINIMUM_SIZE) { + rline_terminal_width = w.ws_col; +#else + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); + rline_terminal_width = csbi.srWindow.Right - csbi.srWindow.Left + 1; +#endif + if (rline_terminal_width - prompt_right_width - prompt_width > MINIMUM_SIZE) { show_right_side = 1; show_left_side = 1; prompt_width_calc = prompt_width; - width = full_width - prompt_right_width; + width = rline_terminal_width - prompt_right_width; } else { show_right_side = 0; - if (full_width - prompt_width > MINIMUM_SIZE) { + if (rline_terminal_width - prompt_width > MINIMUM_SIZE) { show_left_side = 1; prompt_width_calc = prompt_width; } else { show_left_side = 0; prompt_width_calc = 1; } - width = full_width; + width = rline_terminal_width; } } /** * Place the cursor within the line */ -static void place_cursor_actual(void) { +void rline_place_cursor(void) { int x = prompt_width_calc + 1 - offset; for (int i = 0; i < column; ++i) { char_t * c = &the_line->text[i]; @@ -1431,10 +1472,6 @@ static void place_cursor_actual(void) { fflush(stdout); } -void rline_place_cursor(void) { - place_cursor_actual(); -} - /** * Delete a character */ @@ -1516,7 +1553,7 @@ static void insert_char(uint32_t c) { */ static void cursor_left(void) { if (column > 0) column--; - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1524,7 +1561,7 @@ static void cursor_left(void) { */ static void cursor_right(void) { if (column < the_line->actual) column++; - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1540,7 +1577,7 @@ static void word_left(void) { if (the_line->text[column-1].codepoint == ' ') break; column--; } - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1552,9 +1589,9 @@ static void word_right(void) { } while (column < the_line->actual) { column++; - if (the_line->text[column].codepoint == ' ') break; + if (column < the_line->actual && the_line->text[column].codepoint == ' ') break; } - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1562,7 +1599,7 @@ static void word_right(void) { */ static void cursor_home(void) { column = 0; - place_cursor_actual(); + rline_place_cursor(); } /* @@ -1570,7 +1607,7 @@ static void cursor_home(void) { */ static void cursor_end(void) { column = the_line->actual; - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1614,7 +1651,7 @@ static void history_previous(void) { recalculate_tabs(the_line); recalculate_syntax(the_line); render_line(); - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1658,7 +1695,7 @@ static void history_next(void) { recalculate_tabs(the_line); recalculate_syntax(the_line); render_line(); - place_cursor_actual(); + rline_place_cursor(); } /** @@ -1666,13 +1703,8 @@ static void history_next(void) { */ static int handle_escape(int * this_buf, int * timeout, int c) { if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c == '\033') { - this_buf[*timeout] = c; - (*timeout)++; - return 1; - } - if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c != '[') { - *timeout = 0; - _ungetc(c); + this_buf[0]= c; + *timeout = 1; return 1; } if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c == '[') { @@ -1743,6 +1775,7 @@ static int handle_escape(int * this_buf, int * timeout, int c) { return 0; } +#ifndef _WIN32 static unsigned int _INTR, _EOF; static struct termios old; static void get_initial_termios(void) { @@ -1750,7 +1783,6 @@ static void get_initial_termios(void) { _INTR = old.c_cc[VINTR]; _EOF = old.c_cc[VEOF]; } - static void set_unbuffered(void) { struct termios new = old; new.c_lflag &= (~ICANON & ~ECHO & ~ISIG); @@ -1760,29 +1792,18 @@ static void set_unbuffered(void) { static void set_buffered(void) { tcsetattr(STDOUT_FILENO, TCSAFLUSH, &old); } - -void rline_redraw(rline_context_t * context) { - if (context->quiet) return; - printf("\033[u%s\033[K", context->buffer); - for (int i = context->offset; i < context->collected; ++i) { - printf("\033[D"); - } - fflush(stdout); +#else +static unsigned int _INTR = 3; +static unsigned int _EOF = 4; +static void get_initial_termios(void) { } - -void rline_insert(rline_context_t * context, const char * what) { - size_t insertion_length = strlen(what); - - if (context->collected + (int)insertion_length > context->requested) { - insertion_length = context->requested - context->collected; - } - - /* Move */ - memmove(&context->buffer[context->offset + insertion_length], &context->buffer[context->offset], context->collected - context->offset); - memcpy(&context->buffer[context->offset], what, insertion_length); - context->collected += insertion_length; - context->offset += insertion_length; +static void set_unbuffered(void) { + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); +} +static void set_buffered(void) { + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT); } +#endif static int tabbed; @@ -1877,7 +1898,7 @@ static void call_rline_func(rline_callback_t func, rline_context_t * context) { recalculate_tabs(the_line); recalculate_syntax(the_line); render_line(); - place_cursor_actual(); + rline_place_cursor(); } char * rline_preload = NULL; @@ -1896,13 +1917,15 @@ static int read_line(void) { int timeout = 0; int this_buf[20]; uint32_t istate = 0; - int immediate = 1; + #ifndef _WIN32 + /* Let's disable this under Windows... */ set_colors(COLOR_ALT_FG, COLOR_ALT_BG); fprintf(stdout, "◄\033[0m"); /* TODO: This could be retrieved from an envvar */ - for (int i = 0; i < full_width - 1; ++i) { + for (int i = 0; i < rline_terminal_width - 1; ++i) { fprintf(stdout, " "); } + #endif if (rline_preload) { char * c = rline_preload; @@ -1915,9 +1938,9 @@ static int read_line(void) { } render_line(); - place_cursor_actual(); + rline_place_cursor(); - while ((cin = getch(immediate,timeout))) { + while ((cin = getch(timeout))) { if (cin == -1) continue; get_size(); if (!decode(&istate, &c, cin)) { @@ -1931,7 +1954,6 @@ static int read_line(void) { the_line->actual = 0; column = 0; insert_char('\n'); - immediate = 0; raise(SIGINT); return 1; } @@ -1941,7 +1963,7 @@ static int read_line(void) { insert_char(*_c); } render_line(); - place_cursor_actual(); + rline_place_cursor(); if (!*rline_exit_string) { set_colors(COLOR_ALT_FG, COLOR_ALT_BG); printf("^D\033[0m"); @@ -1951,7 +1973,6 @@ static int read_line(void) { if (column < the_line->actual) { line_delete(the_line, column+1); if (offset > 0) offset--; - immediate = 0; } continue; } @@ -1966,72 +1987,64 @@ static int read_line(void) { case DELETE_KEY: case BACKSPACE_KEY: delete_at_cursor(); - immediate = 0; break; + case 13: case ENTER_KEY: /* Finished */ loading = 1; column = the_line->actual; render_line(); insert_char('\n'); - immediate = 0; return 1; case 22: /* ^V */ /* Don't bother with unicode, just take the next byte */ - place_cursor_actual(); + rline_place_cursor(); printf("^\b"); insert_char(getc(stdin)); - immediate = 0; break; case 23: /* ^W */ delete_word(); - immediate = 0; break; case 12: /* ^L - Repaint the whole screen */ printf("\033[2J\033[H"); render_line(); - place_cursor_actual(); + rline_place_cursor(); break; case 11: /* ^K - Clear to end */ the_line->actual = column; - immediate = 0; break; case 21: /* ^U - Kill to beginning */ while (column) { delete_at_cursor(); } - immediate = 0; break; case '\t': - if (tab_complete_func) { - /* Tab complete */ - rline_context_t context = {0}; - call_rline_func(tab_complete_func, &context); - immediate = 0; - } else if (column == 0 || the_line->text[column-1].codepoint == ' ') { + if ((syntax && syntax->tabIndents) && (column == 0 || the_line->text[column-1].codepoint == ' ')) { /* Insert tab character */ insert_char(' '); insert_char(' '); insert_char(' '); insert_char(' '); - immediate = 0; + } else if (tab_complete_func) { + /* Tab complete */ + rline_context_t context = {0}; + call_rline_func(tab_complete_func, &context); + continue; } break; default: insert_char(c); - immediate = 0; break; } } else { if (handle_escape(this_buf,&timeout,c)) { render_line(); - place_cursor_actual(); + rline_place_cursor(); continue; } - immediate = 0; } render_line(); - place_cursor_actual(); + rline_place_cursor(); } else if (istate == UTF8_REJECT) { istate = 0; } @@ -2077,18 +2090,16 @@ int rline(char * buffer, int buf_size) { return strlen(buffer); } -void * rline_exp_for_python(void * _stdin, void * _stdout, char * prompt) { - - rline_exp_set_prompts(prompt, "", strlen(prompt), 0); - - char * buf = malloc(1024); - memset(buf, 0, 1024); +void rline_insert(rline_context_t * context, const char * what) { + size_t insertion_length = strlen(what); - rline_exp_set_syntax("python"); - rline_exit_string = ""; - rline(buf, 1024); - rline_history_insert(strdup(buf)); - rline_scroll = 0; + if (context->collected + (int)insertion_length > context->requested) { + insertion_length = context->requested - context->collected; + } - return buf; + /* Move */ + memmove(&context->buffer[context->offset + insertion_length], &context->buffer[context->offset], context->collected - context->offset); + memcpy(&context->buffer[context->offset], what, insertion_length); + context->collected += insertion_length; + context->offset += insertion_length; } diff --git a/util/auto-dep.py b/util/auto-dep.py index e6000c8f..71588e0e 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -36,7 +36,7 @@ class Classifier(object): '': (None, '-ltoaru_textregion', ['', '','', '']), '': (None, '-ltoaru_button', ['','', '']), # Kuroko - '': ('../../../kuroko', '-lkuroko', []), + '': ('../../../kuroko/src', '-lkuroko', []), # OPTIONAL third-party libraries, for extensions / ports '': ('freetype2', '-lfreetype', []), '': ('pixman-1', '-lpixman-1', []), @@ -177,9 +177,9 @@ def toheader(name): includes=" ".join([x for x in c.includes if x is not None]) )) elif command == "--makekurokomod": - libname = os.path.basename(filename).replace(".c","") + libname = os.path.basename(filename).replace(".c","").replace("module_","") _libs = [x for x in c.libs if not x.startswith('-ltoaru_') or x.replace("-ltoaru_","") != libname] - print("base/usr/local/lib/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) {includes} -shared -fPIC -o $@ $< {libraries}".format( + print("base/usr/local/lib/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) -DDEBUG {includes} -shared -fPIC -o $@ $< {libraries}".format( lib=libname, source=filename, headers=" ".join([toheader(x) for x in c.libs]), From a53757a3078a3527bdab4e56a0b053890e2a2877 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 23 Jan 2021 09:26:04 +0900 Subject: [PATCH 063/102] kuroko: More upstreams updates --- apps/kuroko.c | 63 +++++++++++++++++++++++++++++++++----------- kuroko | 2 +- lib/kuroko/_yutani.c | 49 +++++++++++++++++++++------------- 3 files changed, 79 insertions(+), 35 deletions(-) diff --git a/apps/kuroko.c b/apps/kuroko.c index ccf4f7a3..9745200b 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -4,6 +4,7 @@ * Reads lines from stdin with the `rline` library and executes them, * or executes scripts from the argument list. */ +#define _DEFAULT_SOURCE #include #include #include @@ -155,10 +156,9 @@ static void tab_complete_func(rline_context_t * c) { fprintf(stderr,"\nInternal error while tab completting.\n"); goto _cleanup; } - KrkValue _list_internal = OBJECT_VAL(AS_INSTANCE(dirList)->_internal); - for (size_t i = 0; i < AS_LIST(_list_internal)->count; ++i) { - KrkString * s = AS_STRING(AS_LIST(_list_internal)->values[i]); + for (size_t i = 0; i < AS_LIST(dirList)->count; ++i) { + KrkString * s = AS_STRING(AS_LIST(dirList)->values[i]); KrkToken asToken = {.start = s->chars, .literalWidth = s->length}; KrkValue thisValue = findFromProperty(root, asToken); if (IS_CLOSURE(thisValue) || IS_BOUND_METHOD(thisValue) || @@ -276,15 +276,51 @@ static void handleSigint(int sigNum) { signal(sigNum, handleSigint); } +static void findInterpreter(char * argv[]) { +#ifdef _WIN32 + vm.binpath = strdup(_pgmptr); +#else + /* Try asking /proc */ + char * binpath = realpath("/proc/self/exe", NULL); + if (!binpath) { + if (strchr(argv[0], '/')) { + binpath = realpath(argv[0], NULL); + } else { + /* Search PATH for argv[0] */ + char * _path = strdup(getenv("PATH")); + char * path = _path; + while (path) { + char * next = strchr(path,':'); + if (next) *next++ = '\0'; + + char tmp[4096]; + sprintf(tmp, "%s/%s", path, argv[0]); + if (access(tmp, X_OK)) { + binpath = strdup(tmp); + break; + } + path = next; + } + free(_path); + } + } + if (binpath) { + vm.binpath = binpath; + } /* Else, give up at this point and just don't attach it at all. */ +#endif +} + /* Runs the interpreter to get the version information. */ -static int version(void) { +static int version(char * argv[]) { + findInterpreter(argv); krk_initVM(0); krk_interpret("import kuroko\nprint('Kuroko',kuroko.version)\n", 1, "",""); krk_freeVM(); return 0; } -static int modulePaths(void) { +static int modulePaths(char * argv[]) { + findInterpreter(argv); krk_initVM(0); krk_interpret("import kuroko\nprint(kuroko.module_paths)\n", 1, "",""); krk_freeVM(); @@ -331,12 +367,12 @@ int main(int argc, char * argv[]) { enableRline = 0; break; case 'M': - return modulePaths(); + return modulePaths(argv); case 'V': - return version(); + return version(argv); case '-': if (!strcmp(optarg,"version")) { - return version(); + return version(argv); } else if (!strcmp(optarg,"help")) { fprintf(stderr,"usage: %s [flags] [FILE...]\n" "\n" @@ -364,6 +400,7 @@ int main(int argc, char * argv[]) { } _finishArgs: + findInterpreter(argv); krk_initVM(flags); /* Attach kuroko.argv - argv[0] will be set to an empty string for the repl */ @@ -399,7 +436,7 @@ int main(int argc, char * argv[]) { KrkValue module; krk_push(OBJECT_VAL(krk_copyString("__main__",8))); int out = !krk_loadModule( - AS_STRING(AS_LIST(OBJECT_VAL(AS_INSTANCE(argList)->_internal))->values[0]), + AS_STRING(AS_LIST(argList)->values[0]), &module, AS_STRING(krk_peek(0))); if (vm.flags & KRK_HAS_EXCEPTION) { @@ -616,13 +653,7 @@ int main(int argc, char * argv[]) { (void)blockWidth; } } else { - /* Expect the rest of the arguments to be scripts to run; - * collect the result of the last one and use it as the - * exit code if it's an integer. */ - for (int i = optind; i < argc; ++i) { - KrkValue out = krk_runfile(argv[i],1,"__main__",argv[i]); - if (i + 1 == argc) result = out; - } + result = krk_runfile(argv[optind],1,"__main__",argv[optind]); } krk_freeVM(); diff --git a/kuroko b/kuroko index a69ee8ef..3e906150 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit a69ee8efcaaa685d99c9093e8223a5e2e0c25de3 +Subproject commit 3e9061502108a80c4873a4d8dcff5e97ef55e538 diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index ed7035e8..d24d09f6 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -14,6 +14,16 @@ static KrkInstance * yctxInstance = NULL; #define S(c) (krk_copyString(c,sizeof(c)-1)) +struct MessageClass { + KrkInstance inst; + yutani_msg_t * msg; +}; + +struct YutaniClass { + KrkInstance inst; + yutani_t * yctx; +}; + /** * Convenience wrapper to make a class and attach it to the module, while * handling stack push/pop to keep things from being prematurely GC'd. @@ -22,13 +32,9 @@ KrkClass * krk_createClass(KrkInstance * inModule, const char * name, KrkClass * if (!base) base = vm.objectClass; KrkString * str_Name = krk_copyString(name, strlen(name)); krk_push(OBJECT_VAL(str_Name)); - KrkClass * obj_Class = krk_newClass(str_Name); + KrkClass * obj_Class = krk_newClass(str_Name, base); krk_push(OBJECT_VAL(obj_Class)); - krk_attachNamedObject(&inModule->fields, name, (KrkObj *)obj_Class); - - krk_tableAddAll(&base->methods, &obj_Class->methods); - krk_tableAddAll(&base->fields, &obj_Class->fields); krk_pop(); /* obj_Class */ krk_pop(); /* str_Name */ @@ -47,11 +53,15 @@ KrkClass * krk_createClass(KrkInstance * inModule, const char * name, KrkClass * #define WID() DO_FIELD("wid", TO_INT(wid)) #define STRUCT(type) type * me = (void*)msg->data +static void _message_sweep(KrkInstance * self) { + free(((struct MessageClass*)self)->msg); +} + static KrkValue _message_getattr(int argc, KrkValue argv[]) { assert(argc == 2); KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_msg_t * msg = self->_internal; + yutani_msg_t * msg = ((struct MessageClass*)self)->msg; if (!msg) return NONE_VAL(); DO_FIELD("magic", TO_INT_(magic)); @@ -154,7 +164,7 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { return NONE_VAL(); } fprintf(stderr, "Attaching field...\n"); - self->_internal = yctx; + ((struct YutaniClass*)self)->yctx = yctx; yctxInstance = self; krk_attachNamedObject(&module->fields, "_yutani_t", (KrkObj*)self); @@ -163,13 +173,13 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { static KrkValue _yutani_display_width(int argc, KrkValue argv[]) { KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_t * ctx = self->_internal; + yutani_t * ctx = ((struct YutaniClass*)self)->yctx; return INTEGER_VAL(ctx->display_width); } static KrkValue _yutani_display_height(int argc, KrkValue argv[]) { KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_t * ctx = self->_internal; + yutani_t * ctx = ((struct YutaniClass*)self)->yctx; return INTEGER_VAL(ctx->display_height); } @@ -179,16 +189,16 @@ static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { int sync = (argc > 1 && IS_BOOLEAN(argv[1])) ? AS_BOOLEAN(argv[1]) : 1; yutani_msg_t * result; if (sync) { - result = yutani_poll((yutani_t*)self->_internal); + result = yutani_poll(((struct YutaniClass*)self)->yctx); } else { - result = yutani_poll_async((yutani_t *)self->_internal); + result = yutani_poll_async(((struct YutaniClass*)self)->yctx); } if (!result) return NONE_VAL(); KrkInstance * out = krk_newInstance(Message); krk_push(OBJECT_VAL(out)); - out->_internal = result; + ((struct MessageClass*)out)->msg = result; return krk_pop(); } @@ -196,10 +206,10 @@ static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { if (argc != 2) { krk_runtimeError(vm.exceptions.argumentError, "Expected two arguments"); return NONE_VAL(); } KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_msg_t * result = yutani_wait_for((yutani_t*)self->_internal, AS_INTEGER(argv[1])); + yutani_msg_t * result = yutani_wait_for(((struct YutaniClass*)self)->yctx, AS_INTEGER(argv[1])); KrkInstance * out = krk_newInstance(Message); krk_push(OBJECT_VAL(out)); - out->_internal = result; + ((struct MessageClass*)out)->msg = result; return krk_pop(); } @@ -216,6 +226,8 @@ KrkValue krk_module_onload__yutani(void) { * MSG_... = ... # Directly from the library headers. */ Message = krk_createClass(module, "Message", NULL); + Message->allocSize = sizeof(struct MessageClass); + Message->_ongcsweep = _message_sweep; /* All the MSG_ constants */ #define TYPE(type) krk_attachNamedValue(&Message->fields, "MSG_" #type, INTEGER_VAL(YUTANI_MSG_ ## type)) TYPE(HELLO); TYPE(WINDOW_NEW); TYPE(FLIP); TYPE(KEY_EVENT); TYPE(MOUSE_EVENT); @@ -235,13 +247,14 @@ KrkValue krk_module_onload__yutani(void) { /** * class Yutani(object): - * _internal = yutani_t * - * display_width = _internal->display_width - * display_height = _internal->display_height + * yctx = yutani_t * + * display_width = yctx->display_width + * display_height = yctx->display_height * - * def __init__(self): # Call yutani_init(), attach _internal + * def __init__(self): # Call yutani_init() */ Yutani = krk_createClass(module, "Yutani", NULL); + Yutani->allocSize = sizeof(struct YutaniClass); krk_defineNative(&Yutani->methods, ":display_width", _yutani_display_width); krk_defineNative(&Yutani->methods, ":display_height", _yutani_display_height); krk_defineNative(&Yutani->methods, ".__init__", _yutani_init); From 325bf0fddfd5d31253c6c7ee6dfcdb18794c7ffb Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 23 Jan 2021 15:20:23 +0900 Subject: [PATCH 064/102] libc: fix truncated printf output for ints, floats --- libc/stdio/printf.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 111362c9..915524e1 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -238,7 +238,6 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { break; case 'i': case 'd': /* Decimal number */ - i = b - buf; { long long val; if (big == 2) { @@ -248,15 +247,14 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { } if (val < 0) { *b++ = '-'; - buf++; val = -val; } else if (always_sign) { *b++ = '+'; - buf++; } + i = b - buf; print_dec(val, arg_width, buf, &i, fill_zero, align, precision); + b = buf + i; } - b = buf + i; break; case 'u': /* Unsigned ecimal number */ i = b - buf; @@ -275,17 +273,15 @@ int xvasprintf(char * buf, const char * fmt, va_list args) { case 'f': { double val = (double)va_arg(args, double); - i = b - buf; if (val < 0) { *b++ = '-'; - buf++; val = -val; } + i = b - buf; print_dec((long)val, arg_width, buf, &i, fill_zero, align, 1); b = buf + i; - i = b - buf; *b++ = '.'; - buf++; + i = b - buf; for (int j = 0; j < ((precision > -1 && precision < 8) ? precision : 8); ++j) { if ((int)(val * 100000.0) % 100000 == 0 && j != 0) break; val *= 10.0; From 946c45312c4374ed2c87c324ac00743b9cc1f807 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 23 Jan 2021 15:31:26 +0900 Subject: [PATCH 065/102] bim: pull in updates --- apps/bim.c | 468 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 451 insertions(+), 17 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index 1569cc75..763fdc01 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,9 +1,9 @@ /** * This is a baked, single-file version of bim. - * It was built Mon Dec 21 10:05:55 2020 - * It is based on git commit 2f178bfc82de3207eefbc7b7c490ccac46cb07dc + * It was built Sat Jan 23 15:24:02 2021 + * It is based on git commit b434cb81295d16f62ee8519079f59beaca50f3f3 */ -#define GIT_TAG "2f178bf-baked" +#define GIT_TAG "b434cb8-baked" /* Bim - A Text Editor * * Copyright (C) 2012-2020 K. Lange @@ -236,6 +236,7 @@ typedef struct { #define OVERLAY_MODE_COMMAND 2 #define OVERLAY_MODE_SEARCH 3 #define OVERLAY_MODE_COMPLETE 4 +#define OVERLAY_MODE_FILESEARCH 5 #define HISTORY_SENTINEL 0 #define HISTORY_INSERT 1 @@ -1523,6 +1524,7 @@ void recalculate_syntax(line_t * line, int line_no) { /* Start from the line's stored in initial state */ struct syntax_state state; + state.env = env; state.line = line; state.line_no = line_no; state.state = line->istate; @@ -1717,6 +1719,8 @@ void line_delete(line_t * line, int offset, int lineno) { /* Can't delete character before start of line. */ if (offset == 0) return; + /* Can't delete past end of line either */ + if (offset > line->actual) return; if (!env->loading && global_config.history_enabled && lineno != -1) { history_t * e = malloc(sizeof(history_t)); @@ -2731,6 +2735,20 @@ void redraw_tabbar(void) { set_underline(); } + if (global_config.overlay_mode == OVERLAY_MODE_FILESEARCH) { + if (global_config.command_buffer->actual) { + char * f = _env->file_name ? file_basename(_env->file_name) : ""; + /* TODO: Support unicode input here; needs conversion */ + int i = 0; + for (; i < global_config.command_buffer->actual && + f[i] == global_config.command_buffer->text[i].codepoint; ++i); + if (global_config.command_buffer->actual == i) { + set_colors(COLOR_SEARCH_FG, COLOR_SEARCH_BG); + } + } + } + + char title[64]; int size = 0; int filled = draw_tab_name(_env, title, global_config.term_width - offset, &size); @@ -3282,7 +3300,7 @@ void redraw_alt_buffer(buffer_t * buf) { * Basically wcswidth() but implemented internally using our * own utf-8 decoder to ensure it works properly. */ -int display_width_of_string(char * str) { +int display_width_of_string(const char * str) { uint8_t * s = (uint8_t *)str; int out = 0; @@ -3574,7 +3592,9 @@ BIM_ACTION(redraw_all, 0, } redraw_statusbar(); redraw_commandline(); - if (global_config.overlay_mode == OVERLAY_MODE_COMMAND || global_config.overlay_mode == OVERLAY_MODE_SEARCH) { + if (global_config.overlay_mode == OVERLAY_MODE_COMMAND || + global_config.overlay_mode == OVERLAY_MODE_SEARCH || + global_config.overlay_mode == OVERLAY_MODE_FILESEARCH) { render_command_input_buffer(); } } @@ -4364,7 +4384,31 @@ void open_file(char * file) { env->tabs = env->syntax->prefers_spaces; } - /* TODO figure out tabstop for spaces? */ + if (spaces) { + int one = 0, two = 0, three = 0, four = 0; /* If you use more than that, I don't like you. */ + for (int i = 0; i < env->line_count; ++i) { + if (env->lines[i]->actual > 1 && !line_is_comment(env->lines[i])) { + /* Count spaces at beginning */ + int c = 0; + while (c < env->lines[i]->actual && env->lines[i]->text[c].codepoint == ' ') c++; + if (c) { + one += 1; + two += ((c % 2) == 0); + three += ((c % 3) == 0); + four += ((c % 4) == 0); + } + } + } + if (four && (four > three) && (four >= two)) { + env->tabstop = 4; + } else if (three && (three > two) && (three >= one)) { + env->tabstop = 3; + } else if (two && (two > (one / 2))) { + env->tabstop = 2; + } else { + env->tabstop = 1; + } + } env->loading = 0; @@ -5751,6 +5795,57 @@ BIM_COMMAND(tabn,"tabn","Next tab") { return 0; } +BIM_COMMAND(tabm,"tabm","Move the current tab to a new index") { + /* Figure out the current index */ + int i = 0; + for (; i < buffers_len; i++) { + if (buffers[i] == env) break; + } + + if (i == buffers_len) { + render_status_message("(invalid state?)"); + return 1; + } + + if (argc < 2) { + render_status_message("tab = %d", i); + return 1; + } + + int newIndex = atoi(argv[1]); + + if (newIndex == i) { + return 0; + } + + /* Okay, this is stupid, but, remove the buffer */ + memmove(&buffers[i], &buffers[i+1], sizeof(*buffers) * (buffers_len - i -1)); + /* Then make space at the destination */ + memmove(&buffers[newIndex+1], &buffers[newIndex], sizeof(*buffers) * (buffers_len - newIndex -1)); + + buffers[newIndex] = env; + + redraw_tabbar(); + update_title(); + return 0; +} + +BIM_COMMAND(tab,"tab", "Open a specific tab") { + if (argc < 2) return bim_command_tabm("tabm", argc, argv); + int i = atoi(argv[1]); + + if (i < 0 || i > buffers_len) { + render_error("Invalid tab index"); + return 1; + } + + env = buffers[i]; + if (left_buffer && (left_buffer != env && right_buffer != env)) unsplit(); + redraw_all(); + update_title(); + return 0; +} + BIM_COMMAND(tabindicator,"tabindicator","Set the tab indicator") { if (argc < 2) { render_status_message("tabindicator=%s", global_config.tab_indicator); @@ -6726,6 +6821,8 @@ void render_command_input_buffer(void) { set_colors(COLOR_FG, COLOR_BG); if (global_config.overlay_mode == OVERLAY_MODE_SEARCH) { printf(global_config.search_direction == 0 ? "?" : "/"); + } else if (global_config.overlay_mode == OVERLAY_MODE_FILESEARCH) { + printf("_"); } else { printf(":"); } @@ -7114,6 +7211,66 @@ void draw_search_match(uint32_t * buffer, int redraw_buffer) { } } +BIM_ACTION(start_file_search, 0, "Search for open files and switch tabs quickly.")(void) { + global_config.overlay_mode = OVERLAY_MODE_FILESEARCH; + + global_config.command_offset = 0; + global_config.command_col_no = 1; + + if (global_config.command_buffer) { + free(global_config.command_buffer); + } + + global_config.command_buffer = calloc(sizeof(line_t)+sizeof(char_t)*32,1); + global_config.command_buffer->available = 32; + + global_config.command_syn_back = env->syntax; + global_config.command_syn = NULL; /* uh, dunno for now */ + + render_command_input_buffer(); +} + +BIM_ACTION(file_search_accept, 0, "Open the requested tab")(void) { + if (!global_config.command_buffer->actual) { + goto _finish; + } + + /* See if the command buffer matches any open buffers */ + buffer_t * match = NULL; + for (int i = global_config.tab_offset; i < buffers_len; i++) { + buffer_t * _env = buffers[i]; + + if (global_config.overlay_mode == OVERLAY_MODE_FILESEARCH) { + if (global_config.command_buffer->actual) { + char * f = _env->file_name ? file_basename(_env->file_name) : ""; + /* TODO: Support unicode input here; needs conversion */ + int i = 0; + for (; i < global_config.command_buffer->actual && + f[i] == global_config.command_buffer->text[i].codepoint; ++i); + if (global_config.command_buffer->actual == i) { + match = _env; + break; + } + } + } + } + + if (match) { + env = match; + if (left_buffer && (left_buffer != env && right_buffer != env)) unsplit(); + } + +_finish: + /* Free the original editing buffer */ + free(global_config.command_buffer); + global_config.command_buffer = NULL; + + /* Leave command mode */ + global_config.overlay_mode = OVERLAY_MODE_NONE; + + redraw_all(); +} + BIM_ACTION(enter_search, ARG_IS_CUSTOM, "Enter search mode." )(int direction) { @@ -7527,6 +7684,15 @@ BIM_ACTION(handle_mouse, 0, handle_common_mouse(buttons, x, y); } +BIM_ACTION(eat_mouse_sgr, 0, + "Receive, but do not process, mouse actions." +)(void) { + do { + int _c = bim_getch(); + if (_c == -1 || _c == 'm' || _c == 'M') break; + } while (1); +} + BIM_ACTION(handle_mouse_sgr, 0, "Process SGR-style mouse actions." )(void) { @@ -8087,6 +8253,7 @@ BIM_ACTION(insert_line_feed, ACTION_IS_RW, } else { env->lines = split_line(env->lines, env->line_no-1, env->col_no - 1); } + unhighlight_matching_paren(); env->coffset = 0; env->col_no = 1; env->line_no += 1; @@ -8139,6 +8306,14 @@ BIM_ACTION(yank_lines, 0, * Helper to yank part of a line into a new yank line. */ void yank_partial_line(int yank_no, int line_no, int start_off, int count) { + if (start_off + count > env->lines[line_no]->actual) { + if (start_off >= env->lines[line_no]->actual) { + start_off = env->lines[line_no]->actual; + count = 0; + } else { + count = env->lines[line_no]->actual - start_off; + } + } global_config.yanks[yank_no] = malloc(sizeof(line_t) + sizeof(char_t) * (count + 1)); global_config.yanks[yank_no]->available = count + 1; /* ensure extra space */ global_config.yanks[yank_no]->actual = count; @@ -8224,6 +8399,58 @@ BIM_ACTION(delete_at_column, ARG_IS_CUSTOM | ACTION_IS_RW, redraw_text(); } +void realign_column_cursor(void) { + line_t * line = env->lines[env->line_no - 1]; + int _x = 0, col = 1, j = 0; + for (; j < line->actual; ++j) { + char_t * c = &line->text[j]; + _x += c->display_width; + col = j + 1; + if (_x > env->sel_col) break; + } + env->col_no = col; +} + +BIM_ACTION(column_left, 0, "Move the column cursor left.")(void) { + if (env->sel_col > 0) { + env->sel_col -= 1; + env->preferred_column = env->sel_col; + /* Figure out where the cursor should be */ + realign_column_cursor(); + redraw_all(); + } +} + +BIM_ACTION(column_right, 0, "Move the column cursor right.")(void) { + env->sel_col += 1; + env->preferred_column = env->sel_col; + /* Figure out where the cursor should be */ + realign_column_cursor(); + redraw_all(); +} + +BIM_ACTION(column_up, 0, "Move the column cursor up.")(void) { + if (env->line_no > 1 && env->start_line > 1) { + env->line_no--; + env->start_line--; + /* Figure out where the cursor should be */ + realign_column_cursor(); + place_cursor_actual(); + redraw_all(); + } +} + +BIM_ACTION(column_down, 0, "Move the column cursor down.")(void) { + if (env->line_no < env->line_count && env->start_line < env->line_count) { + env->line_no++; + env->start_line++; + /* Figure out where the cursor should be */ + realign_column_cursor(); + place_cursor_actual(); + redraw_all(); + } +} + uint32_t * get_word_under_cursor(void) { /* Figure out size */ int c_before = 0; @@ -9641,6 +9868,7 @@ struct action_map _NORMAL_MAP[] = { {KEY_SHIFT_DOWN, enter_line_selection_and_cursor_down, 0, 0}, {KEY_ALT_UP, previous_tab, 0, 0}, {KEY_ALT_DOWN, next_tab, 0, 0}, + {KEY_CTRL_UNDERSCORE, start_file_search, 0, 0}, {-1, NULL, 0, 0}, }; @@ -9723,6 +9951,10 @@ struct action_map _COL_INSERT_MAP[] = { {KEY_ENTER, NULL, 0, 0}, {KEY_CTRL_W, NULL, 0, 0}, {KEY_CTRL_V, insert_char_at_column, opt_char, 0}, + {KEY_LEFT, column_left, 0, 0}, + {KEY_RIGHT, column_right, 0, 0}, + {KEY_UP, column_up, 0, 0}, + {KEY_DOWN, column_down, 0, 0}, {-1, NULL, 0, 0}, }; @@ -9809,6 +10041,15 @@ struct action_map _COMMAND_MAP[] = { {-1, NULL, 0, 0} }; +struct action_map _FILESEARCH_MAP[] = { + {KEY_ENTER, file_search_accept, 0, 0}, + + {KEY_UP, NULL, 0, 0}, + {KEY_DOWN, NULL, 0, 0}, + + {-1, NULL, 0, 0} +}; + struct action_map _SEARCH_MAP[] = { {KEY_ENTER, search_accept, 0, 0}, @@ -9825,6 +10066,7 @@ struct action_map _INPUT_BUFFER_MAP[] = { {KEY_BACKSPACE, command_backspace, 0, 0}, {KEY_CTRL_W, command_word_delete, 0, 0}, {KEY_MOUSE, eat_mouse, 0, 0}, + {KEY_MOUSE_SGR, eat_mouse_sgr, 0, 0}, {KEY_LEFT, command_cursor_left, 0, 0}, {KEY_CTRL_LEFT, command_word_left, 0, 0}, {KEY_RIGHT, command_cursor_right, 0, 0}, @@ -9853,6 +10095,7 @@ struct action_map * NAVIGATION_MAP = NULL; struct action_map * ESCAPE_MAP = NULL; struct action_map * COMMAND_MAP = NULL; struct action_map * SEARCH_MAP = NULL; +struct action_map * FILESEARCH_MAP = NULL; struct action_map * INPUT_BUFFER_MAP = NULL; struct mode_names mode_names[] = { @@ -9963,6 +10206,20 @@ void normal_mode(void) { if (key < KEY_ESCAPE) command_insert_char(key); } continue; + } else if (global_config.overlay_mode == OVERLAY_MODE_FILESEARCH) { + if (refresh) { + render_command_input_buffer(); + redraw_tabbar(); + refresh = 0; + } + int key = bim_getkey(DEFAULT_KEY_WAIT); + if (key != KEY_TIMEOUT) { + refresh = 1; + if (!handle_action(FILESEARCH_MAP, key)) + if (!handle_action(INPUT_BUFFER_MAP, key)) + if (key < KEY_ESCAPE) command_insert_char(key); + } + continue; } else if (global_config.overlay_mode == OVERLAY_MODE_SEARCH) { if (refresh) { render_command_input_buffer(); @@ -10695,6 +10952,7 @@ void initialize(void) { CLONE_MAP(ESCAPE_MAP); CLONE_MAP(COMMAND_MAP); CLONE_MAP(SEARCH_MAP); + CLONE_MAP(FILESEARCH_MAP); CLONE_MAP(INPUT_BUFFER_MAP); #undef CLONE_MAP @@ -11211,17 +11469,36 @@ int main(int argc, char * argv[]) { case '-': if (!strcmp(optarg,"version")) { initialize(); /* Need to load bimrc to get themes */ - fprintf(stderr, "bim %s%s - %s\n", BIM_VERSION, BIM_BUILD_DATE, BIM_COPYRIGHT); - fprintf(stderr, " Available syntax highlighters:"); + update_screen_size(); /* Get terminal size if possible */ + fprintf(stderr, "\033[1mbim\033[0m %s%s\n%s\n\n", BIM_VERSION, BIM_BUILD_DATE, BIM_COPYRIGHT); + #define SECTION(title) do { \ + int x, width; \ + width = 2 + display_width_of_string(title); \ + fprintf(stderr, " \033[1m%s\033[0m:", title); \ + x = width; + #define ENDSECTION() fprintf(stderr, "\n\n"); } while (0) + #define ITEM(str) do { \ + int my_width = display_width_of_string(str); \ + if (x + my_width + 1 >= global_config.term_width) { \ + fprintf(stderr, "\n"); \ + for (x = 0; x <= width; ++x) fprintf(stderr, " "); \ + fprintf(stderr, "%s", str); \ + x += width; \ + } else { \ + fprintf(stderr, " %s", str); \ + x += my_width + 1; \ + } } while(0) + + SECTION("Syntax"); for (struct syntax_definition * s = syntaxes; syntaxes && s->name; ++s) { - fprintf(stderr, " %s", s->name); + ITEM(s->name); } - fprintf(stderr, "\n"); - fprintf(stderr, " Available color themes:"); + ENDSECTION(); + SECTION("Themes"); for (struct theme_def * d = themes; themes && d->name; ++d) { - fprintf(stderr, " %s", d->name); + ITEM(d->name); } - fprintf(stderr, "\n"); + ENDSECTION(); return 0; } else if (!strcmp(optarg,"help")) { show_usage(argv); @@ -12705,14 +12982,13 @@ static char * syn_js_special[] = { NULL }; -void paint_js_format_string(struct syntax_state * state) { - paint(1, FLAG_STRING); +static int paint_js_format_string(struct syntax_state * state) { while (charat() != -1) { if (charat() == '\\' && nextchar() == '`') { paint(2, FLAG_ESCAPE); } else if (charat() == '`') { paint(1, FLAG_STRING); - return; + return 0; } else if (charat() == '\\') { paint(2, FLAG_ESCAPE); } else if (charat() == '$' && nextchar() == '{') { @@ -12725,6 +13001,7 @@ void paint_js_format_string(struct syntax_state * state) { paint(1, FLAG_STRING); } } + return 1; } int syn_js_calculate(struct syntax_state * state) { @@ -12778,7 +13055,8 @@ int syn_js_calculate(struct syntax_state * state) { paint_single_string(state); return 0; } else if (charat() == '`') { - paint_js_format_string(state); + paint(1, FLAG_STRING); + if (paint_js_format_string(state)) return 2; return 0; } else if (charat() != -1) { skip(); @@ -12788,6 +13066,9 @@ int syn_js_calculate(struct syntax_state * state) { case 1: if (paint_c_comment(state) == 1) return 1; return 0; + case 2: + if (paint_js_format_string(state)) return 2; + return 0; } return -1; } @@ -13035,6 +13316,159 @@ BIM_SYNTAX_COMPLETER(kotlin) { BIM_SYNTAX_EXT(kotlin, 1, kt_brace_keyword_qualifier) +int paint_krk_string(struct syntax_state * state, int type) { + while (charat() != -1) { + if (charat() == '\\' && nextchar() == type) { + paint(2, FLAG_ESCAPE); + } else if (charat() == type) { + paint(1, FLAG_STRING); + return 0; + } else if (charat() == '\\') { + if (nextchar() == 'x') { + paint(2, FLAG_ESCAPE); + /* Why is my FLAG_ERROR not valid in rline? */ + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); + } else if (nextchar() == 'u') { + paint(2, FLAG_ESCAPE); + /* Why is my FLAG_ERROR not valid in rline? */ + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); + } else { + paint(2, FLAG_ESCAPE); + } + } else { + paint(1, FLAG_STRING); + } + } + if (lastchar() == '\\') { + return (type == '"') ? 3 : 4; /* continues */ + } + return -1; +} + +char * syn_krk_keywords[] = { + "and","class","def","else","export","for","if","in","import", + "let","not","or","return","while","try","except","raise", + "continue","break","as","from","elif","lambda","with","is", + NULL +}; + +char * syn_krk_types[] = { + /* built-in functions */ + "self", "super", /* implicit in a class method */ + "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ + "list","dict","range", /* builtin classes */ + "object","exception","isinstance","type", + "print","any","all","set","bool", + NULL +}; + +char * syn_krk_special[] = { + "True","False","None", + NULL +}; + +int paint_krk_numeral(struct syntax_state * state) { + if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { + paint(2, FLAG_NUMERAL); + while (isxdigit(charat())) paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && (nextchar() == 'o' || nextchar() == 'O')) { + paint(2, FLAG_NUMERAL); + while (charat() >= '0' && charat() <= '7') paint(1, FLAG_NUMERAL); + } else if (charat() == '0' && (nextchar() == 'b' || nextchar() == 'B')) { + paint(2, FLAG_NUMERAL); + while (charat() == '0' || charat() == '1') paint(1, FLAG_NUMERAL); + } else { + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + if (charat() == '.' && isdigit(nextchar())) { + paint(1, FLAG_NUMERAL); + while (isdigit(charat())) paint(1, FLAG_NUMERAL); + } + } + return 0; +} + +int paint_krk_triple_string(struct syntax_state * state, int type) { + while (charat() != -1) { + if (charat() == type) { + paint(1, FLAG_STRING); + if (charat() == type && nextchar() == type) { + paint(2, FLAG_STRING); + return 0; + } + } else if (charat() == '\\') { + if (nextchar() == 'x') { + paint(2, FLAG_ESCAPE); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); + } else if (nextchar() == 'u') { + paint(2, FLAG_ESCAPE); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); + paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); + } else { + paint(2, FLAG_ESCAPE); + } + } else { + paint(1, FLAG_STRING); + } + } + return (type == '"') ? 1 : 2; /* continues */ +} + +int syn_krk_calculate(struct syntax_state * state) { + switch (state->state) { + case -1: + case 0: + if (charat() == '#') { + paint_comment(state); + } else if (charat() == '@') { + paint(1, FLAG_TYPE); + while (c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); + return 0; + } else if (charat() == '"' || charat() == '\'') { + int type = charat(); + if (nextchar() == type && charrel(2) == type) { + paint(3, FLAG_STRING); + return paint_krk_triple_string(state, type); + } else { + paint(1, FLAG_STRING); + return paint_krk_string(state, type); + } + return 0; + } else if (find_keywords(state, syn_krk_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { + return 0; + } else if (lastchar() != '.' && find_keywords(state, syn_krk_types, FLAG_TYPE, c_keyword_qualifier)) { + return 0; + } else if (find_keywords(state, syn_krk_special, FLAG_NUMERAL, c_keyword_qualifier)) { + return 0; + } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { + paint_krk_numeral(state); + return 0; + } else if (charat() != -1) { + skip(); + return 0; + } + break; + case 1: + return paint_krk_triple_string(state, '"'); + case 2: + return paint_krk_triple_string(state, '\''); + case 3: + return paint_krk_string(state, '"'); + case 4: + return paint_krk_string(state, '\''); + } + return -1; +} + +char * syn_krk_ext[] = {".krk",NULL}; + +BIM_SYNTAX(krk, 1) int lisp_paren_flags[] = { FLAG_DIFFPLUS, FLAG_TYPE, FLAG_PRAGMA, FLAG_KEYWORD, }; From 5fe8d3b0d175048b5caa81eaadecb11547184470 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 23 Jan 2021 15:31:38 +0900 Subject: [PATCH 066/102] yutani: basic Kuroko bindings, demo 'app' --- Makefile | 8 +- apps/krk_yutani_test.krk | 35 +++++++ lib/kuroko/_yutani.c | 193 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 apps/krk_yutani_test.krk diff --git a/Makefile b/Makefile index 085b73c4..a51db535 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,8 @@ APPS_X=$(foreach app,$(APPS),base/bin/$(app)) APPS_Y=$(foreach app,$(APPS),.make/$(app).mak) APPS_SH=$(patsubst apps/%.sh,%.sh,$(wildcard apps/*.sh)) APPS_SH_X=$(foreach app,$(APPS_SH),base/bin/$(app)) +APPS_KRK=$(patsubst apps/%.krk,%.krk,$(wildcard apps/*.krk)) +APPS_KRK_X=$(foreach app,$(APPS_KRK),base/bin/$(app)) ## # LIBS = C sources from lib/ @@ -63,7 +65,7 @@ tags: $(SOURCE_FILES) ## # Files that must be present in the ramdisk (apps, libraries) -RAMDISK_FILES= ${APPS_X} ${APPS_SH_X} ${LIBS_X} base/lib/ld.so base/lib/libm.so ${KUROKO_FILES} +RAMDISK_FILES= ${APPS_X} ${APPS_SH_X} ${APPS_KRK_X} ${LIBS_X} base/lib/ld.so base/lib/libm.so ${KUROKO_FILES} # Kernel / module flags @@ -251,6 +253,10 @@ base/bin/%.sh: apps/%.sh cp $< $@ chmod +x $@ +base/bin/%.krk: apps/%.krk + cp $< $@ + chmod +x $@ + # Ramdisk fatbase/ramdisk.img: ${RAMDISK_FILES} $(shell find base) Makefile util/createramdisk.py | dirs python3 util/createramdisk.py diff --git a/apps/krk_yutani_test.krk b/apps/krk_yutani_test.krk new file mode 100644 index 00000000..ed51f2c5 --- /dev/null +++ b/apps/krk_yutani_test.krk @@ -0,0 +1,35 @@ +#!/bin/kuroko +import _yutani + +# Connect +let y = _yutani.Yutani() + +# Create window +let w = _yutani.Window(300,200,title="Kuroko Demo") +w.move(100,100) + +def drawWindow(): + w.fill() + _yutani.Decorator.render(w) + w.flip() + +drawWindow() + +while True: + let msg = y.poll() + if msg.type == _yutani.Message.MSG_SESSION_END: + print("Asked to exit.") + break + else if msg.type == _yutani.Message.MSG_KEY_EVENT: + print("key event") + else if msg.type == _yutani.Message.MSG_WINDOW_FOCUS_CHANGE: + print("focus change") + if msg.wid == w.wid: + w.set_focused(msg.focused) + drawWindow() + else if msg.type == _yutani.Message.MSG_WINDOW_MOUSE_EVENT: + if _yutani.Decorator.handle_event(msg) == 2: + print("Clicked close button") + break + print(f"W({msg.wid}) mouse {msg.new_x},{msg.new_y}") + diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index d24d09f6..fcaa0ead 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -1,6 +1,7 @@ /* Kuroko bindings for Yutani */ #include #include +#include #include "kuroko/src/kuroko.h" #include "kuroko/src/vm.h" #include "kuroko/src/value.h" @@ -8,6 +9,8 @@ static KrkClass * Message; static KrkClass * Yutani; +static KrkClass * YutaniWindow; +static KrkClass * Decorator; static KrkInstance * module; static KrkInstance * yctxInstance = NULL; @@ -163,6 +166,9 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { krk_runtimeError(vm.exceptions.ioError, "Failed to connect to compositor."); return NONE_VAL(); } + + init_decorations(); + fprintf(stderr, "Attaching field...\n"); ((struct YutaniClass*)self)->yctx = yctx; yctxInstance = self; @@ -214,6 +220,173 @@ static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { return krk_pop(); } +struct WindowClass { + KrkInstance inst; + yutani_window_t * window; + gfx_context_t * ctx; + int doubleBuffered; +}; + +#define GET_ARG(p,name,type) do { \ + if (hasKw && krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S(#name)), &name)) { \ + if (!krk_isInstanceOf(name,type)) \ + return krk_runtimeError(vm.exceptions.typeError, #name " argument should be " #type ", not '%s'", krk_typeName(name)); \ + } else if (argc > p) { \ + name = argv[p]; \ + if (!krk_isInstanceOf(name,type)) \ + return krk_runtimeError(vm.exceptions.typeError, #name " argument should be " #type ", not '%s'", krk_typeName(name)); \ + } \ +} while (0) + +static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { + if (!yctxInstance) return krk_runtimeError(vm.exceptions.valueError, "Compositor is not initialized"); + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "Failed to initialize window"); + + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.argumentError, "Expected at least two (integer) arguments (width, height)"); + + if (hasKw) argc--; + + KrkInstance * _self = AS_INSTANCE(argv[0]); + struct WindowClass * self = (struct WindowClass*)_self; + krk_integer_type width = AS_INTEGER(argv[1]); + krk_integer_type height = AS_INTEGER(argv[2]); + + KrkValue flags = INTEGER_VAL(0), title = NONE_VAL(), icon = NONE_VAL(), doublebuffer = BOOLEAN_VAL(0); + GET_ARG(3, flags, vm.baseClasses.intClass); + GET_ARG(4, title, vm.baseClasses.strClass); + GET_ARG(5, icon, vm.baseClasses.strClass); + GET_ARG(6, doublebuffer, vm.baseClasses.boolClass); + + self->window = yutani_window_create_flags(((struct YutaniClass*)yctxInstance)->yctx, + width, height, AS_INTEGER(flags)); + + self->doubleBuffered = AS_BOOLEAN(doublebuffer); + + if (self->doubleBuffered) { + self->ctx = init_graphics_yutani_double_buffer(self->window); + } else { + self->ctx = init_graphics_yutani(self->window); + } + + if (!IS_NONE(title)) { + if (!IS_NONE(icon)) { + yutani_window_advertise_icon(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_CSTRING(title), AS_CSTRING(icon)); + } else { + yutani_window_advertise(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_CSTRING(title)); + } + } + + krk_attachNamedValue(&_self->fields, "title", title); + krk_attachNamedValue(&_self->fields, "icon", icon); + krk_attachNamedValue(&_self->fields, "closed", BOOLEAN_VAL(0)); + + return argv[0]; +} + +static KrkValue _window_fill(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected window"); + KrkInstance * _self = AS_INSTANCE(argv[0]); + struct WindowClass * self = (struct WindowClass*)_self; + draw_fill(self->ctx, rgba(127,127,127,255)); + return NONE_VAL(); +} + +static KrkValue _window_flip(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected window"); + KrkInstance * _self = AS_INSTANCE(argv[0]); + struct WindowClass * self = (struct WindowClass*)_self; + if (self->doubleBuffered) { + flip(self->ctx); + } + yutani_flip(((struct YutaniClass*)yctxInstance)->yctx, self->window); + return NONE_VAL(); +} + +static KrkValue _window_move(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected window"); + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected two integer arguments"); + KrkInstance * _self = AS_INSTANCE(argv[0]); + struct WindowClass * self = (struct WindowClass*)_self; + yutani_window_move(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_INTEGER(argv[1]), AS_INTEGER(argv[2])); + return NONE_VAL(); +} + +static KrkValue _window_set_focused(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected window"); + if (argc < 2 || !IS_INTEGER(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected integer argument"); + KrkInstance * _self = AS_INSTANCE(argv[0]); + struct WindowClass * self = (struct WindowClass*)_self; + self->window->focused = AS_INTEGER(argv[1]); + return NONE_VAL(); +} + +#define WINDOW_PROPERTY(name) \ +static KrkValue _window_ ## name (int argc, KrkValue argv[]) { \ + KrkInstance * _self = AS_INSTANCE(argv[0]); \ + struct WindowClass * self = (struct WindowClass*)_self; \ + return INTEGER_VAL(self->window-> name); \ +} + +WINDOW_PROPERTY(width); +WINDOW_PROPERTY(height); +WINDOW_PROPERTY(wid); +WINDOW_PROPERTY(focused); + +static KrkValue _decor_get_bounds(int argc, KrkValue argv[]) { + if (argc > 0 && !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected window"); + struct decor_bounds bounds; + + decor_get_bounds((argc > 0) ? ((struct WindowClass*)AS_INSTANCE(argv[0]))->window : NULL, + &bounds); + + KRK_PAUSE_GC(); + + KrkValue result = krk_dict_of(6 * 2, (KrkValue[]) { + OBJECT_VAL(S("top_height")), INTEGER_VAL(bounds.top_height), + OBJECT_VAL(S("bottom_height")), INTEGER_VAL(bounds.bottom_height), + OBJECT_VAL(S("left_width")), INTEGER_VAL(bounds.left_width), + OBJECT_VAL(S("right_width")), INTEGER_VAL(bounds.right_width), + OBJECT_VAL(S("width")), INTEGER_VAL(bounds.width), + OBJECT_VAL(S("height")), INTEGER_VAL(bounds.height) + }); + + KRK_RESUME_GC(); + + return result; +} + +static KrkValue _decor_handle_event(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], Message)) + return krk_runtimeError(vm.exceptions.typeError, "expected message"); + return INTEGER_VAL(decor_handle_event(((struct YutaniClass*)yctxInstance)->yctx, ((struct MessageClass*)AS_INSTANCE(argv[0]))->msg)); +} + +static KrkValue _decor_render(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected window"); + char * title = (argc > 1 && IS_STRING(argv[1])) ? AS_CSTRING(argv[1]) : NULL; + if (title == NULL) { + KrkValue winTitle; + if (!krk_tableGet(&AS_INSTANCE(argv[0])->fields, OBJECT_VAL(S("title")), &winTitle) || !IS_STRING(winTitle)) { + title = ""; + } else { + title = AS_CSTRING(winTitle); + } + } + render_decorations(((struct WindowClass*)AS_INSTANCE(argv[0]))->window, + ((struct WindowClass*)AS_INSTANCE(argv[0]))->ctx, title); + return NONE_VAL(); +} + KrkValue krk_module_onload__yutani(void) { fprintf(stderr, "Loading...\n"); module = krk_newInstance(vm.moduleClass); @@ -272,6 +445,26 @@ KrkValue krk_module_onload__yutani(void) { #endif krk_finalizeClass(Yutani); + YutaniWindow = krk_createClass(module, "Window", NULL); + YutaniWindow->allocSize = sizeof(struct WindowClass); + krk_defineNative(&YutaniWindow->methods, ".__init__", _window_init); + krk_defineNative(&YutaniWindow->methods, ".fill", _window_fill); + krk_defineNative(&YutaniWindow->methods, ".flip", _window_flip); + krk_defineNative(&YutaniWindow->methods, ".move", _window_move); + krk_defineNative(&YutaniWindow->methods, ".set_focused", _window_set_focused); + /* Properties */ + krk_defineNative(&YutaniWindow->methods, ":width", _window_width); + krk_defineNative(&YutaniWindow->methods, ":height", _window_height); + krk_defineNative(&YutaniWindow->methods, ":wid", _window_wid); + krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); + krk_finalizeClass(YutaniWindow); + + Decorator = krk_createClass(module, "Decorator", NULL); + krk_defineNative(&Decorator->fields, "get_bounds", _decor_get_bounds); + krk_defineNative(&Decorator->fields, "render", _decor_render); + krk_defineNative(&Decorator->fields, "handle_event", _decor_handle_event); + krk_finalizeClass(Decorator); + /** * class MsgKeyEvent(Message): From ec08e125ec3cf198542bbbb11e1d8a0d943942c1 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 23 Jan 2021 20:00:24 +0900 Subject: [PATCH 067/102] libc: fix major issue in strtox --- libc/stdlib/strtoul.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libc/stdlib/strtoul.c b/libc/stdlib/strtoul.c index 52b1d4db..9f5da791 100644 --- a/libc/stdlib/strtoul.c +++ b/libc/stdlib/strtoul.c @@ -6,12 +6,11 @@ static int is_valid(int base, char c) { if (c < '0') return 0; if (base <= 10) { - return c < ('0' + base - 1); + return c < ('0' + base); } - if (c > '9' && c < 'a') return 0; - if (c > 'a' + (base - 10) && c < 'A') return 1; - if (c > 'A' + (base - 10)) return 1; + if (c >= 'a' && c < 'a' + (base - 10)) return 1; + if (c >= 'A' && c < 'A' + (base - 10)) return 1; if (c >= '0' && c <= '9') return 1; return 0; } From 6a5991fcf576908fb2bec8ac0bdee2e9ff1f5910 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 23 Jan 2021 20:00:36 +0900 Subject: [PATCH 068/102] kuroko: more upstream updates --- Makefile | 7 ++++--- apps/highlight-source.krk | 11 +++++++++++ kuroko | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100755 apps/highlight-source.krk diff --git a/Makefile b/Makefile index a51db535..507a1f69 100644 --- a/Makefile +++ b/Makefile @@ -60,8 +60,8 @@ LIBS_Y=$(foreach lib,$(LIBS),.make/$(lib).lmak) SOURCE_FILES = $(wildcard kernel/*.c kernel/*/*.c kernel/*/*/*.c modules/*.c) SOURCE_FILES += $(wildcard apps/*.c linker/*.c libc/*.c libc/*/*.c lib/*.c) -tags: $(SOURCE_FILES) - ctags -f tags $(SOURCE_FILES) +tags: $(SOURCE_FILES) $(wildcard kuroko/src/*.c kuroko/src/*.h) + ctags -f tags $(SOURCE_FILES) $(wildcard kuroko/src/*.c kuroko/src/*.h) ## # Files that must be present in the ramdisk (apps, libraries) @@ -203,11 +203,12 @@ kuroko/%.o: kuroko/%.c KUROKO_CMODS=$(patsubst kuroko/src/module_%.c,%,$(wildcard kuroko/src/module_*.c)) $(patsubst lib/kuroko/%.c,%,$(wildcard lib/kuroko/*.c)) KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/usr/local/lib/kuroko/$(lib).so) KUROKO_CMODS_Y=$(foreach lib,$(KUROKO_CMODS),.make/$(lib).kmak) -KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/local/lib/kuroko/%.krk,$(wildcard kuroko/modules/*.krk)) +KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/local/lib/kuroko/%.krk,$(wildcard kuroko/modules/*.krk kuroko/modules/*/*.krk)) KUROKO_FILES=$(KUROKO_CMODS_X) $(KUROKO_KRK_MODS) base/lib/libkuroko.so base/usr/local/lib/kuroko/%.krk: kuroko/modules/%.krk + @mkdir -p `dirname $@` cp $< $@ .make/%.kmak: kuroko/src/module_%.c util/auto-dep.py | dirs diff --git a/apps/highlight-source.krk b/apps/highlight-source.krk new file mode 100755 index 00000000..77edb26a --- /dev/null +++ b/apps/highlight-source.krk @@ -0,0 +1,11 @@ +#!/bin/kuroko +import fileio, syntax.highlighter, kuroko + +let code +with fileio.open(kuroko.argv[-1]) as f: + code = f.read() + +let highlighter = syntax.highlighter.KurokoHighlighter(code) + +highlighter.highlight() +syntax.highlighter.toTerminal(highlighter.process()) diff --git a/kuroko b/kuroko index 3e906150..50e49021 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 3e9061502108a80c4873a4d8dcff5e97ef55e538 +Subproject commit 50e490217070f9dbe085bc57637b12085b14b713 From ec0fe9bb69d74f0b99e0434b58a7f916f91f9cbd Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 24 Jan 2021 19:35:39 +0900 Subject: [PATCH 069/102] yutani: more bindings for kuroko --- apps/krk_yutani_test.krk | 3 +- apps/kuroko.c | 23 ++-- kuroko | 2 +- lib/kuroko/_yutani.c | 240 +++++++++++++++++++++++++++++++++------ 4 files changed, 218 insertions(+), 50 deletions(-) diff --git a/apps/krk_yutani_test.krk b/apps/krk_yutani_test.krk index ed51f2c5..dc90cf79 100644 --- a/apps/krk_yutani_test.krk +++ b/apps/krk_yutani_test.krk @@ -8,8 +8,9 @@ let y = _yutani.Yutani() let w = _yutani.Window(300,200,title="Kuroko Demo") w.move(100,100) + def drawWindow(): - w.fill() + w.fill(_yutani.color(127,127,127)) _yutani.Decorator.render(w) w.flip() diff --git a/apps/kuroko.c b/apps/kuroko.c index 9745200b..9b19a4bb 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -310,19 +310,10 @@ static void findInterpreter(char * argv[]) { #endif } -/* Runs the interpreter to get the version information. */ -static int version(char * argv[]) { +static int runString(char * argv[], char * string) { findInterpreter(argv); krk_initVM(0); - krk_interpret("import kuroko\nprint('Kuroko',kuroko.version)\n", 1, "",""); - krk_freeVM(); - return 0; -} - -static int modulePaths(char * argv[]) { - findInterpreter(argv); - krk_initVM(0); - krk_interpret("import kuroko\nprint(kuroko.module_paths)\n", 1, "",""); + krk_interpret(string, 1, "",""); krk_freeVM(); return 0; } @@ -341,8 +332,10 @@ int main(int argc, char * argv[]) { int flags = 0; int moduleAsMain = 0; int opt; - while ((opt = getopt(argc, argv, "dgm:rstMV-:")) != -1) { + while ((opt = getopt(argc, argv, "c:dgm:rstMV-:")) != -1) { switch (opt) { + case 'c': + return runString(argv, optarg); case 'd': /* Disassemble code blocks after compilation. */ flags |= KRK_ENABLE_DISASSEMBLY; @@ -367,12 +360,12 @@ int main(int argc, char * argv[]) { enableRline = 0; break; case 'M': - return modulePaths(argv); + return runString(argv,"import kuroko; print(kuroko.module_paths)\n"); case 'V': - return version(argv); + return runString(argv,"import kuroko; print('Kuroko',kuroko.version)\n"); case '-': if (!strcmp(optarg,"version")) { - return version(argv); + return runString(argv,"import kuroko; print('Kuroko',kuroko.version)\n"); } else if (!strcmp(optarg,"help")) { fprintf(stderr,"usage: %s [flags] [FILE...]\n" "\n" diff --git a/kuroko b/kuroko index 50e49021..6e307a38 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 50e490217070f9dbe085bc57637b12085b14b713 +Subproject commit 6e307a38f7f6bc68a8c581e4d92ed569137bbfe9 diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index fcaa0ead..0f357685 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -7,26 +7,48 @@ #include "kuroko/src/value.h" #include "kuroko/src/object.h" -static KrkClass * Message; -static KrkClass * Yutani; -static KrkClass * YutaniWindow; -static KrkClass * Decorator; - static KrkInstance * module; static KrkInstance * yctxInstance = NULL; #define S(c) (krk_copyString(c,sizeof(c)-1)) +static KrkClass * Message; struct MessageClass { KrkInstance inst; yutani_msg_t * msg; }; +static KrkClass * Yutani; struct YutaniClass { KrkInstance inst; yutani_t * yctx; }; +static KrkClass * GraphicsContext; +struct GraphicsContext { + KrkInstance inst; + gfx_context_t * ctx; + int doubleBuffered; +}; + +static KrkClass * YutaniWindow; +struct WindowClass { + KrkInstance inst; + gfx_context_t * ctx; + int doubleBuffered; + yutani_window_t * window; +}; + +static KrkClass * Decorator; +/* no additional fields */ + +static KrkClass * YutaniColor; +struct YutaniColor { + KrkInstance inst; + uint32_t color; +}; + + /** * Convenience wrapper to make a class and attach it to the module, while * handling stack push/pop to keep things from being prematurely GC'd. @@ -151,7 +173,6 @@ static KrkValue _message_getattr(int argc, KrkValue argv[]) { #undef WID static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { - fprintf(stderr, "Creating connection.\n"); if (yctxInstance) { krk_runtimeError(vm.exceptions.valueError, "class 'Yutani' is a singleton and has already been initialized."); return NONE_VAL(); @@ -162,14 +183,12 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { /* Connect and let's go. */ yutani_t * yctx = yutani_init(); if (!yctx) { - fprintf(stderr, "Connection failed?\n"); krk_runtimeError(vm.exceptions.ioError, "Failed to connect to compositor."); return NONE_VAL(); } init_decorations(); - fprintf(stderr, "Attaching field...\n"); ((struct YutaniClass*)self)->yctx = yctx; yctxInstance = self; krk_attachNamedObject(&module->fields, "_yutani_t", (KrkObj*)self); @@ -220,13 +239,6 @@ static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { return krk_pop(); } -struct WindowClass { - KrkInstance inst; - yutani_window_t * window; - gfx_context_t * ctx; - int doubleBuffered; -}; - #define GET_ARG(p,name,type) do { \ if (hasKw && krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S(#name)), &name)) { \ if (!krk_isInstanceOf(name,type)) \ @@ -238,6 +250,124 @@ struct WindowClass { } \ } while (0) +#define GFX_PROPERTY(name) \ +static KrkValue _gfx_ ## name (int argc, KrkValue argv[]) { \ + if (argc != 1 || !krk_isInstanceOf(argv[0], GraphicsContext)) \ + return krk_runtimeError(vm.exceptions.typeError, "Expected GraphicsContext"); \ + struct GraphicsContext * self = (struct GraphicsContext *)AS_INSTANCE(argv[0]); \ + return INTEGER_VAL(self->ctx-> name); \ +} + +GFX_PROPERTY(width); +GFX_PROPERTY(height); + +#define CHECK_GFX() \ + if (argc < 1 || !krk_isInstanceOf(argv[0], GraphicsContext)) \ + return krk_runtimeError(vm.exceptions.typeError, "expected GraphicsContext"); \ + struct GraphicsContext * self = (struct GraphicsContext*)AS_INSTANCE(argv[0]) + +static KrkValue _gfx_fill(int argc, KrkValue argv[]) { + CHECK_GFX(); + if (argc < 2 || !krk_isInstanceOf(argv[1], YutaniColor)) + return krk_runtimeError(vm.exceptions.typeError, "fill() takes one color() argument"); + struct YutaniColor * color = (struct YutaniColor*)AS_INSTANCE(argv[1]); + draw_fill(self->ctx, color->color); + return NONE_VAL(); +} + +static KrkValue _gfx_flip(int argc, KrkValue argv[]) { + CHECK_GFX(); + if (self->doubleBuffered) { + flip(self->ctx); + } + return NONE_VAL(); +} + +static KrkValue _gfx_blur(int argc, KrkValue argv[]) { + CHECK_GFX(); + int radius = 2; + if (argc > 1 && IS_INTEGER(argv[1])) radius = AS_INTEGER(argv[1]); + else if (argc > 1) return krk_runtimeError(vm.exceptions.typeError, "expected int"); + blur_context_box(self->ctx, radius); + return NONE_VAL(); +} + +static KrkValue _gfx_line(int argc, KrkValue argv[]) { + CHECK_GFX(); + if (argc < 6 || + !IS_INTEGER(argv[1]) || + !IS_INTEGER(argv[2]) || + !IS_INTEGER(argv[3]) || + !IS_INTEGER(argv[4]) || + !krk_isInstanceOf(argv[5], YutaniColor)) { + return krk_runtimeError(vm.exceptions.typeError, "line() expects 4 ints and a color"); + } + + int32_t x0 = AS_INTEGER(argv[1]); + int32_t x1 = AS_INTEGER(argv[2]); + int32_t y0 = AS_INTEGER(argv[3]); + int32_t y1 = AS_INTEGER(argv[4]); + struct YutaniColor * color = (struct YutaniColor*)AS_INSTANCE(argv[5]); + + if (argc > 6) { + if (IS_INTEGER(argv[6])) { + draw_line_thick(self->ctx,x0,x1,y0,y1,color->color,AS_INTEGER(argv[6])); + } else if (IS_FLOATING(argv[6])) { + draw_line_aa(self->ctx,x0,x1,y0,y1,color->color,AS_FLOATING(argv[6])); + } else { + return krk_runtimeError(vm.exceptions.typeError, "thickness must be int or float, not '%s'", krk_typeName(argv[6])); + } + } else { + draw_line(self->ctx,x0,x1,y0,y1,color->color); + } + + return NONE_VAL(); +} + +static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { + CHECK_GFX(); + + if (hasKw) argc--; + + if (argc != 6 || + !IS_INTEGER(argv[1]) || + !IS_INTEGER(argv[2]) || + !IS_INTEGER(argv[3]) || + !IS_INTEGER(argv[4]) || + !krk_isInstanceOf(argv[5], YutaniColor)) { + return krk_runtimeError(vm.exceptions.typeError, "rect() expects 4 ints and a color"); + } + + int32_t x = AS_INTEGER(argv[1]); + int32_t y = AS_INTEGER(argv[2]); + uint16_t width = AS_INTEGER(argv[3]); + uint16_t height = AS_INTEGER(argv[4]); + struct YutaniColor * color = (struct YutaniColor*)AS_INSTANCE(argv[5]); + + KrkValue solid = BOOLEAN_VAL(0), radius = NONE_VAL(); + if (hasKw) { + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("solid")), &solid); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("radius")), &radius); + } + + if (!IS_BOOLEAN(solid)) + return krk_runtimeError(vm.exceptions.typeError, "solid must be bool"); + if (!IS_NONE(radius) && !IS_INTEGER(radius)) + return krk_runtimeError(vm.exceptions.typeError, "radius must be int"); + if (!IS_INTEGER(radius) && AS_BOOLEAN(solid)) + return krk_runtimeError(vm.exceptions.typeError, "radius and solid can not be used together"); + + if (AS_BOOLEAN(solid)) { + draw_rectangle_solid(self->ctx, x, y, width, height, color->color); + } else if (IS_INTEGER(radius)) { + draw_rounded_rectangle(self->ctx, x, y, width, height, AS_INTEGER(radius), color->color); + } else { + draw_rectangle(self->ctx, x, y, width, height, color->color); + } + + return NONE_VAL(); +} + static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { if (!yctxInstance) return krk_runtimeError(vm.exceptions.valueError, "Compositor is not initialized"); if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) @@ -285,15 +415,6 @@ static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { return argv[0]; } -static KrkValue _window_fill(int argc, KrkValue argv[]) { - if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected window"); - KrkInstance * _self = AS_INSTANCE(argv[0]); - struct WindowClass * self = (struct WindowClass*)_self; - draw_fill(self->ctx, rgba(127,127,127,255)); - return NONE_VAL(); -} - static KrkValue _window_flip(int argc, KrkValue argv[]) { if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) return krk_runtimeError(vm.exceptions.typeError, "expected window"); @@ -330,13 +451,12 @@ static KrkValue _window_set_focused(int argc, KrkValue argv[]) { #define WINDOW_PROPERTY(name) \ static KrkValue _window_ ## name (int argc, KrkValue argv[]) { \ - KrkInstance * _self = AS_INSTANCE(argv[0]); \ - struct WindowClass * self = (struct WindowClass*)_self; \ + if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) \ + return krk_runtimeError(vm.exceptions.typeError, "Expected Window"); \ + struct WindowClass * self = (struct WindowClass*)AS_INSTANCE(argv[0]); \ return INTEGER_VAL(self->window-> name); \ } -WINDOW_PROPERTY(width); -WINDOW_PROPERTY(height); WINDOW_PROPERTY(wid); WINDOW_PROPERTY(focused); @@ -387,8 +507,46 @@ static KrkValue _decor_render(int argc, KrkValue argv[]) { return NONE_VAL(); } +extern void krk_dumpStack(void); + +static KrkValue _yutani_color_init(int argc, KrkValue argv[]) { + if (argc < 4 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3]) || + (argc > 5) || (argc == 5 && !IS_INTEGER(argv[4]))) return krk_runtimeError(vm.exceptions.typeError, "color() expects three or four integer arguments"); + if (!krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color [__init__], not '%s'", krk_typeName(argv[0])); + struct YutaniColor * self = (struct YutaniColor*)AS_INSTANCE(argv[0]); + if (argc == 5) { + self->color = rgba(AS_INTEGER(argv[1]),AS_INTEGER(argv[2]),AS_INTEGER(argv[3]),AS_INTEGER(argv[4])); + } else { + self->color = rgb(AS_INTEGER(argv[1]),AS_INTEGER(argv[2]),AS_INTEGER(argv[3])); + } + return argv[0]; +} + +static KrkValue _yutani_color_repr(int argc, KrkValue argv[]) { + if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color [__repr__], not '%s'", krk_typeName(argv[0])); + struct YutaniColor * self = (struct YutaniColor*)AS_INSTANCE(argv[0]); + char tmp[30]; + if (_ALP(self->color) != 255) { + sprintf(tmp, "color<#%02x%02x%02x%02x>", (int)_RED(self->color), (int)_GRE(self->color), (int)_BLU(self->color), (int)_ALP(self->color)); + } else { + sprintf(tmp, "color<#%02x%02x%02x>", (int)_RED(self->color), (int)_GRE(self->color), (int)_BLU(self->color)); + } + return OBJECT_VAL(krk_copyString(tmp,strlen(tmp))); +} + +static KrkValue _yutani_color_str(int argc, KrkValue argv[]) { + if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color [__str__], not '%s'", krk_typeName(argv[0])); + struct YutaniColor * self = (struct YutaniColor*)AS_INSTANCE(argv[0]); + char tmp[30]; + if (_ALP(self->color) != 255) { + sprintf(tmp, "#%02x%02x%02x%02x", (int)_RED(self->color), (int)_GRE(self->color), (int)_BLU(self->color), (int)_ALP(self->color)); + } else { + sprintf(tmp, "#%02x%02x%02x", (int)_RED(self->color), (int)_GRE(self->color), (int)_BLU(self->color)); + } + return OBJECT_VAL(krk_copyString(tmp,strlen(tmp))); +} + KrkValue krk_module_onload__yutani(void) { - fprintf(stderr, "Loading...\n"); module = krk_newInstance(vm.moduleClass); /* Store it on the stack for now so we can do stuff that may trip GC * and not lose it to garbage colletion... */ @@ -418,6 +576,13 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&Message->methods, ".__getattr__", _message_getattr); krk_finalizeClass(Message); + YutaniColor = krk_createClass(module, "color", NULL); + YutaniColor->allocSize = sizeof(struct YutaniColor); + krk_defineNative(&YutaniColor->methods, ".__init__", _yutani_color_init); + krk_defineNative(&YutaniColor->methods, ".__repr__", _yutani_color_repr); + krk_defineNative(&YutaniColor->methods, ".__str__", _yutani_color_str); + krk_finalizeClass(YutaniColor); + /** * class Yutani(object): * yctx = yutani_t * @@ -445,16 +610,25 @@ KrkValue krk_module_onload__yutani(void) { #endif krk_finalizeClass(Yutani); - YutaniWindow = krk_createClass(module, "Window", NULL); + GraphicsContext = krk_createClass(module, "GraphicsContext", NULL); + GraphicsContext->allocSize = sizeof(struct GraphicsContext); + /* No initializers for now until I bother with them... */ + krk_defineNative(&GraphicsContext->methods, ":width", _gfx_width); + krk_defineNative(&GraphicsContext->methods, ":height", _gfx_height); + krk_defineNative(&GraphicsContext->methods, ".fill", _gfx_fill); + krk_defineNative(&GraphicsContext->methods, ".flip", _gfx_flip); + krk_defineNative(&GraphicsContext->methods, ".blur", _gfx_blur); + krk_defineNative(&GraphicsContext->methods, ".line", _gfx_line); + krk_defineNative(&GraphicsContext->methods, ".rect", _gfx_rect); + krk_finalizeClass(GraphicsContext); + + YutaniWindow = krk_createClass(module, "Window", GraphicsContext); YutaniWindow->allocSize = sizeof(struct WindowClass); krk_defineNative(&YutaniWindow->methods, ".__init__", _window_init); - krk_defineNative(&YutaniWindow->methods, ".fill", _window_fill); krk_defineNative(&YutaniWindow->methods, ".flip", _window_flip); krk_defineNative(&YutaniWindow->methods, ".move", _window_move); krk_defineNative(&YutaniWindow->methods, ".set_focused", _window_set_focused); /* Properties */ - krk_defineNative(&YutaniWindow->methods, ":width", _window_width); - krk_defineNative(&YutaniWindow->methods, ":height", _window_height); krk_defineNative(&YutaniWindow->methods, ":wid", _window_wid); krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); krk_finalizeClass(YutaniWindow); From 5746592075c55d3e98ee53f393e07a99b125ae0d Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 24 Jan 2021 21:47:50 +0900 Subject: [PATCH 070/102] kuroko: bindings for sprites --- lib/kuroko/_yutani.c | 106 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 3 deletions(-) diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 0f357685..53f49e8c 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -39,6 +39,14 @@ struct WindowClass { yutani_window_t * window; }; +static KrkClass * YutaniSprite; +struct YutaniSprite { + KrkInstance inst; + gfx_context_t * ctx; + int doubleBuffered; + sprite_t sprite; +}; + static KrkClass * Decorator; /* no additional fields */ @@ -48,7 +56,6 @@ struct YutaniColor { uint32_t color; }; - /** * Convenience wrapper to make a class and attach it to the module, while * handling stack push/pop to keep things from being prematurely GC'd. @@ -325,9 +332,8 @@ static KrkValue _gfx_line(int argc, KrkValue argv[]) { } static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { - CHECK_GFX(); - if (hasKw) argc--; + CHECK_GFX(); if (argc != 6 || !IS_INTEGER(argv[1]) || @@ -368,6 +374,93 @@ static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { return NONE_VAL(); } +static KrkValue _gfx_draw_sprite(int argc, KrkValue argv[], int hasKw) { + if (hasKw) argc--; + CHECK_GFX(); + + if (argc < 2 || !krk_isInstanceOf(argv[1], YutaniSprite)) + return krk_runtimeError(vm.exceptions.typeError, "expected Sprite"); + + if (argc < 4 || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3])) + return krk_runtimeError(vm.exceptions.typeError, "expected integer coordinate pair"); + + /* Potential kwargs: rotation:float, alpha:float, scale:(int,int)... */ + KrkValue rotation = NONE_VAL(), alpha = NONE_VAL(), scale=NONE_VAL(), color=NONE_VAL(); + if (hasKw) { + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("alpha")), &alpha); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("rotation")), &rotation); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("scale")), &scale); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("color")), &color); + } + + if (!IS_NONE(alpha) && !IS_FLOATING(alpha)) + return krk_runtimeError(vm.exceptions.typeError, "alpha must be float"); + if (!IS_NONE(rotation) && !IS_FLOATING(rotation)) + return krk_runtimeError(vm.exceptions.typeError, "rotation must be float"); + if (!IS_NONE(color) && !krk_isInstanceOf(color,YutaniColor)) + return krk_runtimeError(vm.exceptions.typeError, "color must be color"); + if (!IS_NONE(scale) && (!IS_TUPLE(scale) || AS_TUPLE(scale)->values.count != 2 || + !IS_INTEGER(AS_TUPLE(scale)->values.values[0]) || + !IS_INTEGER(AS_TUPLE(scale)->values.values[1]))) + return krk_runtimeError(vm.exceptions.typeError, "scale must be 2-tuple of ints"); + if (!IS_NONE(rotation) + !IS_NONE(scale) + !IS_NONE(color) > 1) + return krk_runtimeError(vm.exceptions.typeError, "can not combine rotation / scale / color"); + + if ((!IS_NONE(rotation) || !IS_NONE(color)) && IS_NONE(alpha)) + alpha = FLOATING_VAL(1.0); + + struct YutaniSprite * sprite = (struct YutaniSprite*)AS_INSTANCE(argv[1]); + int32_t x = AS_INTEGER(argv[2]); + int32_t y = AS_INTEGER(argv[3]); + + if (!IS_NONE(scale)) { + int32_t width = AS_INTEGER(AS_TUPLE(scale)->values.values[0]); + int32_t height = AS_INTEGER(AS_TUPLE(scale)->values.values[1]); + if (IS_NONE(alpha)) { + draw_sprite_scaled(self->ctx, &sprite->sprite, x, y, width, height); + } else { + draw_sprite_scaled_alpha(self->ctx, &sprite->sprite, x, y, width, height, AS_FLOATING(alpha)); + } + } else if (IS_NONE(alpha)) { + draw_sprite(self->ctx, &sprite->sprite, x, y); + } else if (!IS_NONE(color)) { + draw_sprite_alpha_paint(self->ctx, &sprite->sprite, x, y, AS_FLOATING(alpha), ((struct YutaniColor*)AS_INSTANCE(color))->color); + } else if (!IS_NONE(rotation)) { + draw_sprite_rotate(self->ctx, &sprite->sprite, x, y, AS_FLOATING(rotation), AS_FLOATING(alpha)); + } else { + draw_sprite_alpha(self->ctx, &sprite->sprite, x, y, AS_FLOATING(alpha)); + } + + return NONE_VAL(); +} + +static void _sprite_sweep(KrkInstance * self) { + struct YutaniSprite * sprite = (struct YutaniSprite*)self; + + if (sprite->sprite.masks) free(sprite->sprite.masks); + if (sprite->sprite.bitmap) free(sprite->sprite.bitmap); + if (sprite->ctx) free(sprite->ctx); +} + +static KrkValue _sprite_init(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniSprite)) + return krk_runtimeError(vm.exceptions.typeError, "expected sprite"); + + if (argc < 2 || !IS_STRING(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "Sprite() takes one str argument"); + + struct YutaniSprite * self = (struct YutaniSprite*)AS_INSTANCE(argv[0]); + + int result = load_sprite(&self->sprite, AS_CSTRING(argv[1])); + if (result) { + return krk_runtimeError(vm.exceptions.ioError, "Sprite() could not be initialized"); + } + + self->ctx = init_graphics_sprite(&self->sprite); + + return argv[0]; +} + static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { if (!yctxInstance) return krk_runtimeError(vm.exceptions.valueError, "Compositor is not initialized"); if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) @@ -620,6 +713,7 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&GraphicsContext->methods, ".blur", _gfx_blur); krk_defineNative(&GraphicsContext->methods, ".line", _gfx_line); krk_defineNative(&GraphicsContext->methods, ".rect", _gfx_rect); + krk_defineNative(&GraphicsContext->methods, ".draw_sprite", _gfx_draw_sprite); krk_finalizeClass(GraphicsContext); YutaniWindow = krk_createClass(module, "Window", GraphicsContext); @@ -633,6 +727,12 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); krk_finalizeClass(YutaniWindow); + YutaniSprite = krk_createClass(module, "Sprite", GraphicsContext); + YutaniSprite->allocSize = sizeof(struct YutaniSprite); + YutaniSprite->_ongcsweep = _sprite_sweep; + krk_defineNative(&YutaniSprite->methods, ".__init__", _sprite_init); + krk_finalizeClass(YutaniSprite); + Decorator = krk_createClass(module, "Decorator", NULL); krk_defineNative(&Decorator->fields, "get_bounds", _decor_get_bounds); krk_defineNative(&Decorator->fields, "render", _decor_render); From 2e7bc921b77b96477bb9564a8aaacf2bd62fefc3 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 25 Jan 2021 09:21:38 +0900 Subject: [PATCH 071/102] kuroko[yutani]: Add __repr__s for types --- lib/kuroko/_yutani.c | 55 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 53f49e8c..b1e55c03 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -179,6 +179,17 @@ static KrkValue _message_getattr(int argc, KrkValue argv[]) { #undef TO_INT #undef WID +static KrkValue _yutani_repr(int argc, KrkValue argv[]) { + struct YutaniClass * self = (struct YutaniClass*)AS_INSTANCE(argv[0]); + char out[500]; + size_t len = sprintf(out, "Yutani(fd=%d,server=%s,display_width=%d,display_height=%d)", + fileno(self->yctx->sock), + self->yctx->server_ident, + (int)self->yctx->display_width, + (int)self->yctx->display_height); + return OBJECT_VAL(krk_copyString(out,len)); +} + static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { if (yctxInstance) { krk_runtimeError(vm.exceptions.valueError, "class 'Yutani' is a singleton and has already been initialized."); @@ -442,6 +453,20 @@ static void _sprite_sweep(KrkInstance * self) { if (sprite->ctx) free(sprite->ctx); } +static KrkValue _sprite_repr(int argc, KrkValue argv[]) { + struct YutaniSprite * self = (struct YutaniSprite *)AS_INSTANCE(argv[0]); + + KrkValue file; + krk_tableGet(&self->inst.fields, OBJECT_VAL(S("file")), &file); + + char out[500]; + size_t len = sprintf(out, "Sprite('%s',width=%d,height=%d)", + !IS_STRING(file) ? "" : AS_CSTRING(file), + (int)self->sprite.width, + (int)self->sprite.height); + return OBJECT_VAL(krk_copyString(out,len)); +} + static KrkValue _sprite_init(int argc, KrkValue argv[]) { if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniSprite)) return krk_runtimeError(vm.exceptions.typeError, "expected sprite"); @@ -457,10 +482,24 @@ static KrkValue _sprite_init(int argc, KrkValue argv[]) { } self->ctx = init_graphics_sprite(&self->sprite); + krk_attachNamedValue(&self->inst.fields, "file", argv[1]); return argv[0]; } +static KrkValue _window_repr(int argc, KrkValue argv[]) { + struct WindowClass * self = (struct WindowClass*)AS_INSTANCE(argv[0]); + KrkValue title; + krk_tableGet(&self->inst.fields, OBJECT_VAL(S("title")), &title); + char out[500]; + size_t len = sprintf(out, "Window(wid=%d,title=%s,width=%d,height=%d)", + self->window->wid, + IS_NONE(title) ? "" : AS_CSTRING(title), + (int)self->window->width, + (int)self->window->height); + return OBJECT_VAL(krk_copyString(out,len)); +} + static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { if (!yctxInstance) return krk_runtimeError(vm.exceptions.valueError, "Compositor is not initialized"); if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) @@ -669,6 +708,10 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&Message->methods, ".__getattr__", _message_getattr); krk_finalizeClass(Message); + /** + * class color(): + * rgb(a) value for use with graphics functions. + */ YutaniColor = krk_createClass(module, "color", NULL); YutaniColor->allocSize = sizeof(struct YutaniColor); krk_defineNative(&YutaniColor->methods, ".__init__", _yutani_color_init); @@ -688,6 +731,7 @@ KrkValue krk_module_onload__yutani(void) { Yutani->allocSize = sizeof(struct YutaniClass); krk_defineNative(&Yutani->methods, ":display_width", _yutani_display_width); krk_defineNative(&Yutani->methods, ":display_height", _yutani_display_height); + krk_defineNative(&Yutani->methods, ".__repr__", _yutani_repr); krk_defineNative(&Yutani->methods, ".__init__", _yutani_init); krk_defineNative(&Yutani->methods, ".poll", _yutani_poll); krk_defineNative(&Yutani->methods, ".wait_for", _yutani_wait_for); @@ -705,7 +749,6 @@ KrkValue krk_module_onload__yutani(void) { GraphicsContext = krk_createClass(module, "GraphicsContext", NULL); GraphicsContext->allocSize = sizeof(struct GraphicsContext); - /* No initializers for now until I bother with them... */ krk_defineNative(&GraphicsContext->methods, ":width", _gfx_width); krk_defineNative(&GraphicsContext->methods, ":height", _gfx_height); krk_defineNative(&GraphicsContext->methods, ".fill", _gfx_fill); @@ -718,11 +761,11 @@ KrkValue krk_module_onload__yutani(void) { YutaniWindow = krk_createClass(module, "Window", GraphicsContext); YutaniWindow->allocSize = sizeof(struct WindowClass); + krk_defineNative(&YutaniWindow->methods, ".__repr__", _window_repr); krk_defineNative(&YutaniWindow->methods, ".__init__", _window_init); krk_defineNative(&YutaniWindow->methods, ".flip", _window_flip); krk_defineNative(&YutaniWindow->methods, ".move", _window_move); krk_defineNative(&YutaniWindow->methods, ".set_focused", _window_set_focused); - /* Properties */ krk_defineNative(&YutaniWindow->methods, ":wid", _window_wid); krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); krk_finalizeClass(YutaniWindow); @@ -730,6 +773,7 @@ KrkValue krk_module_onload__yutani(void) { YutaniSprite = krk_createClass(module, "Sprite", GraphicsContext); YutaniSprite->allocSize = sizeof(struct YutaniSprite); YutaniSprite->_ongcsweep = _sprite_sweep; + krk_defineNative(&YutaniSprite->methods, ".__repr__", _sprite_repr); krk_defineNative(&YutaniSprite->methods, ".__init__", _sprite_init); krk_finalizeClass(YutaniSprite); @@ -739,13 +783,6 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&Decorator->fields, "handle_event", _decor_handle_event); krk_finalizeClass(Decorator); - - /** - * class MsgKeyEvent(Message): - * type = Message.MSG_KEY_EVENT - */ - //KrkClass * MsgKeyEvent = krk_createClass(module, "MsgKeyEvent", Message); - /* Pop the module object before returning; it'll get pushed again * by the VM before the GC has a chance to run, so it's safe. */ assert(AS_INSTANCE(krk_pop()) == module); From f5b8a02c40832cc3ba6bf762b501c4353f3b1eec Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 25 Jan 2021 10:14:25 +0900 Subject: [PATCH 072/102] kuroko[yutani]: More general function bindings --- lib/kuroko/_yutani.c | 225 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 194 insertions(+), 31 deletions(-) diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index b1e55c03..0790bde5 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -214,27 +214,30 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { return argv[0]; } +#define CHECK_YUTANI() \ + if (argc < 1 || !krk_isInstanceOf(argv[0], Yutani)) \ + return krk_runtimeError(vm.exceptions.typeError, "expected Yutani"); \ + struct YutaniClass * self = (struct YutaniClass*)AS_INSTANCE(argv[0]) + static KrkValue _yutani_display_width(int argc, KrkValue argv[]) { - KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_t * ctx = ((struct YutaniClass*)self)->yctx; - return INTEGER_VAL(ctx->display_width); + CHECK_YUTANI(); + return INTEGER_VAL(self->yctx->display_width); } static KrkValue _yutani_display_height(int argc, KrkValue argv[]) { - KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_t * ctx = ((struct YutaniClass*)self)->yctx; - return INTEGER_VAL(ctx->display_height); + CHECK_YUTANI(); + return INTEGER_VAL(self->yctx->display_height); } static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { - KrkInstance * self = AS_INSTANCE(argv[0]); + CHECK_YUTANI(); int sync = (argc > 1 && IS_BOOLEAN(argv[1])) ? AS_BOOLEAN(argv[1]) : 1; yutani_msg_t * result; if (sync) { - result = yutani_poll(((struct YutaniClass*)self)->yctx); + result = yutani_poll(self->yctx); } else { - result = yutani_poll_async(((struct YutaniClass*)self)->yctx); + result = yutani_poll_async(self->yctx); } if (!result) return NONE_VAL(); @@ -247,9 +250,9 @@ static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { } static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { - if (argc != 2) { krk_runtimeError(vm.exceptions.argumentError, "Expected two arguments"); return NONE_VAL(); } - KrkInstance * self = AS_INSTANCE(argv[0]); - yutani_msg_t * result = yutani_wait_for(((struct YutaniClass*)self)->yctx, AS_INTEGER(argv[1])); + CHECK_YUTANI(); + if (argc != 2 || !IS_INTEGER(argv[1])) { krk_runtimeError(vm.exceptions.argumentError, "expected int for msgtype"); return NONE_VAL(); } + yutani_msg_t * result = yutani_wait_for(self->yctx, AS_INTEGER(argv[1])); KrkInstance * out = krk_newInstance(Message); krk_push(OBJECT_VAL(out)); ((struct MessageClass*)out)->msg = result; @@ -257,6 +260,34 @@ static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { return krk_pop(); } +static KrkValue _yutani_subscribe(int argc, KrkValue argv[]) { + CHECK_YUTANI(); + yutani_subscribe_windows(self->yctx); + return NONE_VAL(); +} + +static KrkValue _yutani_unsubscribe(int argc, KrkValue argv[]) { + CHECK_YUTANI(); + yutani_unsubscribe_windows(self->yctx); + return NONE_VAL(); +} + +static KrkValue _yutani_query_windows(int argc, KrkValue argv[]) { + CHECK_YUTANI(); + yutani_query_windows(self->yctx); + return NONE_VAL(); +} + +static KrkValue _yutani_fileno(int argc, KrkValue argv[]) { + CHECK_YUTANI(); + return INTEGER_VAL(fileno(self->yctx->sock)); +} + +static KrkValue _yutani_query(int argc, KrkValue argv[]) { + CHECK_YUTANI(); + return INTEGER_VAL(yutani_query(self->yctx)); +} + #define GET_ARG(p,name,type) do { \ if (hasKw && krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S(#name)), &name)) { \ if (!krk_isInstanceOf(name,type)) \ @@ -371,7 +402,7 @@ static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { return krk_runtimeError(vm.exceptions.typeError, "solid must be bool"); if (!IS_NONE(radius) && !IS_INTEGER(radius)) return krk_runtimeError(vm.exceptions.typeError, "radius must be int"); - if (!IS_INTEGER(radius) && AS_BOOLEAN(solid)) + if (!IS_NONE(radius) && AS_BOOLEAN(solid)) return krk_runtimeError(vm.exceptions.typeError, "radius and solid can not be used together"); if (AS_BOOLEAN(solid)) { @@ -487,8 +518,14 @@ static KrkValue _sprite_init(int argc, KrkValue argv[]) { return argv[0]; } +#define CHECK_WINDOW() \ + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) \ + return krk_runtimeError(vm.exceptions.typeError, "expected Window"); \ + struct WindowClass * self = (struct WindowClass*)AS_INSTANCE(argv[0]); \ + if (!self->window) return krk_runtimeError(vm.exceptions.valueError, "Window is closed") + static KrkValue _window_repr(int argc, KrkValue argv[]) { - struct WindowClass * self = (struct WindowClass*)AS_INSTANCE(argv[0]); + CHECK_WINDOW(); KrkValue title; krk_tableGet(&self->inst.fields, OBJECT_VAL(S("title")), &title); char out[500]; @@ -548,10 +585,7 @@ static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { } static KrkValue _window_flip(int argc, KrkValue argv[]) { - if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected window"); - KrkInstance * _self = AS_INSTANCE(argv[0]); - struct WindowClass * self = (struct WindowClass*)_self; + CHECK_WINDOW(); if (self->doubleBuffered) { flip(self->ctx); } @@ -560,27 +594,131 @@ static KrkValue _window_flip(int argc, KrkValue argv[]) { } static KrkValue _window_move(int argc, KrkValue argv[]) { - if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected window"); + CHECK_WINDOW(); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) return krk_runtimeError(vm.exceptions.typeError, "expected two integer arguments"); - KrkInstance * _self = AS_INSTANCE(argv[0]); - struct WindowClass * self = (struct WindowClass*)_self; yutani_window_move(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_INTEGER(argv[1]), AS_INTEGER(argv[2])); return NONE_VAL(); } static KrkValue _window_set_focused(int argc, KrkValue argv[]) { - if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected window"); + CHECK_WINDOW(); if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected integer argument"); - KrkInstance * _self = AS_INSTANCE(argv[0]); - struct WindowClass * self = (struct WindowClass*)_self; self->window->focused = AS_INTEGER(argv[1]); return NONE_VAL(); } +static KrkValue _window_close(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + yutani_close(((struct YutaniClass*)yctxInstance)->yctx, self->window); + self->window = NULL; + release_graphics_yutani(self->ctx); + self->ctx = NULL; + return NONE_VAL(); +} + +static KrkValue _window_set_stack(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for z-order"); + int z = AS_INTEGER(argv[1]); + yutani_set_stack(((struct YutaniClass*)yctxInstance)->yctx, self->window, z); + return NONE_VAL(); +} + +static KrkValue _window_update_shape(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for shape specifier"); + int set_shape = AS_INTEGER(argv[1]); + yutani_window_update_shape(((struct YutaniClass*)yctxInstance)->yctx, self->window, set_shape); + return NONE_VAL(); +} + +static KrkValue _window_warp_mouse(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected two int values for x, y"); + int32_t x = AS_INTEGER(argv[1]); + int32_t y = AS_INTEGER(argv[2]); + yutani_window_warp_mouse(((struct YutaniClass*)yctxInstance)->yctx, self->window, x, y); + return NONE_VAL(); +} + +static KrkValue _window_show_mouse(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for show_mouse"); + int show_mouse = AS_INTEGER(argv[1]); + yutani_window_show_mouse(((struct YutaniClass*)yctxInstance)->yctx, self->window, show_mouse); + return NONE_VAL(); +} + +static KrkValue _window_resize_start(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for direction"); + yutani_scale_direction_t direction = AS_INTEGER(argv[1]); + yutani_window_resize_start(((struct YutaniClass*)yctxInstance)->yctx, self->window, direction); + return NONE_VAL(); +} + +static KrkValue _window_resize(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected two int values for width, height"); + uint32_t width = AS_INTEGER(argv[1]); + uint32_t height = AS_INTEGER(argv[2]); + yutani_window_resize(((struct YutaniClass*)yctxInstance)->yctx, self->window, width, height); + return NONE_VAL(); +} + +static KrkValue _window_resize_offer(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected two int values for width, height"); + uint32_t width = AS_INTEGER(argv[1]); + uint32_t height = AS_INTEGER(argv[2]); + yutani_window_resize_offer(((struct YutaniClass*)yctxInstance)->yctx, self->window, width, height); + return NONE_VAL(); +} + +static KrkValue _window_resize_accept(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected two int values for width, height"); + uint32_t width = AS_INTEGER(argv[1]); + uint32_t height = AS_INTEGER(argv[2]); + yutani_window_resize_accept(((struct YutaniClass*)yctxInstance)->yctx, self->window, width, height); + return NONE_VAL(); +} + +static KrkValue _window_resize_done(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + yutani_window_resize_done(((struct YutaniClass*)yctxInstance)->yctx, self->window); + return NONE_VAL(); +} + +static KrkValue _window_advertise(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 2 || !IS_STRING(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected string for title"); + if (argc > 2 && !IS_STRING(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected string for icon"); + + if (argc > 2) { + yutani_window_advertise_icon(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_CSTRING(argv[1]), AS_CSTRING(argv[2])); + } else { + yutani_window_advertise(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_CSTRING(argv[1])); + } + return NONE_VAL(); +} + +static KrkValue _window_special_request(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for request"); + uint32_t request = AS_INTEGER(argv[1]); + yutani_special_request(((struct YutaniClass*)yctxInstance)->yctx, self->window, request); + return NONE_VAL(); +} + #define WINDOW_PROPERTY(name) \ static KrkValue _window_ ## name (int argc, KrkValue argv[]) { \ if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) \ @@ -639,8 +777,6 @@ static KrkValue _decor_render(int argc, KrkValue argv[]) { return NONE_VAL(); } -extern void krk_dumpStack(void); - static KrkValue _yutani_color_init(int argc, KrkValue argv[]) { if (argc < 4 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3]) || (argc > 5) || (argc == 5 && !IS_INTEGER(argv[4]))) return krk_runtimeError(vm.exceptions.typeError, "color() expects three or four integer arguments"); @@ -735,18 +871,22 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&Yutani->methods, ".__init__", _yutani_init); krk_defineNative(&Yutani->methods, ".poll", _yutani_poll); krk_defineNative(&Yutani->methods, ".wait_for", _yutani_wait_for); - #if 0 krk_defineNative(&Yutani->methods, ".subscribe", _yutani_subscribe); krk_defineNative(&Yutani->methods, ".unsubscribe", _yutani_unsubscribe); krk_defineNative(&Yutani->methods, ".query_windows", _yutani_query_windows); + krk_defineNative(&Yutani->methods, ".fileno", _yutani_fileno); + krk_defineNative(&Yutani->methods, ".query", _yutani_query); + #if 0 krk_defineNative(&Yutani->methods, ".focus_window", _yutani_focus_window); krk_defineNative(&Yutani->methods, ".session_end", _yutani_session_end); krk_defineNative(&Yutani->methods, ".key_bind", _yutani_key_bind); - krk_defineNative(&Yutani->methods, ".query", _yutani_query); - krk_defineNative(&Yutani->methods, ".fileno", _yutani_fileno); #endif krk_finalizeClass(Yutani); + /** + * class GraphicsContext(): + * ctx = gfx_context_t * + */ GraphicsContext = krk_createClass(module, "GraphicsContext", NULL); GraphicsContext->allocSize = sizeof(struct GraphicsContext); krk_defineNative(&GraphicsContext->methods, ":width", _gfx_width); @@ -759,6 +899,11 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&GraphicsContext->methods, ".draw_sprite", _gfx_draw_sprite); krk_finalizeClass(GraphicsContext); + /** + * class Window(GraphicsContext): + * ctx = gfx_context_t * + * window = yutani_window_t * + */ YutaniWindow = krk_createClass(module, "Window", GraphicsContext); YutaniWindow->allocSize = sizeof(struct WindowClass); krk_defineNative(&YutaniWindow->methods, ".__repr__", _window_repr); @@ -766,10 +911,28 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&YutaniWindow->methods, ".flip", _window_flip); krk_defineNative(&YutaniWindow->methods, ".move", _window_move); krk_defineNative(&YutaniWindow->methods, ".set_focused", _window_set_focused); + krk_defineNative(&YutaniWindow->methods, ".close", _window_close); + krk_defineNative(&YutaniWindow->methods, ".set_stack", _window_set_stack); + krk_defineNative(&YutaniWindow->methods, ".special_request", _window_special_request); + krk_defineNative(&YutaniWindow->methods, ".resize", _window_resize); + krk_defineNative(&YutaniWindow->methods, ".resize_start", _window_resize_start); + krk_defineNative(&YutaniWindow->methods, ".resize_done", _window_resize_done); + krk_defineNative(&YutaniWindow->methods, ".resize_offer", _window_resize_offer); + krk_defineNative(&YutaniWindow->methods, ".resize_accept", _window_resize_accept); + krk_defineNative(&YutaniWindow->methods, ".update_shape", _window_update_shape); + krk_defineNative(&YutaniWindow->methods, ".show_mouse", _window_show_mouse); + krk_defineNative(&YutaniWindow->methods, ".warp_mouse", _window_warp_mouse); + krk_defineNative(&YutaniWindow->methods, ".set_stack", _window_set_stack); + krk_defineNative(&YutaniWindow->methods, ".advertise", _window_advertise); krk_defineNative(&YutaniWindow->methods, ":wid", _window_wid); krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); krk_finalizeClass(YutaniWindow); + /** + * class Sprite(GraphicsContext): + * ctx = gfx_context_t * + * sprite = sprite_t + */ YutaniSprite = krk_createClass(module, "Sprite", GraphicsContext); YutaniSprite->allocSize = sizeof(struct YutaniSprite); YutaniSprite->_ongcsweep = _sprite_sweep; From 76d674722d73798fc485322c7fea8e2c15016174 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 25 Jan 2021 11:36:38 +0900 Subject: [PATCH 073/102] kuroko[yutani]: Add text rendering bindings --- lib/kuroko/_yutani.c | 139 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 133 insertions(+), 6 deletions(-) diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 0790bde5..720a83dc 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "kuroko/src/kuroko.h" #include "kuroko/src/vm.h" #include "kuroko/src/value.h" @@ -56,6 +57,16 @@ struct YutaniColor { uint32_t color; }; +static KrkClass * YutaniFont; +struct YutaniFont { + KrkInstance inst; + int fontType; + int fontSize; + double fontGamma; + double fontStroke; + uint32_t fontColor; +}; + /** * Convenience wrapper to make a class and attach it to the module, while * handling stack push/pop to keep things from being prematurely GC'd. @@ -814,6 +825,67 @@ static KrkValue _yutani_color_str(int argc, KrkValue argv[]) { return OBJECT_VAL(krk_copyString(tmp,strlen(tmp))); } +#define CHECK_FONT() \ + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniFont)) \ + return krk_runtimeError(vm.exceptions.typeError, "expected Font"); \ + struct YutaniFont * self = (struct YutaniFont*)AS_INSTANCE(argv[0]) + +static KrkValue _font_init(int argc, KrkValue argv[], int hasKw) { + if (hasKw) argc--; + CHECK_FONT(); + + if (argc < 2 || !IS_INTEGER(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected int for font type"); + if (argc < 3 || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected int for font size"); + + KrkValue fontGamma = FLOATING_VAL(1.7); + KrkValue fontStroke = FLOATING_VAL(0.75); + KrkValue fontColor = NONE_VAL(); + if (hasKw) { + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("gamma")), &fontGamma); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("stroke")), &fontStroke); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("color")), &fontColor); + if (!IS_FLOATING(fontGamma)) return krk_runtimeError(vm.exceptions.typeError, "expected float for gamma"); + if (!IS_FLOATING(fontStroke)) return krk_runtimeError(vm.exceptions.typeError, "expected float for stroke"); + if (!krk_isInstanceOf(fontColor, YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color"); + } + + self->fontType = AS_INTEGER(argv[1]); + self->fontSize = AS_INTEGER(argv[2]); + self->fontGamma = AS_FLOATING(fontGamma); + self->fontStroke = AS_FLOATING(fontStroke); + self->fontColor = IS_NONE(fontColor) ? rgb(0,0,0) : ((struct YutaniColor*)AS_INSTANCE(fontColor))->color; + + return argv[0]; +} + +static KrkValue _font_draw_string(int argc, KrkValue argv[]) { + CHECK_FONT(); + if (argc < 2 || !krk_isInstanceOf(argv[1], GraphicsContext)) + return krk_runtimeError(vm.exceptions.typeError, "expected GraphicsContext"); + if (argc < 3 || !IS_STRING(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "expected str"); + if (argc < 5 || !IS_INTEGER(argv[3]) || !IS_INTEGER(argv[4])) + return krk_runtimeError(vm.exceptions.typeError, "expected int coordinate pair"); + + gfx_context_t * ctx = ((struct GraphicsContext*)AS_INSTANCE(argv[1]))->ctx; + const char * str = AS_CSTRING(argv[2]); + int32_t x = AS_INTEGER(argv[3]); + int32_t y = AS_INTEGER(argv[4]); + + return INTEGER_VAL(draw_sdf_string_stroke(ctx,x,y,str,self->fontSize,self->fontColor,self->fontType,self->fontGamma,self->fontStroke)); +} + +static KrkValue _font_width(int argc, KrkValue argv[]) { + CHECK_FONT(); + if (argc < 2 || !IS_STRING(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected str"); + + const char * str = AS_CSTRING(argv[1]); + return INTEGER_VAL(draw_sdf_string_width(str, self->fontSize, self->fontType)); +} + KrkValue krk_module_onload__yutani(void) { module = krk_newInstance(vm.moduleClass); /* Store it on the stack for now so we can do stuff that may trip GC @@ -850,6 +922,7 @@ KrkValue krk_module_onload__yutani(void) { */ YutaniColor = krk_createClass(module, "color", NULL); YutaniColor->allocSize = sizeof(struct YutaniColor); + YutaniColor->docstring = S("color(r,g,b,a=255)\n Representation of an RGB(A) color."); krk_defineNative(&YutaniColor->methods, ".__init__", _yutani_color_init); krk_defineNative(&YutaniColor->methods, ".__repr__", _yutani_color_repr); krk_defineNative(&YutaniColor->methods, ".__str__", _yutani_color_str); @@ -865,6 +938,7 @@ KrkValue krk_module_onload__yutani(void) { */ Yutani = krk_createClass(module, "Yutani", NULL); Yutani->allocSize = sizeof(struct YutaniClass); + Yutani->docstring = S("Yutani()\n Establish a connection to the compositor display server."); krk_defineNative(&Yutani->methods, ":display_width", _yutani_display_width); krk_defineNative(&Yutani->methods, ":display_height", _yutani_display_height); krk_defineNative(&Yutani->methods, ".__repr__", _yutani_repr); @@ -891,12 +965,35 @@ KrkValue krk_module_onload__yutani(void) { GraphicsContext->allocSize = sizeof(struct GraphicsContext); krk_defineNative(&GraphicsContext->methods, ":width", _gfx_width); krk_defineNative(&GraphicsContext->methods, ":height", _gfx_height); - krk_defineNative(&GraphicsContext->methods, ".fill", _gfx_fill); - krk_defineNative(&GraphicsContext->methods, ".flip", _gfx_flip); - krk_defineNative(&GraphicsContext->methods, ".blur", _gfx_blur); - krk_defineNative(&GraphicsContext->methods, ".line", _gfx_line); - krk_defineNative(&GraphicsContext->methods, ".rect", _gfx_rect); - krk_defineNative(&GraphicsContext->methods, ".draw_sprite", _gfx_draw_sprite); + krk_defineNative(&GraphicsContext->methods, ".fill", _gfx_fill)->doc = + "GraphicsContext.fill(color)\n" + " Fill the entire context with the given color."; + krk_defineNative(&GraphicsContext->methods, ".flip", _gfx_flip)->doc = + "GraphicsContext.flip()\n" + " If the context is double-buffered, flip its backbuffer."; + krk_defineNative(&GraphicsContext->methods, ".blur", _gfx_blur)->doc = + "GraphicsContext.blur(radius=2)\n" + " Perform an in-place box blur on this graphics context."; + krk_defineNative(&GraphicsContext->methods, ".line", _gfx_line)->doc = + "GraphicsContext.line(x0,x1,y0,y1,color,thickness=None)\n" + " Draw a line between the given points. If thickness is not provided, uses a\n" + " a simple Bresenham algorithm. If thickness is an int, draws with a box-shaped pen.\n" + " If thickness is a float, draws using a point-distance antialiasing algorithm."; + krk_defineNative(&GraphicsContext->methods, ".rect", _gfx_rect)->doc = + "GraphicsContext.rect(x,y,width,height,color,solid=False,radius=None)\n" + " Draw a filled rectangle. If solid is True, paints the given color directly to\n" + " the underlying backbuffer with no alpha calculations. If radius is provided,\n" + " draws a rounded rectangle."; + krk_defineNative(&GraphicsContext->methods, ".draw_sprite", _gfx_draw_sprite)->doc = + "GraphicsContext.draw_sprite(sprite,x,y,alpha=None,rotation=None,scale=None,color=None)\n" + " Blit a sprite to this graphics context at the given coordinates.\n" + " alpha: float of opacity; 1.0 = fully opaque (default)\n" + " rotation: float of radians; when a rotation is given, the coordinates provided are\n" + " the center of the rendered sprite, rather than the upper left corner.\n" + " scale: (int,int) of final resolution of sprite; can not be used with rotation.\n" + " color: color to paint the sprite as, can not be used with rotation or scale;\n" + " used to paint a given color with this sprite as a 'brush'. Useful for\n" + " colored icons, such as those found in the panel."; krk_finalizeClass(GraphicsContext); /** @@ -906,6 +1003,8 @@ KrkValue krk_module_onload__yutani(void) { */ YutaniWindow = krk_createClass(module, "Window", GraphicsContext); YutaniWindow->allocSize = sizeof(struct WindowClass); + YutaniWindow->docstring = S("Window(width,height,flags=0,title=None,icon=None,doublebuffer=False)\n" + " Create a new window and initializes a graphics rendering context for it."); krk_defineNative(&YutaniWindow->methods, ".__repr__", _window_repr); krk_defineNative(&YutaniWindow->methods, ".__init__", _window_init); krk_defineNative(&YutaniWindow->methods, ".flip", _window_flip); @@ -936,10 +1035,38 @@ KrkValue krk_module_onload__yutani(void) { YutaniSprite = krk_createClass(module, "Sprite", GraphicsContext); YutaniSprite->allocSize = sizeof(struct YutaniSprite); YutaniSprite->_ongcsweep = _sprite_sweep; + YutaniSprite->docstring = S("Sprite(filename)\n Create a sprite from the requested texture file."); krk_defineNative(&YutaniSprite->methods, ".__repr__", _sprite_repr); krk_defineNative(&YutaniSprite->methods, ".__init__", _sprite_init); krk_finalizeClass(YutaniSprite); + /** + * class Font(): + * fontType, fontSize, fontGamma, fontStroke + */ + YutaniFont = krk_createClass(module, "Font", NULL); + YutaniFont->allocSize = sizeof(struct YutaniFont); + YutaniFont->docstring = S("Font(type,size,gamma=1.7,stroke=0.75,color=color(0,0,0))\n" + " Create a Font specification for rendering text."); + krk_defineNative(&YutaniFont->methods, ".__init__", _font_init); + krk_defineNative(&YutaniFont->methods, ".draw_string", _font_draw_string)->doc = + "Font.draw_string(gfxContext, string, x, y)\n" + " Draw text to a graphics context with this font."; + krk_defineNative(&YutaniFont->methods, ".width", _font_width)->doc = + "Font.width(string)\n" + " Calculate the rendered width of the given string when drawn with this font."; + /* Some static values */ +#define ATTACH_FONT(name) krk_attachNamedValue(&YutaniFont->fields, #name, INTEGER_VAL(SDF_ ## name)) + ATTACH_FONT(FONT_THIN); + ATTACH_FONT(FONT_BOLD); + ATTACH_FONT(FONT_MONO); + ATTACH_FONT(FONT_MONO_BOLD); + ATTACH_FONT(FONT_MONO_OBLIQUE); + ATTACH_FONT(FONT_MONO_BOLD_OBLIQUE); + ATTACH_FONT(FONT_OBLIQUE); + ATTACH_FONT(FONT_BOLD_OBLIQUE); + krk_finalizeClass(YutaniFont); + Decorator = krk_createClass(module, "Decorator", NULL); krk_defineNative(&Decorator->fields, "get_bounds", _decor_get_bounds); krk_defineNative(&Decorator->fields, "render", _decor_render); From befb010dc253962d5b9aaf5719b53a163969d87c Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 25 Jan 2021 20:12:13 +0900 Subject: [PATCH 074/102] menu: Changes to support Kuroko bindings --- apps/file-browser.c | 7 ++++++- apps/help-browser.c | 7 ++++++- apps/package-manager.c | 7 ++++++- apps/terminal.c | 7 ++++++- base/usr/include/toaru/menu.h | 4 +++- lib/menu.c | 6 +++--- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/apps/file-browser.c b/apps/file-browser.c index 6f525f8f..ea6a3deb 100644 --- a/apps/file-browser.c +++ b/apps/file-browser.c @@ -1690,6 +1690,11 @@ static void arrow_select(int x, int y) { redraw_window(); } +static void redraw_window_callback(struct menu_bar * self) { + (void)self; + redraw_window(); +} + int main(int argc, char * argv[]) { yctx = yutani_init(); @@ -1727,7 +1732,7 @@ int main(int argc, char * argv[]) { set_title(NULL); menu_bar.entries = menu_entries; - menu_bar.redraw_callback = redraw_window; + menu_bar.redraw_callback = redraw_window_callback; menu_bar.set = menu_set_create(); diff --git a/apps/help-browser.c b/apps/help-browser.c index 128a5fd9..04525c2e 100644 --- a/apps/help-browser.c +++ b/apps/help-browser.c @@ -329,6 +329,11 @@ static void _menu_action_about(struct MenuEntry * entry) { redraw_window(); } +static void redraw_window_callback(struct menu_bar * self) { + (void)self; + redraw_window(); +} + int main(int argc, char * argv[]) { yctx = yutani_init(); @@ -340,7 +345,7 @@ int main(int argc, char * argv[]) { yutani_window_advertise_icon(yctx, main_window, APPLICATION_TITLE, "help"); menu_bar.entries = menu_entries; - menu_bar.redraw_callback = redraw_window; + menu_bar.redraw_callback = redraw_window_callback; menu_bar.set = menu_set_create(); diff --git a/apps/package-manager.c b/apps/package-manager.c index abadf363..b3ea908f 100644 --- a/apps/package-manager.c +++ b/apps/package-manager.c @@ -433,6 +433,11 @@ static void arrow_select(int y) { redraw_window(); } +static void redraw_window_callback(struct menu_bar * self) { + (void)self; + redraw_window(); +} + int main(int argc, char * argv[]) { if (geteuid() != 0) { @@ -455,7 +460,7 @@ int main(int argc, char * argv[]) { yutani_window_advertise_icon(yctx, main_window, APPLICATION_TITLE, "package"); menu_bar.entries = menu_entries; - menu_bar.redraw_callback = redraw_window; + menu_bar.redraw_callback = redraw_window_callback; menu_bar.set = menu_set_create(); diff --git a/apps/terminal.c b/apps/terminal.c index ce30ea4f..1541082f 100644 --- a/apps/terminal.c +++ b/apps/terminal.c @@ -2212,6 +2212,11 @@ static void _menu_action_set_scale(struct MenuEntry * self) { reinit(); } +static void render_decors_callback(struct menu_bar * self) { + (void)self; + render_decors(); +} + int main(int argc, char ** argv) { window_width = char_width * 80; @@ -2324,7 +2329,7 @@ int main(int argc, char ** argv) { /* Set up menus */ terminal_menu_bar.entries = terminal_menu_entries; - terminal_menu_bar.redraw_callback = render_decors; + terminal_menu_bar.redraw_callback = render_decors_callback; struct MenuEntry * _menu_exit = menu_create_normal("exit","exit","Exit", _menu_action_exit); struct MenuEntry * _menu_copy = menu_create_normal(NULL, NULL, "Copy", _menu_action_copy); diff --git a/base/usr/include/toaru/menu.h b/base/usr/include/toaru/menu.h index cc524d7d..c4c76248 100644 --- a/base/usr/include/toaru/menu.h +++ b/base/usr/include/toaru/menu.h @@ -19,6 +19,7 @@ struct MenuList; struct MenuEntry { enum MenuEntry_Type _type; struct MenuList * _owner; + void * _private; int height; /* All must have a height, so put it here. */ int width; /* Actual width */ @@ -115,7 +116,8 @@ struct menu_bar { int num_entries; - void (*redraw_callback)(void); + void * _private; + void (*redraw_callback)(struct menu_bar *); }; extern void menu_bar_render(struct menu_bar * self, gfx_context_t * ctx); diff --git a/lib/menu.c b/lib/menu.c index 7db54537..51154ba7 100644 --- a/lib/menu.c +++ b/lib/menu.c @@ -713,7 +713,7 @@ void menu_key_action(struct MenuList * menu, struct yutani_msg_key_event * me) { int active = (bar->active_entry_idx + 1 + bar->num_entries) % (bar->num_entries); bar->active_entry = &bar->entries[active]; if (bar->redraw_callback) { - bar->redraw_callback(); + bar->redraw_callback(bar); } menu_bar_show_menu(yctx, bar->window, bar, -1, bar->active_entry); } else { @@ -738,7 +738,7 @@ void menu_key_action(struct MenuList * menu, struct yutani_msg_key_event * me) { int active = (menu->_bar->active_entry_idx - 1 + menu->_bar->num_entries) % (menu->_bar->num_entries); menu->_bar->active_entry = &menu->_bar->entries[active]; if (menu->_bar->redraw_callback) { - menu->_bar->redraw_callback(); + menu->_bar->redraw_callback(menu->_bar); } menu_bar_show_menu(yctx, menu->_bar->window, menu->_bar, -1, menu->_bar->active_entry); } else if (menu->parent && menu->parent->window) { @@ -941,7 +941,7 @@ void menu_bar_show_menu(yutani_t * yctx, yutani_window_t * window, struct menu_b self->active_entry = _entries; self->active_entry_idx = i; if (self->redraw_callback) { - self->redraw_callback(); + self->redraw_callback(self); } } From 17ea516e77b24c8260a89f4052bdab6f77abf5ac Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 25 Jan 2021 20:12:39 +0900 Subject: [PATCH 075/102] kuroko[yutani]: finish up basic bindings --- lib/kuroko/_yutani.c | 346 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 346 insertions(+) diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 720a83dc..37410215 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "kuroko/src/kuroko.h" #include "kuroko/src/vm.h" #include "kuroko/src/value.h" @@ -67,6 +68,27 @@ struct YutaniFont { uint32_t fontColor; }; +static KrkClass * MenuBarClass; +struct MenuBarClass { + KrkInstance inst; + struct menu_bar menuBar; +}; + +static KrkClass * MenuListClass; +struct MenuListClass { + KrkInstance inst; + struct MenuList * menuList; +}; + +static KrkClass * MenuEntryClass; +struct MenuEntryClass { + KrkInstance inst; + struct MenuEntry * menuEntry; +}; + +static KrkClass * MenuEntrySubmenuClass; +static KrkClass * MenuEntrySeparatorClass; + /** * Convenience wrapper to make a class and attach it to the module, while * handling stack push/pop to keep things from being prematurely GC'd. @@ -256,6 +278,7 @@ static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { KrkInstance * out = krk_newInstance(Message); krk_push(OBJECT_VAL(out)); ((struct MessageClass*)out)->msg = result; + krk_attachNamedValue(&out->fields, "type", INTEGER_VAL(result->type)); return krk_pop(); } @@ -267,6 +290,7 @@ static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { KrkInstance * out = krk_newInstance(Message); krk_push(OBJECT_VAL(out)); ((struct MessageClass*)out)->msg = result; + krk_attachNamedValue(&out->fields, "type", INTEGER_VAL(result->type)); return krk_pop(); } @@ -299,6 +323,15 @@ static KrkValue _yutani_query(int argc, KrkValue argv[]) { return INTEGER_VAL(yutani_query(self->yctx)); } +static KrkValue _yutani_menu_process_event(int argc, KrkValue argv[]) { + CHECK_YUTANI(); + if (argc < 2 || !krk_isInstanceOf(argv[1],Message)) + return krk_runtimeError(vm.exceptions.typeError, "expected Message"); + struct MessageClass* msg = (struct MessageClass*)AS_INSTANCE(argv[1]); + + return INTEGER_VAL(menu_process_event(self->yctx, msg->msg)); +} + #define GET_ARG(p,name,type) do { \ if (hasKw && krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S(#name)), &name)) { \ if (!krk_isInstanceOf(name,type)) \ @@ -730,6 +763,12 @@ static KrkValue _window_special_request(int argc, KrkValue argv[]) { return NONE_VAL(); } +static KrkValue _window_reinit(int argc, KrkValue argv[]) { + CHECK_WINDOW(); + reinit_graphics_yutani(self->ctx, self->window); + return NONE_VAL(); +} + #define WINDOW_PROPERTY(name) \ static KrkValue _window_ ## name (int argc, KrkValue argv[]) { \ if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) \ @@ -739,6 +778,8 @@ static KrkValue _window_ ## name (int argc, KrkValue argv[]) { \ } WINDOW_PROPERTY(wid); +WINDOW_PROPERTY(x); +WINDOW_PROPERTY(y); WINDOW_PROPERTY(focused); static KrkValue _decor_get_bounds(int argc, KrkValue argv[]) { @@ -788,6 +829,20 @@ static KrkValue _decor_render(int argc, KrkValue argv[]) { return NONE_VAL(); } +static KrkValue _decor_show_default_menu(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "show_default_menu() expects Window"); + if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "show_default_menu() expects int coordinate pair"); + + struct WindowClass * window = (void*)AS_INSTANCE(argv[0]); + int32_t x = AS_INTEGER(argv[1]); + int32_t y = AS_INTEGER(argv[2]); + + decor_show_default_menu(window->window, x, y); + return NONE_VAL(); +} + static KrkValue _yutani_color_init(int argc, KrkValue argv[]) { if (argc < 4 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3]) || (argc > 5) || (argc == 5 && !IS_INTEGER(argv[4]))) return krk_runtimeError(vm.exceptions.typeError, "color() expects three or four integer arguments"); @@ -860,6 +915,11 @@ static KrkValue _font_init(int argc, KrkValue argv[], int hasKw) { return argv[0]; } +static KrkValue _font_size(int argc, KrkValue argv[]) { + CHECK_FONT(); + return INTEGER_VAL(self->fontSize); +} + static KrkValue _font_draw_string(int argc, KrkValue argv[]) { CHECK_FONT(); if (argc < 2 || !krk_isInstanceOf(argv[1], GraphicsContext)) @@ -886,6 +946,240 @@ static KrkValue _font_width(int argc, KrkValue argv[]) { return INTEGER_VAL(draw_sdf_string_width(str, self->fontSize, self->fontType)); } +static void _MenuBar_gcsweep(KrkInstance * _self) { + struct MenuBarClass * self = (struct MenuBarClass*)_self; + if (self->menuBar.entries) { + for (size_t i = 0; self->menuBar.entries[i].title; ++i) { + free(self->menuBar.entries[i].title); + free(self->menuBar.entries[i].action); + } + free(self->menuBar.entries); + } +} + +static void _menubar_callback(struct menu_bar * _self) { + struct MenuBarClass * self = _self->_private; + KrkValue callback; + if (krk_tableGet(&self->inst.fields, OBJECT_VAL(S("callback")), &callback)) { + krk_push(OBJECT_VAL(self)); + krk_callSimple(callback, 1, 0); + } +} + +static KrkValue _MenuBar_init(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + if (argc < 2 || !IS_TUPLE(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected tuple of tuples"); + + struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); + self->menuBar.entries = malloc(sizeof(struct menu_bar_entries) * (AS_TUPLE(argv[1])->values.count + 1)); + for (size_t i = 0; i < AS_TUPLE(argv[1])->values.count; ++i) { + if (!IS_TUPLE(AS_TUPLE(argv[1])->values.values[i]) || + AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.count != 2 || + !IS_STRING(AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.values[0]) || + !IS_STRING(AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.values[1])) { + return krk_runtimeError(vm.exceptions.typeError, "invalid menu bar entry: expected (str,str) but %d is '%s'", + (int)i, krk_typeName(AS_TUPLE(argv[1])->values.values[i])); + } + + KrkString * title = AS_STRING(AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.values[0]); + KrkString * action = AS_STRING(AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.values[1]); + + self->menuBar.entries[i].title = strdup(title->chars); + self->menuBar.entries[i].action = strdup(action->chars); + } + self->menuBar.entries[AS_TUPLE(argv[1])->values.count].title = NULL; + self->menuBar.entries[AS_TUPLE(argv[1])->values.count].action = NULL; + + self->menuBar.set = menu_set_create(); + self->menuBar._private = self; + self->menuBar.redraw_callback = _menubar_callback; + + krk_attachNamedValue(&self->inst.fields, "entries", argv[1]); + + /* Give ourselves a dict to track the same information */ + KrkValue dict = krk_dict_of(0,NULL); + krk_attachNamedValue(&self->inst.fields, "set", dict); + + return argv[0]; +} + +static KrkValue _MenuBar_place(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); + if (argc < 4 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3])) + return krk_runtimeError(vm.exceptions.typeError, "expected int for x, y, width"); + if (argc < 5 || !krk_isInstanceOf(argv[4],YutaniWindow)) + return krk_runtimeError(vm.exceptions.typeError, "expected Window"); + + self->menuBar.x = AS_INTEGER(argv[1]); + self->menuBar.y = AS_INTEGER(argv[2]); + self->menuBar.width = AS_INTEGER(argv[3]); + self->menuBar.window = ((struct WindowClass*)AS_INSTANCE(argv[4]))->window; + return NONE_VAL(); +} + +static KrkValue _MenuBar_render(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); + if (argc < 2 || !krk_isInstanceOf(argv[1], GraphicsContext)) + return krk_runtimeError(vm.exceptions.typeError, "expected GraphicsContext"); + menu_bar_render(&self->menuBar, ((struct GraphicsContext*)AS_INSTANCE(argv[1]))->ctx); + return NONE_VAL(); +} + +static KrkValue _MenuBar_mouse_event(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); + if (argc < 3 || !krk_isInstanceOf(argv[1], YutaniWindow) || + !krk_isInstanceOf(argv[2], Message)) + return krk_runtimeError(vm.exceptions.typeError, "expected Window and Message"); + + struct MessageClass * msg = ((struct MessageClass*)AS_INSTANCE(argv[2])); + struct yutani_msg_window_mouse_event * me = (struct yutani_msg_window_mouse_event*)msg->msg->data; + + return INTEGER_VAL(menu_bar_mouse_event(((struct YutaniClass*)yctxInstance)->yctx, + ((struct WindowClass*)AS_INSTANCE(argv[1]))->window, + &self->menuBar, me, me->new_x, me->new_y)); +} + +static KrkValue _MenuBar_insert(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); + if (argc < 3 || !IS_STRING(argv[1]) || !krk_isInstanceOf(argv[2], MenuListClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected str and MenuList"); + + menu_set_insert(self->menuBar.set, AS_CSTRING(argv[1]), ((struct MenuListClass*)AS_INSTANCE(argv[2]))->menuList); + + /* Also assign it to our dict */ + KrkValue dict = NONE_VAL(); + krk_tableGet(&self->inst.fields, OBJECT_VAL(S("set")), &dict); + if (IS_NONE(dict) || !krk_isInstanceOf(dict,vm.baseClasses.dictClass)) + return krk_runtimeError(vm.exceptions.baseException, "Failed to get set entries?"); + krk_tableSet(AS_DICT(dict), argv[1], argv[2]); + + return NONE_VAL(); +} + +static KrkValue _MenuList_init(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuListClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuList"); + struct MenuListClass * self = (struct MenuListClass*)AS_INSTANCE(argv[0]); + self->menuList = menu_create(); + + /* Give us a list to put entries in for GC tracking and retrieval by kuroko code */ + KrkValue list = krk_list_of(0,NULL); + krk_attachNamedValue(&self->inst.fields, "entries", list); + + return argv[0]; +} + +static KrkValue _MenuList_insert(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuListClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuList"); + struct MenuListClass * self = (struct MenuListClass*)AS_INSTANCE(argv[0]); + if (argc < 2 || !krk_isInstanceOf(argv[1], MenuEntryClass)) + return krk_runtimeError(vm.exceptions.typeError, "Expected MenuEntry"); + + /* Append to menu */ + menu_insert(self->menuList, ((struct MenuEntryClass*)AS_INSTANCE(argv[1]))->menuEntry); + + /* Append to internal list */ + KrkValue list = NONE_VAL(); + krk_tableGet(&self->inst.fields, OBJECT_VAL(S("entries")), &list); + if (IS_NONE(list) || !krk_isInstanceOf(list,vm.baseClasses.listClass)) + return krk_runtimeError(vm.exceptions.baseException, "Failed to get entries?"); + krk_writeValueArray(AS_LIST(list), argv[1]); + + return NONE_VAL(); +} + +static void _MenuEntry_callback_internal(struct MenuEntry * _self) { + struct MenuEntryClass * self = (struct MenuEntryClass *)_self->_private; + KrkValue callback = NONE_VAL(); + krk_tableGet(&self->inst.fields, OBJECT_VAL(S("callback")), &callback); + krk_push(OBJECT_VAL(self)); + krk_callSimple(callback, 1, 0); +} + +static KrkValue _MenuEntry_init(int argc, KrkValue argv[], int hasKw) { + if (hasKw) argc--; + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntryClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntry"); + struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); + + if (argc < 3 || !IS_STRING(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected title and callback"); + + KrkValue icon = NONE_VAL(), action = NONE_VAL(); + if (hasKw) { + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("icon")), &icon); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("action")), &action); + if (!IS_NONE(icon) && !IS_STRING(icon)) + return krk_runtimeError(vm.exceptions.typeError, "icon must be str, not '%s'", krk_typeName(icon)); + if (!IS_NONE(action) && !IS_STRING(action)) + return krk_runtimeError(vm.exceptions.typeError, "action must be str, not '%s'", krk_typeName(action)); + } + + self->menuEntry = menu_create_normal( + IS_STRING(icon) ? AS_CSTRING(icon) : NULL, + IS_STRING(action) ? AS_CSTRING(action) : NULL, + AS_CSTRING(argv[1]), + _MenuEntry_callback_internal); + + self->menuEntry->_private = self; + + krk_attachNamedValue(&self->inst.fields, "callback", argv[2]); + + return argv[0]; +} + +/* TODO properties: icon, action, title */ + +static KrkValue _MenuEntrySubmenu_init(int argc, KrkValue argv[], int hasKw) { + if (hasKw) argc--; + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntrySubmenuClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntrySubmenu"); + + struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); + + if (argc < 2 || !IS_STRING(argv[1])) + return krk_runtimeError(vm.exceptions.typeError, "expected title to be a str"); + + KrkValue icon = NONE_VAL(), action = NONE_VAL(); + if (hasKw) { + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("icon")), &icon); + krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("action")), &action); + if (!IS_NONE(icon) && !IS_STRING(icon)) + return krk_runtimeError(vm.exceptions.typeError, "icon must be str, not '%s'", krk_typeName(icon)); + if (!IS_NONE(action) && !IS_STRING(action)) + return krk_runtimeError(vm.exceptions.typeError, "action must be str, not '%s'", krk_typeName(action)); + } + + self->menuEntry = menu_create_submenu( + IS_STRING(icon) ? AS_CSTRING(icon) : NULL, + IS_STRING(action) ? AS_CSTRING(action) : NULL, + AS_CSTRING(argv[1])); + + self->menuEntry->_private = self; + + return argv[0]; +} + +static KrkValue _MenuEntrySeparator_init(int argc, KrkValue argv[]) { + if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntrySeparatorClass)) + return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntrySeparator"); + struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); + self->menuEntry = menu_create_separator(); + self->menuEntry->_private = self; + return argv[0]; +} + KrkValue krk_module_onload__yutani(void) { module = krk_newInstance(vm.moduleClass); /* Store it on the stack for now so we can do stuff that may trip GC @@ -950,6 +1244,7 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&Yutani->methods, ".query_windows", _yutani_query_windows); krk_defineNative(&Yutani->methods, ".fileno", _yutani_fileno); krk_defineNative(&Yutani->methods, ".query", _yutani_query); + krk_defineNative(&Yutani->methods, ".menu_process_event", _yutani_menu_process_event); #if 0 krk_defineNative(&Yutani->methods, ".focus_window", _yutani_focus_window); krk_defineNative(&Yutani->methods, ".session_end", _yutani_session_end); @@ -1023,7 +1318,10 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&YutaniWindow->methods, ".warp_mouse", _window_warp_mouse); krk_defineNative(&YutaniWindow->methods, ".set_stack", _window_set_stack); krk_defineNative(&YutaniWindow->methods, ".advertise", _window_advertise); + krk_defineNative(&YutaniWindow->methods, ".reinit", _window_reinit); krk_defineNative(&YutaniWindow->methods, ":wid", _window_wid); + krk_defineNative(&YutaniWindow->methods, ":x", _window_x); + krk_defineNative(&YutaniWindow->methods, ":y", _window_y); krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); krk_finalizeClass(YutaniWindow); @@ -1055,6 +1353,7 @@ KrkValue krk_module_onload__yutani(void) { krk_defineNative(&YutaniFont->methods, ".width", _font_width)->doc = "Font.width(string)\n" " Calculate the rendered width of the given string when drawn with this font."; + krk_defineNative(&YutaniFont->methods, ":size", _font_size); /* Some static values */ #define ATTACH_FONT(name) krk_attachNamedValue(&YutaniFont->fields, #name, INTEGER_VAL(SDF_ ## name)) ATTACH_FONT(FONT_THIN); @@ -1067,10 +1366,57 @@ KrkValue krk_module_onload__yutani(void) { ATTACH_FONT(FONT_BOLD_OBLIQUE); krk_finalizeClass(YutaniFont); + MenuBarClass = krk_createClass(module, "MenuBar", NULL); + MenuBarClass->allocSize = sizeof(struct MenuBarClass); + MenuBarClass->_ongcsweep = _MenuBar_gcsweep; + krk_defineNative(&MenuBarClass->methods, ".__init__", _MenuBar_init); + krk_defineNative(&MenuBarClass->methods, ".place", _MenuBar_place); + krk_defineNative(&MenuBarClass->methods, ".render", _MenuBar_render); + krk_defineNative(&MenuBarClass->methods, ".mouse_event", _MenuBar_mouse_event); + krk_defineNative(&MenuBarClass->methods, ".insert", _MenuBar_insert); + krk_finalizeClass(MenuBarClass); + + MenuListClass = krk_createClass(module, "MenuList", NULL); + MenuListClass->allocSize = sizeof(struct MenuListClass); + krk_defineNative(&MenuListClass->methods, ".__init__", _MenuList_init); + krk_defineNative(&MenuListClass->methods, ".insert", _MenuList_insert); + krk_finalizeClass(MenuListClass); + + MenuEntryClass = krk_createClass(module, "MenuEntry", NULL); + MenuEntryClass->allocSize = sizeof(struct MenuEntryClass); + krk_defineNative(&MenuEntryClass->methods, ".__init__", _MenuEntry_init); + krk_finalizeClass(MenuEntryClass); + + MenuEntrySubmenuClass = krk_createClass(module, "MenuEntrySubmenu", MenuEntryClass); + krk_defineNative(&MenuEntrySubmenuClass->methods, ".__init__", _MenuEntrySubmenu_init); + krk_finalizeClass(MenuEntrySubmenuClass); + MenuEntrySeparatorClass = krk_createClass(module, "MenuEntrySeparator", MenuEntryClass); + krk_defineNative(&MenuEntrySeparatorClass->methods, ".__init__", _MenuEntrySeparator_init); + krk_finalizeClass(MenuEntrySeparatorClass); + Decorator = krk_createClass(module, "Decorator", NULL); krk_defineNative(&Decorator->fields, "get_bounds", _decor_get_bounds); krk_defineNative(&Decorator->fields, "render", _decor_render); krk_defineNative(&Decorator->fields, "handle_event", _decor_handle_event); + krk_defineNative(&Decorator->fields, "show_default_menu", _decor_show_default_menu); +#define ATTACH_CONSTANT(name) krk_attachNamedValue(&Decorator->fields, #name, INTEGER_VAL(name)) + ATTACH_CONSTANT(DECOR_OTHER); + ATTACH_CONSTANT(DECOR_CLOSE); + ATTACH_CONSTANT(DECOR_RESIZE); + ATTACH_CONSTANT(DECOR_MAXIMIZE); + ATTACH_CONSTANT(DECOR_RIGHT); + + ATTACH_CONSTANT(DECOR_ACTIVE); + ATTACH_CONSTANT(DECOR_INACTIVE); + + ATTACH_CONSTANT(DECOR_FLAG_DECORATED); + ATTACH_CONSTANT(DECOR_FLAG_NO_MAXIMIZE); + ATTACH_CONSTANT(DECOR_FLAG_TILED); + ATTACH_CONSTANT(DECOR_FLAG_TILE_LEFT); + ATTACH_CONSTANT(DECOR_FLAG_TILE_RIGHT); + ATTACH_CONSTANT(DECOR_FLAG_TILE_UP); + ATTACH_CONSTANT(DECOR_FLAG_TILE_DOWN); +#undef ATTACH_CONSTANT krk_finalizeClass(Decorator); /* Pop the module object before returning; it'll get pushed again From 72d138a3f56cf58118f45231381158197be5b098 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Mon, 25 Jan 2021 20:13:52 +0900 Subject: [PATCH 076/102] kuroko[yutani]: Update demo app --- apps/krk_yutani_test.krk | 83 +++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/apps/krk_yutani_test.krk b/apps/krk_yutani_test.krk index dc90cf79..ae37acd6 100644 --- a/apps/krk_yutani_test.krk +++ b/apps/krk_yutani_test.krk @@ -1,36 +1,65 @@ #!/bin/kuroko -import _yutani - -# Connect -let y = _yutani.Yutani() - -# Create window -let w = _yutani.Window(300,200,title="Kuroko Demo") -w.move(100,100) +from _yutani import color, Yutani, Window, Decorator, Message, MenuBar, MenuList, MenuEntry +let y = Yutani() +let w = Window(640,480,title="Test Window",doublebuffer=True) +let mb = MenuBar((("File",'file'),("Help",'help'))) +let _menu_File = MenuList() +let _menu_File_test = MenuEntry("Test",lambda menu: print("hello, world")) +_menu_File.insert(_menu_File_test) +mb.insert('file', _menu_File) +let _menu_Help = MenuList() +let _menu_Help_help = MenuEntry("Help",lambda menu: print("oh no!")) +_menu_Help.insert(_menu_Help_help) +mb.insert('help', _menu_Help) def drawWindow(): - w.fill(_yutani.color(127,127,127)) - _yutani.Decorator.render(w) - w.flip() + w.fill(color(255,255,255)) + Decorator.render(w) + let bounds = Decorator.get_bounds(w) + mb.place(bounds['left_width'],bounds['top_height'],w.width-bounds['width'],w) + mb.render(w) + w.flip() drawWindow() +mb.callback = lambda x: drawWindow() + +print(globals()) + +def handleMouseEvent(msg): + let decResponse = Decorator.handle_event(msg) + if decResponse == Decorator.DECOR_CLOSE: + w.close() + return True + else if decResponse == Decorator.DECOR_RIGHT: + Decorator.show_default_menu(w,w.x+msg.new_x,w.y+msg.new_y) + mb.mouse_event(w,msg) + +def finishResize(msg): + w.resize_accept(msg.width, msg.height) + w.reinit() + drawWindow() + w.resize_done() + w.flip() + while True: - let msg = y.poll() - if msg.type == _yutani.Message.MSG_SESSION_END: - print("Asked to exit.") - break - else if msg.type == _yutani.Message.MSG_KEY_EVENT: - print("key event") - else if msg.type == _yutani.Message.MSG_WINDOW_FOCUS_CHANGE: - print("focus change") - if msg.wid == w.wid: - w.set_focused(msg.focused) - drawWindow() - else if msg.type == _yutani.Message.MSG_WINDOW_MOUSE_EVENT: - if _yutani.Decorator.handle_event(msg) == 2: - print("Clicked close button") - break - print(f"W({msg.wid}) mouse {msg.new_x},{msg.new_y}") + let msg = y.poll() + if y.menu_process_event(msg): + drawWindow() + if msg.type == Message.MSG_SESSION_END: + w.close() + break + else if msg.type == Message.MSG_KEY_EVENT: + print(msg.keycode) + else if msg.type == Message.MSG_WINDOW_FOCUS_CHANGE: + if msg.wid == w.wid: + print("focus changed") + w.set_focused(msg.focused) + drawWindow() + else if msg.type == Message.MSG_RESIZE_OFFER: + finishResize(msg) + else if msg.type == Message.MSG_WINDOW_MOUSE_EVENT: + if msg.wid == w.wid: + if handleMouseEvent(msg): break From 379f8f87a36806827206191c61ab8688138d7fd5 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 26 Jan 2021 08:14:08 +0900 Subject: [PATCH 077/102] kuroko: upstream changes to hasKw --- kuroko | 2 +- lib/kuroko/_yutani.c | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/kuroko b/kuroko index 6e307a38..a254304f 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 6e307a38f7f6bc68a8c581e4d92ed569137bbfe9 +Subproject commit a254304f4084d4b90ef6d0504578ee1eca6f2a40 diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 37410215..8b97b070 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -418,7 +418,6 @@ static KrkValue _gfx_line(int argc, KrkValue argv[]) { } static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { - if (hasKw) argc--; CHECK_GFX(); if (argc != 6 || @@ -461,7 +460,6 @@ static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { } static KrkValue _gfx_draw_sprite(int argc, KrkValue argv[], int hasKw) { - if (hasKw) argc--; CHECK_GFX(); if (argc < 2 || !krk_isInstanceOf(argv[1], YutaniSprite)) @@ -589,8 +587,6 @@ static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) return krk_runtimeError(vm.exceptions.argumentError, "Expected at least two (integer) arguments (width, height)"); - if (hasKw) argc--; - KrkInstance * _self = AS_INSTANCE(argv[0]); struct WindowClass * self = (struct WindowClass*)_self; krk_integer_type width = AS_INTEGER(argv[1]); @@ -886,7 +882,6 @@ static KrkValue _yutani_color_str(int argc, KrkValue argv[]) { struct YutaniFont * self = (struct YutaniFont*)AS_INSTANCE(argv[0]) static KrkValue _font_init(int argc, KrkValue argv[], int hasKw) { - if (hasKw) argc--; CHECK_FONT(); if (argc < 2 || !IS_INTEGER(argv[1])) @@ -1108,7 +1103,6 @@ static void _MenuEntry_callback_internal(struct MenuEntry * _self) { } static KrkValue _MenuEntry_init(int argc, KrkValue argv[], int hasKw) { - if (hasKw) argc--; if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntryClass)) return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntry"); struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); @@ -1142,7 +1136,6 @@ static KrkValue _MenuEntry_init(int argc, KrkValue argv[], int hasKw) { /* TODO properties: icon, action, title */ static KrkValue _MenuEntrySubmenu_init(int argc, KrkValue argv[], int hasKw) { - if (hasKw) argc--; if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntrySubmenuClass)) return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntrySubmenu"); From d66cde0a5bf4c5bdca4745d4949a9edd2ef45267 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 26 Jan 2021 08:49:09 +0900 Subject: [PATCH 078/102] kuroko: also pull in version number bump to 1.0.0-rc1 --- kuroko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kuroko b/kuroko index a254304f..135bf801 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit a254304f4084d4b90ef6d0504578ee1eca6f2a40 +Subproject commit 135bf801964365b1bfcc6518ae60439b41aba88c From d66dfde98dc91627e858cbddd4781c421e46ba7e Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 26 Jan 2021 09:13:04 +0900 Subject: [PATCH 079/102] v1.13.2 --- kernel/sys/version.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/sys/version.c b/kernel/sys/version.c index 8d3b00c2..409d06cf 100644 --- a/kernel/sys/version.c +++ b/kernel/sys/version.c @@ -18,7 +18,7 @@ char * __kernel_version_format = "%d.%d.%d-%s"; /* Version numbers X.Y.Z */ int __kernel_version_major = 1; int __kernel_version_minor = 13; -int __kernel_version_lower = 1; +int __kernel_version_lower = 2; /* Kernel build suffix, which doesn't necessarily * mean anything, but can be used to distinguish From da58a6329d8388f1dd4b365be968ae0a86d88340 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 29 Jan 2021 16:45:52 +0900 Subject: [PATCH 080/102] bim: Preview of Bim 3 --- apps/bim-core.h | 548 ++ apps/bim.c | 4928 ++++------------- base/home/local/.bim3rc | 25 + base/home/local/.bimrc | 19 - base/usr/share/bim/themes/ansi.bimscript | 51 - .../usr/share/bim/themes/citylights.bimscript | 32 - base/usr/share/bim/themes/light.bimscript | 34 - base/usr/share/bim/themes/solarized.bimscript | 32 - base/usr/share/bim/themes/sunsmoke.bimscript | 68 - base/usr/share/bim/themes/wombat.bimscript | 39 - kuroko | 2 +- 11 files changed, 1504 insertions(+), 4274 deletions(-) create mode 100644 apps/bim-core.h create mode 100644 base/home/local/.bim3rc delete mode 100644 base/home/local/.bimrc delete mode 100644 base/usr/share/bim/themes/ansi.bimscript delete mode 100644 base/usr/share/bim/themes/citylights.bimscript delete mode 100644 base/usr/share/bim/themes/light.bimscript delete mode 100644 base/usr/share/bim/themes/solarized.bimscript delete mode 100644 base/usr/share/bim/themes/sunsmoke.bimscript delete mode 100644 base/usr/share/bim/themes/wombat.bimscript diff --git a/apps/bim-core.h b/apps/bim-core.h new file mode 100644 index 00000000..9b3d3145 --- /dev/null +++ b/apps/bim-core.h @@ -0,0 +1,548 @@ +#ifndef _BIM_CORE_H +#define _BIM_CORE_H + +#define _XOPEN_SOURCE 700 +#define _DARWIN_C_SOURCE +#define _DEFAULT_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __DATE__ +# define BIM_BUILD_DATE " built " __DATE__ " at " __TIME__ +#else +# define BIM_BUILD_DATE DATE "" +#endif + +#ifdef GIT_TAG +# define TAG "-" GIT_TAG +#else +# define TAG "-alpha" +#endif + +#define BIM_VERSION "3.0.0" TAG +#define BIM_COPYRIGHT "Copyright 2012-2021 K. Lange <\033[3mklange@toaruos.org\033[23m>" + +#define BLOCK_SIZE 4096 +#define ENTER_KEY '\r' +#define LINE_FEED '\n' +#define BACKSPACE_KEY 0x08 +#define DELETE_KEY 0x7F +#define DEFAULT_KEY_WAIT (global_config.background_task ? 0 : -1) + +enum Key { + KEY_TIMEOUT = -1, + KEY_CTRL_AT = 0, /* Base */ + KEY_CTRL_A, KEY_CTRL_B, KEY_CTRL_C, KEY_CTRL_D, KEY_CTRL_E, KEY_CTRL_F, KEY_CTRL_G, KEY_CTRL_H, + KEY_CTRL_I, KEY_CTRL_J, KEY_CTRL_K, KEY_CTRL_L, KEY_CTRL_M, KEY_CTRL_N, KEY_CTRL_O, KEY_CTRL_P, + KEY_CTRL_Q, KEY_CTRL_R, KEY_CTRL_S, KEY_CTRL_T, KEY_CTRL_U, KEY_CTRL_V, KEY_CTRL_W, KEY_CTRL_X, + KEY_CTRL_Y, KEY_CTRL_Z, /* Note we keep ctrl-z mapped in termios as suspend */ + KEY_CTRL_OPEN, KEY_CTRL_BACKSLASH, KEY_CTRL_CLOSE, KEY_CTRL_CARAT, KEY_CTRL_UNDERSCORE, + /* Space... */ + /* Some of these are equivalent to things above */ + KEY_BACKSPACE = 0x08, + KEY_LINEFEED = '\n', + KEY_ENTER = '\r', + KEY_TAB = '\t', + /* Basic printable characters go here. */ + /* Delete is special */ + KEY_DELETE = 0x7F, + /* Unicode codepoints go here */ + KEY_ESCAPE = 0x400000, /* Escape would normally be 27, but is special because reasons */ + KEY_F1, KEY_F2, KEY_F3, KEY_F4, + KEY_F5, KEY_F6, KEY_F7, KEY_F8, + KEY_F9, KEY_F10, KEY_F11, KEY_F12, + /* TODO ALT, SHIFT, etc., for F keys */ + KEY_MOUSE, /* Must be followed with a 3-byte mouse read */ + KEY_MOUSE_SGR, /* Followed by an SGR-style sequence of mouse data */ + KEY_HOME, KEY_END, KEY_PAGE_UP, KEY_PAGE_DOWN, + KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT, + KEY_SHIFT_UP, KEY_SHIFT_DOWN, KEY_SHIFT_RIGHT, KEY_SHIFT_LEFT, + KEY_CTRL_UP, KEY_CTRL_DOWN, KEY_CTRL_RIGHT, KEY_CTRL_LEFT, + KEY_ALT_UP, KEY_ALT_DOWN, KEY_ALT_RIGHT, KEY_ALT_LEFT, + KEY_ALT_SHIFT_UP, KEY_ALT_SHIFT_DOWN, KEY_ALT_SHIFT_RIGHT, KEY_ALT_SHIFT_LEFT, + KEY_SHIFT_TAB, + /* Special signals for paste start, paste end */ + KEY_PASTE_BEGIN, KEY_PASTE_END, +}; + +struct key_name_map { + enum Key keycode; + char * name; +}; + +extern struct key_name_map KeyNames[]; + +/** + * Syntax highlighting flags. + */ +#define FLAG_NONE 0 +#define FLAG_KEYWORD 1 +#define FLAG_STRING 2 +#define FLAG_COMMENT 3 +#define FLAG_TYPE 4 +#define FLAG_PRAGMA 5 +#define FLAG_NUMERAL 6 +#define FLAG_ERROR 7 +#define FLAG_DIFFPLUS 8 +#define FLAG_DIFFMINUS 9 +#define FLAG_NOTICE 10 +#define FLAG_BOLD 11 +#define FLAG_LINK 12 +#define FLAG_ESCAPE 13 + +#define FLAG_SELECT (1 << 5) +#define FLAG_SEARCH (1 << 6) + +/** + * Line buffer definitions + * + * Lines are essentially resizable vectors of char_t structs, + * which represent single codepoints in the file. + */ +typedef struct { + uint32_t display_width:4; + uint32_t flags:7; + uint32_t codepoint:21; +} __attribute__((packed)) char_t; + +/** + * Lines have available and actual lengths, describing + * how much space was allocated vs. how much is being + * used at the moment. + */ +typedef struct { + int available; + int actual; + int istate; + int is_current; + int rev_status; + char_t text[]; +} line_t; + +typedef struct background_task { + struct _env * env; + void (*func)(struct background_task*); + struct background_task * next; + int _private_i; + void * _private_p; +} background_task_t; + +/** + * Global configuration state + * + * At the moment, this is all in a global, but in the future + * this should be passed around to various functions. + */ +typedef struct { + /* Terminal size */ + int term_width, term_height; + int bottom_size; + + line_t ** yanks; + size_t yank_count; + int yank_is_full_lines; + + int tty_in; + + const char * bimrc_path; + const char * syntax_fallback; + uint32_t * search; + + int overlay_mode; + line_t * command_buffer; + + int command_offset, command_col_no; + struct syntax_definition * command_syn, * command_syn_back; + int history_point; + int search_direction; + int prev_line, prev_col, prev_coffset, prev_offset; + + unsigned int highlight_on_open:1; + unsigned int initial_file_is_read_only:1; + unsigned int go_to_line:1; + unsigned int break_from_selection:1; + unsigned int can_scroll:1; + unsigned int can_hideshow:1; + unsigned int can_altscreen:1; + unsigned int can_mouse:1; + unsigned int can_unicode:1; + unsigned int can_bright:1; + unsigned int can_title:1; + unsigned int can_bce:1; + unsigned int can_24bit:1; + unsigned int can_256color:1; + unsigned int can_italic:1; + unsigned int can_insert:1; + unsigned int can_bracketedpaste:1; + unsigned int can_sgrmouse:1; + + unsigned int history_enabled:1; + unsigned int highlight_parens:1; + unsigned int smart_case:1; + unsigned int highlight_current_line:1; + unsigned int shift_scrolling:1; + unsigned int check_git:1; + unsigned int color_gutter:1; + unsigned int relative_lines:1; + unsigned int numbers:1; + unsigned int horizontal_shift_scrolling:1; + unsigned int hide_statusbar:1; + unsigned int tabs_visible:1; + unsigned int autohide_tabs:1; + unsigned int smart_complete:1; + unsigned int has_terminal:1; + unsigned int search_wraps:1; + + int cursor_padding; + int split_percent; + int scroll_amount; + int tab_offset; + + char * tab_indicator; + char * space_indicator; + + background_task_t * background_task; + background_task_t * tail_task; + +} global_config_t; + +#define OVERLAY_MODE_NONE 0 +#define OVERLAY_MODE_READ_ONE 1 +#define OVERLAY_MODE_COMMAND 2 +#define OVERLAY_MODE_SEARCH 3 +#define OVERLAY_MODE_COMPLETE 4 +#define OVERLAY_MODE_FILESEARCH 5 + +#define HISTORY_SENTINEL 0 +#define HISTORY_INSERT 1 +#define HISTORY_DELETE 2 +#define HISTORY_REPLACE 3 +#define HISTORY_REMOVE_LINE 4 +#define HISTORY_ADD_LINE 5 +#define HISTORY_REPLACE_LINE 6 +#define HISTORY_MERGE_LINES 7 +#define HISTORY_SPLIT_LINE 8 + +#define HISTORY_BREAK 10 + +typedef struct history { + struct history * previous; + struct history * next; + int type; + int line; + int col; + union { + struct { + int lineno; + int offset; + int codepoint; + int old_codepoint; + } insert_delete_replace; + + struct { + int lineno; + line_t * contents; + line_t * old_contents; + } remove_replace_line; + + struct { + int lineno; + int split; + } add_merge_split_lines; + } contents; +} history_t; + +/** + * Buffer data + * + * A buffer describes a file, and stores + * its name as well as the editor state + * (cursor offsets, etc.) and the actual + * line buffers. + */ +typedef struct _env { + unsigned int loading:1; + unsigned int tabs:1; + unsigned int modified:1; + unsigned int readonly:1; + unsigned int indent:1; + unsigned int checkgitstatusonwrite:1; + unsigned int crnl:1; + unsigned int numbers:1; + unsigned int gutter:1; + unsigned int slowop:1; + + int highlighting_paren; + int maxcolumn; + + short mode; + short tabstop; + + char * file_name; + int offset; + int coffset; + int line_no; + int line_count; + int line_avail; + int col_no; + int preferred_column; + struct syntax_definition * syntax; + line_t ** lines; + + history_t * history; + history_t * last_save_history; + + int width; + int left; + + int start_line; + int sel_col; + int start_col; + int prev_line; +} buffer_t; + +struct theme_def { + const char * name; + void * callable; +}; + +extern struct theme_def * themes; + +extern void add_colorscheme(struct theme_def theme); + +struct syntax_state { + buffer_t * env; + line_t * line; + int line_no; + int state; + int i; +}; + +struct completion_match { + char * string; + char * file; + char * search; +}; + +struct syntax_definition { + char * name; + char ** ext; + int (*calculate)(struct syntax_state *); + int prefers_spaces; + int (*completion_qualifier)(int c); + int (*completion_matcher)(uint32_t * comp, struct completion_match ** matches, int * matches_count, int complete_match, int * matches_len, buffer_t * env); + void * krkFunc; + void * krkClass; +}; + +extern struct syntax_definition * syntaxes; + +/** + * Editor mode states + */ +#define MODE_NORMAL 0 +#define MODE_INSERT 1 +#define MODE_LINE_SELECTION 2 +#define MODE_REPLACE 3 +#define MODE_CHAR_SELECTION 4 +#define MODE_COL_SELECTION 5 +#define MODE_COL_INSERT 6 +#define MODE_DIRECTORY_BROWSE 7 + +struct action_def { + char * name; + void (*action)(); + int options; + const char * description; +}; + +extern struct action_def * mappable_actions; + +#define ARG_IS_INPUT 0x01 /* Takes the key that triggered it as the first argument */ +#define ARG_IS_CUSTOM 0x02 /* Takes a custom argument which is specific to the method */ +#define ARG_IS_PROMPT 0x04 /* Prompts for an argument. */ +#define ACTION_IS_RW 0x08 /* Needs to be able to write. */ + +#define BIM_ACTION(name, options, description) \ + void name (); /* Define the action with unknown arguments */ \ + void __attribute__((constructor)) _install_ ## name (void) { \ + add_action((struct action_def){#name, name, options, description}); \ + } \ + void name + +struct command_def { + char * name; + int (*command)(char *, int, char * arg[]); + const char * description; +}; + +#define BIM_COMMAND(cmd_name, cmd_str, description) \ + int bim_command_ ## cmd_name (char * cmd, int argc, char * argv[]); \ + void __attribute__((constructor)) _install_cmd_ ## cmd_name (void) { \ + add_command((struct command_def){cmd_str, bim_command_ ## cmd_name, description}); \ + } \ + int bim_command_ ## cmd_name (char * cmd __attribute__((unused)), int argc __attribute__((unused)), char * argv[] __attribute__((unused))) + +#define BIM_ALIAS(alias, alias_name, cmd_name) \ + void __attribute__((constructor)) _install_alias_ ## alias_name (void) { \ + add_command((struct command_def){alias, bim_command_ ## cmd_name, "Alias for " #cmd_name}); \ + } + +#define BIM_PREFIX_COMMAND(cmd_name, cmd_prefix, description) \ + int bim_command_ ## cmd_name (char * cmd, int argc, char * argv[]); \ + void __attribute__((constructor)) _install_cmd_ ## cmd_name (void) { \ + add_prefix_command((struct command_def){cmd_prefix, bim_command_ ## cmd_name, description}); \ + } \ + int bim_command_ ## cmd_name (char * cmd __attribute__((unused)), int argc __attribute__((unused)), char * argv[] __attribute__((unused))) + +extern const char * flag_to_color(int _flag); +extern void redraw_line(int x); +extern int git_examine(char * filename); +extern void search_next(void); +extern void set_preferred_column(void); +extern void quit(const char * message); +extern void close_buffer(void); +extern void set_syntax_by_name(const char * name); +extern void rehighlight_search(line_t * line); +extern void try_to_center(); +extern int read_one_character(char * message); +extern void bim_unget(int c); +#define bim_getch() bim_getch_timeout(200) +extern int bim_getch_timeout(int timeout); +extern buffer_t * buffer_new(void); +extern FILE * open_biminfo(void); +extern int fetch_from_biminfo(buffer_t * buf); +extern int update_biminfo(buffer_t * buf, int is_open); +extern buffer_t * buffer_close(buffer_t * buf); +extern int to_eight(uint32_t codepoint, char * out); +extern char * name_from_key(enum Key keycode); +extern void add_action(struct action_def action); +extern void open_file(char * file); +extern void recalculate_selected_lines(void); +extern void add_command(struct command_def command); +extern void add_prefix_command(struct command_def command); +extern void render_command_input_buffer(void); +extern void unhighlight_matching_paren(void); + +extern void add_syntax(struct syntax_definition def); + +struct ColorName { + const char * name; + const char ** value; +}; + +extern struct ColorName color_names[]; + +struct bim_function { + char * command; + struct bim_function * next; +}; + +extern struct bim_function ** user_functions; +extern int run_function(char * name); +extern int has_function(char * name); +extern void find_matching_paren(int * out_line, int * out_col, int in_col); +extern void render_error(char * message, ...); +extern void render_commandline_message(char * message, ...); +extern void pause_for_key(void); + +#define add_match(match_string, match_file, match_search) do { \ + if (*matches_count == *matches_len) { \ + (*matches_len) *= 2; \ + *matches = realloc(*matches, sizeof(struct completion_match) * (*matches_len)); \ + } \ + (*matches)[*matches_count].string = strdup(match_string); \ + (*matches)[*matches_count].file = strdup(match_file); \ + (*matches)[*matches_count].search = strdup(match_search); \ + (*matches_count)++; \ +} while (0) + +#define add_if_match(name,desc) do { \ + int i = 0; \ + while (comp[i] && comp[i] == (unsigned char)name[i]) i++; \ + if (comp[i] == '\0') { \ + add_match(name,desc,""); \ + } \ +} while (0) + +struct action_map { + int key; + void (*method)(); + int options; + int arg; +}; + +#define opt_rep 0x1 /* This action will be repeated */ +#define opt_arg 0x2 /* This action will take a specified argument */ +#define opt_char 0x4 /* This action will read a character to pass as an argument */ +#define opt_nav 0x8 /* This action will consume the nav buffer as its argument */ +#define opt_rw 0x10 /* Must not be read-only */ +#define opt_norm 0x20 /* Returns to normal mode */ +#define opt_byte 0x40 /* Same as opt_char but forces a byte */ + +struct mode_names { + const char * description; + const char * name; + struct action_map ** mode; +}; + +extern struct mode_names mode_names[]; + +#define paint(length, flag) do { for (int i = 0; i < (length) && state->i < state->line->actual; i++, state->i++) { \ + state->line->text[state->i].flags = (state->line->text[state->i].flags & (3 << 5)) | (flag); \ +} } while (0) +#define charat() (state->i < state->line->actual ? state->line->text[(state->i)].codepoint : -1) +#define nextchar() (state->i + 1 < state->line->actual ? state->line->text[(state->i+1)].codepoint : -1) +#define lastchar() (state->i - 1 >= 0 ? state->line->text[(state->i-1)].codepoint : -1) +#define skip() (state->i++) +#define charrel(x) ((state->i + (x) >= 0 && state->i + (x) < state->line->actual) ? state->line->text[(state->i+(x))].codepoint : -1) + +extern int find_keywords(struct syntax_state * state, char ** keywords, int flag, int (*keyword_qualifier)(int c)); +extern int match_and_paint(struct syntax_state * state, const char * keyword, int flag, int (*keyword_qualifier)(int c)); +extern void paint_single_string(struct syntax_state * state); +extern void paint_simple_string(struct syntax_state * state); +extern int common_comment_buzzwords(struct syntax_state * state); +extern int paint_comment(struct syntax_state * state); +extern int match_forward(struct syntax_state * state, char * c); +extern struct syntax_definition * find_syntax_calculator(const char * name); + +#define nest(lang, low) \ + do { \ + state->state = (state->state < 1 ? 0 : state->state - low); \ + do { state->state = lang(state); } while (state->state == 0); \ + if (state->state == -1) return low; \ + return state->state + low; \ + } while (0) + +/* Some of the C stuff is widely used */ +extern int c_keyword_qualifier(int c); +extern int paint_c_numeral(struct syntax_state * state); +extern int paint_c_comment(struct syntax_state * state); +extern void paint_c_char(struct syntax_state * state); + +/* Hacky workaround for isdigit not really accepting Unicode stuff */ +static __attribute__((used)) int _isdigit(int c) { if (c > 128) return 0; return isdigit(c); } +static __attribute__((used)) int _isxdigit(int c) { if (c > 128) return 0; return isxdigit(c); } + +#undef isdigit +#undef isxdigit +#define isdigit(c) _isdigit(c) +#define isxdigit(c) _isxdigit(c) + +#endif /* _BIM_CORE_H */ diff --git a/apps/bim.c b/apps/bim.c index 763fdc01..23e917b1 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,9 +1,3 @@ -/** - * This is a baked, single-file version of bim. - * It was built Sat Jan 23 15:24:02 2021 - * It is based on git commit b434cb81295d16f62ee8519079f59beaca50f3f3 - */ -#define GIT_TAG "b434cb8-baked" /* Bim - A Text Editor * * Copyright (C) 2012-2020 K. Lange @@ -20,561 +14,17 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - -/* Included from bim-core.h */ -#define _XOPEN_SOURCE 700 -#define _DARWIN_C_SOURCE -#define _DEFAULT_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __DATE__ -# define BIM_BUILD_DATE " built " __DATE__ " at " __TIME__ -#else -# define BIM_BUILD_DATE DATE "" -#endif - -#ifdef GIT_TAG -# define TAG "-" GIT_TAG +#include "bim-core.h" +#ifdef __toaru__ +#include +#include "vm.h" +#include "debug.h" #else -# define TAG "" +#include "kuroko/src/kuroko.h" +#include "kuroko/src/vm.h" +#include "kuroko/src/debug.h" #endif -#define BIM_VERSION "2.7.1" TAG -#define BIM_COPYRIGHT "Copyright 2012-2020 K. Lange <\033[3mklange@toaruos.org\033[23m>" - -#define BLOCK_SIZE 4096 -#define ENTER_KEY '\r' -#define LINE_FEED '\n' -#define BACKSPACE_KEY 0x08 -#define DELETE_KEY 0x7F -#define DEFAULT_KEY_WAIT -1 - -enum Key { - KEY_TIMEOUT = -1, - KEY_CTRL_AT = 0, /* Base */ - KEY_CTRL_A, KEY_CTRL_B, KEY_CTRL_C, KEY_CTRL_D, KEY_CTRL_E, KEY_CTRL_F, KEY_CTRL_G, KEY_CTRL_H, - KEY_CTRL_I, KEY_CTRL_J, KEY_CTRL_K, KEY_CTRL_L, KEY_CTRL_M, KEY_CTRL_N, KEY_CTRL_O, KEY_CTRL_P, - KEY_CTRL_Q, KEY_CTRL_R, KEY_CTRL_S, KEY_CTRL_T, KEY_CTRL_U, KEY_CTRL_V, KEY_CTRL_W, KEY_CTRL_X, - KEY_CTRL_Y, KEY_CTRL_Z, /* Note we keep ctrl-z mapped in termios as suspend */ - KEY_CTRL_OPEN, KEY_CTRL_BACKSLASH, KEY_CTRL_CLOSE, KEY_CTRL_CARAT, KEY_CTRL_UNDERSCORE, - /* Space... */ - /* Some of these are equivalent to things above */ - KEY_BACKSPACE = 0x08, - KEY_LINEFEED = '\n', - KEY_ENTER = '\r', - KEY_TAB = '\t', - /* Basic printable characters go here. */ - /* Delete is special */ - KEY_DELETE = 0x7F, - /* Unicode codepoints go here */ - KEY_ESCAPE = 0x400000, /* Escape would normally be 27, but is special because reasons */ - KEY_F1, KEY_F2, KEY_F3, KEY_F4, - KEY_F5, KEY_F6, KEY_F7, KEY_F8, - KEY_F9, KEY_F10, KEY_F11, KEY_F12, - /* TODO ALT, SHIFT, etc., for F keys */ - KEY_MOUSE, /* Must be followed with a 3-byte mouse read */ - KEY_MOUSE_SGR, /* Followed by an SGR-style sequence of mouse data */ - KEY_HOME, KEY_END, KEY_PAGE_UP, KEY_PAGE_DOWN, - KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT, - KEY_SHIFT_UP, KEY_SHIFT_DOWN, KEY_SHIFT_RIGHT, KEY_SHIFT_LEFT, - KEY_CTRL_UP, KEY_CTRL_DOWN, KEY_CTRL_RIGHT, KEY_CTRL_LEFT, - KEY_ALT_UP, KEY_ALT_DOWN, KEY_ALT_RIGHT, KEY_ALT_LEFT, - KEY_ALT_SHIFT_UP, KEY_ALT_SHIFT_DOWN, KEY_ALT_SHIFT_RIGHT, KEY_ALT_SHIFT_LEFT, - KEY_SHIFT_TAB, - /* Special signals for paste start, paste end */ - KEY_PASTE_BEGIN, KEY_PASTE_END, -}; - -struct key_name_map { - enum Key keycode; - char * name; -}; - -extern struct key_name_map KeyNames[]; - -/** - * Syntax highlighting flags. - */ -#define FLAG_NONE 0 -#define FLAG_KEYWORD 1 -#define FLAG_STRING 2 -#define FLAG_COMMENT 3 -#define FLAG_TYPE 4 -#define FLAG_PRAGMA 5 -#define FLAG_NUMERAL 6 -#define FLAG_ERROR 7 -#define FLAG_DIFFPLUS 8 -#define FLAG_DIFFMINUS 9 -#define FLAG_NOTICE 10 -#define FLAG_BOLD 11 -#define FLAG_LINK 12 -#define FLAG_ESCAPE 13 - -#define FLAG_SELECT (1 << 5) -#define FLAG_SEARCH (1 << 6) - -/** - * Line buffer definitions - * - * Lines are essentially resizable vectors of char_t structs, - * which represent single codepoints in the file. - */ -typedef struct { - uint32_t display_width:4; - uint32_t flags:7; - uint32_t codepoint:21; -} __attribute__((packed)) char_t; - -/** - * Lines have available and actual lengths, describing - * how much space was allocated vs. how much is being - * used at the moment. - */ -typedef struct { - int available; - int actual; - int istate; - int is_current; - int rev_status; - char_t text[]; -} line_t; - -/** - * Global configuration state - * - * At the moment, this is all in a global, but in the future - * this should be passed around to various functions. - */ -typedef struct { - /* Terminal size */ - int term_width, term_height; - int bottom_size; - - line_t ** yanks; - size_t yank_count; - int yank_is_full_lines; - - int tty_in; - - const char * bimrc_path; - const char * syntax_fallback; - uint32_t * search; - - int overlay_mode; - line_t * command_buffer; - - int command_offset, command_col_no; - struct syntax_definition * command_syn, * command_syn_back; - int history_point; - int search_direction; - int prev_line, prev_col, prev_coffset, prev_offset; - - unsigned int highlight_on_open:1; - unsigned int initial_file_is_read_only:1; - unsigned int go_to_line:1; - unsigned int break_from_selection:1; - unsigned int can_scroll:1; - unsigned int can_hideshow:1; - unsigned int can_altscreen:1; - unsigned int can_mouse:1; - unsigned int can_unicode:1; - unsigned int can_bright:1; - unsigned int can_title:1; - unsigned int can_bce:1; - unsigned int can_24bit:1; - unsigned int can_256color:1; - unsigned int can_italic:1; - unsigned int can_insert:1; - unsigned int can_bracketedpaste:1; - unsigned int can_sgrmouse:1; - - unsigned int history_enabled:1; - unsigned int highlight_parens:1; - unsigned int smart_case:1; - unsigned int highlight_current_line:1; - unsigned int shift_scrolling:1; - unsigned int check_git:1; - unsigned int color_gutter:1; - unsigned int relative_lines:1; - unsigned int numbers:1; - unsigned int horizontal_shift_scrolling:1; - unsigned int hide_statusbar:1; - unsigned int tabs_visible:1; - unsigned int autohide_tabs:1; - unsigned int smart_complete:1; - unsigned int has_terminal:1; - unsigned int search_wraps:1; - - int cursor_padding; - int split_percent; - int scroll_amount; - int tab_offset; - - char * tab_indicator; - char * space_indicator; - -} global_config_t; - -#define OVERLAY_MODE_NONE 0 -#define OVERLAY_MODE_READ_ONE 1 -#define OVERLAY_MODE_COMMAND 2 -#define OVERLAY_MODE_SEARCH 3 -#define OVERLAY_MODE_COMPLETE 4 -#define OVERLAY_MODE_FILESEARCH 5 - -#define HISTORY_SENTINEL 0 -#define HISTORY_INSERT 1 -#define HISTORY_DELETE 2 -#define HISTORY_REPLACE 3 -#define HISTORY_REMOVE_LINE 4 -#define HISTORY_ADD_LINE 5 -#define HISTORY_REPLACE_LINE 6 -#define HISTORY_MERGE_LINES 7 -#define HISTORY_SPLIT_LINE 8 - -#define HISTORY_BREAK 10 - -typedef struct history { - struct history * previous; - struct history * next; - int type; - int line; - int col; - union { - struct { - int lineno; - int offset; - int codepoint; - int old_codepoint; - } insert_delete_replace; - - struct { - int lineno; - line_t * contents; - line_t * old_contents; - } remove_replace_line; - - struct { - int lineno; - int split; - } add_merge_split_lines; - } contents; -} history_t; - -/** - * Buffer data - * - * A buffer describes a file, and stores - * its name as well as the editor state - * (cursor offsets, etc.) and the actual - * line buffers. - */ -typedef struct _env { - unsigned int loading:1; - unsigned int tabs:1; - unsigned int modified:1; - unsigned int readonly:1; - unsigned int indent:1; - unsigned int checkgitstatusonwrite:1; - unsigned int crnl:1; - unsigned int numbers:1; - unsigned int gutter:1; - unsigned int slowop:1; - - int highlighting_paren; - int maxcolumn; - - short mode; - short tabstop; - - char * file_name; - int offset; - int coffset; - int line_no; - int line_count; - int line_avail; - int col_no; - int preferred_column; - struct syntax_definition * syntax; - line_t ** lines; - - history_t * history; - history_t * last_save_history; - - int width; - int left; - - int start_line; - int sel_col; - int start_col; - int prev_line; -} buffer_t; - -struct theme_def { - const char * name; - void (*load)(const char * name); -}; - -extern struct theme_def * themes; - -extern void add_colorscheme(struct theme_def theme); - -struct syntax_state { - buffer_t * env; - line_t * line; - int line_no; - int state; - int i; -}; - -struct completion_match { - char * string; - char * file; - char * search; -}; - -struct syntax_definition { - char * name; - char ** ext; - int (*calculate)(struct syntax_state *); - int prefers_spaces; - int (*completion_qualifier)(int c); - int (*completion_matcher)(uint32_t * comp, struct completion_match ** matches, int * matches_count, int complete_match, int * matches_len, buffer_t * env); -}; - -extern struct syntax_definition * syntaxes; - -/** - * Editor mode states - */ -#define MODE_NORMAL 0 -#define MODE_INSERT 1 -#define MODE_LINE_SELECTION 2 -#define MODE_REPLACE 3 -#define MODE_CHAR_SELECTION 4 -#define MODE_COL_SELECTION 5 -#define MODE_COL_INSERT 6 -#define MODE_DIRECTORY_BROWSE 7 - -struct action_def { - char * name; - void (*action)(); - int options; - const char * description; -}; - -extern struct action_def * mappable_actions; - -#define ARG_IS_INPUT 0x01 /* Takes the key that triggered it as the first argument */ -#define ARG_IS_CUSTOM 0x02 /* Takes a custom argument which is specific to the method */ -#define ARG_IS_PROMPT 0x04 /* Prompts for an argument. */ -#define ACTION_IS_RW 0x08 /* Needs to be able to write. */ - -#define BIM_ACTION(name, options, description) \ - void name (); /* Define the action with unknown arguments */ \ - void __attribute__((constructor)) _install_ ## name (void) { \ - add_action((struct action_def){#name, name, options, description}); \ - } \ - void name - -struct command_def { - char * name; - int (*command)(char *, int, char * arg[]); - const char * description; -}; - -#define BIM_COMMAND(cmd_name, cmd_str, description) \ - int bim_command_ ## cmd_name (char * cmd, int argc, char * argv[]); \ - void __attribute__((constructor)) _install_cmd_ ## cmd_name (void) { \ - add_command((struct command_def){cmd_str, bim_command_ ## cmd_name, description}); \ - } \ - int bim_command_ ## cmd_name (char * cmd __attribute__((unused)), int argc __attribute__((unused)), char * argv[] __attribute__((unused))) - -#define BIM_ALIAS(alias, alias_name, cmd_name) \ - void __attribute__((constructor)) _install_alias_ ## alias_name (void) { \ - add_command((struct command_def){alias, bim_command_ ## cmd_name, "Alias for " #cmd_name}); \ - } - -#define BIM_PREFIX_COMMAND(cmd_name, cmd_prefix, description) \ - int bim_command_ ## cmd_name (char * cmd, int argc, char * argv[]); \ - void __attribute__((constructor)) _install_cmd_ ## cmd_name (void) { \ - add_prefix_command((struct command_def){cmd_prefix, bim_command_ ## cmd_name, description}); \ - } \ - int bim_command_ ## cmd_name (char * cmd __attribute__((unused)), int argc __attribute__((unused)), char * argv[] __attribute__((unused))) - -extern const char * flag_to_color(int _flag); -extern void redraw_line(int x); -extern int git_examine(char * filename); -extern void search_next(void); -extern void set_preferred_column(void); -extern void quit(const char * message); -extern void close_buffer(void); -extern void set_syntax_by_name(const char * name); -extern void rehighlight_search(line_t * line); -extern void try_to_center(); -extern int read_one_character(char * message); -extern void bim_unget(int c); -#define bim_getch() bim_getch_timeout(200) -extern int bim_getch_timeout(int timeout); -extern buffer_t * buffer_new(void); -extern FILE * open_biminfo(void); -extern int fetch_from_biminfo(buffer_t * buf); -extern int update_biminfo(buffer_t * buf, int is_open); -extern buffer_t * buffer_close(buffer_t * buf); -extern int to_eight(uint32_t codepoint, char * out); -extern char * name_from_key(enum Key keycode); -extern void add_action(struct action_def action); -extern void open_file(char * file); -extern void recalculate_selected_lines(void); -extern void add_command(struct command_def command); -extern void add_prefix_command(struct command_def command); -extern void render_command_input_buffer(void); -extern void unhighlight_matching_paren(void); - -extern void add_syntax(struct syntax_definition def); - -struct ColorName { - const char * name; - const char ** value; -}; - -extern struct ColorName color_names[]; - -struct bim_function { - char * command; - struct bim_function * next; -}; - -extern struct bim_function ** user_functions; -extern int run_function(char * name); -extern int has_function(char * name); -extern void find_matching_paren(int * out_line, int * out_col, int in_col); -extern void render_error(char * message, ...); -extern void render_commandline_message(char * message, ...); -extern void pause_for_key(void); - -#define add_match(match_string, match_file, match_search) do { \ - if (*matches_count == *matches_len) { \ - (*matches_len) *= 2; \ - *matches = realloc(*matches, sizeof(struct completion_match) * (*matches_len)); \ - } \ - (*matches)[*matches_count].string = strdup(match_string); \ - (*matches)[*matches_count].file = strdup(match_file); \ - (*matches)[*matches_count].search = strdup(match_search); \ - (*matches_count)++; \ -} while (0) - -#define add_if_match(name,desc) do { \ - int i = 0; \ - while (comp[i] && comp[i] == (unsigned char)name[i]) i++; \ - if (comp[i] == '\0') { \ - add_match(name,desc,""); \ - } \ -} while (0) - -struct action_map { - int key; - void (*method)(); - int options; - int arg; -}; - -#define opt_rep 0x1 /* This action will be repeated */ -#define opt_arg 0x2 /* This action will take a specified argument */ -#define opt_char 0x4 /* This action will read a character to pass as an argument */ -#define opt_nav 0x8 /* This action will consume the nav buffer as its argument */ -#define opt_rw 0x10 /* Must not be read-only */ -#define opt_norm 0x20 /* Returns to normal mode */ -#define opt_byte 0x40 /* Same as opt_char but forces a byte */ - -struct mode_names { - const char * description; - const char * name; - struct action_map ** mode; -}; - -extern struct mode_names mode_names[]; - -/* End of bim-core.h */ - -/* Included from bim-syntax.h */ -#define BIM_SYNTAX(name, spaces) \ - __attribute__((constructor)) static void _load_ ## name (void) { \ - add_syntax((struct syntax_definition){#name, syn_ ## name ## _ext, syn_ ## name ## _calculate, spaces, NULL, NULL}); \ - } \ - -#define BIM_SYNTAX_EXT(name, spaces, matcher) \ - __attribute__((constructor)) static void _load_ ## name (void) { \ - add_syntax((struct syntax_definition){#name, syn_ ## name ## _ext, syn_ ## name ## _calculate, spaces, matcher, _match_completions_ ## name}); \ - } \ - -#define BIM_SYNTAX_COMPLETER(name) \ - static int _match_completions_ ## name ( \ - uint32_t * comp __attribute__((unused)), \ - struct completion_match **matches __attribute__((unused)), \ - int * matches_count __attribute__((unused)), \ - int complete_match __attribute__((unused)), \ - int *matches_len __attribute__((unused)), \ - buffer_t * env __attribute__((unused))) - -#define paint(length, flag) do { for (int i = 0; i < (length) && state->i < state->line->actual; i++, state->i++) { state->line->text[state->i].flags = (flag); } } while (0) -#define charat() (state->i < state->line->actual ? state->line->text[(state->i)].codepoint : -1) -#define nextchar() (state->i + 1 < state->line->actual ? state->line->text[(state->i+1)].codepoint : -1) -#define lastchar() (state->i - 1 >= 0 ? state->line->text[(state->i-1)].codepoint : -1) -#define skip() (state->i++) -#define charrel(x) (state->i + (x) < state->line->actual ? state->line->text[(state->i+(x))].codepoint : -1) - -extern int find_keywords(struct syntax_state * state, char ** keywords, int flag, int (*keyword_qualifier)(int c)); -extern int match_and_paint(struct syntax_state * state, const char * keyword, int flag, int (*keyword_qualifier)(int c)); -extern void paint_single_string(struct syntax_state * state); -extern void paint_simple_string(struct syntax_state * state); -extern int common_comment_buzzwords(struct syntax_state * state); -extern int paint_comment(struct syntax_state * state); -extern int match_forward(struct syntax_state * state, char * c); -extern struct syntax_definition * find_syntax_calculator(const char * name); - -#define nest(lang, low) \ - do { \ - state->state = (state->state < 1 ? 0 : state->state - low); \ - do { state->state = lang(state); } while (state->state == 0); \ - if (state->state == -1) return low; \ - return state->state + low; \ - } while (0) - -/* Some of the C stuff is widely used */ -extern int c_keyword_qualifier(int c); -extern int paint_c_numeral(struct syntax_state * state); -extern int paint_c_comment(struct syntax_state * state); -extern void paint_c_char(struct syntax_state * state); - -/* Hacky workaround for isdigit not really accepting Unicode stuff */ -static __attribute__((used)) int _isdigit(int c) { if (c > 128) return 0; return isdigit(c); } -static __attribute__((used)) int _isxdigit(int c) { if (c > 128) return 0; return isxdigit(c); } - -#undef isdigit -#undef isxdigit -#define isdigit(c) _isdigit(c) -#define isxdigit(c) _isxdigit(c) - - -/* End of bim-syntax.h */ - global_config_t global_config = { /* State */ .term_width = 0, @@ -584,7 +34,7 @@ global_config_t global_config = { .yank_count = 0, .yank_is_full_lines = 0, .tty_in = STDIN_FILENO, - .bimrc_path = "~/.bimrc", + .bimrc_path = "~/.bim3rc", .syntax_fallback = NULL, /* Syntax to fall back to if no other match applies */ .search = NULL, .overlay_mode = OVERLAY_MODE_NONE, @@ -634,6 +84,8 @@ global_config_t global_config = { .split_percent = 50, .scroll_amount = 5, .tab_offset = 0, + .background_task = NULL, + .tail_task = NULL, }; struct key_name_map KeyNames[] = { @@ -677,6 +129,17 @@ char * name_from_key(enum Key keycode) { return keyNameTmp; } +#define S(c) (krk_copyString(c,sizeof(c)-1)) + +static KrkClass * syntaxStateClass = NULL; + +struct SyntaxState { + KrkInstance inst; + struct syntax_state state; +}; + +static void schedule_complete_recalc(void); + /** * Theming data * @@ -769,7 +232,6 @@ FLEXIBLE_ARRAY(mappable_actions, add_action, struct action_def, ((struct action_ FLEXIBLE_ARRAY(regular_commands, add_command, struct command_def, ((struct command_def){NULL,NULL,NULL})) FLEXIBLE_ARRAY(prefix_commands, add_prefix_command, struct command_def, ((struct command_def){NULL,NULL,NULL})) FLEXIBLE_ARRAY(themes, add_colorscheme, struct theme_def, ((struct theme_def){NULL,NULL})) -FLEXIBLE_ARRAY(user_functions, add_user_function, struct bim_function *, NULL) /** * Special implementation of getch with a timeout @@ -780,6 +242,7 @@ void bim_unget(int c) { _bim_unget = c; } +void redraw_statusbar(void); int bim_getch_timeout(int timeout) { fflush(stdout); if (_bim_unget != -1) { @@ -796,6 +259,16 @@ int bim_getch_timeout(int timeout) { read(global_config.tty_in, buf, 1); return buf[0]; } else { + background_task_t * task = global_config.background_task; + if (task) { + global_config.background_task = task->next; + task->func(task); + free(task); + if (task->next == NULL) { + global_config.tail_task = NULL; + redraw_statusbar(); + } + } return -1; } } @@ -1256,6 +729,28 @@ buffer_t * buffer_close(buffer_t * buf) { return NULL; } + /* Cancel any background tasks for this env */ + background_task_t * t = global_config.background_task; + background_task_t * last = NULL; + while (t) { + if (t->env == buf) { + if (last) { + last->next = t->next; + } else { + global_config.background_task = t->next; + } + if (!t->next) { + global_config.tail_task = last; + } + background_task_t * tmp = t->next; + free(t); + t = tmp; + } else { + last = t; + t = t->next; + } + } + update_biminfo(buf, 0); /* Clean up lines used by old buffer */ @@ -1340,25 +835,6 @@ const char * flag_to_color(int _flag) { } } -/** - * Find keywords from a list and paint them, assuming they aren't in the middle of other words. - * Returns 1 if a keyword from the list was found, otherwise 0. - */ -int find_keywords(struct syntax_state * state, char ** keywords, int flag, int (*keyword_qualifier)(int c)) { - if (keyword_qualifier(lastchar())) return 0; - if (!keyword_qualifier(charat())) return 0; - for (char ** keyword = keywords; *keyword; ++keyword) { - int d = 0; - while (state->i + d < state->line->actual && state->line->text[state->i+d].codepoint == (*keyword)[d]) d++; - if ((*keyword)[d] == '\0' && (state->i + d >= state->line->actual || !keyword_qualifier(state->line->text[state->i+d].codepoint))) { - paint((int)strlen(*keyword), flag); - return 1; - } - } - - return 0; -} - /** * Match and paint a single keyword. Returns 1 if the keyword was matched and 0 otherwise, * so it can be used for prefix checking for things that need further special handling. @@ -1384,45 +860,6 @@ int match_and_paint(struct syntax_state * state, const char * keyword, int flag, return 0; } -/** - * Paint a basic single-quote string. - */ -void paint_single_string(struct syntax_state * state) { - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '\'') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '\'') { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_STRING); - } - } -} - -/** - * Paint a simple double-quote string. - */ -void paint_simple_string(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '"' */ - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '"') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '"') { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_STRING); - } - } -} - /** * This is a basic character matcher for "keyword" characters. */ @@ -1455,20 +892,6 @@ int paint_comment(struct syntax_state * state) { return -1; } -/** - * Match a word forward and return whether it was matched. - */ -int match_forward(struct syntax_state * state, char * c) { - int i = 0; - while (1) { - if (charrel(i) == -1 && !*c) return 1; - if (charrel(i) != *c) return 0; - c++; - i++; - } - return 0; -} - /** * Find and return a highlighter by name, or return NULL if none was found. */ @@ -1514,7 +937,7 @@ void recalculate_syntax(line_t * line, int line_no) { int is_original = 1; while (1) { for (int i = 0; i < line->actual; ++i) { - line->text[i].flags = 0; + line->text[i].flags = line->text[i].flags & (3 << 5); } if (!env->syntax) { @@ -1523,26 +946,46 @@ void recalculate_syntax(line_t * line, int line_no) { } /* Start from the line's stored in initial state */ - struct syntax_state state; - state.env = env; - state.line = line; - state.line_no = line_no; - state.state = line->istate; - state.i = 0; + struct SyntaxState * s = (void*)krk_newInstance(env->syntax->krkClass); + s->state.env = env; + s->state.line = line; + s->state.line_no = line_no; + s->state.state = line->istate; + s->state.i = 0; while (1) { - state.state = env->syntax->calculate(&state); + ptrdiff_t before = vm.stackTop - vm.stack; + krk_push(OBJECT_VAL(s)); + KrkValue result = krk_callSimple(OBJECT_VAL(env->syntax->krkFunc), 1, 0); + vm.stackTop = vm.stack + before; + if (IS_NONE(result) && (vm.flags & KRK_HAS_EXCEPTION)) { + render_error("Exception occurred in plugin: %s", AS_INSTANCE(vm.currentException)->_class->name->chars); + krk_dumpTraceback(); + fprintf(stderr,"\n\nThis syntax highlighter will be disabled in this environment.\n\n"); + int key = 0; + while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); + env->syntax = NULL; + return; + } else if (!IS_NONE(result) && !IS_INTEGER(result)) { + fprintf(stderr, "Instead of an integer, got %s\n", krk_typeName(result)); + fprintf(stderr,"\n\nThis syntax highlighter will be disabled in this environment.\n\n"); + int key = 0; + while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); + env->syntax = NULL; + return; + } + s->state.state = IS_NONE(result) ? -1 : AS_INTEGER(result); - if (state.state != 0) { + if (s->state.state != 0) { if (line_no == -1) return; rehighlight_search(line); if (!is_original) { redraw_line(line_no); } - if (line_no + 1 < env->line_count && env->lines[line_no+1]->istate != state.state) { + if (line_no + 1 < env->line_count && env->lines[line_no+1]->istate != s->state.state) { line_no++; line = env->lines[line_no]; - line->istate = state.state; + line->istate = s->state.state; if (env->loading) return; is_original = 0; goto _next; @@ -2190,7 +1633,7 @@ void add_indent(int new_line, int old_line, int ignore_brace) { } if (old_line < new_line && !ignore_brace && line_ends_with_brace(env->lines[old_line])) { if (env->tabs) { - char_t c; + char_t c = {0}; c.codepoint = '\t'; c.display_width = env->tabstop; env->lines[new_line] = line_insert(env->lines[new_line], c, env->col_no-1, new_line); @@ -2198,10 +1641,9 @@ void add_indent(int new_line, int old_line, int ignore_brace) { changed = 1; } else { for (int j = 0; j < env->tabstop; ++j) { - char_t c; + char_t c = {0}; c.codepoint = ' '; c.display_width = 1; - c.flags = FLAG_SELECT; env->lines[new_line] = line_insert(env->lines[new_line], c, env->col_no-1, new_line); env->col_no++; } @@ -3426,6 +2868,10 @@ void redraw_statusbar(void) { ADD("complete"); } + if (global_config.background_task) { + ADD("working"); + } + #undef ADD uint8_t * file_name = (uint8_t *)(env->file_name ? env->file_name : "[No Name]"); @@ -3785,10 +3231,9 @@ void highlight_matching_paren(void) { */ void unhighlight_matching_paren(void) { if (env->highlighting_paren > 0 && env->highlighting_paren <= env->line_count) { - for (int i = env->highlighting_paren - 1; i <= env->highlighting_paren + 1; ++i) { - if (i >= 1 && i <= env->line_count) { - recalculate_syntax(env->lines[i-1], i-1); - redraw_line(i-1); + for (int i = 0; i < env->line_count; i++) { + for (int j = 0; j < env->lines[i]->actual; ++j) { + env->lines[i]->text[j].flags &= ~(FLAG_SELECT); } } env->highlighting_paren = -1; @@ -4077,7 +3522,7 @@ void set_syntax_by_name(const char * name) { for (int i = 0; i < env->line_count; ++i) { env->lines[i]->istate = -1; for (int j = 0; j < env->lines[i]->actual; ++j) { - env->lines[i]->text[j].flags = 0; + env->lines[i]->text[j].flags &= (3 << 5); } } env->syntax = NULL; @@ -4090,9 +3535,7 @@ void set_syntax_by_name(const char * name) { for (int i = 0; i < env->line_count; ++i) { env->lines[i]->istate = -1; } - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + schedule_complete_recalc(); redraw_all(); return; } @@ -4180,9 +3623,7 @@ void read_directory_into_buffer(char * file) { env->file_name = strdup(file); env->syntax = find_syntax_calculator("dirent"); - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + schedule_complete_recalc(); env->readonly = 1; env->loading = 0; env->mode = MODE_DIRECTORY_BROWSE; @@ -4239,16 +3680,55 @@ int line_matches(line_t * line, char * string) { } void run_onload(buffer_t * env) { - if (has_function("onload:*")) { - run_function("onload:*"); + /* TODO */ +} + +static void render_syntax_async(background_task_t * task) { + buffer_t * old_env = env; + env = task->env; + struct syntax_definition * old_syn = env->syntax; + env->syntax = task->_private_p; + int line_no = task->_private_i; + + if (env->line_count && line_no < env->line_count) { + int tmp = env->loading; + env->loading = 1; + recalculate_syntax(env->lines[line_no], line_no); + env->loading = tmp; + if (env == old_env) { + redraw_line(line_no); + } } - if (env->syntax) { - char tmp[512]; - sprintf(tmp, "onload:%s", env->syntax->name); - if (has_function(tmp)) { - run_function(tmp); + + env->syntax = old_syn; + env = old_env; +} + +static void schedule_complete_recalc(void) { + if (env->line_count < 1000) { + for (int i = 0; i < env->line_count; ++i) { + recalculate_syntax(env->lines[i], i); + } + return; + } + + /* TODO see if there's already a redraw scheduled */ + for (int i = 0; i < env->line_count; ++i) { + background_task_t * task = malloc(sizeof(background_task_t)); + task->env = env; + task->_private_i = i; + task->_private_p = env->syntax; + task->func = render_syntax_async; + task->next = NULL; + if (global_config.tail_task) { + global_config.tail_task->next = task; + } + global_config.tail_task = task; + if (!global_config.background_task) { + global_config.background_task = task; } } + redraw_statusbar(); } /** @@ -4363,9 +3843,7 @@ void open_file(char * file) { if (!env->syntax && global_config.syntax_fallback) { set_syntax_by_name(global_config.syntax_fallback); } - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + schedule_complete_recalc(); } /* Try to automatically figure out tabs vs. spaces */ @@ -4452,6 +3930,7 @@ void quit(const char * message) { show_cursor(); unset_bracketed_paste(); unset_alternate_screen(); + krk_freeVM(); if (message) { fprintf(stdout, "%s\n", message); } @@ -5008,9 +4487,9 @@ BIM_ACTION(leave_insert, 0, if (env->col_no == 0) env->col_no = 1; set_preferred_column(); } - set_history_break(); - env->mode = MODE_NORMAL; - redraw_commandline(); + set_history_break(); + env->mode = MODE_NORMAL; + redraw_commandline(); } /** @@ -5456,12 +4935,7 @@ int _prefix_command_run_script(char * cmd) { dup2(out[1], STDOUT_FILENO); dup2(in[0], STDIN_FILENO); dup2(fileno(dev_null), STDERR_FILENO); - if (*cmd == '!') { - system(&cmd[1]); /* Yes we can just do this */ - } else { - char * const args[] = {"python3","-c",&cmd[1],NULL}; - execvp("python3",args); - } + system(&cmd[1]); /* Yes we can just do this */ exit(1); } else if (child < 0) { render_error("Failed to fork"); @@ -5535,12 +5009,7 @@ int _prefix_command_run_script(char * cmd) { set_buffered(); /* Call the shell and wait for completion */ - if (*cmd == '!') { - system(&cmd[1]); - } else { - setenv("PYCMD",&cmd[1],1); - system("python3 -c \"$PYCMD\""); - } + system(&cmd[1]); /* Return to the editor, wait for user to press enter. */ set_unbuffered(); @@ -5556,16 +5025,6 @@ int _prefix_command_run_script(char * cmd) { return 0; } -BIM_PREFIX_COMMAND(bang,"!","Executes shell commands.") { - (void)argc, (void)argv; - return _prefix_command_run_script(cmd); -} - -BIM_PREFIX_COMMAND(tick,"`","Executes Python commands.") { - (void)argc, (void)argv; - return _prefix_command_run_script(cmd); -} - int replace_text(int range_top, int range_bot, char divider, char * needle) { char * c = needle; char * replacement = NULL; @@ -5701,6 +5160,7 @@ BIM_COMMAND(e,"e","Open a file") { SWAP(history_t *, env->history, new_env->history); buffer_close(new_env); /* Should probably also free, this needs editing. */ + schedule_complete_recalc(); redraw_all(); } return 0; @@ -5945,7 +5405,9 @@ BIM_COMMAND(noh,"noh","Clear search term") { free(global_config.search); global_config.search = NULL; for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); + for (int j = 0; j < env->lines[i]->actual; ++j) { + env->lines[i]->text[j].flags &= ~(FLAG_SEARCH); + } } redraw_text(); } @@ -6009,23 +5471,21 @@ BIM_COMMAND(version,"version","Show version information.") { return 0; } -void load_colorscheme_script(const char * name) { - static char name_copy[512]; - char tmp[1024]; - snprintf(tmp, 1023, "theme:%s", name); - if (!run_function(tmp)) { - sprintf(name_copy, "%s", name); - current_theme = name_copy; - } -} - BIM_COMMAND(theme,"theme","Set color theme") { if (argc < 2) { render_status_message("theme=%s", current_theme); } else { for (struct theme_def * d = themes; themes && d->name; ++d) { if (!strcmp(argv[1], d->name)) { - d->load(d->name); + ptrdiff_t before = vm.stackTop - vm.stack; + KrkValue result = krk_callSimple(OBJECT_VAL(d->callable), 0, 0); + vm.stackTop = vm.stack + before; + if (IS_NONE(result) && (vm.flags & KRK_HAS_EXCEPTION)) { + render_error("Exception occurred in theme: %s", AS_INSTANCE(vm.currentException)->_class->name->chars); + krk_dumpTraceback(); + int key = 0; + while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); + } redraw_all(); return 0; } @@ -6104,14 +5564,7 @@ BIM_COMMAND(syntax,"syntax","Show or set the active syntax highlighter") { } BIM_COMMAND(recalc,"recalc","Recalculate syntax for the entire file.") { - for (int i = 0; i < env->line_count; ++i) { - env->lines[i]->istate = -1; - } - env->loading = 1; - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } - env->loading = 0; + schedule_complete_recalc(); redraw_all(); return 0; } @@ -6194,7 +5647,9 @@ BIM_COMMAND(hlparen,"hlparen","Show or set the configuration option to highlight global_config.highlight_parens = atoi(argv[1]); if (env) { for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); + for (int j = 0; j < env->lines[i]->actual; ++j) { + env->lines[i]->text[j].flags &= (~FLAG_SELECT); + } } redraw_text(); place_cursor_actual(); @@ -6327,65 +5782,47 @@ BIM_COMMAND(keyname,"keyname","Press and key and get its name.") { return 0; } +int isSubstitutionSymbol(int c) { + if (c >= '!' && c <= '/') return 1; + if (c >= ':' && c <= '@') return 1; + if (c >= '[' && c <= '`') return 1; + if (c >= '{' && c <= '~') return 1; + return 0; +} + +int alldigits(const char * c) { + while (*c) { + if (!isdigit(*c)) return 0; + c++; + } + return 1; +} + /** * Process a user command. */ +int process_krk_command(const char * cmd, KrkValue * outVal); int process_command(char * cmd) { - - if (*cmd == '#') return 0; - - /* First, check prefix commands */ - for (struct command_def * c = prefix_commands; prefix_commands && c->name; ++c) { - if (strstr(cmd, c->name) == cmd && - (!isalpha(cmd[strlen(c->name)]) || !isalpha(cmd[0]))) { - return c->command(cmd, 0, NULL); - } - } - - char * argv[3] = {NULL, NULL, NULL}; - int argc = !!(*cmd); - char cmd_name[512] = {0}; - for (char * c = cmd; *c; ++c) { - if (c-cmd == 511) break; - if (*c == ' ') { - cmd_name[c-cmd] = '\0'; - argv[1] = c+1; - if (*argv[1]) argc++; - break; - } - cmd_name[c-cmd] = *c; - } - - argv[0] = cmd_name; - argv[argc] = NULL; - - if (argc < 1) { - /* no op */ + if (cmd[0] == '-' && alldigits(&cmd[1])) { + goto_line(env->line_no-atoi(&cmd[1])); return 0; - } - - /* Now check regular commands */ - for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { - if (!strcmp(argv[0], c->name)) { - return c->command(cmd, argc, argv); - } - } - - global_config.break_from_selection = 1; - - if (argv[0][0] == '-' && isdigit(argv[0][1])) { - goto_line(env->line_no-atoi(&argv[0][1])); + } else if (cmd[0] == '+' && alldigits(&cmd[1])) { + goto_line(env->line_no+atoi(&cmd[1])); return 0; - } else if (argv[0][0] == '+' && isdigit(argv[0][1])) { - goto_line(env->line_no+atoi(&argv[0][1])); + } else if (alldigits(cmd)) { + goto_line(atoi(cmd)); return 0; - } else if (isdigit(*argv[0])) { - goto_line(atoi(argv[0])); - return 0; - } else { - render_error("Not an editor command: %s", argv[0]); - return 1; + } else if (cmd[0] == '!') { + return _prefix_command_run_script(cmd); + } else if (cmd[0] == 's' && isSubstitutionSymbol(cmd[1])) { + return bim_command_repsome(cmd, 0, NULL); + } else if (cmd[0] == '%' && cmd[1] == 's') { + return bim_command_repall(cmd, 0, NULL); } + + int retval = process_krk_command(cmd, NULL); + + return retval; } /** @@ -6495,13 +5932,6 @@ void command_tab_complete(char * buffer) { goto _accept_candidate; } - if (arg == 1 && (!strcmp(args[0], "call") || !strcmp(args[0], "trycall") || !strcmp(args[0], "showfunction"))) { - for (int i = 0; i < flex_user_functions_count; ++i) { - add_candidate(user_functions[i]->command); - } - goto _accept_candidate; - } - if (arg == 1 && (!strcmp(args[0], "mapkey"))) { for (int i = 0; args[arg][i]; ++i) { if (args[arg][i] == ' ') { @@ -6903,6 +6333,7 @@ BIM_ACTION(command_accept, 0, /* Run the converted command */ global_config.break_from_selection = 0; insert_command_history(tmp); + global_config.overlay_mode = OVERLAY_MODE_NONE; process_command(tmp); free(tmp); @@ -6914,7 +6345,6 @@ BIM_ACTION(command_accept, 0, } /* Leave command mode */ - global_config.overlay_mode = OVERLAY_MODE_NONE; } BIM_ACTION(command_word_delete, 0, @@ -7884,9 +7314,7 @@ BIM_ACTION(undo_history, ACTION_IS_RW, env->lines[i]->istate = 0; recalculate_tabs(env->lines[i]); } - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + schedule_complete_recalc(); place_cursor_actual(); update_title(); redraw_all(); @@ -8000,9 +7428,7 @@ BIM_ACTION(redo_history, ACTION_IS_RW, env->lines[i]->istate = 0; recalculate_tabs(env->lines[i]); } - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + schedule_complete_recalc(); place_cursor_actual(); update_title(); redraw_all(); @@ -8591,7 +8017,9 @@ int point_in_range(int start_line, int end_line, int start_col, int end_col, int if ((env->line_no < env->start_line && ((line) < env->line_no || (line) > env->start_line)) || \ (env->line_no > env->start_line && ((line) > env->line_no || (line) < env->start_line)) || \ (env->line_no == env->start_line && (line) != env->start_line)) { \ - recalculate_syntax(env->lines[(line)-1],(line)-1); \ + for (int j = 0; j < env->lines[(line)-1]->actual; ++j) { \ + env->lines[(line)-1]->text[j].flags &= ~(FLAG_SELECT); \ + } \ } else { \ for (int j = 0; j < env->lines[(line)-1]->actual; ++j) { \ env->lines[(line)-1]->text[j].flags |= FLAG_SELECT; \ @@ -8613,10 +8041,14 @@ int point_in_range(int start_line, int end_line, int start_col, int end_col, int (env->line_no > env->start_line && ((line) > env->line_no || (line) < env->start_line)) || \ (env->line_no == env->start_line && (line) != env->start_line)) { \ /* Line is completely outside selection */ \ - recalculate_syntax(env->lines[(line)-1],(line)-1); \ + for (int j = 0; j < env->lines[(line)-1]->actual; ++j) { \ + env->lines[(line)-1]->text[j].flags &= ~(FLAG_SELECT); \ + } \ } else { \ if ((line) == env->start_line || (line) == env->line_no) { \ - recalculate_syntax(env->lines[(line)-1],(line)-1); \ + for (int j = 0; j < env->lines[(line)-1]->actual; ++j) { \ + env->lines[(line)-1]->text[j].flags &= ~(FLAG_SELECT); \ + } \ } \ for (int j = 0; j < env->lines[(line)-1]->actual; ++j) { \ if (point_in_range(env->start_line, env->line_no,env->start_col, env->col_no, (line), j+1)) { \ @@ -8660,9 +8092,14 @@ BIM_ACTION(adjust_indent, ARG_IS_CUSTOM | ACTION_IS_RW, _redraw_line(start_point+i+1,1); } } else { - for (int j = 0; j < env->tabstop; ++j) { - if (env->lines[start_point + i]->text[0].codepoint == ' ') { - line_delete(env->lines[start_point + i],1,start_point+i); + if (env->lines[start_point + i]->text[0].codepoint == '\t') { + line_delete(env->lines[start_point + i],1,start_point+i); + _redraw_line(start_point+i+1,1); + } else { + for (int j = 0; j < env->tabstop; ++j) { + if (env->lines[start_point + i]->text[0].codepoint == ' ') { + line_delete(env->lines[start_point + i],1,start_point+i); + } } } _redraw_line(start_point+i+1,1); @@ -8701,7 +8138,9 @@ void recalculate_selected_lines(void) { if (end < 1) end = 1; if (end > env->line_count) end = env->line_count; for (int i = (start > 1) ? (start-1) : (start); i <= end; ++i) { - recalculate_syntax(env->lines[i-1],i-1); + for (int j = 0; j < env->lines[i-1]->actual; j++) { + env->lines[i-1]->text[j].flags &= ~(FLAG_SELECT); + } } redraw_all(); } @@ -9536,12 +8975,8 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW, } } env->slowop = 0; + schedule_complete_recalc(); /* Recalculate whole document syntax */ - for (int i = env->line_no - 1; i < env->line_count; ++i) { - env->lines[i]->istate = 0; - } - int line_to_recalculate = (env->line_no > 1 ? env->line_no - 2 : 0); - recalculate_syntax(env->lines[line_to_recalculate], line_to_recalculate); if (direction == 1) { if (global_config.yank_is_full_lines) { env->line_no += 1; @@ -10452,6 +9887,100 @@ void normal_mode(void) { } +KrkClass * CommandDef; +struct CommandDef { + KrkInstance inst; + struct command_def * command; +}; + +int process_krk_command(const char * cmd, KrkValue * outVal) { + place_cursor(global_config.term_width, global_config.term_height); + fprintf(stdout,"\n"); + /* By resetting, we're at 0 frames. */ + krk_resetStack(); + /* Push something so we're not at the bottom of the stack when an + * exception happens, or we'll get the normal interpreter behavior + * and won't be able to examine the exception ourselves. */ + krk_push(NONE_VAL()); + /* If we don't set outSlots for the top frame a syntax error will + * get printed by the interpreter and we can't catch it here. */ + vm.frames[0].outSlots = 1; + /* Call the interpreter */ + KrkValue out = krk_interpret(cmd,0,"",""); + /* If the user typed just a command name, try to execute it. */ + if (krk_isInstanceOf(out,CommandDef)) { + krk_push(out); + out = krk_callSimple(krk_peek(0),0,1); + } + if (outVal) *outVal = out; + int retval = (IS_INTEGER(out)) ? AS_INTEGER(out) : 0; + int hadOutput = 0; + /* If we got an exception during execution, print it now */ + if (vm.flags & KRK_HAS_EXCEPTION) { + if (krk_isInstanceOf(vm.currentException, vm.exceptions.syntaxError)) { + char * argv[3] = {NULL, NULL, NULL}; + int argc = !!(*cmd); + char cmd_name[512] = {0}; + for (char * c = (char*)cmd; *c; ++c) { + if (c-cmd == 511) break; + if (*c == ' ') { + cmd_name[c-cmd] = '\0'; + argv[1] = c+1; + if (*argv[1]) argc++; + break; + } + cmd_name[c-cmd] = *c; + } + + argv[0] = cmd_name; + argv[argc] = NULL; + for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { + if (!strcmp(argv[0], c->name)) { + krk_resetStack(); + return c->command((char*)cmd, argc, argv); + } + } + } + set_fg_color(COLOR_RED); + fflush(stdout); + krk_dumpTraceback(); + set_fg_color(COLOR_FG); + fflush(stdout); + hadOutput = 1; + krk_resetStack(); + } + /* Otherwise, we can look at the result here. */ + if (!IS_NONE(out) && !(IS_INTEGER(out) && AS_INTEGER(out) == 0)) { + krk_push(out); + KrkValue repr = krk_callSimple(OBJECT_VAL(krk_getType(out)->_reprer), 1, 0); + if (IS_STRING(repr)) { + fprintf(stdout, " => %s\n", AS_CSTRING(repr)); + clear_to_end(); + } + krk_resetStack(); + hadOutput = 1; + } + /* If we had either an exception or a non-zero, non-None result, + * we want to wait for a key press before continuing, and avoid + * clearing the screen if the user is going to enter another command. */ + if (hadOutput) { + int c; + while ((c = bim_getch())== -1); + if (c != ':') { + bim_unget(c); + } else { + enter_command(); + global_config.command_offset = 0; + global_config.command_col_no = 1; + render_command_input_buffer(); + return retval; + } + } + global_config.break_from_selection = 1; + redraw_all(); + return retval; +} + /** * Show help text for -? */ @@ -10489,306 +10018,17 @@ static void show_usage(char * argv[]) { #undef _s } -/** - * These methods deal with user functions, which are defined in scripts. - * User functions can be called as actions, or called from the command line. - * They are also used to define themes and preload actions for different filetypes. - * - * Right now, user functions are essentially just a list of commands to run, but - * eventually they should be replaced with a proper scripting language with support - * for looping, conditionals, variables... - * - * Also all of run/has/find loop over the whole index individually, and - * `has` and `find` use the exact same logic, so we probably only need one - * of them (find) and not the other? - */ - -/** - * Delete a user function by deleting all of its commands. - */ -void free_function(struct bim_function * func) { - do { - struct bim_function * next = func->next; - free(func->command); - free(func); - func = next; - } while (func); -} - -/** - * Given a function name, run that function. - */ -int run_function(char * name) { - for (int i = 0; i < flex_user_functions_count; ++i) { - if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { - /* Execute function */ - struct bim_function * this = user_functions[i]->next; - while (this) { - char * tmp = strdup(this->command); - int result = process_command(tmp); - free(tmp); - if (result != 0) { - return result; - } - this = this->next; - } - return 0; - } - } - return -1; -} - -/** - * Does a function by this name exist? - */ -int has_function(char * name) { - for (int i = 0; i < flex_user_functions_count; ++i) { - if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { - return 1; - } - } - return 0; -} - -/** - * Locate a function by name. - */ -int find_function(char * name) { - for (int i = 0; i < flex_user_functions_count; ++i) { - if (user_functions[i] && !strcmp(user_functions[i]->command, name)) { - return i; - } - } - return -1; -} - -BIM_COMMAND(call,"call","Call a function") { - if (argc < 2) { - render_error("Expected function name"); - return 1; - } - int result = run_function(argv[1]); - if (result == -1) { - render_error("Undefined function: %s", argv[1]); - return 1; - } - return result; -} - -BIM_COMMAND(try_call,"trycall","Call a function but return quietly if it fails") { - if (argc < 2) return 0; - run_function(argv[1]); - return 0; -} - -BIM_COMMAND(list_functions,"listfunctions","List functions") { - render_commandline_message(""); - for (int i = 0; i < flex_user_functions_count; ++i) { - render_commandline_message("%s\n", user_functions[i]->command); - } - pause_for_key(); - return 0; -} - -BIM_COMMAND(show_function,"showfunction","Show the commands in a function") { +BIM_COMMAND(runkrk,"runkrk", "Run a kuroko script") { if (argc < 2) return 1; - struct bim_function * this = NULL; - for (int i = 0; i < flex_user_functions_count; ++i) { - if (user_functions[i] && !strcmp(user_functions[i]->command, argv[1])) { - this = user_functions[i]; - break; - } - } - if (!this) { - render_error("Not a function: %s", argv[1]); - return 1; - } - - /* We really should rewrite this so syntax highlighting takes a highlighter */ - struct syntax_definition * old_syntax = env->syntax; - env->syntax = find_syntax_calculator("bimcmd"); - - int i = 0; - - while (this) { - /* Turn command into line */ - line_t * tmp = calloc(sizeof(line_t) + sizeof(char_t) * strlen(this->command),1); - tmp->available = strlen(this->command); - - unsigned char * t = (unsigned char *)this->command; - uint32_t state = 0; - uint32_t c = 0; - int col = 1; - while (*t) { - if (!decode(&state, &c, *t)) { - char_t _c = {codepoint_width(c), 0, c}; - tmp = line_insert(tmp, _c, col - 1, -1); - col++; - } - t++; - } - - render_commandline_message(""); - render_line(tmp, global_config.term_width - 1, 0, -1); - printf("\n"); - this = this->next; - i++; - if (this && i == global_config.term_height - 3) { - printf("(function continues)"); - while (bim_getkey(DEFAULT_KEY_WAIT) == KEY_TIMEOUT); - } - } - - /* Restore previous syntax */ - env->syntax = old_syntax; - - pause_for_key(); - return 0; -} - -BIM_COMMAND(runscript,"runscript","Run a script file") { - if (argc < 2) { - render_error("Expected a script to run"); - return 1; - } - - /* Run commands */ - FILE * f; - char * home; - if (argv[1][0] == '~' && (home = getenv("HOME"))) { - char * tmp = malloc(strlen(argv[1]) + strlen(home) + 4); - sprintf(tmp,"%s%s", home, argv[1]+1); - f = fopen(tmp,"r"); - free(tmp); - } else { - f = fopen(argv[1],"r"); - } - if (!f) { - render_error("Failed to open script"); - return 1; - } - - int retval = 0; - char linebuf[4096]; - int line = 1; - int was_collecting_function = 0; - char * function_name = NULL; - struct bim_function * new_function = NULL; - struct bim_function * last_function = NULL; - - while (!feof(f)) { - memset(linebuf, 0, 4096); - fgets(linebuf, 4095, f); - /* Remove linefeed */ - char * s = strstr(linebuf, "\n"); - if (s) *s = '\0'; - - /* See if this is a special syntax element */ - if (!strncmp(linebuf, "function ", 9)) { - /* Confirm we have a function name */ - if (was_collecting_function) { - break; - } - if (!strlen(linebuf+9)) { - render_error("Syntax error on line %d: function needs a name", line); - retval = 1; - break; - } - function_name = strdup(linebuf+9); - was_collecting_function = 1; - new_function = malloc(sizeof(struct bim_function)); - new_function->command = strdup(function_name); - new_function->next = NULL; - last_function = new_function; - /* Set up function */ - } else if (!strcmp(linebuf,"end")) { - if (!was_collecting_function) { - render_error("Syntax error on line %d: unexpected 'end'", line); - retval = 1; - break; - } - was_collecting_function = 0; - /* See if a function with this name is already defined */ - int this = -1; - for (int i = 0; i < flex_user_functions_count; ++i) { - if (user_functions[i] && !strcmp(user_functions[i]->command, function_name)) { - this = i; - break; - } - } - if (this > -1) { - free_function(user_functions[this]); - user_functions[this] = new_function; - } else { - add_user_function(new_function); - if (strstr(function_name,"theme:") == function_name) { - add_colorscheme((struct theme_def){strdup(function_name+6), load_colorscheme_script}); - } - } - free(function_name); - new_function = NULL; - last_function = NULL; - function_name = NULL; - } else if (was_collecting_function) { - /* Collect function */ - last_function->next = malloc(sizeof(struct bim_function)); - last_function = last_function->next; - char * s = linebuf; - while (*s == ' ') s++; - last_function->command = strdup(s); - last_function->next = NULL; - } else { - int result = process_command(linebuf); - if (result != 0) { - retval = result; - break; - } - } - - line++; - } - if (was_collecting_function) { - free_function(new_function); - render_error("Syntax error on line %d: unexpected end of file while defining function '%s'", line, function_name); - retval = 1; - } + /* In case we're running in a weird context? */ + int previousExitFrame = vm.exitOnFrame; + vm.exitOnFrame = vm.frameCount; + krk_runfile(argv[1],1,"",argv[1]); + vm.exitOnFrame = previousExitFrame; - if (function_name) free(function_name); - fclose(f); - return retval; -} + redraw_all(); -BIM_COMMAND(rundir,"rundir","Run scripts from a directory, in unspecified order") { - if (argc < 2) return 1; - char * file = argv[1]; - DIR * dirp = NULL; - if (file[0] == '~') { - char * home = getenv("HOME"); - if (home) { - char * _file = malloc(strlen(file) + strlen(home) + 4); /* Paranoia */ - sprintf(_file, "%s%s", home, file+1); - dirp = opendir(_file); - free(_file); - } - } else { - dirp = opendir(file); - } - if (!dirp) { - render_error("Directory is not accessible: %s", argv[1]); - return 1; - } - struct dirent * ent = readdir(dirp); - while (ent) { - if (str_ends_with(ent->d_name,".bimscript")) { - char * tmp = malloc(strlen(file) + 1 + strlen(ent->d_name) + 1); - snprintf(tmp, strlen(file) + 1 + strlen(ent->d_name) + 1, "%s/%s", file, ent->d_name); - char * args[] = {"runscript",tmp,NULL}; - bim_command_runscript("runscript", 2, args); - free(tmp); - } - ent = readdir(dirp); - } return 0; } @@ -10843,29 +10083,16 @@ BIM_COMMAND(setcap, "setcap", "Enable or disable quirks/features.") { } BIM_COMMAND(quirk,"quirk","Handle quirks based on environment variables") { - if (argc < 2) goto _quirk_arg_error; + if (argc < 3) goto _quirk_arg_error; char * varname = argv[1]; - char * teststr = strstr(varname, " "); - if (!teststr) goto _quirk_arg_error; - *teststr = '\0'; - teststr++; - - char * arg = strstr(teststr, " "); - if (!arg) goto _quirk_arg_error; - *arg = '\0'; - arg++; - + char * teststr = argv[2]; char * value = getenv(varname); if (!value) return 0; if (strstr(value, teststr) == value) { /* Process quirk strings */ - while (arg) { - char * next = strstr(arg, " "); - if (next) { *next = '\0'; next++; } - /* Quirks disable default-enabled options; continue on error by default */ - set_capability(arg); - arg = next; + for (int i = 3; i < argc; ++i) { + set_capability(argv[i]); } } @@ -10913,8 +10140,8 @@ void load_bimrc(void) { return; } - char * args[] = {"runscript", tmp, NULL}; - if (bim_command_runscript("runscript", 2, args)) { + char * args[] = {"runkrk", tmp, NULL}; + if (bim_command_runkrk("runkrk", 2, args)) { /* Wait */ render_error("Errors were encountered when loading bimrc. Press ENTER to continue."); int c; @@ -10923,110 +10150,615 @@ void load_bimrc(void) { free(tmp); } -/** - * Run global initialization tasks - */ -void initialize(void) { - /* Force empty locale */ - setlocale(LC_ALL, ""); +static int checkClass(KrkClass * _class, KrkClass * base) { + while (_class) { + if (_class == base) return 1; + _class = _class->base; + } + return 0; +} - /* Set up default key mappings */ -#define CLONE_MAP(map) do { \ - int len = 0, i = 0; \ - for (struct action_map * m = _ ## map; m->key != -1; m++, len++); \ - map = malloc(sizeof(struct action_map) * (len + 1)); \ - for (struct action_map * m = _ ## map; m->key != -1; m++, i++) { \ - memcpy(&map[i], m, sizeof(struct action_map)); \ - } \ - map[i].key = -1; \ -} while (0) +static KrkValue krk_bim_syntax_dict; +static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[]) { + if (argc < 1 || !IS_CLASS(argv[0]) || !checkClass(AS_CLASS(argv[0]), syntaxStateClass)) + return krk_runtimeError(vm.exceptions.typeError, "Can not register '%s' as a syntax highlighter, expected subclass of SyntaxState.", krk_typeName(argv[0])); - CLONE_MAP(NORMAL_MAP); - CLONE_MAP(INSERT_MAP); - CLONE_MAP(REPLACE_MAP); - CLONE_MAP(LINE_SELECTION_MAP); - CLONE_MAP(CHAR_SELECTION_MAP); - CLONE_MAP(COL_SELECTION_MAP); - CLONE_MAP(COL_INSERT_MAP); - CLONE_MAP(NAVIGATION_MAP); - CLONE_MAP(ESCAPE_MAP); - CLONE_MAP(COMMAND_MAP); - CLONE_MAP(SEARCH_MAP); - CLONE_MAP(FILESEARCH_MAP); - CLONE_MAP(INPUT_BUFFER_MAP); + KrkValue name = NONE_VAL(), extensions = NONE_VAL(), spaces = BOOLEAN_VAL(0), calculate = NONE_VAL(); + krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("name")), &name); + krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("extensions")), &extensions); + krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("spaces")), &spaces); + krk_tableGet(&AS_CLASS(argv[0])->methods, OBJECT_VAL(S("calculate")), &calculate); + if (!IS_STRING(name)) + return krk_runtimeError(vm.exceptions.typeError, "%s.name must be str", AS_CLASS(argv[0])->name->chars); + if (!IS_TUPLE(extensions)) + return krk_runtimeError(vm.exceptions.typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); + if (!IS_BOOLEAN(spaces)) + return krk_runtimeError(vm.exceptions.typeError, "%s.spaces must be bool", AS_CLASS(argv[0])->name->chars); + if (!IS_CLOSURE(calculate)) + return krk_runtimeError(vm.exceptions.typeError, "%s.calculate must be method, not '%s'", AS_CLASS(argv[0])->name->chars, krk_typeName(calculate)); -#undef CLONE_MAP + /* Convert tuple of strings */ + char ** ext = malloc(sizeof(char *) * (AS_TUPLE(extensions)->values.count + 1)); /* +1 for NULL */ + ext[AS_TUPLE(extensions)->values.count] = NULL; + for (size_t i = 0; i < AS_TUPLE(extensions)->values.count; ++i) { + if (!IS_STRING(AS_TUPLE(extensions)->values.values[i])) { + free(ext); + return krk_runtimeError(vm.exceptions.typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); + } + ext[i] = AS_CSTRING(AS_TUPLE(extensions)->values.values[i]); + } - /* Simple ASCII defaults, but you could use " " as a config option */ - global_config.tab_indicator = strdup(">"); - global_config.space_indicator = strdup("-"); + add_syntax((struct syntax_definition) { + AS_CSTRING(name), /* name */ + ext, /* NULL-terminated array of extensions */ + NULL, /* calculate function */ + AS_BOOLEAN(spaces), /* spaces */ + NULL, /* qualifier */ + NULL, /* matcher */ + AS_OBJECT(calculate), /* krkFunc */ + AS_OBJECT(argv[0]), + }); - /* Load bimrc */ - load_bimrc(); + /* And save it in the module stuff. */ + krk_tableSet(AS_DICT(krk_bim_syntax_dict), name, argv[0]); - /* Initialize space for buffers */ - buffers_avail = 4; - buffers = malloc(sizeof(buffer_t *) * buffers_avail); + return NONE_VAL(); } -/** - * Initialize terminal for editor display. - */ -void init_terminal(void) { - if (!isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) { - global_config.tty_in = STDERR_FILENO; - } - set_alternate_screen(); - set_bracketed_paste(); - update_screen_size(); - get_initial_termios(); - set_unbuffered(); - mouse_enable(); - global_config.has_terminal = 1; +static KrkValue krk_bim_theme_dict; +static KrkValue krk_bim_define_theme(int argc, KrkValue argv[]) { + if (argc < 1 || !IS_CLOSURE(argv[0])) + return krk_runtimeError(vm.exceptions.typeError, "themes must be functions, not '%s'", krk_typeName(argv[0])); - signal(SIGWINCH, SIGWINCH_handler); - signal(SIGCONT, SIGCONT_handler); - signal(SIGTSTP, SIGTSTP_handler); -} + KrkValue name = OBJECT_VAL(AS_CLOSURE(argv[0])->function->name); -struct action_def * find_action(void (*action)()) { - if (!action) return NULL; - for (int i = 0; i < flex_mappable_actions_count; ++i) { - if (action == mappable_actions[i].action) return &mappable_actions[i]; - } - return NULL; -} + add_colorscheme((struct theme_def) { + AS_CSTRING(name), + AS_OBJECT(argv[0]), + }); -void dump_mapping(const char * description, struct action_map * map) { - printf("## %s\n", description); - printf("\n"); - printf("| **Key** | **Action** | **Description** |\n"); - printf("|---------|------------|-----------------|\n"); - struct action_map * m = map; - while (m->key != -1) { - /* Find the name of this action */ - struct action_def * action = find_action(m->method); - printf("| `%s` | `%s` | %s |\n", name_from_key(m->key), - action ? action->name : "(unbound)", - action ? action->description : "(unbound)"); - m++; - } - printf("\n"); + krk_tableSet(AS_DICT(krk_bim_theme_dict), name, argv[0]); + return argv[0]; } -int sort_regular_commands(const void * a, const void * b) { - return strcmp(regular_commands[*(int *)a].name, regular_commands[*(int *)b].name); +int c_keyword_qualifier(int c) { + return isalnum(c) || (c == '_'); } -int sort_prefix_commands(const void * a, const void * b) { - return strcmp(prefix_commands[*(int *)a].name, prefix_commands[*(int *)b].name); +#define BIM_STATE() \ + if (argc < 1 || !krk_isInstanceOf(argv[0],syntaxStateClass)) return krk_runtimeError(vm.exceptions.typeError, "expected state"); \ + KrkInstance * _self = AS_INSTANCE(argv[0]); \ + struct SyntaxState * self = (struct SyntaxState*)_self; \ + struct syntax_state * state = &self->state; + +static KrkValue bim_krk_state_getstate(int argc, KrkValue argv[]) { + BIM_STATE(); + return INTEGER_VAL(state->state); +} +static KrkValue bim_krk_state_setstate(int argc, KrkValue argv[]) { + BIM_STATE(); + if (argc > 1 && IS_INTEGER(argv[1])) { + state->state = AS_INTEGER(argv[1]); + } else { + return krk_runtimeError(vm.exceptions.typeError, "expected int"); + } + return NONE_VAL(); +} +static KrkValue bim_krk_state_index(int argc, KrkValue argv[]) { + BIM_STATE(); + return INTEGER_VAL(state->i); +} +static KrkValue bim_krk_state_lineno(int argc, KrkValue argv[]) { + BIM_STATE(); + return INTEGER_VAL(state->line_no); +} +static KrkValue bim_krk_state_get(int argc, KrkValue argv[]) { + BIM_STATE(); + long arg = AS_INTEGER(argv[1]); + int charRel = charrel(arg); + if (charRel == -1) return NONE_VAL(); + char tmp[8] = {0}; + size_t len = to_eight(charRel, tmp); + return OBJECT_VAL(krk_copyString(tmp,len)); +} +static KrkValue bim_krk_state_isdigit(int argc, KrkValue argv[]) { + if (IS_NONE(argv[1])) return BOOLEAN_VAL(0); + if (!IS_STRING(argv[1])) { + krk_runtimeError(vm.exceptions.typeError, "not a string: %s", krk_typeName(argv[1])); + return BOOLEAN_VAL(0); + } + if (AS_STRING(argv[1])->codesLength > 1) { + krk_runtimeError(vm.exceptions.typeError, "arg must be str of len 1"); + return BOOLEAN_VAL(0); + } + unsigned int c = krk_unicodeCodepoint(AS_STRING(argv[1]), 0); + return BOOLEAN_VAL(!!isdigit(c)); +} +static KrkValue bim_krk_state_isxdigit(int argc, KrkValue argv[]) { + if (!IS_STRING(argv[1])) return BOOLEAN_VAL(0); + if (AS_STRING(argv[1])->length > 1) return BOOLEAN_VAL(0); + int c = AS_CSTRING(argv[1])[0]; + return BOOLEAN_VAL(!!isxdigit(c)); +} +static KrkValue bim_krk_state_paint(int argc, KrkValue argv[]) { + BIM_STATE(); + long howMuch = AS_INTEGER(argv[1]); + if (howMuch == -1) howMuch = state->line->actual; + long whatFlag = AS_INTEGER(argv[2]); + paint(howMuch, whatFlag); + return NONE_VAL(); +} +static KrkValue bim_krk_state_paintComment(int argc, KrkValue argv[]) { + BIM_STATE(); + paint_comment(state); + return NONE_VAL(); +} +static KrkValue bim_krk_state_skip(int argc, KrkValue argv[]) { + BIM_STATE(); + skip(); + return NONE_VAL(); +} +static KrkValue bim_krk_state_cKeywordQualifier(int argc, KrkValue argv[]) { + if (IS_INTEGER(argv[1])) return BOOLEAN_VAL(!!c_keyword_qualifier(AS_INTEGER(argv[1]))); + if (!IS_STRING(argv[1])) return BOOLEAN_VAL(0); + if (AS_STRING(argv[1])->length > 1) return BOOLEAN_VAL(0); + return BOOLEAN_VAL(!!c_keyword_qualifier(AS_CSTRING(argv[1])[0])); +} + +static int callQualifier(KrkValue qualifier, int codepoint) { + krk_push(qualifier); + krk_push(INTEGER_VAL(codepoint)); + KrkValue result = krk_callSimple(krk_peek(1), 1, 1); + if (IS_BOOLEAN(result)) return AS_BOOLEAN(result); + return 0; } -void dump_commands(void) { - printf("## Regular Commands\n"); - printf("\n"); - printf("| **Command** | **Description** |\n"); - printf("|-------------|-----------------|\n"); +static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[]) { + BIM_STATE(); + if (argc < 4 || !krk_isInstanceOf(argv[1], vm.baseClasses.listClass) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "invalid arguments to SyntaxState.findKeywords"); + + KrkValue qualifier = argv[3]; + int flag = AS_INTEGER(argv[2]); + + if (callQualifier(qualifier, lastchar())) return BOOLEAN_VAL(0); + if (!callQualifier(qualifier, charat())) return BOOLEAN_VAL(0); + + for (size_t keyword = 0; keyword < AS_LIST(argv[1])->count; ++keyword) { + if (!IS_STRING(AS_LIST(argv[1])->values[keyword])) + return krk_runtimeError(vm.exceptions.typeError, "expected list of strings, found '%s'", krk_typeName(AS_LIST(argv[1])->values[keyword])); + + KrkString * me = AS_STRING(AS_LIST(argv[1])->values[keyword]); + size_t d = 0; + if (me->type == KRK_STRING_ASCII) { + while (state->i + (int)d < state->line->actual && + d < me->codesLength && + state->line->text[state->i+d].codepoint == me->chars[d]) d++; + } else { + krk_unicodeString(me); + while (state->i + (int)d < state->line->actual && + d < me->codesLength && + state->line->text[state->i+d].codepoint == KRK_STRING_FAST(me,d)) d++; + } + if (d == me->codesLength && (state->i + (int)d >= state->line->actual || + !callQualifier(qualifier,state->line->text[state->i+d].codepoint))) { + paint((int)me->codesLength, flag); + return BOOLEAN_VAL(1); + } + } + return BOOLEAN_VAL(0); +} +static KrkValue bim_krk_state_matchAndPaint(int argc, KrkValue argv[]) { + BIM_STATE(); + if (argc < 4 || !IS_STRING(argv[1]) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions.typeError, "invalid arguments to SyntaxState.matchAndPaint"); + KrkValue qualifier = argv[3]; + int flag = AS_INTEGER(argv[2]); + KrkString * me = AS_STRING(argv[1]); + size_t d = 0; + if (me->type == KRK_STRING_ASCII) { + while (state->i + (int)d < state->line->actual && + d < me->codesLength && + state->line->text[state->i+d].codepoint == me->chars[d]) d++; + } else { + krk_unicodeString(me); + while (state->i + (int)d < state->line->actual && + d < me->codesLength && + state->line->text[state->i+d].codepoint == KRK_STRING_FAST(me,d)) d++; + } + if (d == me->codesLength && (state->i + (int)d >= state->line->actual || + !callQualifier(qualifier,state->line->text[state->i+d].codepoint))) { + paint((int)me->codesLength, flag); + return BOOLEAN_VAL(1); + } + return BOOLEAN_VAL(0); +} +static KrkValue bim_krk_state_rewind(int argc, KrkValue argv[]) { + BIM_STATE(); + state->i -= AS_INTEGER(argv[1]); + return NONE_VAL(); +} +static KrkValue bim_krk_state_commentBuzzwords(int argc, KrkValue argv[]) { + BIM_STATE(); + return BOOLEAN_VAL(common_comment_buzzwords(state)); +} +static KrkValue bim_krk_state_init(int argc, KrkValue argv[]) { + BIM_STATE(); + if (argc < 2 || !krk_isInstanceOf(argv[1], syntaxStateClass)) { + return krk_runtimeError(vm.exceptions.typeError, "Can only initialize subhighlighter from an existing highlighter."); + } + + *state = ((struct SyntaxState*)AS_INSTANCE(argv[1]))->state; + + return argv[0]; +} + +static KrkValue krk_bim_get_commands(int argc, KrkValue argv[]) { + KrkValue myList = krk_list_of(0, NULL); + krk_push(myList); + for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { + krk_writeValueArray(AS_LIST(myList), OBJECT_VAL(krk_copyString(c->name,strlen(c->name)))); + } + for (struct command_def * c = prefix_commands; prefix_commands && c->name; ++c) { + krk_writeValueArray(AS_LIST(myList), OBJECT_VAL(krk_copyString(c->name,strlen(c->name)))); + } + return krk_pop(); +} + +KrkClass * ActionDef; +struct ActionDef { + KrkInstance inst; + struct action_def * action; +}; + +static KrkValue bim_krk_action_call(int argc, KrkValue argv[]) { + struct ActionDef * self = (void*)AS_OBJECT(argv[0]); + + /* Figure out arguments */ + int args = 0; + if (self->action->options & ARG_IS_CUSTOM) args++; + if (self->action->options & ARG_IS_INPUT) args++; + if (self->action->options & ARG_IS_PROMPT) args++; + + int argsAsInts[3] = { 0, 0, 0 }; + for (int i = 0; i < args; i++) { + if (argc < i + 2) + return krk_runtimeError(vm.exceptions.argumentError, "%s() takes %d argument%s", + self->action->name, args, args == 1 ? "" : "s"); + if (IS_INTEGER(argv[i+1])) { + argsAsInts[i] = AS_INTEGER(argv[i+1]); + } else if (IS_STRING(argv[i+1]) && AS_STRING(argv[i+1])->codesLength == 1) { + argsAsInts[i] = krk_unicodeCodepoint(AS_STRING(argv[i+1]), 0); + } else if (IS_BOOLEAN(argv[i+1])) { + argsAsInts[i] = AS_BOOLEAN(argv[i+1]); + } else { + return krk_runtimeError(vm.exceptions.typeError, + "argument to %s() must be int, bool, or str of len 1", + self->action->name); + } + } + + self->action->action(argsAsInts[0], argsAsInts[1], argsAsInts[2]); + + return NONE_VAL(); +} + +static KrkValue bim_krk_command_call(int argc, KrkValue argv[]) { + struct CommandDef * self = (void*)AS_OBJECT(argv[0]); + + char ** args = malloc(sizeof(char*)*argc); + args[0] = strdup(self->command->name); + + for (int i = 1; i < argc; ++i) { + if (IS_STRING(argv[i])) { + args[i] = strdup(AS_CSTRING(argv[i])); + } else { + krk_push(argv[i]); + KrkValue asString = krk_callSimple(OBJECT_VAL(krk_getType(argv[i])->_tostr), 1, 0); + args[i] = strdup(AS_CSTRING(asString)); + } + } + + int result = self->command->command(args[0], argc, args); + + for (int i = 0; i < argc; ++i) { + free(args[i]); + } + + return INTEGER_VAL(result); +} + +static void makeClass(KrkInstance * module, KrkClass ** _class, const char * name, KrkClass * base) { + KrkString * str_Name = krk_copyString(name,strlen(name)); + krk_push(OBJECT_VAL(str_Name)); + *_class = krk_newClass(str_Name, base); + krk_push(OBJECT_VAL(*_class)); + /* Bind it */ + krk_attachNamedObject(&module->fields,name,(KrkObj*)*_class); + krk_pop(); + krk_pop(); +} + +void import_directory(char * dirName) { + const char * extra = ""; + char * dirpath = NULL; + char file[4096]; + if (vm.binpath) { + char * tmp = strdup(vm.binpath); + dirpath = strdup(dirname(tmp)); + extra = "/"; + free(tmp); + sprintf(file, "%s/%s", dirpath, dirName); + } else { + sprintf(file, "%s", dirName); + } + + DIR * dirp = opendir(file); + if (!dirp && dirpath) { + /* Try ../share/bim/dirName */ + sprintf(file, "%s/../share/bim/%s", dirpath, dirName); + extra = "/../share/bim/"; + dirp = opendir(file); + } + if (!dirp) { + /* Try one last fallback */ + if (dirpath) free(dirpath); + dirpath = strdup("/usr/local/share/bim"); + sprintf(file, "%s/%s", dirpath, dirName); + extra = "/"; + dirp = opendir(file); + } + if (!dirp) { + fprintf(stderr, "Could not find startup files: %s\n", dirName); + exit(1); + } + + if (dirpath) { + /* This is a dumb hack. */ + char tmp[4096]; + sprintf(tmp, + "import kuroko\n" + "if '%s%s' not in kuroko.module_paths:\n" + " kuroko.module_paths.insert(0,'%s%s')\n", + dirpath, extra, dirpath, extra); + krk_interpret(tmp,1,"",""); + } + + if (dirpath) free(dirpath); + struct dirent * ent = readdir(dirp); + while (ent) { + if (str_ends_with(ent->d_name,".krk") && !str_ends_with(ent->d_name,"__init__.krk")) { + char * tmp = malloc(strlen(dirName) + 1 + strlen(ent->d_name) + 1 + 7); + snprintf(tmp, strlen(dirName) + 1 + strlen(ent->d_name) + 1 + 7, "import %s.%s", dirName, ent->d_name); + tmp[strlen(tmp)-4] = '\0'; + krk_interpret(tmp,1,"",ent->d_name); + free(tmp); + } + ent = readdir(dirp); + } +} + +static void findBim(char * argv[]) { + /* Try asking /proc */ + char * binpath = realpath("/proc/self/exe", NULL); + if (!binpath) { + if (strchr(argv[0], '/')) { + binpath = realpath(argv[0], NULL); + } else { + /* Search PATH for argv[0] */ + char * _path = strdup(getenv("PATH")); + char * path = _path; + while (path) { + char * next = strchr(path,':'); + if (next) *next++ = '\0'; + + char tmp[4096]; + sprintf(tmp, "%s/%s", path, argv[0]); + if (access(tmp, X_OK)) { + binpath = strdup(tmp); + break; + } + path = next; + } + free(_path); + } + } + if (binpath) { + vm.binpath = binpath; + } /* Else, give up at this point and just don't attach it at all. */ +} + +/** + * Run global initialization tasks + */ +void initialize(void) { + /* Force empty locale */ + setlocale(LC_ALL, ""); + + /* Set up default key mappings */ +#define CLONE_MAP(map) do { \ + int len = 0, i = 0; \ + for (struct action_map * m = _ ## map; m->key != -1; m++, len++); \ + map = malloc(sizeof(struct action_map) * (len + 1)); \ + for (struct action_map * m = _ ## map; m->key != -1; m++, i++) { \ + memcpy(&map[i], m, sizeof(struct action_map)); \ + } \ + map[i].key = -1; \ +} while (0) + + CLONE_MAP(NORMAL_MAP); + CLONE_MAP(INSERT_MAP); + CLONE_MAP(REPLACE_MAP); + CLONE_MAP(LINE_SELECTION_MAP); + CLONE_MAP(CHAR_SELECTION_MAP); + CLONE_MAP(COL_SELECTION_MAP); + CLONE_MAP(COL_INSERT_MAP); + CLONE_MAP(NAVIGATION_MAP); + CLONE_MAP(ESCAPE_MAP); + CLONE_MAP(COMMAND_MAP); + CLONE_MAP(SEARCH_MAP); + CLONE_MAP(FILESEARCH_MAP); + CLONE_MAP(INPUT_BUFFER_MAP); + +#undef CLONE_MAP + + /* Simple ASCII defaults, but you could use " " as a config option */ + global_config.tab_indicator = strdup(">"); + global_config.space_indicator = strdup("-"); + + krk_initVM(0); /* no debug flags */ + + KrkInstance * bimModule = krk_newInstance(vm.moduleClass); + krk_attachNamedObject(&vm.modules, "bim", (KrkObj*)bimModule); + krk_attachNamedObject(&bimModule->fields, "__name__", (KrkObj*)S("bim")); + krk_defineNative(&bimModule->fields, "bindHighlighter", krk_bim_register_syntax); + krk_defineNative(&bimModule->fields, "getCommands", krk_bim_get_commands); + krk_bim_theme_dict = krk_dict_of(0,NULL); + krk_attachNamedValue(&bimModule->fields, "themes", krk_bim_theme_dict); + krk_defineNative(&bimModule->fields, "defineTheme", krk_bim_define_theme); + krk_bim_syntax_dict = krk_dict_of(0,NULL); + krk_attachNamedValue(&bimModule->fields, "highlighters", krk_bim_syntax_dict); + + makeClass(bimModule, &ActionDef, "Action", vm.objectClass); + ActionDef->allocSize = sizeof(struct ActionDef); + krk_defineNative(&ActionDef->methods, ".__call__", bim_krk_action_call); + krk_finalizeClass(ActionDef); + + for (struct action_def * a = mappable_actions; mappable_actions && a->name; ++a) { + struct ActionDef * actionObj = (void*)krk_newInstance(ActionDef); + actionObj->action = a; + krk_attachNamedObject(&vm.builtins->fields, a->name, (KrkObj*)actionObj); + } + + makeClass(bimModule, &CommandDef, "Command", vm.objectClass); + CommandDef->allocSize = sizeof(struct CommandDef); + krk_defineNative(&CommandDef->methods, ".__call__", bim_krk_command_call); + krk_finalizeClass(CommandDef); + + KrkInstance * global = krk_newInstance(vm.objectClass); + krk_attachNamedObject(&vm.builtins->fields, "global", (KrkObj*)global); + + for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { + struct CommandDef * commandObj = (void*)krk_newInstance(CommandDef); + commandObj->command = c; + if (strstr(c->name,"global.") == c->name) { + krk_attachNamedObject(&global->fields, c->name + 7, (KrkObj*)commandObj); + } else { + krk_attachNamedObject(&vm.builtins->fields, c->name, (KrkObj*)commandObj); + } + } + + makeClass(bimModule, &syntaxStateClass, "SyntaxState", vm.objectClass); + syntaxStateClass->allocSize = sizeof(struct SyntaxState); + krk_defineNative(&syntaxStateClass->methods, ":state", bim_krk_state_getstate); + krk_defineNative(&syntaxStateClass->methods, ".set_state", bim_krk_state_setstate); /* TODO property? */ + krk_defineNative(&syntaxStateClass->methods, ":i", bim_krk_state_index); + krk_defineNative(&syntaxStateClass->methods, ":lineno", bim_krk_state_lineno); + krk_defineNative(&syntaxStateClass->methods, ".__init__", bim_krk_state_init); + /* These ones take argumens so they're methods instead of dynamic fields */ + krk_defineNative(&syntaxStateClass->methods, ".findKeywords", bim_krk_state_findKeywords); + krk_defineNative(&syntaxStateClass->methods, ".cKeywordQualifier", bim_krk_state_cKeywordQualifier); + krk_defineNative(&syntaxStateClass->methods, ".isdigit", bim_krk_state_isdigit); + krk_defineNative(&syntaxStateClass->methods, ".isxdigit", bim_krk_state_isxdigit); + krk_defineNative(&syntaxStateClass->methods, ".paint", bim_krk_state_paint); + krk_defineNative(&syntaxStateClass->methods, ".paintComment", bim_krk_state_paintComment); + krk_defineNative(&syntaxStateClass->methods, ".skip", bim_krk_state_skip); + krk_defineNative(&syntaxStateClass->methods, ".matchAndPaint", bim_krk_state_matchAndPaint); + krk_defineNative(&syntaxStateClass->methods, ".commentBuzzwords", bim_krk_state_commentBuzzwords); + krk_defineNative(&syntaxStateClass->methods, ".rewind", bim_krk_state_rewind); + krk_defineNative(&syntaxStateClass->methods, ".__get__", bim_krk_state_get); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_NONE", INTEGER_VAL(FLAG_NONE)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_KEYWORD", INTEGER_VAL(FLAG_KEYWORD)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_STRING", INTEGER_VAL(FLAG_STRING)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_COMMENT", INTEGER_VAL(FLAG_COMMENT)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_TYPE", INTEGER_VAL(FLAG_TYPE)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_PRAGMA", INTEGER_VAL(FLAG_PRAGMA)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_NUMERAL", INTEGER_VAL(FLAG_NUMERAL)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_ERROR", INTEGER_VAL(FLAG_ERROR)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_DIFFPLUS", INTEGER_VAL(FLAG_DIFFPLUS)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_DIFFMINUS", INTEGER_VAL(FLAG_DIFFMINUS)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_NOTICE", INTEGER_VAL(FLAG_NOTICE)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_BOLD", INTEGER_VAL(FLAG_BOLD)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_LINK", INTEGER_VAL(FLAG_LINK)); + krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_ESCAPE", INTEGER_VAL(FLAG_ESCAPE)); + + krk_finalizeClass(syntaxStateClass); + + krk_resetStack(); + + import_directory("syntax"); + import_directory("themes"); + + /* Load bimrc */ + load_bimrc(); + krk_resetStack(); + + /* Start context for command line */ + krk_startModule(""); + + /* Initialize space for buffers */ + buffers_avail = 4; + buffers = malloc(sizeof(buffer_t *) * buffers_avail); +} + +/** + * Initialize terminal for editor display. + */ +void init_terminal(void) { + if (!isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) { + global_config.tty_in = STDERR_FILENO; + } + set_alternate_screen(); + set_bracketed_paste(); + update_screen_size(); + get_initial_termios(); + set_unbuffered(); + mouse_enable(); + global_config.has_terminal = 1; + + signal(SIGWINCH, SIGWINCH_handler); + signal(SIGCONT, SIGCONT_handler); + signal(SIGTSTP, SIGTSTP_handler); +} + +struct action_def * find_action(void (*action)()) { + if (!action) return NULL; + for (int i = 0; i < flex_mappable_actions_count; ++i) { + if (action == mappable_actions[i].action) return &mappable_actions[i]; + } + return NULL; +} + +void dump_mapping(const char * description, struct action_map * map) { + printf("## %s\n", description); + printf("\n"); + printf("| **Key** | **Action** | **Description** |\n"); + printf("|---------|------------|-----------------|\n"); + struct action_map * m = map; + while (m->key != -1) { + /* Find the name of this action */ + struct action_def * action = find_action(m->method); + printf("| `%s` | `%s` | %s |\n", name_from_key(m->key), + action ? action->name : "(unbound)", + action ? action->description : "(unbound)"); + m++; + } + printf("\n"); +} + +int sort_regular_commands(const void * a, const void * b) { + return strcmp(regular_commands[*(int *)a].name, regular_commands[*(int *)b].name); +} + +int sort_prefix_commands(const void * a, const void * b) { + return strcmp(prefix_commands[*(int *)a].name, prefix_commands[*(int *)b].name); +} + +void dump_commands(void) { + printf("## Regular Commands\n"); + printf("\n"); + printf("| **Command** | **Description** |\n"); + printf("|-------------|-----------------|\n"); int * offsets = malloc(sizeof(int) * flex_regular_commands_count); for (int i = 0; i < flex_regular_commands_count; ++i) { offsets[i] = i; @@ -11144,8 +10876,7 @@ BIM_COMMAND(setcolor, "setcolor", "Set colorscheme colors") { pause_for_key(); } else { char * colorname = argv[1]; - char * space = strstr(colorname, " "); - if (!space) { + if (argc == 2) { struct ColorName * c = color_names; while (c->name) { if (!strcmp(c->name, colorname)) { @@ -11157,8 +10888,7 @@ BIM_COMMAND(setcolor, "setcolor", "Set colorscheme colors") { render_error(":setcolor "); return 1; } - char * colorvalue = space + 1; - *space = '\0'; + char * colorvalue = argv[2]; struct ColorName * c = color_names; while (c->name) { if (!strcmp(c->name, colorname)) { @@ -11202,21 +10932,9 @@ BIM_COMMAND(action,"action","Execute a bim action") { /* Split argument on spaces */ char * action = argv[1]; char * arg1 = NULL, * arg2 = NULL, * arg3 = NULL; - arg1 = strstr(argv[1]," "); - if (arg1) { - *arg1 = '\0'; - arg1++; - arg2 = strstr(arg1," "); - if (arg2) { - *arg2 = '\0'; - arg2++; - arg3 = strstr(arg1," "); - if (arg3) { - *arg3 = '\0'; - arg3++; - } - } - } + if (argc > 2) arg1 = argv[2]; + if (argc > 3) arg2 = argv[3]; + if (argc > 4) arg3 = argv[4]; /* Find the action */ for (int i = 0; i < flex_mappable_actions_count; ++i) { @@ -11281,10 +10999,6 @@ void dump_map_commands(const char * name, struct action_map * map) { } } -void call_user(int c) { - run_function(user_functions[c]->command); -} - BIM_COMMAND(mapkey,"mapkey","Map a key to an action.") { if (argc < 2) goto _argument_error; @@ -11345,19 +11059,6 @@ BIM_COMMAND(mapkey,"mapkey","Map a key to an action.") { } } - /* See if it's a user function */ - char _tmp[30] = {0}; - if (has_function(action) && (!action_def || action_def->action == call_user)) { - /* Map a new action for this user function */ - if (!action_def) { - add_action((struct action_def){action, call_user, ARG_IS_CUSTOM, "(script-defined function)"}); - action_def = &mappable_actions[flex_mappable_actions_count-1]; - } - options = "a"; - sprintf(_tmp, "%d", find_function(action)); - arg = _tmp; - } - if (!action_def) { render_error("invalid action: %s", action); return 1; @@ -11432,6 +11133,7 @@ BIM_COMMAND(mapkey,"mapkey","Map a key to an action.") { } int main(int argc, char * argv[]) { + findBim(argv); int opt; while ((opt = getopt(argc, argv, "?c:C:u:RS:O:-:")) != -1) { switch (opt) { @@ -11573,2773 +11275,3 @@ int main(int argc, char * argv[]) { return 0; } -char * syn_bash_keywords[] = { - /* Actual bash keywords */ - "if","then","else","elif","fi","case","esac","for","coproc", - "select","while","until","do","done","in","function","time", - /* Other keywords */ - "exit","return","source","function","export","alias","complete","shopt","local","eval", - /* Common Unix utilities */ - "echo","cd","pushd","popd","printf","sed","rm","mv", - NULL -}; - -int bash_pop_state(int state) { - int new_state = state / 100; - return new_state * 10; -} - -int bash_push_state(int state, int new) { - return state * 10 + new; -} - -int bash_paint_tick(struct syntax_state * state, int out_state) { - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '\'') { - paint(1, FLAG_STRING); - return bash_pop_state(out_state); - } else if (last == '\\') { - paint(1, FLAG_STRING); - last = -1; - } else if (charat() != -1) { - last = charat(); - paint(1, FLAG_STRING); - } - } - return out_state; -} - -int bash_paint_braced_variable(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '}') { - paint(1, FLAG_NUMERAL); - return 0; - } - paint(1, FLAG_NUMERAL); - } - return 0; -} - -int bash_special_variable(int c) { - return (c == '@' || c == '?'); -} - -int bash_paint_string(struct syntax_state * state, char terminator, int out_state, int color) { - int last = -1; - state->state = out_state; - while (charat() != -1) { - if (last != '\\' && charat() == terminator) { - paint(1, color); - return bash_pop_state(state->state); - } else if (last == '\\') { - paint(1, color); - last = -1; - } else if (terminator != '`' && charat() == '`') { - paint(1, FLAG_ESCAPE); - state->state = bash_paint_string(state,'`',bash_push_state(out_state, 20),FLAG_ESCAPE); - } else if (terminator != ')' && charat() == '$' && nextchar() == '(') { - paint(2, FLAG_TYPE); - state->state = bash_paint_string(state,')',bash_push_state(out_state, 30),FLAG_TYPE); - } else if (charat() == '$' && nextchar() == '{') { - paint(2, FLAG_NUMERAL); - bash_paint_braced_variable(state); - } else if (charat() == '$') { - paint(1, FLAG_NUMERAL); - if (bash_special_variable(charat())) { paint(1, FLAG_NUMERAL); continue; } - while (c_keyword_qualifier(charat())) paint(1, FLAG_NUMERAL); - } else if (terminator != '"' && charat() == '"') { - paint(1, FLAG_STRING); - state->state = bash_paint_string(state,'"',bash_push_state(out_state, 40),FLAG_STRING); - } else if (terminator != '"' && charat() == '\'') { /* No single quotes in regular quotes */ - paint(1, FLAG_STRING); - state->state = bash_paint_tick(state, out_state); - } else if (charat() != -1) { - last = charat(); - paint(1, color); - } - } - return state->state; -} - -int syn_bash_calculate(struct syntax_state * state) { - if (state->state < 1) { - if (charat() == '#' && lastchar() != '\\') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - return -1; - } else if (charat() == '\'' && lastchar() != '\\') { - paint(1, FLAG_STRING); - return bash_paint_tick(state, 10); - } else if (charat() == '`' && lastchar() != '\\') { - paint(1, FLAG_ESCAPE); - return bash_paint_string(state,'`',20,FLAG_ESCAPE); - } else if (charat() == '$' && nextchar() == '(' && lastchar() != '\\') { - paint(2, FLAG_TYPE); - return bash_paint_string(state,')',30,FLAG_TYPE); - } else if (charat() == '"' && lastchar() != '\\') { - paint(1, FLAG_STRING); - return bash_paint_string(state,'"',40,FLAG_STRING); - } else if (charat() == '$' && nextchar() == '{' && lastchar() != '\\') { - paint(2, FLAG_NUMERAL); - bash_paint_braced_variable(state); - return 0; - } else if (charat() == '$' && lastchar() != '\\') { - paint(1, FLAG_NUMERAL); - if (bash_special_variable(charat())) { paint(1, FLAG_NUMERAL); return 0; } - while (c_keyword_qualifier(charat())) paint(1, FLAG_NUMERAL); - return 0; - } else if (find_keywords(state, syn_bash_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (charat() == ';') { - paint(1, FLAG_KEYWORD); - return 0; - } else if (c_keyword_qualifier(charat())) { - for (int i = 0; charrel(i) != -1; ++i) { - if (charrel(i) == ' ') break; - if (charrel(i) == '=') { - for (int j = 0; j < i; ++j) { - paint(1, FLAG_TYPE); - } - skip(); /* equals sign */ - return 0; - } - } - for (int i = 0; charrel(i) != -1; ++i) { - if (charrel(i) == '(') { - for (int j = 0; j < i; ++j) { - paint(1, FLAG_TYPE); - } - return 0; - } - if (!c_keyword_qualifier(charrel(i)) && charrel(i) != '-' && charrel(i) != ' ') break; - } - skip(); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - } else if (state->state < 10) { - /* - * TODO: I have an idea of how to do up to `n` (here... 8?) heredocs - * by storing them in a static table and using the index into that table - * for the state, but it's iffy. It would work well in situations where - * someoen used the same heredoc repeatedly throughout their document. - */ - } else if (state->state >= 10) { - /* Nested string states */ - while (charat() != -1) { - int s = (state->state / 10) % 10; - if (s == 1) { - state->state = bash_paint_string(state,'\'',state->state,FLAG_STRING); - } else if (s == 2) { - state->state = bash_paint_string(state,'`',state->state,FLAG_ESCAPE); - } else if (s == 3) { - state->state = bash_paint_string(state,')',state->state,FLAG_TYPE); - } else if (s == 4) { - state->state = bash_paint_string(state,'"',state->state,FLAG_STRING); - } else if (!s) { - return -1; - } - } - return state->state; - } - return -1; -} - -char * syn_bash_ext[] = { -#ifndef __toaru__ - ".sh", -#endif - ".bash",".bashrc", - NULL -}; - -BIM_SYNTAX_COMPLETER(bash) { - for (char ** keyword = syn_bash_keywords; *keyword; ++keyword) { - add_if_match((*keyword),"(sh keyword)"); - } - - return 0; -} - -BIM_SYNTAX_EXT(bash, 0, c_keyword_qualifier) -int cmd_qualifier(int c) { return c != -1 && c != ' '; } - -extern int syn_bash_calculate(struct syntax_state * state); -extern int syn_py_calculate(struct syntax_state * state); - -static int bimcmd_paint_replacement(struct syntax_state * state) { - paint(1, FLAG_KEYWORD); - char special = charat(); - paint(1, FLAG_TYPE); - while (charat() != -1 && charat() != special) { - paint(1, FLAG_DIFFMINUS); - } - if (charat() == special) paint(1, FLAG_TYPE); - while (charat() != -1 && charat() != special) { - paint(1, FLAG_DIFFPLUS); - } - if (charat() == special) paint(1, FLAG_TYPE); - while (charat() != -1) paint(1, FLAG_NUMERAL); - return -1; -} - -extern struct command_def * regular_commands; -extern struct command_def * prefix_commands; - -static int bimcmd_find_commands(struct syntax_state * state) { - for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { - if (match_and_paint(state, c->name, FLAG_KEYWORD, cmd_qualifier)) return 1; - } - for (struct command_def * c = prefix_commands; prefix_commands && c->name; ++c) { - if (match_and_paint(state, c->name, FLAG_KEYWORD, cmd_qualifier)) return 1; - } - return 0; -} - -static char * bimscript_comments[] = { - "@author","@version","@url","@description", - NULL -}; - -static int bcmd_at_keyword_qualifier(int c) { - return isalnum(c) || (c == '_') || (c == '@'); -} - -int syn_bimcmd_calculate(struct syntax_state * state) { - if (state->i == 0) { - while (charat() == ' ') skip(); - if (charat() == '#') { - while (charat() != -1) { - if (charat() == '@') { - if (!find_keywords(state, bimscript_comments, FLAG_ESCAPE, bcmd_at_keyword_qualifier)) { - paint(1, FLAG_COMMENT); - } - } else { - paint(1, FLAG_COMMENT); - } - } - return -1; - } else if (match_and_paint(state, "function", FLAG_PRAGMA, cmd_qualifier)) { - while (charat() == ' ') skip(); - while (charat() != -1 && charat() != ' ') paint(1, FLAG_TYPE); - while (charat() != -1) paint(1, FLAG_ERROR); - return -1; - } else if (match_and_paint(state, "end", FLAG_PRAGMA, cmd_qualifier)) { - while (charat() != -1) paint(1, FLAG_ERROR); - return -1; - } else if (match_and_paint(state, "return", FLAG_PRAGMA, cmd_qualifier)) { - while (charat() == ' ') skip(); - while (charat() != -1 && charat() != ' ') paint(1, FLAG_NUMERAL); - return -1; - } else if (match_and_paint(state, "call", FLAG_KEYWORD, cmd_qualifier) || - match_and_paint(state, "trycall", FLAG_KEYWORD, cmd_qualifier) || - match_and_paint(state, "showfunction", FLAG_KEYWORD, cmd_qualifier)) { - while (charat() == ' ') skip(); - for (struct bim_function ** f = user_functions; user_functions && *f; ++f) { - if (match_and_paint(state, (*f)->command, FLAG_TYPE, cmd_qualifier)) break; - } - } else if (match_and_paint(state, "theme", FLAG_KEYWORD, cmd_qualifier) || - match_and_paint(state, "colorscheme", FLAG_KEYWORD, cmd_qualifier)) { - while (charat() == ' ') skip(); - for (struct theme_def * s = themes; themes && s->name; ++s) { - if (match_and_paint(state, s->name, FLAG_TYPE, cmd_qualifier)) break; - } - } else if (match_and_paint(state, "syntax", FLAG_KEYWORD, cmd_qualifier)) { - while (charat() == ' ') skip(); - for (struct syntax_definition * s = syntaxes; syntaxes && s->name; ++s) { - if (match_and_paint(state, s->name, FLAG_TYPE, cmd_qualifier)) return -1; - } - if (match_and_paint(state, "none", FLAG_TYPE, cmd_qualifier)) return -1; - } else if (match_and_paint(state, "setcolor", FLAG_KEYWORD, cmd_qualifier)) { - while (charat() == ' ') skip(); - for (struct ColorName * c = color_names; c->name; ++c) { - if (match_and_paint(state, c->name, FLAG_TYPE, cmd_qualifier)) { - while (charat() != -1) paint(1, FLAG_STRING); - return -1; - } - } - return -1; - } else if (match_and_paint(state, "quirk", FLAG_KEYWORD, cmd_qualifier)) { - if (charat() == ' ') skip(); - while (charat() != -1 && charat() != ' ') paint(1, FLAG_TYPE); - if (charat() == ' ') skip(); - while (charat() != -1 && charat() != ' ') paint(1, FLAG_NUMERAL); - if (charat() != ' ') skip(); - while (charat() != -1) { - if (charat() == 'n' && nextchar() == 'o') { - while (charat() != -1 && charat() != ' ') paint(1, FLAG_DIFFMINUS); - } else if (charat() == 'c' && nextchar() == 'a' && charrel(2) == 'n') { - while (charat() != -1 && charat() != ' ') paint(1, FLAG_DIFFPLUS); - } else { - while (charat() != -1 && charat() != ' ') paint(1, FLAG_ERROR); - } - if (charat() == ' ') skip(); - } - return -1; - } else if (match_and_paint(state, "mapkey", FLAG_KEYWORD, cmd_qualifier)) { - if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } - for (struct mode_names * m = mode_names; m->name; ++m) { - if (match_and_paint(state, m->name, FLAG_TYPE, cmd_qualifier)) break; - } - if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } - while (charat() != ' ' && charat() != -1) skip(); /* key name */ - if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } - for (struct action_def * a = mappable_actions; a->name; ++a) { - if (match_and_paint(state, a->name, FLAG_TYPE, cmd_qualifier)) goto _found; - } - for (struct bim_function ** f = user_functions; user_functions && *f; ++f) { - if (match_and_paint(state, (*f)->command, FLAG_TYPE, cmd_qualifier)) goto _found; - } - match_and_paint(state, "none", FLAG_TYPE, cmd_qualifier); - _found: - if (charat() == -1) return -1; - if (charat() == ' ') skip(); else { paint(1, FLAG_ERROR); return -1; } - while (charat() != -1 && charat() != ' ') { - if (!strchr("racnwmb",charat())) { - paint(1, FLAG_ERROR); - } else { - skip(); - } - } - return -1; - } else if (match_and_paint(state, "action", FLAG_KEYWORD, cmd_qualifier)) { - while (charat() == ' ') skip(); - for (struct action_def * a = mappable_actions; a->name; ++a) { - if (match_and_paint(state, a->name, FLAG_TYPE, cmd_qualifier)) return -1; - } - } else if (charat() == '%' && nextchar() == 's') { - paint(1, FLAG_KEYWORD); - return bimcmd_paint_replacement(state); - } else if (charat() == 's' && !isalpha(nextchar())) { - return bimcmd_paint_replacement(state); - } else if (bimcmd_find_commands(state)) { - return -1; - } else if (charat() == '!') { - paint(1, FLAG_NUMERAL); - nest(syn_bash_calculate, 1); - } else if (charat() == '`') { - paint(1, FLAG_NUMERAL); - nest(syn_py_calculate, 1); - } else if (isdigit(charat()) || charat() == '-' || charat() == '+') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - return -1; - } - } - return -1; -} - -char * syn_bimcmd_ext[] = {".bimscript",".bimrc",NULL}; /* no files */ - -BIM_SYNTAX_COMPLETER(bimcmd) { - for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { - add_if_match(c->name,c->description); - } - add_if_match("function","Define a function"); - add_if_match("end","End a function definition"); - return 0; -} - -BIM_SYNTAX_EXT(bimcmd, 1, cmd_qualifier) -int syn_biminfo_calculate(struct syntax_state * state) { - if (state->i == 0) { - if (charat() == '#') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else if (charat() == '>') { - paint(1, FLAG_KEYWORD); - while (charat() != ' ') paint(1, FLAG_TYPE); - skip(); - while (charat() != -1) paint(1, FLAG_NUMERAL); - } else { - while (charat() != -1) paint(1, FLAG_ERROR); - } - } - return -1; -} - -char * syn_biminfo_ext[] = {".biminfo",NULL}; - -BIM_SYNTAX(biminfo, 0) -/** - * Syntax definition for C - */ -char * syn_c_keywords[] = { - "while","if","for","continue","return","break","switch","case","sizeof", - "struct","union","typedef","do","default","else","goto", - "alignas","alignof","offsetof","asm","__asm__", - /* C++ stuff */ - "public","private","class","using","namespace","virtual","override","protected", - "template","typename","static_cast","throw", - NULL -}; - -char * syn_c_types[] = { - "static","int","char","short","float","double","void","unsigned","volatile","const", - "register","long","inline","restrict","enum","auto","extern","bool","complex", - "uint8_t","uint16_t","uint32_t","uint64_t", - "int8_t","int16_t","int32_t","int64_t","FILE", - "ssize_t","size_t","uintptr_t","intptr_t","__volatile__", - "constexpr", - NULL -}; - -char * syn_c_special[] = { - "NULL", - "stdin","stdout","stderr", - "STDIN_FILENO","STDOUT_FILENO","STDERR_FILENO", - NULL -}; - -int c_keyword_qualifier(int c) { - return isalnum(c) || (c == '_'); -} - -/** - * Paints a basic C-style quoted string. - */ -void paint_c_string(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '"' */ - paint(1, FLAG_STRING); - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '"') { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\' && (nextchar() == '\\' || nextchar() == 'n' || nextchar() == 'r')) { - paint(2, FLAG_ESCAPE); - last = -1; - } else if (charat() == '\\' && nextchar() >= '0' && nextchar() <= '7') { - paint(2, FLAG_ESCAPE); - if (charat() >= '0' && charat() <= '7') { - paint(1, FLAG_ESCAPE); - if (charat() >= '0' && charat() <= '7') { - paint(1, FLAG_ESCAPE); - } - } - last = -1; - } else if (charat() == '%') { - paint(1, FLAG_ESCAPE); - if (charat() == '%') { - paint(1, FLAG_ESCAPE); - } else { - while (charat() == '-' || charat() == '#' || charat() == '*' || charat() == '0' || charat() == '+') paint(1, FLAG_ESCAPE); - while (isdigit(charat())) paint(1, FLAG_ESCAPE); - if (charat() == '.') { - paint(1, FLAG_ESCAPE); - if (charat() == '*') paint(1, FLAG_ESCAPE); - else while (isdigit(charat())) paint(1, FLAG_ESCAPE); - } - while (charat() == 'l' || charat() == 'z') paint(1, FLAG_ESCAPE); - if (charat() == '\\' || charat() == '"') continue; - paint(1, FLAG_ESCAPE); - } - } else if (charat() == '\\' && nextchar() == 'x') { - paint(2, FLAG_ESCAPE); - while (isxdigit(charat())) paint(1, FLAG_ESCAPE); - } else { - last = charat(); - paint(1, FLAG_STRING); - } - } -} - -/** - * Paint a C character numeral. Can be arbitrarily large, so - * it supports multibyte chars for things like defining weird - * ASCII multibyte integer constants. - */ -void paint_c_char(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '\'' */ - paint(1, FLAG_NUMERAL); - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '\'') { - paint(1, FLAG_NUMERAL); - return; - } else if (last == '\\' && charat() == '\\') { - paint(1, FLAG_NUMERAL); - last = -1; - } else { - last = charat(); - paint(1, FLAG_NUMERAL); - } - } -} - -/** - * Paint a classic C comment which continues until terminated. - * Assumes you've already painted the starting / and *. - */ -int paint_c_comment(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else if (last == '*' && charat() == '/') { - paint(1, FLAG_COMMENT); - return 0; - } else { - last = charat(); - paint(1, FLAG_COMMENT); - } - } - return 1; -} - -/** - * Paint a generic C pragma, eg. a #define statement. - */ -int paint_c_pragma(struct syntax_state * state) { - while (state->i < state->line->actual) { - if (charat() == '"') { - /* Paint C string */ - paint_c_string(state); - } else if (charat() == '\'') { - paint_c_char(state); - } else if (charat() == '\\' && state->i == state->line->actual - 1) { - paint(1, FLAG_PRAGMA); - return 2; - } else if (find_keywords(state, syn_c_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - continue; - } else if (find_keywords(state, syn_c_types, FLAG_TYPE, c_keyword_qualifier)) { - continue; - } else if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - return -1; - } else if (charat() == '/' && nextchar() == '*') { - /* C-style comments */ - if (paint_c_comment(state) == 1) return 3; - continue; - } else { - paint(1, FLAG_PRAGMA); - } - } - return 0; -} - -/** - * Paint integers and floating point values with some handling for suffixes. - */ -int paint_c_numeral(struct syntax_state * state) { - if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { - paint(2, FLAG_NUMERAL); - while (isxdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && nextchar() == '.') { - paint(2, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == 'f') paint(1, FLAG_NUMERAL); - return 0; - } else if (charat() == '0') { - paint(1, FLAG_NUMERAL); - while (charat() >= '0' && charat() <= '7') paint(1, FLAG_NUMERAL); - } else { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == 'f') paint(1, FLAG_NUMERAL); - return 0; - } - } - while (charat() == 'u' || charat() == 'U' || charat() == 'l' || charat() == 'L') paint(1, FLAG_NUMERAL); - return 0; -} - -int syn_c_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == '#') { - /* Must be first thing on line, but can have spaces before */ - for (int i = 0; i < state->i; ++i) { - if (state->line->text[i].codepoint != ' ' && state->line->text[i].codepoint != '\t') { - skip(); - return 0; - } - } - /* Handle preprocessor functions */ - paint(1, FLAG_PRAGMA); - while (charat() == ' ') paint(1, FLAG_PRAGMA); - if (match_and_paint(state, "include", FLAG_PRAGMA, c_keyword_qualifier)) { - /* Put quotes around */ - while (charat() == ' ') paint(1, FLAG_PRAGMA); - if (charat() == '<') { - paint(1, FLAG_STRING); - while (charat() != '>' && state->i < state->line->actual) { - paint(1, FLAG_STRING); - } - if (charat() != -1) { - paint(1, FLAG_STRING); - } - } - /* (for "includes", normal pragma highlighting covers that. */ - } else if (match_and_paint(state, "if", FLAG_PRAGMA, c_keyword_qualifier)) { - /* These are to prevent #if and #else from being highlighted as keywords */ - if (charat() == ' ' && nextchar() == '0' && charrel(2) == -1) { - state->i -= 4; - while (charat() != -1) paint(1, FLAG_COMMENT); - return 4; - } - } else if (match_and_paint(state, "else", FLAG_PRAGMA, c_keyword_qualifier)) { - /* ... */ - } - return paint_c_pragma(state); - } else if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - } else if (charat() == '/' && nextchar() == '*') { - /* C-style comments */ - if (paint_c_comment(state) == 1) return 1; - return 0; - } else if (find_keywords(state, syn_c_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_c_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_c_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (charat() == '\"') { - paint_c_string(state); - return 0; - } else if (charat() == '\'') { - paint_c_char(state); - return 0; - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_c_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: - /* In a block comment */ - if (paint_c_comment(state) == 1) return 1; - return 0; - case 2: - /* In an unclosed preprocessor statement */ - return paint_c_pragma(state); - case 3: - /* In a block comment within an unclosed preprocessor statement */ - if (paint_c_comment(state) == 1) return 3; - return paint_c_pragma(state); - default: - while (charat() == ' ' || charat() == '\t') paint(1, FLAG_COMMENT); - if (charat() == '#') { - paint(1, FLAG_COMMENT); - while (charat() == ' ' || charat() == '\t') paint(1, FLAG_COMMENT); - if (match_and_paint(state,"if",FLAG_COMMENT, c_keyword_qualifier)) { - while (charat() != -1) paint(1, FLAG_COMMENT); - return state->state + 1; - } else if (match_and_paint(state, "else", FLAG_COMMENT, c_keyword_qualifier) || match_and_paint(state, "elif", FLAG_COMMENT, c_keyword_qualifier)) { - while (charat() != -1) paint(1, FLAG_COMMENT); - return (state->state == 4) ? 0 : (state->state); - } else if (match_and_paint(state, "endif", FLAG_COMMENT, c_keyword_qualifier)) { - while (charat() != -1) paint(1, FLAG_COMMENT); - return (state->state == 4) ? 0 : (state->state - 1); - } else { - while (charat() != -1) paint(1, FLAG_COMMENT); - return (state->state); - } - } else { - while (charat() != -1) paint(1, FLAG_COMMENT); - return state->state; - } - break; - } - return -1; -} - -char * syn_c_ext[] = {".c",".h",".cpp",".hpp",".c++",".h++",".cc",".hh",NULL}; - -BIM_SYNTAX_COMPLETER(c) { - for (char ** keyword = syn_c_keywords; *keyword; ++keyword) { - add_if_match((*keyword),"(c keyword)"); - } - for (char ** keyword = syn_c_types; *keyword; ++keyword) { - add_if_match((*keyword),"(c type)"); - } - return 0; -} - -BIM_SYNTAX_EXT(c, 0, c_keyword_qualifier) -int syn_conf_calculate(struct syntax_state * state) { - if (state->i == 0) { - if (charat() == ';') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - } else if (charat() == '#') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - } else if (charat() == '[') { - paint(1, FLAG_KEYWORD); - while (charat() != ']' && charat() != -1) paint(1, FLAG_KEYWORD); - if (charat() == ']') paint(1, FLAG_KEYWORD); - } else { - while (charat() != '=' && charat() != -1) paint(1, FLAG_TYPE); - } - } - - return -1; -} - -char * syn_conf_ext[] = {".conf",".ini",".git/config",".cfg",".properties",NULL}; - -BIM_SYNTAX(conf, 1) -static char * html_elements[] = { - "a","abbr","address","area","article","aside","audio", - "b","base","bdi","bdo","blockquote","body","br","button", - "canvas","cite","code","col","colgroup","data","datalist", - "dd","del","details","dfn","dialog","div","dl","dt","em", - "embed","fieldset","figcaption","figure","footer","form", - "h1","h2","h3","h4","h5","h6","head","header","hr","html", - "i","iframe","img","input","ins","kbd","label","legend", - "li","link","main","map","mark","meta","meter","nav", - "noscript","object","ol","optgroup","option","output", - "p","param","picture","pre","progress","q","rp","rt", - "ruby","s","samp","script","section","select","small", - "source","span","strong","style","sub","summary","sup", - "svg","table","tbody","td","template","textarea","tfoot", - "th","thead","time","title","tr","track","u","ul","var", - "video","wbr","hgroup","*", - NULL -}; - -static char * css_properties[] = { - "align-content","align-items","align-self","all","animation", - "animation-delay","animation-direction","animation-duration", - "animation-fill-mode","animation-iteration-count","animation-name", - "animation-play-state","animation-timing-function","backface-visibility", - "background","background-attachment","background-blend-mode","background-clip", - "background-color","background-image","background-origin","background-position", - "background-repeat","background-size","border","border-bottom","border-bottom-color", - "border-bottom-left-radius","border-bottom-right-radius","border-bottom-style", - "border-bottom-width","border-collapse","border-color","border-image","border-image-outset", - "border-image-repeat","border-image-slice","border-image-source","border-image-width", - "border-left","border-left-color","border-left-style","border-left-width", - "border-radius","border-right","border-right-color","border-right-style","border-right-width", - "border-spacing","border-style","border-top","border-top-color","border-top-left-radius", - "border-top-right-radius","border-top-style","border-top-width","border-width", - "bottom","box-decoration-break","box-shadow","box-sizing","break-after", - "break-before","break-inside","caption-side","caret-color","@charset", - "clear","clip","color","column-count","column-fill","column-gap","column-rule","column-rule-color", - "column-rule-style","column-rule-width","column-span","column-width","columns","content", - "counter-increment","counter-reset","cursor","direction","display","empty-cells", - "filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink", - "flex-wrap","float","font","@font-face","font-family","font-feature-settings","@font-feature-values", - "font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style", - "font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian", - "font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight", - "grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column", - "grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end", - "grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns", - "grid-template-rows","hanging-punctuation","height","hyphens","image-rendering","@import", - "isolation","justify-content","@keyframes","left","letter-spacing","line-break","line-height", - "list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom", - "margin-left","margin-right","margin-top","max-height","max-width","@media","min-height", - "min-width","mix-blend-mode","object-fit","object-position","opacity","order","orphans", - "outline","outline-color","outline-offset","outline-style","outline-width","overflow", - "overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right", - "padding-top","page-break-after","page-break-before","page-break-inside","perspective", - "perspective-origin","pointer-events","position","quotes","resize","right","scroll-behavior", - "tab-size","table-layout","text-align","text-align-last","text-combine-upright","text-decoration", - "text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-justify", - "text-orientation","text-overflow","text-shadow","text-transform","text-underline-position", - "top","transform","transform-origin","transform-style","transition","transition-delay", - "transition-duration","transition-property","transition-timing-function","unicode-bidi", - "user-select","vertical-align","visibility","white-space","widows","width","word-break", - "word-spacing","word-wrap","writing-mode", - NULL -}; - -static char * css_values[] = { - "inline","block","inline-block","none", - "transparent","thin","dotted","sans-serif", - "rgb","rgba","bold","italic","underline","context-box", - "monospace","serif","sans-serif","pre-wrap", - "relative","baseline","hidden","solid","inherit","normal", - "button","pointer","border-box","default","textfield", - "collapse","top","bottom","avoid","table-header-group", - "middle","absolute","rect","left","center","right", - "ellipsis","nowrap","table","both","uppercase","lowercase","help", - "static","table-cell","table-column","scroll","touch","auto", - "not-allowed","inset","url","fixed","translate","alpha","fixed","device-width", - "table-row", - NULL -}; - -static char * css_states[] = { - "focus","active","hover","link","visited","before","after", - "left","right","root","empty","target","enabled","disabled","checked","invalid", - "first-child","nth-child","not","last-child", - NULL -}; - -int css_property_qualifier(int c) { - return isalnum(c) || c == '-' || c == '@' || c == '*' || c == '!'; -} - -int match_prefix(struct syntax_state * state, char * prefix) { - int i = 0; - while (1) { - if (prefix[i] == '\0') return 1; - if (prefix[i] != charrel(i)) return 0; - if (charrel(i) == -1) return 0; - i++; - } -} - -int syn_css_calculate(struct syntax_state * state) { - if (state->state < 1) { - if (charat() == '/' && nextchar() == '*') { - if (paint_c_comment(state) == 1) return 1; - } else if (charat() == '"') { - paint_simple_string(state); - return 0; - } else if (lastchar() != '.' && find_keywords(state,html_elements,FLAG_KEYWORD,css_property_qualifier)) { - return 0; - } else if (lastchar() != '.' && find_keywords(state,css_properties,FLAG_TYPE,css_property_qualifier)) { - return 0; - } else if (match_prefix(state,"-moz-")) { - paint(5,FLAG_ESCAPE); - while (charat() != -1 && css_property_qualifier(charat())) paint(1, FLAG_TYPE); - } else if (match_prefix(state,"-webkit-")) { - paint(8,FLAG_ESCAPE); - while (charat() != -1 && css_property_qualifier(charat())) paint(1, FLAG_TYPE); - } else if (match_prefix(state,"-ms-")) { - paint(4,FLAG_ESCAPE); - while (charat() != -1 && css_property_qualifier(charat())) paint(1, FLAG_TYPE); - } else if (match_prefix(state,"-o-")) { - paint(3,FLAG_ESCAPE); - while (charat() != -1 && css_property_qualifier(charat())) paint(1, FLAG_TYPE); - } else if (charat() == ':') { - skip(); - if (find_keywords(state, css_states, FLAG_PRAGMA, css_property_qualifier)) return 0; - while (charat() != -1 && charat() != ';') { - if (find_keywords(state, css_values, FLAG_NUMERAL, css_property_qualifier)) { - continue; - } else if (charat() == '"') { - paint_simple_string(state); - continue; - } else if (charat() == '{') { - skip(); - return 0; - } else if (charat() == '#') { - paint(1, FLAG_NUMERAL); - while (isxdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (isdigit(charat())) { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - if (charat() == '%') paint(1, FLAG_NUMERAL); - else if (charat() == 'p' && (nextchar() == 't' || nextchar() == 'x' || nextchar() == 'c')) paint(2, FLAG_NUMERAL); - else if ((charat() == 'e' || charat() == 'c' || charat() == 'm') && nextchar() == 'm') paint(2, FLAG_NUMERAL); - else if (charat() == 'e' && nextchar() == 'x') paint(2, FLAG_NUMERAL); - else if (charat() == 'i' && nextchar() == 'n') paint(2, FLAG_NUMERAL); - else if (charat() == 'v' && (nextchar() == 'w' || nextchar() == 'h')) paint(2, FLAG_NUMERAL); - else if (charat() == 'c' && nextchar() == 'h') paint(2, FLAG_NUMERAL); - else if (charat() == 'r' && nextchar() == 'e' && charrel(2) == 'm') paint(3, FLAG_NUMERAL); - else if (charat() == 'v' && nextchar() == 'm' && ((charrel(2) == 'i' && charrel(3) == 'n') || (charrel(2) == 'a' && charrel(3) == 'x'))) paint(4, FLAG_NUMERAL); - else if (charat() == 's') paint(1, FLAG_NUMERAL); - } else if (match_and_paint(state,"!important",FLAG_PRAGMA,css_property_qualifier)) { - continue; - } else if (charat() != -1) { - skip(); - } - } - return 0; - } else if (charat() == -1) { - return -1; - } else { - skip(); - } - return 0; - } else if (state->state == 1) { - if (paint_c_comment(state) == 1) return 1; - return 0; - } - return -1; -} - -char * syn_css_ext[] = {".css",NULL}; - -BIM_SYNTAX(css, 1) -int syn_ctags_calculate(struct syntax_state * state) { - if (state->i == 0) { - if (charat() == '!') { - paint_comment(state); - return -1; - } else { - while (charat() != -1 && charat() != '\t') paint(1, FLAG_TYPE); - if (charat() == '\t') skip(); - while (charat() != -1 && charat() != '\t') paint(1, FLAG_NUMERAL); - if (charat() == '\t') skip(); - while (charat() != -1 && !(charat() == ';' && nextchar() == '"')) paint(1, FLAG_KEYWORD); - return -1; - } - } - return -1; -} - -char * syn_ctags_ext[] = { "tags", NULL }; - -BIM_SYNTAX(ctags, 0) -int syn_diff_calculate(struct syntax_state * state) { - /* No states to worry about */ - if (state->i == 0) { - int flag = 0; - if (charat() == '+') { - flag = FLAG_DIFFPLUS; - } else if (charat() == '-') { - flag = FLAG_DIFFMINUS; - } else if (charat() == '@') { - flag = FLAG_TYPE; - } else if (charat() != ' ') { - flag = FLAG_KEYWORD; - } else { - return -1; - } - while (charat() != -1) paint(1, flag); - } - return -1; -} - -char * syn_diff_ext[] = {".patch",".diff",NULL}; - -BIM_SYNTAX(diff, 1) -int syn_dirent_calculate(struct syntax_state * state) { - if (state->i == 0) { - if (charat() == '#') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else if (charat() == 'd') { - paint(1, FLAG_COMMENT); - while (charat() != -1) paint(1, FLAG_KEYWORD); - } else if (charat() == 'f') { - paint(1, FLAG_COMMENT); - return -1; - } - } - return -1; -} - -char * syn_dirent_ext[] = {NULL}; - -BIM_SYNTAX(dirent, 1) -int esh_variable_qualifier(int c) { - return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '_'); -} - -int paint_esh_variable(struct syntax_state * state) { - if (charat() == '{') { - paint(1, FLAG_TYPE); - while (charat() != '}' && charat() != -1) paint(1, FLAG_TYPE); - if (charat() == '}') paint(1, FLAG_TYPE); - } else { - if (charat() == '?' || charat() == '$' || charat() == '#') { - paint(1, FLAG_TYPE); - } else { - while (esh_variable_qualifier(charat())) paint(1, FLAG_TYPE); - } - } - return 0; -} - -int paint_esh_string(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '"') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() == '$') { - paint(1, FLAG_TYPE); - paint_esh_variable(state); - last = -1; - } else if (charat() != -1) { - last = charat(); - paint(1, FLAG_STRING); - } - } - return 2; -} - -int paint_esh_single_string(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '\'') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() != -1) { - last = charat(); - paint(1, FLAG_STRING); - } - } - return 1; -} - -int esh_keyword_qualifier(int c) { - return (isalnum(c) || c == '?' || c == '_' || c == '-'); /* technically anything that isn't a space should qualify... */ -} - -char * esh_keywords[] = { - "cd","exit","export","help","history","if","empty?", - "equals?","return","export-cmd","source","exec","not","while", - "then","else","echo", - NULL -}; - -int syn_esh_calculate(struct syntax_state * state) { - if (state->state == 1) { - return paint_esh_single_string(state); - } else if (state->state == 2) { - return paint_esh_string(state); - } - if (charat() == '#') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - return -1; - } else if (charat() == '$') { - paint(1, FLAG_TYPE); - paint_esh_variable(state); - return 0; - } else if (charat() == '\'') { - paint(1, FLAG_STRING); - return paint_esh_single_string(state); - } else if (charat() == '"') { - paint(1, FLAG_STRING); - return paint_esh_string(state); - } else if (match_and_paint(state, "export", FLAG_KEYWORD, esh_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (esh_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - return 0; - } else if (match_and_paint(state, "export-cmd", FLAG_KEYWORD, esh_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (esh_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - return 0; - } else if (find_keywords(state, esh_keywords, FLAG_KEYWORD, esh_keyword_qualifier)) { - return 0; - } else if (isdigit(charat())) { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - return -1; -} - -/* Only enable esh highlighting by default on ToaruOS */ -char * syn_esh_ext[] = { -#ifdef __toaru__ - ".sh", -#endif - ".eshrc",".yutanirc", - NULL -}; - -BIM_SYNTAX(esh, 0) -int syn_gitcommit_calculate(struct syntax_state * state) { - if (state->i == 0 && charat() == '#') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else if (state->line_no == 0) { - /* First line is special */ - while (charat() != -1 && state->i < 50) paint(1, FLAG_KEYWORD); - while (charat() != -1) paint(1, FLAG_DIFFMINUS); - } else if (state->line_no == 1) { - /* No text on second line */ - while (charat() != -1) paint(1, FLAG_DIFFMINUS); - } else if (charat() != -1) { - skip(); - return 0; - } - return -1; -} - -char * syn_gitcommit_ext[] = {"COMMIT_EDITMSG", NULL}; - -char * syn_gitrebase_commands[] = { - "p","r","e","s","f","x","d", - "pick","reword","edit","squash","fixup", - "exec","drop", - NULL -}; - -int syn_gitrebase_calculate(struct syntax_state * state) { - if (state->i == 0 && charat() == '#') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else if (state->i == 0 && find_keywords(state, syn_gitrebase_commands, FLAG_KEYWORD, c_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (isxdigit(charat())) paint(1, FLAG_NUMERAL); - return -1; - } - - return -1; -} - -char * syn_gitrebase_ext[] = {"git-rebase-todo",NULL}; - -BIM_SYNTAX(gitcommit, 1) -BIM_SYNTAX(gitrebase, 1) -static char * groovy_keywords[] = { - "as","assert","break","case", - "catch","class","const","continue", - "def","default","do","else","enum", - "extends","finally","for", - "goto","if","implements","import", - "in","instanceof","interface","new", - "package","return","super", - "switch","throw","throws", - "trait","try","while", - NULL -}; - -static char * groovy_stuff[] = { - "true","false","null","this", - NULL -}; - -static char * groovy_primitives[] = { - "byte","char","short","int","long","BigInteger", - NULL -}; - -static int paint_triple_single(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '\'') { - paint(1, FLAG_STRING); - if (charat() == '\'' && nextchar() == '\'') { - paint(2, FLAG_STRING); - return 0; - } - } else { - paint(1, FLAG_STRING); - } - } - return 2; /* continues */ -} - -int syn_groovy_calculate(struct syntax_state * state) { - if (state->state <= 0) { - if (state->line_no == 0 && state->i == 0 && charat() == '#') { - paint_comment(state); - return -1; - } else if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - return -1; - } else if (charat() == '/' && nextchar() == '*') { - if (paint_c_comment(state) == 1) return 1; - } else if (charat() == '"') { - paint_simple_string(state); - return 0; - } else if (charat() == '\'') { - paint_single_string(state); - return 0; - } else if (find_keywords(state, groovy_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, groovy_primitives, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, groovy_stuff, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_c_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - return -1; - } else if (state->state == 1) { - if (paint_c_comment(state) == 1) return 1; - return 0; - } else if (state->state == 2) { - return paint_triple_single(state); - } - return -1; -} - -char * syn_groovy_ext[] = {".groovy",".jenkinsfile",".gradle",NULL}; - -BIM_SYNTAX(groovy, 1) -int syn_hosts_calculate(struct syntax_state * state) { - if (state->i == 0) { - if (charat() == '#') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - } else { - while (charat() != '\t' && charat() != ' ' && charat() != -1) paint(1, FLAG_NUMERAL); - while (charat() != -1) paint(1, FLAG_TYPE); - } - } - - return -1; -} - -char * syn_hosts_ext[] = {"hosts",NULL}; - -BIM_SYNTAX(hosts, 1) - -static char * syn_java_keywords[] = { - "assert","break","case","catch","class","continue", - "default","do","else","enum","exports","extends","finally", - "for","if","implements","instanceof","interface","module","native", - "new","requires","return","throws", - "strictfp","super","switch","synchronized","this","throw","try","while", - NULL -}; - -static char * syn_java_types[] = { - "var","boolean","void","short","long","int","double","float","enum","char", - "private","protected","public","static","final","transient","volatile","abstract", - NULL -}; - -static char * syn_java_special[] = { - "true","false","import","package","null", - NULL -}; - -static char * syn_java_at_comments[] = { - "@author","@see","@since","@return","@throws", - "@version","@exception","@deprecated", - /* @param is special */ - NULL -}; - -static int java_at_keyword_qualifier(int c) { - return isalnum(c) || (c == '_') || (c == '@'); -} - -static char * syn_java_brace_comments[] = { - "{@docRoot","{@inheritDoc","{@link","{@linkplain", - "{@value","{@code","{@literal","{@serial", - "{@serialData","{@serialField", - NULL -}; - -static int java_brace_keyword_qualifier(int c) { - return isalnum(c) || (c == '{') || (c == '@') || (c == '_'); -} - -static int paint_java_comment(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else if (charat() == '@') { - if (!find_keywords(state, syn_java_at_comments, FLAG_ESCAPE, java_at_keyword_qualifier)) { - if (match_and_paint(state, "@param", FLAG_ESCAPE, java_at_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - } else { - /* Paint the @ */ - paint(1, FLAG_COMMENT); - } - } - } else if (charat() == '{') { - /* see if this terminates */ - if (find_keywords(state, syn_java_brace_comments, FLAG_ESCAPE, java_brace_keyword_qualifier)) { - while (charat() != '}' && charat() != -1) { - paint(1, FLAG_ESCAPE); - } - if (charat() == '}') paint(1, FLAG_ESCAPE); - } else { - paint(1, FLAG_COMMENT); - } - } else if (charat() == '<') { - int is_tag = 0; - for (int i = 1; charrel(i) != -1; ++i) { - if (charrel(i) == '>') { - is_tag = 1; - break; - } - if (!isalnum(charrel(i)) && charrel(i) != '/') { - is_tag = 0; - break; - } - } - if (is_tag) { - paint(1, FLAG_TYPE); - while (charat() != -1 && charat() != '>') { - if (charat() == '/') paint(1, FLAG_TYPE); - else paint(1, FLAG_KEYWORD); - } - if (charat() == '>') paint(1, FLAG_TYPE); - } else { - /* Paint the < */ - paint(1, FLAG_COMMENT); - } - } else if (last == '*' && charat() == '/') { - paint(1, FLAG_COMMENT); - return 0; - } else { - last = charat(); - paint(1, FLAG_COMMENT); - } - } - return 1; -} - -int syn_java_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_c_numeral(state); - return 0; - } else if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - } else if (charat() == '/' && nextchar() == '*') { - /* C-style comments; TODO: Needs special stuff for @author; ; etc. */ - if (paint_java_comment(state) == 1) return 1; - } else if (find_keywords(state, syn_java_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_java_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_java_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (charat() == '\"') { - paint_simple_string(state); - return 0; - } else if (charat() == '\'') { - paint_c_char(state); - return 0; - } else if (charat() == '@') { - paint(1, FLAG_PRAGMA); - while (c_keyword_qualifier(charat())) paint(1, FLAG_PRAGMA); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: - if (paint_java_comment(state) == 1) return 1; - return 0; - } - return -1; -} - -char * syn_java_ext[] = {".java",NULL}; - -BIM_SYNTAX_COMPLETER(java) { - for (char ** keyword = syn_java_keywords; *keyword; ++keyword) { - add_if_match((*keyword),"(java keyword)"); - } - for (char ** keyword = syn_java_types; *keyword; ++keyword) { - add_if_match((*keyword),"(java type)"); - } - - /* XXX Massive hack */ - if (env->col_no > 1 && env->lines[env->line_no-1]->text[env->col_no-2].flags == FLAG_COMMENT) { - if (comp[0] == '@') { - for (char ** keyword = syn_java_at_comments; *keyword; ++keyword) { - add_if_match((*keyword),"(javadoc annotation)"); - } - } else if (comp[0] == '{') { - for (char ** keyword = syn_java_brace_comments; *keyword; ++keyword) { - add_if_match((*keyword),"(javadoc annotation)"); - } - } - } - - return 0; -} - -BIM_SYNTAX_EXT(java, 1, java_brace_keyword_qualifier) -static char * syn_js_keywords[] = { - "abstract","arguments","from", - "await","break","case","catch","class","const", - "continue","debugger","default","delete","do","else","enum","eval", - "export","extends","final","finally","for","function","goto", - "if","implements","import","in","instanceof","interface","let","long", - "native","new","package","private","protected","public","return", - "static","super","switch","synchronized","this","throw","throws", - "transienttrue","try","typeof","volatile","while","with","yield", - NULL -}; - -static char * syn_js_types[] = { - "int","float","double","short","var","void","byte","char","boolean", - NULL -}; - -static char * syn_js_special[] = { - "true","false","null", - NULL -}; - -static int paint_js_format_string(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '`') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '`') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '$' && nextchar() == '{') { - paint(2, FLAG_NUMERAL); - while (charat() != -1 && charat() != '}') { - paint(1, FLAG_NUMERAL); - } - paint(1, FLAG_NUMERAL); - } else { - paint(1, FLAG_STRING); - } - } - return 1; -} - -int syn_js_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_c_numeral(state); - return 0; - } else if (!c_keyword_qualifier(lastchar()) && (charat() >= 'A' && charat() <= 'Z')) { - while (charat() != -1 && c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - return 0; - } else if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - } else if (charat() == '/' && nextchar() == '*') { - if (paint_c_comment(state) == 1) return 1; - } else if (find_keywords(state, syn_js_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_js_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_js_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (charat() == '=' && nextchar() == '>') { - paint(2, FLAG_PRAGMA); - return 0; - } else if (charat() == ':' && c_keyword_qualifier(lastchar())) { - /* Assume things before parens are important? */ - int original_i = state->i; - state->i--; - while (charat() != -1 && c_keyword_qualifier(charat())) { - paint(1, FLAG_TYPE); - state->i -= 2; - } - state->i = original_i; - paint(1, FLAG_PRAGMA); - return 0; - } else if (charat() == '<') { - paint(1, FLAG_TYPE); - while (charat() != -1 && (charat() == '/' || c_keyword_qualifier(charat()))) { - paint(1, FLAG_TYPE); - } - return 0; - } else if (charat() == '>') { - paint(1, FLAG_TYPE); - return 0; - } else if (charat() == '\"') { - paint_simple_string(state); - return 0; - } else if (charat() == '\'') { - paint_single_string(state); - return 0; - } else if (charat() == '`') { - paint(1, FLAG_STRING); - if (paint_js_format_string(state)) return 2; - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: - if (paint_c_comment(state) == 1) return 1; - return 0; - case 2: - if (paint_js_format_string(state)) return 2; - return 0; - } - return -1; -} - -char * syn_js_ext[] = {".js",".jsx",".ts",".tsx",NULL}; - -BIM_SYNTAX_COMPLETER(js) { - for (char ** keyword = syn_js_keywords; *keyword; ++keyword) { - add_if_match((*keyword),"(javascript keyword)"); - } - for (char ** keyword = syn_js_types; *keyword; ++keyword) { - add_if_match((*keyword),"(javascript type)"); - } - - return 0; -} - -BIM_SYNTAX_EXT(js, 1, c_keyword_qualifier) -char * syn_json_keywords[] = { - "true","false","null", - NULL -}; - -int syn_json_calculate(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '"') { - int backtrack = state->i; - paint_simple_string(state); - int backtrack_end = state->i; - while (charat() == ' ') skip(); - if (charat() == ':') { - /* This is dumb. */ - state->i = backtrack; - paint(1, FLAG_ESCAPE); - while (state->i < backtrack_end-1) { - paint(1, FLAG_KEYWORD); - } - if (charat() == '"') { - paint(1, FLAG_ESCAPE); - } - } - return 0; - } else if (charat() == '-' || isdigit(charat())) { - if (charat() == '-') paint(1, FLAG_NUMERAL); - if (charat() == '0') { - paint(1, FLAG_NUMERAL); - } else { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - if (charat() == 'e' || charat() == 'E') { - paint(1, FLAG_NUMERAL); - if (charat() == '+' || charat() == '-') { - paint(1, FLAG_NUMERAL); - } - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - } else if (find_keywords(state,syn_json_keywords,FLAG_NUMERAL,c_keyword_qualifier)) { - /* ... */ - } else { - skip(); - return 0; - } - } - return -1; -} - -char * syn_json_ext[] = {".json",NULL}; // TODO other stuff that uses json - -BIM_SYNTAX(json, 1) -static char * syn_kotlin_keywords[] = { - "as","as?","break","class","continue","do","else","false","for", - "fun","if","in","!in","interface","is","!is","null","object", - "package","return","super","this","throw","true","try","typealias", - "typeof","val","var","when","while", - "by","catch","constructor","delegate","dynamic","field","file", - "finally","get","import","init","param","property","receiver", - "set","setparam","where", - "actual","abstract","annotation","companion","const", - "crossinline","data","enum","expect","external","final", - "infix","inner","internal","lateinit","noinline","open", - "operator","out","override","private","protected","public", - "reified","sealed","suspend","tailrec","vararg", - "field","it","inline", - NULL -}; - -static char * syn_kotlin_types[] = { - "Byte","Short","Int","Long", - "Float","Double", - NULL -}; - -static char * syn_kotlin_at_comments[] = { - "@author","@see","@since","@return","@throws", - "@version","@exception","@deprecated", - /* @param is special */ - NULL -}; - -static int kt_at_keyword_qualifier(int c) { - return isalnum(c) || (c == '_') || (c == '@'); -} - -static char * syn_kotlin_brace_comments[] = { - "{@docRoot","{@inheritDoc","{@link","{@linkplain", - "{@value","{@code","{@literal","{@serial", - "{@serialData","{@serialField", - NULL -}; - -static int kotlin_keyword_qualifier(int c) { - return isalnum(c) || (c == '?') || (c == '!') || (c == '_'); -} - -static int kt_brace_keyword_qualifier(int c) { - return isalnum(c) || (c == '{') || (c == '@') || (c == '_'); -} - -static int paint_kotlin_comment(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else if (charat() == '@') { - if (!find_keywords(state, syn_kotlin_at_comments, FLAG_ESCAPE, kt_at_keyword_qualifier)) { - if (match_and_paint(state, "@param", FLAG_ESCAPE, kt_at_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - } else { - /* Paint the @ */ - paint(1, FLAG_COMMENT); - } - } - } else if (charat() == '{') { - /* see if this terminates */ - if (find_keywords(state, syn_kotlin_brace_comments, FLAG_ESCAPE, kt_brace_keyword_qualifier)) { - while (charat() != '}' && charat() != -1) { - paint(1, FLAG_ESCAPE); - } - if (charat() == '}') paint(1, FLAG_ESCAPE); - } else { - paint(1, FLAG_COMMENT); - } - } else if (charat() == '<') { - int is_tag = 0; - for (int i = 1; charrel(i) != -1; ++i) { - if (charrel(i) == '>') { - is_tag = 1; - break; - } - if (!isalnum(charrel(i)) && charrel(i) != '/') { - is_tag = 0; - break; - } - } - if (is_tag) { - paint(1, FLAG_TYPE); - while (charat() != -1 && charat() != '>') { - if (charat() == '/') paint(1, FLAG_TYPE); - else paint(1, FLAG_KEYWORD); - } - if (charat() == '>') paint(1, FLAG_TYPE); - } else { - /* Paint the < */ - paint(1, FLAG_COMMENT); - } - } else if (last == '*' && charat() == '/') { - paint(1, FLAG_COMMENT); - return 0; - } else { - last = charat(); - paint(1, FLAG_COMMENT); - } - } - return 1; -} - -int syn_kotlin_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_c_numeral(state); - return 0; - } else if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - } else if (charat() == '/' && nextchar() == '*') { - /* C-style comments; TODO: Needs special stuff for @author; ; etc. */ - if (paint_kotlin_comment(state) == 1) return 1; - } else if (find_keywords(state, syn_kotlin_keywords, FLAG_KEYWORD, kotlin_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_kotlin_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (charat() == '\"') { - paint_simple_string(state); - return 0; - } else if (charat() == '\'') { - paint_c_char(state); - return 0; - } else if (charat() == '@') { - paint(1, FLAG_PRAGMA); - while (c_keyword_qualifier(charat())) paint(1, FLAG_PRAGMA); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: - if (paint_kotlin_comment(state) == 1) return 1; - return 0; - } - return -1; -} - -char * syn_kotlin_ext[] = {".kt",NULL}; - -BIM_SYNTAX_COMPLETER(kotlin) { - for (char ** keyword = syn_kotlin_keywords; *keyword; ++keyword) { - add_if_match((*keyword),"(kotlin keyword)"); - } - for (char ** keyword = syn_kotlin_types; *keyword; ++keyword) { - add_if_match((*keyword),"(kotlin type)"); - } - - /* XXX Massive hack */ - if (env->col_no > 1 && env->lines[env->line_no-1]->text[env->col_no-2].flags == FLAG_COMMENT) { - if (comp[0] == '@') { - for (char ** keyword = syn_kotlin_at_comments; *keyword; ++keyword) { - add_if_match((*keyword),"(javadoc annotation)"); - } - } else if (comp[0] == '{') { - for (char ** keyword = syn_kotlin_brace_comments; *keyword; ++keyword) { - add_if_match((*keyword),"(javadoc annotation)"); - } - } - } - - return 0; -} - -BIM_SYNTAX_EXT(kotlin, 1, kt_brace_keyword_qualifier) - -int paint_krk_string(struct syntax_state * state, int type) { - while (charat() != -1) { - if (charat() == '\\' && nextchar() == type) { - paint(2, FLAG_ESCAPE); - } else if (charat() == type) { - paint(1, FLAG_STRING); - return 0; - } else if (charat() == '\\') { - if (nextchar() == 'x') { - paint(2, FLAG_ESCAPE); - /* Why is my FLAG_ERROR not valid in rline? */ - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); - } else if (nextchar() == 'u') { - paint(2, FLAG_ESCAPE); - /* Why is my FLAG_ERROR not valid in rline? */ - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_DIFFMINUS); - } else { - paint(2, FLAG_ESCAPE); - } - } else { - paint(1, FLAG_STRING); - } - } - if (lastchar() == '\\') { - return (type == '"') ? 3 : 4; /* continues */ - } - return -1; -} - -char * syn_krk_keywords[] = { - "and","class","def","else","export","for","if","in","import", - "let","not","or","return","while","try","except","raise", - "continue","break","as","from","elif","lambda","with","is", - NULL -}; - -char * syn_krk_types[] = { - /* built-in functions */ - "self", "super", /* implicit in a class method */ - "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ - "list","dict","range", /* builtin classes */ - "object","exception","isinstance","type", - "print","any","all","set","bool", - NULL -}; - -char * syn_krk_special[] = { - "True","False","None", - NULL -}; - -int paint_krk_numeral(struct syntax_state * state) { - if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { - paint(2, FLAG_NUMERAL); - while (isxdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && (nextchar() == 'o' || nextchar() == 'O')) { - paint(2, FLAG_NUMERAL); - while (charat() >= '0' && charat() <= '7') paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && (nextchar() == 'b' || nextchar() == 'B')) { - paint(2, FLAG_NUMERAL); - while (charat() == '0' || charat() == '1') paint(1, FLAG_NUMERAL); - } else { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == '.' && isdigit(nextchar())) { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - } - return 0; -} - -int paint_krk_triple_string(struct syntax_state * state, int type) { - while (charat() != -1) { - if (charat() == type) { - paint(1, FLAG_STRING); - if (charat() == type && nextchar() == type) { - paint(2, FLAG_STRING); - return 0; - } - } else if (charat() == '\\') { - if (nextchar() == 'x') { - paint(2, FLAG_ESCAPE); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); - } else if (nextchar() == 'u') { - paint(2, FLAG_ESCAPE); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); - paint(1, isxdigit(charat()) ? FLAG_ESCAPE : FLAG_ERROR); - } else { - paint(2, FLAG_ESCAPE); - } - } else { - paint(1, FLAG_STRING); - } - } - return (type == '"') ? 1 : 2; /* continues */ -} - -int syn_krk_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == '#') { - paint_comment(state); - } else if (charat() == '@') { - paint(1, FLAG_TYPE); - while (c_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - return 0; - } else if (charat() == '"' || charat() == '\'') { - int type = charat(); - if (nextchar() == type && charrel(2) == type) { - paint(3, FLAG_STRING); - return paint_krk_triple_string(state, type); - } else { - paint(1, FLAG_STRING); - return paint_krk_string(state, type); - } - return 0; - } else if (find_keywords(state, syn_krk_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (lastchar() != '.' && find_keywords(state, syn_krk_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_krk_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_krk_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: - return paint_krk_triple_string(state, '"'); - case 2: - return paint_krk_triple_string(state, '\''); - case 3: - return paint_krk_string(state, '"'); - case 4: - return paint_krk_string(state, '\''); - } - return -1; -} - -char * syn_krk_ext[] = {".krk",NULL}; - -BIM_SYNTAX(krk, 1) -int lisp_paren_flags[] = { - FLAG_DIFFPLUS, FLAG_TYPE, FLAG_PRAGMA, FLAG_KEYWORD, -}; - -int lisp_paren_flag_from_state(int i) { - return lisp_paren_flags[i % (sizeof(lisp_paren_flags) / sizeof(*lisp_paren_flags))]; -} - -int syn_lisp_calculate(struct syntax_state * state) { - - if (state->state == -1) state->state = 0; - - while (charat() != -1) { - if (charat() == ';') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else if (charat() == '(') { - paint(1, lisp_paren_flag_from_state(state->state)); - state->state++; - - while (charat() != ' ' && charat() != -1 && charat() != '(' && charat() != ')') { - paint(1, FLAG_KEYWORD); - } - } else if (charat() == ')') { - if (state->state == 0) { - paint(1, FLAG_ERROR); - } else { - state->state--; - paint(1, lisp_paren_flag_from_state(state->state)); - } - } else if (charat() == ':') { - while (charat() != ' ' && charat() != -1 && charat() != '(' && charat() != ')') { - paint(1, FLAG_PRAGMA); - } - } else if (charat() == '"') { - paint_simple_string(state); - } else if (charat() != -1) { - skip(); - } - } - - if (state->state == 0) return -1; - if (charat() == -1) return state->state; - return -1; /* Not sure what happened */ -} - -char * syn_lisp_ext[] = { - ".lisp",".lsp",".cl", - NULL -}; - -BIM_SYNTAX(lisp, 0) -int make_command_qualifier(int c) { - return isalnum(c) || c == '_' || c == '-' || c == '.'; -} - -char * syn_make_commands[] = { - "define","endef","undefine","ifdef","ifndef","ifeq","ifneq","else","endif", - "include","sinclude","override","export","unexport","private","vpath", - "-include", - NULL -}; - -char * syn_make_functions[] = { - "subst","patsubst","findstring","filter","filter-out", - "sort","word","words","wordlist","firstword","lastword", - "dir","notdir","suffix","basename","addsuffix","addprefix", - "join","wildcard","realpath","abspath","error","warning", - "shell","origin","flavor","foreach","if","or","and", - "call","eval","file","value", - NULL -}; - -char * syn_make_special_targets[] = { - "all", /* Not really special, but highlight it 'cause I feel like it. */ - ".PHONY", ".SUFFIXES", ".DEFAULT", ".PRECIOUS", ".INTERMEDIATE", - ".SECONDARY", ".SECONDEXPANSION", ".DELETE_ON_ERROR", ".IGNORE", - ".LOW_RESOLUTION_TIME", ".SILENT", ".EXPORT_ALL_VARIABLES", - ".NOTPARALLEL", ".ONESHELL", ".POSIX", - NULL -}; - -int make_close_paren(struct syntax_state * state) { - paint(2, FLAG_TYPE); - find_keywords(state, syn_make_functions, FLAG_KEYWORD, c_keyword_qualifier); - int i = 1; - while (charat() != -1) { - if (charat() == '(') { - i++; - } else if (charat() == ')') { - i--; - if (i == 0) { - paint(1,FLAG_TYPE); - return 0; - } - } else if (charat() == '"') { - paint_simple_string(state); - } - paint(1,FLAG_TYPE); - } - return 0; -} - -int make_close_brace(struct syntax_state * state) { - paint(2, FLAG_TYPE); - while (charat() != -1) { - if (charat() == '}') { - paint(1, FLAG_TYPE); - return 0; - } - paint(1, FLAG_TYPE); - } - return 0; -} - -int make_variable_or_comment(struct syntax_state * state, int flag) { - while (charat() != -1) { - if (charat() == '$') { - switch (nextchar()) { - case '(': - make_close_paren(state); - break; - case '{': - make_close_brace(state); - break; - default: - paint(2, FLAG_TYPE); - break; - } - } else if (charat() == '#') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else { - paint(1, flag); - } - } - return 0; -} - -int syn_make_calculate(struct syntax_state * state) { - if (state->i == 0 && charat() == '\t') { - make_variable_or_comment(state, FLAG_NUMERAL); - } else { - while (charat() == ' ') { skip(); } - /* Peek forward to see if this is a rule or a variable */ - int whatisit = 0; - for (int i = 0; charrel(i) != -1; ++i) { - if (charrel(i) == ':' && charrel(i+1) != '=') { - whatisit = 1; - break; - } else if (charrel(i) == '=') { - whatisit = 2; - break; - } else if (charrel(i) == '#') { - break; - } - } - if (!whatisit) { - /* Check for functions */ - while (charat() != -1) { - if (charat() == '#') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - } else if (find_keywords(state, syn_make_commands, FLAG_KEYWORD, make_command_qualifier)) { - continue; - } else if (charat() == '$') { - make_variable_or_comment(state, FLAG_NONE); - } else { - skip(); - } - } - } else if (whatisit == 1) { - /* It's a rule */ - while (charat() != -1) { - if (charat() == '#') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - } else if (charat() == ':') { - paint(1, FLAG_TYPE); - make_variable_or_comment(state, FLAG_NONE); - } else if (find_keywords(state, syn_make_special_targets, FLAG_KEYWORD, make_command_qualifier)) { - continue; - } else { - paint(1, FLAG_TYPE); - } - } - } else if (whatisit == 2) { - /* It's a variable definition */ - match_and_paint(state, "export", FLAG_KEYWORD, c_keyword_qualifier); - while (charat() != -1 && charat() != '+' && charat() != '=' && charat() != ':' && charat() != '?') { - paint(1, FLAG_TYPE); - } - while (charat() != -1 && charat() != '=') skip(); - /* Highlight variable expansions */ - make_variable_or_comment(state, FLAG_NONE); - } - } - return -1; -} - -char * syn_make_ext[] = {"Makefile","makefile","GNUmakefile",".mak",NULL}; - -BIM_SYNTAX(make, 0) -/** - * NROFF highlighter - */ - -int syn_man_calculate(struct syntax_state * state) { - while (charat() != -1) { - if (state->i == 0 && charat() == '.') { - if (nextchar() == 'S' && charrel(2) == 'H' && charrel(3) == ' ') { - paint(3, FLAG_KEYWORD); - while (charat() != -1) paint(1, FLAG_STRING); - } else if (nextchar() == 'B' && charrel(2) == ' ') { - paint(2, FLAG_KEYWORD); - while (charat() != -1) paint(1, FLAG_BOLD); - } else if (isalpha(nextchar())) { - paint(1, FLAG_KEYWORD); - while (charat() != -1 && isalpha(charat())) paint(1, FLAG_KEYWORD); - } else if (nextchar() == '\\' && charrel(2) == '"') { - while (charat() != -1) paint(1, FLAG_COMMENT); - } else { - skip(); - } - } else if (charat() == '\\') { - if (nextchar() == 'f') { - paint(2, FLAG_NUMERAL); - paint(1, FLAG_PRAGMA); - } else { - paint(2, FLAG_ESCAPE); - } - } else { - skip(); - } - } - return -1; -} - -/* Yes this is dumb. No, I don't care. */ -char * syn_man_ext[] = {".1",".2",".3",".4",".5",".6",".7",".8",NULL}; - -BIM_SYNTAX(man, 0) -static struct syntax_definition * syn_c = NULL; -static struct syntax_definition * syn_py = NULL; -static struct syntax_definition * syn_java = NULL; -static struct syntax_definition * syn_json = NULL; -static struct syntax_definition * syn_xml = NULL; -static struct syntax_definition * syn_make = NULL; -static struct syntax_definition * syn_diff = NULL; -static struct syntax_definition * syn_rust = NULL; -static struct syntax_definition * syn_bash = NULL; - -static int _initialized = 0; - -int syn_markdown_calculate(struct syntax_state * state) { - if (!_initialized) { - _initialized = 1; - syn_c = find_syntax_calculator("c"); - syn_py = find_syntax_calculator("py"); - syn_java = find_syntax_calculator("java"); - syn_json = find_syntax_calculator("json"); - syn_xml = find_syntax_calculator("xml"); - syn_make = find_syntax_calculator("make"); - syn_diff = find_syntax_calculator("diff"); - syn_rust = find_syntax_calculator("rust"); - syn_bash = find_syntax_calculator("bash"); - } - if (state->state < 1) { - while (charat() != -1) { - if (state->i == 0 && charat() == '#') { - while (charat() == '#') paint(1, FLAG_KEYWORD); - while (charat() != -1) paint(1, FLAG_BOLD); - return -1; - } else if (state->i == 0) { - while (charat() == ' ') skip(); - if (charat() == '`' && nextchar() == '`' && charrel(2) == '`') { - paint(3, FLAG_STRING); - if (syn_c &&match_forward(state, "c")) { - nest(syn_c->calculate, 100); - } else if (syn_c && match_forward(state,"c++")) { - nest(syn_c->calculate, 100); - } else if (syn_py && (match_forward(state,"py") || match_forward(state,"python"))) { - nest(syn_py->calculate, 200); - } else if (syn_java && match_forward(state, "java")) { - nest(syn_java->calculate, 300); - } else if (syn_json && match_forward(state,"json")) { - nest(syn_json->calculate, 400); - } else if (syn_xml && match_forward(state,"xml")) { - nest(syn_xml->calculate, 500); - } else if (syn_xml && match_forward(state,"html")) { - nest(syn_xml->calculate, 500); // TODO this will be a different highlighter later - } else if (syn_make && match_forward(state,"make")) { - nest(syn_make->calculate, 600); - } else if (syn_diff && match_forward(state, "diff")) { - nest(syn_diff->calculate, 700); - } else if (syn_bash && match_forward(state, "bash")) { - nest(syn_bash->calculate, 800); - } else if (syn_rust && match_forward(state, "rust")) { - nest(syn_rust->calculate, 900); /* Keep this at the end for now */ - } - return 1; - } - } - if (charat() == '`') { - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '`') { - paint(1, FLAG_STRING); - return 0; - } - paint(1, FLAG_STRING); - } - } else if (charat() == '[') { - skip(); - while (charat() != -1 && charat() != ']') { - paint(1, FLAG_LINK); - } - if (charat() == ']') skip(); - if (charat() == '(') { - skip(); - while (charat() != -1 && charat() != ')') { - paint(1, FLAG_NUMERAL); - } - } - } else { - skip(); - return 0; - } - } - return -1; - } else if (state->state >= 1) { - /* Continuing generic triple-` */ - if (state->i == 0) { - /* Go backwards until we find the source ``` */ - int count = 0; - for (int i = state->line_no; i > 0; i--) { - if (state->env->lines[i]->istate < 1) { - while (state->env->lines[i]->text[count].codepoint == ' ') { - if (charrel(count) != ' ') goto _nope; - count++; - } - break; - } - } - if (charrel(count) == '`' && charrel(count+1) == '`' && charrel(count+2) == '`' && charrel(count+3) == -1) { - paint(count+3,FLAG_STRING); - return -1; - } - } -_nope: - if (state->state == 1) { - while (charat() != -1) paint(1, FLAG_STRING); - return 1; - } else if (state->state < 199) { - nest(syn_c->calculate, 100); - } else if (state->state < 299) { - nest(syn_py->calculate, 200); - } else if (state->state < 399) { - nest(syn_java->calculate, 300); - } else if (state->state < 499) { - nest(syn_json->calculate, 400); - } else if (state->state < 599) { - nest(syn_xml->calculate, 500); - } else if (state->state < 699) { - nest(syn_make->calculate, 600); - } else if (state->state < 799) { - nest(syn_diff->calculate, 700); - } else if (state->state < 899) { - nest(syn_bash->calculate, 800); - } else { - nest(syn_rust->calculate, 900); - } - } - return -1; -} - -char * syn_markdown_ext[] = {".md",".markdown",NULL}; - -BIM_SYNTAX(markdown, 1) -char * syn_proto_keywords[] = { - "syntax","import","option","package","message","group","oneof", - "optional","required","repeated","default","extend","extensions","to","max","reserved", - "service","rpc","returns","stream", - NULL -}; - -char * syn_proto_types[] = { - "int32","int64","uint32","uint64","sint32","sint64", - "fixed32","fixed64","sfixed32","sfixed64", - "float","double","bool","string","bytes", - "enum", - NULL -}; - -char * syn_proto_special[] = { - "true","false", - NULL -}; - -int syn_proto_calculate(struct syntax_state * state) { - if (state->state < 1) { - if (charat() == '/' && nextchar() == '/') { - paint_comment(state); - } else if (charat() == '/' && nextchar() == '*') { - if (paint_c_comment(state) == 1) return 1; - return 0; - } else if (find_keywords(state, syn_proto_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_proto_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_proto_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (charat() == '"') { - paint_simple_string(state); - return 0; - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_c_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - return -1; - } else { - if (paint_c_comment(state) == 1) return 1; - return 0; - } -} - -char * syn_proto_ext[] = {".proto",NULL}; - -BIM_SYNTAX(proto, 1) -char * syn_py_keywords[] = { - "class","def","return","del","if","else","elif","for","while","continue", - "break","assert","as","and","or","except","finally","from","global", - "import","in","is","lambda","with","nonlocal","not","pass","raise","try","yield", - NULL -}; - -char * syn_py_types[] = { - /* built-in functions */ - "abs","all","any","ascii","bin","bool","breakpoint","bytes", - "bytearray","callable","compile","complex","delattr","chr", - "dict","dir","divmod","enumerate","eval","exec","filter","float", - "format","frozenset","getattr","globals","hasattr","hash","help", - "hex","id","input","int","isinstance","issubclass","iter","len", - "list","locals","map","max","memoryview","min","next","object", - "oct","open","ord","pow","print","property","range","repr","reverse", - "round","set","setattr","slice","sorted","staticmethod","str","sum", - "super","tuple","type","vars","zip", - NULL -}; - -char * syn_py_special[] = { - "True","False","None", - NULL -}; - -int paint_py_triple_double(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '"') { - paint(1, FLAG_STRING); - if (charat() == '"' && nextchar() == '"') { - paint(2, FLAG_STRING); - return 0; - } - } else { - paint(1, FLAG_STRING); - } - } - return 1; /* continues */ -} - -int paint_py_triple_single(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '\'') { - paint(1, FLAG_STRING); - if (charat() == '\'' && nextchar() == '\'') { - paint(2, FLAG_STRING); - return 0; - } - } else { - paint(1, FLAG_STRING); - } - } - return 2; /* continues */ -} - -int paint_py_single_string(struct syntax_state * state) { - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '\'') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '\'') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_STRING); - } - } - return 0; -} - -int paint_py_numeral(struct syntax_state * state) { - if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { - paint(2, FLAG_NUMERAL); - while (isxdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && nextchar() == '.') { - paint(2, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - if ((charat() == '+' || charat() == '-') && (nextchar() == 'e' || nextchar() == 'E')) { - paint(2, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } else if (charat() == 'e' || charat() == 'E') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } - if (charat() == 'j') paint(1, FLAG_NUMERAL); - return 0; - } else { - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - if ((charat() == '+' || charat() == '-') && (nextchar() == 'e' || nextchar() == 'E')) { - paint(2, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } else if (charat() == 'e' || charat() == 'E') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } - if (charat() == 'j') paint(1, FLAG_NUMERAL); - return 0; - } - if (charat() == 'j') paint(1, FLAG_NUMERAL); - } - while (charat() == 'l' || charat() == 'L') paint(1, FLAG_NUMERAL); - return 0; -} - -void paint_py_format_string(struct syntax_state * state, char type) { - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == type) { - paint(2, FLAG_ESCAPE); - } else if (charat() == type) { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '{') { - paint(1, FLAG_NUMERAL); - if (charat() == '}') { - state->i--; - paint(2, FLAG_ERROR); /* Can't do that. */ - } else { - while (charat() != -1 && charat() != '}') { - paint(1, FLAG_NUMERAL); - } - paint(1, FLAG_NUMERAL); - } - } else { - paint(1, FLAG_STRING); - } - } -} - -int syn_py_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == '#') { - paint_comment(state); - } else if (state->i == 0 && match_and_paint(state, "import", FLAG_PRAGMA, c_keyword_qualifier)) { - return 0; - } else if (charat() == '@') { - paint(1, FLAG_PRAGMA); - while (c_keyword_qualifier(charat())) paint(1, FLAG_PRAGMA); - return 0; - } else if (charat() == '"') { - if (nextchar() == '"' && charrel(2) == '"') { - paint(3, FLAG_STRING); - return paint_py_triple_double(state); - } else if (lastchar() == 'f') { - /* I don't like backtracking like this, but it makes this parse easier */ - state->i--; - paint(1,FLAG_TYPE); - paint_py_format_string(state,'"'); - return 0; - } else { - paint_simple_string(state); - return 0; - } - } else if (find_keywords(state, syn_py_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (lastchar() != '.' && find_keywords(state, syn_py_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_py_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (charat() == '\'') { - if (nextchar() == '\'' && charrel(2) == '\'') { - paint(3, FLAG_STRING); - return paint_py_triple_single(state); - } else if (lastchar() == 'f') { - /* I don't like backtracking like this, but it makes this parse easier */ - state->i--; - paint(1,FLAG_TYPE); - paint_py_format_string(state,'\''); - return 0; - } else { - return paint_py_single_string(state); - } - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_py_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: /* multiline """ string */ - return paint_py_triple_double(state); - case 2: /* multiline ''' string */ - return paint_py_triple_single(state); - } - return -1; -} - -char * syn_py_ext[] = {".py",NULL}; - -BIM_SYNTAX(py, 1) -static char * syn_rust_keywords[] = { - "as","break","const","continue","crate","else","enum","extern", - "false","fn","for","if","impl","in","let","loop","match","mod", - "move","mut","pub","ref","return","Self","self","static","struct", - "super","trait","true","type","unsafe","use","where","while", - NULL, -}; - -static char * syn_rust_types[] = { - "bool","char","str", - "i8","i16","i32","i64", - "u8","u16","u32","u64", - "isize","usize", - "f32","f64", - NULL, -}; - -static int paint_rs_comment(struct syntax_state * state) { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else if (charat() == '*' && nextchar() == '/') { - paint(2, FLAG_COMMENT); - state->state--; - if (state->state == 0) return 0; - } else if (charat() == '/' && nextchar() == '*') { - state->state++; - paint(2, FLAG_COMMENT); - } else { - paint(1, FLAG_COMMENT); - } - } - return state->state; -} - -int paint_rust_numeral(struct syntax_state * state) { - if (charat() == '0' && nextchar() == 'b') { - paint(2, FLAG_NUMERAL); - while (charat() == '0' || charat() == '1' || charat() == '_') paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && nextchar() == 'o') { - paint(2, FLAG_NUMERAL); - while ((charat() >= '0' && charat() <= '7') || charat() == '_') paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && nextchar() == 'x') { - paint(2, FLAG_NUMERAL); - while (isxdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && nextchar() == '.') { - paint(2, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } else { - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat()) || charat() == '_') paint(1, FLAG_NUMERAL); - } - } - return 0; -} - -static int syn_rust_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == '/' && nextchar() == '/') { - /* C++-style comments */ - paint_comment(state); - } else if (charat() == '/' && nextchar() == '*') { - paint(2, FLAG_COMMENT); - state->state = 1; - return paint_rs_comment(state); - } else if (find_keywords(state, syn_rust_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_rust_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (charat() == '\"') { - paint_simple_string(state); - return 0; - } else if (charat() == '\'') { - paint_c_char(state); - return 0; - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_rust_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - default: /* Nested comments */ - return paint_rs_comment(state); - } - - return -1; -} - -char * syn_rust_ext[] = {".rs",NULL}; - -BIM_SYNTAX(rust, 1) -static struct syntax_definition * soy_syn_xml = NULL; -static int _soy_initialized = 0; - -static char * soy_keywords[] = { - "call","template","param","namespace","let","and","if","else","elseif", - "switch","case","default","foreach","literal","sp","nil","lb","rb","in", - NULL -}; - -static char * soy_functions[] = { - "isNonnull","strContains","ceiling","floor","max","min","randomInt", - "round","index","isFirst","isLast","length","augmentMap","keys", - NULL -}; - -int soy_keyword_qualifier(int c) { - return isalnum(c) || (c == '_') || (c == '.'); -} - -int syn_soy_calculate(struct syntax_state * state) { - if (!_soy_initialized) { - _soy_initialized = 1; - soy_syn_xml = find_syntax_calculator("xml"); - } - - if (state->state > 0 && state->state <= 4) { - return soy_syn_xml ? soy_syn_xml->calculate(state) : 0; - } else if (state->state == 5) { - if (paint_c_comment(state) == 1) return 5; - return 0; - } else { - if (charat() == '{') { - paint(1, FLAG_TYPE); - while (charat() != -1 && charat() != '}') { - if (find_keywords(state, soy_keywords, FLAG_KEYWORD, soy_keyword_qualifier)) { - continue; - } else if (find_keywords(state, soy_functions, FLAG_TYPE, soy_keyword_qualifier)) { - continue; - } else if (charat() == '\'') { - paint_single_string(state); - } else if (charat() == '\"') { - paint_simple_string(state); - } else if (charat() == '$') { - paint(1,FLAG_NUMERAL); - while (charat() != -1 && soy_keyword_qualifier(charat())) paint(1, FLAG_NUMERAL); - } else { - skip(); - } - } - if (charat() == '}') paint(1, FLAG_TYPE); - return 0; - } else if (charat() == '/' && nextchar() == '*') { - if (paint_c_comment(state) == 1) return 5; - return 0; - } else { - return soy_syn_xml ? soy_syn_xml->calculate(state) : 0; - } - } - - return -1; -} - -char * syn_soy_ext[] = {".soy",NULL}; - -BIM_SYNTAX(soy, 1) -int syn_xml_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == -1) return -1; - if (charat() != '<') { - skip(); - return 0; - } - /* Opening brace */ - if (charat() == '<' && nextchar() == '!' && charrel(2) == '-' && charrel(3) == '-') { - paint(4, FLAG_COMMENT); - goto _comment; - } - paint(1, FLAG_TYPE); - /* Fall through */ - case 1: - /* State 1: We saw an opening brace. */ - while (charat() != -1) { - if (charat() == '/') paint(1, FLAG_TYPE); - if (charat() == '?') paint(1, FLAG_TYPE); - if (charat() == ' ' || charat() == '\t') skip(); - if (isalnum(charat())) { - while (isalnum(charat()) || charat() == '-') paint(1, FLAG_KEYWORD); - if (charat() == -1) return 2; - goto _in_tag; - } else { - paint(1, FLAG_TYPE); - } - } - return -1; -_in_tag: - case 2: - while (charat() != -1) { - if (charat() == '>') { - paint(1, FLAG_TYPE); - return 0; - } else if (charat() == '"') { - paint_simple_string(state); - if (charat() == -1 && lastchar() != '"') { - return 3; - } - } else { - paint(1, FLAG_TYPE); - } - } - return 2; - case 3: - /* In a string in tag */ - if (charat() == '"') { - paint(1, FLAG_STRING); - return 2; - } else { - paint_simple_string(state); - if (charat() == -1 && lastchar() != '"') { - return 3; - } - } - break; -_comment: - case 4: - while (charat() != -1) { - if (charat() == '-' && nextchar() == '-' && charrel(2) == '>') { - paint(3, FLAG_COMMENT); - return 0; - } else { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - } - return 4; - } - return -1; -} - -char * syn_xml_ext[] = {".xml",".htm",".html",".iml",NULL}; // TODO other stuff that uses xml (it's a lot!); FIXME htm/html are temporary; make dedicated SGML ones for this - -BIM_SYNTAX(xml, 1) diff --git a/base/home/local/.bim3rc b/base/home/local/.bim3rc new file mode 100644 index 00000000..0866ea36 --- /dev/null +++ b/base/home/local/.bim3rc @@ -0,0 +1,25 @@ +''' +Sample config file for bim3 +''' + +# Quirks work the same as they did in bim2, except for the obvious syntax change +quirk('TERM','screen','no24bit','noitalic') +quirk('TERM','xterm-256color','caninsert','canpaste','cansgrmouse') +quirk('TERMINAL_EMULATOR','JetBrains','nobce') + +# checkprop() returns 0 if we _can_ do something, so +# call it with 'not' to check capabilities... +if not checkprop('can_unicode'): + tabindicator('»') + spaceindicator('·') + +# Themes are actually Kuroko functions now, but we load +# them into a table like always for the :theme command +theme('sunsmoke') + +# Non-string values are coerced into strings, so these commands +# can take integer values. +global.git(1) +global.statusbar(1) +global.autohidetabs(1) +smartcomplete(1) diff --git a/base/home/local/.bimrc b/base/home/local/.bimrc deleted file mode 100644 index 0c0e1400..00000000 --- a/base/home/local/.bimrc +++ /dev/null @@ -1,19 +0,0 @@ -# Load theme files -quirk TERM toaru-vga no256color no24bit noitalic -quirk TERM xterm-256color caninsert canpaste cansgrmouse -quirk TERM toaru caninsert canpaste cansgrmouse -tabindicator » -spaceindicator · - -rundir /usr/share/bim/themes - -# Fallback order - last successful theme "sticks" -colorscheme ansi -colorscheme sunsmoke256 -colorscheme sunsmoke - -# Enable statusbar (default) -global.statusbar 1 - -# Autohide tabs -global.autohidetabs 1 diff --git a/base/usr/share/bim/themes/ansi.bimscript b/base/usr/share/bim/themes/ansi.bimscript deleted file mode 100644 index 9dc216d1..00000000 --- a/base/usr/share/bim/themes/ansi.bimscript +++ /dev/null @@ -1,51 +0,0 @@ -function theme:ansi - # First set regular colors - setcolor text-fg @7 - setcolor text-bg @0 - setcolor alternate-fg @5 - setcolor alternate-bg @9 - setcolor number-fg @3 - setcolor number-bg @9 - setcolor status-fg @7 - setcolor status-bg @4 - setcolor status-alt @4 - setcolor tabbar-bg @4 - setcolor tab-bg @4 - setcolor keyword @4 - setcolor string @2 - setcolor comment @5 - setcolor type @3 - setcolor pragma @1 - setcolor numeral @1 - setcolor error-fg @7 - setcolor error-bg @1 - setcolor search-fg @0 - setcolor search-bg @3 - setcolor select-bg @7 - setcolor select-fg @0 - setcolor red @1 - setcolor green @2 - setcolor bold @7 - setcolor link @4 - setcolor escape @2 - - trycall _ansi_brights - - action redraw_all -end - -function _ansi_brights - checkprop can_bright - setcolor text-fg @17 - setcolor text-bg @9 - setcolor alternate-fg @10 - setcolor status-fg @17 - setcolor status-alt @14 - setcolor keyword @14 - setcolor comment @10 - setcolor error-fg @17 - setcolor search-bg @13 - setcolor select-bg @17 - setcolor link @14 - setcolor escape @12 -end diff --git a/base/usr/share/bim/themes/citylights.bimscript b/base/usr/share/bim/themes/citylights.bimscript deleted file mode 100644 index 0eb5dade..00000000 --- a/base/usr/share/bim/themes/citylights.bimscript +++ /dev/null @@ -1,32 +0,0 @@ -function theme:citylights - checkprop can_24bit - setcolor text-fg 2;151;178;198 - setcolor text-bg 2;29;37;44 - setcolor alternate-fg 2;45;55;65 - setcolor alternate-bg 2;33;42;50 - setcolor number-fg 2;71;89;103 - setcolor number-bg 2;37;47;56 - setcolor status-fg 2;151;178;198 - setcolor status-bg 2;53;67;78 - setcolor status-alt 2;116;144;166 - setcolor tabbar-bg 2;37;47;56 - setcolor tab-bg 2;29;37;44 - setcolor keyword 2;94;196;255 - setcolor string 2;83;154;252 - setcolor comment 2;107;133;153;3 - setcolor type 2;139;212;156 - setcolor pragma 2;0;139;148 - setcolor numeral 2;207;118;132 - setcolor error-fg 5;15 - setcolor error-bg 5;196 - setcolor search-fg 5;234 - setcolor search-bg 5;226 - setcolor select-fg 2;29;37;44 - setcolor select-bg 2;151;178;198 - setcolor red 2;222;53;53 - setcolor green 2;55;167;0 - setcolor bold 2;151;178;198;1 - setcolor link 2;94;196;255;4 - setcolor escape 2;133;182;249 - action redraw_all -end diff --git a/base/usr/share/bim/themes/light.bimscript b/base/usr/share/bim/themes/light.bimscript deleted file mode 100644 index 30d64ddb..00000000 --- a/base/usr/share/bim/themes/light.bimscript +++ /dev/null @@ -1,34 +0,0 @@ -# A light color scheme -# Based on selenized by Jan Warchoł -function theme:light - checkprop can_24bit - - setcolor text-fg 2;57;76;82 - setcolor text-bg 2;250;242;218 - setcolor alternate-fg 2;144;153;149 - setcolor alternate-bg 2;236;227;204 - setcolor number-fg 2;57;76;82 - setcolor number-bg 2;212;204;181 - setcolor status-fg 2;82;102;109 - setcolor status-bg 2;212;204;181 - setcolor status-alt 2;129;61;19 - setcolor tab-bg 2;212;204;181 - setcolor tabbar-bg 2;236;227;204 - setcolor error-fg 5;15 - setcolor error-bg 5;196 - setcolor search-fg 5;234 - setcolor search-bg 5;226 - setcolor keyword 2;0;114;212;1 - setcolor string 2;72;145;0 - setcolor comment 2;144;153;149;3 - setcolor type 2;193;92;29 - setcolor pragma 2;210;33;45;1 - setcolor numeral 2;202;72;152;1 - setcolor select-fg 2;213;205;182 - setcolor select-bg 2;144;153;149 - setcolor red 2;222;53;53 - setcolor green 2;55;167;0 - setcolor bold 2;57;76;82;1 - setcolor link 2;0;114;212;4 - setcolor escape 2;0;156;143 -end diff --git a/base/usr/share/bim/themes/solarized.bimscript b/base/usr/share/bim/themes/solarized.bimscript deleted file mode 100644 index bea12254..00000000 --- a/base/usr/share/bim/themes/solarized.bimscript +++ /dev/null @@ -1,32 +0,0 @@ -function theme:solarized_dark - checkprop can_24bit - setcolor text-fg 2;147;161;161 - setcolor text-bg 2;0;43;54 - setcolor alternate-fg 2;147;161;161 - setcolor alternate-bg 2;7;54;66 - setcolor number-fg 2;131;148;149 - setcolor number-bg 2;7;54;66 - setcolor status-fg 2;131;148;150 - setcolor status-bg 2;7;54;66 - setcolor status-alt 2;133;153;0 - setcolor tabbar-bg 2;7;54;66 - setcolor tab-bg 2;131;148;150 - setcolor keyword 2;133;153;0 - setcolor string 2;42;161;152 - setcolor comment 2;101;123;131 - setcolor type 2;181;137;0 - setcolor pragma 2;203;75;22 - setcolor numeral 2;220;50;47 - setcolor error-fg 5;15 - setcolor error-bg 5;196 - setcolor search-fg 5;234 - setcolor search-bg 5;226 - setcolor select-fg 2;0;43;54 - setcolor select-bg 2;147;161;161 - setcolor red 2;222;53;53 - setcolor green 2;55;167;0 - setcolor bold 2;147;161;161;1 - setcolor link 2;42;161;152;4 - setcolor escape 2;133;153;0 - action redraw_all -end diff --git a/base/usr/share/bim/themes/sunsmoke.bimscript b/base/usr/share/bim/themes/sunsmoke.bimscript deleted file mode 100644 index 1eb9bddb..00000000 --- a/base/usr/share/bim/themes/sunsmoke.bimscript +++ /dev/null @@ -1,68 +0,0 @@ -# Sunsmoke Color Scheme -function theme:sunsmoke - checkprop can_24bit - - setcolor text-fg 2;230;230;230 - setcolor text-bg 2;31;31;31 - setcolor alternate-fg 2;122;122;122 - setcolor alternate-bg 2;46;43;46 - setcolor number-fg 2;150;139;57 - setcolor number-bg 2;0;0;0 - setcolor status-fg 2;230;230;230 - setcolor status-bg 2;71;64;58 - setcolor status-alt 2;122;122;122 - setcolor tabbar-bg 2;71;64;58 - setcolor tab-bg 2;71;64;58 - setcolor keyword 2;51;162;230 - setcolor string 2;72;176;72 - setcolor comment 2;158;153;129;3 - setcolor type 2;230;206;110 - setcolor pragma 2;194;70;54 - setcolor numeral 2;230;43;127 - setcolor error-fg 5;15 - setcolor error-bg 5;196 - setcolor search-fg 5;234 - setcolor search-bg 5;226 - setcolor select-fg 2;0;43;54 - setcolor select-bg 2;147;161;161 - setcolor red 2;222;53;53 - setcolor green 2;55;167;0 - setcolor bold 2;230;230;230;1 - setcolor link 2;51;162;230;4 - setcolor escape 2;113;203;173 -end - -function theme:sunsmoke256 - checkprop can_256color - setcolor text-fg 5;188 - setcolor text-bg 5;234 - setcolor alternate-fg 5;244 - setcolor alternate-bg 5;236 - setcolor number-fg 5;101 - setcolor number-bg 5;232 - setcolor status-fg 5;188 - setcolor status-bg 5;59 - setcolor status-alt 5;244 - setcolor tabbar-bg 5;59 - setcolor tab-bg 5;59 - setcolor keyword 5;74 - setcolor string 5;71 - setcolor comment 5;102 - setcolor type 5;221 - setcolor pragma 5;160 - setcolor numeral 5;161 - setcolor error-fg 5;15 - setcolor error-bg 5;196 - setcolor search-fg 5;234 - setcolor search-bg 5;226 - setcolor select-fg 5;17 - setcolor select-bg 5;109 - setcolor red @1 - setcolor green @2 - setcolor bold 5;188;1 - setcolor link 5;74;4 - setcolor escape 5;79 - - checkprop can_italic - setcolor comment 5;102;3 -end diff --git a/base/usr/share/bim/themes/wombat.bimscript b/base/usr/share/bim/themes/wombat.bimscript deleted file mode 100644 index 66c91c9f..00000000 --- a/base/usr/share/bim/themes/wombat.bimscript +++ /dev/null @@ -1,39 +0,0 @@ -# Wombat 256-color theme -function theme:wombat - checkprop can_256color - setcolor text-fg 5;230 - setcolor text-bg 5;235 - setcolor alternate-fg 5;244 - setcolor alternate-bg 5;236 - setcolor number-bg 5;232 - setcolor number-fg 5;101 - setcolor status-fg 5;230 - setcolor status-bg 5;238 - setcolor status-alt 5;186 - setcolor tabbar-bg 5;230 - setcolor tab-bg 5;248 - setcolor keyword 5;117 - setcolor string 5;113 - setcolor comment 5;102 - setcolor type 5;186 - setcolor pragma 5;173 - setcolor numeral 5;173 - setcolor error-fg 5;15 - setcolor error-bg 5;196 - setcolor search-fg 5;234 - setcolor search-bg 5;226 - setcolor select-fg 5;235 - setcolor select-bg 5;230 - setcolor red @1 - setcolor green @2 - setcolor bold 5;230;1 - setcolor link 5;117;4 - setcolor escape 5;194 - trycall _sunsmoke_italics - action redraw_all -end - -function _sunsmoke_italics - checkprop can_italic - setcolor comment 5;102;3 -end diff --git a/kuroko b/kuroko index 135bf801..0562b8b0 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 135bf801964365b1bfcc6518ae60439b41aba88c +Subproject commit 0562b8b071259e544b5dd626e5903b94fec786f2 From 1c2de4d888497842ecd22bd4e1c38f4b24108375 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 30 Jan 2021 21:58:47 +0900 Subject: [PATCH 081/102] v1.13.3 --- apps/bim.c | 56 +++++++++++++++++++++++++------------------- kernel/sys/version.c | 2 +- kuroko | 2 +- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index 23e917b1..86d11916 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -1,6 +1,6 @@ /* Bim - A Text Editor * - * Copyright (C) 2012-2020 K. Lange + * Copyright (C) 2012-2021 K. Lange * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -264,7 +264,7 @@ int bim_getch_timeout(int timeout) { global_config.background_task = task->next; task->func(task); free(task); - if (task->next == NULL) { + if (!global_config.background_task) { global_config.tail_task = NULL; redraw_statusbar(); } @@ -5820,6 +5820,32 @@ int process_command(char * cmd) { return bim_command_repall(cmd, 0, NULL); } + /* See if it's a bim command in the classic format */ + { + char * argv[3] = {NULL, NULL, NULL}; + int argc = !!(*cmd); + char cmd_name[512] = {0}; + for (char * c = (char*)cmd; *c; ++c) { + if (c-cmd == 511) break; + if (*c == ' ') { + cmd_name[c-cmd] = '\0'; + argv[1] = c+1; + if (*argv[1]) argc++; + break; + } + cmd_name[c-cmd] = *c; + } + + argv[0] = cmd_name; + argv[argc] = NULL; + for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { + if (!strcmp(argv[0], c->name)) { + krk_resetStack(); + return c->command((char*)cmd, argc, argv); + } + } + } + int retval = process_krk_command(cmd, NULL); return retval; @@ -9918,28 +9944,6 @@ int process_krk_command(const char * cmd, KrkValue * outVal) { /* If we got an exception during execution, print it now */ if (vm.flags & KRK_HAS_EXCEPTION) { if (krk_isInstanceOf(vm.currentException, vm.exceptions.syntaxError)) { - char * argv[3] = {NULL, NULL, NULL}; - int argc = !!(*cmd); - char cmd_name[512] = {0}; - for (char * c = (char*)cmd; *c; ++c) { - if (c-cmd == 511) break; - if (*c == ' ') { - cmd_name[c-cmd] = '\0'; - argv[1] = c+1; - if (*argv[1]) argc++; - break; - } - cmd_name[c-cmd] = *c; - } - - argv[0] = cmd_name; - argv[argc] = NULL; - for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { - if (!strcmp(argv[0], c->name)) { - krk_resetStack(); - return c->command((char*)cmd, argc, argv); - } - } } set_fg_color(COLOR_RED); fflush(stdout); @@ -10239,6 +10243,8 @@ static KrkValue bim_krk_state_setstate(int argc, KrkValue argv[]) { BIM_STATE(); if (argc > 1 && IS_INTEGER(argv[1])) { state->state = AS_INTEGER(argv[1]); + } else if (argc > 1 && IS_NONE(argv[1])) { + state->state = -1; } else { return krk_runtimeError(vm.exceptions.typeError, "expected int"); } @@ -10464,6 +10470,7 @@ static KrkValue bim_krk_command_call(int argc, KrkValue argv[]) { for (int i = 0; i < argc; ++i) { free(args[i]); } + free(args); return INTEGER_VAL(result); } @@ -10536,6 +10543,7 @@ void import_directory(char * dirName) { } ent = readdir(dirp); } + closedir(dirp); } static void findBim(char * argv[]) { diff --git a/kernel/sys/version.c b/kernel/sys/version.c index 409d06cf..d1737496 100644 --- a/kernel/sys/version.c +++ b/kernel/sys/version.c @@ -18,7 +18,7 @@ char * __kernel_version_format = "%d.%d.%d-%s"; /* Version numbers X.Y.Z */ int __kernel_version_major = 1; int __kernel_version_minor = 13; -int __kernel_version_lower = 2; +int __kernel_version_lower = 3; /* Kernel build suffix, which doesn't necessarily * mean anything, but can be used to distinguish diff --git a/kuroko b/kuroko index 0562b8b0..4eceb98f 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 0562b8b071259e544b5dd626e5903b94fec786f2 +Subproject commit 4eceb98ffed5c49f57d362887134613a2c6733ba From 230870ad7bf784a8cfe371655bc20e173b85f913 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 16 Feb 2021 18:44:31 +0900 Subject: [PATCH 082/102] kernel, linker, libc: Initial, probably horribly broken, support for some TLS situations --- Makefile | 2 +- apps/test-tls.c | 37 +++++++++++++++++++ base/usr/include/kernel/process.h | 2 + base/usr/include/kernel/system.h | 4 +- base/usr/include/pthread.h | 11 ++++++ base/usr/include/sys/sysfunc.h | 1 + kernel/cpu/gdt.c | 19 ++++++++-- kernel/sys/syscall.c | 6 +++ kernel/sys/task.c | 5 +++ kernel/user.S | 2 + libc/main.c | 3 ++ libc/pthread/pthread.c | 31 +++++++++++++++- libc/pthread/pthread_rwlock.c | 61 +++++++++++++++++++++++++++++++ libc/stdlib/realpath.c | 4 +- linker/linker.c | 18 +++++++++ 15 files changed, 196 insertions(+), 10 deletions(-) create mode 100644 apps/test-tls.c create mode 100644 libc/pthread/pthread_rwlock.c diff --git a/Makefile b/Makefile index 507a1f69..cb050000 100644 --- a/Makefile +++ b/Makefile @@ -101,6 +101,7 @@ KERNEL_OBJS += $(patsubst %.c,%.o,$(wildcard kernel/*/*/*.c)) ## # Kernel objects from kernel/ assembly sources KERNEL_ASMOBJS = $(filter-out kernel/symbols.o,$(patsubst %.S,%.o,$(wildcard kernel/*.S))) +HEADERS = $(wildcard base/usr/include/kernel/*.h base/usr/include/kernel/*/*.h) # Kernel @@ -141,7 +142,6 @@ fatbase/mod: ## # Modules need to be installed on the boot image MODULES = $(patsubst modules/%.c,fatbase/mod/%.ko,$(wildcard modules/*.c)) -HEADERS = $(wildcard base/usr/include/kernel/*.h base/usr/include/kernel/*/*.h) fatbase/mod/%.ko: modules/%.c ${HEADERS} | fatbase/mod ${KCC} -nostdlib ${KCFLAGS} -c -o $@ $< diff --git a/apps/test-tls.c b/apps/test-tls.c new file mode 100644 index 00000000..c8733471 --- /dev/null +++ b/apps/test-tls.c @@ -0,0 +1,37 @@ +#include +#include +#include + +__thread int myvalue; + +void * getaddressinthread(void * _unused) { + fprintf(stderr, "in thread before:\n"); + fprintf(stderr, "&myvalue = %p\n", (void*)&myvalue); + fprintf(stderr, "myvalue = %d\n", myvalue); + myvalue = 1234; + fprintf(stderr, "in thread after:\n"); + fprintf(stderr, "&myvalue = %p\n", (void*)&myvalue); + fprintf(stderr, "myvalue = %d\n", myvalue); + return NULL; +} + +int main(int argc, char * argv[]) { + + myvalue = 42; + + fprintf(stderr, "main thread before:\n"); + fprintf(stderr, "&myvalue = %p\n", (void*)&myvalue); + fprintf(stderr, "myvalue = %d\n", myvalue); + + pthread_t mythread; + pthread_create(&mythread, NULL, getaddressinthread, NULL); + + void * retval; + pthread_join(mythread, &retval); + + fprintf(stderr, "main thread after:\n"); + fprintf(stderr, "&myvalue = %p\n", (void*)&myvalue); + fprintf(stderr, "myvalue = %d\n", myvalue); + + return 0; +} diff --git a/base/usr/include/kernel/process.h b/base/usr/include/kernel/process.h index 6b332804..215f3e7d 100644 --- a/base/usr/include/kernel/process.h +++ b/base/usr/include/kernel/process.h @@ -35,6 +35,8 @@ typedef struct thread { uint8_t padding[32]; /* I don't know */ page_directory_t * page_directory; /* Page Directory */ + uintptr_t gsbase; + } thread_t; /* Portable image struct */ diff --git a/base/usr/include/kernel/system.h b/base/usr/include/kernel/system.h index 6d7b7f3b..140dfa58 100644 --- a/base/usr/include/kernel/system.h +++ b/base/usr/include/kernel/system.h @@ -75,6 +75,8 @@ extern uint8_t startswith(const char * str, const char * accept); extern void gdt_install(void); extern void gdt_set_gate(uint8_t num, uint64_t base, uint64_t limit, uint8_t access, uint8_t gran); extern void set_kernel_stack(uintptr_t stack); +extern void gdt_set_gsbase(uintptr_t base); +extern uintptr_t gdt_get_gsbase(void); /* IDT */ extern void idt_install(void); @@ -86,7 +88,7 @@ extern void idt_set_gate(uint8_t num, void (*base)(void), uint16_t sel, uint8_t * the correct offsets as well. */ struct regs { - unsigned int gs, fs, es, ds; + unsigned int _unused, fs, es, ds; unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; unsigned int int_no, err_code; unsigned int eip, cs, eflags, useresp, ss; diff --git a/base/usr/include/pthread.h b/base/usr/include/pthread.h index eeae188a..7f7b83bf 100644 --- a/base/usr/include/pthread.h +++ b/base/usr/include/pthread.h @@ -12,6 +12,12 @@ typedef struct { } pthread_t; typedef unsigned int pthread_attr_t; +typedef struct { + int volatile atomic_lock; + int volatile readers; + int writerPid; +} pthread_rwlock_t; + extern int pthread_create(pthread_t * thread, pthread_attr_t * attr, void *(*start_routine)(void *), void * arg); extern void pthread_exit(void * value); extern int pthread_kill(pthread_t thread, int sig); @@ -38,5 +44,10 @@ extern int pthread_mutex_destroy(pthread_mutex_t *mutex); extern int pthread_attr_init(pthread_attr_t *attr); extern int pthread_attr_destroy(pthread_attr_t *attr); +extern int pthread_rwlock_init(pthread_rwlock_t * lock, void * args); +extern int pthread_rwlock_wrlock(pthread_rwlock_t * lock); +extern int pthread_rwlock_rdlock(pthread_rwlock_t * lock); +extern int pthread_rwlock_unlock(pthread_rwlock_t * lock); +extern int pthread_rwlock_destroy(pthread_rwlock_t * lock); _End_C_Header diff --git a/base/usr/include/sys/sysfunc.h b/base/usr/include/sys/sysfunc.h index dd876de4..cb4b9860 100644 --- a/base/usr/include/sys/sysfunc.h +++ b/base/usr/include/sys/sysfunc.h @@ -23,6 +23,7 @@ #define TOARU_SYS_FUNC_THREADNAME 11 #define TOARU_SYS_FUNC_DEBUGPRINT 12 #define TOARU_SYS_FUNC_SETVGACURSOR 13 +#define TOARU_SYS_FUNC_SETGSBASE 14 _Begin_C_Header extern int sysfunc(int command, char ** args); diff --git a/kernel/cpu/gdt.c b/kernel/cpu/gdt.c index aec13deb..3f090707 100644 --- a/kernel/cpu/gdt.c +++ b/kernel/cpu/gdt.c @@ -30,9 +30,9 @@ typedef struct { /* In the future we may need to put a lock on the access of this */ static struct { - gdt_entry_t entries[6]; - gdt_pointer_t pointer; - tss_entry_t tss; + gdt_entry_t entries[7]; + gdt_pointer_t pointer; + tss_entry_t tss; } gdt __attribute__((used)); extern void gdt_flush(uintptr_t); @@ -53,6 +53,17 @@ void gdt_set_gate(uint8_t num, uint64_t base, uint64_t limit, uint8_t access, ui ENTRY(num).access = access; } +void gdt_set_gsbase(uintptr_t base) { + ENTRY(6).base_low = (base & 0xFFFF); + ENTRY(6).base_middle = (base >> 16) & 0xFF; + ENTRY(6).base_high = (base >> 24) & 0xFF; + asm volatile ("mov %0, %%gs" :: "r"((6 << 3) | 0x3)); +} + +uintptr_t gdt_get_gsbase(void) { + return (ENTRY(6).base_low) | (ENTRY(6).base_middle << 16) | (ENTRY(6).base_high << 24); +} + static void write_tss(int32_t num, uint16_t ss0, uint32_t esp0); void gdt_install(void) { @@ -65,8 +76,8 @@ void gdt_install(void) { gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF); /* Data segment */ gdt_set_gate(3, 0, 0xFFFFFFFF, 0xFA, 0xCF); /* User code */ gdt_set_gate(4, 0, 0xFFFFFFFF, 0xF2, 0xCF); /* User data */ - write_tss(5, 0x10, 0x0); + gdt_set_gate(6, 0, 0xFFFFFFFF, 0xF2, 0xCF); /* Go go go */ gdt_flush((uintptr_t)gdtp); diff --git a/kernel/sys/syscall.c b/kernel/sys/syscall.c index 72cd3614..d7069d2a 100644 --- a/kernel/sys/syscall.c +++ b/kernel/sys/syscall.c @@ -784,6 +784,12 @@ static int sys_sysfunc(int fn, char ** args) { return 0; + case 14: + PTR_VALIDATE(args); + current_process->thread.gsbase = (uintptr_t)args[0]; + gdt_set_gsbase(current_process->thread.gsbase); + return 0; + default: debug_print(ERROR, "Bad system function %d", fn); break; diff --git a/kernel/sys/task.c b/kernel/sys/task.c index 9921e66b..b0008120 100644 --- a/kernel/sys/task.c +++ b/kernel/sys/task.c @@ -218,6 +218,7 @@ uint32_t fork(void) { new_proc->thread.esp = esp; new_proc->thread.ebp = ebp; + new_proc->thread.gsbase = current_process->thread.gsbase; new_proc->is_tasklet = parent->is_tasklet; @@ -272,6 +273,7 @@ int create_kernel_tasklet(tasklet_t tasklet, char * name, void * argp) { new_proc->thread.esp = esp; new_proc->thread.ebp = ebp; + new_proc->thread.gsbase = current_process->thread.gsbase; new_proc->thread.eip = (uintptr_t)tasklet; @@ -339,6 +341,7 @@ clone(uintptr_t new_stack, uintptr_t thread_func, uintptr_t arg) { new_proc->thread.esp = esp; new_proc->thread.ebp = ebp; + new_proc->thread.gsbase = current_process->thread.gsbase; new_proc->is_tasklet = parent->is_tasklet; @@ -405,6 +408,7 @@ void switch_task(uint8_t reschedule) { current_process->thread.eip = eip; current_process->thread.esp = esp; current_process->thread.ebp = ebp; + current_process->thread.gsbase = gdt_get_gsbase(); current_process->running = 0; /* Save floating point state */ @@ -432,6 +436,7 @@ void switch_next(void) { eip = current_process->thread.eip; esp = current_process->thread.esp; ebp = current_process->thread.ebp; + gdt_set_gsbase(current_process->thread.gsbase); unswitch_fpu(); /* Validate */ diff --git a/kernel/user.S b/kernel/user.S index df8a27d3..52f3e5c3 100644 --- a/kernel/user.S +++ b/kernel/user.S @@ -32,6 +32,8 @@ enter_userspace: mov %eax, %ds mov %eax, %es mov %eax, %fs + + mov $0x33, %ax mov %eax, %gs /* %ss is handled by iret */ diff --git a/libc/main.c b/libc/main.c index 8458d1b5..89f9c531 100644 --- a/libc/main.c +++ b/libc/main.c @@ -30,8 +30,11 @@ void _exit(int val){ __builtin_unreachable(); } +extern void __make_tls(void); + __attribute__((constructor)) static void _libc_init(void) { + __make_tls(); __stdio_init_buffers(); unsigned int x = 0; diff --git a/libc/pthread/pthread.c b/libc/pthread/pthread.c index 9e03857e..c5a86b2a 100644 --- a/libc/pthread/pthread.c +++ b/libc/pthread/pthread.c @@ -11,6 +11,7 @@ #include #include +#include DEFN_SYSCALL3(clone, SYS_CLONE, uintptr_t, uintptr_t, void *); DEFN_SYSCALL0(gettid, SYS_GETTID); @@ -24,11 +25,39 @@ int gettid() { return syscall_gettid(); /* never fails */ } +struct pthread { + void * (*entry)(void *); + void * arg; +}; + +void * ___tls_get_addr(void* input) { + return NULL; +} + +void __make_tls(void) { + char * tlsSpace = calloc(1,4096); + char ** tlsSelf = (char **)(tlsSpace + 4096 - sizeof(char *)); + *tlsSelf = (char*)tlsSelf; + sysfunc(TOARU_SYS_FUNC_SETGSBASE, (char*[]){(char*)tlsSelf}); +} + +void * __thread_start(void * thread) { + __make_tls(); + struct pthread * me = ((pthread_t *)thread)->ret_val; + ((pthread_t *)thread)->ret_val = 0; + return me->entry(me->arg); +} + int pthread_create(pthread_t * thread, pthread_attr_t * attr, void *(*start_routine)(void *), void * arg) { char * stack = malloc(PTHREAD_STACK_SIZE); uintptr_t stack_top = (uintptr_t)stack + PTHREAD_STACK_SIZE; + thread->stack = stack; - thread->id = clone(stack_top, (uintptr_t)start_routine, arg); + struct pthread * data = malloc(sizeof(struct pthread)); + data->entry = start_routine; + data->arg = arg; + thread->ret_val = data; + thread->id = clone(stack_top, (uintptr_t)__thread_start, thread); return 0; } diff --git a/libc/pthread/pthread_rwlock.c b/libc/pthread/pthread_rwlock.c new file mode 100644 index 00000000..a6f9460c --- /dev/null +++ b/libc/pthread/pthread_rwlock.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define ACQUIRE_LOCK() do { while (__sync_lock_test_and_set(&lock->atomic_lock, 0x01)) { syscall_yield(); } } while (0) +#define RELEASE_LOCK() do { __sync_lock_release(&lock->atomic_lock); } while (0) + +int pthread_rwlock_init(pthread_rwlock_t * lock, void * args) { + lock->readers = 0; + lock->atomic_lock = 0; + if (args != NULL) { + fprintf(stderr, "pthread: pthread_rwlock_init arg unsupported\n"); + return 1; + } + return 0; +} + +int pthread_rwlock_wrlock(pthread_rwlock_t * lock) { + ACQUIRE_LOCK(); + while (1) { + if (lock->readers == 0) { + lock->readers = -1; + lock->writerPid = syscall_getpid(); + RELEASE_LOCK(); + return 0; + } + syscall_yield(); + } +} + +int pthread_rwlock_rdlock(pthread_rwlock_t * lock) { + ACQUIRE_LOCK(); + while (1) { + if (lock->readers >= 0) { + lock->readers++; + RELEASE_LOCK(); + return 0; + } + syscall_yield(); + } +} + +int pthread_rwlock_unlock(pthread_rwlock_t * lock) { + ACQUIRE_LOCK(); + if (lock->readers > 0) lock->readers--; + else if (lock->readers < 0) lock->readers = 0; + else fprintf(stderr, "pthread: bad lock state detected\n"); + RELEASE_LOCK(); + return 0; +} + +int pthread_rwlock_destroy(pthread_rwlock_t * lock) { + return 0; +} diff --git a/libc/stdlib/realpath.c b/libc/stdlib/realpath.c index dc8d13c3..5050be0c 100644 --- a/libc/stdlib/realpath.c +++ b/libc/stdlib/realpath.c @@ -41,9 +41,7 @@ char *realpath(const char *path, char *resolved_path) { } if (!resolved_path) { - /* Can't support this yet. */ - errno = -EINVAL; - return NULL; + resolved_path = malloc(PATH_MAX+1); } /* If we're lucky, we can do this with no allocations, so let's start here... */ diff --git a/linker/linker.c b/linker/linker.c index 83e00c7d..a404f168 100644 --- a/linker/linker.c +++ b/linker/linker.c @@ -75,6 +75,8 @@ typedef int (*entry_point_t)(int, char *[], char**); static hashmap_t * dumb_symbol_table; static hashmap_t * glob_dat; static hashmap_t * objects_map; +static hashmap_t * tls_map; +static size_t current_tls_offset = 0; /* Used for dlerror */ static char * last_error = NULL; @@ -388,6 +390,7 @@ static int need_symbol_for_type(unsigned char type) { case 5: case 6: case 7: + case 14: return 1; default: return 0; @@ -471,6 +474,20 @@ static int object_relocate(elf_t * object) { case 5: /* COPY */ memcpy((void *)(table->r_offset + object->base), (void *)x, sym->st_size); break; + case 14: /* TLS_TPOFF */ + x = *((ssize_t *)(table->r_offset + object->base)); + if (!hashmap_has(tls_map, symname)) { + if (!sym->st_size) { + fprintf(stderr, "Haven't placed %s in static TLS yet but don't know its size?\n", symname); + } + current_tls_offset += sym->st_size; /* TODO alignment restrictions */ + hashmap_set(tls_map, symname, (void*)(current_tls_offset)); + x -= current_tls_offset; + } else { + x -= (size_t)hashmap_get(tls_map, symname); + } + memcpy((void *)(table->r_offset + object->base), &x, sizeof(uintptr_t)); + break; default: TRACE_LD("Unknown relocation type: %d", type); } @@ -751,6 +768,7 @@ int main(int argc, char * argv[]) { dumb_symbol_table = hashmap_create(10); glob_dat = hashmap_create(10); objects_map = hashmap_create(10); + tls_map = hashmap_create(10); /* Setup symbols for built-in exports */ ld_exports_t * ex = ld_builtin_exports; From 97d02d6e23b66aae0b84639746f3cb0783685054 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 16 Feb 2021 18:50:17 +0900 Subject: [PATCH 083/102] kuroko: Updates for 1.1-preview and threading support --- .gitignore | 1 + .gitmodules | 2 +- Makefile | 10 +- apps/bim.c | 132 ++++++++-------- apps/krk_test_noise.krk | 47 ++++++ apps/kuroko.c | 100 +++++++++--- kuroko | 2 +- lib/kuroko/_yutani.c | 333 ++++++++++++++++++++-------------------- util/auto-dep.py | 2 +- 9 files changed, 367 insertions(+), 262 deletions(-) create mode 100755 apps/krk_test_noise.krk diff --git a/.gitignore b/.gitignore index 2573aa58..38ef80e8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ /.make/* /base/bin/* +/base/lib/kuroko /base/src /_base /cdrom/extra diff --git a/.gitmodules b/.gitmodules index 47e008c2..c8bf8f65 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "kuroko"] path = kuroko - url = git@github.com:klange/kuroko + url = git@github.com:kuroko-lang/kuroko diff --git a/Makefile b/Makefile index cb050000..f045b34b 100644 --- a/Makefile +++ b/Makefile @@ -164,7 +164,7 @@ base/cdrom: mkdir -p $@ base/var: mkdir -p $@ -base/usr/local/lib/kuroko: +base/lib/kuroko: mkdir -p $@ fatbase/efi/boot: mkdir -p $@ @@ -172,7 +172,7 @@ cdrom: mkdir -p $@ .make: mkdir -p .make -dirs: base/dev base/tmp base/proc base/bin base/lib base/cdrom base/usr/local/lib/kuroko cdrom base/var fatbase/efi/boot .make +dirs: base/dev base/tmp base/proc base/bin base/lib base/cdrom base/lib/kuroko cdrom base/var fatbase/efi/boot .make # C Library @@ -201,13 +201,13 @@ kuroko/%.o: kuroko/%.c $(CC) $(CFLAGS) -DDEBUG -fPIC -c -o $@ $^ KUROKO_CMODS=$(patsubst kuroko/src/module_%.c,%,$(wildcard kuroko/src/module_*.c)) $(patsubst lib/kuroko/%.c,%,$(wildcard lib/kuroko/*.c)) -KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/usr/local/lib/kuroko/$(lib).so) +KUROKO_CMODS_X=$(foreach lib,$(KUROKO_CMODS),base/lib/kuroko/$(lib).so) KUROKO_CMODS_Y=$(foreach lib,$(KUROKO_CMODS),.make/$(lib).kmak) -KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/usr/local/lib/kuroko/%.krk,$(wildcard kuroko/modules/*.krk kuroko/modules/*/*.krk)) +KUROKO_KRK_MODS=$(patsubst kuroko/modules/%.krk,base/lib/kuroko/%.krk,$(wildcard kuroko/modules/*.krk kuroko/modules/*/*.krk)) KUROKO_FILES=$(KUROKO_CMODS_X) $(KUROKO_KRK_MODS) base/lib/libkuroko.so -base/usr/local/lib/kuroko/%.krk: kuroko/modules/%.krk +base/lib/kuroko/%.krk: kuroko/modules/%.krk @mkdir -p `dirname $@` cp $< $@ diff --git a/apps/bim.c b/apps/bim.c index 86d11916..df00fd07 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -954,12 +954,12 @@ void recalculate_syntax(line_t * line, int line_no) { s->state.i = 0; while (1) { - ptrdiff_t before = vm.stackTop - vm.stack; + ptrdiff_t before = krk_currentThread.stackTop - krk_currentThread.stack; krk_push(OBJECT_VAL(s)); KrkValue result = krk_callSimple(OBJECT_VAL(env->syntax->krkFunc), 1, 0); - vm.stackTop = vm.stack + before; - if (IS_NONE(result) && (vm.flags & KRK_HAS_EXCEPTION)) { - render_error("Exception occurred in plugin: %s", AS_INSTANCE(vm.currentException)->_class->name->chars); + krk_currentThread.stackTop = krk_currentThread.stack + before; + if (IS_NONE(result) && (krk_currentThread.flags & KRK_HAS_EXCEPTION)) { + render_error("Exception occurred in plugin: %s", AS_INSTANCE(krk_currentThread.currentException)->_class->name->chars); krk_dumpTraceback(); fprintf(stderr,"\n\nThis syntax highlighter will be disabled in this environment.\n\n"); int key = 0; @@ -5477,11 +5477,11 @@ BIM_COMMAND(theme,"theme","Set color theme") { } else { for (struct theme_def * d = themes; themes && d->name; ++d) { if (!strcmp(argv[1], d->name)) { - ptrdiff_t before = vm.stackTop - vm.stack; + ptrdiff_t before = krk_currentThread.stackTop - krk_currentThread.stack; KrkValue result = krk_callSimple(OBJECT_VAL(d->callable), 0, 0); - vm.stackTop = vm.stack + before; - if (IS_NONE(result) && (vm.flags & KRK_HAS_EXCEPTION)) { - render_error("Exception occurred in theme: %s", AS_INSTANCE(vm.currentException)->_class->name->chars); + krk_currentThread.stackTop = krk_currentThread.stack + before; + if (IS_NONE(result) && (krk_currentThread.flags & KRK_HAS_EXCEPTION)) { + render_error("Exception occurred in theme: %s", AS_INSTANCE(krk_currentThread.currentException)->_class->name->chars); krk_dumpTraceback(); int key = 0; while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); @@ -9930,7 +9930,7 @@ int process_krk_command(const char * cmd, KrkValue * outVal) { krk_push(NONE_VAL()); /* If we don't set outSlots for the top frame a syntax error will * get printed by the interpreter and we can't catch it here. */ - vm.frames[0].outSlots = 1; + krk_currentThread.frames[0].outSlots = 1; /* Call the interpreter */ KrkValue out = krk_interpret(cmd,0,"",""); /* If the user typed just a command name, try to execute it. */ @@ -9942,8 +9942,8 @@ int process_krk_command(const char * cmd, KrkValue * outVal) { int retval = (IS_INTEGER(out)) ? AS_INTEGER(out) : 0; int hadOutput = 0; /* If we got an exception during execution, print it now */ - if (vm.flags & KRK_HAS_EXCEPTION) { - if (krk_isInstanceOf(vm.currentException, vm.exceptions.syntaxError)) { + if (krk_currentThread.flags & KRK_HAS_EXCEPTION) { + if (krk_isInstanceOf(krk_currentThread.currentException, vm.exceptions->syntaxError)) { } set_fg_color(COLOR_RED); fflush(stdout); @@ -10026,10 +10026,10 @@ BIM_COMMAND(runkrk,"runkrk", "Run a kuroko script") { if (argc < 2) return 1; /* In case we're running in a weird context? */ - int previousExitFrame = vm.exitOnFrame; - vm.exitOnFrame = vm.frameCount; + int previousExitFrame = krk_currentThread.exitOnFrame; + krk_currentThread.exitOnFrame = krk_currentThread.frameCount; krk_runfile(argv[1],1,"",argv[1]); - vm.exitOnFrame = previousExitFrame; + krk_currentThread.exitOnFrame = previousExitFrame; redraw_all(); @@ -10163,9 +10163,9 @@ static int checkClass(KrkClass * _class, KrkClass * base) { } static KrkValue krk_bim_syntax_dict; -static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[]) { +static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !IS_CLASS(argv[0]) || !checkClass(AS_CLASS(argv[0]), syntaxStateClass)) - return krk_runtimeError(vm.exceptions.typeError, "Can not register '%s' as a syntax highlighter, expected subclass of SyntaxState.", krk_typeName(argv[0])); + return krk_runtimeError(vm.exceptions->typeError, "Can not register '%s' as a syntax highlighter, expected subclass of SyntaxState.", krk_typeName(argv[0])); KrkValue name = NONE_VAL(), extensions = NONE_VAL(), spaces = BOOLEAN_VAL(0), calculate = NONE_VAL(); krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("name")), &name); @@ -10173,13 +10173,13 @@ static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[]) { krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("spaces")), &spaces); krk_tableGet(&AS_CLASS(argv[0])->methods, OBJECT_VAL(S("calculate")), &calculate); if (!IS_STRING(name)) - return krk_runtimeError(vm.exceptions.typeError, "%s.name must be str", AS_CLASS(argv[0])->name->chars); + return krk_runtimeError(vm.exceptions->typeError, "%s.name must be str", AS_CLASS(argv[0])->name->chars); if (!IS_TUPLE(extensions)) - return krk_runtimeError(vm.exceptions.typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); + return krk_runtimeError(vm.exceptions->typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); if (!IS_BOOLEAN(spaces)) - return krk_runtimeError(vm.exceptions.typeError, "%s.spaces must be bool", AS_CLASS(argv[0])->name->chars); + return krk_runtimeError(vm.exceptions->typeError, "%s.spaces must be bool", AS_CLASS(argv[0])->name->chars); if (!IS_CLOSURE(calculate)) - return krk_runtimeError(vm.exceptions.typeError, "%s.calculate must be method, not '%s'", AS_CLASS(argv[0])->name->chars, krk_typeName(calculate)); + return krk_runtimeError(vm.exceptions->typeError, "%s.calculate must be method, not '%s'", AS_CLASS(argv[0])->name->chars, krk_typeName(calculate)); /* Convert tuple of strings */ char ** ext = malloc(sizeof(char *) * (AS_TUPLE(extensions)->values.count + 1)); /* +1 for NULL */ @@ -10187,7 +10187,7 @@ static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[]) { for (size_t i = 0; i < AS_TUPLE(extensions)->values.count; ++i) { if (!IS_STRING(AS_TUPLE(extensions)->values.values[i])) { free(ext); - return krk_runtimeError(vm.exceptions.typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); + return krk_runtimeError(vm.exceptions->typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); } ext[i] = AS_CSTRING(AS_TUPLE(extensions)->values.values[i]); } @@ -10210,9 +10210,9 @@ static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[]) { } static KrkValue krk_bim_theme_dict; -static KrkValue krk_bim_define_theme(int argc, KrkValue argv[]) { +static KrkValue krk_bim_define_theme(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !IS_CLOSURE(argv[0])) - return krk_runtimeError(vm.exceptions.typeError, "themes must be functions, not '%s'", krk_typeName(argv[0])); + return krk_runtimeError(vm.exceptions->typeError, "themes must be functions, not '%s'", krk_typeName(argv[0])); KrkValue name = OBJECT_VAL(AS_CLOSURE(argv[0])->function->name); @@ -10230,35 +10230,35 @@ int c_keyword_qualifier(int c) { } #define BIM_STATE() \ - if (argc < 1 || !krk_isInstanceOf(argv[0],syntaxStateClass)) return krk_runtimeError(vm.exceptions.typeError, "expected state"); \ + if (argc < 1 || !krk_isInstanceOf(argv[0],syntaxStateClass)) return krk_runtimeError(vm.exceptions->typeError, "expected state"); \ KrkInstance * _self = AS_INSTANCE(argv[0]); \ struct SyntaxState * self = (struct SyntaxState*)_self; \ struct syntax_state * state = &self->state; -static KrkValue bim_krk_state_getstate(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_getstate(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); return INTEGER_VAL(state->state); } -static KrkValue bim_krk_state_setstate(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_setstate(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); if (argc > 1 && IS_INTEGER(argv[1])) { state->state = AS_INTEGER(argv[1]); } else if (argc > 1 && IS_NONE(argv[1])) { state->state = -1; } else { - return krk_runtimeError(vm.exceptions.typeError, "expected int"); + return krk_runtimeError(vm.exceptions->typeError, "expected int"); } return NONE_VAL(); } -static KrkValue bim_krk_state_index(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_index(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); return INTEGER_VAL(state->i); } -static KrkValue bim_krk_state_lineno(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_lineno(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); return INTEGER_VAL(state->line_no); } -static KrkValue bim_krk_state_get(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_get(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); long arg = AS_INTEGER(argv[1]); int charRel = charrel(arg); @@ -10267,26 +10267,26 @@ static KrkValue bim_krk_state_get(int argc, KrkValue argv[]) { size_t len = to_eight(charRel, tmp); return OBJECT_VAL(krk_copyString(tmp,len)); } -static KrkValue bim_krk_state_isdigit(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_isdigit(int argc, KrkValue argv[], int hasKw) { if (IS_NONE(argv[1])) return BOOLEAN_VAL(0); if (!IS_STRING(argv[1])) { - krk_runtimeError(vm.exceptions.typeError, "not a string: %s", krk_typeName(argv[1])); + krk_runtimeError(vm.exceptions->typeError, "not a string: %s", krk_typeName(argv[1])); return BOOLEAN_VAL(0); } if (AS_STRING(argv[1])->codesLength > 1) { - krk_runtimeError(vm.exceptions.typeError, "arg must be str of len 1"); + krk_runtimeError(vm.exceptions->typeError, "arg must be str of len 1"); return BOOLEAN_VAL(0); } unsigned int c = krk_unicodeCodepoint(AS_STRING(argv[1]), 0); return BOOLEAN_VAL(!!isdigit(c)); } -static KrkValue bim_krk_state_isxdigit(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_isxdigit(int argc, KrkValue argv[], int hasKw) { if (!IS_STRING(argv[1])) return BOOLEAN_VAL(0); if (AS_STRING(argv[1])->length > 1) return BOOLEAN_VAL(0); int c = AS_CSTRING(argv[1])[0]; return BOOLEAN_VAL(!!isxdigit(c)); } -static KrkValue bim_krk_state_paint(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_paint(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); long howMuch = AS_INTEGER(argv[1]); if (howMuch == -1) howMuch = state->line->actual; @@ -10294,17 +10294,17 @@ static KrkValue bim_krk_state_paint(int argc, KrkValue argv[]) { paint(howMuch, whatFlag); return NONE_VAL(); } -static KrkValue bim_krk_state_paintComment(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_paintComment(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); paint_comment(state); return NONE_VAL(); } -static KrkValue bim_krk_state_skip(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_skip(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); skip(); return NONE_VAL(); } -static KrkValue bim_krk_state_cKeywordQualifier(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_cKeywordQualifier(int argc, KrkValue argv[], int hasKw) { if (IS_INTEGER(argv[1])) return BOOLEAN_VAL(!!c_keyword_qualifier(AS_INTEGER(argv[1]))); if (!IS_STRING(argv[1])) return BOOLEAN_VAL(0); if (AS_STRING(argv[1])->length > 1) return BOOLEAN_VAL(0); @@ -10319,10 +10319,10 @@ static int callQualifier(KrkValue qualifier, int codepoint) { return 0; } -static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); - if (argc < 4 || !krk_isInstanceOf(argv[1], vm.baseClasses.listClass) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "invalid arguments to SyntaxState.findKeywords"); + if (argc < 4 || !krk_isInstanceOf(argv[1], vm.baseClasses->listClass) || !IS_INTEGER(argv[2])) + return krk_runtimeError(vm.exceptions->typeError, "invalid arguments to SyntaxState.findKeywords"); KrkValue qualifier = argv[3]; int flag = AS_INTEGER(argv[2]); @@ -10332,7 +10332,7 @@ static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[]) { for (size_t keyword = 0; keyword < AS_LIST(argv[1])->count; ++keyword) { if (!IS_STRING(AS_LIST(argv[1])->values[keyword])) - return krk_runtimeError(vm.exceptions.typeError, "expected list of strings, found '%s'", krk_typeName(AS_LIST(argv[1])->values[keyword])); + return krk_runtimeError(vm.exceptions->typeError, "expected list of strings, found '%s'", krk_typeName(AS_LIST(argv[1])->values[keyword])); KrkString * me = AS_STRING(AS_LIST(argv[1])->values[keyword]); size_t d = 0; @@ -10354,10 +10354,10 @@ static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[]) { } return BOOLEAN_VAL(0); } -static KrkValue bim_krk_state_matchAndPaint(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_matchAndPaint(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); if (argc < 4 || !IS_STRING(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "invalid arguments to SyntaxState.matchAndPaint"); + return krk_runtimeError(vm.exceptions->typeError, "invalid arguments to SyntaxState.matchAndPaint"); KrkValue qualifier = argv[3]; int flag = AS_INTEGER(argv[2]); KrkString * me = AS_STRING(argv[1]); @@ -10379,19 +10379,19 @@ static KrkValue bim_krk_state_matchAndPaint(int argc, KrkValue argv[]) { } return BOOLEAN_VAL(0); } -static KrkValue bim_krk_state_rewind(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_rewind(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); state->i -= AS_INTEGER(argv[1]); return NONE_VAL(); } -static KrkValue bim_krk_state_commentBuzzwords(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_commentBuzzwords(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); return BOOLEAN_VAL(common_comment_buzzwords(state)); } -static KrkValue bim_krk_state_init(int argc, KrkValue argv[]) { +static KrkValue bim_krk_state_init(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); if (argc < 2 || !krk_isInstanceOf(argv[1], syntaxStateClass)) { - return krk_runtimeError(vm.exceptions.typeError, "Can only initialize subhighlighter from an existing highlighter."); + return krk_runtimeError(vm.exceptions->typeError, "Can only initialize subhighlighter from an existing highlighter."); } *state = ((struct SyntaxState*)AS_INSTANCE(argv[1]))->state; @@ -10399,8 +10399,8 @@ static KrkValue bim_krk_state_init(int argc, KrkValue argv[]) { return argv[0]; } -static KrkValue krk_bim_get_commands(int argc, KrkValue argv[]) { - KrkValue myList = krk_list_of(0, NULL); +static KrkValue krk_bim_get_commands(int argc, KrkValue argv[], int hasKw) { + KrkValue myList = krk_list_of(0, NULL,0); krk_push(myList); for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { krk_writeValueArray(AS_LIST(myList), OBJECT_VAL(krk_copyString(c->name,strlen(c->name)))); @@ -10417,7 +10417,7 @@ struct ActionDef { struct action_def * action; }; -static KrkValue bim_krk_action_call(int argc, KrkValue argv[]) { +static KrkValue bim_krk_action_call(int argc, KrkValue argv[], int hasKw) { struct ActionDef * self = (void*)AS_OBJECT(argv[0]); /* Figure out arguments */ @@ -10429,7 +10429,7 @@ static KrkValue bim_krk_action_call(int argc, KrkValue argv[]) { int argsAsInts[3] = { 0, 0, 0 }; for (int i = 0; i < args; i++) { if (argc < i + 2) - return krk_runtimeError(vm.exceptions.argumentError, "%s() takes %d argument%s", + return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %d argument%s", self->action->name, args, args == 1 ? "" : "s"); if (IS_INTEGER(argv[i+1])) { argsAsInts[i] = AS_INTEGER(argv[i+1]); @@ -10438,7 +10438,7 @@ static KrkValue bim_krk_action_call(int argc, KrkValue argv[]) { } else if (IS_BOOLEAN(argv[i+1])) { argsAsInts[i] = AS_BOOLEAN(argv[i+1]); } else { - return krk_runtimeError(vm.exceptions.typeError, + return krk_runtimeError(vm.exceptions->typeError, "argument to %s() must be int, bool, or str of len 1", self->action->name); } @@ -10449,7 +10449,7 @@ static KrkValue bim_krk_action_call(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue bim_krk_command_call(int argc, KrkValue argv[]) { +static KrkValue bim_krk_command_call(int argc, KrkValue argv[], int hasKw) { struct CommandDef * self = (void*)AS_OBJECT(argv[0]); char ** args = malloc(sizeof(char*)*argc); @@ -10614,20 +10614,22 @@ void initialize(void) { global_config.tab_indicator = strdup(">"); global_config.space_indicator = strdup("-"); + fprintf(stderr, "init vm\n"); krk_initVM(0); /* no debug flags */ + fprintf(stderr, "done\n"); - KrkInstance * bimModule = krk_newInstance(vm.moduleClass); + KrkInstance * bimModule = krk_newInstance(vm.baseClasses->moduleClass); krk_attachNamedObject(&vm.modules, "bim", (KrkObj*)bimModule); krk_attachNamedObject(&bimModule->fields, "__name__", (KrkObj*)S("bim")); krk_defineNative(&bimModule->fields, "bindHighlighter", krk_bim_register_syntax); krk_defineNative(&bimModule->fields, "getCommands", krk_bim_get_commands); - krk_bim_theme_dict = krk_dict_of(0,NULL); + krk_bim_theme_dict = krk_dict_of(0,NULL,0); krk_attachNamedValue(&bimModule->fields, "themes", krk_bim_theme_dict); krk_defineNative(&bimModule->fields, "defineTheme", krk_bim_define_theme); - krk_bim_syntax_dict = krk_dict_of(0,NULL); + krk_bim_syntax_dict = krk_dict_of(0,NULL,0); krk_attachNamedValue(&bimModule->fields, "highlighters", krk_bim_syntax_dict); - makeClass(bimModule, &ActionDef, "Action", vm.objectClass); + makeClass(bimModule, &ActionDef, "Action", vm.baseClasses->objectClass); ActionDef->allocSize = sizeof(struct ActionDef); krk_defineNative(&ActionDef->methods, ".__call__", bim_krk_action_call); krk_finalizeClass(ActionDef); @@ -10638,12 +10640,12 @@ void initialize(void) { krk_attachNamedObject(&vm.builtins->fields, a->name, (KrkObj*)actionObj); } - makeClass(bimModule, &CommandDef, "Command", vm.objectClass); + makeClass(bimModule, &CommandDef, "Command", vm.baseClasses->objectClass); CommandDef->allocSize = sizeof(struct CommandDef); krk_defineNative(&CommandDef->methods, ".__call__", bim_krk_command_call); krk_finalizeClass(CommandDef); - KrkInstance * global = krk_newInstance(vm.objectClass); + KrkInstance * global = krk_newInstance(vm.baseClasses->objectClass); krk_attachNamedObject(&vm.builtins->fields, "global", (KrkObj*)global); for (struct command_def * c = regular_commands; regular_commands && c->name; ++c) { @@ -10656,7 +10658,7 @@ void initialize(void) { } } - makeClass(bimModule, &syntaxStateClass, "SyntaxState", vm.objectClass); + makeClass(bimModule, &syntaxStateClass, "SyntaxState", vm.baseClasses->objectClass); syntaxStateClass->allocSize = sizeof(struct SyntaxState); krk_defineNative(&syntaxStateClass->methods, ":state", bim_krk_state_getstate); krk_defineNative(&syntaxStateClass->methods, ".set_state", bim_krk_state_setstate); /* TODO property? */ @@ -10694,16 +10696,18 @@ void initialize(void) { krk_resetStack(); + krk_startModule(""); import_directory("syntax"); + krk_startModule(""); import_directory("themes"); + /* Start context for command line */ + krk_startModule(""); + /* Load bimrc */ load_bimrc(); krk_resetStack(); - /* Start context for command line */ - krk_startModule(""); - /* Initialize space for buffers */ buffers_avail = 4; buffers = malloc(sizeof(buffer_t *) * buffers_avail); diff --git a/apps/krk_test_noise.krk b/apps/krk_test_noise.krk new file mode 100755 index 00000000..c4994531 --- /dev/null +++ b/apps/krk_test_noise.krk @@ -0,0 +1,47 @@ +#!/bin/kuroko +import os +if 'KUROKO_TEST_ENV' in os.environ: + return 0 + +from time import sleep +from fileio import open, stdin +from threading import Thread + +let d = {} +let stop = False + +for y in range(0x40): + for x in range(0x40): + d[(y,x)] = 0 + +class NoisePainter(Thread): + def run(self): + let myRando = open('/dev/urandom','rb') + while not stop: + let bytes = myRando.read(3) + let x = bytes[0] & 0x3F + let y = bytes[1] & 0x3F + d[(y,x)] = bytes[2] + +let painters = [NoisePainter() for i in range(5)] + +for painter in painters: + painter.start() + +def drawScreen(): + print("\[[H",end="") + for y in range(0x20): + for x in range(0x40): + let top = d[(y*2,x)] + let bottom = d[(y*2+1,x)] + print("\[[38","2",top,top,top,"48","2",bottom,bottom,bottom,sep=";",end="m▀") + print("\[[0m") + +for i in range(5): + drawScreen() + +stop = True +for painter in painters: + painter.join() + +drawScreen() diff --git a/apps/kuroko.c b/apps/kuroko.c index 9b19a4bb..696b4c7a 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef __toaru__ #include @@ -33,13 +34,13 @@ static int enableRline = 1; static int exitRepl = 0; -static KrkValue exitFunc(int argc, KrkValue argv[]) { +static KrkValue exitFunc(int argc, KrkValue argv[], int hasKw) { exitRepl = 1; return NONE_VAL(); } static int pasteEnabled = 0; -static KrkValue paste(int argc, KrkValue argv[]) { +static KrkValue paste(int argc, KrkValue argv[], int hasKw) { pasteEnabled = !pasteEnabled; fprintf(stderr, "Pasting is %s.\n", pasteEnabled ? "enabled" : "disabled"); return NONE_VAL(); @@ -123,7 +124,7 @@ static void tab_complete_func(rline_context_t * c) { if (n <= count) { /* Now work forwards, starting from the current globals. */ - KrkValue root = OBJECT_VAL(vm.module); + KrkValue root = OBJECT_VAL(krk_currentThread.module); int isGlobal = 1; while (n > base) { /* And look at the potential fields for instances/classes */ @@ -148,10 +149,10 @@ static void tab_complete_func(rline_context_t * c) { int matchCount = 0; /* Take the last symbol name from the chain and get its member list from dir() */ - KRK_PAUSE_GC(); for (;;) { - KrkValue dirList = krk_dirObject(1,(KrkValue[]){root}); + KrkValue dirList = krk_dirObject(1,(KrkValue[]){root},0); + krk_push(dirList); if (!IS_INSTANCE(dirList)) { fprintf(stderr,"\nInternal error while tab completting.\n"); goto _cleanup; @@ -159,13 +160,17 @@ static void tab_complete_func(rline_context_t * c) { for (size_t i = 0; i < AS_LIST(dirList)->count; ++i) { KrkString * s = AS_STRING(AS_LIST(dirList)->values[i]); + krk_push(OBJECT_VAL(s)); KrkToken asToken = {.start = s->chars, .literalWidth = s->length}; KrkValue thisValue = findFromProperty(root, asToken); + krk_push(thisValue); if (IS_CLOSURE(thisValue) || IS_BOUND_METHOD(thisValue) || (IS_NATIVE(thisValue) && ((KrkNative*)AS_OBJECT(thisValue))->isMethod != 2)) { char * tmp = malloc(s->length + 2); sprintf(tmp, "%s(", s->chars); s = krk_takeString(tmp, strlen(tmp)); + krk_pop(); + krk_push(OBJECT_VAL(s)); } /* If this symbol is shorter than the current submatch, skip it. */ @@ -192,16 +197,17 @@ static void tab_complete_func(rline_context_t * c) { * If the object we were scanning was the current module, * then we should also throw the builtins into the ring. */ - if (isGlobal && AS_OBJECT(root) == (KrkObj*)vm.module) { + if (isGlobal && AS_OBJECT(root) == (KrkObj*)krk_currentThread.module) { root = OBJECT_VAL(vm.builtins); continue; } else if (isGlobal && AS_OBJECT(root) == (KrkObj*)vm.builtins) { extern char * syn_krk_keywords[]; - KrkInstance * fakeKeywordsObject = krk_newInstance(vm.objectClass); + KrkInstance * fakeKeywordsObject = krk_newInstance(vm.baseClasses->objectClass); + root = OBJECT_VAL(fakeKeywordsObject); + krk_push(root); for (char ** keyword = syn_krk_keywords; *keyword; keyword++) { krk_attachNamedValue(&fakeKeywordsObject->fields, *keyword, NONE_VAL()); } - root = OBJECT_VAL(fakeKeywordsObject); continue; } else { break; @@ -262,15 +268,15 @@ static void tab_complete_func(rline_context_t * c) { _cleanup: free(tmp); free(space); - KRK_RESUME_GC(); + krk_resetStack(); return; } } #endif static void handleSigint(int sigNum) { - if (vm.frameCount) { - krk_runtimeError(vm.exceptions.keyboardInterrupt, "Keyboard interrupt."); + if (krk_currentThread.frameCount) { + krk_runtimeError(vm.exceptions->keyboardInterrupt, "Keyboard interrupt."); } signal(sigNum, handleSigint); @@ -282,7 +288,7 @@ static void findInterpreter(char * argv[]) { #else /* Try asking /proc */ char * binpath = realpath("/proc/self/exe", NULL); - if (!binpath) { + if (!binpath || (access(binpath, X_OK) != 0)) { if (strchr(argv[0], '/')) { binpath = realpath(argv[0], NULL); } else { @@ -295,7 +301,7 @@ static void findInterpreter(char * argv[]) { char tmp[4096]; sprintf(tmp, "%s/%s", path, argv[0]); - if (access(tmp, X_OK)) { + if (access(tmp, X_OK) == 0) { binpath = strdup(tmp); break; } @@ -310,14 +316,57 @@ static void findInterpreter(char * argv[]) { #endif } -static int runString(char * argv[], char * string) { +static int runString(char * argv[], int flags, char * string) { findInterpreter(argv); - krk_initVM(0); + krk_initVM(flags); + krk_startModule("__main__"); krk_interpret(string, 1, "",""); krk_freeVM(); return 0; } +/* This isn't normally exposed. */ +extern KrkFunction * krk_compile(const char * src, int newScope, char * fileName); +static int compileFile(char * argv[], int flags, char * fileName) { + findInterpreter(argv); + krk_initVM(flags); + + /* Open the file. */ + FILE * f = fopen(fileName,"r"); + if (!f) { + fprintf(stderr, "%s: could not read file '%s': %s\n", argv[0], fileName, strerror(errno)); + return 1; + } + + /* Read it like we normally do... */ + fseek(f, 0, SEEK_END); + size_t size = ftell(f); + fseek(f, 0, SEEK_SET); + char * buf = malloc(size+1); + if (fread(buf, 1, size, f) != size) return 2; + fclose(f); + buf[size] = '\0'; + + /* Set up a module scope */ + krk_startModule("__main__"); + + /* Call the compiler directly. */ + KrkFunction * func = krk_compile(buf, 0, fileName); + + /* See if there was an exception. */ + if (krk_currentThread.flags & KRK_HAS_EXCEPTION) { + krk_dumpTraceback(); + } + + /* Free the source string */ + free(buf); + + /* Close out the compiler */ + krk_freeVM(); + + return func == NULL; +} + #ifdef BUNDLE_LIBS #define BUNDLED(name) do { \ extern KrkValue krk_module_onload_ ## name (); \ @@ -332,10 +381,10 @@ int main(int argc, char * argv[]) { int flags = 0; int moduleAsMain = 0; int opt; - while ((opt = getopt(argc, argv, "c:dgm:rstMV-:")) != -1) { + while ((opt = getopt(argc, argv, "+c:C:dgm:rstMV-:")) != -1) { switch (opt) { case 'c': - return runString(argv, optarg); + return runString(argv, flags, optarg); case 'd': /* Disassemble code blocks after compilation. */ flags |= KRK_ENABLE_DISASSEMBLY; @@ -360,12 +409,14 @@ int main(int argc, char * argv[]) { enableRline = 0; break; case 'M': - return runString(argv,"import kuroko; print(kuroko.module_paths)\n"); + return runString(argv,0,"import kuroko; print(kuroko.module_paths)\n"); case 'V': - return runString(argv,"import kuroko; print('Kuroko',kuroko.version)\n"); + return runString(argv,0,"import kuroko; print('Kuroko',kuroko.version)\n"); + case 'C': + return compileFile(argv,flags,optarg); case '-': if (!strcmp(optarg,"version")) { - return runString(argv,"import kuroko; print('Kuroko',kuroko.version)\n"); + return runString(argv,0,"import kuroko; print('Kuroko',kuroko.version)\n"); } else if (!strcmp(optarg,"help")) { fprintf(stderr,"usage: %s [flags] [FILE...]\n" "\n" @@ -376,6 +427,8 @@ int main(int argc, char * argv[]) { " -r Disable complex line editing in the REPL.\n" " -s Debug output from the scanner/tokenizer.\n" " -t Disassemble instructions as they are exceuted.\n" + " -C file Compile 'file', but do not execute it.\n" + " -M Print the default module import paths.\n" " -V Print version information.\n" "\n" " --version Print version information.\n" @@ -401,7 +454,7 @@ int main(int argc, char * argv[]) { for (int arg = optind; arg < argc; ++arg) { krk_push(OBJECT_VAL(krk_copyString(argv[arg],strlen(argv[arg])))); } - KrkValue argList = krk_list_of(argc - optind + (optind == argc), &vm.stackTop[-(argc - optind + (optind == argc))]); + KrkValue argList = krk_list_of(argc - optind + (optind == argc), &krk_currentThread.stackTop[-(argc - optind + (optind == argc))],0); krk_push(argList); krk_attachNamedValue(&vm.system->fields, "argv", argList); krk_pop(); @@ -432,7 +485,7 @@ int main(int argc, char * argv[]) { AS_STRING(AS_LIST(argList)->values[0]), &module, AS_STRING(krk_peek(0))); - if (vm.flags & KRK_HAS_EXCEPTION) { + if (krk_currentThread.flags & KRK_HAS_EXCEPTION) { krk_dumpTraceback(); krk_resetStack(); } @@ -445,7 +498,7 @@ int main(int argc, char * argv[]) { /* The repl runs in the context of a top-level module so each input * line can share a globals state with the others. */ krk_startModule(""); - krk_attachNamedValue(&vm.module->fields,"__doc__", NONE_VAL()); + krk_attachNamedValue(&krk_currentThread.module->fields,"__doc__", NONE_VAL()); #ifndef NO_RLINE /* Set ^D to send EOF */ @@ -646,6 +699,7 @@ int main(int argc, char * argv[]) { (void)blockWidth; } } else { + krk_startModule("__main__"); result = krk_runfile(argv[optind],1,"__main__",argv[optind]); } diff --git a/kuroko b/kuroko index 4eceb98f..6a95c4a9 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 4eceb98ffed5c49f57d362887134613a2c6733ba +Subproject commit 6a95c4a97921e9aa76fda65e1f289428dd95e4b2 diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 8b97b070..cf5782dc 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -94,7 +94,7 @@ static KrkClass * MenuEntrySeparatorClass; * handling stack push/pop to keep things from being prematurely GC'd. */ KrkClass * krk_createClass(KrkInstance * inModule, const char * name, KrkClass * base) { - if (!base) base = vm.objectClass; + if (!base) base = vm.baseClasses->objectClass; KrkString * str_Name = krk_copyString(name, strlen(name)); krk_push(OBJECT_VAL(str_Name)); KrkClass * obj_Class = krk_newClass(str_Name, base); @@ -122,7 +122,7 @@ static void _message_sweep(KrkInstance * self) { free(((struct MessageClass*)self)->msg); } -static KrkValue _message_getattr(int argc, KrkValue argv[]) { +static KrkValue _message_getattr(int argc, KrkValue argv[], int hasKw) { assert(argc == 2); KrkInstance * self = AS_INSTANCE(argv[0]); @@ -203,7 +203,7 @@ static KrkValue _message_getattr(int argc, KrkValue argv[]) { } break; } - krk_runtimeError(vm.exceptions.attributeError, "no attribute '%s'", AS_CSTRING(argv[1])); + krk_runtimeError(vm.exceptions->attributeError, "no attribute '%s'", AS_CSTRING(argv[1])); return NONE_VAL(); } #undef DO_FIELD @@ -212,7 +212,7 @@ static KrkValue _message_getattr(int argc, KrkValue argv[]) { #undef TO_INT #undef WID -static KrkValue _yutani_repr(int argc, KrkValue argv[]) { +static KrkValue _yutani_repr(int argc, KrkValue argv[], int hasKw) { struct YutaniClass * self = (struct YutaniClass*)AS_INSTANCE(argv[0]); char out[500]; size_t len = sprintf(out, "Yutani(fd=%d,server=%s,display_width=%d,display_height=%d)", @@ -225,7 +225,7 @@ static KrkValue _yutani_repr(int argc, KrkValue argv[]) { static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { if (yctxInstance) { - krk_runtimeError(vm.exceptions.valueError, "class 'Yutani' is a singleton and has already been initialized."); + krk_runtimeError(vm.exceptions->valueError, "class 'Yutani' is a singleton and has already been initialized."); return NONE_VAL(); } @@ -234,7 +234,7 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { /* Connect and let's go. */ yutani_t * yctx = yutani_init(); if (!yctx) { - krk_runtimeError(vm.exceptions.ioError, "Failed to connect to compositor."); + krk_runtimeError(vm.exceptions->ioError, "Failed to connect to compositor."); return NONE_VAL(); } @@ -249,15 +249,15 @@ static KrkValue _yutani_init(int argc, KrkValue argv[], int hasKw) { #define CHECK_YUTANI() \ if (argc < 1 || !krk_isInstanceOf(argv[0], Yutani)) \ - return krk_runtimeError(vm.exceptions.typeError, "expected Yutani"); \ + return krk_runtimeError(vm.exceptions->typeError, "expected Yutani"); \ struct YutaniClass * self = (struct YutaniClass*)AS_INSTANCE(argv[0]) -static KrkValue _yutani_display_width(int argc, KrkValue argv[]) { +static KrkValue _yutani_display_width(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); return INTEGER_VAL(self->yctx->display_width); } -static KrkValue _yutani_display_height(int argc, KrkValue argv[]) { +static KrkValue _yutani_display_height(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); return INTEGER_VAL(self->yctx->display_height); } @@ -283,9 +283,9 @@ static KrkValue _yutani_poll(int argc, KrkValue argv[], int hasKw) { return krk_pop(); } -static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { +static KrkValue _yutani_wait_for(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); - if (argc != 2 || !IS_INTEGER(argv[1])) { krk_runtimeError(vm.exceptions.argumentError, "expected int for msgtype"); return NONE_VAL(); } + if (argc != 2 || !IS_INTEGER(argv[1])) { krk_runtimeError(vm.exceptions->argumentError, "expected int for msgtype"); return NONE_VAL(); } yutani_msg_t * result = yutani_wait_for(self->yctx, AS_INTEGER(argv[1])); KrkInstance * out = krk_newInstance(Message); krk_push(OBJECT_VAL(out)); @@ -295,38 +295,38 @@ static KrkValue _yutani_wait_for(int argc, KrkValue argv[]) { return krk_pop(); } -static KrkValue _yutani_subscribe(int argc, KrkValue argv[]) { +static KrkValue _yutani_subscribe(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); yutani_subscribe_windows(self->yctx); return NONE_VAL(); } -static KrkValue _yutani_unsubscribe(int argc, KrkValue argv[]) { +static KrkValue _yutani_unsubscribe(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); yutani_unsubscribe_windows(self->yctx); return NONE_VAL(); } -static KrkValue _yutani_query_windows(int argc, KrkValue argv[]) { +static KrkValue _yutani_query_windows(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); yutani_query_windows(self->yctx); return NONE_VAL(); } -static KrkValue _yutani_fileno(int argc, KrkValue argv[]) { +static KrkValue _yutani_fileno(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); return INTEGER_VAL(fileno(self->yctx->sock)); } -static KrkValue _yutani_query(int argc, KrkValue argv[]) { +static KrkValue _yutani_query(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); return INTEGER_VAL(yutani_query(self->yctx)); } -static KrkValue _yutani_menu_process_event(int argc, KrkValue argv[]) { +static KrkValue _yutani_menu_process_event(int argc, KrkValue argv[], int hasKw) { CHECK_YUTANI(); if (argc < 2 || !krk_isInstanceOf(argv[1],Message)) - return krk_runtimeError(vm.exceptions.typeError, "expected Message"); + return krk_runtimeError(vm.exceptions->typeError, "expected Message"); struct MessageClass* msg = (struct MessageClass*)AS_INSTANCE(argv[1]); return INTEGER_VAL(menu_process_event(self->yctx, msg->msg)); @@ -335,18 +335,18 @@ static KrkValue _yutani_menu_process_event(int argc, KrkValue argv[]) { #define GET_ARG(p,name,type) do { \ if (hasKw && krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S(#name)), &name)) { \ if (!krk_isInstanceOf(name,type)) \ - return krk_runtimeError(vm.exceptions.typeError, #name " argument should be " #type ", not '%s'", krk_typeName(name)); \ + return krk_runtimeError(vm.exceptions->typeError, #name " argument should be " #type ", not '%s'", krk_typeName(name)); \ } else if (argc > p) { \ name = argv[p]; \ if (!krk_isInstanceOf(name,type)) \ - return krk_runtimeError(vm.exceptions.typeError, #name " argument should be " #type ", not '%s'", krk_typeName(name)); \ + return krk_runtimeError(vm.exceptions->typeError, #name " argument should be " #type ", not '%s'", krk_typeName(name)); \ } \ } while (0) #define GFX_PROPERTY(name) \ -static KrkValue _gfx_ ## name (int argc, KrkValue argv[]) { \ +static KrkValue _gfx_ ## name (int argc, KrkValue argv[], int hasKw) { \ if (argc != 1 || !krk_isInstanceOf(argv[0], GraphicsContext)) \ - return krk_runtimeError(vm.exceptions.typeError, "Expected GraphicsContext"); \ + return krk_runtimeError(vm.exceptions->typeError, "Expected GraphicsContext"); \ struct GraphicsContext * self = (struct GraphicsContext *)AS_INSTANCE(argv[0]); \ return INTEGER_VAL(self->ctx-> name); \ } @@ -356,19 +356,19 @@ GFX_PROPERTY(height); #define CHECK_GFX() \ if (argc < 1 || !krk_isInstanceOf(argv[0], GraphicsContext)) \ - return krk_runtimeError(vm.exceptions.typeError, "expected GraphicsContext"); \ + return krk_runtimeError(vm.exceptions->typeError, "expected GraphicsContext"); \ struct GraphicsContext * self = (struct GraphicsContext*)AS_INSTANCE(argv[0]) -static KrkValue _gfx_fill(int argc, KrkValue argv[]) { +static KrkValue _gfx_fill(int argc, KrkValue argv[], int hasKw) { CHECK_GFX(); if (argc < 2 || !krk_isInstanceOf(argv[1], YutaniColor)) - return krk_runtimeError(vm.exceptions.typeError, "fill() takes one color() argument"); + return krk_runtimeError(vm.exceptions->typeError, "fill() takes one color() argument"); struct YutaniColor * color = (struct YutaniColor*)AS_INSTANCE(argv[1]); draw_fill(self->ctx, color->color); return NONE_VAL(); } -static KrkValue _gfx_flip(int argc, KrkValue argv[]) { +static KrkValue _gfx_flip(int argc, KrkValue argv[], int hasKw) { CHECK_GFX(); if (self->doubleBuffered) { flip(self->ctx); @@ -376,16 +376,16 @@ static KrkValue _gfx_flip(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _gfx_blur(int argc, KrkValue argv[]) { +static KrkValue _gfx_blur(int argc, KrkValue argv[], int hasKw) { CHECK_GFX(); int radius = 2; if (argc > 1 && IS_INTEGER(argv[1])) radius = AS_INTEGER(argv[1]); - else if (argc > 1) return krk_runtimeError(vm.exceptions.typeError, "expected int"); + else if (argc > 1) return krk_runtimeError(vm.exceptions->typeError, "expected int"); blur_context_box(self->ctx, radius); return NONE_VAL(); } -static KrkValue _gfx_line(int argc, KrkValue argv[]) { +static KrkValue _gfx_line(int argc, KrkValue argv[], int hasKw) { CHECK_GFX(); if (argc < 6 || !IS_INTEGER(argv[1]) || @@ -393,7 +393,7 @@ static KrkValue _gfx_line(int argc, KrkValue argv[]) { !IS_INTEGER(argv[3]) || !IS_INTEGER(argv[4]) || !krk_isInstanceOf(argv[5], YutaniColor)) { - return krk_runtimeError(vm.exceptions.typeError, "line() expects 4 ints and a color"); + return krk_runtimeError(vm.exceptions->typeError, "line() expects 4 ints and a color"); } int32_t x0 = AS_INTEGER(argv[1]); @@ -408,7 +408,7 @@ static KrkValue _gfx_line(int argc, KrkValue argv[]) { } else if (IS_FLOATING(argv[6])) { draw_line_aa(self->ctx,x0,x1,y0,y1,color->color,AS_FLOATING(argv[6])); } else { - return krk_runtimeError(vm.exceptions.typeError, "thickness must be int or float, not '%s'", krk_typeName(argv[6])); + return krk_runtimeError(vm.exceptions->typeError, "thickness must be int or float, not '%s'", krk_typeName(argv[6])); } } else { draw_line(self->ctx,x0,x1,y0,y1,color->color); @@ -426,7 +426,7 @@ static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { !IS_INTEGER(argv[3]) || !IS_INTEGER(argv[4]) || !krk_isInstanceOf(argv[5], YutaniColor)) { - return krk_runtimeError(vm.exceptions.typeError, "rect() expects 4 ints and a color"); + return krk_runtimeError(vm.exceptions->typeError, "rect() expects 4 ints and a color"); } int32_t x = AS_INTEGER(argv[1]); @@ -442,11 +442,11 @@ static KrkValue _gfx_rect(int argc, KrkValue argv[], int hasKw) { } if (!IS_BOOLEAN(solid)) - return krk_runtimeError(vm.exceptions.typeError, "solid must be bool"); + return krk_runtimeError(vm.exceptions->typeError, "solid must be bool"); if (!IS_NONE(radius) && !IS_INTEGER(radius)) - return krk_runtimeError(vm.exceptions.typeError, "radius must be int"); + return krk_runtimeError(vm.exceptions->typeError, "radius must be int"); if (!IS_NONE(radius) && AS_BOOLEAN(solid)) - return krk_runtimeError(vm.exceptions.typeError, "radius and solid can not be used together"); + return krk_runtimeError(vm.exceptions->typeError, "radius and solid can not be used together"); if (AS_BOOLEAN(solid)) { draw_rectangle_solid(self->ctx, x, y, width, height, color->color); @@ -463,10 +463,10 @@ static KrkValue _gfx_draw_sprite(int argc, KrkValue argv[], int hasKw) { CHECK_GFX(); if (argc < 2 || !krk_isInstanceOf(argv[1], YutaniSprite)) - return krk_runtimeError(vm.exceptions.typeError, "expected Sprite"); + return krk_runtimeError(vm.exceptions->typeError, "expected Sprite"); if (argc < 4 || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3])) - return krk_runtimeError(vm.exceptions.typeError, "expected integer coordinate pair"); + return krk_runtimeError(vm.exceptions->typeError, "expected integer coordinate pair"); /* Potential kwargs: rotation:float, alpha:float, scale:(int,int)... */ KrkValue rotation = NONE_VAL(), alpha = NONE_VAL(), scale=NONE_VAL(), color=NONE_VAL(); @@ -478,17 +478,17 @@ static KrkValue _gfx_draw_sprite(int argc, KrkValue argv[], int hasKw) { } if (!IS_NONE(alpha) && !IS_FLOATING(alpha)) - return krk_runtimeError(vm.exceptions.typeError, "alpha must be float"); + return krk_runtimeError(vm.exceptions->typeError, "alpha must be float"); if (!IS_NONE(rotation) && !IS_FLOATING(rotation)) - return krk_runtimeError(vm.exceptions.typeError, "rotation must be float"); + return krk_runtimeError(vm.exceptions->typeError, "rotation must be float"); if (!IS_NONE(color) && !krk_isInstanceOf(color,YutaniColor)) - return krk_runtimeError(vm.exceptions.typeError, "color must be color"); + return krk_runtimeError(vm.exceptions->typeError, "color must be color"); if (!IS_NONE(scale) && (!IS_TUPLE(scale) || AS_TUPLE(scale)->values.count != 2 || !IS_INTEGER(AS_TUPLE(scale)->values.values[0]) || !IS_INTEGER(AS_TUPLE(scale)->values.values[1]))) - return krk_runtimeError(vm.exceptions.typeError, "scale must be 2-tuple of ints"); + return krk_runtimeError(vm.exceptions->typeError, "scale must be 2-tuple of ints"); if (!IS_NONE(rotation) + !IS_NONE(scale) + !IS_NONE(color) > 1) - return krk_runtimeError(vm.exceptions.typeError, "can not combine rotation / scale / color"); + return krk_runtimeError(vm.exceptions->typeError, "can not combine rotation / scale / color"); if ((!IS_NONE(rotation) || !IS_NONE(color)) && IS_NONE(alpha)) alpha = FLOATING_VAL(1.0); @@ -526,7 +526,7 @@ static void _sprite_sweep(KrkInstance * self) { if (sprite->ctx) free(sprite->ctx); } -static KrkValue _sprite_repr(int argc, KrkValue argv[]) { +static KrkValue _sprite_repr(int argc, KrkValue argv[], int hasKw) { struct YutaniSprite * self = (struct YutaniSprite *)AS_INSTANCE(argv[0]); KrkValue file; @@ -540,18 +540,18 @@ static KrkValue _sprite_repr(int argc, KrkValue argv[]) { return OBJECT_VAL(krk_copyString(out,len)); } -static KrkValue _sprite_init(int argc, KrkValue argv[]) { +static KrkValue _sprite_init(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniSprite)) - return krk_runtimeError(vm.exceptions.typeError, "expected sprite"); + return krk_runtimeError(vm.exceptions->typeError, "expected sprite"); if (argc < 2 || !IS_STRING(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "Sprite() takes one str argument"); + return krk_runtimeError(vm.exceptions->typeError, "Sprite() takes one str argument"); struct YutaniSprite * self = (struct YutaniSprite*)AS_INSTANCE(argv[0]); int result = load_sprite(&self->sprite, AS_CSTRING(argv[1])); if (result) { - return krk_runtimeError(vm.exceptions.ioError, "Sprite() could not be initialized"); + return krk_runtimeError(vm.exceptions->ioError, "Sprite() could not be initialized"); } self->ctx = init_graphics_sprite(&self->sprite); @@ -562,11 +562,11 @@ static KrkValue _sprite_init(int argc, KrkValue argv[]) { #define CHECK_WINDOW() \ if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) \ - return krk_runtimeError(vm.exceptions.typeError, "expected Window"); \ + return krk_runtimeError(vm.exceptions->typeError, "expected Window"); \ struct WindowClass * self = (struct WindowClass*)AS_INSTANCE(argv[0]); \ - if (!self->window) return krk_runtimeError(vm.exceptions.valueError, "Window is closed") + if (!self->window) return krk_runtimeError(vm.exceptions->valueError, "Window is closed") -static KrkValue _window_repr(int argc, KrkValue argv[]) { +static KrkValue _window_repr(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); KrkValue title; krk_tableGet(&self->inst.fields, OBJECT_VAL(S("title")), &title); @@ -580,12 +580,12 @@ static KrkValue _window_repr(int argc, KrkValue argv[]) { } static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { - if (!yctxInstance) return krk_runtimeError(vm.exceptions.valueError, "Compositor is not initialized"); + if (!yctxInstance) return krk_runtimeError(vm.exceptions->valueError, "Compositor is not initialized"); if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "Failed to initialize window"); + return krk_runtimeError(vm.exceptions->typeError, "Failed to initialize window"); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.argumentError, "Expected at least two (integer) arguments (width, height)"); + return krk_runtimeError(vm.exceptions->argumentError, "Expected at least two (integer) arguments (width, height)"); KrkInstance * _self = AS_INSTANCE(argv[0]); struct WindowClass * self = (struct WindowClass*)_self; @@ -593,10 +593,10 @@ static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { krk_integer_type height = AS_INTEGER(argv[2]); KrkValue flags = INTEGER_VAL(0), title = NONE_VAL(), icon = NONE_VAL(), doublebuffer = BOOLEAN_VAL(0); - GET_ARG(3, flags, vm.baseClasses.intClass); - GET_ARG(4, title, vm.baseClasses.strClass); - GET_ARG(5, icon, vm.baseClasses.strClass); - GET_ARG(6, doublebuffer, vm.baseClasses.boolClass); + GET_ARG(3, flags, vm.baseClasses->intClass); + GET_ARG(4, title, vm.baseClasses->strClass); + GET_ARG(5, icon, vm.baseClasses->strClass); + GET_ARG(6, doublebuffer, vm.baseClasses->boolClass); self->window = yutani_window_create_flags(((struct YutaniClass*)yctxInstance)->yctx, width, height, AS_INTEGER(flags)); @@ -624,7 +624,7 @@ static KrkValue _window_init(int argc, KrkValue argv[], int hasKw) { return argv[0]; } -static KrkValue _window_flip(int argc, KrkValue argv[]) { +static KrkValue _window_flip(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (self->doubleBuffered) { flip(self->ctx); @@ -633,23 +633,23 @@ static KrkValue _window_flip(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _window_move(int argc, KrkValue argv[]) { +static KrkValue _window_move(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected two integer arguments"); + return krk_runtimeError(vm.exceptions->typeError, "expected two integer arguments"); yutani_window_move(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_INTEGER(argv[1]), AS_INTEGER(argv[2])); return NONE_VAL(); } -static KrkValue _window_set_focused(int argc, KrkValue argv[]) { +static KrkValue _window_set_focused(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 2 || !IS_INTEGER(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected integer argument"); + return krk_runtimeError(vm.exceptions->typeError, "expected integer argument"); self->window->focused = AS_INTEGER(argv[1]); return NONE_VAL(); } -static KrkValue _window_close(int argc, KrkValue argv[]) { +static KrkValue _window_close(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); yutani_close(((struct YutaniClass*)yctxInstance)->yctx, self->window); self->window = NULL; @@ -658,90 +658,90 @@ static KrkValue _window_close(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _window_set_stack(int argc, KrkValue argv[]) { +static KrkValue _window_set_stack(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); - if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for z-order"); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions->typeError, "expected int for z-order"); int z = AS_INTEGER(argv[1]); yutani_set_stack(((struct YutaniClass*)yctxInstance)->yctx, self->window, z); return NONE_VAL(); } -static KrkValue _window_update_shape(int argc, KrkValue argv[]) { +static KrkValue _window_update_shape(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); - if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for shape specifier"); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions->typeError, "expected int for shape specifier"); int set_shape = AS_INTEGER(argv[1]); yutani_window_update_shape(((struct YutaniClass*)yctxInstance)->yctx, self->window, set_shape); return NONE_VAL(); } -static KrkValue _window_warp_mouse(int argc, KrkValue argv[]) { +static KrkValue _window_warp_mouse(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected two int values for x, y"); + return krk_runtimeError(vm.exceptions->typeError, "expected two int values for x, y"); int32_t x = AS_INTEGER(argv[1]); int32_t y = AS_INTEGER(argv[2]); yutani_window_warp_mouse(((struct YutaniClass*)yctxInstance)->yctx, self->window, x, y); return NONE_VAL(); } -static KrkValue _window_show_mouse(int argc, KrkValue argv[]) { +static KrkValue _window_show_mouse(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); - if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for show_mouse"); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions->typeError, "expected int for show_mouse"); int show_mouse = AS_INTEGER(argv[1]); yutani_window_show_mouse(((struct YutaniClass*)yctxInstance)->yctx, self->window, show_mouse); return NONE_VAL(); } -static KrkValue _window_resize_start(int argc, KrkValue argv[]) { +static KrkValue _window_resize_start(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); - if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for direction"); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions->typeError, "expected int for direction"); yutani_scale_direction_t direction = AS_INTEGER(argv[1]); yutani_window_resize_start(((struct YutaniClass*)yctxInstance)->yctx, self->window, direction); return NONE_VAL(); } -static KrkValue _window_resize(int argc, KrkValue argv[]) { +static KrkValue _window_resize(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected two int values for width, height"); + return krk_runtimeError(vm.exceptions->typeError, "expected two int values for width, height"); uint32_t width = AS_INTEGER(argv[1]); uint32_t height = AS_INTEGER(argv[2]); yutani_window_resize(((struct YutaniClass*)yctxInstance)->yctx, self->window, width, height); return NONE_VAL(); } -static KrkValue _window_resize_offer(int argc, KrkValue argv[]) { +static KrkValue _window_resize_offer(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected two int values for width, height"); + return krk_runtimeError(vm.exceptions->typeError, "expected two int values for width, height"); uint32_t width = AS_INTEGER(argv[1]); uint32_t height = AS_INTEGER(argv[2]); yutani_window_resize_offer(((struct YutaniClass*)yctxInstance)->yctx, self->window, width, height); return NONE_VAL(); } -static KrkValue _window_resize_accept(int argc, KrkValue argv[]) { +static KrkValue _window_resize_accept(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected two int values for width, height"); + return krk_runtimeError(vm.exceptions->typeError, "expected two int values for width, height"); uint32_t width = AS_INTEGER(argv[1]); uint32_t height = AS_INTEGER(argv[2]); yutani_window_resize_accept(((struct YutaniClass*)yctxInstance)->yctx, self->window, width, height); return NONE_VAL(); } -static KrkValue _window_resize_done(int argc, KrkValue argv[]) { +static KrkValue _window_resize_done(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); yutani_window_resize_done(((struct YutaniClass*)yctxInstance)->yctx, self->window); return NONE_VAL(); } -static KrkValue _window_advertise(int argc, KrkValue argv[]) { +static KrkValue _window_advertise(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); if (argc < 2 || !IS_STRING(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected string for title"); + return krk_runtimeError(vm.exceptions->typeError, "expected string for title"); if (argc > 2 && !IS_STRING(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected string for icon"); + return krk_runtimeError(vm.exceptions->typeError, "expected string for icon"); if (argc > 2) { yutani_window_advertise_icon(((struct YutaniClass*)yctxInstance)->yctx, self->window, AS_CSTRING(argv[1]), AS_CSTRING(argv[2])); @@ -751,24 +751,24 @@ static KrkValue _window_advertise(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _window_special_request(int argc, KrkValue argv[]) { +static KrkValue _window_special_request(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); - if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions.typeError, "expected int for request"); + if (argc < 2 || !IS_INTEGER(argv[1])) return krk_runtimeError(vm.exceptions->typeError, "expected int for request"); uint32_t request = AS_INTEGER(argv[1]); yutani_special_request(((struct YutaniClass*)yctxInstance)->yctx, self->window, request); return NONE_VAL(); } -static KrkValue _window_reinit(int argc, KrkValue argv[]) { +static KrkValue _window_reinit(int argc, KrkValue argv[], int hasKw) { CHECK_WINDOW(); reinit_graphics_yutani(self->ctx, self->window); return NONE_VAL(); } #define WINDOW_PROPERTY(name) \ -static KrkValue _window_ ## name (int argc, KrkValue argv[]) { \ +static KrkValue _window_ ## name (int argc, KrkValue argv[], int hasKw) { \ if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) \ - return krk_runtimeError(vm.exceptions.typeError, "Expected Window"); \ + return krk_runtimeError(vm.exceptions->typeError, "Expected Window"); \ struct WindowClass * self = (struct WindowClass*)AS_INSTANCE(argv[0]); \ return INTEGER_VAL(self->window-> name); \ } @@ -778,39 +778,38 @@ WINDOW_PROPERTY(x); WINDOW_PROPERTY(y); WINDOW_PROPERTY(focused); -static KrkValue _decor_get_bounds(int argc, KrkValue argv[]) { +static KrkValue _decor_get_bounds(int argc, KrkValue argv[], int hasKw) { if (argc > 0 && !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected window"); + return krk_runtimeError(vm.exceptions->typeError, "expected window"); struct decor_bounds bounds; decor_get_bounds((argc > 0) ? ((struct WindowClass*)AS_INSTANCE(argv[0]))->window : NULL, &bounds); - KRK_PAUSE_GC(); + KrkValue result = krk_dict_of(0, NULL, 0); + krk_push(result); - KrkValue result = krk_dict_of(6 * 2, (KrkValue[]) { - OBJECT_VAL(S("top_height")), INTEGER_VAL(bounds.top_height), - OBJECT_VAL(S("bottom_height")), INTEGER_VAL(bounds.bottom_height), - OBJECT_VAL(S("left_width")), INTEGER_VAL(bounds.left_width), - OBJECT_VAL(S("right_width")), INTEGER_VAL(bounds.right_width), - OBJECT_VAL(S("width")), INTEGER_VAL(bounds.width), - OBJECT_VAL(S("height")), INTEGER_VAL(bounds.height) - }); +#define SET(val) krk_attachNamedValue(AS_DICT(result), #val, INTEGER_VAL(bounds. val)); - KRK_RESUME_GC(); + SET(top_height); + SET(bottom_height); + SET(left_width); + SET(right_width); + SET(width); + SET(height); - return result; + return krk_pop(); } -static KrkValue _decor_handle_event(int argc, KrkValue argv[]) { +static KrkValue _decor_handle_event(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], Message)) - return krk_runtimeError(vm.exceptions.typeError, "expected message"); + return krk_runtimeError(vm.exceptions->typeError, "expected message"); return INTEGER_VAL(decor_handle_event(((struct YutaniClass*)yctxInstance)->yctx, ((struct MessageClass*)AS_INSTANCE(argv[0]))->msg)); } -static KrkValue _decor_render(int argc, KrkValue argv[]) { +static KrkValue _decor_render(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected window"); + return krk_runtimeError(vm.exceptions->typeError, "expected window"); char * title = (argc > 1 && IS_STRING(argv[1])) ? AS_CSTRING(argv[1]) : NULL; if (title == NULL) { KrkValue winTitle; @@ -825,11 +824,11 @@ static KrkValue _decor_render(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _decor_show_default_menu(int argc, KrkValue argv[]) { +static KrkValue _decor_show_default_menu(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "show_default_menu() expects Window"); + return krk_runtimeError(vm.exceptions->typeError, "show_default_menu() expects Window"); if (argc < 3 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "show_default_menu() expects int coordinate pair"); + return krk_runtimeError(vm.exceptions->typeError, "show_default_menu() expects int coordinate pair"); struct WindowClass * window = (void*)AS_INSTANCE(argv[0]); int32_t x = AS_INTEGER(argv[1]); @@ -839,10 +838,10 @@ static KrkValue _decor_show_default_menu(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _yutani_color_init(int argc, KrkValue argv[]) { +static KrkValue _yutani_color_init(int argc, KrkValue argv[], int hasKw) { if (argc < 4 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3]) || - (argc > 5) || (argc == 5 && !IS_INTEGER(argv[4]))) return krk_runtimeError(vm.exceptions.typeError, "color() expects three or four integer arguments"); - if (!krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color [__init__], not '%s'", krk_typeName(argv[0])); + (argc > 5) || (argc == 5 && !IS_INTEGER(argv[4]))) return krk_runtimeError(vm.exceptions->typeError, "color() expects three or four integer arguments"); + if (!krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions->typeError, "expected color [__init__], not '%s'", krk_typeName(argv[0])); struct YutaniColor * self = (struct YutaniColor*)AS_INSTANCE(argv[0]); if (argc == 5) { self->color = rgba(AS_INTEGER(argv[1]),AS_INTEGER(argv[2]),AS_INTEGER(argv[3]),AS_INTEGER(argv[4])); @@ -852,8 +851,8 @@ static KrkValue _yutani_color_init(int argc, KrkValue argv[]) { return argv[0]; } -static KrkValue _yutani_color_repr(int argc, KrkValue argv[]) { - if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color [__repr__], not '%s'", krk_typeName(argv[0])); +static KrkValue _yutani_color_repr(int argc, KrkValue argv[], int hasKw) { + if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions->typeError, "expected color [__repr__], not '%s'", krk_typeName(argv[0])); struct YutaniColor * self = (struct YutaniColor*)AS_INSTANCE(argv[0]); char tmp[30]; if (_ALP(self->color) != 255) { @@ -864,8 +863,8 @@ static KrkValue _yutani_color_repr(int argc, KrkValue argv[]) { return OBJECT_VAL(krk_copyString(tmp,strlen(tmp))); } -static KrkValue _yutani_color_str(int argc, KrkValue argv[]) { - if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color [__str__], not '%s'", krk_typeName(argv[0])); +static KrkValue _yutani_color_str(int argc, KrkValue argv[], int hasKw) { + if (argc != 1 || !krk_isInstanceOf(argv[0], YutaniColor)) return krk_runtimeError(vm.exceptions->typeError, "expected color [__str__], not '%s'", krk_typeName(argv[0])); struct YutaniColor * self = (struct YutaniColor*)AS_INSTANCE(argv[0]); char tmp[30]; if (_ALP(self->color) != 255) { @@ -878,16 +877,16 @@ static KrkValue _yutani_color_str(int argc, KrkValue argv[]) { #define CHECK_FONT() \ if (argc < 1 || !krk_isInstanceOf(argv[0], YutaniFont)) \ - return krk_runtimeError(vm.exceptions.typeError, "expected Font"); \ + return krk_runtimeError(vm.exceptions->typeError, "expected Font"); \ struct YutaniFont * self = (struct YutaniFont*)AS_INSTANCE(argv[0]) static KrkValue _font_init(int argc, KrkValue argv[], int hasKw) { CHECK_FONT(); if (argc < 2 || !IS_INTEGER(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected int for font type"); + return krk_runtimeError(vm.exceptions->typeError, "expected int for font type"); if (argc < 3 || !IS_INTEGER(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected int for font size"); + return krk_runtimeError(vm.exceptions->typeError, "expected int for font size"); KrkValue fontGamma = FLOATING_VAL(1.7); KrkValue fontStroke = FLOATING_VAL(0.75); @@ -896,9 +895,9 @@ static KrkValue _font_init(int argc, KrkValue argv[], int hasKw) { krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("gamma")), &fontGamma); krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("stroke")), &fontStroke); krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("color")), &fontColor); - if (!IS_FLOATING(fontGamma)) return krk_runtimeError(vm.exceptions.typeError, "expected float for gamma"); - if (!IS_FLOATING(fontStroke)) return krk_runtimeError(vm.exceptions.typeError, "expected float for stroke"); - if (!krk_isInstanceOf(fontColor, YutaniColor)) return krk_runtimeError(vm.exceptions.typeError, "expected color"); + if (!IS_FLOATING(fontGamma)) return krk_runtimeError(vm.exceptions->typeError, "expected float for gamma"); + if (!IS_FLOATING(fontStroke)) return krk_runtimeError(vm.exceptions->typeError, "expected float for stroke"); + if (!krk_isInstanceOf(fontColor, YutaniColor)) return krk_runtimeError(vm.exceptions->typeError, "expected color"); } self->fontType = AS_INTEGER(argv[1]); @@ -910,19 +909,19 @@ static KrkValue _font_init(int argc, KrkValue argv[], int hasKw) { return argv[0]; } -static KrkValue _font_size(int argc, KrkValue argv[]) { +static KrkValue _font_size(int argc, KrkValue argv[], int hasKw) { CHECK_FONT(); return INTEGER_VAL(self->fontSize); } -static KrkValue _font_draw_string(int argc, KrkValue argv[]) { +static KrkValue _font_draw_string(int argc, KrkValue argv[], int hasKw) { CHECK_FONT(); if (argc < 2 || !krk_isInstanceOf(argv[1], GraphicsContext)) - return krk_runtimeError(vm.exceptions.typeError, "expected GraphicsContext"); + return krk_runtimeError(vm.exceptions->typeError, "expected GraphicsContext"); if (argc < 3 || !IS_STRING(argv[2])) - return krk_runtimeError(vm.exceptions.typeError, "expected str"); + return krk_runtimeError(vm.exceptions->typeError, "expected str"); if (argc < 5 || !IS_INTEGER(argv[3]) || !IS_INTEGER(argv[4])) - return krk_runtimeError(vm.exceptions.typeError, "expected int coordinate pair"); + return krk_runtimeError(vm.exceptions->typeError, "expected int coordinate pair"); gfx_context_t * ctx = ((struct GraphicsContext*)AS_INSTANCE(argv[1]))->ctx; const char * str = AS_CSTRING(argv[2]); @@ -932,10 +931,10 @@ static KrkValue _font_draw_string(int argc, KrkValue argv[]) { return INTEGER_VAL(draw_sdf_string_stroke(ctx,x,y,str,self->fontSize,self->fontColor,self->fontType,self->fontGamma,self->fontStroke)); } -static KrkValue _font_width(int argc, KrkValue argv[]) { +static KrkValue _font_width(int argc, KrkValue argv[], int hasKw) { CHECK_FONT(); if (argc < 2 || !IS_STRING(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected str"); + return krk_runtimeError(vm.exceptions->typeError, "expected str"); const char * str = AS_CSTRING(argv[1]); return INTEGER_VAL(draw_sdf_string_width(str, self->fontSize, self->fontType)); @@ -961,11 +960,11 @@ static void _menubar_callback(struct menu_bar * _self) { } } -static KrkValue _MenuBar_init(int argc, KrkValue argv[]) { +static KrkValue _MenuBar_init(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuBar"); if (argc < 2 || !IS_TUPLE(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected tuple of tuples"); + return krk_runtimeError(vm.exceptions->typeError, "expected tuple of tuples"); struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); self->menuBar.entries = malloc(sizeof(struct menu_bar_entries) * (AS_TUPLE(argv[1])->values.count + 1)); @@ -974,7 +973,7 @@ static KrkValue _MenuBar_init(int argc, KrkValue argv[]) { AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.count != 2 || !IS_STRING(AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.values[0]) || !IS_STRING(AS_TUPLE(AS_TUPLE(argv[1])->values.values[i])->values.values[1])) { - return krk_runtimeError(vm.exceptions.typeError, "invalid menu bar entry: expected (str,str) but %d is '%s'", + return krk_runtimeError(vm.exceptions->typeError, "invalid menu bar entry: expected (str,str) but %d is '%s'", (int)i, krk_typeName(AS_TUPLE(argv[1])->values.values[i])); } @@ -994,20 +993,20 @@ static KrkValue _MenuBar_init(int argc, KrkValue argv[]) { krk_attachNamedValue(&self->inst.fields, "entries", argv[1]); /* Give ourselves a dict to track the same information */ - KrkValue dict = krk_dict_of(0,NULL); + KrkValue dict = krk_dict_of(0,NULL, 0); krk_attachNamedValue(&self->inst.fields, "set", dict); return argv[0]; } -static KrkValue _MenuBar_place(int argc, KrkValue argv[]) { +static KrkValue _MenuBar_place(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuBar"); struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); if (argc < 4 || !IS_INTEGER(argv[1]) || !IS_INTEGER(argv[2]) || !IS_INTEGER(argv[3])) - return krk_runtimeError(vm.exceptions.typeError, "expected int for x, y, width"); + return krk_runtimeError(vm.exceptions->typeError, "expected int for x, y, width"); if (argc < 5 || !krk_isInstanceOf(argv[4],YutaniWindow)) - return krk_runtimeError(vm.exceptions.typeError, "expected Window"); + return krk_runtimeError(vm.exceptions->typeError, "expected Window"); self->menuBar.x = AS_INTEGER(argv[1]); self->menuBar.y = AS_INTEGER(argv[2]); @@ -1016,23 +1015,23 @@ static KrkValue _MenuBar_place(int argc, KrkValue argv[]) { return NONE_VAL(); } -static KrkValue _MenuBar_render(int argc, KrkValue argv[]) { +static KrkValue _MenuBar_render(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuBar"); struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); if (argc < 2 || !krk_isInstanceOf(argv[1], GraphicsContext)) - return krk_runtimeError(vm.exceptions.typeError, "expected GraphicsContext"); + return krk_runtimeError(vm.exceptions->typeError, "expected GraphicsContext"); menu_bar_render(&self->menuBar, ((struct GraphicsContext*)AS_INSTANCE(argv[1]))->ctx); return NONE_VAL(); } -static KrkValue _MenuBar_mouse_event(int argc, KrkValue argv[]) { +static KrkValue _MenuBar_mouse_event(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuBar"); struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); if (argc < 3 || !krk_isInstanceOf(argv[1], YutaniWindow) || !krk_isInstanceOf(argv[2], Message)) - return krk_runtimeError(vm.exceptions.typeError, "expected Window and Message"); + return krk_runtimeError(vm.exceptions->typeError, "expected Window and Message"); struct MessageClass * msg = ((struct MessageClass*)AS_INSTANCE(argv[2])); struct yutani_msg_window_mouse_event * me = (struct yutani_msg_window_mouse_event*)msg->msg->data; @@ -1042,44 +1041,44 @@ static KrkValue _MenuBar_mouse_event(int argc, KrkValue argv[]) { &self->menuBar, me, me->new_x, me->new_y)); } -static KrkValue _MenuBar_insert(int argc, KrkValue argv[]) { +static KrkValue _MenuBar_insert(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuBarClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuBar"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuBar"); struct MenuBarClass * self = (struct MenuBarClass*)AS_INSTANCE(argv[0]); if (argc < 3 || !IS_STRING(argv[1]) || !krk_isInstanceOf(argv[2], MenuListClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected str and MenuList"); + return krk_runtimeError(vm.exceptions->typeError, "expected str and MenuList"); menu_set_insert(self->menuBar.set, AS_CSTRING(argv[1]), ((struct MenuListClass*)AS_INSTANCE(argv[2]))->menuList); /* Also assign it to our dict */ KrkValue dict = NONE_VAL(); krk_tableGet(&self->inst.fields, OBJECT_VAL(S("set")), &dict); - if (IS_NONE(dict) || !krk_isInstanceOf(dict,vm.baseClasses.dictClass)) - return krk_runtimeError(vm.exceptions.baseException, "Failed to get set entries?"); + if (IS_NONE(dict) || !krk_isInstanceOf(dict,vm.baseClasses->dictClass)) + return krk_runtimeError(vm.exceptions->baseException, "Failed to get set entries?"); krk_tableSet(AS_DICT(dict), argv[1], argv[2]); return NONE_VAL(); } -static KrkValue _MenuList_init(int argc, KrkValue argv[]) { +static KrkValue _MenuList_init(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuListClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuList"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuList"); struct MenuListClass * self = (struct MenuListClass*)AS_INSTANCE(argv[0]); self->menuList = menu_create(); /* Give us a list to put entries in for GC tracking and retrieval by kuroko code */ - KrkValue list = krk_list_of(0,NULL); + KrkValue list = krk_list_of(0,NULL,0); krk_attachNamedValue(&self->inst.fields, "entries", list); return argv[0]; } -static KrkValue _MenuList_insert(int argc, KrkValue argv[]) { +static KrkValue _MenuList_insert(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuListClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuList"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuList"); struct MenuListClass * self = (struct MenuListClass*)AS_INSTANCE(argv[0]); if (argc < 2 || !krk_isInstanceOf(argv[1], MenuEntryClass)) - return krk_runtimeError(vm.exceptions.typeError, "Expected MenuEntry"); + return krk_runtimeError(vm.exceptions->typeError, "Expected MenuEntry"); /* Append to menu */ menu_insert(self->menuList, ((struct MenuEntryClass*)AS_INSTANCE(argv[1]))->menuEntry); @@ -1087,8 +1086,8 @@ static KrkValue _MenuList_insert(int argc, KrkValue argv[]) { /* Append to internal list */ KrkValue list = NONE_VAL(); krk_tableGet(&self->inst.fields, OBJECT_VAL(S("entries")), &list); - if (IS_NONE(list) || !krk_isInstanceOf(list,vm.baseClasses.listClass)) - return krk_runtimeError(vm.exceptions.baseException, "Failed to get entries?"); + if (IS_NONE(list) || !krk_isInstanceOf(list,vm.baseClasses->listClass)) + return krk_runtimeError(vm.exceptions->baseException, "Failed to get entries?"); krk_writeValueArray(AS_LIST(list), argv[1]); return NONE_VAL(); @@ -1104,20 +1103,20 @@ static void _MenuEntry_callback_internal(struct MenuEntry * _self) { static KrkValue _MenuEntry_init(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntryClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntry"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuEntry"); struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); if (argc < 3 || !IS_STRING(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected title and callback"); + return krk_runtimeError(vm.exceptions->typeError, "expected title and callback"); KrkValue icon = NONE_VAL(), action = NONE_VAL(); if (hasKw) { krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("icon")), &icon); krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("action")), &action); if (!IS_NONE(icon) && !IS_STRING(icon)) - return krk_runtimeError(vm.exceptions.typeError, "icon must be str, not '%s'", krk_typeName(icon)); + return krk_runtimeError(vm.exceptions->typeError, "icon must be str, not '%s'", krk_typeName(icon)); if (!IS_NONE(action) && !IS_STRING(action)) - return krk_runtimeError(vm.exceptions.typeError, "action must be str, not '%s'", krk_typeName(action)); + return krk_runtimeError(vm.exceptions->typeError, "action must be str, not '%s'", krk_typeName(action)); } self->menuEntry = menu_create_normal( @@ -1137,21 +1136,21 @@ static KrkValue _MenuEntry_init(int argc, KrkValue argv[], int hasKw) { static KrkValue _MenuEntrySubmenu_init(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntrySubmenuClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntrySubmenu"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuEntrySubmenu"); struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); if (argc < 2 || !IS_STRING(argv[1])) - return krk_runtimeError(vm.exceptions.typeError, "expected title to be a str"); + return krk_runtimeError(vm.exceptions->typeError, "expected title to be a str"); KrkValue icon = NONE_VAL(), action = NONE_VAL(); if (hasKw) { krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("icon")), &icon); krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("action")), &action); if (!IS_NONE(icon) && !IS_STRING(icon)) - return krk_runtimeError(vm.exceptions.typeError, "icon must be str, not '%s'", krk_typeName(icon)); + return krk_runtimeError(vm.exceptions->typeError, "icon must be str, not '%s'", krk_typeName(icon)); if (!IS_NONE(action) && !IS_STRING(action)) - return krk_runtimeError(vm.exceptions.typeError, "action must be str, not '%s'", krk_typeName(action)); + return krk_runtimeError(vm.exceptions->typeError, "action must be str, not '%s'", krk_typeName(action)); } self->menuEntry = menu_create_submenu( @@ -1164,9 +1163,9 @@ static KrkValue _MenuEntrySubmenu_init(int argc, KrkValue argv[], int hasKw) { return argv[0]; } -static KrkValue _MenuEntrySeparator_init(int argc, KrkValue argv[]) { +static KrkValue _MenuEntrySeparator_init(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !krk_isInstanceOf(argv[0], MenuEntrySeparatorClass)) - return krk_runtimeError(vm.exceptions.typeError, "expected MenuEntrySeparator"); + return krk_runtimeError(vm.exceptions->typeError, "expected MenuEntrySeparator"); struct MenuEntryClass * self = (struct MenuEntryClass*)AS_INSTANCE(argv[0]); self->menuEntry = menu_create_separator(); self->menuEntry->_private = self; @@ -1174,7 +1173,7 @@ static KrkValue _MenuEntrySeparator_init(int argc, KrkValue argv[]) { } KrkValue krk_module_onload__yutani(void) { - module = krk_newInstance(vm.moduleClass); + module = krk_newInstance(vm.baseClasses->moduleClass); /* Store it on the stack for now so we can do stuff that may trip GC * and not lose it to garbage colletion... */ krk_push(OBJECT_VAL(module)); diff --git a/util/auto-dep.py b/util/auto-dep.py index 71588e0e..d0477679 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -179,7 +179,7 @@ def toheader(name): elif command == "--makekurokomod": libname = os.path.basename(filename).replace(".c","").replace("module_","") _libs = [x for x in c.libs if not x.startswith('-ltoaru_') or x.replace("-ltoaru_","") != libname] - print("base/usr/local/lib/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) -DDEBUG {includes} -shared -fPIC -o $@ $< {libraries}".format( + print("base/lib/kuroko/{lib}.so: {source} {headers} util/auto-dep.py | {libraryfiles} $(LC)\n\t$(CC) $(CFLAGS) -DDEBUG {includes} -shared -fPIC -o $@ $< {libraries}".format( lib=libname, source=filename, headers=" ".join([toheader(x) for x in c.libs]), From 32c0b670b7c0ae38782649779c3dbe2a4d5d0138 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 16 Feb 2021 19:17:44 +0900 Subject: [PATCH 084/102] kernel: make sure signal handlers get the right GS descriptor --- kernel/sys/signal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/sys/signal.c b/kernel/sys/signal.c index f788eec9..05aab4a8 100644 --- a/kernel/sys/signal.c +++ b/kernel/sys/signal.c @@ -24,6 +24,7 @@ void enter_signal_handler(uintptr_t location, int signum, uintptr_t stack) { "mov %%ax, %%ds\n" "mov %%ax, %%es\n" "mov %%ax, %%fs\n" + "mov $0x33, %%ax\n" /* Segment selector */ "mov %%ax, %%gs\n" "mov %%esp, %%eax\n" /* Stack -> EAX */ "pushl $0x23\n" /* Segment selector again */ From 620cfc69d28a0901fca324f6f6d89293e75a45d3 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Tue, 16 Feb 2021 19:17:58 +0900 Subject: [PATCH 085/102] kuroko: Update repl bin --- apps/kuroko.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/kuroko.c b/apps/kuroko.c index 696b4c7a..39360b9e 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -311,7 +311,7 @@ static void findInterpreter(char * argv[]) { } } if (binpath) { - vm.binpath = binpath; + vm.binpath = strdup(binpath); } /* Else, give up at this point and just don't attach it at all. */ #endif } @@ -465,10 +465,6 @@ int main(int argc, char * argv[]) { #ifdef BUNDLE_LIBS /* Add any other modules you want to include that are normally built as shared objects. */ - BUNDLED(fileio); - BUNDLED(dis); - BUNDLED(os); - BUNDLED(time); BUNDLED(math); #endif From 9df6e63dbfcd4e37c57eb94cb0eacbf7dad4ec2f Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sat, 6 Mar 2021 20:17:58 +0900 Subject: [PATCH 086/102] kuroko: Update with upstream --- apps/bim.c | 141 ++++++++++------ apps/{bim-core.h => bim.h} | 7 +- apps/kuroko.c | 326 ++++++++++++++++++++++++++++++++----- kuroko | 2 +- 4 files changed, 386 insertions(+), 90 deletions(-) rename apps/{bim-core.h => bim.h} (99%) diff --git a/apps/bim.c b/apps/bim.c index df00fd07..9166be60 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -14,15 +14,16 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "bim-core.h" +#define ENABLE_THREADING +#include "bim.h" #ifdef __toaru__ #include #include "vm.h" #include "debug.h" #else -#include "kuroko/src/kuroko.h" -#include "kuroko/src/vm.h" -#include "kuroko/src/debug.h" +#include +#include +#include #endif global_config_t global_config = { @@ -712,24 +713,7 @@ int update_biminfo(buffer_t * buf, int is_open) { return 0; } -/** - * Close a buffer - */ -buffer_t * buffer_close(buffer_t * buf) { - int i; - - /* Locate the buffer in the buffer list */ - for (i = 0; i < buffers_len; i++) { - if (buf == buffers[i]) - break; - } - - /* This buffer doesn't exist? */ - if (i == buffers_len) { - return NULL; - } - - /* Cancel any background tasks for this env */ +void cancel_background_tasks(buffer_t * buf) { background_task_t * t = global_config.background_task; background_task_t * last = NULL; while (t) { @@ -750,6 +734,27 @@ buffer_t * buffer_close(buffer_t * buf) { t = t->next; } } +} + +/** + * Close a buffer + */ +buffer_t * buffer_close(buffer_t * buf) { + int i; + + /* Locate the buffer in the buffer list */ + for (i = 0; i < buffers_len; i++) { + if (buf == buffers[i]) + break; + } + + /* This buffer doesn't exist? */ + if (i == buffers_len) { + return NULL; + } + + /* Cancel any background tasks for this env */ + cancel_background_tasks(buf); update_biminfo(buf, 0); @@ -909,6 +914,14 @@ int syntax_space = 0; struct syntax_definition * syntaxes = NULL; void add_syntax(struct syntax_definition def) { + /* See if a name match already exists for this def. */ + for (struct syntax_definition * s = syntaxes; syntaxes && s->name; ++s) { + if (!strcmp(def.name,s->name)) { + *s = def; + return; + } + } + if (syntax_space == 0) { syntax_space = 4; syntaxes = calloc(sizeof(struct syntax_definition), syntax_space); @@ -921,6 +934,8 @@ void add_syntax(struct syntax_definition def) { syntax_count++; } +void redraw_all(void); + /** * Calculate syntax highlighting for the given line, and lines after * if their initial syntax state has changed by this recalculation. @@ -958,21 +973,15 @@ void recalculate_syntax(line_t * line, int line_no) { krk_push(OBJECT_VAL(s)); KrkValue result = krk_callSimple(OBJECT_VAL(env->syntax->krkFunc), 1, 0); krk_currentThread.stackTop = krk_currentThread.stack + before; - if (IS_NONE(result) && (krk_currentThread.flags & KRK_HAS_EXCEPTION)) { + if (IS_NONE(result) && (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION)) { render_error("Exception occurred in plugin: %s", AS_INSTANCE(krk_currentThread.currentException)->_class->name->chars); + render_commandline_message("\n"); krk_dumpTraceback(); - fprintf(stderr,"\n\nThis syntax highlighter will be disabled in this environment.\n\n"); - int key = 0; - while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); - env->syntax = NULL; - return; + goto _syntaxError; } else if (!IS_NONE(result) && !IS_INTEGER(result)) { - fprintf(stderr, "Instead of an integer, got %s\n", krk_typeName(result)); - fprintf(stderr,"\n\nThis syntax highlighter will be disabled in this environment.\n\n"); - int key = 0; - while ((key = bim_getkey(DEFAULT_KEY_WAIT)) == KEY_TIMEOUT); - env->syntax = NULL; - return; + render_error("Instead of an integer, got %s", krk_typeName(result)); + render_commandline_message("\n"); + goto _syntaxError; } s->state.state = IS_NONE(result) ? -1 : AS_INTEGER(result); @@ -996,6 +1005,14 @@ void recalculate_syntax(line_t * line, int line_no) { _next: (void)0; } + +_syntaxError: + krk_resetStack(); + fprintf(stderr,"This syntax highlighter will be disabled in this environment."); + env->syntax = NULL; + cancel_background_tasks(env); + pause_for_key(); + redraw_all(); } /** @@ -3686,8 +3703,6 @@ void run_onload(buffer_t * env) { static void render_syntax_async(background_task_t * task) { buffer_t * old_env = env; env = task->env; - struct syntax_definition * old_syn = env->syntax; - env->syntax = task->_private_p; int line_no = task->_private_i; if (env->line_count && line_no < env->line_count) { @@ -3699,8 +3714,6 @@ static void render_syntax_async(background_task_t * task) { redraw_line(line_no); } } - - env->syntax = old_syn; env = old_env; } @@ -3717,7 +3730,6 @@ static void schedule_complete_recalc(void) { background_task_t * task = malloc(sizeof(background_task_t)); task->env = env; task->_private_i = i; - task->_private_p = env->syntax; task->func = render_syntax_async; task->next = NULL; if (global_config.tail_task) { @@ -5480,7 +5492,7 @@ BIM_COMMAND(theme,"theme","Set color theme") { ptrdiff_t before = krk_currentThread.stackTop - krk_currentThread.stack; KrkValue result = krk_callSimple(OBJECT_VAL(d->callable), 0, 0); krk_currentThread.stackTop = krk_currentThread.stack + before; - if (IS_NONE(result) && (krk_currentThread.flags & KRK_HAS_EXCEPTION)) { + if (IS_NONE(result) && (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION)) { render_error("Exception occurred in theme: %s", AS_INSTANCE(krk_currentThread.currentException)->_class->name->chars); krk_dumpTraceback(); int key = 0; @@ -6610,7 +6622,12 @@ void find_match_backwards(int from_line, int from_col, int * out_line, int * out void rehighlight_search(line_t * line) { if (!global_config.search) return; int j = 0; + while (j < line->actual) { + line->text[j].flags &= ~(FLAG_SEARCH); + j++; + } int ignorecase = smart_case(global_config.search); + j = 0; while (j < line->actual) { int matchlen = 0; if (subsearch_matches(line, j, global_config.search, ignorecase, &matchlen)) { @@ -9932,7 +9949,7 @@ int process_krk_command(const char * cmd, KrkValue * outVal) { * get printed by the interpreter and we can't catch it here. */ krk_currentThread.frames[0].outSlots = 1; /* Call the interpreter */ - KrkValue out = krk_interpret(cmd,0,"",""); + KrkValue out = krk_interpret(cmd,""); /* If the user typed just a command name, try to execute it. */ if (krk_isInstanceOf(out,CommandDef)) { krk_push(out); @@ -9942,7 +9959,7 @@ int process_krk_command(const char * cmd, KrkValue * outVal) { int retval = (IS_INTEGER(out)) ? AS_INTEGER(out) : 0; int hadOutput = 0; /* If we got an exception during execution, print it now */ - if (krk_currentThread.flags & KRK_HAS_EXCEPTION) { + if (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) { if (krk_isInstanceOf(krk_currentThread.currentException, vm.exceptions->syntaxError)) { } set_fg_color(COLOR_RED); @@ -10028,7 +10045,7 @@ BIM_COMMAND(runkrk,"runkrk", "Run a kuroko script") { /* In case we're running in a weird context? */ int previousExitFrame = krk_currentThread.exitOnFrame; krk_currentThread.exitOnFrame = krk_currentThread.frameCount; - krk_runfile(argv[1],1,"",argv[1]); + krk_runfile(argv[1],argv[1]); krk_currentThread.exitOnFrame = previousExitFrame; redraw_all(); @@ -10175,7 +10192,7 @@ static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[], int hasKw) { if (!IS_STRING(name)) return krk_runtimeError(vm.exceptions->typeError, "%s.name must be str", AS_CLASS(argv[0])->name->chars); if (!IS_TUPLE(extensions)) - return krk_runtimeError(vm.exceptions->typeError, "%s.extensions must by tuple", AS_CLASS(argv[0])->name->chars); + return krk_runtimeError(vm.exceptions->typeError, "%s.extensions must be tuple", AS_CLASS(argv[0])->name->chars); if (!IS_BOOLEAN(spaces)) return krk_runtimeError(vm.exceptions->typeError, "%s.spaces must be bool", AS_CLASS(argv[0])->name->chars); if (!IS_CLOSURE(calculate)) @@ -10528,7 +10545,7 @@ void import_directory(char * dirName) { "if '%s%s' not in kuroko.module_paths:\n" " kuroko.module_paths.insert(0,'%s%s')\n", dirpath, extra, dirpath, extra); - krk_interpret(tmp,1,"",""); + krk_interpret(tmp,""); } if (dirpath) free(dirpath); @@ -10538,7 +10555,7 @@ void import_directory(char * dirName) { char * tmp = malloc(strlen(dirName) + 1 + strlen(ent->d_name) + 1 + 7); snprintf(tmp, strlen(dirName) + 1 + strlen(ent->d_name) + 1 + 7, "import %s.%s", dirName, ent->d_name); tmp[strlen(tmp)-4] = '\0'; - krk_interpret(tmp,1,"",ent->d_name); + krk_interpret(tmp,ent->d_name); free(tmp); } ent = readdir(dirp); @@ -10576,6 +10593,33 @@ static void findBim(char * argv[]) { } /* Else, give up at this point and just don't attach it at all. */ } +BIM_COMMAND(reload,"reload","Reloads all the Kuroko stuff.") { + /* Unload everything syntax-y */ + KrkValue result = krk_interpret( + "if True:\n" + " import kuroko\n" + " for mod in kuroko.modules():\n" + " if mod.startswith('syntax.') or mod.startswith('themes.'):\n" + " kuroko.unload(mod)\n", ""); + + if (IS_NONE(result) && (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION)) { + krk_dumpTraceback(); + return 1; + } + + /* Reload everything */ + krk_resetStack(); + krk_startModule(""); + import_directory("syntax"); + krk_startModule(""); + import_directory("themes"); + krk_startModule(""); + /* Re-run the RC file */ + load_bimrc(); + krk_resetStack(); + return 0; +} + /** * Run global initialization tasks */ @@ -10614,9 +10658,7 @@ void initialize(void) { global_config.tab_indicator = strdup(">"); global_config.space_indicator = strdup("-"); - fprintf(stderr, "init vm\n"); krk_initVM(0); /* no debug flags */ - fprintf(stderr, "done\n"); KrkInstance * bimModule = krk_newInstance(vm.baseClasses->moduleClass); krk_attachNamedObject(&vm.modules, "bim", (KrkObj*)bimModule); @@ -10708,6 +10750,9 @@ void initialize(void) { load_bimrc(); krk_resetStack(); + /* Disable default traceback printing */ + vm.globalFlags |= KRK_GLOBAL_CLEAN_OUTPUT; + /* Initialize space for buffers */ buffers_avail = 4; buffers = malloc(sizeof(buffer_t *) * buffers_avail); diff --git a/apps/bim-core.h b/apps/bim.h similarity index 99% rename from apps/bim-core.h rename to apps/bim.h index 9b3d3145..13a5c942 100644 --- a/apps/bim-core.h +++ b/apps/bim.h @@ -22,6 +22,11 @@ #include #include #include +#ifdef __toaru__ +#include "vm.h" +#else +#include +#endif #ifdef __DATE__ # define BIM_BUILD_DATE " built " __DATE__ " at " __TIME__ @@ -35,7 +40,7 @@ # define TAG "-alpha" #endif -#define BIM_VERSION "3.0.0" TAG +#define BIM_VERSION "2.99.0" TAG #define BIM_COPYRIGHT "Copyright 2012-2021 K. Lange <\033[3mklange@toaruos.org\033[23m>" #define BLOCK_SIZE 4096 diff --git a/apps/kuroko.c b/apps/kuroko.c index 39360b9e..3fe97886 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -28,6 +28,7 @@ #include "vm.h" #include "memory.h" #include "scanner.h" +#include "compiler.h" #define PROMPT_MAIN ">>> " #define PROMPT_BLOCK " > " @@ -166,9 +167,10 @@ static void tab_complete_func(rline_context_t * c) { krk_push(thisValue); if (IS_CLOSURE(thisValue) || IS_BOUND_METHOD(thisValue) || (IS_NATIVE(thisValue) && ((KrkNative*)AS_OBJECT(thisValue))->isMethod != 2)) { - char * tmp = malloc(s->length + 2); - sprintf(tmp, "%s(", s->chars); - s = krk_takeString(tmp, strlen(tmp)); + size_t allocSize = s->length + 2; + char * tmp = malloc(allocSize); + size_t len = snprintf(tmp, allocSize, "%s(", s->chars); + s = krk_takeString(tmp, len); krk_pop(); krk_push(OBJECT_VAL(s)); } @@ -274,9 +276,253 @@ static void tab_complete_func(rline_context_t * c) { } #endif +static char * lastDebugCommand = NULL; +static int debuggerHook(KrkCallFrame * frame) { + + /* File information */ + fprintf(stderr, "At offset 0x%04lx of function '%s' from '%s' on line %lu:\n", + (unsigned long)(frame->ip - frame->closure->function->chunk.code), + frame->closure->function->name->chars, + frame->closure->function->chunk.filename->chars, + (unsigned long)krk_lineNumber(&frame->closure->function->chunk, + (unsigned long)(frame->ip - frame->closure->function->chunk.code))); + + /* Opcode trace */ + krk_disassembleInstruction( + stderr, + frame->closure->function, + (size_t)(frame->ip - frame->closure->function->chunk.code)); + + krk_debug_dumpStack(stderr, frame); + + while (1) { + char buf[4096] = {0}; +#ifndef NO_RLINE + if (enableRline) { + rline_exit_string=""; + rline_exp_set_prompts("(dbg) ", "", 6, 0); + rline_exp_set_syntax("krk-dbg"); + rline_exp_set_tab_complete_func(NULL); + if (rline(buf, 4096) == 0) goto _dbgQuit; + } else { +#endif + fprintf(stderr, "(dbg) "); + fflush(stderr); + char * out = fgets(buf, 4096, stdin); + if (!out || !strlen(buf)) { + fprintf(stdout, "^D\n"); + goto _dbgQuit; + } +#ifndef NO_RLINE + } +#endif + + char * nl = strstr(buf,"\n"); + if (nl) *nl = '\0'; + + if (!strlen(buf)) { + if (lastDebugCommand) { + strcpy(buf, lastDebugCommand); + } else { + continue; + } + } else { +#ifndef NO_RLINE + if (enableRline) rline_history_insert(strdup(buf)); +#endif + if (lastDebugCommand) free(lastDebugCommand); + lastDebugCommand = strdup(buf); + } + + /* Try to tokenize the first bit */ + char * arg = NULL; + char * sp = strstr(buf," "); + if (sp) { + *sp = '\0'; + arg = sp + 1; + } + /* Now check commands */ + if (!strcmp(buf, "c") || !strcmp(buf,"continue")) { + return KRK_DEBUGGER_CONTINUE; + } else if (!strcmp(buf, "s") || !strcmp(buf, "step")) { + return KRK_DEBUGGER_STEP; + } else if (!strcmp(buf, "abort")) { + return KRK_DEBUGGER_ABORT; + } else if (!strcmp(buf, "q") || !strcmp(buf, "quit")) { + return KRK_DEBUGGER_QUIT; + } else if (!strcmp(buf, "bt") || !strcmp(buf, "backtrace")) { + krk_debug_dumpTraceback(); + } else if (!strcmp(buf, "p") || !strcmp(buf, "print")) { + if (!arg) { + fprintf(stderr, "print requires an argument\n"); + } else { + size_t frameCount = krk_currentThread.frameCount; + /* Compile statement */ + KrkFunction * expression = krk_compile(arg,""); + if (expression) { + /* Make sure stepping is disabled first. */ + krk_debug_disableSingleStep(); + /* Turn our compiled expression into a callable. */ + krk_push(OBJECT_VAL(expression)); + krk_push(OBJECT_VAL(krk_newClosure(expression))); + /* Stack silliness, don't ask. */ + krk_push(NONE_VAL()); + krk_pop(); + /* Call the compiled expression with no args, but claim 2 method extras. */ + krk_push(krk_callSimple(krk_peek(0), 0, 2)); + fprintf(stderr, "\033[1;30m=> "); + krk_printValue(stderr, krk_peek(0)); + fprintf(stderr, "\033[0m\n"); + krk_pop(); + } + if (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) { + krk_dumpTraceback(); + krk_currentThread.flags &= ~(KRK_THREAD_HAS_EXCEPTION); + } + krk_currentThread.frameCount = frameCount; + } + } else if (!strcmp(buf, "break") || !strcmp(buf, "b")) { + char * filename = arg; + if (!filename) { + fprintf(stderr, "usage: break FILE LINE [type]\n"); + continue; + } + + char * lineno = strstr(filename, " "); + if (!lineno) { + fprintf(stderr, "usage: break FILE LINE [type]\n"); + continue; + } + + /* Advance whitespace */ + *lineno = '\0'; + lineno++; + + /* collect optional type */ + int flags = KRK_BREAKPOINT_NORMAL; + char * type = strstr(lineno, " "); + if (type) { + *type = '\0'; type++; + if (!strcmp(type, "repeat") || !strcmp(type,"r")) { + flags = KRK_BREAKPOINT_REPEAT; + } else if (!strcmp(type, "once") || !strcmp(type,"o")) { + flags = KRK_BREAKPOINT_ONCE; + } else { + fprintf(stderr, "Unrecognized breakpoint type: %s\n", type); + continue; + } + } + + int lineInt = atoi(lineno); + int result = krk_debug_addBreakpointFileLine(krk_copyString(filename, strlen(filename)), lineInt, flags); + + if (result == -1) { + fprintf(stderr, "Sorry, couldn't add breakpoint.\n"); + } else { + fprintf(stderr, "Breakpoint %d enabled.\n", result); + } + + } else if (!strcmp(buf, "i") || !strcmp(buf, "info")) { + if (!arg) { + fprintf(stderr, " info breakpoints - Show breakpoints.\n"); + continue; + } + + if (!strcmp(arg,"breakpoints")) { + KrkFunction * codeObject = NULL; + size_t offset = 0; + int flags = 0; + int enabled = 0; + int breakIndex = 0; + while (1) { + int result = krk_debug_examineBreakpoint(breakIndex, &codeObject, &offset, &flags, &enabled); + if (result == -1) break; + if (result == -2) continue; + + fprintf(stderr, "%-4d in %s+%d %s %s\n", + breakIndex, + codeObject->name->chars, + (int)offset, + flags == KRK_BREAKPOINT_NORMAL ? "normal": + flags == KRK_BREAKPOINT_REPEAT ? "repeat" : + flags == KRK_BREAKPOINT_ONCE ? "once" : "?", + enabled ? "enabled" : "disabled"); + + breakIndex++; + } + } else { + fprintf(stderr, "Unrecognized info object: %s\n", arg); + } + + } else if (!strcmp(buf, "e") || !strcmp(buf, "enable")) { + if (!arg) { + fprintf(stderr, "enable requires an argument\n"); + continue; + } + + int breakIndex = atoi(arg); + + if (krk_debug_enableBreakpoint(breakIndex)) { + fprintf(stderr, "Invalid breakpoint handle.\n"); + } else { + fprintf(stderr, "Breakpoint %d enabled.\n", breakIndex); + } + } else if (!strcmp(buf, "d") || !strcmp(buf, "disable")) { + if (!arg) { + fprintf(stderr, "disable requires an argument\n"); + continue; + } + + int breakIndex = atoi(arg); + + if (krk_debug_disableBreakpoint(breakIndex)) { + fprintf(stderr, "Invalid breakpoint handle.\n"); + } else { + fprintf(stderr, "Breakpoint %d disabled.\n", breakIndex); + } + } else if (!strcmp(buf, "r") || !strcmp(buf, "remove")) { + if (!arg) { + fprintf(stderr, "remove requires an argument\n"); + continue; + } + + int breakIndex = atoi(arg); + + if (krk_debug_removeBreakpoint(breakIndex)) { + fprintf(stderr, "Invalid breakpoint handle.\n"); + } else { + fprintf(stderr, "Breakpoint %d removed.\n", breakIndex); + } + } else if (!strcmp(buf, "help")) { + fprintf(stderr, + "Kuroko Interactive Debugger\n" + " c continue - Continue until the next breakpoint.\n" + " s step - Execute this instruction and return to the debugger.\n" + " bt backtrace - Print a backtrace.\n" + " q quit - Exit the interpreter.\n" + " abort - Abort the interpreter (may create a core dump).\n" + " b break ... - Set a breakpoint.\n" + " e enable N - Enable breakpoint 'N'.\n" + " d disable N - Disable breakpoint 'N'.\n" + " r remove N - Remove breakpoint 'N'.\n" + " i info ... - See information about breakpoints.\n" + "\n" + "Empty input lines will repeat the last command.\n" + ); + } else { + fprintf(stderr, "Unrecognized command: %s\n", buf); + } + + } + + return KRK_DEBUGGER_CONTINUE; +_dbgQuit: + return KRK_DEBUGGER_QUIT; +} + static void handleSigint(int sigNum) { if (krk_currentThread.frameCount) { - krk_runtimeError(vm.exceptions->keyboardInterrupt, "Keyboard interrupt."); + krk_currentThread.flags |= KRK_THREAD_SIGNALLED; } signal(sigNum, handleSigint); @@ -287,10 +533,11 @@ static void findInterpreter(char * argv[]) { vm.binpath = strdup(_pgmptr); #else /* Try asking /proc */ - char * binpath = realpath("/proc/self/exe", NULL); + char tmp[4096]; + char * binpath = realpath("/proc/self/exe", tmp); if (!binpath || (access(binpath, X_OK) != 0)) { if (strchr(argv[0], '/')) { - binpath = realpath(argv[0], NULL); + binpath = realpath(argv[0], tmp); } else { /* Search PATH for argv[0] */ char * _path = strdup(getenv("PATH")); @@ -299,10 +546,9 @@ static void findInterpreter(char * argv[]) { char * next = strchr(path,':'); if (next) *next++ = '\0'; - char tmp[4096]; - sprintf(tmp, "%s/%s", path, argv[0]); + snprintf(tmp, 4096, "%s/%s", path, argv[0]); if (access(tmp, X_OK) == 0) { - binpath = strdup(tmp); + binpath = tmp; break; } path = next; @@ -320,13 +566,11 @@ static int runString(char * argv[], int flags, char * string) { findInterpreter(argv); krk_initVM(flags); krk_startModule("__main__"); - krk_interpret(string, 1, "",""); + krk_interpret(string, ""); krk_freeVM(); return 0; } -/* This isn't normally exposed. */ -extern KrkFunction * krk_compile(const char * src, int newScope, char * fileName); static int compileFile(char * argv[], int flags, char * fileName) { findInterpreter(argv); krk_initVM(flags); @@ -351,10 +595,10 @@ static int compileFile(char * argv[], int flags, char * fileName) { krk_startModule("__main__"); /* Call the compiler directly. */ - KrkFunction * func = krk_compile(buf, 0, fileName); + KrkFunction * func = krk_compile(buf, fileName); /* See if there was an exception. */ - if (krk_currentThread.flags & KRK_HAS_EXCEPTION) { + if (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) { krk_dumpTraceback(); } @@ -378,28 +622,35 @@ static int compileFile(char * argv[], int flags, char * fileName) { #endif int main(int argc, char * argv[]) { +#ifdef _WIN32 + SetConsoleOutputCP(65001); + SetConsoleCP(65001); +#endif int flags = 0; int moduleAsMain = 0; int opt; - while ((opt = getopt(argc, argv, "+c:C:dgm:rstMV-:")) != -1) { + while ((opt = getopt(argc, argv, "+c:C:dgm:rstMSV-:")) != -1) { switch (opt) { case 'c': return runString(argv, flags, optarg); case 'd': /* Disassemble code blocks after compilation. */ - flags |= KRK_ENABLE_DISASSEMBLY; + flags |= KRK_THREAD_ENABLE_DISASSEMBLY; break; case 'g': /* Always garbage collect during an allocation. */ - flags |= KRK_ENABLE_STRESS_GC; + flags |= KRK_GLOBAL_ENABLE_STRESS_GC; break; case 's': /* Print debug information during compilation. */ - flags |= KRK_ENABLE_SCAN_TRACING; + flags |= KRK_THREAD_ENABLE_SCAN_TRACING; + break; + case 'S': + flags |= KRK_THREAD_SINGLE_STEP; break; case 't': /* Disassemble instructions as they are executed. */ - flags |= KRK_ENABLE_TRACING; + flags |= KRK_THREAD_ENABLE_TRACING; break; case 'm': moduleAsMain = 1; @@ -429,6 +680,7 @@ int main(int argc, char * argv[]) { " -t Disassemble instructions as they are exceuted.\n" " -C file Compile 'file', but do not execute it.\n" " -M Print the default module import paths.\n" + " -S Enable single-step debugging.\n" " -V Print version information.\n" "\n" " --version Print version information.\n" @@ -449,6 +701,8 @@ int main(int argc, char * argv[]) { findInterpreter(argv); krk_initVM(flags); + krk_debug_registerCallback(debuggerHook); + /* Attach kuroko.argv - argv[0] will be set to an empty string for the repl */ if (argc == optind) krk_push(OBJECT_VAL(krk_copyString("",0))); for (int arg = optind; arg < argc; ++arg) { @@ -471,17 +725,11 @@ int main(int argc, char * argv[]) { KrkValue result = INTEGER_VAL(0); if (moduleAsMain) { - /* This isn't going to do what we want for built-in modules, but I'm not sure - * what we _should_ do for them anyway... let's just leave that as a TODO; - * we do let C modules know they are the __main__ now, so non-built-in - * C modules can still act as scripts if they want... */ - KrkValue module; krk_push(OBJECT_VAL(krk_copyString("__main__",8))); - int out = !krk_loadModule( + int out = !krk_importModule( AS_STRING(AS_LIST(argList)->values[0]), - &module, AS_STRING(krk_peek(0))); - if (krk_currentThread.flags & KRK_HAS_EXCEPTION) { + if (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) { krk_dumpTraceback(); krk_resetStack(); } @@ -493,18 +741,9 @@ int main(int argc, char * argv[]) { /* The repl runs in the context of a top-level module so each input * line can share a globals state with the others. */ - krk_startModule(""); + krk_startModule("__main__"); krk_attachNamedValue(&krk_currentThread.module->fields,"__doc__", NONE_VAL()); -#ifndef NO_RLINE - /* Set ^D to send EOF */ - rline_exit_string=""; - /* Enable syntax highlight for Kuroko */ - rline_exp_set_syntax("krk"); - /* Bind a callback for \t */ - rline_exp_set_tab_complete_func(tab_complete_func); -#endif - /** * Python stores version info in a built-in module called `sys`. * We are not Python, we'll use `sys` to pretend to be Python @@ -540,6 +779,12 @@ int main(int argc, char * argv[]) { #ifndef NO_RLINE /* Main prompt is >>> like in Python */ rline_exp_set_prompts(PROMPT_MAIN, "", 4, 0); + /* Set ^D to send EOF */ + rline_exit_string=""; + /* Enable syntax highlight for Kuroko */ + rline_exp_set_syntax("krk"); + /* Bind a callback for \t */ + rline_exp_set_tab_complete_func(tab_complete_func); #endif while (1) { @@ -671,7 +916,7 @@ int main(int argc, char * argv[]) { FREE_ARRAY(char *, lines, lineCapacity); if (valid) { - KrkValue result = krk_interpret(allData, 0, "",""); + KrkValue result = krk_interpret(allData, ""); if (!IS_NONE(result)) { KrkClass * type = krk_getType(result); const char * formatStr = " \033[1;30m=> %s\033[0m\n"; @@ -687,8 +932,8 @@ int main(int argc, char * argv[]) { } else { fprintf(stdout, formatStr, AS_CSTRING(result)); } - krk_resetStack(); } + krk_resetStack(); free(allData); } @@ -696,7 +941,8 @@ int main(int argc, char * argv[]) { } } else { krk_startModule("__main__"); - result = krk_runfile(argv[optind],1,"__main__",argv[optind]); + result = krk_runfile(argv[optind],argv[optind]); + if (IS_NONE(result) && krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) result = INTEGER_VAL(1); } krk_freeVM(); diff --git a/kuroko b/kuroko index 6a95c4a9..34c8d687 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 6a95c4a97921e9aa76fda65e1f289428dd95e4b2 +Subproject commit 34c8d68720ea5ee736b49094b8b1836a267604a9 From 8b6152b000b5999634808be0e242f0fc52d6ab9c Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 7 Mar 2021 19:55:52 +0900 Subject: [PATCH 087/102] rline: remove stale rline_exp? in theory nothing links with this except maybe old python --- lib/rline_exp.c | 1967 ----------------------------------------------- 1 file changed, 1967 deletions(-) delete mode 100644 lib/rline_exp.c diff --git a/lib/rline_exp.c b/lib/rline_exp.c deleted file mode 100644 index 8d7417ba..00000000 --- a/lib/rline_exp.c +++ /dev/null @@ -1,1967 +0,0 @@ -/* vim: tabstop=4 shiftwidth=4 noexpandtab - * This file is part of ToaruOS and is released under the terms - * of the NCSA / University of Illinois License - see LICENSE.md - * Copyright (C) 2018-2021 K. Lange - * - * Line editor with syntax highlighting based on older, smaller version of bim. - */ -#define _XOPEN_SOURCE -#define _DEFAULT_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define ENTER_KEY '\n' -#define BACKSPACE_KEY 0x08 -#define DELETE_KEY 0x7F -#define MINIMUM_SIZE 10 - -/** - * Same structures as in bim. - * A single character has: - * - A codepoint (Unicode) of up to 21 bits. - * - Flags for syntax highlighting. - * - A display width for rendering. - */ -typedef struct { - uint32_t display_width:4; - uint32_t flags:7; - uint32_t codepoint:21; -} __attribute__((packed)) char_t; - -/** - * We generally only have the one line, - * but this matches bim for compatibility reasons. - */ -typedef struct { - int available; - int actual; - int istate; - char_t text[0]; -} line_t; - -/** - * We operate on a single line of text. - * Maybe we can expand this in the future - * for continuations of edits such as when - * a quote is unclosed? - */ -static line_t * the_line = NULL; - -/** - * Line editor state - */ -static int loading = 0; -static int column = 0; -static int offset = 0; -static int width = 0; -static int full_width = 0; -static int show_right_side = 0; -static int show_left_side = 0; -static int prompt_width_calc = 0; -static int buf_size_max = 0; - -/** - * Prompt strings. - * Defaults to just a "> " prompt with no right side. - * Support for right side prompts is important - * for the ToaruOS shell. - */ -static int prompt_width = 2; -static char * prompt = "> "; -static int prompt_right_width = 0; -static char * prompt_right = ""; - -int rline_exp_set_prompts(char * left, char * right, int left_width, int right_width) { - prompt = left; - prompt_right = right; - prompt_width = left_width; - prompt_right_width = right_width; - return 0; -} - -/** - * Extra shell commands to highlight as keywords. - * These are basically just copied from the - * shell's tab completion database on startup. - */ -static char ** shell_commands = {0}; -static int shell_commands_len = 0; - -int rline_exp_set_shell_commands(char ** cmds, int len) { - shell_commands = cmds; - shell_commands_len = len; - return 0; -} - -/** - * Tab completion callback. - * Compatible with the original rline version. - */ -static rline_callback_t tab_complete_func = NULL; - -int rline_exp_set_tab_complete_func(rline_callback_t func) { - tab_complete_func = func; - return 0; -} - -static int _unget = -1; -static void _ungetc(int c) { - _unget = c; -} - -static int getch(int immediate) { - if (_unget != -1) { - int out = _unget; - _unget = -1; - return out; - } - if (immediate) { - return getc(stdin); - } - struct pollfd fds[1]; - fds[0].fd = STDIN_FILENO; - fds[0].events = POLLIN; - int ret = poll(fds,1,10); - if (ret > 0 && fds[0].revents & POLLIN) { - unsigned char buf[1]; - read(STDIN_FILENO, buf, 1); - return buf[0]; - } else { - return -1; - } -} - -/** - * Convert from Unicode string to utf-8. - */ -static int to_eight(uint32_t codepoint, char * out) { - memset(out, 0x00, 7); - - if (codepoint < 0x0080) { - out[0] = (char)codepoint; - } else if (codepoint < 0x0800) { - out[0] = 0xC0 | (codepoint >> 6); - out[1] = 0x80 | (codepoint & 0x3F); - } else if (codepoint < 0x10000) { - out[0] = 0xE0 | (codepoint >> 12); - out[1] = 0x80 | ((codepoint >> 6) & 0x3F); - out[2] = 0x80 | (codepoint & 0x3F); - } else if (codepoint < 0x200000) { - out[0] = 0xF0 | (codepoint >> 18); - out[1] = 0x80 | ((codepoint >> 12) & 0x3F); - out[2] = 0x80 | ((codepoint >> 6) & 0x3F); - out[3] = 0x80 | ((codepoint) & 0x3F); - } else if (codepoint < 0x4000000) { - out[0] = 0xF8 | (codepoint >> 24); - out[1] = 0x80 | (codepoint >> 18); - out[2] = 0x80 | ((codepoint >> 12) & 0x3F); - out[3] = 0x80 | ((codepoint >> 6) & 0x3F); - out[4] = 0x80 | ((codepoint) & 0x3F); - } else { - out[0] = 0xF8 | (codepoint >> 30); - out[1] = 0x80 | ((codepoint >> 24) & 0x3F); - out[2] = 0x80 | ((codepoint >> 18) & 0x3F); - out[3] = 0x80 | ((codepoint >> 12) & 0x3F); - out[4] = 0x80 | ((codepoint >> 6) & 0x3F); - out[5] = 0x80 | ((codepoint) & 0x3F); - } - - return strlen(out); -} - -/** - * Obtain codepoint display width. - * - * This is copied from bim. Supports a few useful - * things like rendering escapes as codepoints. - */ -static int codepoint_width(wchar_t codepoint) { - if (codepoint == '\t') { - return 1; /* Recalculate later */ - } - if (codepoint < 32) { - /* We render these as ^@ */ - return 2; - } - if (codepoint == 0x7F) { - /* Renders as ^? */ - return 2; - } - if (codepoint > 0x7f && codepoint < 0xa0) { - /* Upper control bytes */ - return 4; - } - if (codepoint == 0xa0) { - /* Non-breaking space _ */ - return 1; - } - /* Skip wcwidth for anything under 256 */ - if (codepoint > 256) { - /* Higher codepoints may be wider (eg. Japanese) */ - int out = wcwidth(codepoint); - if (out >= 1) return out; - /* Invalid character, render as [U+ABCD] or [U+ABCDEF] */ - return (codepoint < 0x10000) ? 8 : 10; - } - return 1; -} - -void recalculate_tabs(line_t * line) { - int j = 0; - for (int i = 0; i < line->actual; ++i) { - if (line->text[i].codepoint == '\t') { - line->text[i].display_width = 4 - (j % 4); - } - j += line->text[i].display_width; - } -} - - -/** - * Color themes have also been copied from bim. - * - * Slimmed down to only the ones we use for syntax - * highlighting; the UI colors have been removed. - */ -static const char * COLOR_FG = "@9"; -static const char * COLOR_BG = "@9"; -static const char * COLOR_ALT_FG = "@5"; -static const char * COLOR_ALT_BG = "@9"; -static const char * COLOR_KEYWORD = "@4"; -static const char * COLOR_STRING = "@2"; -static const char * COLOR_COMMENT = "@5"; -static const char * COLOR_TYPE = "@3"; -static const char * COLOR_PRAGMA = "@1"; -static const char * COLOR_NUMERAL = "@1"; -static const char * COLOR_RED = "@1"; -static const char * COLOR_GREEN = "@2"; -static const char * COLOR_ESCAPE = "@2"; -static const char * COLOR_SEARCH_FG = "@0"; -static const char * COLOR_SEARCH_BG = "@3"; - -/** - * Themes are selected from the $RLINE_THEME - * environment variable. - */ -static void rline_exp_load_colorscheme_default(void) { - COLOR_FG = "@9"; - COLOR_BG = "@9"; - COLOR_ALT_FG = "@10"; - COLOR_ALT_BG = "@9"; - COLOR_KEYWORD = "@14"; - COLOR_STRING = "@2"; - COLOR_COMMENT = "@10"; - COLOR_TYPE = "@3"; - COLOR_PRAGMA = "@1"; - COLOR_NUMERAL = "@1"; - COLOR_RED = "@1"; - COLOR_GREEN = "@2"; - COLOR_ESCAPE = "@12"; - COLOR_SEARCH_FG = "@0"; - COLOR_SEARCH_BG = "@13"; -} - -static void rline_exp_load_colorscheme_sunsmoke(void) { - COLOR_FG = "2;230;230;230"; - COLOR_BG = "@9"; - COLOR_ALT_FG = "2;122;122;122"; - COLOR_ALT_BG = "2;46;43;46"; - COLOR_KEYWORD = "2;51;162;230"; - COLOR_STRING = "2;72;176;72"; - COLOR_COMMENT = "2;158;153;129;3"; - COLOR_TYPE = "2;230;206;110"; - COLOR_PRAGMA = "2;194;70;54"; - COLOR_NUMERAL = "2;230;43;127"; - COLOR_RED = "2;222;53;53"; - COLOR_GREEN = "2;55;167;0"; - COLOR_ESCAPE = "2;113;203;173"; - COLOR_SEARCH_FG = "5;234"; - COLOR_SEARCH_BG = "5;226"; -} - -/** - * Syntax highlighting flags. - */ -#define FLAG_NONE 0 -#define FLAG_KEYWORD 1 -#define FLAG_STRING 2 -#define FLAG_COMMENT 3 -#define FLAG_TYPE 4 -#define FLAG_PRAGMA 5 -#define FLAG_NUMERAL 6 -#define FLAG_ERROR 7 -#define FLAG_DIFFPLUS 8 -#define FLAG_DIFFMINUS 9 -#define FLAG_NOTICE 10 -#define FLAG_BOLD 11 -#define FLAG_LINK 12 -#define FLAG_ESCAPE 13 - -#define FLAG_SELECT (1 << 5) -#define FLAG_SEARCH (1 << 6) - -struct syntax_state { - line_t * line; - int line_no; - int state; - int i; -}; - -#define paint(length, flag) do { for (int i = 0; i < (length) && state->i < state->line->actual; i++, state->i++) { state->line->text[state->i].flags = (flag); } } while (0) -#define charat() (state->i < state->line->actual ? state->line->text[(state->i)].codepoint : -1) -#define nextchar() (state->i + 1 < state->line->actual ? state->line->text[(state->i+1)].codepoint : -1) -#define lastchar() (state->i - 1 >= 0 ? state->line->text[(state->i-1)].codepoint : -1) -#define skip() (state->i++) -#define charrel(x) (state->i + (x) < state->line->actual ? state->line->text[(state->i+(x))].codepoint : -1) - -/** - * Match and paint a single keyword. Returns 1 if the keyword was matched and 0 otherwise, - * so it can be used for prefix checking for things that need further special handling. - */ -int match_and_paint(struct syntax_state * state, const char * keyword, int flag, int (*keyword_qualifier)(int c)) { - if (keyword_qualifier(lastchar())) return 0; - if (!keyword_qualifier(charat())) return 0; - int i = state->i; - int slen = 0; - while (i < state->line->actual || *keyword == '\0') { - if (*keyword == '\0' && (i >= state->line->actual || !keyword_qualifier(state->line->text[i].codepoint))) { - for (int j = 0; j < slen; ++j) { - paint(1, flag); - } - return 1; - } - if (*keyword != state->line->text[i].codepoint) return 0; - - i++; - keyword++; - slen++; - } - return 0; -} - -/** - * Find keywords from a list and paint them, assuming they aren't in the middle of other words. - * Returns 1 if a keyword from the last was found, otherwise 0. - */ -int find_keywords(struct syntax_state * state, char ** keywords, int flag, int (*keyword_qualifier)(int c)) { - if (keyword_qualifier(lastchar())) return 0; - if (!keyword_qualifier(charat())) return 0; - for (char ** keyword = keywords; *keyword; ++keyword) { - int d = 0; - while (state->i + d < state->line->actual && state->line->text[state->i+d].codepoint == (*keyword)[d]) d++; - if ((*keyword)[d] == '\0' && (state->i + d >= state->line->actual || !keyword_qualifier(state->line->text[state->i+d].codepoint))) { - paint((int)strlen(*keyword), flag); - return 1; - } - } - - return 0; -} - -/** - * This is a basic character matcher for "keyword" characters. - */ -int simple_keyword_qualifier(int c) { - return isalnum(c) || (c == '_'); -} - - -int common_comment_buzzwords(struct syntax_state * state) { - if (match_and_paint(state, "TODO", FLAG_NOTICE, simple_keyword_qualifier)) { return 1; } - else if (match_and_paint(state, "XXX", FLAG_NOTICE, simple_keyword_qualifier)) { return 1; } - else if (match_and_paint(state, "FIXME", FLAG_ERROR, simple_keyword_qualifier)) { return 1; } - return 0; -} - -/** - * Paint a comment until end of line, assumes this comment can not continue. - * (Some languages have comments that can continue with a \ - don't use this!) - * Assumes you've already painted your comment start characters. - */ -int paint_comment(struct syntax_state * state) { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else { paint(1, FLAG_COMMENT); } - } - return -1; -} - -int c_keyword_qualifier(int c) { - return isalnum(c) || (c == '_'); -} - -int esh_variable_qualifier(int c) { - return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '_'); -} - -int paint_esh_variable(struct syntax_state * state) { - if (charat() == '{') { - paint(1, FLAG_TYPE); - while (charat() != '}' && charat() != -1) paint(1, FLAG_TYPE); - if (charat() == '}') paint(1, FLAG_TYPE); - } else { - if (charat() == '?' || charat() == '$' || charat() == '#') { - paint(1, FLAG_TYPE); - } else { - while (esh_variable_qualifier(charat())) paint(1, FLAG_TYPE); - } - } - return 0; -} - -int paint_esh_string(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '"') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() == '$') { - paint(1, FLAG_TYPE); - paint_esh_variable(state); - last = -1; - } else if (charat() != -1) { - last = charat(); - paint(1, FLAG_STRING); - } - } - return 2; -} - -int paint_esh_single_string(struct syntax_state * state) { - int last = -1; - while (charat() != -1) { - if (last != '\\' && charat() == '\'') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() != -1) { - last = charat(); - paint(1, FLAG_STRING); - } - } - return 1; -} - -int esh_keyword_qualifier(int c) { - return (isalnum(c) || c == '?' || c == '_' || c == '-'); /* technically anything that isn't a space should qualify... */ -} - -char * esh_keywords[] = { - "cd","exit","export","help","history","if","empty?", - "equals?","return","export-cmd","source","exec","not","while", - "then","else","echo", - NULL -}; - -int syn_esh_calculate(struct syntax_state * state) { - if (state->state == 1) { - return paint_esh_single_string(state); - } else if (state->state == 2) { - return paint_esh_string(state); - } - if (charat() == '#') { - while (charat() != -1) { - if (common_comment_buzzwords(state)) continue; - else paint(1, FLAG_COMMENT); - } - return -1; - } else if (charat() == '$') { - paint(1, FLAG_TYPE); - paint_esh_variable(state); - return 0; - } else if (charat() == '\'') { - paint(1, FLAG_STRING); - return paint_esh_single_string(state); - } else if (charat() == '"') { - paint(1, FLAG_STRING); - return paint_esh_string(state); - } else if (match_and_paint(state, "export", FLAG_KEYWORD, esh_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (esh_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - return 0; - } else if (match_and_paint(state, "export-cmd", FLAG_KEYWORD, esh_keyword_qualifier)) { - while (charat() == ' ') skip(); - while (esh_keyword_qualifier(charat())) paint(1, FLAG_TYPE); - return 0; - } else if (find_keywords(state, esh_keywords, FLAG_KEYWORD, esh_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, shell_commands, FLAG_KEYWORD, esh_keyword_qualifier)) { - return 0; - } else if (isdigit(charat())) { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - return -1; -} - -void paint_simple_string(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '"' */ - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '"') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '"') { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_STRING); - } - } -} - -char * syn_py_keywords[] = { - "class","def","return","del","if","else","elif","for","while","continue", - "break","assert","as","and","or","except","finally","from","global", - "import","in","is","lambda","with","nonlocal","not","pass","raise","try","yield", - NULL -}; - -char * syn_py_types[] = { - /* built-in functions */ - "abs","all","any","ascii","bin","bool","breakpoint","bytes", - "bytearray","callable","compile","complex","delattr","chr", - "dict","dir","divmod","enumerate","eval","exec","filter","float", - "format","frozenset","getattr","globals","hasattr","hash","help", - "hex","id","input","int","isinstance","issubclass","iter","len", - "list","locals","map","max","memoryview","min","next","object", - "oct","open","ord","pow","print","property","range","repr","reverse", - "round","set","setattr","slice","sorted","staticmethod","str","sum", - "super","tuple","type","vars","zip", - NULL -}; - -char * syn_py_special[] = { - "True","False","None", - NULL -}; - -int paint_py_triple_double(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '"') { - paint(1, FLAG_STRING); - if (charat() == '"' && nextchar() == '"') { - paint(2, FLAG_STRING); - return 0; - } - } else { - paint(1, FLAG_STRING); - } - } - return 1; /* continues */ -} - -int paint_py_triple_single(struct syntax_state * state) { - while (charat() != -1) { - if (charat() == '\'') { - paint(1, FLAG_STRING); - if (charat() == '\'' && nextchar() == '\'') { - paint(2, FLAG_STRING); - return 0; - } - } else { - paint(1, FLAG_STRING); - } - } - return 2; /* continues */ -} - -int paint_py_single_string(struct syntax_state * state) { - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '\'') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '\'') { - paint(1, FLAG_STRING); - return 0; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_STRING); - } - } - return 0; -} - -int paint_py_numeral(struct syntax_state * state) { - if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { - paint(2, FLAG_NUMERAL); - while (isxdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && nextchar() == '.') { - paint(2, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if ((charat() == '+' || charat() == '-') && (nextchar() == 'e' || nextchar() == 'E')) { - paint(2, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (charat() == 'e' || charat() == 'E') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - if (charat() == 'j') paint(1, FLAG_NUMERAL); - return 0; - } else { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if ((charat() == '+' || charat() == '-') && (nextchar() == 'e' || nextchar() == 'E')) { - paint(2, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (charat() == 'e' || charat() == 'E') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - if (charat() == 'j') paint(1, FLAG_NUMERAL); - return 0; - } - if (charat() == 'j') paint(1, FLAG_NUMERAL); - } - while (charat() == 'l' || charat() == 'L') paint(1, FLAG_NUMERAL); - return 0; -} - -void paint_py_format_string(struct syntax_state * state, char type) { - paint(1, FLAG_STRING); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == type) { - paint(2, FLAG_ESCAPE); - } else if (charat() == type) { - paint(1, FLAG_STRING); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '{') { - paint(1, FLAG_NUMERAL); - if (charat() == '}') { - state->i--; - paint(2, FLAG_ERROR); /* Can't do that. */ - } else { - while (charat() != -1 && charat() != '}') { - paint(1, FLAG_NUMERAL); - } - paint(1, FLAG_NUMERAL); - } - } else { - paint(1, FLAG_STRING); - } - } -} - -int syn_py_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == '#') { - paint_comment(state); - } else if (state->i == 0 && match_and_paint(state, "import", FLAG_PRAGMA, c_keyword_qualifier)) { - return 0; - } else if (charat() == '@') { - paint(1, FLAG_PRAGMA); - while (c_keyword_qualifier(charat())) paint(1, FLAG_PRAGMA); - return 0; - } else if (charat() == '"') { - if (nextchar() == '"' && charrel(2) == '"') { - paint(3, FLAG_STRING); - return paint_py_triple_double(state); - } else if (lastchar() == 'f') { - /* I don't like backtracking like this, but it makes this parse easier */ - state->i--; - paint(1,FLAG_TYPE); - paint_py_format_string(state,'"'); - return 0; - } else { - paint_simple_string(state); - return 0; - } - } else if (find_keywords(state, syn_py_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (lastchar() != '.' && find_keywords(state, syn_py_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_py_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (charat() == '\'') { - if (nextchar() == '\'' && charrel(2) == '\'') { - paint(3, FLAG_STRING); - return paint_py_triple_single(state); - } else if (lastchar() == 'f') { - /* I don't like backtracking like this, but it makes this parse easier */ - state->i--; - paint(1,FLAG_TYPE); - paint_py_format_string(state,'\''); - return 0; - } else { - return paint_py_single_string(state); - } - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_py_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - case 1: /* multiline """ string */ - return paint_py_triple_double(state); - case 2: /* multiline ''' string */ - return paint_py_triple_single(state); - } - return -1; -} - -void paint_single_string(struct syntax_state * state) { - /* Assumes you came in from a check of charat() == '\'' */ - paint(1, FLAG_NUMERAL); - while (charat() != -1) { - if (charat() == '\\' && nextchar() == '\'') { - paint(2, FLAG_ESCAPE); - } else if (charat() == '\'') { - paint(1, FLAG_NUMERAL); - return; - } else if (charat() == '\\') { - paint(2, FLAG_ESCAPE); - } else { - paint(1, FLAG_NUMERAL); - } - } -} - - -char * syn_krk_keywords[] = { - "and","class","def","else","export","for","if","in","import", - "let","not","or","print","return","while","try","except","raise", - "continue","break", - NULL -}; - -char * syn_krk_types[] = { - /* built-in functions */ - "self", "super", /* implicit in a class method */ - "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ - "list","dict","range", /* builtin classes */ - "object","exception","isinstance","type", - NULL -}; - -char * syn_krk_special[] = { - "True","False","None", - NULL -}; - -int paint_krk_numeral(struct syntax_state * state) { - if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { - paint(2, FLAG_NUMERAL); - while (isxdigit(charat())) paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && (nextchar() == 'o' || nextchar() == 'O')) { - paint(2, FLAG_NUMERAL); - while (charat() >= '0' && charat() <= '7') paint(1, FLAG_NUMERAL); - } else if (charat() == '0' && (nextchar() == 'b' || nextchar() == 'B')) { - paint(2, FLAG_NUMERAL); - while (charat() == '0' || charat() == '1') paint(1, FLAG_NUMERAL); - } else { - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - if (charat() == '.') { - paint(1, FLAG_NUMERAL); - while (isdigit(charat())) paint(1, FLAG_NUMERAL); - } - } - return 0; -} - -int syn_krk_calculate(struct syntax_state * state) { - switch (state->state) { - case -1: - case 0: - if (charat() == '#') { - paint_comment(state); - } else if (charat() == '"') { - paint_simple_string(state); - return 0; - } else if (charat() == '\'') { - paint_single_string(state); - return 0; - } else if (find_keywords(state, syn_krk_keywords, FLAG_KEYWORD, c_keyword_qualifier)) { - return 0; - } else if (lastchar() != '.' && find_keywords(state, syn_krk_types, FLAG_TYPE, c_keyword_qualifier)) { - return 0; - } else if (find_keywords(state, syn_krk_special, FLAG_NUMERAL, c_keyword_qualifier)) { - return 0; - } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { - paint_krk_numeral(state); - return 0; - } else if (charat() != -1) { - skip(); - return 0; - } - break; - } - return -1; -} - -/** - * Convert syntax hilighting flag to color code - */ -static const char * flag_to_color(int _flag) { - int flag = _flag & 0xF; - switch (flag) { - case FLAG_KEYWORD: - return COLOR_KEYWORD; - case FLAG_STRING: - return COLOR_STRING; - case FLAG_COMMENT: - return COLOR_COMMENT; - case FLAG_TYPE: - return COLOR_TYPE; - case FLAG_NUMERAL: - return COLOR_NUMERAL; - case FLAG_PRAGMA: - return COLOR_PRAGMA; - case FLAG_DIFFPLUS: - return COLOR_GREEN; - case FLAG_DIFFMINUS: - return COLOR_RED; - case FLAG_SELECT: - return COLOR_FG; -// case FLAG_BOLD: -// return COLOR_BOLD; -// case FLAG_LINK: -// return COLOR_LINK; - case FLAG_ESCAPE: - return COLOR_ESCAPE; - default: - return COLOR_FG; - } -} - -struct syntax_definition { - char * name; - int (*calculate)(struct syntax_state *); -} syntaxes[] = { - {"esh",syn_esh_calculate}, - {"python",syn_py_calculate}, - {"krk",syn_krk_calculate}, - {NULL, NULL}, -}; - -static struct syntax_definition * syntax; - -int rline_exp_set_syntax(char * name) { - for (struct syntax_definition * s = syntaxes; s->name; ++s) { - if (!strcmp(name,s->name)) { - syntax = s; - return 0; - } - } - return 1; -} - -/** - * Syntax highlighting - * Slimmed down from the bim implementation a bit, - * but generally compatible with the same definitions. - * - * Type highlighting has been removed as the sh highlighter - * didn't use it. This should be made pluggable again, and - * the bim syntax highlighters should probably be broken - * out into dynamically-loaded libraries? - */ -static void recalculate_syntax(line_t * line) { - /* Clear syntax for this line first */ - int line_no = 0; - while (1) { - for (int i = 0; i < line->actual; ++i) { - line->text[i].flags = 0; - } - - if (!syntax) { - return; - } - - /* Start from the line's stored in initial state */ - struct syntax_state state; - state.line = line; - state.line_no = line_no; - state.state = line->istate; - state.i = 0; - - while (1) { - state.state = syntax->calculate(&state); - - if (state.state != 0) { - return; - } - } - } -} - -/** - * Set colors - */ -static void set_colors(const char * fg, const char * bg) { - printf("\033[22;23;"); - if (*bg == '@') { - int _bg = atoi(bg+1); - if (_bg < 10) { - printf("4%d;", _bg); - } else { - printf("10%d;", _bg-10); - } - } else { - printf("48;%s;", bg); - } - if (*fg == '@') { - int _fg = atoi(fg+1); - if (_fg < 10) { - printf("3%dm", _fg); - } else { - printf("9%dm", _fg-10); - } - } else { - printf("38;%sm", fg); - } - fflush(stdout); -} - -/** - * Set just the foreground color - * - * (See set_colors above) - */ -static void set_fg_color(const char * fg) { - printf("\033[22;23;"); - if (*fg == '@') { - int _fg = atoi(fg+1); - if (_fg < 10) { - printf("3%dm", _fg); - } else { - printf("9%dm", _fg-10); - } - } else { - printf("38;%sm", fg); - } - fflush(stdout); -} - -/** - * Mostly copied from bim, but with some minor - * alterations and removal of selection support. - */ -static void render_line(void) { - printf("\033[?25l"); - if (show_left_side) { - printf("\033[0m\r%s", prompt); - } else { - printf("\033[0m\r$"); - } - - if (offset && prompt_width_calc) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("\b<"); - } - - int i = 0; /* Offset in char_t line data entries */ - int j = 0; /* Offset in terminal cells */ - - const char * last_color = NULL; - int was_searching = 0; - - /* Set default text colors */ - set_colors(COLOR_FG, COLOR_BG); - - /* - * When we are rendering in the middle of a wide character, - * we render -'s to fill the remaining amount of the - * charater's width - */ - int remainder = 0; - - line_t * line = the_line; - - /* For each character in the line ... */ - while (i < line->actual) { - - /* If there is remaining text... */ - if (remainder) { - - /* If we should be drawing by now... */ - if (j >= offset) { - /* Fill remainder with -'s */ - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("-"); - set_colors(COLOR_FG, COLOR_BG); - } - - /* One less remaining width cell to fill */ - remainder--; - - /* Terminal offset moves forward */ - j++; - - /* - * If this was the last remaining character, move to - * the next codepoint in the line - */ - if (remainder == 0) { - i++; - } - - continue; - } - - /* Get the next character to draw */ - char_t c = line->text[i]; - - /* If we should be drawing by now... */ - if (j >= offset) { - - /* If this character is going to fall off the edge of the screen... */ - if (j - offset + c.display_width >= width - prompt_width_calc) { - /* We draw this with special colors so it isn't ambiguous */ - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - - /* If it's wide, draw ---> as needed */ - while (j - offset < width - prompt_width_calc - 1) { - printf("-"); - j++; - } - - /* End the line with a > to show it overflows */ - printf(">"); - set_colors(COLOR_FG, COLOR_BG); - j++; - break; - } - - /* Syntax hilighting */ - const char * color = flag_to_color(c.flags); - if ((c.flags & FLAG_SEARCH) || (c.flags == FLAG_NOTICE)) { - set_colors(COLOR_SEARCH_FG, COLOR_SEARCH_BG); - was_searching = 1; - } else if (was_searching) { - set_colors(color, COLOR_BG); - last_color = color; - } else if (!last_color || strcmp(color, last_color)) { - set_fg_color(color); - last_color = color; - } - - /* Render special characters */ - if (c.codepoint == '\t') { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("»"); - for (int i = 1; i < c.display_width; ++i) { - printf("·"); - } - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); - } else if (c.codepoint < 32) { - /* Codepoints under 32 to get converted to ^@ escapes */ - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("^%c", '@' + c.codepoint); - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); - } else if (c.codepoint == 0x7f) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("^?"); - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); - } else if (c.codepoint > 0x7f && c.codepoint < 0xa0) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("<%2x>", c.codepoint); - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); - } else if (c.codepoint == 0xa0) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("_"); - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); - } else if (c.display_width == 8) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("[U+%04x]", c.codepoint); - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); - } else if (c.display_width == 10) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("[U+%06x]", c.codepoint); - set_colors(last_color ? last_color : COLOR_FG, COLOR_BG); -#if 0 - } else if (c.codepoint == ' ' && i == line->actual - 1) { - /* Special case: space at end of line */ - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("·"); - set_colors(COLOR_FG, COLOR_BG); -#endif - } else { - /* Normal characters get output */ - char tmp[7]; /* Max six bytes, use 7 to ensure last is always nil */ - to_eight(c.codepoint, tmp); - printf("%s", tmp); - } - - /* Advance the terminal cell offset by the render width of this character */ - j += c.display_width; - - /* Advance to the next character */ - i++; - } else if (c.display_width > 1) { - /* - * If this is a wide character but we aren't ready to render yet, - * we may need to draw some filler text for the remainder of its - * width to ensure we don't jump around when horizontally scrolling - * past wide characters. - */ - remainder = c.display_width - 1; - j++; - } else { - /* Regular character, not ready to draw, advance without doing anything */ - j++; - i++; - } - } - - set_colors(COLOR_FG, COLOR_BG); - - /* Fill to end right hand side */ - for (; j < width + offset - prompt_width_calc; ++j) { - printf(" "); - } - - /* Print right hand side */ - if (show_right_side) { - printf("\033[0m%s", prompt_right); - } -} - -/** - * Create a line_t - */ -static line_t * line_create(void) { - line_t * line = malloc(sizeof(line_t) + sizeof(char_t) * 32); - line->available = 32; - line->actual = 0; - line->istate = 0; - return line; -} - -/** - * Insert a character into a line - */ -static line_t * line_insert(line_t * line, char_t c, int offset) { - - /* If there is not enough space... */ - if (line->actual == line->available) { - /* Expand the line buffer */ - line->available *= 2; - line = realloc(line, sizeof(line_t) + sizeof(char_t) * line->available); - } - - /* If this was not the last character, then shift remaining characters forward. */ - if (offset < line->actual) { - memmove(&line->text[offset+1], &line->text[offset], sizeof(char_t) * (line->actual - offset)); - } - - /* Insert the new character */ - line->text[offset] = c; - - /* There is one new character in the line */ - line->actual += 1; - - if (!loading) { - recalculate_tabs(line); - recalculate_syntax(line); - } - - return line; -} - -/** - * Update terminal size - * - * We don't listen for sigwinch for various reasons... - */ -static void get_size(void) { - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - full_width = w.ws_col; - if (full_width - prompt_right_width - prompt_width > MINIMUM_SIZE) { - show_right_side = 1; - show_left_side = 1; - prompt_width_calc = prompt_width; - width = full_width - prompt_right_width; - } else { - show_right_side = 0; - if (full_width - prompt_width > MINIMUM_SIZE) { - show_left_side = 1; - prompt_width_calc = prompt_width; - } else { - show_left_side = 0; - prompt_width_calc = 1; - } - width = full_width; - } -} - -/** - * Place the cursor within the line - */ -static void place_cursor_actual(void) { - int x = prompt_width_calc + 1 - offset; - for (int i = 0; i < column; ++i) { - char_t * c = &the_line->text[i]; - x += c->display_width; - } - - if (x > width - 1) { - /* Adjust the offset appropriately to scroll horizontally */ - int diff = x - (width - 1); - offset += diff; - x -= diff; - render_line(); - } - - /* Same for scrolling horizontally to the left */ - if (x < prompt_width_calc + 1) { - int diff = (prompt_width_calc + 1) - x; - offset -= diff; - x += diff; - render_line(); - } - - printf("\033[?25h\033[%dG", x); - fflush(stdout); -} - -/** - * Delete a character - */ -static void line_delete(line_t * line, int offset) { - - /* Can't delete character before start of line. */ - if (offset == 0) return; - - /* If this isn't the last character, we need to move all subsequent characters backwards */ - if (offset < line->actual) { - memmove(&line->text[offset-1], &line->text[offset], sizeof(char_t) * (line->actual - offset)); - } - - /* The line is one character shorter */ - line->actual -= 1; - - if (!loading) { - recalculate_tabs(line); - recalculate_syntax(line); - } -} - -/** - * Backspace from the cursor position - */ -static void delete_at_cursor(void) { - if (column > 0) { - line_delete(the_line, column); - column--; - if (offset > 0) offset--; - } -} - -/** - * Delete whole word - */ -static void delete_word(void) { - if (!the_line->actual) return; - if (!column) return; - - do { - if (column > 0) { - line_delete(the_line, column); - column--; - if (offset > 0) offset--; - } - } while (column && the_line->text[column-1].codepoint != ' '); -} - -/** - * Insert at cursor position - */ -static void insert_char(uint32_t c) { - char_t _c; - _c.codepoint = c; - _c.flags = 0; - _c.display_width = codepoint_width(c); - - the_line = line_insert(the_line, _c, column); - - column++; -} - -/** - * Move cursor left - */ -static void cursor_left(void) { - if (column > 0) column--; - place_cursor_actual(); -} - -/** - * Move cursor right - */ -static void cursor_right(void) { - if (column < the_line->actual) column++; - place_cursor_actual(); -} - -/** - * Move cursor one whole word left - */ -static void word_left(void) { - if (column == 0) return; - column--; - while (column && the_line->text[column].codepoint == ' ') { - column--; - } - while (column > 0) { - if (the_line->text[column-1].codepoint == ' ') break; - column--; - } - place_cursor_actual(); -} - -/** - * Move cursor one whole word right - */ -static void word_right(void) { - while (column < the_line->actual && the_line->text[column].codepoint == ' ') { - column++; - } - while (column < the_line->actual) { - column++; - if (the_line->text[column].codepoint == ' ') break; - } - place_cursor_actual(); -} - -/** - * Move cursor to start of line - */ -static void cursor_home(void) { - column = 0; - place_cursor_actual(); -} - -/* - * Move cursor to end of line - */ -static void cursor_end(void) { - column = the_line->actual; - place_cursor_actual(); -} - -/** - * Temporary buffer for holding utf-8 data - */ -static char temp_buffer[1024]; - -/** - * Cycle to previous history entry - */ -static void history_previous(void) { - if (rline_scroll == 0) { - /* Convert to temporaary buffer */ - unsigned int off = 0; - memset(temp_buffer, 0, sizeof(temp_buffer)); - for (int j = 0; j < the_line->actual; j++) { - char_t c = the_line->text[j]; - off += to_eight(c.codepoint, &temp_buffer[off]); - } - } - - if (rline_scroll < rline_history_count) { - rline_scroll++; - - /* Copy in from history */ - the_line->actual = 0; - column = 0; - loading = 1; - unsigned char * buf = (unsigned char *)rline_history_prev(rline_scroll); - uint32_t istate = 0, c = 0; - for (unsigned int i = 0; i < strlen((char *)buf); ++i) { - if (!decode(&istate, &c, buf[i])) { - insert_char(c); - } - } - loading = 0; - } - /* Set cursor at end */ - column = the_line->actual; - offset = 0; - recalculate_tabs(the_line); - recalculate_syntax(the_line); - render_line(); - place_cursor_actual(); -} - -/** - * Cycle to next history entry - */ -static void history_next(void) { - if (rline_scroll > 1) { - rline_scroll--; - - /* Copy in from history */ - the_line->actual = 0; - column = 0; - loading = 1; - unsigned char * buf = (unsigned char *)rline_history_prev(rline_scroll); - uint32_t istate = 0, c = 0; - for (unsigned int i = 0; i < strlen((char *)buf); ++i) { - if (!decode(&istate, &c, buf[i])) { - insert_char(c); - } - } - loading = 0; - } else if (rline_scroll == 1) { - /* Copy in from temp */ - rline_scroll = 0; - - the_line->actual = 0; - column = 0; - loading = 1; - char * buf = temp_buffer; - uint32_t istate = 0, c = 0; - for (unsigned int i = 0; i < strlen(buf); ++i) { - if (!decode(&istate, &c, buf[i])) { - insert_char(c); - } - } - loading = 0; - } - /* Set cursor at end */ - column = the_line->actual; - offset = 0; - recalculate_tabs(the_line); - recalculate_syntax(the_line); - render_line(); - place_cursor_actual(); -} - -/** - * Handle escape sequences (arrow keys, etc.) - */ -static int handle_escape(int * this_buf, int * timeout, int c) { - if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c == '\033') { - this_buf[*timeout] = c; - (*timeout)++; - return 1; - } - if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c != '[') { - *timeout = 0; - _ungetc(c); - return 1; - } - if (*timeout >= 1 && this_buf[*timeout-1] == '\033' && c == '[') { - *timeout = 1; - this_buf[*timeout] = c; - (*timeout)++; - return 0; - } - if (*timeout >= 2 && this_buf[0] == '\033' && this_buf[1] == '[' && - (isdigit(c) || c == ';')) { - this_buf[*timeout] = c; - (*timeout)++; - return 0; - } - if (*timeout >= 2 && this_buf[0] == '\033' && this_buf[1] == '[') { - switch (c) { - case 'A': // up - history_previous(); - break; - case 'B': // down - history_next(); - break; - case 'C': // right - if (this_buf[*timeout-1] == '5') { - word_right(); - } else { - cursor_right(); - } - break; - case 'D': // left - if (this_buf[*timeout-1] == '5') { - word_left(); - } else { - cursor_left(); - } - break; - case 'H': // home - cursor_home(); - break; - case 'F': // end - cursor_end(); - break; - case '~': - switch (this_buf[*timeout-1]) { - case '1': - cursor_home(); - break; - case '3': - /* Delete forward */ - if (column < the_line->actual) { - line_delete(the_line, column+1); - if (offset > 0) offset--; - } - break; - case '4': - cursor_end(); - break; - } - break; - default: - break; - } - *timeout = 0; - return 0; - } - - *timeout = 0; - return 0; -} - -static unsigned int _INTR, _EOF; -static struct termios old; -static void get_initial_termios(void) { - tcgetattr(STDOUT_FILENO, &old); - _INTR = old.c_cc[VINTR]; - _EOF = old.c_cc[VEOF]; -} - -static void set_unbuffered(void) { - struct termios new = old; - new.c_lflag &= (~ICANON & ~ECHO & ~ISIG); - tcsetattr(STDOUT_FILENO, TCSAFLUSH, &new); -} - -static void set_buffered(void) { - tcsetattr(STDOUT_FILENO, TCSAFLUSH, &old); -} - -static int tabbed; - -static void dummy_redraw(rline_context_t * context) { - /* Do nothing */ -} - -/** - * Juggle our buffer with an rline context so we can - * call original rline functions such as a tab-completion callback - * or reverse search. - */ -static void call_rline_func(rline_callback_t func, rline_context_t * context) { - /* Unicode parser state */ - uint32_t istate = 0; - uint32_t c; - - /* Don't let rline draw things */ - context->quiet = 1; - - /* Allocate a temporary buffer */ - context->buffer = malloc(buf_size_max); - memset(context->buffer,0,buf_size_max); - - /* Convert current data to utf-8 */ - unsigned int off = 0; - for (int j = 0; j < the_line->actual; j++) { - if (j == column) { - /* Track cursor position */ - context->offset = off; - } - char_t c = the_line->text[j]; - off += to_eight(c.codepoint, &context->buffer[off]); - } - - /* If the cursor was at the end, the loop above didn't catch it */ - if (column == the_line->actual) context->offset = off; - - /* - * Did we just press tab before this? This is actually managed - * by the tab-completion function. - */ - context->tabbed = tabbed; - - /* Empty callbacks */ - rline_callbacks_t tmp = {0}; - /* - * Because some clients expect this to be set... - * (we don't need it, we'll redraw ourselves later) - */ - tmp.redraw_prompt = dummy_redraw; - - /* Setup context */ - context->callbacks = &tmp; - context->collected = off; - context->buffer[off] = '\0'; - context->requested = 1024; - - /* Reset colors (for tab completion candidates, etc. */ - printf("\033[0m"); - - /* Call the function */ - func(context); - - /* Now convert back */ - loading = 1; - int final_column = 0; - the_line->actual = 0; - column = 0; - istate = 0; - for (int i = 0; i < context->collected; ++i) { - if (i == context->offset) { - final_column = column; - } - if (!decode(&istate, &c, ((unsigned char *)context->buffer)[i])) { - insert_char(c); - } - } - - free(context->buffer); - - /* Position cursor */ - if (context->offset == context->collected) { - column = the_line->actual; - } else { - column = final_column; - } - tabbed = context->tabbed; - loading = 0; - - /* Recalculate + redraw */ - recalculate_tabs(the_line); - recalculate_syntax(the_line); - render_line(); - place_cursor_actual(); -} - -void rline_redraw_clean(rline_context_t * context) { - if (context->quiet) return; - printf("\033[u%s", context->buffer); - for (int i = context->offset; i < context->collected; ++i) { - printf("\033[D"); - } - fflush(stdout); -} - -void rline_reverse_search(rline_context_t * context) { - char input[512] = {0}; - int collected = 0; - int start_at = 0; - int changed = 0; - fprintf(stderr, "\033[G\033[0m\033[s"); - fflush(stderr); - key_event_state_t kbd_state = {0}; - char * match = ""; - int match_index = 0; - while (1) { - /* Find matches */ -try_rev_search_again: - if (collected && changed) { - match = ""; - match_index = 0; - for (int i = start_at; i < rline_history_count; i++) { - char * c = rline_history_prev(i+1); - if (strstr(c, input)) { - match = c; - match_index = i; - break; - } - } - if (!strcmp(match,"")) { - if (start_at) { - start_at = 0; - goto try_rev_search_again; - } - collected--; - input[collected] = '\0'; - if (collected) { - goto try_rev_search_again; - } - } - } - fprintf(stderr, "\033[u(reverse-i-search)`%s': %s\033[K", input, match); - fflush(stderr); - changed = 0; - - uint32_t key_sym = kbd_key(&kbd_state, fgetc(stdin)); - switch (key_sym) { - case KEY_NONE: - break; - case KEY_BACKSPACE: - case 0x7F: /* delete */ - if (collected > 0) { - collected--; - input[collected] = '\0'; - start_at = 0; - changed = 1; - } - break; - case KEY_CTRL_C: - printf("^C\n"); - return; - case KEY_CTRL_R: - start_at = match_index + 1; - changed = 1; - break; - case KEY_ESCAPE: - case KEY_ARROW_LEFT: - case KEY_ARROW_RIGHT: - context->cancel = 1; - case '\n': - memcpy(context->buffer, match, strlen(match) + 1); - context->collected = strlen(match); - context->offset = context->collected; - if (!context->quiet && context->callbacks->redraw_prompt) { - fprintf(stderr, "\033[G\033[K"); - context->callbacks->redraw_prompt(context); - } - fprintf(stderr, "\033[s"); - rline_redraw_clean(context); - if (key_sym == '\n' && !context->quiet) { - fprintf(stderr, "\n"); - } - return; - default: - if (key_sym < KEY_NORMAL_MAX) { - input[collected] = (char)key_sym; - collected++; - input[collected] = '\0'; - start_at = 0; - changed = 1; - } - break; - } - } -} - -char * rline_preload = NULL; - -/** - * Perform actual interactive line editing. - * - * This is mostly a reimplementation of bim's - * INSERT mode, but with some cleanups and fixes - * to work on a single line and to add some new - * key bindings we don't have in bim. - */ -static int read_line(void) { - int cin; - uint32_t c; - int timeout = 0; - int this_buf[20]; - uint32_t istate = 0; - int immediate = 1; - - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - fprintf(stdout, "◄\033[0m"); /* TODO: This could be retrieved from an envvar */ - for (int i = 0; i < full_width - 1; ++i) { - fprintf(stdout, " "); - } - - if (rline_preload) { - char * c = rline_preload; - while (*c) { - insert_char(*c); - c++; - } - free(rline_preload); - rline_preload = NULL; - } - - render_line(); - place_cursor_actual(); - - while ((cin = getch(immediate))) { - if (cin == -1) { - immediate = 1; - render_line(); - place_cursor_actual(); - continue; - } - get_size(); - if (!decode(&istate, &c, cin)) { - if (timeout == 0) { - if (c != '\t') tabbed = 0; - if (_INTR && c == _INTR) { - set_colors(COLOR_ALT_FG, COLOR_ALT_BG); - printf("^%c", (int)('@' + c)); - printf("\033[0m"); - loading = 1; - the_line->actual = 0; - column = 0; - insert_char('\n'); - immediate = 0; - raise(SIGINT); - return 1; - } - if (_EOF && c == _EOF) { - if (column == 0 && the_line->actual == 0) { - for (char *_c = rline_exit_string; *_c; ++_c) { - insert_char(*_c); - } - render_line(); - place_cursor_actual(); - return 1; - } else { /* Otherwise act like delete */ - if (column < the_line->actual) { - line_delete(the_line, column+1); - if (offset > 0) offset--; - immediate = 0; - } - continue; - } - } - switch (c) { - case '\033': - if (timeout == 0) { - this_buf[timeout] = c; - timeout++; - } - break; - case DELETE_KEY: - case BACKSPACE_KEY: - delete_at_cursor(); - immediate = 0; - break; - case ENTER_KEY: - /* Finished */ - loading = 1; - column = the_line->actual; - render_line(); - insert_char('\n'); - immediate = 0; - return 1; - case 22: /* ^V */ - /* Don't bother with unicode, just take the next byte */ - place_cursor_actual(); - printf("^\b"); - insert_char(getc(stdin)); - immediate = 0; - break; - case 23: /* ^W */ - delete_word(); - immediate = 0; - break; - case 12: /* ^L - Repaint the whole screen */ - printf("\033[2J\033[H"); - render_line(); - place_cursor_actual(); - break; - case 11: /* ^K - Clear to end */ - the_line->actual = column; - immediate = 0; - break; - case 21: /* ^U - Kill to beginning */ - while (column) { - delete_at_cursor(); - } - immediate = 0; - break; - case '\t': - if (tab_complete_func) { - /* Tab complete */ - rline_context_t context = {0}; - call_rline_func(tab_complete_func, &context); - immediate = 0; - } else { - /* Insert tab character */ - insert_char('\t'); - immediate = 0; - } - break; - case 18: - { - rline_context_t context = {0}; - call_rline_func(rline_reverse_search, &context); - if (!context.cancel) { - return 1; - } - immediate = 0; - } - break; - default: - insert_char(c); - immediate = 0; - break; - } - } else { - if (handle_escape(this_buf,&timeout,c)) { - continue; - } - immediate = 0; - } - } else if (istate == UTF8_REJECT) { - istate = 0; - } - } - return 0; -} - -/** - * Read a line of text with interactive editing. - */ -int rline_experimental(char * buffer, int buf_size) { - get_initial_termios(); - set_unbuffered(); - get_size(); - - column = 0; - offset = 0; - buf_size_max = buf_size; - - char * theme = getenv("RLINE_THEME"); - if (theme && !strcmp(theme,"sunsmoke")) { /* TODO bring back theme tables */ - rline_exp_load_colorscheme_sunsmoke(); - } else { - rline_exp_load_colorscheme_default(); - } - - the_line = line_create(); - loading = 0; - read_line(); - printf("\r\033[?25h\033[0m\n"); - - unsigned int off = 0; - for (int j = 0; j < the_line->actual; j++) { - char_t c = the_line->text[j]; - off += to_eight(c.codepoint, &buffer[off]); - } - - free(the_line); - - set_buffered(); - - return strlen(buffer); -} - -void * rline_exp_for_python(void * _stdin, void * _stdout, char * prompt) { - - rline_exp_set_prompts(prompt, "", strlen(prompt), 0); - - char * buf = malloc(1024); - memset(buf, 0, 1024); - - rline_exp_set_syntax("python"); - rline_exit_string = ""; - rline_experimental(buf, 1024); - rline_history_insert(strdup(buf)); - rline_scroll = 0; - - return buf; -} From ff2b8983841bcaa6b82bef0e6e1233d417f6e6ea Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 7 Mar 2021 20:04:22 +0900 Subject: [PATCH 088/102] kuroko: make sure we remove kuroko objs on clean --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index f045b34b..19230040 100644 --- a/Makefile +++ b/Makefile @@ -342,6 +342,7 @@ clean: rm -f ${MODULES} rm -f ${APPS_Y} ${LIBS_Y} ${EXT_LIBS_Y} rm -f ${KUROKO_FILES} + rm -f kuroko/src/*.o ifneq (,$(findstring Microsoft,$(shell uname -r))) QEMU_ARGS=-serial mon:stdio -m 1G -rtc base=localtime -vnc :0 From d54d93dd9d0d7e7ef1115bf8b88458c44e9f8bda Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 7 Mar 2021 21:24:42 +0900 Subject: [PATCH 089/102] bim: It would be great if we were actually shipping the syntax files... --- apps/bim.c | 2 +- base/usr/share/bim/syntax/__init__.krk | 49 +++++ base/usr/share/bim/syntax/bash.krk | 147 +++++++++++++++ base/usr/share/bim/syntax/biminfo.krk | 18 ++ base/usr/share/bim/syntax/c.krk | 225 +++++++++++++++++++++++ base/usr/share/bim/syntax/conf.krk | 25 +++ base/usr/share/bim/syntax/css.krk | 166 +++++++++++++++++ base/usr/share/bim/syntax/ctags.krk | 17 ++ base/usr/share/bim/syntax/diff.krk | 18 ++ base/usr/share/bim/syntax/dirent.krk | 21 +++ base/usr/share/bim/syntax/doxygen.krk | 39 ++++ base/usr/share/bim/syntax/esh.krk | 96 ++++++++++ base/usr/share/bim/syntax/git.krk | 38 ++++ base/usr/share/bim/syntax/groovy.krk | 79 ++++++++ base/usr/share/bim/syntax/hosts.krk | 17 ++ base/usr/share/bim/syntax/java.krk | 141 ++++++++++++++ base/usr/share/bim/syntax/javascript.krk | 97 ++++++++++ base/usr/share/bim/syntax/json.krk | 43 +++++ base/usr/share/bim/syntax/krk.krk | 163 ++++++++++++++++ base/usr/share/bim/syntax/lisp.krk | 41 +++++ base/usr/share/bim/syntax/make.krk | 137 ++++++++++++++ base/usr/share/bim/syntax/man.krk | 33 ++++ base/usr/share/bim/syntax/markdown.krk | 90 +++++++++ base/usr/share/bim/syntax/protobuf.krk | 45 +++++ base/usr/share/bim/syntax/py.krk | 155 ++++++++++++++++ base/usr/share/bim/syntax/xml.krk | 120 ++++++++++++ base/usr/share/bim/themes/__init__.krk | 0 base/usr/share/bim/themes/ansi.krk | 46 +++++ base/usr/share/bim/themes/citylights.krk | 35 ++++ base/usr/share/bim/themes/light.krk | 38 ++++ base/usr/share/bim/themes/solarized.krk | 36 ++++ base/usr/share/bim/themes/sunsmoke.krk | 69 +++++++ base/usr/share/bim/themes/wombat.krk | 39 ++++ 33 files changed, 2284 insertions(+), 1 deletion(-) create mode 100644 base/usr/share/bim/syntax/__init__.krk create mode 100644 base/usr/share/bim/syntax/bash.krk create mode 100644 base/usr/share/bim/syntax/biminfo.krk create mode 100644 base/usr/share/bim/syntax/c.krk create mode 100644 base/usr/share/bim/syntax/conf.krk create mode 100644 base/usr/share/bim/syntax/css.krk create mode 100644 base/usr/share/bim/syntax/ctags.krk create mode 100644 base/usr/share/bim/syntax/diff.krk create mode 100644 base/usr/share/bim/syntax/dirent.krk create mode 100644 base/usr/share/bim/syntax/doxygen.krk create mode 100644 base/usr/share/bim/syntax/esh.krk create mode 100644 base/usr/share/bim/syntax/git.krk create mode 100644 base/usr/share/bim/syntax/groovy.krk create mode 100644 base/usr/share/bim/syntax/hosts.krk create mode 100644 base/usr/share/bim/syntax/java.krk create mode 100644 base/usr/share/bim/syntax/javascript.krk create mode 100644 base/usr/share/bim/syntax/json.krk create mode 100644 base/usr/share/bim/syntax/krk.krk create mode 100644 base/usr/share/bim/syntax/lisp.krk create mode 100644 base/usr/share/bim/syntax/make.krk create mode 100644 base/usr/share/bim/syntax/man.krk create mode 100644 base/usr/share/bim/syntax/markdown.krk create mode 100644 base/usr/share/bim/syntax/protobuf.krk create mode 100644 base/usr/share/bim/syntax/py.krk create mode 100644 base/usr/share/bim/syntax/xml.krk create mode 100644 base/usr/share/bim/themes/__init__.krk create mode 100644 base/usr/share/bim/themes/ansi.krk create mode 100644 base/usr/share/bim/themes/citylights.krk create mode 100644 base/usr/share/bim/themes/light.krk create mode 100644 base/usr/share/bim/themes/solarized.krk create mode 100644 base/usr/share/bim/themes/sunsmoke.krk create mode 100644 base/usr/share/bim/themes/wombat.krk diff --git a/apps/bim.c b/apps/bim.c index 9166be60..daf535e5 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -10527,7 +10527,7 @@ void import_directory(char * dirName) { if (!dirp) { /* Try one last fallback */ if (dirpath) free(dirpath); - dirpath = strdup("/usr/local/share/bim"); + dirpath = strdup("/usr/share/bim"); sprintf(file, "%s/%s", dirpath, dirName); extra = "/"; dirp = opendir(file); diff --git a/base/usr/share/bim/syntax/__init__.krk b/base/usr/share/bim/syntax/__init__.krk new file mode 100644 index 00000000..cccab24a --- /dev/null +++ b/base/usr/share/bim/syntax/__init__.krk @@ -0,0 +1,49 @@ +from bim import SyntaxState, bindHighlighter as bind + +class Highlighter(SyntaxState): + + def matchPrefix(prefix): + let i = 0 + while True: + if i == len(prefix): return True + if prefix[i] != self[i]: return False + if not self[i]: return False + i++ + + def paintSingleString(): + self.paint(1, self.FLAG_STRING) + while self[0]: + if self[0] == '\\' and self[1] == "'": + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == "'": + self.paint(1, self.FLAG_STRING) + return + else if self[0] == '\\': + self.paint(2, self.FLAG_ESCAPE) + else: + self.paint(1, self.FLAG_STRING) + + def paintSimpleString(): + self.paint(1, self.FLAG_STRING) + while self[0]: + if self[0] == '\\' and self[1] == '"': + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == '"': + self.paint(1, self.FLAG_STRING) + return + else if self[0] == '\\': + self.paint(2, self.FLAG_ESCAPE) + else: + self.paint(1, self.FLAG_STRING) + + def isalpha(c): + if isinstance(c,int): + if c <= 0: return False + c = chr(c) + return c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + + def isalnum(c): + if isinstance(c,int): + if c <= 0: return False + c = chr(c) + return c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' diff --git a/base/usr/share/bim/syntax/bash.krk b/base/usr/share/bim/syntax/bash.krk new file mode 100644 index 00000000..48433f8c --- /dev/null +++ b/base/usr/share/bim/syntax/bash.krk @@ -0,0 +1,147 @@ +from syntax import Highlighter, bind + +class BashHighlighter(Highlighter): + name = "bash" + extensions = ('.sh','.bash','.bashrc') + + keywords = [ + 'if','then','else','elif','fi','case','esac','for','coproc', + 'select','while','until','do','done','in','function','time', + 'exit','return','source','export','alias','complete','shopt', + 'local','eval','echo','cd','pushd','popd','printf','sed', + 'rm','mv' + ] + + def popState(self, state): + let newState = state / 100 + return newState * 10 + + def pushState(self, state, newState): + return state * 10 + newState + + def paintTick(self, outState): + let last = None + while self[0] != None: + if last != '\\' and self[0] == "'": + self.paint(1, self.FLAG_STRING) + return self.popState(outState) + else if last == '\\': + self.paint(1, self.FLAG_STRING) + last = None + else if self[0] != None: + last = self[0] + self.paint(1, self.FLAG_STRING) + return outState + + def paintBracedVariable(self): + while self[0] != None: + if self[0] == '}': + self.paint(1, self.FLAG_NUMERAL) + return 0 + self.paint(1, self.FLAG_NUMERAL) + return 0 + + def specialVariable(self, c): + return c == '@' or c == '?' + + def paintString(self, term, outState, color): + let last = None + while self[0] != None: + if last != '\\' and self[0] == term: + self.paint(1, color) + return self.popState(outState) + else if last == '\\': + self.paint(1, color) + last = None + else if term != '`' and self[0] == '`': + self.paint(1, self.FLAG_ESCAPE) + outState = self.paintString('`', self.pushState(outState, 20), self.FLAG_ESCAPE) + else if term != ')' and self[0] == '$' and self[1] == '(': + self.paint(2, self.FLAG_TYPE) + outState = self.paintString(')', self.pushState(outState, 30), self.FLAG_TYPE) + else if self[0] == '$' and self[1] == '{': + self.paint(2, self.FLAG_NUMERAL) + self.paintBracedVariable() + else if self[0] == '$': + self.paint(1, self.FLAG_NUMERAL) + if self.specialVariable(self[0]): + self.paint(1, self.FLAG_NUMERAL) + continue + while self.cKeywordQualifier(self[0]): self.paint(1, self.FLAG_NUMERAL) + else if term != '"' and self[0] == '"': + self.paint(1, self.FLAG_STRING) + outState = self.paintString('"', self.pushState(outState, 40), self.FLAG_STRING) + else if term != '"' and self[0] == "'": + self.paint(1, self.FLAG_STRING) + outState = self.paintTick(outState) + else if self[0] != -1: + last = self[0] + self.paint(1, color) + return outState + + def calculate(self): + if self.state < 1: + if self[0] == '#' and self[-1] != '\\': + while self[0] != None: + if self.commentBuzzwords(): continue + self.paint(1, self.FLAG_COMMENT) + return None + else if self[0] == "'" and self[-1] != '\\': + self.paint(1, self.FLAG_STRING) + return self.paintTick(10) + else if self[0] == '`' and self[-1] != '\\': + self.paint(1, self.FLAG_ESCAPE) + return self.paintString('`', 20, self.FLAG_ESCAPE) + else if self[0] == '$' and self[1] == '(' and self[-1] != '\\': + self.paint(2, self.FLAG_TYPE) + return self.paintString(')', 30, self.FLAG_TYPE) + else if self[0] == '"' and self[-1] != '\\': + self.paint(1, self.FLAG_STRING) + return self.paintString('"', 40, self.FLAG_STRING) + else if self[0] == '$' and self[1] == '{' and self[-1] != '\\': + self.paint(2, self.FLAG_NUMERAL) + self.paintBracedVariable() + return 0 + else if self[0] == '$'and self[-1] != '\\': + self.paint(1, self.FLAG_NUMERAL) + if self.specialVariable(self[0]): + self.paint(1, self.FLAG_NUMERAL) + return 0 + while self.cKeywordQualifier(self[0]): self.paint(1, self.FLAG_NUMERAL) + return 0 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self[0] == ';': + self.paint(1, self.FLAG_KEYWORD) + return 0 + else if self.cKeywordQualifier(self[0]): + for i = 0; self[i] != None; i++: + if self[i] == ' ': break + if self[i] == '=': + self.paint(i, self.FLAG_TYPE) + self.skip() + return 0 + for i = 0; self[i] != None; i++: + if self[i] == '(': + self.paint(i, self.FLAG_TYPE) + return 0 + if not self.cKeywordQualifier(self[i]) and self[i] != '-' and self[i] != ' ': + break + self.skip() + return 0 + else if self[0] != None: + self.skip() + return 0 + else if self.state >= 10: + let outState = self.state + while self[0] != None: + let s = (outState / 10) % 10 + if s == 1: outState = self.paintString("'", outState, self.FLAG_STRING) + else if s == 2: outState = self.paintString('`', outState, self.FLAG_ESCAPE) + else if s == 3: outState = self.paintString(')', outState, self.FLAG_TYPE) + else if s == 4: outState = self.paintString('"', outState, self.FLAG_STRING) + else if not s: return None + return outState + return None + +bind(BashHighlighter) diff --git a/base/usr/share/bim/syntax/biminfo.krk b/base/usr/share/bim/syntax/biminfo.krk new file mode 100644 index 00000000..2a827ea2 --- /dev/null +++ b/base/usr/share/bim/syntax/biminfo.krk @@ -0,0 +1,18 @@ +from syntax import Highlighter, bind + +class BiminfoHighlighter(Highlighter): + name = 'biminfo' + extensions = ('.biminfo',) + def calculate(self): + if self.i == 0: + if self[0] == '#': + self.paint(-1, self.FLAG_COMMENT) + else if self[0] == '>': + self.paint(1, self.FLAG_KEYWORD) + while self[0] != ' ': + self.paint(1, self.FLAG_TYPE) + self.skip() + self.paint(-1, self.FLAG_NUMERAL) + return None + +bind(BiminfoHighlighter) diff --git a/base/usr/share/bim/syntax/c.krk b/base/usr/share/bim/syntax/c.krk new file mode 100644 index 00000000..288d47c3 --- /dev/null +++ b/base/usr/share/bim/syntax/c.krk @@ -0,0 +1,225 @@ +from syntax import Highlighter, bind +from syntax.doxygen import tryDoxygenComment + +class CHighlighter(Highlighter): + name = 'c' + extensions = ('.c','.h','.cpp','.hpp','.c++','.h++','.cc','.hh') + + keywords = [ + "while","if","for","continue","return","break","switch","case","sizeof", + "struct","union","typedef","do","default","else","goto", + "alignas","alignof","offsetof","asm","__asm__", + "public","private","class","using","namespace","virtual","override","protected", + "template","typename","static_cast","throw" + ] + + types = [ + "static","int","char","short","float","double","void","unsigned","volatile","const", + "register","long","inline","restrict","enum","auto","extern","bool","complex", + "uint8_t","uint16_t","uint32_t","uint64_t", + "int8_t","int16_t","int32_t","int64_t","FILE", + "ssize_t","size_t","uintptr_t","intptr_t","__volatile__", + "constexpr" + ] + + special = [ + "NULL", + "stdin","stdout","stderr", + "STDIN_FILENO","STDOUT_FILENO","STDERR_FILENO" + ] + + def paintCString(self): + self.paint(1, self.FLAG_STRING) + let last = None + while self[0] != None: + if last != '\\' and self[0] == '"': + self.paint(1, self.FLAG_STRING) + return + else if self[0] == '\\' and self[1] in 'nr\\': + self.paint(2, self.FLAG_ESCAPE) + last = None + else if self[0] == '\\' and self[1] in '01234567': + self.paint(2, self.FLAG_ESCAPE) + if self[0] in '01234567': + self.paint(1, self.FLAG_ESCAPE) + if self[0] in '01234567': + self.paint(1, self.FLAG_ESCAPE) + last = None + else if self[0] == '%': + self.paint(1, self.FLAG_ESCAPE) + if self[0] == '%': + self.paint(1, self.FLAG_ESCAPE) + else: + while self[0] in '-#*0+': self.paint(1, self.FLAG_ESCAPE) + while self.isdigit(self[0]): self.paint(1, self.FLAG_ESCAPE) + if self[0] == '.': + self.paint(1, self.FLAG_ESCAPE) + if self[0] == '*': self.paint(1, self.FLAG_ESCAPE) + else: while self.isdigit(self[0]): self.paint(1, self.FLAG_ESCAPE) + while self[0] in 'lz': self.paint(1, self.FLAG_ESCAPE) + if self[0] in '"\\': continue + self.paint(1, self.FLAG_ESCAPE) + else if self[0] == '\\' and self[1] == 'x': + self.paint(2, self.FLAG_ESCAPE) + while self.isxdigit(self[0]): self.paint(1, self.FLAG_ESCAPE) + else: + last = self[0] + self.paint(1, self.FLAG_STRING) + + def paintCChar(self): + self.paint(1, self.FLAG_NUMERAL) + let last = None + while self[0] != None: + if last != '\\' and self[0] == "'": + self.paint(1, self.FLAG_NUMERAL) + return + else if last == '\\' and self[0] == '\\': + self.paint(1, self.FLAG_NUMERAL) + last = None + else: + last = self[0] + self.paint(1, self.FLAG_NUMERAL) + + def paintCComment(self): + let last = None + while self[0] != None: + if self.commentBuzzwords(): continue + if tryDoxygenComment(self): continue + else if last == '*' and self[0] == '/': + self.paint(1, self.FLAG_COMMENT) + return 0 + else: + last = self[0] + self.paint(1, self.FLAG_COMMENT) + return 1 + + def paintCPragma(self): + while self[0] != None: + if self[0] == '"': + self.paintCString() + else if self[0] == "'": + self.paintCChar() + else if self[0] == '\\' and self[1] == None: + self.paint(1, self.FLAG_PRAGMA) + return 2 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + continue + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + continue + else if self[0] == '/' and self[1] == '/': + self.paintComment() + return None + else if self[0] == '/' and self[1] == '*': + if self.paintCComment() == 1: return 3 + continue + else: + self.paint(1, self.FLAG_PRAGMA) + return 0 + + def paintCNumeral(self): + if self[0] == '0' and (self[1] == 'x' or self[1] == 'X'): + self.paint(2, self.FLAG_NUMERAL) + while self.isxdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + else if self[0] == '0' and self[1] == '.': + self.paint(2, self.FLAG_NUMERAL) + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == 'f': self.paint(1, self.FLAG_NUMERAL) + return 0 + else if self[0] == '0': + self.paint(1, self.FLAG_NUMERAL) + while self[0] in '01234567': self.paint(1, self.FLAG_NUMERAL) + else: + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == '.': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == 'f': self.paint(1, self.FLAG_NUMERAL) + return 0 + while self[0] in 'uUlL': self.paint(1, self.FLAG_NUMERAL) + return 0 + + def calculate(self): + let cond = self.state + if cond <= 0: + if self[0] == '#': + for i in range(self.i): + if self[-i-1] != ' ' and self[-i-1] != '\t': + self.skip() + return 0 + self.paint(1, self.FLAG_PRAGMA) + while self[0] == ' ': + self.paint(1, self.FLAG_PRAGMA) + if self.matchAndPaint("include", self.FLAG_PRAGMA, self.cKeywordQualifier): + while self[0] == ' ': + self.paint(1, self.FLAG_PRAGMA) + if self[0] == '<': + self.paint(1, self.FLAG_STRING) + while self[0] != '>' and self[0] != None: + self.paint(1, self.FLAG_STRING) + if self[0] != None: + self.paint(1, self.FLAG_STRING) + else if self.matchAndPaint("if", self.FLAG_PRAGMA, self.cKeywordQualifier): + if self[0] == ' ' and self[1] == '0' and self[2] == None: + self.paint(2, self.FLAG_COMMENT) + self.rewind(6) + self.paint(-1, self.FLAG_COMMENT) + return 4 + else if self.matchAndPaint("else", self.FLAG_PRAGMA, self.cKeywordQualifier): + # Do nothing? + return self.paintCPragma() + else if self[0] == '/' and self[1] == '/': + self.paintComment() + else if self[0] == '/' and self[1] == '*': + self.paint(2, self.FLAG_COMMENT) + return self.paintCComment() + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if self[0] == '"': + self.paintCString() + return 0 + else if self[0] == "'": + self.paintCChar() + return 0 + else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + self.paintCNumeral() + return 0 + else if self[0] != None: + self.skip() + return 0 + else if cond == 1: + return self.paintCComment() + else if cond == 2: + return self.paintCPragma() + else if cond == 3: + if self.paintCComment() == 1: + return 3 + return self.paintCPragma() + else: + while self[0] == ' ' or self[0] == '\t': self.paint(1, self.FLAG_COMMENT) + if self[0] == '#': + self.paint(1, self.FLAG_COMMENT) + while self[0] == ' ' or self[0] == '\t': self.paint(1, self.FLAG_COMMENT) + if self.matchAndPaint("if", self.FLAG_COMMENT, self.cKeywordQualifier): + self.paint(-1, self.FLAG_COMMENT) + return self.state + 1 + else if self.matchAndPaint("else", self.FLAG_COMMENT, self.cKeywordQualifier) or self.matchAndPaint("elif", self.FLAG_COMMENT, self.cKeywordQualifier): + self.paint(-1, self.FLAG_COMMENT) + if self.state == 4: return 0 + return self.state + else if self.matchAndPaint("endif", self.FLAG_COMMENT, self.cKeywordQualifier): + self.paint(-1, self.FLAG_COMMENT) + if self.state == 4: return 0 + return self.state - 1 + else: + self.paint(-1, self.FLAG_COMMENT) + return self.state + else: + self.paint(-1, self.FLAG_COMMENT) + return self.state + return None + +bind(CHighlighter) diff --git a/base/usr/share/bim/syntax/conf.krk b/base/usr/share/bim/syntax/conf.krk new file mode 100644 index 00000000..3191d642 --- /dev/null +++ b/base/usr/share/bim/syntax/conf.krk @@ -0,0 +1,25 @@ +from syntax import Highlighter, bind + +class ConfigHighlighter(Highlighter): + name = "conf" + extensions = ('.conf','.ini','.git/config','.cfg','.properties') + spaces = True + + def calculate(self): + if self.i == 0: + if self[0] == ';': + self.paintComment() + else if self[0] == '#': + self.paintComment() + else if self[0] == '[': + self.paint(1, self.FLAG_KEYWORD) + while self[0] and self[0] != ']': + self.paint(1, self.FLAG_KEYWORD) + if self[0] == ']': + self.paint(1, self.FLAG_KEYWORD) + else: + while self[0] and self[0] != '=': + self.paint(1, self.FLAG_TYPE) + return None + +bind(ConfigHighlighter) diff --git a/base/usr/share/bim/syntax/css.krk b/base/usr/share/bim/syntax/css.krk new file mode 100644 index 00000000..53dab2c0 --- /dev/null +++ b/base/usr/share/bim/syntax/css.krk @@ -0,0 +1,166 @@ +from syntax import Highlighter, bind +from syntax.c import CHighlighter + +class CSSHighlighter(Highlighter): + name = 'css' + extensions = ('.css', '.scss') + elements = [ + "a","abbr","address","area","article","aside","audio", + "b","base","bdi","bdo","blockquote","body","br","button", + "canvas","cite","code","col","colgroup","data","datalist", + "dd","del","details","dfn","dialog","div","dl","dt","em", + "embed","fieldset","figcaption","figure","footer","form", + "h1","h2","h3","h4","h5","h6","head","header","hr","html", + "i","iframe","img","input","ins","kbd","label","legend", + "li","link","main","map","mark","meta","meter","nav", + "noscript","object","ol","optgroup","option","output", + "p","param","picture","pre","progress","q","rp","rt", + "ruby","s","samp","script","section","select","small", + "source","span","strong","style","sub","summary","sup", + "svg","table","tbody","td","template","textarea","tfoot", + "th","thead","time","title","tr","track","u","ul","var", + "video","wbr","hgroup","*", + ] + properties = [ + "align-content","align-items","align-self","all","animation", + "animation-delay","animation-direction","animation-duration", + "animation-fill-mode","animation-iteration-count","animation-name", + "animation-play-state","animation-timing-function","backface-visibility", + "background","background-attachment","background-blend-mode","background-clip", + "background-color","background-image","background-origin","background-position", + "background-repeat","background-size","border","border-bottom","border-bottom-color", + "border-bottom-left-radius","border-bottom-right-radius","border-bottom-style", + "border-bottom-width","border-collapse","border-color","border-image","border-image-outset", + "border-image-repeat","border-image-slice","border-image-source","border-image-width", + "border-left","border-left-color","border-left-style","border-left-width", + "border-radius","border-right","border-right-color","border-right-style","border-right-width", + "border-spacing","border-style","border-top","border-top-color","border-top-left-radius", + "border-top-right-radius","border-top-style","border-top-width","border-width", + "bottom","box-decoration-break","box-shadow","box-sizing","break-after", + "break-before","break-inside","caption-side","caret-color","@charset", + "clear","clip","color","column-count","column-fill","column-gap","column-rule","column-rule-color", + "column-rule-style","column-rule-width","column-span","column-width","columns","content", + "counter-increment","counter-reset","cursor","direction","display","empty-cells", + "filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink", + "flex-wrap","float","font","@font-face","font-family","font-feature-settings","@font-feature-values", + "font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style", + "font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian", + "font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight", + "grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column", + "grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end", + "grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns", + "grid-template-rows","hanging-punctuation","height","hyphens","image-rendering","@import", + "isolation","justify-content","@keyframes","left","letter-spacing","line-break","line-height", + "list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom", + "margin-left","margin-right","margin-top","max-height","max-width","@media","min-height", + "min-width","mix-blend-mode","object-fit","object-position","opacity","order","orphans", + "outline","outline-color","outline-offset","outline-style","outline-width","overflow", + "overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right", + "padding-top","page-break-after","page-break-before","page-break-inside","perspective", + "perspective-origin","pointer-events","position","quotes","resize","right","scroll-behavior", + "tab-size","table-layout","text-align","text-align-last","text-combine-upright","text-decoration", + "text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-justify", + "text-orientation","text-overflow","text-shadow","text-transform","text-underline-position", + "top","transform","transform-origin","transform-style","transition","transition-delay", + "transition-duration","transition-property","transition-timing-function","unicode-bidi", + "user-select","vertical-align","visibility","white-space","widows","width","word-break", + "word-spacing","word-wrap","writing-mode","font-decoration", + ] + values = [ + "inline","block","inline-block","none","oblique", + "transparent","thin","dotted","sans-serif", + "rgb","rgba","bold","italic","underline","context-box", + "monospace","serif","sans-serif","pre-wrap", + "relative","baseline","hidden","solid","inherit","normal", + "button","pointer","border-box","default","textfield", + "collapse","top","bottom","avoid","table-header-group", + "middle","absolute","rect","left","center","right", + "ellipsis","nowrap","table","both","uppercase","lowercase","help", + "static","table-cell","table-column","scroll","touch","auto", + "not-allowed","inset","url","fixed","translate","alpha","fixed","device-width", + "table-row", + ] + states = [ + "focus","active","hover","link","visited","before","after", + "left","right","root","empty","target","enabled","disabled","checked","invalid", + "first-child","nth-child","not","last-child", + ] + def propertyQualifier(c): + if isinstance(c,int): + if c <= 0: return False + c = chr(c) + return self.isalnum(c) or c in '-@*!' + suffixes = [ + 'pt','px','pc','em','cm','mm', + 'ex','in','vw','vh','ch','rem', + 'vmin','vmax','s' + ] + def matchSuffixes(suffixes): + for s in suffixes: + if self.matchPrefix(s): + self.paint(len(s), self.FLAG_NUMERAL) + return + def calculate(): + if self.state < 1: + if self[0] == '/' and self[1] == '*': + if CHighlighter.paintCComment(self) == 1: return 1 + else if self[0] == '"': + self.paintSimpleString() + return 0 + else if self[-1] != '.' and self.findKeywords(self.elements, self.FLAG_KEYWORD, self.propertyQualifier): + return 0 + else if self[-1] != '.' and self.findKeywords(self.properties, self.FLAG_TYPE, self.propertyQualifier): + return 0 + else if self.matchPrefix('-moz-'): + self.paint(5, self.FLAG_ESCAPE) + while self[0] and self.propertyQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + else if self.matchPrefix('-webkit-'): + self.paint(8, self.FLAG_ESCAPE) + while self[0] and self.propertyQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + else if self.matchPrefix('-ms-'): + self.paint(4, self.FLAG_ESCAPE) + while self[0] and self.propertyQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + else if self.matchPrefix('-o-'): + self.paint(3, self.FLAG_ESCAPE) + while self[0] and self.propertyQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + else if self[0] == ':': + self.skip() + if self.findKeywords(self.states, self.FLAG_PRAGMA, self.propertyQualifier): return 0 + while self[0] and self[0] != ';': + if self.findKeywords(self.values, self.FLAG_NUMERAL, self.propertyQualifier): + continue + else if self[0] == '"': + self.paintSimpleString() + continue + else if self[0] == "'": + self.paintSingleString() + continue + else if self[0] == '{': + self.skip() + return 0 + else if self[0] == '#': + self.paint(1, self.FLAG_NUMERAL) + while self.isxdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + else if self.isdigit(self[0]): + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == '.': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == '%': self.paint(1, self.FLAG_NUMERAL) + else: self.matchSuffixes(self.suffixes) + else if self.matchAndPaint("!important", self.FLAG_PRAGMA, self.propertyQualifier): + continue + else if self[0]: + self.skip() + return 0 + else if not self[0]: + return None + else: + self.skip() + return 0 + else if self.state == 1: + if CHighlighter.paintCComment(self) == 1: return 1 + return 0 + return None + +bind(CSSHighlighter) diff --git a/base/usr/share/bim/syntax/ctags.krk b/base/usr/share/bim/syntax/ctags.krk new file mode 100644 index 00000000..453cb483 --- /dev/null +++ b/base/usr/share/bim/syntax/ctags.krk @@ -0,0 +1,17 @@ +from syntax import Highlighter, bind + +class CtagsHighlighter(Highlighter): + name = 'ctags' + extensions = ('tags',) + def calculate(): + if self.i == 0: + if self[0] == '!': + return self.paintComment() + while self[0] and self[0] != '\t': self.paint(1, self.FLAG_TYPE) + if self[0] == '\t': self.skip() + while self[0] and self[0] != '\t': self.paint(1, self.FLAG_NUMERAL) + if self[0] == '\t': self.skip() + while self[0] and not (self[0] == ';' and self[1] == '"'): self.paint(1, self.FLAG_KEYWORD) + return None + +bind(CtagsHighlighter) diff --git a/base/usr/share/bim/syntax/diff.krk b/base/usr/share/bim/syntax/diff.krk new file mode 100644 index 00000000..2e62b310 --- /dev/null +++ b/base/usr/share/bim/syntax/diff.krk @@ -0,0 +1,18 @@ +from syntax import Highlighter, bind + +class DiffHighlighter(Highlighter): + name = 'diff' + extensions = ('.patch','.diff') + mapping = { + '+': Highlighter.FLAG_DIFFPLUS, + '-': Highlighter.FLAG_DIFFMINUS, + '@': Highlighter.FLAG_TYPE, + ' ': Highlighter.FLAG_KEYWORD, + } + def calculate(): + if self.i == 0: + let flag = self.mapping[self[0]] if self[0] in self.mapping else 0 + self.paint(-1, flag) + return None + +bind(DiffHighlighter) diff --git a/base/usr/share/bim/syntax/dirent.krk b/base/usr/share/bim/syntax/dirent.krk new file mode 100644 index 00000000..0e155071 --- /dev/null +++ b/base/usr/share/bim/syntax/dirent.krk @@ -0,0 +1,21 @@ +''' + For highlighting bim's built-in directory browser. +''' +from syntax import Highlighter, bind + +class DirentHighlighter(Highlighter): + name = 'dirent' + extensions = () + def calculate(): + if self.i == 0: + if self[0] == '#': + return self.paintComment() + else if self[0] == 'd': + self.paint(1, self.FLAG_COMMENT) + self.paint(-1, self.FLAG_KEYWORD) + else if self[0] == 'f': + self.paint(1, self.FLAG_COMMENT) + self.paint(-1, self.FLAG_NONE) + return None + +bind(DirentHighlighter) diff --git a/base/usr/share/bim/syntax/doxygen.krk b/base/usr/share/bim/syntax/doxygen.krk new file mode 100644 index 00000000..6d011e3a --- /dev/null +++ b/base/usr/share/bim/syntax/doxygen.krk @@ -0,0 +1,39 @@ +let doxygen_keywords_at = [ + "@author","@brief","@class","@short","@retval", + "@since","@return","@returns","@throws","@bug", + "@version","@deprecated","@attention","@note", +] + +def tryDoxygenComment(b,defaultflag=b.FLAG_COMMENT): + let doxygen_word_commands = { + '@param': b.FLAG_TYPE, + '@exception': b.FLAG_PRAGMA, + '@def': b.FLAG_TYPE, + '@see': b.FLAG_LINK, + '@p': b.FLAG_TYPE, + '@c': b.FLAG_NONE, + '@file': b.FLAG_LINK, + '@memberof': b.FLAG_TYPE, + '@extends': b.FLAG_TYPE, + '@mainpage': b.FLAG_STRING, + '@section': b.FLAG_BOLD, + '@subsection': b.FLAG_BOLD, + '@package': b.FLAG_TYPE, + '@ref': b.FLAG_LINK, + } + if b[0] == '@': + def qualifier(c): + if isinstance(c,int): + if c > 0: c = chr(c) + else: return False + return b.isalnum(c) or c in '_@' + if not b.findKeywords(doxygen_keywords_at, b.FLAG_ESCAPE, qualifier): + for keyword, flag in doxygen_word_commands.items(): + if b.matchAndPaint(keyword, b.FLAG_ESCAPE, qualifier): + while b[0] == ' ': b.skip() + while b[0] and b[0] != ' ': b.paint(1, flag) + return True + b.paint(1, defaultflag) + return True + return False + diff --git a/base/usr/share/bim/syntax/esh.krk b/base/usr/share/bim/syntax/esh.krk new file mode 100644 index 00000000..9a5ea7a3 --- /dev/null +++ b/base/usr/share/bim/syntax/esh.krk @@ -0,0 +1,96 @@ +''' +Shell highlighter for ToaruOS's 'experimental shell'. +''' +from syntax import Highlighter, bind + +class EshHighlighter(Highlighter): + name = 'esh' + extensions = ('.eshrc','.yutanirc') + keywords = [ + "cd","exit","export","help","history","if","empty?", + "equals?","return","export-cmd","source","exec","not","while", + "then","else","echo", + ] + def variableQualifier(c): + return self.isalnum(c) or c == '_' + def keywordQualifier(c): + return self.isalnum(c) or c in '?_-' + def paintVariable(): + if self[0] == '{': + self.paint(1, self.FLAG_TYPE) + while self[0] != '}' and self[0]: + self.paint(1, self.FLAG_TYPE) + if self[0] == '}': + self.paint(1, self.FLAG_TYPE) + else: + if self[0] in '?$#': + self.paint(1, self.FLAG_TYPE) + else: + while self.variableQualifier(self[0]): + self.paint(1, self.FLAG_TYPE) + def paintString(): + let last = None + while self[0]: + if last != '\\' and self[0] == '"': + self.paint(1, self.FLAG_STRING) + return 0 + else if self[0] == '$': + self.paint(1, self.FLAG_TYPE) + self.paintVariable() + last = None + else if self[0]: + last = self[0] + self.paint(1, self.FLAG_STRING) + return 2 + def paintSingle(): + let last = None + while self[0]: + if last != '\\' and self[0] == "'": + self.paint(1, self.FLAG_STRING) + return 0 + else if self[0]: + last = self[0] + self.paint(1, self.FLAG_STRING) + return 1 + def calculate(): + if self.state == 1: + return self.paintSingle() + else if self.state == 2: + return self.paintString() + if self[0] == '#': + return self.paintComment() + else if self[0] == '$': + self.paint(1, self.FLAG_TYPE) + self.paintVariable() + return 0 + else if self[0] == "'": + self.paint(1, self.FLAG_STRING) + return self.paintSingle() + else if self[0] == '"': + self.paint(1, self.FLAG_STRING) + return self.paintString() + else if self.matchAndPaint('export', self.FLAG_KEYWORD, self.keywordQualifier): + while self[0] == ' ': self.skip() + while self.keywordQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + return 0 + else if self.matchAndPaint('export-cmd', self.FLAG_KEYWORD, self.keywordQualifier): + while self[0] == ' ': self.skip() + while self.keywordQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + return 0 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.keywordQualifier): + return 0 + else if self.isdigit(self[0]): + while self.isdigit(self[0]): + self.paint(1, self.FLAG_NUMERAL) + return 0 + else if self[0]: + self.skip() + return 0 + return None + +try: + import os + if os.uname['sysname'] == 'toaru': + EshHighlighter.extensions = ('.eshrc','.yutanirc','.sh') + +bind(EshHighlighter) diff --git a/base/usr/share/bim/syntax/git.krk b/base/usr/share/bim/syntax/git.krk new file mode 100644 index 00000000..fc5c09e9 --- /dev/null +++ b/base/usr/share/bim/syntax/git.krk @@ -0,0 +1,38 @@ +from syntax import Highlighter, bind + +class GitcommitHighlighter(Highlighter): + name = 'gitcommit' + extensions = ('COMMIT_EDITMSG',) + def calculate(): + if self.i == 0 and self[0] == '#': + return self.paintComment() + else if self.lineno == 0: + while self[0] and self.i < 50: + self.paint(1, self.FLAG_KEYWORD) + self.paint(-1, self.FLAG_DIFFMINUS) + else if self.lineno == 1: + self.paint(-1, self.FLAG_DIFFMINUS) + else if self[0]: + self.paint(-1, self.FLAG_NONE) + return None + +bind(GitcommitHighlighter) + +class GitrebaseHighlighter(Highlighter): + name = 'gitrebase' + extensions = ('git-rebase-todo',) + commands = [ + "p","r","e","s","f","x","d", + "pick","reword","edit","squash","fixup", + "exec","drop" + ] + def calculate(): + if self.i == 0 and self[0] == '#': + return self.paintComment() + else if self.i == 0 and self.findKeywords(self.commands, self.FLAG_KEYWORD, self.cKeywordQualifier): + while self[0] == ' ': self.skip() + while self.isxdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + return None + return None + +bind(GitrebaseHighlighter) diff --git a/base/usr/share/bim/syntax/groovy.krk b/base/usr/share/bim/syntax/groovy.krk new file mode 100644 index 00000000..fdc36075 --- /dev/null +++ b/base/usr/share/bim/syntax/groovy.krk @@ -0,0 +1,79 @@ +from syntax import Highlighter, bind +from syntax.c import CHighlighter + +class GroovyHighlighter(Highlighter): + name = 'groovy' + extensions = ('.groovy','.jenkinsfile','.gradle') + keywords = [ + "as","assert","break","case", + "catch","class","const","continue", + "def","default","do","else","enum", + "extends","finally","for", + "goto","if","implements","import", + "in","instanceof","interface","new", + "package","return","super", + "switch","throw","throws", + "trait","try","while","final", + ] + constants = [ + 'true','false','null','this', + ] + primitives = [ + 'byte','char','short','int','long','BigInteger' + ] + def paintTriple(): + while self[0]: + if self[0] == "'": + self.paint(1, self.FLAG_STRING) + if self[0] == "'" and self[1] == "'": + self.paint(2, self.FLAG_STRING) + return 0 + else: + self.paint(1, self.FLAG_STRING) + return 2 + def calculate(): + if self.state <= 0: + if self.lineno == 0 and self.i == 0 and self[0] == '#': + self.paintComment() + return None + else if self[0] == '/' and self[1] == '/': + self.paintComment() + return None + else if self[0] == '/' and self[1] == '*': + if CHighlighter.paintCComment(self) == 1: return 1 + else if self[0] == '"': + self.paintSimpleString() + return 0 + else if self[0] == "'": + self.paintSingleString() + return 0 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.primitives, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.constants, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + CHighlighter.paintCNumeral(self) + return 0 + else if self[0] == '@': + self.paint(1, self.FLAG_TYPE) + while self.cKeywordQualifier(self[0]): + self.paint(1, self.FLAG_TYPE) + return 0 + else if not self.cKeywordQualifier(self[-1]) and self[0] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': + while self.cKeywordQualifier(self[0]): + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0]: + self.skip() + return 0 + return None + else if self.state == 1: + if CHighlighter.paintCComment(self) == 1: return 1 + return 0 + else if self.state == 2: + return self.paintTriple() + return None + +bind(GroovyHighlighter) diff --git a/base/usr/share/bim/syntax/hosts.krk b/base/usr/share/bim/syntax/hosts.krk new file mode 100644 index 00000000..14598399 --- /dev/null +++ b/base/usr/share/bim/syntax/hosts.krk @@ -0,0 +1,17 @@ +from syntax import Highlighter, bind + +class HostsHighlighter(Highlighter): + name = 'hosts' + extensions = ('hosts',) + + def calculate(): + if self.i == 0: + if self[0] == '#': + return self.paintComment() + while self[0] != '\t' and self[0] != ' ' and self[0]: + self.paint(1, self.FLAG_NUMERAL) + while self[0]: + self.paint(1, self.FLAG_TYPE) + return None + +bind(HostsHighlighter) diff --git a/base/usr/share/bim/syntax/java.krk b/base/usr/share/bim/syntax/java.krk new file mode 100644 index 00000000..e962d917 --- /dev/null +++ b/base/usr/share/bim/syntax/java.krk @@ -0,0 +1,141 @@ +from syntax import Highlighter, bind +from syntax.c import CHighlighter + +class JavaHighlighter(Highlighter): + name = 'java' + extensions = ('.java',) + keywords = [ + "assert","break","case","catch","class","continue", + "default","do","else","enum","exports","extends","finally", + "for","if","implements","instanceof","interface","module","native", + "new","requires","return","throws", + "strictfp","super","switch","synchronized","this","throw","try","while", + ] + types = [ + "var","boolean","void","short","long","int","double","float","enum","char", + "private","protected","public","static","final","transient","volatile","abstract", + ] + special = [ + "true","false","import","package","null", + ] + at_comments = [ + "@author","@see","@since","@return","@throws", + "@version","@exception","@deprecated", + ] + brace_comments = [ + "{@docRoot","{@inheritDoc","{@link","{@linkplain", + "{@value","{@code","{@literal","{@serial", + "{@serialData","{@serialField", + ] + def atKeywordQualifier(c): + if isinstance(c,int) and c > 0: c = chr(c) + return self.isalnum(c) or c in '_@' + def braceKeywordQualifier(c): + if isinstance(c,int) and c > 0: c = chr(c) + return self.isalnum(c) or c in '{@_' + def keywordQualifier(c): + return self.cKeywordQualifier(c) + def paintJavaComment(): + let last + while self[0]: + if self.commentBuzzwords(): continue + if self[0] == '@': + if not self.findKeywords(self.at_comments, self.FLAG_ESCAPE, self.atKeywordQualifier): + if self.matchAndPaint('@param', self.FLAG_ESCAPE, self.atKeywordQualifier): + while self[0] == ' ': self.skip() + while self.cKeywordQualifier(self[0]): self.paint(1, self.FLAG_TYPE) + else: + self.paint(1, self.FLAG_COMMENT) + else if self[0] == '{': + if self.findKeywords(self.brace_comments, self.FLAG_ESCAPE, self.braceKeywordQualifier): + while self[0] != '}' and self[0]: + self.paint(1, self.FLAG_ESCAPE) + if self[0] == '}': self.paint(1, self.FLAG_ESCAPE) + else: + self.paint(1, self.FLAG_COMMENT) + else if self[0] == '<': + let isTag = False + for i = 1; self[i]; i++: + if self[i] == '>': + isTag = True + break + if not self.isalnum(self[i]) and self[i] != '/': + isTag = 0 + break + if isTag: + self.paint(1, self.FLAG_TYPE) + while self[0] and self[0] != '>': + if self[0] == '/': self.paint(1, self.FLAG_TYPE) + else: self.paint(1, self.FLAG_KEYWORD) + if self[0] == '>': self.paint(1, self.FLAG_TYPE) + else: + self.paint(1, self.FLAG_COMMENT) + else if last == '*' and self[0] == '/': + self.paint(1, self.FLAG_COMMENT) + return 0 + else: + last = self[0] + self.paint(1, self.FLAG_COMMENT) + return 1 + def calculate(): + if self.state <= 0: + if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + CHighlighter.paintCNumeral(self) + return 0 + else if self[0] == '/' and self[1] == '/': + self.paintComment() + else if self[0] == '/' and self[1] == '*': + if self.paintJavaComment() == 1: return 1 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.keywordQualifier): + return 0 + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if self[0] == '"': + self.paintSimpleString() + return 0 + else if self[0] == "'": + CHighlighter.paintCChar(self) + return 0 + else if self[0] == '@': + self.paint(1, self.FLAG_PRAGMA) + while self.cKeywordQualifier(self[0]): self.paint(1, self.FLAG_PRAGMA) + return 0 + else if self[0]: + self.skip() + return 0 + else if self.state == 1: + if self.paintJavaComment() == 1: return 1 + return 0 + return None + +bind(JavaHighlighter) + +class KotlinHighlighter(JavaHighlighter): + name = 'kotlin' + extensions = ('.kt',) + keywords = [ + "as","as?","break","class","continue","do","else","false","for", + "fun","if","in","!in","interface","is","!is","null","object", + "package","return","super","this","throw","true","try","typealias", + "typeof","val","var","when","while", + "by","catch","constructor","delegate","dynamic","field","file", + "finally","get","import","init","param","property","receiver", + "set","setparam","where", + "actual","abstract","annotation","companion","const", + "crossinline","data","enum","expect","external","final", + "infix","inner","internal","lateinit","noinline","open", + "operator","out","override","private","protected","public", + "reified","sealed","suspend","tailrec","vararg", + "field","it","inline", + ] + types = [ + "Byte","Short","Int","Long", + "Float","Double","String", + ] + specials = [] + def keywordQualifier(c): + return self.isalnum(c) or c in '?!_' + +bind(KotlinHighlighter) diff --git a/base/usr/share/bim/syntax/javascript.krk b/base/usr/share/bim/syntax/javascript.krk new file mode 100644 index 00000000..cecc6a11 --- /dev/null +++ b/base/usr/share/bim/syntax/javascript.krk @@ -0,0 +1,97 @@ +from syntax import Highlighter, bind +from syntax.c import CHighlighter + +class JavascriptHighlighter(Highlighter): + name = 'javascript' + extensions = ('.js','.jsx','.ts','.tsx') + keywords = [ + "abstract","arguments","from", + "await","break","case","catch","class","const", + "continue","debugger","default","delete","do","else","enum","eval", + "export","extends","final","finally","for","function","goto", + "if","implements","import","in","instanceof","interface","let","long", + "native","new","package","private","protected","public","return", + "static","super","switch","synchronized","this","throw","throws", + "transienttrue","try","typeof","volatile","while","with","yield", + ] + types = [ + "int","float","double","short","var","void","byte","char","boolean", + ] + special = ['true','false','null'] + def paintJSFormatString(): + while self[0]: + if self[0] == '\\' and self[1] == '`': + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == '`': + self.paint(1, self.FLAG_STRING) + return 0 + else if self[0] == '\\': + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == '$' and self[1] == '{': + self.paint(2, self.FLAG_NUMERAL) + while self[0] and self[0] != '}': + self.paint(1, self.FLAG_NUMERAL) + self.paint(1, self.FLAG_NUMERAL) + else: + self.paint(1, self.FLAG_STRING) + return 1 + def calculate(): + if self.state < 1: + if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + CHighlighter.paintCNumeral(self) + return 0 + else if not self.cKeywordQualifier(self[-1]) and self[0] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': + while self[0] and self.cKeywordQualifier(self[0]): + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0] == '/' and self[1] == '/': + self.paintComment() + else if self[0] == '/' and self[1] == '*': + if CHighlighter.paintCComment(self) == 1: return 1 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if self[0] == '=' and self[1] == '>': + self.paint(2, self.FLAG_PRAGMA) + return 0 + else if self[0] == ':' and self.cKeywordQualifier(self[-1]): + let start = self.i + while self[-1] and self.cKeywordQualifier(self[-1]): + self.rewind(1) + while self[0] and self.i != start: + self.paint(1, self.FLAG_TYPE) + self.paint(1, self.FLAG_PRAGMA) + return 0 + else if self[0] == '<': + self.paint(1, self.FLAG_TYPE) + while self[0] and (self[0] == '/' or self.cKeywordQualifier(self[0])): + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0] == '>': + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0] == '"': + self.paintSimpleString() + return 0 + else if self[0] == "'": + self.paintSingleString() + return 0 + else if self[0] == '`': + self.paint(1, self.FLAG_STRING) + if self.paintJSFormatString(): return 2 + return 0 + else if self[0]: + self.skip() + return 0 + else if self.state == 1: + if CHighlighter.paintCComment(self) == 1: return 1 + return 0 + else if self.state == 2: + if self.paintJSFormatString(): return 2 + return 0 + return None + +bind(JavascriptHighlighter) diff --git a/base/usr/share/bim/syntax/json.krk b/base/usr/share/bim/syntax/json.krk new file mode 100644 index 00000000..12ef4e51 --- /dev/null +++ b/base/usr/share/bim/syntax/json.krk @@ -0,0 +1,43 @@ +from syntax import Highlighter, bind + +class JsonHighlighter(Highlighter): + name = 'json' + extensions = ('.json',) + keywords = ['true','false','null'] + def calculate(): + while self[0]: + if self[0] == '"': + let start = self.i + self.paintSimpleString() + let end = self.i + while self[0] == ' ': self.skip() + if self[0] == ':': + self.rewind(end-start) + self.paint(1, self.FLAG_ESCAPE) + while self.i < end: + self.paint(1, self.FLAG_KEYWORD) + if self[0] == '"': + self.paint(1, self.FLAG_ESCAPE) + return 0 + else if self[0] == '-' or self.isdigit(self[0]): + if self[0] == '-': self.paint(1, self.FLAG_NUMERAL) + if self[0] == '0': + self.paint(1, self.FLAG_NUMERAL) + else: + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == '.': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + if self[0] == 'e' or self[0] == 'E': + self.paint(1, self.FLAG_NUMERAL) + if self[0] == '+' or self[0] == '-': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]): self.paint(1, self.FLAG_NUMERAL) + else if self.findKeywords(self.keywords, self.FLAG_NUMERAL, self.cKeywordQualifier): + continue + else: + self.skip() + return 0 + return None + +bind(JsonHighlighter) diff --git a/base/usr/share/bim/syntax/krk.krk b/base/usr/share/bim/syntax/krk.krk new file mode 100644 index 00000000..9ef87b11 --- /dev/null +++ b/base/usr/share/bim/syntax/krk.krk @@ -0,0 +1,163 @@ +from bim import getCommands +from syntax import Highlighter, bind +from syntax.doxygen import tryDoxygenComment + +class KrkHighlighter(Highlighter): + name = 'krk' + extensions = ('.krk',) + spaces = True + + doxygenDocstrings = False + + keywords = [ + 'and','class','def','else','export','for','if','in','import','let','not', + 'or','return','while','try','except','raise','continue','break','as','from', + 'elif', 'lambda', 'pass', 'with', 'is', 'del', 'assert', 'yield' + ] + + types = [ + 'self','super','len','str','int','float','dir','repr','list','dict','range', + 'object','exception','isinstance','type','print','tuple','bool','any','all', + 'hex','ord','chr','bytes','set','getattr', + ] + + special = [ + 'True', 'False', 'None' + ] + + exceptions = [ + 'Exception', 'TypeError', 'ArgumentError', 'IndexError', 'KeyError', + 'AttributeError', 'NameError', 'ImportError', 'IOError', 'ValueError', + 'KeyboardInterrupt', 'ZeroDivisionError', 'NotImplementedError', 'SyntaxError', + 'AssertionError', + ] + + def paintString(self, strType, isTriple, isFormat=False): + while self[0] != None: + if self[0] == '\\' and self[1] == strType: + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == strType: + self.paint(1, self.FLAG_STRING) + if isTriple: + if self[0] == strType and self[1] == strType: + self.paint(2, self.FLAG_STRING) + return 0 + else: + return 0 + else if self[0] == '\\': + if self[1] == 'x': + self.paint(4, self.FLAG_ESCAPE) + else if self[1] == 'u': + self.paint(6, self.FLAG_ESCAPE) + else if self[1] == 'U': + self.paint(10, self.FLAG_ESCAPE) + else if self[1] == None and not isTriple: + self.paint(1, self.FLAG_ESCAPE) + return 3 if strType == '"' else (14 if isFormat else 4) + else if self[1] in '\\\'"abfnrtv[': + self.paint(2, self.FLAG_ESCAPE) + else: + self.paint(1, self.FLAG_STRING) + else if isFormat and self[0] == '{': + if self[1] == '}': + self.paint(-1, self.FLAG_ERROR) + return None + self.paint(1, self.FLAG_ESCAPE) + let x = 0 + while self[0]: + if self[0] == '{': + x++ + else if self[0] == '}': + if x == 0: + self.paint(1, self.FLAG_ESCAPE) + break + x-- + else if self[0] == strType and not isTriple: + self.paint(-1, self.FLAG_ERROR) + return None + self.paint(1, self.FLAG_NUMERAL) + else if self.doxygenDocstrings and isTriple and tryDoxygenComment(self, self.FLAG_STRING): + continue + else: + self.paint(1, self.FLAG_STRING) + if isTriple: return int(strType == "'") + (11 if isFormat else 1) + return 0 + + def paintNumeral(self): + if self[0] == '0' and (self[1] == 'x' or self[1] == 'X'): + self.paint(2, self.FLAG_NUMERAL) + while self.isxdigit(self[0]): + self.paint(1, self.FLAG_NUMERAL) + else if self[0] == '0' and (self[1] == 'o' or self[1] == 'O'): + self.paint(2, self.FLAG_NUMERAL) + while self[0] in '01234567': + self.paint(1, self.FLAG_NUMERAL) + else if self[0] == '0' and (self[1] == 'b' or self[1] == 'B'): + self.paint(2, self.FLAG_NUMERAL) + while self[0] == '0' or self[0] == '1': + self.paint(1, self.FLAG_NUMERAL) + else: + while self.isdigit(self[0]): + self.paint(1, self.FLAG_NUMERAL) + if self[0] == '.' and self.isdigit(self[1]): + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]): + self.paint(1, self.FLAG_NUMERAL) + return 0 + + def paintDoxyComment(self): + while self[0] is not None: + if tryDoxygenComment(self): continue + else if self.commentBuzzwords(): continue + else: self.paint(1, self.FLAG_COMMENT) + + def calculate(self): + if self.state <= 0: + if self[0] == '#': + self.paintDoxyComment() + else if self[0] == '@': + self.paint(1, self.FLAG_TYPE) + while self.cKeywordQualifier(self[0]): + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0] == '"' or self[0] == "'": + let strType = self[0] + if self[-1] == 'f': + self.rewind(1) + self.paint(1, self.FLAG_KEYWORD) + if self[1] == strType and self[2] == strType: + self.paint(3, self.FLAG_STRING) + return self.paintString(strType,True,self[-4]=='f') + self.paint(1, self.FLAG_STRING) + return self.paintString(strType,False,self[-2]=='f') + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self[-1] != '.' and self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.exceptions, self.FLAG_PRAGMA, self.cKeywordQualifier): + return 0 + else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + self.paintNumeral() + return 0 + else if self[0] != None: + self.skip() + return 0 + else if self.state >= 1: + return self.paintString("'\""[self.state % 2], (self.state % 10) <= 2, self.state > 10) + return None + +bind(KrkHighlighter) + +class BimcmdHighlighter(KrkHighlighter): + name = 'bimcmd' + extensions = ('.bim3rc',) + + def calculate(self): + if self.state <= 0 and self[-1] != '.': + if self.findKeywords(getCommands(), self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + return super().calculate() + +bind(BimcmdHighlighter) diff --git a/base/usr/share/bim/syntax/lisp.krk b/base/usr/share/bim/syntax/lisp.krk new file mode 100644 index 00000000..036c9925 --- /dev/null +++ b/base/usr/share/bim/syntax/lisp.krk @@ -0,0 +1,41 @@ +from syntax import Highlighter, bind + +class LispHighlighter(Highlighter): + name = 'lisp' + extensions = ('.lisp','.lsp','.cl') + parens = [ + Highlighter.FLAG_DIFFPLUS, + Highlighter.FLAG_TYPE, + Highlighter.FLAG_PRAGMA, + Highlighter.FLAG_KEYWORD, + ] + def parenFromState(i): + return self.parens[i % len(self.parens)] + def calculate(): + if self.state == -1: self.state = 0 + while self[0]: + if self[0] == ';': + self.paintComment() + else if self[0] == '(': + self.paint(1, self.parenFromState(self.state)) + self.set_state(self.state+1) + while self[0] and self[0] not in ' ()': + self.paint(1, self.FLAG_KEYWORD) + else if self[0] == ')': + if self.state == 0: + self.paint(1, self.FLAG_ERROR) + else: + self.set_state(self.state-1) + self.paint(1, self.parenFromState(self.state)) + else if self[0] == ':': + while self[0] and self[0] not in ' ()': + self.paint(1, self.FLAG_PRAGMA) + else if self[0] == '"': + self.paintSimpleString() + else if self[0]: + self.skip() + if self.state == 0: return None + if not self[0]: return self.state + return None + +bind(LispHighlighter) diff --git a/base/usr/share/bim/syntax/make.krk b/base/usr/share/bim/syntax/make.krk new file mode 100644 index 00000000..9c0d049b --- /dev/null +++ b/base/usr/share/bim/syntax/make.krk @@ -0,0 +1,137 @@ +from syntax import Highlighter, bind + +class GnumakeHighlighter(Highlighter): + name = 'make' + extensions = ('Makefile','makefile','GNUmakefile','.mak') + commands = [ + "define","endef","undefine","ifdef","ifndef","ifeq","ifneq","else","endif", + "include","sinclude","override","export","unexport","private","vpath", + "-include", + ] + functions = [ + "subst","patsubst","findstring","filter","filter-out", + "sort","word","words","wordlist","firstword","lastword", + "dir","notdir","suffix","basename","addsuffix","addprefix", + "join","wildcard","realpath","abspath","error","warning", + "shell","origin","flavor","foreach","if","or","and", + "call","eval","file","value", + ] + targets = [ + "all", # Not really special, but highlight it 'cause I feel like it. + ".PHONY", ".SUFFIXES", ".DEFAULT", ".PRECIOUS", ".INTERMEDIATE", + ".SECONDARY", ".SECONDEXPANSION", ".DELETE_ON_ERROR", ".IGNORE", + ".LOW_RESOLUTION_TIME", ".SILENT", ".EXPORT_ALL_VARIABLES", + ".NOTPARALLEL", ".ONESHELL", ".POSIX", + ] + def commandQualifier(c): + if isinstance(c,int): c = chr(c) if c > 0 else '\x00' + return self.isalnum(c) or c in '_-.' + def makeCloseParen(): + self.paint(2, self.FLAG_TYPE) + self.findKeywords(self.functions, self.FLAG_KEYWORD, self.cKeywordQualifier) + let i = 1 + while self[0]: + if self[0] == '(': + i++ + if self[-1] == '$': + self.paint(1, self.FLAG_TYPE) + self.findKeywords(self.functions, self.FLAG_KEYWORD, self.cKeywordQualifier) + continue + else if self[0] == ')': + i-- + if i == 0: + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0] == '"': + self.paintSimpleString() + self.paint(1, self.FLAG_TYPE) + return 0 + def makeCloseBrace(): + self.paint(2, self.FLAG_TYPE) + while self[0]: + if self[0] == '}': + self.paint(1, self.FLAG_TYPE) + return 0 + self.paint(1, self.FLAG_TYPE) + return 0 + def makeVar(): + if self[1] == '(': + self.makeCloseParen() + else if self[1] == '{': + self.makeCloseBrace() + else: + self.paint(2, self.FLAG_TYPE) + def paintString(): + let strType = self[0] + self.paint(1, self.FLAG_STRING) + while self[0]: + if self[0] == strType and self[-1] != '\\': + self.paint(1, self.FLAG_STRING) + return + else if self[0] == '\\' and (self[1] == strType or strType == '"'): + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == '$': + self.makeVar() + else: + self.paint(1, self.FLAG_STRING) + def variableOrComment(flag): + while self[0]: + if self[0] == '$': + self.makeVar() + else if self[0] == '#': + self.paintComment() + else if self[0] == "'": + self.paintString() + else if self[0] == '"': + self.paintString() + else: + self.paint(1, flag) + return 0 + def calculate(): + if self.i == 0 and self[0] == '\t': + self.skip() + if self[0] == '@': + self.paint(1, self.FLAG_KEYWORD) + self.variableOrComment(self.FLAG_NUMERAL) + else: + while self[0] == ' ': self.skip() + let whatisit + for i = 0; self[i]; i++: + if self[i] == ':' and self[i+1] != '=': + whatisit = 1 + break + else if self[i] == '=': + whatisit = 2 + else if self[i] == '#': + break + if not whatisit: + while self[0]: + if self[0] == '#': + self.paintComment() + else if self.findKeywords(self.commands, self.FLAG_KEYWORD, self.commandQualifier): + continue + else if self[0] == '$': + self.variableOrComment(self.FLAG_NONE) + else: + self.skip() + else if whatisit == 1: # rule + while self[0]: + if self[0] == '#': + self.paintComment() + else if self[0] == ':': + self.paint(1, self.FLAG_TYPE) + self.variableOrComment(self.FLAG_NONE) + else if self.findKeywords(self.targets, self.FLAG_KEYWORD, self.commandQualifier): + continue + else: + self.paint(1, self.FLAG_TYPE) + else if whatisit == 2: # variable + self.matchAndPaint('export', self.FLAG_KEYWORD, self.cKeywordQualifier) + while self[0] and self[0] not in '+=:?': + self.paint(1, self.FLAG_TYPE) + while self[0] and self[0] != '=': + self.skip() + self.variableOrComment(self.FLAG_NONE) + return None + +bind(GnumakeHighlighter) diff --git a/base/usr/share/bim/syntax/man.krk b/base/usr/share/bim/syntax/man.krk new file mode 100644 index 00000000..3350459c --- /dev/null +++ b/base/usr/share/bim/syntax/man.krk @@ -0,0 +1,33 @@ +from syntax import Highlighter, bind + +class ManpageHighlighter(Highlighter): + name = 'man' + extensions = ('.1','.2','.3','.4','.5','.6','.7','.8') + def calculate(): + while self[0]: + if self.i == 0 and self[0] == '.': + if self[1] == 'S' and self[2] == 'H' and self[3] == ' ': + self.paint(3, self.FLAG_KEYWORD) + self.paint(-1, self.FLAG_STRING) + else if self[1] == 'B' and self[2] == ' ': + self.paint(2, self.FLAG_KEYWORD) + self.paint(-1, self.FLAG_BOLD) + else if self.isalpha(self[1]): + self.paint(1, self.FLAG_KEYWORD) + while self[0] and self.isalpha(self[0]): + self.paint(1, self.FLAG_KEYWORD) + else if self[1] == '\\' and self[2] == '"': + self.paint(1, self.FLAG_COMMENT) + else: + self.skip() + else if self[0] == '\\': + if self[1] == 'f': + self.paint(2, self.FLAG_NUMERAL) + self.paint(1, self.FLAG_PRAGMA) + else: + self.paint(2, self.FLAG_ESCAPE) + else: + self.skip() + return None + +bind(ManpageHighlighter) diff --git a/base/usr/share/bim/syntax/markdown.krk b/base/usr/share/bim/syntax/markdown.krk new file mode 100644 index 00000000..0dd56f0e --- /dev/null +++ b/base/usr/share/bim/syntax/markdown.krk @@ -0,0 +1,90 @@ +from syntax import Highlighter, bind + +from syntax.c import CHighlighter +from syntax.py import PythonHighlighter +from syntax.krk import KrkHighlighter +from syntax.java import JavaHighlighter +from syntax.json import JsonHighlighter +from syntax.xml import XMLHighlighter, HTMLHighlighter +from syntax.diff import DiffHighlighter +from syntax.bash import BashHighlighter +from syntax.make import GnumakeHighlighter + +class MarkdownHighlighter(Highlighter): + name = 'markdown' + extensions = ('.md',) + nestables = [ + ('c', 100, CHighlighter), + ('py', 200, PythonHighlighter), + ('java', 300, JavaHighlighter), + ('json', 400, JsonHighlighter), + ('xml', 500, XMLHighlighter), + ('html', 600, HTMLHighlighter), + ('make', 700, GnumakeHighlighter), + ('diff', 800, DiffHighlighter), + ('bash', 900, BashHighlighter), + ('krk', 1000, KrkHighlighter), + ] + def nest(name, state, highlighter): + self.set_state(0 if self.state < 1 else self.state - state) + let sub = highlighter(self) + while True: + sub.set_state(sub.calculate()) + if sub.state != 0: break + if not sub.state or sub.state == -1: return state + return sub.state + state + def calculate(): + if self.state < 1: + if self.i == 0 and self[0] == '#': + while self[0] == '#': self.paint(1, self.FLAG_KEYWORD) + self.paint(-1, self.FLAG_BOLD) + return None + else if self.i == 0: + while self[0] == ' ': self.skip() + if self[0] == '`' and self[1] == '`' and self[2] == '`': + self.paint(3, self.FLAG_STRING) + for k,s,h in self.nestables: + if self.matchPrefix(k): + self.paint(len(k), self.FLAG_NUMERAL) + return s + return 1 + if self[0] == '`': + self.paint(1, self.FLAG_STRING) + while self[0]: + if self[0] == '`': + self.paint(1, self.FLAG_STRING) + return 0 + self.paint(1, self.FLAG_STRING) + return 0 + else if self[0] == '[': + self.skip() + while self[0] and self[0] != ']': + self.paint(1, self.FLAG_LINK) + if self[0] == ']': + self.skip() + if self[0] == '(': + self.skip() + while self[0] and self[0] != ')': + self.paint(1, self.FLAG_NUMERAL) + return 0 + else if self[0]: + self.skip() + return 0 + return None + else if self.state >= 1: + if self.i == 0: + for j=0;self[j];j++: + if self[j] == '`' and self[j+1] == '`' and self[j+2] == '`': + self.paint(j, self.FLAG_NONE) + self.paint(3, self.FLAG_STRING) + return None + if self.state == 1: + self.paint(-1, self.FLAG_STRING) + return 1 + else: + for k,state,highlighter in self.nestables: + if self.state < state + 99: + return self.nest(k, state, highlighter) + return None + +bind(MarkdownHighlighter) diff --git a/base/usr/share/bim/syntax/protobuf.krk b/base/usr/share/bim/syntax/protobuf.krk new file mode 100644 index 00000000..1bf1e7dc --- /dev/null +++ b/base/usr/share/bim/syntax/protobuf.krk @@ -0,0 +1,45 @@ +from syntax import Highlighter, bind +from syntax.c import CHighlighter + +class ProtobufHighlighter(Highlighter): + name = 'protobuf' + extensions = ('.proto',) + keywords = [ + "syntax","import","option","package","message","group","oneof", + "optional","required","repeated","default","extend","extensions","to","max","reserved", + "service","rpc","returns","stream", + ] + types = [ + "int32","int64","uint32","uint64","sint32","sint64", + "fixed32","fixed64","sfixed32","sfixed64", + "float","double","bool","string","bytes", + "enum", + ] + special = ['true','false'] + def calculate(): + if self.state < 1: + if self[0] == '/' and self[1] == '/': + self.paintComment() + else if self[0] == '/' and self[1] == '*': + if CHighlighter.paintCComment(self) == 1: return 1 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if self[0] == '"': + self.paintSimpleString() + return 0 + else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + CHighlighter.paintCNumeral(self) + return 0 + else if self[0]: + self.skip() + return 0 + return None + else: + if CHighlighter.paintCComment(self) == 1: return 1 + return 0 + +bind(ProtobufHighlighter) diff --git a/base/usr/share/bim/syntax/py.krk b/base/usr/share/bim/syntax/py.krk new file mode 100644 index 00000000..1af1472d --- /dev/null +++ b/base/usr/share/bim/syntax/py.krk @@ -0,0 +1,155 @@ +from syntax import Highlighter, bind + +class PythonHighlighter(Highlighter): + name = 'python' + extensions = ('.py',) + keywords = [ + "class","def","return","del","if","else","elif","for","while","continue", + "break","assert","as","and","or","except","finally","from","global", + "import","in","is","lambda","with","nonlocal","not","pass","raise","try","yield", + ] + types = [ + "abs","all","any","ascii","bin","bool","breakpoint","bytes", + "bytearray","callable","compile","complex","delattr","chr", + "dict","dir","divmod","enumerate","eval","exec","filter","float", + "format","frozenset","getattr","globals","hasattr","hash","help", + "hex","id","input","int","isinstance","issubclass","iter","len", + "list","locals","map","max","memoryview","min","next","object", + "oct","open","ord","pow","print","property","range","repr","reverse", + "round","set","setattr","slice","sorted","staticmethod","str","sum", + "super","tuple","type","vars","zip", + ] + special = ['True','False','None'] + def paintPyTriple(quote): + while self[0]: + if self[0] == quote: + self.paint(1, self.FLAG_STRING) + if self[0] == quote and self[1] == quote: + self.paint(2, self.FLAG_STRING) + return 0 + else: + self.paint(1, self.FLAG_STRING) + return 1 if quote == '"' else 2 + def paintPyString(quote): + self.paint(1, self.FLAG_STRING) + while self[0]: + if self[0] == '\\' and self[1] == quote: + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == quote: + self.paint(1, self.FLAG_STRING) + return 0 + else if self[0] == '\\': + self.paint(2, self.FLAG_ESCAPE) + else: + self.paint(1, self.FLAG_STRING) + return 0 + def paintPyNumeral(): + if self[0] == '0' and self[1] == 'x' or self[1] == 'X': + self.paint(2, self.FLAG_NUMERAL) + while self.isxdigit(self[0]) or self[0] == '_': + self.paint(1, self.FLAG_NUMERAL) + else if self[0] == '0' and self[1] == '.': + self.paint(2, self.FLAG_NUMERAL) + while self.isdigit(self[0]) or self[0] == '_': + self.paint(1, self.FLAG_NUMERAL) + if (self[0] == '+' or self[0] == '-') and (self[1] == 'e' or self[1] == 'E'): + self.paint(2, self.FLAG_NUMERAL) + while self.isdigit(self[0]) or self[0] == '_': + self.paint(1, self.FLAG_NUMERAL) + else if self[0] == 'e' or self[0] == 'E': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]) or self[0] == '_': + self.paint(1, self.FLAG_NUMERAL) + if self[0] == 'j': self.paint(1, self.FLAG_NUMERAL) + return 0 + else: + while self.isdigit(self[0]) or self[0] == '_': self.paint(1, self.FLAG_NUMERAL) + if self[0] == '.': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]) or self[0] == '_': self.paint(1, self.FLAG_NUMERAL) + if (self[0] == '+' or self[0] == '-') and (self[1] == 'e' or self[1] == 'E'): + self.paint(2, self.FLAG_NUMERAL) + while self.isdigit(self[0]) or self[0] == '_': + self.paint(1, self.FLAG_NUMERAL) + else if self[0] == 'e' or self[0] == 'E': + self.paint(1, self.FLAG_NUMERAL) + while self.isdigit(self[0]) or self[0] == '_': + self.paint(1, self.FLAG_NUMERAL) + if self[0] == 'j': self.paint(1, self.FLAG_NUMERAL) + return 0 + while self[0] == 'l' or self[0] == 'L': self.paint(1, self.FLAG_NUMERAL) + return 0 + def paintPyFString(quote): + self.paint(1, self.FLAG_STRING) + while self[0]: + if self[0] == '\\' and self[1] == quote: + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == quote: + self.paint(1, self.FLAG_STRING) + return + else if self[0] == '\\': + self.paint(2, self.FLAG_ESCAPE) + else if self[0] == '{': + self.paint(1, self.FLAG_NUMERAL) + if self[0] == '}': + self.rewind(1) + self.paint(2, self.FLAG_ERROR) + else: + while self[0] and self[0] != '}': + self.paint(1, self.FLAG_NUMERAL) + self.paint(1, self.FLAG_NUMERAL) + else: + self.paint(1, self.FLAG_STRING) + def calculate(): + if self.state < 1: + if self[0] == '#': + self.paintComment() + else if self.i == 0 and self.matchAndPaint('import', self.FLAG_PRAGMA, self.cKeywordQualifier): + return 0 + else if self[0] == '@': + self.paint(1, self.FLAG_PRAGMA) + while self.cKeywordQualifier(self[0]): self.paint(1, self.FLAG_PRAGMA) + return 0 + else if self[0] == '"': + if self[1] == '"' and self[2] == '"': + self.paint(3, self.FLAG_STRING) + return self.paintPyTriple('"') + else if self[-1] == 'f': + self.rewind(1) + self.paint(1, self.FLAG_TYPE) + self.paintPyFString('"') + return 0 + else: + self.paintPyString('"') + return 0 + else if self[0] == "'": + if self[1] == "'" and self[2] == "'": + self.paint(3, self.FLAG_STRING) + return self.paintPyTriple("'") + else if self[-1] == 'f': + self.rewind(1) + self.paint(1, self.FLAG_TYPE) + self.paintPyFString("'") + return 0 + else: + self.paintPyString("'") + return 0 + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + return 0 + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + return 0 + else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + self.paintPyNumeral() + return 0 + else if self[0]: + self.skip() + return 0 + else if self.state == 1: + return self.paintPyTriple('"') + else if self.state == 2: + return self.paintPyTriple("'") + return None + +bind(PythonHighlighter) diff --git a/base/usr/share/bim/syntax/xml.krk b/base/usr/share/bim/syntax/xml.krk new file mode 100644 index 00000000..bbcdc9a9 --- /dev/null +++ b/base/usr/share/bim/syntax/xml.krk @@ -0,0 +1,120 @@ +from syntax import Highlighter, bind +from syntax.css import CSSHighlighter + +class XMLHighlighter(Highlighter): + name = 'xml' + extensions = ('.xml','.iml') + def paintXmlComment(): + while self[0]: + if self[0] == '-' and self[1] == '-' and self[2] == '>': + self.paint(3, self.FLAG_COMMENT) + return 0 + else: + if self.commentBuzzwords(): continue + self.paint(1, self.FLAG_COMMENT) + return 4 + def paintTagString(): + if self[0] == '"': + self.paint(1, self.FLAG_STRING) + return 2 + else: + self.paintSimpleString() + if not self[0] and self[-1] != '"': + return 3 + return None + def paintInsideTag(): + while self[0]: + if self[0] == '>': + self.paint(1, self.FLAG_TYPE) + return 0 + else if self[0] == '"': + self.paintSimpleString() + if not self[0] and self[-1] != '"': + return 3 + else: + self.paint(1, self.FLAG_TYPE) + return 2 + def paintTag(): + while self[0]: + if self[0] == '/': self.paint(1, self.FLAG_TYPE) + if self[0] == '?': self.paint(1, self.FLAG_TYPE) + if self[0] == ' ' or self[0] == '\t': self.skip() + if self.isalnum(self[0]): + while self.isalnum(self[0]) or self[0] == '-': + self.paint(1, self.FLAG_KEYWORD) + if not self[0]: return 2 + return self.paintInsideTag() + else: + self.paint(1, self.FLAG_TYPE) + return None + def calculate(): + if self.state < 1: + while self[0] and self[0] != '<': + self.skip() + if not self[0]: return None + if self[0] == '<' and self[1] == '!' and self[2] == '-' and self[3] == '-': + self.paint(4, self.FLAG_COMMENT) + return self.paintXmlComment() + self.paint(1, self.FLAG_TYPE) + return self.paintTag() + else if self.state == 1: + return self.paintTag() + else if self.state == 2: + return self.paintInsideTag() + else if self.state == 3: + return self.paintTagString() + else if self.state == 4: + return self.paintXmlComment() + return None + + +bind(XMLHighlighter) + +''' +General proof of concept for an HTML highlighter that does nested CSS. +Could be extended to do nested JS, probably. +Doesn't actually do either right now, but demonstrates how it could be done. +''' +class HTMLHighlighter(XMLHighlighter): + name = 'html' + extensions = ('.html','.htm') + def paintTag(): + if self.matchAndPaint('style', self.FLAG_KEYWORD, self.cKeywordQualifier): + return self.paintInsideStyleTag() + return super().paintTag() + def paintInsideStyleTag(): + let r = self.paintInsideTag() + if r == 2: + return 5 + else: + return self.paintCss() + def paintCss(): + # TODO actually paint CSS + while self[0] and not (self[0] == '<' and self[1] == '/' and self[2] == 's'): + self.set_state(0) + let css = CSSHighlighter(self) + let result = css.calculate() + if result == 0: + self.__init__(css) + continue + else if result == None: + return 6 + if (self[0] == '<' and self[1] == '/' and self[2] == 's'): + return self.paintTag() + return 6 + def calculate(): + if self.state < 5: + return super().calculate() + else if self.state == 5: + return self.paintInsideStyleTag() + else if self.state == 6: + return self.paintCss() + else if self.state == 7: + self.set_state(1) + let css = CSSHighlighter(self) + if css.calculate() == 1: return 7 + self.__init__(css) + return 6 + +bind(HTMLHighlighter) + diff --git a/base/usr/share/bim/themes/__init__.krk b/base/usr/share/bim/themes/__init__.krk new file mode 100644 index 00000000..e69de29b diff --git a/base/usr/share/bim/themes/ansi.krk b/base/usr/share/bim/themes/ansi.krk new file mode 100644 index 00000000..c84ac208 --- /dev/null +++ b/base/usr/share/bim/themes/ansi.krk @@ -0,0 +1,46 @@ +from bim import defineTheme + +@defineTheme +def ansi(): + setcolor("text-fg","@7") + setcolor("text-bg","@0") + setcolor("alternate-fg","@5") + setcolor("alternate-bg","@9") + setcolor("number-fg","@3") + setcolor("number-bg","@9") + setcolor("status-fg","@7") + setcolor("status-bg","@4") + setcolor("status-alt","@4") + setcolor("tabbar-bg","@4") + setcolor("tab-bg","@4") + setcolor("keyword","@4") + setcolor("string","@2") + setcolor("comment","@5") + setcolor("type","@3") + setcolor("pragma","@1") + setcolor("numeral","@1") + setcolor("error-fg","@7") + setcolor("error-bg","@1") + setcolor("search-fg","@0") + setcolor("search-bg","@3") + setcolor("select-bg","@7") + setcolor("select-fg","@0") + setcolor("red","@1") + setcolor("green","@2") + setcolor("bold","@7") + setcolor("link","@4") + setcolor("escape","@2") + if checkprop("can_bright") == 0: # TODO These should return True/False, not 0 for success + setcolor("text-fg","@17") + setcolor("text-bg","@9") + setcolor("alternate-fg","@10") + setcolor("status-fg","@17") + setcolor("status-alt","@14") + setcolor("keyword","@14") + setcolor("comment","@10") + setcolor("error-fg","@17") + setcolor("search-bg","@13") + setcolor("select-bg","@17") + setcolor("link","@14") + setcolor("escape","@12") + diff --git a/base/usr/share/bim/themes/citylights.krk b/base/usr/share/bim/themes/citylights.krk new file mode 100644 index 00000000..859048ce --- /dev/null +++ b/base/usr/share/bim/themes/citylights.krk @@ -0,0 +1,35 @@ +from bim import defineTheme +from themes import ansi + +@defineTheme +def citylights(): + if checkprop('can_24bit'): + return ansi() + setcolor("text-fg","2;151;178;198") + setcolor("text-bg","2;29;37;44") + setcolor("alternate-fg","2;45;55;65") + setcolor("alternate-bg","2;33;42;50") + setcolor("number-fg","2;71;89;103") + setcolor("number-bg","2;37;47;56") + setcolor("status-fg","2;151;178;198") + setcolor("status-bg","2;53;67;78") + setcolor("status-alt","2;116;144;166") + setcolor("tabbar-bg","2;37;47;56") + setcolor("tab-bg","2;29;37;44") + setcolor("keyword","2;94;196;255") + setcolor("string","2;83;154;252") + setcolor("comment","2;107;133;153;3") + setcolor("type","2;139;212;156") + setcolor("pragma","2;0;139;148") + setcolor("numeral","2;207;118;132") + setcolor("error-fg","5;15") + setcolor("error-bg","5;196") + setcolor("search-fg","5;234") + setcolor("search-bg","5;226") + setcolor("select-fg","2;29;37;44") + setcolor("select-bg","2;151;178;198") + setcolor("red","2;222;53;53") + setcolor("green","2;55;167;0") + setcolor("bold","2;151;178;198;1") + setcolor("link","2;94;196;255;4") + setcolor("escape","2;133;182;249") diff --git a/base/usr/share/bim/themes/light.krk b/base/usr/share/bim/themes/light.krk new file mode 100644 index 00000000..5c8fea4c --- /dev/null +++ b/base/usr/share/bim/themes/light.krk @@ -0,0 +1,38 @@ +from bim import defineTheme +from themes import ansi + +# A light color scheme +# Based on selenized by Jan Warchoł +@defineTheme +def light(): + if checkprop('can_24bit'): + return ansi() + setcolor("text-fg","2;57;76;82") + setcolor("text-bg","2;250;242;218") + setcolor("alternate-fg","2;144;153;149") + setcolor("alternate-bg","2;236;227;204") + setcolor("number-fg","2;57;76;82") + setcolor("number-bg","2;212;204;181") + setcolor("status-fg","2;82;102;109") + setcolor("status-bg","2;212;204;181") + setcolor("status-alt","2;129;61;19") + setcolor("tab-bg","2;212;204;181") + setcolor("tabbar-bg","2;236;227;204") + setcolor("error-fg","5;15") + setcolor("error-bg","5;196") + setcolor("search-fg","5;234") + setcolor("search-bg","5;226") + setcolor("keyword","2;0;114;212;1") + setcolor("string","2;72;145;0") + setcolor("comment","2;144;153;149;3") + setcolor("type","2;193;92;29") + setcolor("pragma","2;210;33;45;1") + setcolor("numeral","2;202;72;152;1") + setcolor("select-fg","2;213;205;182") + setcolor("select-bg","2;144;153;149") + setcolor("red","2;222;53;53") + setcolor("green","2;55;167;0") + setcolor("bold","2;57;76;82;1") + setcolor("link","2;0;114;212;4") + setcolor("escape","2;0;156;143") + diff --git a/base/usr/share/bim/themes/solarized.krk b/base/usr/share/bim/themes/solarized.krk new file mode 100644 index 00000000..5bc1e27f --- /dev/null +++ b/base/usr/share/bim/themes/solarized.krk @@ -0,0 +1,36 @@ +from bim import defineTheme +from themes import ansi + +@defineTheme +def solarized_dark(): + if checkprop('can_24bit'): + return ansi() + setcolor("text-fg","2;147;161;161") + setcolor("text-bg","2;0;43;54") + setcolor("alternate-fg","2;147;161;161") + setcolor("alternate-bg","2;7;54;66") + setcolor("number-fg","2;131;148;149") + setcolor("number-bg","2;7;54;66") + setcolor("status-fg","2;131;148;150") + setcolor("status-bg","2;7;54;66") + setcolor("status-alt","2;133;153;0") + setcolor("tabbar-bg","2;7;54;66") + setcolor("tab-bg","2;131;148;150") + setcolor("keyword","2;133;153;0") + setcolor("string","2;42;161;152") + setcolor("comment","2;101;123;131") + setcolor("type","2;181;137;0") + setcolor("pragma","2;203;75;22") + setcolor("numeral","2;220;50;47") + setcolor("error-fg","5;15") + setcolor("error-bg","5;196") + setcolor("search-fg","5;234") + setcolor("search-bg","5;226") + setcolor("select-fg","2;0;43;54") + setcolor("select-bg","2;147;161;161") + setcolor("red","2;222;53;53") + setcolor("green","2;55;167;0") + setcolor("bold","2;147;161;161;1") + setcolor("link","2;42;161;152;4") + setcolor("escape","2;133;153;0") + diff --git a/base/usr/share/bim/themes/sunsmoke.krk b/base/usr/share/bim/themes/sunsmoke.krk new file mode 100644 index 00000000..5de58dfe --- /dev/null +++ b/base/usr/share/bim/themes/sunsmoke.krk @@ -0,0 +1,69 @@ +from bim import defineTheme +from themes import ansi + +@defineTheme +def sunsmoke256(): + if checkprop('can_256color'): + return ansi() + setcolor("text-fg","5;188") + setcolor("text-bg","5;234") + setcolor("alternate-fg","5;244") + setcolor("alternate-bg","5;236") + setcolor("number-fg","5;101") + setcolor("number-bg","5;232") + setcolor("status-fg","5;188") + setcolor("status-bg","5;59") + setcolor("status-alt","5;244") + setcolor("tabbar-bg","5;59") + setcolor("tab-bg","5;59") + setcolor("keyword","5;74") + setcolor("string","5;71") + setcolor("comment","5;102") + setcolor("type","5;221") + setcolor("pragma","5;160") + setcolor("numeral","5;161") + setcolor("error-fg","5;15") + setcolor("error-bg","5;196") + setcolor("search-fg","5;234") + setcolor("search-bg","5;226") + setcolor("select-fg","5;17") + setcolor("select-bg","5;109") + setcolor("red","@1") + setcolor("green","@2") + setcolor("bold","5;188;1") + setcolor("link","5;74;4") + setcolor("escape","5;79") + +@defineTheme +def sunsmoke(): + if checkprop('can_24bit'): + return sunsmoke256() + setcolor("text-fg", "2;230;230;230") + setcolor("text-bg", "2;31;31;31") + setcolor("alternate-fg", "2;122;122;122") + setcolor("alternate-bg", "2;46;43;46") + setcolor("number-fg", "2;150;139;57") + setcolor("number-bg", "2;0;0;0") + setcolor("status-fg", "2;230;230;230") + setcolor("status-bg", "2;71;64;58") + setcolor("status-alt", "2;122;122;122") + setcolor("tabbar-bg", "2;71;64;58") + setcolor("tab-bg", "2;71;64;58") + setcolor("keyword", "2;51;162;230") + setcolor("string", "2;72;176;72") + setcolor("comment", "2;158;153;129;3") + setcolor("type", "2;230;206;110") + setcolor("pragma", "2;194;70;54") + setcolor("numeral", "2;230;43;127") + setcolor("error-fg", "5;15") + setcolor("error-bg", "5;196") + setcolor("search-fg", "5;234") + setcolor("search-bg", "5;226") + setcolor("select-fg", "2;0;43;54") + setcolor("select-bg", "2;147;161;161") + setcolor("red", "2;222;53;53") + setcolor("green", "2;55;167;0") + setcolor("bold", "2;230;230;230;1") + setcolor("link", "2;51;162;230;4") + setcolor("escape", "2;113;203;173") + diff --git a/base/usr/share/bim/themes/wombat.krk b/base/usr/share/bim/themes/wombat.krk new file mode 100644 index 00000000..f8fbbfb1 --- /dev/null +++ b/base/usr/share/bim/themes/wombat.krk @@ -0,0 +1,39 @@ +from bim import defineTheme +from themes import ansi + +# Wombat 256-color theme +@defineTheme +def wombat(): + if checkprop('can_256color'): + return ansi() + setcolor("text-fg","5;230") + setcolor("text-bg","5;235") + setcolor("alternate-fg","5;244") + setcolor("alternate-bg","5;236") + setcolor("number-bg","5;232") + setcolor("number-fg","5;101") + setcolor("status-fg","5;230") + setcolor("status-bg","5;238") + setcolor("status-alt","5;186") + setcolor("tabbar-bg","5;230") + setcolor("tab-bg","5;248") + setcolor("keyword","5;117") + setcolor("string","5;113") + setcolor("comment","5;102") + setcolor("type","5;186") + setcolor("pragma","5;173") + setcolor("numeral","5;173") + setcolor("error-fg","5;15") + setcolor("error-bg","5;196") + setcolor("search-fg","5;234") + setcolor("search-bg","5;226") + setcolor("select-fg","5;235") + setcolor("select-bg","5;230") + setcolor("red","@1") + setcolor("green","@2") + setcolor("bold","5;230;1") + setcolor("link","5;117;4") + setcolor("escape","5;194") + if not checkprop('can_italic'): + setcolor('comment','5;102;3') + From 9ab445cb2819d6b538342ba4a9b7a522226fdc20 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 18 Mar 2021 09:57:22 +0900 Subject: [PATCH 090/102] kuroko: Update with upstream, changes to classes --- apps/bim.c | 90 +++- apps/bim.h | 5 +- apps/kuroko.c | 156 +++++- base/usr/include/kuroko/chunk.h | 219 ++++++++ base/usr/include/kuroko/compiler.h | 22 + base/usr/include/kuroko/debug.h | 248 +++++++++ base/usr/include/kuroko/kuroko.h | 37 ++ base/usr/include/kuroko/memory.h | 80 +++ base/usr/include/kuroko/object.h | 411 +++++++++++++++ base/usr/include/kuroko/opcodes.h | 80 +++ base/usr/include/kuroko/scanner.h | 186 +++++++ base/usr/include/kuroko/table.h | 153 ++++++ base/usr/include/kuroko/threads.h | 41 ++ base/usr/include/kuroko/util.h | 296 +++++++++++ base/usr/include/kuroko/value.h | 210 ++++++++ base/usr/include/kuroko/vm.h | 820 +++++++++++++++++++++++++++++ kuroko | 2 +- lib/kuroko/_yutani.c | 14 +- util/auto-dep.py | 1 + 19 files changed, 3014 insertions(+), 57 deletions(-) create mode 100644 base/usr/include/kuroko/chunk.h create mode 100644 base/usr/include/kuroko/compiler.h create mode 100644 base/usr/include/kuroko/debug.h create mode 100644 base/usr/include/kuroko/kuroko.h create mode 100644 base/usr/include/kuroko/memory.h create mode 100644 base/usr/include/kuroko/object.h create mode 100644 base/usr/include/kuroko/opcodes.h create mode 100644 base/usr/include/kuroko/scanner.h create mode 100644 base/usr/include/kuroko/table.h create mode 100644 base/usr/include/kuroko/threads.h create mode 100644 base/usr/include/kuroko/util.h create mode 100644 base/usr/include/kuroko/value.h create mode 100644 base/usr/include/kuroko/vm.h diff --git a/apps/bim.c b/apps/bim.c index daf535e5..be403974 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -16,15 +16,10 @@ */ #define ENABLE_THREADING #include "bim.h" -#ifdef __toaru__ -#include -#include "vm.h" -#include "debug.h" -#else #include #include #include -#endif +#include global_config_t global_config = { /* State */ @@ -80,6 +75,7 @@ global_config_t global_config = { .smart_complete = 0, .has_terminal = 0, .search_wraps = 1, + .had_error = 0, /* Integer config values */ .cursor_padding = 4, .split_percent = 50, @@ -3183,6 +3179,7 @@ void render_error(char * message, ...) { /* Draw the message */ printf("%s", buf); + global_config.had_error = 1; } else { printf("bim: error during startup: %s\n", buf); } @@ -9938,7 +9935,7 @@ struct CommandDef { int process_krk_command(const char * cmd, KrkValue * outVal) { place_cursor(global_config.term_width, global_config.term_height); - fprintf(stdout,"\n"); + fprintf(stdout, "\n"); /* By resetting, we're at 0 frames. */ krk_resetStack(); /* Push something so we're not at the bottom of the stack when an @@ -9998,7 +9995,8 @@ int process_krk_command(const char * cmd, KrkValue * outVal) { } } global_config.break_from_selection = 1; - redraw_all(); + if (!global_config.had_error) redraw_all(); + global_config.had_error = 0; return retval; } @@ -10184,11 +10182,11 @@ static KrkValue krk_bim_register_syntax(int argc, KrkValue argv[], int hasKw) { if (argc < 1 || !IS_CLASS(argv[0]) || !checkClass(AS_CLASS(argv[0]), syntaxStateClass)) return krk_runtimeError(vm.exceptions->typeError, "Can not register '%s' as a syntax highlighter, expected subclass of SyntaxState.", krk_typeName(argv[0])); - KrkValue name = NONE_VAL(), extensions = NONE_VAL(), spaces = BOOLEAN_VAL(0), calculate = NONE_VAL(); - krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("name")), &name); - krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("extensions")), &extensions); - krk_tableGet(&AS_CLASS(argv[0])->fields, OBJECT_VAL(S("spaces")), &spaces); - krk_tableGet(&AS_CLASS(argv[0])->methods, OBJECT_VAL(S("calculate")), &calculate); + KrkValue name = krk_valueGetAttribute_default(argv[0], "name", NONE_VAL()); + KrkValue extensions = krk_valueGetAttribute_default(argv[0], "extensions", NONE_VAL()); + KrkValue spaces = krk_valueGetAttribute_default(argv[0], "spaces", BOOLEAN_VAL(0)); + KrkValue calculate = krk_valueGetAttribute_default(argv[0], "calculate", NONE_VAL()); + if (!IS_STRING(name)) return krk_runtimeError(vm.exceptions->typeError, "%s.name must be str", AS_CLASS(argv[0])->name->chars); if (!IS_TUPLE(extensions)) @@ -10527,7 +10525,7 @@ void import_directory(char * dirName) { if (!dirp) { /* Try one last fallback */ if (dirpath) free(dirpath); - dirpath = strdup("/usr/share/bim"); + dirpath = strdup("/usr/local/share/bim"); sprintf(file, "%s/%s", dirpath, dirName); extra = "/"; dirp = opendir(file); @@ -10620,6 +10618,37 @@ BIM_COMMAND(reload,"reload","Reloads all the Kuroko stuff.") { return 0; } +static KrkValue krk_bim_getDocumentText(int argc, KrkValue argv[], int hasKw) { + struct StringBuilder sb = {0}; + + int i, j; + for (i = 0; i < env->line_count; ++i) { + line_t * line = env->lines[i]; + for (j = 0; j < line->actual; j++) { + char_t c = line->text[j]; + if (c.codepoint == 0) { + pushStringBuilder(&sb, 0); + } else { + char tmp[8] = {0}; + int len = to_eight(c.codepoint, tmp); + pushStringBuilderStr(&sb, tmp, len); + } + } + pushStringBuilder(&sb, '\n'); + } + + return finishStringBuilder(&sb); +} + +static KrkValue krk_bim_renderError(int argc, KrkValue argv[], int hasKw) { + if (argc != 1 || !IS_STRING(argv[0])) return TYPE_ERROR(str,argv[0]); + if (AS_STRING(argv[0])->length == 0) + redraw_commandline(); + else + render_error(AS_CSTRING(argv[0])); + return NONE_VAL(); +} + /** * Run global initialization tasks */ @@ -10671,6 +10700,9 @@ void initialize(void) { krk_bim_syntax_dict = krk_dict_of(0,NULL,0); krk_attachNamedValue(&bimModule->fields, "highlighters", krk_bim_syntax_dict); + krk_defineNative(&bimModule->fields, "getDocumentText", krk_bim_getDocumentText); + krk_defineNative(&bimModule->fields, "renderError", krk_bim_renderError); + makeClass(bimModule, &ActionDef, "Action", vm.baseClasses->objectClass); ActionDef->allocSize = sizeof(struct ActionDef); krk_defineNative(&ActionDef->methods, ".__call__", bim_krk_action_call); @@ -10718,21 +10750,21 @@ void initialize(void) { krk_defineNative(&syntaxStateClass->methods, ".matchAndPaint", bim_krk_state_matchAndPaint); krk_defineNative(&syntaxStateClass->methods, ".commentBuzzwords", bim_krk_state_commentBuzzwords); krk_defineNative(&syntaxStateClass->methods, ".rewind", bim_krk_state_rewind); - krk_defineNative(&syntaxStateClass->methods, ".__get__", bim_krk_state_get); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_NONE", INTEGER_VAL(FLAG_NONE)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_KEYWORD", INTEGER_VAL(FLAG_KEYWORD)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_STRING", INTEGER_VAL(FLAG_STRING)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_COMMENT", INTEGER_VAL(FLAG_COMMENT)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_TYPE", INTEGER_VAL(FLAG_TYPE)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_PRAGMA", INTEGER_VAL(FLAG_PRAGMA)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_NUMERAL", INTEGER_VAL(FLAG_NUMERAL)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_ERROR", INTEGER_VAL(FLAG_ERROR)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_DIFFPLUS", INTEGER_VAL(FLAG_DIFFPLUS)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_DIFFMINUS", INTEGER_VAL(FLAG_DIFFMINUS)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_NOTICE", INTEGER_VAL(FLAG_NOTICE)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_BOLD", INTEGER_VAL(FLAG_BOLD)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_LINK", INTEGER_VAL(FLAG_LINK)); - krk_attachNamedValue(&syntaxStateClass->fields, "FLAG_ESCAPE", INTEGER_VAL(FLAG_ESCAPE)); + krk_defineNative(&syntaxStateClass->methods, ".__getitem__", bim_krk_state_get); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_NONE", INTEGER_VAL(FLAG_NONE)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_KEYWORD", INTEGER_VAL(FLAG_KEYWORD)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_STRING", INTEGER_VAL(FLAG_STRING)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_COMMENT", INTEGER_VAL(FLAG_COMMENT)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_TYPE", INTEGER_VAL(FLAG_TYPE)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_PRAGMA", INTEGER_VAL(FLAG_PRAGMA)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_NUMERAL", INTEGER_VAL(FLAG_NUMERAL)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_ERROR", INTEGER_VAL(FLAG_ERROR)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_DIFFPLUS", INTEGER_VAL(FLAG_DIFFPLUS)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_DIFFMINUS", INTEGER_VAL(FLAG_DIFFMINUS)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_NOTICE", INTEGER_VAL(FLAG_NOTICE)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_BOLD", INTEGER_VAL(FLAG_BOLD)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_LINK", INTEGER_VAL(FLAG_LINK)); + krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_ESCAPE", INTEGER_VAL(FLAG_ESCAPE)); krk_finalizeClass(syntaxStateClass); diff --git a/apps/bim.h b/apps/bim.h index 13a5c942..2b8a42b5 100644 --- a/apps/bim.h +++ b/apps/bim.h @@ -22,11 +22,7 @@ #include #include #include -#ifdef __toaru__ -#include "vm.h" -#else #include -#endif #ifdef __DATE__ # define BIM_BUILD_DATE " built " __DATE__ " at " __TIME__ @@ -213,6 +209,7 @@ typedef struct { unsigned int smart_complete:1; unsigned int has_terminal:1; unsigned int search_wraps:1; + unsigned int had_error:1; int cursor_padding; int split_percent; diff --git a/apps/kuroko.c b/apps/kuroko.c index 3fe97886..8508b621 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -29,24 +29,121 @@ #include "memory.h" #include "scanner.h" #include "compiler.h" +#include "util.h" #define PROMPT_MAIN ">>> " #define PROMPT_BLOCK " > " static int enableRline = 1; static int exitRepl = 0; -static KrkValue exitFunc(int argc, KrkValue argv[], int hasKw) { +static int pasteEnabled = 0; + +KRK_FUNC(exit,{ + FUNCTION_TAKES_NONE(); exitRepl = 1; - return NONE_VAL(); -} +}) -static int pasteEnabled = 0; -static KrkValue paste(int argc, KrkValue argv[], int hasKw) { - pasteEnabled = !pasteEnabled; +KRK_FUNC(paste,{ + FUNCTION_TAKES_AT_MOST(1); + if (argc) { + CHECK_ARG(0,bool,int,enabled); + pasteEnabled = enabled; + } else { + pasteEnabled = !pasteEnabled; + } fprintf(stderr, "Pasting is %s.\n", pasteEnabled ? "enabled" : "disabled"); +}) + +static int doRead(char * buf, size_t bufSize) { +#ifndef NO_RLINE + if (enableRline) + return rline(buf, bufSize); + else +#endif + return read(STDIN_FILENO, buf, bufSize); +} + +static KrkValue readLine(char * prompt, int promptWidth, char * syntaxHighlighter) { + struct StringBuilder sb = {0}; + +#ifndef NO_RLINE + if (enableRline) { + rline_exit_string = ""; + rline_exp_set_prompts(prompt, "", promptWidth, 0); + rline_exp_set_syntax(syntaxHighlighter); + rline_exp_set_tab_complete_func(NULL); + } else +#endif + { + fprintf(stdout, "%s", prompt); + fflush(stdout); + } + + /* Read a line of input using a method that we can guarantee will be + * interrupted by signal delivery. */ + while (1) { + char buf[4096]; + ssize_t bytesRead = doRead(buf, 4096); + if (krk_currentThread.flags & KRK_THREAD_SIGNALLED) goto _exit; + if (bytesRead < 0) { + krk_runtimeError(vm.exceptions->ioError, "%s", strerror(errno)); + goto _exit; + } else if (bytesRead == 0 && !sb.length) { + krk_runtimeError(vm.exceptions->baseException, "EOF"); + goto _exit; + } else { + pushStringBuilderStr(&sb, buf, bytesRead); + } + /* Was there a linefeed? Then we can exit. */ + if (sb.length && sb.bytes[sb.length-1] == '\n') { + sb.length--; + break; + } + } + + return finishStringBuilder(&sb); + +_exit: + discardStringBuilder(&sb); return NONE_VAL(); } +/** + * @brief Read a line of input. + * + * In an interactive session, presents the configured prompt without + * a trailing linefeed. + */ +KRK_FUNC(input,{ + FUNCTION_TAKES_AT_MOST(1); + + char * prompt = ""; + int promptLength = 0; + char * syntaxHighlighter = NULL; + + if (argc) { + CHECK_ARG(0,str,KrkString*,_prompt); + prompt = _prompt->chars; + promptLength = _prompt->codesLength; + } + + if (hasKw) { + KrkValue promptwidth; + if (krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("promptwidth")), &promptwidth)) { + if (!IS_INTEGER(promptwidth)) return TYPE_ERROR(int,promptwidth); + promptLength = AS_INTEGER(promptwidth); + } + + KrkValue syntax; + if (krk_tableGet(AS_DICT(argv[argc]), OBJECT_VAL(S("syntax")), &syntax)) { + if (!IS_STRING(syntax)) return TYPE_ERROR(str,syntax); + syntaxHighlighter = AS_CSTRING(syntax); + } + } + + return readLine(prompt, promptLength, syntaxHighlighter); +}) + #ifndef NO_RLINE /** * Given an object, find a property with the same name as a scanner token. @@ -358,7 +455,7 @@ static int debuggerHook(KrkCallFrame * frame) { } else { size_t frameCount = krk_currentThread.frameCount; /* Compile statement */ - KrkFunction * expression = krk_compile(arg,""); + KrkCodeObject * expression = krk_compile(arg,""); if (expression) { /* Make sure stepping is disabled first. */ krk_debug_disableSingleStep(); @@ -429,7 +526,7 @@ static int debuggerHook(KrkCallFrame * frame) { } if (!strcmp(arg,"breakpoints")) { - KrkFunction * codeObject = NULL; + KrkCodeObject * codeObject = NULL; size_t offset = 0; int flags = 0; int enabled = 0; @@ -521,11 +618,13 @@ static int debuggerHook(KrkCallFrame * frame) { } static void handleSigint(int sigNum) { - if (krk_currentThread.frameCount) { - krk_currentThread.flags |= KRK_THREAD_SIGNALLED; - } + /* Don't set the signal flag if the VM is not running */ + if (!krk_currentThread.frameCount) return; + krk_currentThread.flags |= KRK_THREAD_SIGNALLED; +} - signal(sigNum, handleSigint); +static void bindSignalHandlers(void) { + signal(SIGINT, handleSigint); } static void findInterpreter(char * argv[]) { @@ -566,6 +665,7 @@ static int runString(char * argv[], int flags, char * string) { findInterpreter(argv); krk_initVM(flags); krk_startModule("__main__"); + krk_attachNamedValue(&krk_currentThread.module->fields,"__doc__", NONE_VAL()); krk_interpret(string, ""); krk_freeVM(); return 0; @@ -595,7 +695,7 @@ static int compileFile(char * argv[], int flags, char * fileName) { krk_startModule("__main__"); /* Call the compiler directly. */ - KrkFunction * func = krk_compile(buf, fileName); + KrkCodeObject * func = krk_compile(buf, fileName); /* See if there was an exception. */ if (krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) { @@ -715,7 +815,7 @@ int main(int argc, char * argv[]) { for (int arg = optind; arg < argc + (optind == argc); ++arg) krk_pop(); /* Bind interrupt signal */ - signal(SIGINT, handleSigint); + bindSignalHandlers(); #ifdef BUNDLE_LIBS /* Add any other modules you want to include that are normally built as shared objects. */ @@ -724,6 +824,24 @@ int main(int argc, char * argv[]) { KrkValue result = INTEGER_VAL(0); + /** + * Add general builtins that aren't part of the core VM. + * This is where we provide @c input in particular. + */ + KRK_DOC(BIND_FUNC(vm.builtins,input), "@brief Read a line of input.\n" + "@arguments [prompt], promptwidth=None, syntax=None\n\n" + "Read a line of input from @c stdin. If the @c rline library is available, " + "it will be used to gather input. Input reading stops on end-of file or when " + "a read ends with a line feed, which will be removed from the returned string. " + "If a prompt is provided, it will be printed without a line feed before requesting " + "input. If @c rline is available, the prompt will be passed to the library as the " + "left-hand prompt string. If not provided, @p promptwidth will default to the width " + "of @p prompt in codepoints; if you are providing a prompt with escape characters or " + "characters with multi-column East-Asian Character Width be sure to pass a value " + "for @p promptwidth that reflects the display width of your prompt. " + "If provided, @p syntax specifies the name of an @c rline syntax module to " + "provide color highlighting of the input line."); + if (moduleAsMain) { krk_push(OBJECT_VAL(krk_copyString("__main__",8))); int out = !krk_importModule( @@ -736,8 +854,14 @@ int main(int argc, char * argv[]) { return out; } else if (optind == argc) { /* Add builtins for the repl, but hide them from the globals() list. */ - krk_defineNative(&vm.builtins->fields, "exit", exitFunc); - krk_defineNative(&vm.builtins->fields, "paste", paste); + KRK_DOC(BIND_FUNC(vm.builtins,exit), "@brief Exit the interactive repl.\n\n" + "Only available from the interactive interpreter; exits the repl."); + KRK_DOC(BIND_FUNC(vm.builtins,paste), "@brief Toggle paste mode.\n" + "@arguments enabled=None\n\n" + "Toggles paste-safe mode, disabling automatic indentation in the repl. " + "If @p enabled is specified, the mode can be directly specified, otherwise " + "it will be set to the opposite of the current mode. The new mode will be " + "printed to stderr."); /* The repl runs in the context of a top-level module so each input * line can share a globals state with the others. */ diff --git a/base/usr/include/kuroko/chunk.h b/base/usr/include/kuroko/chunk.h new file mode 100644 index 00000000..0d10c17b --- /dev/null +++ b/base/usr/include/kuroko/chunk.h @@ -0,0 +1,219 @@ +#pragma once +/** + * @file chunk.h + * @brief Structures and enums for bytecode chunks. + */ +#include "kuroko.h" +#include "value.h" + +/** + * @brief Instruction opcode values + * + * The instruction opcode table is divided in four parts. The high two bits of each + * opcode encodes the number of operands to pull from the codeobject and thus the + * size (generally) of the instruction (note that OP_CLOSURE(_LONG) has additional + * arguments depending on the function it points to). + * + * 0-operand opcodes are "simple" instructions that generally only deal with stack + * values and require no additional arguments. + * + * 1- and 3- operand opcodes are paired as 'short' and 'long'. While the VM does not + * currently depend on these instructions having the same values in the lower 6 bits, + * it is recommended that this property remain true. + * + * 2-operand opcodes are generally jump instructions. + */ +typedef enum { + OP_ADD = 1, + OP_BITAND, + OP_BITNEGATE, + OP_BITOR, + OP_BITXOR, + OP_CLEANUP_WITH, + OP_CLOSE_UPVALUE, + OP_DIVIDE, + OP_DOCSTRING, + OP_EQUAL, + OP_FALSE, + OP_FINALIZE, + OP_GREATER, + OP_INHERIT, + OP_INVOKE_DELETE, + OP_INVOKE_DELSLICE, + OP_INVOKE_GETSLICE, + OP_INVOKE_GETTER, + OP_INVOKE_SETSLICE, + OP_INVOKE_SETTER, + OP_IS, + OP_LESS, + OP_MODULO, + OP_MULTIPLY, + OP_NEGATE, + OP_NONE, + OP_NOT, + OP_POP, + OP_POW, + OP_RAISE, + OP_RETURN, + OP_SHIFTLEFT, + OP_SHIFTRIGHT, + OP_SUBTRACT, + OP_SWAP, + OP_TRUE, + OP_FILTER_EXCEPT, + OP_INVOKE_ITER, + OP_INVOKE_CONTAINS, + OP_BREAKPOINT, /* NEVER output this instruction in the compiler or bad things can happen */ + OP_YIELD, + OP_ANNOTATE, + /* current highest: 44 */ + + OP_CALL = 64, + OP_CLASS, + OP_CLOSURE, + OP_CONSTANT, + OP_DEFINE_GLOBAL, + OP_DEL_GLOBAL, + OP_DEL_PROPERTY, + OP_DUP, + OP_EXPAND_ARGS, + OP_GET_GLOBAL, + OP_GET_LOCAL, + OP_GET_PROPERTY, + OP_GET_SUPER, + OP_GET_UPVALUE, + OP_IMPORT, + OP_IMPORT_FROM, + OP_INC, + OP_KWARGS, + OP_CLASS_PROPERTY, + OP_SET_GLOBAL, + OP_SET_LOCAL, + OP_SET_PROPERTY, + OP_SET_UPVALUE, + OP_TUPLE, + OP_UNPACK, + OP_LIST_APPEND, + OP_DICT_SET, + OP_SET_ADD, + OP_MAKE_LIST, + OP_MAKE_DICT, + OP_MAKE_SET, + OP_REVERSE, + + OP_JUMP_IF_FALSE = 128, + OP_JUMP_IF_TRUE, + OP_JUMP, + OP_LOOP, + OP_PUSH_TRY, + OP_PUSH_WITH, + + OP_CALL_LONG = 192, + OP_CLASS_LONG, + OP_CLOSURE_LONG, + OP_CONSTANT_LONG, + OP_DEFINE_GLOBAL_LONG, + OP_DEL_GLOBAL_LONG, + OP_DEL_PROPERTY_LONG, + OP_DUP_LONG, + OP_EXPAND_ARGS_LONG, + OP_GET_GLOBAL_LONG, + OP_GET_LOCAL_LONG, + OP_GET_PROPERTY_LONG, + OP_GET_SUPER_LONG, + OP_GET_UPVALUE_LONG, + OP_IMPORT_LONG, + OP_IMPORT_FROM_LONG, + OP_INC_LONG, + OP_KWARGS_LONG, + OP_CLASS_PROPERTY_LONG, + OP_SET_GLOBAL_LONG, + OP_SET_LOCAL_LONG, + OP_SET_PROPERTY_LONG, + OP_SET_UPVALUE_LONG, + OP_TUPLE_LONG, + OP_UNPACK_LONG, + OP_LIST_APPEND_LONG, + OP_DICT_SET_LONG, + OP_SET_ADD_LONG, + OP_MAKE_LIST_LONG, + OP_MAKE_DICT_LONG, + OP_MAKE_SET_LONG, + OP_REVERSE_LONG, +} KrkOpCode; + +/** + * @brief Map entry of instruction offsets to line numbers. + * + * Each code object contains an array of line mappings, indicating + * the start offset of each line. Since a line typically maps to + * multiple opcodes, and spans of many lines may map to no opcodes + * in the case of blank lines or docstrings, this array is stored + * as a sequence of pairs rather than a simple + * array of one or the other. + */ +typedef struct { + size_t startOffset; + size_t line; +} KrkLineMap; + +/** + * @brief Opcode chunk of a code object. + * + * Opcode chunks are internal to code objects and I'm not really + * sure why we're still separating them from the KrkCodeObjects. + * + * Stores four flexible arrays using three different formats: + * - Code, representing opcodes and operands. + * - Lines, representing offset-to-line mappings. + * - Filename, the string name of the source file. + * - Constants, an array of values referenced by the code object. + */ +typedef struct { + size_t count; + size_t capacity; + uint8_t * code; + + size_t linesCount; + size_t linesCapacity; + KrkLineMap * lines; + + KrkString * filename; + KrkValueArray constants; +} KrkChunk; + +/** + * @brief Initialize an opcode chunk. + * @memberof KrkChunk + */ +extern void krk_initChunk(KrkChunk * chunk); + +/** + * @memberof KrkChunk + * @brief Append a byte to an opcode chunk. + */ +extern void krk_writeChunk(KrkChunk * chunk, uint8_t byte, size_t line); + +/** + * @brief Release the resources allocated to an opcode chunk. + * @memberof KrkChunk + */ +extern void krk_freeChunk(KrkChunk * chunk); + +/** + * @brief Add a new constant value to an opcode chunk. + * @memberof KrkChunk + */ +extern size_t krk_addConstant(KrkChunk * chunk, KrkValue value); + +/** + * @brief Write an OP_CONSTANT(_LONG) instruction. + * @memberof KrkChunk + */ +extern void krk_emitConstant(KrkChunk * chunk, size_t ind, size_t line); + +/** + * @brief Add a new constant and write an instruction for it. + * @memberof KrkChunk + */ +extern size_t krk_writeConstant(KrkChunk * chunk, KrkValue value, size_t line); diff --git a/base/usr/include/kuroko/compiler.h b/base/usr/include/kuroko/compiler.h new file mode 100644 index 00000000..82baaec2 --- /dev/null +++ b/base/usr/include/kuroko/compiler.h @@ -0,0 +1,22 @@ +#pragma once +/** + * @file compiler.h + * @brief Exported methods for the source compiler. + */ +#include "object.h" + +/** + * @brief Compile a string to a code object. + * + * Compiles the source string 'src' into a code object. + * + * @param src Source code string to compile. + * @param fileName Path name of the source file or a representative string like "" + * @return The code object resulting from the compilation, or NULL if compilation failed. + */ +extern KrkCodeObject * krk_compile(const char * src, char * fileName); + +/** + * @brief Mark objects owned by the compiler as in use. + */ +extern void krk_markCompilerRoots(void); diff --git a/base/usr/include/kuroko/debug.h b/base/usr/include/kuroko/debug.h new file mode 100644 index 00000000..9c6e1e8d --- /dev/null +++ b/base/usr/include/kuroko/debug.h @@ -0,0 +1,248 @@ +#pragma once +/** + * @file debug.h + * @brief Functions for debugging bytecode execution. + * + * This header provides functions for disassembly bytecode to + * readable instruction traces, mapping bytecode offsets to + * source code lines, and handling breakpoint instructions. + * + * Several of these functions are also exported to user code + * in the @ref mod_dis module. + * + * Note that these functions are not related to manage code + * exception handling, but instead inteaded to provide a low + * level interface to the VM's execution process and allow + * for the implementation of debuggers and debugger extensions. + */ +#include +#include "vm.h" +#include "chunk.h" +#include "object.h" + +/** + * @brief Print a disassembly of 'func' to the stream 'f'. + * + * Generates and prints a bytecode disassembly of the code object 'func', + * writing it to the requested stream. + * + * @param f Stream to write to. + * @param func Code object to disassemble. + * @param name Function name to display in disassembly output. + */ +extern void krk_disassembleCodeObject(FILE * f, KrkCodeObject * func, const char * name); + +/** + * @brief Print a disassembly of a single opcode instruction. + * + * Generates and prints a bytecode disassembly for one instruction from + * the code object 'func' at byte offset 'offset', printing the result to + * the requested stream and returning the size of the instruction. + * + * @param f Stream to write to. + * @param func Code object to disassemble. + * @param offset Byte offset of the instruction to disassemble. + * @return The size of the instruction in bytes. + */ +extern size_t krk_disassembleInstruction(FILE * f, KrkCodeObject * func, size_t offset); + +/** + * @brief Obtain the line number for a byte offset into a bytecode chunk. + * + * Scans the line mapping table for the given chunk to find the + * correct line number from the original source file for the instruction + * at byte index 'offset'. + * + * @param chunk Bytecode chunk containing the instruction. + * @param offset Byte offset of the instruction to locate. + * @return Line number, 1-indexed. + */ +extern size_t krk_lineNumber(KrkChunk * chunk, size_t offset); + +/* Internal stuff */ +extern void _createAndBind_disMod(void); + +/** + * @brief Called by the VM when a breakpoint is encountered. + * + * Internal method, should not generally be called. + */ +extern int krk_debugBreakpointHandler(void); + +/** + * @brief Called by the VM on single step. + * + * Handles calling the registered debugger hook, if one has + * been set, and performing the requested response action. + * Also takes care of re-enabling REPEAT breakpoints. + * + * Internal method, should not generally be called. + */ +extern int krk_debuggerHook(KrkCallFrame * frame); + +/** + * @brief Function pointer for a debugger hook. + * @ref krk_debug_registerCallback() + */ +typedef int (*KrkDebugCallback)(KrkCallFrame *frame); + +/** + * @brief Register a debugger callback. + * + * The registered function @p hook will be called when an + * OP_BREAKPOINT instruction is encountered. The debugger + * is provided a pointer to the active frame and can use + * functions from the krk_debug_* suite to examine the + * thread state, execute more code, and resume execution. + * + * The debugger hook will be called from the thread that + * encountered the breakpoint, and should return one of + * the KRK_DEBUGGER_ status values to inform the VM of + * what action to take. + * + * @param hook The hook function to attach. + * @return 0 if the hook was registered; 1 if a hook was + * already registered, in which case the new hook + * has not been registered. + */ +extern int krk_debug_registerCallback(KrkDebugCallback hook); + +/** + * @brief Add a breakpoint to the given line of a file. + * + * The interpreter will scan all code objects and attach + * a breakpoint instruction to the first such object that + * has a match filename and contains an instruction with + * a matching line mapping. Breakpoints can only be added + * to code which has already been compiled. + * + * @param filename KrkString * representation of a source + * code filename to look for. + * @param line The line to set the breakpoint at. + * @param flags Allows configuring the disposition of the breakpoint. + * @return A breakpoint identifier handle on success, or -1 on failure. + */ +extern int krk_debug_addBreakpointFileLine(KrkString * filename, size_t line, int flags); + +/** + * @brief Add a breakpoint to the given code object. + * + * A new breakpoint is added to the breakpoint table and + * the code object's bytecode is overwritten to insert + * the OP_BREAKPOINT instruction. + * + * Callers must ensure that @p offset points to the opcode + * portion of an instruction, and not an operand, or the + * attempt to add a breakpoint can corrupt the bytecode. + * + * @param codeObject KrkCodeObject* for the code object to break on. + * @param offset Bytecode offset to insert the breakpoint at. + * @param flags Allows configuring the disposition of the breakpoint. + * @return A breakpoint identifier handle on success, or -1 on failure. + */ +extern int krk_debug_addBreakpointCodeOffset(KrkCodeObject * codeObject, size_t offset, int flags); + +/** + * @brief Remove a breakpoint from the breakpoint table. + * + * Removes the breakpoint @p breakpointId from the breakpoint + * table, restoring the bytecode instruction for it if it + * was enabled. + * + * @param breakpointId The breakpoint to remove. + * @return 0 on success, 1 if the breakpoint identifier is invalid. + */ +extern int krk_debug_removeBreakpoint(int breakpointId); + +/** + * @brief Enable a breakpoint. + * + * Writes the OP_BREAKPOINT instruction into the function + * bytecode chunk for the given breakpoint. + * + * @param breakpointId The breakpoint to enable. + * @return 0 on success, 1 if the breakpoint identifier is invalid. + */ +extern int krk_debug_enableBreakpoint(int breakpointId); + +/** + * @brief Disable a breakpoint. + * + * Restores the bytecode instructions for the given breakpoint + * if it is currently enabled. + * + * No error is returned if the breakpoint was already disabled. + * + * @param breakpointId The breakpoint to disable. + * @return 0 on success, 1 if the breakpoint identifier is invalid. + */ +extern int krk_debug_disableBreakpoint(int breakpointId); + +/** + * @brief Enable single stepping in the current thread. + */ +extern void krk_debug_enableSingleStep(void); + +/** + * @brief Disable single stepping in the current thread. + */ +extern void krk_debug_disableSingleStep(void); + +/** + * @brief Safely dump a traceback to stderr. + * + * Wraps @ref krk_dumpTraceback() so it can be safely + * called from a debugger. + */ +extern void krk_debug_dumpTraceback(void); + +/** + * @brief Retreive information on a breakpoint. + * + * Can be called by debuggers to examine the details of a breakpoint by its handle. + * Information is returned through the pointers provided as parameters. + * + * @param breakIndex Breakpoint handle to examine. + * @param funcOut (Out) The code object this breakpoint is in. + * @param offsetOut (Out) The bytecode offset within the code object where the breakpoint is located. + * @param flagsOut (Out) The configuration flags for the breakpoint. + * @param enabledOut (Out) Whether the breakpoint is enabled or not. + * @return 0 on success, -1 on out of range, -2 if the selected slot was removed. + */ +extern int krk_debug_examineBreakpoint(int breakIndex, KrkCodeObject ** funcOut, size_t * offsetOut, int * flagsOut, int *enabledOut); + +/** + * @brief Print the elements on the stack. + * + * Prints the elements on the stack for the current thread to @p file, + * highlighting @p frame as the activate call point and indicating + * where its arguments start. + */ +extern void krk_debug_dumpStack(FILE * f, KrkCallFrame * frame); + +/** + * @def KRK_BREAKPOINT_NORMAL + * + * This breakpoint should fire once and then remain in the table + * to be re-enabled later. + * + * @def KRK_BREAKPOINT_ONCE + * + * This breakpoint should fire once and then be removed from the + * breakpoint table. + * + * @def KRK_BREAKPOINT_REPEAT + * + * After this breakpoint has fired and execution resumes, the + * interpreter should re-enable it to fire again until it is + * removed by a call to @ref krk_debug_removeBreakpoint() + */ +#define KRK_BREAKPOINT_NORMAL 0 +#define KRK_BREAKPOINT_ONCE 1 +#define KRK_BREAKPOINT_REPEAT 2 + +#define KRK_DEBUGGER_CONTINUE 0 +#define KRK_DEBUGGER_ABORT 1 +#define KRK_DEBUGGER_STEP 2 +#define KRK_DEBUGGER_RAISE 3 +#define KRK_DEBUGGER_QUIT 4 diff --git a/base/usr/include/kuroko/kuroko.h b/base/usr/include/kuroko/kuroko.h new file mode 100644 index 00000000..0ed6dd50 --- /dev/null +++ b/base/usr/include/kuroko/kuroko.h @@ -0,0 +1,37 @@ +#pragma once +/** + * @file kuroko.h + * @brief Top-level header with configuration macros. + */ +#include +#include +#include + +#if defined(__EMSCRIPTEN__) +typedef long long krk_integer_type; +# define PRIkrk_int "%lld" +# define PRIkrk_hex "%llx" +# define parseStrInt strtoll +#elif defined(_WIN32) +typedef long long krk_integer_type; +# define PRIkrk_int "%I64d" +# define PRIkrk_hex "%I64x" +# define parseStrInt strtoll +# define ENABLE_THREADING +# else +typedef long krk_integer_type; +# define PRIkrk_int "%ld" +# define PRIkrk_hex "%lx" +# define parseStrInt strtol +# define ENABLE_THREADING +#endif + +#define ENABLE_THREADING + +#ifdef DEBUG +#define ENABLE_DISASSEMBLY +#define ENABLE_TRACING +#define ENABLE_SCAN_TRACING +#define ENABLE_STRESS_GC +#endif + diff --git a/base/usr/include/kuroko/memory.h b/base/usr/include/kuroko/memory.h new file mode 100644 index 00000000..0efecce7 --- /dev/null +++ b/base/usr/include/kuroko/memory.h @@ -0,0 +1,80 @@ +#pragma once +/** + * @file memory.h + * @brief Functions for dealing with garbage collection and memory allocation. + */ +#include "kuroko.h" +#include "object.h" +#include "table.h" + +#define GROW_CAPACITY(c) ((c) < 8 ? 8 : (c) * 2) +#define GROW_ARRAY(t,p,o,n) (t*)krk_reallocate(p,sizeof(t)*o,sizeof(t)*n) + +#define FREE_ARRAY(t,a,c) krk_reallocate(a,sizeof(t) * c, 0) +#define FREE(t,p) krk_reallocate(p,sizeof(t),0) + +#define ALLOCATE(type, count) (type*)krk_reallocate(NULL,0,sizeof(type)*(count)) + +/** + * @brief Resize an allocated heap object. + * + * Allocates or reallocates the heap object 'ptr', tracking changes + * in sizes from 'old' to 'new'. If 'ptr' is NULL, 'old' should be 0, + * and a new pointer will be allocated of size 'new'. + * + * @param ptr Heap object to resize. + * @param old Current size of the object. + * @param new New size of the object. + * @return New pointer for heap object. + */ +extern void * krk_reallocate(void * ptr, size_t old, size_t new); + +/** + * @brief Release all objects. + * + * Generally called automatically by krk_freeVM(); releases all of + * the GC-tracked heap objects. + */ +extern void krk_freeObjects(void); + +/** + * @brief Run a cycle of the garbage collector. + * + * Runs one scan-sweep cycle of the garbage collector, potentially + * freeing unused resources and advancing potentially-unused + * resources to the next stage of removal. + * + * @return The number of bytes released by this collection cycle. + */ +extern size_t krk_collectGarbage(void); + +/** + * @brief During a GC scan cycle, mark a value as used. + * + * When defining a new type in a C extension, this function should + * be used by the type's _ongcscan callback to mark any values not + * already tracked by the garbage collector. + * + * @param value The value to mark. + */ +extern void krk_markValue(KrkValue value); + +/** + * @brief During a GC scan cycle, mark an object as used. + * + * Equivalent to krk_markValue but operates directly on an object. + * + * @param object The object to mark. + */ +extern void krk_markObject(KrkObj * object); + +/** + * @brief During a GC scan cycle, mark the contents of a table as used. + * + * Marks all keys and values in a table as used. Generally applied + * to the internal storage of mapping types. + * + * @param table The table to mark. + */ +extern void krk_markTable(KrkTable * table); + diff --git a/base/usr/include/kuroko/object.h b/base/usr/include/kuroko/object.h new file mode 100644 index 00000000..df137c28 --- /dev/null +++ b/base/usr/include/kuroko/object.h @@ -0,0 +1,411 @@ +#pragma once +/** + * @file object.h + * @brief Struct definitions for core object types. + */ +#include +#include "kuroko.h" +#include "value.h" +#include "chunk.h" +#include "table.h" + +#ifdef ENABLE_THREADING +#include +#endif + +typedef enum { + KRK_OBJ_CODEOBJECT, + KRK_OBJ_NATIVE, + KRK_OBJ_CLOSURE, + KRK_OBJ_STRING, + KRK_OBJ_UPVALUE, + KRK_OBJ_CLASS, + KRK_OBJ_INSTANCE, + KRK_OBJ_BOUND_METHOD, + KRK_OBJ_TUPLE, + KRK_OBJ_BYTES, +} KrkObjType; + +#undef KrkObj +/** + * @brief The most basic object type. + * + * This is the base of all object types and contains + * the core structures for garbage collection. + */ +typedef struct KrkObj { + KrkObjType type; + unsigned char isMarked:1; + unsigned char inRepr:1; + unsigned char generation:2; + unsigned char isImmortal:1; + uint32_t hash; + struct KrkObj * next; +} KrkObj; + +typedef enum { + KRK_STRING_ASCII = 0, + KRK_STRING_UCS1 = 1, + KRK_STRING_UCS2 = 2, + KRK_STRING_UCS4 = 4, + KRK_STRING_INVALID = 5, +} KrkStringType; + +#undef KrkString +/** + * @brief Immutable sequence of Unicode codepoints. + * @extends KrkObj + */ +typedef struct KrkString { + KrkObj obj; + KrkStringType type; + size_t length; + size_t codesLength; + char * chars; + void * codes; +} KrkString; + +/** + * @brief Immutable sequence of bytes. + * @extends KrkObj + */ +typedef struct { + KrkObj obj; + size_t length; + uint8_t * bytes; +} KrkBytes; + +/** + * @brief Storage for values referenced from nested functions. + * @extends KrkObj + */ +typedef struct KrkUpvalue { + KrkObj obj; + int location; + KrkValue closed; + struct KrkUpvalue * next; + struct KrkThreadState * owner; +} KrkUpvalue; + +/** + * @brief Metadata on a local variable name in a function. + * + * This is used by the disassembler to print the names of + * locals when they are referenced by instructions. + */ +typedef struct { + size_t id; + size_t birthday; + size_t deathday; + KrkString * name; +} KrkLocalEntry; + +struct KrkInstance; + +/** + * @brief Code object. + * @extends KrkObj + * + * Contains the static data associated with a chunk of bytecode. + */ +typedef struct { + KrkObj obj; + short requiredArgs; + short keywordArgs; + size_t upvalueCount; + KrkChunk chunk; + KrkString * name; + KrkString * docstring; + KrkValueArray requiredArgNames; + KrkValueArray keywordArgNames; + size_t localNameCapacity; + size_t localNameCount; + KrkLocalEntry * localNames; + unsigned char collectsArguments:1; + unsigned char collectsKeywords:1; + unsigned char isGenerator:1; + struct KrkInstance * globalsContext; + KrkString * qualname; +} KrkCodeObject; + +/** + * @brief Function object. + * @extends KrkObj + * + * Not to be confused with code objects, a closure is a single instance of a function. + */ +typedef struct { + KrkObj obj; + KrkCodeObject * function; + KrkUpvalue ** upvalues; + size_t upvalueCount; + unsigned char isClassMethod:1; + unsigned char isStaticMethod:1; + KrkValue annotations; + KrkTable fields; +} KrkClosure; + +typedef void (*KrkCleanupCallback)(struct KrkInstance *); + +/** + * @brief Type object. + * @extends KrkObj + * + * Represents classes defined in user code as well as classes defined + * by C extensions to represent method tables for new types. + */ +typedef struct KrkClass { + KrkObj obj; + KrkString * name; + KrkString * filename; + KrkString * docstring; + struct KrkClass * base; + KrkTable methods; + size_t allocSize; + KrkCleanupCallback _ongcscan; + KrkCleanupCallback _ongcsweep; + + /* Quick access for common stuff */ + KrkObj * _getter; + KrkObj * _setter; + KrkObj * _getslice; + KrkObj * _reprer; + KrkObj * _tostr; + KrkObj * _call; + KrkObj * _init; + KrkObj * _eq; + KrkObj * _len; + KrkObj * _enter; + KrkObj * _exit; + KrkObj * _delitem; + KrkObj * _iter; + KrkObj * _getattr; + KrkObj * _dir; + KrkObj * _setslice; + KrkObj * _delslice; + KrkObj * _contains; + KrkObj * _descget; + KrkObj * _descset; + KrkObj * _classgetitem; +} KrkClass; + +/** + * @brief An object of a class. + * @extends KrkObj + * + * Created by class initializers, instances are the standard type of objects + * built by managed code. Not all objects are instances, but all instances are + * objects, and all instances have well-defined class. + */ +typedef struct KrkInstance { + KrkObj obj; + KrkClass * _class; + KrkTable fields; +} KrkInstance; + +/** + * @brief A function that has been attached to an object to serve as a method. + * @extends KrkObj + * + * When a bound method is called, its receiver is implicitly extracted as + * the first argument. Bound methods are created whenever a method is retreived + * from the class of a value. + */ +typedef struct { + KrkObj obj; + KrkValue receiver; + KrkObj * method; +} KrkBoundMethod; + +typedef KrkValue (*NativeFn)(int argCount, KrkValue* args, int hasKwargs); + +/** + * @brief Managed binding to a C function. + * @extends KrkObj + * + * Represents a C function that has been exposed to managed code. + */ +typedef struct { + KrkObj obj; + NativeFn function; + const char * name; + const char * doc; + int isMethod; +} KrkNative; + +/** + * @brief Immutable sequence of arbitrary values. + * @extends KrkObj + * + * Tuples are fixed-length non-mutable collections of values intended + * for use in situations where the flexibility of a list is not needed. + */ +typedef struct { + KrkObj obj; + KrkValueArray values; +} KrkTuple; + +/** + * @brief Mutable array of values. + * @extends KrkInstance + * + * A list is a flexible array of values that can be extended, cleared, + * sorted, rearranged, iterated over, etc. + */ +typedef struct { + KrkInstance inst; + KrkValueArray values; +#ifdef ENABLE_THREADING + pthread_rwlock_t rwlock; +#endif +} KrkList; + +/** + * @brief Flexible mapping type. + * @extends KrkInstance + * + * Provides key-to-value mappings as a first-class object type. + */ +typedef struct { + KrkInstance inst; + KrkTable entries; +} KrkDict; + +struct DictItems { + KrkInstance inst; + KrkValue dict; + size_t i; +}; + +struct DictKeys { + KrkInstance inst; + KrkValue dict; + size_t i; +}; + +/** + * @brief Yield ownership of a C string to the GC and obtain a string object. + * @memberof KrkString + * + * Creates a string object represented by the characters in 'chars' and of + * length 'length'. The source string must be nil-terminated and must + * remain valid for the lifetime of the object, as its ownership is yielded + * to the GC. Useful for strings which were allocated on the heap by + * other mechanisms. + * + * 'chars' must be a nil-terminated C string representing a UTF-8 + * character sequence. + * + * @param chars C string to take ownership of. + * @param length Length of the C string. + * @return A string object. + */ +extern KrkString * krk_takeString(char * chars, size_t length); + +/** + * @brief Obtain a string object representation of the given C string. + * @memberof KrkString + * + * Converts the C string 'chars' into a string object by checking the + * string table for it. If the string table does not have an equivalent + * string, a new one will be created by copying 'chars'. + * + * 'chars' must be a nil-terminated C string representing a UTF-8 + * character sequence. + * + * @param chars C string to convert to a string object. + * @param length Length of the C string. + * @return A string object. + */ +extern KrkString * krk_copyString(const char * chars, size_t length); + +/** + * @brief Ensure that a codepoint representation of a string is available. + * @memberof KrkString + * + * Obtain an untyped pointer to the codepoint representation of a string. + * If the string does not have a codepoint representation allocated, it will + * be generated by this function and remain with the string for the duration + * of its lifetime. + * + * @param string String to obtain the codepoint representation of. + * @return A pointer to the bytes of the codepoint representation. + */ +extern void * krk_unicodeString(KrkString * string); + +/** + * @brief Obtain the codepoint at a given index in a string. + * @memberof KrkString + * + * This is a convenience function which ensures that a Unicode codepoint + * representation has been generated and returns the codepoint value at + * the requested index. If you need to find multiple codepoints, it + * is recommended that you use the KRK_STRING_FAST macro after calling + * krk_unicodeString instead. + * + * @note This function does not perform any bounds checking. + * + * @param string String to index into. + * @param index Offset of the codepoint to obtain. + * @return Integer representation of the codepoint at the requested index. + */ +extern uint32_t krk_unicodeCodepoint(KrkString * string, size_t index); + +/** + * @brief Convert an integer codepoint to a UTF-8 byte representation. + * @memberof KrkString + * + * Converts a single codepoint to a sequence of bytes containing the + * UTF-8 representation. 'out' must be allocated by the caller. + * + * @param value Codepoint to encode. + * @param out Array to write UTF-8 sequence into. + * @return The length of the UTF-8 sequence, in bytes. + */ +extern size_t krk_codepointToBytes(krk_integer_type value, unsigned char * out); + +/* Internal stuff. */ +extern NativeFn KrkGenericAlias; +extern KrkCodeObject * krk_newCodeObject(void); +extern KrkNative * krk_newNative(NativeFn function, const char * name, int type); +extern KrkClosure * krk_newClosure(KrkCodeObject * function); +extern KrkUpvalue * krk_newUpvalue(int slot); +extern KrkClass * krk_newClass(KrkString * name, KrkClass * base); +extern KrkInstance * krk_newInstance(KrkClass * _class); +extern KrkBoundMethod * krk_newBoundMethod(KrkValue receiver, KrkObj * method); +extern KrkTuple * krk_newTuple(size_t length); +extern KrkBytes * krk_newBytes(size_t length, uint8_t * source); +extern void krk_bytesUpdateHash(KrkBytes * bytes); +extern void krk_tupleUpdateHash(KrkTuple * self); + +#define KRK_STRING_FAST(string,offset) (uint32_t)\ + (string->type <= 1 ? ((uint8_t*)string->codes)[offset] : \ + (string->type == 2 ? ((uint16_t*)string->codes)[offset] : \ + ((uint32_t*)string->codes)[offset])) + +#define CODEPOINT_BYTES(cp) (cp < 0x80 ? 1 : (cp < 0x800 ? 2 : (cp < 0x10000 ? 3 : 4))) + +#define krk_isObjType(v,t) (IS_OBJECT(v) && (AS_OBJECT(v)->type == (t))) +#define OBJECT_TYPE(value) (AS_OBJECT(value)->type) +#define IS_STRING(value) krk_isObjType(value, KRK_OBJ_STRING) +#define AS_STRING(value) ((KrkString *)AS_OBJECT(value)) +#define AS_CSTRING(value) (((KrkString *)AS_OBJECT(value))->chars) +#define IS_BYTES(value) krk_isObjType(value, KRK_OBJ_BYTES) +#define AS_BYTES(value) ((KrkBytes*)AS_OBJECT(value)) +#define IS_NATIVE(value) krk_isObjType(value, KRK_OBJ_NATIVE) +#define AS_NATIVE(value) ((KrkNative *)AS_OBJECT(value)) +#define IS_CLOSURE(value) krk_isObjType(value, KRK_OBJ_CLOSURE) +#define AS_CLOSURE(value) ((KrkClosure *)AS_OBJECT(value)) +#define IS_CLASS(value) krk_isObjType(value, KRK_OBJ_CLASS) +#define AS_CLASS(value) ((KrkClass *)AS_OBJECT(value)) +#define IS_INSTANCE(value) krk_isObjType(value, KRK_OBJ_INSTANCE) +#define AS_INSTANCE(value) ((KrkInstance *)AS_OBJECT(value)) +#define IS_BOUND_METHOD(value) krk_isObjType(value, KRK_OBJ_BOUND_METHOD) +#define AS_BOUND_METHOD(value) ((KrkBoundMethod*)AS_OBJECT(value)) +#define IS_TUPLE(value) krk_isObjType(value, KRK_OBJ_TUPLE) +#define AS_TUPLE(value) ((KrkTuple *)AS_OBJECT(value)) +#define AS_LIST(value) (&((KrkList *)AS_OBJECT(value))->values) +#define AS_DICT(value) (&((KrkDict *)AS_OBJECT(value))->entries) + +#define IS_codeobject(value) krk_isObjType(value, KRK_OBJ_CODEOBJECT) +#define AS_codeobject(value) ((KrkCodeObject *)AS_OBJECT(value)) diff --git a/base/usr/include/kuroko/opcodes.h b/base/usr/include/kuroko/opcodes.h new file mode 100644 index 00000000..12e19dff --- /dev/null +++ b/base/usr/include/kuroko/opcodes.h @@ -0,0 +1,80 @@ +SIMPLE(OP_RETURN) +SIMPLE(OP_ADD) +SIMPLE(OP_SUBTRACT) +SIMPLE(OP_MULTIPLY) +SIMPLE(OP_DIVIDE) +SIMPLE(OP_NEGATE) +SIMPLE(OP_MODULO) +SIMPLE(OP_NONE) +SIMPLE(OP_TRUE) +SIMPLE(OP_FALSE) +SIMPLE(OP_NOT) +SIMPLE(OP_EQUAL) +SIMPLE(OP_GREATER) +SIMPLE(OP_LESS) +SIMPLE(OP_POP) +SIMPLE(OP_INHERIT) +SIMPLE(OP_RAISE) +SIMPLE(OP_CLOSE_UPVALUE) +SIMPLE(OP_DOCSTRING) +SIMPLE(OP_BITOR) +SIMPLE(OP_BITXOR) +SIMPLE(OP_BITAND) +SIMPLE(OP_SHIFTLEFT) +SIMPLE(OP_SHIFTRIGHT) +SIMPLE(OP_BITNEGATE) +SIMPLE(OP_INVOKE_GETTER) +SIMPLE(OP_INVOKE_SETTER) +SIMPLE(OP_INVOKE_DELETE) +SIMPLE(OP_INVOKE_GETSLICE) +SIMPLE(OP_INVOKE_SETSLICE) +SIMPLE(OP_INVOKE_DELSLICE) +SIMPLE(OP_INVOKE_ITER) +SIMPLE(OP_INVOKE_CONTAINS) +SIMPLE(OP_SWAP) +SIMPLE(OP_FINALIZE) +SIMPLE(OP_IS) +SIMPLE(OP_POW) +SIMPLE(OP_CLEANUP_WITH) +SIMPLE(OP_FILTER_EXCEPT) +SIMPLE(OP_BREAKPOINT) +SIMPLE(OP_YIELD) +SIMPLE(OP_ANNOTATE) +CONSTANT(OP_DEFINE_GLOBAL,(void)0) +CONSTANT(OP_CONSTANT,(void)0) +CONSTANT(OP_GET_GLOBAL,(void)0) +CONSTANT(OP_SET_GLOBAL,(void)0) +CONSTANT(OP_DEL_GLOBAL,(void)0) +CONSTANT(OP_CLASS,(void)0) +CONSTANT(OP_GET_PROPERTY, (void)0) +CONSTANT(OP_SET_PROPERTY, (void)0) +CONSTANT(OP_DEL_PROPERTY,(void)0) +CONSTANT(OP_CLASS_PROPERTY, (void)0) +CONSTANT(OP_CLOSURE, CLOSURE_MORE) +CONSTANT(OP_IMPORT, (void)0) +CONSTANT(OP_IMPORT_FROM, (void)0) +CONSTANT(OP_GET_SUPER, (void)0) +OPERAND(OP_KWARGS, (void)0) +OPERAND(OP_SET_LOCAL, LOCAL_MORE) +OPERAND(OP_GET_LOCAL, LOCAL_MORE) +OPERAND(OP_SET_UPVALUE, (void)0) +OPERAND(OP_GET_UPVALUE, (void)0) +OPERAND(OP_CALL, (void)0) +OPERAND(OP_INC, (void)0) +OPERAND(OP_TUPLE, (void)0) +OPERAND(OP_UNPACK, (void)0) +OPERAND(OP_DUP,(void)0) +OPERAND(OP_EXPAND_ARGS,EXPAND_ARGS_MORE) +OPERAND(OP_LIST_APPEND, (void)0) +OPERAND(OP_DICT_SET, (void)0) +OPERAND(OP_SET_ADD, (void)0) +OPERAND(OP_MAKE_LIST, (void)0) +OPERAND(OP_MAKE_DICT, (void)0) +OPERAND(OP_MAKE_SET, (void)0) +OPERAND(OP_REVERSE, (void)0) +JUMP(OP_JUMP,+) +JUMP(OP_JUMP_IF_FALSE,+) +JUMP(OP_JUMP_IF_TRUE,+) +JUMP(OP_LOOP,-) +JUMP(OP_PUSH_TRY,+) +JUMP(OP_PUSH_WITH,+) diff --git a/base/usr/include/kuroko/scanner.h b/base/usr/include/kuroko/scanner.h new file mode 100644 index 00000000..d713adec --- /dev/null +++ b/base/usr/include/kuroko/scanner.h @@ -0,0 +1,186 @@ +#pragma once +/** + * @file scanner.h + * @brief Definitions used by the token scanner. + */ + +typedef enum { + TOKEN_LEFT_PAREN, TOKEN_RIGHT_PAREN, + TOKEN_LEFT_BRACE, TOKEN_RIGHT_BRACE, + TOKEN_LEFT_SQUARE, TOKEN_RIGHT_SQUARE, + TOKEN_COLON, + TOKEN_COMMA, + TOKEN_DOT, + TOKEN_MINUS, + TOKEN_PLUS, + TOKEN_SEMICOLON, + TOKEN_SOLIDUS, + TOKEN_ASTERISK, + TOKEN_POW, + TOKEN_MODULO, + TOKEN_AT, + TOKEN_CARET, /* ^ (xor) */ + TOKEN_AMPERSAND, /* & (and) */ + TOKEN_PIPE, /* | (or) */ + TOKEN_TILDE, /* ~ (negate) */ + TOKEN_LEFT_SHIFT, /* << */ + TOKEN_RIGHT_SHIFT,/* >> */ + TOKEN_BANG, + TOKEN_GREATER, + TOKEN_LESS, + TOKEN_ARROW, /* -> */ + TOKEN_WALRUS, /* := */ + + /* Comparisons */ + TOKEN_GREATER_EQUAL, + TOKEN_LESS_EQUAL, + TOKEN_BANG_EQUAL, + TOKEN_EQUAL_EQUAL, + + /* Assignments */ + TOKEN_EQUAL, + TOKEN_LSHIFT_EQUAL, /* <<= */ + TOKEN_RSHIFT_EQUAL, /* >>= */ + TOKEN_PLUS_EQUAL, /* += */ + TOKEN_MINUS_EQUAL, /* -= */ + TOKEN_PLUS_PLUS, /* ++ */ + TOKEN_MINUS_MINUS, /* -- */ + TOKEN_CARET_EQUAL, + TOKEN_PIPE_EQUAL, + TOKEN_AMP_EQUAL, + TOKEN_SOLIDUS_EQUAL, + TOKEN_ASTERISK_EQUAL, + TOKEN_POW_EQUAL, + TOKEN_MODULO_EQUAL, + + TOKEN_STRING, + TOKEN_BIG_STRING, + TOKEN_NUMBER, + + /* + * Everything after this, up to indentation, + * consists of alphanumerics. + */ + TOKEN_IDENTIFIER, + TOKEN_AND, + TOKEN_CLASS, + TOKEN_DEF, + TOKEN_DEL, + TOKEN_ELSE, + TOKEN_FALSE, + TOKEN_FOR, + TOKEN_IF, + TOKEN_IMPORT, + TOKEN_IN, + TOKEN_IS, + TOKEN_LET, + TOKEN_NONE, + TOKEN_NOT, + TOKEN_OR, + TOKEN_ELIF, + TOKEN_PASS, + TOKEN_RETURN, + TOKEN_SELF, + TOKEN_SUPER, + TOKEN_TRUE, + TOKEN_WHILE, + TOKEN_TRY, + TOKEN_EXCEPT, + TOKEN_RAISE, + TOKEN_BREAK, + TOKEN_CONTINUE, + TOKEN_AS, + TOKEN_FROM, + TOKEN_LAMBDA, + TOKEN_ASSERT, + TOKEN_YIELD, + TOKEN_WITH, + + TOKEN_PREFIX_B, + TOKEN_PREFIX_F, + + TOKEN_INDENTATION, + + TOKEN_EOL, + TOKEN_RETRY, + TOKEN_ERROR, + TOKEN_EOF, +} KrkTokenType; + +/** + * @brief A token from the scanner. + * + * Represents a single scanned item from the scanner, such as a keyword, + * string literal, numeric literal, identifier, etc. + */ +typedef struct { + KrkTokenType type; + const char * start; + size_t length; + size_t line; + const char * linePtr; + size_t col; + size_t literalWidth; +} KrkToken; + +/** + * @brief Token scanner state. + * + * Stores the state of the compiler's scanner, reading from a source + * character string and tracking the current line. + */ +typedef struct { + const char * start; + const char * cur; + const char * linePtr; + size_t line; + int startOfLine; + int hasUnget; + KrkToken unget; +} KrkScanner; + +/** + * @brief Initialize the compiler to scan tokens from 'src'. + * + * FIXME: There is currently only a single static scanner state; + * along with making the compiler re-entrant, the scanner + * needs to also be re-entrant; there's really no reason + * these can't all just take a KrkScanner* argument. + */ +extern void krk_initScanner(const char * src); + +/** + * @brief Read the next token from the scanner. + * + * FIXME: Or, maybe the scanner shouldn't even be available outside + * of the compiler, that would make some sense as well, as it's + * a low-level detail, but we use it for tab completion in the + * main repl, so I'm not sure that's feasible right now. + */ +extern KrkToken krk_scanToken(void); + +/** + * @brief Push a token back to the scanner to be reprocessed. + * + * Pushes a previously-scanned token back to the scanner. + * Used to implement small backtracking operations at the + * end of block constructs like 'if' and 'try'. + */ +extern void krk_ungetToken(KrkToken token); + +/** + * @brief Rewind the scanner to a previous state. + * + * Resets the current scanner to the state in 'to'. Used by + * the compiler to implement comprehensions, which would otherwise + * not be possible in a single-pass compiler. + */ +extern void krk_rewindScanner(KrkScanner to); + +/** + * @brief Retreive a copy of the current scanner state. + * + * Used with krk_rewindScanner() to implement rescanning + * for comprehensions. + */ +extern KrkScanner krk_tellScanner(void); diff --git a/base/usr/include/kuroko/table.h b/base/usr/include/kuroko/table.h new file mode 100644 index 00000000..8ac343ab --- /dev/null +++ b/base/usr/include/kuroko/table.h @@ -0,0 +1,153 @@ +#pragma once +/** + * @file table.h + * @brief Implementation of a generic hash table. + * + * I was going to just use the ToaruOS hashmap library, but to make following + * the book easier, let's just start from their Table implementation; it has + * an advantage of using stored entries and fixed arrays, so it has some nice + * properties despite being chained internally... + */ + +#include +#include "kuroko.h" +#include "value.h" +#include "threads.h" + +/** + * @brief One (key,value) pair in a table. + */ +typedef struct { + KrkValue key; + KrkValue value; +} KrkTableEntry; + +/** + * @brief Simple hash table of arbitrary keys to values. + */ +typedef struct { + size_t count; + size_t capacity; + KrkTableEntry * entries; +} KrkTable; + +/** + * @brief Initialize a hash table. + * @memberof KrkTable + * + * This should be called for any new hash table, especially ones + * initialized in heap or stack space, to set up the capacity, count + * and initial entries pointer. + * + * @param table Hash table to initialize. + */ +extern void krk_initTable(KrkTable * table); + +/** + * @brief Release resources associated with a hash table. + * @memberof KrkTable + * + * Frees the entries array for the table and resets count and capacity. + * + * @param table Hash table to release. + */ +extern void krk_freeTable(KrkTable * table); + +/** + * @brief Add all key-value pairs from 'from' into 'to'. + * @memberof KrkTable + * + * Copies each key-value pair from one hash table to another. If a key + * from 'from' already exists in 'to', the existing value in 'to' will be + * overwritten with the value from 'from'. + * + * @param from Source table. + * @param to Destination table. + */ +extern void krk_tableAddAll(KrkTable * from, KrkTable * to); + +/** + * @brief Find a character sequence in the string interning table. + * @memberof KrkTable + * + * Scans through the entries in a given table - usually vm.strings - to find + * an entry equivalent to the string specified by the 'chars' and 'length' + * parameters, using the 'hash' parameter to speed up lookup. + * + * @param table Should always be @c &vm.strings + * @param chars C array of chars representing the string. + * @param length Length of the string. + * @param hash Precalculated hash value for the string. + * @return If the string was found, the string object representation, else NULL. + */ +extern KrkString * krk_tableFindString(KrkTable * table, const char * chars, size_t length, uint32_t hash); + +/** + * @brief Assign a value to a key in a table. + * @memberof KrkTable + * + * Inserts the key-value pair specified by 'key' and 'value' into the hash + * table 'table', replacing any value that was already preseng with the + * same key. + * + * @param table Table to assign to. + * @param key Key to assign. + * @param value Value to assign to the key. + * @return 0 if the key was already present and has been overwritten, 1 if the key is new to the table. + */ +extern int krk_tableSet(KrkTable * table, KrkValue key, KrkValue value); + +/** + * @brief Obtain the value associated with a key in a table. + * @memberof KrkTable + * + * Scans the table 'table' for the key 'key' and, if found, outputs + * the associated value to *value. If the key is not found, then + * *value will not be changed. + * + * @param table Table to look up. + * @param key Key to look for. + * @param value Output pointer to place resulting value in. + * @return 0 if the key was not found, 1 if it was. + */ +extern int krk_tableGet(KrkTable * table, KrkValue key, KrkValue * value); + +/** + * @brief Remove a key from a hash table. + * @memberof KrkTable + * + * Scans the table 'table' for the key 'key' and, if found, removes + * the entry, replacing it with a tombstone value. + * + * @param table Table to delete from. + * @param key Key to delete. + * @return 1 if the value was found and deleted, 0 if it was not present. + */ +extern int krk_tableDelete(KrkTable * table, KrkValue key); + +/** + * @brief Internal table scan function. + * @memberof KrkTable + * + * Scans through the the entry array 'entries' to find the appropriate entry + * for 'key', return a pointer to the entry, which may be or may not have + * an associated pair. + * + * @param entries Table entry array to scan. + * @param capacity Size of the table entry array, in entries. + * @param key Key to locate. + * @return A pointer to the entry for 'key'. + */ +extern KrkTableEntry * krk_findEntry(KrkTableEntry * entries, size_t capacity, KrkValue key); + +/** + * @brief Calculate the hash for a value. + * @memberof KrkValue + * + * Retreives or calculates the hash value for 'value'. + * + * @param value Value to hash. + * @return An unsigned 32-bit hash value. + */ +extern uint32_t krk_hashValue(KrkValue value); + diff --git a/base/usr/include/kuroko/threads.h b/base/usr/include/kuroko/threads.h new file mode 100644 index 00000000..ede5e91b --- /dev/null +++ b/base/usr/include/kuroko/threads.h @@ -0,0 +1,41 @@ +#pragma once +/** + * @file threads.h + * @brief Convience header for providing atomic operations to threads. + */ + +#ifdef ENABLE_THREADING +#include +#include + +#ifdef _WIN32 +#include +#include +#define sched_yield() YieldProcessor() +#endif + +static inline void _krk_internal_spin_lock(int volatile * lock) { + while(__sync_lock_test_and_set(lock, 0x01)) { + sched_yield(); + } +} + +static inline void _krk_internal_spin_unlock(int volatile * lock) { + __sync_lock_release(lock); +} + +#define _obtain_lock(v) _krk_internal_spin_lock(&v); +#define _release_lock(v) _krk_internal_spin_unlock(&v); + +#else + +#define _obtain_lock(v) +#define _release_lock(v) + +#define pthread_rwlock_init(a,b) +#define pthread_rwlock_wrlock(a) +#define pthread_rwlock_rdlock(a) +#define pthread_rwlock_unlock(a) + +#endif + diff --git a/base/usr/include/kuroko/util.h b/base/usr/include/kuroko/util.h new file mode 100644 index 00000000..c78c904b --- /dev/null +++ b/base/usr/include/kuroko/util.h @@ -0,0 +1,296 @@ +#pragma once +/** + * @file util.h + * @brief Utilities for creating native bindings. + * + * This is intended for use in C extensions to provide a uniform interface + * for defining extension methods and ensuring they have consistent argument + * and keyword argument usage. + */ +#include "object.h" +#include "vm.h" +#include "memory.h" + +/* Quick macro for turning string constants into KrkString*s */ +#define S(c) (krk_copyString(c,sizeof(c)-1)) + +#define likely(cond) __builtin_expect(!!(cond), 1) +#define unlikely(cond) __builtin_expect(!!(cond), 0) +#ifndef _WIN32 +#define _noexport __attribute__((visibility("hidden"))) +#else +#define _noexport +#endif + +/** + * Binding macros. + * + * These macros are intended to be used together to define functions for a class. + */ +static inline const char * _method_name(const char * func) { + const char * out = func; + if (*out == '_') out++; + while (*out && *out != '_') out++; + if (*out == '_') out++; + return out; +} + +#define ADD_BASE_CLASS(obj, name, baseClass) krk_makeClass(vm.builtins, &obj, name, baseClass) + +/* _method_name works for this, but let's skip the inlined function call where possible */ +#define _function_name(f) (f+5) + +#define ATTRIBUTE_NOT_ASSIGNABLE() do { if (argc != 1) return krk_runtimeError(vm.exceptions->attributeError, "attribute '%s' is not assignable", \ + _method_name(__func__)); } while (0) + +#define METHOD_TAKES_NONE() do { if (argc != 1) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes no arguments (%d given)", \ + _method_name(__func__), (argc-1)); } while (0) + +#define METHOD_TAKES_EXACTLY(n) do { if (argc != (n+1)) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ + _method_name(__func__), "exactly", n, (n != 1) ? "s" : "", (argc-1)); } while (0) + +#define METHOD_TAKES_AT_LEAST(n) do { if (argc < (n+1)) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ + _method_name(__func__), "at least", n, (n != 1) ? "s" : "", (argc-1)); } while (0) + +#define METHOD_TAKES_AT_MOST(n) do { if (argc > (n+1)) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ + _method_name(__func__), "at most", n, (n != 1) ? "s" : "", (argc-1)); } while (0) + +#define FUNCTION_TAKES_NONE() do { if (argc != 0) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes no arguments (%d given)", \ + _function_name(__func__), (argc)); } while (0) + +#define FUNCTION_TAKES_EXACTLY(n) do { if (argc != n) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ + _function_name(__func__), "exactly", n, (n != 1) ? "s" : "", (argc)); } while (0) + +#define FUNCTION_TAKES_AT_LEAST(n) do { if (argc < n) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ + _function_name(__func__), "at least", n, (n != 1) ? "s" : "", (argc)); } while (0) + +#define FUNCTION_TAKES_AT_MOST(n) do { if (argc > n) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ + _function_name(__func__), "at most", n, (n != 1) ? "s" : "", (argc)); } while (0) + +#define TYPE_ERROR(expected,value) krk_runtimeError(vm.exceptions->typeError, "%s() expects %s, not '%s'", \ + /* Function name */ _method_name(__func__), /* expected type */ #expected, krk_typeName(value)) + +#define NOT_ENOUGH_ARGS() krk_runtimeError(vm.exceptions->argumentError, "%s() missing required positional argument", \ + /* Function name */ _method_name(__func__)) + +#define CHECK_ARG(i, type, ctype, name) \ + if (argc < (i+1)) return NOT_ENOUGH_ARGS(); \ + if (!IS_ ## type (argv[i])) return TYPE_ERROR(type,argv[i]); \ + ctype name __attribute__((unused)) = AS_ ## type (argv[i]) + +#define FUNC_NAME(klass, name) _ ## klass ## _ ## name +#define FUNC_SIG(klass, name) _noexport KrkValue FUNC_NAME(klass,name) (int argc, KrkValue argv[], int hasKw) +#define KRK_METHOD(klass, name, body) FUNC_SIG(klass, name) { \ + CHECK_ARG(0,klass,CURRENT_CTYPE,CURRENT_NAME); \ + body; return NONE_VAL(); } + +#define KRK_FUNC(name,body) static KrkValue _krk_ ## name (int argc, KrkValue argv[], int hasKw) { \ + body; return NONE_VAL(); } + +/* This assumes you have a KrkInstance called `module` in the current scope. */ +#define MAKE_CLASS(klass) do { krk_makeClass(module,&klass,#klass,vm.baseClasses->objectClass); klass ->allocSize = sizeof(struct klass); } while (0) +#define BIND_METHOD(klass,method) krk_defineNative(&klass->methods, "." #method, _ ## klass ## _ ## method) +#define BIND_FIELD(klass,method) krk_defineNative(&klass->methods, ":" #method, _ ## klass ## _ ## method) +#define BIND_PROP(klass,method) krk_defineNativeProperty(&klass->methods, #method, _ ## klass ## _ ## method) +#define BIND_FUNC(module,func) krk_defineNative(&module->fields, #func, _krk_ ## func) + +/** + * @brief Inline flexible string array. + */ +struct StringBuilder { + size_t capacity; + size_t length; + char * bytes; +}; + +/** + * @brief Add a character to the end of a string builder. + * + * @param sb String builder to append to. + * @param c Character to append. + */ +static inline void pushStringBuilder(struct StringBuilder * sb, char c) { + if (sb->capacity < sb->length + 1) { + size_t old = sb->capacity; + sb->capacity = GROW_CAPACITY(old); + sb->bytes = GROW_ARRAY(char, sb->bytes, old, sb->capacity); + } + sb->bytes[sb->length++] = c; +} + +/** + * @brief Append a string to the end of a string builder. + * + * @param sb String builder to append to. + * @param str C string to add. + * @param len Length of the C string. + */ +static inline void pushStringBuilderStr(struct StringBuilder * sb, char *str, size_t len) { + if (sb->capacity < sb->length + len) { + while (sb->capacity < sb->length + len) { + size_t old = sb->capacity; + sb->capacity = GROW_CAPACITY(old); + } + sb->bytes = realloc(sb->bytes, sb->capacity); + } + for (size_t i = 0; i < len; ++i) { + sb->bytes[sb->length++] = *(str++); + } +} + +/** + * @brief Finalize a string builder into a string object. + * + * Creates a string object from the contents of the string builder and + * frees the space allocated for the builder, returning a value representing + * the newly created string object. + * + * @param sb String builder to finalize. + * @return A value representing a string object. + */ +static inline KrkValue finishStringBuilder(struct StringBuilder * sb) { + KrkValue out = OBJECT_VAL(krk_copyString(sb->bytes, sb->length)); + FREE_ARRAY(char,sb->bytes, sb->capacity); + return out; +} + +/** + * @brief Finalize a string builder in a bytes object. + * + * Converts the contents of a string builder into a bytes object and + * frees the space allocated for the builder. + * + * @param sb String builder to finalize. + * @return A value representing a bytes object. + */ +static inline KrkValue finishStringBuilderBytes(struct StringBuilder * sb) { + KrkValue out = OBJECT_VAL(krk_newBytes(sb->length, (uint8_t*)sb->bytes)); + FREE_ARRAY(char,sb->bytes, sb->capacity); + return out; +} + +/** + * @brief Discard the contents of a string builder. + * + * Frees the resources allocated for the string builder without converting + * it to a string or bytes object. Call this when an error has been encountered + * and the contents of a string builder are no longer needed. + * + * @param sb String builder to discard. + * @return None, as a convenience. + */ +static inline KrkValue discardStringBuilder(struct StringBuilder * sb) { + FREE_ARRAY(char,sb->bytes, sb->capacity); + return NONE_VAL(); +} + +#define IS_int(o) (IS_INTEGER(o)) +#define AS_int(o) (AS_INTEGER(o)) + +#define IS_bool(o) (IS_BOOLEAN(o)) +#define AS_bool(o) (AS_BOOLEAN(o)) + +#define IS_float(o) (IS_FLOATING(o)) +#define AS_float(o) (AS_FLOATING(o)) + +#define IS_list(o) krk_isInstanceOf(o,vm.baseClasses->listClass) +#define AS_list(o) (KrkList*)AS_OBJECT(o) + +#define IS_listiterator(o) krk_isInstanceOf(o,vm.baseClasses->listiteratorClass) +#define AS_listiterator(o) AS_INSTANCE(o) + +#define IS_str(o) (IS_STRING(o)||krk_isInstanceOf(o,vm.baseClasses->strClass)) +#define AS_str(o) (KrkString*)AS_OBJECT(o) + +#define IS_striterator(o) (krk_isInstanceOf(o,vm.baseClasses->striteratorClass)) +#define AS_striterator(o) (AS_INSTANCE(o)) + +#define IS_dict(o) krk_isInstanceOf(o,vm.baseClasses->dictClass) +#define AS_dict(o) (KrkDict*)AS_OBJECT(o) + +#define IS_dictitems(o) krk_isInstanceOf(o,vm.baseClasses->dictitemsClass) +#define AS_dictitems(o) ((struct DictItems*)AS_OBJECT(o)) + +#define IS_dictkeys(o) krk_isInstanceOf(o,vm.baseClasses->dictkeysClass) +#define AS_dictkeys(o) ((struct DictKeys*)AS_OBJECT(o)) + +#define IS_bytesiterator(o) (krk_isInstanceOf(o,vm.baseClasses->bytesiteratorClass)) +#define AS_bytesiterator(o) (AS_INSTANCE(o)) + +#ifndef unpackError +#define unpackError(fromInput) return krk_runtimeError(vm.exceptions->typeError, "'%s' object is not iterable", krk_typeName(fromInput)); +#endif + +#define unpackIterable(fromInput) do { \ + KrkClass * type = krk_getType(fromInput); \ + if (type->_iter) { \ + size_t stackOffset = krk_currentThread.stackTop - krk_currentThread.stack; \ + krk_push(fromInput); \ + krk_push(krk_callSimple(OBJECT_VAL(type->_iter), 1, 0)); \ + do { \ + krk_push(krk_currentThread.stack[stackOffset]); \ + krk_push(krk_callSimple(krk_peek(0), 0, 1)); \ + if (krk_valuesSame(krk_currentThread.stack[stackOffset], krk_peek(0))) { \ + krk_pop(); \ + krk_pop(); \ + break; \ + } \ + unpackArray(1,krk_peek(0)); \ + krk_pop(); \ + } while (1); \ + } else { \ + unpackError(fromInput); \ + } \ +} while (0) + +#define unpackIterableFast(fromInput) do { \ + KrkValue iterableValue = (fromInput); \ + if (IS_TUPLE(iterableValue)) { \ + unpackArray(AS_TUPLE(iterableValue)->values.count, AS_TUPLE(iterableValue)->values.values[i]); \ + } else if (IS_INSTANCE(iterableValue) && AS_INSTANCE(iterableValue)->_class == vm.baseClasses->listClass) { \ + unpackArray(AS_LIST(iterableValue)->count, AS_LIST(iterableValue)->values[i]); \ + } else if (IS_INSTANCE(iterableValue) && AS_INSTANCE(iterableValue)->_class == vm.baseClasses->dictClass) { \ + unpackArray(AS_DICT(iterableValue)->count, krk_dict_nth_key_fast(AS_DICT(iterableValue)->capacity, AS_DICT(iterableValue)->entries, i)); \ + } else if (IS_STRING(iterableValue)) { \ + unpackArray(AS_STRING(iterableValue)->codesLength, krk_string_get(2,(KrkValue[]){iterableValue,INTEGER_VAL(i)},0)); \ + } else { \ + unpackIterable(iterableValue); \ + } \ +} while (0) + +static inline void _setDoc_class(KrkClass * thing, const char * text, size_t size) { + thing->docstring = krk_copyString(text, size); +} +static inline void _setDoc_instance(KrkInstance * thing, const char * text, size_t size) { + krk_attachNamedObject(&thing->fields, "__doc__", (KrkObj*)krk_copyString(text, size)); +} +static inline void _setDoc_native(KrkNative * thing, const char * text, size_t size) { + (void)size; + thing->doc = text; +} + +/** + * @def KRK_DOC(thing,text) + * @brief Attach documentation to a thing of various types. + * + * Classes store their docstrings directly, rather than in their attribute tables. + * Instances use the attribute table and store strings with the name @c \__doc__. + * Native functions store direct C string pointers for documentation. + * + * This macro provides a generic interface for applying documentation strings to + * any of the above types, and handles not attaching documentation when built + * with KRK_NO_DOCUMENTATION. + */ +#ifdef KRK_NO_DOCUMENTATION +# define KRK_DOC(thing, text) (thing); +#else +# define KRK_DOC(thing, text) \ + _Generic(&((thing)[0]), \ + KrkClass*: _setDoc_class, \ + KrkInstance*: _setDoc_instance, \ + KrkNative*: _setDoc_native \ + )(thing,text,sizeof(text)-1) +#endif + +#define BUILTIN_FUNCTION(name, func, docStr) KRK_DOC(krk_defineNative(&vm.builtins->fields, name, func), docStr) + diff --git a/base/usr/include/kuroko/value.h b/base/usr/include/kuroko/value.h new file mode 100644 index 00000000..79587ae1 --- /dev/null +++ b/base/usr/include/kuroko/value.h @@ -0,0 +1,210 @@ +#pragma once +/** + * @file value.h + * @brief Definitions for primitive stack references. + */ +#include +#include "kuroko.h" + +/** + * @brief Base structure of all heap objects. + * + * KrkObj is the base type of all objects stored on the heap and + * managed by the garbage collector. + */ +typedef struct KrkObj KrkObj; +typedef struct KrkString KrkString; + +/** + * @brief Tag enum for basic value types. + * + * Value types are tagged unions of a handful of small + * types represented directly on the stack: Integers, + * double-precision floating point values, booleans, + * exception handler references, complex function argument + * processing sentinels, object reference pointers, and None. + */ +typedef enum { + KRK_VAL_NONE, + KRK_VAL_BOOLEAN, + KRK_VAL_INTEGER, + KRK_VAL_FLOATING, + KRK_VAL_HANDLER, + KRK_VAL_OBJECT, + KRK_VAL_KWARGS, +} KrkValueType; + +/** + * @brief Stack value representation of a 'with' or 'try' block. + * + * When a 'with' or 'try' block is entered, a handler value is + * created on the stack representing the type (with, try) and the + * jump target to leave the block (entering the 'except' block of + * a 'try', if present, or calling the __exit__ method of an object + * __enter__'d by a 'with' block). When the relevant conditions are + * triggered in the VM, the stack will be scanned from top to bottom + * to look for these values. + */ +typedef struct { + unsigned short type; + unsigned short target; +} KrkJumpTarget; + +/** + * @brief Stack reference or primative value. + * + * This type stores a stack reference to an object, or the contents of + * a primitive type. Each VM thread's stack consists of an array of + * these values, and they are generally passed around in the VM through + * direct copying rather than as pointers, avoiding the need to track + * memory used by them. + * + * Each value is a tagged union with a type (see the enum KrkValueType) + * and its contents. + */ +typedef struct { + KrkValueType type; + union { + char boolean; + krk_integer_type integer; + double floating; + KrkJumpTarget handler; + KrkObj * object; + } as; +} KrkValue; + +/** + * @brief Flexible vector of stack references. + * + * Value Arrays provide a resizable collection of values and are the + * backbone of lists and tuples. + */ +typedef struct { + size_t capacity; /**< Available allocated space. */ + size_t count; /**< Current number of used slots. */ + KrkValue * values; /**< Pointer to heap-allocated storage. */ +} KrkValueArray; + +/** + * @brief Initialize a value array. + * @memberof KrkValueArray + * + * This should be called for any new value array, especially ones + * initialized in heap or stack space, to set up the capacity, count + * and initial value pointer. + * + * @param array Value array to initialize. + */ +extern void krk_initValueArray(KrkValueArray * array); + +/** + * @brief Add a value to a value array. + * @memberof KrkValueArray + * + * Appends 'value' to the end of the given array, adjusting count values + * and resizing as necessary. + * + * @param array Array to append to. + * @param value Value to append to array. + */ +extern void krk_writeValueArray(KrkValueArray * array, KrkValue value); + +/** + * @brief Release relesources used by a value array. + * @memberof KrkValueArray + * + * Frees the storage associated with a given value array and resets + * its capacity and count. Does not directly free resources associated + * with heap objects referenced by the values in this array: The GC + * is responsible for taking care of that. + * + * @param array Array to release. + */ +extern void krk_freeValueArray(KrkValueArray * array); + +/** + * @brief Print a string representation of a value. + * @memberof KrkValue + * + * Print a string representation of 'value' to the stream 'f'. + * For primitives, performs appropriate formatting. For objects, + * this will call __str__ on the object's representative type. + * If the type does not have a __str__ method, __repr__ will be + * tried before falling back to krk_typeName to directly print + * the name of the class with no information on the value. + * + * This function provides the backend for the print() built-in. + * + * @param f Stream to write to. + * @param value Value to display. + */ +extern void krk_printValue(FILE * f, KrkValue value); + +/** + * @brief Print a value without calling the VM. + * @memberof KrkValue + * + * Print a string representation of 'value' to the stream 'f', + * avoiding calls to managed code by using simplified representations + * where necessary. This is intended for use in debugging code, such + * as during disassembly, or when printing values in an untrusted context. + * + * @note This function will truncate long strings and print them in a form + * closer to the 'repr()' representation, with escaped bytes, rather + * than directly printing them to the stream. + * + * @param f Stream to write to. + * @param value Value to display. + */ +extern void krk_printValueSafe(FILE * f, KrkValue value); + +/** + * @brief Compare two values for equality. + * @memberof KrkValue + * + * Performs a relaxed equality comparison between two values, + * check for equivalence by contents. This may call managed + * code to run __eq__ methods. + * + * @return 1 if values are equivalent, 0 otherwise. + */ +extern int krk_valuesEqual(KrkValue a, KrkValue b); + +/** + * @brief Compare two values by identity. + * @memberof KrkValue + * + * Performs a strict comparison between two values, comparing + * their identities. For primitive values, this is generally + * the same as comparing by equality. For objects, this compares + * pointer values directly. + * + * @return 1 if values represent the same object or value, 0 otherwise. + */ +extern int krk_valuesSame(KrkValue a, KrkValue b); + +#define BOOLEAN_VAL(value) ((KrkValue){KRK_VAL_BOOLEAN, {.integer = value}}) +#define NONE_VAL(value) ((KrkValue){KRK_VAL_NONE, {.integer = 0}}) +#define INTEGER_VAL(value) ((KrkValue){KRK_VAL_INTEGER, {.integer = value}}) +#define FLOATING_VAL(value) ((KrkValue){KRK_VAL_FLOATING,{.floating = value}}) +#define HANDLER_VAL(ty,ta) ((KrkValue){KRK_VAL_HANDLER, {.handler = (KrkJumpTarget){.type = ty, .target = ta}}}) +#define OBJECT_VAL(value) ((KrkValue){KRK_VAL_OBJECT, {.object = (KrkObj*)value}}) +#define KWARGS_VAL(value) ((KrkValue){KRK_VAL_KWARGS, {.integer = value}}) + +#define AS_BOOLEAN(value) ((value).as.integer) +#define AS_INTEGER(value) ((value).as.integer) +#define AS_FLOATING(value) ((value).as.floating) +#define AS_HANDLER(value) ((value).as.handler) +#define AS_OBJECT(value) ((value).as.object) + +#define IS_BOOLEAN(value) ((value).type == KRK_VAL_BOOLEAN) +#define IS_NONE(value) ((value).type == KRK_VAL_NONE) +#define IS_INTEGER(value) (((value).type == KRK_VAL_INTEGER) || ((value.type) == KRK_VAL_BOOLEAN)) +#define IS_FLOATING(value) ((value).type == KRK_VAL_FLOATING) +#define IS_HANDLER(value) ((value).type == KRK_VAL_HANDLER) +#define IS_OBJECT(value) ((value).type == KRK_VAL_OBJECT) +#define IS_KWARGS(value) ((value).type == KRK_VAL_KWARGS) + +#define IS_TRY_HANDLER(value) (IS_HANDLER(value) && AS_HANDLER(value).type == OP_PUSH_TRY) +#define IS_WITH_HANDLER(value) (IS_HANDLER(value) && AS_HANDLER(value).type == OP_PUSH_WITH) + diff --git a/base/usr/include/kuroko/vm.h b/base/usr/include/kuroko/vm.h new file mode 100644 index 00000000..41ea3983 --- /dev/null +++ b/base/usr/include/kuroko/vm.h @@ -0,0 +1,820 @@ +#pragma once +/** + * @file vm.h + * @brief Core API for the bytecode virtual machine. + * + * Functions and structures declared here make up the bulk of the public C API + * for Kuroko, including initializing the VM and passing code to be interpreted. + */ +#include +#include +#include "kuroko.h" +#include "value.h" +#include "table.h" +#include "object.h" + +/** + * @def KRK_CALL_FRAMES_MAX + * @brief Maximum depth of the call stack in managed-code function calls. + */ +#define KRK_CALL_FRAMES_MAX 64 + +/** + * @def KRK_THREAD_SCRATCH_SIZE + * @brief Extra space for each thread to store a set of working values safe from the GC. + * + * Various operations require threads to remove values from the stack but ensure + * they are not lost to garbage collection. This space allows each thread to keep + * a few things around during those operations. + */ +#define KRK_THREAD_SCRATCH_SIZE 3 + +/** + * @brief Represents a managed call state in a VM thread. + * + * For every managed function call, including the top-level module, + * a call frame is added to the stack to track the running function, + * the current opcode instruction, the offset into the stack, and + * the valid globals table. + * + * Call frames are used directly by the VM as the source of + * opcodes and operands during execution, and are used by the exception + * handler to roll back execution to the appropriate environment. + */ +typedef struct { + KrkClosure * closure; /**< Pointer to the function object containing the code object for this frame */ + uint8_t * ip; /**< Instruction pointer within the code object's bytecode data */ + size_t slots; /**< Offset into the stack at which this function call's arguments begin */ + size_t outSlots; /**< Offset into the stack at which stackTop will be reset upon return */ + KrkTable * globals; /**< Pointer to the attribute table containing valud global vairables for this call */ +} KrkCallFrame; + +/** + * @brief Index numbers for always-available interned strings representing important method and member names. + * + * The VM must look up many methods and members by fixed names. To avoid + * continuously having to box and unbox these from C strings to the appropriate + * interned @c KrkString, we keep an array of the @c KrkString pointers in the global VM state. + * + * These values are the offsets into that index for each of the relevant + * function names (generally with extra underscores removed). For example + * @c METHOD_INIT is the offset for the string value for @c "__init__". + */ +typedef enum { + METHOD_INIT, + METHOD_STR, + METHOD_REPR, + METHOD_GET, + METHOD_SET, + METHOD_CLASS, + METHOD_NAME, + METHOD_FILE, + METHOD_INT, + METHOD_FLOAT, + METHOD_CHR, + METHOD_LEN, + METHOD_DOC, + METHOD_BASE, + METHOD_GETSLICE, + METHOD_ORD, + METHOD_CALL, + METHOD_EQ, + METHOD_ENTER, + METHOD_EXIT, + METHOD_DELITEM, + METHOD_ITER, + METHOD_GETATTR, + METHOD_DIR, + METHOD_SETSLICE, + METHOD_DELSLICE, + METHOD_CONTAINS, + METHOD_DESCGET, + METHOD_DESCSET, + METHOD_CLASSGETITEM, + + METHOD__MAX, +} KrkSpecialMethods; + +/** + * @brief Table of basic exception types. + * + * These are the core exception types, available in managed code + * from the builtin namespace. A single instance of this struct + * is attached to the global VM state so that C code can quickly + * access these exception types for use with krk_runtimeException. + * + * @see krk_runtimeException + */ +struct Exceptions { + KrkClass * baseException; /**< @exception Exception The base exception type. */ + KrkClass * typeError; /**< @exception TypeError An argument or value was not of the expected type. */ + KrkClass * argumentError; /**< @exception ArgumentException The number of arguments passed to a function was not as expected. */ + KrkClass * indexError; /**< @exception IndexError An attempt was made to reference an invalid array index. */ + KrkClass * keyError; /**< @exception KeyError An attempt was made to reference an invalid mapping key. */ + KrkClass * attributeError; /**< @exception AttributeError An attempt was made to reference an invalid object property. */ + KrkClass * nameError; /**< @exception NameError An attempt was made to reference an undeclared global variable. */ + KrkClass * importError; /**< @exception ImportError An error was encountered when attempting to import a module. */ + KrkClass * ioError; /**< @exception IOError An error was encountered in operating system's IO library. */ + KrkClass * valueError; /**< @exception ValueError The value of a parameter or variable is not valid. */ + KrkClass * keyboardInterrupt; /**< @exception KeyboardInterrupt An interrupt signal was received. */ + KrkClass * zeroDivisionError; /**< @exception ZeroDivisionError A mathematical function attempted to divide by zero. */ + KrkClass * notImplementedError; /**< @exception NotImplementedError The method is not implemented, either for the given arguments or in general. */ + KrkClass * syntaxError; /**< @exception SyntaxError The compiler encountered an unrecognized or invalid source code input. */ + KrkClass * assertionError; /**< @exception AssertionError An @c assert statement failed. */ +}; + +/** + * @brief Table of classes for built-in object types. + * + * For use by C modules and within the VM, an instance of this struct + * is attached to the global VM state. At VM initialization, each + * built-in class is attached to this table, and the class values + * stored here are used for integrated type checking with krk_isInstanceOf. + * + * @note As this and other tables are used directly by embedders, do not + * reorder the layout of the individual class pointers, even if + * it looks nicer. The ordering here is part of our library ABI. + */ +struct BaseClasses { + KrkClass * objectClass; /**< The base of all classes within the type tree. */ + KrkClass * moduleClass; /**< A class for representing imported modules, both managed and C. */ + KrkClass * typeClass; /**< Classes themselves are of this class. */ + KrkClass * intClass; /**< Primitive integer type. */ + KrkClass * floatClass; /**< Primitive double-precision floating-point type. */ + KrkClass * boolClass; /**< Primitive boolean type. */ + KrkClass * noneTypeClass; /**< The class of the None value. */ + KrkClass * strClass; /**< Built-in Unicode string type. */ + KrkClass * functionClass; /**< Represents a function object (KrkClosure) or native bind (KrkNative) */ + KrkClass * methodClass; /**< Represents a bound method (KrkBoundMethod) */ + KrkClass * tupleClass; /**< An immutable collection of arbitrary values. */ + KrkClass * bytesClass; /**< An immutable sequence of bytes. */ + KrkClass * listiteratorClass; /**< Iterator over lists */ + KrkClass * rangeClass; /**< An object representing a start and end point for a sequence of integers. */ + KrkClass * rangeiteratorClass; /**< Iterator over a range of values */ + KrkClass * striteratorClass; /**< Iterator over characters (by codepoint) in a string */ + KrkClass * tupleiteratorClass; /**< Iterator over values in a tuple */ + KrkClass * listClass; /**< Mutable collection of arbitrary values. */ + KrkClass * dictClass; /**< Mutable mapping of hashable keys to arbitrary values. */ + KrkClass * dictitemsClass; /**< Iterator over the (key,value) pairs of a dict */ + KrkClass * dictkeysClass; /**< Iterator over the keys of a dict */ + KrkClass * bytesiteratorClass; /**< Iterator over the integer byte values of a bytes object. */ + KrkClass * propertyClass; /**< Magic object that calls a function when accessed from an instance through the dot operator. */ + KrkClass * codeobjectClass; /**< Static compiled bytecode container (KrkCodeObject) */ + KrkClass * generatorClass; /**< Generator object. */ +}; + +/** + * @brief Execution state of a VM thread. + * + * Each thread in the VM has its own local thread state, which contains + * the thread's stack, stack pointer, call frame stack, a thread-specific + * VM flags bitarray, and an exception state. + * + * @see krk_currentThread + */ +typedef struct KrkThreadState { + struct KrkThreadState * next; /**< Invasive list pointer to next thread. */ + + KrkCallFrame * frames; /**< Call frame stack for this thread, max KRK_CALL_FRAMES_MAX */ + size_t frameCount; /**< Number of active call frames. */ + size_t stackSize; /**< Size of the allocated stack space for this thread. */ + KrkValue * stack; /**< Pointer to the bottom of the stack for this thread. */ + KrkValue * stackTop; /**< Pointer to the top of the stack. */ + KrkUpvalue * openUpvalues; /**< Flexible array of unclosed upvalues. */ + ssize_t exitOnFrame; /**< When called in a nested context, the frame offset to exit the VM dispatch loop on. */ + + KrkInstance * module; /**< The current module execution context. */ + KrkValue currentException; /**< When an exception is thrown, it is stored here. */ + int flags; /**< Thread-local VM flags; each thread inherits the low byte of the global VM flags. */ + long watchdog; /**< Decrementing watchdog timer for embedding. */ + + KrkValue scratchSpace[KRK_THREAD_SCRATCH_SIZE]; /**< A place to store a few values to keep them from being prematurely GC'd. */ +} KrkThreadState; + +/** + * @brief Global VM state. + * + * This state is shared by all VM threads and stores the + * path to the VM binary, global execution flags, the + * string and module tables, tables of builtin types, + * and the state of the (shared) garbage collector. + */ +typedef struct KrkVM { + int globalFlags; /**< Global VM state flags */ + char * binpath; /**< A string representing the name of the interpreter binary. */ + KrkTable strings; /**< Strings table */ + KrkTable modules; /**< Module cache */ + KrkInstance * builtins; /**< '\__builtins__' module */ + KrkInstance * system; /**< 'kuroko' module */ + KrkValue * specialMethodNames; /**< Cached strings of important method and function names */ + struct BaseClasses * baseClasses; /**< Pointer to a (static) namespacing struct for the KrkClass*'s of built-in object types */ + struct Exceptions * exceptions; /**< Pointer to a (static) namespacing struct for the KrkClass*'s of basic exception types */ + + /* Garbage collector state */ + KrkObj * objects; /**< Linked list of all objects in the GC */ + size_t bytesAllocated; /**< Running total of bytes allocated */ + size_t nextGC; /**< Point at which we should sweep again */ + size_t grayCount; /**< Count of objects marked by scan. */ + size_t grayCapacity; /**< How many objects we can fit in the scan list. */ + KrkObj** grayStack; /**< Scan list */ + + KrkThreadState * threads; /**< Invasive linked list of all VM threads. */ +} KrkVM; + +/* Thread-specific flags */ +#define KRK_THREAD_ENABLE_TRACING (1 << 0) +#define KRK_THREAD_ENABLE_DISASSEMBLY (1 << 1) +#define KRK_THREAD_ENABLE_SCAN_TRACING (1 << 2) +#define KRK_THREAD_HAS_EXCEPTION (1 << 3) +#define KRK_THREAD_SINGLE_STEP (1 << 4) +#define KRK_THREAD_SIGNALLED (1 << 5) + +/* Global flags */ +#define KRK_GLOBAL_ENABLE_STRESS_GC (1 << 8) +#define KRK_GLOBAL_GC_PAUSED (1 << 9) +#define KRK_GLOBAL_CLEAN_OUTPUT (1 << 10) + +#ifdef ENABLE_THREADING +# define threadLocal __thread +#else +# define threadLocal +#endif + +/** + * @brief Thread-local VM state. + * + * See @c KrkThreadState for more information. + */ +#if defined(_WIN32) && !defined(KRKINLIB) +#define krk_currentThread (*krk_getCurrentThread()) +#else +extern threadLocal KrkThreadState krk_currentThread; +#endif + +/** + * @brief Singleton instance of the shared VM state. + */ +extern KrkVM krk_vm; + +/** + * @def vm + * @brief Convenience macro for namespacing. + */ +#define vm krk_vm + +/** + * @brief Initialize the VM at program startup. + * @memberof KrkVM + * + * All library users must call this exactly once on startup to create + * the built-in types, modules, and functions for the VM and prepare + * the string and module tables. Optionally, callers may set `vm.binpath` + * before calling krk_initVM to allow the VM to locate the interpreter + * binary and establish the default module paths. + * + * @param flags Combination of global VM flags and initial thread flags. + */ +extern void krk_initVM(int flags); + +/** + * @brief Release resources from the VM. + * @memberof KrkVM + * + * Generally, it is desirable to call this once before the hosting program exits. + * If a fresh VM state is needed, krk_freeVM should be called before a further + * call to krk_initVM is made. The resources released here can include allocated + * heap memory, FILE pointers or descriptors, or various other things which were + * initialized by C extension modules. + */ +extern void krk_freeVM(void); + +/** + * @brief Reset the current thread's stack state to the top level. + * + * In a repl, this should be called before or after each iteration to clean up any + * remnant stack entries from an uncaught exception. It should not be called + * during normal execution by C extensions. Values on the stack may be lost + * to garbage collection after a call to @c krk_resetStack . + */ +extern void krk_resetStack(void); + +/** + * @brief Compile and execute a source code input. + * + * This is the lowest level call for most usecases, including execution + * of commands from a REPL or when executing a file. + * + * @param src Source code to compile and run. + * @param fromFile Path to the source file, or a representative string like "". + * @return The value of the executed code, which is either the value of an explicit 'return' + * statement, or the last expression value from an executed statement. If an uncaught + * exception occurred, this will be @c None and @c krk_currentThread.flags should + * indicate @c KRK_THREAD_HAS_EXCEPTION and @c krk_currentThread.currentException + * should contain the raised exception value. + */ +extern KrkValue krk_interpret(const char * src, char * fromFile); + +/** + * @brief Load and run a source file and return when execution completes. + * + * Loads and runs a source file. Can be used by interpreters to run scripts, + * either in the context of a new a module or as if they were continuations + * of the current module state (eg. as if they were lines entered on a repl) + * + * @param fileName Path to the source file to read and execute. + * @param fromFile Value to assign to @c \__file__ + * @return As with @c krk_interpret, an object representing the newly created module, + * or the final return value of the VM execution. + */ +extern KrkValue krk_runfile(const char * fileName, char * fromFile); + +/** + * @brief Load and run a file as a module. + * + * Similar to @c krk_runfile but ensures that execution of the VM returns to the caller + * after the file is run. This should be run after calling @c krk_startModule to initialize + * a new module context and is used internally by the import mechanism. + * + * @param fileName Path to the source file to read and execute. + * @param fromFile Value to assign to @c \__file__ + * @return The object representing the module, or None if execution of the file failed. + */ +extern KrkValue krk_callfile(const char * fileName, char * fromFile); + +/** + * @brief Push a stack value. + * + * Pushes a value onto the current thread's stack, triggering a + * stack resize if there is not enough space to hold the new value. + * + * @param value Value to push. + */ +extern void krk_push(KrkValue value); + +/** + * @brief Pop the top of the stack. + * + * Removes and returns the value at the top of current thread's stack. + * Generally, it is preferably to leave values on the stack and use + * krk_peek if the value is desired, as removing a value from the stack + * may result in it being garbage collected. + * + * @return The value previously at the top of the stack. + */ +extern KrkValue krk_pop(void); + +/** + * @brief Peek down from the top of the stack. + * + * Obtains a value from the current thread's stack without modifying the stack. + * + * @param distance How far down from the top of the stack to peek (0 = the top) + * @return The value from the stack. + */ +extern KrkValue krk_peek(int distance); + +/** + * @brief Swap the top of the stack of the value @p distance slots down. + * + * Exchanges the values at the top of the stack and @p distance slots from the top + * without removing or shuffling anything in between. + * + * @param distance How from down from the top of the stack to swap (0 = the top) + */ +extern void krk_swap(int distance); + +/** + * @brief Get the name of the type of a value. + * @memberof KrkValue + * + * Obtains the C string representing the name of the class + * associated with the given value. Useful for crafting + * exception messages, such as those describing TypeErrors. + * + * @param value Value to examine + * @return Nul-terminated C string of the type of @p value + */ +extern const char * krk_typeName(KrkValue value); + +/** + * @brief Attach a native C function to an attribute table. + * @memberof KrkTable + * + * Attaches the given native function pointer to an attribute table + * while managing the stack shuffling and boxing of both the name and + * the function object. If @p name begins with a '.', the native function + * is marked as a method. If @p name begins with a ':', the native function + * is marked as a dynamic property. + * + * @param table Attribute table to attach to, such as @c &someInstance->fields + * @param name Nil-terminated C string with the name to assign + * @param function Native function pointer to attach + * @return A pointer to the object representing the attached function. + */ +extern KrkNative * krk_defineNative(KrkTable * table, const char * name, NativeFn function); + +/** + * @brief Attach a native dynamic property to an attribute table. + * @memberof KrkTable + * + * Mostly the same as @c krk_defineNative, but ensures the creation of a dynamic property. + * The intention of this function is to replace uses of defineNative with ":" names, + * and replace specialized methods with @c KrkProperty* objects. + * + * @param table Attribute table to attach to, such as @c &someInstance->fields + * @param name Nil-terminated C string with the name to assign + * @param func Native function pointer to attach + * @return A pointer to the property object created. + */ +extern KrkNative * krk_defineNativeProperty(KrkTable * table, const char * name, NativeFn func); + +/** + * @brief Attach a value to an attribute table. + * @memberof KrkTable + * + * Manages the stack shuffling and boxing of the name string when attaching + * a value to an attribute table. Rather than using @c krk_tableSet, this is + * the preferred method of supplying fields to objects from C code. + * + * @param table Attribute table to attach to, such as @c &someInstance->fields + * @param name Nil-terminated C string with the name to assign + * @param obj Value to attach. + */ +extern void krk_attachNamedValue(KrkTable * table, const char name[], KrkValue obj); + +/** + * @brief Attach an object to an attribute table. + * @memberof KrkTable + * + * Manages the stack shuffling and boxing of the name string when attaching + * an object to an attribute table. Rather than using @c krk_tableSet, this is + * the preferred method of supplying fields to objects from C code. + * + * This is a convenience wrapper around @c krk_attachNamedValue. + * + * @param table Attribute table to attach to, such as @c &someInstance->fields + * @param name Nil-terminated C string with the name to assign + * @param obj Object to attach. + */ +extern void krk_attachNamedObject(KrkTable * table, const char name[], KrkObj * obj); + +/** + * @brief Raise an exception. + * + * Creates an instance of the given exception type, passing a formatted + * string to the initializer. All of the core exception types take an option + * string value to attach to the exception, but third-party exception types + * may have different initializer signatures and need separate initialization. + * + * The created exception object is attached to the current thread state and + * the @c KRK_THREAD_HAS_EXCEPTION flag is set. + * + * @param type Class pointer for the exception type, eg. @c vm.exceptions->valueError + * @param fmt Format string. + * @return As a convenience to C extension authors, returns @c None + */ +extern KrkValue krk_runtimeError(KrkClass * type, const char * fmt, ...); + +/** + * @brief Get a pointer to the current thread state. + * + * Generally equivalent to @c &krk_currentThread, though @c krk_currentThread + * itself may be implemented as a macro that calls this function depending + * on the platform's thread support. + * + * @return Pointer to current thread's thread state. + */ +extern KrkThreadState * krk_getCurrentThread(void); + +/** + * @brief Continue VM execution until the next exit trigger. + * + * Resumes the VM dispatch loop, returning to the caller when + * the next exit trigger event happens. Generally, callers will + * want to set the current thread's exitOnFrame before calling + * @c krk_runNext. Alternatively, see @c krk_callValue which manages + * exit triggers automatically when calling function objects. + * + * @return Value returned by the exit trigger, generally the value + * returned by the inner function before the VM returned + * to the exit frame. + */ +extern KrkValue krk_runNext(void); + +/** + * @brief Get the class representing a value. + * @memberof KrkValue + * + * Returns the class object representing the type of a value. + * This may be the direct class of an instance, or a pseudoclass + * for other value types. + * + * @param value Reference value to examine. + * @return A pointer to the value's type's class object. + */ +extern KrkClass * krk_getType(KrkValue value); + +/** + * @brief Determine if a class is an instance or subclass of a given type. + * @memberof KrkValue + * + * Searches the class hierarchy of the given value to determine if it is + * a subtype of @p type. As this chains through the inheritence tree, the + * more deeply subclassed @p obj is, the longer it may take to determine + * if it is a subtype of @p type. All types should eventually be subtypes + * of the @ref object type, so this condition should not be checked. For + * some types, convenience macros are available. If you need to check if + * @p obj is a specific type, exclusive of subtypes, look at + * @c krk_getType() instead of using this function. + * + * @param obj Value to examine. + * @param type Class object to test for membership of. + * @return 1 if @p obj is an instance of @p type or of a subclass of @p type + */ +extern int krk_isInstanceOf(KrkValue obj, KrkClass * type); + +/** + * @brief Perform method binding on the stack. + * @memberof KrkClass + * + * Performs attribute lookup from the class @p _class for @p name. + * If @p name is not a valid method, the binding fails. + * If @p name is a valid method, the method will be retrieved and + * bound to the instance on the top of the stack, replacing it + * with a @ref BoundMethod object. + * + * @param _class Class object to resolve methods from. + * @param name String object with the name of the method to resolve. + * @return 1 if the method has been bound, 0 if binding failed. + */ +extern int krk_bindMethod(KrkClass * _class, KrkString * name); + +/** + * @brief Call a callable value in the current stack context. + * @memberof KrkValue + * + * Executes the given callable object (function, bound method, object + * with a @c \__call__() method, etc.) using @p argCount arguments from the stack. + * + * @param callee Value referencing a callable object. + * @param argCount Arguments to retreive from stack. + * @param extra Whether extra arguments below argCount should be + * considered as part of this call frame. Generally, + * when this is 1, the value below the arguments is + * the callable object. Most library users will want + * to leave this as 0 when calling normal functions, + * bound method objects, or ubound methods when the + * instance is included in the arguments already. + * @return An indicator of how the result should be obtained: + * 1: The VM must be resumed to run managed code. + * 2: The callable was a native function and result should be popped now. + * Else: The call failed. An exception may have already been set. + */ +extern int krk_callValue(KrkValue callee, int argCount, int extra); + +/** + * @brief Create a list object. + * @memberof KrkList + * + * This is the native function bound to @c listOf + */ +extern KrkValue krk_list_of(int argc, KrkValue argv[], int hasKw); + +/** + * @brief Create a dict object. + * @memberof KrkDict + * + * This is the native function bound to @c dictOf + */ +extern KrkValue krk_dict_of(int argc, KrkValue argv[], int hasKw); + +/** + * @brief Create a tuple object. + * @memberof KrkTuple + * + * This is the native function bound to @c tupleOf + */ +extern KrkValue krk_tuple_of(int argc, KrkValue argv[], int hasKw); + +/** + * @brief Create a set object. + * @memberof Set + * + * This is the native function bound to @c setOf + */ +extern KrkValue krk_set_of(int argc, KrkValue argv[], int hasKw); + +/** + * @brief Call a callable and manage VM state to obtain the return value. + * @memberof KrkValue + * + * This is a wrapper around various mechanisms including krk_callValue + * intended for use by C extensions to call arbitrary functions without + * knowledge of their implementation details. See the notes for + * @c krk_callValue 's @c extra paramater for details on how @p isMethod is used. + * + * @param value Callable object reference. + * @param argCount Arguments to collect from the stack. + * @param isMethod This should almost always be 0. + * @return The return value of the function. + */ +extern KrkValue krk_callSimple(KrkValue value, int argCount, int isMethod); + +/** + * @brief Convenience function for creating new types. + * @memberof KrkClass + * + * Creates a class object, output to @p _class, setting its name to @p name, inheriting + * from @p base, and attaching it with its name to the fields table of the given @p module. + * + * @param module Pointer to an instance for a module to attach to, or @c NULL to skip attaching. + * @param _class Output pointer to assign the new class object to. + * @param name Name of the new class. + * @param base Pointer to class object to inherit from. + * @return A pointer to the class object, equivalent to the value assigned to @p _class. + */ +extern KrkClass * krk_makeClass(KrkInstance * module, KrkClass ** _class, const char * name, KrkClass * base); + +/** + * @brief Finalize a class by collecting pointers to core methods. + * @memberof KrkClass + * + * Scans through the methods table of a class object to find special + * methods and assign them to the class object's pointer table so they + * can be referenced directly without performing hash lookups. + * + * @param _class Class object to finalize. + */ +extern void krk_finalizeClass(KrkClass * _class); + +/** + * @brief If there is an active exception, print a traceback to @c stderr + * + * This function is exposed as a convenience for repl developers. Normally, + * the VM will call @c krk_dumpTraceback() itself if an exception is unhandled and no + * exit trigger is current set. The traceback is obtained from the exception + * object. If the exception object does not have a traceback, only the + * exception itself will be printed. The traceback printer will attempt to + * open source files to print faulting lines and may call into the VM if the + * exception object has a managed implementation of @c \__str__. + */ +extern void krk_dumpTraceback(); + +/** + * @brief Set up a new module object in the current thread. + * + * Creates a new instance of the module type and attaches a @c \__builtins__ + * reference to its fields. The module becomes the current thread's + * main module, but is not directly attached to the module table. + * + * @param name Name of the module, which is assigned to @c \__name__ + * @return The instance object representing the module. + */ +extern KrkInstance * krk_startModule(const char * name); + +/** + * @brief Obtain a list of properties for an object. + * + * This is the native function bound to @c object.__dir__ + */ +extern KrkValue krk_dirObject(int argc, KrkValue argv[], int hasKw); + +/** + * @brief Load a module from a file with a specified name. + * + * This is generally called by the import mechanisms to load a single module and + * will establish a module context internally to load the new module into, return + * a KrkValue representing that module context through the @p moduleOut parameter. + * + * @param path Dotted path of the module, used for file lookup. + * @param moduleOut Receives a value with the module object. + * @param runAs Name to attach to @c \__name__ for this module, different from @p path + * @return 1 if the module was loaded, 0 if an @ref ImportError occurred. + */ +extern int krk_loadModule(KrkString * path, KrkValue * moduleOut, KrkString * runAs); + +/** + * @brief Load a module by a dotted name. + * + * Given a package identifier, attempt to the load module into the module table. + * This is a thin wrapper around `krk_importModule()`. + * + * @param name String object of the dot-separated package path to import. + * @return 1 if the module was loaded, 0 if an @ref ImportError occurred. + */ +extern int krk_doRecursiveModuleLoad(KrkString * name); + +/** + * @brief Load the dotted name @p name with the final element as @p runAs + * + * If @p name was imported previously with a name different from @p runAs, + * it will be imported again with the new name; this may result in + * unexpected behaviour. Generally, @p runAs is used to specify that the + * module should be run as `__main__`. + * + * @param name Dotted path name of a module. + * @param runAs Alternative name to attach to @c \__name__ for the module. + * @return 1 on success, 0 on failure. + */ +extern int krk_importModule(KrkString * name, KrkString * runAs); + +/** + * @brief Determine the truth of a value. + * @memberof KrkValue + * + * Determines if a value represents a "falsey" value. + * Empty collections, 0-length strings, False, numeric 0, + * None, etc. are "falsey". Other values are generally "truthy". + * + * @param value Value to examine. + * @return 1 if falsey, 0 if truthy + */ +extern int krk_isFalsey(KrkValue value); + +/** + * @brief Obtain a property of an object by name. + * @memberof KrkValue + * + * This is a convenience function that works in essentially the + * same way as the OP_GET_PROPERTY instruction. + * + * @param value Value to examine. + * @param name C-string of the property name to query. + * @return The requested property, or None with an @ref AttributeError + * exception set in the current thread if the attribute was + * not found. + */ +extern KrkValue krk_valueGetAttribute(KrkValue value, char * name); + +/** + * @brief See @ref krk_valueGetAttribute + */ +extern KrkValue krk_valueGetAttribute_default(KrkValue value, char * name, KrkValue defaultVal); + +/** + * @brief Set a property of an object by name. + * @memberof KrkValue + * + * This is a convenience function that works in essentially the + * same way as the OP_SET_PROPERTY instruction. + * + * @param owner The owner of the property to modify. + * @param name C-string of the property name to modify. + * @param to The value to assign. + * @return The set value, or None with an @ref AttributeError + * exception set in the current thread if the object can + * not have a property set. + */ +extern KrkValue krk_valueSetAttribute(KrkValue owner, char * name, KrkValue to); + +/** + * @brief Concatenate two strings. + * + * This is a convenience function which calls @c str.__add__ on the top stack + * values. Generally, this should be avoided - use @c StringBuilder instead. + */ +extern void krk_addObjects(void); + +/* + * All of the remaining stuff is internal and shouldn't be used by library users or embedders. + * FIXME This stuff needs to be moved to another header! FIXME + */ + +extern KrkValue _str___getitem__(int argc, KrkValue argv[], int hasKw); +#define krk_string_get _str___getitem__ +extern KrkValue _str___int__(int argc, KrkValue argv[], int hasKw); +#define krk_string_int _str___int__ +extern KrkValue _str___float__(int argc, KrkValue argv[], int hasKw); +#define krk_string_float _str___float__ +extern KrkValue _str_split(int argc, KrkValue argv[], int hasKw); +#define krk_string_split _str_split +extern KrkValue _str_format(int argc, KrkValue argv[], int hasKw); +#define krk_string_format _str_format + +extern KrkValue krk_dict_nth_key_fast(size_t capacity, KrkTableEntry * entries, size_t index); + +extern void _createAndBind_numericClasses(void); +extern void _createAndBind_strClass(void); +extern void _createAndBind_listClass(void); +extern void _createAndBind_tupleClass(void); +extern void _createAndBind_bytesClass(void); +extern void _createAndBind_dictClass(void); +extern void _createAndBind_functionClass(void); +extern void _createAndBind_rangeClass(void); +extern void _createAndBind_setClass(void); +extern void _createAndBind_builtins(void); +extern void _createAndBind_type(void); +extern void _createAndBind_exceptions(void); +extern void _createAndBind_gcMod(void); +extern void _createAndBind_timeMod(void); +extern void _createAndBind_osMod(void); +extern void _createAndBind_fileioMod(void); +#ifdef ENABLE_THREADING +extern void _createAndBind_threadsMod(void); +#endif + +extern KrkValue krk_operator_lt(KrkValue,KrkValue); +extern KrkValue krk_operator_gt(KrkValue,KrkValue); + +extern void _createAndBind_generatorClass(void); +extern KrkInstance * krk_buildGenerator(KrkClosure *, KrkValue *, size_t); diff --git a/kuroko b/kuroko index 34c8d687..ca7d0dae 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 34c8d68720ea5ee736b49094b8b1836a267604a9 +Subproject commit ca7d0dae2ec78a7746b49ecaae1c8836488a811b diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index cf5782dc..629aba5a 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -1186,7 +1186,7 @@ KrkValue krk_module_onload__yutani(void) { Message->allocSize = sizeof(struct MessageClass); Message->_ongcsweep = _message_sweep; /* All the MSG_ constants */ -#define TYPE(type) krk_attachNamedValue(&Message->fields, "MSG_" #type, INTEGER_VAL(YUTANI_MSG_ ## type)) +#define TYPE(type) krk_attachNamedValue(&Message->methods, "MSG_" #type, INTEGER_VAL(YUTANI_MSG_ ## type)) TYPE(HELLO); TYPE(WINDOW_NEW); TYPE(FLIP); TYPE(KEY_EVENT); TYPE(MOUSE_EVENT); TYPE(WINDOW_MOVE); TYPE(WINDOW_CLOSE); TYPE(WINDOW_SHOW); TYPE(WINDOW_HIDE); TYPE(WINDOW_STACK); TYPE(WINDOW_FOCUS_CHANGE); TYPE(WINDOW_MOUSE_EVENT); @@ -1347,7 +1347,7 @@ KrkValue krk_module_onload__yutani(void) { " Calculate the rendered width of the given string when drawn with this font."; krk_defineNative(&YutaniFont->methods, ":size", _font_size); /* Some static values */ -#define ATTACH_FONT(name) krk_attachNamedValue(&YutaniFont->fields, #name, INTEGER_VAL(SDF_ ## name)) +#define ATTACH_FONT(name) krk_attachNamedValue(&YutaniFont->methods, #name, INTEGER_VAL(SDF_ ## name)) ATTACH_FONT(FONT_THIN); ATTACH_FONT(FONT_BOLD); ATTACH_FONT(FONT_MONO); @@ -1387,11 +1387,11 @@ KrkValue krk_module_onload__yutani(void) { krk_finalizeClass(MenuEntrySeparatorClass); Decorator = krk_createClass(module, "Decorator", NULL); - krk_defineNative(&Decorator->fields, "get_bounds", _decor_get_bounds); - krk_defineNative(&Decorator->fields, "render", _decor_render); - krk_defineNative(&Decorator->fields, "handle_event", _decor_handle_event); - krk_defineNative(&Decorator->fields, "show_default_menu", _decor_show_default_menu); -#define ATTACH_CONSTANT(name) krk_attachNamedValue(&Decorator->fields, #name, INTEGER_VAL(name)) + krk_defineNative(&Decorator->methods, "get_bounds", _decor_get_bounds); + krk_defineNative(&Decorator->methods, "render", _decor_render); + krk_defineNative(&Decorator->methods, "handle_event", _decor_handle_event); + krk_defineNative(&Decorator->methods, "show_default_menu", _decor_show_default_menu); +#define ATTACH_CONSTANT(name) krk_attachNamedValue(&Decorator->methods, #name, INTEGER_VAL(name)) ATTACH_CONSTANT(DECOR_OTHER); ATTACH_CONSTANT(DECOR_CLOSE); ATTACH_CONSTANT(DECOR_RESIZE); diff --git a/util/auto-dep.py b/util/auto-dep.py index d0477679..f82f3cba 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -37,6 +37,7 @@ class Classifier(object): '': (None, '-ltoaru_button', ['','', '']), # Kuroko '': ('../../../kuroko/src', '-lkuroko', []), + '': (None, '-lkuroko', []), # OPTIONAL third-party libraries, for extensions / ports '': ('freetype2', '-lfreetype', []), '': ('pixman-1', '-lpixman-1', []), From d4be70cfa031372456913d729a256987cbe92075 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 18 Mar 2021 13:01:55 +0900 Subject: [PATCH 091/102] bim: Fix import path, again --- apps/bim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bim.c b/apps/bim.c index be403974..7533febb 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -10525,7 +10525,7 @@ void import_directory(char * dirName) { if (!dirp) { /* Try one last fallback */ if (dirpath) free(dirpath); - dirpath = strdup("/usr/local/share/bim"); + dirpath = strdup("/usr/share/bim"); sprintf(file, "%s/%s", dirpath, dirName); extra = "/"; dirp = opendir(file); From 123940ec37abe9cef6db59b1940cdcf22177c095 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Mar 2021 11:01:11 +0900 Subject: [PATCH 092/102] rline: Update krk highlighter from kuroko --- lib/rline.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/lib/rline.c b/lib/rline.c index 76a25411..f8c25643 100644 --- a/lib/rline.c +++ b/lib/rline.c @@ -535,7 +535,7 @@ char * syn_krk_keywords[] = { "and","class","def","else","for","if","in","import","del", "let","not","or","return","while","try","except","raise", "continue","break","as","from","elif","lambda","with","is", - "pass", + "pass","assert","yield","finally", NULL }; @@ -544,8 +544,10 @@ char * syn_krk_types[] = { "self", "super", /* implicit in a class method */ "len", "str", "int", "float", "dir", "repr", /* global functions from __builtins__ */ "list","dict","range", /* builtin classes */ - "object","exception","isinstance","type", - "print","set","any","all","bool","ord","chr","hex", + "object","exception","isinstance","type","tuple","reversed", + "print","set","any","all","bool","ord","chr","hex","oct","filter", + "sorted","bytes","getattr","sum","min","max","id","hash","map","bin", + "enumerate","zip","setattr","property","staticmethod","classmethod", NULL }; @@ -554,6 +556,13 @@ char * syn_krk_special[] = { NULL }; +char * syn_krk_exception[] = { + "TypeError","ArgumentError","IndexError","KeyError","AttributeError", + "NameError","ImportError","IOError","ValueError","KeyboardInterrupt", + "ZeroDivisionError","SyntaxError","Exception", + NULL +}; + int paint_krk_numeral(struct syntax_state * state) { if (charat() == '0' && (nextchar() == 'x' || nextchar() == 'X')) { paint(2, FLAG_NUMERAL); @@ -614,6 +623,8 @@ int syn_krk_calculate(struct syntax_state * state) { return 0; } else if (find_keywords(state, syn_krk_special, FLAG_NUMERAL, c_keyword_qualifier)) { return 0; + } else if (find_keywords(state, syn_krk_exception, FLAG_PRAGMA, c_keyword_qualifier)) { + return 0; } else if (!c_keyword_qualifier(lastchar()) && isdigit(charat())) { paint_krk_numeral(state); return 0; @@ -630,6 +641,52 @@ int syn_krk_calculate(struct syntax_state * state) { return -1; } +char * syn_krk_dbg_commands[] = { + "s", "skip", + "c", "continue", + "q", "quit", + "e", "enable", + "d", "disable", + "r", "remove", + "bt", "backtrace", + "break", + "abort", + "help", + NULL, +}; + +char * syn_krk_dbg_info_types[] = { + "breakpoints", + NULL, +}; + +int syn_krk_dbg_calculate(struct syntax_state * state) { + if (state->state < 1) { + if (state->i == 0) { + if (match_and_paint(state, "p", FLAG_KEYWORD, c_keyword_qualifier) || + match_and_paint(state, "print", FLAG_KEYWORD, c_keyword_qualifier)) { + while (1) { + int result = syn_krk_calculate(state); + if (result == 0) continue; + if (result == -1) return -1; + return result + 1; + } + } else if (match_and_paint(state,"info", FLAG_KEYWORD, c_keyword_qualifier) || + match_and_paint(state,"i", FLAG_KEYWORD, c_keyword_qualifier)) { + skip(); + find_keywords(state,syn_krk_dbg_info_types, FLAG_TYPE, c_keyword_qualifier); + return -1; + } else if (find_keywords(state, syn_krk_dbg_commands, FLAG_KEYWORD, c_keyword_qualifier)) { + return 0; + } + } + return -1; + } else { + state->state -= 1; + return syn_krk_calculate(state) + 1; + } +} + #ifdef __toaru__ int esh_variable_qualifier(int c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '_'); @@ -1020,6 +1077,7 @@ struct syntax_definition { int tabIndents; } syntaxes[] = { {"krk",syn_krk_calculate, 1}, + {"krk-dbg",syn_krk_dbg_calculate, 1}, #ifdef __toaru__ {"python",syn_py_calculate, 1}, {"esh",syn_esh_calculate, 0}, From 82f22e20fa22e4bd8e53e607da3a97ca4c046902 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Mar 2021 11:01:27 +0900 Subject: [PATCH 093/102] kuroko: sync with upstream --- kuroko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kuroko b/kuroko index ca7d0dae..f2063246 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit ca7d0dae2ec78a7746b49ecaae1c8836488a811b +Subproject commit f2063246459272d9603dc1d48e33ed1b42afc636 From a50d81ae00f08caa111ecad564ca05f7ba765d6d Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Mar 2021 11:25:10 +0900 Subject: [PATCH 094/102] libc: Add stubs for truncate, sync --- base/usr/include/unistd.h | 3 +++ libc/unistd/sync.c | 8 ++++++++ libc/unistd/truncate.c | 9 +++++++++ 3 files changed, 20 insertions(+) create mode 100644 libc/unistd/sync.c create mode 100644 libc/unistd/truncate.c diff --git a/base/usr/include/unistd.h b/base/usr/include/unistd.h index cac6b7bc..3e15c436 100644 --- a/base/usr/include/unistd.h +++ b/base/usr/include/unistd.h @@ -97,4 +97,7 @@ extern unsigned int alarm(unsigned int seconds); extern void *sbrk(intptr_t increment); +extern void sync(void); +extern int truncate(const char *, off_t); + _End_C_Header diff --git a/libc/unistd/sync.c b/libc/unistd/sync.c new file mode 100644 index 00000000..784990d2 --- /dev/null +++ b/libc/unistd/sync.c @@ -0,0 +1,8 @@ +#include +#include +#include + +void sync(void) { + /* TODO */ +} + diff --git a/libc/unistd/truncate.c b/libc/unistd/truncate.c new file mode 100644 index 00000000..2016fda9 --- /dev/null +++ b/libc/unistd/truncate.c @@ -0,0 +1,9 @@ +#include +#include +#include + +int truncate(const char * path, off_t length) { + errno = EINVAL; + return -1; +} + From e2c10f8aa8b8302713da15a559cca9e6909fba31 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Mar 2021 11:25:16 +0900 Subject: [PATCH 095/102] kuroko: use master branch --- kuroko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kuroko b/kuroko index f2063246..dec38c41 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit f2063246459272d9603dc1d48e33ed1b42afc636 +Subproject commit dec38c410c2d3ae209690d67719fe834488979b2 From ace162ef6c84aeb940c375e3d880be2acf7228cb Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Mar 2021 11:43:58 +0900 Subject: [PATCH 096/102] bim: Update syntax highlighters --- base/usr/share/bim/syntax/__init__.krk | 12 ++++-------- base/usr/share/bim/syntax/c.krk | 4 ++++ base/usr/share/bim/syntax/json.krk | 2 +- base/usr/share/bim/syntax/krk.krk | 9 +++++++-- base/usr/share/bim/syntax/py.krk | 2 ++ 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/base/usr/share/bim/syntax/__init__.krk b/base/usr/share/bim/syntax/__init__.krk index cccab24a..fc2ee1dd 100644 --- a/base/usr/share/bim/syntax/__init__.krk +++ b/base/usr/share/bim/syntax/__init__.krk @@ -37,13 +37,9 @@ class Highlighter(SyntaxState): self.paint(1, self.FLAG_STRING) def isalpha(c): - if isinstance(c,int): - if c <= 0: return False - c = chr(c) - return c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + c = c if isinstance(c,int) else ord(c) + return (c >= ord('a') and c <= ord('z')) or (c >= ord('A') and c <= ord('Z')) def isalnum(c): - if isinstance(c,int): - if c <= 0: return False - c = chr(c) - return c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + c = c if isinstance(c,int) else ord(c) + return (c >= ord('a') and c <= ord('z')) or (c >= ord('A') and c <= ord('Z')) or (c >= ord('0') and c <= ord('9')) diff --git a/base/usr/share/bim/syntax/c.krk b/base/usr/share/bim/syntax/c.krk index 288d47c3..ee4a5b9e 100644 --- a/base/usr/share/bim/syntax/c.krk +++ b/base/usr/share/bim/syntax/c.krk @@ -5,6 +5,8 @@ class CHighlighter(Highlighter): name = 'c' extensions = ('.c','.h','.cpp','.hpp','.c++','.h++','.cc','.hh') + doxygenDocstrings = False + keywords = [ "while","if","for","continue","return","break","switch","case","sizeof", "struct","union","typedef","do","default","else","goto", @@ -62,6 +64,8 @@ class CHighlighter(Highlighter): else if self[0] == '\\' and self[1] == 'x': self.paint(2, self.FLAG_ESCAPE) while self.isxdigit(self[0]): self.paint(1, self.FLAG_ESCAPE) + else if self.doxygenDocstrings and tryDoxygenComment(self, self.FLAG_STRING): + continue else: last = self[0] self.paint(1, self.FLAG_STRING) diff --git a/base/usr/share/bim/syntax/json.krk b/base/usr/share/bim/syntax/json.krk index 12ef4e51..4270e45e 100644 --- a/base/usr/share/bim/syntax/json.krk +++ b/base/usr/share/bim/syntax/json.krk @@ -14,7 +14,7 @@ class JsonHighlighter(Highlighter): if self[0] == ':': self.rewind(end-start) self.paint(1, self.FLAG_ESCAPE) - while self.i < end: + while self.i < end-1: self.paint(1, self.FLAG_KEYWORD) if self[0] == '"': self.paint(1, self.FLAG_ESCAPE) diff --git a/base/usr/share/bim/syntax/krk.krk b/base/usr/share/bim/syntax/krk.krk index 9ef87b11..909d1c34 100644 --- a/base/usr/share/bim/syntax/krk.krk +++ b/base/usr/share/bim/syntax/krk.krk @@ -8,17 +8,21 @@ class KrkHighlighter(Highlighter): spaces = True doxygenDocstrings = False + enableChecking = False + checkKrkCode = None keywords = [ 'and','class','def','else','export','for','if','in','import','let','not', 'or','return','while','try','except','raise','continue','break','as','from', - 'elif', 'lambda', 'pass', 'with', 'is', 'del', 'assert', 'yield' + 'elif', 'lambda', 'pass', 'with', 'is', 'del', 'assert', 'yield', 'finally', ] types = [ 'self','super','len','str','int','float','dir','repr','list','dict','range', 'object','exception','isinstance','type','print','tuple','bool','any','all', - 'hex','ord','chr','bytes','set','getattr', + 'hex','ord','chr','bytes','set','getattr','setattr','input','zip','enumerate', + 'property','staticmethod','classmethod','filter','min','max','id','map','bin', + 'sum','sorted', ] special = [ @@ -112,6 +116,7 @@ class KrkHighlighter(Highlighter): else: self.paint(1, self.FLAG_COMMENT) def calculate(self): + if self.enableChecking and self.i == 0: self.checkKrkCode() if self.state <= 0: if self[0] == '#': self.paintDoxyComment() diff --git a/base/usr/share/bim/syntax/py.krk b/base/usr/share/bim/syntax/py.krk index 1af1472d..3b0aff73 100644 --- a/base/usr/share/bim/syntax/py.krk +++ b/base/usr/share/bim/syntax/py.krk @@ -3,6 +3,7 @@ from syntax import Highlighter, bind class PythonHighlighter(Highlighter): name = 'python' extensions = ('.py',) + spaces = True keywords = [ "class","def","return","del","if","else","elif","for","while","continue", "break","assert","as","and","or","except","finally","from","global", @@ -18,6 +19,7 @@ class PythonHighlighter(Highlighter): "oct","open","ord","pow","print","property","range","repr","reverse", "round","set","setattr","slice","sorted","staticmethod","str","sum", "super","tuple","type","vars","zip", + 'self', ] special = ['True','False','None'] def paintPyTriple(quote): From 6f1218122040ef2938c46d57c50595367c3afbb9 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Fri, 19 Mar 2021 11:44:06 +0900 Subject: [PATCH 097/102] kuroko: upstream bugfix --- kuroko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kuroko b/kuroko index dec38c41..2d3e7ca3 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit dec38c410c2d3ae209690d67719fe834488979b2 +Subproject commit 2d3e7ca3d350d12bebfd6da4530090bfe60c6a31 From 487d0f3a6e65351f8355eedf72b6c0f5f15965ed Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 21 Mar 2021 18:10:16 +0900 Subject: [PATCH 098/102] kuroko: sync with upstream --- kuroko | 2 +- lib/rline.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 140 insertions(+), 15 deletions(-) diff --git a/kuroko b/kuroko index 2d3e7ca3..d477b0da 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 2d3e7ca3d350d12bebfd6da4530090bfe60c6a31 +Subproject commit d477b0dacbb48ff4efed79c8a3ee45c8d8a5f062 diff --git a/lib/rline.c b/lib/rline.c index f8c25643..1f3e252f 100644 --- a/lib/rline.c +++ b/lib/rline.c @@ -23,8 +23,8 @@ #include #else #include -/* How do we get this in Windows? Seems WT asks the font? */ -#define wcwidth(c) (1) +#include +#include "wcwidth._h" #endif #ifdef __toaru__ #include @@ -70,8 +70,9 @@ void rline_history_insert(char * str) { void rline_history_append_line(char * str) { if (rline_history_count) { char ** s = &rline_history[(rline_history_count - 1 + rline_history_offset) % RLINE_HISTORY_ENTRIES]; - char * c = malloc(strlen(*s) + strlen(str) + 2); - sprintf(c, "%s\n%s", *s, str); + size_t len = strlen(*s) + strlen(str) + 2; + char * c = malloc(len); + snprintf(c, len, "%s\n%s", *s, str); if (c[strlen(c)-1] == '\n') { c[strlen(c)-1] = '\0'; } @@ -232,10 +233,27 @@ static int getch(int timeout) { #ifndef _WIN32 return fgetc(stdin); #else - TCHAR buf[1]; + static int bytesRead = 0; + static char buf8[8]; + static uint8_t * b; + + if (bytesRead) { + bytesRead--; + return *(b++); + } + DWORD dwRead; - while (!ReadConsole(GetStdHandle(STD_INPUT_HANDLE),buf,1,&dwRead,NULL)); - return buf[0]; + uint16_t buf16[8] = {0}; + if (ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE),buf16,2,&dwRead,NULL)) { + int r = WideCharToMultiByte(CP_UTF8, 0, buf16, -1, buf8, 8, 0, 0); + if (r > 1 && buf8[r-1] == '\0') r--; + b = (uint8_t*)buf8; + bytesRead = r - 1; + return *(b++); + } else { + fprintf(stderr, "error on console read\n"); + return -1; + } #endif } @@ -406,7 +424,6 @@ static void rline_exp_load_colorscheme_sunsmoke(void) { #define FLAG_ESCAPE 13 #define FLAG_SELECT (1 << 5) -#define FLAG_SEARCH (1 << 6) struct syntax_state { line_t * line; @@ -522,6 +539,14 @@ void paint_krk_string(struct syntax_state * state, int type) { paintNHex(state, 4); } else if (nextchar() == 'U') { paintNHex(state, 8); + } else if (nextchar() >= '0' && nextchar() <= '7') { + paint(2, FLAG_ESCAPE); + if (charat() >= '0' && charat() <= '7') { + paint(1, FLAG_ESCAPE); + if (charat() >= '0' && charat() <= '7') { + paint(1, FLAG_ESCAPE); + } + } } else { paint(2, FLAG_ESCAPE); } @@ -553,6 +578,7 @@ char * syn_krk_types[] = { char * syn_krk_special[] = { "True","False","None", + /* Exception names */ NULL }; @@ -1058,8 +1084,6 @@ static const char * flag_to_color(int _flag) { return COLOR_GREEN; case FLAG_DIFFMINUS: return COLOR_RED; - case FLAG_SELECT: - return COLOR_FG; // case FLAG_BOLD: // return COLOR_BOLD; // case FLAG_LINK: @@ -1088,6 +1112,10 @@ struct syntax_definition { static struct syntax_definition * syntax; int rline_exp_set_syntax(char * name) { + if (!name) { + syntax = NULL; + return 0; + } for (struct syntax_definition * s = syntaxes; s->name; ++s) { if (!strcmp(name,s->name)) { syntax = s; @@ -1326,10 +1354,15 @@ static void render_line(void) { /* Syntax hilighting */ const char * color = flag_to_color(c.flags); - if ((c.flags & FLAG_SEARCH) || (c.flags == FLAG_NOTICE)) { + if (c.flags & FLAG_SELECT) { + set_colors(color, COLOR_BG); + fprintf(stdout,"\033[7m"); + was_searching = 1; + } else if (c.flags == FLAG_NOTICE) { set_colors(COLOR_SEARCH_FG, COLOR_SEARCH_BG); was_searching = 1; } else if (was_searching) { + fprintf(stdout,"\033[0m"); set_colors(color, COLOR_BG); last_color = color; } else if (!last_color || strcmp(color, last_color)) { @@ -1606,6 +1639,82 @@ static void insert_char(uint32_t c) { column++; } +char * paren_pairs = "()[]{}<>"; + +int is_paren(int c) { + char * p = paren_pairs; + while (*p) { + if (c == *p) return 1; + p++; + } + return 0; +} + +void find_matching_paren(int * out_col, int in_col) { + if (column - in_col > the_line->actual) { + return; /* Invalid cursor position */ + } + + int paren_match = 0; + int direction = 0; + int start = the_line->text[column-in_col].codepoint; + int flags = the_line->text[column-in_col].flags & 0x1F; + int count = 0; + + /* TODO what about unicode parens? */ + for (int i = 0; paren_pairs[i]; ++i) { + if (start == paren_pairs[i]) { + direction = (i % 2 == 0) ? 1 : -1; + paren_match = paren_pairs[(i % 2 == 0) ? (i+1) : (i-1)]; + break; + } + } + + if (!paren_match) return; + + /* Scan for match */ + int col = column - in_col; + + while (col > -1 && col < the_line->actual) { + /* Only match on same syntax */ + if ((the_line->text[col].flags & 0x1F) == flags) { + /* Count up on same direction */ + if (the_line->text[col].codepoint == start) count++; + /* Count down on opposite direction */ + if (the_line->text[col].codepoint == paren_match) { + count--; + /* When count == 0 we have a match */ + if (count == 0) goto _match_found; + } + } + col += direction; + } + +_match_found: + *out_col = col; +} + +void redraw_matching_paren(int col) { + for (int j = 0; j < the_line->actual; ++j) { + if (j == col) { + the_line->text[j].flags |= FLAG_SELECT; + } else { + the_line->text[j].flags &= ~(FLAG_SELECT); + } + } +} + +void highlight_matching_paren(void) { + int col = -1; + if (is_paren(the_line->text[column].codepoint)) { + find_matching_paren(&col, 0); + } else if (column > 0 && is_paren(the_line->text[column-1].codepoint)) { + find_matching_paren(&col, 1); + } + redraw_matching_paren(col); +} + + /** * Move cursor left */ @@ -1856,10 +1965,21 @@ static unsigned int _EOF = 4; static void get_initial_termios(void) { } static void set_unbuffered(void) { + /* Disables line input, echo, ^C processing, and a few others. */ SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT); + SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING | ENABLE_WRAP_AT_EOL_OUTPUT); } static void set_buffered(void) { - SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT); + /* These are the defaults */ + SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), + ENABLE_ECHO_INPUT | + ENABLE_INSERT_MODE | + ENABLE_LINE_INPUT | + ENABLE_MOUSE_INPUT | + ENABLE_PROCESSED_INPUT | + ENABLE_QUICK_EDIT_MODE | + ENABLE_VIRTUAL_TERMINAL_INPUT + ); } #endif @@ -1976,14 +2096,12 @@ static int read_line(void) { int this_buf[20]; uint32_t istate = 0; - #ifndef _WIN32 /* Let's disable this under Windows... */ set_colors(COLOR_ALT_FG, COLOR_ALT_BG); fprintf(stdout, "◄\033[0m"); /* TODO: This could be retrieved from an envvar */ for (int i = 0; i < rline_terminal_width - 1; ++i) { fprintf(stdout, " "); } - #endif if (rline_preload) { char * c = rline_preload; @@ -2020,6 +2138,7 @@ static int read_line(void) { for (char *_c = rline_exit_string; *_c; ++_c) { insert_char(*_c); } + redraw_matching_paren(-1); render_line(); rline_place_cursor(); if (!*rline_exit_string) { @@ -2051,6 +2170,7 @@ static int read_line(void) { /* Finished */ loading = 1; column = the_line->actual; + redraw_matching_paren(-1); render_line(); insert_char('\n'); return 1; @@ -2101,6 +2221,7 @@ static int read_line(void) { continue; } } + highlight_matching_paren(); render_line(); rline_place_cursor(); } else if (istate == UTF8_REJECT) { @@ -2114,7 +2235,11 @@ static int read_line(void) { * Read a line of text with interactive editing. */ int rline(char * buffer, int buf_size) { +#ifndef _WIN32 setlocale(LC_ALL, ""); +#else + setlocale(LC_ALL, "C.UTF-8"); +#endif get_initial_termios(); set_unbuffered(); get_size(); From 020c3cdb3c23966042ab5ad9ee49c2c2e13f89fa Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 25 Mar 2021 15:52:19 +0900 Subject: [PATCH 099/102] libc: more net stubs --- base/usr/include/arpa/inet.h | 11 +++++++++++ base/usr/include/netdb.h | 23 +++++++++++++++++++++++ base/usr/include/sys/socket.h | 8 ++++++++ base/usr/include/time.h | 12 ++++++++++++ libc/sys/network.c | 5 ++++- libc/time/clock_gettime.c | 17 +++++++++++++++++ 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 base/usr/include/arpa/inet.h create mode 100644 base/usr/include/netdb.h create mode 100644 libc/time/clock_gettime.c diff --git a/base/usr/include/arpa/inet.h b/base/usr/include/arpa/inet.h new file mode 100644 index 00000000..bb2988f0 --- /dev/null +++ b/base/usr/include/arpa/inet.h @@ -0,0 +1,11 @@ +#pragma once + +#include <_cheader.h> +#include +#include + +_Begin_C_Header + +#define INADDR_ANY (unsigned long int)0x0 + +_End_C_Header diff --git a/base/usr/include/netdb.h b/base/usr/include/netdb.h new file mode 100644 index 00000000..da3c1795 --- /dev/null +++ b/base/usr/include/netdb.h @@ -0,0 +1,23 @@ +#pragma once + +#include <_cheader.h> + +#include + +_Begin_C_Header + +extern int getnameinfo(const struct sockaddr *addr, socklen_t addrlen, + char *host, socklen_t hostlen, + char *serv, socklen_t servlen, int flags); + +extern int getaddrinfo(const char *node, const char *service, + const struct addrinfo *hints, + struct addrinfo **res); + +extern void freeaddrinfo(struct addrinfo *res); + +#define NI_NUMERICHOST 1 +#define NI_MAXHOST 255 + + +_End_C_Header diff --git a/base/usr/include/sys/socket.h b/base/usr/include/sys/socket.h index 277f0512..9e90de95 100644 --- a/base/usr/include/sys/socket.h +++ b/base/usr/include/sys/socket.h @@ -18,6 +18,7 @@ _Begin_C_Header #define SOL_SOCKET 0 #define SO_KEEPALIVE 1 +#define SO_REUSEADDR 2 struct hostent { char *h_name; /* official name of host */ @@ -73,6 +74,10 @@ struct msghdr { int msg_flags; /* flags on received message */ }; +struct sockaddr_storage { + unsigned short ss_family; + char _ss_pad[128]; +}; typedef uint32_t in_addr_t; typedef uint16_t in_port_t; @@ -100,6 +105,9 @@ extern int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen); extern int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); extern int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); +extern int connect(int sockfd, const struct sockaddr * addr, socklen_t addrlen); +extern int shutdown(int sockfd, int how); + _End_C_Header diff --git a/base/usr/include/time.h b/base/usr/include/time.h index bc307efb..d517f3ba 100644 --- a/base/usr/include/time.h +++ b/base/usr/include/time.h @@ -37,4 +37,16 @@ typedef int clock_t; extern clock_t clock(void); #define CLOCKS_PER_SEC 1 +struct timespec { + time_t tv_sec; + long tv_nsec; +}; + +typedef int clockid_t; + +#define CLOCK_REALTIME 0 +#define CLOCK_MONOTONIC 1 + +extern int clock_gettime(clockid_t clk_id, struct timespec *tp); + _End_C_Header diff --git a/libc/sys/network.c b/libc/sys/network.c index 0c149cba..28eef78e 100644 --- a/libc/sys/network.c +++ b/libc/sys/network.c @@ -123,4 +123,7 @@ int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t return -1; } - +int shutdown(int sockfd, int how) { + UNIMPLEMENTED; + return -1; +} diff --git a/libc/time/clock_gettime.c b/libc/time/clock_gettime.c new file mode 100644 index 00000000..5d69a0d6 --- /dev/null +++ b/libc/time/clock_gettime.c @@ -0,0 +1,17 @@ +#include +#include +#include + +int clock_gettime(clockid_t clk_id, struct timespec *tp) { + if (clk_id < 0 || clk_id > 1) { + errno = EINVAL; + return -1; + } + struct timeval t; + gettimeofday(&t, NULL); + + tp->tv_sec = t.tv_sec; + tp->tv_nsec = t.tv_usec * 1000; + + return 0; +} From 33fbcde1fd7e20fceb9f3441af6375194e4446aa Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Thu, 25 Mar 2021 15:53:40 +0900 Subject: [PATCH 100/102] kuroko: sync with upstream --- apps/bim.c | 83 +-- apps/kuroko.c | 27 +- base/usr/include/kuroko | 1 + base/usr/include/kuroko/chunk.h | 219 -------- base/usr/include/kuroko/compiler.h | 22 - base/usr/include/kuroko/debug.h | 248 --------- base/usr/include/kuroko/kuroko.h | 37 -- base/usr/include/kuroko/memory.h | 80 --- base/usr/include/kuroko/object.h | 411 --------------- base/usr/include/kuroko/opcodes.h | 80 --- base/usr/include/kuroko/scanner.h | 186 ------- base/usr/include/kuroko/table.h | 153 ------ base/usr/include/kuroko/threads.h | 41 -- base/usr/include/kuroko/util.h | 296 ----------- base/usr/include/kuroko/value.h | 210 -------- base/usr/include/kuroko/vm.h | 820 ----------------------------- base/usr/share/bim/syntax/c.krk | 25 +- base/usr/share/bim/syntax/lisp.krk | 2 +- kuroko | 2 +- lib/kuroko/_yutani.c | 158 +++--- util/auto-dep.py | 1 - 21 files changed, 161 insertions(+), 2941 deletions(-) create mode 120000 base/usr/include/kuroko delete mode 100644 base/usr/include/kuroko/chunk.h delete mode 100644 base/usr/include/kuroko/compiler.h delete mode 100644 base/usr/include/kuroko/debug.h delete mode 100644 base/usr/include/kuroko/kuroko.h delete mode 100644 base/usr/include/kuroko/memory.h delete mode 100644 base/usr/include/kuroko/object.h delete mode 100644 base/usr/include/kuroko/opcodes.h delete mode 100644 base/usr/include/kuroko/scanner.h delete mode 100644 base/usr/include/kuroko/table.h delete mode 100644 base/usr/include/kuroko/threads.h delete mode 100644 base/usr/include/kuroko/util.h delete mode 100644 base/usr/include/kuroko/value.h delete mode 100644 base/usr/include/kuroko/vm.h diff --git a/apps/bim.c b/apps/bim.c index 7533febb..f4a2a01a 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -3873,24 +3873,29 @@ void open_file(char * file) { if (spaces) { int one = 0, two = 0, three = 0, four = 0; /* If you use more than that, I don't like you. */ + int lastCount = 0; for (int i = 0; i < env->line_count; ++i) { if (env->lines[i]->actual > 1 && !line_is_comment(env->lines[i])) { /* Count spaces at beginning */ - int c = 0; + int c = 0, diff = 0; while (c < env->lines[i]->actual && env->lines[i]->text[c].codepoint == ' ') c++; - if (c) { - one += 1; - two += ((c % 2) == 0); - three += ((c % 3) == 0); - four += ((c % 4) == 0); + if (c > lastCount) { + diff = c - lastCount; + } else if (c < lastCount) { + diff = lastCount - c; } + if (diff == 1) one++; + if (diff == 2) two++; + if (diff == 3) three++; + if (diff == 4) four++; + lastCount = c; } } - if (four && (four > three) && (four >= two)) { + if (four > three && four > two && four > one) { env->tabstop = 4; - } else if (three && (three > two) && (three >= one)) { + } else if (three > two && three > one) { env->tabstop = 3; - } else if (two && (two > (one / 2))) { + } else if (two > one) { env->tabstop = 2; } else { env->tabstop = 1; @@ -4904,9 +4909,7 @@ int convert_to_html(void) { recalculate_tabs(env->lines[i]); } env->syntax = match_syntax(".htm"); - for (int i = 0; i < env->line_count; ++i) { - recalculate_syntax(env->lines[i],i); - } + schedule_complete_recalc(); return 0; } @@ -9757,7 +9760,10 @@ void normal_mode(void) { if (env->mode == MODE_NORMAL) { place_cursor_actual(); - int key = bim_getkey(DEFAULT_KEY_WAIT); + int key = 0; + do { + key = bim_getkey(DEFAULT_KEY_WAIT); + } while (key == KEY_TIMEOUT); if (handle_nav_buffer(key)) { if (!handle_action(NORMAL_MAP, key)) if (!handle_action(NAVIGATION_MAP, key)) @@ -10252,6 +10258,11 @@ int c_keyword_qualifier(int c) { static KrkValue bim_krk_state_getstate(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); + if (argc > 1 && IS_INTEGER(argv[1])) { + state->state = AS_INTEGER(argv[1]); + } else if (argc > 1 && IS_NONE(argv[1])) { + state->state = -1; + } return INTEGER_VAL(state->state); } static KrkValue bim_krk_state_setstate(int argc, KrkValue argv[], int hasKw) { @@ -10334,6 +10345,11 @@ static int callQualifier(KrkValue qualifier, int codepoint) { return 0; } +#define KRK_STRING_FAST(string,offset) (uint32_t)\ + (string->type <= 1 ? ((uint8_t*)string->codes)[offset] : \ + (string->type == 2 ? ((uint16_t*)string->codes)[offset] : \ + ((uint32_t*)string->codes)[offset])) + static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); if (argc < 4 || !krk_isInstanceOf(argv[1], vm.baseClasses->listClass) || !IS_INTEGER(argv[2])) @@ -10641,6 +10657,7 @@ static KrkValue krk_bim_getDocumentText(int argc, KrkValue argv[], int hasKw) { } static KrkValue krk_bim_renderError(int argc, KrkValue argv[], int hasKw) { + static const char * _method_name = "renderError"; if (argc != 1 || !IS_STRING(argv[0])) return TYPE_ERROR(str,argv[0]); if (AS_STRING(argv[0])->length == 0) redraw_commandline(); @@ -10705,7 +10722,7 @@ void initialize(void) { makeClass(bimModule, &ActionDef, "Action", vm.baseClasses->objectClass); ActionDef->allocSize = sizeof(struct ActionDef); - krk_defineNative(&ActionDef->methods, ".__call__", bim_krk_action_call); + krk_defineNative(&ActionDef->methods, "__call__", bim_krk_action_call); krk_finalizeClass(ActionDef); for (struct action_def * a = mappable_actions; mappable_actions && a->name; ++a) { @@ -10716,7 +10733,7 @@ void initialize(void) { makeClass(bimModule, &CommandDef, "Command", vm.baseClasses->objectClass); CommandDef->allocSize = sizeof(struct CommandDef); - krk_defineNative(&CommandDef->methods, ".__call__", bim_krk_command_call); + krk_defineNative(&CommandDef->methods, "__call__", bim_krk_command_call); krk_finalizeClass(CommandDef); KrkInstance * global = krk_newInstance(vm.baseClasses->objectClass); @@ -10734,23 +10751,23 @@ void initialize(void) { makeClass(bimModule, &syntaxStateClass, "SyntaxState", vm.baseClasses->objectClass); syntaxStateClass->allocSize = sizeof(struct SyntaxState); - krk_defineNative(&syntaxStateClass->methods, ":state", bim_krk_state_getstate); - krk_defineNative(&syntaxStateClass->methods, ".set_state", bim_krk_state_setstate); /* TODO property? */ - krk_defineNative(&syntaxStateClass->methods, ":i", bim_krk_state_index); - krk_defineNative(&syntaxStateClass->methods, ":lineno", bim_krk_state_lineno); - krk_defineNative(&syntaxStateClass->methods, ".__init__", bim_krk_state_init); + krk_defineNative(&syntaxStateClass->methods, "set_state", bim_krk_state_setstate); /* TODO property? */ + krk_defineNative(&syntaxStateClass->methods, "state", bim_krk_state_getstate)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&syntaxStateClass->methods, "i", bim_krk_state_index)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&syntaxStateClass->methods, "lineno", bim_krk_state_lineno)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&syntaxStateClass->methods, "__init__", bim_krk_state_init); /* These ones take argumens so they're methods instead of dynamic fields */ - krk_defineNative(&syntaxStateClass->methods, ".findKeywords", bim_krk_state_findKeywords); - krk_defineNative(&syntaxStateClass->methods, ".cKeywordQualifier", bim_krk_state_cKeywordQualifier); - krk_defineNative(&syntaxStateClass->methods, ".isdigit", bim_krk_state_isdigit); - krk_defineNative(&syntaxStateClass->methods, ".isxdigit", bim_krk_state_isxdigit); - krk_defineNative(&syntaxStateClass->methods, ".paint", bim_krk_state_paint); - krk_defineNative(&syntaxStateClass->methods, ".paintComment", bim_krk_state_paintComment); - krk_defineNative(&syntaxStateClass->methods, ".skip", bim_krk_state_skip); - krk_defineNative(&syntaxStateClass->methods, ".matchAndPaint", bim_krk_state_matchAndPaint); - krk_defineNative(&syntaxStateClass->methods, ".commentBuzzwords", bim_krk_state_commentBuzzwords); - krk_defineNative(&syntaxStateClass->methods, ".rewind", bim_krk_state_rewind); - krk_defineNative(&syntaxStateClass->methods, ".__getitem__", bim_krk_state_get); + krk_defineNative(&syntaxStateClass->methods, "findKeywords", bim_krk_state_findKeywords); + krk_defineNative(&syntaxStateClass->methods, "cKeywordQualifier", bim_krk_state_cKeywordQualifier); + krk_defineNative(&syntaxStateClass->methods, "isdigit", bim_krk_state_isdigit); + krk_defineNative(&syntaxStateClass->methods, "isxdigit", bim_krk_state_isxdigit); + krk_defineNative(&syntaxStateClass->methods, "paint", bim_krk_state_paint); + krk_defineNative(&syntaxStateClass->methods, "paintComment", bim_krk_state_paintComment); + krk_defineNative(&syntaxStateClass->methods, "skip", bim_krk_state_skip); + krk_defineNative(&syntaxStateClass->methods, "matchAndPaint", bim_krk_state_matchAndPaint); + krk_defineNative(&syntaxStateClass->methods, "commentBuzzwords", bim_krk_state_commentBuzzwords); + krk_defineNative(&syntaxStateClass->methods, "rewind", bim_krk_state_rewind); + krk_defineNative(&syntaxStateClass->methods, "__getitem__", bim_krk_state_get); krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_NONE", INTEGER_VAL(FLAG_NONE)); krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_KEYWORD", INTEGER_VAL(FLAG_KEYWORD)); krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_STRING", INTEGER_VAL(FLAG_STRING)); @@ -11236,6 +11253,7 @@ int main(int argc, char * argv[]) { global_config.go_to_line = 0; open_file(optarg); for (int i = 0; i < env->line_count; ++i) { + recalculate_syntax(env->lines[i], i); if (opt == 'C') { draw_line_number(i); } @@ -11312,6 +11330,9 @@ int main(int argc, char * argv[]) { initialize(); global_config.go_to_line = 0; open_file(argv[optind]); + for (int i = 0; i < env->line_count; ++i) { + recalculate_syntax(env->lines[i], i); + } convert_to_html(); /* write to stdout */ output_file(env, stdout); diff --git a/apps/kuroko.c b/apps/kuroko.c index 8508b621..69e60d42 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -13,23 +13,18 @@ #include #include -#ifdef __toaru__ #include -#include -#else -#ifndef NO_RLINE -#include "rline.h" -#endif -#include "kuroko.h" -#endif -#include "chunk.h" -#include "debug.h" -#include "vm.h" -#include "memory.h" -#include "scanner.h" -#include "compiler.h" -#include "util.h" +#define DEBUG +#include + +#include +#include +#include +#include +#include +#include +#include #define PROMPT_MAIN ">>> " #define PROMPT_BLOCK " > " @@ -263,7 +258,7 @@ static void tab_complete_func(rline_context_t * c) { KrkValue thisValue = findFromProperty(root, asToken); krk_push(thisValue); if (IS_CLOSURE(thisValue) || IS_BOUND_METHOD(thisValue) || - (IS_NATIVE(thisValue) && ((KrkNative*)AS_OBJECT(thisValue))->isMethod != 2)) { + (IS_NATIVE(thisValue) && !(((KrkNative*)AS_OBJECT(thisValue))->flags & KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY))) { size_t allocSize = s->length + 2; char * tmp = malloc(allocSize); size_t len = snprintf(tmp, allocSize, "%s(", s->chars); diff --git a/base/usr/include/kuroko b/base/usr/include/kuroko new file mode 120000 index 00000000..9432f989 --- /dev/null +++ b/base/usr/include/kuroko @@ -0,0 +1 @@ +../../../kuroko/src/kuroko \ No newline at end of file diff --git a/base/usr/include/kuroko/chunk.h b/base/usr/include/kuroko/chunk.h deleted file mode 100644 index 0d10c17b..00000000 --- a/base/usr/include/kuroko/chunk.h +++ /dev/null @@ -1,219 +0,0 @@ -#pragma once -/** - * @file chunk.h - * @brief Structures and enums for bytecode chunks. - */ -#include "kuroko.h" -#include "value.h" - -/** - * @brief Instruction opcode values - * - * The instruction opcode table is divided in four parts. The high two bits of each - * opcode encodes the number of operands to pull from the codeobject and thus the - * size (generally) of the instruction (note that OP_CLOSURE(_LONG) has additional - * arguments depending on the function it points to). - * - * 0-operand opcodes are "simple" instructions that generally only deal with stack - * values and require no additional arguments. - * - * 1- and 3- operand opcodes are paired as 'short' and 'long'. While the VM does not - * currently depend on these instructions having the same values in the lower 6 bits, - * it is recommended that this property remain true. - * - * 2-operand opcodes are generally jump instructions. - */ -typedef enum { - OP_ADD = 1, - OP_BITAND, - OP_BITNEGATE, - OP_BITOR, - OP_BITXOR, - OP_CLEANUP_WITH, - OP_CLOSE_UPVALUE, - OP_DIVIDE, - OP_DOCSTRING, - OP_EQUAL, - OP_FALSE, - OP_FINALIZE, - OP_GREATER, - OP_INHERIT, - OP_INVOKE_DELETE, - OP_INVOKE_DELSLICE, - OP_INVOKE_GETSLICE, - OP_INVOKE_GETTER, - OP_INVOKE_SETSLICE, - OP_INVOKE_SETTER, - OP_IS, - OP_LESS, - OP_MODULO, - OP_MULTIPLY, - OP_NEGATE, - OP_NONE, - OP_NOT, - OP_POP, - OP_POW, - OP_RAISE, - OP_RETURN, - OP_SHIFTLEFT, - OP_SHIFTRIGHT, - OP_SUBTRACT, - OP_SWAP, - OP_TRUE, - OP_FILTER_EXCEPT, - OP_INVOKE_ITER, - OP_INVOKE_CONTAINS, - OP_BREAKPOINT, /* NEVER output this instruction in the compiler or bad things can happen */ - OP_YIELD, - OP_ANNOTATE, - /* current highest: 44 */ - - OP_CALL = 64, - OP_CLASS, - OP_CLOSURE, - OP_CONSTANT, - OP_DEFINE_GLOBAL, - OP_DEL_GLOBAL, - OP_DEL_PROPERTY, - OP_DUP, - OP_EXPAND_ARGS, - OP_GET_GLOBAL, - OP_GET_LOCAL, - OP_GET_PROPERTY, - OP_GET_SUPER, - OP_GET_UPVALUE, - OP_IMPORT, - OP_IMPORT_FROM, - OP_INC, - OP_KWARGS, - OP_CLASS_PROPERTY, - OP_SET_GLOBAL, - OP_SET_LOCAL, - OP_SET_PROPERTY, - OP_SET_UPVALUE, - OP_TUPLE, - OP_UNPACK, - OP_LIST_APPEND, - OP_DICT_SET, - OP_SET_ADD, - OP_MAKE_LIST, - OP_MAKE_DICT, - OP_MAKE_SET, - OP_REVERSE, - - OP_JUMP_IF_FALSE = 128, - OP_JUMP_IF_TRUE, - OP_JUMP, - OP_LOOP, - OP_PUSH_TRY, - OP_PUSH_WITH, - - OP_CALL_LONG = 192, - OP_CLASS_LONG, - OP_CLOSURE_LONG, - OP_CONSTANT_LONG, - OP_DEFINE_GLOBAL_LONG, - OP_DEL_GLOBAL_LONG, - OP_DEL_PROPERTY_LONG, - OP_DUP_LONG, - OP_EXPAND_ARGS_LONG, - OP_GET_GLOBAL_LONG, - OP_GET_LOCAL_LONG, - OP_GET_PROPERTY_LONG, - OP_GET_SUPER_LONG, - OP_GET_UPVALUE_LONG, - OP_IMPORT_LONG, - OP_IMPORT_FROM_LONG, - OP_INC_LONG, - OP_KWARGS_LONG, - OP_CLASS_PROPERTY_LONG, - OP_SET_GLOBAL_LONG, - OP_SET_LOCAL_LONG, - OP_SET_PROPERTY_LONG, - OP_SET_UPVALUE_LONG, - OP_TUPLE_LONG, - OP_UNPACK_LONG, - OP_LIST_APPEND_LONG, - OP_DICT_SET_LONG, - OP_SET_ADD_LONG, - OP_MAKE_LIST_LONG, - OP_MAKE_DICT_LONG, - OP_MAKE_SET_LONG, - OP_REVERSE_LONG, -} KrkOpCode; - -/** - * @brief Map entry of instruction offsets to line numbers. - * - * Each code object contains an array of line mappings, indicating - * the start offset of each line. Since a line typically maps to - * multiple opcodes, and spans of many lines may map to no opcodes - * in the case of blank lines or docstrings, this array is stored - * as a sequence of pairs rather than a simple - * array of one or the other. - */ -typedef struct { - size_t startOffset; - size_t line; -} KrkLineMap; - -/** - * @brief Opcode chunk of a code object. - * - * Opcode chunks are internal to code objects and I'm not really - * sure why we're still separating them from the KrkCodeObjects. - * - * Stores four flexible arrays using three different formats: - * - Code, representing opcodes and operands. - * - Lines, representing offset-to-line mappings. - * - Filename, the string name of the source file. - * - Constants, an array of values referenced by the code object. - */ -typedef struct { - size_t count; - size_t capacity; - uint8_t * code; - - size_t linesCount; - size_t linesCapacity; - KrkLineMap * lines; - - KrkString * filename; - KrkValueArray constants; -} KrkChunk; - -/** - * @brief Initialize an opcode chunk. - * @memberof KrkChunk - */ -extern void krk_initChunk(KrkChunk * chunk); - -/** - * @memberof KrkChunk - * @brief Append a byte to an opcode chunk. - */ -extern void krk_writeChunk(KrkChunk * chunk, uint8_t byte, size_t line); - -/** - * @brief Release the resources allocated to an opcode chunk. - * @memberof KrkChunk - */ -extern void krk_freeChunk(KrkChunk * chunk); - -/** - * @brief Add a new constant value to an opcode chunk. - * @memberof KrkChunk - */ -extern size_t krk_addConstant(KrkChunk * chunk, KrkValue value); - -/** - * @brief Write an OP_CONSTANT(_LONG) instruction. - * @memberof KrkChunk - */ -extern void krk_emitConstant(KrkChunk * chunk, size_t ind, size_t line); - -/** - * @brief Add a new constant and write an instruction for it. - * @memberof KrkChunk - */ -extern size_t krk_writeConstant(KrkChunk * chunk, KrkValue value, size_t line); diff --git a/base/usr/include/kuroko/compiler.h b/base/usr/include/kuroko/compiler.h deleted file mode 100644 index 82baaec2..00000000 --- a/base/usr/include/kuroko/compiler.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -/** - * @file compiler.h - * @brief Exported methods for the source compiler. - */ -#include "object.h" - -/** - * @brief Compile a string to a code object. - * - * Compiles the source string 'src' into a code object. - * - * @param src Source code string to compile. - * @param fileName Path name of the source file or a representative string like "" - * @return The code object resulting from the compilation, or NULL if compilation failed. - */ -extern KrkCodeObject * krk_compile(const char * src, char * fileName); - -/** - * @brief Mark objects owned by the compiler as in use. - */ -extern void krk_markCompilerRoots(void); diff --git a/base/usr/include/kuroko/debug.h b/base/usr/include/kuroko/debug.h deleted file mode 100644 index 9c6e1e8d..00000000 --- a/base/usr/include/kuroko/debug.h +++ /dev/null @@ -1,248 +0,0 @@ -#pragma once -/** - * @file debug.h - * @brief Functions for debugging bytecode execution. - * - * This header provides functions for disassembly bytecode to - * readable instruction traces, mapping bytecode offsets to - * source code lines, and handling breakpoint instructions. - * - * Several of these functions are also exported to user code - * in the @ref mod_dis module. - * - * Note that these functions are not related to manage code - * exception handling, but instead inteaded to provide a low - * level interface to the VM's execution process and allow - * for the implementation of debuggers and debugger extensions. - */ -#include -#include "vm.h" -#include "chunk.h" -#include "object.h" - -/** - * @brief Print a disassembly of 'func' to the stream 'f'. - * - * Generates and prints a bytecode disassembly of the code object 'func', - * writing it to the requested stream. - * - * @param f Stream to write to. - * @param func Code object to disassemble. - * @param name Function name to display in disassembly output. - */ -extern void krk_disassembleCodeObject(FILE * f, KrkCodeObject * func, const char * name); - -/** - * @brief Print a disassembly of a single opcode instruction. - * - * Generates and prints a bytecode disassembly for one instruction from - * the code object 'func' at byte offset 'offset', printing the result to - * the requested stream and returning the size of the instruction. - * - * @param f Stream to write to. - * @param func Code object to disassemble. - * @param offset Byte offset of the instruction to disassemble. - * @return The size of the instruction in bytes. - */ -extern size_t krk_disassembleInstruction(FILE * f, KrkCodeObject * func, size_t offset); - -/** - * @brief Obtain the line number for a byte offset into a bytecode chunk. - * - * Scans the line mapping table for the given chunk to find the - * correct line number from the original source file for the instruction - * at byte index 'offset'. - * - * @param chunk Bytecode chunk containing the instruction. - * @param offset Byte offset of the instruction to locate. - * @return Line number, 1-indexed. - */ -extern size_t krk_lineNumber(KrkChunk * chunk, size_t offset); - -/* Internal stuff */ -extern void _createAndBind_disMod(void); - -/** - * @brief Called by the VM when a breakpoint is encountered. - * - * Internal method, should not generally be called. - */ -extern int krk_debugBreakpointHandler(void); - -/** - * @brief Called by the VM on single step. - * - * Handles calling the registered debugger hook, if one has - * been set, and performing the requested response action. - * Also takes care of re-enabling REPEAT breakpoints. - * - * Internal method, should not generally be called. - */ -extern int krk_debuggerHook(KrkCallFrame * frame); - -/** - * @brief Function pointer for a debugger hook. - * @ref krk_debug_registerCallback() - */ -typedef int (*KrkDebugCallback)(KrkCallFrame *frame); - -/** - * @brief Register a debugger callback. - * - * The registered function @p hook will be called when an - * OP_BREAKPOINT instruction is encountered. The debugger - * is provided a pointer to the active frame and can use - * functions from the krk_debug_* suite to examine the - * thread state, execute more code, and resume execution. - * - * The debugger hook will be called from the thread that - * encountered the breakpoint, and should return one of - * the KRK_DEBUGGER_ status values to inform the VM of - * what action to take. - * - * @param hook The hook function to attach. - * @return 0 if the hook was registered; 1 if a hook was - * already registered, in which case the new hook - * has not been registered. - */ -extern int krk_debug_registerCallback(KrkDebugCallback hook); - -/** - * @brief Add a breakpoint to the given line of a file. - * - * The interpreter will scan all code objects and attach - * a breakpoint instruction to the first such object that - * has a match filename and contains an instruction with - * a matching line mapping. Breakpoints can only be added - * to code which has already been compiled. - * - * @param filename KrkString * representation of a source - * code filename to look for. - * @param line The line to set the breakpoint at. - * @param flags Allows configuring the disposition of the breakpoint. - * @return A breakpoint identifier handle on success, or -1 on failure. - */ -extern int krk_debug_addBreakpointFileLine(KrkString * filename, size_t line, int flags); - -/** - * @brief Add a breakpoint to the given code object. - * - * A new breakpoint is added to the breakpoint table and - * the code object's bytecode is overwritten to insert - * the OP_BREAKPOINT instruction. - * - * Callers must ensure that @p offset points to the opcode - * portion of an instruction, and not an operand, or the - * attempt to add a breakpoint can corrupt the bytecode. - * - * @param codeObject KrkCodeObject* for the code object to break on. - * @param offset Bytecode offset to insert the breakpoint at. - * @param flags Allows configuring the disposition of the breakpoint. - * @return A breakpoint identifier handle on success, or -1 on failure. - */ -extern int krk_debug_addBreakpointCodeOffset(KrkCodeObject * codeObject, size_t offset, int flags); - -/** - * @brief Remove a breakpoint from the breakpoint table. - * - * Removes the breakpoint @p breakpointId from the breakpoint - * table, restoring the bytecode instruction for it if it - * was enabled. - * - * @param breakpointId The breakpoint to remove. - * @return 0 on success, 1 if the breakpoint identifier is invalid. - */ -extern int krk_debug_removeBreakpoint(int breakpointId); - -/** - * @brief Enable a breakpoint. - * - * Writes the OP_BREAKPOINT instruction into the function - * bytecode chunk for the given breakpoint. - * - * @param breakpointId The breakpoint to enable. - * @return 0 on success, 1 if the breakpoint identifier is invalid. - */ -extern int krk_debug_enableBreakpoint(int breakpointId); - -/** - * @brief Disable a breakpoint. - * - * Restores the bytecode instructions for the given breakpoint - * if it is currently enabled. - * - * No error is returned if the breakpoint was already disabled. - * - * @param breakpointId The breakpoint to disable. - * @return 0 on success, 1 if the breakpoint identifier is invalid. - */ -extern int krk_debug_disableBreakpoint(int breakpointId); - -/** - * @brief Enable single stepping in the current thread. - */ -extern void krk_debug_enableSingleStep(void); - -/** - * @brief Disable single stepping in the current thread. - */ -extern void krk_debug_disableSingleStep(void); - -/** - * @brief Safely dump a traceback to stderr. - * - * Wraps @ref krk_dumpTraceback() so it can be safely - * called from a debugger. - */ -extern void krk_debug_dumpTraceback(void); - -/** - * @brief Retreive information on a breakpoint. - * - * Can be called by debuggers to examine the details of a breakpoint by its handle. - * Information is returned through the pointers provided as parameters. - * - * @param breakIndex Breakpoint handle to examine. - * @param funcOut (Out) The code object this breakpoint is in. - * @param offsetOut (Out) The bytecode offset within the code object where the breakpoint is located. - * @param flagsOut (Out) The configuration flags for the breakpoint. - * @param enabledOut (Out) Whether the breakpoint is enabled or not. - * @return 0 on success, -1 on out of range, -2 if the selected slot was removed. - */ -extern int krk_debug_examineBreakpoint(int breakIndex, KrkCodeObject ** funcOut, size_t * offsetOut, int * flagsOut, int *enabledOut); - -/** - * @brief Print the elements on the stack. - * - * Prints the elements on the stack for the current thread to @p file, - * highlighting @p frame as the activate call point and indicating - * where its arguments start. - */ -extern void krk_debug_dumpStack(FILE * f, KrkCallFrame * frame); - -/** - * @def KRK_BREAKPOINT_NORMAL - * - * This breakpoint should fire once and then remain in the table - * to be re-enabled later. - * - * @def KRK_BREAKPOINT_ONCE - * - * This breakpoint should fire once and then be removed from the - * breakpoint table. - * - * @def KRK_BREAKPOINT_REPEAT - * - * After this breakpoint has fired and execution resumes, the - * interpreter should re-enable it to fire again until it is - * removed by a call to @ref krk_debug_removeBreakpoint() - */ -#define KRK_BREAKPOINT_NORMAL 0 -#define KRK_BREAKPOINT_ONCE 1 -#define KRK_BREAKPOINT_REPEAT 2 - -#define KRK_DEBUGGER_CONTINUE 0 -#define KRK_DEBUGGER_ABORT 1 -#define KRK_DEBUGGER_STEP 2 -#define KRK_DEBUGGER_RAISE 3 -#define KRK_DEBUGGER_QUIT 4 diff --git a/base/usr/include/kuroko/kuroko.h b/base/usr/include/kuroko/kuroko.h deleted file mode 100644 index 0ed6dd50..00000000 --- a/base/usr/include/kuroko/kuroko.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once -/** - * @file kuroko.h - * @brief Top-level header with configuration macros. - */ -#include -#include -#include - -#if defined(__EMSCRIPTEN__) -typedef long long krk_integer_type; -# define PRIkrk_int "%lld" -# define PRIkrk_hex "%llx" -# define parseStrInt strtoll -#elif defined(_WIN32) -typedef long long krk_integer_type; -# define PRIkrk_int "%I64d" -# define PRIkrk_hex "%I64x" -# define parseStrInt strtoll -# define ENABLE_THREADING -# else -typedef long krk_integer_type; -# define PRIkrk_int "%ld" -# define PRIkrk_hex "%lx" -# define parseStrInt strtol -# define ENABLE_THREADING -#endif - -#define ENABLE_THREADING - -#ifdef DEBUG -#define ENABLE_DISASSEMBLY -#define ENABLE_TRACING -#define ENABLE_SCAN_TRACING -#define ENABLE_STRESS_GC -#endif - diff --git a/base/usr/include/kuroko/memory.h b/base/usr/include/kuroko/memory.h deleted file mode 100644 index 0efecce7..00000000 --- a/base/usr/include/kuroko/memory.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once -/** - * @file memory.h - * @brief Functions for dealing with garbage collection and memory allocation. - */ -#include "kuroko.h" -#include "object.h" -#include "table.h" - -#define GROW_CAPACITY(c) ((c) < 8 ? 8 : (c) * 2) -#define GROW_ARRAY(t,p,o,n) (t*)krk_reallocate(p,sizeof(t)*o,sizeof(t)*n) - -#define FREE_ARRAY(t,a,c) krk_reallocate(a,sizeof(t) * c, 0) -#define FREE(t,p) krk_reallocate(p,sizeof(t),0) - -#define ALLOCATE(type, count) (type*)krk_reallocate(NULL,0,sizeof(type)*(count)) - -/** - * @brief Resize an allocated heap object. - * - * Allocates or reallocates the heap object 'ptr', tracking changes - * in sizes from 'old' to 'new'. If 'ptr' is NULL, 'old' should be 0, - * and a new pointer will be allocated of size 'new'. - * - * @param ptr Heap object to resize. - * @param old Current size of the object. - * @param new New size of the object. - * @return New pointer for heap object. - */ -extern void * krk_reallocate(void * ptr, size_t old, size_t new); - -/** - * @brief Release all objects. - * - * Generally called automatically by krk_freeVM(); releases all of - * the GC-tracked heap objects. - */ -extern void krk_freeObjects(void); - -/** - * @brief Run a cycle of the garbage collector. - * - * Runs one scan-sweep cycle of the garbage collector, potentially - * freeing unused resources and advancing potentially-unused - * resources to the next stage of removal. - * - * @return The number of bytes released by this collection cycle. - */ -extern size_t krk_collectGarbage(void); - -/** - * @brief During a GC scan cycle, mark a value as used. - * - * When defining a new type in a C extension, this function should - * be used by the type's _ongcscan callback to mark any values not - * already tracked by the garbage collector. - * - * @param value The value to mark. - */ -extern void krk_markValue(KrkValue value); - -/** - * @brief During a GC scan cycle, mark an object as used. - * - * Equivalent to krk_markValue but operates directly on an object. - * - * @param object The object to mark. - */ -extern void krk_markObject(KrkObj * object); - -/** - * @brief During a GC scan cycle, mark the contents of a table as used. - * - * Marks all keys and values in a table as used. Generally applied - * to the internal storage of mapping types. - * - * @param table The table to mark. - */ -extern void krk_markTable(KrkTable * table); - diff --git a/base/usr/include/kuroko/object.h b/base/usr/include/kuroko/object.h deleted file mode 100644 index df137c28..00000000 --- a/base/usr/include/kuroko/object.h +++ /dev/null @@ -1,411 +0,0 @@ -#pragma once -/** - * @file object.h - * @brief Struct definitions for core object types. - */ -#include -#include "kuroko.h" -#include "value.h" -#include "chunk.h" -#include "table.h" - -#ifdef ENABLE_THREADING -#include -#endif - -typedef enum { - KRK_OBJ_CODEOBJECT, - KRK_OBJ_NATIVE, - KRK_OBJ_CLOSURE, - KRK_OBJ_STRING, - KRK_OBJ_UPVALUE, - KRK_OBJ_CLASS, - KRK_OBJ_INSTANCE, - KRK_OBJ_BOUND_METHOD, - KRK_OBJ_TUPLE, - KRK_OBJ_BYTES, -} KrkObjType; - -#undef KrkObj -/** - * @brief The most basic object type. - * - * This is the base of all object types and contains - * the core structures for garbage collection. - */ -typedef struct KrkObj { - KrkObjType type; - unsigned char isMarked:1; - unsigned char inRepr:1; - unsigned char generation:2; - unsigned char isImmortal:1; - uint32_t hash; - struct KrkObj * next; -} KrkObj; - -typedef enum { - KRK_STRING_ASCII = 0, - KRK_STRING_UCS1 = 1, - KRK_STRING_UCS2 = 2, - KRK_STRING_UCS4 = 4, - KRK_STRING_INVALID = 5, -} KrkStringType; - -#undef KrkString -/** - * @brief Immutable sequence of Unicode codepoints. - * @extends KrkObj - */ -typedef struct KrkString { - KrkObj obj; - KrkStringType type; - size_t length; - size_t codesLength; - char * chars; - void * codes; -} KrkString; - -/** - * @brief Immutable sequence of bytes. - * @extends KrkObj - */ -typedef struct { - KrkObj obj; - size_t length; - uint8_t * bytes; -} KrkBytes; - -/** - * @brief Storage for values referenced from nested functions. - * @extends KrkObj - */ -typedef struct KrkUpvalue { - KrkObj obj; - int location; - KrkValue closed; - struct KrkUpvalue * next; - struct KrkThreadState * owner; -} KrkUpvalue; - -/** - * @brief Metadata on a local variable name in a function. - * - * This is used by the disassembler to print the names of - * locals when they are referenced by instructions. - */ -typedef struct { - size_t id; - size_t birthday; - size_t deathday; - KrkString * name; -} KrkLocalEntry; - -struct KrkInstance; - -/** - * @brief Code object. - * @extends KrkObj - * - * Contains the static data associated with a chunk of bytecode. - */ -typedef struct { - KrkObj obj; - short requiredArgs; - short keywordArgs; - size_t upvalueCount; - KrkChunk chunk; - KrkString * name; - KrkString * docstring; - KrkValueArray requiredArgNames; - KrkValueArray keywordArgNames; - size_t localNameCapacity; - size_t localNameCount; - KrkLocalEntry * localNames; - unsigned char collectsArguments:1; - unsigned char collectsKeywords:1; - unsigned char isGenerator:1; - struct KrkInstance * globalsContext; - KrkString * qualname; -} KrkCodeObject; - -/** - * @brief Function object. - * @extends KrkObj - * - * Not to be confused with code objects, a closure is a single instance of a function. - */ -typedef struct { - KrkObj obj; - KrkCodeObject * function; - KrkUpvalue ** upvalues; - size_t upvalueCount; - unsigned char isClassMethod:1; - unsigned char isStaticMethod:1; - KrkValue annotations; - KrkTable fields; -} KrkClosure; - -typedef void (*KrkCleanupCallback)(struct KrkInstance *); - -/** - * @brief Type object. - * @extends KrkObj - * - * Represents classes defined in user code as well as classes defined - * by C extensions to represent method tables for new types. - */ -typedef struct KrkClass { - KrkObj obj; - KrkString * name; - KrkString * filename; - KrkString * docstring; - struct KrkClass * base; - KrkTable methods; - size_t allocSize; - KrkCleanupCallback _ongcscan; - KrkCleanupCallback _ongcsweep; - - /* Quick access for common stuff */ - KrkObj * _getter; - KrkObj * _setter; - KrkObj * _getslice; - KrkObj * _reprer; - KrkObj * _tostr; - KrkObj * _call; - KrkObj * _init; - KrkObj * _eq; - KrkObj * _len; - KrkObj * _enter; - KrkObj * _exit; - KrkObj * _delitem; - KrkObj * _iter; - KrkObj * _getattr; - KrkObj * _dir; - KrkObj * _setslice; - KrkObj * _delslice; - KrkObj * _contains; - KrkObj * _descget; - KrkObj * _descset; - KrkObj * _classgetitem; -} KrkClass; - -/** - * @brief An object of a class. - * @extends KrkObj - * - * Created by class initializers, instances are the standard type of objects - * built by managed code. Not all objects are instances, but all instances are - * objects, and all instances have well-defined class. - */ -typedef struct KrkInstance { - KrkObj obj; - KrkClass * _class; - KrkTable fields; -} KrkInstance; - -/** - * @brief A function that has been attached to an object to serve as a method. - * @extends KrkObj - * - * When a bound method is called, its receiver is implicitly extracted as - * the first argument. Bound methods are created whenever a method is retreived - * from the class of a value. - */ -typedef struct { - KrkObj obj; - KrkValue receiver; - KrkObj * method; -} KrkBoundMethod; - -typedef KrkValue (*NativeFn)(int argCount, KrkValue* args, int hasKwargs); - -/** - * @brief Managed binding to a C function. - * @extends KrkObj - * - * Represents a C function that has been exposed to managed code. - */ -typedef struct { - KrkObj obj; - NativeFn function; - const char * name; - const char * doc; - int isMethod; -} KrkNative; - -/** - * @brief Immutable sequence of arbitrary values. - * @extends KrkObj - * - * Tuples are fixed-length non-mutable collections of values intended - * for use in situations where the flexibility of a list is not needed. - */ -typedef struct { - KrkObj obj; - KrkValueArray values; -} KrkTuple; - -/** - * @brief Mutable array of values. - * @extends KrkInstance - * - * A list is a flexible array of values that can be extended, cleared, - * sorted, rearranged, iterated over, etc. - */ -typedef struct { - KrkInstance inst; - KrkValueArray values; -#ifdef ENABLE_THREADING - pthread_rwlock_t rwlock; -#endif -} KrkList; - -/** - * @brief Flexible mapping type. - * @extends KrkInstance - * - * Provides key-to-value mappings as a first-class object type. - */ -typedef struct { - KrkInstance inst; - KrkTable entries; -} KrkDict; - -struct DictItems { - KrkInstance inst; - KrkValue dict; - size_t i; -}; - -struct DictKeys { - KrkInstance inst; - KrkValue dict; - size_t i; -}; - -/** - * @brief Yield ownership of a C string to the GC and obtain a string object. - * @memberof KrkString - * - * Creates a string object represented by the characters in 'chars' and of - * length 'length'. The source string must be nil-terminated and must - * remain valid for the lifetime of the object, as its ownership is yielded - * to the GC. Useful for strings which were allocated on the heap by - * other mechanisms. - * - * 'chars' must be a nil-terminated C string representing a UTF-8 - * character sequence. - * - * @param chars C string to take ownership of. - * @param length Length of the C string. - * @return A string object. - */ -extern KrkString * krk_takeString(char * chars, size_t length); - -/** - * @brief Obtain a string object representation of the given C string. - * @memberof KrkString - * - * Converts the C string 'chars' into a string object by checking the - * string table for it. If the string table does not have an equivalent - * string, a new one will be created by copying 'chars'. - * - * 'chars' must be a nil-terminated C string representing a UTF-8 - * character sequence. - * - * @param chars C string to convert to a string object. - * @param length Length of the C string. - * @return A string object. - */ -extern KrkString * krk_copyString(const char * chars, size_t length); - -/** - * @brief Ensure that a codepoint representation of a string is available. - * @memberof KrkString - * - * Obtain an untyped pointer to the codepoint representation of a string. - * If the string does not have a codepoint representation allocated, it will - * be generated by this function and remain with the string for the duration - * of its lifetime. - * - * @param string String to obtain the codepoint representation of. - * @return A pointer to the bytes of the codepoint representation. - */ -extern void * krk_unicodeString(KrkString * string); - -/** - * @brief Obtain the codepoint at a given index in a string. - * @memberof KrkString - * - * This is a convenience function which ensures that a Unicode codepoint - * representation has been generated and returns the codepoint value at - * the requested index. If you need to find multiple codepoints, it - * is recommended that you use the KRK_STRING_FAST macro after calling - * krk_unicodeString instead. - * - * @note This function does not perform any bounds checking. - * - * @param string String to index into. - * @param index Offset of the codepoint to obtain. - * @return Integer representation of the codepoint at the requested index. - */ -extern uint32_t krk_unicodeCodepoint(KrkString * string, size_t index); - -/** - * @brief Convert an integer codepoint to a UTF-8 byte representation. - * @memberof KrkString - * - * Converts a single codepoint to a sequence of bytes containing the - * UTF-8 representation. 'out' must be allocated by the caller. - * - * @param value Codepoint to encode. - * @param out Array to write UTF-8 sequence into. - * @return The length of the UTF-8 sequence, in bytes. - */ -extern size_t krk_codepointToBytes(krk_integer_type value, unsigned char * out); - -/* Internal stuff. */ -extern NativeFn KrkGenericAlias; -extern KrkCodeObject * krk_newCodeObject(void); -extern KrkNative * krk_newNative(NativeFn function, const char * name, int type); -extern KrkClosure * krk_newClosure(KrkCodeObject * function); -extern KrkUpvalue * krk_newUpvalue(int slot); -extern KrkClass * krk_newClass(KrkString * name, KrkClass * base); -extern KrkInstance * krk_newInstance(KrkClass * _class); -extern KrkBoundMethod * krk_newBoundMethod(KrkValue receiver, KrkObj * method); -extern KrkTuple * krk_newTuple(size_t length); -extern KrkBytes * krk_newBytes(size_t length, uint8_t * source); -extern void krk_bytesUpdateHash(KrkBytes * bytes); -extern void krk_tupleUpdateHash(KrkTuple * self); - -#define KRK_STRING_FAST(string,offset) (uint32_t)\ - (string->type <= 1 ? ((uint8_t*)string->codes)[offset] : \ - (string->type == 2 ? ((uint16_t*)string->codes)[offset] : \ - ((uint32_t*)string->codes)[offset])) - -#define CODEPOINT_BYTES(cp) (cp < 0x80 ? 1 : (cp < 0x800 ? 2 : (cp < 0x10000 ? 3 : 4))) - -#define krk_isObjType(v,t) (IS_OBJECT(v) && (AS_OBJECT(v)->type == (t))) -#define OBJECT_TYPE(value) (AS_OBJECT(value)->type) -#define IS_STRING(value) krk_isObjType(value, KRK_OBJ_STRING) -#define AS_STRING(value) ((KrkString *)AS_OBJECT(value)) -#define AS_CSTRING(value) (((KrkString *)AS_OBJECT(value))->chars) -#define IS_BYTES(value) krk_isObjType(value, KRK_OBJ_BYTES) -#define AS_BYTES(value) ((KrkBytes*)AS_OBJECT(value)) -#define IS_NATIVE(value) krk_isObjType(value, KRK_OBJ_NATIVE) -#define AS_NATIVE(value) ((KrkNative *)AS_OBJECT(value)) -#define IS_CLOSURE(value) krk_isObjType(value, KRK_OBJ_CLOSURE) -#define AS_CLOSURE(value) ((KrkClosure *)AS_OBJECT(value)) -#define IS_CLASS(value) krk_isObjType(value, KRK_OBJ_CLASS) -#define AS_CLASS(value) ((KrkClass *)AS_OBJECT(value)) -#define IS_INSTANCE(value) krk_isObjType(value, KRK_OBJ_INSTANCE) -#define AS_INSTANCE(value) ((KrkInstance *)AS_OBJECT(value)) -#define IS_BOUND_METHOD(value) krk_isObjType(value, KRK_OBJ_BOUND_METHOD) -#define AS_BOUND_METHOD(value) ((KrkBoundMethod*)AS_OBJECT(value)) -#define IS_TUPLE(value) krk_isObjType(value, KRK_OBJ_TUPLE) -#define AS_TUPLE(value) ((KrkTuple *)AS_OBJECT(value)) -#define AS_LIST(value) (&((KrkList *)AS_OBJECT(value))->values) -#define AS_DICT(value) (&((KrkDict *)AS_OBJECT(value))->entries) - -#define IS_codeobject(value) krk_isObjType(value, KRK_OBJ_CODEOBJECT) -#define AS_codeobject(value) ((KrkCodeObject *)AS_OBJECT(value)) diff --git a/base/usr/include/kuroko/opcodes.h b/base/usr/include/kuroko/opcodes.h deleted file mode 100644 index 12e19dff..00000000 --- a/base/usr/include/kuroko/opcodes.h +++ /dev/null @@ -1,80 +0,0 @@ -SIMPLE(OP_RETURN) -SIMPLE(OP_ADD) -SIMPLE(OP_SUBTRACT) -SIMPLE(OP_MULTIPLY) -SIMPLE(OP_DIVIDE) -SIMPLE(OP_NEGATE) -SIMPLE(OP_MODULO) -SIMPLE(OP_NONE) -SIMPLE(OP_TRUE) -SIMPLE(OP_FALSE) -SIMPLE(OP_NOT) -SIMPLE(OP_EQUAL) -SIMPLE(OP_GREATER) -SIMPLE(OP_LESS) -SIMPLE(OP_POP) -SIMPLE(OP_INHERIT) -SIMPLE(OP_RAISE) -SIMPLE(OP_CLOSE_UPVALUE) -SIMPLE(OP_DOCSTRING) -SIMPLE(OP_BITOR) -SIMPLE(OP_BITXOR) -SIMPLE(OP_BITAND) -SIMPLE(OP_SHIFTLEFT) -SIMPLE(OP_SHIFTRIGHT) -SIMPLE(OP_BITNEGATE) -SIMPLE(OP_INVOKE_GETTER) -SIMPLE(OP_INVOKE_SETTER) -SIMPLE(OP_INVOKE_DELETE) -SIMPLE(OP_INVOKE_GETSLICE) -SIMPLE(OP_INVOKE_SETSLICE) -SIMPLE(OP_INVOKE_DELSLICE) -SIMPLE(OP_INVOKE_ITER) -SIMPLE(OP_INVOKE_CONTAINS) -SIMPLE(OP_SWAP) -SIMPLE(OP_FINALIZE) -SIMPLE(OP_IS) -SIMPLE(OP_POW) -SIMPLE(OP_CLEANUP_WITH) -SIMPLE(OP_FILTER_EXCEPT) -SIMPLE(OP_BREAKPOINT) -SIMPLE(OP_YIELD) -SIMPLE(OP_ANNOTATE) -CONSTANT(OP_DEFINE_GLOBAL,(void)0) -CONSTANT(OP_CONSTANT,(void)0) -CONSTANT(OP_GET_GLOBAL,(void)0) -CONSTANT(OP_SET_GLOBAL,(void)0) -CONSTANT(OP_DEL_GLOBAL,(void)0) -CONSTANT(OP_CLASS,(void)0) -CONSTANT(OP_GET_PROPERTY, (void)0) -CONSTANT(OP_SET_PROPERTY, (void)0) -CONSTANT(OP_DEL_PROPERTY,(void)0) -CONSTANT(OP_CLASS_PROPERTY, (void)0) -CONSTANT(OP_CLOSURE, CLOSURE_MORE) -CONSTANT(OP_IMPORT, (void)0) -CONSTANT(OP_IMPORT_FROM, (void)0) -CONSTANT(OP_GET_SUPER, (void)0) -OPERAND(OP_KWARGS, (void)0) -OPERAND(OP_SET_LOCAL, LOCAL_MORE) -OPERAND(OP_GET_LOCAL, LOCAL_MORE) -OPERAND(OP_SET_UPVALUE, (void)0) -OPERAND(OP_GET_UPVALUE, (void)0) -OPERAND(OP_CALL, (void)0) -OPERAND(OP_INC, (void)0) -OPERAND(OP_TUPLE, (void)0) -OPERAND(OP_UNPACK, (void)0) -OPERAND(OP_DUP,(void)0) -OPERAND(OP_EXPAND_ARGS,EXPAND_ARGS_MORE) -OPERAND(OP_LIST_APPEND, (void)0) -OPERAND(OP_DICT_SET, (void)0) -OPERAND(OP_SET_ADD, (void)0) -OPERAND(OP_MAKE_LIST, (void)0) -OPERAND(OP_MAKE_DICT, (void)0) -OPERAND(OP_MAKE_SET, (void)0) -OPERAND(OP_REVERSE, (void)0) -JUMP(OP_JUMP,+) -JUMP(OP_JUMP_IF_FALSE,+) -JUMP(OP_JUMP_IF_TRUE,+) -JUMP(OP_LOOP,-) -JUMP(OP_PUSH_TRY,+) -JUMP(OP_PUSH_WITH,+) diff --git a/base/usr/include/kuroko/scanner.h b/base/usr/include/kuroko/scanner.h deleted file mode 100644 index d713adec..00000000 --- a/base/usr/include/kuroko/scanner.h +++ /dev/null @@ -1,186 +0,0 @@ -#pragma once -/** - * @file scanner.h - * @brief Definitions used by the token scanner. - */ - -typedef enum { - TOKEN_LEFT_PAREN, TOKEN_RIGHT_PAREN, - TOKEN_LEFT_BRACE, TOKEN_RIGHT_BRACE, - TOKEN_LEFT_SQUARE, TOKEN_RIGHT_SQUARE, - TOKEN_COLON, - TOKEN_COMMA, - TOKEN_DOT, - TOKEN_MINUS, - TOKEN_PLUS, - TOKEN_SEMICOLON, - TOKEN_SOLIDUS, - TOKEN_ASTERISK, - TOKEN_POW, - TOKEN_MODULO, - TOKEN_AT, - TOKEN_CARET, /* ^ (xor) */ - TOKEN_AMPERSAND, /* & (and) */ - TOKEN_PIPE, /* | (or) */ - TOKEN_TILDE, /* ~ (negate) */ - TOKEN_LEFT_SHIFT, /* << */ - TOKEN_RIGHT_SHIFT,/* >> */ - TOKEN_BANG, - TOKEN_GREATER, - TOKEN_LESS, - TOKEN_ARROW, /* -> */ - TOKEN_WALRUS, /* := */ - - /* Comparisons */ - TOKEN_GREATER_EQUAL, - TOKEN_LESS_EQUAL, - TOKEN_BANG_EQUAL, - TOKEN_EQUAL_EQUAL, - - /* Assignments */ - TOKEN_EQUAL, - TOKEN_LSHIFT_EQUAL, /* <<= */ - TOKEN_RSHIFT_EQUAL, /* >>= */ - TOKEN_PLUS_EQUAL, /* += */ - TOKEN_MINUS_EQUAL, /* -= */ - TOKEN_PLUS_PLUS, /* ++ */ - TOKEN_MINUS_MINUS, /* -- */ - TOKEN_CARET_EQUAL, - TOKEN_PIPE_EQUAL, - TOKEN_AMP_EQUAL, - TOKEN_SOLIDUS_EQUAL, - TOKEN_ASTERISK_EQUAL, - TOKEN_POW_EQUAL, - TOKEN_MODULO_EQUAL, - - TOKEN_STRING, - TOKEN_BIG_STRING, - TOKEN_NUMBER, - - /* - * Everything after this, up to indentation, - * consists of alphanumerics. - */ - TOKEN_IDENTIFIER, - TOKEN_AND, - TOKEN_CLASS, - TOKEN_DEF, - TOKEN_DEL, - TOKEN_ELSE, - TOKEN_FALSE, - TOKEN_FOR, - TOKEN_IF, - TOKEN_IMPORT, - TOKEN_IN, - TOKEN_IS, - TOKEN_LET, - TOKEN_NONE, - TOKEN_NOT, - TOKEN_OR, - TOKEN_ELIF, - TOKEN_PASS, - TOKEN_RETURN, - TOKEN_SELF, - TOKEN_SUPER, - TOKEN_TRUE, - TOKEN_WHILE, - TOKEN_TRY, - TOKEN_EXCEPT, - TOKEN_RAISE, - TOKEN_BREAK, - TOKEN_CONTINUE, - TOKEN_AS, - TOKEN_FROM, - TOKEN_LAMBDA, - TOKEN_ASSERT, - TOKEN_YIELD, - TOKEN_WITH, - - TOKEN_PREFIX_B, - TOKEN_PREFIX_F, - - TOKEN_INDENTATION, - - TOKEN_EOL, - TOKEN_RETRY, - TOKEN_ERROR, - TOKEN_EOF, -} KrkTokenType; - -/** - * @brief A token from the scanner. - * - * Represents a single scanned item from the scanner, such as a keyword, - * string literal, numeric literal, identifier, etc. - */ -typedef struct { - KrkTokenType type; - const char * start; - size_t length; - size_t line; - const char * linePtr; - size_t col; - size_t literalWidth; -} KrkToken; - -/** - * @brief Token scanner state. - * - * Stores the state of the compiler's scanner, reading from a source - * character string and tracking the current line. - */ -typedef struct { - const char * start; - const char * cur; - const char * linePtr; - size_t line; - int startOfLine; - int hasUnget; - KrkToken unget; -} KrkScanner; - -/** - * @brief Initialize the compiler to scan tokens from 'src'. - * - * FIXME: There is currently only a single static scanner state; - * along with making the compiler re-entrant, the scanner - * needs to also be re-entrant; there's really no reason - * these can't all just take a KrkScanner* argument. - */ -extern void krk_initScanner(const char * src); - -/** - * @brief Read the next token from the scanner. - * - * FIXME: Or, maybe the scanner shouldn't even be available outside - * of the compiler, that would make some sense as well, as it's - * a low-level detail, but we use it for tab completion in the - * main repl, so I'm not sure that's feasible right now. - */ -extern KrkToken krk_scanToken(void); - -/** - * @brief Push a token back to the scanner to be reprocessed. - * - * Pushes a previously-scanned token back to the scanner. - * Used to implement small backtracking operations at the - * end of block constructs like 'if' and 'try'. - */ -extern void krk_ungetToken(KrkToken token); - -/** - * @brief Rewind the scanner to a previous state. - * - * Resets the current scanner to the state in 'to'. Used by - * the compiler to implement comprehensions, which would otherwise - * not be possible in a single-pass compiler. - */ -extern void krk_rewindScanner(KrkScanner to); - -/** - * @brief Retreive a copy of the current scanner state. - * - * Used with krk_rewindScanner() to implement rescanning - * for comprehensions. - */ -extern KrkScanner krk_tellScanner(void); diff --git a/base/usr/include/kuroko/table.h b/base/usr/include/kuroko/table.h deleted file mode 100644 index 8ac343ab..00000000 --- a/base/usr/include/kuroko/table.h +++ /dev/null @@ -1,153 +0,0 @@ -#pragma once -/** - * @file table.h - * @brief Implementation of a generic hash table. - * - * I was going to just use the ToaruOS hashmap library, but to make following - * the book easier, let's just start from their Table implementation; it has - * an advantage of using stored entries and fixed arrays, so it has some nice - * properties despite being chained internally... - */ - -#include -#include "kuroko.h" -#include "value.h" -#include "threads.h" - -/** - * @brief One (key,value) pair in a table. - */ -typedef struct { - KrkValue key; - KrkValue value; -} KrkTableEntry; - -/** - * @brief Simple hash table of arbitrary keys to values. - */ -typedef struct { - size_t count; - size_t capacity; - KrkTableEntry * entries; -} KrkTable; - -/** - * @brief Initialize a hash table. - * @memberof KrkTable - * - * This should be called for any new hash table, especially ones - * initialized in heap or stack space, to set up the capacity, count - * and initial entries pointer. - * - * @param table Hash table to initialize. - */ -extern void krk_initTable(KrkTable * table); - -/** - * @brief Release resources associated with a hash table. - * @memberof KrkTable - * - * Frees the entries array for the table and resets count and capacity. - * - * @param table Hash table to release. - */ -extern void krk_freeTable(KrkTable * table); - -/** - * @brief Add all key-value pairs from 'from' into 'to'. - * @memberof KrkTable - * - * Copies each key-value pair from one hash table to another. If a key - * from 'from' already exists in 'to', the existing value in 'to' will be - * overwritten with the value from 'from'. - * - * @param from Source table. - * @param to Destination table. - */ -extern void krk_tableAddAll(KrkTable * from, KrkTable * to); - -/** - * @brief Find a character sequence in the string interning table. - * @memberof KrkTable - * - * Scans through the entries in a given table - usually vm.strings - to find - * an entry equivalent to the string specified by the 'chars' and 'length' - * parameters, using the 'hash' parameter to speed up lookup. - * - * @param table Should always be @c &vm.strings - * @param chars C array of chars representing the string. - * @param length Length of the string. - * @param hash Precalculated hash value for the string. - * @return If the string was found, the string object representation, else NULL. - */ -extern KrkString * krk_tableFindString(KrkTable * table, const char * chars, size_t length, uint32_t hash); - -/** - * @brief Assign a value to a key in a table. - * @memberof KrkTable - * - * Inserts the key-value pair specified by 'key' and 'value' into the hash - * table 'table', replacing any value that was already preseng with the - * same key. - * - * @param table Table to assign to. - * @param key Key to assign. - * @param value Value to assign to the key. - * @return 0 if the key was already present and has been overwritten, 1 if the key is new to the table. - */ -extern int krk_tableSet(KrkTable * table, KrkValue key, KrkValue value); - -/** - * @brief Obtain the value associated with a key in a table. - * @memberof KrkTable - * - * Scans the table 'table' for the key 'key' and, if found, outputs - * the associated value to *value. If the key is not found, then - * *value will not be changed. - * - * @param table Table to look up. - * @param key Key to look for. - * @param value Output pointer to place resulting value in. - * @return 0 if the key was not found, 1 if it was. - */ -extern int krk_tableGet(KrkTable * table, KrkValue key, KrkValue * value); - -/** - * @brief Remove a key from a hash table. - * @memberof KrkTable - * - * Scans the table 'table' for the key 'key' and, if found, removes - * the entry, replacing it with a tombstone value. - * - * @param table Table to delete from. - * @param key Key to delete. - * @return 1 if the value was found and deleted, 0 if it was not present. - */ -extern int krk_tableDelete(KrkTable * table, KrkValue key); - -/** - * @brief Internal table scan function. - * @memberof KrkTable - * - * Scans through the the entry array 'entries' to find the appropriate entry - * for 'key', return a pointer to the entry, which may be or may not have - * an associated pair. - * - * @param entries Table entry array to scan. - * @param capacity Size of the table entry array, in entries. - * @param key Key to locate. - * @return A pointer to the entry for 'key'. - */ -extern KrkTableEntry * krk_findEntry(KrkTableEntry * entries, size_t capacity, KrkValue key); - -/** - * @brief Calculate the hash for a value. - * @memberof KrkValue - * - * Retreives or calculates the hash value for 'value'. - * - * @param value Value to hash. - * @return An unsigned 32-bit hash value. - */ -extern uint32_t krk_hashValue(KrkValue value); - diff --git a/base/usr/include/kuroko/threads.h b/base/usr/include/kuroko/threads.h deleted file mode 100644 index ede5e91b..00000000 --- a/base/usr/include/kuroko/threads.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once -/** - * @file threads.h - * @brief Convience header for providing atomic operations to threads. - */ - -#ifdef ENABLE_THREADING -#include -#include - -#ifdef _WIN32 -#include -#include -#define sched_yield() YieldProcessor() -#endif - -static inline void _krk_internal_spin_lock(int volatile * lock) { - while(__sync_lock_test_and_set(lock, 0x01)) { - sched_yield(); - } -} - -static inline void _krk_internal_spin_unlock(int volatile * lock) { - __sync_lock_release(lock); -} - -#define _obtain_lock(v) _krk_internal_spin_lock(&v); -#define _release_lock(v) _krk_internal_spin_unlock(&v); - -#else - -#define _obtain_lock(v) -#define _release_lock(v) - -#define pthread_rwlock_init(a,b) -#define pthread_rwlock_wrlock(a) -#define pthread_rwlock_rdlock(a) -#define pthread_rwlock_unlock(a) - -#endif - diff --git a/base/usr/include/kuroko/util.h b/base/usr/include/kuroko/util.h deleted file mode 100644 index c78c904b..00000000 --- a/base/usr/include/kuroko/util.h +++ /dev/null @@ -1,296 +0,0 @@ -#pragma once -/** - * @file util.h - * @brief Utilities for creating native bindings. - * - * This is intended for use in C extensions to provide a uniform interface - * for defining extension methods and ensuring they have consistent argument - * and keyword argument usage. - */ -#include "object.h" -#include "vm.h" -#include "memory.h" - -/* Quick macro for turning string constants into KrkString*s */ -#define S(c) (krk_copyString(c,sizeof(c)-1)) - -#define likely(cond) __builtin_expect(!!(cond), 1) -#define unlikely(cond) __builtin_expect(!!(cond), 0) -#ifndef _WIN32 -#define _noexport __attribute__((visibility("hidden"))) -#else -#define _noexport -#endif - -/** - * Binding macros. - * - * These macros are intended to be used together to define functions for a class. - */ -static inline const char * _method_name(const char * func) { - const char * out = func; - if (*out == '_') out++; - while (*out && *out != '_') out++; - if (*out == '_') out++; - return out; -} - -#define ADD_BASE_CLASS(obj, name, baseClass) krk_makeClass(vm.builtins, &obj, name, baseClass) - -/* _method_name works for this, but let's skip the inlined function call where possible */ -#define _function_name(f) (f+5) - -#define ATTRIBUTE_NOT_ASSIGNABLE() do { if (argc != 1) return krk_runtimeError(vm.exceptions->attributeError, "attribute '%s' is not assignable", \ - _method_name(__func__)); } while (0) - -#define METHOD_TAKES_NONE() do { if (argc != 1) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes no arguments (%d given)", \ - _method_name(__func__), (argc-1)); } while (0) - -#define METHOD_TAKES_EXACTLY(n) do { if (argc != (n+1)) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ - _method_name(__func__), "exactly", n, (n != 1) ? "s" : "", (argc-1)); } while (0) - -#define METHOD_TAKES_AT_LEAST(n) do { if (argc < (n+1)) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ - _method_name(__func__), "at least", n, (n != 1) ? "s" : "", (argc-1)); } while (0) - -#define METHOD_TAKES_AT_MOST(n) do { if (argc > (n+1)) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ - _method_name(__func__), "at most", n, (n != 1) ? "s" : "", (argc-1)); } while (0) - -#define FUNCTION_TAKES_NONE() do { if (argc != 0) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes no arguments (%d given)", \ - _function_name(__func__), (argc)); } while (0) - -#define FUNCTION_TAKES_EXACTLY(n) do { if (argc != n) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ - _function_name(__func__), "exactly", n, (n != 1) ? "s" : "", (argc)); } while (0) - -#define FUNCTION_TAKES_AT_LEAST(n) do { if (argc < n) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ - _function_name(__func__), "at least", n, (n != 1) ? "s" : "", (argc)); } while (0) - -#define FUNCTION_TAKES_AT_MOST(n) do { if (argc > n) return krk_runtimeError(vm.exceptions->argumentError, "%s() takes %s %d argument%s (%d given)", \ - _function_name(__func__), "at most", n, (n != 1) ? "s" : "", (argc)); } while (0) - -#define TYPE_ERROR(expected,value) krk_runtimeError(vm.exceptions->typeError, "%s() expects %s, not '%s'", \ - /* Function name */ _method_name(__func__), /* expected type */ #expected, krk_typeName(value)) - -#define NOT_ENOUGH_ARGS() krk_runtimeError(vm.exceptions->argumentError, "%s() missing required positional argument", \ - /* Function name */ _method_name(__func__)) - -#define CHECK_ARG(i, type, ctype, name) \ - if (argc < (i+1)) return NOT_ENOUGH_ARGS(); \ - if (!IS_ ## type (argv[i])) return TYPE_ERROR(type,argv[i]); \ - ctype name __attribute__((unused)) = AS_ ## type (argv[i]) - -#define FUNC_NAME(klass, name) _ ## klass ## _ ## name -#define FUNC_SIG(klass, name) _noexport KrkValue FUNC_NAME(klass,name) (int argc, KrkValue argv[], int hasKw) -#define KRK_METHOD(klass, name, body) FUNC_SIG(klass, name) { \ - CHECK_ARG(0,klass,CURRENT_CTYPE,CURRENT_NAME); \ - body; return NONE_VAL(); } - -#define KRK_FUNC(name,body) static KrkValue _krk_ ## name (int argc, KrkValue argv[], int hasKw) { \ - body; return NONE_VAL(); } - -/* This assumes you have a KrkInstance called `module` in the current scope. */ -#define MAKE_CLASS(klass) do { krk_makeClass(module,&klass,#klass,vm.baseClasses->objectClass); klass ->allocSize = sizeof(struct klass); } while (0) -#define BIND_METHOD(klass,method) krk_defineNative(&klass->methods, "." #method, _ ## klass ## _ ## method) -#define BIND_FIELD(klass,method) krk_defineNative(&klass->methods, ":" #method, _ ## klass ## _ ## method) -#define BIND_PROP(klass,method) krk_defineNativeProperty(&klass->methods, #method, _ ## klass ## _ ## method) -#define BIND_FUNC(module,func) krk_defineNative(&module->fields, #func, _krk_ ## func) - -/** - * @brief Inline flexible string array. - */ -struct StringBuilder { - size_t capacity; - size_t length; - char * bytes; -}; - -/** - * @brief Add a character to the end of a string builder. - * - * @param sb String builder to append to. - * @param c Character to append. - */ -static inline void pushStringBuilder(struct StringBuilder * sb, char c) { - if (sb->capacity < sb->length + 1) { - size_t old = sb->capacity; - sb->capacity = GROW_CAPACITY(old); - sb->bytes = GROW_ARRAY(char, sb->bytes, old, sb->capacity); - } - sb->bytes[sb->length++] = c; -} - -/** - * @brief Append a string to the end of a string builder. - * - * @param sb String builder to append to. - * @param str C string to add. - * @param len Length of the C string. - */ -static inline void pushStringBuilderStr(struct StringBuilder * sb, char *str, size_t len) { - if (sb->capacity < sb->length + len) { - while (sb->capacity < sb->length + len) { - size_t old = sb->capacity; - sb->capacity = GROW_CAPACITY(old); - } - sb->bytes = realloc(sb->bytes, sb->capacity); - } - for (size_t i = 0; i < len; ++i) { - sb->bytes[sb->length++] = *(str++); - } -} - -/** - * @brief Finalize a string builder into a string object. - * - * Creates a string object from the contents of the string builder and - * frees the space allocated for the builder, returning a value representing - * the newly created string object. - * - * @param sb String builder to finalize. - * @return A value representing a string object. - */ -static inline KrkValue finishStringBuilder(struct StringBuilder * sb) { - KrkValue out = OBJECT_VAL(krk_copyString(sb->bytes, sb->length)); - FREE_ARRAY(char,sb->bytes, sb->capacity); - return out; -} - -/** - * @brief Finalize a string builder in a bytes object. - * - * Converts the contents of a string builder into a bytes object and - * frees the space allocated for the builder. - * - * @param sb String builder to finalize. - * @return A value representing a bytes object. - */ -static inline KrkValue finishStringBuilderBytes(struct StringBuilder * sb) { - KrkValue out = OBJECT_VAL(krk_newBytes(sb->length, (uint8_t*)sb->bytes)); - FREE_ARRAY(char,sb->bytes, sb->capacity); - return out; -} - -/** - * @brief Discard the contents of a string builder. - * - * Frees the resources allocated for the string builder without converting - * it to a string or bytes object. Call this when an error has been encountered - * and the contents of a string builder are no longer needed. - * - * @param sb String builder to discard. - * @return None, as a convenience. - */ -static inline KrkValue discardStringBuilder(struct StringBuilder * sb) { - FREE_ARRAY(char,sb->bytes, sb->capacity); - return NONE_VAL(); -} - -#define IS_int(o) (IS_INTEGER(o)) -#define AS_int(o) (AS_INTEGER(o)) - -#define IS_bool(o) (IS_BOOLEAN(o)) -#define AS_bool(o) (AS_BOOLEAN(o)) - -#define IS_float(o) (IS_FLOATING(o)) -#define AS_float(o) (AS_FLOATING(o)) - -#define IS_list(o) krk_isInstanceOf(o,vm.baseClasses->listClass) -#define AS_list(o) (KrkList*)AS_OBJECT(o) - -#define IS_listiterator(o) krk_isInstanceOf(o,vm.baseClasses->listiteratorClass) -#define AS_listiterator(o) AS_INSTANCE(o) - -#define IS_str(o) (IS_STRING(o)||krk_isInstanceOf(o,vm.baseClasses->strClass)) -#define AS_str(o) (KrkString*)AS_OBJECT(o) - -#define IS_striterator(o) (krk_isInstanceOf(o,vm.baseClasses->striteratorClass)) -#define AS_striterator(o) (AS_INSTANCE(o)) - -#define IS_dict(o) krk_isInstanceOf(o,vm.baseClasses->dictClass) -#define AS_dict(o) (KrkDict*)AS_OBJECT(o) - -#define IS_dictitems(o) krk_isInstanceOf(o,vm.baseClasses->dictitemsClass) -#define AS_dictitems(o) ((struct DictItems*)AS_OBJECT(o)) - -#define IS_dictkeys(o) krk_isInstanceOf(o,vm.baseClasses->dictkeysClass) -#define AS_dictkeys(o) ((struct DictKeys*)AS_OBJECT(o)) - -#define IS_bytesiterator(o) (krk_isInstanceOf(o,vm.baseClasses->bytesiteratorClass)) -#define AS_bytesiterator(o) (AS_INSTANCE(o)) - -#ifndef unpackError -#define unpackError(fromInput) return krk_runtimeError(vm.exceptions->typeError, "'%s' object is not iterable", krk_typeName(fromInput)); -#endif - -#define unpackIterable(fromInput) do { \ - KrkClass * type = krk_getType(fromInput); \ - if (type->_iter) { \ - size_t stackOffset = krk_currentThread.stackTop - krk_currentThread.stack; \ - krk_push(fromInput); \ - krk_push(krk_callSimple(OBJECT_VAL(type->_iter), 1, 0)); \ - do { \ - krk_push(krk_currentThread.stack[stackOffset]); \ - krk_push(krk_callSimple(krk_peek(0), 0, 1)); \ - if (krk_valuesSame(krk_currentThread.stack[stackOffset], krk_peek(0))) { \ - krk_pop(); \ - krk_pop(); \ - break; \ - } \ - unpackArray(1,krk_peek(0)); \ - krk_pop(); \ - } while (1); \ - } else { \ - unpackError(fromInput); \ - } \ -} while (0) - -#define unpackIterableFast(fromInput) do { \ - KrkValue iterableValue = (fromInput); \ - if (IS_TUPLE(iterableValue)) { \ - unpackArray(AS_TUPLE(iterableValue)->values.count, AS_TUPLE(iterableValue)->values.values[i]); \ - } else if (IS_INSTANCE(iterableValue) && AS_INSTANCE(iterableValue)->_class == vm.baseClasses->listClass) { \ - unpackArray(AS_LIST(iterableValue)->count, AS_LIST(iterableValue)->values[i]); \ - } else if (IS_INSTANCE(iterableValue) && AS_INSTANCE(iterableValue)->_class == vm.baseClasses->dictClass) { \ - unpackArray(AS_DICT(iterableValue)->count, krk_dict_nth_key_fast(AS_DICT(iterableValue)->capacity, AS_DICT(iterableValue)->entries, i)); \ - } else if (IS_STRING(iterableValue)) { \ - unpackArray(AS_STRING(iterableValue)->codesLength, krk_string_get(2,(KrkValue[]){iterableValue,INTEGER_VAL(i)},0)); \ - } else { \ - unpackIterable(iterableValue); \ - } \ -} while (0) - -static inline void _setDoc_class(KrkClass * thing, const char * text, size_t size) { - thing->docstring = krk_copyString(text, size); -} -static inline void _setDoc_instance(KrkInstance * thing, const char * text, size_t size) { - krk_attachNamedObject(&thing->fields, "__doc__", (KrkObj*)krk_copyString(text, size)); -} -static inline void _setDoc_native(KrkNative * thing, const char * text, size_t size) { - (void)size; - thing->doc = text; -} - -/** - * @def KRK_DOC(thing,text) - * @brief Attach documentation to a thing of various types. - * - * Classes store their docstrings directly, rather than in their attribute tables. - * Instances use the attribute table and store strings with the name @c \__doc__. - * Native functions store direct C string pointers for documentation. - * - * This macro provides a generic interface for applying documentation strings to - * any of the above types, and handles not attaching documentation when built - * with KRK_NO_DOCUMENTATION. - */ -#ifdef KRK_NO_DOCUMENTATION -# define KRK_DOC(thing, text) (thing); -#else -# define KRK_DOC(thing, text) \ - _Generic(&((thing)[0]), \ - KrkClass*: _setDoc_class, \ - KrkInstance*: _setDoc_instance, \ - KrkNative*: _setDoc_native \ - )(thing,text,sizeof(text)-1) -#endif - -#define BUILTIN_FUNCTION(name, func, docStr) KRK_DOC(krk_defineNative(&vm.builtins->fields, name, func), docStr) - diff --git a/base/usr/include/kuroko/value.h b/base/usr/include/kuroko/value.h deleted file mode 100644 index 79587ae1..00000000 --- a/base/usr/include/kuroko/value.h +++ /dev/null @@ -1,210 +0,0 @@ -#pragma once -/** - * @file value.h - * @brief Definitions for primitive stack references. - */ -#include -#include "kuroko.h" - -/** - * @brief Base structure of all heap objects. - * - * KrkObj is the base type of all objects stored on the heap and - * managed by the garbage collector. - */ -typedef struct KrkObj KrkObj; -typedef struct KrkString KrkString; - -/** - * @brief Tag enum for basic value types. - * - * Value types are tagged unions of a handful of small - * types represented directly on the stack: Integers, - * double-precision floating point values, booleans, - * exception handler references, complex function argument - * processing sentinels, object reference pointers, and None. - */ -typedef enum { - KRK_VAL_NONE, - KRK_VAL_BOOLEAN, - KRK_VAL_INTEGER, - KRK_VAL_FLOATING, - KRK_VAL_HANDLER, - KRK_VAL_OBJECT, - KRK_VAL_KWARGS, -} KrkValueType; - -/** - * @brief Stack value representation of a 'with' or 'try' block. - * - * When a 'with' or 'try' block is entered, a handler value is - * created on the stack representing the type (with, try) and the - * jump target to leave the block (entering the 'except' block of - * a 'try', if present, or calling the __exit__ method of an object - * __enter__'d by a 'with' block). When the relevant conditions are - * triggered in the VM, the stack will be scanned from top to bottom - * to look for these values. - */ -typedef struct { - unsigned short type; - unsigned short target; -} KrkJumpTarget; - -/** - * @brief Stack reference or primative value. - * - * This type stores a stack reference to an object, or the contents of - * a primitive type. Each VM thread's stack consists of an array of - * these values, and they are generally passed around in the VM through - * direct copying rather than as pointers, avoiding the need to track - * memory used by them. - * - * Each value is a tagged union with a type (see the enum KrkValueType) - * and its contents. - */ -typedef struct { - KrkValueType type; - union { - char boolean; - krk_integer_type integer; - double floating; - KrkJumpTarget handler; - KrkObj * object; - } as; -} KrkValue; - -/** - * @brief Flexible vector of stack references. - * - * Value Arrays provide a resizable collection of values and are the - * backbone of lists and tuples. - */ -typedef struct { - size_t capacity; /**< Available allocated space. */ - size_t count; /**< Current number of used slots. */ - KrkValue * values; /**< Pointer to heap-allocated storage. */ -} KrkValueArray; - -/** - * @brief Initialize a value array. - * @memberof KrkValueArray - * - * This should be called for any new value array, especially ones - * initialized in heap or stack space, to set up the capacity, count - * and initial value pointer. - * - * @param array Value array to initialize. - */ -extern void krk_initValueArray(KrkValueArray * array); - -/** - * @brief Add a value to a value array. - * @memberof KrkValueArray - * - * Appends 'value' to the end of the given array, adjusting count values - * and resizing as necessary. - * - * @param array Array to append to. - * @param value Value to append to array. - */ -extern void krk_writeValueArray(KrkValueArray * array, KrkValue value); - -/** - * @brief Release relesources used by a value array. - * @memberof KrkValueArray - * - * Frees the storage associated with a given value array and resets - * its capacity and count. Does not directly free resources associated - * with heap objects referenced by the values in this array: The GC - * is responsible for taking care of that. - * - * @param array Array to release. - */ -extern void krk_freeValueArray(KrkValueArray * array); - -/** - * @brief Print a string representation of a value. - * @memberof KrkValue - * - * Print a string representation of 'value' to the stream 'f'. - * For primitives, performs appropriate formatting. For objects, - * this will call __str__ on the object's representative type. - * If the type does not have a __str__ method, __repr__ will be - * tried before falling back to krk_typeName to directly print - * the name of the class with no information on the value. - * - * This function provides the backend for the print() built-in. - * - * @param f Stream to write to. - * @param value Value to display. - */ -extern void krk_printValue(FILE * f, KrkValue value); - -/** - * @brief Print a value without calling the VM. - * @memberof KrkValue - * - * Print a string representation of 'value' to the stream 'f', - * avoiding calls to managed code by using simplified representations - * where necessary. This is intended for use in debugging code, such - * as during disassembly, or when printing values in an untrusted context. - * - * @note This function will truncate long strings and print them in a form - * closer to the 'repr()' representation, with escaped bytes, rather - * than directly printing them to the stream. - * - * @param f Stream to write to. - * @param value Value to display. - */ -extern void krk_printValueSafe(FILE * f, KrkValue value); - -/** - * @brief Compare two values for equality. - * @memberof KrkValue - * - * Performs a relaxed equality comparison between two values, - * check for equivalence by contents. This may call managed - * code to run __eq__ methods. - * - * @return 1 if values are equivalent, 0 otherwise. - */ -extern int krk_valuesEqual(KrkValue a, KrkValue b); - -/** - * @brief Compare two values by identity. - * @memberof KrkValue - * - * Performs a strict comparison between two values, comparing - * their identities. For primitive values, this is generally - * the same as comparing by equality. For objects, this compares - * pointer values directly. - * - * @return 1 if values represent the same object or value, 0 otherwise. - */ -extern int krk_valuesSame(KrkValue a, KrkValue b); - -#define BOOLEAN_VAL(value) ((KrkValue){KRK_VAL_BOOLEAN, {.integer = value}}) -#define NONE_VAL(value) ((KrkValue){KRK_VAL_NONE, {.integer = 0}}) -#define INTEGER_VAL(value) ((KrkValue){KRK_VAL_INTEGER, {.integer = value}}) -#define FLOATING_VAL(value) ((KrkValue){KRK_VAL_FLOATING,{.floating = value}}) -#define HANDLER_VAL(ty,ta) ((KrkValue){KRK_VAL_HANDLER, {.handler = (KrkJumpTarget){.type = ty, .target = ta}}}) -#define OBJECT_VAL(value) ((KrkValue){KRK_VAL_OBJECT, {.object = (KrkObj*)value}}) -#define KWARGS_VAL(value) ((KrkValue){KRK_VAL_KWARGS, {.integer = value}}) - -#define AS_BOOLEAN(value) ((value).as.integer) -#define AS_INTEGER(value) ((value).as.integer) -#define AS_FLOATING(value) ((value).as.floating) -#define AS_HANDLER(value) ((value).as.handler) -#define AS_OBJECT(value) ((value).as.object) - -#define IS_BOOLEAN(value) ((value).type == KRK_VAL_BOOLEAN) -#define IS_NONE(value) ((value).type == KRK_VAL_NONE) -#define IS_INTEGER(value) (((value).type == KRK_VAL_INTEGER) || ((value.type) == KRK_VAL_BOOLEAN)) -#define IS_FLOATING(value) ((value).type == KRK_VAL_FLOATING) -#define IS_HANDLER(value) ((value).type == KRK_VAL_HANDLER) -#define IS_OBJECT(value) ((value).type == KRK_VAL_OBJECT) -#define IS_KWARGS(value) ((value).type == KRK_VAL_KWARGS) - -#define IS_TRY_HANDLER(value) (IS_HANDLER(value) && AS_HANDLER(value).type == OP_PUSH_TRY) -#define IS_WITH_HANDLER(value) (IS_HANDLER(value) && AS_HANDLER(value).type == OP_PUSH_WITH) - diff --git a/base/usr/include/kuroko/vm.h b/base/usr/include/kuroko/vm.h deleted file mode 100644 index 41ea3983..00000000 --- a/base/usr/include/kuroko/vm.h +++ /dev/null @@ -1,820 +0,0 @@ -#pragma once -/** - * @file vm.h - * @brief Core API for the bytecode virtual machine. - * - * Functions and structures declared here make up the bulk of the public C API - * for Kuroko, including initializing the VM and passing code to be interpreted. - */ -#include -#include -#include "kuroko.h" -#include "value.h" -#include "table.h" -#include "object.h" - -/** - * @def KRK_CALL_FRAMES_MAX - * @brief Maximum depth of the call stack in managed-code function calls. - */ -#define KRK_CALL_FRAMES_MAX 64 - -/** - * @def KRK_THREAD_SCRATCH_SIZE - * @brief Extra space for each thread to store a set of working values safe from the GC. - * - * Various operations require threads to remove values from the stack but ensure - * they are not lost to garbage collection. This space allows each thread to keep - * a few things around during those operations. - */ -#define KRK_THREAD_SCRATCH_SIZE 3 - -/** - * @brief Represents a managed call state in a VM thread. - * - * For every managed function call, including the top-level module, - * a call frame is added to the stack to track the running function, - * the current opcode instruction, the offset into the stack, and - * the valid globals table. - * - * Call frames are used directly by the VM as the source of - * opcodes and operands during execution, and are used by the exception - * handler to roll back execution to the appropriate environment. - */ -typedef struct { - KrkClosure * closure; /**< Pointer to the function object containing the code object for this frame */ - uint8_t * ip; /**< Instruction pointer within the code object's bytecode data */ - size_t slots; /**< Offset into the stack at which this function call's arguments begin */ - size_t outSlots; /**< Offset into the stack at which stackTop will be reset upon return */ - KrkTable * globals; /**< Pointer to the attribute table containing valud global vairables for this call */ -} KrkCallFrame; - -/** - * @brief Index numbers for always-available interned strings representing important method and member names. - * - * The VM must look up many methods and members by fixed names. To avoid - * continuously having to box and unbox these from C strings to the appropriate - * interned @c KrkString, we keep an array of the @c KrkString pointers in the global VM state. - * - * These values are the offsets into that index for each of the relevant - * function names (generally with extra underscores removed). For example - * @c METHOD_INIT is the offset for the string value for @c "__init__". - */ -typedef enum { - METHOD_INIT, - METHOD_STR, - METHOD_REPR, - METHOD_GET, - METHOD_SET, - METHOD_CLASS, - METHOD_NAME, - METHOD_FILE, - METHOD_INT, - METHOD_FLOAT, - METHOD_CHR, - METHOD_LEN, - METHOD_DOC, - METHOD_BASE, - METHOD_GETSLICE, - METHOD_ORD, - METHOD_CALL, - METHOD_EQ, - METHOD_ENTER, - METHOD_EXIT, - METHOD_DELITEM, - METHOD_ITER, - METHOD_GETATTR, - METHOD_DIR, - METHOD_SETSLICE, - METHOD_DELSLICE, - METHOD_CONTAINS, - METHOD_DESCGET, - METHOD_DESCSET, - METHOD_CLASSGETITEM, - - METHOD__MAX, -} KrkSpecialMethods; - -/** - * @brief Table of basic exception types. - * - * These are the core exception types, available in managed code - * from the builtin namespace. A single instance of this struct - * is attached to the global VM state so that C code can quickly - * access these exception types for use with krk_runtimeException. - * - * @see krk_runtimeException - */ -struct Exceptions { - KrkClass * baseException; /**< @exception Exception The base exception type. */ - KrkClass * typeError; /**< @exception TypeError An argument or value was not of the expected type. */ - KrkClass * argumentError; /**< @exception ArgumentException The number of arguments passed to a function was not as expected. */ - KrkClass * indexError; /**< @exception IndexError An attempt was made to reference an invalid array index. */ - KrkClass * keyError; /**< @exception KeyError An attempt was made to reference an invalid mapping key. */ - KrkClass * attributeError; /**< @exception AttributeError An attempt was made to reference an invalid object property. */ - KrkClass * nameError; /**< @exception NameError An attempt was made to reference an undeclared global variable. */ - KrkClass * importError; /**< @exception ImportError An error was encountered when attempting to import a module. */ - KrkClass * ioError; /**< @exception IOError An error was encountered in operating system's IO library. */ - KrkClass * valueError; /**< @exception ValueError The value of a parameter or variable is not valid. */ - KrkClass * keyboardInterrupt; /**< @exception KeyboardInterrupt An interrupt signal was received. */ - KrkClass * zeroDivisionError; /**< @exception ZeroDivisionError A mathematical function attempted to divide by zero. */ - KrkClass * notImplementedError; /**< @exception NotImplementedError The method is not implemented, either for the given arguments or in general. */ - KrkClass * syntaxError; /**< @exception SyntaxError The compiler encountered an unrecognized or invalid source code input. */ - KrkClass * assertionError; /**< @exception AssertionError An @c assert statement failed. */ -}; - -/** - * @brief Table of classes for built-in object types. - * - * For use by C modules and within the VM, an instance of this struct - * is attached to the global VM state. At VM initialization, each - * built-in class is attached to this table, and the class values - * stored here are used for integrated type checking with krk_isInstanceOf. - * - * @note As this and other tables are used directly by embedders, do not - * reorder the layout of the individual class pointers, even if - * it looks nicer. The ordering here is part of our library ABI. - */ -struct BaseClasses { - KrkClass * objectClass; /**< The base of all classes within the type tree. */ - KrkClass * moduleClass; /**< A class for representing imported modules, both managed and C. */ - KrkClass * typeClass; /**< Classes themselves are of this class. */ - KrkClass * intClass; /**< Primitive integer type. */ - KrkClass * floatClass; /**< Primitive double-precision floating-point type. */ - KrkClass * boolClass; /**< Primitive boolean type. */ - KrkClass * noneTypeClass; /**< The class of the None value. */ - KrkClass * strClass; /**< Built-in Unicode string type. */ - KrkClass * functionClass; /**< Represents a function object (KrkClosure) or native bind (KrkNative) */ - KrkClass * methodClass; /**< Represents a bound method (KrkBoundMethod) */ - KrkClass * tupleClass; /**< An immutable collection of arbitrary values. */ - KrkClass * bytesClass; /**< An immutable sequence of bytes. */ - KrkClass * listiteratorClass; /**< Iterator over lists */ - KrkClass * rangeClass; /**< An object representing a start and end point for a sequence of integers. */ - KrkClass * rangeiteratorClass; /**< Iterator over a range of values */ - KrkClass * striteratorClass; /**< Iterator over characters (by codepoint) in a string */ - KrkClass * tupleiteratorClass; /**< Iterator over values in a tuple */ - KrkClass * listClass; /**< Mutable collection of arbitrary values. */ - KrkClass * dictClass; /**< Mutable mapping of hashable keys to arbitrary values. */ - KrkClass * dictitemsClass; /**< Iterator over the (key,value) pairs of a dict */ - KrkClass * dictkeysClass; /**< Iterator over the keys of a dict */ - KrkClass * bytesiteratorClass; /**< Iterator over the integer byte values of a bytes object. */ - KrkClass * propertyClass; /**< Magic object that calls a function when accessed from an instance through the dot operator. */ - KrkClass * codeobjectClass; /**< Static compiled bytecode container (KrkCodeObject) */ - KrkClass * generatorClass; /**< Generator object. */ -}; - -/** - * @brief Execution state of a VM thread. - * - * Each thread in the VM has its own local thread state, which contains - * the thread's stack, stack pointer, call frame stack, a thread-specific - * VM flags bitarray, and an exception state. - * - * @see krk_currentThread - */ -typedef struct KrkThreadState { - struct KrkThreadState * next; /**< Invasive list pointer to next thread. */ - - KrkCallFrame * frames; /**< Call frame stack for this thread, max KRK_CALL_FRAMES_MAX */ - size_t frameCount; /**< Number of active call frames. */ - size_t stackSize; /**< Size of the allocated stack space for this thread. */ - KrkValue * stack; /**< Pointer to the bottom of the stack for this thread. */ - KrkValue * stackTop; /**< Pointer to the top of the stack. */ - KrkUpvalue * openUpvalues; /**< Flexible array of unclosed upvalues. */ - ssize_t exitOnFrame; /**< When called in a nested context, the frame offset to exit the VM dispatch loop on. */ - - KrkInstance * module; /**< The current module execution context. */ - KrkValue currentException; /**< When an exception is thrown, it is stored here. */ - int flags; /**< Thread-local VM flags; each thread inherits the low byte of the global VM flags. */ - long watchdog; /**< Decrementing watchdog timer for embedding. */ - - KrkValue scratchSpace[KRK_THREAD_SCRATCH_SIZE]; /**< A place to store a few values to keep them from being prematurely GC'd. */ -} KrkThreadState; - -/** - * @brief Global VM state. - * - * This state is shared by all VM threads and stores the - * path to the VM binary, global execution flags, the - * string and module tables, tables of builtin types, - * and the state of the (shared) garbage collector. - */ -typedef struct KrkVM { - int globalFlags; /**< Global VM state flags */ - char * binpath; /**< A string representing the name of the interpreter binary. */ - KrkTable strings; /**< Strings table */ - KrkTable modules; /**< Module cache */ - KrkInstance * builtins; /**< '\__builtins__' module */ - KrkInstance * system; /**< 'kuroko' module */ - KrkValue * specialMethodNames; /**< Cached strings of important method and function names */ - struct BaseClasses * baseClasses; /**< Pointer to a (static) namespacing struct for the KrkClass*'s of built-in object types */ - struct Exceptions * exceptions; /**< Pointer to a (static) namespacing struct for the KrkClass*'s of basic exception types */ - - /* Garbage collector state */ - KrkObj * objects; /**< Linked list of all objects in the GC */ - size_t bytesAllocated; /**< Running total of bytes allocated */ - size_t nextGC; /**< Point at which we should sweep again */ - size_t grayCount; /**< Count of objects marked by scan. */ - size_t grayCapacity; /**< How many objects we can fit in the scan list. */ - KrkObj** grayStack; /**< Scan list */ - - KrkThreadState * threads; /**< Invasive linked list of all VM threads. */ -} KrkVM; - -/* Thread-specific flags */ -#define KRK_THREAD_ENABLE_TRACING (1 << 0) -#define KRK_THREAD_ENABLE_DISASSEMBLY (1 << 1) -#define KRK_THREAD_ENABLE_SCAN_TRACING (1 << 2) -#define KRK_THREAD_HAS_EXCEPTION (1 << 3) -#define KRK_THREAD_SINGLE_STEP (1 << 4) -#define KRK_THREAD_SIGNALLED (1 << 5) - -/* Global flags */ -#define KRK_GLOBAL_ENABLE_STRESS_GC (1 << 8) -#define KRK_GLOBAL_GC_PAUSED (1 << 9) -#define KRK_GLOBAL_CLEAN_OUTPUT (1 << 10) - -#ifdef ENABLE_THREADING -# define threadLocal __thread -#else -# define threadLocal -#endif - -/** - * @brief Thread-local VM state. - * - * See @c KrkThreadState for more information. - */ -#if defined(_WIN32) && !defined(KRKINLIB) -#define krk_currentThread (*krk_getCurrentThread()) -#else -extern threadLocal KrkThreadState krk_currentThread; -#endif - -/** - * @brief Singleton instance of the shared VM state. - */ -extern KrkVM krk_vm; - -/** - * @def vm - * @brief Convenience macro for namespacing. - */ -#define vm krk_vm - -/** - * @brief Initialize the VM at program startup. - * @memberof KrkVM - * - * All library users must call this exactly once on startup to create - * the built-in types, modules, and functions for the VM and prepare - * the string and module tables. Optionally, callers may set `vm.binpath` - * before calling krk_initVM to allow the VM to locate the interpreter - * binary and establish the default module paths. - * - * @param flags Combination of global VM flags and initial thread flags. - */ -extern void krk_initVM(int flags); - -/** - * @brief Release resources from the VM. - * @memberof KrkVM - * - * Generally, it is desirable to call this once before the hosting program exits. - * If a fresh VM state is needed, krk_freeVM should be called before a further - * call to krk_initVM is made. The resources released here can include allocated - * heap memory, FILE pointers or descriptors, or various other things which were - * initialized by C extension modules. - */ -extern void krk_freeVM(void); - -/** - * @brief Reset the current thread's stack state to the top level. - * - * In a repl, this should be called before or after each iteration to clean up any - * remnant stack entries from an uncaught exception. It should not be called - * during normal execution by C extensions. Values on the stack may be lost - * to garbage collection after a call to @c krk_resetStack . - */ -extern void krk_resetStack(void); - -/** - * @brief Compile and execute a source code input. - * - * This is the lowest level call for most usecases, including execution - * of commands from a REPL or when executing a file. - * - * @param src Source code to compile and run. - * @param fromFile Path to the source file, or a representative string like "". - * @return The value of the executed code, which is either the value of an explicit 'return' - * statement, or the last expression value from an executed statement. If an uncaught - * exception occurred, this will be @c None and @c krk_currentThread.flags should - * indicate @c KRK_THREAD_HAS_EXCEPTION and @c krk_currentThread.currentException - * should contain the raised exception value. - */ -extern KrkValue krk_interpret(const char * src, char * fromFile); - -/** - * @brief Load and run a source file and return when execution completes. - * - * Loads and runs a source file. Can be used by interpreters to run scripts, - * either in the context of a new a module or as if they were continuations - * of the current module state (eg. as if they were lines entered on a repl) - * - * @param fileName Path to the source file to read and execute. - * @param fromFile Value to assign to @c \__file__ - * @return As with @c krk_interpret, an object representing the newly created module, - * or the final return value of the VM execution. - */ -extern KrkValue krk_runfile(const char * fileName, char * fromFile); - -/** - * @brief Load and run a file as a module. - * - * Similar to @c krk_runfile but ensures that execution of the VM returns to the caller - * after the file is run. This should be run after calling @c krk_startModule to initialize - * a new module context and is used internally by the import mechanism. - * - * @param fileName Path to the source file to read and execute. - * @param fromFile Value to assign to @c \__file__ - * @return The object representing the module, or None if execution of the file failed. - */ -extern KrkValue krk_callfile(const char * fileName, char * fromFile); - -/** - * @brief Push a stack value. - * - * Pushes a value onto the current thread's stack, triggering a - * stack resize if there is not enough space to hold the new value. - * - * @param value Value to push. - */ -extern void krk_push(KrkValue value); - -/** - * @brief Pop the top of the stack. - * - * Removes and returns the value at the top of current thread's stack. - * Generally, it is preferably to leave values on the stack and use - * krk_peek if the value is desired, as removing a value from the stack - * may result in it being garbage collected. - * - * @return The value previously at the top of the stack. - */ -extern KrkValue krk_pop(void); - -/** - * @brief Peek down from the top of the stack. - * - * Obtains a value from the current thread's stack without modifying the stack. - * - * @param distance How far down from the top of the stack to peek (0 = the top) - * @return The value from the stack. - */ -extern KrkValue krk_peek(int distance); - -/** - * @brief Swap the top of the stack of the value @p distance slots down. - * - * Exchanges the values at the top of the stack and @p distance slots from the top - * without removing or shuffling anything in between. - * - * @param distance How from down from the top of the stack to swap (0 = the top) - */ -extern void krk_swap(int distance); - -/** - * @brief Get the name of the type of a value. - * @memberof KrkValue - * - * Obtains the C string representing the name of the class - * associated with the given value. Useful for crafting - * exception messages, such as those describing TypeErrors. - * - * @param value Value to examine - * @return Nul-terminated C string of the type of @p value - */ -extern const char * krk_typeName(KrkValue value); - -/** - * @brief Attach a native C function to an attribute table. - * @memberof KrkTable - * - * Attaches the given native function pointer to an attribute table - * while managing the stack shuffling and boxing of both the name and - * the function object. If @p name begins with a '.', the native function - * is marked as a method. If @p name begins with a ':', the native function - * is marked as a dynamic property. - * - * @param table Attribute table to attach to, such as @c &someInstance->fields - * @param name Nil-terminated C string with the name to assign - * @param function Native function pointer to attach - * @return A pointer to the object representing the attached function. - */ -extern KrkNative * krk_defineNative(KrkTable * table, const char * name, NativeFn function); - -/** - * @brief Attach a native dynamic property to an attribute table. - * @memberof KrkTable - * - * Mostly the same as @c krk_defineNative, but ensures the creation of a dynamic property. - * The intention of this function is to replace uses of defineNative with ":" names, - * and replace specialized methods with @c KrkProperty* objects. - * - * @param table Attribute table to attach to, such as @c &someInstance->fields - * @param name Nil-terminated C string with the name to assign - * @param func Native function pointer to attach - * @return A pointer to the property object created. - */ -extern KrkNative * krk_defineNativeProperty(KrkTable * table, const char * name, NativeFn func); - -/** - * @brief Attach a value to an attribute table. - * @memberof KrkTable - * - * Manages the stack shuffling and boxing of the name string when attaching - * a value to an attribute table. Rather than using @c krk_tableSet, this is - * the preferred method of supplying fields to objects from C code. - * - * @param table Attribute table to attach to, such as @c &someInstance->fields - * @param name Nil-terminated C string with the name to assign - * @param obj Value to attach. - */ -extern void krk_attachNamedValue(KrkTable * table, const char name[], KrkValue obj); - -/** - * @brief Attach an object to an attribute table. - * @memberof KrkTable - * - * Manages the stack shuffling and boxing of the name string when attaching - * an object to an attribute table. Rather than using @c krk_tableSet, this is - * the preferred method of supplying fields to objects from C code. - * - * This is a convenience wrapper around @c krk_attachNamedValue. - * - * @param table Attribute table to attach to, such as @c &someInstance->fields - * @param name Nil-terminated C string with the name to assign - * @param obj Object to attach. - */ -extern void krk_attachNamedObject(KrkTable * table, const char name[], KrkObj * obj); - -/** - * @brief Raise an exception. - * - * Creates an instance of the given exception type, passing a formatted - * string to the initializer. All of the core exception types take an option - * string value to attach to the exception, but third-party exception types - * may have different initializer signatures and need separate initialization. - * - * The created exception object is attached to the current thread state and - * the @c KRK_THREAD_HAS_EXCEPTION flag is set. - * - * @param type Class pointer for the exception type, eg. @c vm.exceptions->valueError - * @param fmt Format string. - * @return As a convenience to C extension authors, returns @c None - */ -extern KrkValue krk_runtimeError(KrkClass * type, const char * fmt, ...); - -/** - * @brief Get a pointer to the current thread state. - * - * Generally equivalent to @c &krk_currentThread, though @c krk_currentThread - * itself may be implemented as a macro that calls this function depending - * on the platform's thread support. - * - * @return Pointer to current thread's thread state. - */ -extern KrkThreadState * krk_getCurrentThread(void); - -/** - * @brief Continue VM execution until the next exit trigger. - * - * Resumes the VM dispatch loop, returning to the caller when - * the next exit trigger event happens. Generally, callers will - * want to set the current thread's exitOnFrame before calling - * @c krk_runNext. Alternatively, see @c krk_callValue which manages - * exit triggers automatically when calling function objects. - * - * @return Value returned by the exit trigger, generally the value - * returned by the inner function before the VM returned - * to the exit frame. - */ -extern KrkValue krk_runNext(void); - -/** - * @brief Get the class representing a value. - * @memberof KrkValue - * - * Returns the class object representing the type of a value. - * This may be the direct class of an instance, or a pseudoclass - * for other value types. - * - * @param value Reference value to examine. - * @return A pointer to the value's type's class object. - */ -extern KrkClass * krk_getType(KrkValue value); - -/** - * @brief Determine if a class is an instance or subclass of a given type. - * @memberof KrkValue - * - * Searches the class hierarchy of the given value to determine if it is - * a subtype of @p type. As this chains through the inheritence tree, the - * more deeply subclassed @p obj is, the longer it may take to determine - * if it is a subtype of @p type. All types should eventually be subtypes - * of the @ref object type, so this condition should not be checked. For - * some types, convenience macros are available. If you need to check if - * @p obj is a specific type, exclusive of subtypes, look at - * @c krk_getType() instead of using this function. - * - * @param obj Value to examine. - * @param type Class object to test for membership of. - * @return 1 if @p obj is an instance of @p type or of a subclass of @p type - */ -extern int krk_isInstanceOf(KrkValue obj, KrkClass * type); - -/** - * @brief Perform method binding on the stack. - * @memberof KrkClass - * - * Performs attribute lookup from the class @p _class for @p name. - * If @p name is not a valid method, the binding fails. - * If @p name is a valid method, the method will be retrieved and - * bound to the instance on the top of the stack, replacing it - * with a @ref BoundMethod object. - * - * @param _class Class object to resolve methods from. - * @param name String object with the name of the method to resolve. - * @return 1 if the method has been bound, 0 if binding failed. - */ -extern int krk_bindMethod(KrkClass * _class, KrkString * name); - -/** - * @brief Call a callable value in the current stack context. - * @memberof KrkValue - * - * Executes the given callable object (function, bound method, object - * with a @c \__call__() method, etc.) using @p argCount arguments from the stack. - * - * @param callee Value referencing a callable object. - * @param argCount Arguments to retreive from stack. - * @param extra Whether extra arguments below argCount should be - * considered as part of this call frame. Generally, - * when this is 1, the value below the arguments is - * the callable object. Most library users will want - * to leave this as 0 when calling normal functions, - * bound method objects, or ubound methods when the - * instance is included in the arguments already. - * @return An indicator of how the result should be obtained: - * 1: The VM must be resumed to run managed code. - * 2: The callable was a native function and result should be popped now. - * Else: The call failed. An exception may have already been set. - */ -extern int krk_callValue(KrkValue callee, int argCount, int extra); - -/** - * @brief Create a list object. - * @memberof KrkList - * - * This is the native function bound to @c listOf - */ -extern KrkValue krk_list_of(int argc, KrkValue argv[], int hasKw); - -/** - * @brief Create a dict object. - * @memberof KrkDict - * - * This is the native function bound to @c dictOf - */ -extern KrkValue krk_dict_of(int argc, KrkValue argv[], int hasKw); - -/** - * @brief Create a tuple object. - * @memberof KrkTuple - * - * This is the native function bound to @c tupleOf - */ -extern KrkValue krk_tuple_of(int argc, KrkValue argv[], int hasKw); - -/** - * @brief Create a set object. - * @memberof Set - * - * This is the native function bound to @c setOf - */ -extern KrkValue krk_set_of(int argc, KrkValue argv[], int hasKw); - -/** - * @brief Call a callable and manage VM state to obtain the return value. - * @memberof KrkValue - * - * This is a wrapper around various mechanisms including krk_callValue - * intended for use by C extensions to call arbitrary functions without - * knowledge of their implementation details. See the notes for - * @c krk_callValue 's @c extra paramater for details on how @p isMethod is used. - * - * @param value Callable object reference. - * @param argCount Arguments to collect from the stack. - * @param isMethod This should almost always be 0. - * @return The return value of the function. - */ -extern KrkValue krk_callSimple(KrkValue value, int argCount, int isMethod); - -/** - * @brief Convenience function for creating new types. - * @memberof KrkClass - * - * Creates a class object, output to @p _class, setting its name to @p name, inheriting - * from @p base, and attaching it with its name to the fields table of the given @p module. - * - * @param module Pointer to an instance for a module to attach to, or @c NULL to skip attaching. - * @param _class Output pointer to assign the new class object to. - * @param name Name of the new class. - * @param base Pointer to class object to inherit from. - * @return A pointer to the class object, equivalent to the value assigned to @p _class. - */ -extern KrkClass * krk_makeClass(KrkInstance * module, KrkClass ** _class, const char * name, KrkClass * base); - -/** - * @brief Finalize a class by collecting pointers to core methods. - * @memberof KrkClass - * - * Scans through the methods table of a class object to find special - * methods and assign them to the class object's pointer table so they - * can be referenced directly without performing hash lookups. - * - * @param _class Class object to finalize. - */ -extern void krk_finalizeClass(KrkClass * _class); - -/** - * @brief If there is an active exception, print a traceback to @c stderr - * - * This function is exposed as a convenience for repl developers. Normally, - * the VM will call @c krk_dumpTraceback() itself if an exception is unhandled and no - * exit trigger is current set. The traceback is obtained from the exception - * object. If the exception object does not have a traceback, only the - * exception itself will be printed. The traceback printer will attempt to - * open source files to print faulting lines and may call into the VM if the - * exception object has a managed implementation of @c \__str__. - */ -extern void krk_dumpTraceback(); - -/** - * @brief Set up a new module object in the current thread. - * - * Creates a new instance of the module type and attaches a @c \__builtins__ - * reference to its fields. The module becomes the current thread's - * main module, but is not directly attached to the module table. - * - * @param name Name of the module, which is assigned to @c \__name__ - * @return The instance object representing the module. - */ -extern KrkInstance * krk_startModule(const char * name); - -/** - * @brief Obtain a list of properties for an object. - * - * This is the native function bound to @c object.__dir__ - */ -extern KrkValue krk_dirObject(int argc, KrkValue argv[], int hasKw); - -/** - * @brief Load a module from a file with a specified name. - * - * This is generally called by the import mechanisms to load a single module and - * will establish a module context internally to load the new module into, return - * a KrkValue representing that module context through the @p moduleOut parameter. - * - * @param path Dotted path of the module, used for file lookup. - * @param moduleOut Receives a value with the module object. - * @param runAs Name to attach to @c \__name__ for this module, different from @p path - * @return 1 if the module was loaded, 0 if an @ref ImportError occurred. - */ -extern int krk_loadModule(KrkString * path, KrkValue * moduleOut, KrkString * runAs); - -/** - * @brief Load a module by a dotted name. - * - * Given a package identifier, attempt to the load module into the module table. - * This is a thin wrapper around `krk_importModule()`. - * - * @param name String object of the dot-separated package path to import. - * @return 1 if the module was loaded, 0 if an @ref ImportError occurred. - */ -extern int krk_doRecursiveModuleLoad(KrkString * name); - -/** - * @brief Load the dotted name @p name with the final element as @p runAs - * - * If @p name was imported previously with a name different from @p runAs, - * it will be imported again with the new name; this may result in - * unexpected behaviour. Generally, @p runAs is used to specify that the - * module should be run as `__main__`. - * - * @param name Dotted path name of a module. - * @param runAs Alternative name to attach to @c \__name__ for the module. - * @return 1 on success, 0 on failure. - */ -extern int krk_importModule(KrkString * name, KrkString * runAs); - -/** - * @brief Determine the truth of a value. - * @memberof KrkValue - * - * Determines if a value represents a "falsey" value. - * Empty collections, 0-length strings, False, numeric 0, - * None, etc. are "falsey". Other values are generally "truthy". - * - * @param value Value to examine. - * @return 1 if falsey, 0 if truthy - */ -extern int krk_isFalsey(KrkValue value); - -/** - * @brief Obtain a property of an object by name. - * @memberof KrkValue - * - * This is a convenience function that works in essentially the - * same way as the OP_GET_PROPERTY instruction. - * - * @param value Value to examine. - * @param name C-string of the property name to query. - * @return The requested property, or None with an @ref AttributeError - * exception set in the current thread if the attribute was - * not found. - */ -extern KrkValue krk_valueGetAttribute(KrkValue value, char * name); - -/** - * @brief See @ref krk_valueGetAttribute - */ -extern KrkValue krk_valueGetAttribute_default(KrkValue value, char * name, KrkValue defaultVal); - -/** - * @brief Set a property of an object by name. - * @memberof KrkValue - * - * This is a convenience function that works in essentially the - * same way as the OP_SET_PROPERTY instruction. - * - * @param owner The owner of the property to modify. - * @param name C-string of the property name to modify. - * @param to The value to assign. - * @return The set value, or None with an @ref AttributeError - * exception set in the current thread if the object can - * not have a property set. - */ -extern KrkValue krk_valueSetAttribute(KrkValue owner, char * name, KrkValue to); - -/** - * @brief Concatenate two strings. - * - * This is a convenience function which calls @c str.__add__ on the top stack - * values. Generally, this should be avoided - use @c StringBuilder instead. - */ -extern void krk_addObjects(void); - -/* - * All of the remaining stuff is internal and shouldn't be used by library users or embedders. - * FIXME This stuff needs to be moved to another header! FIXME - */ - -extern KrkValue _str___getitem__(int argc, KrkValue argv[], int hasKw); -#define krk_string_get _str___getitem__ -extern KrkValue _str___int__(int argc, KrkValue argv[], int hasKw); -#define krk_string_int _str___int__ -extern KrkValue _str___float__(int argc, KrkValue argv[], int hasKw); -#define krk_string_float _str___float__ -extern KrkValue _str_split(int argc, KrkValue argv[], int hasKw); -#define krk_string_split _str_split -extern KrkValue _str_format(int argc, KrkValue argv[], int hasKw); -#define krk_string_format _str_format - -extern KrkValue krk_dict_nth_key_fast(size_t capacity, KrkTableEntry * entries, size_t index); - -extern void _createAndBind_numericClasses(void); -extern void _createAndBind_strClass(void); -extern void _createAndBind_listClass(void); -extern void _createAndBind_tupleClass(void); -extern void _createAndBind_bytesClass(void); -extern void _createAndBind_dictClass(void); -extern void _createAndBind_functionClass(void); -extern void _createAndBind_rangeClass(void); -extern void _createAndBind_setClass(void); -extern void _createAndBind_builtins(void); -extern void _createAndBind_type(void); -extern void _createAndBind_exceptions(void); -extern void _createAndBind_gcMod(void); -extern void _createAndBind_timeMod(void); -extern void _createAndBind_osMod(void); -extern void _createAndBind_fileioMod(void); -#ifdef ENABLE_THREADING -extern void _createAndBind_threadsMod(void); -#endif - -extern KrkValue krk_operator_lt(KrkValue,KrkValue); -extern KrkValue krk_operator_gt(KrkValue,KrkValue); - -extern void _createAndBind_generatorClass(void); -extern KrkInstance * krk_buildGenerator(KrkClosure *, KrkValue *, size_t); diff --git a/base/usr/share/bim/syntax/c.krk b/base/usr/share/bim/syntax/c.krk index ee4a5b9e..d784e919 100644 --- a/base/usr/share/bim/syntax/c.krk +++ b/base/usr/share/bim/syntax/c.krk @@ -30,13 +30,17 @@ class CHighlighter(Highlighter): "STDIN_FILENO","STDOUT_FILENO","STDERR_FILENO" ] + preprocessor_base_state = 5 + def paintCString(self): - self.paint(1, self.FLAG_STRING) let last = None while self[0] != None: if last != '\\' and self[0] == '"': self.paint(1, self.FLAG_STRING) - return + return 0 + else if self[0] == '\\' and not self[1]: + self.paint(1, self.FLAG_ESCAPE) + return 4 else if self[0] == '\\' and self[1] in 'nr\\': self.paint(2, self.FLAG_ESCAPE) last = None @@ -69,6 +73,7 @@ class CHighlighter(Highlighter): else: last = self[0] self.paint(1, self.FLAG_STRING) + return 0 def paintCChar(self): self.paint(1, self.FLAG_NUMERAL) @@ -100,7 +105,9 @@ class CHighlighter(Highlighter): def paintCPragma(self): while self[0] != None: if self[0] == '"': - self.paintCString() + self.paint(1, self.FLAG_STRING) + let result = self.paintCString() + if result != 0: return result else if self[0] == "'": self.paintCChar() else if self[0] == '\\' and self[1] == None: @@ -167,7 +174,7 @@ class CHighlighter(Highlighter): self.paint(2, self.FLAG_COMMENT) self.rewind(6) self.paint(-1, self.FLAG_COMMENT) - return 4 + return self.preprocessor_base_state else if self.matchAndPaint("else", self.FLAG_PRAGMA, self.cKeywordQualifier): # Do nothing? return self.paintCPragma() @@ -183,8 +190,8 @@ class CHighlighter(Highlighter): else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): return 0 else if self[0] == '"': - self.paintCString() - return 0 + self.paint(1, self.FLAG_STRING) + return self.paintCString() else if self[0] == "'": self.paintCChar() return 0 @@ -202,6 +209,8 @@ class CHighlighter(Highlighter): if self.paintCComment() == 1: return 3 return self.paintCPragma() + else if cond == 4: + return self.paintCString() else: while self[0] == ' ' or self[0] == '\t': self.paint(1, self.FLAG_COMMENT) if self[0] == '#': @@ -212,11 +221,11 @@ class CHighlighter(Highlighter): return self.state + 1 else if self.matchAndPaint("else", self.FLAG_COMMENT, self.cKeywordQualifier) or self.matchAndPaint("elif", self.FLAG_COMMENT, self.cKeywordQualifier): self.paint(-1, self.FLAG_COMMENT) - if self.state == 4: return 0 + if self.state == self.preprocessor_base_state: return 0 return self.state else if self.matchAndPaint("endif", self.FLAG_COMMENT, self.cKeywordQualifier): self.paint(-1, self.FLAG_COMMENT) - if self.state == 4: return 0 + if self.state == self.preprocessor_base_state: return 0 return self.state - 1 else: self.paint(-1, self.FLAG_COMMENT) diff --git a/base/usr/share/bim/syntax/lisp.krk b/base/usr/share/bim/syntax/lisp.krk index 036c9925..5561e993 100644 --- a/base/usr/share/bim/syntax/lisp.krk +++ b/base/usr/share/bim/syntax/lisp.krk @@ -12,7 +12,7 @@ class LispHighlighter(Highlighter): def parenFromState(i): return self.parens[i % len(self.parens)] def calculate(): - if self.state == -1: self.state = 0 + if self.state == -1: self.set_state(0) while self[0]: if self[0] == ';': self.paintComment() diff --git a/kuroko b/kuroko index d477b0da..1ec1e59c 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit d477b0dacbb48ff4efed79c8a3ee45c8d8a5f062 +Subproject commit 1ec1e59c5d621d4cbee8e33ff0d10ee6cef2a356 diff --git a/lib/kuroko/_yutani.c b/lib/kuroko/_yutani.c index 629aba5a..48897973 100644 --- a/lib/kuroko/_yutani.c +++ b/lib/kuroko/_yutani.c @@ -4,10 +4,10 @@ #include #include #include -#include "kuroko/src/kuroko.h" -#include "kuroko/src/vm.h" -#include "kuroko/src/value.h" -#include "kuroko/src/object.h" +#include +#include +#include +#include static KrkInstance * module; static KrkInstance * yctxInstance = NULL; @@ -49,9 +49,6 @@ struct YutaniSprite { sprite_t sprite; }; -static KrkClass * Decorator; -/* no additional fields */ - static KrkClass * YutaniColor; struct YutaniColor { KrkInstance inst; @@ -1199,7 +1196,7 @@ KrkValue krk_module_onload__yutani(void) { TYPE(SPECIAL_REQUEST); TYPE(WELCOME); TYPE(WINDOW_INIT); #undef TYPE /* Structure bindings */ - krk_defineNative(&Message->methods, ".__getattr__", _message_getattr); + krk_defineNative(&Message->methods, "__getattr__", _message_getattr); krk_finalizeClass(Message); /** @@ -1209,9 +1206,9 @@ KrkValue krk_module_onload__yutani(void) { YutaniColor = krk_createClass(module, "color", NULL); YutaniColor->allocSize = sizeof(struct YutaniColor); YutaniColor->docstring = S("color(r,g,b,a=255)\n Representation of an RGB(A) color."); - krk_defineNative(&YutaniColor->methods, ".__init__", _yutani_color_init); - krk_defineNative(&YutaniColor->methods, ".__repr__", _yutani_color_repr); - krk_defineNative(&YutaniColor->methods, ".__str__", _yutani_color_str); + krk_defineNative(&YutaniColor->methods, "__init__", _yutani_color_init); + krk_defineNative(&YutaniColor->methods, "__repr__", _yutani_color_repr); + krk_defineNative(&YutaniColor->methods, "__str__", _yutani_color_str); krk_finalizeClass(YutaniColor); /** @@ -1225,22 +1222,22 @@ KrkValue krk_module_onload__yutani(void) { Yutani = krk_createClass(module, "Yutani", NULL); Yutani->allocSize = sizeof(struct YutaniClass); Yutani->docstring = S("Yutani()\n Establish a connection to the compositor display server."); - krk_defineNative(&Yutani->methods, ":display_width", _yutani_display_width); - krk_defineNative(&Yutani->methods, ":display_height", _yutani_display_height); - krk_defineNative(&Yutani->methods, ".__repr__", _yutani_repr); - krk_defineNative(&Yutani->methods, ".__init__", _yutani_init); - krk_defineNative(&Yutani->methods, ".poll", _yutani_poll); - krk_defineNative(&Yutani->methods, ".wait_for", _yutani_wait_for); - krk_defineNative(&Yutani->methods, ".subscribe", _yutani_subscribe); - krk_defineNative(&Yutani->methods, ".unsubscribe", _yutani_unsubscribe); - krk_defineNative(&Yutani->methods, ".query_windows", _yutani_query_windows); - krk_defineNative(&Yutani->methods, ".fileno", _yutani_fileno); - krk_defineNative(&Yutani->methods, ".query", _yutani_query); - krk_defineNative(&Yutani->methods, ".menu_process_event", _yutani_menu_process_event); + krk_defineNative(&Yutani->methods, "display_width", _yutani_display_width)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&Yutani->methods, "display_height", _yutani_display_height)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&Yutani->methods, "__repr__", _yutani_repr); + krk_defineNative(&Yutani->methods, "__init__", _yutani_init); + krk_defineNative(&Yutani->methods, "poll", _yutani_poll); + krk_defineNative(&Yutani->methods, "wait_for", _yutani_wait_for); + krk_defineNative(&Yutani->methods, "subscribe", _yutani_subscribe); + krk_defineNative(&Yutani->methods, "unsubscribe", _yutani_unsubscribe); + krk_defineNative(&Yutani->methods, "query_windows", _yutani_query_windows); + krk_defineNative(&Yutani->methods, "fileno", _yutani_fileno); + krk_defineNative(&Yutani->methods, "query", _yutani_query); + krk_defineNative(&Yutani->methods, "menu_process_event", _yutani_menu_process_event); #if 0 - krk_defineNative(&Yutani->methods, ".focus_window", _yutani_focus_window); - krk_defineNative(&Yutani->methods, ".session_end", _yutani_session_end); - krk_defineNative(&Yutani->methods, ".key_bind", _yutani_key_bind); + krk_defineNative(&Yutani->methods, "focus_window", _yutani_focus_window); + krk_defineNative(&Yutani->methods, "session_end", _yutani_session_end); + krk_defineNative(&Yutani->methods, "key_bind", _yutani_key_bind); #endif krk_finalizeClass(Yutani); @@ -1250,28 +1247,28 @@ KrkValue krk_module_onload__yutani(void) { */ GraphicsContext = krk_createClass(module, "GraphicsContext", NULL); GraphicsContext->allocSize = sizeof(struct GraphicsContext); - krk_defineNative(&GraphicsContext->methods, ":width", _gfx_width); - krk_defineNative(&GraphicsContext->methods, ":height", _gfx_height); - krk_defineNative(&GraphicsContext->methods, ".fill", _gfx_fill)->doc = + krk_defineNative(&GraphicsContext->methods, "width", _gfx_width)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&GraphicsContext->methods, "height", _gfx_height)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&GraphicsContext->methods, "fill", _gfx_fill)->doc = "GraphicsContext.fill(color)\n" " Fill the entire context with the given color."; - krk_defineNative(&GraphicsContext->methods, ".flip", _gfx_flip)->doc = + krk_defineNative(&GraphicsContext->methods, "flip", _gfx_flip)->doc = "GraphicsContext.flip()\n" " If the context is double-buffered, flip its backbuffer."; - krk_defineNative(&GraphicsContext->methods, ".blur", _gfx_blur)->doc = + krk_defineNative(&GraphicsContext->methods, "blur", _gfx_blur)->doc = "GraphicsContext.blur(radius=2)\n" " Perform an in-place box blur on this graphics context."; - krk_defineNative(&GraphicsContext->methods, ".line", _gfx_line)->doc = + krk_defineNative(&GraphicsContext->methods, "line", _gfx_line)->doc = "GraphicsContext.line(x0,x1,y0,y1,color,thickness=None)\n" " Draw a line between the given points. If thickness is not provided, uses a\n" " a simple Bresenham algorithm. If thickness is an int, draws with a box-shaped pen.\n" " If thickness is a float, draws using a point-distance antialiasing algorithm."; - krk_defineNative(&GraphicsContext->methods, ".rect", _gfx_rect)->doc = + krk_defineNative(&GraphicsContext->methods, "rect", _gfx_rect)->doc = "GraphicsContext.rect(x,y,width,height,color,solid=False,radius=None)\n" " Draw a filled rectangle. If solid is True, paints the given color directly to\n" " the underlying backbuffer with no alpha calculations. If radius is provided,\n" " draws a rounded rectangle."; - krk_defineNative(&GraphicsContext->methods, ".draw_sprite", _gfx_draw_sprite)->doc = + krk_defineNative(&GraphicsContext->methods, "draw_sprite", _gfx_draw_sprite)->doc = "GraphicsContext.draw_sprite(sprite,x,y,alpha=None,rotation=None,scale=None,color=None)\n" " Blit a sprite to this graphics context at the given coordinates.\n" " alpha: float of opacity; 1.0 = fully opaque (default)\n" @@ -1292,29 +1289,30 @@ KrkValue krk_module_onload__yutani(void) { YutaniWindow->allocSize = sizeof(struct WindowClass); YutaniWindow->docstring = S("Window(width,height,flags=0,title=None,icon=None,doublebuffer=False)\n" " Create a new window and initializes a graphics rendering context for it."); - krk_defineNative(&YutaniWindow->methods, ".__repr__", _window_repr); - krk_defineNative(&YutaniWindow->methods, ".__init__", _window_init); - krk_defineNative(&YutaniWindow->methods, ".flip", _window_flip); - krk_defineNative(&YutaniWindow->methods, ".move", _window_move); - krk_defineNative(&YutaniWindow->methods, ".set_focused", _window_set_focused); - krk_defineNative(&YutaniWindow->methods, ".close", _window_close); - krk_defineNative(&YutaniWindow->methods, ".set_stack", _window_set_stack); - krk_defineNative(&YutaniWindow->methods, ".special_request", _window_special_request); - krk_defineNative(&YutaniWindow->methods, ".resize", _window_resize); - krk_defineNative(&YutaniWindow->methods, ".resize_start", _window_resize_start); - krk_defineNative(&YutaniWindow->methods, ".resize_done", _window_resize_done); - krk_defineNative(&YutaniWindow->methods, ".resize_offer", _window_resize_offer); - krk_defineNative(&YutaniWindow->methods, ".resize_accept", _window_resize_accept); - krk_defineNative(&YutaniWindow->methods, ".update_shape", _window_update_shape); - krk_defineNative(&YutaniWindow->methods, ".show_mouse", _window_show_mouse); - krk_defineNative(&YutaniWindow->methods, ".warp_mouse", _window_warp_mouse); - krk_defineNative(&YutaniWindow->methods, ".set_stack", _window_set_stack); - krk_defineNative(&YutaniWindow->methods, ".advertise", _window_advertise); - krk_defineNative(&YutaniWindow->methods, ".reinit", _window_reinit); - krk_defineNative(&YutaniWindow->methods, ":wid", _window_wid); - krk_defineNative(&YutaniWindow->methods, ":x", _window_x); - krk_defineNative(&YutaniWindow->methods, ":y", _window_y); - krk_defineNative(&YutaniWindow->methods, ":focused", _window_focused); + krk_defineNative(&YutaniWindow->methods, "__repr__", _window_repr); + krk_defineNative(&YutaniWindow->methods, "__init__", _window_init); + krk_defineNative(&YutaniWindow->methods, "flip", _window_flip); + krk_defineNative(&YutaniWindow->methods, "move", _window_move); + krk_defineNative(&YutaniWindow->methods, "set_focused", _window_set_focused); + krk_defineNative(&YutaniWindow->methods, "close", _window_close); + krk_defineNative(&YutaniWindow->methods, "set_stack", _window_set_stack); + krk_defineNative(&YutaniWindow->methods, "special_request", _window_special_request); + krk_defineNative(&YutaniWindow->methods, "resize", _window_resize); + krk_defineNative(&YutaniWindow->methods, "resize_start", _window_resize_start); + krk_defineNative(&YutaniWindow->methods, "resize_done", _window_resize_done); + krk_defineNative(&YutaniWindow->methods, "resize_offer", _window_resize_offer); + krk_defineNative(&YutaniWindow->methods, "resize_accept", _window_resize_accept); + krk_defineNative(&YutaniWindow->methods, "update_shape", _window_update_shape); + krk_defineNative(&YutaniWindow->methods, "show_mouse", _window_show_mouse); + krk_defineNative(&YutaniWindow->methods, "warp_mouse", _window_warp_mouse); + krk_defineNative(&YutaniWindow->methods, "set_stack", _window_set_stack); + krk_defineNative(&YutaniWindow->methods, "advertise", _window_advertise); + krk_defineNative(&YutaniWindow->methods, "reinit", _window_reinit); + + krk_defineNative(&YutaniWindow->methods, "wid", _window_wid)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&YutaniWindow->methods, "x", _window_x)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&YutaniWindow->methods, "y", _window_y)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; + krk_defineNative(&YutaniWindow->methods, "focused", _window_focused)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; krk_finalizeClass(YutaniWindow); /** @@ -1326,8 +1324,8 @@ KrkValue krk_module_onload__yutani(void) { YutaniSprite->allocSize = sizeof(struct YutaniSprite); YutaniSprite->_ongcsweep = _sprite_sweep; YutaniSprite->docstring = S("Sprite(filename)\n Create a sprite from the requested texture file."); - krk_defineNative(&YutaniSprite->methods, ".__repr__", _sprite_repr); - krk_defineNative(&YutaniSprite->methods, ".__init__", _sprite_init); + krk_defineNative(&YutaniSprite->methods, "__repr__", _sprite_repr); + krk_defineNative(&YutaniSprite->methods, "__init__", _sprite_init); krk_finalizeClass(YutaniSprite); /** @@ -1338,14 +1336,14 @@ KrkValue krk_module_onload__yutani(void) { YutaniFont->allocSize = sizeof(struct YutaniFont); YutaniFont->docstring = S("Font(type,size,gamma=1.7,stroke=0.75,color=color(0,0,0))\n" " Create a Font specification for rendering text."); - krk_defineNative(&YutaniFont->methods, ".__init__", _font_init); - krk_defineNative(&YutaniFont->methods, ".draw_string", _font_draw_string)->doc = + krk_defineNative(&YutaniFont->methods, "__init__", _font_init); + krk_defineNative(&YutaniFont->methods, "draw_string", _font_draw_string)->doc = "Font.draw_string(gfxContext, string, x, y)\n" " Draw text to a graphics context with this font."; - krk_defineNative(&YutaniFont->methods, ".width", _font_width)->doc = + krk_defineNative(&YutaniFont->methods, "width", _font_width)->doc = "Font.width(string)\n" " Calculate the rendered width of the given string when drawn with this font."; - krk_defineNative(&YutaniFont->methods, ":size", _font_size); + krk_defineNative(&YutaniFont->methods, "size", _font_size)->flags |= KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY; /* Some static values */ #define ATTACH_FONT(name) krk_attachNamedValue(&YutaniFont->methods, #name, INTEGER_VAL(SDF_ ## name)) ATTACH_FONT(FONT_THIN); @@ -1361,37 +1359,38 @@ KrkValue krk_module_onload__yutani(void) { MenuBarClass = krk_createClass(module, "MenuBar", NULL); MenuBarClass->allocSize = sizeof(struct MenuBarClass); MenuBarClass->_ongcsweep = _MenuBar_gcsweep; - krk_defineNative(&MenuBarClass->methods, ".__init__", _MenuBar_init); - krk_defineNative(&MenuBarClass->methods, ".place", _MenuBar_place); - krk_defineNative(&MenuBarClass->methods, ".render", _MenuBar_render); - krk_defineNative(&MenuBarClass->methods, ".mouse_event", _MenuBar_mouse_event); - krk_defineNative(&MenuBarClass->methods, ".insert", _MenuBar_insert); + krk_defineNative(&MenuBarClass->methods, "__init__", _MenuBar_init); + krk_defineNative(&MenuBarClass->methods, "place", _MenuBar_place); + krk_defineNative(&MenuBarClass->methods, "render", _MenuBar_render); + krk_defineNative(&MenuBarClass->methods, "mouse_event", _MenuBar_mouse_event); + krk_defineNative(&MenuBarClass->methods, "insert", _MenuBar_insert); krk_finalizeClass(MenuBarClass); MenuListClass = krk_createClass(module, "MenuList", NULL); MenuListClass->allocSize = sizeof(struct MenuListClass); - krk_defineNative(&MenuListClass->methods, ".__init__", _MenuList_init); - krk_defineNative(&MenuListClass->methods, ".insert", _MenuList_insert); + krk_defineNative(&MenuListClass->methods, "__init__", _MenuList_init); + krk_defineNative(&MenuListClass->methods, "insert", _MenuList_insert); krk_finalizeClass(MenuListClass); MenuEntryClass = krk_createClass(module, "MenuEntry", NULL); MenuEntryClass->allocSize = sizeof(struct MenuEntryClass); - krk_defineNative(&MenuEntryClass->methods, ".__init__", _MenuEntry_init); + krk_defineNative(&MenuEntryClass->methods, "__init__", _MenuEntry_init); krk_finalizeClass(MenuEntryClass); MenuEntrySubmenuClass = krk_createClass(module, "MenuEntrySubmenu", MenuEntryClass); - krk_defineNative(&MenuEntrySubmenuClass->methods, ".__init__", _MenuEntrySubmenu_init); + krk_defineNative(&MenuEntrySubmenuClass->methods, "__init__", _MenuEntrySubmenu_init); krk_finalizeClass(MenuEntrySubmenuClass); MenuEntrySeparatorClass = krk_createClass(module, "MenuEntrySeparator", MenuEntryClass); - krk_defineNative(&MenuEntrySeparatorClass->methods, ".__init__", _MenuEntrySeparator_init); + krk_defineNative(&MenuEntrySeparatorClass->methods, "__init__", _MenuEntrySeparator_init); krk_finalizeClass(MenuEntrySeparatorClass); - Decorator = krk_createClass(module, "Decorator", NULL); - krk_defineNative(&Decorator->methods, "get_bounds", _decor_get_bounds); - krk_defineNative(&Decorator->methods, "render", _decor_render); - krk_defineNative(&Decorator->methods, "handle_event", _decor_handle_event); - krk_defineNative(&Decorator->methods, "show_default_menu", _decor_show_default_menu); -#define ATTACH_CONSTANT(name) krk_attachNamedValue(&Decorator->methods, #name, INTEGER_VAL(name)) + KrkInstance * Decorator = krk_newInstance(vm.baseClasses->objectClass); + krk_attachNamedObject(&module->fields, "Decorator", (KrkObj*)Decorator); + krk_defineNative(&Decorator->fields, "get_bounds", _decor_get_bounds); + krk_defineNative(&Decorator->fields, "render", _decor_render); + krk_defineNative(&Decorator->fields, "handle_event", _decor_handle_event); + krk_defineNative(&Decorator->fields, "show_default_menu", _decor_show_default_menu); +#define ATTACH_CONSTANT(name) krk_attachNamedValue(&Decorator->fields, #name, INTEGER_VAL(name)) ATTACH_CONSTANT(DECOR_OTHER); ATTACH_CONSTANT(DECOR_CLOSE); ATTACH_CONSTANT(DECOR_RESIZE); @@ -1409,7 +1408,6 @@ KrkValue krk_module_onload__yutani(void) { ATTACH_CONSTANT(DECOR_FLAG_TILE_UP); ATTACH_CONSTANT(DECOR_FLAG_TILE_DOWN); #undef ATTACH_CONSTANT - krk_finalizeClass(Decorator); /* Pop the module object before returning; it'll get pushed again * by the VM before the GC has a chance to run, so it's safe. */ diff --git a/util/auto-dep.py b/util/auto-dep.py index f82f3cba..773c38ab 100755 --- a/util/auto-dep.py +++ b/util/auto-dep.py @@ -36,7 +36,6 @@ class Classifier(object): '': (None, '-ltoaru_textregion', ['', '','', '']), '': (None, '-ltoaru_button', ['','', '']), # Kuroko - '': ('../../../kuroko/src', '-lkuroko', []), '': (None, '-lkuroko', []), # OPTIONAL third-party libraries, for extensions / ports '': ('freetype2', '-lfreetype', []), From 5947bec72c22d0c02e697cafe35ca7a182c304b2 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 28 Mar 2021 22:00:23 +0900 Subject: [PATCH 101/102] kuroko, bim: sync with upstream --- apps/bim.c | 54 +++++++++-- apps/bim.h | 1 + apps/kuroko.c | 113 +++++++++++++++++++---- base/usr/share/bim/syntax/__init__.krk | 2 + base/usr/share/bim/syntax/c.krk | 88 +++++++++--------- base/usr/share/bim/syntax/doxygen.krk | 79 +++++++++------- base/usr/share/bim/syntax/javascript.krk | 2 +- base/usr/share/bim/syntax/krk.krk | 8 +- base/usr/share/bim/syntax/make.krk | 1 + kuroko | 2 +- 10 files changed, 241 insertions(+), 109 deletions(-) diff --git a/apps/bim.c b/apps/bim.c index f4a2a01a..cf1515e1 100644 --- a/apps/bim.c +++ b/apps/bim.c @@ -76,6 +76,7 @@ global_config_t global_config = { .has_terminal = 0, .search_wraps = 1, .had_error = 0, + .use_biminfo = 1, /* Integer config values */ .cursor_padding = 4, .split_percent = 50, @@ -538,7 +539,8 @@ buffer_t * buffer_new(void) { * Open the biminfo file. */ FILE * open_biminfo(void) { - /* TODO: biminfo paths should probably configurable with an arg, like bimrc */ + if (!global_config.use_biminfo) return NULL; + char * home = getenv("HOME"); if (!home) { /* ... but since it's not, we need $HOME, so fail if it isn't set. */ @@ -3695,6 +3697,25 @@ int line_matches(line_t * line, char * string) { void run_onload(buffer_t * env) { /* TODO */ + KrkValue onLoad; + if (krk_tableGet_fast(&krk_currentThread.module->fields, S("onload"), &onLoad)) { + krk_push(onLoad); + krk_push(krk_dict_of(0,NULL,0)); + + if (env->file_name) { + krk_attachNamedObject(AS_DICT(krk_peek(0)), "filename", + (KrkObj*)krk_copyString(env->file_name,strlen(env->file_name))); + } + + if (env->syntax && env->syntax->krkClass) { + krk_attachNamedObject(AS_DICT(krk_peek(0)), "highlighter", + (KrkObj*)env->syntax->krkClass); + } + + + krk_callSimple(onLoad, 1, 1); + krk_resetStack(); + } } static void render_syntax_async(background_task_t * task) { @@ -10251,11 +10272,13 @@ int c_keyword_qualifier(int c) { } #define BIM_STATE() \ - if (argc < 1 || !krk_isInstanceOf(argv[0],syntaxStateClass)) return krk_runtimeError(vm.exceptions->typeError, "expected state"); \ + if (unlikely(argc < 1 || !krk_isInstanceOf(argv[0],syntaxStateClass))) return krk_runtimeError(vm.exceptions->typeError, "expected state"); \ KrkInstance * _self = AS_INSTANCE(argv[0]); \ struct SyntaxState * self = (struct SyntaxState*)_self; \ struct syntax_state * state = &self->state; +static KrkTuple * _bim_state_chars = NULL; + static KrkValue bim_krk_state_getstate(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); if (argc > 1 && IS_INTEGER(argv[1])) { @@ -10289,6 +10312,7 @@ static KrkValue bim_krk_state_get(int argc, KrkValue argv[], int hasKw) { long arg = AS_INTEGER(argv[1]); int charRel = charrel(arg); if (charRel == -1) return NONE_VAL(); + if (charRel >= 32 && charRel <= 126) return _bim_state_chars->values.values[charRel - 32]; char tmp[8] = {0}; size_t len = to_eight(charRel, tmp); return OBJECT_VAL(krk_copyString(tmp,len)); @@ -10331,13 +10355,14 @@ static KrkValue bim_krk_state_skip(int argc, KrkValue argv[], int hasKw) { return NONE_VAL(); } static KrkValue bim_krk_state_cKeywordQualifier(int argc, KrkValue argv[], int hasKw) { - if (IS_INTEGER(argv[1])) return BOOLEAN_VAL(!!c_keyword_qualifier(AS_INTEGER(argv[1]))); - if (!IS_STRING(argv[1])) return BOOLEAN_VAL(0); - if (AS_STRING(argv[1])->length > 1) return BOOLEAN_VAL(0); - return BOOLEAN_VAL(!!c_keyword_qualifier(AS_CSTRING(argv[1])[0])); + if (IS_INTEGER(argv[0])) return BOOLEAN_VAL(!!c_keyword_qualifier(AS_INTEGER(argv[0]))); + if (!IS_STRING(argv[0])) return BOOLEAN_VAL(0); + if (AS_STRING(argv[0])->length > 1) return BOOLEAN_VAL(0); + return BOOLEAN_VAL(!!c_keyword_qualifier(AS_CSTRING(argv[0])[0])); } static int callQualifier(KrkValue qualifier, int codepoint) { + if (IS_NATIVE(qualifier) && AS_NATIVE(qualifier)->function == bim_krk_state_cKeywordQualifier) return AS_BOOLEAN(!!c_keyword_qualifier(codepoint)); krk_push(qualifier); krk_push(INTEGER_VAL(codepoint)); KrkValue result = krk_callSimple(krk_peek(1), 1, 1); @@ -10352,7 +10377,7 @@ static int callQualifier(KrkValue qualifier, int codepoint) { static KrkValue bim_krk_state_findKeywords(int argc, KrkValue argv[], int hasKw) { BIM_STATE(); - if (argc < 4 || !krk_isInstanceOf(argv[1], vm.baseClasses->listClass) || !IS_INTEGER(argv[2])) + if (unlikely(argc < 4 || !(IS_INSTANCE(argv[1]) && AS_INSTANCE(argv[1])->_class == vm.baseClasses->listClass) || !IS_INTEGER(argv[2]))) return krk_runtimeError(vm.exceptions->typeError, "invalid arguments to SyntaxState.findKeywords"); KrkValue qualifier = argv[3]; @@ -10704,7 +10729,12 @@ void initialize(void) { global_config.tab_indicator = strdup(">"); global_config.space_indicator = strdup("-"); +#if 0 + krk_initVM(KRK_GLOBAL_CALLGRIND); /* no debug flags */ + vm.callgrindFile = fopen("callgrind.out","w"); +#else krk_initVM(0); /* no debug flags */ +#endif KrkInstance * bimModule = krk_newInstance(vm.baseClasses->moduleClass); krk_attachNamedObject(&vm.modules, "bim", (KrkObj*)bimModule); @@ -10758,7 +10788,7 @@ void initialize(void) { krk_defineNative(&syntaxStateClass->methods, "__init__", bim_krk_state_init); /* These ones take argumens so they're methods instead of dynamic fields */ krk_defineNative(&syntaxStateClass->methods, "findKeywords", bim_krk_state_findKeywords); - krk_defineNative(&syntaxStateClass->methods, "cKeywordQualifier", bim_krk_state_cKeywordQualifier); + krk_defineNative(&syntaxStateClass->methods, "cKeywordQualifier", bim_krk_state_cKeywordQualifier)->flags |= KRK_NATIVE_FLAGS_IS_STATIC_METHOD; krk_defineNative(&syntaxStateClass->methods, "isdigit", bim_krk_state_isdigit); krk_defineNative(&syntaxStateClass->methods, "isxdigit", bim_krk_state_isxdigit); krk_defineNative(&syntaxStateClass->methods, "paint", bim_krk_state_paint); @@ -10783,6 +10813,13 @@ void initialize(void) { krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_LINK", INTEGER_VAL(FLAG_LINK)); krk_attachNamedValue(&syntaxStateClass->methods, "FLAG_ESCAPE", INTEGER_VAL(FLAG_ESCAPE)); + _bim_state_chars = krk_newTuple(95); + krk_attachNamedObject(&syntaxStateClass->methods, "__chars__", (KrkObj*)_bim_state_chars); + for (int c = 0; c < 95; ++c) { + char tmp = c + 32; + _bim_state_chars->values.values[_bim_state_chars->values.count++] = OBJECT_VAL(krk_copyString(&tmp,1)); + } + krk_finalizeClass(syntaxStateClass); krk_resetStack(); @@ -11250,6 +11287,7 @@ int main(int argc, char * argv[]) { case 'C': /* Print file to stdout using our syntax highlighting and color theme */ initialize(); + global_config.use_biminfo = 0; global_config.go_to_line = 0; open_file(optarg); for (int i = 0; i < env->line_count; ++i) { diff --git a/apps/bim.h b/apps/bim.h index 2b8a42b5..589158d0 100644 --- a/apps/bim.h +++ b/apps/bim.h @@ -210,6 +210,7 @@ typedef struct { unsigned int has_terminal:1; unsigned int search_wraps:1; unsigned int had_error:1; + unsigned int use_biminfo:1; int cursor_padding; int split_percent; diff --git a/apps/kuroko.c b/apps/kuroko.c index 69e60d42..0beb193a 100644 --- a/apps/kuroko.c +++ b/apps/kuroko.c @@ -13,11 +13,15 @@ #include #include +#ifdef __toaru__ #include +#else +#ifndef NO_RLINE +#include "vendor/rline.h" +#endif +#endif -#define DEBUG #include - #include #include #include @@ -29,6 +33,8 @@ #define PROMPT_MAIN ">>> " #define PROMPT_BLOCK " > " +#define CALLGRIND_TMP_FILE "/tmp/kuroko.callgrind.tmp" + static int enableRline = 1; static int exitRepl = 0; static int pasteEnabled = 0; @@ -258,7 +264,7 @@ static void tab_complete_func(rline_context_t * c) { KrkValue thisValue = findFromProperty(root, asToken); krk_push(thisValue); if (IS_CLOSURE(thisValue) || IS_BOUND_METHOD(thisValue) || - (IS_NATIVE(thisValue) && !(((KrkNative*)AS_OBJECT(thisValue))->flags & KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY))) { + (IS_NATIVE(thisValue) && !((KrkNative*)AS_OBJECT(thisValue))->flags & KRK_NATIVE_FLAGS_IS_DYNAMIC_PROPERTY)) { size_t allocSize = s->length + 2; char * tmp = malloc(allocSize); size_t len = snprintf(tmp, allocSize, "%s(", s->chars); @@ -368,6 +374,7 @@ static void tab_complete_func(rline_context_t * c) { } #endif +#ifdef DEBUG static char * lastDebugCommand = NULL; static int debuggerHook(KrkCallFrame * frame) { @@ -420,7 +427,10 @@ static int debuggerHook(KrkCallFrame * frame) { } } else { #ifndef NO_RLINE - if (enableRline) rline_history_insert(strdup(buf)); + if (enableRline) { + rline_history_insert(strdup(buf)); + rline_scroll = 0; + } #endif if (lastDebugCommand) free(lastDebugCommand); lastDebugCommand = strdup(buf); @@ -611,6 +621,7 @@ static int debuggerHook(KrkCallFrame * frame) { _dbgQuit: return KRK_DEBUGGER_QUIT; } +#endif static void handleSigint(int sigNum) { /* Don't set the signal flag if the VM is not running */ @@ -618,8 +629,14 @@ static void handleSigint(int sigNum) { krk_currentThread.flags |= KRK_THREAD_SIGNALLED; } +static void handleSigtrap(int sigNum) { + if (!krk_currentThread.frameCount) return; + krk_currentThread.flags |= KRK_THREAD_SINGLE_STEP; +} + static void bindSignalHandlers(void) { signal(SIGINT, handleSigint); + signal(SIGTRAP, handleSigtrap); } static void findInterpreter(char * argv[]) { @@ -721,13 +738,16 @@ int main(int argc, char * argv[]) { SetConsoleOutputCP(65001); SetConsoleCP(65001); #endif + char * runCmd = NULL; int flags = 0; int moduleAsMain = 0; + int inspectAfter = 0; int opt; - while ((opt = getopt(argc, argv, "+c:C:dgm:rstMSV-:")) != -1) { + while ((opt = getopt(argc, argv, "+:c:C:dgGim:rstTMSV-:")) != -1) { switch (opt) { case 'c': - return runString(argv, flags, optarg); + runCmd = optarg; + goto _finishArgs; case 'd': /* Disassemble code blocks after compilation. */ flags |= KRK_THREAD_ENABLE_DISASSEMBLY; @@ -736,6 +756,9 @@ int main(int argc, char * argv[]) { /* Always garbage collect during an allocation. */ flags |= KRK_GLOBAL_ENABLE_STRESS_GC; break; + case 'G': + flags |= KRK_GLOBAL_REPORT_GC_COLLECTS; + break; case 's': /* Print debug information during compilation. */ flags |= KRK_THREAD_ENABLE_SCAN_TRACING; @@ -747,6 +770,14 @@ int main(int argc, char * argv[]) { /* Disassemble instructions as they are executed. */ flags |= KRK_THREAD_ENABLE_TRACING; break; + case 'T': { + flags |= KRK_GLOBAL_CALLGRIND; + vm.callgrindFile = fopen(CALLGRIND_TMP_FILE,"w"); + break; + } + case 'i': + inspectAfter = 1; + break; case 'm': moduleAsMain = 1; optind--; /* to get us back to optarg */ @@ -760,19 +791,33 @@ int main(int argc, char * argv[]) { return runString(argv,0,"import kuroko; print('Kuroko',kuroko.version)\n"); case 'C': return compileFile(argv,flags,optarg); + case ':': + fprintf(stderr, "%s: option '%c' requires an argument\n", argv[0], optopt); + return 1; + case '?': + if (optopt != '-') { + fprintf(stderr, "%s: unrecognized option '%c'\n", argv[0], optopt); + return 1; + } + optarg = argv[optind]+2; + /* fall through */ case '-': if (!strcmp(optarg,"version")) { return runString(argv,0,"import kuroko; print('Kuroko',kuroko.version)\n"); } else if (!strcmp(optarg,"help")) { +#ifndef KRK_NO_DOCUMENTATION fprintf(stderr,"usage: %s [flags] [FILE...]\n" "\n" "Interpreter options:\n" " -d Debug output from the bytecode compiler.\n" " -g Collect garbage on every allocation.\n" + " -G Report GC collections.\n" + " -i Enter repl after a running -c, -m, or FILE.\n" " -m mod Run a module as a script.\n" " -r Disable complex line editing in the REPL.\n" " -s Debug output from the scanner/tokenizer.\n" " -t Disassemble instructions as they are exceuted.\n" + " -T Write call trace file.\n" " -C file Compile 'file', but do not execute it.\n" " -M Print the default module import paths.\n" " -S Enable single-step debugging.\n" @@ -783,6 +828,7 @@ int main(int argc, char * argv[]) { "\n" "If no files are provided, the interactive REPL will run.\n", argv[0]); +#endif return 0; } else { fprintf(stderr,"%s: unrecognized option '--%s'\n", @@ -796,7 +842,9 @@ int main(int argc, char * argv[]) { findInterpreter(argv); krk_initVM(flags); +#ifdef DEBUG krk_debug_registerCallback(debuggerHook); +#endif /* Attach kuroko.argv - argv[0] will be set to an empty string for the repl */ if (argc == optind) krk_push(OBJECT_VAL(krk_copyString("",0))); @@ -815,6 +863,7 @@ int main(int argc, char * argv[]) { #ifdef BUNDLE_LIBS /* Add any other modules you want to include that are normally built as shared objects. */ BUNDLED(math); + BUNDLED(socket); #endif KrkValue result = INTEGER_VAL(0); @@ -846,8 +895,28 @@ int main(int argc, char * argv[]) { krk_dumpTraceback(); krk_resetStack(); } - return out; - } else if (optind == argc) { + if (!inspectAfter) return out; + if (IS_INSTANCE(krk_peek(0))) { + krk_currentThread.module = AS_INSTANCE(krk_peek(0)); + } + } else if (optind != argc) { + krk_startModule("__main__"); + result = krk_runfile(argv[optind],argv[optind]); + if (IS_NONE(result) && krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) result = INTEGER_VAL(1); + } + + if (!krk_currentThread.module) { + /* The repl runs in the context of a top-level module so each input + * line can share a globals state with the others. */ + krk_startModule("__main__"); + krk_attachNamedValue(&krk_currentThread.module->fields,"__doc__", NONE_VAL()); + } + + if (runCmd) { + result = krk_interpret(runCmd, ""); + } + + if ((!moduleAsMain && !runCmd && optind == argc) || inspectAfter) { /* Add builtins for the repl, but hide them from the globals() list. */ KRK_DOC(BIND_FUNC(vm.builtins,exit), "@brief Exit the interactive repl.\n\n" "Only available from the interactive interpreter; exits the repl."); @@ -858,11 +927,6 @@ int main(int argc, char * argv[]) { "it will be set to the opposite of the current mode. The new mode will be " "printed to stderr."); - /* The repl runs in the context of a top-level module so each input - * line can share a globals state with the others. */ - krk_startModule("__main__"); - krk_attachNamedValue(&krk_currentThread.module->fields,"__doc__", NONE_VAL()); - /** * Python stores version info in a built-in module called `sys`. * We are not Python, we'll use `sys` to pretend to be Python @@ -1028,7 +1092,10 @@ int main(int argc, char * argv[]) { for (size_t i = 0; i < lineCount; ++i) { if (valid) strcat(allData, lines[i]); #ifndef NO_RLINE - if (enableRline) rline_history_insert(strdup(lines[i])); + if (enableRline) { + rline_history_insert(strdup(lines[i])); + rline_scroll = 0; + } #endif free(lines[i]); } @@ -1058,10 +1125,20 @@ int main(int argc, char * argv[]) { (void)blockWidth; } - } else { - krk_startModule("__main__"); - result = krk_runfile(argv[optind],argv[optind]); - if (IS_NONE(result) && krk_currentThread.flags & KRK_THREAD_HAS_EXCEPTION) result = INTEGER_VAL(1); + } + + if (vm.globalFlags & KRK_GLOBAL_CALLGRIND) { + fclose(vm.callgrindFile); + vm.globalFlags &= ~(KRK_GLOBAL_CALLGRIND); + + krk_resetStack(); + krk_startModule(""); + krk_attachNamedObject(&krk_currentThread.module->fields, "filename", (KrkObj*)S(CALLGRIND_TMP_FILE)); + krk_interpret( + "from callgrind import processFile\n" + "import kuroko\n" + "import os\n" + "processFile(filename, os.getpid(), ' '.join(kuroko.argv))",""); } krk_freeVM(); diff --git a/base/usr/share/bim/syntax/__init__.krk b/base/usr/share/bim/syntax/__init__.krk index fc2ee1dd..3d239ca3 100644 --- a/base/usr/share/bim/syntax/__init__.krk +++ b/base/usr/share/bim/syntax/__init__.krk @@ -36,10 +36,12 @@ class Highlighter(SyntaxState): else: self.paint(1, self.FLAG_STRING) + @staticmethod def isalpha(c): c = c if isinstance(c,int) else ord(c) return (c >= ord('a') and c <= ord('z')) or (c >= ord('A') and c <= ord('Z')) + @staticmethod def isalnum(c): c = c if isinstance(c,int) else ord(c) return (c >= ord('a') and c <= ord('z')) or (c >= ord('A') and c <= ord('Z')) or (c >= ord('0') and c <= ord('9')) diff --git a/base/usr/share/bim/syntax/c.krk b/base/usr/share/bim/syntax/c.krk index d784e919..8efb2fe4 100644 --- a/base/usr/share/bim/syntax/c.krk +++ b/base/usr/share/bim/syntax/c.krk @@ -152,55 +152,53 @@ class CHighlighter(Highlighter): def calculate(self): let cond = self.state if cond <= 0: - if self[0] == '#': - for i in range(self.i): - if self[-i-1] != ' ' and self[-i-1] != '\t': - self.skip() - return 0 - self.paint(1, self.FLAG_PRAGMA) - while self[0] == ' ': + while self[0]: + if self[0] == '#': + for i in range(self.i): + if self[-i-1] != ' ' and self[-i-1] != '\t': + self.skip() + continue self.paint(1, self.FLAG_PRAGMA) - if self.matchAndPaint("include", self.FLAG_PRAGMA, self.cKeywordQualifier): while self[0] == ' ': self.paint(1, self.FLAG_PRAGMA) - if self[0] == '<': - self.paint(1, self.FLAG_STRING) - while self[0] != '>' and self[0] != None: - self.paint(1, self.FLAG_STRING) - if self[0] != None: + if self.matchAndPaint("include", self.FLAG_PRAGMA, self.cKeywordQualifier): + while self[0] == ' ': + self.paint(1, self.FLAG_PRAGMA) + if self[0] == '<': self.paint(1, self.FLAG_STRING) - else if self.matchAndPaint("if", self.FLAG_PRAGMA, self.cKeywordQualifier): - if self[0] == ' ' and self[1] == '0' and self[2] == None: - self.paint(2, self.FLAG_COMMENT) - self.rewind(6) - self.paint(-1, self.FLAG_COMMENT) - return self.preprocessor_base_state - else if self.matchAndPaint("else", self.FLAG_PRAGMA, self.cKeywordQualifier): - # Do nothing? - return self.paintCPragma() - else if self[0] == '/' and self[1] == '/': - self.paintComment() - else if self[0] == '/' and self[1] == '*': - self.paint(2, self.FLAG_COMMENT) - return self.paintCComment() - else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): - return 0 - else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): - return 0 - else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): - return 0 - else if self[0] == '"': - self.paint(1, self.FLAG_STRING) - return self.paintCString() - else if self[0] == "'": - self.paintCChar() - return 0 - else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): - self.paintCNumeral() - return 0 - else if self[0] != None: - self.skip() - return 0 + while self[0] != '>' and self[0] != None: + self.paint(1, self.FLAG_STRING) + if self[0] != None: + self.paint(1, self.FLAG_STRING) + else if self.matchAndPaint("if", self.FLAG_PRAGMA, self.cKeywordQualifier): + if self[0] == ' ' and self[1] == '0' and self[2] == None: + self.paint(2, self.FLAG_COMMENT) + self.rewind(6) + self.paint(-1, self.FLAG_COMMENT) + return self.preprocessor_base_state + else if self.matchAndPaint("else", self.FLAG_PRAGMA, self.cKeywordQualifier): + # Do nothing? + return self.paintCPragma() + else if self[0] == '/' and self[1] == '/': + self.paintComment() + else if self[0] == '/' and self[1] == '*': + self.paint(2, self.FLAG_COMMENT) + return self.paintCComment() + else if self.findKeywords(self.keywords, self.FLAG_KEYWORD, self.cKeywordQualifier): + continue + else if self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + continue + else if self.findKeywords(self.special, self.FLAG_NUMERAL, self.cKeywordQualifier): + continue + else if self[0] == '"': + self.paint(1, self.FLAG_STRING) + return self.paintCString() + else if self[0] == "'": + self.paintCChar() + else if not self.cKeywordQualifier(self[-1]) and self.isdigit(self[0]): + self.paintCNumeral() + else: + self.skip() else if cond == 1: return self.paintCComment() else if cond == 2: diff --git a/base/usr/share/bim/syntax/doxygen.krk b/base/usr/share/bim/syntax/doxygen.krk index 6d011e3a..7ec8fcb7 100644 --- a/base/usr/share/bim/syntax/doxygen.krk +++ b/base/usr/share/bim/syntax/doxygen.krk @@ -1,39 +1,48 @@ -let doxygen_keywords_at = [ - "@author","@brief","@class","@short","@retval", - "@since","@return","@returns","@throws","@bug", - "@version","@deprecated","@attention","@note", -] -def tryDoxygenComment(b,defaultflag=b.FLAG_COMMENT): +def _make_dox(): + from syntax import Highlighter + + let doxygen_keywords_at = [ + "@author","@brief","@class","@short","@retval", + "@since","@return","@returns","@throws","@bug", + "@version","@deprecated","@attention","@note", + ] + let doxygen_word_commands = { - '@param': b.FLAG_TYPE, - '@exception': b.FLAG_PRAGMA, - '@def': b.FLAG_TYPE, - '@see': b.FLAG_LINK, - '@p': b.FLAG_TYPE, - '@c': b.FLAG_NONE, - '@file': b.FLAG_LINK, - '@memberof': b.FLAG_TYPE, - '@extends': b.FLAG_TYPE, - '@mainpage': b.FLAG_STRING, - '@section': b.FLAG_BOLD, - '@subsection': b.FLAG_BOLD, - '@package': b.FLAG_TYPE, - '@ref': b.FLAG_LINK, + '@param': Highlighter.FLAG_TYPE, + '@exception': Highlighter.FLAG_PRAGMA, + '@def': Highlighter.FLAG_TYPE, + '@see': Highlighter.FLAG_LINK, + '@p': Highlighter.FLAG_TYPE, + '@c': Highlighter.FLAG_NONE, + '@file': Highlighter.FLAG_LINK, + '@memberof': Highlighter.FLAG_TYPE, + '@extends': Highlighter.FLAG_TYPE, + '@mainpage': Highlighter.FLAG_STRING, + '@section': Highlighter.FLAG_BOLD, + '@subsection': Highlighter.FLAG_BOLD, + '@package': Highlighter.FLAG_TYPE, + '@ref': Highlighter.FLAG_LINK, } - if b[0] == '@': - def qualifier(c): - if isinstance(c,int): - if c > 0: c = chr(c) - else: return False - return b.isalnum(c) or c in '_@' - if not b.findKeywords(doxygen_keywords_at, b.FLAG_ESCAPE, qualifier): - for keyword, flag in doxygen_word_commands.items(): - if b.matchAndPaint(keyword, b.FLAG_ESCAPE, qualifier): - while b[0] == ' ': b.skip() - while b[0] and b[0] != ' ': b.paint(1, flag) - return True - b.paint(1, defaultflag) - return True - return False + def doxygen_qualifier(c): + if isinstance(c,int): + if c > 0: c = chr(c) + else: return False + return Highlighter.isalnum(c) or c in '_@' + + def tryDoxygenComment(b,defaultflag=b.FLAG_COMMENT): + if b[0] == '@': + if not b.findKeywords(doxygen_keywords_at, b.FLAG_ESCAPE, doxygen_qualifier): + for keyword, flag in doxygen_word_commands.items(): + if b.matchAndPaint(keyword, b.FLAG_ESCAPE, doxygen_qualifier): + while b[0] == ' ': b.skip() + while b[0] and b[0] != ' ': b.paint(1, flag) + return True + b.paint(1, defaultflag) + return True + return False + + return tryDoxygenComment + +let tryDoxygenComment = _make_dox() diff --git a/base/usr/share/bim/syntax/javascript.krk b/base/usr/share/bim/syntax/javascript.krk index cecc6a11..70eb9720 100644 --- a/base/usr/share/bim/syntax/javascript.krk +++ b/base/usr/share/bim/syntax/javascript.krk @@ -12,7 +12,7 @@ class JavascriptHighlighter(Highlighter): "if","implements","import","in","instanceof","interface","let","long", "native","new","package","private","protected","public","return", "static","super","switch","synchronized","this","throw","throws", - "transienttrue","try","typeof","volatile","while","with","yield", + "transient","true","try","typeof","volatile","while","with","yield", ] types = [ "int","float","double","short","var","void","byte","char","boolean", diff --git a/base/usr/share/bim/syntax/krk.krk b/base/usr/share/bim/syntax/krk.krk index 909d1c34..af560c56 100644 --- a/base/usr/share/bim/syntax/krk.krk +++ b/base/usr/share/bim/syntax/krk.krk @@ -22,7 +22,7 @@ class KrkHighlighter(Highlighter): 'object','exception','isinstance','type','print','tuple','bool','any','all', 'hex','ord','chr','bytes','set','getattr','setattr','input','zip','enumerate', 'property','staticmethod','classmethod','filter','min','max','id','map','bin', - 'sum','sorted', + 'sum','sorted','issubclass','hasattr','delattr', ] special = [ @@ -79,6 +79,12 @@ class KrkHighlighter(Highlighter): else if self[0] == strType and not isTriple: self.paint(-1, self.FLAG_ERROR) return None + else if self.findKeywords(self.keywords, self.FLAG_ESCAPE, self.cKeywordQualifier): + continue + else if self[-1] != '.' and self.findKeywords(self.types, self.FLAG_TYPE, self.cKeywordQualifier): + continue + else if self.findKeywords(self.exceptions, self.FLAG_PRAGMA, self.cKeywordQualifier): + continue self.paint(1, self.FLAG_NUMERAL) else if self.doxygenDocstrings and isTriple and tryDoxygenComment(self, self.FLAG_STRING): continue diff --git a/base/usr/share/bim/syntax/make.krk b/base/usr/share/bim/syntax/make.krk index 9c0d049b..ac58c09f 100644 --- a/base/usr/share/bim/syntax/make.krk +++ b/base/usr/share/bim/syntax/make.krk @@ -102,6 +102,7 @@ class GnumakeHighlighter(Highlighter): break else if self[i] == '=': whatisit = 2 + break else if self[i] == '#': break if not whatisit: diff --git a/kuroko b/kuroko index 1ec1e59c..ed5d03b0 160000 --- a/kuroko +++ b/kuroko @@ -1 +1 @@ -Subproject commit 1ec1e59c5d621d4cbee8e33ff0d10ee6cef2a356 +Subproject commit ed5d03b001a6d3b1154999312c233700af0d3e16 From 19539bf1ab3c8efdb2f690af1529b910fcb332e4 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Sun, 28 Mar 2021 22:59:58 +0900 Subject: [PATCH 102/102] krk_yutani_test: Cleanup --- apps/krk_yutani_test.krk | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/krk_yutani_test.krk b/apps/krk_yutani_test.krk index ae37acd6..fc841066 100644 --- a/apps/krk_yutani_test.krk +++ b/apps/krk_yutani_test.krk @@ -1,12 +1,21 @@ #!/bin/kuroko -from _yutani import color, Yutani, Window, Decorator, Message, MenuBar, MenuList, MenuEntry +from _yutani import (color, Yutani, Window, Decorator, Message, + MenuBar, MenuList, MenuEntry, MenuEntrySeparator + ) +let running = True let y = Yutani() let w = Window(640,480,title="Test Window",doublebuffer=True) + +w.move(200,200) + let mb = MenuBar((("File",'file'),("Help",'help'))) let _menu_File = MenuList() -let _menu_File_test = MenuEntry("Test",lambda menu: print("hello, world")) -_menu_File.insert(_menu_File_test) + +_menu_File.insert(MenuEntry("Test", lambda menu: print("hello, world"))) +_menu_File.insert(MenuEntrySeparator()) +_menu_File.insert(MenuEntry("Quit", lambda menu: (running = False))) + mb.insert('file', _menu_File) let _menu_Help = MenuList() let _menu_Help_help = MenuEntry("Help",lambda menu: print("oh no!")) @@ -43,7 +52,7 @@ def finishResize(msg): w.resize_done() w.flip() -while True: +while running: let msg = y.poll() if y.menu_process_event(msg): drawWindow() @@ -62,4 +71,7 @@ while True: else if msg.type == Message.MSG_WINDOW_MOUSE_EVENT: if msg.wid == w.wid: if handleMouseEvent(msg): break + else if msg.type == Message.MSG_WINDOW_CLOSE: + w.close() + break

xfKfa=E&vn`N#j>CI|NQ=Ij|&(pTI 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%0DO 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

YuO20In?lVgn36vIW7gRGQZa6 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 diff --git a/base/usr/share/fonts/sdf_mono_oblique.sdf b/base/usr/share/fonts/sdf_mono_oblique.sdf index 87080dbe5ba84b21f1570d50882c4a7857c05975..699936aa0cc8dd359dad05d03504eaad4a46b06c 100644 GIT binary patch literal 108295 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 B?2G^a diff --git a/base/usr/share/fonts/sdf_bold_oblique.sdf b/base/usr/share/fonts/sdf_bold_oblique.sdf index 890130079359340a21064c76e8bedc70ca27cb2c..1ad9fadc01df540a68d10f90053bd7ed78dc5d5b 100644 GIT binary patch literal 121381 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�js}y?!sXff8wEAPWW}~3Y4L{c>oqsw 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 Ef|>~(KmY&$ literal 651146 zcmeEv2b>(oQukoP2iSnX&m`Lqut5(H*d!Zdk_fg5wz0qj5p0Q!4HzL4Mfg5sBrGym zfJ6p~bhl)Fx zUHwsyf9pTJc|q6FH!g}V!RO!JTom7WQ&GH8@n-z{TVHwe;x)Gx{0~3Ue-t0}F`x82 z|7XS@ys~n=(Hp%{annsV6*u2}bMeM+{Kmzbyvdss|L6bwpW;p5^i7L5d$Tty-u%tq zytw6-TZ&t6y|s9Yw|I-n++Eu*uTfcSjHgEGb#cj9UR=nmluPJW7 z{r2K*-}Y^bw|l#{E8hO?-@bTuLW z@y_r3&c(aD%exeJ-+gy+&pr1P@A|IqTD;r4y<4$+_wM3#uX|nb?(hEY#e2NRdlc{a zp6^-g*|Vp3ulIVd;=SMdy^DMAy|=jUzWa*zd7t+w-uHdqw|Kwzd%xoS-~auK5BPu& zDDJ=i{^EfL9wV(;F)#e)w%SbXpYe{k_3AMzo^hkodX79aLuA69($ zhktmnZ{NP+BR=9IijVxrk1Rgwqduzm=#T#B;-QBgDjt6L;o^};9w|QNV?L(%*pL0# z;^RK<V6hee}`dvBw@O9)JAt;uAjM6N)FEc%s<9e}D0bpZJNzCw_qe9EU3pZckvT7254eOhtgz=7h^KmF5-&-jebC_eKuKePC(&-$$5si&SQ zo__l2;^4u9#i2uoiqHP+&n`aab3Ui|+|T{o;`2W5^NP>^{Le4G;0wN>_`)yz!s3g* z=!=SHo_VHt_St8PFaF{$F23YTzNGllFa6Tux#ylMzU<4stT=r5aPj3|{^iAyBS(to zpMSpiim&*J;w!)MD~qrCs;?@(`m4XX_?oZzn&NA}_G^oyM~@a?_jO-aeErvdeen(7 z@D0T`e&aV5|M&m?-{SxMzyDW!(>HxnaqQT!;)NGpD8BidzqvSm{CIKV#EIftzU5nr z7him_IC=79@vYzbt;M%}+qV_p{_Wphe8+cuNAaEC`JKggeb;vt-~HX+U3|~?d{6Pc z-}}AAOE0}toH})?_`dJ^zT*48|NDy{_<f4caY zpZS^MXMgr*i=X?spDX(M`ilPk{-V`t6+i#;KVSU9FZ@FBi@*4b#V`HRFBQN1%fDRw z%CG!N@vFc3tHrPV+OHMA{_DS93=9kugM)*`(9lpZJUm>CjEoecqoc*x*jRD?{P|*h ze7u;Lm?$PECyS}6sbYG1x|o@nDQ0J9i@CYEVt#(USXfvn78e(brKP3fH-6(cir@Ur z-z`J2Bf*4EaFOP4McfBUz8Tm0SM{atbS^5x>nl`F;H z|NY+=|L_n0Q2gUR{$ue^|MXAAKmYST7yt4v|5E(xzy53SZ~yjh#lQdizZWmR{Bm*i z>eb>u{^LK2|NPJYEUsO;@%*93AAH?wqD(z;@bIxyXZr_6C#NRI23vh+UwZNA zGY1}dVE649dUvim3EX_kuG=uszvi}Gw_I;I-FoMqy$|m{@HEEIrt9ES2lhX_ch8-e zJ$J553E0-A7Oz~#3f2cLX+XZ$XTMjece+}hgI;+1Rn zJ=HF-6%a+1oc zd+)z@_Z_=p?%|fPch`OU_8)rg=nL>Yny%x=jy`vAKgRD{wv4jviKtlzt0TA5+SKBe zYw!K{?Y`6N0$TwA*=Fha!6U~{_YE#xxU|+D9c^E1PqfaSG81}Ihj6488`!pIQ?HMz zn|8f+&jb4&c@%+*#~yuT-vfJIyK8+fTp#p3_djyr*`p^IOh}(?K4&J+&=c8x0=0s$F0!ARvk!^t`>Yw$dJM%`Y!64)vdA4?U?vcv7nlY;L>o zynjPX`DjM#5X0$x;-S5J?zo<&`|iDuK7IIwQ|Az~Yr6Vr{C?`uy}NI7Tjf=EZ*=gn zh{Ezum65w^_~Yp??y(gR)NWaNE_VBDyVF@1K;Uk*J;@V#Vu$cXuIj+%^dijrckfoC zs5JHw)_4O`er`tN5VO-pO#g~Bp+w9xG41;tI)OA zj-HeJyX#;WuH4l%{DHW~vj-lz{~jCn*a`^lOIdpU2raCgI!zIr)BVF(aEIZ3Cec9; zq!tcrWyiktjy-!Hdg8!S;?Catx_c>%^_cibkFiH|-J{kev0d(V-Ho^x$&4IgUWFtd zr@QUb<+Z*4x1;As5vjS>cJ!Pi++7F5aOG`X!yo5Py>R$xC+@Ko5Zqg`^ql9WW5;Pl z2IhNvb*(ekq9ybc2R)ElIIwBgrFs9MCl5Yzn2n-G_C2`o5mI`S)j`THQS0lvJf+k& z-+-6BkJ_Ndg7`Qowomh0*Ym%wo+IZgdR^Pma~5%T9Sp;js!W_<68jV8p=|{OGoy%7 z^5KwUK?;Zr3tC5CTy`Dwcm`eBCj+U41Dif*P2FQ`6dictvHb@OPD<<`<>#pN^b@JHJBS)S;dd$QGC@es~J+~1#nU*RF z2um!+l53Bkff4ld8rnI(qD?bbf_+1E0^4!buBW zMq!El_Bf9><&aj9nUftO8)j&%(_so>^dMsfvU-g3?gskLVoE=L`~N#Z<1sO9+&@63;!`{s^XU_Gv2FGU> z78hnGhVa`)D%-_3eeRfmVNCAExr*>BV*jSsk7B;^ZI)Io-91Xd^ZM=u>qlARz)908rS!>%L7k z+n?sGKl7cn%WKO^gPc`Vw?9M%QBDZjeUI#L>$=Cyb0!REQ+mOUo<|zD<|p(-u`ID! zKYnSJmx#&kgG*%*MzdV@6-!UT)8g4-XEGjL$*ISJ&1qt*xyt zx92w?S1Y6{AR*H30UKc=R0M)-A8Zagc;p178mwGi>8y~G(_pwu79b}C?Y&=ixXB(j zZ>NNdDsUzYXt*QFh1k(^R~pUtCQ@|jY#*w4L@(Hu-lB4lBXYvbY7~qzSC}?Z_V!M@ zJwK(ojyO~eM2Lf9S4PLD=G*O#hQ7QNFh!KF=ToHTv(0)QQgy;^p*VM{hIJ*Vy}AP4 z>B2r(=(t=foyBI1&217tSB7=O!2>vsyT# zl)ZgzZ3Xr!bbZXu>!j<{(V`jg&(Ru`qvK<&2?`XnYw{@}=29h!uxv_Ca>^JknG(KXvz=`vZ4-J$gz5K9j6@hLDuoMz96cRs#ZPfdE6UN$#s`iE07fkf>%Vw?tELV^-gUn%cJRAsT!z^7rjRMG08dG`a(O=na^viaK$mRK!z)I zc$w2w*TXqTXU?;Zj`NhbO7=i|A?`^lqTcj;xr?6b>t#BQ{SAg6(LpXlH>uIL=@En| zI3zbVAJua>!?tRRSto0XMuk)bBt#nDCiyH12MO6hCV3Z$091MpQ#q{n&OAo7+QJ;P z;l(5by>Qf&d}($NV#Q&s4-zpLz}JqRM;f>0C+#J(sA3trD(mN}gKF6$>dbb#{UOv^ zXT}*Co0?l9U8jki?AImM^>7Xtpo<|zD<|pkX$@95Fly>XI%dcF%Sbh!XD7EyByG`@i(0Q8Jmse?h=|W`=Dse!^ z*DhfNYH7~I>HDxKhl#;jbY7VQ1>1Bzr-?9fg^Vac?fFq_tan*IH#=F&GNy;0mCY`7 zC7Mbc$nvfZHIa6=dJZX(p2N>Zb`bQus;w4S_Nn!qJ=?fYAZPNlY|d2^IM5(p|K)+s=HRpy1|_h!xJpR{1B4 zx4Zqyn6Iy3W6&$sl&xxQIG^L)1H;I5q51p@+H|EdGL$&TFTXI$5RY$W@3~Up*vcW)%9~s=f)YfWlYb}W|xM8VibqiSCuid+83Z72a&YP zMRXvid3Cd+vnIhyGXE@^;NqnVOVGZPFvZ(Vo7Q9(;CTwpBSDtjc}_QMFvD$L<}^nC z_7n~2)X;v8me0$Mp8N7>`bKjU7YV_^RyCImwwPW}_A9koyZGnMJSc9tU0c(2^e}Q) zLb&VZyryOx^$>!2RMIv_&($um*>5TNaP{lw6AO{`bIw(xH1fXIDD8H^A{-|qdIk5q z234j_bA)52_b`7UJ?G-}0#Vk#^pXo*IMMUT1!_1>grm~;INYLs)0&JVBPi2D=K2}( z>${lYwjZ{}mzFQK=Z0G6B(nlTTul|a9X)s3sQDhf#5iB^?DoOIFu%RjK^}7H59~i! z>w1Mcs6A1`>~zqXqEzEOo%!f1ad27S-AQ7FlfJh@uR?q9)K@o_O zmZIl{ztJmUznZPVLesOeeoiyhX#^wDqeDJ4S8cj;5oU6`bFn=gdi{P|hV2oKnf}xC z&DL|2$6=*D-1_K|CdFhC zmpIoyINQFsyflF$@4(D+eCD0Eu43S9Yr{L(sVC#fvie0kdh+^t#d@XPnG*l$mJf%v zHu>$|UY6wi_VeBI+eOdO@(9v*k1v&hfFwQ7-hVE|8J?rHXSPge0_EVsiQ~s<>gulq znrz?2Nl=}c;elbOd$W2}D)vTK9KD9Op+2sGi8gD_QzKA5$Bb4=NY%+{CbJ*0cUpUo zyWAXP5OW>tX|QKV&l~G_*mZ`JbcpR_`@(X2mbUFSgb1yycJ$n9-sqQnJ&#$hM$e5s zTfdJ5GnBJ8)$C#6dWcW@JD_>ylsb*UUKYgZG0Ro#U1m<_^Rf2YCFr?EacYn7Rrb^L z+}S%>tusM8DT8`4A}dM(<pyIv`+$YFxOW*vk0oOo;U9A$37NR zzy=zKrLT2<>B3599*W*jfpT$?vQ~9Hw0D_5)$@@y7US9)S*Sn4SJ_X~^MW>FbJYa13WQn8**sS*&ZgrPaUd6F zPo%yagq~6Pc<785XtH{~uuN&Cr)j%)w}ae$Zz8qML{MM4`K&aw1rNH+1x^3FYBtj5 z*gIVA>ZUab>9-Jw!)EpQiE+xYH7oTsC(`eFt<7*p!t6PO^DnM+=Clc8AwpNr?W%6& zbEmGeuNvnkYc7;R2!bc>PGK&hNWI<6u(4gkZls86OgQs6>$u&Q>{cL{jsX+ z(P$ItIaeOWu?tt%XhDZ5Z#cp?ThGlI(pDWMVy%NtwR9?tSD2=P+4I1D@Wnel!ZUmA zi(wN}ABS}eFIe9nAFbW?=(cB@-(Udjk$P7C@wd~j!o*X;1#LSs>2CF#)@(?B=>it+ zD9%9VRU$kunRhX*HW&I_U6&D7h$mx5LvJz?Yui@UXK{!|FND=O`$bFrNoy9Rt@v$ngJK*^;M0SHnOk zfM#G28-UC&Nq1}5v}TWVARV6`rN8a=OylhA$dpRy@#=naMSxPzV;ivSZ##NUZ5T#t zZNf+SSurgEWvy3t?}6#;k;=kuM z8-wi-qk>uLxdqaFd)D(nYE2>Ta{HNg+S2Rpr4xqfJf{6#WWwsX>z_w9wORVjr)>`^ zs+L;U8M3t(Z*dP^>3ub)LCTp?7&j%#234%xv?i-$NO&C`9UW;6j805Vj3N`D!P_Qd zjIG0waVn)pkvod9G*tdjfSJat66^F>dzE}~b7kXm%m(GCP9jGUfm%Et!< zVs&o@#oMP%yq)=QDgfx4%NwUsYK<_G zH?8?)zd(q2M3VI7v`Y9|6pe^1wlm>Y&w0HLR(|Iq{PV^Ly~!!E8v#la)W3@vq?;t$j{z`vs)`r}>Z@erG*>l`|YRs6Mc0v+|o$1afF2(Pd<*`ilH_cCVUgHFgn zH%Ps=-RNH&9pvC^+iN- zt%TjOJDbjHHm$|{3OfbR8PErxmXn~HE90=!MQ%Uk+?k6LU%mVSmq&{uFhIkvCOyLo zAGoi1)!eHN+W4#g8Jd=kT-@H?rL(Kix2rZe&3SR{ZS!l&4oGKu&bN?l(QeN+Ea&vB z=jED1?VwZ3L(_lc?>}#P+a~>=s3dQBTSWZ`yQJzF*VasY4A-OhXUezVyZeq^u?0?) zvMz@>^{<;;F7Re?xaMc|zQG{fB>8OD*IMOK7t*_FoPEnNB56HmlO^DFzza)*2nZvX z)3AMF9eQpuW=K?x63SzldV5|ynY{OJ$kUGD&gWId7Qbi;F!A{Zaatu^G!rybuGJyV zW)9jAs+(Wn(eF+(f+G62!65ZsxAUbz0y;))U}tYY*Zf~j2OP)R?)etV95og?T#ueN zlhW(|X4i-7714U&O1o){5@2F_ZkFQMG&C#qY#82Li&uxZBY|t(a6Y^QGkyEB@~y!j zttDpXKen|5%3#jGOlNsv0%7-yO@)iMpPpyed%Yg*VSH&io`tTOe86%F5c{y(Okjq% zr^K5lH=A7Rx)dkjTXA?MsQ;xK-s>U39h~cufDPunbe0P>V0UAuasT!<)blcdj$KXm zF6+J8bxEsdV48YmPddBOk$8JgueScSCf-}uI_}Z;gkuNjMv#DXKq@wls4WUFEiKKB zBMettkHyh*z!=RqkL9}1c&oQ|-H;-cMV(2nb)0N+t?L4JS+CxC_{Nfe z4d!qGBGi?IRmsb0HP!y1=cY2nG_J<%t1Xn1mq6FWtKCAf98@%(mPbT4rARqI3AdrY zz2jOZ2<_GQhzaI!We2JgPupN6O~%<2Rtm=1B-P+(md|h1o#S?HPw&!OyKYL6%9NPH zI62wdlle@Zb{^jZ32-onwtV8C0~9QHiBENqv{!eZg~6P$@oW=leM5ew^`$9@(3~Rm zhRo#+Lpv2SY^twCC;6b##EB!iU#bFuClZe65{Z>|vRk_^=M9aL_h*A`IT>skiQbDF zS(joCl8jk3mzM=|x1L--1sci-phiqxf3}5m7 zi08S~n>->DqM8awP}lWdOmS*rBAS&#ZElV$)Wh?z z+0-Jdjy<+Fx;btn;V!Ap0_KUirlg2Pfb7?h6WYLB!-~^R!^HGP;j&RP4iFJBB-chK{abgV)T}16@K11JflTGY>(MR+KeAwbRgQ!%91AlRb9dEGR_dq1Y-?EMEJ|*$m4q-2}Sd3&D zLfEA4>3sFtVtk=RW1uJdlaMnQTnVrpj#*Tt7cmUA~uDl4M@sjlDGNWg?t88Ye zw5|w=80DSKo^s-V*Uk6tafT_|3C-utp#Y3%?}$3wMhQJmxD`=EFE(gl$ngXO@rJ(y z%*aqxDZg7UD$9>!SCctyE9=DF5aFY&RCw(QA0~;~!-kJwM6nHMTR@o7UTA6XKYht^ z-=HzLuB+TAdVUAgoLAGdPCB2GF8UPhk4~Nkb=h+Bgq|A_s)*Dumsi$QsPo%Gsx3H` z5I_i@cVKIsR7;)sI4myytjR_(S>ez>uSPr#AtpIIRCH`8?H{6f24|mA!4`V^k;7I3 zb!8d2W6^O9FIeii7-vmEE*1n?;l7ydz!r-gh!XBU0C|<1P%APkr0Kz+;b@*9l z5aOQ#X3S89MOW=6_WhDaABxJfCp$*QCm?fLjqIpxO;~u&q0(A#kglP|IPaOHCW-Jt zUdGzF>5`O}S?P~_mXP*YQ`(5T zFliqOo>7Tduic;EitDzQrzCrN*`WXg44pSpl2|!b$j4!E@ux)?qygwg)?;)ql3XZ> z1}4z0B3u*&AEttexYux&1qI^hI)2RdeBwS*#LaXpBHs#_ifhLnHOgW9iT&=-U|vq@ z5t`wm=43A%eZg%-VddG#pyduZMncXYWZ3d3WQ&AG+7dytsF)SUu14I4{2}Y$TeraL zCNdyW2FEdVkT?)RP4es^wwAn}#b%N__9*FIO#9Rj{}@@QkaYDVsOEg1Cg` zkDtP_mY!7V<4}#F8$nn}>wB%Rj#HfY^fTf8EEUQpg%w42xhM*-q4Nv^aeSRVWhGEk zHc@s6k(%2zVcMrwTac?LE7!Zr^>UW`{#fk5%(arqc-FQeL?o<41}%5UVJ1$UbOs^A zmUrF_X%w^pBdsF9!6BZgJe6g+i5dQg34gFT{fLQDsBP^)$$)6j+QMm*HV{I1q(mN1 zA!VDu)mf%$iy4p8y6g|iGDYJWJV0dhNVq$!3c%c8BStgG5M|0M% z85B(EVg4q^bh4s*#fIdZcmXIkW7e*SqD{1Vs{z7lHLYC_jZe?c&dyAYSIZpwI4myy zq^0i2M7w7%vyQWh`cWr+d}0#34^n0Z>69qC$3;I-tQnwyA8xm+&;+cTsd6*C;37x#ClDw=Iz4F)ae zy~4z~Q<@lHB&W>CKuS&osX0bkAeaDxu_0enUhqoQoWhUhNFDYB4wxu~xCOr9=j^bc z0ewjH9JP()1Wh~mI&H#J6pcM*hO#YE)mByW@O%|cgDCSNY*vI$9~_gp5%S@rqBwS= zPMDQpoY*+rYK>vbS{sM`MGC~pL5RAJJUBKrN5u!{rbY)aQNbdu7)^ZG(4Z`c>Wb98 zca_Fb*$n2+?vfc7ph*;DpcvRo}#7$lwIK`v{BtM$rs zEdk<$akxW=*mz!SFN~I)EX_?0A)SY9EVfQc1%W7MEW`8(2~mL2y)-{XPI}t69}_1q zw1%csR10{&iYgLR419X>JPt8e?Cq$Br)|$$cFFQXiwup=kbm^b6`bcjGlBkyVt>^( zp>dkW9*qC!gG=ayGZPr#s@keZ%7cWMj|r~yL38#JaUVIC_C}e{c}~M=WV7asb)3N5 zSscZ|K&THK?~kJAx{f@h#f01QqoU~H_`RU7Ua@sZPJWNJ1zU+g`Chm=gZaAA*3zI1yhBhcqs>9Z@Y! z4I(d)_0N61@Izrv*REzOiO#wu(pOfO z7pY5LqWnP*;P8(AG@7k7x|q$a5O$RcP$D^fFFxpHX@s=hQq6`swYrKUBA!T532$Vnu0wuN!nO3n_X zYMhv3WX4I$OHo~D&yN^I=ZrNKEpBxGqqVD<4t(J#g%IT%ezpRC|KL0iCReV$@_Hyb zb*xT%hK_U(+eD6`8C>XGpkewFcS4MbWc@vVNNIPeat;hzT)t%4b|3yeD(%I!mZyp)y)y``Ut#eMD z57BLyk?5S<6QT9vW7P_kB@Xlr8g=X?q4CJk{IP-03835c%=p0w@yu3I9QSp<(m{^7%;XMzHogZPR zjvV~q^XILH=ba0!F_~FvhL=Idm8;yAmo7uodGI}Un9K3oHjx=;s*T5)Z)x(7cCTYO zcKfSM&t7$09)UcGV&^Bd0YIUltz?O|SIzAi5f46I=28R0N^ zy!;BCH9k2$2@4zp+{*F-;(T06$M3w(Sn|r%%NH>*)3CU9nNhZDPA|50d*8s)g-b;K z2u;mMvhj}6HGCI^wZhN#4~!!Q(pkCu%Io2#qKsGDiyf3&3;%;EMGwq(R;jzwfVD`F z7^`W}Vns(vkF!3CQtz!rmJZl`1>&W}1IqM+)1;&Y3GBdzHv@A@HPrz-#`(gUQ z_(2dSbkzzIenfqu{vi$qES!g}hcB}vHU1Jvxb)RlFkE4pA>x3cO_L7Vr`jf>=QKsV z!Vl7$!MM$#3mr9MMS-Z`K(n}5x|D50t|OBHnBe=c8o8Nr`vj^%{4baX7a`g+m_9M?E_eu4Z*h;DIY zI65kFfY$^MFk!NuN61$_S1WuN)+@~L%U7`rQmj|R4km2uz|mSWBA#zUJy;9J5o#Y8 zon8WEuv19UF=##KXd-!0lPn^zi$ zqIc#HB6O#I!-*a}(?7gG?gWM(ICb6^S_W~>8MTfx&Vi)iraeJD3WA-)`1mr3TiV32 z$E~A%Nlc#cp@G4n(aCuVS|W$ejozquZ;<)C+<9X+QAIwz{XEil;bfx=b`W4ci(U1Y zL-1v$b=E9BJL&|1`7LnG=xhR~G0q;!-#OZl&WCSoRXV5o|uRu0s zC85FKn5NNxwKIdRUS9F|t8z}-flvf0=$r!zSmBsU;22bcYIZCk%?76fIE1)0MAHd6 z|9q=IIx6bKcBX|6OnOek4lNQnUA*jug|)(m$=SX_J~X`4*S~V@8g!k^@F8HaS}XRe z;T#9)z|3VW?B}(<5gLM^=s4ghSRb|PNCQ)FC9Xo1U@lQSatWG?Z#Z6=Tm<*vCSGZv z00RxwSQaEv!B4nEuZOD^S(TxYTI`Iu4y+M`)h;ZJwg%_%*@2aEVF|vAFJY_aI68p( z;@klFESNclQE8mpqyiy&4uk9}ReKo0q0pQ?FyfCb$W5$ht-P80(K_rZtl*KoCAXP4QZ4p6G$R&d5Lw7<1wM#-P?HjR1b@*;ABr zibxiz6z7&d>8*P)4lMjkptF*dH`F@ESrhaJit+4$NAAC8mxo0-mv|xv(O#s5BbrTK z<`J)IT6^OaESIyVPt&jnqM#iEeHM?ue#ed~>j?%^j0j}$ym<6kEOo&tsHUqM?HDBY ziQImf(b;Q800gmvibKqT>chc!muMXdBNUu?YzxbqMq^WUD>ZVodhB8bl+vSs$r$xC3XnqmjE8sIv_(t@Kj+43NW`5w8rw64rE z?#rr)YCv$FCs-we7$(>()chp3Arzehkx+Es)VF$mjYc$5x1->EkX^ME6PIx8X=+4` zq|S9Zv*buj(82Ue7vSK)TA;%~!bnb_=VMf^iS&1>g*LfNT}vU%fMV<`3}=^NW=z4) zq_T#mXj#G;qfD1FA2)`cmpgC#4N2}d|GZ|~OLz(=ix@qZOhB{s7xQ4aBf!kGJh}2b zcG}DZ7%He2(4vO#pF1N1%?BE7cE^9eHB1zzOf!WYjSaWm@dkF$Ft`Y_K8KU$*D6$~q4l>omZJ}io z<2{qJBTk6demt#`Zip3V{HP!!g7h3Z(m&E>3!N-Jj95fGjE6Ir&?^yJtLL=72S&zP zFyAgQeRvwHzSYQ%@zp4X5C5MM6L6s&PCQS^ME+WdX+rV{#gN0x&H6bfkaW>=yGk4T z4AM;O$e>l^z>IWxZve3b`JW)qX;1r#${Wg^H$0}t|9DP!+2&@q<%=?>p{)@=X2-T% z!eN^1l9$e7XZsNwM)->sbt=pw}d2Z){A%UxLPvh)>HsE4ot->yc5F@7k}V6 z!_0q@uXPZY&jO3UY6s8G@O}C9G>Z=R52I_MyDu+FoXO5>PQQR~$6Ic)H$@wa7lMkU z3Lyb9@=$obWbd8w*AW6C-Gb3Tw!9R;rCB;-ie0gDPg4yUG)!(NGR+y07lTAJ^V zq4h@Em{f?g7yh>h`gzeBUpYvK{-Jk2A=jF~D9n>o~zV}kb$Y2w)35OPefGKFrZS5|+ za!sV$0Si?S4_$^rRp7raWqN8n8!Hw zoYqdKp-v!^`aZQa4UMw!S_Y#u_gv>OG$2prlu1U>;L5CKZE!U~Bjdl%FD=SoqvdgQ zJQIk+oMB>Kurx>q11HSx|KL5gUNkNqZP%z8MUBy|#OtL-g`QLA9Yi25z+uNLvMlig zx$vYK#(}X>1CtWY3|T&oA3rXy#!SUC4t~HzmKCXzBVAY-CuBgQxpulG!AEG2l1d9p^S-?9~YE;yLo+CP5M zy0t~ogcL&%SdrsrUg&zj+|evD3wI$VK&gni?@y= zxt|w)ur-xBBz_9?Tyany;~FxLCn*qzfh1@*)8PD}^EqBArsc^KXhVv*&=Nek5}uyt zTgY3d=doac{uX!>))ocZFT++x(h;Je6!Iju4r{TPID#ohrOV4Ia2!d`X@AC&x6{iR zN)3c#f|58fk(neOFL8%kgQ>!n(f)qx9!ww)rQcd|a6-#PQX93mGrB~Suxf-gB8)v6 z0&y0|N*tJ4u%=7Pz{v8#iaRf$^SZ$R@C6I8;Dhzt4a8xZHcNAu7o8bU`j(L{UPYI+ zO@`!aKifX)H4B9CCeR#|pa@r-c^2j75v8J7C4|r|x_yn;`Zy$B2O)uN6NxzZ1ic4Z zMnMFM0FphUZU|5I7^rCQ#L6hPk0B!knoD*~Fo*~n<+|Ezhmsjul(j=CZp+xz*czPf z@RU*_0F#!P#3EkM0!>s4wXhkdT)@LENk+hZ<*67qQXN)ognGe--I0fJY zO960fX=P#!Jo^SXL!?B!eDh%o^}G`MFMkME0jw>G7&|8&A^g!I`wR(K5FDm~%7m`t zE)B961kZDGz#NrLkP(x~8yVQa6K~Nb@py?lEL|}f`UZxEh9oZ5nZfPQkX0$%%Ghol zNP^NWo#e40=+0@;v=q$UsZvZ@I5(Y_vbNCyk@;$7xj8~-VT~zn$1Ar+oSNg&u(LIN z=w-O9#N^u$RLQd!hzZgt_^;$gk$#SYB4Y&&^|PK=3}pjB;VXg|r9LYcnuY{M5Z=Zg z1HnN$^llhi2ywNI{r$j=PV%%g$sjFbPT60 zZ8yh}Afj+N4)7|)8zpfPNf(zS2oyS<`72mkspmEXQ2B(G`F1;bknDrZVAc6$Bu~wp zpP*6u$|YNyny zxOn*$&J$rrgun0(5=z(eFq!gVQuYLDzH%8h2BmiK*zPUDF%IUO{A=3ig?&5NkUBj* zM+*mvFIWN8+z-bihi^xlXL$y!h8@fr&YW?gXjjTBkg>Tqo_JUtJEqEb6BPHR*!set zT0vtiwzDdF4hVFu{?f5NZ{H7}o<>PpR`)zl6O$REu>@lPhae9hd{P!TEQH!Yq$^x? z2(dJz-e5BstfU3B45Wr+Twa&)TY?x7t)*5*lwB<~ahJY)?JkjV6Q-g5Ek$+X2BjZ%u{8i-iWxY4k*ET9D0G4a6Z6 zc?F{_RTAps!<7B5TaN7%Kvn-zb9W-kOU7;|O99)#u3e*DihSvp%C00WFGeeC#LQ*v zC}TAT1Ft6DvmL?Pp=N<5JieTYUvY)GY@uSmp&%8w(=7S07mYfZ<3nqn_J65+62jrNvf zKOygD^`UItD9SOUg;8<{Mo|di3fcnuC$X6_G~v`vga`8SD`vwi4RX~oB&z3SrsXUf ze6$@IIfp!}iP7Vlh#28e+uf-SZ|5fO)1Roer=FKpJkWv^%^-C`pI^o#hqQ*sesbDl zqCsJa@eEQmn$F_P`QgEs$)vl_tO-gcMVZ1ASzeMj94D=aepmihl!WrgrMeOICQCBG?0il``5t;Dr;5Tg#3`(QvM9L;F(s%i^?b$HClLLP=!`DdmN{ zD_8&s{cvRq8BmreQYvP(3CXCP2t(i0*I+SIgw$J_S1pHgX9sIa`-PPt?Q)rR@CG>p z0+hdFWP9qlT1!YTndH?8aE?)W9 z3wIYCq$DPV1mfr`a(Tkug%OeX9*MJoQM3}@wcZ3Jr^7BrN23Sob>y>6LXtEpe zlQ9vKAiRl}X+a8G?@Tf3oyeXv{b(Mum%pq@z;ea>uOVnFP86|G2^6)fOFrQpn6uT95J|p5AKr{`_+yN z2-qQ%irCUTYAivfFQE=9oObLn#u(wPNGSxI13-{-zz`@^#W~LupYUVPCJTwWFqS6} zB*W-4H$9FbF)*084z_RYf|0UgQ7vc$!l{|1FtqvdT$r57+0GbEP#F(H@95MlT!Pl% z_$dWf8KY_VskQ`nUHl=d!B)GIF$B{Z)zX`iNKTkim0!_ed+NEm zwWc81;PB|!D7Bv{?Tq1C@*j2i*-V@W3R8#|1|{<5r~>)`oNvtT5fPUogEc|D>>XZS z@?CmZWKVN|*LyJd;!{>CA?>@ytcU$e;Y1ss$HED-?xu?>oKKqicJ^6{@i|43 zeS)ZG84DSO-r`pk!s)vs3*-t@L=?3qFzN8jL#3L0`&C8;N>@fGmC8ENIu@3TXz(SU z9g{OTAjagSW;A07?^pr^oCCyGEQI(5LHL8#EX!@9WHewRr*I6kx01;~jEh1^9Y~1x zv?*=J2R*>pIK?}jsob=?>p(1bN|55A7YJbKlk5g$SsWICS5giti<-USdZEVF%={v1 zzRu51j(KZ>LXQ5W@yAxL9T=DTxLg~TMl6c*m7avcWZi5}Jufs&4dI?f=b%2!?PsP! znF*cE+hX~E8;W!C{^c=>zft-!dFv59FGmI&h?{gTf6`=`8YjvgfnaB4|I?=odM+Cj z?0UG10#-?7ZCfg(v+3>}GvcH0O$~Jo%HvyJr1K*zj870TA~tnB8&wGQCdfiY%xiFp zY;}r4LD6BcvqME2ZUI)>uXbdhP%3X}L!@L9g@G_5Qka4*eK-gX2t&|fIc-rFMPHnt zA~6GF^qnCBiQS~)r3@a5MexEi1c4r7#}J#zAZlSc7L{^7ew+{UdWO$hkwiePTPqJ6 z5Zc$kr+}GrUtsAo3ORJb)PmNbK}yQ9qVsS74&+jbbaE=O$i!9x4PuFwhY?Dy2|S4s zD&uaO>bYHZ=JvqQ%bm77dWp{h+rRI=yEN|wf|A*mmQ3J6Lbs=e2M5Ox^yC;()io+h zEto(Y2RX&|#a}hR%YI_U++(E^AGxzWw@^m&xeXX&AsHT>a|PwjOshGWHTLkN01bx@ zba$qVaFma09;5$u4l(ixA|zxXJI@Di=kufjL(%mnkcvVfEcmA=aSWEI^n2BQm069g zAM#i(Bi#wSFU-xO1~bNCSn|tMTMbDB*5qZ=70dLrAP&XGa;gJCRs(E*iOX0BH(wMc z0;R=bE;!5eTLxtIEFZNx!N$Ive|Ch=-a8lG z35ZuWZ}YTU=(lRd*zkO;C#Iz~J!M(iHv?E@q(CVZn~0G$!b%ru5hwm9QB@;77bf!-z34)LgL7XMS#1J-5Q8_OM-; zJ8<1mu{5nAKZ+dFarPj2EsmE{dE;{R2m;nY+7>jx`zp%pJlvUr7Ns3ZV&yT{JuzGt z+npQ#yyFHO@wIKjWBL_$Md!_Wi=};kz z#%F;btT!QED%WtQMR2UUV{466b{03aq{@b`IB{SKi^1F!7(wBzlg9JXmzxKmelSB! zS0Hdu2Ydq;Lh{IDTLY~F(EPsyZhUAXsO0Sg^xqB=gF= zoj)8P8bid7kh9{$qkdhm#QW{5=a@fn;P$=u?=_>X47euyeDD30%y2hkIcyHS;WKYg ztH~ry_$6Y?K-{$BH0y075GMtf_Sy{i=%-IvGmgmGwrMt}D@L#csrMmS`0xA7@!kOT z38MG&Fj78HK~RNYAU)Wd{3tA0n-ckyh@7z$ej{O9yEo4FculCgmRb`d%+)Z9RxBu@HE0> zh!p&wVZ<#G<^kk<+0J@iNPAfEa^*6U1+e>`@W5?egS06osBFxK*ex!w_b44iBUeT~ z62Rj9{KJu}nu`NC?I4%w7`lrU3m!$ z+qD2O-V9-5kd!ApC}(a`nlKFvGY!JU`r0kKZlm)9_|yRJi*10)XDPGY_w0ThcS=(7 zyDJ@$AfrQRd`u`2Ss**HnPDV~poB`h+tzx{?O{h-)4%0(2k%q|!>NWW(X9|G(o4Hk z;2OcQv@6MWOQ!ot%h17g4j{69!arof`Q}sB1xFNxVW$C;kAt4~9>#y0ZcKDl9}b^) zsOQ@#1od5%kHmz7=|;lhMq127^<-qRUb%A3(HE#mcyW|l1*>0tVybWH%TPioZg36) z2#P&pFH#uW7Uw{gqtN0!kj%_XPmbe!(xzoBBjUUdmGN!6Zj(+)N?t93EpIJ{1sz6f z#sr570kRXD9Y$(Q39Qq{GJ#N>lNUJcng%aHa+h+0Q2;YWH6D&$ zLCmMblXKUM!&`FBdF}Oi7Tr)ZU2JP3HDLngWl$tm6rC2No`v3G?b$By(+U#>pN*P3 zzOBsYC4_B43&BSzJHCO*vtUI>nuRyGH!fqXSANndYX(GlxzlgWK-&0t38WKS(=d|D z!1mYkbdIdu$BXWEHRA*&L)b3mzsp*EvMO2v$X)X?i2tVgZ;d!M21Pyc4gVkVCZOra z8nJ81B3@oD3QK0Vram;?kuvy};IqFV1#*pJyPwB~6o_(cM{#%^NNBM-dYs3GOJoyX zr~^d8xR8wgM$&U*DT)VKt~}RtDOd`+AkN{<@DHtAIx(MQk$Mj{yj&y4BIO?Zmq2 z1X(>VSC50ue@zt7>af|tg-wcjg>R_h&_~TpSZAUMY199i>3{;3b~WSBp}H<*7Q}6I zlS&$Um-Ix95;fs%_&;6U_TFv2$m(n0PBgr1JN(zpJcaIuh*Ov#1K>V!>JMt0P>Vzt zq=>&v2vKxuL~ps81_m$7U^|HJI?`Zt(5zGPhrh|Ui8fcy8{QDX;XY0GK|Pr!q>cY) zrvqn2L)SALKhVAdU6xleC`+PpnVx8$?e((>#|EM3m9*aA%wWo?B_yM-sDKZAPDJXmEQ7@H$Wd9qb=*H&NlfA;Z9@kh40wzk&2Tud2L{Chr?{ z5=nxv3mQ#bs`9V}imX!S(NR8KkE4mQ5`O#Lc^q|TqS7P;Qnw(*+~z?rIg!DALsp)* zpY(g7h-z3k%Mr4?Nu{;IEYaA@DeaJUWOsQ(epUGxvh?3HV41R>5k6clCU0E0vlhq3 zp-7j`hCJzVl){AjJS3a|k_CZ>ql5cKtUPasysrC8q7~n`rUfqRV zfqvcd5L?oBB`HT%NpCJ6%EyrpQDRHI+X@`1w0O@cVQD>4AK%0l^yo|dqJ(W0ABrG{ za|KGHDwSF9xf~ojdQK9^X+cla-M?sKY$A^CR79Ro!qR%8KK`oXqbJT4C{4PN_UZmp z4vrl?-_i3OyS-8f$W<~`r<@T^fp+w~T29TCZvMTBHn~0WA-005d>lPNDD!DOQ6Ep1 zZckL@11Vvf#fKuu;aq{zsLE#>5IHz@=JTETd}lu2na}AUnw>aYPs6PM>7bi48>|Cg zGN=-kHsk2yuR1<@;#`5!q?_Do?t?ivcINY)`Fv+S-`&7Aspa(m=MfDHvoqpBCivvBl2pNGjolFV6?ZK!NVq#H>>j=$Tci^gyOA`^$( z7~6-ce9rT`h{0h~m%N@>n=jfV-Fy<7AtFMEwYj`R3EM0_6hWkyMEK}Qx{>#E|49k+ zIFG~itmob~gRUDhl%%SxVp|l#MB?)ObXN;en{yX~fIPM#Rr#F9+qLOei^GV^?IktR zZI)Gews8~I^#6->t(q2e3EM0_8hS~L^PZ%eE*$4cCCueKMiO9p)bn85V7b?_W&@#; zRMB(P1g>uF)AF|Ei=DfAh??BmC=R!aY#*xfId>X9@m6t&xSU=>LXJtdQC6?3=~{`@ zgpb9$Rt;4yVVlKAecz38-jj4gAtZfQ!W_<{B;jp6>UnKpgPMW>N>Zp%@e%^{g&FFK z4hTeC&*M1UF0y^7%I7?(OLz|{j!@4@xOF8RYFqHZx~}EnO#c$^S~dL&uT{dz-oCMX zD1xw;#5wOty6NI^o>an0&f_EjrZ+w3LPdUY4XL4o5*zMuJxY|46v&DzE>$5O_Ny|L z^_l1{io-$>KWR8X+cu=i^5L^=zC}5YII}j8QL{VK!9n8EUcy-FaMa1_adfRngvGXe zoVt2%yXN4jC{=<(2}|Ikq0MXf0R4&}=vOrmJxP}fy?1FgD^mSb!jy9&DIQ_zNzYB; z!DsD>gSPfwc>JDHRHsn@lnRPLokBfMu6%QO*9=k7^Ew>$ZC(el6;$Qpxcx4a^sl{Q z=OMT_96c8aN2SX+>Z2dk11)UJ!_|&a7o$o*%9@sCgV(i(Kva5r10VHmPMh^&RONHt zqjdcijFDnxs-G3ki3waW;GXoH3JKGR>DAMFxr%UjC`qk!skm_z!YSz+mO}0d5zObc zIJPHM`JC@|&OdU380I#1zLAGR=W`?IXnP2bxK|WAb;)!^a#i$Y(?OOH(W+5v| zl|Y2Oy@`+7Hh&%}5;;ApDDpY)Rk~i=)eFdomOetxnF)@tR1OU5&2F!+{ZLoRK}m9L zAFloog?I+1-8+S{{dy7IAUwOh9)~Na?L$>Q=j;!bM{N0bQE%JFVeED*7+vb!f6Q?Sl^PZ*aim5&v zVMI$Gs#K-jPVb0Hx2O5Mww6=vK{QH|BV9SPD0*}apIxtq8U;69A<}TTf=Ywf3aavP zJnWoLT=nWB=MNVF4(=r?QYbEdj z2z}gXbJ|f=!$&^ny-U}TQ=LeKW%E~AQ9YM8#DII!b0B!^ARzmPM}w>GU^yj8r8{RJ zqYyZFuzx6cwSMgiF>7nqG~$T1c_YMDP?eA4NgO%k`Lf=Z!_VU6p&mPN zQRymSo0=6s?o2`xrdKIiL@ zZrO4%QiNUSufutJ3Ma~1@ECBfdTx9*ztnQO_Oxv!$?EwE9XLrB9eMlwp~w6M0ijAB zsQm2;(OHq&RLwYIZQcyA6;$Qpz`%M*aOGuZv8VI*ZFh@C8w9SPj?OK!Vu6(!%Y)|A0W=vd+s*?Ux&etPd zl~IfoVb}TVaL#&ep<}>8Rc75NMKIm*4?~D+ZA`irE)HR+vJZKmDG;LP7Ay|2J*mp) zytx9VDYtpgE~kI23r98jaVCZX=yu(6|04(D)YU+^O)}ZG&4!zqI4&P8X?#ckcV>p+Nf z6)XxNROvJRO$r3pnpChTgxf{z*xn4W6;$QpXs&2|?$isF^4aUdVPysVFjou*q${rW z3ph5sa@9b%O)}ZOXiYw}N?i-)LsWWVGas&W(>M>Md$B7YE{8@YTTYc`u2hu;fclT{RbxIQJ`Pps|6ti@n@$X|e zLWr{-d<+5vZbPaqoLbw=OQA?&m)h6HwsoD%aqy@#}=&VpE$_cDR?cI>7?y_=msBdF$qBwl% zrceb47bw9N?FpjPb4$PdjPl`f-jj3__;7K67=)2IdY+@_mIwN5;A1^@d&@mLZ8T;l zy3L10oLTRvwI~EQ_uuM&i%00)XFL>>Q5-&1kd6x~(RRSL_4)f;nBZ|Y9ZVFWut?kT}lttU4CkW`doU=Vzav*n6 zK3vXwk}iO{@!{eCDOeUx)^l0j9`RU-@_{zT=_u>cbHM8r9ZUQ+cNagJM<3^{U2zB> z3gO=*Pz62T1RMcXn}UPvL~Hw0B1Qc%Ybl^AK~^pffA+_>C=S2PMY&6|x>_hD`5u>* zgF{zu${Vu?=v_>X!;ljcGFh(ZumW9E@Xiu7QvZN}k3=)3Jr6o=bI>`1-Q zI9#fF;$vZXdBJiqHy7oD_Dx8JL`^2g!Ej%ZOI7)DbJqoj&Bbs(k(W`y5tA9YLV4N zywt>~Sbb3liWJ!=tqwNha3L&Y`5Cib-A=VxI9#fF!jTZg(S49;Ne2fEKe`S-d$5xC z>QYt8$lk?dr8sPArS}=bQ6t?3s#I&8>KB%#+DIyZ>bh2p4?NzOja!wKa^9U!cv;&7ZHp%M(QA3An{U_tQb{z99Lb} zs)MNAT@$6sa^9hi_+f5 zGJZjodJ~?0Fi;F4A4drh=wKQSwc(ohkUB;2z2WgHP$gCNz3yj>bHTyom?D2_Hc`f< zi||sMD$-e}Nlb6Il*OnLh`O#-3lT3&RZ}r*ozl%{K@i|rGAVI5jB&5s6KR@Qdu*Vd zvn?0fD}(lEw3ezns`7UUDTHTH+AlR!)$~Myib3S#P>9N0n}Wl!;S3`&s-*5&3{cEWzX?O2xarl*uoNqNXm+PcU6`CSc33&>X zz`0?lrfbFcun@NPvcm+`TZ&M%F6rj9An@nwIrJ*RN{o*U)$^KK7A)PY+9GU>JRYB; z;`K5NgjQYG(Jpio5_btH>U+bP>k~iL1nSfV_jz@siGgzT9byPjM|@FtffeO(TMrt7-g{vn67Bk z_{hi6J0B4njx5Uv=goY?Haz9?k=d!_@rGU!qbdM$^qd;9hI2z$tZOwxWN?(phm~$t z3xXU)<8odvs0;?^(G8x@H>j3(zO@uFU#wYKQ_HOcdF^vp-phKpC`?!pH( za&YDI5xgMnt9IOobZg(BKwfXJ<=nm}!cxq7wU1|gDoJU47*g_D5Ckb2kMk@_8y?