Browse Source

adding I_list_subgroups fucntion for getting list of subgroups in a group

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@57703 15284696-431f-4ddb-bdfa-cd5b030d7da7
Štěpán Turek 11 years ago
parent
commit
04560155e1
2 changed files with 45 additions and 7 deletions
  1. 1 0
      include/defs/imagery.h
  2. 44 7
      lib/imagery/list_subgp.c

+ 1 - 0
include/defs/imagery.h

@@ -92,6 +92,7 @@ int I_list_group(const char *, const struct Ref *, FILE *);
 int I_list_group_simple(const struct Ref *, FILE *);
 
 /* list_subgp.c */
+char ** I_list_subgroups(const char *, int *);
 int I_list_subgroup(const char *, const char *, const struct Ref *, FILE *);
 int I_list_subgroup_simple(const struct Ref *, FILE *);
 

+ 44 - 7
lib/imagery/list_subgp.c

@@ -1,21 +1,57 @@
 /*!
    \file list_subgp.c
-   
+
    \brief Imagery Library - List subgroup
- 
-   (C) 2001-2008 by the GRASS Development Team
-   
+
+   (C) 2001-2008,2013 by the GRASS Development Team
+
    This program is free software under the GNU General Public License
    (>=v2). Read the file COPYING that comes with GRASS for details.
-   
+
    \author USA CERL
-*/
+ */
 
 #include <string.h>
 #include <grass/imagery.h>
 #include <grass/glocale.h>
 
 /*!
+ * \brief Get list of subgroups which a group contatins.
+ *  
+ * \param group group name
+ * \param[out] subgs_num number of subgroups which the group contains
+ * \return array of subgroup names
+ */
+
+char **I_list_subgroups(const char *group, int *subgs_num)
+{
+    /* Unlike I_list_subgroup and I_list_subgroup_simple this function 
+       returns array of subgroup names, it does not use fprintf. 
+       This approach should make the function usable in more cases. */
+
+    char **subgs;
+    char *path[GPATH_MAX];
+    char *buf[GPATH_MAX];
+    const char *mapset;
+    struct stat sb;
+
+    *subgs_num = 0;
+
+    if (I_find_group(group) == 0)
+	return NULL;
+
+    mapset = G_mapset();
+    sprintf(buf, "group/%s/subgroup", group);
+    G_file_name(path, buf, "", mapset);
+
+    if (!G_lstat(path, &sb) == 0 || !S_ISDIR(sb.st_mode))
+	return NULL;
+
+    subgs = G__ls(path, subgs_num);
+    return subgs;
+}
+
+/*!
  * \brief Prints maps in a subgroup (fancy version)
  *
  * \param group group name
@@ -45,7 +81,8 @@ int I_list_subgroup(const char *group,
 	    max = len;
     }
     fprintf(fd,
-	    _("subgroup <%s> of group <%s> references the following raster maps\n"),
+	    _
+	    ("subgroup <%s> of group <%s> references the following raster maps\n"),
 	    subgroup, group);
     fprintf(fd, "-------------\n");
     tot_len = 0;