Index: display/d.vect/plot1.c
===================================================================
--- display/d.vect/plot1.c	(revision 32913)
+++ display/d.vect/plot1.c	(working copy)
@@ -131,7 +131,7 @@
 	  int chcat, SYMBOL * Symb, int size, int id_flag,
 	  int table_colors_flag, int cats_color_flag, char *rgb_column,
 	  int default_width, char *width_column, double width_scale,
-	  int z_color_flag, char *style)
+	  int z_color_flag, char *style, BOUND_BOX *min_box)
 {
     int i, ltype, nlines = 0, line, cat = -1;
     double *x, *y;
@@ -154,6 +154,9 @@
     unsigned char which;
     int width;
 
+    BOUND_BOX line_box; /* used for min_box */
+    int first_box;
+
     line_color = G_malloc(sizeof(RGBA_Color));
     fill_color = G_malloc(sizeof(RGBA_Color));
     primary_color = G_malloc(sizeof(RGBA_Color));
@@ -275,6 +278,7 @@
 	nlines = Vect_get_num_lines(Map);
 
     line = 0;
+    first_box = 1;
     while (1) {
 	if (Vect_level(Map) >= 2) {
 	    line++;
@@ -518,6 +522,19 @@
 	    else		/*use different user defined render methods */
 		plot_polyline(x, y, Points->n_points);
 	}
+
+	/* get line bounding box */
+	if (Vect_level(Map) >= 2 && min_box) {
+	    if (Vect_get_line_box(Map, line, &line_box)) {
+		if (first_box) {
+		    Vect_box_copy(min_box, &line_box);
+		    first_box = 0;
+		}
+		else {
+		    Vect_box_extend(min_box, &line_box);
+		}
+	    }
+	}
     }
 
     Vect_destroy_line_struct(Points);
Index: display/d.vect/local_proto.h
===================================================================
--- display/d.vect/local_proto.h	(revision 32913)
+++ display/d.vect/local_proto.h	(working copy)
@@ -5,7 +5,8 @@
 int close_vect(FILE *);
 int plot1(struct Map_info *, int, int, struct cat_list *,
 	  const struct color_rgb *, const struct color_rgb *, int, SYMBOL *,
-	  int, int, int, int, char *, int, char *, double, int, char *);
+	  int, int, int, int, char *, int, char *, double, int, char *,
+	  BOUND_BOX *);
 int label(struct Map_info *, int, int, struct cat_list *, LATTR *, int);
 int topo(struct Map_info *, int, int, LATTR *);
 int dir(struct Map_info *, int, struct cat_list *, int);
Index: display/d.vect/main.c
===================================================================
--- display/d.vect/main.c	(revision 32922)
+++ display/d.vect/main.c	(working copy)
@@ -104,7 +104,7 @@
     struct Option *render_opt;
     struct Flag *verbose_flag;	/* please remove before GRASS 7 released */
     struct Flag *id_flag, *table_acolors_flag, *cats_acolors_flag, *x_flag,
-	*zcol_flag;
+	*zcol_flag, *region_flag;
     struct cat_list *Clist;
     int *cats, ncat;
     LATTR lattr;
@@ -113,7 +113,7 @@
     dbDriver *driver;
     dbHandle handle;
     struct Cell_head window;
-    BOUND_BOX box;
+    BOUND_BOX box, *min_box;
     double overlap;
     SYMBOL *Symb;
 
@@ -368,6 +368,10 @@
     zcol_flag->key = 'z';
     zcol_flag->description = _("Colorize polygons according to z height");
 
+    region_flag = G_define_flag();
+    region_flag->key = 'r';
+    region_flag->description = _("Print minimal region extent of selected features");
+
     /* Check command line */
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
@@ -487,6 +491,17 @@
     /* open vector */
     level = Vect_open_old(&Map, map_name, mapset);
 
+    if (Vect_level(&Map) < 2) {
+	G_warning(_("Flag '%c' requires topology level"),
+		  region_flag->key);
+	region_flag->answer = NO;
+    }
+    
+    if (region_flag->answer)
+	min_box = (BOUND_BOX *) G_malloc(sizeof(BOUND_BOX));
+    else
+	min_box = NULL;
+    
     if (where_opt->answer) {
 	if (Clist->field < 1)
 	    G_fatal_error(_("'layer' must be > 0 for 'where'."));
@@ -690,7 +705,7 @@
 			     (int)id_flag->answer, table_acolors_flag->answer,
 			     cats_acolors_flag->answer, rgbcol_opt->answer,
 			     default_width, wcolumn_opt->answer, width_scale,
-			     zcol_flag->answer, zcol_opt->answer);
+			     zcol_flag->answer, zcol_opt->answer, min_box);
 		if (wcolumn_opt->answer)
 		    D_line_width(default_width);
 	    }
@@ -736,6 +751,20 @@
 
     R_close_driver();
 
+    if(region_flag->answer) {
+	fprintf(stdout, "n=%f\n", min_box->N);
+	fprintf(stdout, "s=%f\n", min_box->S);
+	fprintf(stdout, "w=%f\n", min_box->W);
+	fprintf(stdout, "e=%f\n", min_box->E);
+	if (Vect_is_3d(&Map)) {
+	    fprintf(stdout, "t=%f\n", min_box->T);
+	    fprintf(stdout, "b=%f\n", min_box->B); 
+	}
+	fflush(stdout);
+
+	G_free ((void *) min_box);
+    }
+    
     if (verbose)
 	G_done_msg(" ");
 

