diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 72394f69bb..4aa32bc597 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,20 @@ The license applies to all entries newer than 2009-04-28. */ +2011-01-12 01:23 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * contrib/hbsqlit3/hbsqlit3.c + + Enabled function pointers. It's even easier I thought since + the block calling method also supports function pointers + automatically. + + * contrib/hbxdiff/hbxdiff.c + % Deleted separate (original) function symbol support, and + enabled it on the codeblock branch. Now it supports both + without redundant code. + + * contrib/hbxdiff/tests/test3.prg + + Added back function pointer example. + 2011-01-12 01:13 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbmxml/hbmxml.c + First round to switch to supporting codeblocks and storing diff --git a/harbour/contrib/hbsqlit3/hbsqlit3.c b/harbour/contrib/hbsqlit3/hbsqlit3.c index 4687a3047b..40b98d1e26 100644 --- a/harbour/contrib/hbsqlit3/hbsqlit3.c +++ b/harbour/contrib/hbsqlit3/hbsqlit3.c @@ -788,10 +788,10 @@ HB_FUNC( SQLITE3_EXEC ) char * pszErrMsg = NULL; int rc; - if( HB_ISBLOCK( 3 ) ) + if( HB_ISBLOCK( 3 ) || HB_ISSYMBOL( 3 ) ) { rc = sqlite3_exec( pHbSqlite3->db, hb_parstr_utf8( 2, &hSQLText, - NULL ), callback, ( void * ) hb_param( 3, HB_IT_BLOCK ), + NULL ), callback, ( void * ) hb_param( 3, HB_IT_BLOCK | HB_IT_SYMBOL ), &pszErrMsg ); } else @@ -1872,9 +1872,9 @@ HB_FUNC( SQLITE3_BUSY_HANDLER ) pHbSqlite3->cbBusyHandler = NULL; } - if( HB_ISBLOCK( 2 ) ) + if( HB_ISBLOCK( 2 ) || HB_ISSYMBOL( 2 ) ) { - pHbSqlite3->cbBusyHandler = hb_itemNew( hb_param( 2, HB_IT_BLOCK ) ); + pHbSqlite3->cbBusyHandler = hb_itemNew( hb_param( 2, HB_IT_BLOCK | HB_IT_SYMBOL ) ); hb_gcUnlock( pHbSqlite3->cbBusyHandler ); sqlite3_busy_handler( pHbSqlite3->db, busy_handler, @@ -1905,7 +1905,7 @@ HB_FUNC( SQLITE3_PROGRESS_HANDLER ) if( HB_ISNUM( 2 ) && HB_ISBLOCK( 3 ) ) { - pHbSqlite3->cbProgressHandler = hb_itemNew( hb_param( 3, HB_IT_BLOCK ) ); + pHbSqlite3->cbProgressHandler = hb_itemNew( hb_param( 3, HB_IT_BLOCK | HB_IT_SYMBOL ) ); hb_gcUnlock( pHbSqlite3->cbProgressHandler ); sqlite3_progress_handler( pHbSqlite3->db, hb_parni( 2 ), progress_handler, @@ -1935,9 +1935,9 @@ HB_FUNC( SQLITE3_COMMIT_HOOK ) pHbSqlite3->cbHookCommit = NULL; } - if( HB_ISBLOCK( 2 ) ) + if( HB_ISBLOCK( 2 ) || HB_ISSYMBOL( 2 ) ) { - pHbSqlite3->cbHookCommit = hb_itemNew( hb_param( 2, HB_IT_BLOCK ) ); + pHbSqlite3->cbHookCommit = hb_itemNew( hb_param( 2, HB_IT_BLOCK | HB_IT_SYMBOL ) ); hb_gcUnlock( pHbSqlite3->cbHookCommit ); sqlite3_commit_hook( pHbSqlite3->db, hook_commit, ( void * ) pHbSqlite3->cbHookCommit ); @@ -1959,9 +1959,9 @@ HB_FUNC( SQLITE3_ROLLBACK_HOOK ) pHbSqlite3->cbHookRollback = NULL; } - if( HB_ISBLOCK( 2 ) ) + if( HB_ISBLOCK( 2 ) || HB_ISSYMBOL( 2 ) ) { - pHbSqlite3->cbHookRollback = hb_itemNew( hb_param( 2, HB_IT_BLOCK ) ); + pHbSqlite3->cbHookRollback = hb_itemNew( hb_param( 2, HB_IT_BLOCK | HB_IT_SYMBOL ) ); hb_gcUnlock( pHbSqlite3->cbHookRollback ); sqlite3_rollback_hook( pHbSqlite3->db, hook_rollback, @@ -1990,9 +1990,9 @@ HB_FUNC( SQLITE3_SET_AUTHORIZER ) pHbSqlite3->cbAuthorizer = NULL; } - if( HB_ISBLOCK( 2 ) ) + if( HB_ISBLOCK( 2 ) || HB_ISSYMBOL( 2 ) ) { - pHbSqlite3->cbAuthorizer = hb_itemNew( hb_param( 2, HB_IT_BLOCK ) ); + pHbSqlite3->cbAuthorizer = hb_itemNew( hb_param( 2, HB_IT_BLOCK | HB_IT_SYMBOL ) ); hb_gcUnlock( pHbSqlite3->cbAuthorizer ); hb_retni( sqlite3_set_authorizer( pHbSqlite3->db, authorizer, @@ -2265,9 +2265,9 @@ HB_FUNC( SQLITE3_CREATE_FUNCTION ) pHbSqlite3->cbFunc = NULL; } - if( HB_ISBLOCK( 4 ) ) + if( HB_ISBLOCK( 4 ) || HB_ISSYMBOL( 4 ) ) { - pHbSqlite3->cbFunc = hb_itemNew( hb_param( 4, HB_IT_BLOCK ) ); + pHbSqlite3->cbFunc = hb_itemNew( hb_param( 4, HB_IT_BLOCK | HB_IT_SYMBOL ) ); hb_gcUnlock( pHbSqlite3->cbFunc ); hb_retni( diff --git a/harbour/contrib/hbxdiff/hbxdiff.c b/harbour/contrib/hbxdiff/hbxdiff.c index 98f97186f0..a8731c8ea1 100644 --- a/harbour/contrib/hbxdiff/hbxdiff.c +++ b/harbour/contrib/hbxdiff/hbxdiff.c @@ -69,9 +69,6 @@ #define XDLT_STD_BLKSIZE ( 1024 * 8 ) #define XDLT_MAX_LINE_SIZE 80 -static int xdlt_outf( void * priv, mmbuffer_t * mb, int nbuf ); -static int xdlt_outh( void * priv, mmbuffer_t * mb, int nbuf ); - static PHB_ITEM hb_mmf_itemPut( PHB_ITEM pItem, void * pMemAddr, int iType ); static void * hb_mmf_itemGet( PHB_ITEM pItem, int iType, HB_BOOL fError ); static void hb_mmf_ret( void * pMemAddr, int iType ); @@ -407,32 +404,6 @@ static int xdlt_outb( void * priv, mmbuffer_t * mb, int nbuf ) return -1; } -static int xdlt_outh( void * priv, mmbuffer_t * mb, int nbuf ) -{ - PHB_DYNS pSym = ( PHB_DYNS ) priv; - - if( pSym && hb_vmRequestReenter() ) - { - int iResult; - int i; - - hb_vmPushDynSym( pSym ); - hb_vmPushNil(); - - for( i = 0; i < nbuf; i++ ) - hb_vmPushString( ( const char * ) mb[ i ].ptr, mb[ i ].size ); - - hb_vmFunction( ( HB_USHORT ) nbuf ); - iResult = hb_parnidef( -1, 0 ); - - hb_vmRequestRestore(); - - return iResult; - } - else - return -1; -} - /* int xdl_diff(mmfile_t *mmf1, mmfile_t *mmf2, xpparam_t const *xpp, xdemitconf_t const *xecfg, xdemitcb_t *ecb) */ HB_FUNC( XDL_DIFF ) @@ -456,29 +427,15 @@ HB_FUNC( XDL_DIFF ) hb_retni( xdl_diff( phb_mmf1->mmf, phb_mmf2->mmf, &xpp, &xecfg, &ecb ) ); } - else if( HB_ISBLOCK( 5 ) ) + else if( HB_ISBLOCK( 5 ) || HB_ISSYMBOL( 5 ) ) { - PHB_ITEM pBlock = hb_param( 5, HB_IT_BLOCK ); + PHB_ITEM pBlock = hb_param( 5, HB_IT_BLOCK | HB_IT_SYMBOL ); ecb.priv = ( void * ) pBlock; ecb.outf = xdlt_outb; hb_retni( xdl_diff( phb_mmf1->mmf, phb_mmf2->mmf, &xpp, &xecfg, &ecb ) ); } - else if( HB_ISSYMBOL( 5 ) ) - { - PHB_DYNS pDynSym = hb_dynsymNew( hb_itemGetSymbol( hb_param( 5, HB_IT_SYMBOL ) ) ); - - if( pDynSym && hb_dynsymIsFunction( pDynSym ) ) - { - ecb.priv = pDynSym; - ecb.outf = xdlt_outh; - - hb_retni( xdl_diff( phb_mmf1->mmf, phb_mmf2->mmf, &xpp, &xecfg, &ecb ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); - } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } @@ -542,29 +499,15 @@ HB_FUNC( XDL_BDIFF ) hb_retni( xdl_bdiff( phb_mmf1->mmf, phb_mmf2->mmf, &bdp, &ecb ) ); } - else if( HB_ISBLOCK( 4 ) ) + else if( HB_ISBLOCK( 4 ) || HB_ISSYMBOL( 4 ) ) { - PHB_ITEM pBlock = hb_param( 4, HB_IT_BLOCK ); + PHB_ITEM pBlock = hb_param( 4, HB_IT_BLOCK | HB_IT_SYMBOL ); ecb.priv = ( void * ) pBlock; ecb.outf = xdlt_outb; hb_retni( xdl_bdiff( phb_mmf1->mmf, phb_mmf2->mmf, &bdp, &ecb ) ); } - else if( HB_ISSYMBOL( 4 ) ) - { - PHB_DYNS pDynSym = hb_dynsymNew( hb_itemGetSymbol( hb_param( 3, HB_IT_SYMBOL ) ) ); - - if( pDynSym && hb_dynsymIsFunction( pDynSym ) ) - { - ecb.priv = ( void * ) pDynSym; - ecb.outf = xdlt_outh; - - hb_retni( xdl_bdiff( phb_mmf1->mmf, phb_mmf2->mmf, &bdp, &ecb ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); - } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } @@ -594,29 +537,15 @@ HB_FUNC( XDL_RABDIFF ) hb_retni( xdl_rabdiff( phb_mmf1->mmf, phb_mmf2->mmf, &ecb ) ); } - else if( HB_ISBLOCK( 3 ) ) + else if( HB_ISBLOCK( 3 ) || HB_ISSYMBOL( 3 ) ) { - PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK ); + PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK | HB_IT_SYMBOL ); ecb.priv = ( void * ) pBlock; ecb.outf = xdlt_outb; hb_retni( xdl_rabdiff( phb_mmf1->mmf, phb_mmf2->mmf, &ecb ) ); } - else if( HB_ISSYMBOL( 3 ) ) - { - PHB_DYNS pDynSym = hb_dynsymNew( hb_itemGetSymbol( hb_param( 3, HB_IT_SYMBOL ) ) ); - - if( pDynSym && hb_dynsymIsFunction( pDynSym ) ) - { - ecb.priv = ( void * ) pDynSym; - ecb.outf = xdlt_outh; - - hb_retni( xdl_rabdiff( phb_mmf1->mmf, phb_mmf2->mmf, &ecb ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); - } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } @@ -642,29 +571,15 @@ HB_FUNC( XDL_BPATCH ) hb_retni( xdl_bpatch( phb_mmf1->mmf, phb_mmf2->mmf, &ecb ) ); } - else if( HB_ISBLOCK( 3 ) ) + else if( HB_ISBLOCK( 3 ) || HB_ISSYMBOL( 3 ) ) { - PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK ); + PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK | HB_IT_SYMBOL ); ecb.priv = ( void * ) pBlock; ecb.outf = xdlt_outb; hb_retni( xdl_bpatch( phb_mmf1->mmf, phb_mmf2->mmf, &ecb ) ); } - else if( HB_ISSYMBOL( 3 ) ) - { - PHB_DYNS pDynSym = hb_dynsymNew( hb_itemGetSymbol( hb_param( 3, HB_IT_SYMBOL ) ) ); - - if( pDynSym && hb_dynsymIsFunction( pDynSym ) ) - { - ecb.priv = ( void * ) pDynSym; - ecb.outf = xdlt_outh; - - hb_retni( xdl_bpatch( phb_mmf1->mmf, phb_mmf2->mmf, &ecb ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); - } else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } diff --git a/harbour/contrib/hbxdiff/tests/test3.prg b/harbour/contrib/hbxdiff/tests/test3.prg index e536a8cdaa..49c19dc985 100644 --- a/harbour/contrib/hbxdiff/tests/test3.prg +++ b/harbour/contrib/hbxdiff/tests/test3.prg @@ -31,5 +31,6 @@ PROCEDURE main() xdl_write_mmfile( pMMFNew, cFileCtx + hb_eol() + Space( 3 ) + "RETURN NIL" + hb_eol() ) xdl_diff( pMMFOld, pMMFNew, 0, 3, {| ... | Diff( ... ) } ) + xdl_diff( pMMFOld, pMMFNew, 0, 3, @Diff() ) RETURN