gis.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. /*
  2. *****************************************************************************
  3. *
  4. * MODULE: Grass Include Files
  5. * AUTHOR(S): Original author unknown - probably CERL
  6. * Justin Hickey - Thailand - jhickey@hpcc.nectec.or.th
  7. * PURPOSE: This file contains definitions of variables and data types
  8. * for use with most, if not all, Grass programs. This file is
  9. * usually included in every Grass program.
  10. * COPYRIGHT: (C) 2000 by the GRASS Development Team
  11. *
  12. * This program is free software under the GNU General Public
  13. * License (>=v2). Read the file COPYING that comes with GRASS
  14. * for details.
  15. *
  16. *****************************************************************************/
  17. #ifndef GRASS_GIS_H
  18. #define GRASS_GIS_H
  19. /*============================= Include Files ==============================*/
  20. /* System include files */
  21. #include <stdio.h>
  22. #include <stdarg.h>
  23. /* Grass and local include files */
  24. #include <grass/config.h>
  25. #include <grass/datetime.h>
  26. /*=========================== Constants/Defines ============================*/
  27. #if !defined __GNUC__ || __GNUC__ < 2
  28. #undef __attribute__
  29. #define __attribute__(x)
  30. #endif
  31. static const char *GRASS_copyright __attribute__ ((unused))
  32. = "GRASS GNU GPL licensed Software";
  33. #define GIS_H_VERSION "$Revision$"
  34. #define G_gisinit(pgm) G__gisinit(GIS_H_VERSION, (pgm))
  35. #define G_no_gisinit() G__no_gisinit(GIS_H_VERSION)
  36. /* Define TRUE and FALSE for boolean comparisons */
  37. #ifndef TRUE
  38. #define TRUE 1
  39. #endif
  40. #ifndef FALSE
  41. #define FALSE 0
  42. #endif
  43. #define MAXEDLINES 50
  44. #define RECORD_LEN 80
  45. #define NEWLINE '\n'
  46. #define RECLASS_TABLE 1
  47. #define RECLASS_RULES 2
  48. #define RECLASS_SCALE 3
  49. #define METERS 1
  50. #define FEET 2
  51. #define DEGREES 3
  52. #define CELL_TYPE 0
  53. #define FCELL_TYPE 1
  54. #define DCELL_TYPE 2
  55. #define PROJECTION_XY 0
  56. #define PROJECTION_UTM 1
  57. #define PROJECTION_SP 2
  58. #define PROJECTION_LL 3
  59. #define PROJECTION_OTHER 99
  60. #define PROJECTION_FILE "PROJ_INFO"
  61. #define UNIT_FILE "PROJ_UNITS"
  62. /* define PI and friends */
  63. #undef M_PI
  64. #define M_PI 3.14159265358979323846 /* pi */
  65. #undef M_PI_2
  66. #define M_PI_2 1.57079632679489661923 /* pi/2 */
  67. #undef M_PI_4
  68. #define M_PI_4 0.78539816339744830962 /* pi/4 */
  69. /* epsilon (IEEE: 2.220446e-16) */
  70. #define GRASS_EPSILON 1.0e-15
  71. /* Location of envariment variables */
  72. #define G_VAR_GISRC 0
  73. #define G_VAR_MAPSET 1
  74. /* Where to find/store variables */
  75. #define G_GISRC_MODE_FILE 0 /* files */
  76. #define G_GISRC_MODE_MEMORY 1 /* memory only */
  77. /* for G_parser() */
  78. #define TYPE_INTEGER 1
  79. #define TYPE_DOUBLE 2
  80. #define TYPE_STRING 3
  81. #define YES 1
  82. #define NO 0
  83. #define GISPROMPT_COLOR "old,color,color"
  84. /* File/directory name lengths */
  85. #define GNAME_MAX 256
  86. #define GMAPSET_MAX 256
  87. #define GPATH_MAX 4096
  88. /* Macros for type size independent integers */
  89. /* Use these for portability to ensure integers are truly 32bit */
  90. /* and are handled in a uniform manner */
  91. /* Convert integer to 4 bytes - little endian */
  92. #define serialize_int32_le(buf, x) do { \
  93. (buf)[0] = ((x) >> 0) & 0xFF; \
  94. (buf)[1] = ((x) >> 8) & 0xFF; \
  95. (buf)[2] = ((x) >> 16) & 0xFF; \
  96. (buf)[3] = ((x) >> 24) & 0xFF; \
  97. } while(0)
  98. /* Convert 4 bytes to an integer - little endian */
  99. #define deserialize_int32_le(buf) (((buf)[0] << 0) | \
  100. ((buf)[1] << 8) | \
  101. ((buf)[2] << 16) | \
  102. ((buf)[3] << 24))
  103. /* Convert integer to 4 bytes - big endian */
  104. #define serialize_int32_be(buf, x) do { \
  105. (buf)[0] = ((x) >> 24) & 0xFF; \
  106. (buf)[1] = ((x) >> 16) & 0xFF; \
  107. (buf)[2] = ((x) >> 8) & 0xFF; \
  108. (buf)[3] = ((x) >> 0) & 0xFF; \
  109. } while(0)
  110. /* Convert 4 bytes to an integer - big endian */
  111. #define deserialize_int32_be(buf) (((buf)[0] << 24) | \
  112. ((buf)[1] << 16) | \
  113. ((buf)[2] << 8) | \
  114. ((buf)[3] << 0))
  115. /* Cross-platform Directory Separator Character and null device stuff */
  116. #define GRASS_DIRSEP '/'
  117. #ifdef __MINGW32__
  118. # define HOST_DIRSEP '\\'
  119. # define G_DEV_NULL "NUL:"
  120. #else
  121. # define HOST_DIRSEP '/'
  122. # define G_DEV_NULL "/dev/null"
  123. #endif
  124. /**/ typedef enum
  125. {
  126. G_OPT_DB_WHERE, /* SQL where conditions */
  127. G_OPT_DB_TABLE, /* table name */
  128. G_OPT_DB_DRIVER, /* driver name */
  129. G_OPT_DB_DATABASE, /* database name */
  130. G_OPT_DB_COLUMN, /* one attr column */
  131. G_OPT_DB_COLUMNS, /* one or more attr columns */
  132. G_OPT_I_GROUP, /* old input imagery group */
  133. G_OPT_I_SUBGROUP, /* old input imagery subgroup */
  134. G_OPT_R_INPUT, /* old input raster map */
  135. G_OPT_R_INPUTS, /* old input raster maps */
  136. G_OPT_R_OUTPUT, /* new output raster map */
  137. G_OPT_R_MAP, /* old input raster map */
  138. G_OPT_R_MAPS, /* old input rasters map */
  139. G_OPT_R_BASE, /* old input base raster map */
  140. G_OPT_R_COVER, /* old input cover raster map */
  141. G_OPT_R_ELEV, /* old input elevation raster map */
  142. G_OPT_R_ELEVS, /* old input elevation raster maps */
  143. G_OPT_R3_INPUT, /* old input raster3d map */
  144. G_OPT_R3_INPUTS, /* old input raster3d maps */
  145. G_OPT_R3_OUTPUT, /* new output raster3d map */
  146. G_OPT_R3_MAP, /* old input raster3d map */
  147. G_OPT_R3_MAPS, /* old input raster3d maps */
  148. G_OPT_V_INPUT, /* old input vector map */
  149. G_OPT_V_INPUTS, /* old input vector maps */
  150. G_OPT_V_OUTPUT, /* new output vector map */
  151. G_OPT_V_MAP, /* old input vector map */
  152. G_OPT_V_MAPS, /* old input vector maps */
  153. G_OPT_V_TYPE, /* primitive type */
  154. G_OPT_V_FIELD, /* layer number (layers used to be called fields) */
  155. G_OPT_V_CAT, /* one category */
  156. G_OPT_V_CATS, /* more categories */
  157. G_OPT_V_ID, /* one feature id */
  158. G_OPT_V_IDS, /* more feature ids */
  159. G_OPT_F_INPUT, /* old input file */
  160. G_OPT_F_OUTPUT, /* new output file */
  161. G_OPT_F_SEP, /* data field separator */
  162. G_OPT_C_FG, /* foreground color */
  163. G_OPT_C_BG /* background color */
  164. } STD_OPT;
  165. /* Message format */
  166. #define G_INFO_FORMAT_STANDARD 0 /* GRASS_MESSAGE_FORMAT=standard or not defined */
  167. #define G_INFO_FORMAT_GUI 1 /* GRASS_MESSAGE_FORMAT=gui */
  168. #define G_INFO_FORMAT_SILENT 2 /* GRASS_MESSAGE_FORMAT=silent */
  169. #define G_INFO_FORMAT_PLAIN 3 /* GRASS_MESSAGE_FORMAT=plain */
  170. /* Icon types */
  171. #define G_ICON_CROSS 0
  172. #define G_ICON_BOX 1
  173. #define G_ICON_ARROW 2
  174. /* default colors */
  175. #define DEFAULT_FG_COLOR "black"
  176. #define DEFAULT_BG_COLOR "white"
  177. /* for G_get_raster_sample(), INTERP_TYPE */
  178. #define UNKNOWN 0
  179. #define NEAREST 1 /* nearest neighbor interpolation */
  180. #define BILINEAR 2 /* bilinear interpolation */
  181. #define CUBIC 3 /* cubic interpolation */
  182. /* for raster maps */
  183. #define GR_FATAL_EXIT 0
  184. #define GR_FATAL_PRINT 1
  185. #define GR_FATAL_RETURN 2
  186. /* Element types */
  187. enum
  188. { /* Dir */
  189. G_ELEMENT_RASTER = 1, /* cell */
  190. G_ELEMENT_RASTER3D = 2, /* 3dcell */
  191. G_ELEMENT_VECTOR = 3, /* vector */
  192. G_ELEMENT_OLDVECTOR = 4, /* GRASS < 5.7 vector */
  193. G_ELEMENT_ASCIIVECTOR = 5, /* ASCII vector */
  194. G_ELEMENT_ICON = 6, /* icon */
  195. G_ELEMENT_LABEL = 7, /* labels */
  196. G_ELEMENT_SITE = 8, /* sites */
  197. G_ELEMENT_REGION = 9, /* region */
  198. G_ELEMENT_REGION3D = 10, /* 3dregion */
  199. G_ELEMENT_GROUP = 11, /* group */
  200. G_ELEMENT_3DVIEW = 12 /* 3dview */
  201. };
  202. /*=========================== Typedefs/Structures ==========================*/
  203. typedef int CELL;
  204. typedef double DCELL;
  205. typedef float FCELL;
  206. typedef int RASTER_MAP_TYPE;
  207. /* for G_get_raster_sample() */
  208. typedef int INTERP_TYPE;
  209. struct Cell_head
  210. {
  211. int format; /* max numer of bytes per cell minus 1 */
  212. int compressed; /* 0 = uncompressed, 1 = compressed, -1 pre 3.0 */
  213. int rows; /* number of rows in the data 2D */
  214. int rows3; /* number of rows in the data 3D */
  215. int cols; /* number of columns in the data 2D */
  216. int cols3; /* number of columns in the data 3D */
  217. int depths; /* number of depths in data */
  218. int proj; /* Projection (see #defines above) */
  219. int zone; /* Projection zone */
  220. double ew_res; /* East to West cell size 2D */
  221. double ew_res3; /* East to West cell size 3D */
  222. double ns_res; /* North to South cell size 2D */
  223. double ns_res3; /* North to South cell size 3D */
  224. double tb_res; /* Top to Bottom cell size */
  225. double north; /* coordinates of layer */
  226. double south;
  227. double east;
  228. double west;
  229. double top;
  230. double bottom;
  231. };
  232. struct _Color_Value_
  233. {
  234. DCELL value;
  235. unsigned char red;
  236. unsigned char grn;
  237. unsigned char blu;
  238. };
  239. struct _Color_Rule_
  240. {
  241. struct _Color_Value_ low, high;
  242. struct _Color_Rule_ *next;
  243. struct _Color_Rule_ *prev;
  244. };
  245. struct _Color_Info_
  246. {
  247. struct _Color_Rule_ *rules;
  248. int n_rules;
  249. struct
  250. {
  251. unsigned char *red;
  252. unsigned char *grn;
  253. unsigned char *blu;
  254. unsigned char *set;
  255. int nalloc;
  256. int active;
  257. } lookup;
  258. struct
  259. {
  260. DCELL *vals;
  261. /* pointers to color rules corresponding to the intervals btwn vals */
  262. struct _Color_Rule_ **rules;
  263. int nalloc;
  264. int active;
  265. } fp_lookup;
  266. DCELL min, max;
  267. };
  268. struct Colors
  269. {
  270. int version; /* set by read_colors: -1=old,1=new */
  271. DCELL shift;
  272. int invert;
  273. int is_float; /* defined on floating point raster data? */
  274. int null_set; /* the colors for null are set? */
  275. unsigned char null_red;
  276. unsigned char null_grn;
  277. unsigned char null_blu;
  278. int undef_set; /* the colors for cells not in range are set? */
  279. unsigned char undef_red;
  280. unsigned char undef_grn;
  281. unsigned char undef_blu;
  282. struct _Color_Info_ fixed;
  283. struct _Color_Info_ modular;
  284. DCELL cmin;
  285. DCELL cmax;
  286. int organizing;
  287. };
  288. typedef struct
  289. {
  290. unsigned char r, g, b, a; /* red, green, blue, and alpha */
  291. } RGBA_Color;
  292. typedef RGBA_Color RGB_Color;
  293. /* RGBA_Color alpha presets */
  294. #define RGBA_COLOR_OPAQUE 255
  295. #define RGBA_COLOR_TRANSPARENT 0
  296. #define RGBA_COLOR_NONE 0
  297. struct Reclass
  298. {
  299. char *name; /* name of raster map being reclassed */
  300. char *mapset; /* mapset in which "name" is found */
  301. int type; /* type of reclass */
  302. int num; /* size of reclass table */
  303. CELL min; /* table min */
  304. CELL max; /* table max */
  305. CELL *table; /* reclass table */
  306. };
  307. struct FPReclass_table
  308. {
  309. DCELL dLow; /* domain low */
  310. DCELL dHigh; /* domain high */
  311. DCELL rLow; /* range low */
  312. DCELL rHigh; /* range high */
  313. };
  314. /* reclass structure from double to double used by r.recode to reclass */
  315. /* between types: int to double, float to int,... */
  316. struct FPReclass
  317. {
  318. int defaultDRuleSet; /* 1 if default domain rule set */
  319. int defaultRRuleSet; /* 1 if default range rule set */
  320. int infiniteLeftSet; /* 1 if negative infinite interval rule exists */
  321. int infiniteRightSet; /* 1 if positive infinite interval rule exists */
  322. int rRangeSet; /* 1 if range range (i.e. interval) is set */
  323. int maxNofRules;
  324. int nofRules;
  325. DCELL defaultDMin; /* default domain minimum value */
  326. DCELL defaultDMax; /* default domain maximum value */
  327. DCELL defaultRMin; /* default range minimum value */
  328. DCELL defaultRMax; /* default range maximum value */
  329. DCELL infiniteDLeft; /* neg infinite rule */
  330. DCELL infiniteDRight; /* neg infinite rule */
  331. DCELL infiniteRLeft; /* pos infinite rule */
  332. DCELL infiniteRRight; /* pos infinite rule */
  333. DCELL dMin; /* minimum domain values in rules */
  334. DCELL dMax; /* maximum domain values in rules */
  335. DCELL rMin; /* minimum range values in rules */
  336. DCELL rMax; /* maximum range values in rules */
  337. struct FPReclass_table *table;
  338. };
  339. struct Quant_table
  340. {
  341. DCELL dLow;
  342. DCELL dHigh;
  343. CELL cLow;
  344. CELL cHigh;
  345. };
  346. struct Quant
  347. {
  348. int truncate_only;
  349. int round_only;
  350. int defaultDRuleSet;
  351. int defaultCRuleSet;
  352. int infiniteLeftSet;
  353. int infiniteRightSet;
  354. int cRangeSet;
  355. int maxNofRules;
  356. int nofRules;
  357. DCELL defaultDMin;
  358. DCELL defaultDMax;
  359. CELL defaultCMin;
  360. CELL defaultCMax;
  361. DCELL infiniteDLeft;
  362. DCELL infiniteDRight;
  363. CELL infiniteCLeft;
  364. CELL infiniteCRight;
  365. DCELL dMin;
  366. DCELL dMax;
  367. CELL cMin;
  368. CELL cMax;
  369. struct Quant_table *table;
  370. struct
  371. {
  372. DCELL *vals;
  373. /* pointers to quant rules corresponding to the intervals btwn vals */
  374. struct Quant_table **rules;
  375. int nalloc;
  376. int active;
  377. DCELL inf_dmin;
  378. DCELL inf_dmax;
  379. CELL inf_min;
  380. CELL inf_max;
  381. /* all values smaller than inf_dmin become inf_min */
  382. /* all values larger than inf_dmax become inf_max */
  383. /* inf_min and/or inf_max can be NULL if there are no inf rules */
  384. } fp_lookup;
  385. };
  386. struct Categories
  387. {
  388. CELL ncats; /* total number of categories */
  389. CELL num; /* the highest cell values. Only exists
  390. for backwards compatibility = (CELL)
  391. max_fp_values in quant rules */
  392. char *title; /* name of data layer */
  393. char *fmt; /* printf-like format to generate labels */
  394. float m1; /* Multiplication coefficient 1 */
  395. float a1; /* Addition coefficient 1 */
  396. float m2; /* Multiplication coefficient 2 */
  397. float a2; /* Addition coefficient 2 */
  398. struct Quant q; /* rules mapping cell values to index in
  399. list of labels */
  400. char **labels; /* array of labels of size num */
  401. int *marks; /* was the value with this label was used? */
  402. int nalloc;
  403. int last_marked_rule;
  404. /* NOTE: to get a rule corresponfing to cats.labels[i], use */
  405. /* G_get_ith_c/f/d_raster_cat (pcats, i, val1, val2) */
  406. /* it calls */
  407. /* G_quant_get_ith_rule(&cats->q, i, val1, val2, &index, &index); */
  408. /* and idex ==i, because rule is added at the same time as a */
  409. /* label, and quant rules are never reordered. Olga apr,95 */
  410. };
  411. struct History
  412. {
  413. char mapid[RECORD_LEN];
  414. char title[RECORD_LEN];
  415. char mapset[RECORD_LEN];
  416. char creator[RECORD_LEN];
  417. char maptype[RECORD_LEN];
  418. char datsrc_1[RECORD_LEN];
  419. char datsrc_2[RECORD_LEN];
  420. char keywrd[RECORD_LEN];
  421. int edlinecnt;
  422. char edhist[MAXEDLINES][RECORD_LEN];
  423. };
  424. struct Cell_stats
  425. {
  426. struct Cell_stats_node
  427. {
  428. int idx;
  429. long *count;
  430. int left;
  431. int right;
  432. } *node; /* tree of values */
  433. int tlen; /* allocated tree size */
  434. int N; /* number of actual nodes in tree */
  435. int curp;
  436. long null_data_count;
  437. int curoffset;
  438. };
  439. struct Histogram
  440. {
  441. int num;
  442. struct Histogram_list
  443. {
  444. CELL cat;
  445. long count;
  446. } *list;
  447. };
  448. struct Range
  449. {
  450. CELL min;
  451. CELL max;
  452. int first_time; /* whether or not range was updated */
  453. };
  454. struct FPRange
  455. {
  456. DCELL min;
  457. DCELL max;
  458. int first_time; /* whether or not range was updated */
  459. };
  460. struct FP_stats {
  461. int geometric;
  462. int geom_abs;
  463. int flip;
  464. int count;
  465. DCELL min, max;
  466. unsigned long *stats;
  467. unsigned long total;
  468. };
  469. /*
  470. ** Structure for I/O of 3dview files (view.c)
  471. */
  472. struct G_3dview
  473. {
  474. char pgm_id[40]; /* user-provided identifier */
  475. float from_to[2][3]; /* eye position & lookat position */
  476. float fov; /* field of view */
  477. float twist; /* right_hand rotation about from_to */
  478. float exag; /* terrain elevation exageration */
  479. int mesh_freq; /* cells per grid line */
  480. int poly_freq; /* cells per polygon */
  481. int display_type; /* 1 for mesh, 2 for poly, 3 for both */
  482. int lightson; /* boolean */
  483. int dozero; /* boolean */
  484. int colorgrid; /* boolean */
  485. int shading; /* boolean */
  486. int fringe; /* boolean */
  487. int surfonly; /* boolean */
  488. int doavg; /* boolean */
  489. char grid_col[40]; /* colors */
  490. char bg_col[40]; /* colors */
  491. char other_col[40]; /* colors */
  492. float lightpos[4]; /* east, north, height, 1.0 for local 0.0 infin */
  493. float lightcol[3]; /* values between 0.0 to 1.0 for red, grn, blu */
  494. float ambient;
  495. float shine;
  496. struct Cell_head vwin;
  497. };
  498. struct Key_Value
  499. {
  500. int nitems;
  501. int nalloc;
  502. char **key;
  503. char **value;
  504. };
  505. struct Option /* Structure that stores option info */
  506. {
  507. const char *key; /* Key word used on command line */
  508. int type; /* Option type */
  509. int required; /* REQUIRED or OPTIONAL */
  510. int multiple; /* Multiple entries OK */
  511. const char *options; /* Approved values or range or NULL */
  512. const char **opts; /* NULL or NULL terminated array of parsed options */
  513. const char *key_desc; /* one word describing the key */
  514. const char *label; /* Optional short label, used in GUI as item label */
  515. const char *description; /* String describing option */
  516. const char *descriptions; /* ';' separated pairs of option and option descriptions */
  517. /* For example: (with ->options = "break,rmdupl")
  518. * "break;break lines on intersections;"
  519. * "rmdupl;remove duplicates"
  520. */
  521. const char **descs; /* parsed descriptions, array of either NULL or string */
  522. /* in the same order as options */
  523. char *answer; /* Option answer */
  524. const char *def; /* Where original answer gets saved */
  525. char **answers; /* Option answers (for multiple=YES) */
  526. struct Option *next_opt; /* Pointer to next option struct */
  527. const char *gisprompt; /* Interactive prompt guidance */
  528. const char *guisection; /* GUI Layout guidance: ';' delimited heirarchical tree position */
  529. int (*checker) (); /* Routine to check answer or NULL */
  530. int count;
  531. };
  532. struct Flag /* Structure that stores flag info */
  533. {
  534. char key; /* Key char used on command line */
  535. char answer; /* Stores flag state: 0/1 */
  536. const char *label; /* Optional short label, used in GUI as item label */
  537. const char *description; /* String describing flag meaning */
  538. const char *guisection; /* GUI Layout guidance: ';' delimited heirarchical tree position */
  539. struct Flag *next_flag; /* Pointer to next flag struct */
  540. };
  541. struct GModule /* Structure that stores module info */
  542. {
  543. const char *label; /* Optional short description for GUI */
  544. const char *description; /* String describing module */
  545. const char *keywords; /* Keywords describing module */
  546. /* further items are possible: author(s), version */
  547. int overwrite; /* overwrite old files */
  548. int verbose; /* print all informations about progress and so on */
  549. };
  550. struct TimeStamp
  551. {
  552. DateTime dt[2]; /* two datetimes */
  553. int count;
  554. };
  555. struct GDAL_link;
  556. struct Counter {
  557. int value;
  558. };
  559. /*============================== Prototypes ================================*/
  560. /* Since there are so many prototypes for the gis library they are stored */
  561. /* in the file gisdefs.h */
  562. #include <grass/gisdefs.h>
  563. #endif /* GRASS_GIS_H */