]> granicus.if.org Git - postgresql/commitdiff
Add multibyte support.
authorHiroshi Inoue <inoue@tpf.co.jp>
Fri, 16 Mar 2001 01:17:23 +0000 (01:17 +0000)
committerHiroshi Inoue <inoue@tpf.co.jp>
Fri, 16 Mar 2001 01:17:23 +0000 (01:17 +0000)
Provide an extenisible scheme of encoding conversion.
As the first step, SJIS and BIG5 are supported.
From now on multibyte people would be happy to use
this psqlodbc driver.

Eiji Tokuya e-tokuya@mail.sankyo-unyu.co.jp

src/interfaces/odbc/connection.c
src/interfaces/odbc/convert.c
src/interfaces/odbc/dlg_specific.c
src/interfaces/odbc/parse.c
src/interfaces/odbc/psqlodbc.h
src/interfaces/odbc/psqlodbc.rc
src/interfaces/odbc/win32.mak

index 69e111e4c2110a6e893a065993b66ecd5216fcbd..a4f0526184fc58464061c1ba004815edb7be9fea 100644 (file)
  * Comments:        See "notice.txt" for copyright and license information.
  *
  */
+/* Multibyte support   Eiji Tokuya 2001-03-15 */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 
 #include "environ.h"
 #include "connection.h"
 #include "qresult.h"
 #include "lobj.h"
 #include "dlg_specific.h"
+
+#ifdef MULTIBYTE
+#include "multibyte.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 
@@ -496,9 +506,18 @@ static char *func="CC_connect";
                        globals.text_as_longvarchar, 
                        globals.unknowns_as_longvarchar, 
                        globals.bools_as_char);
+
+#ifdef MULTIBYTE
+               check_client_encoding(globals.conn_settings);
+               qlog("                extra_systable_prefixes='%s', conn_settings='%s' conn_encoding='%s'\n",
+                       globals.extra_systable_prefixes,
+                       globals.conn_settings,
+                       check_client_encoding(globals.conn_settings));
+#else
                qlog("                extra_systable_prefixes='%s', conn_settings='%s'\n",
                        globals.extra_systable_prefixes, 
                        globals.conn_settings);
