void left1(int a,int b,int c,int d,int j) { int i,e,g,h,f; for(i=0;i<j;i++) { line(a,b,c-20,d); line(a-10,b+10,c-20,d+10); line(a-10,b+20,c-10,d+20); line(a,b+30,c,d+10); line(a+10,b+20,c,d); g=a; h=b+30; e=c; f=d+10; a=a-10; b=b+20; c=c-10; d=d+20; if(g>=260 && g<=380 && h==290 && e>=270 && e<=390 && f==280) { right1(g,h,e,f,j-1); } } }
int main (int argc, char *argv[]) { bool left; int ir, nr, n1,n2,n3, m1, m2, m3, n12, nw, nj1, nj2, i3; float *u1, *u2, *p; sf_file in, out, dip; allpass ap; sf_init(argc,argv); in = sf_input ("in"); dip = sf_input ("dip"); out = sf_output ("out"); if (SF_FLOAT != sf_gettype(in) || SF_FLOAT != sf_gettype(dip)) sf_error("Need float type"); if (!sf_histint(in,"n1",&n1)) sf_error("Need n1= in input"); if (!sf_histint(in,"n2",&n2)) n2=1; if (!sf_histint(in,"n3",&n3)) n3=1; n12 = n1*n2; nr = sf_leftsize(in,3); if (!sf_getbool("left",&left)) left=true; /* if using left or right side of PWD */ if (!sf_histint(dip,"n1",&m1) || m1 != n1) sf_error("Need n1=%d in dip",n1); if (1 != n2 && (!sf_histint(dip,"n2",&m2) || m2 != n2)) sf_error("Need n2=%d in dip",n2); if (1 != n3 && (!sf_histint(dip,"n3",&m3) || m3 != n3)) sf_error("Need n3=%d in dip",n3); if (!sf_getint("order",&nw)) nw=1; /* accuracy */ if (!sf_getint("nj1",&nj1)) nj1=1; /* in-line aliasing */ if (!sf_getint("nj2",&nj2)) nj2=1; /* cross-line aliasing */ for (ir=0; ir < nr; ir++) { u1 = sf_floatalloc(n12); u2 = sf_floatalloc(n12); p = sf_floatalloc(n12); for (i3=0; i3 < n3; i3++) { /* read data */ sf_floatread(u1,n12,in); /* read t-x dip */ sf_floatread(p,n12,dip); ap = allpass_init (nw,nj1,n1,n2,1,p); /* apply */ if (left) { left1(false, false, ap, u1, u2); } else { right1(false, false, ap, u1, u2); } /* write t-x destruction */ sf_floatwrite(u2,n12,out); } free(u1); free(u2); free(p); } exit (0); }