33 char str1[100], str2[100], buf[200], buf2[200], xname[GNAME_MAX],
37 sprintf(buf,
"%s/%s", G3D_DIRECTORY, xname);
38 sprintf(buf2,
"%s@%s", G3D_CATS_ELEMENT, xmapset);
41 sprintf(buf,
"%s/%s", G3D_DIRECTORY, name);
42 sprintf(buf2,
"%s", G3D_CATS_ELEMENT);
49 fprintf(fd,
"# %ld categories\n", (
long)cats->num);
52 fprintf(fd,
"%s\n", cats->title !=
NULL ? cats->title :
"");
55 fprintf(fd,
"%s\n", cats->fmt !=
NULL ? cats->fmt :
"");
56 fprintf(fd,
"%.2f %.2f %.2f %.2f\n",
57 cats->m1, cats->a1, cats->m2, cats->a2);
62 if ((cats->fmt && cats->fmt[0]) || (descr && descr[0])) {
64 sprintf(str1,
"%.10f", val1);
66 fprintf(fd,
"%s:%s\n", str1, descr !=
NULL ? descr :
"");
69 sprintf(str1,
"%.10f", val1);
71 sprintf(str2,
"%.10f", val2);
73 fprintf(fd,
"%s:%s:%s\n", str1, str2,
74 descr !=
NULL ? descr :
"");
85 read_cats(
const char *
name,
const char *mapset,
struct Categories *pcats)
89 char buff[1024], buf2[200], xname[512], xmapset[512];
96 sprintf(buff,
"%s/%s", G3D_DIRECTORY, xname);
97 sprintf(buf2,
"%s@%s", G3D_CATS_ELEMENT, xmapset);
100 sprintf(buff,
"%s/%s", G3D_DIRECTORY, name);
101 sprintf(buf2,
"%s", G3D_CATS_ELEMENT);
108 if (
G_getl(buff,
sizeof(buff), fd) == 0)
111 if (sscanf(buff,
"# %ld", &num) == 1)
113 else if (sscanf(buff,
"%ld", &num) == 1)
117 if (
G_getl(buff,
sizeof(buff), fd) == 0)
127 float m1, a1, m2, a2;
129 if (
G_getl(fmt,
sizeof(fmt), fd) == 0)
132 if (
G_getl(buff,
sizeof(buff), fd) == 0)
134 if (sscanf(buff,
"%f %f %f %f", &m1, &a1, &m2, &a2) != 4)
140 for (cat = 0;; cat++) {
143 if (
G_getl(buff,
sizeof(buff), fd) == 0)
150 if (sscanf(buff,
"%1s", label) != 1)
157 if (sscanf(buff,
"%lf:%lf:%[^\n]", &val1, &val2, label) == 3)
159 else if (sscanf(buff,
"%d:%[^\n]", &cat, label) >= 1)
161 else if (sscanf(buff,
"%lf:%[^\n]", &val1, label) >= 1)
193 G3d_readCats(
const char *name,
const char *mapset,
struct Categories *pcats)
198 switch (read_cats(name, mapset, pcats)) {
209 G_warning(
"category support for [%s] in mapset [%s] %s",