+#endif
 
                if (self->status != CONN_NOT_CONNECTED) {
                        self->errormsg = "Already connected.";
index 0d8ada325627582043fd2e11357e8b91a620c737..12739f32aaf65a16789e0177de583df6b056f04d 100644 (file)
@@ -15,6 +15,7 @@
  * Comments:       See "notice.txt" for copyright and license information.
  *
  */
+/* Multibyte support  Eiji Tokuya      2001-03-15      */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 
 #include "psqlodbc.h"
 
+#ifdef MULTIBYTE
+#include "multibyte.h"
+#endif
+
 #ifndef WIN32
 #include "iodbc.h"
 #include "isql.h"
@@ -690,6 +695,9 @@ int lobj_fd, retval;
     param_number = -1;
 
        oldstmtlen = strlen(old_statement);
+#ifdef MULTIBYTE
+    multibyte_init();
+#endif
 
     for (opos = 0; opos < oldstmtlen; opos++) {
 
@@ -700,10 +708,18 @@ int lobj_fd, retval;
                }
 
                /*      Handle literals (date, time, timestamp) and ODBC scalar functions */
+#ifdef MULTIBYTE
+               else if (multibyte_char_check(old_statement[opos]) == 0 && old_statement[opos] == '{') {
+#else
                else if (old_statement[opos] == '{') {
+#endif
                        char *esc;
                        char *begin = &old_statement[opos + 1];
+#ifdef MULTIBYTE
+                       char *end = multibyte_strchr(begin, '}');
+#else
                        char *end = strchr(begin, '}');
+#endif
 
                        if ( ! end)
                                continue;
@@ -1334,11 +1350,18 @@ char *p;
                max = strlen(si);
        else
                max = used;
+#ifdef MULTIBYTE
+       multibyte_init();
+#endif
 
        for (i = 0; i < max; i++) {
                if (si[i] == '\r' && i+1 < strlen(si) && si[i+1] == '\n') 
                        continue;
+#ifdef MULTIBYTE
+               else if (multibyte_char_check(si[i]) == 0 && (si[i] == '\'' || si[i] == '\\'))
+#else
                else if (si[i] == '\'' || si[i] == '\\')
+#endif
                        p[out++] = '\\';
 
                p[out++] = si[i];
index 13e8b44e6189deb4382b000efb3a9a1f1226d409..70df018692709074c0c56d896ea6b5418c593ca4 100644 (file)
@@ -15,6 +15,7 @@
  * Comments:        See "notice.txt" for copyright and license information.
  *
  */
+/* Multibyte support   Eiji Tokuya 2001-03-15 */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #include "dlg_specific.h"
 #include "convert.h"
 
+#ifdef MULTIBYTE
+#include "multibyte.h"
+#endif
+
 #ifndef BOOL
 #define BOOL   int
 #endif
@@ -507,8 +512,17 @@ char encoded_conn_settings[LARGE_REGISTRY_LEN];
                ci->show_oid_column,
                ci->fake_oid_index,
                ci->show_system_tables);
+
+#ifdef MULTIBYTE
+       check_client_encoding(ci->conn_settings);
+       qlog("          conn_settings='%s',conn_encoding='%s'\n",
+               ci->conn_settings,
+               check_client_encoding(ci->conn_settings));
+#else
        qlog("          conn_settings='%s'\n",
                ci->conn_settings);
+#endif
+
        qlog("          translation_dll='%s',translation_option='%s'\n",
                ci->translation_dll,
                ci->translation_option);
index b8eed13bf606d90e9971f5597e69fb3c1b39ea74..a5f046f179da52eddca2ea526d3a372d019b9a57 100644 (file)
  * Comments:        See "notice.txt" for copyright and license information.
  *
  */
+/* Multibyte support   Eiji Tokuya 2001-03-15 */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 
 #include <stdio.h>
 #include <string.h>
 #include "qresult.h"
 #include "pgtypes.h"
 
+#ifdef MULTIBYTE
+#include "multibyte.h"
+#endif
+
 #ifndef WIN32
 #ifndef HAVE_STRICMP
 #define stricmp(s1,s2)                 strcasecmp(s1,s2)
@@ -88,7 +97,11 @@ char qc, in_escape = FALSE;
                                if (s[i] == qc && ! in_escape) {
                                        break;
                                }
+#ifdef MULTIBYTE
+                               if (multibyte_char_check(s[i]) == 0 && s[i] == '\\' && ! in_escape) {
+#else
                                if (s[i] == '\\' && ! in_escape) {
+#endif
                                        in_escape = TRUE;
                                }
                                else {
index ccefb1a05f0bf668405cac5b45b24b981f733351..d1785c56e1ef939f0cca85fd7b8450ecdff3aee3 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Comments:        See "notice.txt" for copyright and license information.
  *
- * $Id: psqlodbc.h,v 1.38 2001/02/15 05:32:00 inoue Exp $
+ * $Id: psqlodbc.h,v 1.39 2001/03/16 01:17:23 inoue Exp $
  */
 
 #ifndef __PSQLODBC_H__
@@ -41,7 +41,7 @@ typedef UInt4 Oid;
 #define DRIVERNAME             "PostgreSQL ODBC"
 #define DBMS_NAME              "PostgreSQL"
 
-#define POSTGRESDRIVERVERSION  "07.01.0003"
+#define POSTGRESDRIVERVERSION  "07.01.0004"
 
 #ifdef WIN32
 #define DRIVER_FILE_NAME               "PSQLODBC.DLL"
@@ -134,6 +134,7 @@ typedef struct GlobalValues_
        char                            conn_settings[LARGE_REGISTRY_LEN];
        char                            protocol[SMALL_REGISTRY_LEN];
 
+
        FILE*                           mylogFP;
        FILE*                           qlogFP; 
 } GLOBAL_VALUES;
index dbbfa34ef960563076fa56430fa36b214a6b72a8..750d32113d878c59823fdfebd04f60ee93b9e479 100644 (file)
@@ -52,6 +52,118 @@ END
 // Dialog
 //
 
+#ifdef MULTIBYTE
+DLG_CONFIG DIALOG DISCARDABLE  65, 43, 299, 113
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
+    WS_SYSMENU
+CAPTION "PostgreSQL Driver Setup"
+FONT 10, "Terminal"
+BEGIN
+    RTEXT           "&Data Source:",IDC_DSNAMETEXT,3,9,49,8,NOT WS_GROUP
+    EDITTEXT        IDC_DSNAME,59,9,72,12,ES_AUTOHSCROLL | WS_GROUP
+    RTEXT           "Des&cription:",IDC_DESCTEXT,135,10,49,8,NOT WS_GROUP
+    EDITTEXT        IDC_DESC,185,10,110,25,ES_AUTOHSCROLL
+    RTEXT           "Data&base:",IDC_STATIC,15,24,37,8,NOT WS_GROUP
+    EDITTEXT        IDC_DATABASE,59,24,72,12,ES_AUTOHSCROLL
+    RTEXT           "&Server:",IDC_STATIC,23,38,29,8,NOT WS_GROUP
+    EDITTEXT        IDC_SERVER,59,38,72,12,ES_AUTOHSCROLL
+    RTEXT           "&Port:",IDC_STATIC,161,38,21,8
+    EDITTEXT        IDC_PORT,185,38,37,12,ES_AUTOHSCROLL
+    RTEXT           "&User Name:",IDC_STATIC,11,53,41,8
+    EDITTEXT        IDC_USER,59,53,72,12,ES_AUTOHSCROLL
+    RTEXT           "Pass&word:",IDC_STATIC,145,53,37,8
+    EDITTEXT        IDC_PASSWORD,185,53,72,12,ES_PASSWORD | ES_AUTOHSCROLL
+    DEFPUSHBUTTON   "OK",IDOK,27,88,40,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,81,88,40,14
+    GROUPBOX        "Options (Advanced):",IDC_OPTIONS,141,72,140,35,
+                    BS_CENTER
+    PUSHBUTTON      "Driver",IDC_DRIVER,149,89,50,14
+    PUSHBUTTON      "DataSource",IDC_DATASOURCE,221,88,50,14
+    CTEXT           "Please supply any missing information needed to connect.",
+                    DRV_MSG_LABEL,25,4,238,10
+END
+
+DLG_OPTIONS_DRV DIALOG DISCARDABLE  0, 0, 306, 213
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Advanced Options (Driver)"
+FONT 10, "Terminal"
+BEGIN
+    CONTROL         "Disable Genetic &Optimizer",DRV_OPTIMIZER,"Button",
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,13,11,116,10
+    CONTROL         "Comm&Log (C:\\psqlodbc.log)",DRV_COMMLOG,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,164,11,120,10
+    CONTROL         "&KSQO (Keyset Query Optimization)",DRV_KSQO,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,13,23,144,10
+    CONTROL         "&ReadOnly (Default)",DRV_READONLY,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,164,24,88,10
+    CONTROL         "Recognize Unique &Indexes",DRV_UNIQUEINDEX,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,13,35,112,10
+    CONTROL         "P&arse Statements",DRV_PARSE,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,164,37,80,10
+    CONTROL         "&Use Declare/Fetch",DRV_USEDECLAREFETCH,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,13,47,84,10
+    CONTROL         "Cancel as FreeStmt (Exp)",DRV_CANCELASFREESTMT,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,164,50,112,10
+    GROUPBOX        "Unknown Sizes",IDC_STATIC,13,63,175,24
+    CONTROL         "Maximum",DRV_UNKNOWN_MAX,"Button",BS_AUTORADIOBUTTON | 
+                    WS_GROUP | WS_TABSTOP,21,71,44,10
+    CONTROL         "Don't Know",DRV_UNKNOWN_DONTKNOW,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,72,71,56,10
+    CONTROL         "Longest",DRV_UNKNOWN_LONGEST,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,135,71,44,10
+    GROUPBOX        "Data Type Options",IDC_STATIC,13,91,282,23
+    CONTROL         "Text as LongVarChar",DRV_TEXT_LONGVARCHAR,"Button",
+                    BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,102,92,10
+    CONTROL         "Unknowns as LongVarChar",DRV_UNKNOWNS_LONGVARCHAR,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,102,108,10
+    CONTROL         "Bools as Char",DRV_BOOLS_CHAR,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,225,102,68,10
+    LTEXT           "&Cache Size:",IDC_STATIC,15,120,45,8
+    EDITTEXT        DRV_CACHE_SIZE,61,116,35,12,ES_AUTOHSCROLL
+    LTEXT           "Max &Varchar:",IDC_STATIC,99,120,49,8
+    EDITTEXT        DRV_VARCHAR_SIZE,149,116,35,12,ES_AUTOHSCROLL
+    LTEXT           "Max Lon&gVarChar:",IDC_STATIC,192,120,65,8
+    EDITTEXT        DRV_LONGVARCHAR_SIZE,259,116,35,12,ES_AUTOHSCROLL
+    LTEXT           "SysTable &Prefixes:",IDC_STATIC,23,131,36,20
+    EDITTEXT        DRV_EXTRASYSTABLEPREFIXES,61,137,75,12,ES_AUTOHSCROLL
+    LTEXT           "Connect &Settings:",IDC_STATIC,22,152,35,20
+    EDITTEXT        DRV_CONNSETTINGS,61,153,225,25,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
+    DEFPUSHBUTTON   "OK",IDOK,59,188,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,129,188,50,14
+    PUSHBUTTON      "Defaults",IDDEFAULTS,199,188,50,15
+END
+
+DLG_OPTIONS_DS DIALOG DISCARDABLE  0, 0, 267, 161
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Advanced Options (DataSource)"
+FONT 10, "Terminal"
+BEGIN
+    CONTROL         "&ReadOnly",DS_READONLY,"Button",BS_AUTOCHECKBOX | 
+                    WS_GROUP | WS_TABSTOP,45,13,48,10
+    CONTROL         "Row &Versioning",DS_ROWVERSIONING,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,149,13,72,10
+    CONTROL         "Show System &Tables",DS_SHOWSYSTEMTABLES,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,45,28,88,10
+    GROUPBOX        "Protocol",IDC_STATIC,43,44,180,25
+    CONTROL         "7.X,6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON | 
+                    WS_GROUP,53,54,47,10
+    CONTROL         "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    131,54,26,10
+    CONTROL         "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
+                    187,54,26,10
+    GROUPBOX        "OID Options",IDC_STATIC,43,74,180,25
+    CONTROL         "Show &Column",DS_SHOWOIDCOLUMN,"Button",BS_AUTOCHECKBOX | 
+                    WS_GROUP | WS_TABSTOP,53,85,59,10
+    CONTROL         "Fake &Index",DS_FAKEOIDINDEX,"Button",BS_AUTOCHECKBOX | 
+                    WS_GROUP | WS_TABSTOP,161,85,55,10
+    LTEXT           "Connect &Settings:",IDC_STATIC,10,105,35,25
+    EDITTEXT        DS_CONNSETTINGS,50,105,200,20,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
+    DEFPUSHBUTTON   "OK",IDOK,71,135,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,146,135,50,14
+END
+#else
 DLG_CONFIG DIALOG DISCARDABLE  65, 43, 292, 116
 STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 
     WS_SYSMENU
@@ -162,7 +274,7 @@ BEGIN
     DEFPUSHBUTTON   "OK",IDOK,71,135,50,14,WS_GROUP
     PUSHBUTTON      "Cancel",IDCANCEL,146,135,50,14
 END
-
+#endif
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -170,6 +282,31 @@ END
 //
 
 #ifdef APSTUDIO_INVOKED
+#ifdef MULTIBYTE
+GUIDELINES DESIGNINFO DISCARDABLE 
+BEGIN
+    DLG_CONFIG, DIALOG
+    BEGIN
+        BOTTOMMARGIN, 112
+    END
+
+    DLG_OPTIONS_DRV, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 301
+        TOPMARGIN, 5
+        BOTTOMMARGIN, 206
+    END
+
+    DLG_OPTIONS_DS, DIALOG
+    BEGIN
+        LEFTMARGIN, 5
+        RIGHTMARGIN, 260
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 154
+    END
+END
+#else
 GUIDELINES DESIGNINFO DISCARDABLE 
 BEGIN
     DLG_CONFIG, DIALOG
@@ -194,6 +331,7 @@ BEGIN
         BOTTOMMARGIN, 154
     END
 END
+#endif    // MULTIBYTE
 #endif    // APSTUDIO_INVOKED
 
 
@@ -204,8 +342,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 7,1,0,3
- PRODUCTVERSION 7,1,0,3
+ FILEVERSION 7,1,0,4
+ PRODUCTVERSION 7,1,0,4
  FILEFLAGSMASK 0x3L
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -221,16 +359,20 @@ BEGIN
         BLOCK "040904e4"
         BEGIN
             VALUE "Comments", "PostgreSQL ODBC driver\0"
+#ifdef MULTIBYTE
+            VALUE "CompanyName", "Insight Distribution Systems & Sankyo Unyu Service (MULTIBYTE support)\0"
+#else
             VALUE "CompanyName", "Insight Distribution Systems\0"
+#endif
             VALUE "FileDescription", "PostgreSQL Driver\0"
-            VALUE "FileVersion", " 07.01.0003\0"
+            VALUE "FileVersion", " 07.01.0004\0"
             VALUE "InternalName", "psqlodbc\0"
             VALUE "LegalCopyright", "\0"
             VALUE "LegalTrademarks", "ODBC(TM) is a trademark of Microsoft Corporation.  Microsoft® is a registered trademark of Microsoft Corporation. Windows(TM) is a trademark of Microsoft Corporation.\0"
             VALUE "OriginalFilename", "psqlodbc.dll\0"
             VALUE "PrivateBuild", "\0"
             VALUE "ProductName", "Microsoft Open Database Connectivity\0"
-            VALUE "ProductVersion", " 07.01.0003\0"
+            VALUE "ProductVersion", " 07.01.0004\0"
             VALUE "SpecialBuild", "\0"
         END
     END
index adb293d5a18b89348670ef14644b39cef07a17cb..0a7eacf030542aab9568b65e218acb3af2a74475 100644 (file)
@@ -18,12 +18,12 @@ CFG=Release
 !MESSAGE
 !ENDIF 
 
-!IF "$(CFG)" != "Release" && "$(CFG)" != "Debug"
+!IF "$(CFG)" != "Release" && "$(CFG)" != "Debug" && "$(CFG)" != "MultibyteRelease" && "$(CFG)" != "MultibyteDebug"
 !MESSAGE Invalid configuration "$(CFG)" specified.
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
 !MESSAGE 
-!MESSAGE NMAKE /f win32.mak CFG=Debug
+!MESSAGE NMAKE /f win32.mak CFG=[Release | Debug | MultibyteRelease | MultiByteDebug]
 !MESSAGE 
 !MESSAGE Possible choices for configuration are:
 !MESSAGE 
@@ -39,7 +39,7 @@ NULL=
 NULL=nul
 !ENDIF 
 
-!IF  "$(CFG)" == "Release"
+!IF  "$(CFG)" == "Release" || "$(CFG)" == "MultibyteRelease"
 
 OUTDIR=.\Release
 INTDIR=.\Release
@@ -63,6 +63,9 @@ CLEAN :
        -@erase "$(INTDIR)\info.obj"
        -@erase "$(INTDIR)\lobj.obj"
        -@erase "$(INTDIR)\misc.obj"
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+       -@erase "$(INTDIR)\multibyte.obj"
+!ENDIF
        -@erase "$(INTDIR)\options.obj"
        -@erase "$(INTDIR)\parse.obj"
        -@erase "$(INTDIR)\pgtypes.obj"
@@ -84,8 +87,11 @@ CLEAN :
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSQLODBC_EXPORTS" /D "MULTIBYTE" /Fp"$(INTDIR)\psqlodbc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+!ELSE
 CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSQLODBC_EXPORTS" /Fp"$(INTDIR)\psqlodbc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
-
+!ENDIF
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
    $(CPP_PROJ) $< 
@@ -96,6 +102,7 @@ CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS"
    $(CPP_PROJ) $< 
 <<
 
+
 .cxx{$(INTDIR)}.obj::
    $(CPP) @<<
    $(CPP_PROJ) $< 
@@ -140,6 +147,9 @@ LINK32_OBJS= \
        "$(INTDIR)\info.obj" \
        "$(INTDIR)\lobj.obj" \
        "$(INTDIR)\misc.obj" \
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+       "$(INTDIR)\multibyte.obj" \
+!ENDIF
        "$(INTDIR)\options.obj" \
        "$(INTDIR)\parse.obj" \
        "$(INTDIR)\pgtypes.obj" \
@@ -158,7 +168,7 @@ LINK32_OBJS= \
   $(LINK32_FLAGS) $(LINK32_OBJS)
 <<
 
-!ELSEIF  "$(CFG)" == "Debug"
+!ELSEIF  "$(CFG)" == "Debug" || "$(CFG)" == "MultibyteDebug"
 
 OUTDIR=.\Debug
 INTDIR=.\Debug
@@ -182,6 +192,9 @@ CLEAN :
        -@erase "$(INTDIR)\info.obj"
        -@erase "$(INTDIR)\lobj.obj"
        -@erase "$(INTDIR)\misc.obj"
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+       -@erase "$(INTDIR)\multibyte.obj"
+!ENDIF
        -@erase "$(INTDIR)\options.obj"
        -@erase "$(INTDIR)\parse.obj"
        -@erase "$(INTDIR)\pgtypes.obj"
@@ -206,8 +219,11 @@ CLEAN :
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSQLODBC_EXPORTS" /D "MULTIBYTE" /Fp"$(INTDIR)\psqlodbc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+!ELSE
 CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PSQLODBC_EXPORTS" /Fp"$(INTDIR)\psqlodbc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
-
+!ENDIF
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
    $(CPP_PROJ) $< 
@@ -262,6 +278,9 @@ LINK32_OBJS= \
        "$(INTDIR)\info.obj" \
        "$(INTDIR)\lobj.obj" \
        "$(INTDIR)\misc.obj" \
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+       "$(INTDIR)\multibyte.obj" \
+!ENDIF
        "$(INTDIR)\options.obj" \
        "$(INTDIR)\parse.obj" \
        "$(INTDIR)\pgtypes.obj" \
@@ -282,7 +301,8 @@ LINK32_OBJS= \
 
 !ENDIF 
 
-!IF "$(CFG)" == "Release" || "$(CFG)" == "Debug"
+!IF "$(CFG)" == "Release" || "$(CFG)" == "Debug" || "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug"
+
 SOURCE=bind.c
 
 "$(INTDIR)\bind.obj" : $(SOURCE) "$(INTDIR)"
@@ -304,6 +324,7 @@ SOURCE=connection.c
 SOURCE=convert.c
 
 "$(INTDIR)\convert.obj" : $(SOURCE) "$(INTDIR)"
+
        $(CPP) $(CPP_PROJ) $(SOURCE)
 
 
@@ -354,7 +375,14 @@ SOURCE=misc.c
 "$(INTDIR)\misc.obj" : $(SOURCE) "$(INTDIR)"
        $(CPP) $(CPP_PROJ) $(SOURCE)
 
+!IF "$(CFG)" == "MultibyteRelease" || "$(CFG)" == "MultibyteDebug" 
+SOURCE=multibyte.c
+
+"$(INTDIR)\multibyte.obj" : $(SOURCE) "$(INTDIR)"
+       $(CPP) $(CPP_PROJ) $(SOURCE)
+
 
+!ENDIF
 SOURCE=options.c
 
 "$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)"
@@ -381,19 +409,27 @@ SOURCE=psqlodbc.c
 
 SOURCE=psqlodbc.rc
 
-!IF  "$(CFG)" == "Release"
+!IF  "$(CFG)" == "Release" || "$(CFG)" == "MultibyteRelease"
 
 
+!IF "$(CFG)" == "Release"
 "$(INTDIR)\psqlodbc.res" : $(SOURCE) "$(INTDIR)"
        $(RSC) /l 0x809 /fo"$(INTDIR)\psqlodbc.res" /d "NDEBUG" $(SOURCE)
+!ELSEIF "$(CFG)" == "MultibyteRelease"
+"$(INTDIR)\psqlodbc.res" : $(SOURCE) "$(INTDIR)"
+       $(RSC) /l 0x809 /fo"$(INTDIR)\psqlodbc.res" /d "NDEBUG" /d "MULTIBYTE" $(SOURCE)
+!ENDIF
 
 
-!ELSEIF  "$(CFG)" == "Debug"
-
+!ELSEIF  "$(CFG)" == "Debug" || "$(CFG)" == "MultibyteDebug"
 
+!IF "$(CFG)" == "Debug"
 "$(INTDIR)\psqlodbc.res" : $(SOURCE) "$(INTDIR)"
        $(RSC) /l 0x809 /fo"$(INTDIR)\psqlodbc.res" /d "_DEBUG" $(SOURCE)
-
+!ELSEIF "$(CFG)" == "MultibyteDebug"
+"$(INTDIR)\psqlodbc.res" : $(SOURCE) "$(INTDIR)"
+       $(RSC) /l 0x809 /fo"$(INTDIR)\psqlodbc.res" /d "_DEBUG" /d "MULTIBYTE" $(SOURCE)
+!ENDIF
 
 !ENDIF