From bdc61ca621e23191be232df695da68b84eedf252 Mon Sep 17 00:00:00 2001 From: Ludovic 'Archivist' Lagouardette Date: Wed, 8 Oct 2025 02:26:57 +0200 Subject: [PATCH] fixed broken `words?` in shell due to names now being homoiconic --- sh.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/sh.c b/sh.c index dbd84af..c384c2c 100644 --- a/sh.c +++ b/sh.c @@ -13,11 +13,56 @@ int get_type_by_name(struct context* ctx, const char* name); static void list_words(struct context* ctx) { struct native_fn* nit; struct fn* dit; + int i; for(nit = ctx->native_words; nit != ctx->native_words + ctx->native_words_top; ++nit) { - fprintf(stdout, "%s\n", nit->name); + const struct ink_array* name = ink_get_value(ctx, nit->name); + for (i = 0; i < name->top; ++i) { + const struct elem a = name->elements[i]; + if(a.value <= 0x7F) { + ctx->putchar(ctx, a.value); + } else if(a.value <= 0x7FF) { + ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 192); + ctx->putchar(ctx, (a.value & 0x3F) | 128); + } else if(a.value <= 0xFFFF) { + ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 224); + ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128); + ctx->putchar(ctx, (a.value & 0x3F) | 128); + } else if(a.value <= 0x10FFFF) { + ctx->putchar(ctx, ((a.value & 0x3C0000) >> 18) | 240); + ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 128); + ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128); + ctx->putchar(ctx, (a.value & 0x3F) | 128); + } else { + ctx->panic = -9472; + return; + } + } + ctx->putchar(ctx, '\n'); } for(dit = ctx->words; dit != ctx->words + ctx->words_top; ++dit) { - fprintf(stdout, "%s\n", dit->name); + const struct ink_array* name = ink_get_value(ctx, dit->name); + for (i = 0; i < name->top; ++i) { + const struct elem a = name->elements[i]; + if(a.value <= 0x7F) { + ctx->putchar(ctx, a.value); + } else if(a.value <= 0x7FF) { + ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 192); + ctx->putchar(ctx, (a.value & 0x3F) | 128); + } else if(a.value <= 0xFFFF) { + ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 224); + ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128); + ctx->putchar(ctx, (a.value & 0x3F) | 128); + } else if(a.value <= 0x10FFFF) { + ctx->putchar(ctx, ((a.value & 0x3C0000) >> 18) | 240); + ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 128); + ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128); + ctx->putchar(ctx, (a.value & 0x3F) | 128); + } else { + ctx->panic = -9472; + return; + } + } + ctx->putchar(ctx, '\n'); } }