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--;
	}
}