/*Attention!!!(Achtung!!!)
Brainfuck Interpreter uses commands:
+ increment
- decrement
< move left
> move right
. output symbol
, input symbol (from console)
all operations are integer
input and output are char
you may use all other symbols in command-file if you want, they will be skipped
*/
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
char *s=new(char);
int i,j,g,inow;
int fpos;
char lenta[30000],c;
bool flag;
cout << "Enter filename: ";
cin >>s;
FILE *F1;
for (i=0;i<30000;i++) lenta[i]=0;
flag=true;
inow=0;
fpos=0;
F1=fopen(s,"r");
while (c!=EOF){
for (i=0;lenta[i];i++)
c=' ';
c=fgetc(F1);
fpos++;
switch (c){
case '+': lenta[inow]++; break;
case '-': lenta[inow]--; break;
case '>': inow++; break;
case '<': inow--; break;
case '.': cout << lenta[inow]; break;
case ',': cin >> lenta[inow]; break;
case '[': if (lenta[inow]==0){
i=1;
while (i){
c=fgetc(F1);
fpos++;
if (c=='[') i++;
if (c==']') i--;
}
}
break;
case ']': if (lenta[inow]!=0){
i=1;
g=fclose(F1);
while (i){
F1=fopen(s,"r");
for (j=1;j<fpos;j++)
c=fgetc(F1);
g=fclose(F1);
fpos--;
if (c==']') i++;
if (c=='[') i--;
}
F1=fopen(s,"r");
for (i=0;i<fpos;i++) fgetc(F1);
}
}
}
cout <<endl;
g=fclose(F1);
cout <<(char)201;
for (i=0;i<78;i++)
cout <<(char)205;
cout <<(char)187;
cout <<(char)186;
cout << " Thanx for using my Brainfuck Interpreter!";
for (i=59;i<78;i++) cout <<" ";
cout <<(char)186;
cout <<(char)186;
cout << " BobicZdoh (https:////bobiczdoh.narod.ru)";
for (i=58;i<78;i++) cout <<" ";
cout <<(char)186;
cout <<(char)200;
for (i=0;i<78;i++)
cout <<(char)205;
cout <<(char)188;
return 0;
}