22 * conversion between client encoding and server internal encoding
33 * (currently mule internal code (mic) is used)
44 * Tatsuo Ishii
5- * $Id: conv.c,v 1.11 1999/05/26 15:19:55 momjian Exp $
5+ * WIN1250 client encoding support contributed by Pavel Behal
6+ *
7+ * $Id: conv.c,v 1.12 1999/07/11 22:47:20 ishii Exp $
8+ *
9+ *
610 */
11+
712#include <stdio.h>
813#include <string.h>
914
1015#include "mb/pg_wchar.h"
1116
1217/*
13- * convert bogus chars that cannot be represented in the current encoding
18+ * convert bogus chars that cannot be represented in the current
19+ encoding
1420 * system.
1521 */
1622static void
@@ -557,7 +563,6 @@ mic2latin4(unsigned char *mic, unsigned char *p, int len)
557563{
558564mic2latin (mic ,p ,len ,LC_ISO8859_4 );
559565}
560-
561566#ifdef NOT_USED
562567static void
563568latin52mic (unsignedchar * l ,unsignedchar * p ,int len )
@@ -724,7 +729,7 @@ mic2latin_with_table(
724729static void
725730iso2mic (unsignedchar * l ,unsignedchar * p ,int len )
726731{
727- static char iso2koi []= {
732+ static unsigned char iso2koi []= {
7287330x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
7297340x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
7307350x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
@@ -750,7 +755,7 @@ iso2mic(unsigned char *l, unsigned char *p, int len)
750755static void
751756mic2iso (unsignedchar * mic ,unsignedchar * p ,int len )
752757{
753- static char koi2iso []= {
758+ static unsigned char koi2iso []= {
7547590x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
7557600x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
7567610x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
@@ -776,7 +781,7 @@ mic2iso(unsigned char *mic, unsigned char *p, int len)
776781static void
777782win2mic (unsignedchar * l ,unsignedchar * p ,int len )
778783{
779- static char win2koi []= {
784+ static unsigned char win2koi []= {
7807850x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
7817860x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
7827870x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
@@ -802,7 +807,7 @@ win2mic(unsigned char *l, unsigned char *p, int len)
802807static void
803808mic2win (unsignedchar * mic ,unsignedchar * p ,int len )
804809{
805- static char koi2win []= {
810+ static unsigned char koi2win []= {
8068110x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
8078120x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
8088130x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
@@ -828,7 +833,7 @@ mic2win(unsigned char *mic, unsigned char *p, int len)
828833static void
829834alt2mic (unsignedchar * l ,unsignedchar * p ,int len )
830835{
831- static char alt2koi []= {
836+ static unsigned char alt2koi []= {
8328370xe1 ,0xe2 ,0xf7 ,0xe7 ,0xe4 ,0xe5 ,0xf6 ,0xfa ,
8338380xe9 ,0xea ,0xeb ,0xec ,0xed ,0xee ,0xef ,0xf0 ,
8348390xf2 ,0xf3 ,0xf4 ,0xf5 ,0xe6 ,0xe8 ,0xe3 ,0xfe ,
@@ -854,7 +859,7 @@ alt2mic(unsigned char *l, unsigned char *p, int len)
854859static void
855860mic2alt (unsignedchar * mic ,unsignedchar * p ,int len )
856861{
857- static char koi2alt []= {
862+ static unsigned char koi2alt []= {
8588630x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
8598640x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
8608650x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
@@ -880,6 +885,61 @@ mic2alt(unsigned char *mic, unsigned char *p, int len)
880885 * end of Cyrillic support
881886 */
882887
888+
889+ /*-----------------------------------------------------------------
890+ * WIN1250
891+ * Microsoft's CP1250(windows-1250)
892+ *-----------------------------------------------------------------*/
893+ static void
894+ win12502mic (unsignedchar * l ,unsignedchar * p ,int len )
895+ {
896+ static unsignedchar win1250_2_iso88592 []= {
897+ 0x80 ,0x81 ,0x82 ,0x83 ,0x84 ,0x85 ,0x86 ,0x87 ,
898+ 0x88 ,0x89 ,0xA9 ,0x8B ,0xA6 ,0xAB ,0xAE ,0xAC ,
899+ 0x90 ,0x91 ,0x92 ,0x93 ,0x94 ,0x95 ,0x96 ,0x97 ,
900+ 0x98 ,0x99 ,0xB9 ,0x9B ,0xB6 ,0xBB ,0xBE ,0xBC ,
901+ 0xA0 ,0xB7 ,0xA2 ,0xA3 ,0xA4 ,0xA1 ,0x00 ,0xA7 ,
902+ 0xA8 ,0x00 ,0xAA ,0x00 ,0x00 ,0xAD ,0x00 ,0xAF ,
903+ 0xB0 ,0x00 ,0xB2 ,0xB3 ,0xB4 ,0x00 ,0x00 ,0x00 ,
904+ 0xB8 ,0xB1 ,0xBA ,0x00 ,0xA5 ,0xBD ,0xB5 ,0xBF ,
905+ 0xC0 ,0xC1 ,0xC2 ,0xC3 ,0xC4 ,0xC5 ,0xC6 ,0xC7 ,
906+ 0xC8 ,0xC9 ,0xCA ,0xCB ,0xCC ,0xCD ,0xCE ,0xCF ,
907+ 0xD0 ,0xD1 ,0xD2 ,0xD3 ,0xD4 ,0xD5 ,0xD6 ,0xD7 ,
908+ 0xD8 ,0xD9 ,0xDA ,0xDB ,0xDC ,0xDD ,0xDE ,0xDF ,
909+ 0xE0 ,0xE1 ,0xE2 ,0xE3 ,0xE4 ,0xE5 ,0xE6 ,0xE7 ,
910+ 0xE8 ,0xE9 ,0xEA ,0xEB ,0xEC ,0xED ,0xEE ,0xEF ,
911+ 0xF0 ,0xF1 ,0xF2 ,0xF3 ,0xF4 ,0xF5 ,0xF6 ,0xF7 ,
912+ 0xF8 ,0xF9 ,0xFA ,0xFB ,0xFC ,0xFD ,0xFE ,0xFF
913+ };
914+
915+ latin2mic_with_table (l ,p ,len ,LC_ISO8859_2 ,win1250_2_iso88592 );
916+ }
917+ static void
918+ mic2win1250 (unsignedchar * mic ,unsignedchar * p ,int len )
919+ {
920+ static unsignedchar iso88592_2_win1250 []= {
921+ 0x80 ,0x81 ,0x82 ,0x83 ,0x84 ,0x85 ,0x86 ,0x87 ,
922+ 0x88 ,0x89 ,0x00 ,0x8B ,0x00 ,0x00 ,0x00 ,0x00 ,
923+ 0x90 ,0x91 ,0x92 ,0x93 ,0x94 ,0x95 ,0x96 ,0x97 ,
924+ 0x98 ,0x99 ,0x00 ,0x9B ,0x00 ,0x00 ,0x00 ,0x00 ,
925+ 0xA0 ,0xA5 ,0xA2 ,0xA3 ,0xA4 ,0xBC ,0x8C ,0xA7 ,
926+ 0xA8 ,0x8A ,0xAA ,0x8D ,0x8F ,0xAD ,0x8E ,0xAF ,
927+ 0xB0 ,0xB9 ,0xB2 ,0xB3 ,0xB4 ,0xBE ,0x9C ,0xA1 ,
928+ 0xB8 ,0x9A ,0xBA ,0x9D ,0x9F ,0xBD ,0x9E ,0xBF ,
929+ 0xC0 ,0xC1 ,0xC2 ,0xC3 ,0xC4 ,0xC5 ,0xC6 ,0xC7 ,
930+ 0xC8 ,0xC9 ,0xCA ,0xCB ,0xCC ,0xCD ,0xCE ,0xCF ,
931+ 0xD0 ,0xD1 ,0xD2 ,0xD3 ,0xD4 ,0xD5 ,0xD6 ,0xD7 ,
932+ 0xD8 ,0xD9 ,0xDA ,0xDB ,0xDC ,0xDD ,0xDE ,0xDF ,
933+ 0xE0 ,0xE1 ,0xE2 ,0xE3 ,0xE4 ,0xE5 ,0xE6 ,0xE7 ,
934+ 0xE8 ,0xE9 ,0xEA ,0xEB ,0xEC ,0xED ,0xEE ,0xEF ,
935+ 0xF0 ,0xF1 ,0xF2 ,0xF3 ,0xF4 ,0xF5 ,0xF6 ,0xF7 ,
936+ 0xF8 ,0xF9 ,0xFA ,0xFB ,0xFC ,0xFD ,0xFE ,0xFF
937+ };
938+
939+ mic2latin_with_table (mic ,p ,len ,LC_ISO8859_2 ,iso88592_2_win1250 );
940+ }
941+ /*-----------------------------------------------------------------*/
942+
883943pg_encoding_conv_tbl pg_conv_tbl []= {
884944{SQL_ASCII ,"SQL_ASCII" ,0 ,ascii2mic ,mic2ascii },/* SQL/ACII */
885945{EUC_JP ,"EUC_JP" ,0 ,euc_jp2mic ,mic2euc_jp },/* EUC_JP */
@@ -898,5 +958,6 @@ pg_encoding_conv_tbl pg_conv_tbl[] = {
898958{ALT ,"ALT" ,0 ,alt2mic ,mic2alt },/* CP866 */
899959{SJIS ,"SJIS" ,1 ,sjis2mic ,mic2sjis },/* SJIS */
900960{BIG5 ,"BIG5" ,1 ,big52mic ,mic2big5 },/* Big5 */
961+ {WIN1250 ,"WIN1250" ,1 ,win12502mic ,mic2win1250 },/* WIN 1250 */
901962{-1 ,"" ,0 ,0 ,0 }/* end mark */
902963};