// foci - minimal forth implementation // Copyright (C) 2025 Clyne Sullivan // // This program is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation, either version 3 of the License, or (at your option) // any later version. // // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // You should have received a copy of the GNU General Public License along with // this program. If not, see . #include "foci.h" #include #include #include #include N(dot, ".", 0) { STASH; printf("%ld ", *sp); RESTORE; ++sp; NEXT; } void foci_putchar(int ch) { putchar(ch); } int foci_getchar(void) { return getchar(); } int main() { char buf[128]; init(); define(&w_dot); for (;;) { char c; do c = getchar(); while (!isgraph(c)); char *s = buf; do { *s++ = c; c = getchar(); } while (isgraph(c)); bool eol = c == '\n' || c == '\r'; *s = '\0'; if (strcmp(buf, "bye") == 0) break; parse_word(buf, s); if (eol) printf(compiling() ? "compiled <%d>\n" : "ok <%d>\n", depth()); } return 0; }