// ####ECOSHOSTGPLCOPYRIGHTBEGIN####                                        
// -------------------------------------------                              
// This file is part of the eCos host tools.                                
// Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.            
//
// This program is free software; you can redistribute it and/or modify     
// it under the terms of the GNU General Public License as published by     
// the Free Software Foundation; either version 2 or (at your option) any   
// later version.                                                           
//
// This program is distributed in the hope that it will be useful, but      
// WITHOUT ANY WARRANTY; without even the implied warranty of               
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU        
// General Public License for more details.                                 
//
// You should have received a copy of the GNU General Public License        
// along with this program; if not, write to the                            
// Free Software Foundation, Inc., 51 Franklin Street,                      
// Fifth Floor, Boston, MA  02110-1301, USA.                                
// -------------------------------------------                              
// ####ECOSHOSTGPLCOPYRIGHTEND####                                          
//===========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): 	sdf
// Contact(s):	sdf
// Date:		1998/08/11
// Version:		0.01
// Purpose:	
// Description:	Interface to various global utility functions.  Everything in this
//				class is static (there are no instances).
// Requires:	
// Provides:	
// See also:    
// Known bugs:	
// Usage:	
//
//####DESCRIPTIONEND####
//  
//===========================================================================
#ifndef _UTILS_H
#define _UTILS_H
#include "FileName.h"
#define INCLUDEFILE <string>
#include "IncludeSTL.h"
#include <stdarg.h>     // vsnprintf

class CUtils {
public:
  static bool Launch (const CFileName &strFileName,const CFileName &strViewer);
  static CString GetLastErrorMessageString ();

  static bool AddToPath (const CFileName &strFolder, bool bAtFront=true);
  static const CString LoadString (UINT id);
  
  // Messagebox functions
  
  // Vararg message box compositor
  static int MessageBoxF (LPCTSTR pszFormat, ...);
  // Same, with type
  static int MessageBoxFT (UINT nType, LPCTSTR pszFormat, ...);
  // As above but with resource
  static int MessageBoxFR (UINT nID, UINT nType, LPCTSTR pszFormat, ...);
  // Same, with type
  static int MessageBoxFR (UINT nID, LPCTSTR pszFormat, ...);
  // vararg form
  static int vMessageBox(UINT nType, LPCTSTR  pszFormat, va_list marker);

  // String functions
  
  // Chop the string into pieces using separator cSep.
  // The Boolean controls whether " and \ make a difference
  static int Chop(LPCTSTR psz,CStringArray &ar,TCHAR cSep=_TCHAR(' '),bool bObserveStrings=false,bool bBackslashQuotes=false);
  static int Chop(LPCTSTR psz,CStringArray &ar,LPCTSTR pszSep,        bool bObserveStrings=false,bool bBackslashQuotes=false);
  // String -> Integer, observing the current hex/decimal setting
  static BOOL StrToItemIntegerType(const CString &str,__int64 &d);
  static BOOL StrToDouble (const CString &strValue, double &dValue);
  // Integer -> String, observing the current hex/decimal setting
  static const CString IntToStr(__int64 d,bool bHex=false);
  static const CString DoubleToStr (double dValue);
  static CString StripExtraWhitespace (const CString & strInput);
  
  // Provide a failure explanation for what just went wrong
  static const CString Explanation (CFileException &exc);
  static void UnicodeToCStr(LPCTSTR str,char *&psz);
  static std::string UnicodeToStdStr(LPCTSTR str);
  static CFileName WPath(const std::string &str);
  static bool CopyFile (LPCTSTR pszSource,LPCTSTR pszDest);

};

#endif
