23 static struct colorinfo *get_colorinfo(
int *);
24 static void free_colorinfo(
struct colorinfo *,
int);
26 static int cmp_clrname(
const void *a,
const void *
b)
28 struct colorinfo *
ca = (
struct colorinfo *)a;
29 struct colorinfo *cb = (
struct colorinfo *)
b;
31 return (strcmp(
ca->name, cb->name));
43 int size, len, nrules;
45 struct colorinfo *colorinfo;
50 colorinfo = get_colorinfo(&nrules);
52 for (i = 0; i < nrules; i++) {
53 name = colorinfo[i].name;
56 if (size < len + n + 2) {
68 free_colorinfo(colorinfo, nrules);
80 int result_len, result_max;
82 const char *
name, *desc;
84 struct colorinfo *colorinfo;
90 colorinfo = get_colorinfo(&nrules);
92 for (i = 0; i < nrules; i++) {
93 name = colorinfo[i].name;
94 desc = colorinfo[i].desc;
97 desc =
_(
"no description");
101 len = strlen(
name) + strlen(desc) + 2;
102 if (result_len + len >= result_max) {
103 result_max = result_len + len + 1000;
107 sprintf(result + result_len,
"%s;%s;",
name, desc);
111 free_colorinfo(colorinfo, nrules);
126 struct colorinfo *colorinfo;
127 const char *
name, *desc, *type;
128 int result_len, result_max;
131 colorinfo = get_colorinfo(&nrules);
137 for (i = 0; i < nrules; i++) {
138 name = colorinfo[i].name;
139 desc = colorinfo[i].desc;
140 type = colorinfo[i].type;
143 len = strlen(
name) + strlen(desc) + strlen(type) + 5;
144 if (result_len + len >= result_max) {
145 result_max = result_len + len + 1000;
149 sprintf(result + result_len,
"%s;%s [%s];",
name, desc, type);
153 len = strlen(
name) + strlen(type) + 5;
154 if (result_len + len >= result_max) {
155 result_max = result_len + len + 1000;
159 sprintf(result + result_len,
"%s; [%s];",
name, type);
164 free_colorinfo(colorinfo, nrules);
177 struct colorinfo *colorinfo;
179 colorinfo = get_colorinfo(&nrules);
181 for (i = 0; i < nrules; i++)
182 fprintf(out,
"%s\n", colorinfo[i].
name);
184 free_colorinfo(colorinfo, nrules);
200 struct colorinfo *colorinfo, csearch, *cfound;
202 colorinfo = get_colorinfo(&nrules);
207 cfound = bsearch(&csearch, colorinfo, nrules,
sizeof(
struct colorinfo),
212 fprintf(out,
"%s: %s [%s]\n", cfound->name, cfound->desc,
216 fprintf(out,
"%s: [%s]\n", cfound->name, cfound->type);
221 if (cfound ==
NULL) {
222 for (i = 0; i < nrules; i++) {
223 if (colorinfo[i].desc) {
224 fprintf(out,
"%s: %s [%s]\n", colorinfo[i].
name,
225 colorinfo[i].desc, colorinfo[i].type);
228 fprintf(out,
"%s: [%s]\n", colorinfo[i].
name,
234 free_colorinfo(colorinfo, nrules);
248 struct colorinfo *colorinfo, csearch;
250 colorinfo = get_colorinfo(&nrules);
252 csearch.name = (
char *)
name;
253 result = (bsearch(&csearch, colorinfo, nrules,
sizeof(
struct colorinfo),
254 cmp_clrname) !=
NULL);
256 free_colorinfo(colorinfo, nrules);
261 struct colorinfo *get_colorinfo(
int *nrules)
266 struct colorinfo *colorinfo;
275 colorinfo =
G_malloc(*nrules *
sizeof(
struct colorinfo));
276 for (i = 0; i < *nrules - 3; i++) {
282 colorinfo[i].name =
G_store(cnames[i]);
283 colorinfo[i].desc =
NULL;
288 fp = fopen(
path,
"r");
296 while (
G_getl2(buf,
sizeof(buf), fp)) {
297 char value[80], color[80];
308 if (sscanf(buf,
"%s %[^\n]", value, color) != 2)
319 if (sscanf(value,
"%lf%c", &
x, &c) == 2 && c ==
'%') {
323 if (sscanf(value,
"%lf", &
x) == 1) {
339 colorinfo[i].type =
G_store(
_(
"range: map values"));
341 G_snprintf(buf,
sizeof(buf) - 1,
_(
"range: %g to %g"), rmin, rmax);
342 colorinfo[i].type =
G_store(buf);
348 colorinfo[*nrules - 3].name =
G_store(
"random");
349 colorinfo[*nrules - 3].desc =
NULL;
350 colorinfo[*nrules - 3].type =
G_store(
_(
"range: map values"));
352 colorinfo[*nrules - 2].name =
G_store(
"grey.eq");
353 colorinfo[*nrules - 2].desc =
NULL;
354 colorinfo[*nrules - 2].type =
G_store(
_(
"range: map values"));
356 colorinfo[*nrules - 1].name =
G_store(
"grey.log");
357 colorinfo[*nrules - 1].desc =
NULL;
358 colorinfo[*nrules - 1].type =
G_store(
_(
"range: map values"));
360 qsort(colorinfo, *nrules,
sizeof(
struct colorinfo), cmp_clrname);
364 fp = fopen(
path,
"r");
374 struct colorinfo csearch, *cfound;
376 if (!
G_getl2(buf,
sizeof(buf), fp))
384 cname =
G_chop(tokens[0]);
385 cdesc =
G_chop(tokens[1]);
387 csearch.name = cname;
388 cfound = bsearch(&csearch, colorinfo, *nrules,
sizeof(
struct colorinfo),
401 void free_colorinfo(
struct colorinfo *colorinfo,
int nrules)
405 for (i = 0; i < nrules; i++) {
406 if (colorinfo[i].
name)
408 if (colorinfo[i].desc)
409 G_free(colorinfo[i].desc);
410 if (colorinfo[i].type)
411 G_free(colorinfo[i].type);
int G_getl2(char *, int, FILE *)
Gets a line of text from a file of any pedigree.
void G_free(void *)
Free allocated memory.
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
int G_snprintf(char *, size_t, const char *,...) __attribute__((format(printf
void G_free_tokens(char **)
Free memory allocated to tokens.
char ** G_ls2(const char *, int *)
Stores a sorted directory listing in an array.
void G_strip(char *)
Removes all leading and trailing white space from string.
int G_number_of_tokens(char **)
Return number of tokens.
int int G_strcasecmp(const char *, const char *)
String compare ignoring case (upper or lower)
const char * G_gisbase(void)
Get full path name of the top level module directory.
char * G_chop(char *)
Chop leading and trailing white spaces.
char * G_store(const char *)
Copy string to allocated memory.
char ** G_tokenize(const char *, const char *)
Tokenize string.
char * G_color_rules_options(void)
Get list of color rules for Option->options.
void G_list_color_rules(FILE *out)
Print color rules.
char * G_color_rules_description_type(void)
Get color rules description for Option->descriptions.
void G_list_color_rules_description_type(FILE *out, char *name)
Print color rules with description and type.
int G_find_color_rule(const char *name)
Check if color rule is defined.
char * G_color_rules_descriptions(void)
Get color rules description for Option->descriptions.