Snanls.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************/
  2. /* snanls.h                                                                  */
  3. /*                                                                           */
  4. /* Copyright (c) Microsoft Corporation.  All rights reserved.                */
  5. /*                                                                           */
  6. /*****************************************************************************/
  7. #ifdef __cplusplus
  8. extern "C"
  9. {
  10. #endif
  11. #if !defined __SNANLS_INC__
  12. #define __SNANLS_INC__
  13. /* ********************* Constants ******************** */
  14. #define CP_37 37 /* EBCDIC Lower English */
  15. #define CP_273 273
  16. #define CP_277 277
  17. #define CP_278 278
  18. #define CP_280 280
  19. #define CP_284 284
  20. #define CP_285 285
  21. #define CP_290 290 /* EBCDIC Katakana */
  22. #define CP_297 297
  23. #define CP_423 423
  24. #define CP_500 500
  25. #define CP_875 875
  26. #define CP_930 930 /* EBCDIC Katakana + Kanji */
  27. #define CP_931 931 /* EBCDIC Lower English + Kanji */
  28. #define CP_932 932  /* Japanese */
  29. #define CP_933 933 /* EBCDIC Korean */
  30. #define CP_935 935 /* EBCDIC Simplified Chinese */
  31. #define CP_936 936 /* Chinese */
  32. #define CP_937 937 /* EBCDIC Traditional Chinese */
  33. #define CP_939 939 /* EBCDIC Extended Lower English + Kanji */
  34. #define CP_949 949 /* Korean */
  35. #define CP_950 950 /* Taiwanese */
  36. #define CP_1027     1027 /* EBCDIC Extended Lower English */
  37. #define CP_5026 5026 /* Japanese (Katakana-Kanji) */
  38. #define CP_5035 5035 /* Japanese (Latin-Kanji) */
  39. #define SNA_UNICODE   1  /* Result of Conversion is Unicode */
  40. #define SNA_MULTIBYTE 2  /* Result of Conversion is MultiByte */
  41. #define SNA_DBCS        0x0100
  42. #define SNA_EITHER      0x0200
  43. #define SNA_BOTH        0x0400
  44. /* ********************* Functions ******************** */
  45. /* ***************************************************************** */
  46. /* Initialization Routine : Local Machine  */
  47. /* CodePage : The CodePage which we need to support         */
  48. /* return   : 1 if CodePage Translations are Supported      */
  49. /*                     0 otherwise  */
  50. /* ***************************************************************** */
  51. int WINAPI SnaNlsInit(UINT CodePage);
  52. /* ***************************************************************** */
  53. /*  */
  54. /* Translation Routine  */
  55. /*  */
  56. /* Input  */
  57. /*  */
  58. /* lpSrcStr   : Input, Source String  */
  59. /*  */
  60. /* lpDestStr  : Output, Translated String          */
  61. /* maybe NULL if out_length is 0  */
  62. /*  */
  63. /* inCodePage : CodePage of incoming string  */
  64. /* ignored if input is in unicode  */
  65. /*  */
  66. /* outCodePage: CodePage of translated string.  */
  67. /* ignored if output is in unicode  */
  68. /*  */
  69. /* in_length  : Length of input string          */
  70. /* in characters if input is multibyte      */
  71. /* in wide chars if input is unicode        */
  72. /*  */
  73. /*          out_length : Length of output string  */
  74. /* in characters if output is multibyte     */
  75. /* in wide chars if output is unicode       */
  76. /*  */
  77. /* in_type    : SNA_UNICODE - Unicode Input  */
  78. /*  SNA_MULTIBYTE - MultiByte Input  */
  79. /*  */
  80. /* out_type   : SNA_UNICODE - Unicode Output  */
  81. /*  SNA_MULTIBYTE - MultiByte Output  */
  82. /*  */
  83. /* Options    : Multiple usage  */
  84. /* Trnsdt Options  */
  85. /* Default Character for Translation (NLS)  */
  86. /*  */
  87. /* Output  */
  88. /*  */
  89. /* return val : 0 - Failure  */
  90. /* Use GetLastError to retrieve error  */
  91. /*  Else  */
  92. /* Num of chars(wide) written to lpDestStr  */
  93. /*  */
  94. /* lpDestStr  : Translated String  */
  95. /*  */
  96. /*  Options    : Required buffer length if call failed  */
  97. /*  */
  98. /* Errors    : (Retrieved by using GetLastError)           */
  99. /*  */
  100. /*   ERROR_NOT_SUPPORTED  */
  101. /* Possible Reasons:     */
  102. /* NLS is not available    */
  103. /* Input & Output are not of same type  */
  104. /*  */
  105. /*  ERROR_BUFFER_OVERFLOW  */
  106. /* Possible Reasons:  */
  107. /* Output buffer is too small           */
  108. /*  */
  109. /*  ERROR_INVALID_PARAMETER  */
  110. /* Possible Reasons:  */
  111. /* in_type or out_type is faulty        */
  112. /*  */
  113. /*  ERROR_INVALID_DATA  */
  114. /* Possible Reasons:  */
  115. /* input data has a lead byte at end    */
  116. /*  */
  117. /*  ERROR_OUTOFMEMORY  */
  118. /* Possible Reasons:  */
  119. /* malloc failed              */
  120. /*  */
  121. /*  */
  122. /* ***************************************************************** */
  123. int WINAPI SnaNlsMapString (LPCTSTR lpSrcStr, LPTSTR lpDestStr,
  124.  UINT inCodePage, UINT outCodePage,
  125.  int in_length,   int out_length, 
  126.  UINT in_type, UINT out_type,  WORD * Options);
  127. /* ***************************************************************** */
  128. // Function for use by PrintServer
  129. /* ***************************************************************** */
  130. HKEY WINAPI OpenNlsRegistry(char *MachineName, HKEY hKey, LPTSTR Path);
  131. BOOL WINAPI CloseNlsRegistry(HKEY KeyHandle);
  132. BOOL WINAPI IsInstalledCodePage(UINT CodePage, HKEY KeyHandle);
  133. /*****************#Defines********************/
  134. #define CP_SIZE 80
  135. /*********************************************/
  136. /******************Enumerations***************/
  137. enum {ENUM_CP_AVAILABLE = 0x01, ENUM_CP_HOST = 0x02, ENUM_CP_EURO = 0x04,ENUM_CP_DBCS = 0x08, ENUM_CP_MBCS = 0x10, ENUM_CP_SBCS = 0x20};
  138. enum {ENUM_CP_EBCDIC, ENUM_CP_ANSI, ENUM_CP_ISO, ENUM_CP_OEMPC, ENUM_CP_OPEN, ENUM_CP_UCS};
  139. /*********************************************/
  140. /*******************Structures****************/
  141. //This is the structure presented to the end user
  142. struct CodePage
  143. {
  144. BYTE CodePageKey;
  145. DWORD CodePageId;
  146. WCHAR szFriendlyName[CP_SIZE]; 
  147. short eGroup;
  148. BOOL bAvailable;
  149. BYTE bccsid;
  150. BOOL bEuro;
  151. };
  152. int WINAPI GetCodePages(
  153.  DWORD dwEnumOption,
  154.  size_t count, 
  155.  struct CodePage *pCodePages 
  156. );
  157. BOOL WINAPI GetCodePage(int nKey, struct CodePage *pCodePage);
  158. BOOL WINAPI GetCodePageDisplayStr(int nKey, WCHAR *szDisplaystr);
  159. const HANDLE WINAPI FindFirstCodePage(DWORD dwEnumOption, struct CodePage *pPage);
  160. BOOL WINAPI FindNextCodePage(const HANDLE hInfo, struct CodePage *pPage);
  161. BOOL WINAPI FindCloseCodePage(const HANDLE hInfo);
  162. #endif
  163. #ifdef __cplusplus
  164. }
  165. #endif