[GRASS-SVN] r38801 - grass/trunk/raster/r.what

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Aug 20 03:41:47 EDT 2009


Author: hamish
Date: 2009-08-20 03:41:43 -0400 (Thu, 20 Aug 2009)
New Revision: 38801

Modified:
   grass/trunk/raster/r.what/main.c
Log:
merge from devbr6-
add new flag for outputting a header row;
cleanup variables;
move cache option to guisection tab;
newline on exit from tty mode;
export floats and doubles with correct precision (trac #335);


Modified: grass/trunk/raster/r.what/main.c
===================================================================
--- grass/trunk/raster/r.what/main.c	2009-08-20 07:29:34 UTC (rev 38800)
+++ grass/trunk/raster/r.what/main.c	2009-08-20 07:41:43 UTC (rev 38801)
@@ -5,7 +5,7 @@
  * AUTHOR(S):    Michael Shapiro, CERL (original contributor)
  *               Markus Neteler <neteler itc.it>,Brad Douglas <rez touchofmadness.com>,
  *               Huidae Cho <grass4u gmail.com>, Glynn Clements <glynn gclements.plus.com>,
- *               Hamish Bowman <hamish_nospam yahoo.com>, Soeren Gebbert <soeren.gebbert gmx.de>
+ *               Hamish Bowman <hamish_b yahoo.com>, Soeren Gebbert <soeren.gebbert gmx.de>
  * PURPOSE:      
  * COPYRIGHT:    (C) 1999-2006 by the GRASS Development Team
  *
@@ -50,7 +50,6 @@
 {
     int i, j;
     int nfiles;
-    int withcats;
     int fd[NFILES];
     struct Categories cats[NFILES];
     struct Cell_head window;
@@ -68,10 +67,10 @@
     char buffer[1024];
     char **ptr;
     struct Option *opt1, *opt2, *opt3, *opt4, *opt_fs;
-    struct Flag *flag1, *flag2, *flag3, *flag4;
+    struct Flag *label_flag, *cache_flag, *int_flag, *color_flag, *header_flag;
     char fs;
     int Cache_size;
-    int done = 0;
+    int done = FALSE;
     int point, point_cnt;
     struct order *cache;
     int cur_row;
@@ -79,7 +78,7 @@
     int cache_hit = 0, cache_miss = 0;
     int cache_hit_tot = 0, cache_miss_tot = 0;
     int pass = 0;
-    int cache_report = 0;
+    int cache_report = FALSE;
     char tmp_buf[500], *null_str;
     int red, green, blue;
     struct GModule *module;
@@ -108,6 +107,7 @@
     opt2->multiple = NO;
     opt2->description = _("Size of point cache");
     opt2->answer = "500";
+    opt2->guisection = _("Advanced");
 
     opt3 = G_define_option();
     opt3->key = "null";
@@ -126,25 +126,31 @@
     opt4->multiple = YES;
     opt4->description = _("Coordinates for query");
 
-    flag1 = G_define_flag();
-    flag1->key = 'f';
-    flag1->description = _("Show the category label in the grid cell(s)");
+    header_flag = G_define_flag();
+    header_flag->key = 'n';
+    header_flag->description = _("Output header row");
 
-    flag2 = G_define_flag();
-    flag2->key = 'c';
-    flag2->description = _("Turn on cache reporting");
+    label_flag = G_define_flag();
+    label_flag->key = 'f';
+    label_flag->description = _("Show the category labels of the grid cell(s)");
 
-    flag3 = G_define_flag();
-    flag3->key = 'i';
-    flag3->description = _("Output integer category values, not cell values");
+    color_flag = G_define_flag();
+    color_flag->key = 'r';
+    color_flag->description = _("Output color values as RRR:GGG:BBB");
 
-    flag4 = G_define_flag();
-    flag4->key = 'r';
-    flag4->description = _("Output color values as RRR:GGG:BBB");
+    int_flag = G_define_flag();
+    int_flag->key = 'i';
+    int_flag->description = _("Output integer category values, not cell values");
 
+    cache_flag = G_define_flag();
+    cache_flag->key = 'c';
+    cache_flag->description = _("Turn on cache reporting");
+    cache_flag->guisection = _("Advanced");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
+
     tty = isatty(0);
 
     projection = G_projection();
@@ -161,29 +167,26 @@
 	    fs = opt_fs->answer[0];
     }
 
-    withcats = 0;
-    nfiles = 0;
+    null_str = opt3->answer;
 
+
     if (tty)
 	Cache_size = 1;
     else
 	Cache_size = atoi(opt2->answer);
 
-    null_str = opt3->answer;
-
     if (Cache_size < 1)
 	Cache_size = 1;
 
     cache = (struct order *)G_malloc(sizeof(struct order) * Cache_size);
 
-    /* note this is not kosher */
-    withcats = flag1->answer;
-
     /*enable cache report */
-    if (flag2->answer)
-	cache_report = 1;
+    if (cache_flag->answer)
+	cache_report = TRUE;
 
+
     ptr = opt1->answers;
+    nfiles = 0;
     for (; *ptr != NULL; ptr++) {
 	char name[GNAME_MAX];
 
@@ -196,21 +199,22 @@
 	    G_fatal_error(_("Unable to open <%s>"), name);
 
 	out_type[nfiles] = Rast_get_map_type(fd[nfiles]);
-	if (flag3->answer)
+	if (int_flag->answer)
 	    out_type[nfiles] = CELL_TYPE;
 
-	if (flag4->answer) {
+	if (color_flag->answer) {
 	    Rast_read_colors(name, "", &colors);
 	    ncolor[nfiles] = colors;
 	}
 
-	if (withcats && Rast_read_cats(name, "", &cats[nfiles]) < 0)
+	if (label_flag->answer && Rast_read_cats(name, "", &cats[nfiles]) < 0)
 	    G_fatal_error(_("Unable to read category file for <%s>"), name);
+
 	nfiles++;
     }
 
     for (i = 0; i < nfiles; i++) {
-	if (flag3->answer)
+	if (int_flag->answer)
 	    out_type[i] = CELL_TYPE;
 
 	cell[i] = Rast_allocate_c_buf();
@@ -220,18 +224,39 @@
 
     G_get_window(&window);
 
+
+    if(header_flag->answer) {
+	fprintf(stdout, "easting%cnorthing%csite_name", fs, fs);
+
+	ptr = opt1->answers;
+	for (; *ptr != NULL; ptr++) {
+	    char name[GNAME_MAX];
+	    strcpy(name, *ptr);
+
+	    fprintf(stdout, "%c%s", fs, name);
+
+	    if (label_flag->answer)
+		fprintf(stdout, "%c%s_label", fs, name);
+	    if (color_flag->answer)
+		fprintf(stdout, "%c%s_color", fs, name);
+	}
+
+	fprintf(stdout, "\n");
+    }
+
     line = 0;
     if (!opt4->answers && tty)
 	fprintf(stderr, "enter points, \"end\" to quit\n");
 
     j = 0;
-    done = 0;
+    done = FALSE;
     while (!done) {
 	pass++;
 	if (cache_report & !tty)
 	    fprintf(stderr, "Pass %3d  Line %6d   - ", pass, line);
 
 	cache_hit = cache_miss = 0;
+
 	if (!opt4->answers && tty) {
 	    fprintf(stderr, "\neast north [label] >  ");
 	    Cache_size = 1;
@@ -240,14 +265,14 @@
 	    point_cnt = 0;
 	    for (i = 0; i < Cache_size; i++) {
 		if (!opt4->answers && fgets(buffer, 1000, stdin) == NULL)
-		    done = 1;
+		    done = TRUE;
 		else {
 		    line++;
 		    if ((!opt4->answers &&
 			 (strncmp(buffer, "end\n", 4) == 0 ||
 			  strncmp(buffer, "exit\n", 5) == 0)) ||
 			(opt4->answers && !opt4->answers[j]))
-			done = 1;
+			done = TRUE;
 		    else {
 			*(cache[point_cnt].lab_buf) =
 			    *(cache[point_cnt].east_buf) =
@@ -354,7 +379,7 @@
 		    else
 			Rast_set_d_null_value(&(cache[point].dvalue[i]), 1);
 		}
-		if (flag4->answer) {
+		if (color_flag->answer) {
 		    if (out_type[i] == CELL_TYPE)
 			Rast_get_c_color(&cell[i][cache[point].col],
 					     &red, &green, &blue, &ncolor[i]);
@@ -398,14 +423,17 @@
 			fprintf(stdout, "%c%s", fs, null_str);
 			continue;
 		    }
-		    sprintf(tmp_buf, "%.15g", cache[point].dvalue[i]);
-		    G_trim_decimal(tmp_buf);
+		    if (out_type[i] == FCELL_TYPE)
+			sprintf(tmp_buf, "%.7g", cache[point].dvalue[i]);
+		    else /* DCELL */
+			sprintf(tmp_buf, "%.15g", cache[point].dvalue[i]);
+		    G_trim_decimal(tmp_buf); /* not needed with %g? */
 		    fprintf(stdout, "%c%s", fs, tmp_buf);
 		}
-		if (withcats)
+		if (label_flag->answer)
 		    fprintf(stdout, "%c%s", fs,
 			    Rast_get_c_cat(&(cache[point].value[i]), &cats[i]));
-		if (flag4->answer)
+		if (color_flag->answer)
 		    fprintf(stdout, "%c%s", fs, cache[point].clr_buf[i]);
 	    }
 	    fprintf(stdout, "\n");
@@ -419,9 +447,13 @@
 	cache_miss_tot += cache_miss;
 	cache_hit = cache_miss = 0;
     }
+
+    if (!opt4->answers && tty)
+	fprintf(stderr, "\n");
     if (cache_report & !tty)
 	fprintf(stderr, "Total:    Cache  Hit: %6d  Miss: %6d\n",
 		cache_hit_tot, cache_miss_tot);
+
     exit(EXIT_SUCCESS);
 }
 



More information about the grass-commit mailing list