123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*!
- \file lib/gis/nme_in_mps.c
- \brief GIS Library - check map name
- (C) 2001-2009, 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 Original author CERL
- */
- #include <string.h>
- #include <grass/gis.h>
- /*!
- \brief Check if map name is fully qualified (map @ mapset)
-
- Returns a fully qualified name for the file <i>name</i> in
- <i>mapset</i>. Currently this string is in the form
- <i>name@mapset</i>, but the programmer should pretend not to know this
- and always call this routine to get the fully qualified name.
- Note:
- - <i>name</i> is char array of size GNAME_MAX
- - <i>mapset</i> is char array of size GMAPSET_MAX
- \param fullname full map name
- \param[out] name map name
- \param[out] mapset mapset name
-
- \return 1 if input map name is fully qualified
- \return 0 if input map name is not fully qualified
- */
- int G_name_is_fully_qualified(const char *fullname, char *name, char *mapset)
- {
- const char *p;
- char *q;
- /* search for name@mapset */
- *name = *mapset = 0;
- for (p = fullname; *p; p++)
- if (*p == '@')
- break;
- if (*p == 0)
- return 0;
- /* copy the name part */
- q = name;
- while (fullname != p)
- *q++ = *fullname++;
- *q = 0;
- /* copy the mapset part */
- p++; /* skip the @ */
- q = mapset;
- while ((*q++ = *p++)) ;
- return (*name && *mapset);
- }
- /*!
- \brief Get fully qualified element name
- Returns a fully qualified name for GIS element <i>name</i> in
- <i>mapset</i>. Currently this string is in the form
- <b>name@mapset</b>, but the programmer should pretend not to know
- this and always call this routine to get the fully qualified name.
- String is allocated by G_store().
-
- \code
- #include <grass/gis.h>
- int main(char *argc, char **argv)
- {
- char name[GNAME_MAX], *mapset, *fqn;
- char command[1024];
- G_gisinit(argv[0]);
- mapset = G_find_rast(name, "");
- if (mapset == NULL)
- exit(EXIT_SUCCESS);
- fqn = G_fully_qualified_name (name, mapset);
- printf (stdout, "map='%s'", fqn);
- exit(EXIT_SUCCESS);
- }
- \endcode
- \param name element name
- \param mapset mapset name
- \return pointer to full element name (map@mapset)
- */
- char *G_fully_qualified_name(const char *name, const char *mapset)
- {
- char fullname[GNAME_MAX + GMAPSET_MAX];
- if (strchr(name, '@') || strlen(mapset) < 1) {
- sprintf(fullname, "%s", name);
- }
- else {
- sprintf(fullname, "%s@%s", name, mapset);
- }
- return G_store(fullname);
- }
- /*!
- \brief Returns unqualified map name (without @ mapset)
- Returns an unqualified name for the file <i>name</i> in
- <i>mapset</i>.
- Note:
- - <i>name, xname</i> are char array of size GNAME_MAX
- - <i>mapset, xmapset</i> are char array of size GMAPSET_MAX
- \param name map name
- \param mapset mapset to check or NULL
- \param[out] xname map name
- \param[out] xmapset mapset name
- \return 1 if input map name is fully qualified
- \return 0 if name is not fully qualified
- \return -1 if input mapset invalid (mapset != xmapset)
- */
- int G_unqualified_name(const char *name, const char *mapset,
- char *xname, char *xmapset)
- {
- if (G_name_is_fully_qualified(name, xname, xmapset)) {
- /* name is fully qualified */
- if (mapset && *mapset && strcmp(mapset, xmapset) != 0)
- return -1;
- return 1;
- }
- /* name is not fully qualified */
- strcpy(xname, name);
- if (mapset)
- strcpy(xmapset, mapset);
- else
- xmapset[0] = '\0';
-
- return 0;
- }
|