From fd4bd6208f84d06d813b9578239724d5cdc82d50 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Fri, 27 Nov 2009 17:40:49 +0000 Subject: [PATCH] 2009-11-27 18:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/src/rtl/cdpapi.c * harbour/include/hbextern.ch + added new .prg function: HB_UTF8ASC( ) -> * harbour/contrib/hbwin/olecore.c % removed redundant call to SafeArrayGetDim() --- harbour/ChangeLog | 9 +++++++++ harbour/contrib/hbwin/olecore.c | 14 +++++++++++--- harbour/include/hbextern.ch | 1 + harbour/src/rtl/cdpapi.c | 24 ++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index f383aa0504..0ef6695853 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,15 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-11-27 18:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/src/rtl/cdpapi.c + * harbour/include/hbextern.ch + + added new .prg function: + HB_UTF8ASC( ) -> + + * harbour/contrib/hbwin/olecore.c + % removed redundant call to SafeArrayGetDim() + 2009-11-27 16:05 UTC+0100 Maurilio Longo (maurilio.longo@libero.it) src/vm/fm.c - commented out section for OS/2 critical section usage diff --git a/harbour/contrib/hbwin/olecore.c b/harbour/contrib/hbwin/olecore.c index b50187572c..d25c8808fa 100644 --- a/harbour/contrib/hbwin/olecore.c +++ b/harbour/contrib/hbwin/olecore.c @@ -773,6 +773,8 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) #ifdef HB_OLE_PASS_POINTERS case VT_PTR: + case VT_PTR | VT_BYREF: + case VT_BYREF: hb_itemPutPtr( pItem, pVariant->n1.n2.n3.byref ); break; #endif @@ -788,15 +790,15 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) int iDim; if( ( iDim = ( int ) SafeArrayGetDim( pSafeArray ) ) >= 1 ) - { - long * plIndex = ( long * ) hb_xgrab( SafeArrayGetDim( pSafeArray ) * sizeof( long ) ); + { + long * plIndex = ( long * ) hb_xgrab( iDim * sizeof( long ) ); hb_oleSafeArrayToItem( pItem, pSafeArray, iDim, plIndex ); hb_xfree( plIndex ); } else hb_arrayNew( pItem, 0 ); - break; + break; } /* Fall through */ } @@ -908,6 +910,12 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem ) *pVariant->n1.n2.n3.pdblVal = 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 ); + break; +#endif + case VT_BYREF | VT_VARIANT: hb_oleItemToVariantRef( pVariant->n1.n2.n3.pvarVal, pItem, NULL ); break; diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index f627f6b15a..de950df6ec 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -854,6 +854,7 @@ EXTERNAL HB_UTF8STUFF EXTERNAL HB_UTF8SUBSTR EXTERNAL HB_UTF8STRTRAN EXTERNAL HB_UTF8CHR +EXTERNAL HB_UTF8ASC #endif EXTERNAL HB_ASCIIUPPER EXTERNAL HB_ASCIILOWER diff --git a/harbour/src/rtl/cdpapi.c b/harbour/src/rtl/cdpapi.c index 18cb8363ff..f01fe7eeca 100644 --- a/harbour/src/rtl/cdpapi.c +++ b/harbour/src/rtl/cdpapi.c @@ -2240,6 +2240,30 @@ HB_FUNC( HB_UTF8CHR ) hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } +HB_FUNC( HB_UTF8ASC ) +{ + const char *pszString = hb_parc( 1 ); + + if( pszString ) + { + ULONG ulLen = hb_parclen( 1 ); + HB_WCHAR wc = 0; + int n = 0; + + while( ulLen-- ) + { + if( utf8tou16nextchar( ( unsigned char ) *pszString++, &n, &wc ) ) + { + if( n == 0 ) + break; + } + } + hb_retnint( wc ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + HB_FUNC( HB_STRTOUTF8 ) { ULONG ulLen = hb_parclen( 1 ), ulDest = 0;