19 #include "gis_local_proto.h"
21 static int scan_item(
const char *,
char *,
char *);
22 static int scan_int(
const char *,
int *);
23 static double scan_double(
const char *,
double *);
47 #define SET(x) flags|=(1<<x)
48 #define TEST(x) (flags&(1<<x))
63 G_debug(2,
"G__read_Cell_head");
68 while (
G_getl(buf,
sizeof(buf), fd))
75 while (
G_getl(buf,
sizeof(buf), fd)) {
83 while (array[
count]) {
106 G_debug(2,
"G__read_Cell_head_array");
135 for (line = 1; (buf = array[i++]); line++) {
139 switch (scan_item(buf, label, value)) {
148 if (strncmp(label,
"proj", 4) == 0) {
152 if (!scan_int(value, &cellhd->
proj))
158 if (strncmp(label,
"zone", 4) == 0) {
162 if (!scan_int(value, &cellhd->
zone))
176 for (line = 1; (buf = array[i++]); line++) {
177 G_debug(3,
"region item: %s", buf);
178 switch (scan_item(buf, label, value)) {
188 if (strncmp(label,
"proj", 4) == 0)
190 if (strncmp(label,
"zone", 4) == 0)
193 if (strncmp(label,
"nort", 4) == 0) {
201 if (strncmp(label,
"sout", 4) == 0) {
209 if (strncmp(label,
"east", 4) == 0) {
217 if (strncmp(label,
"west", 4) == 0) {
225 if (strncmp(label,
"top", 3) == 0) {
228 if (!scan_double(value, &cellhd->
top))
233 if (strncmp(label,
"bottom", 6) == 0) {
236 if (!scan_double(value, &cellhd->
bottom))
241 if (strncmp(label,
"e-w ", 4) == 0 && strlen(label) == 9) {
246 if (cellhd->
ew_res <= 0.0)
251 if (strncmp(label,
"e-w resol3", 10) == 0) {
261 if (strncmp(label,
"n-s ", 4) == 0 && strlen(label) == 9) {
266 if (cellhd->
ns_res <= 0.0)
271 if (strncmp(label,
"n-s resol3", 10) == 0) {
281 if (strncmp(label,
"t-b ", 4) == 0) {
284 if (!scan_double(value, &cellhd->
tb_res))
286 if (cellhd->
tb_res <= 0.0)
291 if (strncmp(label,
"rows", 4) == 0 && strlen(label) == 4) {
294 if (!scan_int(value, &cellhd->
rows))
296 if (cellhd->
rows <= 0)
301 if (strncmp(label,
"rows3", 5) == 0) {
304 if (!scan_int(value, &cellhd->
rows3))
306 if (cellhd->
rows3 <= 0)
311 if (strncmp(label,
"cols", 4) == 0 && strlen(label) == 4) {
314 if (!scan_int(value, &cellhd->
cols))
316 if (cellhd->
cols <= 0)
321 if (strncmp(label,
"cols3", 5) == 0) {
324 if (!scan_int(value, &cellhd->
cols3))
326 if (cellhd->
cols3 <= 0)
331 if (strncmp(label,
"depths", 6) == 0) {
334 if (!scan_int(value, &cellhd->
depths))
341 if (strncmp(label,
"form", 4) == 0) {
344 if (!scan_int(value, &cellhd->
format))
349 if (strncmp(label,
"comp", 4) == 0) {
403 static int scan_item(
const char *buf,
char *label,
char *value)
406 if (sscanf(buf,
"%1s", label) != 1)
414 if (sscanf(buf,
"%[^:]:%[^\n]", label, value) != 2)
422 static int scan_int(
const char *buf,
int *n)
427 return (sscanf(buf,
"%d%1s", n, dummy) == 1 && *dummy == 0);
430 static double scan_double(
const char *buf,
double *n)
435 return (sscanf(buf,
"%lf%1s", n, dummy) == 1 && *dummy == 0);
void G_free(void *)
Free allocated memory.
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
int G_scan_easting(const char *, double *, int)
ASCII easting to double.
void G_fseek(FILE *, off_t, int)
Change the file position of the stream.
void G_strip(char *)
Removes all leading and trailing white space from string.
int G_scan_resolution(const char *, double *, int)
ASCII resolution to double.
int G_getl(char *, int, FILE *)
Gets a line of text from a file.
void G_adjust_Cell_head(struct Cell_head *, int, int)
Adjust cell header.
int G_debug(int, const char *,...) __attribute__((format(printf
int G_scan_northing(const char *, double *, int)
ASCII northing to double.
char * G_store(const char *)
Copy string to allocated memory.
void G__read_Cell_head_array(char **array, struct Cell_head *cellhd, int is_cellhd)
Read window from NULL terminated array of strings (for internal use only)
void G__read_Cell_head(FILE *fd, struct Cell_head *cellhd, int is_cellhd)
Read cell header (for internal use only)
2D/3D raster map header (used also for region)
int cols3
Number of columns for 3D data.
double ew_res
Resolution - east to west cell size for 2D data.
double north
Extent coordinates (north)
double bottom
Extent coordinates (bottom) - 3D data.
int compressed
Compression mode (raster header only)
int format
Max number of bytes per raster data value minus 1 (raster header only)
int zone
Projection zone (UTM)
int depths
number of depths for 3D data
double east
Extent coordinates (east)
double ew_res3
Resolution - east to west cell size for 3D data.
double ns_res
Resolution - north to south cell size for 2D data.
double ns_res3
Resolution - north to south cell size for 3D data.
double top
Extent coordinates (top) - 3D data.
int rows3
Number of rows for 3D data.
int rows
Number of rows for 2D data.
int cols
Number of columns for 2D data.
double south
Extent coordinates (south)
double tb_res
Resolution - top to bottom cell size for 3D data.
double west
Extent coordinates (west)