diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 1005662367..06aa24f69d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,17 @@ +20000425-03:38 GMT+1 Victor Szakats + + * include/hbpcode.h + * source/compiler/hbpcode.c + * source/compiler/harbour.c + * source/compiler/genc.c + * source/vm/hvm.c + * Some pcode names changed + JUMPSHORT->JUMPNEAR + JUMPNEAR* -> JUMP*NEAR + JUMPFAR* -> JUMP*FAR + (so that the size specifier is a postfix) + % Some minor formatting and optimization in HVM.C + 20000425-03:20 GMT+1 Victor Szakats * source/compiler/hbusage.c diff --git a/harbour/contrib/libmisc/makefile.bc b/harbour/contrib/libmisc/makefile.bc index ecefdd56be..bd974185ae 100644 --- a/harbour/contrib/libmisc/makefile.bc +++ b/harbour/contrib/libmisc/makefile.bc @@ -77,7 +77,7 @@ LDFLAGS = $(LDFLAGS) # Macros to access our library names # -TOOLS_LIB = $(LIB_DIR)\tools.lib +TOOLS_LIB = $(LIB_DIR)\libmisc.lib HARBOUR_EXE = $(BIN_DIR)\harbour.exe diff --git a/harbour/contrib/libmisc/makefile.vc b/harbour/contrib/libmisc/makefile.vc index 97b7c4c1ec..5b4bf55130 100644 --- a/harbour/contrib/libmisc/makefile.vc +++ b/harbour/contrib/libmisc/makefile.vc @@ -76,7 +76,7 @@ LDFLAGS = $(LDFLAGS) # Macros to access our library names # -TOOLS_LIB = $(LIB_DIR)\misc.lib +TOOLS_LIB = $(LIB_DIR)\libmisc.lib HARBOUR_EXE = $(BIN_DIR)\harbour.exe diff --git a/harbour/include/hbpcode.h b/harbour/include/hbpcode.h index ca8f4c2c19..64d245f1e5 100644 --- a/harbour/include/hbpcode.h +++ b/harbour/include/hbpcode.h @@ -69,15 +69,15 @@ typedef enum HB_P_DUPLTWO, /* places a copy of the latest two virtual machine stack value on to the stack */ HB_P_INC, /* increments the latest value on the virtual machine stack */ HB_P_INSTRING, /* checks if the second latest value on the stack is a substring of the latest one */ - HB_P_JUMPSHORT, /* jumps to a relative offset 1 Byte */ + HB_P_JUMPNEAR, /* jumps to a relative offset 1 Byte */ HB_P_JUMP, /* jumps to a relative offset 2 Bytes */ HB_P_JUMPFAR, /* jumps to a relative offset 3 Bytes */ - HB_P_JUMPSHORTFALSE, /* checks a logic expression of the stack and jumps to a relative offset */ + HB_P_JUMPFALSENEAR, /* checks a logic expression of the stack and jumps to a relative offset */ HB_P_JUMPFALSE, /* checks a logic expression of the stack and jumps to a relative offset */ - HB_P_JUMPFARFALSE, /* checks a logic expression of the stack and jumps to a relative offset */ - HB_P_JUMPSHORTTRUE, /* checks a logic expression of the stack and jumps to a relative offset */ + HB_P_JUMPFALSEFAR, /* checks a logic expression of the stack and jumps to a relative offset */ + HB_P_JUMPTRUENEAR, /* checks a logic expression of the stack and jumps to a relative offset */ HB_P_JUMPTRUE, /* checks a logic expression of the stack and jumps to a relative offset */ - HB_P_JUMPFARTRUE, /* checks a logic expression of the stack and jumps to a relative offset */ + HB_P_JUMPTRUEFAR, /* checks a logic expression of the stack and jumps to a relative offset */ HB_P_LESSEQUAL, /* checks if the second latest value on the stack is less equal that the latest one, leaves the result only */ HB_P_LESS, /* checks if the second latest value on the stack is less that the lastest one */ HB_P_LINE, /* currently compiled source code line number */ @@ -159,8 +159,8 @@ typedef enum HB_P_TRUE, /* pushes true on the virtual machine stack */ HB_P_ZERO, /* places a ZERO on the virtual machine stack */ HB_P_ONE, /* places a ONE on the virtual machine stack */ -/*NOTE: * This have to be the last definition */ - HB_P_LAST_PCODE /* this defines the number of defined pcodes */ +/* NOTE: This have to be the last definition */ + HB_P_LAST_PCODE /* this defines the number of defined pcodes */ } HB_PCODE; #endif /* HB_PCODE_H_ */ diff --git a/harbour/source/compiler/genc.c b/harbour/source/compiler/genc.c index 2db778c012..6cdbcfdb62 100644 --- a/harbour/source/compiler/genc.c +++ b/harbour/source/compiler/genc.c @@ -32,6 +32,7 @@ * their web site at http://www.gnu.org/). * */ + #include #include "hbcomp.h" @@ -42,16 +43,14 @@ static void hb_compGenCCompact( PFUNCTION pFunc, FILE * yyc ); /* helper structure to pass information */ typedef struct HB_stru_genc_info { - FILE *yyc; + FILE * yyc; BOOL bVerbose; USHORT iNestedCodeblock; -} -HB_GENC_INFO, *HB_GENC_INFO_PTR; +} HB_GENC_INFO, * HB_GENC_INFO_PTR; #define HB_GENC_FUNC( func ) HB_PCODE_FUNC( func, HB_GENC_INFO_PTR ) -typedef HB_GENC_FUNC( HB_GENC_FUNC_ ); -typedef HB_GENC_FUNC_ *HB_GENC_FUNC_PTR; - +typedef HB_GENC_FUNC( HB_GENC_FUNC_ ); +typedef HB_GENC_FUNC_ * HB_GENC_FUNC_PTR; void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language output */ { @@ -467,9 +466,9 @@ static HB_GENC_FUNC( hb_p_instring ) return 1; } -static HB_GENC_FUNC( hb_p_jumpshort ) +static HB_GENC_FUNC( hb_p_jumpnear ) { - fprintf( cargo->yyc, "\tHB_P_JUMPSHORT, %i,", + fprintf( cargo->yyc, "\tHB_P_JUMPNEAR, %i,", pFunc->pCode[ lPCodePos + 1 ] ); if( cargo->bVerbose ) { @@ -520,9 +519,9 @@ static HB_GENC_FUNC( hb_p_jumpfar ) return 4; } -static HB_GENC_FUNC( hb_p_jumpshortfalse ) +static HB_GENC_FUNC( hb_p_jumpfalsenear ) { - fprintf( cargo->yyc, "\tHB_P_JUMPSHORTFALSE, %i,", + fprintf( cargo->yyc, "\tHB_P_JUMPFALSENEAR, %i,", pFunc->pCode[ lPCodePos + 1 ] ); if( cargo->bVerbose ) { @@ -555,9 +554,9 @@ static HB_GENC_FUNC( hb_p_jumpfalse ) return 3; } -static HB_GENC_FUNC( hb_p_jumpfarfalse ) +static HB_GENC_FUNC( hb_p_jumpfalsefar ) { - fprintf( cargo->yyc, "\tHB_P_JUMPFARFALSE, %i, %i, %i,", + fprintf( cargo->yyc, "\tHB_P_JUMPFALSEFAR, %i, %i, %i,", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pFunc->pCode[ lPCodePos + 3 ] ); @@ -573,9 +572,9 @@ static HB_GENC_FUNC( hb_p_jumpfarfalse ) return 4; } -static HB_GENC_FUNC( hb_p_jumpshorttrue ) +static HB_GENC_FUNC( hb_p_jumptruenear ) { - fprintf( cargo->yyc, "\tHB_P_JUMPSHORTTRUE, %i,", + fprintf( cargo->yyc, "\tHB_P_JUMPTRUENEAR, %i,", pFunc->pCode[ lPCodePos + 1 ] ); if( cargo->bVerbose ) { @@ -606,9 +605,9 @@ static HB_GENC_FUNC( hb_p_jumptrue ) return 3; } -static HB_GENC_FUNC( hb_p_jumpfartrue ) +static HB_GENC_FUNC( hb_p_jumptruefar ) { - fprintf( cargo->yyc, "\tHB_P_JUMPFARTRUE, %i, %i, %i,", + fprintf( cargo->yyc, "\tHB_P_JUMPTRUEFAR, %i, %i, %i,", pFunc->pCode[ lPCodePos + 1 ], pFunc->pCode[ lPCodePos + 2 ], pFunc->pCode[ lPCodePos + 3 ] ); @@ -906,8 +905,8 @@ static HB_GENC_FUNC( hb_p_poplocal ) { SHORT wVar = * ( ( SHORT * ) &( pFunc->pCode )[ lPCodePos + 1 ] ); /* Variable with negative order are local variables - * referenced in a codeblock -handle it with care - */ + * referenced in a codeblock -handle it with care + */ if( cargo->iNestedCodeblock ) { @@ -1140,8 +1139,8 @@ static HB_GENC_FUNC( hb_p_pushlocal ) { SHORT wVar = * ( ( SHORT * ) &( pFunc->pCode )[ lPCodePos + 1 ] ); /* Variable with negative order are local variables - * referenced in a codeblock -handle it with care - */ + * referenced in a codeblock -handle it with care + */ if( cargo->iNestedCodeblock ) { @@ -1195,8 +1194,8 @@ static HB_GENC_FUNC( hb_p_pushlocalref ) { SHORT wVar = * ( ( SHORT * ) &( pFunc->pCode )[ lPCodePos + 1 ] ); /* Variable with negative order are local variables - * referenced in a codeblock -handle it with care - */ + * referenced in a codeblock -handle it with care + */ if( cargo->iNestedCodeblock ) { @@ -1461,7 +1460,7 @@ static HB_GENC_FUNC( hb_p_seqrecover ) return 1; } - static HB_GENC_FUNC( hb_p_sframe ) +static HB_GENC_FUNC( hb_p_sframe ) { fprintf( cargo->yyc, "\tHB_P_SFRAME, %i, %i,", pFunc->pCode[ lPCodePos + 1 ], @@ -1565,15 +1564,15 @@ static HB_GENC_FUNC_PTR s_verbose_table[] = { hb_p_dupltwo, hb_p_inc, hb_p_instring, - hb_p_jumpshort, + hb_p_jumpnear, hb_p_jump, hb_p_jumpfar, - hb_p_jumpshortfalse, + hb_p_jumpfalsenear, hb_p_jumpfalse, - hb_p_jumpfarfalse, - hb_p_jumpshorttrue, + hb_p_jumpfalsefar, + hb_p_jumptruenear, hb_p_jumptrue, - hb_p_jumpfartrue, + hb_p_jumptruefar, hb_p_lessequal, hb_p_less, hb_p_line, @@ -1662,13 +1661,13 @@ static void hb_compGenCReadable( PFUNCTION pFunc, FILE * yyc ) HB_GENC_INFO genc_info; /* Make sure that table is correct */ - assert( HB_P_LAST_PCODE == sizeof(s_verbose_table)/sizeof(HB_GENC_FUNC_PTR) ); + assert( HB_P_LAST_PCODE == sizeof( s_verbose_table ) / sizeof( HB_GENC_FUNC_PTR ) ); genc_info.iNestedCodeblock = 0; genc_info.bVerbose = ( hb_comp_iGenCOutput == HB_COMPGENC_VERBOSE ); genc_info.yyc = yyc; - hb_compPCodeEval( pFunc, (HB_PCODE_FUNC_PTR *)s_verbose_table, (void *)&genc_info ); + hb_compPCodeEval( pFunc, ( HB_PCODE_FUNC_PTR * ) s_verbose_table, ( void * ) &genc_info ); if( genc_info.bVerbose ) fprintf( yyc, "/* %05li */\n", pFunc->lPCodePos ); diff --git a/harbour/source/compiler/harbour.c b/harbour/source/compiler/harbour.c index 5d3823cd49..f41b31173c 100644 --- a/harbour/source/compiler/harbour.c +++ b/harbour/source/compiler/harbour.c @@ -1335,7 +1335,7 @@ ULONG hb_compGenJump( LONG lOffset ) } else if( lOffset >= -128 && lOffset <= 127 ) { - hb_compGenPCode3( HB_P_JUMPSHORT, HB_LOBYTE( lOffset ), HB_P_NOOP ); + hb_compGenPCode3( HB_P_JUMPNEAR, HB_LOBYTE( lOffset ), HB_P_NOOP ); hb_compGenPCode1( HB_P_NOOP ); } else if( lOffset >= SHRT_MIN && lOffset <= SHRT_MAX ) @@ -1363,12 +1363,12 @@ ULONG hb_compGenJumpFalse( LONG lOffset ) /* Just a place holder, it might be a far jump...*/ if( lOffset == 0 ) { - hb_compGenPCode3( HB_P_JUMPFARFALSE, 0, 0 ); + hb_compGenPCode3( HB_P_JUMPFALSEFAR, 0, 0 ); hb_compGenPCode1( 0 ); } else if( lOffset >= -128 && lOffset <= 127 ) { - hb_compGenPCode3( HB_P_JUMPSHORTFALSE, HB_LOBYTE( lOffset ), HB_P_NOOP ); + hb_compGenPCode3( HB_P_JUMPFALSENEAR, HB_LOBYTE( lOffset ), HB_P_NOOP ); hb_compGenPCode1( HB_P_NOOP ); } else if( lOffset >= SHRT_MIN && lOffset <= SHRT_MAX ) @@ -1378,7 +1378,7 @@ ULONG hb_compGenJumpFalse( LONG lOffset ) } else if( lOffset >= (-8388608L) && lOffset <= 8388607L ) { - hb_compGenPCode3( HB_P_JUMPFARFALSE, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) ); + hb_compGenPCode3( HB_P_JUMPFALSEFAR, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) ); hb_compGenPCode1( ( BYTE ) ( ( ( USHORT ) ( lOffset ) >> 16 ) & 0xFF ) ); } else @@ -1396,12 +1396,12 @@ ULONG hb_compGenJumpTrue( LONG lOffset ) /* Just a place holder, it might be a far jump...*/ if( lOffset == 0 ) { - hb_compGenPCode3( HB_P_JUMPFARTRUE, 0, 0 ); + hb_compGenPCode3( HB_P_JUMPTRUEFAR, 0, 0 ); hb_compGenPCode1( 0 ); } else if( lOffset >= -128 && lOffset <= 127 ) { - hb_compGenPCode3( HB_P_JUMPSHORTTRUE, HB_LOBYTE( lOffset ), HB_P_NOOP ); + hb_compGenPCode3( HB_P_JUMPTRUENEAR, HB_LOBYTE( lOffset ), HB_P_NOOP ); hb_compGenPCode1( HB_P_NOOP ); } else if( lOffset >= SHRT_MIN && lOffset <= SHRT_MAX ) @@ -1411,7 +1411,7 @@ ULONG hb_compGenJumpTrue( LONG lOffset ) } else if( lOffset >= (-8388608L) && lOffset <= 8388607L ) { - hb_compGenPCode3( HB_P_JUMPFARTRUE, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) ); + hb_compGenPCode3( HB_P_JUMPTRUEFAR, HB_LOBYTE( lOffset ), HB_HIBYTE( lOffset ) ); hb_compGenPCode1( ( BYTE ) ( ( ( USHORT ) ( lOffset ) >> 16 ) & 0xFF ) ); } else @@ -1435,48 +1435,48 @@ void hb_compGenJumpThere( ULONG ulFrom, ULONG ulTo ) switch( pCode[ ( ULONG ) ( ulFrom - 1 ) ] ) { /* - case HB_P_JUMPSHORT : + case HB_P_JUMPNEAR : break; - case HB_P_JUMPSHORTTRUE : + case HB_P_JUMPTRUENEAR : break; - case HB_P_JUMPSHORTFALSE : + case HB_P_JUMPFALSENEAR : break; case HB_P_JUMP : - pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORT; + pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPNEAR; pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; case HB_P_JUMPTRUE : - pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTTRUE; + pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUENEAR; pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; case HB_P_JUMPFALSE : - pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTFALSE; + pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSENEAR; pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; */ case HB_P_JUMPFAR : - pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORT; + pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPNEAR; pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; - case HB_P_JUMPFARTRUE : - pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTTRUE; + case HB_P_JUMPTRUEFAR : + pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUENEAR; pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; - case HB_P_JUMPFARFALSE : - pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPSHORTFALSE; + case HB_P_JUMPFALSEFAR : + pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSENEAR; pCode[ ( ULONG ) ( ulFrom + 1 ) ] = HB_P_NOOP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; @@ -1539,17 +1539,17 @@ void hb_compGenJumpThere( ULONG ulFrom, ULONG ulTo ) switch( pCode[ ( ULONG ) ( ulFrom - 1 ) ] ) { /* - case HB_P_JUMPSHORT : + case HB_P_JUMPNEAR : pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMP; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; - case HB_P_JUMPSHORTTRUE : + case HB_P_JUMPTRUENEAR : pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUE; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; - case HB_P_JUMPSHORTFALSE : + case HB_P_JUMPFALSENEAR : pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSE; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; @@ -1569,12 +1569,12 @@ void hb_compGenJumpThere( ULONG ulFrom, ULONG ulTo ) pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; - case HB_P_JUMPFARTRUE : + case HB_P_JUMPTRUEFAR : pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPTRUE; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; - case HB_P_JUMPFARFALSE : + case HB_P_JUMPFALSEFAR : pCode[ ( ULONG ) ( ulFrom - 1 ) ] = HB_P_JUMPFALSE; pCode[ ( ULONG ) ( ulFrom + 2 ) ] = HB_P_NOOP; break; @@ -2514,9 +2514,9 @@ static void hb_compOptimizeJumps( void ) { switch( pCode[ pJumps[ iJump ] ] ) { - case HB_P_JUMPSHORT : - case HB_P_JUMPSHORTFALSE : - case HB_P_JUMPSHORTTRUE : + case HB_P_JUMPNEAR : + case HB_P_JUMPFALSENEAR : + case HB_P_JUMPTRUENEAR : { ulOffset = pCode[ pJumps[ iJump ] + 1 ]; diff --git a/harbour/source/compiler/hbpcode.c b/harbour/source/compiler/hbpcode.c index 15daa123c3..ddb2322b5c 100644 --- a/harbour/source/compiler/hbpcode.c +++ b/harbour/source/compiler/hbpcode.c @@ -32,6 +32,7 @@ * their web site at http://www.gnu.org/). * */ + #include #include "hbcomp.h" @@ -62,15 +63,15 @@ static BYTE s_pcode_len[] = { 1, /* HB_P_DUPLTWO, */ 1, /* HB_P_INC, */ 1, /* HB_P_INSTRING, */ - 2, /* HB_P_JUMPSHORT, */ + 2, /* HB_P_JUMPNEAR, */ 3, /* HB_P_JUMP, */ 4, /* HB_P_JUMPFAR, */ - 2, /* HB_P_JUMPSHORTFALSE, */ + 2, /* HB_P_JUMPFALSENEAR, */ 3, /* HB_P_JUMPFALSE, */ - 4, /* HB_P_JUMPFARFALSE, */ - 2, /* HB_P_JUMPSHORTTRUE, */ + 4, /* HB_P_JUMPFALSEFAR, */ + 2, /* HB_P_JUMPTRUENEAR, */ 3, /* HB_P_JUMPTRUE, */ - 4, /* HB_P_JUMPFARTRUE, */ + 4, /* HB_P_JUMPTRUEFAR, */ 1, /* HB_P_LESSEQUAL, */ 1, /* HB_P_LESS, */ 3, /* HB_P_LINE, */ @@ -154,7 +155,7 @@ static BYTE s_pcode_len[] = { 1 /* HB_P_ONE, */ }; -void hb_compPCodeEval( PFUNCTION pFunc, HB_PCODE_FUNC_PTR *pFunctions, void *cargo ) +void hb_compPCodeEval( PFUNCTION pFunc, HB_PCODE_FUNC_PTR * pFunctions, void * cargo ) { ULONG ulPos = 0; USHORT usSkip; @@ -162,7 +163,7 @@ void hb_compPCodeEval( PFUNCTION pFunc, HB_PCODE_FUNC_PTR *pFunctions, void *car HB_PCODE_FUNC_PTR pCall; /* Make sure that table is correct */ - assert( sizeof(s_pcode_len) == HB_P_LAST_PCODE ); + assert( sizeof( s_pcode_len ) == HB_P_LAST_PCODE ); while( ulPos < pFunc->lPCodePos ) { diff --git a/harbour/source/compiler/hbusage.c b/harbour/source/compiler/hbusage.c index 0ee09b0b8f..5f1ed5a5d8 100644 --- a/harbour/source/compiler/hbusage.c +++ b/harbour/source/compiler/hbusage.c @@ -92,27 +92,21 @@ void hb_compPrintUsage( char * szSelf ) */ void hb_compPrintCredits( void ) { - /* NOTE: This list was semi-automatically generated by searching for all - Copyright headers in the core Harbour source files. - (GREP "copyright [12]" and GREP "public domain") - [vszakats] */ - printf( "\n" "Credits: The Harbour Team at www.harbour-project.org\n" "\n" - "Developers and documentation:\n" - "\n" - "A White \n" - "Alexander S.Kresin \n" + "April White \n" + "Alexander S. Kresin \n" "Andi Jahja \n" "Antonio Linares \n" "Bil Simser \n" "Brian Hays \n" "Bruno Cantero \n" "Chen Kedem \n" + "Dave Pearson \n" "David G. Holm \n" "Eddie Runia \n" - "Felipe G. Coury \n" + "Felipe G. Coury \n" "Gonzalo A. Diethelm \n" "Ignacio Ortiz de Zuniga \n" "Janica Lubos \n" @@ -123,19 +117,15 @@ void hb_compPrintCredits( void ) "Matteo Baccan \n" "Matthew Hamilton \n" "Nicolas del Pozo \n" + "Patrick Mast \n" "Paul Tucker \n" "Peter Townsend \n" "Phil Barnett \n" "Ron Pinkas \n" "Ryszard Glab \n" + "Tim Stone \n" "Victor Szakats \n" "Vladimir Kazimirchik \n" - "\n" - "Major contributors:" - "\n" - "Dave Pearson \n" - "Patrick Mast \n" - "Tim Stone \n" ); } diff --git a/harbour/source/rtl/gtstd/gtstd.c b/harbour/source/rtl/gtstd/gtstd.c index 09e85fcd50..d423eddc7e 100644 --- a/harbour/source/rtl/gtstd/gtstd.c +++ b/harbour/source/rtl/gtstd/gtstd.c @@ -42,6 +42,7 @@ #if defined( OS_UNIX_COMPATIBLE ) #include /* read() function requires it */ + #include #endif static SHORT s_iRow; @@ -53,6 +54,10 @@ static BOOL s_bBlink; static int s_iFilenoStdout; static USHORT s_uiDispCount; +#if defined( OS_UNIX_COMPATIBLE ) +static struct termios startup_attributes; +#endif + void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr ) { HB_TRACE(HB_TR_DEBUG, ("hb_gt_Init()")); @@ -60,6 +65,22 @@ void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr ) HB_SYMBOL_UNUSED( iFilenoStdin ); HB_SYMBOL_UNUSED( iFilenoStderr ); +#if defined( OS_UNIX_COMPATIBLE ) + { + struct termios ta; + + tcgetattr( STDIN_FILENO, &startup_attributes ); + atexit( restore_input_mode ); + + tcgetattr( STDIN_FILENO, &ta ); + ta.c_lflag &= ~( ICANON | ECHO ); + ta.c_iflag &= ~ICRNL; + ta.c_cc[ VMIN ] = 0; + ta.c_cc[ VTIME ] = 0; + tcsetattr( STDIN_FILENO, TCSAFLUSH, &ta ); + } +#endif + s_uiDispCount = 0; s_iRow = 0; @@ -79,6 +100,10 @@ void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr ) void hb_gt_Exit( void ) { HB_TRACE(HB_TR_DEBUG, ("hb_gt_Exit()")); + +#if defined( OS_UNIX_COMPATIBLE ) + tcsetattr( STDIN_FILENO, TCSANOW, &startup_attributes ); +#endif } int hb_gt_ReadKey( HB_inkey_enum eventmask ) diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index c9495d18b3..8d76d9c9ab 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -636,7 +636,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) hb_stack.pPos->type = HB_IT_LONG; lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 ); - if ( lOffset > 8388607L ) + if( lOffset > 8388607L ) lOffset = ( lOffset - 16777216 ); hb_stack.pPos->item.asLong.value = w + lOffset; @@ -696,7 +696,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) * skip outside of SEQUENCE structure */ lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 ); - if ( lOffset > 8388607L ) + if( lOffset > 8388607L ) lOffset = ( lOffset - 16777216 ); w += lOffset; @@ -732,54 +732,34 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) /* Jumps */ - case HB_P_JUMPSHORT: + case HB_P_JUMPNEAR: lOffset = pCode[ w + 1 ]; - if ( lOffset > 127 ) + if( lOffset > 127 ) lOffset -= 256 ; - /* - if( lOffset ) - w += lOffset; - else - w += 2; - */ w += lOffset; break; case HB_P_JUMP: lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ); - if ( lOffset > SHRT_MAX ) + if( lOffset > SHRT_MAX ) lOffset -= 65536; - /* - if( lOffset ) - w += lOffset; - else - w += 3; - */ w += lOffset; break; case HB_P_JUMPFAR: lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 ); - if ( lOffset > 8388607L ) + if( lOffset > 8388607L ) lOffset -= 16777216L; - - /* - if( lOffset ) - w += lOffset; - else - w += 4; - */ - w += lOffset; break; - case HB_P_JUMPSHORTFALSE: + case HB_P_JUMPFALSENEAR: if( ! hb_vmPopLogical() ) { lOffset = pCode[ w + 1 ]; - if ( lOffset > 127 ) + if( lOffset > 127 ) lOffset -= 256; w += lOffset; @@ -792,7 +772,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) if( ! hb_vmPopLogical() ) { lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ); - if ( lOffset > SHRT_MAX ) + if( lOffset > SHRT_MAX ) lOffset -= 65536; w += lOffset; @@ -801,11 +781,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) w += 3; break; - case HB_P_JUMPFARFALSE: + case HB_P_JUMPFALSEFAR: if( ! hb_vmPopLogical() ) { lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 ); - if ( lOffset > 8388607L ) + if( lOffset > 8388607L ) lOffset -= 16777216L; w += lOffset; @@ -814,11 +794,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) w += 4; break; - case HB_P_JUMPSHORTTRUE: + case HB_P_JUMPTRUENEAR: if( hb_vmPopLogical() ) { lOffset = pCode[ w + 1 ]; - if ( lOffset > 127 ) + if( lOffset > 127 ) lOffset -= 256; w += lOffset; @@ -831,7 +811,7 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) if( hb_vmPopLogical() ) { lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ); - if ( lOffset > SHRT_MAX ) + if( lOffset > SHRT_MAX ) lOffset -= 65536; w += lOffset; @@ -840,11 +820,11 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) w += 3; break; - case HB_P_JUMPFARTRUE: + case HB_P_JUMPTRUEFAR: if( hb_vmPopLogical() ) { lOffset = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) + ( pCode[ w + 3 ] * 65536 ); - if ( lOffset > 8388607L ) + if( lOffset > 8388607L ) lOffset -= 16777216L; w += lOffset; @@ -856,12 +836,16 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) /* Push */ case HB_P_TRUE: - hb_vmPushLogical( TRUE ); + hb_stack.pPos->type = HB_IT_LOGICAL; + hb_stack.pPos->item.asLogical.value = TRUE; + hb_stackPush(); w++; break; case HB_P_FALSE: - hb_vmPushLogical( FALSE ); + hb_stack.pPos->type = HB_IT_LOGICAL; + hb_stack.pPos->item.asLogical.value = FALSE; + hb_stackPush(); w++; break; @@ -919,12 +903,12 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) break; case HB_P_PUSHSTR: - { - USHORT uiSize = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ); - hb_vmPushString( ( char * ) pCode + w + 3, ( ULONG ) uiSize ); - w += ( 3 + uiSize ); - } + { + USHORT uiSize = pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ); + hb_vmPushString( ( char * ) pCode + w + 3, ( ULONG ) uiSize ); + w += ( 3 + uiSize ); break; + } case HB_P_PUSHSTRSHORT: hb_vmPushString( ( char * ) pCode + w + 2, ( ULONG ) pCode[ w + 1 ] ); @@ -1161,133 +1145,133 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) /* macro compiled opcodes - we are using symbol address here */ case HB_P_MMESSAGE: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmMessage( ( *pDynSym )->pSymbol ); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmMessage( ( *pDynSym )->pSymbol ); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPOPALIASEDFIELD: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmPopAliasedField( ( *pDynSym )->pSymbol ); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmPopAliasedField( ( *pDynSym )->pSymbol ); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPOPALIASEDVAR: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmPopAliasedVar( ( *pDynSym )->pSymbol ); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmPopAliasedVar( ( *pDynSym )->pSymbol ); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPOPFIELD: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - /* Pops a value from the eval stack and uses it to set - * a new value of the given field - */ - hb_stackDec(); - hb_rddPutFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol ); - hb_itemClear( hb_stack.pPos ); - HB_TRACE(HB_TR_INFO, ("(hb_vmMPopField)")); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + /* Pops a value from the eval stack and uses it to set + * a new value of the given field + */ + hb_stackDec(); + hb_rddPutFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol ); + hb_itemClear( hb_stack.pPos ); + HB_TRACE(HB_TR_INFO, ("(hb_vmMPopField)")); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPOPMEMVAR: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_stackDec(); - hb_memvarSetValue( ( *pDynSym )->pSymbol, hb_stack.pPos ); - hb_itemClear( hb_stack.pPos ); - HB_TRACE(HB_TR_INFO, ("(hb_vmMPopMemvar)")); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_stackDec(); + hb_memvarSetValue( ( *pDynSym )->pSymbol, hb_stack.pPos ); + hb_itemClear( hb_stack.pPos ); + HB_TRACE(HB_TR_INFO, ("(hb_vmMPopMemvar)")); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHALIASEDFIELD: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmPushAliasedField( ( *pDynSym )->pSymbol ); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmPushAliasedField( ( *pDynSym )->pSymbol ); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHALIASEDVAR: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmPushAliasedVar( ( *pDynSym )->pSymbol ); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmPushAliasedVar( ( *pDynSym )->pSymbol ); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHBLOCK: - { - /*NOTE: the pcode is stored in dynamically allocated memory - * We need to handle it with more care than compile-time - * codeblocks - */ - /* +0 -> _pushblock - * +1 +2 -> size of codeblock - * +3 +4 -> number of expected parameters - * +5 -> pcode bytes - */ - hb_vmPushMacroBlock( ( BYTE * ) ( pCode + w ), pSymbols ); - w += ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ); - } + { + /*NOTE: the pcode is stored in dynamically allocated memory + * We need to handle it with more care than compile-time + * codeblocks + */ + /* +0 -> _pushblock + * +1 +2 -> size of codeblock + * +3 +4 -> number of expected parameters + * +5 -> pcode bytes + */ + hb_vmPushMacroBlock( ( BYTE * ) ( pCode + w ), pSymbols ); + w += ( pCode[ w + 1 ] + ( pCode[ w + 2 ] * 256 ) ); break; + } case HB_P_MPUSHFIELD: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - /* It pushes the current value of the given field onto the eval stack - */ - hb_rddGetFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol ); - hb_stackPush(); - HB_TRACE(HB_TR_INFO, ("(hb_vmMPushField)")); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + /* It pushes the current value of the given field onto the eval stack + */ + hb_rddGetFieldValue( hb_stack.pPos, ( *pDynSym )->pSymbol ); + hb_stackPush(); + HB_TRACE(HB_TR_INFO, ("(hb_vmMPushField)")); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHMEMVAR: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_memvarGetValue( hb_stack.pPos, ( *pDynSym )->pSymbol ); - hb_stackPush(); - HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvar)")); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_memvarGetValue( hb_stack.pPos, ( *pDynSym )->pSymbol ); + hb_stackPush(); + HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvar)")); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHMEMVARREF: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_memvarGetRefer( hb_stack.pPos, ( *pDynSym )->pSymbol ); - hb_stackPush(); - HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvarRef)")); - w += sizeof( HB_DYNS_PTR ) + 1; - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_memvarGetRefer( hb_stack.pPos, ( *pDynSym )->pSymbol ); + hb_stackPush(); + HB_TRACE(HB_TR_INFO, ("(hb_vmMPushMemvarRef)")); + w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHSYM: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmPushSymbol( ( *pDynSym )->pSymbol ); - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmPushSymbol( ( *pDynSym )->pSymbol ); w += sizeof( HB_DYNS_PTR ) + 1; break; + } case HB_P_MPUSHVARIABLE: - { - HB_DYNS_PTR *pDynSym = ( HB_DYNS_PTR *) ( pCode + w + 1 ); - hb_vmPushVariable( ( *pDynSym )->pSymbol ); - } + { + HB_DYNS_PTR * pDynSym = ( HB_DYNS_PTR * ) ( pCode + w + 1 ); + hb_vmPushVariable( ( *pDynSym )->pSymbol ); w += sizeof( HB_DYNS_PTR ) + 1; break; + } /* misc */ diff --git a/harbour/utils/hbrun/Makefile b/harbour/utils/hbrun/Makefile index 46ed2f9abc..e1a7cd166a 100644 --- a/harbour/utils/hbrun/Makefile +++ b/harbour/utils/hbrun/Makefile @@ -10,7 +10,7 @@ ROOT = ../../ PRG_SOURCES=\ hbrun.prg \ - exttools.prg \ + external.prg \ PRG_MAIN=hbrun.prg