1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_codemaker.hxx"
24 #include <stdio.h>
25
26 #include "corbaoptions.hxx"
27
28 using namespace rtl;
29
initOptions(int ac,char * av[],sal_Bool bCmdFile)30 sal_Bool CorbaOptions::initOptions(int ac, char* av[], sal_Bool bCmdFile)
31 throw( IllegalArgument )
32 {
33 sal_Bool ret = sal_True;
34 sal_uInt16 i=0;
35
36 if (!bCmdFile)
37 {
38 bCmdFile = sal_True;
39
40 m_program = av[0];
41
42 if (ac < 2)
43 {
44 fprintf(stderr, "%s", prepareHelp().getStr());
45 ret = sal_False;
46 }
47
48 i = 1;
49 } else
50 {
51 i = 0;
52 }
53
54 char *s=NULL;
55 for (i; i < ac; i++)
56 {
57 if (av[i][0] == '-')
58 {
59 switch (av[i][1])
60 {
61 case 'O':
62 if (av[i][2] == '\0')
63 {
64 if (i < ac - 1 && av[i+1][0] != '-')
65 {
66 i++;
67 s = av[i];
68 } else
69 {
70 OString tmp("'-O', please check");
71 if (i <= ac - 1)
72 {
73 tmp += " your input '" + OString(av[i+1]) + "'";
74 }
75
76 throw IllegalArgument(tmp);
77 }
78 } else
79 {
80 s = av[i] + 2;
81 }
82
83 m_options["-O"] = OString(s);
84 break;
85 case 'H':
86 if (av[i][2] == '\0')
87 {
88 if (i < ac - 1 && av[i+1][0] != '-')
89 {
90 i++;
91 s = av[i];
92 } else
93 {
94 OString tmp("'-H', please check");
95 if (i <= ac - 1)
96 {
97 tmp += " your input '" + OString(av[i+1]) + "'";
98 }
99
100 throw IllegalArgument(tmp);
101 }
102 } else
103 {
104 s = av[i] + 2;
105 }
106
107 m_options["-H"] = OString(s);
108 break;
109 case 'B':
110 if (av[i][2] == '\0')
111 {
112 if (i < ac - 1 && av[i+1][0] != '-')
113 {
114 i++;
115 s = av[i];
116 } else
117 {
118 OString tmp("'-B', please check");
119 if (i <= ac - 1)
120 {
121 tmp += " your input '" + OString(av[i+1]) + "'";
122 }
123
124 throw IllegalArgument(tmp);
125 }
126 } else
127 {
128 s = av[i] + 2;
129 }
130
131 m_options["-B"] = OString(s);
132 break;
133 case 'T':
134 if (av[i][2] == '\0')
135 {
136 if (i < ac - 1 && av[i+1][0] != '-')
137 {
138 i++;
139 s = av[i];
140 } else
141 {
142 OString tmp("'-T', please check");
143 if (i <= ac - 1)
144 {
145 tmp += " your input '" + OString(av[i+1]) + "'";
146 }
147
148 throw IllegalArgument(tmp);
149 }
150 } else
151 {
152 s = av[i] + 2;
153 }
154
155 if (m_options.count("-T") > 0)
156 {
157 OString tmp(m_options["-T"]);
158 tmp = tmp + ";" + s;
159 m_options["-T"] = tmp;
160 } else
161 {
162 m_options["-T"] = OString(s);
163 }
164 break;
165 case 'G':
166 if (av[i][2] != '\0')
167 {
168 OString tmp("'-G', please check");
169 if (i <= ac - 1)
170 {
171 tmp += " your input '" + OString(av[i]) + "'";
172 }
173
174 throw IllegalArgument(tmp);
175 }
176
177 m_options["-G"] = OString("");
178 break;
179 default:
180 throw IllegalArgument("the option is unknown" + OString(av[i]));
181 break;
182 }
183 } else
184 {
185 if (av[i][0] == '@')
186 {
187 FILE* cmdFile = fopen(av[i]+1, "r");
188 if( cmdFile == NULL )
189 {
190 fprintf(stderr, "%s", prepareHelp().getStr());
191 ret = sal_False;
192 } else
193 {
194 int rargc=0;
195 char* rargv[512];
196 char buffer[512];
197
198 while ( fscanf(cmdFile, "%s", buffer) != EOF )
199 {
200 rargv[rargc]= strdup(buffer);
201 rargc++;
202 }
203 fclose(cmdFile);
204
205 ret = initOptions(rargc, rargv, bCmdFile);
206
207 for (long i=0; i < rargc; i++)
208 {
209 free(rargv[i]);
210 }
211 }
212 } else
213 {
214 m_inputFiles.push_back(av[i]);
215 }
216 }
217 }
218 printf("-T: %s\n", m_options["-T"].getStr());
219
220 return ret;
221 }
222
prepareHelp()223 OString CorbaOptions::prepareHelp()
224 {
225 OString help("\nusing: ");
226 help += m_program + " [-options] file_1 ... file_n\nOptions:\n";
227 help += " -O<file> = file name for the generated output.\n";
228 help += " The output directory tree is generated under this directory.\n";
229 help += " -T<name> = name specifies a type or a list of types. The output for this\n";
230 help += " [t1;...] type is generated. If no '-T' option is specified,\n";
231 help += " then output for all types is generated.\n";
232 help += " Example: 'com.sun.star.uno.XInterface' is a valid type.\n";
233 help += " -B<name> = name specifies the base node. All types are searched under this\n";
234 help += " node. Default is the root '/' of the registry files.\n";
235 help += " -G = generate only target files which does not exists.\n";
236 help += " -H<header> = include CORBA generated <header>.\n";
237 help += prepareVersion();
238
239 return help;
240 }
241
prepareVersion()242 OString CorbaOptions::prepareVersion()
243 {
244 OString version(m_program);
245 version += m_program + " Version 2.0\n\n";
246 return version;
247 }
248
249 /* vim: set noet sw=4 ts=4: */
250