¸®´ª½º ±âŸ ÀÚ·á |
---|
Á¦¸ñ | X-Windows Programming #11 1998/07/04 (16:35) |
À̸§ | ±èÈ¿¿ø |
¹øÈ£ | 51 |
Á¶È¸ | 532 |
º»¹® |
¡º¸®´ª½º Çдç-¸®´ª½º °Á / ¿¬Àç (go LINUX)¡» 351¹ø Á¦ ¸ñ:[°ÁÂ11] X ÇÁ·Î±×·¡¹Ö, X ·ÎÄÉÀÏ ÀÌ¿ë Ãâ·Â ¿Ã¸°ÀÌ:geoman (À̸¸¿ë ) 96/11/21 18:36 ÀÐÀ½:1952 E[7m°ü·ÃÀÚ·á ÀÖÀ½(TL)E[0m ----------------------------------------------------------------------------- ------------------------------------------------------------------------------ X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏ ±â´ÉÀ» »ç¿ëÇÑ ÇÑ±Û Ãâ·Â ------------------------------------------------------------------------------ ¾ÆÁ÷ ÀûÀº ¼öÀ̱â´Â ÇÏÁö¸¸ ¸®´ª½ºÀÇ ÀüÆÄ¿Í ´õºÒ¾î X À©µµ¿ì¿¡ ´ëÇÑ °ü½Éµµ Á¡Á¡ ´õ ÇØ°¡´Â µí ÇÑ ´À³¦À» ¹Þ½À´Ï´Ù. ¿ì¸®°¡ Çѱ¹ÀÎÀÎ ÀÌ»ó ÇÇÇÒ ¼ö ¾ø´Â ¹®Á¦´Â ¿ì¸®ÀÇ ±ÛÀÇ ¿Ã¹Ù¸¥ Ç¥ÇöÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. Àڱ⠳ª¶ó ¸»À» »ç¶ûÇÏÁö ¾Ê°Å³ª °ü½ÉÀ» °®°í ¹ßÀü½ÃÅ°Áö ¾Ê´Â ¹ÎÁ·Àº ÀÌ ¼¼»ó¿¡¼ »ç¶óÁö´Â °Í ¾Æ´Ï°Ú½À´Ï±î? ±×¸®°í Àڱ⠸»À» °®Áö ¾Ê´Â ¹ÎÁ·ÀÌ µµ´ë ü ¾î¶² ÀںνÉÀ» °¡Áú ¼ö ÀÖÀ»±î¿ä? ÄÄÇ»ÅÍ Á¤º¸ ¹®ÈÀÇ ½Ã´ë¿¡ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô ÇѱÛÀº ¼±Á¶µéÀÇ ³ë·ÂÀ» À̾î¹Þ¾Æ ´õ¿í ´õ ¹ßÀü½ÃÅ°°í Çö´ëȽÃÄÑ¾ß ÇÒ »ì¾ÆÀÖ´Â ¾ð¾î¶ó´Â »ý°¢ÀÌ µì´Ï´Ù. ÃÖ¼ÒÇÑ ¹ßÀüÀº ¾È½ÃÅ°´õ¶óµµ ¾ÖÂøÀ» °®°í »ç¿ëÀº ÇØ¾ß ÇÒ °Í ¾Æ´Ï°Ú½À´Ï±î? À©µµ±× »ç¿ëÀÚ ½ÃÀý ¹«ÁöÇÏ°Ôµµ Ç×»ó ÀÌ·± ¸»À» Àڽſ¡°Ô ÇÏ¸é¼ ÄÄÇ»Å͸¦ »ç¿ëÇØ ¿Ô´ø °Í °°½À´Ï´Ù. "ÇÑ±Û À©µµ¿ì´Â ¾ÈµÅ... ¿ª½Ã... ÇѱÛȸ¸ ÇÏ¸é ¿µ ¾Æ´Ï¾ß... ÇÑ±Û ¾ÈµÅ..." ¿ô±â´Â »ç½ÇÀº ¾ûÅ͸®·Î ÇѱÛȸ¦ ½ÃŲ M$ ÃøÀ̳ª ¹Ì±¹ °¡¼ ³ª¶óÀÇ ±â¼úÀ» ÆÈ¾Æ¸Ô °í ÀÖ´Â Çѱ¹ÀÇ ÄÄÇ»ÅÍ ±â¼úÀڵ鿡°Ô ºñ³À» º¸³»´Â °ÍÀÌ ¾Æ´Ï¶ó "ÇѱÛ" ÀÚü¸¦ µé ¸ÔÀÌ°í ÀÖ¾ú´Ù´Â °ÍÀÔ´Ï´Ù. »ç½Ç 1 ¹ÙÀÌÆ® ¹®Àڱǿ¡¼ ź»ýÇÑ ÄÄÇ»ÅͶó´Â ȯ°æ ¼Ó¿¡¼ Èûµç ½Î¿òÀ» ÇÏ°í ÀÖ´Â °ÍÀÌ »ç½ÇÀÔ´Ï´Ù. Èûµç ÀÏÀÌÁö¸¸ ´©±¸³ª ÇÒ ¼ö ÀÖ´Â ÀÏÀ̶ó¸é ¹ú½á ´Ù¸¥ »ç¶÷µéÀÌ ´Ù ÇسõÀ» °Ì´Ï´Ù. Èûµç ÀÏÀ» Àß Ç϶ó°í ºñ½Ñ µ· µé¿©°¡¸ç ±ÍÁßÇÑ ½Ã°£À» ½ñ¾ÆºÎ¾î °¡¸ç ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á´Â °Í ¾Æ´Ò±î¿ä? 1 ¹ÙÀÌÆ® ¹®ÀÚº¸´Ù´Â ¾à°£ ¾î·Á¿î °úÁ¤À» °ÅÄ¡Áö¸¸ ±×·¸°Ô ¾î·Á¿î °Íµµ ¾Æ´Õ´Ï´Ù. ¿¹Àü¿¡ µµ±× ½ÃÀý¿¡´Â ÇÑ±Û ÀÔÃâ·Â ¸ðµÎ¸¦ ¸Å¹ø ¸¸µé¾î¼ »ç¿ëÇß´ø ±â¾ïµµ ³³´Ï´Ù. ¾ÆÁÖ °£´ÜÈ÷ ÇÑ±Û ±â´É ÀÚü¸¦ ³»ÀåÇعö¸®´Ï ¼Ó ÆíÇÒ ¼ö ÀÖ¾úÁö¸¸ Áö±ÝÀÇ ¼ÒÇÁÆ®¿þ ¾î °³¹ß »óȲ¿¡´Â ÀüÇô ¸ÂÁö ¾Ê´Â ±¸´Ú´Ù¸® ¹æ½ÄÀ¸·Î º¯ÈÇÏ°í ¸»¾Ò½À´Ï´Ù. X À©µµ¿ì°¡ Á¦°øÇÏ°í ÀÖ´Â ¸¹Àº ±â´ÉµéÀ» ÃæºÐÈ÷ È°¿ëÇÏ¸é¼ ÇѱÛÀ» ½±°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇؼ ÀÏ´ÜÀº Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ´Ù½Ã ÇÑ ¹ø ¼Ò°³Çص帳´Ï´Ù. ------------------------------------------------------------------------------- X À©µµ¿ì¿¡¼ÀÇ ÇÑ±Û Ãâ·Â ¹æ½Ä¿¡ ´ëÇÏ¿© ------------------------------------------------------------------------------- 1) Àú¼öÁØÀÇ ¹æ¹ý : XDrawString16 ÇÔ¼ö ÀÌ¿ë 2) °í¼öÁØÀÇ ¹æ¹ý : XmbDrawString, XwcDrawString ÇÔ¼ö ÀÌ¿ë ¿ì¼± Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑÅÒ, ±×¸®°í ÇѱÛÈµÈ À©µµ¿ì °ü¸®Àڵ鿡¼ »ç¿ëÇÏ°í ÀÖ´Â ¹æ½ÄÀ¸·Î¼ °í¼öÁØÀÇ ¹æ¹ý°ú ±¸º°µÇ´Â ±âÁØÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ Á¦°øÇÏ°í ÀÖ´Â ±¹Á¦È(I18N, Internationalization)¿Í Áö¿ªÈ(L10N, Localization) ±â¼úÀ» »ç¿ëÇϴ°¡ ¿©ºÎ¿¡ ´Þ·ÁÀÖ½À´Ï´Ù. XDrawString16 ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇØ µå¸° ÀûÀÌ ÀÖ´Â °ÍÀ¸·Î ¾Ð´Ï´Ù. ±× ±ÛÀ» ÀÐÁö ¾ÊÀ¸¼Ì´Ù¸é ±× ±ÛÀ» ¸ÕÀú Àо½Ã±â ¹Ù¶ø´Ï´Ù. Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑ±Û ¹®ÀÚ¿( char Çü )À» Çѱ۰ú ¿µ¹®À¸·Î ³ª´©¾î¼( ¹ÙÀÌÆ®ÀÇ ÃÖ»óÀ§ ºñÆ®¸¦ º¸°í ÆÇ´Ü ) ÇÑ±Û ºÎºÐÀº XChar2b Çü ¹è¿¿¡ ³Ö¾î¼ 2 ¹ÙÀÌÆ®¿ë ÇÔ¼ö ÀÎ XDrawString16 ÇÔ¼ö·Î Ãâ·ÂÇÏ°í ¿µ¹® ºÎºÐÀº µû·Î 1 ¹ÙÀÌÆ® Àü¿ë ÇÔ¼öÀÎ XDrawS- tring ÇÔ¼ö·Î Ãâ·ÂÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù. Àú¼öÁØÀ̹ǷΠ»ó´çÈ÷ ¹ø°Å·Ó´Ù°í ÇÏÁö ¾ÊÀ» ¼ö ¾ø½À´Ï´Ù. Çѱ۰ú ¿µ¹®À» ¼¯¾î¼ ¾² ´Â °æ¿ì¿¡´Â Á¤¸» ½Å°æ¾µ ÀÏÀÌ ¸¹½À´Ï´Ù. ¹®ÀÚ¿À» ÀÐ¾î¼ ÀÏÀÏÀÌ ÇѱÛÀÌ Ãâ·ÂµÇ´Â ȸé ÆøÀ» °è»êÇÏ°í ±× ´ÙÀ½¿¡ ¿µ¹®À» Ãâ·ÂÇÏ°í ±× ÆøÀ» °è»êÇÑ ÈÄ ´Ù½Ã ÇѱÛÀ» Ãâ·ÂÇÏ°í... °í¼öÁØÀÇ ¹æ¹ýÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ R5 ºÎÅÍ Áö¿øÇϱ⠽ÃÀÛÇÑ ±¹Á¦È/Áö¿ªÈ ±â¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. °°Àº 1 ¹ÙÀÌÆ® ¹®ÀÚ±ÇÀ̶ó ÇÒ Áö¶óµµ ¿µ¾î¿¡ ¸ÂÃçÁø ASCII ¹®Àڷδ ºÒ°¡´ÉÇÑ À¯·´¾ð¾î( ÇÁ¶û½º¾î, µ¶ÀÏ¾î µî... )¿Í ¾ÖÃʺÎÅÍ ASCII ·Î´Â Åõµ ¾ø´Â 2 ¹ÙÀÌÆ® ÀÌ»óÀÇ ¹®ÀÚ±ÇÀÎ Çѱ¹¾î, Áß±¹¾î, ÀϺ»¾î µî¿¡ ´ëÇÑ ½Ã½º ÅÛ Â÷¿øÀÇ Áö¿øÀÌ ³íÀÇµÇ¸é¼ ÇÁ·Î±×·¡¸ÓµéÀÌ ½±°Ô ±¹Á¦ÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖµµ·Ï °í¹ÎÇÑ °á°úÀÔ´Ï´Ù. ±¹Á¦È¶õ ÇÁ·Î±×·¥ÀÌ ¾î¶² ¾ð¾î ȯ°æ¿¡¼µç »ç¿ëµÉ ¼ö ÀÖµµ·Ï À¯¿¬ÇÏ°Ô ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀ» ¸»ÇÏ¸ç ±×·¸°Ô ±¹Á¦ÈµÈ ÇÁ·Î±×·¥À» ƯÁ¤ ¾ð¾î³ª ¹®È¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀûÀÀ½ÃÅ°´Â °ÍÀ» Áö¿ªÈ¶ó°í ºÎ¸¨´Ï´Ù. ÀÌ¹Ì ¼Ö¶ó¸®½º³ª HP-UX µî¿¡¼ »ó¿ë X À©µµ¿ì¸¦ º¸½Å ºÐµéÀº ÀÌ°ÍÀÌ ¹«¾ùÀ» ¶æÇÏ´Â Áö ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. À©µµ±×95 °°Àº °ÍÀ» ÇÁ¶û½ºÆÇ, µ¶ÀϾîÆÇ, Çѱ¹¾îÆÇ, Áß±¹ ¾îÆÇ, ÀϺ»¾îÆÇ ÀÌ·¸°Ô ´ßÁúÀ» ÇØ°¡¸é¼ µû·Îµû·Î ¸¸µå´Â °Í°ú´Â Â÷¿øÀÌ ´Ù¸¨´Ï´Ù. °£´ÜÇÑ ¼³Á¤ Çϳª·Î °°Àº X À©µµ¿ì ½Ã½ºÅÛÀÌ ¿©·¯ °³ÀÇ ¾ð¾î·Î µ¿ÀÛÇϵµ·Ï ¼³°èµÇ ¾î ÀÖ½À´Ï´Ù. ·Î±×ÀΠȸéºÎÅÍ°¡ ¾Æ¿¹ ´Þ¶óÁöÁö¿ä. ------------------------------------------------------------------------------- X À©µµ¿ì ½Ã½ºÅÛÀÌ Áö¿øÇÏ´Â I18N, L10N ÀÌ¿ëÇϱâ ------------------------------------------------------------------------------- ¿À´Ã ¾Ë¾Æº¼ ³»¿ëÀº ¹Ù·Î °í¼öÁØÀÇ ÇÑ±Û Ãâ·Â¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ¾î¶² ÀýÂ÷¸¦ °ÅÃÄ¾ß ÇÏ´ÂÁö¿¡ ´ëÇؼ ¾Ë¾Æº¸µµ·Ï ÇսôÙ. 1) LOCALE µ¥ÀÌÅͺ£À̽º Áö¿øÀ» ´©°¡ Çϴ°¡? ========================================== À¯´Ð½º ½Ã½ºÅÛÀÇ ·ÎÄÉÀÏ Áö¿øÀº ÀÏ´Ü X À©µµ¿ì ½Ã½ºÅÛÀÌ ¾Æ´Ñ ANSI/POSIX ±Ô°Ý Â÷ ¿øÀÇ Áö¿øÀÌ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ »ó¿ë À¯´Ð½º³ª ¾Æ´Â ¹Ù ¾øÁö¸¸ FreeBSD ¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼ Áö¿øÇÏ°í ÀÖ´Â °ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. Áö±Ý ÇöÀç GNU NLS ÆÀ¿¡¼ ¿ ½ÉÈ÷ ÇÁ·Î±×·¥ ¸Þ¼¼Áö Áö¿ªÈ¸¦ ÇÏ°í °è½Å ºÐµéÀÇ °á°ú°¡ Á¶¸¸°£ ¿ì¸® °ç¿¡ ¿À°Ô µÇ°ÚÁö¿ä? ±× ºÐµé¿¡°Ô °Ý·Á¸¦ º¸³À´Ï´Ù. ¸®´ª½º´Â ¾ÆÁ÷ C ¶óÀ̺귯¸®¿¡ ´ëÇؼ Á¦´ë·Î ¸ð¸£±â ¶§¹®¿¡ È®½ÇÇÏ°Ô ¸»¾¸µå¸± ¼ö ¾ø½À´Ï´Ù. C ¶óÀ̺귯¸® 5.4.X ¿¡¼ ·ÎÄÉÀÏ¿¡ ´ëÇÑ Áö¿øÀÌ ÀÖ´Ù°í´Â ÇÏ´Â °Í °°Àº µ¥ Á¦´ë·Î È®ÀÎÀÌ µÇÁú ¾Ê´Âµ¥´Ù°¡ ÀúÀÇ °ü½É ¿µ¿ªÀ» ·Î¿ì·¹º§ ÇÁ·Î±×·¡¹ÖÀÌ ¾Æ´Ï ¶ó¼... µÎ¹ø°·Î´Â ¿î¿µÃ¼Á¦ ÀÚüÀÇ Áö¿ø°ú´Â ¿ÏÀü º°µµ·Î X À©µµ¿ì ÀÚüÀûÀ¸·Î ÇØ°áÇØÁÖ ´Â ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿À´Ã X À©µµ¿ì ÀÚü°¡ Áö¿øÇÏ´Â ·ÎÄÉÀÏ Áö¿øÀ» »ç¿ëÇÏ ¿© ÇØ°áÇÒ °ÍÀÔ´Ï´Ù. ÀüÀÚ³ª ÈÄÀÚ ¸ðµÎ Áß¿äÇѵ¥ ÀÏ´Ü X À©µµ¿ì ÀÚüÀûÀ¸·Îµµ Áö¿ø À» ÇØÁشٴ °ÍÀº ¾î¶² Ç÷§Æ÷¿ÈÀΰ¡¿¡ »ó°ü¾øÀÌ °°Àº X À©µµ¿ì¸¸ µ¹¾Æ°£´Ù¸é ¾î µð¼µç ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î µ¿ÀÛÇϸ®¶õ º¸ÀåÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ ½À´Ï´Ù. ¸®´ª½º C ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¿¬±¸´Â ½Ã°£À» ³»¼ Á» ´õ ÇغÁ¾ß ÇÒ °Í °°½À´Ï´Ù. ¸¹Àº »ç¶÷µéÀÌ ¶Ù¾îµé¾îÁֱ⸦ ¹Ù¶ö »ÓÀÔ´Ï´Ù. ¸®´ª½º´Â °³¹æ üÁ¦À̹ǷΠÀÚ¿øÀÚ°¡ ¸¹Àº °÷ÀÇ ºÐÀ§±â¸¦ µû¸£Áö ¾Ê°Ú¾î¿ä? ¾Æ½Ã¾ÆÀÇ ÀþÀºÀ̵éÀÌ ¸¹ÀÌ ¶Ù¾îµé ¼ö·Ï ¸®´ª½º ÀÚü´Â ±¹Á¦ÀûÀÎ ¿î¿µÃ¼Á¦·Î ´Ù½Ã ž ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù. 2) ¿©·¯ºÐÀÇ X À©µµ¿ì ½Ã½ºÅÛÀ» Á¡°ËÇÕ´Ï´Ù. ========================================= ANSI ±Ô°Ý¿¡¼ Á¤ÀÇÇÑ ¹Ù¿Í °°½À´Ï´Ù. C ¼ÐÀ» ¾²´Â ºÐµéÀº setenv LANG ko ¿Í °°Àº Ç¥ÇöÀ» ½áº¸½Å ÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. ÀÌ ±ÛÀº ANSI ±Ô°ÝÀÇ setlocale ÇÔ¼ö¿¡ °ü·ÃµÈ ¸ðµç »çÇ×À» ÀÚ¼¼È÷ ¼³¸íÇϱâ À§ÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î µû·Î °øºÎÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ¾ÆÁÖ Áß¿äÇÑ À̽´ ÁßÀÇ ÇϳªÀÎ °ÍÀº ºÐ¸íÇÑ °Í °°½À´Ï´Ù. ÀÏ´ÜÀº /usr/X11R6/lib/X11/locale µð·ºÅ丮¿Í ³»¿ëÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇغ¸½Ê½Ã¿ä. ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼ X À©µµ¿ì ½Ã¸®Á Á¦´ë·Î ¼³Ä¡Çß´Ù¸é ÀÖ¾î¾ß ÇÒ ³»¿ëÀÔ´Ï´Ù. C/ iso8859-3/ iso8859-8/ ko/ th_TH.TACTIS/ compose.dir iso8859-4/ iso8859-9/ koi8-r/ zh/ en_US.utf/ iso8859-5/ ja/ locale.alias zh_TW/ iso8859-1/ iso8859-6/ ja.JIS/ locale.dir iso8859-2/ iso8859-7/ ja.SJIS/ tbl_data/ ko ¶ó´Â µð·ºÅ丮°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±× ¾È¿¡´Â XLC_LOCALE À̶ó´Â ÈÀÏÀÌ µé¾îÀÖ½À ´Ï´Ù. ±× ÈÀÏ ¾È¿¡ Çѱ¹¾îÀÇ Ãâ·Â¿¡ ´ëÇÑ °ü·Ã Á¤º¸°¡ µé¾îÀÖ½À´Ï´Ù. º¸ÅëÀº LANG ¼¼ÆÃÀÌ ¾ø´Â °æ¿ì ±âº»ÀûÀ¸·Î C µð·ºÅ丮¿¡ ÀÖ´Â ³»¿ëÀ» »ç¿ëÇÕ´Ï´Ù. À§ ÈÀϵéÀÌ Á¦´ë·Î ÀÖ´Â °ÍÀ» È®ÀÎÇÑ ÈÄ¿¡ ²À ´ÙÀ½ ¼¼ÆÃÀ» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. º»¼Ð °è¿À̶ó¸é... export LANG=ko C ¼Ð °è¿À̶ó¸é... setenv LANG ko ³ªÁß¿¡ °°Àº ÇÁ·Î±×·¥¿¡ ´ëÇؼ ±×³É LANG ¼¼ÆÃÀ» Àç¹Ì»ï¾Æ ja ¶ó°í ¹Ù²ãº¸½Ê½Ã¿ä. ±×·¯¸é Àç¹ÌÀÖ´Â ÀÏÀÌ ¹ú¾îÁú °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ³×½ºÄÉÀÌÇÁ¿¡¼ ¿É¼Ç ¸Þ´º¿¡¼ ÄÚµù ¿É¼Ç¸¸ ¹Ù²ãÁÖ¸é ÅؽºÆ®ÀÇ ³»¿ëÀÌ Çѱ۷Πº¸¿´´Ù°¡ ÀϺ»¾î·Î º¸¿´´Ù ÇÏ´Â ¿ø ¸®¸¦ ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù. 3) ÀÌÁ¦ºÎÅÍ ÇÁ·Î±×·¡¹ÖÀ» Çغ¾½Ã´Ù. ================================== ÇÁ·Î±×·¡¹ÖÀ̶õ ÀüÇüÀûÀÎ ÆÐÅÏÀÌ ÀÖ°Ô ¸¶·ÃÀÌÁö¿ä. ±×¸®°í È®½ÇÇÑ ÆÐÅÏ( ¹°·Ð ÁÁÀº ÆÐÅÏ :> )À» ÀÍÇôµÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¿¹Á¦¸¦ ¼Õ¼ö ŸÀÌÇÎÇØ º¸½Ã´Â °ÍÀÌ ÁÁÀ» °Ì´Ï´Ù. ÀÏ´Ü ÄÄÆÄÀÏÀ» Çغ¸°í Á¦´ë·Î µÈ ´Ù´Â °ÍÀ» È®ÀÎÇϽñ⠹ٶø´Ï´Ù. ------------------------------------------------------------------------------- /* X Locale À» ÀÌ¿ëÇÑ ÇÑ±Û Ãâ·Â */ #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> /* #include <locale.h> */ #include <X11/Xlocale.h> void DrawCenteredMbString ( Display *, Window, XFontSet, GC, char*, int, int, int, int, int ); int main (argc, argv) int argc; char *argv[]; { Display *dpy; Window w; XFontSet fontset; char **missing_charsets; int num_missing_charsets; char *default_string; int i; GC gc; XEvent xe; char *program_name = argv[0]; if ( setlocale (LC_ALL,"") == NULL ) { (void) fprintf (stderr, "%s: cannot set locale.\n", program_name ); exit (1); } if ( !XSupportsLocale () ) { (void) fprintf (stderr,"%s: X does not support locale %s.\n", program_name, setlocale( LC_ALL, NULL ) ); exit (1); } if ( XSetLocaleModifiers("") == NULL ) { (void) fprintf (stderr, "%s: Warning: cannot set locale modifiers.\n", program_name); } dpy = XOpenDisplay ( NULL); w = XCreateSimpleWindow ( dpy, RootWindow( dpy, 0 ), 50, 50, 100, 50, 5, BlackPixel( dpy, 0 ), WhitePixel( dpy, 0 ) ); gc = XCreateGC ( dpy, w, 0L, ( XGCValues * ) NULL ); fontset = XCreateFontSet (dpy, "-*-*-*-*-*-*-16-*-*-*-*-*-*-*", &missing_charsets, &num_missing_charsets, &default_string); if ( num_missing_charsets > 0 ) { (void) fprintf (stderr, "%s: The following charsets are missing:\n", program_name); for ( i=0; i < num_missing_charsets; i++ ) (void)fprintf (stderr, "%s: %s\n", program_name, missing_charsets[i]); (void) fprintf (stderr, "%s: The string is %s", program_name, default_string); (void) fprintf (stderr, "%s: of any characters from those sets.\n", program_name); XFreeStringList (missing_charsets); } XSetLineAttributes ( dpy, gc, 5, LineSolid, CapRound, JoinRound ); XSelectInput ( dpy, w, ExposureMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask ); XMapWindow ( dpy, w ); XFlush ( dpy ); while ( True ) { XNextEvent ( dpy, &xe ); switch ( xe.type ) { case Expose: printf ("Expose À̺¥Æ®°¡ ¹ß»ýÇß½À´Ï´Ù.\n"); XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) ); DrawCenteredMbString ( dpy, w, fontset, gc, "¾È³ç Hello", 10, 0, 0, 100, 50 ); break; case ButtonPress: printf ("¹öÆ°À» ´©¸£¼Ì½À´Ï´Ù!\n"); exit (1); break; case EnterNotify: printf ("¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î¿Ô½À´Ï´Ù.\n"); XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) ); XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 ); break; case LeaveNotify: printf ("¸¶¿ì½º°¡ â ¹ÛÀ¸·Î ³ª°¬½À´Ï´Ù.\n"); XSetForeground ( dpy, gc, WhitePixel( dpy, 0 ) ); XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 ); break; default: printf ("¸ð¸£´Â À̺¥Æ®ÀÔ´Ï´Ù. ¹«½ÃÇÕ´Ï´Ù.\n"); break; } } return 0; } void DrawCenteredMbString (dpy, w, fontset, gc, str, num_bytes, x, y, width, height ) Display *dpy; Window w; XFontSet fontset; GC gc; char *str; int num_bytes; int x,y, width, height; { XRectangle boundingbox; XRectangle dummy; int originx, originy; (void) XmbTextExtents (fontset, str, num_bytes, &dummy, &boundingbox); originx = x + ( width - boundingbox.width )/2 - boundingbox.x; originy = y + ( height - boundingbox.height)/2 - boundingbox.y; XmbDrawString (dpy, w, fontset, gc, originx, originy, str, num_bytes); } ------------------------------------------------------------------------------- ÀÚ, ÄÄÆÄÀÏÀ» Çغ¸µµ·Ï ÇսôÙ. ¾à°£ÀÇ ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº ²À ¸®´ª½º¿¡¼¸¸ ÄÄÆÄÀÏÇ϶õ ¹ýÀº ¾ø½À´Ï´Ù. ( È®ÀÎÀº ¾ÈÇßÁö¸¸... ) ½Ã½ºÅÛ ¼öÁØ¿¡¼ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´Â °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÕ´Ï´Ù. gcc -o test_locale test.locale.c -lX11 -L/usr/X11/lib ¸®´ª½º ½Ã½ºÅÛÀÎ °æ¿ì¿¡´Â X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °ÍÀ̹ǷΠ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù. gcc -o test_locale test.locale.c -DX_LOCALE -lX11 -L/usr/X11/lib ¼ø¼´ë·Î ¼³¸íÀ» Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. 4) ½Ã½ºÅÛÀÌ ·ÎÄÉÀÏÀ» Áö¿øÇϴ°¡? ================================ setlocale ÇÔ¼ö¸¦ ½á¼ ½Ã½ºÅÛ Â÷¿ø¿¡¼ ¶Ç´Â X À©µµ¿ì ½Ã½ºÅÛ Â÷¿ø¿¡¼ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´ÂÁö ¿©ºÎ¿¡ ´ëÇؼ ¾Ë¾Æº¾´Ï´Ù. ½ÇÇàµÇ´Â Ç÷§Æ÷¿È¿¡¼ ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ´Ù¸¥ Á¶Ä¡¸¦ ÃëÇϵçÁö ¾Æ´Ï¸é ½ÇÇàÀ» ÁßÁöÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. Á¦´ë·Î µÈ °á°ú°¡ ³ª¿ÀÁú ¾ÊÀ»Å״ϱî¿ä. setlocale (LC_ALL,"") == NULL ÀÌ ¹®ÀåÀ¸·Î È®ÀÎÀ» ÇÏ°í ÀÖ½À´Ï´Ù. 5) X À©µµ¿ì Â÷¿ø¿¡¼ÀÇ ·ÎÄÉÀÏ Áö¿ø ¿©ºÎ È®ÀÎ ============================================ XSupportsLocale ÇÔ¼ö¿Í XSetLocaleModifiers ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·ÎÄÉÀÏ Áö¿ø¿©ºÎ¸¦ ¹°¾îº¾´Ï´Ù. ÈÄÀÚÀÇ ÇÔ¼ö´Â "X ÀÔ·Â ¼¹ö"¿¡ °ü°èµÈ °ÍÀ̹ǷΠÁö±ÝÀ¸·Î¼´Â ¼³¸íµå¸± ¼ö°¡ ¾ø°í »ó´çÈ÷ Àü¹®ÀûÀÎ ¾ê±â·Î ºüÁú °¡´É¼ºÀÌ ¸¹½À´Ï´Ù. Á¶¸¸°£¿¡ "X ÀÔ·Â ¼¹ö" Á¦ÀÛ¿¡ ´ëÇؼ µû·Î ¼Ò°³¸¦ Çص帮±â·Î ÇÏ°Ú½À´Ï´Ù. ±Ã±ÝÁõÀ» Âü±â ¾î·Á¿î ºÐÀº ±×³É ¿À·¼ ¸® ÃâÆÇ»çÀÇ X À©µµ¿ì ½Ã¸®Áî Volume One Xlib ÇÁ·Î±×·¡¹Ö ¸Å´º¾óÀ» º¸½Ã¸é µË´Ï´Ù. 6) ÆùÆ®¼Â(FontSet)À̶ó´Â °³³ä.... ======================== ÆùÆ®¼ÂÀ̶ó´Â °³³äÀº ±ÛÀÚ ±×´ë·Î ÆùÆ®ÀÇ ÇÑ ¼¼Æ®¸¦ ¸»ÇÕ´Ï´Ù. ¾î¶² ƯÁ¤ ¾ð¾îÀÇ Äڵ忡 ¸Â´Â( ¿¹¸¦ µé¾î ASCII, ISO8859-1, EUC-KR, ISO-2022-KR µîµî ) ¹®ÀÚ ÆùÆ® µéÀÌ ÀÌ¹Ì ¸¶·ÃµÇ¾î ÀÖ¾î¾ß Ãâ·ÂÀ» ÇÒ ¼ö ÀÖ°ÚÁö¿ä? Áï ȯ°æ º¯¼ö LANG ÀÌ Áö½ÃÇÏ ´Â ÄÚµù ½ºÅ¸ÀÏ¿¡ ¸Â´Â ÆùÆ®µéÀÇ ÇÑ ¼¼Æ®¸¦ ÁöÁ¤ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¸ðƼÇÁ ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀ̶ó¸é ÆùÆ®¼ÂÀ̶ó´Â °³³ä¿¡ ´ëÇؼ ¾î´À Á¤µµ ¾Æ½Ç °Ì´Ï´Ù. ÀÏ´ÜÀº X À©µµ¿ì ·ÎÄÉÀÏÀ» ÀÌ¿ëÇÏ´Â ¹æ½ÄÀº ÆùÆ®¼ÂÀ» »ç¿ëÇÑ´Ù´Â »ç ½ÇÀ» Á¤È®È÷ ¾Æ¼Å¾ß ÇÕ´Ï´Ù. »ý°¢º¸´Ù »ó´çÈ÷ °£ÆíÇÏ°Ô ¸¸µì´Ï´Ù. XCreateFontSet ÇÔ¼ö¸¦ ÀÌ¿ëÇÏÁö¿ä. µÎ¹ø° Àμö·Î ±×³É -*-*-*-*-*-*-16-*-*-*-*-*-*-* À̶ó°í XLFD ¹æ½ÄÀÇ ÆùÆ®¸íÀ» ÁöÁ¤ÇØÁÖ¾úÀ¸¹Ç·Î 16 Æ÷ÀÎÆ® ÆùÆ®µéÀ» ã¾Æ³»¼ ÆùÆ®¼Â¿¡ µî·ÏÇÏ°Ô µË´Ï´Ù. ¸¸¾à 16 Æ÷ÀÎÆ® ÆùÆ®°¡ ¾ø´Ù¸é °¡Àå °¡±î¿î ÆùÆ®¸¦ ã¾Æ¼ X À©µµ¿ì ÀÚü°¡ ½ºÄÉÀϸµÀ» ÇØÁÝ´Ï´Ù. ÀÌ ¶§°¡ X À©µµ¿ìÀÇ °¡Àå Ãë¾àÇÑ ºÎºÐÀε¥... 2 ¹ÙÀÌÆ®±ÇÀÇ ¾öû³ ¾çÀÇ ÆùÆ®¸¦ ½ºÄÉÀϸµÇÏ°Ô µÉ ¶§´Â ¸¶Ä¡ X ¼¹ö°¡ ¸ØÃç¹ö¸®´Â µí ÇÑ Çö»óÀÌ ÀϾ´Ï´Ù. ÆùÆ®¸¦ ¸ðµÎ º¯È¯ÇÏ´À¶ó ¾öû³ ½Ã°£À» ¼ÒºñÇÏ°í Àֱ⠶§¹®ÀÌÁö¿ä. À§ ¼ýÀÚ¸¦ 15³ª ´Ù¸¥ ¼ýÀÚ·Î ¹Ù²Ù¾î¼ ÇÑ ¹ø Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ±× Â÷ÀÌÀ» ´À³¢½Ç ¼öµµ ÀÖÀ» °Ì´Ï ´Ù. 7) ¹®ÀÚ¿ÀÇ Ãâ·ÂÀº °£´ÜÈ÷ XmbDrawString ÇÔ¼ö ÀÌ¿ë ================================================= À§¿¡¼´Â DrawCenteredMbString ¶ó´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ³»¿¡¼ ¸ÖƼ ¹ÙÀÌÆ® ÄÚµù¿¡ »ç¿ëÇÏ´Â Ãâ·Â ÇÔ¼ö XmbDrawString ¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. À§¿¡¼ º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¿¾³¯¿¡ Àú¼öÁØ Ãâ·ÂÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇѱÛÀ» Çѱ۴ë·Î ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î ´ßÁúÀ» ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. -_- ÇÑ±Û ÄÚµùµÈ 2 ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ±×³É ¾²¸é µË´Ï´Ù. ´ÜÁö À§¿¡¼´Â ¹®ÀÚ Ãâ·Â À§Ä¡¸¦ Á¶Á¤Çϱâ À§ÇÏ¿© XmbTextExtents ÇÔ¼ö¿Í °°Àº °ÍÀ» »ç¿ëÇÏ¿´½À´Ï´Ù. ------------------------------------------------------------------------------- ¿À´ÃÀº Ãâ·ÂÀÇ ¹®Á¦¸¸À» ´Ù·ç¾úÁö¸¸ ÇÁ·ÎÁ§Æ® ÁßÀÎ "X ÀԷ¼¹ö"ÀÇ Áøô »óȲ¿¡ ¸Â Ãß¾î¼ ÇÑ±Û ÀÔ·ÂÀÇ ¹®Á¦¸¦ ´Ù·ç¾îº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ¾ÏÆ° Ãâ·Â¿¡ ´ëÇÑ ¼³¸íÀÌ ¿©·¯ºÐ¿¡°Ô ¸¹Àº µµ¿òÀÌ µÇ±æ ¹Ù¶ø´Ï´Ù. ÀÏ´ÜÀº Á¶±Ý¸¸ ³ë·ÂÇÏ¸é °ÅÀÇ ¸ðµç ¸Þ¼¼Áö¸¦ ÇѱÛÈ ÆÐÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ³²ÀÌ ¾ÈÇØÁÖ¸é ½º½º·Î ³ª¼´Â °Í, ¸®´ª¼µéÀÇ ¸ÚÁø ÀÚ¼¼ ¾Æ´Ï°Ú½À´Ï±î? Á¦ÀÏ ¸ÚÁø ¿î¿µÃ¼Á¦·Î ¿ì¸®°¡ °¡²Ù¾î ³ª°©½Ã´Ù. ½Ã°£ÀÌ Á»Ã³·³ ³ªÁú ¾Ê´Â±º¿ä. ¹è¿ï °ÍÀº ¸¹Àºµ¥ ½Ã°£Àº ÃѾ˰°ÀÌ Èê·¯°¡°í ... ½Ã°£À» Á» ´õ È¿À²ÀûÀ¸·Î ½á¼ ¿©·¯ºÐÀ» ÀÚÁÖ ºÉ ¼ö ÀÖ°Ô µÇ±æ ¹Ù¶ø´Ï´Ù. ±×·³... |