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