
#define plot_g_type  void (*)(double x,double y,int w)
#define plot_g_t2  void (*)(double x,double y,double a,int w)
#define and &&


static void curve2_plot_g(double x,double y,int w){}
void *curve_pf=&curve2_plot_g,*curve_pf_stack;char curve_pf_type=1,curve_pf_type_stack
char use_zoom1=0;double zoom=1,zoom1
#define push_cpf(fp) curve_pf_stack=curve_pf;curve_pf=fp ;curve_pf_type_stack=curve_pf_type;curve_pf_type=1
#define push_cpf_t2() curve_pf_type=2
#define pull_cpf() curve_pf=curve_pf_stack ;curve_pf_type=curve_pf_type_stack
void plot(num x,num y,num w)
	//printf("%f %f\n",x,y)
	if(curve_pf_type==2)(*((plot_g_t2)curve_pf))(x,y,curve2_rot(),w)
	else (*((plot_g_type)curve_pf))(x,y,w)

char curve_tn=2,curve_tn_stack
#define push_ctn(tn) curve_tn_stack=curve_tn;curve_tn=tn
#define pull_ctn() curve_tn=curve_tn_stack
#define curve_draw() curve_draw3()
void curve_draw1()
	static num i ;i=0
	while(i<=0.9*1)
		static pnt b
		b=curve2(i)
		plot(b[0],b[1],curve_tn)
		i+=0.01
/*void curve_draw1()
	static num i ;i=0
	static pnt b
	#include "curve_draw1.c"
*///yes 'b=curve2(i) ;plot(b[0],b[1],curve_tn) ;i+=0.01;'|head -n 90 >curve_draw1.c
void curve_draw2()
	static num i,j ;i=0
	static pnt b
	static num p[2]
	static num cx,cy
	b=curve2(i) ;p[0]=b[0] ;p[1]=b[1] ;plot(b[0],b[1],curve_tn)
	j=0.01
	while(i<0.9)
		while(1)
			b=curve2(i+j)
			//if((cx=floor(fabs(b[0]-p[0])*zoom))<=1 and (cy=floor(fabs(b[1]-p[1])*zoom))<=1) break
			cx=fabs(floor(b[0]*zoom)-floor(p[0]*zoom))
			cy=fabs(floor(b[1]*zoom)-floor(p[1]*zoom))
			if(cx<=1 and cy<=1) break
			if(j<=0.0001) { cx=1;break;}
			j/=2
		i+=j
		if(1||cx||cy)
			plot(b[0],b[1],curve_tn)
			p[0]=b[0] ;p[1]=b[1]
			//printf("dbg i %f %f %f j %f %f %f\n",b[0],b[1],i,j,cx,cy)
		else j*=2
void curve_draw3()
	double fzoom=zoom;if(use_zoom1)fzoom*=zoom1
	static num i,j ;i=0
	static pnt b
	static num p[2],rem[2];char rem_f=0
	static num cx,cy,cx2,cy2,cx3,cy3
	#define acx fabs(cx)
	#define acy fabs(cy)
	#define acx2 fabs(cx2)
	#define acy2 fabs(cy2)
	#define acx3 fabs(cx3)
	#define acy3 fabs(cy3)
	b=curve2(i) ;p[0]=b[0] ;p[1]=b[1] ;plot(b[0],b[1],curve_tn)
	j=0.01
	while(i<0.9)
		while(1)
			b=curve2(i+j)
			//if((cx=floor(fabs(b[0]-p[0])*fzoom))<=1 and (cy=floor(fabs(b[1]-p[1])*fzoom))<=1) break
			cx=floor(b[0]*fzoom)-floor(p[0]*fzoom)
			cy=floor(b[1]*fzoom)-floor(p[1]*fzoom)
			if(acx<=1 and acy<=1) break
			if(j<=0.0001) { cx=2;break;}
			j/=2
		i+=j
		if(i>0.9)
			i=0.9 ;b=curve2(i)
			cx=floor(b[0]*fzoom)-floor(p[0]*fzoom)
			cy=floor(b[1]*fzoom)-floor(p[1]*fzoom)
		if(acx||acy)
			cx3=cx+cx2 ;cy3=cy+cy2
			if(rem_f&&acx3<=1&&acy3<=1)
				rem_f=0;cx=cx3;cy=cy3
			else if(rem_f)
				rem_f=0;plot(rem[0],rem[1],curve_tn)
			if(acx<=1&&acy<=1)
				rem_f=1;rem[0]=b[0];rem[1]=b[1] ;cx2=cx;cy2=cy
			else
				plot(b[0],b[1],curve_tn)
			p[0]=b[0] ;p[1]=b[1]
			//printf("dbg i %f %f %f j %f %f %f\n",b[0],b[1],i,j,cx,cy)
		else j*=2
	if(rem_f)
		rem_f=0;plot(rem[0],rem[1],curve_tn)
	#undef acx 
	#undef acy 
	#undef acx2 
	#undef acy2 
	#undef acx3 
	#undef acy3 
//
#undef and
