home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / somtdbcs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-24  |  2.2 KB  |  115 lines

  1. /*
  2.  * %Z% %I% %W% %G% %U% [%H% %T%]
  3.     Last change:  KAS   6 Oct 94    3:26 pm
  4.  */
  5.  
  6. #if (!defined(somtdbcs_c) && !defined(_NODBCS))
  7. #define somtdbcs_c
  8.  
  9. /*
  10.  * -- somtinitDbcs --
  11.  * This routine initialises the somtisDbcs routine for OS/2, AIX, DOS, etc.
  12.  */
  13.  
  14. #if defined(_WDOS) || defined(_WIN16) || defined(_WIN32)
  15.  
  16. #ifdef _WIN32
  17.   /*
  18.   **  These are to pick up the prototpye for GetKBCodePage w/o
  19.   **  including all of windows.h which defines conflicting macros.
  20.   */
  21.   #ifndef _X86_
  22.   #define _X86_
  23.   #endif
  24.   #include <windef.h>
  25.   #include <winbase.h>
  26.   #include <winuser.h>
  27. #endif
  28.   
  29.    #define CP_JAPAN     932
  30.    #define CP_KOREA     934
  31.    #define CP_SCHINESE  936
  32.    #define CP_TCHINESE  938
  33.  
  34.    #ifdef _WDOS
  35.        #include <dos.h>
  36.        #define DOS_GET_DBCP   0x6601
  37.        #define DOS_GET_DBCSEV 0x6300
  38.  
  39.     static int GetKBCodePage(void)
  40.     {
  41.         union REGS regs;
  42.         regs.x.ax = DOS_GET_DBCP;
  43.         intdos(®s, ®s);
  44.  
  45.         return (regs.x.bx);
  46.     }
  47.     #endif /* _WDOS  */
  48.  
  49. #elif defined(__OS2__)
  50.  
  51. #else /* AIX */
  52.  
  53.    #include <nl_types.h>
  54.    #include <locale.h>
  55.  
  56. #endif
  57.  
  58.  
  59. static void somtinitDbcs(char *dbcsBuf, size_t bufsize)
  60. {
  61. #if defined(_WDOS) || defined(_WIN16) || defined(_WIN32)
  62.     int cp = GetKBCodePage();
  63.  
  64.     switch (cp) {
  65.     case CP_JAPAN:
  66.         dbcsBuf[0] = 0x81;
  67.         dbcsBuf[1] = 0x9f;
  68.         dbcsBuf[2] = 0xe0;
  69.         dbcsBuf[3] = 0xfc;
  70.         dbcsBuf[4] = 0;
  71.         dbcsBuf[5] = 0;
  72.         break;
  73.  
  74.     case CP_KOREA:
  75.         dbcsBuf[0] = 0x81;
  76.         dbcsBuf[1] = 0xbf;
  77.         dbcsBuf[2] = 0;
  78.         dbcsBuf[3] = 0;
  79.         break;
  80.  
  81.     case CP_SCHINESE:
  82.         dbcsBuf[0] = 0x81;
  83.         dbcsBuf[1] = 0xfc;
  84.         dbcsBuf[2] = 0;
  85.         dbcsBuf[3] = 0;
  86.         break;
  87.  
  88.     case CP_TCHINESE:
  89.         dbcsBuf[0] = 0x81;
  90.         dbcsBuf[1] = 0xfc;
  91.         dbcsBuf[2] = 0;
  92.         dbcsBuf[3] = 0;
  93.         break;
  94.  
  95.     default:
  96.         dbcsBuf[0] = 0;
  97.         dbcsBuf[1] = 0;
  98.         break;
  99.     }
  100. #elif __OS2__
  101.     COUNTRYCODE    cc;
  102.  
  103.     cc.country  = 0; /* Use default country */
  104.     cc.codepage = 0; /* Use current codepage */
  105.     if (DosQueryDBCSEnv(bufsize, &cc, dbcsBuf)) {
  106.     dbcsBuf[0] = '\0';
  107.     dbcsBuf[1] = '\0';
  108.     }
  109. #else
  110.     setlocale(LC_CTYPE, "");
  111. #endif /* AIX */
  112. }
  113.  
  114. #endif /* somtdbcs_c */
  115.