diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 7be65b816e..1606bfc6d1 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,29 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-12-09 04:06 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * include/hbwinuni.h + + Added HB_PARSTRDEF() macro. So far the same as HB_PARSTR(), but + it's supposed to mark places where hb_parcx() was used (where + WinAPI expects non-optional string parameter). + + * contrib/hbwin/wapi_winbase.c + * contrib/hbwin/wapi_winuser.c + * contrib/hbwin/wapi_shellapi.c + * contrib/hbwin/legacyco.c + + Using new UNICODE parameter passing macros instead of HB_TCHAR*() ones. + ; NOTE: I'm unsure how to apply the same to wapi_commctrl.c, could anyone help? + Here the string is assigned to win structure and passed to winapi, + which may mean that string space should be kept there after + returning from function. + + * contrib/hbxbp/xbpgeneric.prg + ! Using HB_SYMBOL_UNUSED() to mark unused parameters, instead of + local solution. + % Minor optimizations. + * MSGBOX() changed to not display all text in bold. + + Changed
to
in MSGBOX(). + 2009-12-08 18:27 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbide/hbide.prg * contrib/hbide/idemisc.prg diff --git a/harbour/contrib/hbwin/legacyco.c b/harbour/contrib/hbwin/legacyco.c index 6b4b6f63dd..4103446328 100644 --- a/harbour/contrib/hbwin/legacyco.c +++ b/harbour/contrib/hbwin/legacyco.c @@ -112,13 +112,13 @@ HB_FUNC( WIDETOANSI ) HB_FUNC( MESSAGEBOX ) { - LPTSTR lpStr1 = HB_TCHAR_CONVTO( hb_parcx( 2 ) ); - LPTSTR lpStr2 = HB_TCHAR_CONVTO( hb_parcx( 3 ) ); + void * hStr1; + void * hStr2; HWND hWnd = HB_ISNUM( 1 ) ? ( HWND ) ( HB_PTRUINT ) hb_parnint( 1 ) : ( HWND ) hb_parptr( 1 ); - hb_retni( MessageBox( hWnd, lpStr1, lpStr2, hb_parni( 4 ) ) ); - HB_TCHAR_FREE( lpStr1 ); - HB_TCHAR_FREE( lpStr2 ); + hb_retni( MessageBox( hWnd, ( LPCTSTR ) HB_PARSTR( 2, &hStr1, NULL ), ( LPCTSTR ) HB_PARSTR( 3, &hStr2, NULL ), hb_parni( 4 ) ) ); + hb_strfree( hStr1 ); + hb_strfree( hStr2 ); } HB_FUNC( __OLEPDISP ) diff --git a/harbour/contrib/hbwin/wapi_shellapi.c b/harbour/contrib/hbwin/wapi_shellapi.c index a46b8cd023..60863fe344 100644 --- a/harbour/contrib/hbwin/wapi_shellapi.c +++ b/harbour/contrib/hbwin/wapi_shellapi.c @@ -68,7 +68,7 @@ HB_FUNC( WAPI_SHELLEXECUTE ) void * hDirectory; hb_retnint( ( HB_PTRDIFF ) ShellExecute( ( HWND ) hb_parptr( 1 ), - ( LPCTSTR ) HB_PARSTR( 2, &hOperation , NULL ), /* edit, explore, open, print, play?, properties? */ + ( LPCTSTR ) HB_PARSTRDEF( 2, &hOperation , NULL ), /* edit, explore, open, print, play?, properties? */ ( LPCTSTR ) HB_PARSTR( 3, &hFile , NULL ), ( LPCTSTR ) HB_PARSTR( 4, &hParameters, NULL ), ( LPCTSTR ) HB_PARSTR( 5, &hDirectory , NULL ), diff --git a/harbour/contrib/hbwin/wapi_winbase.c b/harbour/contrib/hbwin/wapi_winbase.c index e077f202f6..c9271c6040 100644 --- a/harbour/contrib/hbwin/wapi_winbase.c +++ b/harbour/contrib/hbwin/wapi_winbase.c @@ -53,24 +53,12 @@ #define HB_OS_WIN_USED #include "hbapi.h" +#include "hbwinuni.h" #include "hbwapi.h" HB_FUNC( WAPI_GETCOMMANDLINE ) { - char * buffer = HB_TCHAR_CONVFROM( GetCommandLine() ); - - { - /* Convert from OS codepage */ - char * pszFree = NULL; - const char * pszResult = hb_osDecodeCP( buffer, &pszFree, NULL ); - - if( pszFree ) - hb_retc_buffer( pszFree ); - else - hb_retc( pszResult ); - } - - HB_TCHAR_FREE( buffer ); + HB_RETSTR( GetCommandLine() ); } HB_FUNC( WAPI_GETCURRENTPROCESS ) @@ -117,11 +105,11 @@ HB_FUNC( WAPI_SETERRORMODE ) HB_FUNC( WAPI_LOADLIBRARY ) { - LPTSTR lpName = HB_TCHAR_CONVTO( hb_parcx( 1 ) ); + void * hName; - hb_retptr( LoadLibrary( ( LPCTSTR ) lpName ) ); + hb_retptr( LoadLibrary( ( LPCTSTR ) HB_PARSTRDEF( 1, &hName, NULL ) ) ); - HB_TCHAR_FREE( lpName ); + hb_strfree( hName ); } HB_FUNC( WAPI_FREELIBRARY ) @@ -141,12 +129,11 @@ HB_FUNC( WAPI_GETPROCADDRESS ) /* HMODULE WINAPI GetModuleHandle( __in_opt LPCTSTR lpModuleName ); */ HB_FUNC( WAPI_GETMODULEHANDLE ) { - LPTSTR lpModuleName = HB_ISCHAR( 1 ) ? ( LPTSTR ) HB_TCHAR_CONVTO( hb_parc( 1 ) ) : ( LPTSTR ) NULL; + void * hModuleName; - wapi_ret_HANDLE( GetModuleHandle( lpModuleName ) ); + wapi_ret_HANDLE( GetModuleHandle( ( LPCTSTR ) HB_PARSTR( 1, &hModuleName, NULL ) ) ); - if( lpModuleName ) - HB_TCHAR_FREE( lpModuleName ); + hb_strfree( hModuleName ); } /* VOID WINAPI Sleep( __in DWORD dwMilliseconds ); */ @@ -157,37 +144,36 @@ HB_FUNC( WAPI_SLEEP ) HB_FUNC( WAPI_OUTPUTDEBUGSTRING ) { - LPTSTR lpOutputString = HB_ISCHAR( 1 ) ? ( LPTSTR ) HB_TCHAR_CONVTO( hb_parc( 1 ) ) : ( LPTSTR ) NULL; + void * hOutputString; - OutputDebugString( lpOutputString ); + OutputDebugString( ( LPCTSTR ) HB_PARSTR( 1, &hOutputString, NULL ) ); - if( lpOutputString ) - HB_TCHAR_FREE( lpOutputString ); + hb_strfree( hOutputString ); } HB_FUNC( WAPI_FORMATMESSAGE ) { - LPTSTR lpSource = HB_ISCHAR( 2 ) ? HB_TCHAR_CONVTO( hb_parc( 2 ) ) : NULL; - HB_SIZE nBufferLen = hb_parclen( 5 ); - LPTSTR lpBuffer = nBufferLen > 0 ? ( LPTSTR ) hb_xgrab( nBufferLen * sizeof( LPTSTR ) ) : NULL; + void * hSource = NULL; - hb_retnl( FormatMessage( ( DWORD ) hb_parnldef( 1, FORMAT_MESSAGE_FROM_SYSTEM ) /* dwFlags */, - ( LPCVOID ) ( HB_ISCHAR( 2 ) ? lpSource : hb_parptr( 2 ) ), - HB_ISNUM( 3 ) ? ( DWORD ) hb_parnl( 3 ) : GetLastError() /* dwMessageId */, - ( DWORD ) hb_parnldef( 4, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ) ) /* dwLanguageId */, - ( LPTSTR ) lpBuffer, - ( DWORD ) nBufferLen, - NULL /* TODO: Add support for this parameter. */ ) ); + DWORD dwBufferLen = ( DWORD ) hb_parclen( 5 ); + LPTSTR lpBuffer = dwBufferLen > 0 ? ( LPTSTR ) hb_xgrab( dwBufferLen * sizeof( LPTSTR ) ) : NULL; + DWORD dwRetVal; + + hb_retnl( dwRetVal = FormatMessage( ( DWORD ) hb_parnldef( 1, FORMAT_MESSAGE_FROM_SYSTEM ) /* dwFlags */, + ( LPCVOID ) ( HB_ISCHAR( 2 ) ? HB_PARSTR( 2, &hSource, NULL ) : hb_parptr( 2 ) ), + HB_ISNUM( 3 ) ? ( DWORD ) hb_parnl( 3 ) : GetLastError() /* dwMessageId */, + ( DWORD ) hb_parnldef( 4, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ) ) /* dwLanguageId */, + lpBuffer, + dwBufferLen, + NULL /* TODO: Add support for this parameter. */ ) ); if( lpBuffer ) { - char * buffer = HB_TCHAR_CONVFROM( lpBuffer ); - hb_storc( buffer, 5 ); - HB_TCHAR_FREE( buffer ); - + HB_STORSTR( dwRetVal ? lpBuffer : NULL, 5 ); hb_xfree( lpBuffer ); } + else + hb_storc( NULL, 5 ); - if( lpSource ) - HB_TCHAR_FREE( lpSource ); + hb_strfree( hSource ); } diff --git a/harbour/contrib/hbwin/wapi_winuser.c b/harbour/contrib/hbwin/wapi_winuser.c index b80ee671b2..2ab8d5534d 100644 --- a/harbour/contrib/hbwin/wapi_winuser.c +++ b/harbour/contrib/hbwin/wapi_winuser.c @@ -71,22 +71,22 @@ HB_FUNC( WAPI_GETDESKTOPWINDOW ) HB_FUNC( WAPI_MESSAGEBOX ) { - LPTSTR lpStr1 = HB_TCHAR_CONVTO( hb_parcx( 2 ) ); - LPTSTR lpStr2 = HB_TCHAR_CONVTO( hb_parcx( 3 ) ); - hb_retni( MessageBox( ( HWND ) hb_parptr( 1 ), lpStr1, lpStr2, hb_parni( 4 ) ) ); - HB_TCHAR_FREE( lpStr1 ); - HB_TCHAR_FREE( lpStr2 ); + void * hStr1; + void * hStr2; + hb_retni( MessageBox( ( HWND ) hb_parptr( 1 ), ( LPCTSTR ) HB_PARSTR( 2, &hStr1, NULL ), ( LPCTSTR ) HB_PARSTR( 3, &hStr2, NULL ), hb_parni( 4 ) ) ); + hb_strfree( hStr1 ); + hb_strfree( hStr2 ); } HB_FUNC( WAPI_CREATEWINDOWEX ) { - LPTSTR lpStr1 = HB_TCHAR_CONVTO( hb_parcx( 2 ) ); - LPTSTR lpStr2 = HB_TCHAR_CONVTO( hb_parcx( 3 ) ); + void * hClassName; + void * hWindowName; hb_retptr( CreateWindowEx( ( DWORD ) hb_parnl( 1 ) /* dwExStyle */, - ( LPCTSTR ) lpStr1 /* lpClassName */, - ( LPCTSTR ) lpStr2 /* lpWindowName */, + ( LPCTSTR ) HB_PARSTRDEF( 2, &hClassName, NULL ), + ( LPCTSTR ) HB_PARSTRDEF( 3, &hWindowName, NULL ), HB_ISNUM( 4 ) ? ( DWORD ) hb_parnl( 4 ) : WS_OVERLAPPEDWINDOW /* dwStyle */, HB_ISNUM( 5 ) ? ( int ) hb_parni( 5 ) : ( int ) CW_USEDEFAULT /* x */, HB_ISNUM( 6 ) ? ( int ) hb_parni( 6 ) : ( int ) CW_USEDEFAULT /* y */, @@ -97,8 +97,8 @@ HB_FUNC( WAPI_CREATEWINDOWEX ) ( HINSTANCE ) hb_parptr( 11 ) /* hInstance */, ( LPVOID ) hb_parptr( 12 ) /* lpParam */ ) ); - HB_TCHAR_FREE( lpStr1 ); - HB_TCHAR_FREE( lpStr2 ); + hb_strfree( hClassName ); + hb_strfree( hWindowName ); } HB_FUNC( WAPI_DESTROYWINDOW ) @@ -301,17 +301,14 @@ HB_FUNC( WAPI_SETFOCUS ) #if 0 HB_FUNC( WAPI_LOADBITMAP ) { - LPTSTR lpBmp; - if( HB_ISNUM( 2 ) ) - lpBmp = ( LPTSTR ) MAKEINTRESOURCE( wapi_par_INT( 2 ) ); + hb_retptr( LoadBitmap( wapi_par_HINSTANCE( 1 ), ( LPTSTR ) MAKEINTRESOURCE( wapi_par_INT( 2 ) ) ) ); else - lpBmp = ( LPTSTR ) HB_TCHAR_CONVTO( hb_parcx( 2 ) ); - - hb_retptr( LoadBitmap( wapi_par_HINSTANCE( 1 ), lpBmp ) ); - - if( ! HB_ISNUM( 2 ) ) - HB_TCHAR_FREE( lpBmp ); + { + void * hBmp; + hb_retptr( LoadBitmap( wapi_par_HINSTANCE( 1 ), ( LPCTSTR ) HB_PARSTRDEF( 2, &hBmp, NULL ) ) ); + hb_strfree( hBmp ); + } } #endif /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbxbp/xbpgeneric.prg b/harbour/contrib/hbxbp/xbpgeneric.prg index edd6903e1b..8ada536f1e 100644 --- a/harbour/contrib/hbxbp/xbpgeneric.prg +++ b/harbour/contrib/hbxbp/xbpgeneric.prg @@ -133,7 +133,7 @@ FUNCTION hbxbp_InitializeEventBuffer() IF empty( t_events ) t_events := array( EVENT_BUFFER ) - aeval( t_events, {|e,i| e := e, t_events[ i ] := { 0, NIL, NIL, NIL } } ) + aeval( t_events, {|e,i| HB_SYMBOL_UNUSED( e ), t_events[ i ] := { 0, NIL, NIL, NIL } } ) ENDIF RETURN nil @@ -143,7 +143,7 @@ FUNCTION hbxbp_InitializeEventBuffer() FUNCTION hbxbp_ClearEventBuffer() IF !empty( t_events ) - aeval( t_events, {|e,i| e := e, t_events[ i ] := NIL } ) + aeval( t_events, {|e,i| HB_SYMBOL_UNUSED( e ), t_events[ i ] := NIL } ) t_events := NIL ENDIF @@ -166,11 +166,10 @@ FUNCTION hbxbp_SetEventLoop( oELoop ) /*----------------------------------------------------------------------*/ FUNCTION PostAppEvent( nEvent, mp1, mp2, oXbp ) - LOCAL lSuccess := .T. SetAppEvent( nEvent, mp1, mp2, oXbp ) - RETURN lSuccess + RETURN .T. /*----------------------------------------------------------------------*/ @@ -226,9 +225,7 @@ FUNCTION AppEvent( mp1, mp2, oXbp, nTimeout ) /*----------------------------------------------------------------------*/ FUNCTION SetAppWindow( oXbp ) - LOCAL oldAppWindow - - oldAppWindow := t_oAppWindow + LOCAL oldAppWindow := t_oAppWindow IF hb_isObject( oXbp ) t_oAppWindow := oXbp @@ -270,12 +267,12 @@ FUNCTION MsgBox( cMsg, cTitle ) DEFAULT cTitle TO " " - cMsg := strtran( cMsg, chr( 13 )+chr( 10 ), "
" ) - cMsg := strtran( cMsg, chr( 13 ), "
" ) - cMsg := strtran( cMsg, chr( 10 ), "
" ) + cMsg := strtran( cMsg, chr( 13 ) + chr( 10 ), "
" ) + cMsg := strtran( cMsg, chr( 13 ), "
" ) + cMsg := strtran( cMsg, chr( 10 ), "
" ) oMB := QMessageBox():new() - oMB:setText( ""+ cMsg +"" ) + oMB:setText( /* "" + */ cMsg /* + "" */ ) oMB:setIcon( QMessageBox_Information ) oMB:setParent( SetAppWindow():pWidget ) oMB:setWindowFlags( Qt_Dialog ) diff --git a/harbour/include/hbwinuni.h b/harbour/include/hbwinuni.h index a5d09da93d..df137e34c7 100644 --- a/harbour/include/hbwinuni.h +++ b/harbour/include/hbwinuni.h @@ -61,12 +61,14 @@ #if defined( UNICODE ) #define HB_PARSTR( n, h, len ) hb_parstr_u16( n, HB_CDP_ENDIAN_NATIVE, h, len ) - #define HB_RETSTR( str ) hb_retstr_u16( HB_CDP_ENDIAN_NATIVE, str ) - #define HB_RETSTRLEN( str, len ) hb_retstrlen_u16( HB_CDP_ENDIAN_NATIVE, str, len ) - #define HB_STORSTR( str, n ) hb_storstr_u16( HB_CDP_ENDIAN_NATIVE, str, n ) - #define HB_STORSTRLEN( str, len, n ) hb_storstrlen_u16( HB_CDP_ENDIAN_NATIVE, str, len, n ) + #define HB_PARSTRDEF( n, h, len ) hb_parstr_u16( n, HB_CDP_ENDIAN_NATIVE, h, len ) + #define HB_RETSTR( str ) hb_retstr_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) ( str ) ) + #define HB_RETSTRLEN( str, len ) hb_retstrlen_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) ( str ), len ) + #define HB_STORSTR( str, n ) hb_storstr_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) ( str ), n ) + #define HB_STORSTRLEN( str, len, n ) hb_storstrlen_u16( HB_CDP_ENDIAN_NATIVE, ( const HB_WCHAR * ) ( str ), len, n ) #else #define HB_PARSTR( n, h, len ) hb_parstr( n, hb_setGetOSCP(), h, len ) + #define HB_PARSTRDEF( n, h, len ) hb_parstr( n, hb_setGetOSCP(), h, len ) #define HB_RETSTR( str ) hb_retstr( hb_setGetOSCP(), str ) #define HB_RETSTRLEN( str, len ) hb_retstrlen( hb_setGetOSCP(), str, len ) #define HB_STORSTR( str, n ) hb_storstr( hb_setGetOSCP(), str, n )