diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 455bf037b7..aaf1319d45 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,27 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-05-26 12:13 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * include/hbapi.h + * source/vm/extend.c + + Added hb_retc_null() which is equivalent to + hb_retc( NULL ) and will return an empty string. + I opted for this because hb_retc( NULL ) usage is not + compatible with CA-Cl*pper _retc(), so it might create + problems when writing C code intended for both Clipper + and Harbour. + + * contrib/hbclipsm/stack.c + * contrib/hbclipsm/environ.c + * contrib/hbclipsm/status.c + * contrib/hbclipsm/gauge.c + % Optimizations. + ; TOFIX: GAUGE*() still leaks and doesn't seem to function. + + * contrib/rddads/adsmgmnt.c + % Optimizations (using hb_arraySet*()). + ! Fixed typo in ADSMGGETOPENTABLES2(). + 2008-05-26 11:26 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * contrib/hbmsql/make_b32.bat * contrib/hbmsql/make_vc.bat diff --git a/harbour/contrib/hbclipsm/environ.c b/harbour/contrib/hbclipsm/environ.c index 35a2443153..04165418ac 100644 --- a/harbour/contrib/hbclipsm/environ.c +++ b/harbour/contrib/hbclipsm/environ.c @@ -66,7 +66,7 @@ HB_FUNC( FILEPATH ) hb_xfree( pFileName ); } else - hb_retc( "" ); + hb_retc( NULL ); } /* FileBase( ) --> cFileBase @@ -80,7 +80,7 @@ HB_FUNC( FILEBASE ) hb_xfree( pFileName ); } else - hb_retc( "" ); + hb_retc( NULL ); } /* FileExt( ) --> cFileExt @@ -93,11 +93,11 @@ HB_FUNC( FILEEXT ) if( pFileName->szExtension != NULL ) hb_retc( ( pFileName->szExtension ) + 1 ); /* Skip the dot */ else - hb_retc( "" ); + hb_retc( NULL ); hb_xfree( pFileName ); } else - hb_retc( "" ); + hb_retc( NULL ); } /* FileDrive( ) --> cFileDrive @@ -111,5 +111,5 @@ HB_FUNC( FILEDRIVE ) hb_xfree( pFileName ); } else - hb_retc( "" ); + hb_retc( NULL ); } diff --git a/harbour/contrib/hbclipsm/gauge.c b/harbour/contrib/hbclipsm/gauge.c index e14c31db5b..61bb5d4e25 100644 --- a/harbour/contrib/hbclipsm/gauge.c +++ b/harbour/contrib/hbclipsm/gauge.c @@ -78,54 +78,27 @@ static void hb_gaugeUpdate( PHB_ITEM pArray, float fPercent ); HB_FUNC( GAUGENEW ) { PHB_ITEM pReturn = hb_itemArrayNew( B_LEN ); /* Create array */ - PHB_ITEM pItem; - pItem = hb_itemPutNL( NULL, ( ISNUM( B_TOP ) ? hb_parni( B_TOP ) : 0 ) ); - hb_itemArrayPut( pReturn, B_TOP, pItem ); - hb_itemRelease( pItem ); + hb_arraySetNL( pReturn, B_TOP, hb_parni( B_TOP ) ); + hb_arraySetNL( pReturn, B_LEFT, hb_parni( B_LEFT ) ); + hb_arraySetNL( pReturn, B_BOTTOM, + ISNUM( B_BOTTOM ) ? + ( hb_parni( B_BOTTOM ) < hb_parni( B_TOP ) + 2 ? + hb_parni( B_TOP ) + 2 : hb_parni( B_BOTTOM ) ) : 0 ); + hb_arraySetNL( pReturn, B_RIGHT, + ISNUM( B_RIGHT ) ? + ( hb_parni( B_RIGHT ) < hb_parni( B_LEFT ) + 4 ? + hb_parni( B_LEFT ) + 4 : hb_parni( B_RIGHT ) ) : 0 ); + hb_arraySetC( pReturn, B_BACKCOLOR, ISCHAR( B_BACKCOLOR ) ? hb_parc( B_BACKCOLOR ) : "W/N" ); + hb_arraySetC( pReturn, B_BARCOLOR, ISCHAR( B_BARCOLOR ) ? hb_parc( B_BARCOLOR ) : "W+/N" ); + hb_arraySetL( pReturn, B_DISPLAYNUM, + !( ISNUM( B_RIGHT ) && + ISNUM( B_LEFT ) && + ( hb_parni( B_RIGHT ) < hb_parni( B_LEFT ) + 9 ) ) ); + hb_arraySetC( pReturn, B_BARCHAR, ISCHAR( B_BARCHAR ) ? hb_parc( B_BARCHAR ) : ( char * ) '\xdb' ); + hb_arraySetNL( pReturn, B_PERCENT, 0 ); - pItem = hb_itemPutNL( NULL, ( ISNUM( B_LEFT ) ? hb_parni( B_LEFT ) : 0 ) ); - hb_itemArrayPut( pReturn, B_LEFT, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutNL( NULL, - ( ISNUM( B_BOTTOM ) ? - ( hb_parni( B_BOTTOM ) < hb_parni( B_TOP ) + 2 ? - hb_parni( B_TOP ) + 2 : hb_parni( B_BOTTOM ) ) : 0 ) ); - hb_itemArrayPut( pReturn, B_BOTTOM, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutNL( NULL, - ( ISNUM( B_RIGHT ) ? - ( hb_parni( B_RIGHT ) < hb_parni( B_LEFT ) + 4 ? - hb_parni( B_LEFT ) + 4 : hb_parni( B_RIGHT ) ) : 0 ) ); - hb_itemArrayPut( pReturn, B_RIGHT, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutC( NULL, ( ISCHAR( B_BACKCOLOR ) ? hb_parc( B_BACKCOLOR ) : "W/N" ) ); - hb_itemArrayPut( pReturn, B_BACKCOLOR, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutC( NULL, ( ISCHAR( B_BARCOLOR ) ? hb_parc( B_BARCOLOR ) : "W+/N" ) ); - hb_itemArrayPut( pReturn, B_BARCOLOR, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutL( NULL, !( ISNUM( B_RIGHT ) && - ISNUM( B_LEFT ) && - ( hb_parni( B_RIGHT ) < hb_parni( B_LEFT ) + 9 ) ) ); - hb_itemArrayPut( pReturn, B_DISPLAYNUM, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutC( NULL, ( ISCHAR( B_BARCHAR ) ? hb_parc( B_BARCHAR ) : ( char * ) '\xdb') ); - hb_itemArrayPut( pReturn, B_BARCHAR, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutNL( NULL, 0 ); - hb_itemArrayPut( pReturn, B_PERCENT, pItem ); - hb_itemRelease( pItem ); - - hb_itemReturn( pReturn ); - hb_itemRelease( pReturn ); + hb_itemReturnRelease( pReturn ); } /* GaugeDisplay( aGauge ) --> aGauge diff --git a/harbour/contrib/hbclipsm/stack.c b/harbour/contrib/hbclipsm/stack.c index dc2c70794a..a4028b8146 100644 --- a/harbour/contrib/hbclipsm/stack.c +++ b/harbour/contrib/hbclipsm/stack.c @@ -57,20 +57,15 @@ */ HB_FUNC( STACKNEW ) { - PHB_ITEM pReturn = hb_itemArrayNew( 0 ); /* Create array */ - - hb_itemReturn( pReturn ); - hb_itemRelease( pReturn ); + hb_itemReturnRelease( hb_itemArrayNew( 0 ) ); /* Create array */ } /* StackPush( , ) --> */ HB_FUNC( STACKPUSH ) { - PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY ); - PHB_ITEM pAny = hb_param( 2, HB_IT_ANY ); - - hb_arrayAdd( pArray, pAny ); + hb_arrayAdd( hb_param( 1, HB_IT_ARRAY ), + hb_param( 2, HB_IT_ANY ) ); } /* StackPop( ) --> @@ -90,17 +85,14 @@ HB_FUNC( STACKPOP ) hb_arraySize( pArray, HB_MAX( ulLen, 0 ) ); } - hb_itemReturn( pLast ); - hb_itemRelease( pLast ); + hb_itemReturnRelease( pLast ); } /* StackIsEmpty( ) --> */ HB_FUNC( STACKISEMPTY ) { - PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY ); - - hb_retl( hb_arrayLen( pArray ) == 0 ); + hb_retl( hb_arrayLen( hb_param( 1, HB_IT_ARRAY ) ) == 0 ); } /* StackTop( ) --> @@ -108,11 +100,9 @@ HB_FUNC( STACKISEMPTY ) */ HB_FUNC( STACKTOP ) { - PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY ); PHB_ITEM pLast = hb_itemNew( NULL ); - hb_arrayLast( pArray, pLast ); + hb_arrayLast( hb_param( 1, HB_IT_ARRAY ), pLast ); - hb_itemReturn( pLast ); - hb_itemRelease( pLast ); + hb_itemReturnRelease( pLast ); } diff --git a/harbour/contrib/hbclipsm/status.c b/harbour/contrib/hbclipsm/status.c index 70d9575c4d..fc92b23c3c 100644 --- a/harbour/contrib/hbclipsm/status.c +++ b/harbour/contrib/hbclipsm/status.c @@ -68,26 +68,13 @@ HB_FUNC( STATUSNEW ) { PHB_ITEM pReturn = hb_itemArrayNew( ST_LEN ); /* Create array */ - PHB_ITEM pItem; - pItem = hb_itemPutNL( NULL, ( ISNUM( ST_ROW ) ? hb_parni( ST_ROW ) : 0 ) ); - hb_itemArrayPut( pReturn, ST_ROW, pItem ); - hb_itemRelease( pItem ); + hb_arraySetNL( pReturn, ST_ROW, hb_parni( ST_ROW ) ); + hb_arraySetNL( pReturn, ST_COL, hb_parni( ST_COL ) ); + hb_arraySetC( pReturn, ST_COLOR, ISCHAR( ST_COLOR ) ? hb_parc( ST_COLOR ) : "W+/N" ); + hb_arraySetNL( pReturn, ST_CURRENT, 1 ); - pItem = hb_itemPutNL( NULL, ( ISNUM( ST_COL ) ? hb_parni( ST_COL ) : 0 ) ); - hb_itemArrayPut( pReturn, ST_COL, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutC( NULL, ( ISCHAR( ST_COLOR ) ? hb_parc( ST_COLOR ) : "W+/N" ) ); - hb_itemArrayPut( pReturn, ST_COLOR, pItem ); - hb_itemRelease( pItem ); - - pItem = hb_itemPutNL( NULL, 1 ); - hb_itemArrayPut( pReturn, ST_CURRENT, pItem ); - hb_itemRelease( pItem ); - - hb_itemReturn( pReturn ); - hb_itemRelease( pReturn ); + hb_itemReturnRelease( pReturn ); } /* StatusUpdate( ) --> nil diff --git a/harbour/contrib/rddads/adsmgmnt.c b/harbour/contrib/rddads/adsmgmnt.c index a12afbe3a7..cfb5db17b8 100644 --- a/harbour/contrib/rddads/adsmgmnt.c +++ b/harbour/contrib/rddads/adsmgmnt.c @@ -387,30 +387,24 @@ HB_FUNC( ADSMGGETUSERNAMES ) PHB_ITEM pArrayItm = hb_arrayGetItemPtr( pArray, ulCount ); hb_arrayNew( pArrayItm, 6 ); - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 1 ), - ( char * ) pastUserInfo[ ulCount ].aucUserName ); - hb_itemPutNL( hb_arrayGetItemPtr( pArrayItm, 2 ), - pastUserInfo[ ulCount ].usConnNumber ); + hb_arraySetC( pArrayItm, 1, ( char * ) pastUserInfo[ ulCount ].aucUserName ); + hb_arraySetNL( pArrayItm, 2, pastUserInfo[ ulCount ].usConnNumber ); #if ADS_LIB_VERSION >= 600 - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 3 ), - ( char * ) pastUserInfo[ ulCount ].aucAddress ); + hb_arraySetC( pArrayItm, 3, ( char * ) pastUserInfo[ ulCount ].aucAddress ); #else - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 3 ), NULL ); + hb_arraySetC( pArrayItm, 3, NULL ); #endif #if ADS_LIB_VERSION >= 800 - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 4 ), - ( char * ) pastUserInfo[ ulCount ].aucAuthUserName ); - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 5 ), - ( char * ) pastUserInfo[ ulCount ].aucOSUserLoginName ); + hb_arraySetC( pArrayItm, 4, ( char * ) pastUserInfo[ ulCount ].aucAuthUserName ); + hb_arraySetC( pArrayItm, 5, ( char * ) pastUserInfo[ ulCount ].aucOSUserLoginName ); #else - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 4 ), NULL ); - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 5 ), NULL ); + hb_arraySetC( pArrayItm, 4, NULL ); + hb_arraySetC( pArrayItm, 5, NULL ); #endif #if ADS_LIB_VERSION >= 810 - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 6 ), - ( char * ) pastUserInfo[ ulCount ].aucTSAddress ); + hb_arraySetC( pArrayItm, 6, ( char * ) pastUserInfo[ ulCount ].aucTSAddress ); #else - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 6 ), NULL ); + hb_arraySetC( pArrayItm, 6, NULL ); #endif } hb_itemReturnRelease( pArray ); @@ -496,7 +490,7 @@ HB_FUNC( ADSMGGETOPENTABLES ) /* nMaxNumberOfFilesToReturn, cUserName, nConnecti UNSIGNED16 ulCount; for( ulCount = 1; ulCount <= usArrayLen; ulCount++ ) - hb_itemPutC( hb_arrayGetItemPtr( pArray, ( ULONG ) ulCount ), ( char * ) astOpenTableInfo[ ulCount - 1 ].aucTableName ); + hb_arraySetC( pArray, ( ULONG ) ulCount, ( char * ) astOpenTableInfo[ ulCount - 1 ].aucTableName ); hb_itemReturnRelease( pArray ); } @@ -534,10 +528,8 @@ HB_FUNC( ADSMGGETOPENTABLES2 ) /* nMaxNumberOfFilesToReturn, cUserName, nConnect PHB_ITEM pArrayItm = hb_arrayGetItemPtr( pArray, ulCount ); hb_arrayNew( pArrayItm, 2 ); - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 3 ), - ( char * ) astOpenTableInfo[ ulCount - 1 ].aucTableName ); - hb_itemPutNI( hb_arrayGetItemPtr( pArrayItm, 2 ), - astOpenTableInfo[ ulCount - 1 ].usLockType ); /* Advantage locking mode */ + hb_arraySetC( pArrayItm, 1, ( char * ) astOpenTableInfo[ ulCount - 1 ].aucTableName ); + hb_arraySetNI( pArrayItm, 2, astOpenTableInfo[ ulCount - 1 ].usLockType ); /* Advantage locking mode */ } hb_itemReturnRelease( pArray ); @@ -573,7 +565,7 @@ HB_FUNC( ADSMGGETOPENINDEXES ) /* nMaxNumberOfFilesToReturn, cTableName, cUserNa UNSIGNED16 ulCount; for( ulCount = 1; ulCount <= usArrayLen; ulCount++ ) - hb_itemPutC( hb_arrayGetItemPtr( pArray, ( ULONG ) ulCount ), ( char * ) astOpenIndexInfo[ ulCount - 1 ].aucIndexName ); + hb_arraySetC( pArray, ( ULONG ) ulCount, ( char * ) astOpenIndexInfo[ ulCount - 1 ].aucIndexName ); hb_itemReturnRelease( pArray ); } @@ -608,7 +600,7 @@ HB_FUNC( ADSMGGETLOCKS ) UNSIGNED16 ulCount; for( ulCount = 1; ulCount <= usArrayLen; ulCount++ ) - hb_itemPutNL( hb_arrayGetItemPtr( pArray, ( ULONG ) ulCount ), astRecordInfo[ ulCount - 1 ].ulRecordNumber ); + hb_arraySetNL( pArray, ( ULONG ) ulCount, astRecordInfo[ ulCount - 1 ].ulRecordNumber ); hb_itemReturnRelease( pArray ); } @@ -644,21 +636,15 @@ HB_FUNC( ADSMGGETWORKERTHREADACTIVITY ) PHB_ITEM pArrayItm = hb_arrayGetItemPtr( pArray, ulCount ); hb_arrayNew( pArrayItm, 6 ); - hb_itemPutNL( hb_arrayGetItemPtr( pArrayItm, 1 ), - astWorkerThreadActivity[ ulCount ].ulThreadNumber ); - hb_itemPutNI( hb_arrayGetItemPtr( pArrayItm, 2 ), - astWorkerThreadActivity[ ulCount ].usOpCode ); - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 3 ), - ( char * ) astWorkerThreadActivity[ ulCount ].aucUserName ); - hb_itemPutNI( hb_arrayGetItemPtr( pArrayItm, 4 ), - astWorkerThreadActivity[ ulCount ].usConnNumber ); - hb_itemPutNI( hb_arrayGetItemPtr( pArrayItm, 5 ), - astWorkerThreadActivity[ ulCount ].usReserved1 ); + hb_arraySetNL( pArrayItm, 1, astWorkerThreadActivity[ ulCount ].ulThreadNumber ); + hb_arraySetNI( pArrayItm, 2, astWorkerThreadActivity[ ulCount ].usOpCode ); + hb_arraySetC( pArrayItm, 3, ( char * ) astWorkerThreadActivity[ ulCount ].aucUserName ); + hb_arraySetNI( pArrayItm, 4, astWorkerThreadActivity[ ulCount ].usConnNumber ); + hb_arraySetNI( pArrayItm, 5, astWorkerThreadActivity[ ulCount ].usReserved1 ); #if ADS_LIB_VERSION >= 800 - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 6 ), - ( char * ) astWorkerThreadActivity[ ulCount ].aucOSUserLoginName ); + hb_arraySetC( pArrayItm, 6, ( char * ) astWorkerThreadActivity[ ulCount ].aucOSUserLoginName ); #else - hb_itemPutC( hb_arrayGetItemPtr( pArrayItm, 6 ), NULL ); + hb_arraySetC( pArrayItm, 6, NULL ); #endif } hb_itemReturnRelease( pArray ); diff --git a/harbour/include/hbapi.h b/harbour/include/hbapi.h index 4ba652be02..fb879e128c 100644 --- a/harbour/include/hbapi.h +++ b/harbour/include/hbapi.h @@ -603,6 +603,7 @@ extern HB_EXPORT LONGLONG hb_parnll( int iParam, ... ); /* retrieve a numeric extern HB_EXPORT int hb_pcount( void ); /* returns the number of suplied parameters */ extern HB_EXPORT void hb_ret( void ); /* post a NIL return value */ extern HB_EXPORT void hb_retc( const char * szText ); /* returns a string */ +extern HB_EXPORT void hb_retc_null( void ); /* returns an empty string */ extern HB_EXPORT void hb_retc_buffer( char * szText ); /* sames as above, but accepts an allocated buffer */ extern HB_EXPORT void hb_retc_const( const char * szText ); /* returns a string as a pcode based string */ extern HB_EXPORT void hb_retclen( const char * szText, ULONG ulLen ); /* returns a string with a specific length */ @@ -644,6 +645,7 @@ extern HB_EXPORT void hb_retnlllen( LONGLONG lNumber, int iWidth ); /* returns #define hb_ret() hb_itemClear( hb_stackReturnItem() ) #define hb_reta( ulLen ) hb_arrayNew( hb_stackReturnItem(), ulLen ) #define hb_retc( szText ) hb_itemPutC( hb_stackReturnItem(), szText ) +#define hb_retc_null() hb_itemPutC( hb_stackReturnItem(), NULL ) #define hb_retc_buffer( szText ) hb_itemPutCPtr( hb_stackReturnItem(), szText, strlen( szText ) ) #define hb_retc_const( szText ) hb_itemPutCConst( hb_stackReturnItem(), szText ) #define hb_retclen( szText, ulLen ) hb_itemPutCL( hb_stackReturnItem(), szText, ulLen ) diff --git a/harbour/source/vm/extend.c b/harbour/source/vm/extend.c index 5b83941b60..b4d4c641e0 100644 --- a/harbour/source/vm/extend.c +++ b/harbour/source/vm/extend.c @@ -734,6 +734,14 @@ HB_EXPORT void hb_retc( const char * szText ) hb_itemPutC( hb_stackReturnItem(), szText ); } +#undef hb_retc_null +HB_EXPORT void hb_retc_null( void ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_retc_null()")); + + hb_itemPutC( hb_stackReturnItem(), NULL ); +} + #undef hb_retc_buffer HB_EXPORT void hb_retc_buffer( char * szText ) {