void outcmd(int ch, int count) { switch(ch) { case '!': if (bytecell) { ctype = "byte"; vmask = 255; } printf( "%s%d%s%s%s%d%s%s%s", "package main\n" "import(\"fmt\"\n" " \"os\")\n" "var m [",tapesz,"]", ctype, "\n" "var p = ",tapeinit,"\n" "var v ", ctype, "\n" "func main() {\n" ); ind++; break; case '~': I; printf("os.Exit(0)\n"); ind--; printf("}\n"); break; case '=': I; printf("m[p] = %d\n", count & vmask); break; case 'B': I; printf("v = m[p]\n"); break; case 'M': I; printf("m[p] = m[p]+v*%d\n", count & vmask); break; case 'N': I; printf("m[p] = m[p]-v*%d\n", count & vmask); break; case 'S': I; printf("m[p] = m[p]+v\n"); break; case 'Q': I; printf("if v != 0 { m[p] = %d }\n", count & vmask); break; case 'm': I; printf("if v != 0 { m[p] = m[p]+v*%d }\n", count & vmask); break; case 'n': I; printf("if v != 0 { m[p] = m[p]-v*%d }\n", count & vmask); break; case 's': I; printf("if v != 0 { m[p] = m[p]+v }\n"); break; case 'X': I; printf("fmt.Fprintf(os.Stderr, \"Aborting Infinite Loop.\\n\")\n"); I; printf("os.Exit(1)\n"); break; case '+': I; printf("m[p] += %d\n", count & vmask); break; case '-': I; printf("m[p] -= %d\n", count & vmask); break; case '<': I; printf("p -= %d\n", count); break; case '>': I; printf("p += %d\n", count); break; case '[': I; printf("for m[p] != 0 {\n"); ind++; break; case ']': ind--; I; printf("}\n"); break; case '.': I; printf("fmt.Print(string(m[p]))\n"); break; case '"': print_cstring(); break; case ',': I; printf("fmt.Scanf(\"%%c\", &m[p])\n"); break; } }
void outcmd(int ch, int count) { switch(ch) { case '!': printf( "%s%d%s%d%s", "<?php\n" "$m=array_fill(0, ",tapesz,", 0);\n" "$p=",tapeinit,";\n"); break; case '=': I; printf("$m[$p] = %d;\n", count); break; case 'B': if(bytecell) { I; printf("$m[$p] &= 255;\n"); } I; printf("$v = $m[$p];\n"); break; case 'M': I; printf("$m[$p] = $m[$p]+$v*%d;\n", count); break; case 'N': I; printf("$m[$p] = $m[$p]-$v*%d;\n", count); break; case 'S': I; printf("$m[$p] = $m[$p]+$v;\n"); break; case 'Q': I; printf("if ($v != 0) $m[$p] = %d;\n", count); break; case 'm': I; printf("if ($v != 0) $m[$p] = $m[$p]+$v*%d;\n", count); break; case 'n': I; printf("if ($v != 0) $m[$p] = $m[$p]-$v*%d;\n", count); break; case 's': I; printf("if ($v != 0) $m[$p] = $m[$p]+$v;\n"); break; case 'X': I; printf("fwrite(STDERR, \"Abort: Infinite Loop.\\n\"); exit;\n"); break; case '+': I; printf("$m[$p] += %d;\n", count); break; case '-': I; printf("$m[$p] -= %d;\n", count); break; case '<': I; printf("$p -= %d;\n", count); break; case '>': I; printf("$p += %d;\n", count); break; case '[': if(bytecell) { I; printf("$m[$p] &= 255;\n"); } I; printf("while($m[$p] != 0){\n"); ind++; break; case ']': if(bytecell) { I; printf("$m[$p] &= 255;\n"); } ind--; I; printf("}\n"); break; case '.': I; printf("print chr($m[$p]&255);\n"); break; case ',': I; printf("$s = fread(STDIN, 1); if(strlen($s)) $m[$p] = ord($s);\n"); break; case '"': print_cstring(); break; } }
void outcmd(int ch, int count) { switch(ch) { case '!': I; printf("PROGRAM-ID. brainfuck.\n"); I; printf("DATA DIVISION.\n"); I; printf("WORKING-STORAGE SECTION.\n"); if (use_decimal) { I; printf("01 DEC-TAPE.\n"); I; printf(" 02 m PIC S9(3) OCCURS %d TIMES.\n", tapesz); I; printf("01 p PIC 9(9) VALUE %d.\n", tapeinit); I; printf("01 v PIC S9(3).\n"); I; printf("01 chr PIC S9(3) GLOBAL.\n"); } else if (bytecell) { I; printf("01 CHAR-TAPE.\n"); I; printf(" 02 m BINARY-CHAR UNSIGNED OCCURS %d TIMES.\n", tapesz); I; printf("01 p BINARY-LONG VALUE %d.\n", tapeinit); I; printf("01 v BINARY-CHAR UNSIGNED.\n"); I; printf("01 chr BINARY-LONG GLOBAL.\n"); } else { I; printf("01 WORD-TAPE.\n"); I; printf(" 02 m BINARY-LONG OCCURS %d TIMES.\n", tapesz); I; printf("01 p BINARY-LONG VALUE %d.\n", tapeinit); I; printf("01 v BINARY-LONG.\n"); I; printf("01 chr BINARY-LONG GLOBAL.\n"); } I; printf("01 inpl PIC X(%d) GLOBAL.\n", maxinpline); I; printf("01 goteof PIC 9 GLOBAL.\n"); I; printf("01 gotln PIC 9 GLOBAL.\n"); I; printf("PROCEDURE DIVISION.\n"); break; case '~': I; printf("STOP RUN.\n"); printf("\n"); if (do_input) { I; printf("PROGRAM-ID. getchr.\n"); I; printf("PROCEDURE DIVISION.\n"); I; printf("MOVE -1 TO chr\n"); I; printf("IF goteof EQUALS 1 THEN\n"); I; printf(" EXIT PROGRAM\n"); I; printf("END-IF\n"); I; printf("IF gotln EQUALS ZERO THEN\n"); I; printf(" ACCEPT inpl\n"); I; printf(" MOVE 1 TO gotln\n"); I; printf("END-IF\n"); I; printf("IF inpl EQUALS SPACES THEN\n"); I; printf(" MOVE ZERO TO gotln\n"); I; printf(" MOVE 10 TO chr\n"); I; printf(" EXIT PROGRAM\n"); I; printf("END-IF\n"); I; printf("MOVE FUNCTION ORD(inpl) TO chr\n"); I; printf("SUBTRACT 1 FROM chr\n"); I; printf("MOVE inpl (2:) TO inpl\n"); I; printf("EXIT PROGRAM.\n"); printf("\n"); I; printf("END PROGRAM getchr.\n"); I; printf("END PROGRAM brainfuck.\n"); } break; case '=': I; printf("MOVE %d TO m(p)\n", count); break; case 'B': I; printf("MOVE m(p) TO v\n"); break; case 'M': I; printf("COMPUTE m(p) EQUAL m(p)+v*%d\n", count); break; case 'N': I; printf("COMPUTE m(p) EQUAL m(p)-v*%d\n", count); break; case 'S': I; printf("ADD v TO m(p)\n"); break; case 'Q': I; printf("IF NOT v EQUALS ZERO THEN\n"); I; printf(" MOVE %d TO m(p)\n", count); I; printf("END-IF\n"); break; case 'm': I; printf("IF NOT v EQUALS ZERO THEN\n"); I; printf(" COMPUTE m(p) = m(p)+v*%d\n", count); I; printf("END-IF\n"); break; case 'n': I; printf("IF NOT v EQUALS ZERO THEN\n"); I; printf(" COMPUTE m(p) = m(p)-v*%d\n", count); I; printf("END-IF\n"); break; case 's': I; printf("IF NOT v EQUALS ZERO THEN\n"); I; printf(" ADD v TO m(p)\n"); I; printf("END-IF\n"); break; case 'X': I; printf("DISPLAY \"Aborting Infinite Loop.\"\n"); I; printf("STOP RUN RETURNING 1\n"); break; case '+': I; printf("ADD %d TO m(p)\n", count); break; case '-': I; printf("SUBTRACT %d FROM m(p)\n", count); break; case '<': I; printf("SUBTRACT %d FROM p\n", count); break; case '>': I; printf("ADD %d TO p\n", count); break; case '[': I; printf("PERFORM UNTIL m(p) EQUALS ZERO\n"); ind+=2; break; case ']': ind-=2; I; printf("END-PERFORM\n"); break; case '.': I; printf("MOVE m(p) TO chr\n"); I; printf("ADD 1 TO chr\n"); I; printf("DISPLAY FUNCTION CHAR(chr) WITH NO ADVANCING\n"); break; case '"': print_cstring(); break; case ',': I; printf("CALL 'getchr'\n"); I; printf("IF chr GREATER THAN OR EQUAL TO ZERO THEN\n"); I; printf(" MOVE chr TO m(p)\n"); I; printf("END-IF\n"); do_input = 1; break; } }
void outcmd(int ch, int count) { switch(ch) { case '!': puts("#!/usr/bin/ruby"); /* Using push is about 20% slower, using a Hash is a LOT slower! */ if (tapelen > 0) printf("m = Array.new(%d, 0)\n",tapesz); else { puts("m = Array.new"); } printf("%s%d%s", "p = ", tapeinit, "\n"); if (tapelen <= 0) puts("m.push(0) while p>=m.length"); break; case '=': I; printf("m[p] = %d\n", count); break; case 'B': if(bytecell) { I; printf("m[p] &= 255\n"); } I; printf("v = m[p]\n"); break; case 'M': I; printf("m[p] = m[p]+v*%d\n", count); break; case 'N': I; printf("m[p] = m[p]-v*%d\n", count); break; case 'S': I; printf("m[p] = m[p]+v\n"); break; case 'Q': I; printf("m[p] = %d unless v == 0\n", count); break; case 'm': I; printf("m[p] = m[p]+v*%d unless v == 0\n", count); break; case 'n': I; printf("m[p] = m[p]-v*%d unless v == 0\n", count); break; case 's': I; printf("m[p] = m[p]+v unless v == 0\n"); break; case 'X': I; printf("raise 'Aborting Infinite Loop.'\n"); break; case '+': I; printf("m[p] += %d\n", count); break; case '-': I; printf("m[p] -= %d\n", count); break; case '<': I; printf("p -= %d\n", count); curtapeoff -= count; break; case '>': I; printf("p += %d\n", count); curtapeoff += count; if (tapelen <= 0 && curtapeoff > safetapeoff) { safetapeoff = curtapeoff; I; puts("m.push(0) while p>=m.length"); } break; case '[': if(bytecell) { I; printf("m[p] &= 255\n"); } I; printf("while m[p] != 0\n"); ind++; curtapeoff = safetapeoff = 0; break; case ']': if(bytecell) { I; printf("m[p] &= 255\n"); } ind--; I; printf("end\n"); curtapeoff = safetapeoff = 0; break; case '"': print_cstring(); break; case '.': I; if(bytecell) printf("putc m[p]\n"); else printf("begin print ''<<m[p] rescue putc m[p] end\n"); break; case ',': I; if (bytecell) printf("m[p] = $stdin.getbyte if !$stdin.eof\n"); else printf("m[p] = $stdin.getc.ord if !$stdin.eof\n"); break; } }
void outcmd(int ch, int count) { int mov = 0; char * cm; if (tapelen>0) move_opt(&ch, &count, &mov); if (ch == 0) return; if (!init_done && ch != '!' && ch != '"' && ch != '~') { /* Using push is about 20% slower, using a Hash is a LOT slower! */ if (tapelen > 0) printf("m = Array.new(%d, 0)\n",tapesz); else { puts("m = Array.new"); } printf("%s%d%s", "p = ", tapeinit, "\n"); if (tapelen <= 0) puts("m.push(0) while p>=m.length"); init_done = 1; } cm = cell(mov); switch(ch) { case '!': puts("#!/usr/bin/ruby"); break; case '=': I; printf("%s = %d\n", cm, count); break; case 'B': if(bytecell) { I; printf("%s &= 255\n", cm); } I; printf("v= %s\n", cm); break; case 'M': I; printf("%s += v*%d\n", cm, count); break; case 'N': I; printf("%s -= v*%d\n", cm, count); break; case 'S': I; printf("%s += v\n", cm); break; case 'T': I; printf("%s -= v\n", cm); break; case '*': I; printf("%s *= v\n", cm); break; case 'C': I; printf("%s = v*%d\n", cm, count); break; case 'D': I; printf("%s = -v*%d\n", cm, count); break; case 'V': I; printf("%s = v\n", cm); break; case 'W': I; printf("%s = -v\n", cm); break; case 'X': I; printf("raise 'Aborting Infinite Loop.'\n"); break; case '+': I; printf("%s += %d\n", cm, count); break; case '-': I; printf("%s -= %d\n", cm, count); break; case '<': I; printf("p -= %d\n", count); curtapeoff -= count; break; case '>': I; printf("p += %d\n", count); curtapeoff += count; if (tapelen <= 0 && curtapeoff > safetapeoff) { safetapeoff = curtapeoff; I; puts("m.push(0) while p>=m.length"); } break; case '[': if(bytecell) { I; printf("%s &= 255\n", cm); } I; printf("while %s != 0\n", cm); ind++; curtapeoff = safetapeoff = 0; break; case ']': if (count > 0) { I; printf("p += %d\n", count); } else if (count < 0) { I; printf("p -= %d\n", -count); } if(bytecell) { I; printf("%s &= 255\n", cm); } ind--; I; printf("end\n"); curtapeoff = safetapeoff = 0; break; case 'I': if(bytecell) { I; printf("%s &= 255\n", cm); } I; printf("if %s != 0\n", cm); ind++; curtapeoff = safetapeoff = 0; break; case 'E': if (count > 0) { I; printf("p += %d\n", count); } else if (count < 0) { I; printf("p -= %d\n", -count); } ind--; I; printf("end\n"); curtapeoff = safetapeoff = 0; break; case '"': print_cstring(); break; case '.': I; if(bytecell) printf("putc %s\n", cm); else printf("begin print '' << %s rescue putc %s end\n", cm, cm); break; case ',': I; if (bytecell) printf("%s = $stdin.getbyte if !$stdin.eof\n", cm); else printf("%s = $stdin.getc.ord if !$stdin.eof\n", cm); break; } }
void loutcmd(int ch, int count, struct instruction *n) { switch(ch) { case '!': if (bytecell) { printf("%s%d%s%d%s", "import java.io.InputStream;" "\n" "import java.io.OutputStream;" "\n" "import java.io.IOException;" "\n" "\n" "public class f**k {" "\n" " static byte[] m;" "\n" " static int p;" "\n" " static byte v;" "\n" "\n" " private static void i() {" "\n" " try {" "\n" " System.in.read(m,p,1);" "\n" " } catch (IOException e) {}" "\n" " }" "\n" "\n" " private static void o() {" "\n" "// try {" "\n" " System.out.write(m[p]);" "\n" " System.out.flush();" "\n" "// } catch (IOException e) {}" "\n" " }" "\n" "\n" " public static void main(String[] args) {" "\n" " m=new byte[",tapesz,"];" "\n" " p=",tapeinit,";" "\n"); } else { printf("%s%d%s%d%s", "import java.io.InputStream;" "\n" "import java.io.OutputStream;" "\n" "import java.io.IOException;" "\n" "\n" "public class f**k {" "\n" " static int[] m;" "\n" " static int p;" "\n" " static int v;" "\n" " static byte ch;" "\n" "\n" " private static void i() {" "\n" " try {" "\n" " v = System.in.read();" "\n" " if (v>=0) m[p] = v;" "\n" " } catch (IOException e) {}" "\n" " }" "\n" "\n" " private static void o() {" "\n" " ch = (byte) m[p];" "\n" " System.out.write(ch);" "\n" " System.out.flush();" "\n" " }" "\n" "\n" " public static void main(String[] args) {" "\n" " m=new int[",tapesz,"];" "\n" " p=",tapeinit,";" "\n"); } ind+=2; break; case '~': ind--; I; printf("}\n"); ind--; I; printf("}\n"); break; case '@': I; printf("bf%d();\n", count); break; case '{': I; printf("private static void bf%d() {\n", count); ind++; break; case '}': ind--; I; printf("}\n"); break; case '=': I; printf("m[p] = %d;\n", count); break; case 'B': I; printf("v = m[p];\n"); break; case 'M': I; printf("m[p] += v*%d;\n", count); break; case 'N': I; printf("m[p] -= v*%d;\n", count); break; case 'S': I; printf("m[p] += v;\n"); break; case 'Q': I; printf("if(v!=0) m[p] = %d;\n", count); break; case 'm': I; printf("if(v!=0) m[p] += v*%d;\n", count); break; case 'n': I; printf("if(v!=0) m[p] -= v*%d;\n", count); break; case 's': I; printf("if(v!=0) m[p] += v;\n"); break; case 'X': I; printf("throw new IllegalStateException(\"Infinite Loop detected.\");"); break; case '+': I; printf("m[p] += %d;\n", count); break; case '-': I; printf("m[p] -= %d;\n", count); break; case '<': I; printf("p -= %d;\n", count); break; case '>': I; printf("p += %d;\n", count); break; case '[': I; printf("while(m[p] != 0) {\n"); ind++; break; case ']': ind--; I; printf("}\n"); break; case '.': I; printf("o();\n"); break; case ',': I; printf("i();\n"); break; case '"': print_cstring(n->cstr); break; } }