V10/cmd/view2d/slice.c

Compare this file to the similar file:
Show the results in this format:

/*  convert from view2d to anim format by slicing in x or y  */

#include <stdio.h>
#include "view2d.h"
char *progname;

short timewarp;
double ts, te;
extern Rd2d rd;
int verbose;

typedef struct Frame {
  double time;
  short *p;
} Frame;
Frame frame;
Frame *here;

short nx, ny;  /* input grid */

main(argc, argv)
  int argc;
  char **argv;
{
  int i, j;
  int fd;
  int dir = -1;  /* 1=x, 0=y */
  double cut, atof();
  char *Malloc();

  timewarp = 0;
  verbose = 0;
  progname = argv[0];
  here = &frame;

  for(argc--, argv++; *argv; argv++){
    if(**argv == '-' ){
      switch(argv[0][1]) {
      case 'v':
        verbose++;
        break;
      case 'x':
        dir=1;
	cut=atof(&(argv[0][2]));
        break;
      case 'y':
        dir=0;
	cut=atof(&(argv[0][2]));
        break;
      }
    }else{
      if(fd) error("can only read one file");
      fd = Open(*argv,0);
    }
  }
  if(dir<0) error("must supply -x or -y cutpoint");

  rd2dh(fd,&nx,&ny);
  if((timewarp>0)&&(verbose))
     fprintf(stderr,"timewarp=%d ts=%g te=%g\n",timewarp,ts,te);
  i = nx*ny*sizeof(short);
  here->p = (short *)Malloc(i);

  while(rd2di(&here->time,here->p)){
    wrframe(here->time,here->p,dir,cut);
  }
  exit(0);
}


wrframe(t,p,dir,cut)
  double t;
  short *p;
  int dir;
  double cut;
{
  float *b;
  register short *q;
  int i, j, n, s;
  double t0, t1, v2, out, pow2();
  v2 = pow2(rd.v);
  out = (-BIG-rd.u)*v2;
  n = dir ? ny: nx;
  s = dir ? nx: 1;
  if(dir){ q = p +    (int)(cut*(nx-1));
    }else{ q = p + nx*(int)(cut*(ny-1));}
  if(verbose) fprintf(stderr,"time=%g\n",t,j);
  t0 = out;
  for(i=0; i<n; i++){
	t1 = (*q-rd.u)*v2;
	q += s;
	if((t1>out)&&(t0>out))
		printf("L%d: line %d %f %d %f\n",i-1,i-1,t0,i,t1);
	t0 = t1;
  }
  printf("click time\n");
}