aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <clyne@bitgloo.com>2025-01-24 18:27:47 -0500
committerClyne Sullivan <clyne@bitgloo.com>2025-01-24 18:27:47 -0500
commit8f4f89d5b67ae72eb55535ff8d744f5983b32737 (patch)
tree339dd79ce3695132782130d10eaffb3615ecc641
parentb8446c868707ac1b86b482aac03002a2b585dbb6 (diff)
add foci getchar, setchar hooks
-rw-r--r--foci.c11
-rw-r--r--foci.h3
-rw-r--r--main.c10
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 <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)) {
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];