Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

381 lines
13 KiB

  1. /*************************************************
  2. * conv.h *
  3. * *
  4. * Copyright (C) 1995-1999 Microsoft Inc. *
  5. * *
  6. *************************************************/
  7. #ifndef __CONV_H
  8. #define __CONV_H
  9. #include <windows.h>
  10. #include <windowsx.h>
  11. #include <io.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include "propshet.h"
  15. //****** PlatFormID ********
  16. #define WIN95_PRC 0x00000001
  17. #define WIN95_CJK 0x00000002
  18. //****** EncodeID **********
  19. #define GBK_IME 0x00000001
  20. #define UNICODE_IME 0x00000002
  21. //****** FileFlag **********
  22. #define FFLG_SINGLEELEMENT 0x00000000
  23. #define FFLG_MULTIELEMENT 0x00000002
  24. #define FFLG_RULE 0x00000001
  25. #define FFLG_NORULE 0x00000000
  26. //****** Number of tables ******
  27. #define NUMTABLES 0x00000007
  28. //****** Version ***********
  29. #define MBVERSION "1.00"
  30. //****** Index tag *********
  31. #define TAG_DESCRIPTION 0x00000001
  32. #define TAG_RULE 0x00000002
  33. #define TAG_ENCODE 0x00000003
  34. #define TAG_CRTWORDCODE 0x00000004
  35. #define TAG_RECONVINDEX 0x00000005
  36. #define TAG_BASEDICINDEX 0x00000006
  37. #define TAG_BASEDIC 0x00000007
  38. //****** Get code direction mode ****
  39. #define GETCODEFORWARD 0x00000001
  40. #define GETCODEBACKWARD 0xffffffff
  41. //****** define error number *******
  42. #define ERR_MBNAME 1001
  43. #define ERR_FILENOTEXIST 1002
  44. #define ERR_FILENOTOPEN 1003
  45. #define ERR_OUTOFMEMORY 1004
  46. #define ERR_GLOBALLOCK 1005
  47. #define ERR_IMEUSE 1006
  48. #define ERR_MAXCODES 1101 //error:MaxCodes over 12!
  49. #define ERR_ELEMENT 1102 //error:MaxElement above MaxCodes!
  50. #define ERR_USEDCODE 1103 //error:not in {'0'~'9','a'~'z',...}
  51. #define ERR_WILDCHAR 1104 //error:WildChar in {UsedCode} !
  52. #define ERR_DESCRIPTSEG 1105
  53. #define ERR_OVERWRITE 1106
  54. #define ERR_IMENAMEENTRY 1107
  55. #define ERR_MAXCODESENTRY 1108
  56. #define ERR_ELEMENTENTRY 1109
  57. #define ERR_USEDCODEENTRY 1110
  58. #define ERR_NUMRULEENTRY 1111
  59. #define ERR_RULEHEADER 1201
  60. #define ERR_RULELOGICOPRA 1202
  61. #define ERR_RULEWORDLEN 1203
  62. #define ERR_RULEEQUAL 1204//error:not exist '='
  63. #define ERR_RULEDBCSPOS 1205//error:DBCS position not in {'1'~'9','a'~'f'}
  64. #define ERR_RULECODEPOS 1206
  65. #define ERR_RULEDIRECTMODE 1207
  66. #define ERR_NORULE 1210
  67. #define ERR_NOTDEFRULE 1211//error:not defined this length word's ruler
  68. #define ERR_RULENUM 1212
  69. #define ERR_RULESEG 1213
  70. #define ERR_DUPRULE 1214 //DUPLICATE RULE
  71. #define ERR_DBCSCODE 1301
  72. #define ERR_CODEUNITNOTEXIST 1302
  73. #define ERR_CREATECODE 1303
  74. #define ERR_CREATENOTEXIST 1304//multi-elements
  75. #define ERR_CODEEMPTY 1305//when ruler doesnot exist
  76. #define ERR_SINGLECODEWORDDOUBLE 1306
  77. #define ERR_SBCS_IN_DBCS 1307
  78. #define ERR_GB2312NOTENTIRE 1308
  79. #define ERR_USERWORDLEN 1309
  80. #define ERR_WORDNOTEXIST 1310
  81. #define ERR_TEXTSEG 1311
  82. #define ERR_TOOMANYUSERWORD 1312
  83. #define ERR_WRITEID 1401
  84. #define ERR_WRITEMAININDEX 1402
  85. #define ERR_WRITEDESCRIPT 1403
  86. #define ERR_WRITERULE 1404
  87. #define ERR_READID 1411
  88. #define ERR_READMAININDEX 1412
  89. #define ERR_READDESCRIPT 1413
  90. #define ERR_READRULE 1414
  91. #define ERR_CONVEND 1501
  92. #define ERR_RECONVEND 1502
  93. #define ERR_SORTEND 1503
  94. #define ERR_VERSION 1601
  95. #define ERR_GROUP 1602
  96. #define ERR 1
  97. #define INFO 2
  98. #define WARNING 3
  99. #define GB2312WORDNUM 6763
  100. #define NUM_OF_XGB_ENCODE 23940
  101. #define NUM_OF_CJK_ENCODE 28528
  102. #ifdef UNICODE
  103. #define NUM_OF_ENCODE NUM_OF_CJK_ENCODE
  104. #else
  105. #define NUM_OF_ENCODE NUM_OF_XGB_ENCODE
  106. #endif
  107. //CJK Unified Ideograph subset
  108. #define NUM_OF_CJK_CHINESE 20992
  109. #ifdef UNICODE
  110. #define NUMENCODEAREA 8
  111. #else
  112. #define NUMENCODEAREA 252
  113. #endif
  114. #define MAXNUMCODES 128
  115. #define MAXUSEDCODES 48
  116. #define NAMESIZE 128
  117. #define MAXCODELEN 12
  118. #define MAXREADBUFFER 0x4000
  119. #define USER_WORD_SIZE 40
  120. #define MAX_WORD_SIZE 256
  121. //#define ID_LENGTH 28
  122. #define ID_LENGTH sizeof(MAINID)
  123. #define CODEMAPOFFSET 4
  124. #define MAXUSERWORDS 1000
  125. #define GMEM_PAGESIZE 0x10000
  126. #define MbName "IME file"
  127. //#define CaptionName "���뷨������"
  128. #define ImeSubKey "System\\CurrentControlSet\\Control\\Keyboard Layouts"
  129. #define szClassName "IMEGEN"
  130. #define TplName "\\ImeGen.tpl"
  131. #define BmpExt ".BMP"
  132. #define IconExt ".ICO"
  133. #define HlpExt ".HLP"
  134. #define ImeExt ".IME"
  135. #define MbExt ".MB"
  136. #define EmbExt ".EMB"
  137. #define TxtFileExt ".TXT"
  138. #define Slope "\\"
  139. #define LayoutTextKey "layout text"
  140. #define PreImeKey "keyboard layout\\preload"
  141. #define DescriptSeg "[Description]"
  142. #define RuleSeg "[Rule]"
  143. #define TextSeg "[Text]"
  144. #define TempFile "$$$$$$$$.$$$"
  145. #define DefVer "5.0"
  146. #define DefOrgName "Microsoft"
  147. #define NUMPROPSHEET 5
  148. #define PROP_CRTIME 0
  149. #define PROP_RECONV 1
  150. #define PROP_SORT 2
  151. #define PROP_CRTWORD 3
  152. #define PROP_ABOUT 4
  153. typedef unsigned char UCHAR;
  154. typedef LPTSTR LPCREATEWORD;
  155. typedef LPTSTR LPRECONVINDEX;
  156. typedef LPDWORD LPDICINDEX;
  157. typedef LPDWORD LPNUMXYWORDS;
  158. typedef struct tagMAINID {
  159. TCHAR szVersion[4];
  160. DWORD dwLanguageID;
  161. DWORD dwEncodeID;
  162. DWORD dwFileFlag;
  163. DWORD dwNumTables;
  164. DWORD dwNumWords;
  165. } MAINID, FAR *LPMAINID;
  166. typedef struct tagMAININDEX {
  167. DWORD dwTag;
  168. DWORD dwOffset;
  169. DWORD dwLength;
  170. DWORD dwCheckSum; //Check if dwCheckSum=dwTag+dwOffset+dwLength
  171. } MAININDEX, FAR *LPMAININDEX;
  172. typedef struct tagDESCRIPTION {
  173. TCHAR szName[NAMESIZE];
  174. WORD wMaxCodes;
  175. WORD wNumCodes;
  176. TCHAR szUsedCode[MAXUSEDCODES];
  177. BYTE byMaxElement;
  178. TCHAR cWildChar;
  179. WORD wNumRules;
  180. } DESCRIPTION,FAR * LPDESCRIPTION;
  181. typedef struct tagCREATEWORDRULE {
  182. BYTE byLogicOpra;
  183. BYTE byLength;
  184. WORD wNumCodeUnits;
  185. struct CODEUNIT {
  186. DWORD dwDirectMode;
  187. WORD wDBCSPosition;
  188. WORD wCodePosition;
  189. } CodeUnit[12];
  190. } RULE,FAR *LPRULE;
  191. typedef struct tagENCODEAREA {
  192. DWORD PreCount;
  193. DWORD StartEncode;
  194. DWORD EndEncode;
  195. } ENCODEAREA,FAR *LPENCODEAREA;
  196. typedef struct tagEMBHEAD {
  197. TCHAR W_Code[MAXCODELEN];
  198. TCHAR C_Char[USER_WORD_SIZE];
  199. } EMB_Head,FAR *LPEMB_Head;
  200. typedef struct tagWORDINDEX {
  201. TCHAR szCode[MAXCODELEN+1];
  202. WORD wDBCSLen;
  203. DWORD dwOffset;
  204. } WORDINDEX,FAR *LPWORDINDEX;
  205. typedef struct tagImeRes{
  206. TCHAR Version[NAMESIZE];
  207. TCHAR Depart[NAMESIZE/2];
  208. TCHAR BmpName[MAX_PATH];
  209. TCHAR IcoName[MAX_PATH];
  210. TCHAR HlpFile[MAX_PATH];
  211. WORD Value;
  212. }IMERES,FAR *LPIMERES;
  213. extern HANDLE hDlgless;
  214. extern HGLOBAL hRule;
  215. HGLOBAL hEncode;
  216. HINSTANCE hInst;
  217. DWORD dwLineNo;
  218. WORD EMB_Count;
  219. HANDLE HmemEMB_Table;
  220. HANDLE hSRCFile,hMBFile;
  221. HANDLE hCmbFile;
  222. BYTE WriteCrtFlag[(NUM_OF_ENCODE+7)/8];
  223. BOOL InitApplication(HINSTANCE);
  224. BOOL ConvConv (HANDLE, LPCTSTR, LPCTSTR);
  225. BOOL ConvReConv (HANDLE, LPCTSTR, LPCTSTR);
  226. BOOL ConvGetMainID (HANDLE, LPMAINID);
  227. BOOL ConvWriteMainID (HANDLE, LPMAINID);
  228. BOOL ConvGetMainIndex (HANDLE, HANDLE, LPMAININDEX);
  229. BOOL ConvWriteMainIndex (HANDLE, LPMAININDEX);
  230. BOOL ConvReadFile (HANDLE, LPCTSTR, LPCTSTR);
  231. BOOL WriteSortFile (HANDLE, HANDLE, HANDLE, LPWORDINDEX, LPCREATEWORD);
  232. BOOL ConvReadDescript (HANDLE, LPDESCRIPTION, LPMAININDEX);
  233. BOOL ConvWriteDescript (HANDLE, LPDESCRIPTION, LPMAININDEX);
  234. int ConvGetDescript (HANDLE, LPCTSTR, LPDWORD, LPDWORD, LPDESCRIPTION,BOOL);
  235. BOOL ConvSaveDescript (LPCTSTR, LPDESCRIPTION, DWORD, DWORD);
  236. BOOL ConvReadRule (HANDLE, int, LPRULE, LPMAININDEX);
  237. BOOL ConvWriteRule (HANDLE, int, LPRULE, LPMAININDEX);
  238. int ConvGetRule (HANDLE, LPCTSTR, LPDWORD, LPDWORD, LPRULE, LPDESCRIPTION);
  239. BOOL ConvSaveRule (HANDLE, LPCTSTR, DWORD, DWORD, LPRULE, DWORD);
  240. BOOL ConvInitEncode (HGLOBAL hEncode);
  241. BOOL ConvGetEncode (HANDLE, LPENCODEAREA, LPDWORD, LPDWORD, LPMAININDEX);
  242. BOOL ConvWriteEncode (HANDLE, LPENCODEAREA, LPMAININDEX);
  243. BOOL ConvGetCrtData (HANDLE, LPCREATEWORD, LPMAININDEX);
  244. BOOL ConvWriteCrtData (HANDLE, LPCREATEWORD, LPMAININDEX);
  245. BOOL ConvGetReConvIndex (HANDLE, LPRECONVINDEX, LPMAININDEX);
  246. BOOL ConvWriteReConvIdx (HANDLE, LPRECONVINDEX, LPMAININDEX);
  247. BOOL ConvGetCodeIndex (HANDLE, LPDWORD, LPSTR, LPMAININDEX);
  248. BOOL ConvWriteCodeIndex (HANDLE, LPDWORD, LPTSTR, LPMAININDEX);
  249. BOOL ConvGetDicIndex (HANDLE, LPDWORD, DWORD, LPMAININDEX);
  250. BOOL ConvWriteDicIndex (HANDLE, LPDWORD, DWORD, LPMAININDEX);
  251. BOOL ConvGetNumXYWords (HANDLE, LPDWORD, DWORD, LPMAININDEX);
  252. BOOL ConvWriteNumXYWords(HANDLE, LPDWORD, DWORD, LPMAININDEX);
  253. BOOL ConvInsNewWord (HANDLE, HANDLE, EMB_Head);
  254. BOOL ConvSort (HANDLE, LPWORDINDEX, int);
  255. BOOL ConvBatCreate (HANDLE, DESCRIPTION, LPRULE, LPCREATEWORD, LPTSTR, LPTSTR);
  256. LPTSTR ConvCreateWord (HWND, LPCTSTR, LPTSTR);
  257. void ConvInit (LPDESCRIPTION,LPMAINID,LPMAININDEX);
  258. BOOL ConvGetBaseWord (HANDLE, WORDINDEX, LPTSTR);
  259. BOOL ConvWriteBaseWord (HANDLE, HANDLE, HANDLE, MAINID,DWORD,
  260. LPCREATEWORD, LPRECONVINDEX, DWORD);
  261. BOOL ReadSRCFile (HANDLE, LPINT, HANDLE, LPCREATEWORD, LPWORDINDEX,
  262. LPINT, LPDESCRIPTION,LPRECONVINDEX);
  263. BOOL ConvCalc (HANDLE ,HANDLE ,LPWORDINDEX ,LPMAININDEX ,LPDESCRIPTION);
  264. //BOOL WriteMBFile (HANDLE, HANDLE, HANDLE, LPWORDINDEX,
  265. // LPMAININDEX, LPDESCRIPTION, LPCREATEWORD, LPRECONVINDEX);
  266. BOOL WriteMBFile (HANDLE, HANDLE, HANDLE, LPWORDINDEX,
  267. LPMAININDEX, LPDESCRIPTION);
  268. int WordSplit (HANDLE, LPINT, LPTSTR, LPCREATEWORD, LPWORDINDEX,
  269. LPDESCRIPTION,LPRECONVINDEX);
  270. int SimpleSplit (HANDLE, LPINT, LPTSTR, LPCREATEWORD, LPWORDINDEX, WORD);
  271. void qSort (LPWORDINDEX, DWORD,DWORD);
  272. void qSortChar (LPTSTR , DWORD ,DWORD );
  273. HANDLE IndexReAlloc (HANDLE, LPINT);
  274. BOOL RuleParse (HANDLE, LPTSTR, DWORD, LPRULE, WORD);
  275. void RuleToText (LPRULE, LPTSTR);
  276. void MoveFileBlock (HANDLE, DWORD, DWORD, DWORD);
  277. DWORD EncodeToNo (LPTSTR);
  278. DWORD EncodeToGBNo (UCHAR szDBCS[3]);
  279. void NoToEncode (DWORD, LPBYTE, DWORD, LPENCODEAREA);
  280. BOOL CheckCrtData (HANDLE, LPCREATEWORD, LPENCODEAREA, DWORD);
  281. void DispInfo (HANDLE, WORD);
  282. void lstrncpy0 (LPTSTR ,int ,LPTSTR );
  283. BOOL ReadUserWord (HWND ,LPTSTR ,LPDWORD,WORD);
  284. INT ReadDescript (LPCTSTR , LPDESCRIPTION ,DWORD);
  285. BOOL ReadRule (HWND, LPCTSTR , int ,LPRULE );
  286. int CheckUserWord (HWND ,LPTSTR, WORD);
  287. BOOL CheckUserDBCS (HWND ,LPTSTR);
  288. BOOL CheckCodeLegal (HWND ,LPTSTR ,LPTSTR, LPTSTR, LPDESCRIPTION );
  289. BOOL CheckCodeCollection(HWND ,LPTSTR ) ;
  290. BOOL SaveFileAs (HWND , LPTSTR );
  291. BOOL CreateMbKey (PHKEY ,LPCTSTR ,LPCTSTR);
  292. BOOL SetRegValue (HKEY ,LPDWORD );
  293. BOOL GetRegValue (HWND, HKEY ,LPDWORD );
  294. extern void DelSpace();
  295. extern void trim();
  296. extern BOOL ParseDBCSstr();
  297. extern void lstrncpy();
  298. extern HANDLE Create_File();
  299. extern BOOL Copy_File();
  300. extern void ProcessError();
  301. extern BOOL QueryKey();
  302. extern BOOL ErrMessage();
  303. extern VOID WarnMessage();
  304. extern VOID FatalMessage();
  305. extern VOID InfoMessage();
  306. extern void ErrorOut();
  307. extern HANDLE CreateMapFile ();
  308. extern HANDLE CreateMap ();
  309. extern LPVOID MapView ();
  310. extern HANDLE OpenMap ();
  311. extern BOOL WriteEMBToFile();
  312. extern BOOL ReadEMBFromFile();
  313. extern void DelSelCU();
  314. extern int AddZCItem();
  315. extern void fnsplit();
  316. extern int GetEntryInt(LPTSTR , LPTSTR, int ,LPINT);
  317. extern int GetEntryString();
  318. extern void GetEntryName();
  319. extern int CheckDescription();
  320. extern int GetDescriptEntry();
  321. extern BOOL searchPos(LPWORDINDEX , DWORD );
  322. extern DWORD bSearch(LPWORDINDEX , DWORD , DWORD , WORDINDEX );
  323. int ConvReconvIndex(HANDLE ,LPTSTR ,LPCREATEWORD ,WORDINDEX ,LPDESCRIPTION ,LPRECONVINDEX );
  324. void DelIllegalCode(TCHAR *);
  325. LPTSTR _tcschr(LPTSTR, TCHAR);
  326. LPTSTR _tcsrchr(LPTSTR, TCHAR);
  327. LPTSTR _tcsstr(LPTSTR, LPTSTR);
  328. LPTSTR _tcsupr(LPTSTR);
  329. int _taccess(LPTSTR, int);
  330. int _ttoi(LPTSTR);
  331. #endif //__CONV_H