20 #include <sys/types.h>
23 #include <grass/gis.h>
24 #include <grass/glocale.h>
26 static int broken_pipe;
27 static int hit_return = 0;
28 static int list_element(FILE *,
const char *,
const char *,
const char *,
29 int (*)(
const char *,
const char *,
const char *));
30 static RETSIGTYPE sigpipe_catch(
int);
63 int (*lister) (
const char *,
const char *,
const char *))
70 RETSIGTYPE (*sigpipe)(int);
76 sigpipe =
signal(SIGPIPE, sigpipe_catch);
80 if (desc == 0 || *desc == 0)
89 more = popen(
"%GRASS_PAGER%",
"w");
91 more = popen(
"$GRASS_PAGER",
"w");
99 fprintf(more,
"----------------------------------------------\n");
106 if (mapset == 0 || *mapset == 0)
108 count += list_element(more, element, desc, mapset, lister);
110 count += list_element(more, element, desc, mapset, lister);
114 if (mapset == 0 || *mapset == 0)
115 fprintf(more, _(
"no %s files available in current mapset\n"),
118 fprintf(more, _(
"no %s files available in mapset <%s>\n"),
122 fprintf(more,
"----------------------------------------------\n");
132 if (hit_return && isatty(1)) {
133 fprintf(stderr, _(
"hit RETURN to continue -->"));
134 while (getchar() !=
'\n') ;
140 static RETSIGTYPE sigpipe_catch(
int n)
146 static int list_element(FILE * out,
147 const char *element,
const char *desc,
148 const char *mapset,
int (*lister) (
const char *,
152 char path[GPATH_MAX];
160 if (strcmp(mapset,
".") == 0)
171 if (access(path, 0) != 0) {
181 list =
G__ls(path, &count);
184 fprintf(out, _(
"%s files available in mapset <%s>:\n"), desc, mapset);
187 char name[GNAME_MAX];
190 lister(name, mapset, title);
192 fprintf(out,
"\n%-18s %-.60s\n", name, title);
197 for (i = 0; i < count; i++) {
200 lister(list[i], mapset, title);
201 fprintf(out,
"%-18s %-.60s\n", list[i], title);
209 for (i = 0; i < count; i++)
238 case G_ELEMENT_RASTER:
242 case G_ELEMENT_GROUP:
246 case G_ELEMENT_VECTOR:
250 case G_ELEMENT_REGION:
258 buf = (
char *)G_malloc(strlen(gisbase) + strlen(location)
259 + strlen(mapset) + strlen(el) + 4);
261 sprintf(buf,
"%s/%s/%s/%s", gisbase, location, mapset, el);
267 list = (
char **)G_calloc(1,
sizeof(
char *));
273 if (dp->d_name[0] ==
'.')
279 list = (
char **)G_calloc(count + 1,
sizeof(
char *));
283 if (dp->d_name[0] ==
'.')
286 list[count] = (
char *)G_malloc(strlen(dp->d_name) + 1);
287 strcpy(list[count], dp->d_name);