add foci getchar, setchar hooks

main
Clyne 4 weeks ago
parent b8446c8687
commit 8f4f89d5b6
Signed by: clyne
GPG Key ID: 3267C8EBF3F9AFC7

@ -16,7 +16,6 @@
#include "foci.h" #include "foci.h"
#include <stdio.h> // puts
#include <stdlib.h> // strtol #include <stdlib.h> // strtol
#include <string.h> // strncmp #include <string.h> // strncmp
@ -48,8 +47,7 @@ NAKED void compname(void)
STASH; STASH;
for (;;) { for (;;) {
extern int getchar(void); ch = foci_getchar();
ch = getchar();
if (ch <= 0x20) if (ch <= 0x20)
break; 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; } 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(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(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, I(felse, "else", &w_then) LIT(b), comma, FTH(here), LIT(0), comma, swap, FTH(then), END
FTH(here), LIT(sizeof(intptr_t)), sub, swap, poke, END
#define LATEST &w_felse #define LATEST &w_felse
void call(void *ptr) void call(void *ptr)
@ -141,7 +138,9 @@ void parse_word(const char *buf, const char *s)
*--sp = n; *--sp = n;
} }
} else { } else {
puts("word not found"); const char *err = "word not found";
while (*err)
foci_putchar(*err++);
} }
} else { } else {
if (state && !(l->attr & ATTR_IMMEDIATE)) { 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 STASH asm("push %r12; push %r13; push %r14")
#define RESTORE asm("pop %r14; pop %r13; pop %r12") #define RESTORE asm("pop %r14; pop %r13; pop %r12")
extern void foci_putchar(int);
extern int foci_getchar(void);
void init(void); void init(void);
int depth(void); int depth(void);
int compiling(void); int compiling(void);

@ -28,6 +28,16 @@ N(dot, ".", 0) {
NEXT; NEXT;
} }
void foci_putchar(int ch)
{
putchar(ch);
}
int foci_getchar(void)
{
return getchar();
}
int main() int main()
{ {
char buf[128]; char buf[128];

Loading…
Cancel
Save