Mercurial > projects > dwt2
comparison org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/win32/OS.d @ 38:2e09b0e6857a
work on phobosfication
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 25 Mar 2009 11:18:25 +0100 |
parents | d46287db17ed |
children | 0ecb2b338560 |
comparison
equal
deleted
inserted
replaced
37:46c5f8f56b41 | 38:2e09b0e6857a |
---|---|
81 | 81 |
82 | 82 |
83 public class OS : C { | 83 public class OS : C { |
84 | 84 |
85 struct Symbol { | 85 struct Symbol { |
86 char[] name; | 86 String name; |
87 void** symbol; | 87 void** symbol; |
88 int major; | 88 int major; |
89 int minor; | 89 int minor; |
90 } | 90 } |
91 static void loadLib( Symbol[] symbols, char[] libname ){ | 91 static void loadLib( Symbol[] symbols, String libname ){ |
92 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { | 92 version(Tango){ |
93 foreach( inout s; symbols ){ | 93 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { |
94 if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){ | 94 foreach( inout s; symbols ){ |
95 *s.symbol = lib.getSymbol( s.name.ptr ); | 95 if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){ |
96 if( s.symbol is null ){ | 96 *s.symbol = lib.getSymbol( s.name.ptr ); |
97 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); | 97 if( s.symbol is null ){ |
98 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); | |
99 } | |
98 } | 100 } |
99 } | 101 } |
102 } else { | |
103 getDwtLogger.error( __FILE__, __LINE__, "Could not load the library {}", libname ); | |
100 } | 104 } |
101 } else { | 105 } else { // Phobos |
102 getDwtLogger.error( __FILE__, __LINE__, "Could not load the library {}", libname ); | 106 implMissing( __FILE__, __LINE__ ); |
103 } | 107 } |
104 } | 108 } |
105 | 109 |
106 public static HINSTANCE GetLibraryHandle(){ | 110 public static HINSTANCE GetLibraryHandle(){ |
107 //PORTING_FIXME: GetLibraryHandle | 111 //PORTING_FIXME: GetLibraryHandle |
366 dvi.dwMajorVersion = 4; | 370 dvi.dwMajorVersion = 4; |
367 dvi.dwMinorVersion = 0; | 371 dvi.dwMinorVersion = 0; |
368 //PORTING_CHANGE: comctl is loaded automatically | 372 //PORTING_CHANGE: comctl is loaded automatically |
369 //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$ | 373 //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$ |
370 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName); | 374 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName); |
371 if (auto lib = tango.sys.SharedLib.SharedLib.load( `comctl32.dll`) ) { | 375 version(Tango){ |
372 char[] name = "DllGetVersion\0"; //$NON-NLS-1$ | 376 if (auto lib = tango.sys.SharedLib.SharedLib.load( `comctl32.dll`) ) { |
373 void* DllGetVersion = lib.getSymbol(name.ptr); | 377 char[] name = "DllGetVersion\0"; //$NON-NLS-1$ |
374 if (DllGetVersion !is null){ | 378 void* DllGetVersion = lib.getSymbol(name.ptr); |
375 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion; | 379 if (DllGetVersion !is null){ |
376 TDllVersion f = cast( TDllVersion )DllGetVersion; | 380 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion; |
377 f(&dvi); | 381 TDllVersion f = cast( TDllVersion )DllGetVersion; |
382 f(&dvi); | |
383 } | |
384 lib.unload(); | |
378 } | 385 } |
379 lib.unload(); | 386 } else { // Phobos |
387 implMissing( __FILE__, __LINE__ ); | |
380 } | 388 } |
381 COMCTL32_MAJOR = dvi.dwMajorVersion; | 389 COMCTL32_MAJOR = dvi.dwMajorVersion; |
382 COMCTL32_MINOR = dvi.dwMinorVersion; | 390 COMCTL32_MINOR = dvi.dwMinorVersion; |
383 COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR); | 391 COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR); |
384 | 392 |
386 dvi = DLLVERSIONINFO.init; | 394 dvi = DLLVERSIONINFO.init; |
387 dvi.cbSize = DLLVERSIONINFO.sizeof; | 395 dvi.cbSize = DLLVERSIONINFO.sizeof; |
388 dvi.dwMajorVersion = 4; | 396 dvi.dwMajorVersion = 4; |
389 //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$ | 397 //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$ |
390 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName); | 398 //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName); |
391 if ( auto lib = tango.sys.SharedLib.SharedLib.load( `Shell32.dll`)) { | 399 version(Tango){ |
392 char[] name = "DllGetVersion\0"; //$NON-NLS-1$ | 400 if ( auto lib = tango.sys.SharedLib.SharedLib.load( `Shell32.dll`)) { |
393 void* DllGetVersion = lib.getSymbol(name.ptr); | 401 char[] name = "DllGetVersion\0"; //$NON-NLS-1$ |
394 if (DllGetVersion !is null){ | 402 void* DllGetVersion = lib.getSymbol(name.ptr); |
395 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion; | 403 if (DllGetVersion !is null){ |
396 TDllVersion f = cast( TDllVersion )DllGetVersion; | 404 alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion; |
397 f(&dvi); | 405 TDllVersion f = cast( TDllVersion )DllGetVersion; |
406 f(&dvi); | |
407 } | |
408 lib.unload(); | |
398 } | 409 } |
399 lib.unload(); | 410 } else { // Phobos |
411 implMissing( __FILE__, __LINE__ ); | |
400 } | 412 } |
401 SHELL32_MAJOR = dvi.dwMajorVersion; | 413 SHELL32_MAJOR = dvi.dwMajorVersion; |
402 SHELL32_MINOR = dvi.dwMinorVersion; | 414 SHELL32_MINOR = dvi.dwMinorVersion; |
403 SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR); | 415 SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR); |
404 } | 416 } |
406 /************************************************************************** | 418 /************************************************************************** |
407 | 419 |
408 **************************************************************************/ | 420 **************************************************************************/ |
409 | 421 |
410 public static void enableVisualStyles() { | 422 public static void enableVisualStyles() { |
411 void printError( char[] msg ){ | 423 void printError( String msg ){ |
412 char[] winMsg = tango.sys.Common.SysError.lastMsg(); | 424 version(Tango){ |
413 char[2000] buf; | 425 char[] winMsg = tango.sys.Common.SysError.lastMsg(); |
414 getDwtLogger.error( __FILE__, __LINE__, "{}: {}", msg, CodePage.from( winMsg, buf ) ); | 426 char[2000] buf; |
427 getDwtLogger.error( __FILE__, __LINE__, "{}: {}", msg, CodePage.from( winMsg, buf ) ); | |
428 } else { // Phobos | |
429 implMissing( __FILE__, __LINE__ ); | |
430 } | |
415 } | 431 } |
416 TCHAR[] buffer = new TCHAR[ MAX_PATH ]; | 432 TCHAR[] buffer = new TCHAR[ MAX_PATH ]; |
417 buffer[] = 0; | 433 buffer[] = 0; |
418 HANDLE hModule = OS.GetLibraryHandle (); | 434 HANDLE hModule = OS.GetLibraryHandle (); |
419 while (OS.GetModuleFileName (hModule, buffer.ptr, buffer.length ) is buffer.length ) { | 435 while (OS.GetModuleFileName (hModule, buffer.ptr, buffer.length ) is buffer.length ) { |
2712 { "BeginBufferedPaint", cast(void**)& BeginBufferedPaint, 6, 0 }, | 2728 { "BeginBufferedPaint", cast(void**)& BeginBufferedPaint, 6, 0 }, |
2713 { "EndBufferedPaint", cast(void**)& EndBufferedPaint, 6, 0 }, | 2729 { "EndBufferedPaint", cast(void**)& EndBufferedPaint, 6, 0 }, |
2714 ]; | 2730 ]; |
2715 | 2731 |
2716 static void loadLib_UxTheme(){ | 2732 static void loadLib_UxTheme(){ |
2717 if (auto lib = tango.sys.SharedLib.SharedLib.load(`uxtheme.dll`)) { | 2733 version(Tango){ |
2718 foreach( inout s; Symbols_UxTheme ){ | 2734 if (auto lib = tango.sys.SharedLib.SharedLib.load(`uxtheme.dll`)) { |
2719 if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){ | 2735 foreach( inout s; Symbols_UxTheme ){ |
2720 *s.symbol = lib.getSymbol( s.name.ptr ); | 2736 if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){ |
2721 if( *s.symbol is null ){ | 2737 *s.symbol = lib.getSymbol( s.name.ptr ); |
2722 getDwtLogger.error( __FILE__, __LINE__, "UxTheme.dll: Symbol '{}' not found", s.name ); | 2738 if( *s.symbol is null ){ |
2739 getDwtLogger.error( __FILE__, __LINE__, "UxTheme.dll: Symbol '{}' not found", s.name ); | |
2740 } | |
2723 } | 2741 } |
2724 } | 2742 } |
2743 } else { | |
2744 getDwtLogger.error( __FILE__, __LINE__, "Could not load the library UxTheme.dll"); | |
2725 } | 2745 } |
2726 } else { | 2746 } else { // Phobos |
2727 getDwtLogger.error( __FILE__, __LINE__, "Could not load the library UxTheme.dll"); | 2747 implMissing( __FILE__, __LINE__ ); |
2728 } | 2748 } |
2729 } | 2749 } |
2730 //---------------------------------------------------------------------- | 2750 //---------------------------------------------------------------------- |
2731 // Coreimm.lib (WinCE) | 2751 // Coreimm.lib (WinCE) |
2732 // this function vars exist primarily for link error elimination | 2752 // this function vars exist primarily for link error elimination |
3405 // | 3425 // |
3406 //static int DrawText(int hDC, TCHAR* lpString, int length, RECT* lpRect, int uFormat){ | 3426 //static int DrawText(int hDC, TCHAR* lpString, int length, RECT* lpRect, int uFormat){ |
3407 // return WINAPI.DrawText(hDC, lpString, length, lpRect, uFormat); | 3427 // return WINAPI.DrawText(hDC, lpString, length, lpRect, uFormat); |
3408 //} | 3428 //} |
3409 | 3429 |
3410 static int GetProfileString(char[] lpAppName, char[] lpKeyName, char[] lpDefault, out char[] lpReturnedString, int nSize ){ | 3430 static int GetProfileString(String lpAppName, String lpKeyName, String lpDefault, out String lpReturnedString, int nSize ){ |
3411 TCHAR[] buffer = new TCHAR[nSize]; | 3431 TCHAR[] buffer = new TCHAR[nSize]; |
3412 int result = _GetProfileString(.StrToTCHARz(lpAppName), .StrToTCHARz(lpKeyName), .StrToTCHARz(lpDefault), buffer.ptr, nSize); | 3432 int result = _GetProfileString(.StrToTCHARz(lpAppName), .StrToTCHARz(lpKeyName), .StrToTCHARz(lpDefault), buffer.ptr, nSize); |
3413 lpReturnedString = .TCHARzToStr(buffer.ptr); | 3433 lpReturnedString = .TCHARzToStr(buffer.ptr); |
3414 return result; | 3434 return result; |
3415 } | 3435 } |
3416 | 3436 |
3417 static char[] GetWindowText(HWND hwnd){ | 3437 static String GetWindowText(HWND hwnd){ |
3418 assert(hwnd); | 3438 assert(hwnd); |
3419 int len = GetWindowTextLength(hwnd); | 3439 int len = GetWindowTextLength(hwnd); |
3420 if(len > 0){ | 3440 if(len > 0){ |
3421 TCHAR[] buffer = new TCHAR[len + 1]; | 3441 TCHAR[] buffer = new TCHAR[len + 1]; |
3422 len = _GetWindowText(hwnd, buffer.ptr, buffer.length); | 3442 len = _GetWindowText(hwnd, buffer.ptr, buffer.length); |
3596 static bool TreeView_GetItemRect( HWND hwnd, HTREEITEM hitem, RECT* prc, bool code) { | 3616 static bool TreeView_GetItemRect( HWND hwnd, HTREEITEM hitem, RECT* prc, bool code) { |
3597 *cast(HTREEITEM *)prc = hitem; | 3617 *cast(HTREEITEM *)prc = hitem; |
3598 return cast(bool) SendMessage( hwnd, TVM_GETITEMRECT, code, cast(int)prc ); | 3618 return cast(bool) SendMessage( hwnd, TVM_GETITEMRECT, code, cast(int)prc ); |
3599 } | 3619 } |
3600 static int strlen( PCHAR ptr ){ | 3620 static int strlen( PCHAR ptr ){ |
3601 return tango.stdc.string.strlen( cast(char*)ptr ); | 3621 version(Tango){ |
3622 return tango.stdc.string.strlen( cast(char*)ptr ); | |
3623 } else { // Phobos | |
3624 implMissing( __FILE__, __LINE__ ); | |
3625 } | |
3602 } | 3626 } |
3603 | 3627 |
3604 static void POINTSTOPOINT( inout POINT pt, int pts) { | 3628 static void POINTSTOPOINT( inout POINT pt, int pts) { |
3605 pt.x = cast(SHORT) LOWORD(pts); | 3629 pt.x = cast(SHORT) LOWORD(pts); |
3606 pt.y = cast(SHORT) HIWORD(pts); | 3630 pt.y = cast(SHORT) HIWORD(pts); |
3609 alias DWTWINAPI.GetScrollBarInfo GetScrollBarInfo; | 3633 alias DWTWINAPI.GetScrollBarInfo GetScrollBarInfo; |
3610 } // END of OS | 3634 } // END of OS |
3611 //----------------------------------------------------------------------------- | 3635 //----------------------------------------------------------------------------- |
3612 // convert UTF-8 to MBCS | 3636 // convert UTF-8 to MBCS |
3613 alias StrToMBCS StrToMBCSs; | 3637 alias StrToMBCS StrToMBCSs; |
3614 public CHAR[] StrToMBCS(char[] sc, uint codepage = 0) { | 3638 public CHAR[] StrToMBCS(CString sc, uint codepage = 0) { |
3615 CHAR[] ret = cast(CHAR[]) sc; | 3639 CHAR[] ret = cast(CHAR[]) sc; |
3616 try{ | 3640 try{ |
3617 foreach (char c; sc){ | 3641 foreach (char c; sc){ |
3618 if (c >= 0x80) | 3642 if (c >= 0x80) |
3619 { | 3643 { |
3632 } | 3656 } |
3633 return ret; | 3657 return ret; |
3634 } | 3658 } |
3635 | 3659 |
3636 // convert UTF-8 to MBCSz | 3660 // convert UTF-8 to MBCSz |
3637 public char* StrToMBCSz(char[] sc) { | 3661 public char* StrToMBCSz(CString sc) { |
3638 char* ret = null; | 3662 char* ret = null; |
3639 try{ | 3663 try{ |
3640 if( CodePage.isAscii( sc )){ | 3664 if( CodePage.isAscii( sc )){ |
3641 return .toStringz( sc ); | 3665 return .toStringz( sc ); |
3642 } | 3666 } |
3643 char[] dst; | 3667 char[] dst; |
3644 dst.length = sc.length; | 3668 dst.length = sc.length; |
3645 return toStringz( tango.sys.win32.CodePage.CodePage.into( sc, dst )); | 3669 version(Tango){ |
3670 return toStringz( tango.sys.win32.CodePage.CodePage.into( sc, dst )); | |
3671 } else { // Phobos | |
3672 implMissing( __FILE__, __LINE__ ); | |
3673 } | |
3646 }catch(Exception e){ | 3674 }catch(Exception e){ |
3647 // do nothing | 3675 // do nothing |
3648 ret = ""; | 3676 ret = ""; |
3649 } | 3677 } |
3650 | 3678 |
3651 return ret; | 3679 return ret; |
3652 } | 3680 } |
3653 | 3681 |
3654 public wchar[] StrToWCHARs(uint codepage , char[] sc, bool terminated = false ) { | 3682 public String16 StrToWCHARs(uint codepage , CString sc, bool terminated = false ) { |
3655 return StrToWCHARs( sc, terminated ); | 3683 return StrToWCHARs( sc, terminated ); |
3656 } | 3684 } |
3657 public wchar[] StrToWCHARs(char[] sc, bool terminated = false ) { | 3685 public String16 StrToWCHARs(CString sc, bool terminated = false ) { |
3658 wchar[] ret; | 3686 wchar[] ret; |
3659 try{ | 3687 try{ |
3660 ret = toWCharArray(sc); | 3688 ret = toWCharArray(sc); |
3661 }catch(Exception e){ | 3689 }catch(Exception e){ |
3662 // do nothing | 3690 // do nothing |
3666 ret ~= "\0"; | 3694 ret ~= "\0"; |
3667 } | 3695 } |
3668 return ret; | 3696 return ret; |
3669 } | 3697 } |
3670 | 3698 |
3671 public wchar* StrToWCHARz( uint codepage, char[] sc, uint* length = null ) { | 3699 public wchar* StrToWCHARz( uint codepage, CString sc, uint* length = null ) { |
3672 return StrToWCHARz( sc, length ); | 3700 return StrToWCHARz( sc, length ); |
3673 } | 3701 } |
3674 | 3702 |
3675 public wchar* StrToWCHARz(char[] sc, uint* length = null ) { | 3703 public wchar* StrToWCHARz(CString sc, uint* length = null ) { |
3676 return StrToWCHARs(sc, true ).ptr; | 3704 return StrToWCHARs(sc, true ).ptr; |
3677 } | 3705 } |
3678 | 3706 |
3679 public char[] MBCSsToStr(CHAR[] string, uint codepage = 0){ | 3707 public CString MBCSsToStr(CHAR[] string, uint codepage = 0){ |
3680 return MBCSzToStr( string.ptr, string.length, codepage); | 3708 return MBCSzToStr( string.ptr, string.length, codepage); |
3681 } | 3709 } |
3682 | 3710 |
3683 public char[] MBCSzToStr(PCHAR pString, int _length = -1, uint codepage = 0) { | 3711 public CString MBCSzToStr(PCHAR pString, int _length = -1, uint codepage = 0) { |
3684 // null terminated string pointer | 3712 // null terminated string pointer |
3685 if(_length == -1){ | 3713 if(_length == -1){ |
3686 _length = 0; | 3714 _length = 0; |
3687 while(*(pString + _length)) | 3715 while(*(pString + _length)) |
3688 ++_length; | 3716 ++_length; |
3698 }catch(Exception e){ | 3726 }catch(Exception e){ |
3699 } | 3727 } |
3700 return result; | 3728 return result; |
3701 } | 3729 } |
3702 | 3730 |
3703 public char[] WCHARsToStr(wchar[] string){ | 3731 public String WCHARsToStr(CString16 string){ |
3704 return WCHARzToStr(string.ptr, string.length); | 3732 return WCHARzToStr(string.ptr, string.length); |
3705 } | 3733 } |
3706 | 3734 |
3707 public char[] WCHARzToStr(wchar* pString, int _length = -1) | 3735 public String WCHARzToStr(LPCWSTR pString, int _length = -1) |
3708 { | 3736 { |
3709 if( pString is null ){ | 3737 if( pString is null ){ |
3710 return null; | 3738 return null; |
3711 } | 3739 } |
3712 // null terminated string pointer | 3740 // null terminated string pointer |