From 8f4f89d5b67ae72eb55535ff8d744f5983b32737 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Fri, 24 Jan 2025 18:27:47 -0500 Subject: [PATCH] add foci getchar, setchar hooks --- foci.c | 11 +++++------ foci.h | 3 +++ main.c | 10 ++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/foci.c b/foci.c index 2ca054f..d957c57 100644 --- a/foci.c +++ b/foci.c @@ -16,7 +16,6 @@ #include "foci.h" -#include // puts #include // strtol #include // strncmp @@ -48,8 +47,7 @@ NAKED void compname(void) STASH; for (;;) { - extern int getchar(void); - ch = getchar(); + ch = foci_getchar(); if (ch <= 0x20) break; @@ -105,8 +103,7 @@ N(b, "_b", &w_literal) { ++pp; pp = (intptr_t **)*pp; NEXT; } N(bz, "_bz", &w_literal) { ++pp; if (!*sp++) { pp = (intptr_t **)*pp; } NEXT; } I(fif, "if", &w_b) LIT(bz), comma, FTH(here), LIT(0), comma, END I(then, "then", &w_fif) FTH(here), LIT(sizeof(intptr_t)), sub, swap, poke, END -I(felse, "else", &w_then) LIT(b), comma, FTH(here), LIT(0), comma, swap, - FTH(here), LIT(sizeof(intptr_t)), sub, swap, poke, END +I(felse, "else", &w_then) LIT(b), comma, FTH(here), LIT(0), comma, swap, FTH(then), END #define LATEST &w_felse void call(void *ptr) @@ -141,7 +138,9 @@ void parse_word(const char *buf, const char *s) *--sp = n; } } else { - puts("word not found"); + const char *err = "word not found"; + while (*err) + foci_putchar(*err++); } } else { if (state && !(l->attr & ATTR_IMMEDIATE)) { diff --git a/foci.h b/foci.h index 6a96f32..9a87723 100644 --- a/foci.h +++ b/foci.h @@ -75,6 +75,9 @@ register intptr_t tmp asm("r15"); #define STASH asm("push %r12; push %r13; push %r14") #define RESTORE asm("pop %r14; pop %r13; pop %r12") +extern void foci_putchar(int); +extern int foci_getchar(void); + void init(void); int depth(void); int compiling(void); diff --git a/main.c b/main.c index 2e903ae..66d908e 100644 --- a/main.c +++ b/main.c @@ -28,6 +28,16 @@ N(dot, ".", 0) { NEXT; } +void foci_putchar(int ch) +{ + putchar(ch); +} + +int foci_getchar(void) +{ + return getchar(); +} + int main() { char buf[128];