123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include "list.h"
- /*******************************************************************
- read the element list file
- format is:
- # ... comments
- main element:alias:description:menu text
- sub element:description
- sub element:description
- .
- .
- .
- ******************************************************************/
- int nlist;
- struct list *list;
- static int format_error(char *, int, char *);
- int read_list(int check_if_empty)
- {
- FILE *fd;
- char element_list[GPATH_MAX];
- char buf[1024];
- char elem[100];
- char alias[100];
- char desc[100];
- char text[100];
- int any;
- int line;
- char *env;
- nlist = 0;
- list = 0;
- any = 0;
- env = getenv("ELEMENT_LIST");
- if (env)
- strcpy(element_list, env);
- else
- sprintf(element_list, "%s/etc/element_list", G_gisbase());
- fd = fopen(element_list, "r");
- if (!fd)
- G_fatal_error("can't open database element list <%s>", element_list);
- line = 0;
- while (G_getl(buf, sizeof(buf), fd)) {
- line++;
- if (*buf == '#')
- continue;
- if (*buf == ' ' || *buf == '\t') { /* support element */
- *desc = 0;
- if (sscanf(buf, "%[^:]:%[^\n]", elem, desc) < 1)
- continue;
- if (*elem == '#')
- continue;
- if (nlist == 0)
- format_error(element_list, line, buf);
- G_strip(elem);
- G_strip(desc);
- add_element(elem, desc);
- }
- else { /* main element */
- if (sscanf
- (buf, "%[^:]:%[^:]:%[^:]:%[^\n]", elem, alias, desc,
- text) != 4)
- format_error(element_list, line, buf);
- G_strip(elem);
- G_strip(alias);
- G_strip(desc);
- G_strip(text);
- list =
- (struct list *)G_realloc(list, (nlist + 1) * sizeof(*list));
- list[nlist].mainelem = G_store(elem);
- list[nlist].alias = G_store(alias);
- list[nlist].maindesc = G_store(desc);
- list[nlist].text = G_store(text);
- list[nlist].nelem = 0;
- list[nlist].element = 0;
- list[nlist].desc = 0;
- list[nlist].status = 0;
- if (!check_if_empty || !empty(elem)) {
- list[nlist].status = 1;
- any = 1;
- }
- nlist++;
- add_element(elem, desc);
- }
- }
- fclose(fd);
- return any;
- }
- static int format_error(char *element_list, int line, char *buf)
- {
- G_fatal_error(_("Format error: <%s>\nLine: %d\n%s"), element_list, line,
- buf);
- return 1;
- }
|