From 343f1caba4b7b6ec8f9103c4ba14e2a21eeff4bc Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 14 Jul 2010 17:25:34 +0000 Subject: [PATCH] 2010-07-14 19:23 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbqt/hbqt_hbqplaintextedit.cpp ! Fix for paint bug typo. Report/patch by Antonio Linares. * src/rtl/hbdoc.prg ! __HBDOC_FROMSOURCE(): added parameter validation. * tests/stripdoc.hbs ! Fixed -w3 warning. * contrib/gtwvg/wvgwin.c * contrib/gtwvg/wvgsink.c * contrib/gtwvg/wvgwing.c * contrib/hbwin/hbwinole.h * contrib/hbwin/win_shell.c * contrib/hbwin/olecore.c * contrib/hbwin/hbolesrv.c + Applied patch sent by Tamas Tevesz, targeting to change OLE code to use MS supplied macros to access certain structure elements. Also contains tweaks to NONAMELESSUNION Windows mess. "the attached is take two to use ole api accessors instead of hard-coded member names which may or may not be present anyway." ; Plus some casing adjusments in macro variable names. * contrib/gtwvg/gtwvg.c * contrib/gtwvg/wvggui.c * contrib/gtwvg/wvgwin.c % Deleted ( HWND ) casts from MS Windows-defined constants. Still when using plain MS defined constant, msvc will show some warnings when compiled in C mode: gtwvg.c(3594) : warning C4306: 'type cast' : conversion from 'int' to 'HWND' of greater size Couldn't find a way to defeat it. * contrib/gtwvg/gtwvg.h * contrib/gtwvg/wvggui.h + Upped IE version we are building against to 0x0500. This avoids some plain C mode msvc warnings. * contrib/gtwvg/wvgwing.c + Added ( HB_PTRDIFF ) cast to newly activated code after making above change. --- harbour/ChangeLog | 43 +++ harbour/contrib/gtwvg/gtwvg.c | 6 +- harbour/contrib/gtwvg/gtwvg.h | 2 +- harbour/contrib/gtwvg/wvggui.c | 4 +- harbour/contrib/gtwvg/wvggui.h | 2 +- harbour/contrib/gtwvg/wvgsink.c | 4 +- harbour/contrib/gtwvg/wvgwin.c | 31 +- harbour/contrib/gtwvg/wvgwing.c | 29 +- .../contrib/hbqt/hbqt_hbqplaintextedit.cpp | 2 + harbour/contrib/hbwin/hbolesrv.c | 4 +- harbour/contrib/hbwin/hbwinole.h | 39 ++- harbour/contrib/hbwin/olecore.c | 316 +++++++++--------- harbour/contrib/hbwin/win_shell.c | 33 +- harbour/src/rtl/hbdoc.prg | 4 +- harbour/tests/stripdoc.hbs | 6 +- 15 files changed, 325 insertions(+), 200 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d896214577..b643de4f31 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,49 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-14 19:23 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * contrib/hbqt/hbqt_hbqplaintextedit.cpp + ! Fix for paint bug typo. Report/patch by Antonio Linares. + + * src/rtl/hbdoc.prg + ! __HBDOC_FROMSOURCE(): added parameter validation. + + * tests/stripdoc.hbs + ! Fixed -w3 warning. + + * contrib/gtwvg/wvgwin.c + * contrib/gtwvg/wvgsink.c + * contrib/gtwvg/wvgwing.c + * contrib/hbwin/hbwinole.h + * contrib/hbwin/win_shell.c + * contrib/hbwin/olecore.c + * contrib/hbwin/hbolesrv.c + + Applied patch sent by Tamas Tevesz, targeting to change + OLE code to use MS supplied macros to access certain + structure elements. Also contains tweaks to NONAMELESSUNION + Windows mess. + "the attached is take two to use ole api accessors instead of + hard-coded member names which may or may not be present anyway." + ; Plus some casing adjusments in macro variable names. + + * contrib/gtwvg/gtwvg.c + * contrib/gtwvg/wvggui.c + * contrib/gtwvg/wvgwin.c + % Deleted ( HWND ) casts from MS Windows-defined constants. + Still when using plain MS defined constant, msvc will + show some warnings when compiled in C mode: + gtwvg.c(3594) : warning C4306: 'type cast' : conversion from 'int' to 'HWND' of greater size + Couldn't find a way to defeat it. + + * contrib/gtwvg/gtwvg.h + * contrib/gtwvg/wvggui.h + + Upped IE version we are building against to 0x0500. + This avoids some plain C mode msvc warnings. + + * contrib/gtwvg/wvgwing.c + + Added ( HB_PTRDIFF ) cast to newly activated code + after making above change. + 2010-07-14 14:52 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbnf/acctyear.prg * contrib/hbnf/byteneg.prg diff --git a/harbour/contrib/gtwvg/gtwvg.c b/harbour/contrib/gtwvg/gtwvg.c index 1a4b8fb04d..f4f1f033f8 100644 --- a/harbour/contrib/gtwvg/gtwvg.c +++ b/harbour/contrib/gtwvg/gtwvg.c @@ -3591,7 +3591,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) { RECT rect = { 0,0,0,0 }; GetWindowRect( pWVT->hWnd, &rect ); - hb_retl( SetWindowPos( pWVT->hWnd, ( HWND ) HWND_TOPMOST, + hb_retl( SetWindowPos( pWVT->hWnd, HWND_TOPMOST, rect.left, rect.top, 0, @@ -3603,7 +3603,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) { RECT rect = { 0,0,0,0 }; GetWindowRect( pWVT->hWnd, &rect ); - hb_retl( SetWindowPos( pWVT->hWnd, ( HWND ) HWND_NOTOPMOST, + hb_retl( SetWindowPos( pWVT->hWnd, HWND_NOTOPMOST, rect.left, rect.top, 0, @@ -4439,7 +4439,7 @@ static void hb_wvt_gtCreateToolTipWindow( PHB_GTWVT pWVT ) pWVT->hInstance, NULL ); SetWindowPos( hwndTT, - ( HWND ) HWND_TOPMOST, + HWND_TOPMOST, 0, 0, 0, diff --git a/harbour/contrib/gtwvg/gtwvg.h b/harbour/contrib/gtwvg/gtwvg.h index 36470e65cf..ef64115d94 100644 --- a/harbour/contrib/gtwvg/gtwvg.h +++ b/harbour/contrib/gtwvg/gtwvg.h @@ -62,7 +62,7 @@ #include <_mingw.h> #endif #ifndef __MINGW64_VERSION_MAJOR - #define _WIN32_IE 0x0400 + #define _WIN32_IE 0x0500 #endif #endif diff --git a/harbour/contrib/gtwvg/wvggui.c b/harbour/contrib/gtwvg/wvggui.c index e369a89908..c08c56fbaa 100644 --- a/harbour/contrib/gtwvg/wvggui.c +++ b/harbour/contrib/gtwvg/wvggui.c @@ -1985,7 +1985,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) { RECT rect = { 0,0,0,0 }; GetWindowRect( pWVT->hWnd, &rect ); - hb_retl( SetWindowPos( pWVT->hWnd, ( HWND ) HWND_TOPMOST, + hb_retl( SetWindowPos( pWVT->hWnd, HWND_TOPMOST, rect.left, rect.top, 0, @@ -1997,7 +1997,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) { RECT rect = { 0,0,0,0 }; GetWindowRect( pWVT->hWnd, &rect ); - hb_retl( SetWindowPos( pWVT->hWnd, ( HWND ) HWND_NOTOPMOST, + hb_retl( SetWindowPos( pWVT->hWnd, HWND_NOTOPMOST, rect.left, rect.top, 0, diff --git a/harbour/contrib/gtwvg/wvggui.h b/harbour/contrib/gtwvg/wvggui.h index ddba418a67..339a116a72 100644 --- a/harbour/contrib/gtwvg/wvggui.h +++ b/harbour/contrib/gtwvg/wvggui.h @@ -62,7 +62,7 @@ #include <_mingw.h> #endif #ifndef __MINGW64_VERSION_MAJOR - #define _WIN32_IE 0x0400 + #define _WIN32_IE 0x0500 #endif #endif diff --git a/harbour/contrib/gtwvg/wvgsink.c b/harbour/contrib/gtwvg/wvgsink.c index e813d5b938..8fca8aa310 100644 --- a/harbour/contrib/gtwvg/wvgsink.c +++ b/harbour/contrib/gtwvg/wvgsink.c @@ -251,7 +251,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IEventHandler *lpThis, DISPID dispid, R for( i = iRefs = 0; i < iCount && iRefs < 32; i++ ) { - if( pParams->rgvarg[ i ].n1.n2.vt & VT_BYREF ) + if( V_VT( &pParams->rgvarg[ i ] ) & VT_BYREF ) refArray[ iRefs++ ].item = hb_stackAllocItem(); } @@ -262,7 +262,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IEventHandler *lpThis, DISPID dispid, R for( i = 1, ii = 0; i <= iCount; i++ ) { - if( pParams->rgvarg[ iCount - i ].n1.n2.vt & VT_BYREF ) + if( V_VT( &pParams->rgvarg[ iCount - i ] ) & VT_BYREF ) { refArray[ ii ].variant = &pParams->rgvarg[ iCount - i ]; hb_oleVariantToItem( refArray[ ii ].item, refArray[ ii ].variant ); diff --git a/harbour/contrib/gtwvg/wvgwin.c b/harbour/contrib/gtwvg/wvgwin.c index 66e2a69417..4d4bf33c7d 100644 --- a/harbour/contrib/gtwvg/wvgwin.c +++ b/harbour/contrib/gtwvg/wvgwin.c @@ -74,13 +74,28 @@ /*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ -/* dirty hack for borland C compiler and #define NONAMELESSUNION in oledlg.h */ #if defined( __BORLANDC__ ) -# define DUMMYUNIONNAME -# define DUMMYUNIONNAME2 -# define DUMMYUNIONNAME3 -# define DUMMYUNIONNAME4 -# define DUMMYUNIONNAME5 +# if !defined( NONAMELESSUNION ) +# define NONAMELESSUNION +# endif +# if defined( DUMMYUNIONNAME ) +# undef DUMMYUNIONNAME +# endif +# if defined( DUMMYUNIONNAME2 ) +# undef DUMMYUNIONNAME2 +# endif +# if defined( DUMMYUNIONNAME3 ) +# undef DUMMYUNIONNAME3 +# endif +# if defined( DUMMYUNIONNAME4 ) +# undef DUMMYUNIONNAME4 +# endif +# if defined( DUMMYUNIONNAME5 ) +# undef DUMMYUNIONNAME5 +# endif +# define HB_WIN_V_UNION( x, y, z ) ((x).y.z) +#else +# define HB_WIN_V_UNION( x, y, z ) ((x).z) #endif #include "gtwvg.h" @@ -1108,7 +1123,7 @@ HB_FUNC( WVG_GETCURRENTFONT ) HB_FUNC( WVG_SETWINDOWPOSTOBACK ) { - hb_retl( SetWindowPos( wvg_parhwnd( 1 ), ( HWND ) HWND_BOTTOM, 0, 0, 0, 0 , + hb_retl( SetWindowPos( wvg_parhwnd( 1 ), HWND_BOTTOM, 0, 0, 0, 0 , SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ) ); } @@ -1116,7 +1131,7 @@ HB_FUNC( WVG_SETWINDOWPOSTOBACK ) HB_FUNC( WVG_SETWINDOWPOSTOTOP ) { - hb_retl( SetWindowPos( wvg_parhwnd( 1 ), ( HWND ) HWND_TOP, 0, 0, 0, 0 , + hb_retl( SetWindowPos( wvg_parhwnd( 1 ), HWND_TOP, 0, 0, 0, 0 , SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ) ); } diff --git a/harbour/contrib/gtwvg/wvgwing.c b/harbour/contrib/gtwvg/wvgwing.c index f406e5ac36..ba39980c6e 100644 --- a/harbour/contrib/gtwvg/wvgwing.c +++ b/harbour/contrib/gtwvg/wvgwing.c @@ -74,13 +74,28 @@ /*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ -/* dirty hack for borland C compiler and #define NONAMELESSUNION in oledlg.h */ #if defined( __BORLANDC__ ) -# define DUMMYUNIONNAME -# define DUMMYUNIONNAME2 -# define DUMMYUNIONNAME3 -# define DUMMYUNIONNAME4 -# define DUMMYUNIONNAME5 +# if !defined( NONAMELESSUNION ) +# define NONAMELESSUNION +# endif +# if defined( DUMMYUNIONNAME ) +# undef DUMMYUNIONNAME +# endif +# if defined( DUMMYUNIONNAME2 ) +# undef DUMMYUNIONNAME2 +# endif +# if defined( DUMMYUNIONNAME3 ) +# undef DUMMYUNIONNAME3 +# endif +# if defined( DUMMYUNIONNAME4 ) +# undef DUMMYUNIONNAME4 +# endif +# if defined( DUMMYUNIONNAME5 ) +# undef DUMMYUNIONNAME5 +# endif +# define HB_WIN_V_UNION( x, y, z ) ((x).y.z) +#else +# define HB_WIN_V_UNION( x, y, z ) ((x).z) #endif #include "gtwvg.h" @@ -1066,7 +1081,7 @@ HB_FUNC( WVG_ADDTOOLBARBUTTON ) /* set bitmap */ tbab.hInst = NULL; #if (_WIN32_IE >= 0x0500) - tbab.nID = ( UINT_PTR ) ( HBITMAP ) hb_parnint( 2 ); + tbab.nID = ( UINT_PTR ) ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 2 ); #else tbab.nID = ( UINT ) ( HBITMAP ) hb_parnl( 2 ); #endif diff --git a/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp b/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp index 214388bc47..8d205901b1 100644 --- a/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp +++ b/harbour/contrib/hbqt/hbqt_hbqplaintextedit.cpp @@ -1485,6 +1485,8 @@ void HBQPlainTextEdit::paintEvent( QPaintEvent * event ) // this->hbDrawCursor( event ); + painter.end(); + QPlainTextEdit::paintEvent( event ); #if 0 diff --git a/harbour/contrib/hbwin/hbolesrv.c b/harbour/contrib/hbwin/hbolesrv.c index 0530240bd2..354c3767cb 100644 --- a/harbour/contrib/hbwin/hbolesrv.c +++ b/harbour/contrib/hbwin/hbolesrv.c @@ -597,8 +597,8 @@ static HB_BOOL s_objItemToVariant( VARIANT * pVariant, PHB_ITEM pItem ) if( s_createHbOleObject( HB_ID_REF( IID_IDispatch ), &pvObj, hb_itemNew( pItem ), HB_FALSE ) == S_OK ) { - pVariant->n1.n2.vt = VT_DISPATCH; - pVariant->n1.n2.n3.pdispVal = ( IDispatch * ) pvObj; + V_VT( pVariant ) = VT_DISPATCH; + V_DISPATCH( pVariant ) = ( IDispatch * ) pvObj; return HB_TRUE; } return HB_FALSE; diff --git a/harbour/contrib/hbwin/hbwinole.h b/harbour/contrib/hbwin/hbwinole.h index 42cfc3bec0..df58e47ffa 100644 --- a/harbour/contrib/hbwin/hbwinole.h +++ b/harbour/contrib/hbwin/hbwinole.h @@ -76,14 +76,49 @@ /* This code uses named union so this declaration is necessary for * compilers where nameless unions are default */ -#if !defined( NONAMELESSUNION ) - #define NONAMELESSUNION +#if defined( __BORLANDC__ ) +# if !defined( NONAMELESSUNION ) +# define NONAMELESSUNION +# endif #endif #include #include #include +/* MinGW is lacking a number of variant accessors + */ +#if defined( __MINGW32__ ) +# if !defined( V_I1REF ) +# define V_I1REF( x ) V_UNION( x, pcVal ) +# endif +# if !defined( V_UI2REF ) +# define V_UI2REF( x ) V_UNION( x, puiVal ) +# endif +# if !defined( V_INT ) +# define V_INT( x ) V_UNION( x, intVal ) +# endif +# if !defined( V_INTREF ) +# define V_INTREF( x ) V_UNION( x, pintVal ) +# endif +# if !defined( V_UINT ) +# define V_UINT( x ) V_UNION( x, uintVal ) +# endif +# if !defined( V_UINTREF ) +# define V_UINTREF( x ) V_UNION( x, puintVal ) +# endif +#endif + +#if defined( NONAMELESSUNION ) +# define HB_WIN_U1( x, y ) ( x )->n1.y +# define HB_WIN_U2( x, y ) ( x )->n1.n2.y +# define HB_WIN_U3( x, y ) ( x )->n1.n2.n3.y +#else +# define HB_WIN_U1( x, y ) ( x )->y +# define HB_WIN_U2( x, y ) ( x )->y +# define HB_WIN_U3( x, y ) ( x )->y +#endif + /* macros used to hide type of interface: C or C++ */ #if defined( __cplusplus ) && !defined( CINTERFACE ) && \ diff --git a/harbour/contrib/hbwin/olecore.c b/harbour/contrib/hbwin/olecore.c index 8fe5bfe417..62c8e29bcb 100644 --- a/harbour/contrib/hbwin/olecore.c +++ b/harbour/contrib/hbwin/olecore.c @@ -336,12 +336,12 @@ static void hb_oleDispatchToVariant( VARIANT* pVariant, IDispatch* pDisp, /* pVariant will be freed using VariantClear(). We increment reference count to keep OLE object alive */ HB_VTBL( pDisp )->AddRef( HB_THIS( pDisp ) ); - pVariant->n1.n2.vt = VT_DISPATCH; - pVariant->n1.n2.n3.pdispVal = pDisp; + V_VT( pVariant ) = VT_DISPATCH; + V_DISPATCH( pVariant ) = pDisp; if( pVarRef ) { - pVarRef->n1.n2.vt = VT_DISPATCH | VT_BYREF; - pVarRef->n1.n2.n3.ppdispVal = &pVariant->n1.n2.n3.pdispVal; + V_VT( pVarRef ) = VT_DISPATCH | VT_BYREF; + V_DISPATCHREF( pVarRef ) = &V_DISPATCH( pVariant ); } } @@ -351,98 +351,98 @@ static void hb_oleDispatchToVariant( VARIANT* pVariant, IDispatch* pDisp, static void hb_oleItemToVariantRef( VARIANT* pVariant, PHB_ITEM pItem, VARIANT* pVarRef, HB_OLEOBJ_FUNC pObjFunc ) { - VariantClear( pVariant ); /* pVariant->n1.n2.vt = VT_EMPTY; */ + VariantClear( pVariant ); /* VT_T( pVariant ) = VT_EMPTY; */ switch( hb_itemType( pItem ) ) { case HB_IT_STRING: case HB_IT_MEMO: - pVariant->n1.n2.vt = VT_BSTR; - pVariant->n1.n2.n3.bstrVal = hb_oleItemToString( pItem ); + V_VT( pVariant ) = VT_BSTR; + V_BSTR( pVariant ) = hb_oleItemToString( pItem ); if( pVarRef ) { - pVarRef->n1.n2.vt = VT_BSTR | VT_BYREF; - pVarRef->n1.n2.n3.pbstrVal = &pVariant->n1.n2.n3.bstrVal; + V_VT( pVarRef ) = VT_BSTR | VT_BYREF; + V_BSTRREF( pVarRef ) = &V_BSTR( pVariant ); } break; case HB_IT_LOGICAL: - pVariant->n1.n2.vt = VT_BOOL; - pVariant->n1.n2.n3.boolVal = hb_itemGetL( pItem ) ? VARIANT_TRUE : VARIANT_FALSE; + V_VT( pVariant ) = VT_BOOL; + V_BOOL( pVariant ) = hb_itemGetL( pItem ) ? VARIANT_TRUE : VARIANT_FALSE; if( pVarRef ) { - pVarRef->n1.n2.vt = VT_BOOL | VT_BYREF; - pVarRef->n1.n2.n3.pboolVal = &pVariant->n1.n2.n3.boolVal; + V_VT( pVarRef ) = VT_BOOL | VT_BYREF; + V_BOOLREF( pVarRef ) = &V_BOOL( pVariant ); } break; case HB_IT_INTEGER: - pVariant->n1.n2.vt = VT_I4; - pVariant->n1.n2.n3.lVal = hb_itemGetNL( pItem ); + V_VT( pVariant ) = VT_I4; + V_I4( pVariant ) = hb_itemGetNL( pItem ); if( pVarRef ) { - pVarRef->n1.n2.vt = VT_I4 | VT_BYREF; - pVarRef->n1.n2.n3.plVal = &pVariant->n1.n2.n3.lVal; + V_VT( pVarRef ) = VT_I4 | VT_BYREF; + V_I4REF( pVarRef ) = &V_I4( pVariant ); } break; case HB_IT_LONG: #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - pVariant->n1.n2.vt = VT_I4; - pVariant->n1.n2.n3.lVal = hb_itemGetNL( pItem ); + V_VT( pVariant ) = VT_I4; + V_I4( pVariant ) = hb_itemGetNL( pItem ); if( pVarRef ) { - pVarRef->n1.n2.vt = VT_I4 | VT_BYREF; - pVarRef->n1.n2.n3.plVal = &pVariant->n1.n2.n3.lVal; + V_VT( pVarRef ) = VT_I4 | VT_BYREF; + V_I4REF( pVarRef ) = &V_I4( pVariant ); } #else - pVariant->n1.n2.vt = VT_I8; + V_VT( pVariant ) = VT_I8; # if defined( HB_OLE_NO_LL ) /* workaround for wrong OLE variant structure definition */ - * ( ( HB_LONGLONG * ) &pVariant->n1.n2.n3.lVal ) = hb_itemGetNInt( pItem ); + * ( ( HB_LONGLONG * ) &V_I4( pVariant ) ) = hb_itemGetNInt( pItem ); # else - pVariant->n1.n2.n3.llVal = hb_itemGetNInt( pItem ); + V_I8( pVariant ) = hb_itemGetNInt( pItem ); # endif if( pVarRef ) { - pVarRef->n1.n2.vt = VT_I8 | VT_BYREF; + V_VT( pVarRef ) = VT_I8 | VT_BYREF; # if defined( HB_OLE_NO_LLREF ) || defined( HB_OLE_NO_LL ) /* workaround for wrong OLE variant structure definition */ - pVarRef->n1.n2.n3.pdblVal = &pVariant->n1.n2.n3.dblVal; + V_R8REF( pVarRef ) = &V_R8( pVariant ); # else - pVarRef->n1.n2.n3.pllVal = &pVariant->n1.n2.n3.llVal; + V_I8REF( pVarRef ) = &V_I8( pVariant ); # endif } #endif break; case HB_IT_DOUBLE: - pVariant->n1.n2.vt = VT_R8; - pVariant->n1.n2.n3.dblVal = hb_itemGetND( pItem ); + V_VT( pVariant ) = VT_R8; + V_R8( pVariant ) = hb_itemGetND( pItem ); if( pVarRef ) { - pVarRef->n1.n2.vt = VT_R8 | VT_BYREF; - pVarRef->n1.n2.n3.pdblVal = &pVariant->n1.n2.n3.dblVal; + V_VT( pVarRef ) = VT_R8 | VT_BYREF; + V_R8REF( pVarRef ) = &V_R8( pVariant ); } break; case HB_IT_DATE: - pVariant->n1.n2.vt = VT_DATE; - pVariant->n1.n2.n3.dblVal = ( double ) ( hb_itemGetDL( pItem ) - HB_OLE_DATE_BASE ); + V_VT( pVariant ) = VT_DATE; + V_R8( pVariant ) = ( double ) ( hb_itemGetDL( pItem ) - HB_OLE_DATE_BASE ); if( pVarRef ) { - pVarRef->n1.n2.vt = VT_DATE | VT_BYREF; - pVarRef->n1.n2.n3.pdblVal = &pVariant->n1.n2.n3.dblVal; + V_VT( pVarRef ) = VT_DATE | VT_BYREF; + V_R8REF( pVarRef ) = &V_R8( pVariant ); } break; case HB_IT_TIMESTAMP: - pVariant->n1.n2.vt = VT_DATE; - pVariant->n1.n2.n3.dblVal = hb_itemGetTD( pItem ) - HB_OLE_DATE_BASE; + V_VT( pVariant ) = VT_DATE; + V_R8( pVariant ) = hb_itemGetTD( pItem ) - HB_OLE_DATE_BASE; if( pVarRef ) { - pVarRef->n1.n2.vt = VT_DATE | VT_BYREF; - pVarRef->n1.n2.n3.pdblVal = &pVariant->n1.n2.n3.dblVal; + V_VT( pVarRef ) = VT_DATE | VT_BYREF; + V_R8REF( pVarRef ) = &V_R8( pVariant ); } break; @@ -455,12 +455,12 @@ static void hb_oleItemToVariantRef( VARIANT* pVariant, PHB_ITEM pItem, #ifdef HB_OLE_PASS_POINTERS else { - pVariant->n1.n2.vt = VT_PTR; - pVariant->n1.n2.n3.byref = hb_itemGetPtr( pItem ); + V_VT( pVariant ) = VT_PTR; + V_BYREF( pVariant ) = hb_itemGetPtr( pItem ); if( pVarRef ) { - pVarRef->n1.n2.vt = VT_PTR | VT_BYREF; - pVarRef->n1.n2.n3.byref = &pVariant->n1.n2.n3.byref; + V_VT( pVarRef ) = VT_PTR | VT_BYREF; + V_BYREF( pVarRef ) = &V_BYREF( pVariant ); } } #endif @@ -488,12 +488,12 @@ static void hb_oleItemToVariantRef( VARIANT* pVariant, PHB_ITEM pItem, sabound[ 0 ].cElements = ( long ) nLen; pSafeArray = SafeArrayCreate( VT_VARIANT, 1, sabound ); - pVariant->n1.n2.vt = VT_VARIANT | VT_ARRAY; - pVariant->n1.n2.n3.parray = pSafeArray; + V_VT( pVariant ) = VT_VARIANT | VT_ARRAY; + V_ARRAY( pVariant ) = pSafeArray; if( pVarRef ) { - pVarRef->n1.n2.vt = VT_VARIANT | VT_ARRAY | VT_BYREF; - pVarRef->n1.n2.n3.pparray = &pVariant->n1.n2.n3.parray; + V_VT( pVarRef ) = VT_VARIANT | VT_ARRAY | VT_BYREF; + V_ARRAYREF( pVarRef ) = &V_ARRAY( pVariant ); } for( n = 0; n < nLen; n++ ) @@ -513,8 +513,8 @@ static void hb_oleItemToVariantRef( VARIANT* pVariant, PHB_ITEM pItem, default: if( pVarRef ) { - pVarRef->n1.n2.vt = VT_VARIANT | VT_BYREF; - pVarRef->n1.n2.n3.pvarVal = pVariant; + V_VT( pVarRef ) = VT_VARIANT | VT_BYREF; + V_VARIANTREF( pVarRef ) = pVariant; } } @@ -525,8 +525,8 @@ static void hb_oleItemToVariantRef( VARIANT* pVariant, PHB_ITEM pItem, #if 0 if( pVarRef ) { - pVarRef->n1.n2.vt = VT_VARIANT | VT_BYREF; - pVarRef->n1.n2.n3.pvarVal = pVariant; + V_VT( pVarRef ) = VT_VARIANT | VT_BYREF; + V_VARIANTREF( pVarRef ) = pVariant; } #endif } @@ -572,11 +572,11 @@ static void hb_oleSafeArrayToItem( PHB_ITEM pItem, SAFEARRAY * pSafeArray, */ if( SafeArrayGetElement( pSafeArray, plIndex, vt == VT_VARIANT ? ( void * ) &vItem : - ( vt == VT_DECIMAL ? ( void * ) &vItem.n1.decVal : - ( void * ) &vItem.n1.n2.n3 ) ) == S_OK ) + ( vt == VT_DECIMAL ? ( void * ) &HB_WIN_U1( &vItem, decVal ) : + ( void * ) &HB_WIN_U3( &vItem, ullVal ) ) ) == S_OK ) { if( vt != VT_VARIANT ) - vItem.n1.n2.vt = vt; /* it's reserved in VT_DECIMAL structure */ + V_VT( &vItem ) = vt; /* it's reserved in VT_DECIMAL structure */ hb_oleVariantToItem( hb_arrayGetItemPtr( pItem, ++ul ), &vItem ); VariantClear( &vItem ); } @@ -636,18 +636,18 @@ static void hb_oleDispatchToItem( PHB_ITEM pItem, IDispatch* pdispVal ) void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) { - if( pVariant->n1.n2.vt == ( VT_VARIANT | VT_BYREF ) ) - pVariant = pVariant->n1.n2.n3.pvarVal; + if( V_VT( pVariant ) == ( VT_VARIANT | VT_BYREF ) ) + pVariant = V_VARIANTREF( pVariant ); - switch( pVariant->n1.n2.vt ) + switch( V_VT( pVariant ) ) { case VT_UNKNOWN: case VT_UNKNOWN | VT_BYREF: { IDispatch* pdispVal = NULL; - IUnknown* punkVal = pVariant->n1.n2.vt == VT_UNKNOWN ? - pVariant->n1.n2.n3.punkVal : - *pVariant->n1.n2.n3.ppunkVal; + IUnknown* punkVal = V_VT( pVariant ) == VT_UNKNOWN ? + V_UNKNOWN( pVariant ) : + *V_UNKNOWNREF( pVariant ); hb_itemClear( pItem ); if( punkVal && HB_VTBL( punkVal )->QueryInterface( HB_THIS_( punkVal ) HB_ID_REF( IID_IDispatch ), @@ -662,168 +662,168 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) case VT_DISPATCH: case VT_DISPATCH | VT_BYREF: hb_itemClear( pItem ); - hb_oleDispatchToItem( pItem, pVariant->n1.n2.vt == VT_DISPATCH ? - pVariant->n1.n2.n3.pdispVal : - *pVariant->n1.n2.n3.ppdispVal ); + hb_oleDispatchToItem( pItem, V_VT( pVariant ) == VT_DISPATCH ? + V_DISPATCH( pVariant ) : + *V_DISPATCHREF( pVariant ) ); break; case VT_BSTR: - hb_oleStringToItem( pVariant->n1.n2.n3.bstrVal, pItem ); + hb_oleStringToItem( V_BSTR( pVariant ), pItem ); break; case VT_BSTR | VT_BYREF: - hb_oleStringToItem( *pVariant->n1.n2.n3.pbstrVal, pItem ); + hb_oleStringToItem( *V_BSTRREF( pVariant ), pItem ); break; case VT_BOOL: - hb_itemPutL( pItem, pVariant->n1.n2.n3.boolVal ? HB_TRUE : HB_FALSE ); + hb_itemPutL( pItem, V_BOOL( pVariant ) ? HB_TRUE : HB_FALSE ); break; case VT_BOOL | VT_BYREF: - hb_itemPutL( pItem, *pVariant->n1.n2.n3.pboolVal ? HB_TRUE : HB_FALSE ); + hb_itemPutL( pItem, *V_BOOLREF( pVariant ) ? HB_TRUE : HB_FALSE ); break; case VT_I1: - hb_itemPutNI( pItem, ( signed char ) pVariant->n1.n2.n3.cVal ); + hb_itemPutNI( pItem, ( signed char ) V_I1( pVariant ) ); break; case VT_I1 | VT_BYREF: - hb_itemPutNI( pItem, ( signed char ) *pVariant->n1.n2.n3.pcVal ); + hb_itemPutNI( pItem, ( signed char ) * V_I1REF( pVariant ) ); break; case VT_I2: - hb_itemPutNI( pItem, ( short ) pVariant->n1.n2.n3.iVal ); + hb_itemPutNI( pItem, ( short ) V_I2( pVariant ) ); break; case VT_I2 | VT_BYREF: - hb_itemPutNI( pItem, ( short ) *pVariant->n1.n2.n3.piVal ); + hb_itemPutNI( pItem, ( short ) *V_I2REF( pVariant ) ); break; case VT_I4: - hb_itemPutNL( pItem, pVariant->n1.n2.n3.lVal ); + hb_itemPutNL( pItem, V_I4( pVariant ) ); break; case VT_I4 | VT_BYREF: - hb_itemPutNL( pItem, *pVariant->n1.n2.n3.plVal ); + hb_itemPutNL( pItem, *V_I4REF( pVariant ) ); break; case VT_I8: #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - hb_itemPutNInt( pItem, ( HB_MAXINT ) pVariant->n1.n2.n3.lVal ); + hb_itemPutNInt( pItem, ( HB_MAXINT ) V_I4( pVariant ) ); #elif defined( HB_OLE_NO_LL ) /* workaround for wrong OLE variant structure definition */ - hb_itemPutNInt( pItem, * ( ( HB_LONGLONG * ) &pVariant->n1.n2.n3.lVal ) ); + hb_itemPutNInt( pItem, * ( ( HB_LONGLONG * ) &V_I4( pVariant ) ) ); #else - hb_itemPutNInt( pItem, pVariant->n1.n2.n3.llVal ); + hb_itemPutNInt( pItem, V_I8( pVariant ) ); #endif break; case VT_I8 | VT_BYREF: #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - hb_itemPutNInt( pItem, ( HB_MAXINT ) *pVariant->n1.n2.n3.plVal ); + hb_itemPutNInt( pItem, ( HB_MAXINT ) *V_I4REF( pVariant ) ); #elif defined( HB_OLE_NO_LLREF ) /* workaround for wrong OLE variant structure definition */ - hb_itemPutNInt( pItem, * ( HB_LONGLONG * ) pVariant->n1.n2.n3.pdblVal ); + hb_itemPutNInt( pItem, * ( HB_LONGLONG * ) V_R8REF( pVariant ) ); #else - hb_itemPutNInt( pItem, *pVariant->n1.n2.n3.pllVal ); + hb_itemPutNInt( pItem, *V_I8REF( pVariant ) ); #endif break; case VT_UI1: - hb_itemPutNI( pItem, ( unsigned char ) pVariant->n1.n2.n3.bVal ); + hb_itemPutNI( pItem, ( unsigned char ) V_UI1( pVariant ) ); break; case VT_UI1 | VT_BYREF: - hb_itemPutNI( pItem, ( unsigned char ) *pVariant->n1.n2.n3.pbVal ); + hb_itemPutNI( pItem, ( unsigned char ) *V_UI1REF( pVariant ) ); break; case VT_UI2: - hb_itemPutNI( pItem, ( unsigned short ) pVariant->n1.n2.n3.uiVal ); + hb_itemPutNI( pItem, ( unsigned short ) V_UI2( pVariant ) ); break; case VT_UI2 | VT_BYREF: - hb_itemPutNI( pItem, ( unsigned short ) *pVariant->n1.n2.n3.puiVal ); + hb_itemPutNI( pItem, ( unsigned short ) *V_UI2REF( pVariant ) ); break; case VT_UI4: - hb_itemPutNInt( pItem, pVariant->n1.n2.n3.ulVal ); + hb_itemPutNInt( pItem, V_UI4( pVariant ) ); break; case VT_UI4 | VT_BYREF: - hb_itemPutNInt( pItem, *pVariant->n1.n2.n3.pulVal ); + hb_itemPutNInt( pItem, *V_UI4REF( pVariant ) ); break; case VT_UI8: /* TODO: sign is lost. Convertion to double will lose significant digits. */ #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - hb_itemPutNInt( pItem, ( HB_MAXINT ) pVariant->n1.n2.n3.ulVal ); + hb_itemPutNInt( pItem, ( HB_MAXINT ) V_UI4( pVariant ) ); #elif defined( HB_OLE_NO_LL ) /* workaround for wrong OLE variant structure definition */ - hb_itemPutNInt( pItem, * ( ( HB_LONGLONG * ) &pVariant->n1.n2.n3.ulVal ) ); + hb_itemPutNInt( pItem, * ( ( HB_LONGLONG * ) &V_UI4( pVariant ) ) ); #else - hb_itemPutNInt( pItem, ( HB_MAXINT ) pVariant->n1.n2.n3.ullVal ); + hb_itemPutNInt( pItem, ( HB_MAXINT ) V_UI8( pVariant ) ); #endif break; case VT_UI8 | VT_BYREF: /* TODO: sign is lost. Convertion to double will lose significant digits. */ #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - hb_itemPutNInt( pItem, ( HB_MAXINT ) *pVariant->n1.n2.n3.pulVal ); + hb_itemPutNInt( pItem, ( HB_MAXINT ) *V_UI4REF( pVariant ) ); #elif defined( HB_OLE_NO_LLREF ) /* workaround for wrong OLE variant structure definition */ - hb_itemPutNInt( pItem, * ( HB_LONGLONG * ) pVariant->n1.n2.n3.pdblVal ); + hb_itemPutNInt( pItem, * ( HB_LONGLONG * ) V_R8REF( pVariant ) ); #else - hb_itemPutNInt( pItem, ( HB_MAXINT ) *pVariant->n1.n2.n3.pullVal ); + hb_itemPutNInt( pItem, ( HB_MAXINT ) *V_UI8REF( pVariant ) ); #endif break; case VT_INT: - hb_itemPutNI( pItem, pVariant->n1.n2.n3.intVal ); + hb_itemPutNI( pItem, V_INT( pVariant ) ); break; case VT_INT | VT_BYREF: - hb_itemPutNI( pItem, *pVariant->n1.n2.n3.pintVal ); + hb_itemPutNI( pItem, *V_INTREF( pVariant ) ); break; case VT_UINT: - hb_itemPutNInt( pItem, pVariant->n1.n2.n3.uintVal ); + hb_itemPutNInt( pItem, V_UINT( pVariant ) ); break; case VT_UINT | VT_BYREF: - hb_itemPutNInt( pItem, *pVariant->n1.n2.n3.puintVal ); + hb_itemPutNInt( pItem, *V_UINTREF( pVariant ) ); break; case VT_ERROR: - hb_itemPutNInt( pItem, pVariant->n1.n2.n3.scode ); + hb_itemPutNInt( pItem, V_ERROR( pVariant ) ); break; case VT_ERROR | VT_BYREF: - hb_itemPutNInt( pItem, *pVariant->n1.n2.n3.pscode ); + hb_itemPutNInt( pItem, *V_ERRORREF( pVariant ) ); break; case VT_R4: - hb_itemPutND( pItem, ( double ) pVariant->n1.n2.n3.fltVal ); + hb_itemPutND( pItem, ( double ) V_R4( pVariant ) ); break; case VT_R4 | VT_BYREF: - hb_itemPutND( pItem, ( double ) *pVariant->n1.n2.n3.pfltVal ); + hb_itemPutND( pItem, ( double ) *V_R4REF( pVariant ) ); break; case VT_R8: - hb_itemPutND( pItem, pVariant->n1.n2.n3.dblVal ); + hb_itemPutND( pItem, V_R8( pVariant ) ); break; case VT_R8 | VT_BYREF: - hb_itemPutND( pItem, *pVariant->n1.n2.n3.pdblVal ); + hb_itemPutND( pItem, *V_R8REF( pVariant ) ); break; case VT_CY: case VT_CY | VT_BYREF: { double dblVal; - VarR8FromCy( pVariant->n1.n2.vt == VT_CY ? - pVariant->n1.n2.n3.cyVal : - *pVariant->n1.n2.n3.pcyVal, &dblVal ); + VarR8FromCy( V_VT( pVariant ) == VT_CY ? + V_CY( pVariant ) : + *V_CYREF( pVariant ), &dblVal ); hb_itemPutND( pItem, dblVal ); /* hb_itemPutNDLen( pItem, dblVal, 0, 4 ); */ break; @@ -833,9 +833,9 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) case VT_DECIMAL | VT_BYREF: { double dblVal; - VarR8FromDec( pVariant->n1.n2.vt == VT_DECIMAL ? - &pVariant->n1.decVal : - pVariant->n1.n2.n3.pdecVal, &dblVal ); + VarR8FromDec( V_VT( pVariant ) == VT_DECIMAL ? + &HB_WIN_U1( pVariant, decVal ) : + V_DECIMALREF( pVariant ), &dblVal ); hb_itemPutND( pItem, dblVal ); break; } @@ -844,9 +844,9 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) case VT_DATE | VT_BYREF: { long lJulian, lMilliSec; - double dblVal = pVariant->n1.n2.vt == VT_DATE ? - pVariant->n1.n2.n3.dblVal : - *pVariant->n1.n2.n3.pdblVal; + double dblVal = V_VT( pVariant ) == VT_DATE ? + V_R8( pVariant ) : + *V_R8REF( pVariant ); hb_timeStampUnpackDT( dblVal + HB_OLE_DATE_BASE, &lJulian, &lMilliSec ); if( lMilliSec ) @@ -860,7 +860,7 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) case VT_PTR: case VT_PTR | VT_BYREF: case VT_BYREF: - hb_itemPutPtr( pItem, pVariant->n1.n2.n3.byref ); + hb_itemPutPtr( pItem, V_BYREF( pVariant ) ); break; #endif @@ -872,11 +872,11 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) break; default: - if( pVariant->n1.n2.vt & VT_ARRAY ) + if( V_VT( pVariant ) & VT_ARRAY ) { - SAFEARRAY * pSafeArray = pVariant->n1.n2.vt & VT_BYREF ? - *pVariant->n1.n2.n3.pparray : - pVariant->n1.n2.n3.parray; + SAFEARRAY * pSafeArray = V_VT( pVariant ) & VT_BYREF ? + *V_ARRAYREF( pVariant ) : + V_ARRAY( pVariant ); if( pSafeArray ) { int iDim; @@ -886,7 +886,7 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) long * plIndex = ( long * ) hb_xgrab( iDim * sizeof( long ) ); hb_oleSafeArrayToItem( pItem, pSafeArray, iDim, plIndex, - ( pVariant->n1.n2.vt & ~( VT_ARRAY | VT_BYREF ) ) ); + ( V_VT( pVariant ) & ~( VT_ARRAY | VT_BYREF ) ) ); hb_xfree( plIndex ); } else @@ -903,7 +903,7 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem, HB_OLEOBJ_FUNC pObjFunc ) { - switch( pVariant->n1.n2.vt ) + switch( V_VT( pVariant ) ) { case VT_DISPATCH | VT_BYREF: { @@ -911,11 +911,11 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem, if( pDisp ) { - IDispatch* pdispVal = *pVariant->n1.n2.n3.ppdispVal; + IDispatch* pdispVal = *V_DISPATCHREF( pVariant ); if( pdispVal != pDisp ) { HB_VTBL( pDisp )->AddRef( HB_THIS( pDisp ) ); - *pVariant->n1.n2.n3.ppdispVal = pDisp; + *V_DISPATCHREF( pVariant ) = pDisp; if( pdispVal ) HB_VTBL( pdispVal )->Release( HB_THIS( pdispVal ) ); } @@ -926,8 +926,8 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem, VariantInit( &variant ); if( pObjFunc( &variant, pItem ) ) { - IDispatch* pdispVal = *pVariant->n1.n2.n3.ppdispVal; - *pVariant->n1.n2.n3.ppdispVal = variant.n1.n2.n3.pdispVal; + IDispatch* pdispVal = *V_DISPATCHREF( pVariant ); + *V_DISPATCHREF( pVariant ) = V_DISPATCH( &variant ); if( pdispVal ) HB_VTBL( pdispVal )->Release( HB_THIS( pdispVal ) ); } @@ -947,11 +947,11 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem, HB_ID_REF( IID_IEnumVARIANT ), ( void** ) ( void * ) &pUnk ) == S_OK ) { - IUnknown* punkVal = *pVariant->n1.n2.n3.ppunkVal; + IUnknown* punkVal = *V_UNKNOWNREF( pVariant ); if( punkVal != pUnk ) { HB_VTBL( pUnk )->AddRef( HB_THIS( pUnk ) ); - *pVariant->n1.n2.n3.ppunkVal = pUnk; + *V_UNKNOWNREF( pVariant ) = pUnk; if( punkVal ) HB_VTBL( punkVal )->Release( HB_THIS( punkVal ) ); } @@ -963,8 +963,8 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem, VariantInit( &variant ); if( pObjFunc( &variant, pItem ) ) { - IDispatch* pdispVal = *pVariant->n1.n2.n3.ppdispVal; - *pVariant->n1.n2.n3.ppdispVal = variant.n1.n2.n3.pdispVal; + IDispatch* pdispVal = *V_DISPATCHREF( pVariant ); + *V_DISPATCHREF( pVariant ) = V_DISPATCH( &variant ); if( pdispVal ) HB_VTBL( pdispVal )->Release( HB_THIS( pdispVal ) ); } @@ -973,100 +973,100 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem, } case VT_BSTR | VT_BYREF: - SysFreeString( *pVariant->n1.n2.n3.pbstrVal ); - *pVariant->n1.n2.n3.pbstrVal = hb_oleItemToString( pItem ); + SysFreeString( *V_BSTRREF( pVariant ) ); + *V_BSTRREF( pVariant ) = hb_oleItemToString( pItem ); break; case VT_BOOL | VT_BYREF: - *pVariant->n1.n2.n3.pboolVal = ( VARIANT_BOOL ) hb_itemGetL( pItem ); + *V_BOOLREF( pVariant ) = ( VARIANT_BOOL ) hb_itemGetL( pItem ); break; case VT_I1 | VT_BYREF: - *pVariant->n1.n2.n3.pcVal = ( signed char ) hb_itemGetNI( pItem ); + *V_I1REF( pVariant ) = ( signed char ) hb_itemGetNI( pItem ); break; case VT_I2 | VT_BYREF: - *pVariant->n1.n2.n3.piVal = ( short ) hb_itemGetNI( pItem ); + *V_I2REF( pVariant ) = ( short ) hb_itemGetNI( pItem ); break; case VT_I4 | VT_BYREF: - *pVariant->n1.n2.n3.plVal = hb_itemGetNL( pItem ); + *V_I4REF( pVariant ) = hb_itemGetNL( pItem ); break; case VT_I8 | VT_BYREF: #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - *pVariant->n1.n2.n3.plVal = ( long ) hb_itemGetNInt( pItem ); + *V_I4REF( pVariant ) = ( long ) hb_itemGetNInt( pItem ); #elif defined( HB_OLE_NO_LLREF ) /* workaround for wrong OLE variant structure definition */ - * ( HB_LONGLONG * ) pVariant->n1.n2.n3.pdblVal = ( HB_LONGLONG ) hb_itemGetNInt( pItem ); + * ( HB_LONGLONG * ) V_R8REF( pVariant ) = ( HB_LONGLONG ) hb_itemGetNInt( pItem ); #else - *pVariant->n1.n2.n3.pllVal = ( HB_LONGLONG ) hb_itemGetNInt( pItem ); + *V_I8REF( pVariant ) = ( HB_LONGLONG ) hb_itemGetNInt( pItem ); #endif break; case VT_UI1 | VT_BYREF: - *pVariant->n1.n2.n3.pbVal = ( unsigned char ) hb_itemGetNI( pItem ); + *V_UI1REF( pVariant ) = ( unsigned char ) hb_itemGetNI( pItem ); break; case VT_UI2 | VT_BYREF: - *pVariant->n1.n2.n3.puiVal = ( unsigned short ) hb_itemGetNI( pItem ); + *V_UI2REF( pVariant ) = ( unsigned short ) hb_itemGetNI( pItem ); break; case VT_UI4 | VT_BYREF: - *pVariant->n1.n2.n3.pulVal = ( unsigned long ) hb_itemGetNL( pItem ); + *V_UI4REF( pVariant ) = ( unsigned long ) hb_itemGetNL( pItem ); break; case VT_UI8 | VT_BYREF: #if HB_VMLONG_MAX == INT32_MAX || defined( HB_LONG_LONG_OFF ) - *pVariant->n1.n2.n3.pulVal = ( unsigned long ) hb_itemGetNInt( pItem ); + *V_UI4REF( pVariant ) = ( unsigned long ) hb_itemGetNInt( pItem ); #elif defined( HB_OLE_NO_LLREF ) /* workaround for wrong OLE variant structure definition */ - * ( HB_ULONGLONG * ) pVariant->n1.n2.n3.pdblVal = ( HB_ULONGLONG ) hb_itemGetNInt( pItem ); + * ( HB_ULONGLONG * ) V_R8REF( pVariant ) = ( HB_ULONGLONG ) hb_itemGetNInt( pItem ); #else - *pVariant->n1.n2.n3.pullVal = ( HB_ULONGLONG ) hb_itemGetNInt( pItem ); + *V_UI8REF( pVariant ) = ( HB_ULONGLONG ) hb_itemGetNInt( pItem ); #endif break; case VT_INT | VT_BYREF: - *pVariant->n1.n2.n3.pintVal = hb_itemGetNI( pItem ); + *V_INTREF( pVariant ) = hb_itemGetNI( pItem ); break; case VT_UINT | VT_BYREF: - *pVariant->n1.n2.n3.puintVal = ( unsigned int ) hb_itemGetNI( pItem ); + *V_UINTREF( pVariant ) = ( unsigned int ) hb_itemGetNI( pItem ); break; case VT_ERROR | VT_BYREF: - *pVariant->n1.n2.n3.pscode = ( SCODE ) hb_itemGetNL( pItem ); + *V_ERRORREF( pVariant ) = ( SCODE ) hb_itemGetNL( pItem ); break; case VT_R4 | VT_BYREF: - *pVariant->n1.n2.n3.pfltVal = ( float ) hb_itemGetND( pItem ); + *V_R4REF( pVariant ) = ( float ) hb_itemGetND( pItem ); break; case VT_R8 | VT_BYREF: - *pVariant->n1.n2.n3.pdblVal = hb_itemGetND( pItem ); + *V_R8REF( pVariant ) = hb_itemGetND( pItem ); break; case VT_CY | VT_BYREF: - VarCyFromR8( hb_itemGetND( pItem ), pVariant->n1.n2.n3.pcyVal ); + VarCyFromR8( hb_itemGetND( pItem ), V_CYREF( pVariant ) ); break; case VT_DECIMAL | VT_BYREF: - VarDecFromR8( hb_itemGetND( pItem ), pVariant->n1.n2.n3.pdecVal ); + VarDecFromR8( hb_itemGetND( pItem ), V_DECIMALREF( pVariant ) ); break; case VT_DATE | VT_BYREF: - *pVariant->n1.n2.n3.pdblVal = hb_itemGetTD( pItem ) - HB_OLE_DATE_BASE; + *V_R8REF( pVariant ) = hb_itemGetTD( pItem ) - HB_OLE_DATE_BASE; break; #ifdef HB_OLE_PASS_POINTERS case VT_PTR | VT_BYREF: - pVariant->n1.n2.n3.byref = hb_itemGetPtr( pItem ); + V_BYREF( pVariant ) = hb_itemGetPtr( pItem ); break; #endif case VT_BYREF | VT_VARIANT: - hb_oleItemToVariantRef( pVariant->n1.n2.n3.pvarVal, pItem, NULL, pObjFunc ); + hb_oleItemToVariantRef( V_VARIANTREF( pVariant ), pItem, NULL, pObjFunc ); break; case VT_VARIANT | VT_ARRAY | VT_BYREF: @@ -1105,7 +1105,7 @@ HB_BOOL hb_oleDispInvoke( PHB_SYMB pSym, PHB_ITEM pObject, PHB_ITEM pParam, for( i = iRefs = 0; i < iCount && iRefs < ( int ) HB_SIZEOFARRAY( refArray ); i++ ) { - if( pParams->rgvarg[ i ].n1.n2.vt & VT_BYREF ) + if( V_VT( &pParams->rgvarg[ i ] ) & VT_BYREF ) refArray[ iRefs++ ].item = hb_stackAllocItem(); } @@ -1126,7 +1126,7 @@ HB_BOOL hb_oleDispInvoke( PHB_SYMB pSym, PHB_ITEM pObject, PHB_ITEM pParam, for( i = 1, ii = 0; i <= iCount; i++ ) { - if( ( pParams->rgvarg[ iCount - i ].n1.n2.vt & VT_BYREF ) && + if( ( V_VT( &pParams->rgvarg[ iCount - i ] ) & VT_BYREF ) && ( ii < iRefs ) ) { refArray[ ii ].variant = &pParams->rgvarg[ iCount - i ]; @@ -1369,13 +1369,13 @@ HB_FUNC( __OLEENUMCREATE ) /* ( __hObj ) */ if( lOleError == S_OK ) { - if( variant.n1.n2.vt == VT_UNKNOWN ) - lOleError = HB_VTBL( variant.n1.n2.n3.punkVal )->QueryInterface( - HB_THIS_( variant.n1.n2.n3.punkVal ) + if( V_VT( &variant ) == VT_UNKNOWN ) + lOleError = HB_VTBL( V_UNKNOWN( &variant ) )->QueryInterface( + HB_THIS_( HB_WIN_U3( &variant, punkVal ) ) HB_ID_REF( IID_IEnumVARIANT ), ( void** ) ( void * ) &pEnum ); - else if( variant.n1.n2.vt == VT_DISPATCH ) - lOleError = HB_VTBL( variant.n1.n2.n3.pdispVal )->QueryInterface( - HB_THIS_( variant.n1.n2.n3.pdispVal ) + else if( V_VT( &variant ) == VT_DISPATCH ) + lOleError = HB_VTBL( HB_WIN_U3( &variant, pdispVal ) )->QueryInterface( + HB_THIS_( HB_WIN_U3( &variant, pdispVal ) ) HB_ID_REF( IID_IEnumVARIANT ), ( void** ) ( void * ) &pEnum ); else { diff --git a/harbour/contrib/hbwin/win_shell.c b/harbour/contrib/hbwin/win_shell.c index 3b529c443d..1543ace59b 100644 --- a/harbour/contrib/hbwin/win_shell.c +++ b/harbour/contrib/hbwin/win_shell.c @@ -54,16 +54,33 @@ #undef _WIN32_IE #define _WIN32_IE 0x0500 /* request Windows 2000 features for NOTIFYICONDATA */ -/* This code uses named union so this declaration is necessary for - * compilers where nameless unions are default - */ -#if !defined( NONAMELESSUNION ) - #define NONAMELESSUNION -#endif - #include "hbwapi.h" #include "hbapiitm.h" +#if defined( __BORLANDC__ ) +# if !defined( NONAMELESSUNION ) +# define NONAMELESSUNION +# endif +# if defined( DUMMYUNIONNAME ) +# undef DUMMYUNIONNAME +# endif +# if defined( DUMMYUNIONNAME2 ) +# undef DUMMYUNIONNAME2 +# endif +# if defined( DUMMYUNIONNAME3 ) +# undef DUMMYUNIONNAME3 +# endif +# if defined( DUMMYUNIONNAME4 ) +# undef DUMMYUNIONNAME4 +# endif +# if defined( DUMMYUNIONNAME5 ) +# undef DUMMYUNIONNAME5 +# endif +# define HB_WIN_V_UNION( x, y, z ) ((x).y.z) +#else +# define HB_WIN_V_UNION( x, y, z ) ((x).z) +#endif + #include /* WIN_ShellNotifyIcon( [], [], [], [], @@ -92,7 +109,7 @@ HB_FUNC( WIN_SHELLNOTIFYICON ) { if( HB_ITEMCOPYSTR( hb_param( 7, HB_IT_ANY ), tnid.szInfo, HB_SIZEOFARRAY( tnid.szInfo ) ) > 0 ) tnid.uFlags |= NIF_INFO; - tnid.u.uTimeout = ( UINT ) hb_parni( 8 ); + HB_WIN_V_UNION( tnid, u, uTimeout ) = ( UINT ) hb_parni( 8 ); if( HB_ITEMCOPYSTR( hb_param( 9, HB_IT_ANY ), tnid.szInfoTitle, HB_SIZEOFARRAY( tnid.szInfoTitle ) ) > 0 ) tnid.uFlags |= NIF_INFO; tnid.dwInfoFlags = ( DWORD ) hb_parnl( 10 ); diff --git a/harbour/src/rtl/hbdoc.prg b/harbour/src/rtl/hbdoc.prg index 139e2f5d49..c4cfca47f4 100644 --- a/harbour/src/rtl/hbdoc.prg +++ b/harbour/src/rtl/hbdoc.prg @@ -61,7 +61,9 @@ FUNCTION __hbdoc_FromSource( cFile, aErrMsg ) LOCAL aEntry := {} - __hbdoc__read_stream( aEntry, cFile, "(stream)",, aErrMsg ) + IF ISCHARACTER( cFile ) + __hbdoc__read_stream( aEntry, cFile, "(stream)",, aErrMsg ) + ENDIF RETURN aEntry diff --git a/harbour/tests/stripdoc.hbs b/harbour/tests/stripdoc.hbs index 992f21032b..cda172b838 100644 --- a/harbour/tests/stripdoc.hbs +++ b/harbour/tests/stripdoc.hbs @@ -15,7 +15,7 @@ PROCEDURE Main() LOCAL aFile - FOR EACH aFile IN Directory( "*.*" ) + FOR EACH aFile IN Directory( hb_osFileMask() ) IF Right( aFile[ F_NAME ], 2 ) == ".c" .OR. ; Right( aFile[ F_NAME ], 4 ) == ".prg" @@ -28,7 +28,6 @@ PROCEDURE Main() FUNCTION __hbdoc_filter_out( cFile ) LOCAL lEntry := .F. LOCAL cLine - LOCAL nLine LOCAL cOK := "" LOCAL nToSkip := 0 LOCAL nEmpty := 0 @@ -36,11 +35,8 @@ FUNCTION __hbdoc_filter_out( cFile ) cFile := StrTran( cFile, Chr( 13 ) ) cFile := StrTran( cFile, Chr( 9 ), " " ) - nLine := 0 FOR EACH cLine IN hb_ATokens( cFile, Chr( 10 ) ) - ++nLine - SWITCH AllTrim( SubStr( cLine, 4 ) ) CASE "$DOC$" lEntry := .T.