diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 1c3ca17439..f48fd7285e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,18 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2003-01-24 14:00 UTC+0300 Alexander Kresin + * source/vm/hvm.c + * hb_inkeyPoll() is removed from hb_vmDo(), the code fragment with + hb_ReadKey() is added to hb_vmExecute() - borrowed from xHarbour. + * source/vm/estack.c + * source/vm/extend.c + * include/hbapi.h + * include/hstack.h + * HB_API_MACROS and HB_STACK_MACROS are default options now - borrowed from xHarbour. + * source/rtl/version.c + ! Memory leak fixed. + 2003-01-20 00:20 UTC+0100 Martin Vogel * contrib/libct/Makefile * contrib/libct/Makefile.bc diff --git a/harbour/include/hbapi.h b/harbour/include/hbapi.h index 7ef8e91d0b..e7d87bf344 100644 --- a/harbour/include/hbapi.h +++ b/harbour/include/hbapi.h @@ -291,6 +291,12 @@ extern PHB_ITEM HB_EXPORT hb_param( int iParam, int iMask ); /* retrieve a gener extern PHB_ITEM HB_EXPORT hb_paramError( int iParam ); /* Returns either the generic parameter or a NIL item if param not provided */ extern BOOL HB_EXPORT hb_extIsArray( int iParam ); +#ifndef HB_NO_DEFAULT_API_MACROS + #ifndef HB_API_MACROS + #define HB_API_MACROS + #endif +#endif + #ifdef HB_API_MACROS #include "hbapiitm.h" diff --git a/harbour/include/hbstack.h b/harbour/include/hbstack.h index 149eebfd8a..71139b400c 100644 --- a/harbour/include/hbstack.h +++ b/harbour/include/hbstack.h @@ -64,6 +64,10 @@ extern "C" { #endif +#ifndef HB_NO_DEFAULT_STACK_MACROS + #define HB_STACK_MACROS +#endif + /* stack managed by the virtual machine */ typedef struct { diff --git a/harbour/source/rtl/version.c b/harbour/source/rtl/version.c index 36f4ef240a..1fcfbea58c 100644 --- a/harbour/source/rtl/version.c +++ b/harbour/source/rtl/version.c @@ -65,16 +65,22 @@ HB_FUNC( OS ) { - hb_retc_buffer( hb_verPlatform() ); + char * ptr = hb_verPlatform(); + hb_retc( ptr ); + hb_xfree( ptr ); } HB_FUNC( HB_COMPILER ) { - hb_retc_buffer( hb_verCompiler() ); + char * ptr = hb_verCompiler(); + hb_retc( ptr ); + hb_xfree( ptr ); } HB_FUNC( VERSION ) { - hb_retc_buffer( hb_verHarbour() ); + char * ptr = hb_verHarbour(); + hb_retc( ptr ); + hb_xfree( ptr ); } diff --git a/harbour/source/vm/estack.c b/harbour/source/vm/estack.c index 5699e8ee52..d531636b24 100644 --- a/harbour/source/vm/estack.c +++ b/harbour/source/vm/estack.c @@ -54,10 +54,6 @@ #define HB_OS_WIN_32_USED #endif -#ifdef HB_STACK_MACROS - #undef HB_STACK_MACROS -#endif - #include "hbapi.h" #include "hbdefs.h" #include "hbstack.h" @@ -199,7 +195,7 @@ void hb_stackOldFrame( HB_STACK_STATE * pStack ) hb_stack.iStatics = pStack->iStatics; } -#if !defined(HB_STACK_MACROS) +#undef hb_stackItem HB_ITEM_PTR hb_stackItem( LONG iItemPos ) { if( iItemPos < 0 ) @@ -208,6 +204,7 @@ HB_ITEM_PTR hb_stackItem( LONG iItemPos ) return ( * ( hb_stack.pItems + iItemPos ) ); } +#undef hb_stackItemFromTop HB_ITEM_PTR hb_stackItemFromTop( int nFromTop ) { if( nFromTop > 0 ) @@ -216,6 +213,7 @@ HB_ITEM_PTR hb_stackItemFromTop( int nFromTop ) return ( * ( hb_stack.pPos + nFromTop ) ); } +#undef hb_stackItemFromBase HB_ITEM_PTR hb_stackItemFromBase( int nFromBase ) { if( nFromBase <= 0 ) @@ -224,11 +222,13 @@ HB_ITEM_PTR hb_stackItemFromBase( int nFromBase ) return ( * ( hb_stack.pBase + nFromBase + 1 ) ); } +#undef hb_stackTopItem HB_ITEM_PTR hb_stackTopItem( void ) { return * hb_stack.pPos; } +#undef hb_stackBaseItem HB_ITEM_PTR hb_stackBaseItem( void ) { return * hb_stack.pBase; @@ -236,22 +236,24 @@ HB_ITEM_PTR hb_stackBaseItem( void ) /* Returns SELF object, an evaluated codeblock or NIL for normal func/proc */ +#undef hb_stackSelfItem HB_ITEM_PTR hb_stackSelfItem( void ) { return * ( hb_stack.pBase + 1 ); } +#undef hb_stackTopOffset LONG hb_stackTopOffset( void ) { return hb_stack.pPos - hb_stack.pItems; } +#undef hb_stackBaseOffset LONG hb_stackBaseOffset( void ) { return hb_stack.pBase - hb_stack.pItems + 1; } -#endif /* NOTE: DEBUG function */ void hb_stackDispLocal( void ) diff --git a/harbour/source/vm/extend.c b/harbour/source/vm/extend.c index d1e77787fb..2ffcfc1e37 100644 --- a/harbour/source/vm/extend.c +++ b/harbour/source/vm/extend.c @@ -68,10 +68,6 @@ * */ -#ifdef HB_API_MACROS - #undef HB_API_MACROS -#endif - #include "hbapi.h" #include "hbapiitm.h" #include "hbset.h" @@ -476,6 +472,7 @@ int HB_EXPORT hb_parinfo( int iParam ) } } +#undef hb_pcount int HB_EXPORT hb_pcount( void ) { HB_TRACE(HB_TR_DEBUG, ("hb_pcount()")); @@ -483,6 +480,7 @@ int HB_EXPORT hb_pcount( void ) return ( int ) ( hb_stackBaseItem() )->item.asSymbol.paramcnt; } +#undef hb_ret void HB_EXPORT hb_ret( void ) { HB_TRACE(HB_TR_DEBUG, ("hb_ret()")); @@ -490,6 +488,7 @@ void HB_EXPORT hb_ret( void ) hb_itemClear( &hb_stack.Return ); } +#undef hb_reta void HB_EXPORT hb_reta( ULONG ulLen ) /* undocumented hb_reta() */ { HB_TRACE(HB_TR_DEBUG, ("hb_reta(%lu)", ulLen)); @@ -497,6 +496,7 @@ void HB_EXPORT hb_reta( ULONG ulLen ) /* undocumented hb_reta() */ hb_arrayNew( &hb_stack.Return, ulLen ); } +#undef hb_retc void HB_EXPORT hb_retc( char * szText ) { HB_TRACE(HB_TR_DEBUG, ("hb_retc(%s)", szText)); @@ -504,6 +504,7 @@ void HB_EXPORT hb_retc( char * szText ) hb_itemPutC( &hb_stack.Return, szText ); } +#undef hb_retc_buffer void HB_EXPORT hb_retc_buffer( char * szText ) { HB_TRACE(HB_TR_DEBUG, ("hb_retc_buffer(%s)", szText)); @@ -511,6 +512,7 @@ void HB_EXPORT hb_retc_buffer( char * szText ) hb_itemPutCPtr( &hb_stack.Return, szText, strlen( szText ) ); } +#undef hb_retc_const void HB_EXPORT hb_retc_const( char * szText ) { HB_TRACE(HB_TR_DEBUG, ("hb_retc_const(%s)", szText)); @@ -518,6 +520,7 @@ void HB_EXPORT hb_retc_const( char * szText ) hb_itemPutCConst( &hb_stack.Return, szText ); } +#undef hb_retclen void HB_EXPORT hb_retclen( char * szText, ULONG ulLen ) { HB_TRACE(HB_TR_DEBUG, ("hb_retclen(%s, %lu)", szText, ulLen)); @@ -525,6 +528,7 @@ void HB_EXPORT hb_retclen( char * szText, ULONG ulLen ) hb_itemPutCL( &hb_stack.Return, szText, ulLen ); } +#undef hb_retclen_buffer void HB_EXPORT hb_retclen_buffer( char * szText, ULONG ulLen ) { HB_TRACE(HB_TR_DEBUG, ("hb_retclen_buffer(%s, %lu)", szText, ulLen)); @@ -534,6 +538,7 @@ void HB_EXPORT hb_retclen_buffer( char * szText, ULONG ulLen ) /* szDate must have YYYYMMDD format */ +#undef hb_retds void HB_EXPORT hb_retds( char * szDate ) { HB_TRACE(HB_TR_DEBUG, ("hb_retds(%s)", szDate)); @@ -541,6 +546,7 @@ void HB_EXPORT hb_retds( char * szDate ) hb_itemPutDS( &hb_stack.Return, szDate ); } +#undef hb_retd void HB_EXPORT hb_retd( long lYear, long lMonth, long lDay ) { HB_TRACE(HB_TR_DEBUG, ("hb_retd(%04i, %02i, %02i)", lYear, lMonth, lDay)); @@ -548,6 +554,7 @@ void HB_EXPORT hb_retd( long lYear, long lMonth, long lDay ) hb_itemPutD( &hb_stack.Return, lYear, lMonth, lDay ); } +#undef hb_retdl void HB_EXPORT hb_retdl( long lJulian ) { HB_TRACE(HB_TR_DEBUG, ("hb_retdl(%ld)", lJulian)); @@ -555,6 +562,7 @@ void HB_EXPORT hb_retdl( long lJulian ) hb_itemPutDL( &hb_stack.Return, lJulian ); } +#undef hb_retl void HB_EXPORT hb_retl( int iLogical ) { HB_TRACE(HB_TR_DEBUG, ("hb_retl(%d)", iLogical)); @@ -562,6 +570,7 @@ void HB_EXPORT hb_retl( int iLogical ) hb_itemPutL( &hb_stack.Return, iLogical ? TRUE : FALSE ); } +#undef hb_retnd void HB_EXPORT hb_retnd( double dNumber ) { HB_TRACE(HB_TR_DEBUG, ("hb_retnd(%lf)", dNumber)); @@ -569,6 +578,7 @@ void HB_EXPORT hb_retnd( double dNumber ) hb_itemPutND( &hb_stack.Return, dNumber ); } +#undef hb_retni void HB_EXPORT hb_retni( int iNumber ) { HB_TRACE(HB_TR_DEBUG, ("hb_retni(%d)", iNumber)); @@ -576,6 +586,7 @@ void HB_EXPORT hb_retni( int iNumber ) hb_itemPutNI( &hb_stack.Return, iNumber ); } +#undef hb_retnl void HB_EXPORT hb_retnl( long lNumber ) { HB_TRACE(HB_TR_DEBUG, ("hb_retnl(%ld)", lNumber)); @@ -583,6 +594,7 @@ void HB_EXPORT hb_retnl( long lNumber ) hb_itemPutNL( &hb_stack.Return, lNumber ); } +#undef hb_retnlen void HB_EXPORT hb_retnlen( double dNumber, int iWidth, int iDec ) { HB_TRACE(HB_TR_DEBUG, ("hb_retnlen(%lf, %d, %d)", dNumber, iWidth, iDec)); @@ -590,6 +602,7 @@ void HB_EXPORT hb_retnlen( double dNumber, int iWidth, int iDec ) hb_itemPutNLen( &hb_stack.Return, dNumber, iWidth, iDec ); } +#undef hb_retndlen void HB_EXPORT hb_retndlen( double dNumber, int iWidth, int iDec ) { HB_TRACE(HB_TR_DEBUG, ("hb_retndlen(%lf, %d, %d)", dNumber, iWidth, iDec)); @@ -597,6 +610,7 @@ void HB_EXPORT hb_retndlen( double dNumber, int iWidth, int iDec ) hb_itemPutNDLen( &hb_stack.Return, dNumber, iWidth, iDec ); } +#undef hb_retnilen void HB_EXPORT hb_retnilen( int iNumber, int iWidth ) { HB_TRACE(HB_TR_DEBUG, ("hb_retnilen(%d, %d)", iNumber, iWidth)); @@ -604,6 +618,7 @@ void HB_EXPORT hb_retnilen( int iNumber, int iWidth ) hb_itemPutNILen( &hb_stack.Return, iNumber, iWidth ); } +#undef hb_retnllen void HB_EXPORT hb_retnllen( long lNumber, int iWidth ) { HB_TRACE(HB_TR_DEBUG, ("hb_retnllen(%ld, %d)", lNumber, iWidth)); diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 2f1bbe7b7d..841dec2c1b 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -83,6 +83,8 @@ #include "hbvm.h" #include "hbpcode.h" #include "hbset.h" +#include "hbinkey.ch" +#include "inkey.ch" #ifdef HB_MACRO_STATEMENTS #include "hbpp.h" @@ -446,6 +448,25 @@ void HB_EXPORT hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) hb_ulOpcodesCalls[ ulLastOpcode ]++; } + #ifndef HB_GUI + if( hb_set.HB_SET_CANCEL ) + { + static unsigned short s_iCancel = 0; + + if( ++s_iCancel == 65535 ) + { + int ch = hb_gt_ReadKey( hb_set.HB_SET_EVENTMASK ); + + switch( ch ) + { + case HB_K_ALT_C: /* Check for extended Alt+C */ + case K_ALT_C: /* Check for normal Alt+C */ + hb_vmRequestCancel();/* Request cancellation */ + } + } + } + #endif + switch( pCode[ w ] ) { /* Operators ( mathematical / character / misc ) */ @@ -3070,9 +3091,11 @@ void hb_vmDo( USHORT uiParams ) if( bProfiler ) ulClock = ( ULONG ) clock(); + /* Poll the console keyboard #ifndef HB_GUI - hb_inkeyPoll(); /* Poll the console keyboard */ + hb_inkeyPoll(); #endif + */ pItem = hb_stackNewFrame( &sStackState, uiParams ); pSym = pItem->item.asSymbol.value;