123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644 |
- /*
- *****************************************************************************
- *
- * MODULE: Grass Include Files
- * AUTHOR(S): Original author unknown - probably CERL
- * Justin Hickey - Thailand - jhickey@hpcc.nectec.or.th
- * PURPOSE: This file contains definitions of variables and data types
- * for use with most, if not all, Grass programs. This file is
- * usually included in every Grass program.
- * COPYRIGHT: (C) 2000 by the GRASS Development Team
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
- #ifndef GRASS_GIS_H
- #define GRASS_GIS_H
- /*============================= Include Files ==============================*/
- /* System include files */
- #include <stdio.h>
- #include <stdarg.h>
- /* Grass and local include files */
- #include <grass/config.h>
- #include <grass/datetime.h>
- /*=========================== Constants/Defines ============================*/
- #if !defined __GNUC__ || __GNUC__ < 2
- #undef __attribute__
- #define __attribute__(x)
- #endif
- static const char *GRASS_copyright __attribute__ ((unused))
- = "GRASS GNU GPL licensed Software";
- #define GIS_H_VERSION "$Revision$"
- #define G_gisinit(pgm) G__gisinit(GIS_H_VERSION, (pgm))
- #define G_no_gisinit() G__no_gisinit(GIS_H_VERSION)
- /* Define TRUE and FALSE for boolean comparisons */
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
- #define MAXEDLINES 50
- #define RECORD_LEN 80
- #define NEWLINE '\n'
- #define RECLASS_TABLE 1
- #define RECLASS_RULES 2
- #define RECLASS_SCALE 3
- #define METERS 1
- #define FEET 2
- #define DEGREES 3
- #define CELL_TYPE 0
- #define FCELL_TYPE 1
- #define DCELL_TYPE 2
- #define PROJECTION_XY 0
- #define PROJECTION_UTM 1
- #define PROJECTION_SP 2
- #define PROJECTION_LL 3
- #define PROJECTION_OTHER 99
- #define PROJECTION_FILE "PROJ_INFO"
- #define UNIT_FILE "PROJ_UNITS"
- /* define PI and friends */
- #undef M_PI
- #define M_PI 3.14159265358979323846 /* pi */
- #undef M_PI_2
- #define M_PI_2 1.57079632679489661923 /* pi/2 */
- #undef M_PI_4
- #define M_PI_4 0.78539816339744830962 /* pi/4 */
- /* epsilon (IEEE: 2.220446e-16) */
- #define GRASS_EPSILON 1.0e-15
- /* Location of envariment variables */
- #define G_VAR_GISRC 0
- #define G_VAR_MAPSET 1
- /* Where to find/store variables */
- #define G_GISRC_MODE_FILE 0 /* files */
- #define G_GISRC_MODE_MEMORY 1 /* memory only */
- /* for G_parser() */
- #define TYPE_INTEGER 1
- #define TYPE_DOUBLE 2
- #define TYPE_STRING 3
- #define YES 1
- #define NO 0
- #define GISPROMPT_COLOR "old,color,color"
- /* File/directory name lengths */
- #define GNAME_MAX 256
- #define GMAPSET_MAX 256
- #define GPATH_MAX 4096
- /* Macros for type size independent integers */
- /* Use these for portability to ensure integers are truly 32bit */
- /* and are handled in a uniform manner */
- /* Convert integer to 4 bytes - little endian */
- #define serialize_int32_le(buf, x) do { \
- (buf)[0] = ((x) >> 0) & 0xFF; \
- (buf)[1] = ((x) >> 8) & 0xFF; \
- (buf)[2] = ((x) >> 16) & 0xFF; \
- (buf)[3] = ((x) >> 24) & 0xFF; \
- } while(0)
- /* Convert 4 bytes to an integer - little endian */
- #define deserialize_int32_le(buf) (((buf)[0] << 0) | \
- ((buf)[1] << 8) | \
- ((buf)[2] << 16) | \
- ((buf)[3] << 24))
- /* Convert integer to 4 bytes - big endian */
- #define serialize_int32_be(buf, x) do { \
- (buf)[0] = ((x) >> 24) & 0xFF; \
- (buf)[1] = ((x) >> 16) & 0xFF; \
- (buf)[2] = ((x) >> 8) & 0xFF; \
- (buf)[3] = ((x) >> 0) & 0xFF; \
- } while(0)
- /* Convert 4 bytes to an integer - big endian */
- #define deserialize_int32_be(buf) (((buf)[0] << 24) | \
- ((buf)[1] << 16) | \
- ((buf)[2] << 8) | \
- ((buf)[3] << 0))
- /* Cross-platform Directory Separator Character and null device stuff */
- #define GRASS_DIRSEP '/'
- #ifdef __MINGW32__
- # define HOST_DIRSEP '\\'
- # define G_DEV_NULL "NUL:"
- #else
- # define HOST_DIRSEP '/'
- # define G_DEV_NULL "/dev/null"
- #endif
- /**/ typedef enum
- {
- G_OPT_DB_WHERE, /* SQL where conditions */
- G_OPT_DB_TABLE, /* table name */
- G_OPT_DB_DRIVER, /* driver name */
- G_OPT_DB_DATABASE, /* database name */
- G_OPT_DB_COLUMN, /* one attr column */
- G_OPT_DB_COLUMNS, /* one or more attr columns */
- G_OPT_I_GROUP, /* old input imagery group */
- G_OPT_I_SUBGROUP, /* old input imagery subgroup */
- G_OPT_R_INPUT, /* old input raster map */
- G_OPT_R_INPUTS, /* old input raster maps */
- G_OPT_R_OUTPUT, /* new output raster map */
- G_OPT_R_MAP, /* old input raster map */
- G_OPT_R_MAPS, /* old input rasters map */
- G_OPT_R_BASE, /* old input base raster map */
- G_OPT_R_COVER, /* old input cover raster map */
- G_OPT_R_ELEV, /* old input elevation raster map */
- G_OPT_R_ELEVS, /* old input elevation raster maps */
- G_OPT_R3_INPUT, /* old input raster3d map */
- G_OPT_R3_INPUTS, /* old input raster3d maps */
- G_OPT_R3_OUTPUT, /* new output raster3d map */
- G_OPT_R3_MAP, /* old input raster3d map */
- G_OPT_R3_MAPS, /* old input raster3d maps */
- G_OPT_V_INPUT, /* old input vector map */
- G_OPT_V_INPUTS, /* old input vector maps */
- G_OPT_V_OUTPUT, /* new output vector map */
- G_OPT_V_MAP, /* old input vector map */
- G_OPT_V_MAPS, /* old input vector maps */
- G_OPT_V_TYPE, /* primitive type */
- G_OPT_V_FIELD, /* layer number (layers used to be called fields) */
- G_OPT_V_CAT, /* one category */
- G_OPT_V_CATS, /* more categories */
- G_OPT_F_INPUT, /* old input file */
- G_OPT_F_OUTPUT, /* new output file */
- G_OPT_F_SEP, /* data field separator */
- G_OPT_C_FG, /* foreground color */
- G_OPT_C_BG /* background color */
- } STD_OPT;
- /* Message format */
- #define G_INFO_FORMAT_STANDARD 0 /* GRASS_MESSAGE_FORMAT=standard or not defined */
- #define G_INFO_FORMAT_GUI 1 /* GRASS_MESSAGE_FORMAT=gui */
- #define G_INFO_FORMAT_SILENT 2 /* GRASS_MESSAGE_FORMAT=silent */
- #define G_INFO_FORMAT_PLAIN 3 /* GRASS_MESSAGE_FORMAT=plain */
- /* Icon types */
- #define G_ICON_CROSS 0
- #define G_ICON_BOX 1
- #define G_ICON_ARROW 2
- /* default colors */
- #define DEFAULT_FG_COLOR "black"
- #define DEFAULT_BG_COLOR "white"
- /* for G_get_raster_sample(), INTERP_TYPE */
- #define UNKNOWN 0
- #define NEAREST 1 /* nearest neighbor interpolation */
- #define BILINEAR 2 /* bilinear interpolation */
- #define CUBIC 3 /* cubic interpolation */
- /* for raster maps */
- #define GR_FATAL_EXIT 0
- #define GR_FATAL_PRINT 1
- #define GR_FATAL_RETURN 2
- /* Element types */
- enum
- { /* Dir */
- G_ELEMENT_RASTER = 1, /* cell */
- G_ELEMENT_RASTER3D = 2, /* 3dcell */
- G_ELEMENT_VECTOR = 3, /* vector */
- G_ELEMENT_OLDVECTOR = 4, /* GRASS < 5.7 vector */
- G_ELEMENT_ASCIIVECTOR = 5, /* ASCII vector */
- G_ELEMENT_ICON = 6, /* icon */
- G_ELEMENT_LABEL = 7, /* labels */
- G_ELEMENT_SITE = 8, /* sites */
- G_ELEMENT_REGION = 9, /* region */
- G_ELEMENT_REGION3D = 10, /* 3dregion */
- G_ELEMENT_GROUP = 11, /* group */
- G_ELEMENT_3DVIEW = 12 /* 3dview */
- };
- /*=========================== Typedefs/Structures ==========================*/
- typedef int CELL;
- typedef double DCELL;
- typedef float FCELL;
- typedef int RASTER_MAP_TYPE;
- /* for G_get_raster_sample() */
- typedef int INTERP_TYPE;
- struct Cell_head
- {
- int format; /* max numer of bytes per cell minus 1 */
- int compressed; /* 0 = uncompressed, 1 = compressed, -1 pre 3.0 */
- int rows; /* number of rows in the data 2D */
- int rows3; /* number of rows in the data 3D */
- int cols; /* number of columns in the data 2D */
- int cols3; /* number of columns in the data 3D */
- int depths; /* number of depths in data */
- int proj; /* Projection (see #defines above) */
- int zone; /* Projection zone */
- double ew_res; /* East to West cell size 2D */
- double ew_res3; /* East to West cell size 3D */
- double ns_res; /* North to South cell size 2D */
- double ns_res3; /* North to South cell size 3D */
- double tb_res; /* Top to Bottom cell size */
- double north; /* coordinates of layer */
- double south;
- double east;
- double west;
- double top;
- double bottom;
- };
- struct _Color_Value_
- {
- DCELL value;
- unsigned char red;
- unsigned char grn;
- unsigned char blu;
- };
- struct _Color_Rule_
- {
- struct _Color_Value_ low, high;
- struct _Color_Rule_ *next;
- struct _Color_Rule_ *prev;
- };
- struct _Color_Info_
- {
- struct _Color_Rule_ *rules;
- int n_rules;
- struct
- {
- unsigned char *red;
- unsigned char *grn;
- unsigned char *blu;
- unsigned char *set;
- int nalloc;
- int active;
- } lookup;
- struct
- {
- DCELL *vals;
- /* pointers to color rules corresponding to the intervals btwn vals */
- struct _Color_Rule_ **rules;
- int nalloc;
- int active;
- } fp_lookup;
- DCELL min, max;
- };
- struct Colors
- {
- int version; /* set by read_colors: -1=old,1=new */
- DCELL shift;
- int invert;
- int is_float; /* defined on floating point raster data? */
- int null_set; /* the colors for null are set? */
- unsigned char null_red;
- unsigned char null_grn;
- unsigned char null_blu;
- int undef_set; /* the colors for cells not in range are set? */
- unsigned char undef_red;
- unsigned char undef_grn;
- unsigned char undef_blu;
- struct _Color_Info_ fixed;
- struct _Color_Info_ modular;
- DCELL cmin;
- DCELL cmax;
- };
- typedef struct
- {
- unsigned char r, g, b, a; /* red, green, blue, and alpha */
- } RGBA_Color;
- typedef RGBA_Color RGB_Color;
- /* RGBA_Color alpha presets */
- #define RGBA_COLOR_OPAQUE 255
- #define RGBA_COLOR_TRANSPARENT 0
- #define RGBA_COLOR_NONE 0
- struct Reclass
- {
- char *name; /* name of raster map being reclassed */
- char *mapset; /* mapset in which "name" is found */
- int type; /* type of reclass */
- int num; /* size of reclass table */
- CELL min; /* table min */
- CELL max; /* table max */
- CELL *table; /* reclass table */
- };
- struct FPReclass_table
- {
- DCELL dLow; /* domain low */
- DCELL dHigh; /* domain high */
- DCELL rLow; /* range low */
- DCELL rHigh; /* range high */
- };
- /* reclass structure from double to double used by r.recode to reclass */
- /* between types: int to double, float to int,... */
- struct FPReclass
- {
- int defaultDRuleSet; /* 1 if default domain rule set */
- int defaultRRuleSet; /* 1 if default range rule set */
- int infiniteLeftSet; /* 1 if negative infinite interval rule exists */
- int infiniteRightSet; /* 1 if positive infinite interval rule exists */
- int rRangeSet; /* 1 if range range (i.e. interval) is set */
- int maxNofRules;
- int nofRules;
- DCELL defaultDMin; /* default domain minimum value */
- DCELL defaultDMax; /* default domain maximum value */
- DCELL defaultRMin; /* default range minimum value */
- DCELL defaultRMax; /* default range maximum value */
- DCELL infiniteDLeft; /* neg infinite rule */
- DCELL infiniteDRight; /* neg infinite rule */
- DCELL infiniteRLeft; /* pos infinite rule */
- DCELL infiniteRRight; /* pos infinite rule */
- DCELL dMin; /* minimum domain values in rules */
- DCELL dMax; /* maximum domain values in rules */
- DCELL rMin; /* minimum range values in rules */
- DCELL rMax; /* maximum range values in rules */
- struct FPReclass_table *table;
- };
- struct Quant_table
- {
- DCELL dLow;
- DCELL dHigh;
- CELL cLow;
- CELL cHigh;
- };
- struct Quant
- {
- int truncate_only;
- int round_only;
- int defaultDRuleSet;
- int defaultCRuleSet;
- int infiniteLeftSet;
- int infiniteRightSet;
- int cRangeSet;
- int maxNofRules;
- int nofRules;
- DCELL defaultDMin;
- DCELL defaultDMax;
- CELL defaultCMin;
- CELL defaultCMax;
- DCELL infiniteDLeft;
- DCELL infiniteDRight;
- CELL infiniteCLeft;
- CELL infiniteCRight;
- DCELL dMin;
- DCELL dMax;
- CELL cMin;
- CELL cMax;
- struct Quant_table *table;
- struct
- {
- DCELL *vals;
- /* pointers to quant rules corresponding to the intervals btwn vals */
- struct Quant_table **rules;
- int nalloc;
- int active;
- DCELL inf_dmin;
- DCELL inf_dmax;
- CELL inf_min;
- CELL inf_max;
- /* all values smaller than inf_dmin become inf_min */
- /* all values larger than inf_dmax become inf_max */
- /* inf_min and/or inf_max can be NULL if there are no inf rules */
- } fp_lookup;
- };
- struct Categories
- {
- CELL ncats; /* total number of categories */
- CELL num; /* the highest cell values. Only exists
- for backwards compatibility = (CELL)
- max_fp_values in quant rules */
- char *title; /* name of data layer */
- char *fmt; /* printf-like format to generate labels */
- float m1; /* Multiplication coefficient 1 */
- float a1; /* Addition coefficient 1 */
- float m2; /* Multiplication coefficient 2 */
- float a2; /* Addition coefficient 2 */
- struct Quant q; /* rules mapping cell values to index in
- list of labels */
- char **labels; /* array of labels of size num */
- int *marks; /* was the value with this label was used? */
- int nalloc;
- int last_marked_rule;
- /* NOTE: to get a rule corresponfing to cats.labels[i], use */
- /* G_get_ith_c/f/d_raster_cat (pcats, i, val1, val2) */
- /* it calls */
- /* G_quant_get_ith_rule(&cats->q, i, val1, val2, &index, &index); */
- /* and idex ==i, because rule is added at the same time as a */
- /* label, and quant rules are never reordered. Olga apr,95 */
- };
- struct History
- {
- char mapid[RECORD_LEN];
- char title[RECORD_LEN];
- char mapset[RECORD_LEN];
- char creator[RECORD_LEN];
- char maptype[RECORD_LEN];
- char datsrc_1[RECORD_LEN];
- char datsrc_2[RECORD_LEN];
- char keywrd[RECORD_LEN];
- int edlinecnt;
- char edhist[MAXEDLINES][RECORD_LEN];
- };
- struct Cell_stats
- {
- struct Cell_stats_node
- {
- int idx;
- long *count;
- int left;
- int right;
- } *node; /* tree of values */
- int tlen; /* allocated tree size */
- int N; /* number of actual nodes in tree */
- int curp;
- long null_data_count;
- int curoffset;
- };
- struct Histogram
- {
- int num;
- struct Histogram_list
- {
- CELL cat;
- long count;
- } *list;
- };
- struct Range
- {
- CELL min;
- CELL max;
- int first_time; /* whether or not range was updated */
- };
- struct FPRange
- {
- DCELL min;
- DCELL max;
- int first_time; /* whether or not range was updated */
- };
- struct FP_stats {
- int geometric;
- int flip;
- int count;
- DCELL min, max;
- unsigned long *stats;
- unsigned long total;
- };
- /*
- ** Structure for I/O of 3dview files (view.c)
- */
- struct G_3dview
- {
- char pgm_id[40]; /* user-provided identifier */
- float from_to[2][3]; /* eye position & lookat position */
- float fov; /* field of view */
- float twist; /* right_hand rotation about from_to */
- float exag; /* terrain elevation exageration */
- int mesh_freq; /* cells per grid line */
- int poly_freq; /* cells per polygon */
- int display_type; /* 1 for mesh, 2 for poly, 3 for both */
- int lightson; /* boolean */
- int dozero; /* boolean */
- int colorgrid; /* boolean */
- int shading; /* boolean */
- int fringe; /* boolean */
- int surfonly; /* boolean */
- int doavg; /* boolean */
- char grid_col[40]; /* colors */
- char bg_col[40]; /* colors */
- char other_col[40]; /* colors */
- float lightpos[4]; /* east, north, height, 1.0 for local 0.0 infin */
- float lightcol[3]; /* values between 0.0 to 1.0 for red, grn, blu */
- float ambient;
- float shine;
- struct Cell_head vwin;
- };
- struct Key_Value
- {
- int nitems;
- int nalloc;
- char **key;
- char **value;
- };
- struct Option /* Structure that stores option info */
- {
- const char *key; /* Key word used on command line */
- int type; /* Option type */
- int required; /* REQUIRED or OPTIONAL */
- int multiple; /* Multiple entries OK */
- const char *options; /* Approved values or range or NULL */
- const char **opts; /* NULL or NULL terminated array of parsed options */
- const char *key_desc; /* one word describing the key */
- const char *label; /* Optional short label, used in GUI as item label */
- const char *description; /* String describing option */
- const char *descriptions; /* ';' separated pairs of option and option descriptions */
- /* For example: (with ->options = "break,rmdupl")
- * "break;break lines on intersections;"
- * "rmdupl;remove duplicates"
- */
- const char **descs; /* parsed descriptions, array of either NULL or string */
- /* in the same order as options */
- char *answer; /* Option answer */
- const char *def; /* Where original answer gets saved */
- char **answers; /* Option answers (for multiple=YES) */
- struct Option *next_opt; /* Pointer to next option struct */
- const char *gisprompt; /* Interactive prompt guidance */
- const char *guisection; /* GUI Layout guidance: ';' delimited heirarchical tree position */
- int (*checker) (); /* Routine to check answer or NULL */
- int count;
- };
- struct Flag /* Structure that stores flag info */
- {
- char key; /* Key char used on command line */
- char answer; /* Stores flag state: 0/1 */
- const char *label; /* Optional short label, used in GUI as item label */
- const char *description; /* String describing flag meaning */
- const char *guisection; /* GUI Layout guidance: ';' delimited heirarchical tree position */
- struct Flag *next_flag; /* Pointer to next flag struct */
- };
- struct GModule /* Structure that stores module info */
- {
- const char *label; /* Optional short description for GUI */
- const char *description; /* String describing module */
- const char *keywords; /* Keywords describing module */
- /* further items are possible: author(s), version */
- int overwrite; /* overwrite old files */
- int verbose; /* print all informations about progress and so on */
- };
- struct TimeStamp
- {
- DateTime dt[2]; /* two datetimes */
- int count;
- };
- struct GDAL_link;
- /*============================== Prototypes ================================*/
- /* Since there are so many prototypes for the gis library they are stored */
- /* in the file gisdefs.h */
- #include <grass/gisdefs.h>
- #endif /* GRASS_GIS_H */
|