[GRASS-dev] howto rewrite r.colors using G_message and G_warning

Glynn Clements glynn at gclements.plus.com
Wed Sep 27 11:43:51 EDT 2006


Jachym Cepicky wrote:

> i tryed to rewrite r.colors so it uses G_message && G_warning where ever
> it seemed better, then fprinfs
> 
> i used it also for printing of warnings, when colors are set via rules.
> 
> in error.c print_error() uses G_sleep(5) which makes the module sleep
> about 5 seconds when the warning is printed out:
> 
> echo "1 233:233:443"|r.colors map=pokus color=rules --q
> WARNING: R:G:B value(s) out of range [0..255]: 233:233:443
> (5 seconds )
> WARNING: rule is not added
> (another 5 seconds )
> 
> Is there a way, how to omit this sleeping function or is usage of
> G_warning on this place in general wrong approach?

IMHO, the sleep() should just be discarded. It makes no sense for
non-interactive modules (which constitute the vast majority), and not
much sense for interactive modules.

My guess is that it was added for a specific case, probably a curses
application where the warning would get erased from the screen
immediately.

BTW, beeping assumes that the terminal supports it, and uses \x07 for
that purpose. This isn't guaranteed; my default terminal is XEmacs'
shell-mode, which just dumps everything in the buffer, so a "beep" is
just a "^G" in the buffer.

OTOH, that's still small fry compared to G_percent():

	glynn at cerise:cvs $ r.mapcalc 'map1=col()'
	   0%^H^H^H^H^H  11%^H^H^H^H^H  22%^H^H^H^H^H  33%^H^H^H^H^H  ....

In theory, you should write any control codes except \n to the
terminal unless the terminal's termpcap/terminfo entry tells you to. 
However, linking everything against libtermcap/libtinfo/libncurses
(*if* you can figure out which is the right one to use) just for this
purpose is a rather heavyweight solution.

> patch is attached, not yet in cvs, please test

> Index: main.c

FWIW, it's preferable to generate patches from the top of the GRASS
source tree.

> ===================================================================
> RCS file: /grassrepository/grass6/raster/r.colors/main.c,v
> retrieving revision 2.8
> diff -u -r2.8 main.c
> --- main.c	15 Sep 2006 06:51:55 -0000	2.8
> +++ main.c	27 Sep 2006 09:15:22 -0000

> @@ -174,7 +174,7 @@
>  		"ryg;red through yellow to green colors;"
>  		"random;random color table;"
>  		"wave;color wave;"
> -		"rules;create new color table by rules";
> +		"rules;create new color table by rules (input via keyboard or stdin)";

This is unnecessary, IMHO.

Other than that, it seems fine.

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list