1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_connectivity.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "propertyids.hxx"
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir namespace dbtools
34*cdf0e10cSrcweir {
35*cdf0e10cSrcweir 	const sal_Char* getPROPERTY_QUERYTIMEOUT()			{ return	"QueryTimeOut"; }
36*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_MAXFIELDSIZE()			{ return	"MaxFieldSize"; }
37*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_MAXROWS()				{ return	"MaxRows"; }
38*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_CURSORNAME()			{ return	"CursorName"; }
39*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_RESULTSETCONCURRENCY()	{ return	"ResultSetConcurrency"; }
40*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_RESULTSETTYPE()			{ return	"ResultSetType"; }
41*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_FETCHDIRECTION()		{ return	"FetchDirection"; }
42*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_FETCHSIZE()				{ return	"FetchSize"; }
43*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ESCAPEPROCESSING()		{ return	"EscapeProcessing"; }
44*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_USEBOOKMARKS()			{ return	"UseBookmarks"; }
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_NAME()					{ return	"Name"; }
47*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_TYPE()					{ return	"Type"; }
48*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_TYPENAME()				{ return 	"TypeName"; }
49*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_PRECISION()				{ return 	"Precision"; }
50*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_SCALE()					{ return 	"Scale"; }
51*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISNULLABLE()			{ return 	"IsNullable"; }
52*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISAUTOINCREMENT()		{ return 	"IsAutoIncrement"; }
53*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISROWVERSION()			{ return 	"IsRowVersion"; }
54*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_DESCRIPTION()			{ return 	"Description"; }
55*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_DEFAULTVALUE()			{ return 	"DefaultValue"; }
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_REFERENCEDTABLE()		{ return 	"ReferencedTable"; }
58*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_UPDATERULE()			{ return 	"UpdateRule"; }
59*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_DELETERULE()			{ return 	"DeleteRule"; }
60*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_CATALOG()				{ return 	"Catalog"; }
61*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISUNIQUE()				{ return 	"IsUnique"; }
62*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISPRIMARYKEYINDEX()		{ return 	"IsPrimaryKeyIndex"; }
63*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISCLUSTERED()			{ return 	"IsClustered"; }
64*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISASCENDING()			{ return 	"IsAscending"; }
65*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_SCHEMANAME()			{ return 	"SchemaName"; }
66*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_CATALOGNAME()			{ return 	"CatalogName"; }
67*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_COMMAND()				{ return 	"Command"; }
68*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_CHECKOPTION()			{ return 	"CheckOption"; }
69*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_PASSWORD()				{ return 	"Password"; }
70*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_RELATEDCOLUMN()			{ return 	"RelatedColumn"; }
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_FUNCTION()				{ return 	"Function"; }
73*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_AGGREGATEFUNCTION()		{ return 	"AggregateFunction"; }
74*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_TABLENAME()				{ return 	"TableName"; }
75*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_REALNAME()				{ return 	"RealName"; }
76*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_DBASEPRECISIONCHANGED() { return	"DbasePrecisionChanged"; }
77*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISCURRENCY()			{ return 	"IsCurrency"; }
78*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ISBOOKMARKABLE()		{ return 	"IsBookmarkable"; }
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_FORMATKEY()				{ return 	"FormatKey"; }
81*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_LOCALE()				{ return 	"Locale"; }
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_AUTOINCREMENTCREATION()	{ return 	"AutoIncrementCreation"; }
84*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_PRIVILEGES()			{ return 	"Privileges"; }
85*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ID_HAVINGCLAUSE()		{ return 	"HavingClause"; }
86*cdf0e10cSrcweir 		const sal_Char* getPROPERTY_ID_ISSIGNED()			{ return 	"IsSigned"; }
87*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_ISSEARCHABLE()		{ return 	"IsSearchable"; }
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_APPLYFILTER()		{ return 	"ApplyFilter"; }
90*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_FILTER()		        { return 	"Filter"; }
91*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_MASTERFIELDS()	    { return 	"MasterFields"; }
92*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_DETAILFIELDS()		{ return 	"DetailFields"; }
93*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_FIELDTYPE()			{ return 	"FieldType"; }
94*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_VALUE()			   	{ return 	"Value"; }
95*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_ACTIVE_CONNECTION()	{ return 	"ActiveConnection"; }
96*cdf0e10cSrcweir         const sal_Char* getPROPERTY_ID_LABEL()		        { return 	"Label"; }
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir 	//============================================================
99*cdf0e10cSrcweir 	//= error messages
100*cdf0e10cSrcweir 	//============================================================
101*cdf0e10cSrcweir 		const sal_Char* getSQLSTATE_SEQUENCE()				{ return 	"HY010"; }
102*cdf0e10cSrcweir 		const sal_Char* getSTR_DELIMITER()					{ return 	"/"; }
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir 
106*cdf0e10cSrcweir 		OPropertyMap::~OPropertyMap()
107*cdf0e10cSrcweir 		{
108*cdf0e10cSrcweir 			::std::map<sal_Int32 , rtl_uString*>::iterator aIter = m_aPropertyMap.begin();
109*cdf0e10cSrcweir 			for(;aIter != m_aPropertyMap.end();++aIter)
110*cdf0e10cSrcweir 				if(aIter->second)
111*cdf0e10cSrcweir 					rtl_uString_release(aIter->second);
112*cdf0e10cSrcweir 		}
113*cdf0e10cSrcweir 		// ------------------------------------------------------------------------------
114*cdf0e10cSrcweir 		::rtl::OUString OPropertyMap::getNameByIndex(sal_Int32 _nIndex) const
115*cdf0e10cSrcweir 		{
116*cdf0e10cSrcweir 			::rtl::OUString sRet;
117*cdf0e10cSrcweir 			::std::map<sal_Int32 , rtl_uString*>::const_iterator aIter = m_aPropertyMap.find(_nIndex);
118*cdf0e10cSrcweir 			if(aIter == m_aPropertyMap.end())
119*cdf0e10cSrcweir 				sRet = const_cast<OPropertyMap*>(this)->fillValue(_nIndex);
120*cdf0e10cSrcweir 			else
121*cdf0e10cSrcweir 				sRet = aIter->second;
122*cdf0e10cSrcweir 			return sRet;
123*cdf0e10cSrcweir 		}
124*cdf0e10cSrcweir 		// ------------------------------------------------------------------------------
125*cdf0e10cSrcweir 		::rtl::OUString OPropertyMap::fillValue(sal_Int32 _nIndex)
126*cdf0e10cSrcweir 		{
127*cdf0e10cSrcweir 			rtl_uString* pStr = NULL;
128*cdf0e10cSrcweir 			switch(_nIndex)
129*cdf0e10cSrcweir 			{
130*cdf0e10cSrcweir 				case PROPERTY_ID_QUERYTIMEOUT:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_QUERYTIMEOUT()			); break; }
131*cdf0e10cSrcweir 				case PROPERTY_ID_MAXFIELDSIZE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_MAXFIELDSIZE()			); break; }
132*cdf0e10cSrcweir 				case PROPERTY_ID_MAXROWS:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_MAXROWS()				); break;		}
133*cdf0e10cSrcweir 				case PROPERTY_ID_CURSORNAME:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_CURSORNAME()			); break;	}
134*cdf0e10cSrcweir 				case PROPERTY_ID_RESULTSETCONCURRENCY:		{ rtl_uString_newFromAscii(&pStr,getPROPERTY_RESULTSETCONCURRENCY()	); break; }
135*cdf0e10cSrcweir 				case PROPERTY_ID_RESULTSETTYPE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_RESULTSETTYPE()			); break; }
136*cdf0e10cSrcweir 				case PROPERTY_ID_FETCHDIRECTION:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_FETCHDIRECTION()		); break; }
137*cdf0e10cSrcweir 				case PROPERTY_ID_FETCHSIZE:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_FETCHSIZE()				); break;	}
138*cdf0e10cSrcweir 				case PROPERTY_ID_ESCAPEPROCESSING:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ESCAPEPROCESSING()		); break; }
139*cdf0e10cSrcweir 				case PROPERTY_ID_USEBOOKMARKS:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_USEBOOKMARKS()			); break; }
140*cdf0e10cSrcweir 				// Column
141*cdf0e10cSrcweir 				case PROPERTY_ID_NAME:						{ rtl_uString_newFromAscii(&pStr,getPROPERTY_NAME()				); break; }
142*cdf0e10cSrcweir 				case PROPERTY_ID_TYPE:						{ rtl_uString_newFromAscii(&pStr,getPROPERTY_TYPE()				); break; }
143*cdf0e10cSrcweir 				case PROPERTY_ID_TYPENAME:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_TYPENAME()			); break; }
144*cdf0e10cSrcweir 				case PROPERTY_ID_PRECISION:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_PRECISION()			); break; }
145*cdf0e10cSrcweir 				case PROPERTY_ID_SCALE:						{ rtl_uString_newFromAscii(&pStr,getPROPERTY_SCALE()				); break; }
146*cdf0e10cSrcweir 				case PROPERTY_ID_ISNULLABLE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISNULLABLE()		); break; }
147*cdf0e10cSrcweir 				case PROPERTY_ID_ISAUTOINCREMENT:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISAUTOINCREMENT()	); break; }
148*cdf0e10cSrcweir 				case PROPERTY_ID_ISROWVERSION:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISROWVERSION()		); break; }
149*cdf0e10cSrcweir 				case PROPERTY_ID_DESCRIPTION:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_DESCRIPTION()		); break; }
150*cdf0e10cSrcweir 				case PROPERTY_ID_DEFAULTVALUE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_DEFAULTVALUE()		); break; }
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir 				case PROPERTY_ID_REFERENCEDTABLE:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_REFERENCEDTABLE()	); break; }
153*cdf0e10cSrcweir 				case PROPERTY_ID_UPDATERULE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_UPDATERULE()		); break; }
154*cdf0e10cSrcweir 				case PROPERTY_ID_DELETERULE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_DELETERULE()		); break; }
155*cdf0e10cSrcweir 				case PROPERTY_ID_CATALOG:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_CATALOG()			); break; }
156*cdf0e10cSrcweir 				case PROPERTY_ID_ISUNIQUE:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISUNIQUE()			); break; }
157*cdf0e10cSrcweir 				case PROPERTY_ID_ISPRIMARYKEYINDEX:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISPRIMARYKEYINDEX()	); break; }
158*cdf0e10cSrcweir 				case PROPERTY_ID_ISCLUSTERED:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISCLUSTERED()			); break; }
159*cdf0e10cSrcweir 				case PROPERTY_ID_ISASCENDING:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISASCENDING()			); break; }
160*cdf0e10cSrcweir 				case PROPERTY_ID_SCHEMANAME:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_SCHEMANAME()			); break; }
161*cdf0e10cSrcweir 				case PROPERTY_ID_CATALOGNAME:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_CATALOGNAME()			); break; }
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir 				case PROPERTY_ID_COMMAND:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_COMMAND()				); break; }
164*cdf0e10cSrcweir 				case PROPERTY_ID_CHECKOPTION:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_CHECKOPTION()			); break; }
165*cdf0e10cSrcweir 				case PROPERTY_ID_PASSWORD:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_PASSWORD()				); break; }
166*cdf0e10cSrcweir 				case PROPERTY_ID_RELATEDCOLUMN:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_RELATEDCOLUMN()		); break;  }
167*cdf0e10cSrcweir 
168*cdf0e10cSrcweir 				case PROPERTY_ID_FUNCTION:           		{ rtl_uString_newFromAscii(&pStr,getPROPERTY_FUNCTION()				); break; }
169*cdf0e10cSrcweir 				case PROPERTY_ID_AGGREGATEFUNCTION:          { rtl_uString_newFromAscii(&pStr,getPROPERTY_AGGREGATEFUNCTION()	); break; }
170*cdf0e10cSrcweir 				case PROPERTY_ID_TABLENAME:          		{ rtl_uString_newFromAscii(&pStr,getPROPERTY_TABLENAME()			); break; }
171*cdf0e10cSrcweir 				case PROPERTY_ID_REALNAME:           		{ rtl_uString_newFromAscii(&pStr,getPROPERTY_REALNAME()				); break; }
172*cdf0e10cSrcweir 				case PROPERTY_ID_DBASEPRECISIONCHANGED:		{ rtl_uString_newFromAscii(&pStr,getPROPERTY_DBASEPRECISIONCHANGED()); break; }
173*cdf0e10cSrcweir 				case PROPERTY_ID_ISCURRENCY:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISCURRENCY()			); break; }
174*cdf0e10cSrcweir 				case PROPERTY_ID_ISBOOKMARKABLE:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ISBOOKMARKABLE()		); break; }
175*cdf0e10cSrcweir 				case PROPERTY_ID_HY010:						{ rtl_uString_newFromAscii(&pStr,getSQLSTATE_SEQUENCE()				); break; }
176*cdf0e10cSrcweir 				case PROPERTY_ID_DELIMITER:					{ rtl_uString_newFromAscii(&pStr,getSTR_DELIMITER()					); break; }
177*cdf0e10cSrcweir 				case PROPERTY_ID_FORMATKEY:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_FORMATKEY()			); break; }
178*cdf0e10cSrcweir 				case PROPERTY_ID_LOCALE:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_LOCALE()				); break; }
179*cdf0e10cSrcweir 				case PROPERTY_ID_AUTOINCREMENTCREATION:		{ rtl_uString_newFromAscii(&pStr,getPROPERTY_AUTOINCREMENTCREATION()); break; }
180*cdf0e10cSrcweir 				case PROPERTY_ID_PRIVILEGES:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_PRIVILEGES()			); break; }
181*cdf0e10cSrcweir 				case PROPERTY_ID_HAVINGCLAUSE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_HAVINGCLAUSE()		); break; }
182*cdf0e10cSrcweir 				case PROPERTY_ID_ISSIGNED:					{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_ISSIGNED()			); break; }
183*cdf0e10cSrcweir                 case PROPERTY_ID_ISSEARCHABLE:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_ISSEARCHABLE()		); break; }
184*cdf0e10cSrcweir                 case PROPERTY_ID_LABEL:				        { rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_LABEL()		        ); break; }
185*cdf0e10cSrcweir                 case PROPERTY_ID_APPLYFILTER:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_APPLYFILTER()		); break; }
186*cdf0e10cSrcweir                 case PROPERTY_ID_FILTER:				    { rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_FILTER()			); break; }
187*cdf0e10cSrcweir                 case PROPERTY_ID_MASTERFIELDS:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_MASTERFIELDS()		); break; }
188*cdf0e10cSrcweir                 case PROPERTY_ID_DETAILFIELDS:				{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_DETAILFIELDS()		); break; }
189*cdf0e10cSrcweir                 case PROPERTY_ID_FIELDTYPE:				    { rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_FIELDTYPE()			); break; }
190*cdf0e10cSrcweir                 case PROPERTY_ID_VALUE:				        { rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_VALUE()			    ); break; }
191*cdf0e10cSrcweir                 case PROPERTY_ID_ACTIVE_CONNECTION:			{ rtl_uString_newFromAscii(&pStr,getPROPERTY_ID_ACTIVE_CONNECTION() ); break; }
192*cdf0e10cSrcweir 			}
193*cdf0e10cSrcweir 			m_aPropertyMap[_nIndex] = pStr;
194*cdf0e10cSrcweir 			return pStr;
195*cdf0e10cSrcweir 		}
196*cdf0e10cSrcweir }
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir 
199