diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 9751dbffeb..76ae916443 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,84 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ + + * harbour/source/rtl/math.c + ! fixed possible memory leak + * indenting + + * harbour/source/vm/classes.c + ! fixed possible GPF in __GETMSGPRF + * use only one function for method name hashing + + * harbour/source/vm/hvm.c + * minor fix + +2006-06-17 00:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbcomp.h + + added extern hb_comp_szFile + + * harbour/include/hbinit.h + * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() respecting + Mindaugas suggestion. + + added HB_INIT_SYMBOLS_EX_END() macro + * translate HB_INIT_SYMBOLS_END() macro to HB_INIT_SYMBOLS_EX_END() + + * harbour/include/hbsetup.h + + added HB_PCODE_VER_MIN and HB_PCODE_VER both now are set to 0x0001 + + * harbour/include/hbtypes.h + * changed VM_PROCESS_SYMBOLS_EXT to VM_PROCESS_SYMBOLS_EX + + * harbour/include/hbvm.h + + added hb_vmFindModuleSymbolName() - it returns the file name of given + symbol if it was registered in HVM + + * harbour/source/compiler/genc.c + * set HB_FS_LOCAL for local module functions + * use HB_INIT_SYMBOLS_EX_END instead of HB_INIT_SYMBOLS_END + + * harbour/source/compiler/harbour.c + * minor modifications + + * harbour/contrib/rdd_ads/ads1.c + * harbour/source/rdd/dbf1.c + * harbour/source/rdd/delim1.c + * harbour/source/rdd/sdf1.c + * harbour/source/rdd/dbfdbt/dbfdbt1.c + * harbour/source/rdd/dbffpt/dbffpt1.c + * harbour/source/rdd/dbfcdx/dbfcdx1.c + * added HB_FS_LOCAL to function symbols in registered symbol tables + + * harbour/source/rdd/dbfntx/dbfntx1.c + * added HB_FS_LOCAL to function symbols in registered symbol tables + ! added missing break + + added DBOI_KEYCOUNTRAW, DBOI_KEYNORAW. They works like DBOI_KEYCOUNT + and DBOI_KEYNO in pure DBFNTX. Only with some upper level RDDs like + RMDBFNTX which supports bit map filters they can return differ results. + + * harbour/source/rdd/workarea.c + * changed ORDERINFO to DBORDERINFO in error message + + * harbour/source/rtl/set.c + * respect previous settings in logical SETs if given value is not valid + new one. + + added misinf initialization for _SET_FORCEOPT and _SET_HARDCOMMIT. + * changed default value of _SET_OPTIMIZE to TRUE + + * harbour/source/vm/dynsym.c + * give the highest priority for LOCAL function symbols + + * harbour/source/vm/hvm.c + + added hb_vmFindModuleSymbolName() - it returns the file name of given + symbol if it was registered in HVM + * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() and added + PCOE version checking + + * harbour/source/vm/maindllp.c + * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() + * changed VM_PROCESS_SYMBOLS_EXT to VM_PROCESS_SYMBOLS_EX + + * harbour/source/vm/proc.c * changed to use stack macros/functions instead of direct accessing HB_STACK members + implemented PROCFILE() - it returns now real source file name diff --git a/harbour/contrib/rdd_ads/ads1.c b/harbour/contrib/rdd_ads/ads1.c index 75b0493015..9b427f3c45 100644 --- a/harbour/contrib/rdd_ads/ads1.c +++ b/harbour/contrib/rdd_ads/ads1.c @@ -4572,11 +4572,11 @@ static void hb_adsRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( ads1__InitSymbols ) -{ "ADS", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADS )}, NULL }, -{ "ADS_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADS_GETFUNCTABLE )}, NULL }, -{ "ADT_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADT_GETFUNCTABLE )}, NULL }, -{ "ADSNTX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADSNTX_GETFUNCTABLE )}, NULL }, -{ "ADSCDX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADSCDX_GETFUNCTABLE )}, NULL } +{ "ADS", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADS )}, NULL }, +{ "ADS_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADS_GETFUNCTABLE )}, NULL }, +{ "ADT_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADT_GETFUNCTABLE )}, NULL }, +{ "ADSNTX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADSNTX_GETFUNCTABLE )}, NULL }, +{ "ADSCDX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADSCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( ads1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_ads_rdd_init_ ) diff --git a/harbour/include/hbcomp.h b/harbour/include/hbcomp.h index e6675054c0..ce76f9a552 100644 --- a/harbour/include/hbcomp.h +++ b/harbour/include/hbcomp.h @@ -589,6 +589,8 @@ extern int hb_comp_iLinePRG; extern ULONG hb_comp_Supported; +extern char * hb_comp_szFile; + /* table with PCODEs' length */ extern const BYTE hb_comp_pcode_len[]; diff --git a/harbour/include/hbinit.h b/harbour/include/hbinit.h index b0c942d666..ef897cbc8b 100644 --- a/harbour/include/hbinit.h +++ b/harbour/include/hbinit.h @@ -58,7 +58,7 @@ HB_EXTERN_BEGIN extern HB_EXPORT PHB_SYMB hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ); /* old module symbols initialization */ -extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ); /* module symbols initialization with extended information */ +extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeVer ); /* module symbols initialization with extended information */ #if defined(_MSC_VER) && !defined(_WIN64) && \ !defined(__LCC__) && !defined(__POCC__) && !defined(__XCC__) && \ @@ -84,18 +84,19 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #endif +#define HB_INIT_SYMBOLS_END( func ) HB_INIT_SYMBOLS_EX_END( func, __FILE__, 0L, 0x0000 ) #if defined(HARBOUR_STRICT_ANSI_C) #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ void func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ } #define HB_CALL_ON_STARTUP_BEGIN( func ) \ @@ -114,12 +115,12 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ static void __attribute__ ((constructor)) func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ } #define HB_CALL_ON_STARTUP_BEGIN( func ) \ @@ -136,12 +137,12 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ static int func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ return 0; \ } @@ -166,9 +167,9 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ - static PHB_SYMB symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + static PHB_SYMB symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ #define HB_CALL_ON_STARTUP_BEGIN( func ) \ static int func( void ) \ @@ -198,12 +199,12 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ static void func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ } #define HB_CALL_ON_STARTUP_BEGIN( func ) \ diff --git a/harbour/include/hbsetup.h b/harbour/include/hbsetup.h index 7023db53c8..a9c804460f 100644 --- a/harbour/include/hbsetup.h +++ b/harbour/include/hbsetup.h @@ -60,6 +60,14 @@ */ #include "hbsetup.ch" +/* *********************************************************************** + * Define PCODE version number + * HB_PCODE_VER_MIN define minimum supported PCODE by HVM + */ + +#define HB_PCODE_VER 0x0001 +#define HB_PCODE_VER_MIN 0x0001 + /* *********************************************************************** * NOTE: You can select the default language modul used by Harbour, by * defining this to a valid language modul identifier. diff --git a/harbour/include/hbtypes.h b/harbour/include/hbtypes.h index 3724539332..f29b9865ea 100644 --- a/harbour/include/hbtypes.h +++ b/harbour/include/hbtypes.h @@ -62,7 +62,7 @@ typedef PHB_SYMB ( * VM_PROCESS_DLL_SYMBOLS ) ( PHB_SYMB pModuleSymbols, USHORT uiModuleSymbols ); -typedef PHB_SYMB ( * VM_PROCESS_SYMBOLS_EXT ) +typedef PHB_SYMB ( * VM_PROCESS_SYMBOLS_EX ) ( PHB_SYMB pModuleSymbols, USHORT uiModuleSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ); diff --git a/harbour/include/hbvm.h b/harbour/include/hbvm.h index 93db7ee66e..79f55bd0df 100644 --- a/harbour/include/hbvm.h +++ b/harbour/include/hbvm.h @@ -70,7 +70,7 @@ extern HB_EXPORT void hb_vmAtExit( HB_INIT_FUNC pFunc, void * cargo ); /* Harbour virtual machine functions */ extern HB_EXPORT void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ); /* old module symbols initialization */ -extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ); /* module symbols initialization with extended information */ +extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeVer ); /* module symbols initialization with extended information */ #ifdef _HB_API_INTERNAL_ typedef struct _HB_SYMBOLS @@ -92,6 +92,8 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy extern void hb_vmBeginSymbolGroup( void * hDynLib, BOOL fClone ); extern void hb_vmInitSymbolGroup( void * hNewDynLib, int argc, char * argv[] ); extern void hb_vmExitSymbolGroup( void * hDynLib ); + extern char * hb_vmFindModuleSymbolName( PHB_SYMB pSym ); + #endif extern HB_EXPORT void hb_vmSymbolInit_RT( void ); /* initialization of runtime support symbols */ diff --git a/harbour/source/compiler/genc.c b/harbour/source/compiler/genc.c index f862a0b956..e192de222d 100644 --- a/harbour/source/compiler/genc.c +++ b/harbour/source/compiler/genc.c @@ -36,7 +36,7 @@ extern void hb_compGenCRealCode( PFUNCTION pFunc, FILE * yyc ); static void hb_compGenCReadable( PFUNCTION pFunc, FILE * yyc ); static void hb_compGenCCompact( PFUNCTION pFunc, FILE * yyc ); static void hb_compGenCFunc( FILE *yyc, char *cDecor, char *szName, int iStrip ); -static void hb_writeEndInit( FILE* yyc, char * szModulname ); +static void hb_writeEndInit( FILE* yyc, char * szModulname, char * szSourceFile ); /* helper structure to pass information */ typedef struct HB_stru_genc_info @@ -64,6 +64,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou BOOL bIsExitFunction ; BOOL bIsStaticVariable ; + hb_fsFNameMerge( szFileName, pFileName ); if( ! pFileName->szExtension ) pFileName->szExtension = ".c"; hb_fsFNameMerge( szFileName, pFileName ); @@ -177,7 +178,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou * we are using these two bits to mark the special function used to * initialize static variables */ - fprintf( yyc, "{ \"%s\", {HB_FS_INITEXIT}, {hb_INITSTATICS}, NULL }", pSym->szName ); /* NOTE: hb_ intentionally in lower case */ + fprintf( yyc, "{ \"%s\", {HB_FS_INITEXIT|HB_FS_LOCAL}, {hb_INITSTATICS}, NULL }", pSym->szName ); /* NOTE: hb_ intentionally in lower case */ } else { @@ -208,6 +209,8 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou external called function */ if( pSym->bFunc && hb_compFunctionFind( pSym->szName ) ) /* is it a function defined in this module */ { + fprintf( yyc, " | HB_FS_LOCAL" ); + if( pSym->cScope & HB_FS_INIT ) hb_compGenCFunc( yyc, "}, {HB_INIT_FUNCNAME( %s )}, NULL }", pSym->szName, 1 ); else if( pSym->cScope & HB_FS_EXIT ) @@ -227,7 +230,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou pSym = pSym->pNext; } - hb_writeEndInit( yyc, szModulname ); + hb_writeEndInit( yyc, szModulname, hb_comp_szFile ); /* Generate functions data */ @@ -311,10 +314,17 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou printf( "Done.\n" ); } -static void hb_writeEndInit( FILE* yyc, char * szModulname ) +static void hb_writeEndInit( FILE* yyc, char * szModulname, char * szSourceFile ) { - fprintf( yyc, "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n\n" - "#if defined(HB_PRAGMA_STARTUP)\n" +/* + HB_SYMBOL_UNUSED( szSourceFile ); + fprintf( yyc, "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n\n", + hb_comp_szPrefix, szModulname ); +*/ + fprintf( yyc, "\nHB_INIT_SYMBOLS_EX_END( hb_vm_SymbolInit_%s%s, \"%s\", 0x%lx, 0x%04x )\n\n", + hb_comp_szPrefix, szModulname, szSourceFile, 0L, HB_PCODE_VER ); + + fprintf( yyc, "#if defined(HB_PRAGMA_STARTUP)\n" " #pragma startup hb_vm_SymbolInit_%s%s\n" "#elif defined(HB_MSC_STARTUP)\n" " #if _MSC_VER >= 1010\n" @@ -330,7 +340,6 @@ static void hb_writeEndInit( FILE* yyc, char * szModulname ) "#endif\n\n", hb_comp_szPrefix, szModulname, hb_comp_szPrefix, szModulname, - hb_comp_szPrefix, szModulname, hb_comp_szPrefix, szModulname ); } diff --git a/harbour/source/compiler/harbour.c b/harbour/source/compiler/harbour.c index a2176f6ab6..f0183d1700 100644 --- a/harbour/source/compiler/harbour.c +++ b/harbour/source/compiler/harbour.c @@ -110,7 +110,7 @@ char * hb_comp_szFromClass; PCOMDECLARED hb_comp_pLastMethod; int hb_comp_iLine; /* currently processed line number (globaly) */ -char * hb_comp_szFile; /* File Name of last compiled line */ +char * hb_comp_szFile; /* Source file name of compiled module */ PFUNCTION hb_comp_pInitFunc; PHB_FNAME hb_comp_pFileName = NULL; PHB_FNAME hb_comp_pFilePpo = NULL; @@ -4809,8 +4809,8 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] ) if( hb_comp_pFileName->szName ) { - char szFileName[ _POSIX_PATH_MAX ]; /* filename to parse */ - char szPpoName[ _POSIX_PATH_MAX ]; + char szFileName[ _POSIX_PATH_MAX + 1 ]; /* filename to parse */ + char szPpoName[ _POSIX_PATH_MAX + 1 ]; if( !hb_comp_pFileName->szExtension ) hb_comp_pFileName->szExtension = ".prg"; diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index 450e7bc161..19a079f206 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -4359,7 +4359,6 @@ static ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P case RDDI_ISDBF: case RDDI_CANPUTREC: case RDDI_LOCAL: - case RDDI_LARGEFILE: hb_itemPutL( pItem, TRUE ); break; @@ -4474,8 +4473,8 @@ static void hb_dbfRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbf1__InitSymbols ) -{ "_DBF", {HB_FS_PUBLIC}, {HB_FUNCNAME( _DBF )}, NULL }, -{ "DBF_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBF_GETFUNCTABLE )}, NULL } +{ "_DBF", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( _DBF )}, NULL }, +{ "DBF_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBF_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbf1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbf_rdd_init_ ) diff --git a/harbour/source/rdd/dbfcdx/dbfcdx1.c b/harbour/source/rdd/dbfcdx/dbfcdx1.c index ff1bb9ed9d..a6dd50dc66 100644 --- a/harbour/source/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/source/rdd/dbfcdx/dbfcdx1.c @@ -9318,8 +9318,8 @@ static void hb_dbfcdxRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfcdx1__InitSymbols ) -{ "SIXCDX", {HB_FS_PUBLIC}, {HB_FUNCNAME( SIXCDX )}, NULL }, -{ "SIXCDX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( SIXCDX_GETFUNCTABLE )}, NULL } +{ "SIXCDX", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SIXCDX )}, NULL }, +{ "SIXCDX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SIXCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfcdx1__InitSymbols ) #else @@ -9382,8 +9382,8 @@ static void hb_dbfcdxRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfcdx1__InitSymbols ) -{ "DBFCDX", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFCDX )}, NULL }, -{ "DBFCDX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFCDX_GETFUNCTABLE )}, NULL } +{ "DBFCDX", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFCDX )}, NULL }, +{ "DBFCDX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfcdx1__InitSymbols ) #endif diff --git a/harbour/source/rdd/dbfdbt/dbfdbt1.c b/harbour/source/rdd/dbfdbt/dbfdbt1.c index c06f41b68d..a033bc4713 100644 --- a/harbour/source/rdd/dbfdbt/dbfdbt1.c +++ b/harbour/source/rdd/dbfdbt/dbfdbt1.c @@ -849,8 +849,8 @@ static void hb_dbfdbtRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfdbt1__InitSymbols ) -{ "DBFDBT", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFDBT )}, NULL }, -{ "DBFDBT_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFDBT_GETFUNCTABLE )}, NULL } +{ "DBFDBT", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFDBT )}, NULL }, +{ "DBFDBT_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFDBT_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfdbt1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbfdbt_rdd_init_ ) diff --git a/harbour/source/rdd/dbffpt/dbffpt1.c b/harbour/source/rdd/dbffpt/dbffpt1.c index 17d5844212..02781f42e4 100644 --- a/harbour/source/rdd/dbffpt/dbffpt1.c +++ b/harbour/source/rdd/dbffpt/dbffpt1.c @@ -4748,10 +4748,10 @@ static void hb_dbffptRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbffpt1__InitSymbols ) -{ "DBFFPT", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFFPT )}, NULL }, -{ "DBFFPT_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFFPT_GETFUNCTABLE )}, NULL }, -{ "DBFBLOB", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFBLOB )}, NULL }, -{ "DBFBLOB_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFBLOB_GETFUNCTABLE )}, NULL } +{ "DBFFPT", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFFPT )}, NULL }, +{ "DBFFPT_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFFPT_GETFUNCTABLE )}, NULL }, +{ "DBFBLOB", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFBLOB )}, NULL }, +{ "DBFBLOB_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFBLOB_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbffpt1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbffpt_rdd_init_ ) diff --git a/harbour/source/rdd/dbfntx/dbfntx1.c b/harbour/source/rdd/dbfntx/dbfntx1.c index ef35f30c67..8a0f9860d7 100644 --- a/harbour/source/rdd/dbfntx/dbfntx1.c +++ b/harbour/source/rdd/dbfntx/dbfntx1.c @@ -6743,9 +6743,11 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo hb_itemPutC( pInfo->itmResult, pTag->Owner->IndexName ); break; case DBOI_KEYCOUNT: + case DBOI_KEYCOUNTRAW: hb_itemPutNL( pInfo->itmResult, hb_ntxOrdKeyCount( pTag ) ); break; case DBOI_POSITION: + case DBOI_KEYNORAW: if( hb_itemType( pInfo->itmNewVal ) & HB_IT_NUMERIC ) hb_itemPutL( pInfo->itmResult, hb_ntxOrdKeyGoto( pTag, hb_itemGetNL( pInfo->itmNewVal ) ) ); @@ -6880,6 +6882,7 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo hb_ntxTagClearScope( pTag, 1 ); if( pInfo->itmResult ) hb_itemClear( pInfo->itmResult ); + break; case DBOI_KEYADD: if( pTag->Owner->fReadonly ) { @@ -7656,8 +7659,8 @@ static void hb_dbfntxRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfntx1__InitSymbols ) -{ "DBFNTX", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFNTX )}, NULL }, -{ "DBFNTX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFNTX_GETFUNCTABLE )}, NULL } +{ "DBFNTX", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFNTX )}, NULL }, +{ "DBFNTX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFNTX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfntx1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbfntx_rdd_init_ ) diff --git a/harbour/source/rdd/delim1.c b/harbour/source/rdd/delim1.c index 6e024a25b7..b566270b05 100644 --- a/harbour/source/rdd/delim1.c +++ b/harbour/source/rdd/delim1.c @@ -1340,7 +1340,6 @@ static ERRCODE hb_delimRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, { case RDDI_CANPUTREC: case RDDI_LOCAL: - case RDDI_LARGEFILE: hb_itemPutL( pItem, TRUE ); break; @@ -1502,8 +1501,8 @@ static void hb_delimRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( delim1__InitSymbols ) -{ "DELIM", {HB_FS_PUBLIC}, {HB_FUNCNAME( DELIM )}, NULL }, -{ "DELIM_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DELIM_GETFUNCTABLE )}, NULL } +{ "DELIM", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DELIM )}, NULL }, +{ "DELIM_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DELIM_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( delim1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_delim_rdd_init_ ) diff --git a/harbour/source/rdd/sdf1.c b/harbour/source/rdd/sdf1.c index 1b905debf3..89c319284c 100644 --- a/harbour/source/rdd/sdf1.c +++ b/harbour/source/rdd/sdf1.c @@ -1110,7 +1110,6 @@ static ERRCODE hb_sdfRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P { case RDDI_CANPUTREC: case RDDI_LOCAL: - case RDDI_LARGEFILE: hb_itemPutL( pItem, TRUE ); break; @@ -1266,8 +1265,8 @@ static void hb_sdfRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( sdf1__InitSymbols ) -{ "SDF", {HB_FS_PUBLIC}, {HB_FUNCNAME( SDF )}, NULL }, -{ "SDF_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( SDF_GETFUNCTABLE )}, NULL } +{ "SDF", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SDF )}, NULL }, +{ "SDF_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SDF_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( sdf1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_sdf_rdd_init_ ) diff --git a/harbour/source/rdd/workarea.c b/harbour/source/rdd/workarea.c index feea968f6b..49b8a1eca6 100644 --- a/harbour/source/rdd/workarea.c +++ b/harbour/source/rdd/workarea.c @@ -719,7 +719,7 @@ ERRCODE hb_waOrderInfo( AREAP pArea, USHORT index, LPDBORDERINFO param ) HB_SYMBOL_UNUSED( index ); HB_SYMBOL_UNUSED( param ); - hb_errRT_DBCMD( EG_ARG, EDBCMD_BADPARAMETER, NULL, "ORDERINFO" ); + hb_errRT_DBCMD( EG_ARG, EDBCMD_BADPARAMETER, NULL, "DBORDERINFO" ); return FAILURE; } #endif diff --git a/harbour/source/rtl/set.c b/harbour/source/rtl/set.c index 537f77d4d8..e89ac2d556 100644 --- a/harbour/source/rtl/set.c +++ b/harbour/source/rtl/set.c @@ -104,9 +104,9 @@ static char set_char( PHB_ITEM pItem, char oldChar ) return newChar; } -static BOOL set_logical( PHB_ITEM pItem ) +static BOOL set_logical( PHB_ITEM pItem, BOOL bDefault ) { - BOOL bLogical = FALSE; + BOOL bLogical = bDefault; HB_TRACE(HB_TR_DEBUG, ("set_logical(%p)", pItem)); @@ -421,7 +421,7 @@ HB_FUNC( SET ) { case HB_SET_ALTERNATE : hb_retl( hb_set.HB_SET_ALTERNATE ); - if( args > 1 ) hb_set.HB_SET_ALTERNATE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_ALTERNATE = set_logical( pArg2, hb_set.HB_SET_ALTERNATE ); break; case HB_SET_ALTFILE : if( hb_set.HB_SET_ALTFILE ) hb_retc( hb_set.HB_SET_ALTFILE ); @@ -441,7 +441,7 @@ HB_FUNC( SET ) hb_set.HB_SET_ALTFILE = set_string( pArg2, hb_set.HB_SET_ALTFILE ); } } - if( args > 2 ) bFlag = set_logical( pArg3 ); + if( args > 2 ) bFlag = set_logical( pArg3, FALSE ); else bFlag = FALSE; if( args > 1 ) { @@ -454,7 +454,7 @@ HB_FUNC( SET ) break; case HB_SET_AUTOPEN : hb_retl( hb_set.HB_SET_AUTOPEN ); - if( args > 1 ) hb_set.HB_SET_AUTOPEN = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_AUTOPEN = set_logical( pArg2, hb_set.HB_SET_AUTOPEN ); break; case HB_SET_AUTORDER : hb_retni( hb_set.HB_SET_AUTORDER ); @@ -478,22 +478,22 @@ HB_FUNC( SET ) break; case HB_SET_BELL : hb_retl( hb_set.HB_SET_BELL ); - if( args > 1 ) hb_set.HB_SET_BELL = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_BELL = set_logical( pArg2, hb_set.HB_SET_BELL ); break; case HB_SET_CANCEL : hb_retl( hb_set.HB_SET_CANCEL ); - if( args > 1 ) hb_set.HB_SET_CANCEL = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_CANCEL = set_logical( pArg2, hb_set.HB_SET_CANCEL ); break; case HB_SET_COLOR : hb_retc( hb_conSetColor( args >= 2 && HB_IS_STRING( pArg2 ) ? hb_itemGetCPtr( pArg2 ) : ( char * ) NULL ) ); break; case HB_SET_CONFIRM : hb_retl( hb_set.HB_SET_CONFIRM ); - if( args > 1 ) hb_set.HB_SET_CONFIRM = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_CONFIRM = set_logical( pArg2, hb_set.HB_SET_CONFIRM ); break; case HB_SET_CONSOLE : hb_retl( hb_set.HB_SET_CONSOLE ); - if( args > 1 ) hb_set.HB_SET_CONSOLE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_CONSOLE = set_logical( pArg2, hb_set.HB_SET_CONSOLE ); break; case HB_SET_CURSOR : if( args >= 2 && HB_IS_NUMERIC( pArg2 ) ) @@ -536,7 +536,7 @@ HB_FUNC( SET ) break; case HB_SET_DEBUG : hb_retl( hb_set.HB_SET_DEBUG ); - if( args > 1 ) hb_set.HB_SET_DEBUG = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_DEBUG = set_logical( pArg2, hb_set.HB_SET_DEBUG ); break; case HB_SET_DECIMALS : hb_retni( hb_set.HB_SET_DECIMALS ); @@ -555,7 +555,7 @@ HB_FUNC( SET ) break; case HB_SET_DELETED : hb_retl( hb_set.HB_SET_DELETED ); - if( args > 1 ) hb_set.HB_SET_DELETED = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_DELETED = set_logical( pArg2, hb_set.HB_SET_DELETED ); break; case HB_SET_DELIMCHARS : if( hb_set.HB_SET_DELIMCHARS ) hb_retc( hb_set.HB_SET_DELIMCHARS ); @@ -564,7 +564,7 @@ HB_FUNC( SET ) break; case HB_SET_DELIMITERS : hb_retl( hb_set.HB_SET_DELIMITERS ); - if( args > 1 ) hb_set.HB_SET_DELIMITERS = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_DELIMITERS = set_logical( pArg2, hb_set.HB_SET_DELIMITERS ); break; case HB_SET_DEVICE : if( hb_set.HB_SET_DEVICE ) hb_retc( hb_set.HB_SET_DEVICE ); @@ -580,7 +580,7 @@ HB_FUNC( SET ) break; case HB_SET_EOF : hb_retl( hb_set.HB_SET_EOF ); - if( args > 1 ) hb_set.HB_SET_EOF = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EOF = set_logical( pArg2, hb_set.HB_SET_EOF ); break; case HB_SET_EPOCH : hb_retni( hb_set.HB_SET_EPOCH ); @@ -594,7 +594,7 @@ HB_FUNC( SET ) break; case HB_SET_ESCAPE : hb_retl( hb_set.HB_SET_ESCAPE ); - if( args > 1 ) hb_set.HB_SET_ESCAPE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_ESCAPE = set_logical( pArg2, hb_set.HB_SET_ESCAPE ); break; case HB_SET_EVENTMASK : hb_retni( hb_set.HB_SET_EVENTMASK ); @@ -602,20 +602,20 @@ HB_FUNC( SET ) break; case HB_SET_EXACT : hb_retl( hb_set.HB_SET_EXACT ); - if( args > 1 ) hb_set.HB_SET_EXACT = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EXACT = set_logical( pArg2, hb_set.HB_SET_EXACT ); break; case HB_SET_EXCLUSIVE : hb_retl( hb_set.HB_SET_EXCLUSIVE ); - if( args > 1 ) hb_set.HB_SET_EXCLUSIVE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EXCLUSIVE = set_logical( pArg2, hb_set.HB_SET_EXCLUSIVE ); break; case HB_SET_EXIT : hb_retl( hb_set.HB_SET_EXIT ); /* NOTE: Otherwise ReadExit() will always set the value. [vszakats] */ - if( pArg2 != NULL && !HB_IS_NIL( pArg2 ) ) hb_set.HB_SET_EXIT = set_logical( pArg2 ); + if( pArg2 != NULL && !HB_IS_NIL( pArg2 ) ) hb_set.HB_SET_EXIT = set_logical( pArg2, hb_set.HB_SET_EXIT ); break; case HB_SET_EXTRA : hb_retl( hb_set.HB_SET_EXTRA ); - if( args > 1 ) hb_set.HB_SET_EXTRA = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EXTRA = set_logical( pArg2, hb_set.HB_SET_EXTRA ); break; case HB_SET_EXTRAFILE : if( hb_set.HB_SET_EXTRAFILE ) hb_retc( hb_set.HB_SET_EXTRAFILE ); @@ -635,7 +635,7 @@ HB_FUNC( SET ) hb_set.HB_SET_EXTRAFILE = set_string( pArg2, hb_set.HB_SET_EXTRAFILE ); } } - if( args > 2 ) bFlag = set_logical( pArg3 ); + if( args > 2 ) bFlag = set_logical( pArg3, FALSE ); else bFlag = FALSE; if( args > 1 && ! HB_IS_NIL( pArg2 ) ) { @@ -648,15 +648,15 @@ HB_FUNC( SET ) break; case HB_SET_FIXED : hb_retl( hb_set.HB_SET_FIXED ); - if( args > 1 ) hb_set.HB_SET_FIXED = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_FIXED = set_logical( pArg2, hb_set.HB_SET_FIXED ); break; case HB_SET_INSERT : hb_retl( hb_set.HB_SET_INSERT ); - if( args > 1 ) hb_set.HB_SET_INSERT = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_INSERT = set_logical( pArg2, hb_set.HB_SET_INSERT ); break; case HB_SET_INTENSITY : hb_retl( hb_set.HB_SET_INTENSITY ); - if( args > 1 ) hb_set.HB_SET_INTENSITY = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_INTENSITY = set_logical( pArg2, hb_set.HB_SET_INTENSITY ); break; case HB_SET_MARGIN : hb_retni( hb_set.HB_SET_MARGIN ); @@ -680,7 +680,7 @@ HB_FUNC( SET ) break; case HB_SET_MCENTER : hb_retl( hb_set.HB_SET_MCENTER ); - if( args > 1 ) hb_set.HB_SET_MCENTER = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_MCENTER = set_logical( pArg2, hb_set.HB_SET_MCENTER ); break; case HB_SET_MESSAGE : hb_retni( hb_set.HB_SET_MESSAGE ); @@ -693,17 +693,24 @@ HB_FUNC( SET ) } break; case HB_SET_MFILEEXT : - if( hb_set.HB_SET_MFILEEXT ) hb_retc( hb_set.HB_SET_MFILEEXT ); - else hb_retc( NULL ); + hb_retc( hb_set.HB_SET_MFILEEXT ); if( args > 1 ) hb_set.HB_SET_MFILEEXT = set_string( pArg2, hb_set.HB_SET_MFILEEXT ); break; case HB_SET_OPTIMIZE : hb_retl( hb_set.HB_SET_OPTIMIZE ); - if( args > 1 ) hb_set.HB_SET_OPTIMIZE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_OPTIMIZE = set_logical( pArg2, hb_set.HB_SET_OPTIMIZE ); + break; + case HB_SET_FORCEOPT : + hb_retl( hb_set.HB_SET_FORCEOPT ); + if( args > 1 ) hb_set.HB_SET_FORCEOPT = set_logical( pArg2, hb_set.HB_SET_FORCEOPT ); break; case HB_SET_STRICTREAD : hb_retl( hb_set.HB_SET_STRICTREAD ); - if( args > 1 ) hb_set.HB_SET_STRICTREAD = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_STRICTREAD = set_logical( pArg2, hb_set.HB_SET_STRICTREAD ); + break; + case HB_SET_HARDCOMMIT : + hb_retl( hb_set.HB_SET_HARDCOMMIT ); + if( args > 1 ) hb_set.HB_SET_HARDCOMMIT = set_logical( pArg2, hb_set.HB_SET_HARDCOMMIT ); break; case HB_SET_PATH : if( hb_set.HB_SET_PATH ) hb_retc( hb_set.HB_SET_PATH ); @@ -717,13 +724,13 @@ HB_FUNC( SET ) break; case HB_SET_PRINTER : hb_retl( hb_set.HB_SET_PRINTER ); - if( args > 1 ) hb_set.HB_SET_PRINTER = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_PRINTER = set_logical( pArg2, hb_set.HB_SET_PRINTER ); break; case HB_SET_PRINTFILE : if( hb_set.HB_SET_PRINTFILE ) hb_retc( hb_set.HB_SET_PRINTFILE ); else hb_retc( NULL ); if( args > 1 && ! HB_IS_NIL( pArg2 ) ) hb_set.HB_SET_PRINTFILE = set_string( pArg2, hb_set.HB_SET_PRINTFILE ); - if( args > 2 ) bFlag = set_logical( pArg3 ); + if( args > 2 ) bFlag = set_logical( pArg3, FALSE ); else bFlag = FALSE; if( args > 1 && ! HB_IS_NIL( pArg2 ) ) { @@ -735,15 +742,15 @@ HB_FUNC( SET ) break; case HB_SET_SCOREBOARD : hb_retl( hb_set.HB_SET_SCOREBOARD ); - if( args > 1 ) hb_set.HB_SET_SCOREBOARD = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_SCOREBOARD = set_logical( pArg2, hb_set.HB_SET_SCOREBOARD ); break; case HB_SET_SCROLLBREAK: hb_retl( hb_set.HB_SET_SCROLLBREAK ); - if( args > 1 ) hb_set.HB_SET_SCROLLBREAK = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_SCROLLBREAK = set_logical( pArg2, hb_set.HB_SET_SCROLLBREAK ); break; case HB_SET_SOFTSEEK : hb_retl( hb_set.HB_SET_SOFTSEEK ); - if( args > 1 ) hb_set.HB_SET_SOFTSEEK = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_SOFTSEEK = set_logical( pArg2, hb_set.HB_SET_SOFTSEEK ); break; case HB_SET_TYPEAHEAD : hb_retni( hb_set.HB_SET_TYPEAHEAD ); @@ -761,7 +768,7 @@ HB_FUNC( SET ) break; case HB_SET_UNIQUE : hb_retl( hb_set.HB_SET_UNIQUE ); - if( args > 1 ) hb_set.HB_SET_UNIQUE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_UNIQUE = set_logical( pArg2, hb_set.HB_SET_UNIQUE ); break; case HB_SET_VIDEOMODE : hb_retni( hb_set.HB_SET_VIDEOMODE ); @@ -775,7 +782,7 @@ HB_FUNC( SET ) break; case HB_SET_WRAP : hb_retl( hb_set.HB_SET_WRAP ); - if( args > 1 ) hb_set.HB_SET_WRAP = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_WRAP = set_logical( pArg2, hb_set.HB_SET_WRAP ); break; case HB_SET_LANGUAGE : hb_retc( hb_langID() ); @@ -786,7 +793,7 @@ HB_FUNC( SET ) break; case HB_SET_IDLEREPEAT : hb_retl( hb_set.HB_SET_IDLEREPEAT ); - if( args > 1 ) hb_set.HB_SET_IDLEREPEAT = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_IDLEREPEAT = set_logical( pArg2, hb_set.HB_SET_IDLEREPEAT ); break; case HB_SET_FILECASE : hb_retni( hb_set.HB_SET_FILECASE ); @@ -926,6 +933,8 @@ void hb_setInitialize( void ) hb_set.HB_SET_EXTRAFILE = NULL; hb_set.hb_set_extrahan = FS_ERROR; hb_set.HB_SET_FIXED = FALSE; + hb_set.HB_SET_FORCEOPT = FALSE; + hb_set.HB_SET_HARDCOMMIT = TRUE; hb_set.HB_SET_IDLEREPEAT = TRUE; hb_set.HB_SET_INSERT = FALSE; hb_set.HB_SET_INTENSITY = TRUE; @@ -935,7 +944,7 @@ void hb_setInitialize( void ) hb_set.HB_SET_MESSAGE = 0; hb_set.HB_SET_MFILEEXT = ( char * ) hb_xgrab( 1 ); hb_set.HB_SET_MFILEEXT[ 0 ] = '\0'; - hb_set.HB_SET_OPTIMIZE = FALSE; + hb_set.HB_SET_OPTIMIZE = TRUE; hb_set.HB_SET_PATH = ( char * ) hb_xgrab( 1 ); hb_set.HB_SET_PATH[ 0 ] = '\0'; hb_set.HB_SET_PRINTER = FALSE; diff --git a/harbour/source/vm/dynsym.c b/harbour/source/vm/dynsym.c index 885a3a31db..e01204056a 100644 --- a/harbour/source/vm/dynsym.c +++ b/harbour/source/vm/dynsym.c @@ -120,7 +120,8 @@ HB_EXPORT PHB_DYNS hb_dynsymNew( PHB_SYMB pSymbol ) /* creates a new dynamic if( pDynSym ) /* If name exists */ { - if( !pDynSym->pSymbol->value.pFunPtr && pSymbol->value.pFunPtr ) /* The DynSym existed */ + if( ( !pDynSym->pSymbol->value.pFunPtr && pSymbol->value.pFunPtr ) || + ( pSymbol->scope.value & HB_FS_LOCAL ) != 0 ) { pDynSym->pSymbol = pSymbol; #ifndef HB_NO_PROFILER diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index c37e21538c..47f761d626 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -5313,6 +5313,26 @@ static double hb_vmTopNumber( void ) /* * Functions to mange module symbols */ +char * hb_vmFindModuleSymbolName( PHB_SYMB pSym ) +{ + if( pSym ) + { + PHB_SYMBOLS pLastSymbols = s_pSymbols; + + while( pLastSymbols ) + { + if( pLastSymbols->fActive && + pSym >= pLastSymbols->pModuleSymbols && + pSym < pLastSymbols->pModuleSymbols + pLastSymbols->uiModuleSymbols ) + { + return pLastSymbols->szModuleName; + } + pLastSymbols = pLastSymbols->pNext; + } + } + return NULL; +} + static PHB_SYMBOLS hb_vmFindFreeModule( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID ) { @@ -5661,15 +5681,25 @@ hb_vmRegisterSymbols( PHB_SYMB pModuleSymbols, USHORT uiSymbols, char * szModule /* * module symbols initialization with extended information */ -HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiModuleSymbols, - char * szModuleName, ULONG ulID, - USHORT uiPcodeMin, USHORT uiPcodeMax ) +HB_EXPORT PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiModuleSymbols, + char * szModuleName, ULONG ulID, + USHORT uiPCodeVer ) { - HB_TRACE(HB_TR_DEBUG, ("hb_vmProcessSymbols(%p,%hu,%s,%lu,%hu,%hu)", pSymbols, uiModuleSymbols, szModuleName, ulID, uiPcodeMin, uiPcodeMax)); + HB_TRACE(HB_TR_DEBUG, ("hb_vmProcessSymbolsEx(%p,%hu,%s,%lu,%hu)", pSymbols, uiModuleSymbols, szModuleName, ulID, uiPcodeVer)); - /* TODO: verify suported PCODE versions */ - HB_SYMBOL_UNUSED( uiPcodeMin ); - HB_SYMBOL_UNUSED( uiPcodeMax ); + if( uiPCodeVer != 0 ) + { + if( uiPCodeVer > HB_PCODE_VER || /* the module is compiled with newer compiler version then HVM */ + uiPCodeVer < HB_PCODE_VER_MIN ) /* the module is compiled with olde compiler version */ + { + char szPCode[ 10 ]; + sprintf( szPCode, "%i.%i", uiPCodeVer>>8, uiPCodeVer &0xff ); + + hb_errInternal( HB_EI_ERRUNRECOV, "Module '%s'\n" + "was compiled with unsupported PCODE version %s.\n" + "Please recompile.", szModuleName, szPCode ); + } + } return hb_vmRegisterSymbols( pSymbols, uiModuleSymbols, szModuleName, ulID, s_fCloneSym, s_fCloneSym )->pModuleSymbols; diff --git a/harbour/source/vm/maindllp.c b/harbour/source/vm/maindllp.c index 9d5154451c..9fb50788c0 100644 --- a/harbour/source/vm/maindllp.c +++ b/harbour/source/vm/maindllp.c @@ -103,14 +103,13 @@ PHB_SYMB hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ) } /* module symbols initialization */ -PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ) /* module symbols initialization with extended information */ +PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeVer ) /* module symbols initialization with extended information */ { FARPROC pProcessSymbols = GetProcAddress( GetModuleHandle( NULL ), - "_hb_vmProcessSymbolsExt" ); + "_hb_vmProcessSymbolsEx" ); if( pProcessSymbols ) - return ( ( VM_PROCESS_SYMBOLS_EXT ) pProcessSymbols ) - ( pSymbols, uiSymbols, szModuleName, - ulID, uiPcodeMin, uiPcodeMax ); + return ( ( VM_PROCESS_SYMBOLS_EX ) pProcessSymbols ) + ( pSymbols, uiSymbols, szModuleName, ulID, uiPcodeVer ); /* else * may we issue an error ? */ diff --git a/harbour/source/vm/proc.c b/harbour/source/vm/proc.c index 76da1d4869..cdebeebb02 100644 --- a/harbour/source/vm/proc.c +++ b/harbour/source/vm/proc.c @@ -72,6 +72,7 @@ #include "hbapicls.h" #include "hbapiitm.h" #include "hbstack.h" +#include "hbvm.h" #ifdef HB_EXTENSION @@ -93,14 +94,14 @@ HB_FUNC( PROCNAME ) HB_FUNC( PROCLINE ) { + long lOffset = hb_stackBaseOffset(); int iLevel = hb_parni( 1 ) + 1; /* we are already inside ProcName() */ - PHB_ITEM * pBase = hb_stack.pBase; - while( ( iLevel-- > 0 ) && pBase != hb_stack.pItems ) - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; + while( iLevel-- > 0 && lOffset > 1 ) + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; if( iLevel < 0 ) - hb_retni( ( *pBase )->item.asSymbol.lineno ); + hb_retni( hb_stackItem( lOffset - 1 )->item.asSymbol.lineno ); else hb_retni( 0 ); } @@ -112,7 +113,45 @@ HB_FUNC( PROCLINE ) HB_FUNC( PROCFILE ) { - hb_retc( NULL ); + PHB_SYMB pLocalSym = NULL; + PHB_SYMB pSym = NULL; + + if( ISSYMBOL( 1 ) ) + { + pSym = hb_itemGetSymbol( hb_param( 1, HB_IT_SYMBOL ) ); + } + else + { + long lOffset = hb_stackBaseOffset(); + int iLevel = hb_parni( 1 ) + 1; /* we are already inside ProcFile() */ + + while( iLevel-- > 0 && lOffset > 1 ) + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; + + if( iLevel < 0 ) + { + pSym = hb_stackItem( lOffset - 1 )->item.asSymbol.value; + + if( pSym == &hb_symEval || strcmp( pSym->szName, "EVAL" ) == 0 ) + { + PHB_ITEM pSelf = hb_stackItem( lOffset ); + + if( HB_IS_BLOCK( pSelf ) ) + pLocalSym = pSelf->item.asBlock.value->pDefSymb; + } + } + } + + if( !pLocalSym && pSym ) + { + if( ( pSym->scope.value & HB_FS_LOCAL ) != 0 ) + pLocalSym = pSym; + else if( pSym->pDynSym && + ( pSym->pDynSym->pSymbol->scope.value & HB_FS_LOCAL ) != 0 ) + pLocalSym = pSym->pDynSym->pSymbol; + } + + hb_retc( hb_vmFindModuleSymbolName( pLocalSym ) ); } #endif @@ -120,64 +159,60 @@ HB_FUNC( PROCFILE ) /* NOTE: szName size must be an at least: HB_SYMBOL_NAME_LEN + HB_SYMBOL_NAME_LEN + 2 [vszakats] */ -char * hb_procname( int iLevel, char * szName, BOOL bSkipBlock ) +char * hb_procname( int iLevel, char * szName, BOOL bSkipBlock ) { - PHB_ITEM * pBase = hb_stack.pBase; - char * szTstName; - BOOL lcb = FALSE; - int iLev = iLevel; + long lOffset = hb_stackBaseOffset(), lPrevOffset = 0; + PHB_ITEM pBase, pSelf; - while( ( iLevel-- > 0 ) && pBase != hb_stack.pItems ) - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; - - szTstName = ( *pBase )->item.asSymbol.value->szName ; - - if( bSkipBlock ) - { - /* Is it an inline method ? if so back one more ... */ - if( ( strcmp( szTstName, "__EVAL" ) == 0 ) && pBase != hb_stack.pItems ) - { - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; - lcb = TRUE ; - } - } + while( iLevel-- > 0 && lOffset > 1 ) + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; if( iLevel < 0 ) { - if( ( *( pBase + 1 ) )->type == HB_IT_ARRAY ) /* it is a method name */ + if( bSkipBlock && lOffset > 1 ) { - strcpy( szName, hb_objGetRealClsName( *( pBase + 1 ), ( *pBase )->item.asSymbol.value->szName ) ); + char * szTstName = hb_stackItem( lOffset - 1 )->item.asSymbol.value->szName ; + /* Is it an inline method ? if so back one more ... */ + if( strcmp( szTstName, "__EVAL" ) == 0 ) + { + lPrevOffset = lOffset; + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; + } + } - if( lcb ) + pBase = hb_stackItem( lOffset -1 ); + pSelf = hb_stackItem( lOffset ); + if( HB_IS_OBJECT( pSelf ) ) /* it is a method name */ + { + strcpy( szName, hb_objGetRealClsName( pSelf, pBase->item.asSymbol.value->szName ) ); + + if( lPrevOffset ) strcat( szName, ":(b)" ); else strcat( szName, ":" ); - strcat( szName, ( *pBase )->item.asSymbol.value->szName ); + strcat( szName, pBase->item.asSymbol.value->szName ); } else { - if( lcb ) /* Back to standart code block */ + if( lPrevOffset ) /* Back to standart code block */ { - pBase = hb_stack.pBase; - while( ( iLev-- > 0 ) && pBase != hb_stack.pItems ) - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; + lOffset = lPrevOffset; + pBase = hb_stackItem( lOffset -1 ); + pSelf = hb_stackItem( lOffset ); } - if( ( strcmp( ( *pBase )->item.asSymbol.value->szName, "EVAL" ) == 0 ) ) + if( strcmp( pBase->item.asSymbol.value->szName, "EVAL" ) == 0 ) { strcpy( szName, "(b)" ); - if( ( *( pBase + 1 ) )->type == HB_IT_BLOCK ) - { - PHB_SYMB pSymb; - pSymb = ( *( pBase + 1 ) )->item.asBlock.value->pDefSymb; - strcat( szName, pSymb->szName ); - } + + if( HB_IS_BLOCK( pSelf ) ) + strcat( szName, pSelf->item.asBlock.value->pDefSymb->szName ); else - strcat( szName, ( *pBase )->item.asSymbol.value->szName ); + strcat( szName, pBase->item.asSymbol.value->szName ); } else - strcpy( szName, ( *pBase )->item.asSymbol.value->szName ); + strcpy( szName, pBase->item.asSymbol.value->szName ); } } else @@ -185,4 +220,3 @@ char * hb_procname( int iLevel, char * szName, BOOL bSkipBlock ) return szName; } -