>> PS. I've tried to modify the source for MBCS conversion, and have
>> attached the diff file for what I have working for me.
Sorry, our mailing system might cut off the attached file.
I put it again.
--- from here --- from here --- from here --- from here
diff -r -c ./MaxDB_ORG/sys/src/sp/hsp81.h ./MaxDB_DEV/sys/src/sp/hsp81.h
*** ./MaxDB_ORG/sys/src/sp/hsp81.h Tue Oct 18 07:11:20 2005
--- ./MaxDB_DEV/sys/src/sp/hsp81.h Fri Sep 22 08:25:53 2006
***************
*** 115,120 ****
--- 115,121 ----
{
tsp00_KnlIdentifierc name; /* Code page name */
tsp00_Uint2 map[256]; /* UCS2 code points for all 256 ASCII
Character of Code Page ID */
+ int isMultiByte; /* MultiByte codepage: 1, others: 0 */
} tsp81_CodePage;
/*!
diff -r -c ./MaxDB_ORG/sys/src/sp/vsp78_0.c ./MaxDB_DEV/sys/src/sp/vsp78_0.c
*** ./MaxDB_ORG/sys/src/sp/vsp78_0.c Tue Oct 18 07:11:22 2005
--- ./MaxDB_DEV/sys/src/sp/vsp78_0.c Fri Sep 22 08:33:53 2006
***************
*** 885,890 ****
--- 885,906 ----
srcLimit = destBufferLengthInBytes;
result = sp78_TargetExhausted;
}
+
+ #ifdef WIN32
+ if( sp81CodePage && sp81CodePage->isMultiByte ) { // if MultiByte codepage
+ *destBytesWritten =
+ WideCharToMultiByte( CP_ACP, 0, srcBuffer, srcLimit,
+ (char *)destBuffer, destBufferLengthInBytes,
+ NULL, NULL );
+ if( srcLimit > 0 && *destBytesWritten <= 0 ) {
+ result = sp78_SourceCorrupted;
+ } else {
+ *srcBytesParsed = srcLengthInBytes;
+ }
+ return( result );
+ }
+ #endif
+
*srcBytesParsed = sp81UCS2toASCII( (tsp00_Byte *)destBuffer,
destBufferLengthInBytes,
destBytesWritten,
diff -r -c ./MaxDB_ORG/sys/src/sp/vsp81.c ./MaxDB_DEV/sys/src/sp/vsp81.c
*** ./MaxDB_ORG/sys/src/sp/vsp81.c Tue Oct 18 07:11:22 2005
--- ./MaxDB_DEV/sys/src/sp/vsp81.c Fri Sep 22 08:30:50 2006
***************
*** 1505,1510 ****
--- 1505,1519 ----
return sp81ASCIItoUCS2(dest, destLen, destSwapped, destOut, src,
srcLen);
}
+ #ifdef WIN32
+ if( srcCodePage && srcCodePage->isMultiByte ) { // if MultiByte codepage
+ convertCount = MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
+ src, srcLen, dest, destLen );
+ *destOut = convertCount;
+ return( convertCount );
+ }
+ #endif
+
convertCount = ( srcLen > destLen ? destLen : srcLen );
byteIndex = ( destSwapped ? 0 : 1 );
***************
*** 1567,1575 ****
--- 1576,1596 ----
/*---------------------------------------------------------------------------*/
+ static boolean sp81IsMultiByteCodePage(tsp81_CodePage *CodePage)
+ {
+ boolean isMultiByte = false;
+ if( CodePage && CodePage->name ) {
+ if( strcmp(CodePage->name, "WINDOWS-932") == 0 ) {
+ isMultiByte = true;
+ }
+ }
+ return( isMultiByte );
+ }
+
tsp81_CodePage *sp81SetCodePage(tsp81_CodePage *CodePage)
{
tsp81_CodePage *oldCodePage = sp81CodePage;
+ CodePage->isMultiByte = sp81IsMultiByteCodePage( CodePage );
sp81CodePage = CodePage;
return oldCodePage;
}
--- to here --- to here --- to here --- to here
--- ohtomo
--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]