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