typedef struct
	{
	double x, y, z;     /* the coordinates */
	double l, m, n;     /* the ray direction cosines */
	double ln, mn, nn;  /* the surface normals */
   double path;        /* the optical path change */
   double sag1, sag2;  /* the sag and alternate hyperhemispheric sag */
	double index, dndx, dndy, dndz; /* for GRIN surfaces only */
   double rel_surf_tran; /* for relative surface transmission data, if any */
   double udreserved1, udreserved2, udreserved3, udreserved4; /* for future expansion */
   char string[20];    /* for returning string data */
	}USER_DATA;

typedef struct
	{
   int type, numb;     /* the requested data type and number */
   int surf, wave;     /* the surface number and wavelength number */
   double wavelength, pwavelength;      /* the wavelength and primary wavelength */
   double n1, n2;      /* the index before and after */
   double cv, thic, sdia, k; /* the curvature, thickness, semi-diameter, and conic */
   double param[9];    /* the parameters 1-8 */
   double fdreserved1, fdreserved2, fdreserved3, fdreserved4; /* for future expansion */
   double xdata[201];  /* the extra data 1-200 */
   char glass[21];     /* the glass name on the surface */
	}FIXED_DATA;

/*
Changes in the structure are as follows:

fdreserved1 now passes the unit flag; 0 for mm, 1 for cm, 2 for in, 3 for meters

fdreserved2 and fdreserved3 pass the absolute index of refraction before and after the surface,
which may be used for diffractive surfaces. If the lens file being traced is NOT using absolute
index then the relative index will be passed in these values instead.

*/
