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 <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];

Loading…
Cancel
Save