Index: include/gis.h
===================================================================
--- include/gis.h	(revision 34159)
+++ include/gis.h	(working copy)
@@ -202,6 +202,7 @@
 #define G_INFO_FORMAT_STANDARD 0	/* GRASS_MESSAGE_FORMAT=standard or not defined */
 #define G_INFO_FORMAT_GUI      1	/* GRASS_MESSAGE_FORMAT=gui */
 #define G_INFO_FORMAT_SILENT   2	/* GRASS_MESSAGE_FORMAT=silent */
+#define G_INFO_FORMAT_BATCH    3	/* GRASS_MESSAGE_FORMAT=batch */
 
 /* Icon types */
 #define G_ICON_CROSS  0
Index: lib/gis/error.c
===================================================================
--- lib/gis/error.c	(revision 34159)
+++ lib/gis/error.c	(working copy)
@@ -332,6 +332,7 @@
 	logfile = getenv("GIS_ERROR_LOG");
 	if (!logfile) {
 	    char buf[GPATH_MAX];
+
 	    sprintf(buf, "%s/GIS_ERROR_LOG", G__home());
 	    logfile = G_store(buf);
 	}
@@ -495,6 +496,8 @@
 	    grass_info_format = G_INFO_FORMAT_GUI;
 	else if (fstr && G_strcasecmp(fstr, "silent") == 0)
 	    grass_info_format = G_INFO_FORMAT_SILENT;
+	else if (fstr && G_strcasecmp(fstr, "batch") == 0)
+	    grass_info_format = G_INFO_FORMAT_BATCH;
 	else
 	    grass_info_format = G_INFO_FORMAT_STANDARD;
     }
Index: lib/gis/percent.c
===================================================================
--- lib/gis/percent.c	(revision 34159)
+++ lib/gis/percent.c	(working copy)
@@ -111,15 +111,25 @@
 		fprintf(out, "%4d%%\b\b\b\b\b", x);
 	    }
 	}
-	else {			/* GUI */
-	    if (out != NULL) {
-		if (first) {
-		    fprintf(out, "\n");
+	else {
+	    if (format == G_INFO_FORMAT_BATCH) {
+		if (out != NULL) {
+		    if (x == 100)
+			fprintf(out, "%d\n", x);
+		    else
+			fprintf(out, "%d..", x);
 		}
-		fprintf(out, "GRASS_INFO_PERCENT: %d\n", x);
-		fflush(out);
 	    }
-	    first = 0;
+	    else {		/* GUI */
+		if (out != NULL) {
+		    if (first) {
+			fprintf(out, "\n");
+		    }
+		    fprintf(out, "GRASS_INFO_PERCENT: %d\n", x);
+		    fflush(out);
+		}
+		first = 0;
+	    }
 	}
     }
 
