Dec 2, 2023
String parsing is working now! Still missing the first character tho, which is wierd. I'm going to debug some more.
Enjoy some {C} (the current repl evironment):
/* clang-format off */
int   slen(char *s) { int i = 0; while (s[i] && s[++i]) { i = i; } return i; } /* string length */
char *ccat(char *dst, char c) { int len = slen(dst); dst[len] = c; dst[len + 1] = 0; return dst; } /* char concatenate */
int   scmp(char *a, char *b) { int i = 0; while(a[i] == b[i]) if(!a[i++]) return 1; return 0; } /* string compare */
int   ssin(char *s, char *ss) { int a = 0; int b = 0; while(s[a]) { if(s[a] == ss[b]) { if(!ss[b + 1]) return a - b; b++; } else b = 0; a++; } return -1; } /* string substring index */
/* clang-format on */
#define BUFLEN 100
char getc()
{
    return fgetc(Console());
}
void print_str(char *s)
{
    int i = 0;
    char c = s[0];
    while (c != 0)
    {
        fputc(s[i], Console());
        c = s[++i];
    }
}
char strbuf[BUFLEN];
char *readl()
{
    char c;
    int len = 0;
    char *str = strbuf;
    while (len < BUFLEN)
    {
        c = getc();
        ccat(str, c);
        len++;
        if (len >= 99)
        {
            return str;
        }
        if (c == 10)
        {
            return str;
        }
    }
}
char *eval(char *input)
{
    return input;
}
char *print(char *input)
{
    // puts(") ");
    print_str(input);
    return input;
}
void repl()
{
    int i;
    char *str = strbuf;
    while (ssin(str, ",q") >= 0)
    {
        memset((int *)strbuf, 0, BUFLEN);
        print(eval(readl()));
    }
}