
/************************************************************************/
/*** 								      ***/
/***				param.h				      ***/
/***  Header file for use with r.param.scale			      ***/
/***  Jo Wood, ASSIST, Dept of Geography, University of Leicester     ***/
/***  V1.0  - 7th February, 1993				      ***/
/***								      ***/
/************************************************************************/

#include <grass/gis.h>
#include <grass/raster.h>
				/* programs. It sets up the necessary   */
				/* prototypes for GRASS library calls.  */
#include <math.h>

#define EDGE ((wsize-1)/2)	/* Number of rows/cols that make up the */
				/* 'blank' edge around raster.          */
#define MAX_WSIZE 499		/* Maximum dimensions of window.        */
				/* Some useful labels.                  */

#define RAD2DEG M_R2D
#define DEG2RAD M_D2R

#define TINY 1.0e-20

/* Bug? start with 1 as G_set_cats() doesn't accept 0 category */
#define FLAT    1
#define PIT     2
#define CHANNEL 3
#define PASS    4
#define RIDGE   5
#define PEAK    6

#define NUM_CATS 7

#define ELEV    1
#define SLOPE   2
#define ASPECT  3
#define PROFC   4
#define PLANC   5
#define LONGC   6
#define CROSC   7
#define MINIC   8
#define MAXIC   9
#define FEATURE 10

/* The six quadratic coefficients are stored in the array coeff */

#define C_A coeff[0]
#define C_B coeff[1]
#define C_C coeff[2]
#define C_D coeff[3]
#define C_E coeff[4]
#define C_F coeff[5]

/* ------ Declare functions ----- */

DCELL param(int ptype, double *coeff);	/* Calculates terrain parameters. */
void interface(int argc, char **argv);
void open_files(void);
void process(void);
void close_down(void);
void write_cols(void);
void write_cats(void);
void find_normal(double **normal,	/* Matrix of cross-products.    */
		 double *w);	/* Weights matrix.              */
void find_obs(DCELL * z,	/* Local window of elevs.       */
	      double *obs,	/* Observed column vector.      */
	      double *w);	/* Weighting matrix.            */
void find_weight(double *weight_ptr);
DCELL feature(double *coeff);	/* Set of six quadratic coefficients.    */

/* ------ Global variables ------ */

extern const char
 *rast_in_name,			/* Name of the raster file to process.  */
 *rast_out_name;		/* Name of the raster output file.      */
extern int
  constrained;			/* Flag that forces quadtratic through  */

				/* the central cell of the window.      */

extern int
  fd_in,			/* File descriptor for input and        */
  fd_out,			/* output raster files.                 */
  wsize,			/* Size of local processing window.     */
  mparam;			/* Morphometric parameter to calculate. */


extern double
  resoln,			/* Planimetric resolution.              */
  exponent,			/* Distance weighting exponent.         */
  zscale,			/* Vertical scaling factor.             */
  slope_tol,			/* Vertical tolerences for surface      */
  curve_tol;			/* feature identification.              */
