diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 45d1594154..36c444ee17 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,39 @@ +20000409-03:48 GMT+1 Victor Szakats + + * source/rtl/gtcrs/gtcrs.c + ! New functions made static + + * source/compiler/cmdcheck.c + * Some copyright info arrangment. + + * source/common/hbver.c + % hb_verCompiler() some optimizations and streamlining mainly around + GCC flavours. + + MS "Visual" detection. + + * source/vm/fm.c + * include/hbsetup.h + * HB_FM_STATISTICS moved to the setup header. + + * contrib/linux/gcc.cf + - Removed -g from the default C switches to be in sync with the other + platforms. + + * source/rtl/diskspac.c + % Some code made common, platform specific code put in blocks. + + * contrib/rdd_ads/ace32.h + ! Fix for Win32 GCC + + * source/vm/hvm.c + * Static and global initialization all made in the startup function. + + * doc/whatsnew.txt + + Added missing version header + + * source/rtl/strcase.c + * Minor format. + 20000408-14:38 DST Paul Tucker * source/rtl/strcase.c * some compilers impliment toupper() as a macro, so toupper( pSrc++ ) diff --git a/harbour/config/linux/gcc.cf b/harbour/config/linux/gcc.cf index b5607bb842..f95c1ef389 100644 --- a/harbour/config/linux/gcc.cf +++ b/harbour/config/linux/gcc.cf @@ -13,7 +13,7 @@ CC = gcc CC_IN = -c CC_OUT = -o CPPFLAGS = -I. -I$(HB_INC_COMPILE) -CFLAGS = -Wall -g +CFLAGS = -Wall LD = gcc LD_OUT = -o diff --git a/harbour/contrib/rdd_ads/ace.h b/harbour/contrib/rdd_ads/ace.h index d7c5d3fac9..307c7bc01c 100644 --- a/harbour/contrib/rdd_ads/ace.h +++ b/harbour/contrib/rdd_ads/ace.h @@ -31,7 +31,9 @@ typedef double DOUBLE; #define EXTERN extern #define STATIC static -#if defined( WIN32 ) && !defined( ASANT ) && !defined( __BORLANDC__ ) +#if defined( __GNUC__ ) + #define ENTRYPOINT __attribute__ (( dllexport )) +#elif defined( WIN32 ) && !defined( ASANT ) && !defined( __BORLANDC__ ) #define ENTRYPOINT _declspec( dllexport ) WINAPI #elif defined( ASANLM ) || defined( ASANT ) #define ENTRYPOINT diff --git a/harbour/doc/whatsnew.txt b/harbour/doc/whatsnew.txt index eabb84e02b..b01647fd63 100644 --- a/harbour/doc/whatsnew.txt +++ b/harbour/doc/whatsnew.txt @@ -4,6 +4,8 @@ ---------------------------------------------------------------------- +Version 0.33 Build 33 (2000-04-07) + - Final cleanups on global macro and symbol names. (date*(), console*(), HB_FUNC()) - DISKSPACE() enhancements diff --git a/harbour/include/hbsetup.h b/harbour/include/hbsetup.h index 94010e6611..4daaefed58 100644 --- a/harbour/include/hbsetup.h +++ b/harbour/include/hbsetup.h @@ -81,6 +81,20 @@ */ /*#define HARBOUR_YYDEBUG*/ +/* *********************************************************************** + * If you turn this on, the memory subsystem will collect trace information + * and several statistical data about memory management, it will show + * these on exit if memory seem to have been leaked. The memory subsystem + * will also do pointer checks. [vszakats] + * This should be normally turned off in a final release. + * + * Note that if you turn this on, Harbour will be slighlty slower, larger + * and will consume more memory. + * + * By default this is turned on. +*/ +#define HB_FM_STATISTICS + /* *********************************************************************** * This symbol defines if we are trying to compile using GCC for OS/2 * diff --git a/harbour/source/common/hbver.c b/harbour/source/common/hbver.c index c56b81ae7b..2818cdb08c 100644 --- a/harbour/source/common/hbver.c +++ b/harbour/source/common/hbver.c @@ -317,6 +317,17 @@ char * hb_verCompiler( void ) iVerMajor /= 100; iVerMinor = iVerMajor % 100; +#elif defined(_MSC_VER) + + #if (_MSC_VER >= 800) + pszName = "Microsoft Visual C/C++"; + #else + pszName = "Microsoft C/C++"; + #endif + + iVerMajor = _MSC_VER / 100; + iVerMinor = _MSC_VER % 100; + #elif defined(__BORLANDC__) pszName = "Borland C++"; @@ -337,12 +348,6 @@ char * hb_verCompiler( void ) iVerMajor = __TURBOC__ >> 8; iVerMinor = __TURBOC__ & 0xFF; -#elif defined(_MSC_VER) - - pszName = "Microsoft C/C++"; - iVerMajor = _MSC_VER / 100; - iVerMinor = _MSC_VER % 100; - #elif defined(__MPW__) pszName = "MPW C"; @@ -355,31 +360,18 @@ char * hb_verCompiler( void ) iVerMajor = __WATCOMC__ / 100; iVerMinor = __WATCOMC__ % 100; -#elif defined(__DJGPP__) - - pszName = "Delorie GCC"; - iVerMajor = __GNUC__; - iVerMinor = __GNUC_MINOR__; - -#elif defined(__CYGWIN__) - - pszName = "Cygnus GCC (Cygwin)"; - iVerMajor = __GNUC__; - iVerMinor = __GNUC_MINOR__; - -#elif defined(__MINGW32__) - - pszName = hb_xgrab( 80 ); - sprintf( pszName, "Cygnus GCC (Mingw32 %g)", __MINGW32__ ); - iVerMajor = __GNUC__; - iVerMinor = __GNUC_MINOR__; - #elif defined(__GNUC__) - #if defined(__EMX__) - pszName = "GNU C/EMX C"; + #if defined(__DJGPP__) + pszName = "Delorie GCC"; + #elif defined(__CYGWIN__) + pszName = "Cygnus Cygwin GCC"; + #elif defined(__MINGW32__) + pszName = "Cygnus Mingw32 GCC"; + #elif defined(__EMX__) + pszName = "EMX GCC"; #else - pszName = "GNU C"; + pszName = "GCC"; #endif iVerMajor = __GNUC__; @@ -396,11 +388,7 @@ char * hb_verCompiler( void ) if( pszName ) sprintf( pszCompiler, "%s %d.%d", pszName, iVerMajor, iVerMinor ); else - pszCompiler[ 0 ] = '\0'; - -#if defined(__MINGW32__) - hb_xfree( pszName ); -#endif + strcpy( pszCompiler, "(unknown)" ); return pszCompiler; } diff --git a/harbour/source/compiler/cmdcheck.c b/harbour/source/compiler/cmdcheck.c index 3cd256a268..dcfaefd488 100644 --- a/harbour/source/compiler/cmdcheck.c +++ b/harbour/source/compiler/cmdcheck.c @@ -6,7 +6,7 @@ * Harbour Project source code: * Compiler command line and HARBOURCMD/CLIPPERCMD checking * - * Copyright 1999 Jose Lalin + * Copyright 1999 {list of individual authors and e-mail addresses} * www - http://www.harbour-project.org * * This program is free software; you can redistribute it and/or modify @@ -37,13 +37,14 @@ * The following parts are Copyright of the individual authors. * www - http://www.harbour-project.org * - * Copyright 1999 {list of individual authors and e-mail addresses} + * Copyright 1999 Jose Lalin + * hb_compChkCompilerSwitch() * hb_compChkEnvironVar() - * hb_compChkPaths() - * AddSearchPath() * * Copyright 1999 Victor Szakats * PackDateTime() + * hb_compChkDefineSwitch() + * hb_compChkDefines() * * See doc/license.txt for licensing terms. * diff --git a/harbour/source/rtl/diskspac.c b/harbour/source/rtl/diskspac.c index 6747110309..9267949142 100644 --- a/harbour/source/rtl/diskspac.c +++ b/harbour/source/rtl/diskspac.c @@ -73,261 +73,264 @@ HB_FUNC( DISKSPACE ) USHORT uiType = ISNUM( 2 ) ? hb_parni( 2 ) : HB_DISK_AVAIL; double dSpace = 0.0; + if( uiType > HB_DISK_TOTAL ) + uiType = HB_DISK_TOTAL; + #if defined(HB_OS_DOS) || defined(__WATCOMC__) - struct diskfree_t disk; - unsigned uiResult; - - uiType = HB_MIN( uiType, HB_DISK_TOTAL ); - - while( ( uiResult = _dos_getdiskfree( uiDrive, &disk ) ) != 0 ) { - USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); - - /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' - but if you should wish to make it so, then or EF_CANRETRY with - EF_CANDEFAULT above) - */ - - if( uiAction != E_RETRY ) - break; - } - - if( uiResult != 0 ) - { - switch( uiType ) + struct diskfree_t disk; + unsigned uiResult; + + while( ( uiResult = _dos_getdiskfree( uiDrive, &disk ) ) != 0 ) { - case HB_DISK_AVAIL: - case HB_DISK_FREE: - dSpace = ( double ) disk.avail_clusters * - ( double ) disk.sectors_per_cluster * - ( double ) disk.bytes_per_sector; - break; - - case HB_DISK_USED: - case HB_DISK_TOTAL: - dSpace = ( double ) disk.total_clusters * - ( double ) disk.sectors_per_cluster * - ( double ) disk.bytes_per_sector; - - if( uiType == HB_DISK_USED ) - dSpace -= ( double ) disk.avail_clusters * - ( double ) disk.sectors_per_cluster * - ( double ) disk.bytes_per_sector; + USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + + /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' + but if you should wish to make it so, then or EF_CANRETRY with + EF_CANDEFAULT above) + */ + + if( uiAction != E_RETRY ) break; } - + + if( uiResult != 0 ) + { + switch( uiType ) + { + case HB_DISK_AVAIL: + case HB_DISK_FREE: + dSpace = ( double ) disk.avail_clusters * + ( double ) disk.sectors_per_cluster * + ( double ) disk.bytes_per_sector; + break; + + case HB_DISK_USED: + case HB_DISK_TOTAL: + dSpace = ( double ) disk.total_clusters * + ( double ) disk.sectors_per_cluster * + ( double ) disk.bytes_per_sector; + + if( uiType == HB_DISK_USED ) + dSpace -= ( double ) disk.avail_clusters * + ( double ) disk.sectors_per_cluster * + ( double ) disk.bytes_per_sector; + break; + } + + } } #elif defined(HB_OS_WIN_32) - uiType = HB_MIN( uiType, HB_DISK_TOTAL ); - - while( TRUE ) { - - typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, - PULARGE_INTEGER, PULARGE_INTEGER); - - char szPath[ 4 ]; - P_GDFSE pGetDiskFreeSpaceEx; - UINT uiErrMode; - - /* Get the default drive */ - - if( uiDrive == 0 ) + while( TRUE ) { - USHORT uiErrorOld = hb_fsError(); - - uiDrive = hb_fsCurDrv() + 1; - - hb_fsSetError( uiErrorOld ); - } - - szPath[ 0 ] = uiDrive + 'A' - 1; - szPath[ 1 ] = ':'; - szPath[ 2 ] = '\\'; - szPath[ 3 ] = '\0'; - - uiErrMode = SetErrorMode( SEM_FAILCRITICALERRORS ); - - SetLastError( 0 ); - - pGetDiskFreeSpaceEx = ( P_GDFSE ) GetProcAddress( GetModuleHandle( "kernel32.dll" ), - "GetDiskFreeSpaceExA"); - - if( pGetDiskFreeSpaceEx ) - { - ULARGE_INTEGER i64FreeBytesToCaller, - i64TotalBytes, - i64FreeBytes, - i64RetVal; - - if( pGetDiskFreeSpaceEx( szPath, - ( PULARGE_INTEGER ) &i64FreeBytesToCaller, - ( PULARGE_INTEGER ) &i64TotalBytes, - ( PULARGE_INTEGER ) &i64FreeBytes ) ) + typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, + PULARGE_INTEGER, PULARGE_INTEGER); + + char szPath[ 4 ]; + P_GDFSE pGetDiskFreeSpaceEx; + UINT uiErrMode; + + /* Get the default drive */ + + if( uiDrive == 0 ) { - switch( uiType ) - { - case HB_DISK_AVAIL: - memcpy( &i64RetVal, &i64FreeBytesToCaller, sizeof( ULARGE_INTEGER ) ); - break; - - case HB_DISK_FREE: - memcpy( &i64RetVal, &i64FreeBytes, sizeof( ULARGE_INTEGER ) ); - break; - - case HB_DISK_USED: - case HB_DISK_TOTAL: - memcpy( &i64RetVal, &i64TotalBytes, sizeof( ULARGE_INTEGER ) ); - } - - #if defined(__GNUC__) || defined(_MSC_VER) - - dSpace = ( double ) i64RetVal.LowPart + - ( double ) i64RetVal.HighPart + - ( double ) i64RetVal.HighPart * - ( double ) 0xFFFFFFFF; - - if( uiType == HB_DISK_USED ) - { - dSpace -= ( double ) i64FreeBytes.LowPart + - ( double ) i64FreeBytes.HighPart + - ( double ) i64FreeBytes.HighPart * - ( double ) 0xFFFFFFFF; - } - - #else - - /* NOTE: Borland doesn't seem to deal with the un-named - struct that is part of ULARGE_INTEGER - [pt] */ - - dSpace = ( double ) i64RetVal.u.LowPart + - ( double ) i64RetVal.u.HighPart + - ( double ) i64RetVal.u.HighPart * - ( double ) 0xFFFFFFFF; - - if( uiType == HB_DISK_USED ) - { - dSpace -= ( double ) i64FreeBytes.u.LowPart + - ( double ) i64FreeBytes.u.HighPart + - ( double ) i64FreeBytes.u.HighPart * - ( double ) 0xFFFFFFFF; - } - - #endif + USHORT uiErrorOld = hb_fsError(); + + uiDrive = hb_fsCurDrv() + 1; + + hb_fsSetError( uiErrorOld ); } - } - else - { - DWORD dwSectorsPerCluster; - DWORD dwBytesPerSector; - DWORD dwNumberOfFreeClusters; - DWORD dwTotalNumberOfClusters; - + + szPath[ 0 ] = uiDrive + 'A' - 1; + szPath[ 1 ] = ':'; + szPath[ 2 ] = '\\'; + szPath[ 3 ] = '\0'; + + uiErrMode = SetErrorMode( SEM_FAILCRITICALERRORS ); + SetLastError( 0 ); - - if( GetDiskFreeSpace( szPath, - &dwSectorsPerCluster, - &dwBytesPerSector, - &dwNumberOfFreeClusters, - &dwTotalNumberOfClusters ) ) + + pGetDiskFreeSpaceEx = ( P_GDFSE ) GetProcAddress( GetModuleHandle( "kernel32.dll" ), + "GetDiskFreeSpaceExA"); + + if( pGetDiskFreeSpaceEx ) { - switch( uiType ) + ULARGE_INTEGER i64FreeBytesToCaller, + i64TotalBytes, + i64FreeBytes, + i64RetVal; + + if( pGetDiskFreeSpaceEx( szPath, + ( PULARGE_INTEGER ) &i64FreeBytesToCaller, + ( PULARGE_INTEGER ) &i64TotalBytes, + ( PULARGE_INTEGER ) &i64FreeBytes ) ) { - case HB_DISK_AVAIL: - case HB_DISK_FREE: - dSpace = ( double ) dwNumberOfFreeClusters * - ( double ) dwSectorsPerCluster * - ( double ) dwBytesPerSector; - break; - - case HB_DISK_USED: - case HB_DISK_TOTAL: - dSpace = ( double ) dwTotalNumberOfClusters * - ( double ) dwSectorsPerCluster * - ( double ) dwBytesPerSector; - + switch( uiType ) + { + case HB_DISK_AVAIL: + memcpy( &i64RetVal, &i64FreeBytesToCaller, sizeof( ULARGE_INTEGER ) ); + break; + + case HB_DISK_FREE: + memcpy( &i64RetVal, &i64FreeBytes, sizeof( ULARGE_INTEGER ) ); + break; + + case HB_DISK_USED: + case HB_DISK_TOTAL: + memcpy( &i64RetVal, &i64TotalBytes, sizeof( ULARGE_INTEGER ) ); + } + + #if defined(__GNUC__) || defined(_MSC_VER) + + dSpace = ( double ) i64RetVal.LowPart + + ( double ) i64RetVal.HighPart + + ( double ) i64RetVal.HighPart * + ( double ) 0xFFFFFFFF; + if( uiType == HB_DISK_USED ) - dSpace -= ( double ) dwNumberOfFreeClusters * + { + dSpace -= ( double ) i64FreeBytes.LowPart + + ( double ) i64FreeBytes.HighPart + + ( double ) i64FreeBytes.HighPart * + ( double ) 0xFFFFFFFF; + } + + #else + + /* NOTE: Borland doesn't seem to deal with the un-named + struct that is part of ULARGE_INTEGER + [pt] */ + + dSpace = ( double ) i64RetVal.u.LowPart + + ( double ) i64RetVal.u.HighPart + + ( double ) i64RetVal.u.HighPart * + ( double ) 0xFFFFFFFF; + + if( uiType == HB_DISK_USED ) + { + dSpace -= ( double ) i64FreeBytes.u.LowPart + + ( double ) i64FreeBytes.u.HighPart + + ( double ) i64FreeBytes.u.HighPart * + ( double ) 0xFFFFFFFF; + } + + #endif + } + } + else + { + DWORD dwSectorsPerCluster; + DWORD dwBytesPerSector; + DWORD dwNumberOfFreeClusters; + DWORD dwTotalNumberOfClusters; + + SetLastError( 0 ); + + if( GetDiskFreeSpace( szPath, + &dwSectorsPerCluster, + &dwBytesPerSector, + &dwNumberOfFreeClusters, + &dwTotalNumberOfClusters ) ) + { + switch( uiType ) + { + case HB_DISK_AVAIL: + case HB_DISK_FREE: + dSpace = ( double ) dwNumberOfFreeClusters * + ( double ) dwSectorsPerCluster * + ( double ) dwBytesPerSector; + break; + + case HB_DISK_USED: + case HB_DISK_TOTAL: + dSpace = ( double ) dwTotalNumberOfClusters * ( double ) dwSectorsPerCluster * ( double ) dwBytesPerSector; - break; - + + if( uiType == HB_DISK_USED ) + dSpace -= ( double ) dwNumberOfFreeClusters * + ( double ) dwSectorsPerCluster * + ( double ) dwBytesPerSector; + break; + + } } } + + SetErrorMode( uiErrMode ); + + if( GetLastError() != 0 ) + { + USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + + /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' + but if you should wish to make it so, then or EF_CANRETRY + with EF_CANDEFAULT above) + */ + + if( uiAction == E_RETRY ) + continue; + } + break; } - - SetErrorMode( uiErrMode ); - - if( GetLastError() != 0 ) - { - USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); - - /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' - but if you should wish to make it so, then or EF_CANRETRY - with EF_CANDEFAULT above) - */ - - if( uiAction == E_RETRY ) - continue; - } - break; } #elif defined(HB_OS_OS2) - struct _FSALLOCATE fsa; - USHORT rc; - - uiType = HB_MIN( uiType, HB_DISK_TOTAL ); - - /* Query level 1 info from filesystem */ - while( ( rc = DosQueryFSInfo(uiDrive, 1, &fsa, sizeof(fsa)) ) != 0 ) { - USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); - - /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' - but if you should wish to make it so, then or EF_CANRETRY with - EF_CANDEFAULT above) - */ - - if( uiAction != E_RETRY ) - break; - } - - if(rc == 0) - { - switch( uiType ) + struct _FSALLOCATE fsa; + USHORT rc; + + /* Query level 1 info from filesystem */ + while( ( rc = DosQueryFSInfo( uiDrive, 1, &fsa, sizeof( fsa )) ) != 0 ) { - case HB_DISK_AVAIL: - case HB_DISK_FREE: - dSpace = ( double ) fsa.cUnitAvail * - ( double ) fsa.cSectorUnit * - ( double ) fsa.cbSector; - break; - - case HB_DISK_USED: - case HB_DISK_TOTAL: - dSpace = ( double ) fsa.cUnit * - ( double ) fsa.cSectorUnit * - ( double ) fsa.cbSector; - - if( uiType == HB_DISK_USED ) - dSpace -= ( double ) fsa.cUnitAvail * - ( double ) fsa.cSectorUnit * - ( double ) fsa.cbSector; + USHORT uiAction = hb_errRT_BASE_Ext1( EG_OPEN, 2018, NULL, NULL, 0, EF_CANDEFAULT ); + + /* NOTE: Under 'Standard' behaviour, this error does not allow 'retry' + but if you should wish to make it so, then or EF_CANRETRY with + EF_CANDEFAULT above) + */ + + if( uiAction != E_RETRY ) break; } - + + if( rc == 0 ) + { + switch( uiType ) + { + case HB_DISK_AVAIL: + case HB_DISK_FREE: + dSpace = ( double ) fsa.cUnitAvail * + ( double ) fsa.cSectorUnit * + ( double ) fsa.cbSector; + break; + + case HB_DISK_USED: + case HB_DISK_TOTAL: + dSpace = ( double ) fsa.cUnit * + ( double ) fsa.cSectorUnit * + ( double ) fsa.cbSector; + + if( uiType == HB_DISK_USED ) + dSpace -= ( double ) fsa.cUnitAvail * + ( double ) fsa.cSectorUnit * + ( double ) fsa.cbSector; + break; + } + } } #else - HB_SYMBOL_UNUSED( uiDrive ); - HB_SYMBOL_UNUSED( uiType ); + { + HB_SYMBOL_UNUSED( uiDrive ); + HB_SYMBOL_UNUSED( uiType ); + } #endif diff --git a/harbour/source/rtl/gtcrs/gtcrs.c b/harbour/source/rtl/gtcrs/gtcrs.c index 8376e9483a..c41c004703 100644 --- a/harbour/source/rtl/gtcrs/gtcrs.c +++ b/harbour/source/rtl/gtcrs/gtcrs.c @@ -46,8 +46,8 @@ static void gt_GetMaxRC(int* r, int* c); static void gt_GetRC(int* r, int* c); static void gt_SetRC(int r, int c); -void hb_gt_Add_terminfo_keymap( int, char * ); -void hb_gt_Add_keymap( int, char * ); +static void hb_gt_Add_terminfo_keymap( int, char * ); +static void hb_gt_Add_keymap( int, char * ); /* max number of characters in a keymapped string */ #define HB_MAX_KEYMAP_CHARS 8 @@ -570,7 +570,7 @@ USHORT hb_gt_DispCount() return s_uiDispCount; } -void hb_gt_Add_keymap( int InkeyCode, char *key_string ) +static void hb_gt_Add_keymap( int InkeyCode, char *key_string ) { struct key_map_struc *keymap; int iLength = strlen( key_string ); @@ -602,7 +602,7 @@ void hb_gt_Add_keymap( int InkeyCode, char *key_string ) } } -void hb_gt_Add_terminfo_keymap( int InkeyCode, char *capname ) +static void hb_gt_Add_terminfo_keymap( int InkeyCode, char *capname ) { char * code; diff --git a/harbour/source/rtl/strcase.c b/harbour/source/rtl/strcase.c index a52bb119f8..083a3b92c1 100644 --- a/harbour/source/rtl/strcase.c +++ b/harbour/source/rtl/strcase.c @@ -76,7 +76,7 @@ char * hb_strncpyUpper( char * pDest, const char * pSource, ULONG ulLen ) { /* some compilers impliment toupper as a macro, and this has side effects! */ /* *pDest++ = toupper( *pSource++ ); */ - pDest[ulLen] = toupper( pSource[ulLen] ); + pDest[ ulLen ] = toupper( pSource[ ulLen ] ); } return pDest; diff --git a/harbour/source/vm/fm.c b/harbour/source/vm/fm.c index 86c48bec8d..fe6392149e 100644 --- a/harbour/source/vm/fm.c +++ b/harbour/source/vm/fm.c @@ -49,13 +49,6 @@ * */ -/* NOTE: If you turn this on, the memory subsystem will collect information - and several statistical data about memory management, it will show - these on exit if memory seem to have been leaked. - This should be normally turned off in a final release - [vszakats] */ -#define HB_FM_STATISTICS - #define HB_OS_WIN_32_USED #ifndef __MPW__ diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 96d1873dbe..52c8fd3cbd 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -210,16 +210,16 @@ HB_SYMB hb_symEval = { "__EVAL", HB_FS_PUBLIC, hb_vmDoBlock, NULL }; /* symbol static HB_ITEM s_aStatics; /* Harbour array to hold all application statics variables */ static PHB_SYMB s_pSymStart = NULL; /* start symbol of the application. MAIN() is not required */ static PSYMBOLS s_pSymbols = NULL; /* to hold a linked list of all different modules symbol tables */ -static BYTE s_byErrorLevel = 0; /* application exit errorlevel */ +static BYTE s_byErrorLevel; /* application exit errorlevel */ -static BOOL s_bDebugging = FALSE; -static BOOL s_bDebugShowLines = FALSE; /* update source code line on the debugger display */ -static BOOL s_bDebuggerIsWorking = FALSE; /* to know when __DBGENTRY is beeing invoked */ +static BOOL s_bDebugging; +static BOOL s_bDebugShowLines; /* update source code line on the debugger display */ +static BOOL s_bDebuggerIsWorking; /* to know when __DBGENTRY is beeing invoked */ /* Stores the position on the stack of current SEQUENCE envelope or 0 if no * SEQUENCE is active */ -static LONG s_lRecoverBase = 0; +static LONG s_lRecoverBase; #define HB_RECOVER_STATE -1 #define HB_RECOVER_BASE -2 #define HB_RECOVER_ADDRESS -3 @@ -227,7 +227,7 @@ static LONG s_lRecoverBase = 0; /* Request for some action - stop processing of opcodes */ -static USHORT s_uiActionRequest = 0; +static USHORT s_uiActionRequest; /* application entry point */ @@ -236,7 +236,15 @@ void hb_vmInit( BOOL bStartMainProc ) HB_TRACE(HB_TR_DEBUG, ("hb_vmInit()")); /* initialize internal data structures */ + s_aStatics.type = HB_IT_NIL; + s_byErrorLevel = 0; + s_bDebugging = FALSE; + s_bDebugShowLines = FALSE; + s_bDebuggerIsWorking = FALSE; + s_lRecoverBase = 0; + s_uiActionRequest = 0; + hb_stack.pItems = NULL; /* keep this here as it is used by fm.c */ hb_stack.Return.type = HB_IT_NIL;