Hi folks!
      
      I am playing around with a C library and came across 
      some issues related to unicode in C. In the unicode enabled 
      version of this C library which implements UCS-2 (i.e. just BMP)
      the "unicode character type" is defined in the header file 
      as follows:
      ======================================
      /*
           * ZAB_CHAR
           * ZAB_UC
           */
          
          #ifdef ZABonAIX
            #if defined(_AIX51) && defined(ZABwith64_BIT)
              #define ZABonAIX_wchar_is_4B
            #else
              #define ZABonAIX_wchar_is_2B
            #endif
          #endif
          
          #ifdef ZABonAIX
            #if defined(_AIX51) && defined(ZABwith64_BIT)
              #define ZABonAIX_wchar_is_4B
            #elif defined(ZABccQ)
              #define ZABonAIX_wchar_is_4B
            #else
              #define ZABonAIX_wchar_is_2B
            #endif
          #endif
          
          #if defined(ZABonNT)      || \
              defined(ZABonOS400)   || \
             (defined(ZABonOS390) && !defined(_LP64))  || \
              defined(ZABonAIX) && defined(ZABonAIX_wchar_is_2B)
            #define WCHAR_is_2B
          #else
            #define WCHAR_is_4B
          #endif
          
          #if defined(ZABonLIN) && defined(GCC_UTF16_PATCH)
            #if __GNUC_PREREQ (4,3)
              #include <uchar.h>
              #define ZAB_UC_is_char16
            #endif
          #endif
          
          #ifndef ZABwithUNICODE
            #define ZAB_UC_is_1B
            typedef char ZAB_CHAR;
            typedef char ZAB_UC;
          #else  /* ZABwithUNICODE */
            #if defined(WCHAR_is_2B)
              #define ZAB_UC_is_wchar
              typedef wchar_t ZAB_CHAR;
              typedef wchar_t ZAB_UC;
            #elif defined(ZAB_UC_is_char16)
              typedef char16_t ZAB_CHAR;
              typedef char16_t ZAB_UC;
            #else
              #define ZAB_UC_is_UTF16_without_wchar
              typedef unsigned short ZAB_CHAR;
              typedef unsigned short ZAB_UC;
            #endif
          #endif /* ZABwithUNICODE or not */
          
          /*
           * CFRSDKwith(out)UTF16_LITERALS
           * for CFR SDK applications: controls use of UTF-16
           * literal enabled compilers.
           */
          #if defined(CFRSDKwithUTF16_LITERALS)
          #elif defined(CFRSDKwithoutUTF16_LITERALS)
            #define ZABwithoutUTF16_LITERALS
          #elif defined(WCHAR_is_2B) || \
              defined(ZABonHP_UX) || \
              (defined(ZABonLIN) && defined(__i386__) &&
          defined(__GNUC__) && (__GNUC__<3)) || \
              (defined(ZABonLIN) && defined(GCC_UTF16_PATCH)) ||
          \
              defined(ZABonSUN) || defined(ZABonAIX)
            /* we have literals for UTF-16 */
          #else
            #define ZABwithoutUTF16_LITERALS
          #endif
    ======================================
    
      All this boils down to
      
    
     +---------------------------+ 
     +------>-| typedef wchar_t ZAB_CHAR; |
     | | typedef wchar_t ZAB_UC; | 
     | +---------------------------+
     |
    +---------+ | +----------------------------+
    | Unicode |------+------>-| typedef
          char16_t ZAB_CHAR; |
    +---------+ | | typedef char16_t ZAB_UC; |
     | +----------------------------+
     |
     | +----------------------------------+
     +------>-| typedef unsigned short
          ZAB_CHAR; |
     | typedef unsigned short ZAB_UC; |
     +----------------------------------+
    
      The question is now: Is it
          correct (resp. safe) 
          to defctype ZAB_UC just as :uint16 and
          interpret 
          it as a UFT-16 code point (with an appropriate endiannness)?
          
          How can the types like wchar_t and char_16_t be defined (resp.
          used) in CFFI?
          
          Regards
          Nik