123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #include <string.h>
- #include "kappa.h"
- #include "local_proto.h"
- #include <grass/raster.h>
- #include <grass/glocale.h>
- /* function prototypes */
- static int reclass_text(char *text, struct Reclass *reclass, int next);
- static void do_text(char *text, long first, long last);
- static char *append(char *results, char *text);
- char *maskinfo(void)
- {
- struct Reclass reclass;
- char *results, text[100];
- int first, next;
- results = NULL;
- if (G_find_raster("MASK", G_mapset()) == NULL)
- return "none";
- if (Rast_get_reclass("MASK", G_mapset(), &reclass) <= 0) {
- sprintf(text, "MASK in %s", G_mapset());
- return append(results, text);
- }
- sprintf(text, "%s in %s", reclass.name, reclass.mapset);
- results = append(results, text);
- next = 0;
- first = 1;
- do {
- next = reclass_text(text, &reclass, next);
- if (*text == 0)
- break;
- if (first) {
- first = 0;
- results = append(results, ", categories");
- }
- results = append(results, " ");
- results = append(results, text);
- } while (next >= 0);
- Rast_free_reclass(&reclass);
- return results;
- }
- static int reclass_text(char *text, struct Reclass *reclass, int next)
- {
- int i, n, first;
- *text = 0;
- n = reclass->num;
- first = -1;
- for (i = next; i < n; i++) {
- if (reclass->table[i]) {
- if (first < 0)
- first = i;
- }
- else if (first >= 0) {
- do_text(text, (long)(first + reclass->min),
- (long)(i - 1 + reclass->min));
- first = -1;
- if (strlen(text) > 60)
- return i;
- }
- }
- if (first >= 0)
- do_text(text, (long)(first + reclass->min),
- (long)(i - 1 + reclass->min));
- return -1;
- }
- static void do_text(char *text, long first, long last)
- {
- char work[40];
- if (*text)
- strcat(text, " ");
- if (first == last)
- sprintf(work, "%ld", first);
- else
- sprintf(work, "%ld-%ld", first, last);
- strcat(text, work);
- }
- static char *append(char *results, char *text)
- {
- if (results == NULL)
- return G_store(text);
- results = G_realloc(results, strlen(results) + strlen(text) + 1);
- strcat(results, text);
- return results;
- }
|