diff options
author | Igor <pashev.igor@gmail.com> | 2010-01-19 17:37:49 +0300 |
---|---|---|
committer | Igor <pashev.igor@gmail.com> | 2010-01-19 17:37:49 +0300 |
commit | 63802befc2e9e8dd6272f1b273fa7c99df1821ce (patch) | |
tree | 9b9cbacc22775ef79125f18ed575791b64207852 | |
parent | 0a48fa6f3329d89701ed8b6d430447af04777652 (diff) | |
download | brainfuck-63802befc2e9e8dd6272f1b273fa7c99df1821ce.tar.gz |
Allowed comands, I/O fixes
-rw-r--r-- | brainfuck.c | 16 | ||||
-rw-r--r-- | hello.bf | 2 |
2 files changed, 10 insertions, 8 deletions
diff --git a/brainfuck.c b/brainfuck.c index 8e78adf..d23ae52 100644 --- a/brainfuck.c +++ b/brainfuck.c @@ -27,7 +27,7 @@ unsigned int cp = 0; unsigned int dp = 0; unsigned int max_dp = 0; unsigned int sp = 0; -char ignore [] = "\t\r\n "; +char commands [] = "+-<>,.[]cioux"; void read_code() @@ -48,7 +48,7 @@ void read_code() else if (c == '\n' || c == '\r') comment = 0; - if (comment || (NULL != strchr(ignore, c))) + if (comment || (NULL == strchr(commands, c))) continue; if (n >= allocated) @@ -138,11 +138,11 @@ void input() { switch (fmt) { - case 'i': scanf("%i", (signed int*) &(data[dp])); break; - case 'u': scanf("%u", (unsigned int*) &(data[dp])); break; - case 'c': scanf("%c", (char*) &(data[dp])); break; - case 'o': scanf("0%o", (unsigned int*) &(data[dp])); break; - case 'x': scanf("0x%X", (unsigned int*) &(data[dp])); break; + case 'i': scanf(format, (signed int*) &(data[dp])); break; + case 'u': scanf(format, (unsigned int*) &(data[dp])); break; + case 'c': scanf(format, (char*) &(data[dp])); break; + case 'o': scanf(format, (unsigned int*) &(data[dp])); break; + case 'x': scanf(format, (unsigned int*) &(data[dp])); break; } } @@ -204,6 +204,8 @@ void run_code() case '.': if (!trace) { printf(format, data[dp]); + if (fmt != 'c') + printf(" "); } ++cp; break; @@ -1,4 +1,4 @@ -c++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ +++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>. |