static char jamo_index1[]= { /* 0:fill, 2:¤¡, ... */ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static char jamo_index2[]= { /* 0:fill 1:¤¿, ... */ 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 6, 7, 8, 9, 10, 11, 0, 0, 12, 13, 14, 15, 16, 17, 0, 0, 18, 19, 20, 21, 0, 0 }; static char jamo_index3[]= { /* 0:fill, 2:¤¡, ... */ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0 }; #define JOHAB_MODE 0 int convert_3_to_johab(f, m, l, des) int f, m, l; int *des; { //#undef JOHAB_8_4_4 //#define JOHAB_32_15_11 //#define JOHAB_32_11_11 #ifdef JOHAB_32_11_11 #define JOHAB_KIND_LCON 32 #define JOHAB_KIND_MVOW 11 #define JOHAB_KIND_FCON 11 #define JOHAB_FONT_LCON 0x100 #define JOHAB_FONT_MVOW 0x100 #define JOHAB_FONT_FCON 0x100 #if 0 #define JOHAB_BASE_LCON 0x1000 #define JOHAB_BASE_MVOW 0x3000 #define JOHAB_BASE_FCON 0x4000 #endif #define JOHAB_BASE_LCON 0x1000 #define JOHAB_BASE_MVOW 0x4000 #define JOHAB_BASE_FCON 0x8000 #endif // JOHAB_32_11_11 #ifdef JOHAB_32_15_11 #define JOHAB_KIND_LCON 32 #define JOHAB_KIND_MVOW 15 #define JOHAB_KIND_FCON 11 #define JOHAB_FONT_LCON 0x100 #define JOHAB_FONT_MVOW 0x100 #define JOHAB_FONT_FCON 0x100 #define JOHAB_BASE_LCON 0x1000 #define JOHAB_BASE_MVOW 0x4000 #define JOHAB_BASE_FCON 0x8000 #endif // JOHAB_32_15_11 #ifdef JOHAB_8_4_4 #define JOHAB_KIND_LCON 8 #define JOHAB_KIND_MVOW 4 #define JOHAB_KIND_FCON 4 #define JOHAB_FONT_LCON 20 #define JOHAB_FONT_MVOW 22 #define JOHAB_FONT_FCON 28 #define JOHAB_BASE_LCON 0 #define JOHAB_BASE_MVOW JOHAB_FONT_LCON*JOHAB_KIND_LCON+JOHAB_BASE_LCON #define JOHAB_BASE_FCON JOHAB_FONT_MVOW*JOHAB_KIND_MVOW+JOHAB_BASE_MVOW #endif // JOHAB_8_4_4 #ifdef JOHAB_32_11_11 #define FCON_BY_LCON 1 #define VOW_KIND 8 /* Áß¼ºÀÇ ¸ð¾ç Á¾·ù¸¦ 8°³·Î ³ª´® : ¤¿¤Â¤Ç¤È¤É¤Ì¤Í¤Î */ /* ¹ÞħÀÌ ¾øÀ» ¶§ Ãʼº ¹ú ¼ö 8°³ * ¹ÞħÀÌ ÀÖÀ» ¶§ Ãß°¡ 8¹ú * ¹ÞħÀÌ ¤¤À϶§ Ãß°¡ 8¹ú * ¹ÞħÀÌ ¤©À϶§ Ãß°¡ 8¹ú = µµÇÕ 32¹ú */ /* ¹ÞħÀÌ ¾øÀ» °æ¿ì Ãʼº */ static char lcon_by_vow_fcon0[] = { /* BASE */ 0, /* ±âº» Áß¼º¹ú */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 2, 5, 6, 7, 6, 5, 2, 3, 0 }; /* ¹ÞħÀÌ ÀÖÀ» °æ¿ì Ãʼº */ static char lcon_by_vow_fcon1[] = { /* INDEX */ 0, /* ±âº» Áß¼º¹ú */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 2, 5, 6, 7, 6, 5, 5, 3, 0 }; /* Á¾¼ºÀÇ Á¾·ù´Â ¾øÀ» °æ¿ì±îÁö ÇÕÇØ¼­ 4Á¾·ù */ /* Á¾¼ºÀÇ ¸ð¾ç¿¡ µû¶ó Ãʼº °áÁ¤ */ static char lcon_by_fcon[] = { /* BASE */ 0, /* ±âº» */ /* ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° */ /* ¤± ¤² ¤´ ¤µ ¤¶ ¤· ¤¸ ¤º ¤» ¤¼ ¤½ ¤¾ */ 8, 8, 8,16, 8, 8, 8,24,24,24,24,24,24,24,24, 8, 8, 8, 8, 8, 8, 8,24, 8,24, 8,24, -1 }; /* ÃʼºÀÇ ¸ð¾ç¿¡ µû¶ó Áß¼º °áÁ¤ */ /* ÃʼºÀÌ [ÀϹÝ] [¤¡,¤»] [¤©,¤º,¤¼,¤¾] ÀÏ ¶§¿¡ µû¶ó¼­ Áß¼º ºÐ·ù */ static char vow_by_lcon_fcon0[] = { /* INDEX */ 0, /* ¤¡ ¤¢ ¤¤ ¤§ ¤¨ ¤© ¤± ¤² ¤³ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾*/ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1 }; /* Á¾¼ºÀº [ÀϹÝ] [¤¤] [¤©,¤¾,¤º,¤¼] ¼¼ ±×·ì */ static char vow_by_lcon_fcon1[] = { /* INDEX */ 0, /* ¤¡ ¤¢ ¤¤ ¤§ ¤¨ ¤© ¤± ¤² ¤³ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾*/ 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 2, -1 }; /* Á¾¼ºÀÇ ¸ð¾ç¿¡ µû¶ó Áß¼º °áÁ¤ */ static char vow_by_fcon[] = { /* BASE */ 0, /* ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° */ /* ¤± ¤² ¤´ ¤µ ¤¶ ¤· ¤¸ ¤º ¤» ¤¼ ¤½ ¤¾ */ 2, 2, 2, 5, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 8, 2, 8, 2, 8, -1 }; /* Áß¼ºÀÇ ¸ð¾ç¿¡ µû¶ó Á¾¼º °áÁ¤ */ static char fcon_by_vow[] = { /* BASE */ 0, /* ±âº» Áß¼º¹ú */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 1, 0, 1, 2, 1, 2, 1, 3, 5, 7, 5, 3, 9, 5, 7, 5, 9, 9, 5, 0 }; /* °ªÀÌ 1ÀÏ °æ¿ì¿¡¸¸ Ãʼº¿¡ ÀÇÇØ Á¾¼º °áÁ¤ */ /* ¿À¿Í¿Ö¿Ü¿ì µîµîÀÇ °æ¿ì¿¡¸¸ Ãʼº¿¡ ÀÇÇÑ Á¾¼º ºÐ·ù */ static char fcon_by_vow_lcon[] = { /* FLAG */ 0, /* default */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, -1 }; /* ÃʼºÀÇ ¸ð¾ç¿¡ µû¶ó Á¾¼º °áÁ¤ */ static char fcon_by_lcon[] = { /* INDEX */ 0, /* default */ /* ¤¡ ¤¢ ¤¤ ¤§ ¤¨ ¤© ¤± ¤² ¤³ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾*/ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, -1 }; #endif #ifdef JOHAB_32_15_11 #define FCON_BY_LCON 1 /* Áß¼ºÀÇ ¸ð¾ç Á¾·ù¸¦ 8°³·Î ³ª´® : ¤¿¤Â¤Ç¤È¤É¤Ì¤Í¤Î */ /* ¹ÞħÀÌ ¾øÀ» ¶§ Ãʼº ¹ú ¼ö 8°³ * ¹ÞħÀÌ ÀÖÀ» ¶§ Ãß°¡ 8¹ú * ¹ÞħÀÌ ¤¤À϶§ Ãß°¡ 8¹ú * ¹ÞħÀÌ ¤©À϶§ Ãß°¡ 8¹ú = µµÇÕ 32¹ú */ /* ¹ÞħÀÌ ¾øÀ» °æ¿ì Ãʼº */ static char lcon_by_vow_fcon0[] = { /* BASE */ 0, /* ±âº» Áß¼º¹ú */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 2, 5, 6, 7, 6, 5, 2, 3, 0 }; /* ¹ÞħÀÌ ÀÖÀ» °æ¿ì Ãʼº */ static char lcon_by_vow_fcon1[] = { /* INDEX */ 0, /* ±âº» Áß¼º¹ú */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 2, 5, 6, 7, 6, 5, 5, 3, 0 }; /* Á¾¼ºÀÇ Á¾·ù´Â ¾øÀ» °æ¿ì±îÁö ÇÕÇØ¼­ 4Á¾·ù */ /* Á¾¼ºÀÇ ¸ð¾ç¿¡ µû¶ó Ãʼº °áÁ¤ */ static char lcon_by_fcon[] = { /* BASE */ 0, /* ±âº» */ /* ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° */ /* ¤± ¤² ¤´ ¤µ ¤¶ ¤· ¤¸ ¤º ¤» ¤¼ ¤½ ¤¾ */ 8, 8, 8,16, 8, 8, 8,24,24,24,24,24,24,24,24, 8, 8, 8, 8, 8, 8, 8,24, 8,24, 8,24, -1 }; /* ÃʼºÀÇ ¸ð¾ç¿¡ µû¶ó Áß¼º °áÁ¤ */ /* ÃʼºÀÌ [ÀϹÝ] [¤¡,¤»] [¤©,¤º,¤¼,¤¾] ÀÏ ¶§¿¡ µû¶ó¼­ Áß¼º ºÐ·ù */ static char vow_by_lcon_fcon0[] = { /* INDEX */ 0, /* ¤¡ ¤¢ ¤¤ ¤§ ¤¨ ¤© ¤± ¤² ¤³ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾*/ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, -1 }; /* Á¾¼ºÀº [ÀϹÝ] [¤¤] [¤©,¤¼][¤º,¤¾] ³× ±×·ì */ static char vow_by_lcon_fcon1[] = { /* INDEX */ 0, /* ¤¡ ¤¢ ¤¤ ¤§ ¤¨ ¤© ¤± ¤² ¤³ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾*/ 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 0, 3, -1 }; /* Á¾¼ºÀÇ ¸ð¾ç¿¡ µû¶ó Áß¼º °áÁ¤ */ static char vow_by_fcon[] = { /* BASE */ 0, /* ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤© ¤ª ¤« ¤¬ ¤­ ¤® ¤¯ ¤° */ /* ¤± ¤² ¤´ ¤µ ¤¶ ¤· ¤¸ ¤º ¤» ¤¼ ¤½ ¤¾ */ 3, 3, 3, 7, 3, 3, 3,11,11,11,11,11,11,11,11, 3, 3, 3, 3, 3, 3, 3,11, 3,11, 3,11, -1 }; /* Áß¼ºÀÇ ¸ð¾ç¿¡ µû¶ó Á¾¼º °áÁ¤ */ static char fcon_by_vow[] = { /* BASE */ 0, /* ±âº» Áß¼º¹ú */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 1, 0, 1, 2, 1, 2, 1, 3, 5, 7, 5, 3, 9, 5, 7, 5, 9, 9, 5, 0 }; /* °ªÀÌ 1ÀÏ °æ¿ì¿¡¸¸ Ãʼº¿¡ ÀÇÇØ Á¾¼º °áÁ¤ */ /* ¿À¿Í¿Ö¿Ü¿ì µîµîÀÇ °æ¿ì¿¡¸¸ Ãʼº¿¡ ÀÇÇÑ Á¾¼º ºÐ·ù */ static char fcon_by_vow_lcon[] = { /* FLAG */ 0, /* default */ /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, -1 }; /* ÃʼºÀÇ ¸ð¾ç¿¡ µû¶ó Á¾¼º °áÁ¤ */ static char fcon_by_lcon[] = { /* INDEX */ 0, /* default */ /* ¤¡ ¤¢ ¤¤ ¤§ ¤¨ ¤© ¤± ¤² ¤³ ¤µ ¤¶ ¤· ¤¸ ¤¹ ¤º ¤» ¤¼ ¤½ ¤¾*/ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, -1 }; #endif // JOHAB_32_15_11 #ifdef JOHAB_8_4_4 #define FCON_BY_LCON 0 #define VOW_KIND 5 static char lcon_by_vow_fcon0[]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È */ 3, 3, 1, 2, 4, 4, 4, 2, 1, 3, 0 /* ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ }; static char lcon_by_vow_fcon1[]= { 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 7, /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È */ 7, 7, 6, 6, 7, 7, 7, 6, 6, 7, 5, /* ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ }; static char vow_by_lcon[] = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* ±× ²ô ´À µå ¶ß ¸£ ¹Ç ºê »Ú ½º */ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 /* ¾² À¸ Áî Âê Ã÷ Å© Æ® ÇÁ Èå */ }; static char vow_by_fcon[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* ¤¡ ¤¢ ¤£ ¤¤ ¤¥ ¤¦ ¤§ ¤© ¤ª ¤« */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* ¤¬ ¤­ ¤® ¤¯ ¤° ¤± ¤² ¤´ ¤µ ¤¶ */ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0 /* ¤· ¤¸ ¤º ¤» ¤¼ ¤½ ¤¾ */ }; static char fcon_by_vow[]= { 0, 0, 2, 0, 2, 1, 2, 1, 2, 3, 0, /* ¤¿ ¤À ¤Á ¤Â ¤Ã ¤Ä ¤Å ¤Æ ¤Ç ¤È */ 2, 1, 3, 3, 1, 2, 1, 3, 3, 1, 1 /* ¤É ¤Ê ¤Ë ¤Ì ¤Í ¤Î ¤Ï ¤Ð ¤Ñ ¤Ò ¤Ó*/ }; static char *fcon_by_vow_fcon1=fcon_by_vow_fcon0; #endif unsigned h1, h2, h3, type1, type2, type3; int ind; int i=0; int show_mode=JOHAB_MODE; if (f==0xff || f < 1 || f > 20 || m < 2 || m > 29 || l < 1 || l > 29) { des[0] = 0; /* °ø¹é */ return 1; } h1 = jamo_index1[f]; h2 = jamo_index2[m]; h3 = jamo_index3[l]; /* ÃʼºÁ¾·ù */ type1 = (h3||show_mode) ? lcon_by_vow_fcon1[h2] + lcon_by_fcon[h3]: lcon_by_vow_fcon0[h2]; /* Áß¼ºÁ¾·ù */ type2 = (h3||show_mode) ? vow_by_lcon_fcon1[h1] + vow_by_fcon[h3]: vow_by_lcon_fcon0[h1]; /* Á¾¼ºÁ¾·ù */ #ifdef FCON_BY_LCON type3 = fcon_by_vow[h2] + ((fcon_by_vow_lcon[h2]) ? fcon_by_lcon[h1]:0); #else type3 = fcon_by_vow[h2]; #endif if (h1) { ind = type1 * JOHAB_FONT_LCON + JOHAB_BASE_LCON + h1; des[i++] = ind; } if (h2) { ind = type2 * JOHAB_FONT_MVOW + JOHAB_BASE_MVOW + h2; des[i++] = ind; } if (h3) { ind = type3 * JOHAB_FONT_FCON + JOHAB_BASE_FCON + h3; des[i++] = ind; } else if (show_mode) { des[i++] = 0; } if (f != 1 && m == 2 && l == 1) { des[i++] = 0; } return i; }