text: #ifndef _DVEC_H
  #define _DVEC_H
  
  #include "complex.h"
  #include "grid.h"
  
  
  /* Dvec flags. */
  enum dvec_flags {
    VF_REAL = (1 << 0),		/* The data is real. */
    VF_COMPLEX = (1 << 1),	/* The data is complex. */
    VF_ACCUM = (1 << 2),		/* writedata should save this vector. */
    VF_PLOT = (1 << 3),		/* writedata should incrementally plot it. */
    VF_PRINT = (1 << 4),		/* writedata should print this vector. */
    VF_MINGIVEN = (1 << 5),	/* The v_minsignal value is valid. */
    VF_MAXGIVEN = (1 << 6),	/* The v_maxsignal value is valid. */
    VF_PERMANENT = (1 << 7)	/* Don't garbage collect this vector. */
  };
  
  
  /* Plot types. */
  typedef enum {
      PLOT_LIN, PLOT_COMB, PLOT_POINT
  } PLOTTYPE;
  
  
  /* A (possibly multi-dimensional) data vector.  The data is represented
   * internally by a 1-d array.  The number of dimensions and the size
   * of each dimension is recorded, along with v_length, the total size of
   * the array.  If the dimensionality is 0 or 1, v_length is significant
   * instead of v_numdims and v_dims, and the vector is handled in the old
   * manner.
   */
  
  #define MAXDIMS 8
  
  struct dvec {
      char *v_name;		/* Same as so_vname. */
      int v_type;			/* Same as so_vtype. */
      short v_flags;		/* Flags (a combination of VF_*). */
      double *v_realdata;		/* Real data. */
      complex *v_compdata;	/* Complex data. */
      double v_minsignal;		/* Minimum value to plot. */
      double v_maxsignal;		/* Maximum value to plot. */
      GRIDTYPE v_gridtype;	/* One of GRID_*. */
      PLOTTYPE v_plottype;	/* One of PLOT_*. */
      int v_length;		/* Length of the vector. */
      int v_rlength;		/* How much space we really have. */
      int v_outindex;		/* Index if writedata is building the
  				   vector. */
      int v_linestyle;		/* What line style we are using. */
      int v_color;		/* What color we are using. */
      char *v_defcolor;		/* The name of a color to use. */
      int v_numdims;		/* How many dims -- 0 = scalar (len = 1). */
      int v_dims[MAXDIMS];	/* The actual size in each dimension. */
      struct plot *v_plot;	/* The plot structure (if it has one). */
      struct dvec *v_next;	/* Link for list of plot vectors. */
      struct dvec *v_link2;	/* Extra link for things like print. */
      struct dvec *v_scale;	/* If this has a non-standard scale... */
  } ;
  
  #define isreal(v)   ((v)->v_flags & VF_REAL)
  #define iscomplex(v)    ((v)->v_flags & VF_COMPLEX)
  
  /* list of data vectors being displayed */
  struct dveclist {
      struct dvec *vector;
      struct dveclist *next;
  };
  
  #endif
  