check_reclass.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <string.h>
  2. #include <grass/gis.h>
  3. #include <grass/list.h>
  4. #include <grass/raster.h>
  5. #include <grass/glocale.h>
  6. int check_reclass(const char *name, const char *mapset, int force)
  7. {
  8. char rname[GNAME_MAX], rmapset[GMAPSET_MAX];
  9. char **rmaps;
  10. int nrmaps;
  11. if (Rast_is_reclassed_to(name, mapset, &nrmaps, &rmaps) > 0) {
  12. for (; *rmaps; rmaps++) {
  13. /* force remove */
  14. if (force)
  15. G_warning(_("[%s@%s] is a base map for [%s]. Remove forced."),
  16. name, mapset, *rmaps);
  17. else
  18. G_warning(_
  19. ("[%s@%s] is a base map. Remove reclassed map first: %s"),
  20. name, mapset, *rmaps);
  21. }
  22. if (!force)
  23. return 1;
  24. }
  25. if (Rast_is_reclass(name, mapset, rname, rmapset) > 0 &&
  26. Rast_is_reclassed_to(rname, rmapset, &nrmaps, &rmaps) > 0) {
  27. char path[GPATH_MAX];
  28. char *p = strchr(rname, '@');
  29. char *qname = G_fully_qualified_name(name, mapset);
  30. if (p)
  31. *p = '\0';
  32. G__file_name_misc(path, "cell_misc", "reclassed_to", rname, rmapset);
  33. if (nrmaps == 1 && !G_strcasecmp(rmaps[0], qname)) {
  34. if (remove(path) < 0)
  35. G_warning(_
  36. ("Removing information about reclassed map from [%s@%s] failed"),
  37. rname, rmapset);
  38. }
  39. else {
  40. FILE *fp = fopen(path, "w");
  41. if (fp) {
  42. for (; *rmaps; rmaps++)
  43. if (G_strcasecmp(*rmaps, qname))
  44. fprintf(fp, "%s\n", *rmaps);
  45. fclose(fp);
  46. }
  47. else
  48. G_warning(_
  49. ("Removing information about reclassed map from [%s@%s] failed"),
  50. rname, rmapset);
  51. }
  52. }
  53. return 0;
  54. }