#include #include #include #include "globals.h" #include "local_proto.h" static int cmp(const void *, const void *); int prepare_group_list (void) { FILE *fd; int *idx; int n; int len,len1,len2; /* open file to store group file names */ fd = fopen (group_list, "w"); if (fd == NULL) G_fatal_error ("Can't open any tempfiles"); /* * build sorted index into group files * so that all cell files for a mapset to appear together */ idx = (int *) G_calloc (group.ref.nfiles, sizeof (int)); for (n = 0; n < group.ref.nfiles; n++) idx[n] = n; qsort (idx, group.ref.nfiles, sizeof(int), cmp); /* determine length of longest mapset name, and longest cell file name */ len1 = len2 = 0; for (n = 0; n < group.ref.nfiles; n++) { len = strlen (group.ref.file[n].name); if (len > len1) len1 = len; len = strlen (group.ref.file[n].mapset); if (len > len2) len2 = len; } /* write lengths, names to file */ fwrite (&len1, sizeof (len1), 1, fd); fwrite (&len2, sizeof (len2), 1, fd); for (n = 0; n < group.ref.nfiles; n++) fprintf (fd, "%s %s\n", group.ref.file[idx[n]].name, group.ref.file[idx[n]].mapset); fclose (fd); G_free (idx); return 0; } static int cmp (const void *aa, const void *bb) { const int *a = aa, *b = bb; int n; if(n = strcmp (group.ref.file[*a].mapset, group.ref.file[*b].mapset)) return n; return strcmp (group.ref.file[*a].name, group.ref.file[*b].name); } /* ask the user to pick a file */ int choose_groupfile (char *name,char *mapset) { int stat; stat = ask_gis_files ("raster", group_list, name, mapset, -1); return(stat); }