text: /**************************************************************
   * 
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   * 
   *   http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied.  See the License for the
   * specific language governing permissions and limitations
   * under the License.
   * 
   *************************************************************/
  
  
  
  // MARKER(update_precomp.py): autogen include statement, do not remove
  #include "precompiled_tools.hxx"
  #include <stdlib.h>
  #include <stdio.h>
  //#include "bootstrp/sstring.hxx"
  #include <vos/mutex.hxx>
  
  #include <tools/stream.hxx>
  #include <tools/geninfo.hxx>
  #include "bootstrp/prj.hxx"
  #include "bootstrp/inimgr.hxx"
  
  DECLARE_LIST( UniStringList, UniString* )
  
  //#define TEST 	1
  
  #if defined(WNT) || defined(OS2)
  #define LIST_DELIMETER ';'
  #define PATH_DELIMETER '\\'
  #elif defined UNX
  #define LIST_DELIMETER ':'
  #define PATH_DELIMETER '/'
  #endif
  
  //Link Star::aDBNotFoundHdl;
  
  //
  //	class SimpleConfig
  //
  
  /*****************************************************************************/
  SimpleConfig::SimpleConfig( String aSimpleConfigFileName )
  /*****************************************************************************/
  {
  	nLine = 0;
  	aFileName = aSimpleConfigFileName;
  	aFileStream.Open ( aFileName, STREAM_READ );
  }
  
  /*****************************************************************************/
  SimpleConfig::SimpleConfig( DirEntry& rDirEntry )
  /*****************************************************************************/
  {
  	nLine = 0;
  	aFileName = rDirEntry.GetFull();
  	aFileStream.Open ( aFileName, STREAM_READ );
  }
  
  /*****************************************************************************/
  SimpleConfig::~SimpleConfig()
  /*****************************************************************************/
  {
  	aFileStream.Close ();
  }
  
  /*****************************************************************************/
  ByteString SimpleConfig::GetNext()
  /*****************************************************************************/
  {
  	ByteString aString;
  
  	if ( aStringBuffer =="" )
  	  while ((aStringBuffer = GetNextLine()) == "\t") ; //solange bis != "\t"
  	if ( aStringBuffer =="" )
  		return ByteString();
  
  	aString = aStringBuffer.GetToken(0,'\t');
  	aStringBuffer.Erase(0, aString.Len()+1);
  
  	aStringBuffer.EraseLeadingChars( '\t' );
  
  	return aString;
  }
  
  /*****************************************************************************/
  ByteString	SimpleConfig::GetNextLine()
  /*****************************************************************************/
  {
  	ByteString aSecStr;
  	nLine++;
  
  	aFileStream.ReadLine ( aTmpStr );
  	if ( aTmpStr.Search( "#" ) == 0 )
  		return "\t";
  	aTmpStr = aTmpStr.EraseLeadingChars();
  	aTmpStr = aTmpStr.EraseTrailingChars();
  	while ( aTmpStr.SearchAndReplace(ByteString(' '),ByteString('\t') ) != STRING_NOTFOUND ) ;
  	int nLength = aTmpStr.Len();
  	sal_Bool bFound = sal_False;
  	ByteString aEraseString;
  	for ( sal_uInt16 i = 0; i<= nLength; i++)
  	{
  		if ( aTmpStr.GetChar( i ) == 0x20  && !bFound )
  			aTmpStr.SetChar( i, 0x09 );
  	}
  	return aTmpStr;
  }
  
  /*****************************************************************************/
  ByteString SimpleConfig::GetCleanedNextLine( sal_Bool bReadComments )
  /*****************************************************************************/
  {
  
  	aFileStream.ReadLine ( aTmpStr );
  	if ( aTmpStr.Search( "#" ) == 0 )
          {
  		if (bReadComments )
  			return aTmpStr;
  		else
  			while ( aTmpStr.Search( "#" ) == 0 )
  			{
  				aFileStream.ReadLine ( aTmpStr );
  			}
          }
  
  	aTmpStr = aTmpStr.EraseLeadingChars();
  	aTmpStr = aTmpStr.EraseTrailingChars();
  //	while ( aTmpStr.SearchAndReplace(String(' '),String('\t') ) != (sal_uInt16)-1 );
  	int nLength = aTmpStr.Len();
  	ByteString aEraseString;
  	sal_Bool bFirstTab = sal_True;
  	for ( sal_uInt16 i = 0; i<= nLength; i++)
  	{
  		if ( aTmpStr.GetChar( i ) == 0x20 )
  			aTmpStr.SetChar( i, 0x09 );
  
  		if ( aTmpStr.GetChar( i ) ==  0x09 )
  		{
  			if ( bFirstTab )
  				bFirstTab = sal_False;
  			else
  			{
  				aTmpStr.SetChar( i, 0x20 );
  			}
  		}
  		else
  			bFirstTab = sal_True;
  
  	}
  	aTmpStr.EraseAllChars(' ');
  	return aTmpStr;
  
  }
  
  