Index: general/manage/list.h
===================================================================
RCS file: /home/grass/grassrepository/grass6/general/manage/list.h,v
retrieving revision 1.4
diff -u -r1.4 list.h
--- general/manage/list.h	13 Jan 2007 19:09:45 -0000	1.4
+++ general/manage/list.h	12 Sep 2007 11:20:29 -0000
@@ -39,6 +39,7 @@
 int do_copy(int, char *, char *, char *);
 /* do_list.c */
 int do_list(int, char *);
+int do_list2(int, char *, int);
 /* do_remove.c */
 int do_remove(int, char *);
 /* do_rename.c */
Index: general/manage/cmd/list.c
===================================================================
RCS file: /home/grass/grassrepository/grass6/general/manage/cmd/list.c,v
retrieving revision 1.7
diff -u -r1.7 list.c
--- general/manage/cmd/list.c	12 Feb 2007 15:01:02 -0000	1.7
+++ general/manage/cmd/list.c	12 Sep 2007 11:20:30 -0000
@@ -30,8 +30,9 @@
 main (int argc, char *argv[])
 {
 	int i, n, len;
+	int ncols_per_line;
 	struct GModule *module;
-	struct Option *mapset;
+	struct Option *mapset, *ncols;
 	struct Flag *full;
 
 	init (argv[0]);
@@ -48,7 +49,7 @@
 	element->type     = TYPE_STRING;
 	element->required = YES;
 	element->multiple = YES;
-	element->description = "Data type";
+	element->description = _("Data type");
 	for (len=0,n=0 ; n < nlist; n++)
 	    len += strlen (list[n].alias)+1;
 	element->options = G_malloc(len);
@@ -72,9 +73,16 @@
 	mapset->description = _("Mapset to list (default: current search path)");
 #define MAPSET mapset->answer
 
+	ncols = G_define_option();
+	ncols->key =      "ncols";
+	ncols->type = TYPE_INTEGER;
+	ncols->description = _("Number of elements per line (0 for autodetect)");
+	ncols->answer = "0";
+
 	full = G_define_flag();
 	full->key = 'f';
-	full->description = _("Verbose listing (also list map titles)");
+	full->label = _("Verbose listing (also list map titles)");
+	full->description = _("Prints one element per line");
 #define FULL full->answer
 
 	if (G_parser(argc, argv))
@@ -88,13 +96,17 @@
 	if (G_strcasecmp (MAPSET,".") == 0)
 		MAPSET = G_mapset();
 
+	ncols_per_line = atoi (ncols->answer);
+
 	i = 0;
 	while (element -> answers[i])
 	{ 
 		n = parse(element -> answers[i]);
 		
-		if (FULL)
+		if (FULL) /* verbose listing */
 		{
+		    G_warning (_("Parameter '%s' is ignored for verbose listing"),
+			       ncols->key);
 			char lister[300];
 			sprintf (lister, "%s/etc/lister/%s", G_gisbase(), list[n].element[0]);
 			G_debug(3,"lister CMD: %s",lister);
@@ -103,9 +115,24 @@
 			else
 				do_list (n, MAPSET);
 		}
-		else
+		else /* default */
 		{
-			do_list (n, MAPSET);
+		    /*
+		     * if no specific mapset is requested, list the mapsets
+		     * from the mapset search list
+		     * otherwise just list the specified mapset
+		     */
+		    if (strcmp (MAPSET, "") == 0)
+		    {
+			char *mapset;
+			int i;
+			for (i = 0; (mapset = G__mapset_name (i)); i++)
+			    do_list2 (n, mapset, ncols_per_line);
+		    }
+		    else
+		    {
+			do_list2(n, MAPSET, ncols_per_line);
+		    }
 		}
 
 		i++;
Index: general/manage/lib/do_list.c
===================================================================
RCS file: /home/grass/grassrepository/grass6/general/manage/lib/do_list.c,v
retrieving revision 1.1
diff -u -r1.1 do_list.c
--- general/manage/lib/do_list.c	23 Jan 2003 15:40:55 -0000	1.1
+++ general/manage/lib/do_list.c	12 Sep 2007 11:20:30 -0000
@@ -1,8 +1,45 @@
+#include <string.h>
 #include "list.h"
+
+#define SEP "----------------------------------------------"
+
 int 
 do_list (int n, char *mapset)
 {
     G_list_element (list[n].element[0], list[n].desc[0], mapset, (int(*)())0);
 
     return 0;
+}
+
+int do_list2 (int n, char *mapset, int ncols)
+{
+    char **elements;
+    int nitems;
+
+    G_message (SEP);
+
+    /* list elements */
+    elements = G_list (n+1, G_gisdbase(), G_location(), mapset);
+    /* deteremine number of elements */
+    nitems = 0; 
+    while (elements[nitems++])
+	;
+    
+    if (--nitems > 0) {
+	G_important_message (_("%s files available in mapset <%s>:"),
+			     list[n].desc[0], mapset);
+	/* print elements */
+	G_ls_format ((const char**) elements, nitems,
+		     ncols, /* one item per line */
+		     stdout);
+    } 
+    else {
+	G_important_message (_("no %s files available in mapset <%s>:"),
+			     list[n].desc[0], mapset);
+    }		
+
+    /* free list of elements */
+    G_free_list (elements);
+
+    return nitems - 1;
 }
