From bce863e76c166a70f034d41e2489cea28dc94262 Mon Sep 17 00:00:00 2001 From: Brian Hays Date: Sun, 27 May 2001 05:19:21 +0000 Subject: [PATCH] 2001-05-26 10:25 UTC-0800 Brian Hays --- harbour/ChangeLog | 27 +++++++++++++++++---------- harbour/source/rdd/dbcmd.c | 19 +++++++++++++------ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index e8ad73c937..9a0f603108 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,14 +1,9 @@ -2001-05-26 21:10 UTC-0800 Ron Pinkas - * contrib/dot/pp.prg - ! Fixed support for '$' in NextToken() and NextExp() - + Added nAtSkipStr() to exclude content of strings when searching for ';' - ! Fixed Multi Line logic to use nAtSkipStr() instead of At() - + Added infile C versions for NextToken() and NextIdentifier() - + Added precompiled rules for FiveWin.ch (Harbour) - + Added precompiled rules for RP_Run.ch. +2001-05-26 10:25 UTC-0800 Brian Hays - * source/compiler/genc.c - + Added few #include files to generation of inline C. + * source/rdd/dbcmd.c + * Harrier's fix to APPEND FROM from a source file + with a different structure than the target. + Thanks, Harrier, it works! 2001-05-25 12:20 UTC-0800 Ron Pinkas * contrib/dot/pp.prg @@ -61,6 +56,18 @@ * contrib/dot/pp.txt * Updated documentation. +valid Identifiers - Expansion forces a resacn from top. + #[x]translates against all tokens - Expansion forces a resacn from top of #defines. + #[x]command agains the first token - Expansion forces a resacn from top of #defines. + ! Corrected and refined many aspects of Interpreter mode. + + Added ExecuteMethod() and support for OO syntax. + + Added support for -I command line switch. + + * contrib/dot/rp_run.ch + + Added support for OO syntax. + + * contrib/dot/pp.txt + * Updated documentation. /* PP Interpreter mode, is now capable of running code like this: //---------------------------// diff --git a/harbour/source/rdd/dbcmd.c b/harbour/source/rdd/dbcmd.c index fc5bde60df..d20a296416 100644 --- a/harbour/source/rdd/dbcmd.c +++ b/harbour/source/rdd/dbcmd.c @@ -3432,7 +3432,7 @@ static LPAREANODE GetTheOtherArea( char *szDriver, char * szFileName, BOOL creat } /* move the Field Data between areas by name */ -static void rddMoveFields( AREAP pAreaFrom, AREAP pAreaTo, PHB_ITEM pFields ) +static void rddMoveFields( AREAP pAreaFrom, AREAP pAreaTo, PHB_ITEM pFields, BOOL bNameMatch ) { USHORT i, f=1; PHB_ITEM fieldValue; @@ -3443,8 +3443,13 @@ static void rddMoveFields( AREAP pAreaFrom, AREAP pAreaTo, PHB_ITEM pFields ) /* list or field in the list?*/ if ( !pFields || IsFieldIn( (( PHB_DYNS )(pAreaFrom->lpFields + i)->sym )->pSymbol->szName, pFields )) { - SELF_GETVALUE( pAreaFrom, i+1, fieldValue ); - SELF_PUTVALUE( pAreaTo, f++, fieldValue ); + if ( bNameMatch ) + f = hb_rddFieldIndex( pAreaTo, (( PHB_DYNS )(pAreaFrom->lpFields + i)->sym )->pSymbol->szName ); + if ( f ) + { + SELF_GETVALUE( pAreaFrom, i+1, fieldValue ); + SELF_PUTVALUE( pAreaTo, f++, fieldValue ); + } } } hb_itemRelease( fieldValue ); @@ -3459,6 +3464,7 @@ static ERRCODE rddMoveRecords( char *cAreaFrom, char *cAreaTo, PHB_ITEM pFields, LONG toGo=lNext; BOOL bFor, bWhile; BOOL keepGoing=TRUE; + BOOL bNameMatch=FALSE; AREAP pAreaFrom; AREAP pAreaTo; LPAREANODE pAreaRelease=NULL; @@ -3497,8 +3503,9 @@ static ERRCODE rddMoveRecords( char *cAreaFrom, char *cAreaTo, PHB_ITEM pFields, pAreaTo = (AREAP) s_pCurrArea->pArea; - if ( cAreaFrom ) /*it's an APPEND FROM*/ - { /*make it current*/ + if ( cAreaFrom ) /*it's an APPEND FROM*/ + { /*make it current*/ + bNameMatch = TRUE; /*we pass fields by name */ pAreaRelease = s_pCurrArea = GetTheOtherArea( szDriver, cAreaFrom, FALSE, NULL ); pAreaFrom = (AREAP) pAreaRelease->pArea; } @@ -3541,7 +3548,7 @@ static ERRCODE rddMoveRecords( char *cAreaFrom, char *cAreaTo, PHB_ITEM pFields, if ( bFor ) { SELF_APPEND( ( AREAP ) pAreaTo, FALSE ); /*put a new one on TO Area*/ - rddMoveFields( pAreaFrom, pAreaTo, pFields ); /*move the data*/ + rddMoveFields( pAreaFrom, pAreaTo, pFields, bNameMatch ); /*move the data*/ } if ( lRec == 0 || pFor ) /*not only one record? Or there's a For clause?*/ keepGoing = TRUE;