2002-10-25 14:30 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>

This commit is contained in:
Alexander S.Kresin
2002-10-25 10:28:21 +00:00
parent 199cd82230
commit 6345e1c791
6 changed files with 61 additions and 24 deletions

View File

@@ -8,6 +8,18 @@
2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2002-10-25 14:30 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
* source/rtl/cdpapi.c
* source/codepage/cdpru866.c
* source/codepage/cdprukoi.c
* source/codepage/cdpruwin.c
* source/vm/hvm.c
* Memory for codepage tables is allocated dynamically now - this is needed
to provide a possibility of loading codepages from external file while
run-time.
* Possibility to have the same weight for some characters ( usually accented
and appropriate unaccented ) is implemented.
2002-10-25 11:38 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
* source/rdd/dbfntx/dbfntx1.c
! Few fixes, related to codepages support

View File

@@ -58,13 +58,9 @@
#include "hbapi.h"
#include "hbapicdp.h"
static BYTE s_chars[256];
static BYTE s_upper[256];
static BYTE s_lower[256];
static HB_CODEPAGE s_codepage = { "RU866",32,
"<EFBFBD>ƒ„…†‡ˆ‰ŠŒ<EFBFBD>Ž<EFBFBD><EFBFBD>“”•˜™šœ<EFBFBD>žŸ"," ¡¢£¤¥¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï",
0,s_chars,s_upper,s_lower };
0,NULL,NULL,NULL };
HB_CODEPAGE_ANNOUNCE( RU866 );

View File

@@ -58,13 +58,9 @@
#include "hbapi.h"
#include "hbapicdp.h"
static BYTE s_chars[256];
static BYTE s_upper[256];
static BYTE s_lower[256];
static HB_CODEPAGE s_codepage = { "RUKOI8",32,
"áâ÷çäåöúéêëìíîïðòóôõæèãþûýÿùøüàñ","ÁÂ×ÇÄÅÖÚÉÊËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝßÙØÜÀÑ",
0,s_chars,s_upper,s_lower };
0,NULL,NULL,NULL };
HB_CODEPAGE_ANNOUNCE( RUKOI8 );

View File

@@ -58,13 +58,9 @@
#include "hbapi.h"
#include "hbapicdp.h"
static BYTE s_chars[256];
static BYTE s_upper[256];
static BYTE s_lower[256];
static HB_CODEPAGE s_codepage = { "RU1251",32,
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß","àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ",
0,s_chars,s_upper,s_lower };
0,NULL,NULL,NULL };
HB_CODEPAGE_ANNOUNCE( RU1251 );

View File

@@ -90,32 +90,51 @@ BOOL hb_cdpRegister( PHB_CODEPAGE cdpage )
if( !s_cdpList[ iPos ] )
{
int i, iu, il, iumax = 0, ilmax = 0;
char *ptrUpper = cdpage->CharsUpper;
char *ptrLower = cdpage->CharsLower;
char *ptr;
s_cdpList[ iPos ] = cdpage;
cdpage->lSort = FALSE;
if( cdpage->nChars )
{
cdpage->s_chars = (BYTE*) hb_xgrab(256);
cdpage->s_upper = (BYTE*) hb_xgrab(256);
cdpage->s_lower = (BYTE*) hb_xgrab(256);
for( i=0; i<256; i++ )
{
cdpage->s_chars[i] = 0;
cdpage->s_upper[i] = toupper( (BYTE) i&255 );
cdpage->s_lower[i] = tolower( (BYTE) i&255 );
}
for( i=0; i<cdpage->nChars; i++ )
for( i=1; *ptrUpper; i++,ptrUpper++,ptrLower++ )
{
iu = (((int)cdpage->CharsUpper[i])&255);
cdpage->s_chars[ iu ] = i+1;
il = (((int)cdpage->CharsLower[i])&255);
cdpage->s_chars[ il ] = i+1+cdpage->nChars;
if( *ptrUpper == '=' )
{
for( ptr=ptrUpper+1; *ptr; ptr++ )
*(ptr-1) = *ptr;
*(ptr-1) = '\0';
for( ptr=ptrLower+1; *ptr; ptr++ )
*(ptr-1) = *ptr;
*(ptr-1) = '\0';
i--;
}
else if( *ptrUpper == '.' )
{
}
iu = (((int)*ptrUpper)&255);
cdpage->s_chars[ iu ] = i;
il = (((int)*ptrLower)&255);
cdpage->s_chars[ il ] = i+cdpage->nChars;
if( iu < iumax || il < ilmax )
cdpage->lSort = TRUE;
iumax = iu; ilmax = il;
iu = ((int)(cdpage->CharsLower[i]))&255;
cdpage->s_upper[iu] = cdpage->CharsUpper[i];
il = ((int)(cdpage->CharsUpper[i]))&255;
cdpage->s_lower[il] = cdpage->CharsLower[i];
iu = ((int)(*ptrLower))&255;
cdpage->s_upper[iu] = *ptrUpper;
il = ((int)(*ptrUpper))&255;
cdpage->s_lower[il] = *ptrLower;
}
}
// printf( "\n%s %d",s_cdpage->id,s_cdpage->lSort );
@@ -215,6 +234,22 @@ int hb_cdpcmp( char* szFirst, char* szSecond, int iLen, PHB_CODEPAGE cdpage )
return iRet;
}
void hb_cdpReleaseAll( void )
{
int iPos = 0;
while( iPos < HB_CDP_MAX_ && s_cdpList[iPos] )
{
if( s_cdpList[ iPos ]->s_chars )
hb_xfree( s_cdpList[ iPos ]->s_chars );
if( s_cdpList[ iPos ]->s_upper )
hb_xfree( s_cdpList[ iPos ]->s_upper );
if( s_cdpList[ iPos ]->s_lower )
hb_xfree( s_cdpList[ iPos ]->s_lower );
iPos ++;
}
}
HB_FUNC( HB_SETCODEPAGE )
{
hb_retc( s_cdpage->id );

View File

@@ -195,6 +195,7 @@ static void hb_vmReleaseLocalSymbols( void ); /* releases the memory of the
extern void * hb_mthRequested( void ); /* profiler from classes.c */
extern void hb_mthAddTime( void *, ULONG ); /* profiler from classes.c */
extern void hb_cdpReleaseAll( void );
BOOL hb_bProfiler = FALSE; /* profiler status is off */
BOOL hb_bTracePrgCalls = FALSE; /* prg tracing is off */
@@ -391,6 +392,7 @@ void HB_EXPORT hb_vmQuit( void )
hb_dynsymRelease(); /* releases the dynamic symbol table */
hb_conRelease(); /* releases Console */
hb_setRelease(); /* releases Sets */
hb_cdpReleaseAll(); /* releases codepages */
/* release all remaining items */
hb_stackRemove( 0 );