V10/cmd/view2d/moviefil.c

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

/* From alice!doyle Fri Feb  1 17:19 EST 1985 */
/*  modified slightly by ehg */
/*  based on mvefil.f by rksmith */
#include <stdio.h>
#include <math.h>
#include "view2d.h"

#define max(a,b) 		(a<b ? b : a)
#define min(a,b) 		(a>b ? b : a)
#define abs(x)			(x>=0 ? x : -(x))
#define inf 1.e30

moviefil(fd, nx, ny, time, outside, fa)
int fd, nx, ny;
float time, outside, fa[];
{
  int i;
  int npts;
  float f, v2;
  short u, v;
  float fmin, fmax, grange, gmax, gmin;
  double tim;
  short *data, *d;
  char *malloc();

    tim = time;
    npts = nx*ny;
    data = (short *)malloc((unsigned)npts*sizeof(short));
    if(data==NULL){fprintf(stderr,"out of memory!\n");exit(9);}

    fmin = inf;
    fmax = -inf;
    for (i=0;i<npts;i++) {
      if(fa[i]>outside){
    	fmin = min(fa[i], fmin);
    	fmax = max(fa[i], fmax);
      }
    }
	
    gmax = (fmax<0)?0:fmax;
    gmin = (fmin>0)?0:fmin;
    grange = gmax - gmin;
    if(grange<=0){ v = 0; u=0; }
    else{
      f = 2*BIG-2;
      v = log(grange)/log(2.)-14;
      v2 = pow(2.,(double)v);
      while( 2*grange < f*v2 ){ v--; v2 /= 2; }
      f = -(gmin+gmax)/(2*v2);
      u = f;
      if( (f<-BIG)||(f>BIG) ){
        fprintf(stderr,"fmin=%g fmax=%g u=%d v=%d\n",fmin,fmax,u,v);
        fprintf(stderr,"u out of bounds f=%g",f);
	exit(1);
      }
    }

    for(d = data, i = 0; i < npts; i++, d++){
      if(fa[i]<=outside){
        *d = -BIG-1;  /* out of bounds */
      }else{
        *d = u + fa[i]/v2;
      }
    }
    view2d(fd,nx,ny,tim,u,v,0,0,0,data);
    free((char *)data);
}


fmovie_(nx,ny,time,outside,f)
  int *nx, *ny;
  float *time, *outside, *f;
{
  moviefil(1,*nx,*ny,*time,*outside,f);
}