csutil/win32/wintools.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2003 by Frank Richter 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __CS_CSSYS_WIN32_WINTOOLS_H__ 00020 #define __CS_CSSYS_WIN32_WINTOOLS_H__ 00021 00026 #include "csextern.h" 00027 #include "csutil/csunicode.h" 00028 #include "csutil/util.h" 00029 #include <winnls.h> // contains MultiByteToWideChar()/WideCharToMultiByte() 00030 #include "sanity.inc" 00031 00041 static inline wchar_t* cswinAnsiToWide (const char* ansi, 00042 UINT codePage = CP_ACP) 00043 { 00044 int bufsize; 00045 WCHAR* buf; 00046 00047 bufsize = MultiByteToWideChar (codePage, 00048 MB_PRECOMPOSED, ansi, -1, 0, 0); 00049 buf = new WCHAR[bufsize]; 00050 MultiByteToWideChar (codePage, 00051 MB_PRECOMPOSED, ansi, -1, buf, bufsize); 00052 00053 return buf; 00054 } 00055 00065 static inline char* cswinWideToAnsi (const wchar_t* wide, 00066 UINT codePage = CP_ACP) 00067 { 00068 int bufsize; 00069 char* buf; 00070 00071 bufsize = WideCharToMultiByte (codePage, 00072 WC_COMPOSITECHECK, wide, -1, 0, 0, 0, 0); 00073 buf = new char[bufsize]; 00074 WideCharToMultiByte (codePage, 00075 WC_COMPOSITECHECK, wide, -1, buf, bufsize, 0, 0); 00076 00077 return buf; 00078 } 00079 00093 struct CS_CRYSTALSPACE_EXPORT cswinWtoA 00094 { 00095 private: 00096 char* s; 00097 public: 00099 cswinWtoA (const wchar_t* ws) 00100 { s = cswinWideToAnsi (ws); } 00102 ~cswinWtoA () 00103 { delete[] s; } 00105 operator const char* () const 00106 { return s; } 00107 }; 00108 00118 struct CS_CRYSTALSPACE_EXPORT cswinCtoA 00119 { 00120 private: 00121 char* s; 00122 public: 00124 cswinCtoA (const char* ws, UINT codePage = CP_ACP) 00125 { 00126 s = cswinWideToAnsi (csCtoW (ws), codePage); 00127 } 00129 ~cswinCtoA () 00130 { delete[] s; } 00132 operator const char* () const 00133 { return s; } 00134 }; 00135 00147 extern CS_CRYSTALSPACE_EXPORT char* cswinGetErrorMessage (HRESULT code); 00158 extern CS_CRYSTALSPACE_EXPORT wchar_t* cswinGetErrorMessageW (HRESULT code); 00159 00161 enum cswinWindowsVersion 00162 { 00164 cswinWin9x = 30, 00166 cswinWinNT = 40, 00168 cswinWin2K = 50, 00170 cswinWinXP = 51 00171 }; 00172 00184 extern CS_CRYSTALSPACE_EXPORT bool cswinIsWinNT (cswinWindowsVersion* version = 0); 00185 00186 #endif // __CS_CSSYS_WIN32_WINTOOLS_H__
Generated for Crystal Space by doxygen 1.4.7