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))
62 G_debug(2,
"G__read_Cell_head");
67 while (
G_getl(buf,
sizeof(buf), fd))
74 while (
G_getl(buf,
sizeof(buf), fd)) {
82 while (array[
count]) {
104 G_debug(2,
"G__read_Cell_head_array");
133 for (line = 1; (buf = array[i++]); line++) {
137 switch (scan_item(buf, label, value)) {
139 G_fatal_error(
_(
"Syntax error in cell header, line %d: %s"), line,
146 if (strncmp(label,
"proj", 4) == 0) {
150 if (!scan_int(value, &cellhd->
proj))
156 if (strncmp(label,
"zone", 4) == 0) {
160 if (!scan_int(value, &cellhd->
zone))
174 for (line = 1; (buf = array[i++]); line++) {
175 G_debug(3,
"region item: %s", buf);
176 switch (scan_item(buf, label, value)) {
178 G_fatal_error(
_(
"Syntax error in cell header, line %d: %s"), line,
186 if (strncmp(label,
"proj", 4) == 0)
188 if (strncmp(label,
"zone", 4) == 0)
191 if (strncmp(label,
"nort", 4) == 0) {
199 if (strncmp(label,
"sout", 4) == 0) {
207 if (strncmp(label,
"east", 4) == 0) {
215 if (strncmp(label,
"west", 4) == 0) {
223 if (strncmp(label,
"top", 3) == 0) {
226 if (!scan_double(value, &cellhd->
top))
231 if (strncmp(label,
"bottom", 6) == 0) {
234 if (!scan_double(value, &cellhd->
bottom))
239 if (strncmp(label,
"e-w ", 4) == 0 && strlen(label) == 9) {
244 if (cellhd->
ew_res <= 0.0)
249 if (strncmp(label,
"e-w resol3", 10) == 0) {
259 if (strncmp(label,
"n-s ", 4) == 0 && strlen(label) == 9) {
264 if (cellhd->
ns_res <= 0.0)
269 if (strncmp(label,
"n-s resol3", 10) == 0) {
279 if (strncmp(label,
"t-b ", 4) == 0) {
282 if (!scan_double(value, &cellhd->
tb_res))
284 if (cellhd->
tb_res <= 0.0)
289 if (strncmp(label,
"rows", 4) == 0 && strlen(label) == 4) {
292 if (!scan_int(value, &cellhd->
rows))
294 if (cellhd->
rows <= 0)
299 if (strncmp(label,
"rows3", 5) == 0) {
302 if (!scan_int(value, &cellhd->
rows3))
304 if (cellhd->
rows3 <= 0)
309 if (strncmp(label,
"cols", 4) == 0 && strlen(label) == 4) {
312 if (!scan_int(value, &cellhd->
cols))
314 if (cellhd->
cols <= 0)
319 if (strncmp(label,
"cols3", 5) == 0) {
322 if (!scan_int(value, &cellhd->
cols3))
324 if (cellhd->
cols3 <= 0)
329 if (strncmp(label,
"depths", 6) == 0) {
332 if (!scan_int(value, &cellhd->
depths))
339 if (strncmp(label,
"form", 4) == 0) {
342 if (!scan_int(value, &cellhd->
format))
347 if (strncmp(label,
"comp", 4) == 0) {
355 G_fatal_error(
_(
"Syntax error in cell header, line %d: %s"), line, buf);
400 static int scan_item(
const char *buf,
char *label,
char *value)
403 if (sscanf(buf,
"%1s", label) != 1)
411 if (sscanf(buf,
"%[^:]:%[^\n]", label, value) != 2)
419 static int scan_int(
const char *buf,
int *n)
424 return (sscanf(buf,
"%d%1s", n, dummy) == 1 && *dummy == 0);
427 static double scan_double(
const char *buf,
double *n)
432 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)
Read window from NULL terminated array of strings (for internal use only)
void G__read_Cell_head(FILE *fd, struct Cell_head *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)