123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <grass/gis.h>
- #include <grass/spawn.h>
- #include "kappa.h"
- #include <grass/glocale.h>
- #include "local_proto.h"
- static void die(void)
- {
- unlink(stats_file);
- G_fatal_error(_("Problem reading r.stats output"));
- }
- int stats(void)
- {
- char buf[1024];
- char mname[GNAME_MAX], rname[GMAPSET_MAX];
- const char *mmapset, *rmapset;
- int i, nl;
- size_t ns;
- FILE *fd;
- char **tokens;
- const char *argv[9];
- int argc = 0;
- strcpy(mname, maps[0]);
- mmapset = G_find_raster2(mname, "");
- if (mmapset == NULL)
- G_fatal_error(_("Raster map <%s> not found"), maps[0]);
- strcpy(rname, maps[1]);
- rmapset = G_find_raster2(rname, "");
- if (rmapset == NULL)
- G_fatal_error(_("Raster map <%s> not found"), maps[1]);
- stats_file = G_tempfile();
- argv[argc++] = "r.stats";
- argv[argc++] = "-cin";
- argv[argc++] = "separator=:";
- sprintf(buf, "input=%s,%s",
- G_fully_qualified_name(maps[1], mmapset),
- G_fully_qualified_name(maps[0], rmapset));
- argv[argc++] = buf;
- argv[argc++] = SF_REDIRECT_FILE;
- argv[argc++] = SF_STDOUT;
- argv[argc++] = SF_MODE_OUT;
- argv[argc++] = stats_file;
- argv[argc++] = NULL;
- if (G_vspawn_ex(argv[0], argv) != 0) {
- remove(stats_file);
- G_fatal_error("error running r.stats");
- }
- fd = fopen(stats_file, "r");
- if (fd == NULL) {
- unlink(stats_file);
- sprintf(buf, "Unable to open result file <%s>\n", stats_file);
- }
- while (G_getl(buf, sizeof buf, fd)) {
- tokens = G_tokenize(buf, ":");
- i = 0;
- ns = nstats++;
- Gstats = (GSTATS *) G_realloc(Gstats, nstats * sizeof(GSTATS));
- Gstats[ns].cats = (long *)G_calloc(nlayers, sizeof(long));
- for (nl = 0; nl < nlayers; nl++) {
- if (sscanf(tokens[i++], "%ld", &Gstats[ns].cats[nl]) != 1)
- die();
- }
- if (sscanf(tokens[i++], "%ld", &Gstats[ns].count) != 1)
- die();
- G_free_tokens(tokens);
- }
- fclose(fd);
- unlink(stats_file);
- return 0;
- }
|