UNICODE support added to libnxcscp
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 21 Sep 2004 16:40:14 +0000 (16:40 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 21 Sep 2004 16:40:14 +0000 (16:40 +0000)
.gitattributes
include/nms_cscp.h
include/nms_util.h
include/nxcscpapi.h
include/unicode.h
src/libnetxms/Makefile.am
src/libnetxms/Makefile.nw
src/libnetxms/libnetxms.dsp
src/libnetxms/tools.cpp
src/libnetxms/unicode.cpp [new file with mode: 0644]

index c6dbf1a..66baca8 100644 (file)
@@ -285,6 +285,7 @@ src/libnetxms/netxms.def -text
 src/libnetxms/sha1.cpp -text
 src/libnetxms/sha1.h -text
 src/libnetxms/tools.cpp -text
+src/libnetxms/unicode.cpp -text
 src/libnxcl/Makefile.am -text
 src/libnxcl/actions.cpp -text
 src/libnxcl/alarms.cpp -text
index 3d84fbc..6682934 100644 (file)
@@ -50,7 +50,7 @@ typedef struct
       {
          WORD wReserved1;
          DWORD dwLen;
-         char szValue[1];
+         TCHAR szValue[1];
       } string;
       struct
       {
index 1bb1d9e..d309bcf 100644 (file)
@@ -184,6 +184,16 @@ extern "C"
 #if !(HAVE_DAEMON)
    int LIBNETXMS_EXPORTABLE daemon(int nochdir, int noclose);
 #endif
+
+#ifndef _WIN32
+   int LIBNETXMS_EXPORTABLE wcslen(WCHAR *pStr);
+   int LIBNETXMS_EXPORTABLE WideCharToMultiByte(int iCodePage, DWORD dwFlags, WCHAR *pWideCharStr, 
+                                                int cchWideChar, char *pByteStr, int cchByteChar, 
+                                                char *pDefaultChar, BOOL *pbUsedDefChar);
+   int LIBNETXMS_EXPORTABLE MultiByteToWideChar(int iCodePage, DWORD dwFlags, char *pByteStr, 
+                                                int cchByteChar, WCHAR *pWideCharStr, 
+                                                int cchWideChar);
+#endif
 }
 
 #endif   /* _nms_util_h_ */
index 49d3d84..b06dfdc 100644 (file)
@@ -91,7 +91,7 @@ public:
    void SetVariable(DWORD dwVarId, DWORD dwValue) { Set(dwVarId, CSCP_DT_INTEGER, &dwValue); }
    void SetVariable(DWORD dwVarId, QWORD qwValue) { Set(dwVarId, CSCP_DT_INT64, &qwValue); }
    void SetVariable(DWORD dwVarId, double dValue) { Set(dwVarId, CSCP_DT_FLOAT, &dValue); }
-   void SetVariable(DWORD dwVarId, char *szValue) { Set(dwVarId, CSCP_DT_STRING, szValue); }
+   void SetVariable(DWORD dwVarId, TCHAR *szValue) { Set(dwVarId, CSCP_DT_STRING, szValue); }
    void SetVariable(DWORD dwVarId, BYTE *pValue, DWORD dwSize) { Set(dwVarId, CSCP_DT_BINARY, pValue, dwSize); }
    void SetVariableToInt32Array(DWORD dwVarId, DWORD dwNumElements, DWORD *pdwData);
 
@@ -99,7 +99,7 @@ public:
    QWORD GetVariableInt64(DWORD dwVarId);
    WORD GetVariableShort(DWORD dwVarId);
    double GetVariableDouble(DWORD dwVarId);
-   char *GetVariableStr(DWORD dwVarId, char *szBuffer = NULL, DWORD dwBufSize = 0);
+   TCHAR *GetVariableStr(DWORD dwVarId, TCHAR *szBuffer = NULL, DWORD dwBufSize = 0);
    DWORD GetVariableBinary(DWORD dwVarId, BYTE *pBuffer, DWORD dwBufSize);
    DWORD GetVariableInt32Array(DWORD dwVarId, DWORD dwNumElements, DWORD *pdwBuffer);
 
@@ -176,7 +176,7 @@ int LIBNXCSCP_EXPORTABLE RecvCSCPMessage(SOCKET hSocket, CSCP_MESSAGE *pMsg,
 CSCP_MESSAGE LIBNXCSCP_EXPORTABLE *CreateRawCSCPMessage(WORD wCode, DWORD dwId,
                                                         DWORD dwDataSize, void *pData,
                                                         CSCP_MESSAGE *pBuffer);
-char LIBNXCSCP_EXPORTABLE *CSCPMessageCodeName(WORD wCode, char *pszBuffer);
+TCHAR LIBNXCSCP_EXPORTABLE *CSCPMessageCodeName(WORD wCode, TCHAR *pszBuffer);
    
 #ifdef __cplusplus
 }
index f96793d..b6ebeed 100644 (file)
@@ -45,6 +45,7 @@
 #define _T(x)     x
 
 #define TCHAR     char
+#define WCHAR     unsigned short
 
 #define _tcscpy   strcpy
 #define _tcsncpy  strncpy
 #define _tcsupr   strupr
 #define _tcsspn   strspn
 
+#define CP_ACP             1
+#define MB_PRECOMPOSED     0x00000001
+#define WC_COMPOSITECHECK  0x00000002
+#define WC_DEFAULTCHAR     0x00000004
+
 #endif
 
 
index e971882..57ec906 100644 (file)
@@ -1,5 +1,5 @@
 INCLUDES=-I@top_srcdir@/include
 
 lib_LTLIBRARIES = libnetxms.la
-libnetxms_la_SOURCES = config.cpp dload.cpp hash.cpp icmp.cpp inline.cpp main.cpp md5.cpp sha1.cpp tools.cpp
+libnetxms_la_SOURCES = config.cpp dload.cpp hash.cpp icmp.cpp inline.cpp main.cpp md5.cpp sha1.cpp tools.cpp unicode.cpp
 libnetxms_la_LDFLAGS = -version-info $(LIBNETXMS_LIBRARY_VERSION)
index 3435036..856ef45 100644 (file)
@@ -6,7 +6,7 @@
 include ../../netware/Makefile.inc
 
 OBJECTS  = c_lgcc3.o config.o dload.o hash.o icmp.o inline.o main.o md5.o \
-           sha1.o tools.o
+           sha1.o tools.o unicode.o
 EXEC     = netxms.nlm
 DEF      = netxms.def
 OBJTMP   = netxms_r.o
index 3424a8a..819a795 100644 (file)
@@ -140,6 +140,10 @@ SOURCE=.\sha1.cpp
 
 SOURCE=.\tools.cpp
 # End Source File
+# Begin Source File
+
+SOURCE=.\unicode.cpp
+# End Source File
 # End Group
 # Begin Group "Header Files"
 
index a97dfc8..caf2b1f 100644 (file)
@@ -1,6 +1,6 @@
 /* 
-** Project X - Network Management System
-** Copyright (C) 2003 Victor Kirhenshtein
+** NetXMS - Network Management System
+** Copyright (C) 2003, 2004 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
diff --git a/src/libnetxms/unicode.cpp b/src/libnetxms/unicode.cpp
new file mode 100644 (file)
index 0000000..7c863c0
--- /dev/null
@@ -0,0 +1,87 @@
+/* 
+** NetXMS - Network Management System
+** Copyright (C) 2003, 2004 Victor Kirhenshtein
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** $module: unicode.cpp
+**
+**/
+
+#include "libnetxms.h"
+
+
+#ifndef _WIN32
+
+
+//
+// Calculate length of wide character string
+//
+
+int LIBNETXMS_EXPORTABLE wcslen(WCHAR *pStr)
+{
+   int iLen = 0;
+   WCHAR *pCurr = pStr;
+
+   while(*pCurr++)
+      iLen++;
+   return iLen;
+}
+
+
+//
+// Convert UNICODE string to single-byte string
+//
+
+int LIBNETXMS_EXPORTABLE WideCharToMultiByte(int iCodePage, DWORD dwFlags, WCHAR *pWideCharStr, 
+                                             int cchWideChar, char *pByteStr, int cchByteChar, 
+                                             char *pDefaultChar, BOOL *pbUsedDefChar)
+{
+   WCHAR *pSrc;
+   char *pDest;
+   int iPos, iSize;
+
+   iSize = (cchWideChar == -1) ? wcslen(pWideCharStr) : cchWideChar;
+   if (iSize >= cchByteChar)
+      iSize = cchByteChar - 1;
+   for(pSrc = pWideCharStr, iPos = 0, pDest = pByteStr; iPos < iSize; iPos++, pSrc++, pDest++)
+      *pDest = (*pSrc < 256) ? (char)(*pSrc) : '?';
+   *pDest = 0;
+   return iSize;
+}
+
+
+//
+// Convert single-byte to UNICODE string
+//
+
+int LIBNETXMS_EXPORTABLE MultiByteToWideChar(int iCodePage, DWORD dwFlags, char *pByteStr, 
+                                             int cchByteChar, WCHAR *pWideCharStr, 
+                                             int cchWideChar)
+{
+   char *pSrc;
+   WCHAR *pDest;
+   int iPos, iSize;
+
+   iSize = (cchByteChar == -1) ? strlen(pByteStr) : cchByteChar;
+   if (iSize >= cchWideChar)
+      iSize = cchWideChar - 1;
+   for(pSrc = pByteStr, iPos = 0, pDest = pWideCharStr; iPos < iSize; iPos++, pSrc++, pDest++)
+      *pDest = (WCHAR)(*pSrc);
+   *pDest = 0;
+   return iSize;
+}
+
+#endif