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.