From 4d26144d36b78bad6f1d1dd88f5815bddf05bfce Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Tue, 7 Sep 1999 00:44:21 +0000 Subject: [PATCH] 19990907-02:30 GMT+1 --- harbour/ChangeLog | 95 ++++++++++--- harbour/funclist.txt | 2 +- harbour/include/extend.h | 12 +- harbour/include/external.ch | 86 ++++++++---- harbour/include/rddapi.h | 1 + harbour/source/rdd/dbcmd.c | 85 +++++++----- harbour/source/rdd/dbf0.prg | 4 +- harbour/source/rdd/dbf1.c | 6 +- harbour/source/rdd/delim0.prg | 4 +- harbour/source/rdd/delim1.c | 6 +- harbour/source/rdd/rddsys.prg | 6 - harbour/source/rdd/sdf0.prg | 4 +- harbour/source/rdd/sdf1.c | 6 +- harbour/source/rtl/arrays.c | 142 +++++++++----------- harbour/source/rtl/extend.c | 12 +- harbour/source/rtl/itemapi.c | 4 +- harbour/source/rtl/setkey.prg | 67 ++++----- harbour/source/runner/stdalone/external.prg | 88 ++++++++---- harbour/source/vm/hvm.c | 1 + 19 files changed, 382 insertions(+), 249 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d58517e050..cb9369ed91 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,60 @@ +19990907-02:30 GMT+1 Victor Szel + * include/external.ch + source/runner/stdalone/external.prg + + Updated to reflect the recent changes. + * source/rtl/itemapi.c + ! hb_itemGetCPtr() will now return an empty string ("") on error and not + a NULL pointer. + ! Leak fixed in hb_evalLaunch() when the function to evaluate was passed + as a string. (hb_itemGetC() changed to hb_itemGetCPtr()) + * source/rtl/arrays.c + source/rtl/extend.c + source/rdd/dbcmd.c + include/extend.h + * Some array functions renamed to be consistent with the similar Item API + function names. + hb_arrayGetString -> hb_arrayGetCPtr + hb_arrayGetStringLen -> hb_arrayGetCLen + hb_arrayGetBool -> hb_arrayGetL + hb_arrayGetDouble -> hb_arrayGetND + hb_arrayGetDate -> hb_arrayGetDS + * hb_arrayGetCPtr() now calls hb_itemGetCPtr() instead of using redundant + code. + + hb_arrayGetC() added keep it in sync with the Item API. + % Further simplified the hb_arrayGet*()/hb_arraySet()/+some more functions. + * source/rdd/dbcmd.c + funclist.txt + + DBF() function added. (not tested yet) + * source/rdd/dbf1.c + source/rdd/delim1.c + source/rdd/sdf1.c + source/rdd/dbf0.prg + source/rdd/delim0.prg + source/rdd/sdf0.prg + * The forcelink function names changed. The C functions got a "C" appended + at the end, the Harbour ones got an underscore at the beginning, this + way it's more Clipper like, but it was also inevitable, since previously + the forcelink function HB_DBF() was colliding with the standard Clipper + function named DBF() (HB_DBF() from C). + * source/rdd/dbcmd.c + source/rdd/rddsys.prg + source/vm/hvm.c + include/rddapi.h + * Instead of calling rddShutDown() from a Harbour EXIT function, now + the same functions C version is called by the Virtual Machine on exit. + This way it's more Clipper compatible, since in CA-Cl*pper the RDDSYS + doesn't need to clean-up on exit. RDDSYS.PRG is now exchangeable with + the Clipper one. + ! hb_rddShutDown() fixed a possible GPF if there was no rddSetDefault() + calls at all (when RDDSYS was overridden by a dummy one). + * source/rtl/setkey.prg + * Not CA-Clipper compatible functions (extensions) renamed to avoid + possible collision with existing code: + SETKEYGET() -> HB_SETKEYGET() + SETKEYSAVE() -> HB_SETKEYSAVE() + SETKEYCHECK() -> HB_SETKEYCHECK() + The function names are valid even if compiled with /10 switch. + 19990907-01:00 GMT+1 Victor Szel * source/rtl/arrays.c ! hb_arrayScan() fixed, so that it can also search for a NIL value. Like @@ -23,7 +80,7 @@ * tests/working/rtl_test.prg + Some PAD?() tests added with new types, byref. Some new MIN()/MAX() tests added. ASCAN() tests added. - + /SKIP: switch added, to make it possible to temporarly skip specific + + /SKIP: switch added, to make it possible to temporarly skip specific tests. (RTL_TEST /SKIP:100,102) + EVAL(), :EVAL() tests added. Some are commented out, due to bugs. * source/rtl/itemapi.c @@ -261,33 +318,33 @@ 19990903-14:35 GMT+2 Ryszard Glab *source/rtl/codebloc.c - * corrected bug if nested codeblocks without local variables - references were created - + * corrected bug if nested codeblocks without local variables + references were created + 19990903-14:00 GMT+2 Ryszard Glab *include/hb_vmpub.h - * added a second parameter for HB_DYNS_FUNC + * added a second parameter for HB_DYNS_FUNC *source/vm/dynsym.c *include/extend.h * added a second parameter for hb_dynsymEval() function *source/rtl/memvars.c - * new function __mvDBGINFO() for memvars debugging - (documentation included in memvars.c) + * new function __mvDBGINFO() for memvars debugging + (documentation included in memvars.c) *include/memvars.ch - * new MV_PRIVATE definition + * new MV_PRIVATE definition *source/rtl/mouseapi.c - * added (char*) type cast to make C++ compilers happy - + * added (char*) type cast to make C++ compilers happy + 19990903-08:00 GMT+1 Victor Szel * include/hbdefs.h include/extend.h ! IT_OBJECT() checked for IT_ARRAY type, correct to IT_OBJECT, which - is equal to IT_ARRAY, so there was no bug, but it's not a good practice + is equal to IT_ARRAY, so there was no bug, but it's not a good practice to take shortcuts like this. * Type checking macros moved to extend.h from hbdefs.h * source/vm/hvm.c @@ -322,7 +379,7 @@ formatting errors corrected. + Error value substitution support added to: hb_vmNot(), hb_vmNegate(), hb_vmInString(), hb_vmInc(), hb_vmDec(). - ! hb_vmEqual(), hb_vmNotEqual() fixed for those where it returned + ! hb_vmEqual(), hb_vmNotEqual() fixed for those where it returned a constant FALSE, blocks, arrays, etc. It confused the stack. ! Fixed all hb_vmOperatorCall() calls since they were not popping the values from the stack. ( did not test this ) @@ -399,7 +456,7 @@ ! hb_err*() caller now expect E_BREAK, too. ! hb_setRelease() called close_binary() instead of close_text() for hb_set_extrahan. Fixed. - - Removed a bunch of (now) unneeded include files and OS branched. + - Removed a bunch of (now) unneeded include files and OS branched. Source looks kind of clean now. * config/rules.cf make_tpl.* @@ -463,9 +520,9 @@ * hb_fsExtOpen + some HB_SYMBOL_UNUSED added. - NOTE [vszel]: - 1.) I've #ifdef-ed out the new stuff for __CYGWIN__ since - setdisk()/getdisk() were neither declared nor present in any + NOTE [vszel]: + 1.) I've #ifdef-ed out the new stuff for __CYGWIN__ since + setdisk()/getdisk() were neither declared nor present in any libraries. 2.) I've added some new header files to FILESYS.C. Please check them on your system, whether they are correct. @@ -513,7 +570,7 @@ Like CLIPPER.EXE. * Indentation more or less fixed. * Zeros changed to NULL and '\0'. - % Inc()/Dec() logic cleaned-up. Note that there are many more places where + % Inc()/Dec() logic cleaned-up. Note that there are many more places where such logic cleaning and variable scoping optim. could be done. I'm also not sure if the debug_msg() calls should only be made when warnings are turned on, IMHO they should always appear when DEBUG is on. @@ -554,8 +611,8 @@ * corrected generation of line number opcodes * corrected the support for local variables when nested codeblocks are used - * the step value is popped correctly at the end of FOR/NEXT loop - (the nested loops are working correctly now) + * the step value is popped correctly at the end of FOR/NEXT loop + (the nested loops are working correctly now) *source/rtl/codebloc.c * corrected the support for local variables when nested diff --git a/harbour/funclist.txt b/harbour/funclist.txt index 166cf09a28..7855a38b01 100644 --- a/harbour/funclist.txt +++ b/harbour/funclist.txt @@ -62,7 +62,7 @@ DBCREATEIND ;S; DBDELETE ;R; DBEDIT ;N; DBEVAL ;S; -DBF ;N; +DBF ;R; DBFILTER ;S; DBGOBOTTOM ;R; DBGOTO ;R; diff --git a/harbour/include/extend.h b/harbour/include/extend.h index b40d8ed02d..94255b9cf1 100644 --- a/harbour/include/extend.h +++ b/harbour/include/extend.h @@ -288,13 +288,15 @@ extern BOOL hb_arrayLast( PHB_ITEM pArray, PHB_ITEM pResult ); extern BOOL hb_arrayRelease( PHB_ITEM pArray ); /* releases an array - don't call it - use ItemRelease() !!! */ extern BOOL hb_arraySet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ); /* sets an array element */ extern BOOL hb_arrayGet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ); /* retrieves an item */ -extern char * hb_arrayGetString( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string contained on an array element */ -extern ULONG hb_arrayGetStringLen( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string length contained on an array element */ -extern BOOL hb_arrayGetBool( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the logical value contained on an array element */ +extern ULONG hb_arrayCopyC( PHB_ITEM pArray, ULONG ulIndex, char * szBuffer, ULONG ulLen ); +extern char * hb_arrayGetC( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string contained on an array element */ +extern char * hb_arrayGetCPtr( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string pointer on an array element */ +extern ULONG hb_arrayGetCLen( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string length contained on an array element */ +extern BOOL hb_arrayGetL( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the logical value contained on an array element */ extern int hb_arrayGetNI( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the int value contained on an array element */ extern long hb_arrayGetNL( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the long numeric value contained on an array element */ -extern double hb_arrayGetDouble( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the double value contained on an array element */ -extern char * hb_arrayGetDate( PHB_ITEM pArray, ULONG ulIndex, char * szDate ); /* retrieves the date value contained on an array element */ +extern double hb_arrayGetND( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the double value contained on an array element */ +extern char * hb_arrayGetDS( PHB_ITEM pArray, ULONG ulIndex, char * szDate ); /* retrieves the date value contained on an array element */ extern WORD hb_arrayGetType( PHB_ITEM pArray, ULONG ulIndex ); extern BOOL hb_arrayFill( PHB_ITEM pArray, PHB_ITEM pValue, ULONG ulStart, ULONG ulCount ); extern ULONG hb_arrayScan( PHB_ITEM pArray, PHB_ITEM pValue, ULONG ulStart, ULONG ulCount ); diff --git a/harbour/include/external.ch b/harbour/include/external.ch index 6984e8813c..d086d2e01b 100644 --- a/harbour/include/external.ch +++ b/harbour/include/external.ch @@ -46,11 +46,10 @@ EXTERNAL __DYNSGETINDEX // EXTERNAL ERRORSYS EXTERNAL ERRORNEW -EXTERNAL EVAL EXTERNAL LEN EXTERNAL EMPTY EXTERNAL VALTYPE -EXTERNAL ERRORBLOCK +EXTERNAL WORD EXTERNAL PROCNAME EXTERNAL PROCLINE EXTERNAL __QUIT @@ -81,20 +80,6 @@ EXTERNAL ACLONE // //symbols from file: rtl\classes.c // -EXTERNAL __OBJGETMSGLIST -EXTERNAL __OBJGETMETHODLIST -EXTERNAL __OBJGETVALUELIST -EXTERNAL __OBJSETVALUELIST -EXTERNAL __OBJHASDATA -EXTERNAL __OBJHASMETHOD -EXTERNAL __OBJADDDATA -EXTERNAL __OBJADDINLINE -EXTERNAL __OBJADDMETHOD -EXTERNAL __OBJDELDATA -EXTERNAL __OBJDELINLINE -EXTERNAL __OBJDELMETHOD -EXTERNAL __OBJMODINLINE -EXTERNAL __OBJMODMETHOD EXTERNAL __CLSADDMSG EXTERNAL __CLSNEW EXTERNAL __CLSDELMSG @@ -120,6 +105,7 @@ EXTERNAL OUTERR EXTERNAL QQOUT EXTERNAL QOUT EXTERNAL SETPOS +EXTERNAL SETPOSBS EXTERNAL DEVPOS EXTERNAL DEVOUT EXTERNAL DISPOUT @@ -178,6 +164,7 @@ EXTERNAL DIRECTORY //symbols from file: rtl\do.c // EXTERNAL DO +EXTERNAL EVAL // //symbols from file: rtl\environ.c // @@ -188,6 +175,8 @@ EXTERNAL __RUN // //symbols from file: rtl\errorapi.c // +EXTERNAL ERRORBLOCK +EXTERNAL DOSERROR EXTERNAL __ERRRT_BASE // //symbols from file: rtl\extend.c @@ -207,6 +196,12 @@ EXTERNAL FSEEK EXTERNAL FILE EXTERNAL FREADSTR EXTERNAL CURDIR +EXTERNAL DIRCHANGE +EXTERNAL MAKEDIR +EXTERNAL DIRREMOVE +EXTERNAL DISKSPACE +EXTERNAL DISKCHANGE +EXTERNAL DISKNAME EXTERNAL BIN2I EXTERNAL BIN2L EXTERNAL BIN2W @@ -231,6 +226,7 @@ EXTERNAL HARDCR // EXTERNAL INKEY EXTERNAL __KEYBOARD +EXTERNAL __KEYPUT EXTERNAL NEXTKEY EXTERNAL LASTKEY // @@ -260,6 +256,13 @@ EXTERNAL __MVXRELEASE EXTERNAL __MVRELEASE EXTERNAL __MVSCOPE EXTERNAL __MVCLEAR +EXTERNAL __MVDBGINFO +// +//symbols from file: rtl\mouseapi.c +// +// +//symbols from file: rtl\mousexxx.c +// // //symbols from file: rtl\msgxxx.c // @@ -270,6 +273,7 @@ EXTERNAL MEMOTRAN // //symbols from file: rtl\set.c // +EXTERNAL SETCANCEL EXTERNAL __SETCENTURY EXTERNAL SET // @@ -351,6 +355,20 @@ EXTERNAL __MENUTO // //symbols from file: rtl\objfunc.prg // +EXTERNAL __OBJHASDATA +EXTERNAL __OBJHASMETHOD +EXTERNAL __OBJGETMSGLIST +EXTERNAL __OBJGETMETHODLIST +EXTERNAL __OBJGETVALUELIST +EXTERNAL __OBJSETVALUELIST +EXTERNAL __OBJADDMETHOD +EXTERNAL __OBJADDINLINE +EXTERNAL __OBJADDDATA +EXTERNAL __OBJMODMETHOD +EXTERNAL __OBJMODINLINE +EXTERNAL __OBJDELMETHOD +EXTERNAL __OBJDELINLINE +EXTERNAL __OBJDELDATA // //symbols from file: rtl\readvar.prg // @@ -359,9 +377,9 @@ EXTERNAL READVAR //symbols from file: rtl\setkey.prg // EXTERNAL SETKEY -EXTERNAL SETKEYGET -EXTERNAL SETKEYSAVE -EXTERNAL SETKEYCHECK +EXTERNAL HB_SETKEYGET +EXTERNAL HB_SETKEYSAVE +EXTERNAL HB_SETKEYCHECK // //symbols from file: rtl\tbcolumn.prg // @@ -397,18 +415,21 @@ EXTERNAL __XRESTSCREEN // //symbols from file: rdd\dbcmd.c // -EXTERNAL DBF -EXTERNAL SDF -EXTERNAL DELIM +EXTERNAL _DBF +EXTERNAL _SDF +EXTERNAL _DELIM EXTERNAL RDDSYS EXTERNAL AFIELDS EXTERNAL ALIAS EXTERNAL BOF +EXTERNAL DBAPPEND EXTERNAL DBCLOSEALL EXTERNAL DBCLOSEAREA EXTERNAL DBCOMMIT +EXTERNAL DBCOMMITALL EXTERNAL DBCREATE EXTERNAL DBDELETE +EXTERNAL DBF EXTERNAL DBGOBOTTOM EXTERNAL DBGOTO EXTERNAL DBGOTOP @@ -435,13 +456,13 @@ EXTERNAL FLOCK EXTERNAL FOUND EXTERNAL HEADER EXTERNAL LASTREC +EXTERNAL LOCK EXTERNAL LUPDATE EXTERNAL NETERR EXTERNAL RDDLIST EXTERNAL RDDNAME EXTERNAL RDDREGISTER EXTERNAL RDDSETDEFAULT -EXTERNAL RDDSHUTDOWN EXTERNAL RECCOUNT EXTERNAL RECNO EXTERNAL RECSIZE @@ -451,17 +472,17 @@ EXTERNAL USED // //symbols from file: rdd\dbf1.c // -EXTERNAL _DBF +EXTERNAL _DBFC EXTERNAL DBF_GETFUNCTABLE // //symbols from file: rdd\delim1.c // -EXTERNAL _DELIM +EXTERNAL _DELIMC EXTERNAL DELIM_GETFUNCTABLE // //symbols from file: rdd\sdf1.c // -EXTERNAL _SDF +EXTERNAL _SDFC EXTERNAL SDF_GETFUNCTABLE // //symbols from file: rdd\dbf0.prg @@ -640,6 +661,19 @@ EXTERNAL GT_STRRIGHT // EXTERNAL TFILEREAD // +//symbols from file: tools\nconvert.prg +// +EXTERNAL ISBIN +EXTERNAL ISOCTAL +EXTERNAL ISDEC +EXTERNAL ISHEXA +EXTERNAL DECTOBIN +EXTERNAL DECTOOCTAL +EXTERNAL DECTOHEXA +EXTERNAL BINTODEC +EXTERNAL OCTALTODEC +EXTERNAL HEXATODEC +// //symbols from file: tools\numtxten.prg // EXTERNAL NUMTOTXTEN diff --git a/harbour/include/rddapi.h b/harbour/include/rddapi.h index 99e8f912f8..504f4fc231 100644 --- a/harbour/include/rddapi.h +++ b/harbour/include/rddapi.h @@ -16,6 +16,7 @@ extern void hb_rddSelectWorkAreaNumber( int iArea ); extern void hb_rddSelectWorkAreaSymbol( PHB_SYMB pSymAlias ); extern void hb_rddGetFieldValue( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol ); extern void hb_rddPutFieldValue( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol ); +extern void hb_rddShutDown( void ); /* RDD method return codes */ diff --git a/harbour/source/rdd/dbcmd.c b/harbour/source/rdd/dbcmd.c index c4052da538..6f0075175d 100644 --- a/harbour/source/rdd/dbcmd.c +++ b/harbour/source/rdd/dbcmd.c @@ -57,9 +57,9 @@ typedef struct _AREANODE typedef AREANODE * LPAREANODE; -extern HARBOUR HB_DBF( void ); -extern HARBOUR HB_SDF( void ); -extern HARBOUR HB_DELIM( void ); +extern HARBOUR HB__DBF( void ); +extern HARBOUR HB__SDF( void ); +extern HARBOUR HB__DELIM( void ); extern HARBOUR HB_RDDSYS( void ); HARBOUR HB_AFIELDS( void ); @@ -72,6 +72,7 @@ HARBOUR HB_DBCOMMIT( void ); HARBOUR HB_DBCOMMITALL( void ); HARBOUR HB_DBCREATE( void ); HARBOUR HB_DBDELETE( void ); +HARBOUR HB_DBF( void ); HARBOUR HB_DBGOBOTTOM( void ); HARBOUR HB_DBGOTO( void ); HARBOUR HB_DBGOTOP( void ); @@ -105,7 +106,6 @@ HARBOUR HB_RDDLIST( void ); HARBOUR HB_RDDNAME( void ); HARBOUR HB_RDDREGISTER( void ); HARBOUR HB_RDDSETDEFAULT( void ); -HARBOUR HB_RDDSHUTDOWN( void ); HARBOUR HB_RECCOUNT( void ); HARBOUR HB_RECNO( void ); HARBOUR HB_RECSIZE( void ); @@ -175,10 +175,10 @@ static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct ) for( uiCount = 0; uiCount < pStruct->item.asArray.value->ulLen; uiCount++ ) { pFieldDesc = pStruct->item.asArray.value->pItems + uiCount; - pFieldInfo.uiType = toupper( hb_arrayGetString( pFieldDesc, 2 )[ 0 ] ); - pFieldInfo.atomName = ( BYTE * ) hb_arrayGetString( pFieldDesc, 1 ); - pFieldInfo.uiLen = ( USHORT ) hb_arrayGetDouble( pFieldDesc, 3 ); - pFieldInfo.uiDec = ( USHORT ) hb_arrayGetDouble( pFieldDesc, 4 ); + pFieldInfo.uiType = toupper( hb_arrayGetCPtr( pFieldDesc, 2 )[ 0 ] ); + pFieldInfo.atomName = ( BYTE * ) hb_arrayGetCPtr( pFieldDesc, 1 ); + pFieldInfo.uiLen = ( USHORT ) hb_arrayGetND( pFieldDesc, 3 ); + pFieldInfo.uiDec = ( USHORT ) hb_arrayGetND( pFieldDesc, 4 ); SELF_ADDFIELD( pArea, &pFieldInfo ); } @@ -325,7 +325,7 @@ static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo ) ( ( PHB_DYNS ) pArea->atomAlias )->hArea = pOpenInfo->uiArea; pArea->lpExtendInfo->fExclusive = !pOpenInfo->fShared; pArea->lpExtendInfo->fReadOnly = pOpenInfo->fReadonly; - + return SUCCESS; } @@ -465,9 +465,9 @@ static void hb_rddCheck( void ) szDefDriver[ 0 ] = '\0'; /* Force link the built-in RDD's */ - HB_DBF(); - HB_SDF(); - HB_DELIM(); + HB__DBF(); + HB__SDF(); + HB__DELIM(); HB_RDDSYS(); } } @@ -565,7 +565,7 @@ static int hb_rddRegister( char * szDriver, USHORT uiType ) static USHORT hb_rddSelect( char * szAlias ) { PHB_DYNS pSymAlias; - + pSymAlias = hb_dynsymFind( szAlias ); if( pSymAlias && pSymAlias->hArea ) return pSymAlias->hArea; @@ -671,7 +671,7 @@ void hb_rddSelectWorkAreaAlias( char * szName ) PHB_DYNS pSymArea; char * szAlias; WORD wLen; - + wLen = strlen( szName ); szAlias = ( char * ) hb_xgrab( wLen + 1 ); strcpy( szAlias, szName ); @@ -812,7 +812,7 @@ HARBOUR HB_ALIAS( void ) USHORT uiArea; LPAREANODE pAreaNode; char * szAlias; - + uiArea = hb_parni( 1 ); uiArea = uiArea ? uiArea : uiCurrArea; pAreaNode = pWorkAreas; @@ -836,6 +836,30 @@ HARBOUR HB_ALIAS( void ) hb_retc( "" ); } +HARBOUR HB_DBF( void ) +{ + LPAREANODE pAreaNode = pWorkAreas; + + while( pAreaNode ) + { + if( ( ( AREAP ) pAreaNode->pArea )->uiArea == uiCurrArea ) + { + if( ( ( AREAP ) pAreaNode->pArea )->atomAlias && + ( ( PHB_DYNS ) ( ( AREAP ) pAreaNode->pArea )->atomAlias )->hArea ) + { + char * szAlias = ( char * ) hb_xgrab( HARBOUR_MAX_RDD_ALIAS_LENGTH + 1 ); + SELF_ALIAS( ( AREAP ) pAreaNode->pArea, ( BYTE * ) szAlias ); + hb_retc( szAlias ); + hb_xfree( szAlias ); + return; + } + break; + } + pAreaNode = pAreaNode->pNext; + } + hb_retc( "" ); +} + HARBOUR HB_BOF( void ) { BOOL bBof = TRUE; @@ -938,7 +962,7 @@ HARBOUR HB_DBCREATE( void ) return; } - if( strlen( hb_arrayGetString( pFieldDesc, 1 ) ) == 0 ) + if( strlen( hb_arrayGetCPtr( pFieldDesc, 1 ) ) == 0 ) { hb_errRT_DBCMD( EG_ARG, 1014, 0, "DBCREATE" ); return; @@ -1003,7 +1027,7 @@ HARBOUR HB_DBCREATE( void ) SELF_CREATEMEMFILE( ( AREAP ) pTempArea, &pInfo ); hb_itemRelease( pFileExt ); } - + SELF_RELEASE( ( AREAP ) pTempArea ); hb_xfree( szFileName ); hb_xfree( pFileName ); @@ -1029,7 +1053,7 @@ HARBOUR HB_DBGOBOTTOM( void ) HARBOUR HB_DBGOTO( void ) { PHB_ITEM pItem; - + if( !pCurrArea ) { hb_errRT_DBCMD( EG_NOTABLE, 2001, 0, "DBGOTOP" ); @@ -1108,7 +1132,7 @@ HARBOUR HB_DBSELECTAREA( void ) { szAlias = hb_parc( 1 ); hb_strUpper( szAlias, strlen( szAlias ) ); - + if( ( uiNewArea = hb_rddSelect( szAlias ) ) == 0 ) { hb_errRT_BASE( EG_NOALIAS, 1002, 0, szAlias ); @@ -1365,7 +1389,7 @@ HARBOUR HB_DBUSEAREA( void ) pInfo.atomAlias = ( BYTE * ) szAlias; pInfo.fShared = ISLOG( 5 ) ? hb_parl( 5 ) : !hb_set.HB_SET_EXCLUSIVE; pInfo.fReadonly = ISLOG( 6 ) ? hb_parl( 6 ) : FALSE; - + if( SELF_OPEN( ( AREAP ) pCurrArea->pArea, &pInfo ) == FAILURE ) { SELF_RELEASE( ( AREAP ) pCurrArea->pArea ); @@ -1434,7 +1458,7 @@ HARBOUR HB_DBUSEAREA( void ) HARBOUR HB_DELETED( void ) { BOOL bDeleted = FALSE; - + if( pCurrArea ) SELF_DELETED( ( AREAP ) pCurrArea->pArea, &bDeleted ); hb_retl( bDeleted ); @@ -1452,7 +1476,7 @@ HARBOUR HB_EOF( void ) HARBOUR HB_FCOUNT( void ) { USHORT uiFields = 0; - + if( pCurrArea ) SELF_FIELDCOUNT( ( AREAP ) pCurrArea->pArea, &uiFields ); hb_retni( uiFields ); @@ -1462,7 +1486,7 @@ HARBOUR HB_FIELDGET( void ) { PHB_ITEM pItem; USHORT uiField; - + pItem = hb_itemNew( 0 ); uiField = hb_parni( 1 ); @@ -1477,7 +1501,7 @@ HARBOUR HB_FIELDNAME( void ) { USHORT uiFields, uiIndex; char * szName; - + if( pCurrArea ) { uiIndex = hb_parni( 1 ); @@ -1502,7 +1526,7 @@ HARBOUR HB_FIELDPOS( void ) USHORT uiCount; char * szName; LPFIELD pField; - + if( pCurrArea ) { szName = hb_parc( 1 ); @@ -1527,7 +1551,7 @@ HARBOUR HB_FIELDPUT( void ) { USHORT uiIndex; PHB_ITEM pItem; - + uiIndex = hb_parni( 1 ); if( pCurrArea && uiIndex ) { @@ -1698,12 +1722,13 @@ HARBOUR HB_RDDSETDEFAULT( void ) } } -HARBOUR HB_RDDSHUTDOWN( void ) +void hb_rddShutDown( void ) { LPRDDNODE pRddNode; hb_rddCloseAll(); - hb_xfree( szDefDriver ); + if( szDefDriver ) + hb_xfree( szDefDriver ); while( pRddList ) { pRddNode = pRddList; @@ -1724,7 +1749,7 @@ HARBOUR HB_RECCOUNT( void ) HARBOUR HB_RECNO( void ) { PHB_ITEM pRecNo; - + pRecNo = hb_itemPutNL( NULL, 0 ); if( pCurrArea ) SELF_RECNO( ( AREAP ) pCurrArea->pArea, pRecNo ); @@ -1771,7 +1796,7 @@ HARBOUR HB_RLOCK( void ) HARBOUR HB_SELECT( void ) { char * szAlias; - + szAlias = hb_parc( 1 ); if( strlen( szAlias ) > 0 ) hb_retni( hb_rddSelect( szAlias ) ); diff --git a/harbour/source/rdd/dbf0.prg b/harbour/source/rdd/dbf0.prg index 9208527e7e..741b3d9a79 100644 --- a/harbour/source/rdd/dbf0.prg +++ b/harbour/source/rdd/dbf0.prg @@ -24,11 +24,11 @@ #include "rddsys.ch" -ANNOUNCE DBF +ANNOUNCE _DBF init procedure DBFInit - REQUEST _DBF + REQUEST _DBFC rddRegister( "DBF", RDT_FULL ) diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index 0b4eca44e6..5bab5aeabb 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -84,11 +84,11 @@ typedef struct _DBFMEMO typedef DBFMEMO * LPDBFMEMO; -HARBOUR HB__DBF( void ); +HARBOUR HB__DBFC( void ); HARBOUR HB_DBF_GETFUNCTABLE( void ); HB_INIT_SYMBOLS_BEGIN( dbf1__InitSymbols ) -{ "_DBF", FS_PUBLIC, HB__DBF, 0 }, +{ "_DBFC", FS_PUBLIC, HB__DBFC, 0 }, { "DBF_GETFUNCTABLE", FS_PUBLIC, HB_DBF_GETFUNCTABLE, 0 } HB_INIT_SYMBOLS_END( dbf1__InitSymbols ) #if ! defined(__GNUC__) @@ -1591,7 +1591,7 @@ static RDDFUNCS dbfTable = { 0, /* Super Bof */ 0 /* Super WhoCares */ }; -HARBOUR HB__DBF( void ) +HARBOUR HB__DBFC( void ) { } diff --git a/harbour/source/rdd/delim0.prg b/harbour/source/rdd/delim0.prg index 8ddb0a0f25..b4fc00dea0 100644 --- a/harbour/source/rdd/delim0.prg +++ b/harbour/source/rdd/delim0.prg @@ -24,11 +24,11 @@ #include "rddsys.ch" -ANNOUNCE DELIM +ANNOUNCE _DELIM init procedure DELIMInit - REQUEST _DELIM + REQUEST _DELIMC rddRegister( "DELIM", RDT_TRANSFER ) diff --git a/harbour/source/rdd/delim1.c b/harbour/source/rdd/delim1.c index a0e4b25e6f..3f792a4eb0 100644 --- a/harbour/source/rdd/delim1.c +++ b/harbour/source/rdd/delim1.c @@ -29,11 +29,11 @@ #include "rddapi.h" #include "rddsys.ch" -HARBOUR HB__DELIM( void ); +HARBOUR HB__DELIMC( void ); HARBOUR HB_DELIM_GETFUNCTABLE( void ); HB_INIT_SYMBOLS_BEGIN( delim1__InitSymbols ) -{ "_DELIM", FS_PUBLIC, HB__DELIM, 0 }, +{ "_DELIMC", FS_PUBLIC, HB__DELIMC, 0 }, { "DELIM_GETFUNCTABLE", FS_PUBLIC, HB_DELIM_GETFUNCTABLE, 0 } HB_INIT_SYMBOLS_END( delim1__InitSymbols ) #if ! defined(__GNUC__) @@ -48,7 +48,7 @@ static RDDFUNCS delimSuper = { 0 }; static RDDFUNCS delimTable = { 0 }; -HARBOUR HB__DELIM( void ) +HARBOUR HB__DELIMC( void ) { } diff --git a/harbour/source/rdd/rddsys.prg b/harbour/source/rdd/rddsys.prg index 2dfac09b62..4ff43ac5a3 100644 --- a/harbour/source/rdd/rddsys.prg +++ b/harbour/source/rdd/rddsys.prg @@ -34,9 +34,3 @@ init procedure RddInit return -exit procedure RddExit - - rddShutdown() - -return - diff --git a/harbour/source/rdd/sdf0.prg b/harbour/source/rdd/sdf0.prg index df5a9af47d..0366356d03 100644 --- a/harbour/source/rdd/sdf0.prg +++ b/harbour/source/rdd/sdf0.prg @@ -24,11 +24,11 @@ #include "rddsys.ch" -ANNOUNCE SDF +ANNOUNCE _SDF init procedure SDFInit - REQUEST _SDF + REQUEST _SDFC rddRegister( "SDF", RDT_TRANSFER ) diff --git a/harbour/source/rdd/sdf1.c b/harbour/source/rdd/sdf1.c index 4bb07e3715..2f0d378795 100644 --- a/harbour/source/rdd/sdf1.c +++ b/harbour/source/rdd/sdf1.c @@ -29,11 +29,11 @@ #include "rddapi.h" #include "rddsys.ch" -HARBOUR HB__SDF( void ); +HARBOUR HB__SDFC( void ); HARBOUR HB_SDF_GETFUNCTABLE( void ); HB_INIT_SYMBOLS_BEGIN( sdf1__InitSymbols ) -{ "_SDF", FS_PUBLIC, HB__SDF, 0 }, +{ "_SDFC", FS_PUBLIC, HB__SDFC, 0 }, { "SDF_GETFUNCTABLE", FS_PUBLIC, HB_SDF_GETFUNCTABLE, 0 } HB_INIT_SYMBOLS_END( sdf1__InitSymbols ) #if ! defined(__GNUC__) @@ -48,7 +48,7 @@ static RDDFUNCS sdfSuper = { 0 }; static RDDFUNCS sdfTable = { 0 }; -HARBOUR HB__SDF( void ) +HARBOUR HB__SDFC( void ) { } diff --git a/harbour/source/rtl/arrays.c b/harbour/source/rtl/arrays.c index c17e245fc8..dcbee8f3bb 100644 --- a/harbour/source/rtl/arrays.c +++ b/harbour/source/rtl/arrays.c @@ -222,40 +222,34 @@ BOOL hb_arrayError( PHB_ITEM pArray, ULONG ulIndex, BOOL bAssign ) BOOL hb_arraySet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ) { - if( IS_ARRAY( pArray ) ) + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - { - hb_itemCopy( pArray->item.asArray.value->pItems + ( ulIndex - 1 ), pItem ); - return TRUE; - } + hb_itemCopy( pArray->item.asArray.value->pItems + ( ulIndex - 1 ), pItem ); + return TRUE; } - - return FALSE; + else + return FALSE; } BOOL hb_arrayGet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ) { - if( IS_ARRAY( pArray ) ) + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - { - hb_itemCopy( pItem, pArray->item.asArray.value->pItems + ( ulIndex - 1 ) ); - return TRUE; - } + hb_itemCopy( pItem, pArray->item.asArray.value->pItems + ( ulIndex - 1 ) ); + return TRUE; + } + else + { + hb_itemClear( pItem ); + return FALSE; } - - hb_itemClear( pItem ); - - return FALSE; } -char * hb_arrayGetDate( PHB_ITEM pArray, ULONG ulIndex, char * szDate ) +char * hb_arrayGetDS( PHB_ITEM pArray, ULONG ulIndex, char * szDate ) { - if( IS_ARRAY( pArray ) ) + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - hb_itemGetDS( pArray->item.asArray.value->pItems + ulIndex - 1, szDate ); + hb_itemGetDS( pArray->item.asArray.value->pItems + ulIndex - 1, szDate ); } else { @@ -266,86 +260,76 @@ char * hb_arrayGetDate( PHB_ITEM pArray, ULONG ulIndex, char * szDate ) return szDate; } -BOOL hb_arrayGetBool( PHB_ITEM pArray, ULONG ulIndex ) +BOOL hb_arrayGetL( PHB_ITEM pArray, ULONG ulIndex ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - return hb_itemGetL( pArray->item.asArray.value->pItems + ulIndex - 1 ); - } - - return FALSE; + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetL( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return FALSE; } int hb_arrayGetNI( PHB_ITEM pArray, ULONG ulIndex ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - return hb_itemGetNI( pArray->item.asArray.value->pItems + ulIndex - 1 ); - } - - return 0; + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetNI( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return 0; } long hb_arrayGetNL( PHB_ITEM pArray, ULONG ulIndex ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - return hb_itemGetNL( pArray->item.asArray.value->pItems + ulIndex - 1 ); - } - - return 0; + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetNL( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return 0; } -double hb_arrayGetDouble( PHB_ITEM pArray, ULONG ulIndex ) +double hb_arrayGetND( PHB_ITEM pArray, ULONG ulIndex ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - return hb_itemGetND( pArray->item.asArray.value->pItems + ulIndex - 1 ); - } - - return 0; + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetND( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return 0; } -char * hb_arrayGetString( PHB_ITEM pArray, ULONG ulIndex ) +ULONG hb_arrayCopyC( PHB_ITEM pArray, ULONG ulIndex, char * szBuffer, ULONG ulLen ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - { - PHB_ITEM pItem = pArray->item.asArray.value->pItems + ulIndex - 1; - - if( IS_STRING( pItem ) ) - return pItem->item.asString.value; - } - } - - return ""; + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemCopyC( pArray->item.asArray.value->pItems + ulIndex - 1, szBuffer, ulLen ); + else + return 0; } -ULONG hb_arrayGetStringLen( PHB_ITEM pArray, ULONG ulIndex ) +char * hb_arrayGetC( PHB_ITEM pArray, ULONG ulIndex ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - return hb_itemGetCLen( pArray->item.asArray.value->pItems + ulIndex - 1 ); - } + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetC( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return NULL; +} - return 0; +char * hb_arrayGetCPtr( PHB_ITEM pArray, ULONG ulIndex ) +{ + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetCPtr( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return ""; +} + +ULONG hb_arrayGetCLen( PHB_ITEM pArray, ULONG ulIndex ) +{ + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemGetCLen( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return 0; } WORD hb_arrayGetType( PHB_ITEM pArray, ULONG ulIndex ) { - if( IS_ARRAY( pArray ) ) - { - if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) - return hb_itemType( pArray->item.asArray.value->pItems + ulIndex - 1 ); - } - - return 0; + if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen ) + return hb_itemType( pArray->item.asArray.value->pItems + ulIndex - 1 ); + else + return 0; } BOOL hb_arrayLast( PHB_ITEM pArray, PHB_ITEM pResult ) diff --git a/harbour/source/rtl/extend.c b/harbour/source/rtl/extend.c index 46ce693a02..98def2978c 100644 --- a/harbour/source/rtl/extend.c +++ b/harbour/source/rtl/extend.c @@ -97,7 +97,7 @@ char * hb_parc( int iParam, ... ) ulArrayIndex = va_arg( va, ULONG ); va_end( va ); - return hb_arrayGetString( pItem, ulArrayIndex ); + return hb_arrayGetCPtr( pItem, ulArrayIndex ); } } @@ -130,7 +130,7 @@ ULONG hb_parclen( int iParam, ... ) ulArrayIndex = va_arg( va, ULONG ); va_end( va ); - return hb_arrayGetStringLen( pItem, ulArrayIndex ); + return hb_arrayGetCLen( pItem, ulArrayIndex ); } } @@ -166,7 +166,7 @@ ULONG hb_parcsiz( int iParam, ... ) ulArrayIndex = va_arg( va, ULONG ); va_end( va ); - return hb_arrayGetStringLen( pItem, ulArrayIndex ) + 1; + return hb_arrayGetCLen( pItem, ulArrayIndex ) + 1; } } @@ -206,7 +206,7 @@ char * hb_pards( int iParam, ... ) ulArrayIndex = va_arg( va, ULONG ); va_end( va ); - hb_arrayGetDate( pItem, ulArrayIndex, stack.szDate ); + hb_arrayGetDS( pItem, ulArrayIndex, stack.szDate ); return stack.szDate; /* this guaranties good behavior when multithreading */ } @@ -250,7 +250,7 @@ int hb_parl( int iParam, ... ) ulArrayIndex = va_arg( va, ULONG ); va_end( va ); - return hb_arrayGetBool( pItem, ulArrayIndex ) ? 1 : 0; + return hb_arrayGetL( pItem, ulArrayIndex ) ? 1 : 0; } } @@ -289,7 +289,7 @@ double hb_parnd( int iParam, ... ) ulArrayIndex = va_arg( va, ULONG ); va_end( va ); - return hb_arrayGetDouble( pItem, ulArrayIndex ); + return hb_arrayGetND( pItem, ulArrayIndex ); } } diff --git a/harbour/source/rtl/itemapi.c b/harbour/source/rtl/itemapi.c index 7941684c65..cf2b8d6f23 100644 --- a/harbour/source/rtl/itemapi.c +++ b/harbour/source/rtl/itemapi.c @@ -90,7 +90,7 @@ PHB_ITEM hb_evalLaunch( PEVALINFO pEvalInfo ) if( IS_STRING( pEvalInfo->pItems[ 0 ] ) ) { - hb_vmPushSymbol( hb_dynsymGet( hb_itemGetC( pEvalInfo->pItems[ 0 ] ) )->pSymbol ); + hb_vmPushSymbol( hb_dynsymGet( hb_itemGetCPtr( pEvalInfo->pItems[ 0 ] ) )->pSymbol ); hb_vmPushNil(); while( w <= pEvalInfo->paramCount ) hb_vmPush( pEvalInfo->pItems[ w++ ] ); @@ -367,7 +367,7 @@ char * hb_itemGetCPtr( PHB_ITEM pItem ) if( pItem && IS_STRING( pItem ) ) return pItem->item.asString.value; else - return NULL; + return ""; } ULONG hb_itemGetCLen( PHB_ITEM pItem ) diff --git a/harbour/source/rtl/setkey.prg b/harbour/source/rtl/setkey.prg index 05b3fea594..d822ae3d13 100644 --- a/harbour/source/rtl/setkey.prg +++ b/harbour/source/rtl/setkey.prg @@ -128,24 +128,25 @@ return bReturn /* $DOC$ * $FUNCNAME$ - * SetKeyGet + * HB_SetKeyGet * $CATEGORY$ * ? * $ONELINER$ * Determine a set-key code block & condition-block * $SYNTAX$ - * SETKEYGET( [, ] ) + * HB_SETKEYGET( [, ] ) * $ARGUMENTS$ * is an numeric key value * is an optional return-parameter * $RETURNS$ * Current assigned action-block * $DESCRIPTION$ - * The SetKeyGet() function returns the current code-block assigned to a - * key, and optionally assignes the condition-block to the return-parameter + * The HB_SetKeyGet() function returns the current code-block assigned to + * a key, and optionally assignes the condition-block to the + * return-parameter * $EXAMPLES$ * local bOldF10, bOldF10Cond - * bOldF10 := SetKeyGet( K_F10, @bOldF10Cond ) + * bOldF10 := HB_SetKeyGet( K_F10, @bOldF10Cond ) * ... // some other processing * SetKey( K_F10, bOldF10, bOldF10Cond ) * $TESTS$ @@ -153,12 +154,12 @@ return bReturn * $STATUS$ * C * $COMPLIANCE$ - * SETKEYGET() is a new function and hence not CA-Clipper compliant. + * HB_SETKEYGET() is a new function and hence not CA-Clipper compliant. * $SEEALSO$ - * SETKEY(), SETKEYSAVE(), SETKEYCHECK() + * SETKEY(), HB_SETKEYSAVE(), HB_SETKEYCHECK() * $END$ */ -Function SetKeyGet( nKey, bCondition ) +Function HB_SetKeyGet( nKey, bCondition ) local nFound if valType( nKey ) = "N" .and. nKey <> 0 @@ -178,40 +179,40 @@ return NIL //bReturn /* $DOC$ * $FUNCNAME$ - * SetKeySave + * HB_SetKeySave * $CATEGORY$ * ? * $ONELINER$ * Returns a copy of internal set-key list, optionally overwriting * $SYNTAX$ - * SETKEYSAVE( [ ] ) + * HB_SETKEYSAVE( [ ] ) * $ARGUMENTS$ * is an optional set-key list from a previous call to - * SetKeySave(), or NIL to clear current set-key list + * HB_SetKeySave(), or NIL to clear current set-key list * $RETURNS$ * Current set-key list * $DESCRIPTION$ - * SetKeySave() is designed to act like the set() function which returns - * the current state of an environment setting, and optionally assigning - * a new value. In this case, the "environment setting" is the internal - * set-key list, and the optional new value is either a value returned - * from a previous call to SetKeySave() - to restore that list, or the - * value of NIL to clear the current list. + * HB_SetKeySave() is designed to act like the set() function which + * returns the current state of an environment setting, and optionally + * assigning a new value. In this case, the "environment setting" is the + * internal set-key list, and the optional new value is either a value + * returned from a previous call to SetKeySave() - to restore that list, + * or the value of NIL to clear the current list. * $EXAMPLES$ - * local aKeys := SetKeySave( NIL ) // removes all current set=keys + * local aKeys := HB_SetKeySave( NIL ) // removes all current set=keys * ... // some other processing - * SetKeySave( aKeys ) + * HB_SetKeySave( aKeys ) * $TESTS$ * None definable * $STATUS$ * C * $COMPLIANCE$ - * SETKEYSAVE() is new. + * HB_SETKEYSAVE() is new. * $SEEALSO$ * SETKEY() * $END$ */ -Function SetKeySave( OldKeys ) +Function HB_SetKeySave( OldKeys ) local aReturn := aClone( aSetKeys ) if pcount() != 0 .or. valtype( OldKeys ) = "A" @@ -230,13 +231,13 @@ return aReturn /* $DOC$ * $FUNCNAME$ - * SetKeyCheck + * HB_SetKeyCheck * $CATEGORY$ * ? * $ONELINER$ * Impliments common hot-key activation code * $SYNTAX$ - * SetKeyCheck( [, ][, ][, ] ) + * HB_SetKeyCheck( [, ][, ][, ] ) * $ARGUMENTS$ * is a numeric key value to be tested * code-block, if executed @@ -247,20 +248,20 @@ return aReturn * If there is a hot-key association (before checking any condition): * - if there is a condition-block, it is passed one parameter - * - when the hot-key code-block is called, it is passed 1 to 4 parameters, - * depending on the parameters passed to SetKeyCheck(). Any parameters - * so passed are directly passed to the code-block, with an additional - * parameter being + * depending on the parameters passed to HB_SetKeyCheck(). Any + * parameters so passed are directly passed to the code-block, with an + * additional parameter being * $DESCRIPTION$ - * SetKeyCheck() is intended as a common interface to the SetKey() + * HB_SetKeyCheck() is intended as a common interface to the SetKey() * functionality for such functions as ACHOICE(), DBEDIT(), MEMOEDIT(), * ACCEPT, INPUT, READ, and WAIT * $EXAMPLES$ * // within ReadModal() - * if SetKeyCheck( K_ALT_X, GetActive() ) + * if HB_SetKeyCheck( K_ALT_X, GetActive() ) * ... // some other processing * endif * // within TBrowse handler - * case SetKeyCheck( nInkey, oTBrowse ) + * case HB_SetKeyCheck( nInkey, oTBrowse ) * return * case nInKey == K_ESC * ... // some other processing @@ -269,12 +270,12 @@ return aReturn * $STATUS$ * C * $COMPLIANCE$ - * SetKeyCheck() is new. + * HB_SetKeyCheck() is new. * $SEEALSO$ - * SETKEY(), SETKEYSAVE() + * SETKEY(), HB_SETKEYSAVE() * $END$ */ -Function SetKeyCheck( nKey, p1, p2, p3 ) +Function HB_SetKeyCheck( nKey, p1, p2, p3 ) local nFound, aKey, bBlock if ( nFound := aScan( aSetKeys, {|x| x[ KEY ] = nKey } ) ) > 0 @@ -299,4 +300,4 @@ Function SetKeyCheck( nKey, p1, p2, p3 ) endif -return .f. \ No newline at end of file +return .f. diff --git a/harbour/source/runner/stdalone/external.prg b/harbour/source/runner/stdalone/external.prg index b8a2d9f748..d086d2e01b 100644 --- a/harbour/source/runner/stdalone/external.prg +++ b/harbour/source/runner/stdalone/external.prg @@ -1,4 +1,4 @@ -/* +/* * $Id$ */ @@ -46,11 +46,10 @@ EXTERNAL __DYNSGETINDEX // EXTERNAL ERRORSYS EXTERNAL ERRORNEW -EXTERNAL EVAL EXTERNAL LEN EXTERNAL EMPTY EXTERNAL VALTYPE -EXTERNAL ERRORBLOCK +EXTERNAL WORD EXTERNAL PROCNAME EXTERNAL PROCLINE EXTERNAL __QUIT @@ -81,20 +80,6 @@ EXTERNAL ACLONE // //symbols from file: rtl\classes.c // -EXTERNAL __OBJGETMSGLIST -EXTERNAL __OBJGETMETHODLIST -EXTERNAL __OBJGETVALUELIST -EXTERNAL __OBJSETVALUELIST -EXTERNAL __OBJHASDATA -EXTERNAL __OBJHASMETHOD -EXTERNAL __OBJADDDATA -EXTERNAL __OBJADDINLINE -EXTERNAL __OBJADDMETHOD -EXTERNAL __OBJDELDATA -EXTERNAL __OBJDELINLINE -EXTERNAL __OBJDELMETHOD -EXTERNAL __OBJMODINLINE -EXTERNAL __OBJMODMETHOD EXTERNAL __CLSADDMSG EXTERNAL __CLSNEW EXTERNAL __CLSDELMSG @@ -120,6 +105,7 @@ EXTERNAL OUTERR EXTERNAL QQOUT EXTERNAL QOUT EXTERNAL SETPOS +EXTERNAL SETPOSBS EXTERNAL DEVPOS EXTERNAL DEVOUT EXTERNAL DISPOUT @@ -178,6 +164,7 @@ EXTERNAL DIRECTORY //symbols from file: rtl\do.c // EXTERNAL DO +EXTERNAL EVAL // //symbols from file: rtl\environ.c // @@ -188,6 +175,8 @@ EXTERNAL __RUN // //symbols from file: rtl\errorapi.c // +EXTERNAL ERRORBLOCK +EXTERNAL DOSERROR EXTERNAL __ERRRT_BASE // //symbols from file: rtl\extend.c @@ -207,6 +196,12 @@ EXTERNAL FSEEK EXTERNAL FILE EXTERNAL FREADSTR EXTERNAL CURDIR +EXTERNAL DIRCHANGE +EXTERNAL MAKEDIR +EXTERNAL DIRREMOVE +EXTERNAL DISKSPACE +EXTERNAL DISKCHANGE +EXTERNAL DISKNAME EXTERNAL BIN2I EXTERNAL BIN2L EXTERNAL BIN2W @@ -231,6 +226,7 @@ EXTERNAL HARDCR // EXTERNAL INKEY EXTERNAL __KEYBOARD +EXTERNAL __KEYPUT EXTERNAL NEXTKEY EXTERNAL LASTKEY // @@ -260,6 +256,13 @@ EXTERNAL __MVXRELEASE EXTERNAL __MVRELEASE EXTERNAL __MVSCOPE EXTERNAL __MVCLEAR +EXTERNAL __MVDBGINFO +// +//symbols from file: rtl\mouseapi.c +// +// +//symbols from file: rtl\mousexxx.c +// // //symbols from file: rtl\msgxxx.c // @@ -270,6 +273,7 @@ EXTERNAL MEMOTRAN // //symbols from file: rtl\set.c // +EXTERNAL SETCANCEL EXTERNAL __SETCENTURY EXTERNAL SET // @@ -351,6 +355,20 @@ EXTERNAL __MENUTO // //symbols from file: rtl\objfunc.prg // +EXTERNAL __OBJHASDATA +EXTERNAL __OBJHASMETHOD +EXTERNAL __OBJGETMSGLIST +EXTERNAL __OBJGETMETHODLIST +EXTERNAL __OBJGETVALUELIST +EXTERNAL __OBJSETVALUELIST +EXTERNAL __OBJADDMETHOD +EXTERNAL __OBJADDINLINE +EXTERNAL __OBJADDDATA +EXTERNAL __OBJMODMETHOD +EXTERNAL __OBJMODINLINE +EXTERNAL __OBJDELMETHOD +EXTERNAL __OBJDELINLINE +EXTERNAL __OBJDELDATA // //symbols from file: rtl\readvar.prg // @@ -359,9 +377,9 @@ EXTERNAL READVAR //symbols from file: rtl\setkey.prg // EXTERNAL SETKEY -EXTERNAL SETKEYGET -EXTERNAL SETKEYSAVE -EXTERNAL SETKEYCHECK +EXTERNAL HB_SETKEYGET +EXTERNAL HB_SETKEYSAVE +EXTERNAL HB_SETKEYCHECK // //symbols from file: rtl\tbcolumn.prg // @@ -397,18 +415,21 @@ EXTERNAL __XRESTSCREEN // //symbols from file: rdd\dbcmd.c // -EXTERNAL DBF -EXTERNAL SDF -EXTERNAL DELIM +EXTERNAL _DBF +EXTERNAL _SDF +EXTERNAL _DELIM EXTERNAL RDDSYS EXTERNAL AFIELDS EXTERNAL ALIAS EXTERNAL BOF +EXTERNAL DBAPPEND EXTERNAL DBCLOSEALL EXTERNAL DBCLOSEAREA EXTERNAL DBCOMMIT +EXTERNAL DBCOMMITALL EXTERNAL DBCREATE EXTERNAL DBDELETE +EXTERNAL DBF EXTERNAL DBGOBOTTOM EXTERNAL DBGOTO EXTERNAL DBGOTOP @@ -435,13 +456,13 @@ EXTERNAL FLOCK EXTERNAL FOUND EXTERNAL HEADER EXTERNAL LASTREC +EXTERNAL LOCK EXTERNAL LUPDATE EXTERNAL NETERR EXTERNAL RDDLIST EXTERNAL RDDNAME EXTERNAL RDDREGISTER EXTERNAL RDDSETDEFAULT -EXTERNAL RDDSHUTDOWN EXTERNAL RECCOUNT EXTERNAL RECNO EXTERNAL RECSIZE @@ -451,17 +472,17 @@ EXTERNAL USED // //symbols from file: rdd\dbf1.c // -EXTERNAL _DBF +EXTERNAL _DBFC EXTERNAL DBF_GETFUNCTABLE // //symbols from file: rdd\delim1.c // -EXTERNAL _DELIM +EXTERNAL _DELIMC EXTERNAL DELIM_GETFUNCTABLE // //symbols from file: rdd\sdf1.c // -EXTERNAL _SDF +EXTERNAL _SDFC EXTERNAL SDF_GETFUNCTABLE // //symbols from file: rdd\dbf0.prg @@ -640,6 +661,19 @@ EXTERNAL GT_STRRIGHT // EXTERNAL TFILEREAD // +//symbols from file: tools\nconvert.prg +// +EXTERNAL ISBIN +EXTERNAL ISOCTAL +EXTERNAL ISDEC +EXTERNAL ISHEXA +EXTERNAL DECTOBIN +EXTERNAL DECTOOCTAL +EXTERNAL DECTOHEXA +EXTERNAL BINTODEC +EXTERNAL OCTALTODEC +EXTERNAL HEXATODEC +// //symbols from file: tools\numtxten.prg // EXTERNAL NUMTOTXTEN diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index ae27a520fc..43e705fdec 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -185,6 +185,7 @@ void hb_vmQuit( void ) hb_itemClear( &stack.Return ); hb_arrayRelease( &aStatics ); + hb_rddShutDown(); hb_errExit(); hb_clsReleaseAll(); hb_vmReleaseLocalSymbols(); /* releases the local modules linked list */