/*! \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 #include /*! \brief Check if map name is fully qualified (map @ mapset) Returns a fully qualified name for the file name in mapset. Currently this string is in the form name@mapset, but the programmer should pretend not to know this and always call this routine to get the fully qualified name. Note: - name is char array of size GNAME_MAX - mapset 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 name in mapset. Currently this string is in the form name@mapset, 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 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 name in mapset. Note: - name, xname are char array of size GNAME_MAX - mapset, xmapset 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; }