xref: /trunk/main/codemaker/source/bonobowrappermaker/corbaoptions.cxx (revision 9c15e1abd703a7953928d7a80655ae1a76a41f6d)
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 
30 sal_Bool CorbaOptions::initOptions(int ac, char* av[], sal_Bool bCmdFile)
31 {
32     sal_Bool    ret = sal_True;
33     sal_uInt16  i=0;
34 
35     if (!bCmdFile)
36     {
37         bCmdFile = sal_True;
38 
39         m_program = av[0];
40 
41         if (ac < 2)
42         {
43             fprintf(stderr, "%s", prepareHelp().getStr());
44             ret = sal_False;
45         }
46 
47         i = 1;
48     } else
49     {
50         i = 0;
51     }
52 
53     char    *s=NULL;
54     for (i; i < ac; i++)
55     {
56         if (av[i][0] == '-')
57         {
58             switch (av[i][1])
59             {
60                 case 'O':
61                     if (av[i][2] == '\0')
62                     {
63                         if (i < ac - 1 && av[i+1][0] != '-')
64                         {
65                             i++;
66                             s = av[i];
67                         } else
68                         {
69                             OString tmp("'-O', please check");
70                             if (i <= ac - 1)
71                             {
72                                 tmp += " your input '" + OString(av[i+1]) + "'";
73                             }
74 
75                             throw IllegalArgument(tmp);
76                         }
77                     } else
78                     {
79                         s = av[i] + 2;
80                     }
81 
82                     m_options["-O"] = OString(s);
83                     break;
84                 case 'H':
85                     if (av[i][2] == '\0')
86                     {
87                         if (i < ac - 1 && av[i+1][0] != '-')
88                         {
89                             i++;
90                             s = av[i];
91                         } else
92                         {
93                             OString tmp("'-H', please check");
94                             if (i <= ac - 1)
95                             {
96                                 tmp += " your input '" + OString(av[i+1]) + "'";
97                             }
98 
99                             throw IllegalArgument(tmp);
100                         }
101                     } else
102                     {
103                         s = av[i] + 2;
104                     }
105 
106                     m_options["-H"] = OString(s);
107                     break;
108                 case 'B':
109                     if (av[i][2] == '\0')
110                     {
111                         if (i < ac - 1 && av[i+1][0] != '-')
112                         {
113                             i++;
114                             s = av[i];
115                         } else
116                         {
117                             OString tmp("'-B', please check");
118                             if (i <= ac - 1)
119                             {
120                                 tmp += " your input '" + OString(av[i+1]) + "'";
121                             }
122 
123                             throw IllegalArgument(tmp);
124                         }
125                     } else
126                     {
127                         s = av[i] + 2;
128                     }
129 
130                     m_options["-B"] = OString(s);
131                     break;
132                 case 'T':
133                     if (av[i][2] == '\0')
134                     {
135                         if (i < ac - 1 && av[i+1][0] != '-')
136                         {
137                             i++;
138                             s = av[i];
139                         } else
140                         {
141                             OString tmp("'-T', please check");
142                             if (i <= ac - 1)
143                             {
144                                 tmp += " your input '" + OString(av[i+1]) + "'";
145                             }
146 
147                             throw IllegalArgument(tmp);
148                         }
149                     } else
150                     {
151                         s = av[i] + 2;
152                     }
153 
154                     if (m_options.count("-T") > 0)
155                     {
156                         OString tmp(m_options["-T"]);
157                         tmp = tmp + ";" + s;
158                         m_options["-T"] = tmp;
159                     } else
160                     {
161                         m_options["-T"] = OString(s);
162                     }
163                     break;
164                 case 'G':
165                     if (av[i][2] != '\0')
166                     {
167                         OString tmp("'-G', please check");
168                         if (i <= ac - 1)
169                         {
170                             tmp += " your input '" + OString(av[i]) + "'";
171                         }
172 
173                         throw IllegalArgument(tmp);
174                     }
175 
176                     m_options["-G"] = OString("");
177                     break;
178                 default:
179                     throw IllegalArgument("the option is unknown" + OString(av[i]));
180                     break;
181             }
182         } else
183         {
184             if (av[i][0] == '@')
185             {
186                 FILE* cmdFile = fopen(av[i]+1, "r");
187                 if( cmdFile == NULL )
188                 {
189                     fprintf(stderr, "%s", prepareHelp().getStr());
190                     ret = sal_False;
191                 } else
192                 {
193                     int rargc=0;
194                     char* rargv[512];
195                     char  buffer[512];
196 
197                     while ( fscanf(cmdFile, "%s", buffer) != EOF )
198                     {
199                         rargv[rargc]= strdup(buffer);
200                         rargc++;
201                     }
202                     fclose(cmdFile);
203 
204                     ret = initOptions(rargc, rargv, bCmdFile);
205 
206                     for (long i=0; i < rargc; i++)
207                     {
208                         free(rargv[i]);
209                     }
210                 }
211             } else
212             {
213                 m_inputFiles.push_back(av[i]);
214             }
215         }
216     }
217     printf("-T: %s\n",                      m_options["-T"].getStr());
218 
219     return ret;
220 }
221 
222 OString CorbaOptions::prepareHelp()
223 {
224     OString help("\nusing: ");
225     help += m_program + " [-options] file_1 ... file_n\nOptions:\n";
226     help += "    -O<file>   = file name for the generated output.\n";
227     help += "                 The output directory tree is generated under this directory.\n";
228     help += "    -T<name>   = name specifies a type or a list of types. The output for this\n";
229     help += "      [t1;...]   type is generated. If no '-T' option is specified,\n";
230     help += "                 then output for all types is generated.\n";
231     help += "                 Example: 'com.sun.star.uno.XInterface' is a valid type.\n";
232     help += "    -B<name>   = name specifies the base node. All types are searched under this\n";
233     help += "                 node. Default is the root '/' of the registry files.\n";
234     help += "    -G         = generate only target files which does not exists.\n";
235     help += "    -H<header> = include CORBA generated <header>.\n";
236     help += prepareVersion();
237 
238     return help;
239 }
240 
241 OString CorbaOptions::prepareVersion()
242 {
243     OString version(m_program);
244     version += m_program + " Version 2.0\n\n";
245     return version;
246 }
247 
248 /* vim: set noet sw=4 ts=4: */
249