Created
January 8, 2020 00:44
-
-
Save contropist/54e270054bb8e16fd0e29a5734699115 to your computer and use it in GitHub Desktop.
A CPP brainfuck compiler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<cstdio> | |
#include<cstring> | |
#include<cstdlib> | |
#include<windows.h> | |
#include<conio.h> | |
#include<ctime> | |
using namespace std; | |
clock_t t1,t2; | |
int ti; | |
POINT pt; | |
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0) | |
HWND hConsole=FindWindow("ConsoleWindowClass",NULL); | |
void colset(int a){ | |
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a); | |
} | |
void Goto(int Y,int X){ | |
COORD C; C.X=X; C.Y=Y; | |
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),C); | |
} | |
void Hide(){ | |
CONSOLE_CURSOR_INFO cursor_info={1,0}; | |
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); | |
} | |
bool got(){ | |
GetCursorPos(&pt); | |
ScreenToClient(hConsole,&pt); | |
fflush(stdin); | |
return true; | |
} | |
int pan(int x,int y){ | |
if(x<0||x>64) return 0; | |
y/=8; | |
++y; | |
if(y>=3&&y<=10) return 1; | |
if(y>=13&&y<=20) return 2; | |
if(y>=23&&y<=28) return 3; | |
if(y>=31&&y<=42) return 4; | |
if(y>=45&&y<=50) return 5; | |
if(y>=53&&y<=57) return 6; | |
if(y>=60&&y<=71) return 7; | |
if(y>=74&&y<=80) return 8; | |
return 0; | |
} | |
int by[10000002]; | |
char lo[10000002],sc[10000002]; | |
bool bp[10000002]; | |
int now=1,ma,s=-1,nnnn=0,cs,mn; | |
bool ok=false,xr; | |
int q=0,lk; | |
bool aaa; | |
bool co(int be,int en){ | |
if(be>en){ | |
printf("Runtime Error: There's no anything in it\n"); | |
for(int i=1;i<en;i++) printf("%c",lo[i]); | |
colset(12); | |
for(int i=en;i<=be;i++) printf("%c",lo[i]); | |
colset(15); | |
for(int i=be+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
aaa=false; | |
lk=lk+3+(q-1)/175; | |
printf("-----------------------------------\n"); | |
} | |
int nn=be; | |
while(nn<=en){ | |
if(lo[nn]=='<'){ | |
--now; | |
if(now==0){ | |
printf("Memory Limit Exceed: No variable position there\n"); | |
for(int i=1;i<nn;i++) printf("%c",lo[i]); | |
colset(12); | |
printf("%c",lo[nn]); | |
colset(15); | |
for(int i=nn+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
aaa=false; | |
lk=lk+3+(q-1)/175; | |
printf("-----------------------------------\n"); | |
} | |
} | |
else if(lo[nn]=='>'){ | |
++now; | |
if(now>10000000){ | |
printf("Memory Limit Exceed: I don\'t know why you want so big memories or... more than 1000,0000 bytes!\n"); | |
aaa=false; | |
printf("-----------------------------------\n"); | |
lk=lk+3+(q-1)/175; | |
} | |
} | |
else if(lo[nn]=='+'){ | |
; | |
} | |
else if(lo[nn]=='-'){ | |
; | |
} | |
else if(lo[nn]=='.'){ | |
; | |
} | |
else if(lo[nn]==','){ | |
; | |
} | |
else if(lo[nn]=='['){ | |
int nnn=nn+1,no=1; | |
while(no!=0 && nnn<=en){ | |
if(lo[nnn]=='[') ++no; | |
if(lo[nnn]==']') --no; | |
++nnn; | |
} | |
if(nnn!=en+1||no==0){ | |
aaa=co(nn+1,nnn-2); | |
} | |
else{ | |
printf("Compile Error: I can\'t find the last part there\n"); | |
for(int i=1;i<nn;i++) printf("%c",lo[i]); | |
colset(12); | |
printf("%c",lo[nn]); | |
colset(15); | |
for(int i=nn+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
aaa=false; | |
printf("-----------------------------------\n"); | |
lk=lk+3+(q-1)/175; | |
} | |
nn=nnn-1; | |
} | |
else if(lo[nn]==' '){;} | |
else if(lo[nn]==']'){ | |
printf("Comlple Error: I can\'t the first part there\n"); | |
for(int i=1;i<nn;i++) printf("%c",lo[i]); | |
colset(12); | |
printf("%c",lo[nn]); | |
colset(15); | |
for(int i=nn+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
aaa=false; | |
printf("-----------------------------------\n"); | |
lk=lk+3+(q-1)/175; | |
} | |
else{ | |
printf("Compile Error: I don\'t know what \'%c\' is\n",lo[nn]); | |
for(int i=1;i<nn;i++) printf("%c",lo[i]); | |
colset(12); | |
printf("%c",lo[nn]); | |
colset(15); | |
for(int i=nn+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
aaa=false; | |
printf("-----------------------------------\n"); | |
lk=lk+3+(q-1)/175; | |
} | |
++nn; | |
} | |
return aaa; | |
} | |
int ssc,sg=0,sg2,sg3=0,sg4; | |
void sou1(int be,int en){ | |
int nn=be; | |
while(nn<=en){ | |
if(bp[nn]){ | |
t2=clock(); | |
ti=ti+(t2-t1); | |
Goto(7+sg3,0); | |
printf("Breakpoint there!\n"); | |
for(int i=1;i<nn;i++) printf("%c",lo[i]); | |
colset(10); | |
printf("%c",lo[nn]); | |
colset(15); | |
for(int i=nn+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
printf("You can look at the data\n"); | |
printf("+----++----+\n"); | |
printf("|Look||Quit|\n"); | |
printf("| L|| Q|\n"); | |
printf("+----++----+\n"); | |
while(1){ | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha=='L'||haha=='l'){ | |
int h=(mn+9)/10; | |
for(int i=0;i<h;i++){ | |
for(int j=0;j<10;j++){ | |
if(i*10+j+1==now) colset(12); | |
printf(" %3d |",by[i*10+j+1]); | |
colset(15); | |
} | |
printf("\n"); | |
if((now+9)/10==i+1){ | |
for(int j=1;j<(now%10);j++) printf(" "); | |
printf(" ^^^\n"); | |
} | |
} | |
printf("Continue...\n"); | |
Sleep(3000); | |
Goto(7+sg3,0); | |
printf(" \n"); | |
for(int i=1;i<=q;i++) printf(" "); | |
printf("\n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
for(int i=0;i<h;i++){ | |
for(int j=0;j<10;j++){ | |
printf(" "); | |
} | |
printf("\n"); | |
if((now+9)/10==i+1){ | |
for(int j=1;j<(now%10);j++) printf(" "); | |
printf(" \n"); | |
} | |
} | |
printf(" \n"); | |
break; | |
} | |
if(haha=='Q'||haha=='q'){ | |
printf("Continuing\n"); | |
Sleep(3000); | |
Goto(7+sg3,0); | |
printf(" \n"); | |
for(int i=1;i<=q;i++) printf(" "); | |
printf("\n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
break; | |
} | |
} | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
got(); | |
if(pt.y>(10+sg3+(q-1)/175)*16&&pt.y<(14+sg3+(q-1)/175)*16&&pt.x>0&&pt.x<48){ | |
int h=(mn+9)/10; | |
for(int i=0;i<h;i++){ | |
for(int j=0;j<10;j++){ | |
if(i*10+j+1==now) colset(12); | |
printf(" %3d |",by[i*10+j+1]); | |
colset(15); | |
} | |
printf("\n"); | |
if((now+9)/10==i+1){ | |
for(int j=1;j<(now%10);j++) printf(" "); | |
printf(" ^^^\n"); | |
} | |
} | |
printf("Continue...\n"); | |
Sleep(3000); | |
Goto(7+sg3,0); | |
printf(" \n"); | |
for(int i=1;i<=q;i++) printf(" "); | |
printf("\n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
for(int i=0;i<h;i++){ | |
for(int j=0;j<10;j++){ | |
printf(" "); | |
} | |
printf("\n"); | |
if((now+9)/10==i+1){ | |
for(int j=1;j<(now%10);j++) printf(" "); | |
printf(" \n"); | |
} | |
} | |
printf(" \n"); | |
break; | |
} | |
if(pt.y>(10+sg3+(q-1)/175)*16&&pt.y<(14+sg3+(q-1)/175)*16&&pt.x>48&&pt.x<96){ | |
printf("Continue...\n"); | |
Sleep(3000); | |
Goto(7+sg3,0); | |
printf(" \n"); | |
for(int i=1;i<=q;i++) printf(" "); | |
printf("\n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
printf(" \n"); | |
break; | |
} | |
} | |
} | |
t1=clock(); | |
} | |
if(lo[nn]=='<') --now; | |
else if(lo[nn]=='>'){ | |
++now; | |
if(mn<now) mn=now; | |
} | |
else if(lo[nn]=='+'){ | |
++by[now]; | |
while(by[now]<0) by[now]+=128; | |
while(by[now]>127) by[now]-=128; | |
} | |
else if(lo[nn]=='-'){ | |
--by[now]; | |
while(by[now]<0) by[now]+=128; | |
while(by[now]>127) by[now]-=128; | |
} | |
else if(lo[nn]=='.'){ | |
while(by[now]<0) by[now]+=128; | |
while(by[now]>127) by[now]-=128; | |
if(by[now]=='\n'){ | |
++sg3; | |
Goto(5+sg3,9); | |
printf("|"); | |
for(int i=0;i<sg4;i++) printf(" "); | |
printf("|"); | |
Goto(6+sg3,9); | |
printf("+"); | |
for(int i=0;i<sg4;i++) printf("-"); | |
printf("+"); | |
sg=0; | |
} | |
else{ | |
++sg; | |
if(sg>sg4){ | |
for(int i=0;i<=sg3;i++){ | |
Goto(5+i,9+sg); | |
printf(" |"); | |
} | |
Goto(4,9+sg4+1); | |
for(int i=0;i<sg-sg4;i++) printf("-"); | |
printf("+"); | |
Goto(6+sg3,9+sg4+1); | |
for(int i=0;i<sg-sg4;i++) printf("-"); | |
printf("+"); | |
sg4=sg; | |
} | |
Goto(5+sg3,9+sg); | |
printf("%c",by[now]); | |
} | |
} | |
else if(lo[nn]==','){ | |
Goto(7+sg3,0); | |
t2=clock(); | |
ti=ti+t2-t1; | |
printf("Waiting for read in No. %d\n",nn); | |
for(int i=1;i<nn;i++) printf("%c",lo[i]); | |
colset(12); | |
printf("%c",lo[nn]); | |
colset(15); | |
for(int i=nn+1;i<=q;i++) printf("%c",lo[i]); | |
printf("\n"); | |
char haha; | |
haha=getch(); | |
by[now]=(int)haha; | |
if(by[now]==13){ | |
Goto(1,10+sg2); | |
printf("--+"); | |
Goto(2,10+sg2); | |
printf("\\n|"); | |
Goto(3,10+sg2); | |
printf("--+"); | |
sg2+=2; | |
by[now]=10; | |
} | |
else{ | |
Goto(1,10+sg2); | |
printf("-+"); | |
Goto(2,10+sg2); | |
printf("%c|",haha); | |
Goto(3,10+sg2); | |
printf("-+"); | |
++sg2; | |
} | |
Goto(7+sg3,0); | |
printf(" \n"); | |
for(int i=1;i<=q;i++) printf(" "); | |
t1=clock(); | |
} | |
else if(lo[nn]=='['){ | |
int nnn=nn+1,no=1; | |
while(no!=0){ | |
if(lo[nnn]=='[') ++no; | |
if(lo[nnn]==']') --no; | |
++nnn; | |
} | |
while(by[now]!=0){ | |
sou1(nn+1,nnn-2); | |
++cs; | |
if(cs>1000000){ | |
Goto(7,0); | |
printf("\nRuntime Error: soo many loops or... more than 100,0000 times!\n"); | |
++ssc; | |
return; | |
} | |
} | |
nn=nnn-1; | |
} | |
++nn; | |
} | |
} | |
int K=0; | |
bool com(){ | |
now=1; | |
s=-1; | |
nnnn=0; | |
aaa=true; | |
return co(1,q); | |
} | |
void run(){ | |
memset(by,0,sizeof(by)); | |
system("cls"); | |
Goto(0,0); | |
mn=1; | |
s=-1; | |
ssc=0; | |
printf("\n+-----+ ++\n"); | |
printf("|Input| ||\n"); | |
printf("+-----+ ++\n"); | |
printf("+-----+ ++\n"); | |
printf("|Ouput| ||\n"); | |
printf("+-----+ ++"); | |
sg=0; | |
sg2=0; | |
sg3=0; | |
sg4=0; | |
cs=0; | |
ti=0; | |
t1=clock(); | |
sou1(1,q); | |
t2=clock(); | |
ti=ti+t2-t1; | |
Goto(0,0); | |
printf("Use %d ms to run...",ti); | |
Sleep(1000); | |
} | |
void bpt(){ | |
int qw=1; | |
colset(15);system("cls"); | |
printf("\n---------------------\n"); | |
int qwe=(q-1)/175+1; | |
Goto(3,0); | |
for(int i=0;i<qwe;i++){ | |
for(int j=1;j<=(i==qwe-1?(q-1)%175+1:175);j++){ | |
if(bp[i*175+j]) colset(10); | |
if(i*175+j==1) colset(12); | |
printf("%c",lo[i*175+j]); | |
colset(15); | |
} | |
} | |
printf("\n"); | |
printf(" +----+\n"); | |
printf(" | Up |\n"); | |
printf(" | W|\n"); | |
printf(" +----+\n"); | |
printf("+----++----++-----+\n"); | |
printf("|Left||Done||Right|\n"); | |
printf("| A|| \\n|| D|\n"); | |
printf("+----++----++-----+\n"); | |
printf("+----++----+\n"); | |
printf("|Quit||Down|\n"); | |
printf("| Q|| S|\n"); | |
printf("+----++----+\n"); | |
printf("\n---------------------\n"); | |
while(1){ | |
if(kbhit()){ | |
char hhhh=getch(); | |
if(hhhh=='A'||hhhh=='a'||hhhh=='D'||hhhh=='d' | |
||hhhh=='S'||hhhh=='s'||hhhh=='W'||hhhh=='w'){ | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(15); | |
if(bp[qw]) colset(10); | |
printf("%c",lo[qw]); | |
} | |
if(hhhh=='A'||hhhh=='a'){ | |
--qw; | |
if(qw<1) qw+=q; | |
while(lo[qw]=='['||lo[qw]==']'){ | |
--qw; | |
if(qw<0) qw+=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
else if(hhhh=='D'||hhhh=='d'){ | |
++qw; | |
if(qw>q) qw-=q; | |
while(lo[qw]=='['||lo[qw]==']'){ | |
++qw; | |
if(qw>q) qw-=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
else if(hhhh=='w'||hhhh=='W'){ | |
qw-=175; | |
if(qw<1){ | |
while(qw<1) qw+=175; | |
} | |
while(lo[qw]=='['||lo[qw]==']'){ | |
++qw; | |
if(qw>q) qw-=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
else if(hhhh=='s'||hhhh=='S'){ | |
qw+=175; | |
if(qw>q){ | |
while(qw>q) qw-=175; | |
} | |
while(lo[qw]=='['||lo[qw]==']'){ | |
++qw; | |
if(qw>q) qw-=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
else if(hhhh==13){ | |
bp[qw]=!bp[qw]; | |
Goto(0,0); | |
colset(12); | |
if(bp[qw]) printf("Now there is a breakpoint."); | |
else printf("Now there is not a breakpoint."); | |
printf("Press or click to continue..."); | |
while(1){ | |
if(kbhit()||KEY_DOWN(MOUSE_MOVED)) return; | |
} | |
break; | |
} | |
if(hhhh=='Q'||hhhh=='q') break; | |
} | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
Sleep(100); | |
got(); | |
if((pt.y>0+(4+(q-1)/175)*16&&pt.y<64+(4+(q-1)/175)*16&&pt.x>48&&pt.x<96) | |
||(pt.y>64+(4+(q-1)/175)*16&&pt.y<128+(4+(q-1)/175)*16&&pt.x>0&&pt.x<48) | |
||(pt.y>64+(4+(q-1)/175)*16&&pt.y<128+(4+(q-1)/175)*16&&pt.x>96&&pt.x<136) | |
||(pt.y>128+(4+(q-1)/175)*16&&pt.y<192+(4+(q-1)/175)*16&&pt.x>48&&pt.x<96)){ | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(15); | |
if(bp[qw]) colset(10); | |
printf("%c",lo[qw]); | |
} | |
if(pt.y>0+(4+(q-1)/175)*16&&pt.y<64+(4+(q-1)/175)*16&&pt.x>48&&pt.x<96){ | |
qw-=175; | |
if(qw<1){ | |
while(qw<1) qw+=175; | |
} | |
while(lo[qw]=='['||lo[qw]==']'){ | |
++qw; | |
if(qw>q) qw-=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
if(pt.y>64+(4+(q-1)/175)*16&&pt.y<128+(4+(q-1)/175)*16&&pt.x>0&&pt.x<48){ | |
--qw; | |
if(qw<1) qw+=q; | |
while(lo[qw]=='['||lo[qw]==']'){ | |
--qw; | |
if(qw<0) qw+=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
if(pt.y>64+(4+(q-1)/175)*16&&pt.y<128+(4+(q-1)/175)*16&&pt.x>48&&pt.x<96){ | |
bp[qw]=!bp[qw]; | |
Goto(0,0); | |
colset(12); | |
if(bp[qw]) printf("Now there is a breakpoint."); | |
else printf("Now there is not a breakpoint."); | |
printf("Press or click to continue..."); | |
if(kbhit()||KEY_DOWN(MOUSE_MOVED)) return; | |
break; | |
} | |
if(pt.y>64+(4+(q-1)/175)*16&&pt.y<128+(4+(q-1)/175)*16&&pt.x>96&&pt.x<136){ | |
++qw; | |
if(qw>q) qw-=q; | |
while(lo[qw]=='['||lo[qw]==']'){ | |
++qw; | |
if(qw>q) qw-=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
if(pt.y>128+(4+(q-1)/175)*16&&pt.y<192+(4+(q-1)/175)*16&&pt.x>48&&pt.x<96){ | |
qw+=175; | |
if(qw>q){ | |
while(qw>q) qw-=175; | |
} | |
while(lo[qw]=='['||lo[qw]==']'){ | |
++qw; | |
if(qw>q) qw-=q; | |
} | |
Goto((qw-1)/175+3,(qw-1)%175); | |
colset(12); | |
printf("%c",lo[qw]); | |
} | |
if(pt.y>128+(4+(q-1)/175)*16&&pt.y<192+(4+(q-1)/175)*16&&pt.x>0&&pt.x<48) return; | |
} | |
} | |
colset(15);system("cls"); | |
} | |
bool r; | |
char haha; | |
void mdf(){ | |
colset(15);system("cls"); | |
colset(15); | |
printf("+----+\n"); | |
printf("|Done|\n"); | |
printf("| D|\n"); | |
printf("+----+\n"); | |
printf("Put the code there...\n"); | |
printf("Input D/d or press to select\n"); | |
printf("Because of some reason , we will change it to 1 line...\n"); | |
memset(lo,0,sizeof(lo)); | |
q=0; | |
while(1){ | |
if(kbhit()){ | |
haha=getch(); | |
if(haha=='D'||haha=='d') return; | |
if(haha==13) haha=10; | |
if(haha==8){ | |
if(q!=0) --q; | |
Goto(7+q/175,q%175); | |
printf(" "); | |
} | |
else if(haha==10||haha==32||haha==9){;} | |
else{ | |
lo[++q]=haha; | |
Goto(7+(q-1)/175,(q-1)%175); | |
printf("%c",haha); | |
} | |
} | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
got(); | |
if(pt.y>0&&pt.y<64&&pt.x>0&&pt.x<48) return; | |
} | |
} | |
} | |
int mnn,zz,zz2,uu; | |
bool aaaa; | |
void im(int be,int en){ | |
int nn=be; | |
int su=(q-1)/175+1; | |
while(nn<=en&&aaaa){ | |
got(); | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
if(pt.y>32&&pt.y<48){ | |
colset(15); | |
Goto(1,2); | |
printf("Pause..."); | |
while(KEY_DOWN(MOUSE_MOVED)){ | |
Sleep(50); | |
got(); | |
if(pt.x<0) pt.x=0; | |
if(pt.x>790) pt.x=790; | |
Goto(2,uu/5-2); | |
printf("---"); | |
Goto(2,99); | |
printf(" "); | |
Goto(2,pt.x/8); | |
printf("■"); | |
uu=pt.x/16*10+10; | |
Goto(0,8); | |
printf("%3d",uu); | |
} | |
Goto(1,2); | |
printf(" "); | |
} | |
if(pt.y>0&&pt.y<64&&pt.x>808&&pt.x<856) return; | |
} | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha==9){ | |
aaaa=false; | |
return; | |
} | |
if(haha==-32){ | |
haha=getch(); | |
colset(15); | |
Goto(2,uu/5-2); | |
printf("---"); | |
Goto(2,99); | |
printf(" "); | |
if(haha==75) uu=uu-10; | |
if(haha==77) uu=uu+10; | |
if(uu<10) uu=10; | |
if(uu>500) uu=500; | |
Goto(2,uu/5-2); | |
printf("■"); | |
Goto(0,8); | |
printf("%3d",uu); | |
colset(12); | |
} | |
} | |
if(zz!=now){ | |
colset(11); | |
Goto(4*(zz/34)+9+su,5*(zz%34)+1); | |
printf(" "); | |
zz=now; | |
Goto(4*(now/34)+9+su,5*(now%34)+1); | |
printf("^^^"); | |
colset(15); | |
} | |
Goto((nn-1)/175+6,(nn-1)%175); | |
colset(12); | |
printf("%c",lo[nn]); | |
colset(11); | |
if(zz2!=nn){ | |
Goto((zz2-1)/175+6,(zz2-1)%175); | |
colset(11); | |
printf("%c",lo[zz2]); | |
} | |
zz2=nn; | |
if(lo[nn]=='<'){ | |
colset(11); | |
Goto(4*(now/34)+9+su,5*(now%34)+1); | |
printf(" "); | |
--now; | |
Goto(4*(now/34)+9+su,5*(now%34)+1); | |
printf("^^^"); | |
zz=now; | |
colset(15); | |
} | |
else if(lo[nn]=='>'){ | |
colset(11); | |
Goto(4*(now/34)+9+su,5*(now%34)+1); | |
printf(" "); | |
++now; | |
Goto(4*(now/34)+9+su,5*(now%34)+1); | |
printf("^^^"); | |
colset(15); | |
if(mnn<now){ | |
mnn=now; | |
colset(15-now%8); | |
Goto(4*(now/34)+6+su,5*(now%34)); | |
printf("+---+"); | |
Goto(4*(now/34)+7+su,5*(now%34)); | |
printf("| 0|"); | |
Goto(4*(now/34)+8+su,5*(now%34)); | |
printf("+---+"); | |
} | |
zz=now; | |
} | |
else if(lo[nn]=='+'){ | |
++by[now]; | |
while(by[now]<0) by[now]+=128; | |
while(by[now]>127) by[now]-=128; | |
Goto(4*(now/34)+7+su,5*(now%34)+1); | |
colset(15-now%8); | |
printf("%3d",by[now]); | |
} | |
else if(lo[nn]=='-'){ | |
--by[now]; | |
while(by[now]<0) by[now]+=128; | |
while(by[now]>127) by[now]-=128; | |
Goto(4*(now/34)+7+su,5*(now%34)+1); | |
colset(15-now%8); | |
printf("%3d",by[now]); | |
} | |
else if(lo[nn]=='.'){ | |
while(by[now]<0) by[now]+=128; | |
while(by[now]>127) by[now]-=128; | |
Goto(5,++s); | |
if(by[now]!=10) printf("%c",by[now]); | |
else{ | |
printf("\\n"); | |
++s; | |
} | |
} | |
else if(lo[nn]==','){ | |
Goto(4,0); | |
colset(12); | |
printf("Waiting for read"); | |
char haha; | |
while(1){ | |
got(); | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
if(pt.y>32&&pt.y<48){ | |
colset(15); | |
Goto(1,2); | |
printf("Pause..."); | |
while(KEY_DOWN(MOUSE_MOVED)){ | |
Sleep(50); | |
got(); | |
if(pt.x<0) pt.x=0; | |
if(pt.x>790) pt.x=790; | |
Goto(2,uu/5-2); | |
printf("---"); | |
Goto(2,99); | |
printf(" "); | |
Goto(2,pt.x/8); | |
printf("■"); | |
uu=pt.x/16*10+10; | |
Goto(0,8); | |
printf("%3d",uu); | |
} | |
Goto(1,2); | |
printf(" "); | |
colset(12); | |
} | |
if(pt.y>0&&pt.y<64&&pt.x>808&&pt.x<856) return; | |
} | |
if(kbhit()){ | |
haha=getch(); | |
if(haha==9){ | |
aaaa=false; | |
return; | |
} | |
else if(haha==-32){ | |
haha=getch(); | |
colset(15); | |
Goto(2,uu/5-2); | |
printf("---"); | |
Goto(2,99); | |
printf(" "); | |
if(haha==75) uu=uu-10; | |
if(haha==77) uu=uu+10; | |
if(uu<10) uu=10; | |
if(uu>500) uu=500; | |
Goto(2,uu/5-2); | |
printf("■"); | |
Goto(0,8); | |
printf("%3d",uu); | |
colset(12); | |
} | |
else{ | |
by[now]=(int)haha; | |
break; | |
} | |
} | |
} | |
if(by[now]==13) by[now]=10; | |
Goto(4,0); | |
printf(" "); | |
Goto(4*(now/34)+7+su,5*(now%34)+1); | |
colset(15-now%8); | |
printf("%3d",by[now]); | |
} | |
else if(lo[nn]=='['){ | |
int nnn=nn+1,no=1; | |
while(no!=0){ | |
if(lo[nnn]=='[') ++no; | |
if(lo[nnn]==']') --no; | |
++nnn; | |
} | |
while(by[now]!=0) im(nn+1,nnn-2); | |
nn=nnn-1; | |
} | |
++nn; | |
Sleep(uu); | |
} | |
} | |
void imt(){ | |
memset(by,0,sizeof(by)); | |
colset(15);system("cls"); | |
printf("You will use this when you use less memorys , ouput , code and time.\n"); | |
printf("Are you "); | |
colset(12); | |
printf("SURE"); | |
colset(15); | |
printf("?\n"); | |
printf("+---++--+\n"); | |
printf("|Yes||No|\n"); | |
printf("| Y|| N|\n"); | |
printf("+---++--+\n"); | |
char qwer; | |
do{ | |
if(kbhit()) qwer=getch(); | |
got(); | |
}while((qwer!='Y'&&qwer!='y'&&qwer!='N'&&qwer!='n') && !(KEY_DOWN(MOUSE_MOVED)&&pt.y>32&&pt.y<96&&pt.x>0&&pt.x<72)); | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
if(pt.x>40&&pt.x<72) return; | |
} | |
if(qwer=='N'||qwer=='n') return; | |
uu=100; | |
colset(15);system("cls"); | |
Goto(0,0); | |
printf("Speed : 100 ms +----+\n"); | |
printf("← → |Exit|\n"); | |
printf("------------------■------------------------------------------------------------------------------- | Tab|\n"); | |
printf(" +----+\n"); | |
mnn=0; | |
s=6; | |
now=0; | |
zz2=1; | |
int sua=(q-1)/175+1; | |
Goto(6+sua,0); | |
colset(15-now%8); | |
printf("+---+\n| 0|\n+---+\n ^^^ "); | |
zz=1; | |
Goto(5,0); | |
printf("Ouput:)"); | |
Goto(6,0); | |
uu=100; | |
for(int i=0;i<sua;i++){ | |
for(int j=0;j<(i==sua-1?(q-1)%175+1:175);j++){ | |
colset(11); | |
printf("%c",lo[i*175+j+1]); | |
} | |
} | |
colset(15); | |
aaaa=true; | |
im(1,q); | |
if(haha==9) return; | |
Goto(4,0); | |
printf("Press to continue..."); | |
getch(); | |
colset(15);system("cls"); | |
} | |
void hlp(){ | |
system("cls"); | |
printf("Brainfuck is a minimal computer language created by Urban Muller in 1993 \n"); | |
printf("> pointer plus one \n< pointer minus one \n+ pointer to byte plus one \n- pointer to byte minus one \n"); | |
printf(". Output pointer pointing unit content (ASCII code) \n, input content to pointer pointing unit (ASCII code) \n"); | |
printf("[ jumps back to the next instruction of the corresponding ] instruction if the cell value the pointer points to is zero \n"); | |
printf("] jumps forward to the corresponding [ next instruction of instruction if the cell value that the pointer points to is not zero.\n"); | |
printf("+-----+\n|Close|\n| C|\n+-----+"); | |
while(1){ | |
Sleep(50); got(); | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha=='C'||haha=='c') return; | |
} | |
if(KEY_DOWN(MOUSE_MOVED) && pt.y>=144 && pt.y<=208) | |
if(pt.x>=4 && pt.x<=56) return; | |
} | |
} | |
void imf(){ | |
colset(15);system("cls"); | |
printf("This is a Brainfuck Compile System\n"); | |
printf("Creater Imformatiom |Modifier Imformation\n"); | |
printf("Name:\n"); | |
printf("++++++++[->++++++++<]>+++ |+++++++++[->+++++++++<]>+\n"); | |
printf("++<]>+++.<.<++++++[->++++ |++++++++.++++++++.<++++[-\n"); | |
printf("+++[->+++<]>+.< |>++++<]>+++++.< \n"); | |
printf("Nickname:\n"); | |
printf("++++++++++[->++++++++++<] |++++++++[->++++++++<]>++.\n"); | |
printf(">++++++++++++++++.<+++[-> |<++++++[->++++++<]>++++++\n"); | |
printf("---<]>--.--.--.<+++[->+++ |+++.++++++++.<++++[->----\n"); | |
printf("<]>++++.<++++++++[->----- |<]>--.+++++++++.<+++++++[\n"); | |
printf("---<]>.--..+++++.< |->-------<]>------------.\n"); | |
printf(" |+.+.<\n"); | |
printf("-------------------------------------------------------\n"); | |
printf("+-----+\n"); | |
printf("|Close|\n"); | |
printf("| C|\n"); | |
printf("+-----+\n"); | |
while(1){ | |
Sleep(50);got(); | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha=='C'||haha=='c') break; | |
} | |
if(KEY_DOWN(MOUSE_MOVED) && pt.y>=224 && pt.y<=288) | |
if(pt.x>=4 && pt.x<=56) return; | |
} | |
getch(); | |
colset(15);system("cls"); | |
} | |
int main(){ | |
colset(15); | |
system("mode con cols=175 lines=50"); | |
Hide(); | |
r=false; | |
xr=false; | |
memset(sc,0,sizeof(sc)); | |
memset(by,0,sizeof(by)); | |
memset(lo,0,sizeof(lo)); | |
memset(bp,0,sizeof(bp)); | |
while(1){ | |
system("cls"); | |
// fstream out("testlib.txt",ios::app); | |
colset(15); | |
printf("|+-------+ +-----+ +----+|"); | |
printf("|+----------+ +----+|"); | |
if(!r) colset(8); | |
printf("|+---+ +----------+ +-----+|\n"); | |
colset(15); | |
printf("||Compile| |Write| |Edit||"); | |
printf("||Imfomation| |Help||"); | |
if(!r) colset(8); | |
printf("||Run| |Breakpoint| |Debug||\n"); | |
colset(15); | |
printf("|| F9| | W| | E||"); | |
printf("|| I| | H||"); | |
if(!r) colset(8); | |
printf("||F10| | B| | F5||\n"); | |
colset(15); | |
printf("|+-------+ +-----+ +----+|"); | |
printf("|+----------+ +----+|"); | |
if(!r) colset(8); | |
printf("|+---+ +----------+ +-----+|\n"); | |
colset(15); | |
printf("+----------Coding----------+"); | |
printf("+-------About--------+"); | |
if(!r) colset(8); | |
printf("+-----------Running----------+\n"); | |
colset(15); | |
while(kbhit()) haha=getch(); | |
while(1){ | |
Sleep(50); got(); | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha==0){ | |
char haha2=getch(); | |
if(haha2==63){ | |
if(r){ | |
imt(); | |
break; | |
} | |
else{ | |
Goto(5,0); | |
colset(12); | |
printf("Warning : Compile First"); | |
colset(15); | |
} | |
} | |
if(haha2==67){ | |
system("cls"); | |
lk=1; | |
printf("-----------------------------------\n"); | |
r=com(); | |
if(r){ | |
printf("Compile success!\n"); | |
printf("-----------------------------------\n"); | |
lk+=2; | |
} | |
printf("+-----+\n"); | |
printf("|Close|\n"); | |
printf("| C|\n"); | |
printf("+-----+\n"); | |
if(lk>45) lk=45; | |
while(1){ | |
Sleep(50);got(); | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha=='C'||haha=='c') break; | |
} | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
if(pt.y>lk*16&&pt.y<lk*16+64&&pt.x>0&&pt.x<112) break; | |
} | |
} | |
break; | |
} | |
if(haha2==68){ | |
if(r){ | |
run(); | |
break; | |
} | |
else{ | |
Goto(5,0); | |
colset(12); | |
printf("Warning : Compile First"); | |
colset(15); | |
} | |
} | |
} | |
if(haha=='W'||haha=='w'){ | |
mdf(); | |
r=false; | |
memset(bp,0,sizeof(bp)); | |
break; | |
} | |
if(haha=='E'||haha=='e') return 0; | |
if(haha=='I'||haha=='i'){ | |
imf(); | |
break; | |
} | |
if(haha=='H'||haha=='h'){ | |
hlp(); | |
break; | |
} | |
if(haha=='B'||haha=='b'){ | |
if(r){ | |
bpt(); | |
break; | |
} | |
else{ | |
Goto(5,0); | |
colset(12); | |
printf("Warning : Compile First"); | |
colset(15); | |
} | |
} | |
} | |
if(KEY_DOWN(MOUSE_MOVED)&&pan(pt.y,pt.x)){ | |
if(pan(pt.y,pt.x)==1){ | |
system("cls"); | |
lk=1; | |
printf("-----------------------------------\n"); | |
r=com(); | |
if(r){ | |
printf("Compile succeed!\n"); | |
printf("-----------------------------------\n"); | |
lk+=2; | |
} | |
printf("+-----+\n"); | |
printf("|Close|\n"); | |
printf("| C|\n"); | |
printf("+-----+\n"); | |
if(lk>45) lk=45; | |
while(1){ | |
Sleep(50);got(); | |
if(kbhit()){ | |
char haha=getch(); | |
if(haha=='C'||haha=='c') break; | |
} | |
if(KEY_DOWN(MOUSE_MOVED)){ | |
if(pt.y>lk*16&&pt.y<lk*16+64&&pt.x>0&&pt.x<56) break; | |
} | |
} | |
break; | |
} | |
if(pan(pt.y,pt.x)==2){ | |
mdf(); | |
r=false; | |
break; | |
} | |
if(pan(pt.y,pt.x)==3) return 0; | |
if(pan(pt.y,pt.x)==4){ | |
imf(); | |
break; | |
} | |
if(pan(pt.y,pt.x)==5){ | |
hlp(); | |
break; | |
} | |
if(pan(pt.y,pt.x)==6){ | |
if(!r){ | |
Goto(5,0); | |
colset(12); | |
printf("Warning : Compile First"); | |
colset(15); | |
} | |
else{ | |
run(); | |
break; | |
} | |
} | |
if(pan(pt.y,pt.x)==7){ | |
if(!r){ | |
Goto(5,0); | |
colset(12); | |
printf("Warning : Compile First"); | |
colset(15); | |
} | |
else{ | |
bpt(); | |
break; | |
} | |
} | |
if(pan(pt.y,pt.x)==8){ | |
if(!r){ | |
Goto(5,0); | |
colset(12); | |
printf("Warning : Compile First"); | |
colset(15); | |
} | |
else{ | |
imt(); | |
break; | |
} | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment