diff options
author | Clyne Sullivan <clyne@bitgloo.com> | 2025-01-24 18:27:47 -0500 |
---|---|---|
committer | Clyne Sullivan <clyne@bitgloo.com> | 2025-01-24 18:27:47 -0500 |
commit | 8f4f89d5b67ae72eb55535ff8d744f5983b32737 (patch) | |
tree | 339dd79ce3695132782130d10eaffb3615ecc641 | |
parent | b8446c868707ac1b86b482aac03002a2b585dbb6 (diff) |
add foci getchar, setchar hooks
-rw-r--r-- | foci.c | 11 | ||||
-rw-r--r-- | foci.h | 3 | ||||
-rw-r--r-- | main.c | 10 |
3 files changed, 18 insertions, 6 deletions
@@ -16,7 +16,6 @@ #include "foci.h" -#include <stdio.h> // puts #include <stdlib.h> // strtol #include <string.h> // 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)) { @@ -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); @@ -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]; |