1 /*!
2   \file lib/manage/option.c
3 
4   \brief Manage Library - Define option for parser
5 
6   (C) 2001-2011 by the GRASS Development Team
7 
8   This program is free software under the GNU General Public License
9   (>=v2). Read the file COPYING that comes with GRASS for details.
10 
11   \author Original author CERL
12 */
13 
14 #include <string.h>
15 #include <grass/gis.h>
16 #include <grass/glocale.h>
17 
18 #include "manage_local_proto.h"
19 
20 /*!
21   \brief Define option for parser
22 
23   \param n element id
24 
25   \return pointer to Option structure
26   \return NULL on error
27 */
M_define_option(int n,const char * desc,int multiple)28 struct Option* M_define_option(int n, const char *desc, int multiple)
29 {
30     char *str;
31     struct Option *p;
32 
33     if (n >= nlist)
34 	return NULL;
35 
36     p = G_define_option();
37     p->key = list[n].alias;
38     p->type = TYPE_STRING;
39     if (multiple)
40 	p->key_desc = "name";
41     else
42 	p->key_desc = "from,to";
43     p->required = NO;
44     p->multiple = multiple;
45     G_asprintf(&str, "old,%s,%s", list[n].mainelem, list[n].maindesc);
46     p->gisprompt = str;
47     G_asprintf(&str, _("%s to be %s"),
48 	       list[n].text, desc);
49     p->description = str;
50     if (strcmp(p->key, "raster") == 0 || strcmp(p->key, "raster_3d") == 0)
51 	p->guisection = _("Raster");
52     else if (strcmp(p->key, "vector") == 0)
53 	p->guisection = _("Vector");
54     else if (strcmp(p->key, "region") == 0)
55 	p->guisection = _("Region");
56     else if (strcmp(p->key, "group") == 0)
57 	p->guisection = _("Group");
58 
59     return p;
60 }
61 
62 /*!
63   \brief Get list of element types separated by comma
64 
65   String buffer is allocated by G_malloc().
66 
67   \param do_all TRUE to add "all" to the buffer
68 
69   \return pointer to allocated buffer with types
70 */
M_get_options(int do_all)71 const char *M_get_options(int do_all)
72 {
73     int len, n;
74     char *str;
75 
76     for (len = 0, n = 0; n < nlist; n++)
77 	len += strlen(list[n].alias) + 1;
78     if (do_all)
79 	len += 4;
80     str = G_malloc(len);
81 
82     for (n = 0; n < nlist; n++) {
83 	if (n) {
84 	    strcat(str, ",");
85 	    strcat(str, list[n].alias);
86 	}
87 	else
88 	    strcpy(str, list[n].alias);
89     }
90 
91     if (do_all)
92 	strcat(str, ",all");
93 
94     return str;
95 }
96 
97 /*!
98   \brief Get list of element desc separated by comma
99 
100   String buffer is allocated by G_malloc().
101 
102   \param do_all TRUE to add "all" to the buffer
103 
104   \return pointer to allocated buffer with desc
105 */
M_get_option_desc(int do_all)106 const char *M_get_option_desc(int do_all)
107 {
108     int len, n;
109     char *str;
110     const char *str_all = "all;all types";
111 
112     for (len = 0, n = 0; n < nlist; n++) {
113 	len += strlen(list[n].alias) + 1;
114 	len += strlen(list[n].text) + 1;
115     }
116     if (do_all)
117 	len += strlen(str_all) + 1;
118     str = G_malloc(len);
119 
120     for (n = 0; n < nlist; n++) {
121 	if (n) {
122 	    strcat(str, ";");
123 	    strcat(str, list[n].alias);
124 	    strcat(str, ";");
125 	    strcat(str, list[n].text);
126 	}
127 	else {
128 	    strcpy(str, list[n].alias);
129 	    strcat(str, ";");
130 	    strcat(str, list[n].text);
131 	}
132     }
133 
134     if (do_all) {
135 	strcat(str, ";");
136 	strcat(str, str_all);
137     }
138 
139     return str;
140 }
141