¥»¤å²z gen_inp ¼Ò²Õªº¤¤¤å¦r»P¨ä¹ïÀ³ªº keystroke ·j´M¸ê®Æµ²ºc¡C gen_inp ¬O¦Û .tab Àɤ¤Åª¨ú¿é¤Jªkªí®æ¡A¬O¥Ñ cin2tab ±N .cin ÀɽsͦӍӡA ¨ä®æ¦¡´N©w¸q¦b xcin-2.5/src/util/cin2tab/gencin.c ¤¤¡A°£¤F¥¿¦V·j´M¥H¥~¡A ÁÙ¥]§t¤F¤Ï¦V·j´M¡A«üªº¬O¥i¥H¥Ñ¤@Ó¤¤¤å¦r¤Ï¬d¥¦¦b¬Y¿é¤Jªk¤¤ªº keystroke: .tab ªº®æ¦¡¥]¬A¥H¤U´XÓ³¡¤À: name size (# of bytes) description =========================================================================== modID: MODULE_ID_SIZE ID of the readable module th: sizeof(cintab_head_t) Header of the IM icode_idx: sizeof(icode_idx_t)*th.n_icode idx for keystroke searching ichar: sizeof(ichar)*th.n_icode idx for char searching icode1: sizeof(icode_t)*th.n_icode keystroke 1-5 icode2: sizeof(icode_t)*th.n_icode keystroke 6-10 ¨ä¤¤ sizeof(icode_t) = 4, icode_t ¬O¥Î¨ÓÀx¦s¤¤¤å¦rªº keystroke, ¤@Ó icode1 ³Ì¦h¥i¥HÀx¦s¤Ó½X¡A³o¬O¤@¯ë¿é¤Jªkªº±¡ªp¡C¦pªG¶W¹L¤Ó½Xªº¸Ü¡A «hÁÙ»Ýn icode2, ¬G gen_inp ¥Ø«e³Ì¦h¯à³B²z¤QÓ½Xªº¿é¤Jªk¡C¦pªG¸Ó¿é¤J ªkªº³Ì¦h½X¼Æ¤£¶W¹L¤ªº¸Ü¡A .tab ÀÉ´N¤£¥]§t icode2, ¸`¬ÙªÅ¶¡¡C icode_idx ¥Î©ó¥¿¬d¡A ichar ¥Î©ó¤Ï¬d¡C¥¿¬dªº¨BÆJ¬°: (¸Ô¨£ xcin-2.5/src/Cinput/gen_inp/gen_inp.c) 1. ±N¨Ï¥ÎªÌ¿é¤Jªº keystroke ¦r¦ê½s½X¡A¦¨¬° icode_t ªº®æ¦¡¡C (¨Ï¥Î keys2codes ¨ç¦¡) 2. ±q icode1 »P icode2 ªº°}¦C¤¤·j´M¡A§ä¨ì»P¨Ï¥ÎªÌ¿é¤Jªº keystroke icode_t ¬Û²Åªº¡A¶Ç¦^¥¦¦b°}¦C¤¤ªº index: idx ¡C 3. icode_idx[idx] ªºÈ§Y¬°²Å¦X¦¹ keystroke ªº¤¤¤å¦r½X (ichar_t ®æ¦¡)¡A ³o®É¥²¶·¥Î ccode_to_char ¨ç¦¡±N¥¦Âà¦^¸Ó¤¤¤å¦rªº¤º½X (¦p Big5 ½X) ¤Ï¬dªº¨BÆJ¬°: 1. ±N±ý¤Ï¬dªº¤¤¤å¦r¤º½X (¦p Big5 ½X) ½s½X¡A¦¨¬° ichar_t ªº®æ¦¡¡A§Y index i¡C (¨Ï¥Î ccode_to_idx ¨ç¦¡) 2. idx = ichar[i] ªºÈ§Y¬° icode1 »P icode2 °}¦Cªº index ¡C 3. ¥Î codes2keys ¨ç¦¡±N icode1[idx] »P icode2[idx] ÁÙ쬰 keystroke ¡C ¦b³oùاÚ̦P®É±N keystroke »P¤¤¤å¦rªº¤º½X³£½s½XÀx¦s¤F¡A³o¬O¬°¤F ¸`¬Ù°O¾ÐÅ骺¨Ï¥Î¶q (sizeof(icode_idx_t)=2, sizeof(ichar_t)=2, ¤]´N¬O »¡ gen_inp ³Ì¦h¯à³B²z 65565 Ó¦r©Î keystroke)¡C¦Ó³o¨Ç½s½Xªº¨ç¦¡³£¦b xcin-2.5/src/Cinput/im_comm ùØÀY¡C T.H.Hsieh