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))
71 array = (
char **)
G_calloc(count + 1,
sizeof(
char *));
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);
int G_getl(char *, int, FILE *)
Gets a line of text from a file.
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
2D/3D raster map header (used also for region)
double west
Extent coordinates (west)
void G_free(void *)
Free allocated memory.
void G__read_Cell_head(FILE *fd, struct Cell_head *cellhd, int is_cellhd)
Read cell header (for internal use only)
void G_strip(char *)
Removes all leading and trailing white space from string.
int format
Max number of bytes per raster data value minus 1 (raster header only)
int cols3
Number of columns for 3D data.
double top
Extent coordinates (top) - 3D data.
int compressed
Compression mode (raster header only)
double north
Extent coordinates (north)
double ns_res3
Resolution - north to south cell size for 3D data.
int rows3
Number of rows for 3D data.
int G_scan_easting(const char *, double *, int)
ASCII easting to double.
int G_scan_resolution(const char *, double *, int)
ASCII resolution to double.
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)
double south
Extent coordinates (south)
int zone
Projection zone (UTM)
void G_fseek(FILE *, off_t, int)
Change the file position of the stream.
double bottom
Extent coordinates (bottom) - 3D data.
int depths
number of depths for 3D data
void G_adjust_Cell_head(struct Cell_head *, int, int)
Adjust cell header.
int cols
Number of columns for 2D data.
double ns_res
Resolution - north to south cell size for 2D data.
double east
Extent coordinates (east)
char * G_store(const char *)
Copy string to allocated memory.
double ew_res
Resolution - east to west cell size for 2D data.
double tb_res
Resolution - top to bottom cell size for 3D data.
int rows
Number of rows for 2D data.
int G_debug(int, const char *,...) __attribute__((format(printf
double ew_res3
Resolution - east to west cell size for 3D data.
int G_scan_northing(const char *, double *, int)
ASCII northing to double.