summaryrefslogtreecommitdiff
path: root/bf.c
diff options
context:
space:
mode:
Diffstat (limited to 'bf.c')
-rw-r--r--bf.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/bf.c b/bf.c
new file mode 100644
index 0000000..ddec8f5
--- /dev/null
+++ b/bf.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#define S (1<<16)
+#define I a[1]
+#define D a[0]
+#define C case
+#define B break
+static char d[S], p[S];
+int main(int i, char *a[]) {
+ fread(p, 1, S, fopen(I, "r"));
+ for (D = d, I = p; I < p + S; I++) {
+ switch (i = *I) {
+ C '[': C ']': for (i = '\\' - *I; i < 0 ? *D : !*D; i += *(I += i > 0 ? 1 : -1) == '[' ? 1 : *I == ']' ? -1 : 0); B;
+ C '+': C '-': *D -= i - ','; B;
+ C '<': C '>': D += i - '='; B;
+ C ',': *D = getchar(); B;
+ C '.': putchar(*D); B;
+ }
+ }
+}