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 
23 
24 #include <stdio.h>
25 
26 #include "rtl/ustring.hxx"
27 #include "rtl/ustrbuf.hxx"
28 #include "rtl/process.h"
29 
30 #include "com/sun/star/uno/RuntimeException.hpp"
31 
32 using namespace ::rtl;
33 using namespace ::com::sun::star::uno;
34 
35 namespace unodevtools {
36 
37 //-------------------------------------------------------------------------------
38 #if OSL_DEBUG_LEVEL > 1
out(const sal_Char * pText)39 static void out( const sal_Char * pText )
40 {
41     fprintf( stderr, pText );
42 }
43 #endif
44 
45 //-------------------------------------------------------------------------------
readOption(OUString * pValue,const sal_Char * pOpt,sal_Int32 * pnIndex,const OUString & aArg)46 sal_Bool readOption( OUString * pValue, const sal_Char * pOpt,
47                      sal_Int32 * pnIndex, const OUString & aArg)
48 	throw (RuntimeException)
49 {
50 	const OUString dash = OUString(RTL_CONSTASCII_USTRINGPARAM("-"));
51 	if(aArg.indexOf(dash) != 0)
52 		return sal_False;
53 
54 	OUString aOpt = OUString::createFromAscii( pOpt );
55 
56 	if (aArg.getLength() < aOpt.getLength())
57 		return sal_False;
58 
59 	if (aOpt.equalsIgnoreAsciiCase( aArg.copy(1) )) {
60 		// take next argument
61 		++(*pnIndex);
62 
63 		rtl_getAppCommandArg(*pnIndex, &pValue->pData);
64 		if (*pnIndex >= (sal_Int32)rtl_getAppCommandArgCount() ||
65             pValue->copy(1).equals(dash))
66 		{
67 			OUStringBuffer buf( 32 );
68 			buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("incomplete option \"-") );
69 			buf.appendAscii( pOpt );
70 			buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\" given!") );
71 			throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
72 		} else {
73 #if OSL_DEBUG_LEVEL > 1
74 			out( "\n> identified option -" );
75 			out( pOpt );
76 			out( " = " );
77 			OString tmp = OUStringToOString(*pValue, RTL_TEXTENCODING_ASCII_US);
78   			out( tmp.getStr() );
79 #endif
80 			++(*pnIndex);
81 			return sal_True;
82 		}
83 	} else if (aArg.indexOf(aOpt) == 1) {
84 		*pValue = aArg.copy(1 + aOpt.getLength());
85 #if OSL_DEBUG_LEVEL > 1
86 		out( "\n> identified option -" );
87 		out( pOpt );
88 		out( " = " );
89 		OString tmp = OUStringToOString(*pValue, RTL_TEXTENCODING_ASCII_US);
90 		out( tmp.getStr() );
91 #endif
92 		++(*pnIndex);
93 
94 		return sal_True;
95 	}
96 	return sal_False;
97 }
98 
99 //-------------------------------------------------------------------------------
readOption(sal_Bool * pbOpt,const sal_Char * pOpt,sal_Int32 * pnIndex,const OUString & aArg)100 sal_Bool readOption( sal_Bool * pbOpt, const sal_Char * pOpt,
101                      sal_Int32 * pnIndex, const OUString & aArg)
102 {
103 	const OUString dashdash(RTL_CONSTASCII_USTRINGPARAM("--"));
104 	const OUString dash(RTL_CONSTASCII_USTRINGPARAM("-"));
105 	OUString aOpt = OUString::createFromAscii(pOpt);
106 
107 	if((aArg.indexOf(dash) == 0 && aOpt.equalsIgnoreAsciiCase(aArg.copy(1))) ||
108        (aArg.indexOf(dashdash) == 0 && aOpt.equalsIgnoreAsciiCase(aArg.copy(2))) )
109 	{
110 		++(*pnIndex);
111 		*pbOpt = sal_True;
112 #if OSL_DEBUG_LEVEL > 1
113 		out( "\n> identified option --" );
114 		out( pOpt );
115 #endif
116 		return sal_True;
117 	}
118 	return sal_False;
119 }
120 
121 } // end of namespace unodevtools
122