From 418543ed8d974b06b71694da5c71059eb45897b5 Mon Sep 17 00:00:00 2001 From: c Date: Sat, 25 Nov 2023 22:52:11 -0500 Subject: Initial commit. --- src/bf.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/bf.c (limited to 'src/bf.c') diff --git a/src/bf.c b/src/bf.c new file mode 100644 index 0000000..dec7aa3 --- /dev/null +++ b/src/bf.c @@ -0,0 +1,38 @@ +#include "include/util.h" +#include "include/bf.h" + +void bf_run(char* src, FILE* out) { + fprintf(out, "#include \n"); + fprintf(out, "#include \n"); + + fprintf(out, "int main(){\n"); + fprintf(out, "char b[30000];\n"); // create memory buffer + fprintf(out, "char*p=b;\n"); // create pointer + + while (*src != '\0') { + switch (*src) { + case '>': fprintf(out, "p++;\n"); break; // move pointer right + case '<': fprintf(out, "p--;\n"); break; // move pointer left + case '+': fprintf(out, "++*p;\n"); break; // increment cell + case '-': fprintf(out, "--*p;\n"); break; // decrement cell + case '[': fprintf(out, "while(*p){\n"); break; // begin loop + case ']': fprintf(out, "}\n"); break; // end loop + case '.': fprintf(out, "putchar(*p);\n"); break; // print cell + case ',': fprintf(out, "*p=getchar();\n");break; // set cell from stdin + // ignore all other chars + } + src++; + } + + fprintf(out, "exit(0);\nreturn 0;\n}\n"); +} + +int main(int argc, char** argv) { + char* src = (argc - 1)? + util_src_from_fpath(fopen(argv[1], "rb")): + util_src_from_stdin(); + + bf_run(src, stdout); + free(src); + return 0; +} -- cgit v1.2.3