From 5c3ea08121a9eed82ad55c7446360cfbc7ce14e2 Mon Sep 17 00:00:00 2001 From: Mindaugas Kavaliauskas Date: Thu, 24 Oct 2013 15:35:53 +0300 Subject: [PATCH] 2013-10-24 15:34 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt) * include/dbinfo.ch * include/hbrdddbf.h * src/rdd/dbf1.c + added default codepage setting RDDI_CODEPAGE for DBF RDD (and all inherited RDDs). This helps to do an easy migration of application to unicode, using existing dbf files: HB_CDPSELECT("UTF8EX") RDDINFO(RDDI_CODEPAGE, ) --- ChangeLog.txt | 10 ++++++++++ include/dbinfo.ch | 1 + include/hbrdddbf.h | 2 ++ src/rdd/dbf1.c | 26 ++++++++++++++++---------- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 4165703f41..1aeed895bf 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,16 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-10-24 15:34 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt) + * include/dbinfo.ch + * include/hbrdddbf.h + * src/rdd/dbf1.c + + added default codepage setting RDDI_CODEPAGE for DBF RDD (and all + inherited RDDs). This helps to do an easy migration of application + to unicode, using existing dbf files: + HB_CDPSELECT("UTF8EX") + RDDINFO(RDDI_CODEPAGE, ) + 2013-10-23 14:39 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/gtqtc/gtqtc1.cpp * added support for keyevents with multicharacter strings. diff --git a/include/dbinfo.ch b/include/dbinfo.ch index ff074f5434..131001552e 100644 --- a/include/dbinfo.ch +++ b/include/dbinfo.ch @@ -105,6 +105,7 @@ #define RDDI_PASSWORD 42 /* Get/Set default password */ #define RDDI_LOCKRETRY 43 /* Get/Set record and file lock timeout value */ #define RDDI_DIRTYREAD 44 /* Get/Set index dirty read flag */ +#define RDDI_CODEPAGE 45 /* Default codepage used by RDD */ /* Constants for SELF_ORDINFO () diff --git a/include/hbrdddbf.h b/include/hbrdddbf.h index f8cd71585e..53e70c458f 100644 --- a/include/hbrdddbf.h +++ b/include/hbrdddbf.h @@ -137,6 +137,8 @@ typedef struct _DBFDATA char * szTrigger; char * szPendingTrigger; + PHB_CODEPAGE pCodepage; /* Default RDD codepage */ + HB_BYTE bLockType; /* 0 */ HB_BYTE bTableType; /* DB_DBF_STD */ HB_BYTE bCryptType; /* DB_CRYPT_NONE */ diff --git a/src/rdd/dbf1.c b/src/rdd/dbf1.c index c0c67c87ae..37f765b259 100644 --- a/src/rdd/dbf1.c +++ b/src/rdd/dbf1.c @@ -3381,12 +3381,10 @@ static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo ) pArea->ulMemoBlockSize = 0; if( pCreateInfo->cdpId ) - { pArea->area.cdPage = hb_cdpFindExt( pCreateInfo->cdpId ); - if( ! pArea->area.cdPage ) - pArea->area.cdPage = hb_vmCDP(); - } - else + if( ! pArea->area.cdPage ) + pArea->area.cdPage = DBFAREA_DATA( pArea )->pCodepage; + if( ! pArea->area.cdPage ) pArea->area.cdPage = hb_vmCDP(); pItem = hb_itemNew( NULL ); @@ -4015,12 +4013,10 @@ static HB_ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo ) } if( pOpenInfo->cdpId ) - { pArea->area.cdPage = hb_cdpFindExt( pOpenInfo->cdpId ); - if( ! pArea->area.cdPage ) - pArea->area.cdPage = hb_vmCDP(); - } - else + if( ! pArea->area.cdPage ) + pArea->area.cdPage = DBFAREA_DATA( pArea )->pCodepage; + if( ! pArea->area.cdPage ) pArea->area.cdPage = hb_vmCDP(); pArea->fShared = pOpenInfo->fShared; @@ -6038,6 +6034,16 @@ static HB_ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, HB_USHORT uiIndex, HB_ULONG ulC return HB_FAILURE; break; + case RDDI_CODEPAGE: + { + const char * szCodepage = pData->pCodepage ? pData->pCodepage->id : NULL; + + if( HB_IS_STRING( pItem ) ) + pData->pCodepage = hb_cdpFindExt( hb_itemGetCPtr( pItem ) ); + + hb_itemPutC( pItem, szCodepage ); + } + default: return SUPER_RDDINFO( pRDD, uiIndex, ulConnect, pItem );