generated html version of bfim.cHOME
#include "stdio.h"
#include "unistd.h"
#define loop for(;;)
#define ei else if
int main(){
int c=0,h=0,m=0,v;
char *code,*codeend,*data,*datatop,*ip,*dp;
char **stack,**sp;
data=code=(char*)&c-1000;
loop{
c=0;
v=read(0,&c,1);
if(v==0)c='!';
if(c=='[')h++;
if(c==']')h--;
if(h>m)m=h;
*data=c;
data--;
if(c=='!')break;
}
codeend=data;
data-=sizeof(char*);
stack=(char**)data;
while(m>-2){
*(char**)data=0;
data-=sizeof(char*);
m--;
}
ip=code;
datatop=dp=data;
sp=stack;
*dp=0;
h=0;
//fprintf(stderr,"%p %p %p\n",code,data,stack);
while(ip>codeend&&ip<=code){
if(*ip=='-'){--*dp;
}ei(*ip=='+'){++*dp;
}ei(*ip=='>'){if(dp>datatop)dp--;
else{dp--;datatop--;*dp=0;}
}ei(*ip=='<'){if(dp<data)dp++;
}ei(*ip=='.'){write(1,dp,1);
}ei(*ip==','){read(0,dp,1);
}ei(*ip=='['){
if(*dp==0){
ip--;
c=1;
while(c!=0){
if(*ip=='[')c++;
if(*ip==']')c--;
ip--;
}
ip++;
}else{
*sp=ip;
sp--;
}
}ei(*ip==']'){
sp++;
if(*dp!=0){
ip=*sp;
ip++;
}
}
ip--;
}
}