diff --git a/readme.md b/readme.md index f741485..87ed15a 100644 --- a/readme.md +++ b/readme.md @@ -41,6 +41,8 @@ Just like brainfuck, cells wrap from 0 to 255, and vice versa, and also the tape `%` Clear screen +`$` Zero n cells where n is the value of the current cell + `\` Comment out the rest of the line ## Usage @@ -52,6 +54,12 @@ For example: $ brainfucked helloworld.bfd ``` +Brainfucked can also read from standard in, so the following would also work. + +``` +$ cat helloworld.bfd | brainfucked +``` + ## License This project is Licensed under the [WTFPL](http://www.wtfpl.net/) diff --git a/src/interpreter.c b/src/interpreter.c index 273d985..982108e 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -62,8 +62,8 @@ next: break; } case EnterTape: { - memcpy(&tape, tape_ptr(tape), sizeof(Tape*)); stack_push(&tape_stack, tape); + memcpy(&tape, tape_ptr(tape), sizeof(Tape*)); break; } case LeaveTape: { @@ -82,6 +82,9 @@ next: case Clear: printf("\033c"); break; + case Zero: + memset(tape_ptr(tape), 0, tape_get(tape)); + break; case Eof: goto end; } diff --git a/src/main.c b/src/main.c index c51a88f..7032ca5 100644 --- a/src/main.c +++ b/src/main.c @@ -20,6 +20,7 @@ /// ` Output null terminated string at current cell /// ~ Input string into current cells with max length in current cell /// % Clear screen +/// $ Set n cells to 0 where n is the count of the current cell int main(int argc, char** argv) { diff --git a/src/program.c b/src/program.c index 0fac9d5..c839461 100644 --- a/src/program.c +++ b/src/program.c @@ -48,6 +48,8 @@ retest: return GetString; case '%': return Clear; + case '$': + return Zero; case '\n': case '\t': case ' ': diff --git a/src/types.h b/src/types.h index 413d313..9241787 100644 --- a/src/types.h +++ b/src/types.h @@ -19,6 +19,7 @@ typedef enum { PutString, GetString, Clear, + Zero, Eof } Symbol;