X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ±âÃÊ°úÁ¤ <author>À̸¸¿ë, <htmlurl url="mailto:geoman@nownuri.net" name="geoman@nownuri.net"> <date>1996³â 3¿ù 19ÀÏ <toc> <sect>½ÃÀÛÇϸ鼭 <p> ¸®´ª¼­µéÀº ´ÜÁö ±â¼ºÁ¦Ç°À» »ç¿ëÇϴµ¥ ¸¸Á·ÇÏÁö ¾Ê°í, ¶â¾î°íÄ¡°í âÁ¶ÇÏ´Â ÀÏÀ» ÁÁ¾ÆÇÏ´Â ±²ÀåÇÑ À¯ÀúµéÀÔ´Ï´Ù. ¸®´ª½º Ä¿³Î¹öÀü°ú ½½·¢¹öÀü ¸¸Å­ »¡¸® º¯ÇÏ´Â ¿î¿µÃ¼Á¦ ¼ÒÇÁÆ®¿þ¾î°¡ ¾îµð ÀÖ°Ú½À´Ï±î? ¶Ç À̸¸Å­ ¿î¿µÃ¼Á¦ÀÇ "±âº»±â"¿¡ Ãæ½ÇÇÑ Ã¼Á¦°¡ ¾îµð ÀÖ°Ú½À´Ï±î? ±×·¡¼­ ¿ì¸® ¸®´ª¼­µéÀº ¾î¶² À¯Àúµéº¸´Ùµµ ÀںνÉÀÌ ´ë´ÜÇÕ´Ï´Ù. ¸®´ª½º¿©, ¸¸¼¼ ¸¸¼¼ ¸¸¸¸¼¼! ¸®´ª½º¸¦ »ç¿ëÇϸ鼭 ÄÄÆÄÀÏÀ» ¾ÈÇغ¸½Å ºÐÀ̶ó¸é ¾ÆÁ÷ ¸®´ª½ºÀÇ Áø°¡¸¦ ¸Àº¸Áö ¸øÇϽŠºÐÀ̶ó°í ÇÒ ¼ö ÀÖÁö¿ä. ¸®´ª½º¸¦ »ç¿ëÇϸ鼭 Àڱ⠽º½º·Î ÇÁ·Î±×·¥À» Â¥º¸Áö ¸øÇϽŠºÐµéÀº ¸®´ª½ºÀÇ ÁøÂ¥ ÁøÂ¥ Áø°¡¸¦ ¸Àº¸Áö ¸øÇÏ´Â ºÐÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌÁ¦ºÎÅÍ´Â ¸®´ª½ºÀÇ Âü¸ÀÀ» ¸¸³£Çغ¼±î ÇÕ´Ï´Ù. <sect1>°­ÀÇÀÇ ´ë»ó <p> Á¦¸ñ¿¡¼­µµ ºÐ¸íÇÏ°Ô ³ªÅ¸³ª´Â °Íó·³, Á¦°¡ ´Ù·ç°íÀÚ ÇÏ´Â ³»¿ëÀº ÇÁ·Î±×·¡¹Ö ÀϹݿ¡ °üÇÑ °ÍÀÌ ¾Æ´Õ´Ï´Ù. ±×°ÍÀº Á¦°¡ ´Ù·ê ¼ö ÀÖ´Â Çѵµ¸¦ ¹þ¾î³³´Ï´Ù. ÀÌ °­Á¸¦ ÀаíÀÚ ÇϽô ºÐµéÀº ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°Àº »çÇ׿¡ ¸ðµÎ ÇØ´çµÇ½Ã´Â ºÐµéÀÌ¼Å¾ß ¿øÇÒÇÑ ÇнÀÀÌ ÀÌ·ç¾îÁú °ÍÀ̶ó°í »ý°¢ÇÕ´Ï´Ù. <itemize> <item>±âº»ÀûÀÎ C ÇÁ·Î±×·¡¹ÖÀ» ÇÏ½Ç ¼ö ÀÖ´Â ºÐ <item>SHELL ½ºÅ©¸³Æ®¿¡ ´ëÇØ ¾Æ½Ã´Â ºÐ <item>À¯´Ð½º °è¿­ÀÇ ÇÁ·Î¼¼½º/È­ÀÏó¸®/½Ã±×³Î µîÀÇ °³³äÀ» ¾Æ½Ã´Â ºÐ </itemize> Á» »ç¾çÀÌ ³ôÁÒ? ±×·¡¼­ ±× µ¿¾È ¸Á¼³ÀÌ°Ô µÇ¾ú½À´Ï´Ù. ¿ì¼±Àº ¸®´ª½º ´ëÁßÈ­¿¡ ±â¿©ÇÒ ¼ö ÀÖ´Â ±âº»ÀûÀÎ °Íµé¿¡ ´ëÇؼ­¸¸ °­ÀǸ¦ ÁøÇàÇÒ±î? ÇÏ´Â »ý°¢µµ ¼ö¾øÀÌ ¸¹ÀÌ Çغ¸¾Ò½À´Ï´Ù. ±×·¯³ª ¸®´ª½ºµ¿ÀÇ ¸¹Àº ºÐµé²²¼­µµ ¾çÀûº¯È­ »Ó ¾Æ´Ï¶ó ÀÌÁ¨ ÁúÀûº¯È­¸¦ ¼­¼­È÷ Ãß±¸ÇØ¾ß ÇÑ´Ù´Â ¹®Á¦ÀǽÄÀ» °¡Áö½Å °Í °°¾Æ¼­ ¿ë±â¸¦ ³»¾î Çغ¾´Ï´Ù. <sect1>´ë·«ÀûÀÎ °­ÀÇ ³»¿ë ¼Ò°³ <p> ÀçÂ÷ ¸»¾¸µå¸®Áö¸¸ °­Àdz»¿ëÀº ¸®´ª½º ÇÁ·Î±×·¡¹Ö ÀϹݿ¡ ´ëÇÏ¿© ´Ù·çÁö ¾Ê½À´Ï´Ù. Àú´Â X À©µµ¿ì ½Ã½ºÅÛÀÇ GUI ÀÚ¿øÀ» ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ ÀÌ¿ëÇϴµ¥ ´ëÇÏ¿©, Áï X À©µµ¿ì¿ë ÇÁ·Î±×·¥ÀÇ "ÀÎÅÍÆäÀ̽º"¿¡ °üÇÑ ³»¿ë¸¸ ´Ù·ç°íÀÚ ÇÕ´Ï´Ù. <itemize> <item>X ³»¿¡¼­ âÀÇ »ý¼º°ú ¼Ò¸ê, °ü¸® <item>X ±×·¡ÇÈ <item>X Event ó¸®Çϱâ <item>Å°º¸µå/¸¶¿ì½º µîÀÇ ÀÔ·Â <item>±âŸ µîµî </itemize> MS À©µµ¿ìÁî °°Àº GUI üÁ¦¿¡¼­ÀÇ ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀº ¾Æ½Ç°Ì´Ï´Ù. °ÅÀÇ ½ÃÁß¿¡ ÀÖ´Â ´ëºÎºÐÀÇ Ã¥µéÀÌ ÀÌ·¯ÇÑ ³»¿ëÀ» ´Ù·ç°í ÀÖÁö¿ä. À§ ³»¿ë¸¸ ÀÍÈ÷½Å´Ù°í Çؼ­ ¿ÏÀüÇÑ ÀǹÌÀÇ X À©µµ¿ì¿ë ÇÁ·Î±×·¥À» ¸¸µå½Ç ¼ö´Â ¾øÀ» °Ì´Ï´Ù. ÇÏÁö¸¸ À§ÀÇ ³»¿ëÀ» ¸ð¸£½Å´Ù¸é X À©µµ¿ì¿ë ÇÁ·Î±×·¥Àº Àý´ë·Î ¸¸µå½Ç ¼ö ¾ø½À´Ï´Ù. ±× Á¤µµ·Î ¾ÆÁÖ ±âÃÊÀûÀÎ ³»¿ë¸¸À» ´ã°í ÀÖ½À´Ï´Ù. ´õ¿í ½Éµµ±íÀº X À©µµ¿ì ÇÁ·Î±×·¡¹Ö °­Á´ À̹ø ±âÃÊ °­Á°¡ ³¡³­ ÈÄ¿¡¾ß °¡´ÉÇÒ °Í °°½À´Ï´Ù. ( ±× À¯¸íÇÑ À§Á¬ °°Àº °Í µîµî ) <sect>X ÇÁ·Î±×·¡¹Ö ±âÃÊ : Xlib <p> X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡ µµÀüÇϽô ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Àúµµ ¾Æ´Â °ÍÀº ¸¹ÀÌ ¾øÁö¸¸ ¿©·¯ºÐÀ» Á¶±ÝÀÌ¶óµµ µµ¿ï ¼ö ÀÖ´Ù¸é, ±×¸®°í ÀúÀÇ °­Á¸¦ °è±â·Î ´õ¿í ´õ ¸¹Àº ¼öÁسôÀº X À©µµ¿ì ÇÁ·Î±×·¡¹Ö °­ÁµéÀÌ »ý°Ü³ª±æ ±â´ëÇϸ鼭 X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ±âÃÊ°úÁ¤À» ½ÃÀÛÇÒ±î ÇÕ´Ï´Ù. ¾î·Æ´õ¶óµµ Æ÷±âÇÏÁö ¸¶½Ã°í ³¡±îÁö Àú¿Í ÇÔ²² °¡¼Å¼­ ´ç´çÇÑ X À©µµ¿ì ÇÁ·Î±×·¡¸Ó·Î ¿ì¶Ò ¼­½Ê½Ã¿ä. ±×¸®°í ¸®´ª½º¸¦ ºû³»ÁÝ´Ï´Ù. <sect1>X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡ µé¾î°¡±â ¾Õ¼­ <p> ¿©·¯ºÐÀÇ ¼±ÅÃÀº Á¤¸»·Î Ź¿ùÇÕ´Ï´Ù. X À©µµ¿ì ½Ã½ºÅÛÀº MS À©µµ¿ìÁî 95¿Í °°Àº ¾ûÅ͸®¿¡´Ù ´Ü¸íÇϴ üÁ¦¿Í´Â ÀüÇô ´Ù¸¥ ¼öÁØÀÇ ¾ÈÁ¤µÇ°í Ç¥ÁØÀûÀÎ ½Ã½ºÅÛÀÔ´Ï´Ù. ¿©·¯ºÐ²²¼­ ¹Ì·¡¸¦ »ý°¢ÇϽŴٸé, ¹Ù·Î X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ¼±ÅÃÇϽʽÿä. ÀÚ, ¿ì¼± Á¡°ËÇØ¾ß ÇÒ °ÍµéÀÌ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ X ÇÁ·Î±×·¡¹ÖÀ» ÇÒ Áغñ°¡ µÇ¾î ÀÖ´ÂÁö ¾Ë¾ÆºÁ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ÀÌ ±ÛÀ» Àд ºÐµéÀº ÃÖ¼ÒÇÑ X À©µµ¿ì°¡ ÀÛµ¿ÇÏ°í °è½Å ¼±ÅùÞÀº(?) ºÐµéÀÏ °ÍÀÌ°í, ³²Àº °ÍÀº ¿©·¯ºÐÀÌ ½½·¢¿þ¾î ¼³Ä¡½Ã X ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¼ö ÀÖ´Â Çì´õ ÆÄÀÏ µîÀ» Á¦´ë·Î ¼³Ä¡Çϼ̴ÂÁö È®ÀÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. /usr/include/X11 ¤Ô±×¸®°í /usr/X11/lib ¿¡ È­ÀϵéÀÌ ÀÖ´ÂÁö ¸»ÀÔ´Ï´Ù. ¸ðµÎ ÀÌ»ó¾ø´Ù°í¿ä? ³×, ±×·¯¸é ½ÃÀÛÇսôÙ. <sect1>X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ̶õ ? <p> X À©µµ¿ì ÇÁ·Î±×·¥À̶õ X À©µµ¿ìÀÇ 'ÀÚ¿ø(Resource)'À» ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. XÀÇ ÀÚ¿øµéÀº ´ëÇ¥ÀûÀ¸·Î â(Window), »ö»ó(Color Map), ÆùÆ®(font) µîÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÀÚ¿øµéÀ» X À©µµ¿ì ¼­¹ö(Server)¶ó°í ÇÏ´Â ³à¼®ÀÌ Àü±ÇÀ» °¡Áö°í °ü¸®ÇÏ°í ÀÖ½À´Ï´Ù. ¿ì¸®ÀÇ ¿ªÇÒÀº ÀÌ¹Ì Á¤ÇØÁ® ÀÖ´Â '±ÔÄ¢'¿¡ µû¶ó¼­, ÀÚ¿øÀ» °ü¸®ÇÏ°í ÀÖ´Â ¼­¹ö¿¡ ¿¬°áÇÏ¿©, ¼­¹ö´õ·¯ ¿ì¸®°¡ ¿øÇÏ´Â ÀÚ¿øÀ» ¼­ºñ½ºÇØ´Þ¶ó°í ¿äûÇÏ´Â ÀÏÀÔ´Ï´Ù. ¹Ù·Î ¿ì¸®´Â ¼­¹ö¶ó´Â ³ð°ú ¾î¶»°Ô ¿¬°áÇÒ °ÍÀÎÁö, ±×¸®°í ¾î¶»°Ô ¼­¹ö´õ·¯ ÀÌ°Í Àú°Í ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀ» ´Þ¶ó°í ÇÏ´ÂÁö¸¦ ¹è¿ì´Â °ÍÀ» ¸ñÇ¥·Î ÇÏ°Ô µË´Ï´Ù. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥À» Ŭ¶óÀ̾ðÆ®(Client)¶ó°í ÇÏÁö¿ä. ¼­¹ö/Ŭ¶óÀ̾ðÆ® °³³äÀ̶ó°í Çؼ­ Ç×»ó ÇÁ·Î±×·¥À» "¹«¾ùÀÌ ¹«¾ù¿¡ ¿¬°áÇÏ¿© ¿øÇÏ´Â ÀÏÀ» ÇÑ´Ù"¶ó´Â »ç°í¹æ½Ä ÇÏ¿¡ ¸ðµç ÇÁ·Î±×·¥À» Â¥°Ô µË´Ï´Ù. ÀÌ´Â ´õ ³ª¾Æ°¡ ¼¼°è ÀúÆí¿¡ ÀÖ´Â ¼­¹ö¿¡ ¿ì¸®ÁýÀÇ Å¬¶óÀ̾ðÆ®°¡ ¿¬°áÀ» ÇÏ¿© ¼­ºñ½º¸¦ ¹Þ´Â´Ù´Â "³×Æ®¿öÅ© ÁöÇâÀû"ÀÌ°í ¹Ì·¡ ÁöÇâÀûÀÎ ÇÁ·Î±×·¡¹ÖÀÌ µË´Ï´Ù. ÀÎÅÍ³Ý ½Ã´ë¸¦ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô´Â ¾ÆÁÖ Áß¿äÇÑ °³³äÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©·¯ºÐ²²¼­ Àú¿Í ÇÔ²² X ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è¸¦ ŽÇèÇϽô٠º¸¸é ¾ÆÁÖ ÀÚ¿¬½º·´°Ô ¸ÚÁø ³×Æ®¿öÅ© ÇÁ·Î±×·¥¿¡ µµÀüÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ¿ì¸®´Â ´ÜÁö Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó ¼­¹ö¿¡ ¿¬°áÇÏ°í, ¼­ºñ½º¸¦ ¹Þ°í, ¿¬°áÀ» ÇØÁ¦ ÇÏ´Â °ÍÀ» ¹è¿ì´Â °ÍÀÏ »ÓÀ̶ó´Â »ç½ÇÀ» Ç×»ó ¸í½ÉÇØÁÖ¼¼¿ä! <sect1>¾Ë¾ÆµÎ¾î¾ß ÇÒ »ç½Ç <p> ¿©·¯ºÐ ¸ðµÎ ´çÀå¿¡ ½ÇÁ¦ÀûÀÎ X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÏ°í ½ÍÀ¸½Ç °Ì´Ï´Ù. ÇÏÁö¸¸, ÀÌ·¯ÇÑ »ç½ÇµéÀº ¾Ë°í µé¾î°¡¼Å¾ß ´õ¿í ´õ »¡¸® ÇÁ·Î±×·¡¹Ö¿¡ Àͼ÷ÇØÁö½Ç ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù. cd /usr/X11/lib Çغ¸¼¼¿ä. ±×¸®°í ls ... lib¶ó´Â ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ¸¹Àº È­ÀϵéÀÌ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ÀÌ ³à¼®µé '¶óÀ̺귯¸®'´Â ¿ì¸®¸¦ Ç×»ó µµ¿ÍÁÖ´Â ³ðµéÀÔ´Ï´Ù. À̵éÀÌ ¾øÀ¸¸é ¾Æ¹« °Íµµ ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÌ ³à¼®µéÀ» ¿©·¯ºÐ²² ¼Ò°³½ÃÄÑ µå¸®°íÀÚ ÇÕ´Ï´Ù. <itemize> <item>libX11 : À̸§¿¡µµ µå·¯³ªµíÀÌ °¡Àå ±âº»ÀûÀÎ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ¸ðµç Ä£±¸µéÀº ÀÌ Ä£±¸ ¾øÀÌ´Â ¹«¿ëÁö¹°ÀÔ´Ï´Ù. °¡Àå Áß¿äÇÑ, ±×¸®°í °¡Àå º»ÁúÀûÀÎ X ÀÇ ±â´ÉÀ» ½ÇÇöÇØÁÖ´Â Xlib ÀÔ´Ï´Ù. <item>libXt : X ÅøŶ(X Toolkit Intrinsic)À̶ó°í ºÎ¸¨´Ï´Ù. Xlib À§¿¡¼­ ±¸ÇöµÇ¾î ÀÖ´Â ¾ÆÁÖ À¯¿ëÇÑ ·çƾµéÀÔ´Ï´Ù. ³ªÁß¿¡ À§Á¬À̶ó°í ÇÏ´Â X ÀÎÅÍÆäÀ̽º¿¡¼­ ¾ÆÁÖ Áß¿äÇÑ ³ðµéÀ» ´Ù·ê ¶§ ¸¹ÀÌ »ç¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀ» ÀÚÀ¯ÀÚÀç·Î »ç¿ëÇÏ½Ç ¼ö ÀÖ´Â ¼öÁØÀÌ µÇ½Ã¸é X ÇÁ·Î±×·¡¹ÖÀº ³¡³­ °Å³ª ´Ù¸§¾øÁÒ. <item>libXaw : Athena Widget ÀÔ´Ï´Ù. ¾Õ±ÛÀÚ¸¦ µû¼­ aw ÀÔ´Ï´Ù. Áö±Ý ÇöÀç´Â °ÅÀÇ »ó¿ë ¸ðƼÇÁ(Motif)¸¸ÀÌ »ç¿ëµÇ¾î °ÅÀÇ ¾²ÀÌÁö ¾Ê´Â °Í °°½À´Ï´Ù. ÇÏÁö¸¸ X¸¦ °³¹ßÇÑ MIT°¡ ¸¸µç °ÍÀ¸·Î¼­ Free À̹ǷÎ, Àú´Â ¿©·¯ºÐ°ú ¹ÌÈíÇϳª¸¶ ÀÌ Ä£±¸¸¦ °¡Áö°í ¿¹»Û ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î º¼±îÇÕ´Ï´Ù. ¸ðƼÇÁ¿¡ °üÇÑ °ÍÀº ¼­Á¡¿¡ Ã¥ÀÌ ¿ÂÅë ±ò·Á ÀÖÀ¸´Ï ±×°ÍÀ» Âü°íÇÏ½Ã¸é µË´Ï´Ù. ¾îÂî µÇ¾úµç ¾Ë¾ÆµÎ½Ã¸é, ¸ðƼÇÁµµ ±Ý¹æ »ç¿ëÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ¿äÁò libXaw3d°¡ ³ª¿ÍÀִµ¥, ¿øÆÇ libXaw°¡ ¿ö³« ÃʶóÇؼ­ ÇÑ°è°¡ ÀÖ±â´Â ÇÏÁö¸¸, Á¦ °³ÀÎÀûÀÎ °ßÇØ´Â ±×·¡µµ ¼³Ä¡ÇϽô °ÍÀÌ ´õ ÁÁ´ÙÀÔ´Ï´Ù. ¼¼¿¬À̳ª °í½ºÆ®½ºÅ©¸³Æ®ÀÇ ¹öÆ°ÀÌ ¾à°£ 3Â÷¿øÀûÀ¸·Î, ±×¸®°í ¸ðƼÇÁ ³¿»õ¸¦ dz±â´õ±º¿ä. <item>libXmu : Miscellaneous UtilitiesÀÇ ¾Õ±ÛÀڵ鸸 µû¼­ mu ÀÔ´Ï´Ù. ±âŸ µîµîÀÇ ±â´ÉÀ» ±¸ÇöÇØÁÖ´Â ³à¼®ÀÌÁö¸¸, ¾ø¾î¼­´Â ¾ÈµÉ ³à¼®ÀÔ´Ï´Ù. ±× ±âŸ µîµîÀ̶ó°í ÇÏ´Â °ÍÀÌ Çϵµ ¸¹ÀÌ ¾²¿©¼­... <item>libXpm : È®ÀåÀÚ°¡ xpmÀÎ È­ÀÏµé º¸½Å Àû ÀÖÀ¸½ÃÁÒ? Ä÷¯ ºñÆ®¸Ê È­ÀÏ Áö¿ø µîÀÇ ±×·¡ÇÈ Áö¿ø ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ¾È Áß¿äÇÒ ¸®°¡ ÀÖÀ»±î¿ä? </itemize> ³ª¸ÓÁö Ä£±¸µéÀº ¼Ò°³½ÃÄÑ µå¸®±â Èûµé±º¿ä. ¾ÆÁ÷ ¶§°¡ µÇÁö ¾Ê¾Æ¼­... ³ªÁß¿¡ ¼Ò°³½ÃÄÑ µå¸± ±âȸ°¡ ¿Ã Áö... <sect1>ÀÚ, ÀÌÁ¦ ½ÃÀÛÇغ¼±î¿ä? <p> Ŭ¶óÀ̾ðÆ®°¡ Á¦ÀÏ ¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº ¹«¾ùÀϱî¿ä? ... <bf>¼­¹ö¿¡ Á¢¼ÓÇÏ´Â ÀÏÀÔ´Ï´Ù.</bf> °ú¿¬ ³ª´Â ¾î¶² ¼­¹ö¸¦ ¼±ÅÃÇÒ °ÍÀΰ¡? ÇÏ´Â ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÕ´Ï´Ù. º¸Åë µµ½º, À©µµ¿ìÁî ȯ°æ¿¡ Àͼ÷ÇϽŠºÐµéÀº Á» »ý¼ÒÇÑ °³³äÀÌÁö¿ä. ÇÏÁö¸¸ ¿äÁòÀº ÀÎÅͳÝÀ» ¸¹ÀÌ ÇϽñ⠶§¹®¿¡ ÀÌÇØÇϽñ⠾î·ÆÁö´Â ¾ÊÀ» °Ì´Ï´Ù. ¸®´ª½º X À©µµ¿ì ȯ°æ¿¡¼­´Â ¾ÆÁÖ °£´ÜÇÑ ¹®Àåµé·Î ¿©·¯ºÐ ¿·¿¡ ÀÖ´Â ÄÄÇ»ÅÍ ¸»°íµµ ¼¼»ó ÀúÆí¿¡ ÀÖ´Â ÄÄÇ»ÅÍÀÇ ¸ð´ÏÅÍ¿¡´Ù ÇϳªÀÇ Ã¢À» ¶ç¿ì´Â ÀÏ Á¤µµ´Â ³Ê¹«µµ ½±°Ô ÇÒ ¼ö Àְŵç¿ä. vi, emacs¿Í °°Àº ¿¡µðÅ͸¦ ÀÌ¿ëÇؼ­ ´ÙÀ½°ú °°Àº ³»¿ëÀÌ µé¾î ÀÖ´Â È­ÀÏÀ» Çϳª ¸¸µé¾î º¸¼¼¿ä. <itemize> <item>¿¹Á¦ 1 </itemize> <tscreen><verb> #include <X11/Xlib.h> main() { Display *d ; d = XOpenDisplay ("localhost:0.0") ; XCloseDisplay (d) ; } </verb></tscreen> ¸¸¾à À§ÀÇ ³»¿ëÀ» ex01.c¶ó´Â À̸§À¸·Î ÀúÀåÇϼ̴ٸé, <tscreen><verb> cc -o ex01 ex01.c -lX11 Çغ¸½Ê½Ã¿ä. </verb></tscreen> ÄÄÆÄÀÏÀÌ Àߵ˴ϱî? ¾ÈµÈ´Ù±¸¿ä? ¿Ö ±×·²±î¿ä? Èûµç ¿µ¾îÁö¸¸ ¿¡·¯ »çÀ¯¸¦ Àß º¸½Ã¸é ¾Æ¸¶µµ Çì´õÆÄÀÏÀ» ¸øã´Â´Ù°í ±×·¯Áö ¾Ê³ª¿ä? ±×·¯¸é ´ÙÀ½°ú °°ÀÌ INCLUDE µð·ºÅ丮¸¦ ÁöÁ¤ÇØÁֽʽÿä. <tscreen><verb> cc -o ex01 ex01.c -I/usr/include/X11 -lX11 </verb></tscreen> ÄÄÆÄÀÏÀº µÇµµ ¸µÅ©°¡ ¾ÈµÇ´Ù¸é ¶óÀ̺귯¸® µð·ºÅ丮µµ ÁöÁ¤ÇØÁÖ¼¼¿ä. -L/usr/X11/lib ¸¦ ¸í·ÉÇà¿¡ Ãß°¡½ÃÅ°½Ã¸é µË´Ï´Ù. Á¦´ë·Î ÄÄÆÄÀÏÀÌ ÀÌ·ç¾îÁ³´Ù¸é, ½ÇÇàÀ» ½ÃÄѺ¸ÁÒ. ex10 ¿£ÅÍ! ¿©·¯ºÐ²²¼­ ½Ç¸ÁÇϽô °ÍÀ» ´À³¥ ¼ö ÀÖ½À´Ï´Ù. :) ÀÌ°Ô ¹¹³Ä? ÇÏÁö¸¸! ÀÌ ÇÁ·Î±×·¥Àº X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀÇ °ÅÀÇ ¸ðµç °ÍÀ» º¸¿©ÁÖ´Â °ÍÀ̳ª ´Ù¸§¾ø´Â ¾ÆÁÖ Áß¿äÇÑ ÇÁ·Î±×·¥ÀÔ´Ï´Ù. Àú´Â ±×·¸°Ô ¿ì±â°í ½Í³×¿ä. :) ÀÌ ¾ûÅ͸®(?) X À©µµ¿ì ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¼³¸íÀ» µå¸®°íÀÚ ÇÕ´Ï´Ù. ùÁÙ INCLUDE ¹®ÀåÀº XOpenDisplay, XCloseDisplay, Display º¯¼ö°¡ ¼±¾ðµÇ¾î ÀÖ´Â Çì´õÈ­ÀÏ Xlib.h¸¦ Æ÷ÇÔ½ÃÅ°´Â ¹®ÀåÀÔ´Ï´Ù. ´ÙÀ½À¸·Î ´ç¿¬È÷ main ÇÔ¼ö°¡ Á¤ÀǵǾî¾ß°ÚÁÒ? DisplayÇü Æ÷ÀÎÅÍ d ¸¦ ¼±¾ðÇÕ´Ï´Ù. <sect2>Display¶õ? <p> µð½ºÇ÷¹ÀÌ°¡ ¹«¾ùÀÎÁö Àß ¾Æ½Ç °Ì´Ï´Ù. ¿©·¯ºÐ²²¼­ ¹Ù·Î ´« ¾Õ¿¡ µÎ°í °è½Å °ÍÀÌ ¸ð´ÏÅͶó°í ÇÏ´Â 'µð½ºÇ÷¹ÀÌ'ÀÔ´Ï´Ù. ±×·±µ¥ ¿©±â¼­ Display¶ó°í ÇÏ´Â °ÍÀº X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ ¾à°£ È®ÀåµÈ Àǹ̷Π»ý°¢ÇÕ´Ï´Ù. Á¤ÀÇ : Display¶õ ÇϳªÀÇ ¼­¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â 1°³ ÀÌ»óÀÇ ½ºÅ©¸°(Screen), 1°³ÀÇ Å°º¸µå, ¸¶¿ì½º µîµîÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Â ÁýÇÕüÀÌ¸ç ¿öÅ©½ºÅ×À̼Ç(Workstation) À̶ó°í ºÎ¸£±âµµ ÇÑ´Ù. ÀÌ·¯ÇÑ µð½ºÇ÷¹ÀÌ´Â º¸Åë ¸ð´ÏÅÍ Çϳª Àüü¸¦ ³ªÅ¸³»´Â ½ºÅ©¸°À» Çϳª °®´Â °æ¿ì°¡ º¸ÅëÀÌÁö¸¸ Ư¼öÇÑ °æ¿ì 2°³ ÀÌ»óÀÇ ½ºÅ©¸°À» °®´Â °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡ µÎ °³ÀÇ ¸ð´ÏÅ͸¦ ¾²´Â "µà¾ó ¸ð´ÏÅÍ" ½Ã½ºÅÛµµ Á¾Á¾ º¼ ¼ö ÀÖ½À´Ï´Ù. ±× °æ¿ì Çϵå¿þ¾î°¡ ¹ÞÃÄÁشٸé, X ½Ã½ºÅÛÀº µÎ °³ÀÇ È­¸éÀ» °¢°¢ ÀÌ¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ÇÁ·Î±×·¥ Çϳª ¸¸µé¸é Á¤¸» Àç¹ÌÀÖ°ÚÁÒ? X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­´Â ³Ê¹«µµ ½±°Ô ÀÌ·ç¾îÁý´Ï´Ù. <sect2>XOpenDisplay ÇÔ¼ö <p> ÀÚ, ÀÌÁ¦ ¿ì¸®°¡ ¿øÇÏ´Â µð½ºÇ÷¹ÀÌ ¼­¹ö¿¡ Á¢¼ÓÀ» Çغ¾½Ã´Ù. <tscreen><verb> XOpenDisplay ("localhost:0.0"); </verb></tscreen> ÀÌ ¹®ÀåÀº localhostÀÇ 0¹ø µð½ºÇ÷¹ÀÌ(Áï, ù¹ø° µð½ºÇ÷¹ÀÌ)ÀÇ 0¹ø ½ºÅ©¸°(Áï, ù¹ø° ½ºÅ©¸°)¿¡ Á¢¼ÓÇ϶ó´Â ¶æÀÔ´Ï´Ù. localhost´Â ¹Ù·Î ¿©·¯ºÐ ÄÄÇ»Å͸¦ ÁöĪÇϴ ȣ½ºÆ®¸íÀÔ´Ï´Ù. ÀÌ°ÍÀ» ¸¸¾à ´Ù¸¥ ÀÎÅÍ³Ý È£½ºÆ® ÁÖ¼Ò·Î ½áÁشٸé, ¾î¶»°Ú´Ï±î? ¿©·¯ºÐÀÇ ÄÄÇ»ÅÍ°¡ ³×Æ®¿öÅ©¿¡ ¹°·ÁÀÖ°í, »ó´ë¹æ È£½ºÆ®¸¦ »ç¿ëÇÒ ±ÇÇÑÀÌ ÁÖ¾îÁ® ÀÖ´Ù¸é, ¿ì¸® ÇÁ·Î±×·¥Àº Àú ¸Ö¸®¿¡ Àִ ȣ½ºÆ® ¼­¹ö¿Í ¿¬°áÀ» ÇÏ°Ô µË´Ï´Ù. ¾Æ´Ï, ÀÌ·¸°Ô °£´ÜÇÒ ¼ö°¡!!! ÀÎÅÍ³Ý ÇÁ·Î±×·¥À̶ó´Â °ÍÀÌ º° °Í ¾Æ´Ï±º¿ä. localhost:0.0 °ú °°Àº Ç¥Çö½ÄÀ» ´«¿©°Ü º¸¾ÆÁֽʽÿä. ¸í·ÉÇà¿¡¼­ ÇÑ ¹ø set À̶ó°í Ãĺ¸¼¼¿ä. ¾Æ¸¶ ³»¿ëÀÌ ¸¹¾Æ¼­ more ¸¦ ÇØÁÖ¼Å¾ß ÇÒ °Ì´Ï´Ù. ÇÑ ¹ø ±× ³»¿ëÀ» ÁÖ·ç·è »ìÆ캸½Ã¸é DISPLAY=:0.0À̶ó´Â Ç¥Çö½ÄÀ» ãÀ¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ±× ´ÙÀ½À¸·Î HOSTDISPLAY=freeyong:0.0 ÀÌ·± Ç¥Çöµµ º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ¹°·Ð freeyong°ú °°Àº ºÎºÐÀº ¿©·¯ºÐ¸¶´Ù ´Ù¸£Áö¿ä. ¿©·¯ºÐ²²¼­ ÁöÁ¤ÇØÁֽŠÀ̸§ÀÌ ³ªÅ¸³¯ °Ì´Ï´Ù. localhost:0.0 À» freeyong:0.0µîÀ¸·Î ¹Ù²Ù¾î Áּŵµ µË´Ï´Ù. ÇÏÁö¸¸ ÀϺη¯ ¾Æ¹« Àǹ̵µ ¾ø´Â À̸§À» Á־½Ê½Ã¿ä. ÄÄÆÄÀÏÇÏ°í ½ÇÇàÀ» ½ÃÄÑ º¸½Ã¸é ±× °á°ú¸¦ ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ²À! È®ÀÎÇغ¸¼¼¿ä. º¸ÅëÀº Ç¥Çö½Ä ºÎºÐ¿¡ NULLÀ» ÁÖ¸é ÇöÀç DISPLAY¶ó´Â ȯ°æº¯¼öÀÇ °ªÀ» Àо ¼­¹ö·Î »ç¿ëÇÕ´Ï´Ù. <sect2>XCloseDisplay ÇÔ¼ö <p> Á¢¼ÓÇؼ­ ÇÑ ÀÏÀº Çϳªµµ ¾øÁö¸¸, ÀÌÁ¦ Á¢¼ÓÀ» ¸¶ÃÄ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? ±× ÇÔ¼ö°¡ ¹Ù·Î XCloseDisplay ÇÔ¼öÀÔ´Ï´Ù. ¿À´ÃÀº ¾ÆÁÖ ¾ÆÁÖ °£´ÜÇÏÁö¸¸, ¶ÇÇÑ ¾ÆÁÖ ¾ÆÁÖ ±Ùº»ÀûÀÎ ÇÁ·Î±×·¥À» Çϳª Â¥º¸¾Ò½À´Ï´Ù. ¸ðµç X À©µµ¿ì ÇÁ·Î±×·¥Àº ±âº»ÀûÀ¸·Î ¿¹Á¦ 1 ÇÁ·Î±×·¥°ú ±× Çü½ÄÀÌ °°½À´Ï´Ù. ¼­¹ö¿¡ ¿¬°áÇÏ°í ¼­ºñ½º ¹ÞÀº ÈÄ, Á¢¼ÓÀ» ÇØÁ¦ÇÕ´Ï´Ù. ¸ðµç À¯¿ëÇÑ ÀÛ¾÷Àº XOpenDisplay ÇÔ¼ö¿Í XCloseDisplay ÇÔ¼ö »çÀÌ¿¡ Àû¾îÁÖ½Ã¸é µË´Ï´Ù. ÀÌ ±ÛÀ» ´Ù ÀÐÀ¸½Å ÈÄ, ²À Xlib.h È­ÀÏÀÇ ³»¿ëÀ» »ìÆ캸½Ê½Ã¿ä. ¿¹¸¦ µé¾î Display Çü º¯¼ö´Â ¾î¶»°Ô ¼±¾ð, Á¤ÀǵǾî ÀÖ´ÂÁö º¸½Ã¸é, Á¤¸»·Î ¸¹Àº Á¤º¸¸¦Áö´Ï°í ÀÖ´Â ±¸Á¶Ã¼(struct)¶ó´Â °ÍÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. <sect1>°£´ÜÇÑ Ã¢ Çϳª ¸¸µé¾î º¾½Ã´Ù. <p> ¾Õ¿¡¼­ ¸¸µç ¿øÃÊÀû(?) ÇÁ·Î±×·¥Àº ´ÜÁö ¼­¹ö¿Í Á¢¼ÓÇÏÀÚ ¸¶ÀÚ Á¢¼ÓÀ» ²÷¾î¹ö¸®´Â °æ¿ì¿´½À´Ï´Ù. ±×·³, ÀÌÁ¦´Â ¼­¹ö¿¡ Á¢¼ÓÇÏ°í ³ª¼­ ¾ÆÁÖ °£´ÜÇÑ ÀÏÀ» Çϳª ½ÃÄѺ¸µµ·Ï ÇսôÙ. ¹Ù·Î â Çϳª¸¦ ¸¸µé¾î¼­ Ç¥½ÃÇغ¸´Â °Ì´Ï´Ù. <itemize> <item>¿¹Á¦ 2 </itemize> <tscreen><verb> #include <X11/Xlib.h> main() { Display *d ; Window w, root ; d = XOpenDisplay(NULL) ; root = XDefaultRootWindow (d); w = XCreateSimpleWindow ( d, root, 50, 50, 400, 300, 2, BlackPixel (d,0), WhitePixel(d,0) ); XMapWindow (d, w); XFlush (d); getchar(); XCloseDisplay (d); } </verb></tscreen> À̹ø ¿¹Á¦¿¡¼­´Â Window ¶ó´Â »õ·Î¿î ÀÚ·áÇü°ú XDefaultRootWindow(), XCreateSimpleWindow(), XMapWindow(), XFlush() µîÀÇ »õ·Î¿î ÇÔ¼öµéÀÌ ³ª¿À´Â±º¿ä. ¾Ñ! BlackPixel(), WhitePixel()°ú °°Àº ¸ÅÅ©·Îµµ º¸À̴±º¿ä. ÇÏÁö¸¸ ÀÌ ¸ÅÅ©·ÎµéÀº ³ªÁß¿¡ ¼³¸íµå¸®±â·Î ÇÏ°Ú½À´Ï´Ù. ÇÏ·ç¿¡ ³Ê¹« ¸¹Àº °ÍÀ» ¹è¿ì¸é ¸Ó¸®°¡ ¾ÆÇÁÀݾƿä? <sect2>Window Çü º¯¼ö <p> ¿ì¸®°¡ âÀ» ¸¸µé°í ½ÍÀ» ¶§´Â â Çϳª¸¶´Ù À§ÀÇ ¿¹¿¡¼­ ³ª¿Â Window Çü º¯¼ö Çϳª°¡ ÇÊ¿äÇÏ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. Window Çü º¯¼ö Çϳª´Â ±× â¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â º¹ÀâÇÑ ±¸Á¶Ã¼ Á¤µµ¶ó°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. ¿¹»óÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î´Â âÀÇ Å©±â, À§Ä¡, »ö»ó µîÀÌ ÀÖ½À´Ï´Ù. <sect2>â »ý¼º, Ç¥½Ã ... <p> Áö±ÝºÎÅÍ ¼³¸íµå¸®´Â ±âº»ÀûÀÎ ÀýÂ÷¸¦ ²À ¸Ó¸® ¼Ó¿¡ ³Ö¾îµÎ¼¼¿ä. ¾î¶² âÀ» ¸¸µéµçÁö ¿ì¸®´Â ¿ì¼±ÀûÀ¸·Î ±× â¿¡ ´ëÇÑ Á¤º¸¸¦ ÀúÀåÇÏ°í ÀÖÀ» º¯¼ö Çϳª¸¦ ÀÌ¹Ì ¸¸µé¾î³õ¾ß¾ß ÇÕ´Ï´Ù. Áï Window Çü º¯¼ö Çϳª¸¦. ±× ´ÙÀ½ ¼­¹ö´õ·¯ âÀ» Çϳª ¸¸µé°Ú´Ù°í ¼­ºñ½º ¿äûÀ» ÇÕ´Ï´Ù. (Á¶±Ý µÚ¿¡ ¼³¸íµå¸®´Â ÇÔ¼ö¸¦ ÅëÇØ) À̺¯ÀÌ ¾ø´Â ÇÑ ¼­¹ö´Â âÀ̶ó´Â ÀÚ¿ø Çϳª¸¦ ¼­¹ö Ãø(!!!)¿¡ ¸¸µé¾î ³õ½À´Ï´Ù. ±×¸®°í â ÀÚ¿ø¿¡ ´ëÇÑ ÀÚ¿ø °íÀ¯¹øÈ£(Resource ID)¸¦ ¾Æ±î Ŭ¶óÀ̾ðÆ® ÂÊ¿¡¼­ ¸¸µé¾î ³õÀº º¯¼ö¿¡ ¹ÝȯÇØÁÝ´Ï´Ù. ÀÌ º¯¼ö´Â ¹Ù·Î Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö Ãø¿¡ ¸¸µé¾îÁø ÇÑ Ã¢¿¡ ´ëÇÑ ¿¬°áÅë·Î ¿ªÇÒÀ» ÇØÁÝ´Ï´Ù. ¹«Áö Áß¿äÇÏÁÒ? ÀÌ·¸°Ô ¼­¹ö Ãø¿¡´Ù â ÀÚ¿ø Çϳª¸¦ ¸¸µé¾î³õ°í, ±× ´ÙÀ½¿¡´Â ¿©·¯ºÐÀÌ ¿øÇÏ´Â ¶§¿¡ ±× âÀ» È­¸é¿¡ Ç¥½ÃÇØ´Þ¶ó°í ¿äûÇÏ¸é ¼­¹ö°¡ ¾Ë¾Æ¼­ ±× âÀ» Ç¥½ÃÇØÁÝ´Ï´Ù. ¹°·Ð ¿äû¿¡ µû¶ó È­¸é¿¡¼­ »ç¶óÁö°Ô ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù. ¶Ç´Â ÇöÀç ³ªÅ¸³»Á® Àִ â¿¡ ´ëÇÏ¿© ¹è°æ»ö°ú Å׵θ®»öÀ» ¹Ù²Û´ÙµçÁö ÇÏ´Â ¼öÁ¤ ÀÛ¾÷ ¶ÇÇÑ ¾Æ±îÀÇ Window Çü º¯¼ö¸¦ ÅëÇؼ­ ÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ì¸®´Â ¾ÕÀ¸·Î ¸ðµç ÀÚ¿ø¿¡ ´ëÇÏ¿© ¼­¹ö Ãø¿¡ ÀÚ¿øÀ» ¸¸µé¾î ³õ°í ¿ì¸® Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥¿¡¼­´Â ´ÜÁö ±× ÀÚ¿ø¿¡ ´ëÇÑ ID¸¸À» º¯¼ö¿¡´Ù ÀúÀåÇسõ°í ÀÖ½À´Ï´Ù. ±×¸®°í ¿øÇÏ´Â ¶§¿¡ ±× ÀÚ¿øÀ» Ç¥½ÃÇÑ´ÙµçÁö, ¼öÁ¤ÇÑ´ÙµçÁö, ¶Ç´Â ¾ø¾Ø´ÙµçÁö ÇÏ´Â ÀÛ¾÷À» ÇàÇÕ´Ï´Ù. ±×¸®°í ³ªÁß¿¡ Á¤¸» ÇÊ¿ä°¡ ¾ø¾îÁø ÀÚ¿ø¿¡ ´ëÇؼ­´Â ¼­¹ö Ãø¿¡´Ù »èÁ¦Ç϶ó°í Åë°íÇÕ´Ï´Ù. Á¦°¡ ÀÌ·¸°Ô ±æ°Ô ¼³¸íµå¸° °³³äÀ» ²À ¼÷ÁöÇØÁֽʽÿä. ¾î¶»°Ô º¸¸é ¿ì¸®°¡ ¾ÕÀ¸·Î ÇÏ´Â ÀÏÀÇ °ÅÀÇ ´ëºÎºÐÀ» ¸»¾¸µå¸° °ÍÀ̳ª ´Ù¸§¾ø½À´Ï´Ù. <sect2>XCreateSimpleWindow ÇÔ¼ö¿¡ ´ëÇÏ¿©... <p> ÇÔ¼ö À̸§ ±×´ë·Î Çؼ®Çغ¸¸é "°£´ÜÇÑ Ã¢À» »ý¼ºÇÑ´Ù"ÀÌÁö ¾Ê½À´Ï±î? ¿ì¸®°¡ ¿µ¾î ¹®È­±Ç¿¡ »ì°í ÀÖ´Ù¸é, À̰͸¸Å­ ½ÄÀº Á× ¸Ô±â°¡ ¾îµð ÀÖ°Ú½À´Ï±î ¸¸Àº... °£´ÜÇÑ Ã¢À» ¸¸µå´Â ÇÔ¼ö¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÁö¿ä. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü(Prototype) Window XCreateSimpleWindow ( Display* display, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int border_width, unsigned long border_color, unsigned long background_color ); </verb></tscreen> ÇÔ¼ö ÇÑ ¹ø Á¤¸» °ÅâÇϱº¿ä. ¾ÕÀ¸·Î ³ª¿À´Â ÇÔ¼öµé ´ëºÎºÐÀÌ °ÅÀÇ ÀÌ·¸´Ù°í »ý°¢ Çϼŵµ ¹«¹æÇÕ´Ï´Ù. Á¤¸»·Î ¸¹Àº Á¤º¸¸¦ Àü´ÞÇØÁÖ¾î¾ß ÇÏ´Â °ÍÀ» º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. Áü ij¸®Ã³·³ ¼ûÀ» Å©°Ô µéÀ̽® ÈÄ, ´Ù´Ù´Ù ½¯ »õ ¾øÀÌ ¾ê±âÇغ¸ÀÚ¸é, 1¹ø° Display Çü Æ÷ÀÎÅÍ´Â XOpenDisplay()¿¡¼­ Á¢¼ÓÇÑ µð½ºÇ÷¹À̸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀ̸ç, 2¹ø° Window´Â ÇöÀç ¸¸µé°íÀÚ Çϴ âÀÇ ¼Ò¼ÓµÇ´Â ºÎ¸ð âÀ̸ç, 3¹ø°, 4¹ø°´Â °¢°¢ x, y ÁÂÇ¥¸¦ ¶æÇÏ°í, 5¹ø°´Â Çȼ¿ ´ÜÀ§ÀÇ °¡·ÎÆø, 6¹ø°´Â Çȼ¿ ´ÜÀ§ÀÇ ¼¼·ÎÆø, ±×¸®°í 7¹ø°´Â Å׵θ®ÀÇ µÎ²², ¸¶Áö¸·À¸·Î 8¹ø°¿Í 9¹ø°´Â Å׵θ® »ö°ú âÀÇ ±âº»ÀûÀÎ ¹è°æ»öÀ» Ä«¸®Å°´Â unsigned long Çü ¼öÄ¡°ªÀÔ´Ï´Ù. º¸Åë ÇϳªÀÇ µð½ºÇ÷¹ÀÌ¿¡¼­ ´ëºÎºÐÀÇ ÀÏÀ» ÇØÄ¡¿ì´Ï±î 1¹ø° Àμö°¡ »ó´çÈ÷ ±ÍÂúÀ» ¼öµµ ÀÖÁö¸¸, »ý°¢Çغ¸¼¼¿ä, ¿©·¯ºÐÀÇ Å¬¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÌ ´ÙÁß µð½ºÇ÷¹ÀÌ Á¢¼Ó ÇÁ·Î±×·¥ÀÌ µÉ ¼öµµ ÀÖÁö ¾Ê½À´Ï±î? ±×·¯¸é, ¿©±â Àú±â µÎ °³ ÀÌ»óÀÇ µð½ºÇ÷¹À̸¦ °£´ÜÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î ¿ä ù¹ø° Àμö¸¦ °¡Áö°í ¸»ÀÔ´Ï´Ù. 2¹ø°, ºÎ¸ð âÀº ¹«¾ùÀΰ¡? --- X À©µµ¿ìÀÇ ¸ðµç âÀº Ç×»ó ¾î¶² â¿¡ ¼ÓÇØ Àְųª, ¾î¶² âµéÀ» ÀÚ±â ÀÚ½Ä(Child)À¸·Î °®½À´Ï´Ù. ¾ÆÁÖ ±Ùº»ÀûÀ¸·Î´Â X À©µµ¿ì°¡ ¶ßÀÚ¸¶ÀÚ »ý±â´Â âÀº ¹Ù·Î Å׵θ®µµ ¾ø´Â â, ·çÆ®(root)âÀÔ´Ï´Ù. ¹Ù·Î ÀÌ Ã¢¿¡ ¸ðµç âµéÀÌ ¼ÓÇÏ´Â °ÍÀÔ´Ï´Ù. ¾î¶² ÇÁ·Î±×·¥À̵ç óÀ½ âÀº ¹Ù·Î ·çƮâÀÇ ÀÚ½ÄâÀÌ µË´Ï´Ù. ±× âÀº ´Ù½Ã ÀÚ±â ÀÚ½ÄâµéÀ» ¾ó¸¶µçÁö °¡Áú ¼ö ÀÖÁö¿ä. ¾îÂî µÇ¾úµç°£¿¡ »õ·Î »ý¼ºµÇ´Â âÀº Á·º¸(?)¸¦ °¡Á®¾ß ÇÕ´Ï´Ù. Àڱ⠺θðâÀº ¾Ë¾Æ¾ß ÇÏÁö ¾Ê°Ú¾î¿ä? ¿©±â¼­ Àá±ñ XDefaultRootWindow()¶ó´Â ÇÔ¼ö¿¡ ´ëÇÏ¿© ¾Ë¾Æº¾½Ã´Ù. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü Window XDefaultRootWindow ( Display *display ); </verb></tscreen> ÀÌ ³à¼®ÀÇ ±â´ÉÀº Display Çü Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ¼­¹öÀÇ ±âº»(Default) ·çƮâÀÇ Ã¢ ID¸¦ ¾Ë¾Æ´Ù°¡ ID¸¦ Window Çü º¯¼ö¿¡´Ù µÇµ¹·Á ÁÖ´Â ¿ªÇÒÀÔ´Ï´Ù. ¿ì¸®°¡ ¸¸µé°íÀÚ Çϴ âÀº Á÷Á¢ÀûÀ¸·Î ·çƮâÀÇ ¹Ù·Î ¾Æ·¡ ÀÚ½ÄâÀÌ µÇ¹Ç·Î, À§¿¡¼­ ³ª¿Â XCreateSimpleWindow()ÀÇ µÎ¹ø°¿¡¼­ ºÎ¸ðâ ID¸¦ ÁöÁ¤ÇØÁÖ¾î¾ß Çϱ⠶§¹®¿¡ ÇÊ¿äÇÑ ÇÔ¼öÀÔ´Ï´Ù. ³ª¸ÓÁö´Â ÀÚ¸íÇϹǷΠ8¹ø°, 9¹ø° »ö»ó ÁöÁ¤ ºÎºÐ¿¡ ´ëÇÑ ¼³¸í¸¸ µå¸³´Ï´Ù. X À©µµ¿ì¿¡¼­ »ö»óÀº ¶ÇÇÑ ¼­¹ö°¡ Á¦°øÇÏ´Â ÇϳªÀÇ ÀÚ¿øÀ¸·Î¼­ ¼­¹ö°¡ °ü¸®¸¦ ÇÏ°í ÀÖ½À´Ï´Ù. µû¶ó¼­ ¿ì¸®°¡ »ý°¢ÇÏ´Â °Í ¸¸Å­ ½±°Ô »ö»óÀ» ¾²°Å³ª ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. Ȥ½Ã ¿©·¯ºÐÀº XV ¿Í °°Àº ±×·¡ÇÈ ÇÁ·Î±×·¥À» ¾²¸é¼­ ±×·¡ÇÈ È­¸éÀÇ ÁúÀÌ ¾î¶³ ¶§´Â ´Ù¸£°Ô ³ªÅ¸³ª´Â °ÍÀ» °æÇèÇغ¸½Å Àû ÀÖ½À´Ï±î? ±× °æ¿ì¿£ XV°¡ ¿øÇÏ´Â ¸¸Å­ÀÇ »ö»ó ÀÚ¿øÀ» ¼­¹ö¿¡°Ô¼­ °ø±Þ¹ÞÁö ¸øÇϱ⠶§¹®ÀÔ´Ï´Ù. ¾î¶² ÀÌÀ¯¿¡¼­µç... ¿¹¿¡¼­ µå·¯³ªµí ±×³É °ËÁ¤°ú Èò»öÀ» ÁöĪÇÏ´Â ½¬¿î ¼ýÀÚ¸¦ ¾²´Â °Ô ¾Æ´Ï¶ó, BlackPixel(), WhitePixel()À̶ó´Â ¸ÅÅ©·Î¸¦ ½è½À´Ï´Ù. À̹ø °­Á¿¡¼­´Â »ö»óÀ» ¾²´Â °úÁ¤ÀÌ ±×·¸°Ô °£´ÜÇÏÁö´Â ¾Ê´Ù´Â »ç½Ç¸¸ ±â¾ïÇØÁֽñ⠹ٶø´Ï´Ù. Á¶¸¸°£¿¡ »ö»ó¿¡ ´ëÇÑ ¾ê±â°¡ À̾îÁý´Ï´Ù. ±× ¶§±îÁö¸¸ Âü¾ÆÁֽʽÿä. <sect2>XMapWindow() <p> ÀÌ ³à¼®Àº ¹«¾ùÀΰ¡ Çϸé, À§¿¡¼­ ¼­¹öÃø¿¡ ¸¸µé¶ó°í Å뺸ÇÑ Ã¢À» ½ÇÁ¦·Î ³ªÅ¸³»¶ó´Â Áö½Ã¸¦ ¼­¹ö¿¡ º¸³»´Â ³à¼®ÀÔ´Ï´Ù. âÀÇ »ý¼º°ú Ç¥½Ã´Â º°°³ÀÇ °úÁ¤ÀÌÁö¿ä. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü XMapWindow ( Display *display, Window w ); </verb></tscreen> ƯÁ¤ µð½ºÇ÷¹ÀÌ ¼­¹ö¿¡¼­ w¶ó´Â âÀ» È­¸é¿¡ ½ÇÁ¦·Î Ç¥½ÃÇÕ´Ï´Ù. ¿©±â¼­ ¿µ¾î MapÀº µ¿»ç·Î¼­ "Áöµµ·Î ±×¸®´Ù","¹èÄ¡ÇÏ´Ù"ÀÇ ¶æÀÔ´Ï´Ù. Á¦°¡ ´Ù´Ï´Â ÁöÁú°úÇаú¿¡¼­´Â ÁöÁúµµ ±×¸®´Â °ÍÀ» ¸ÅÇÎ(Mapping)ÇÑ´Ù¶ó°í ¸»ÇÕ´Ï´Ù. <sect2>XFlush() <p> ¾Æ´Ï, ÀÌ°Ç ¶Ç ¹»±î¿ä? Ç÷¯½¬(flush)´Â È­Àå½Ç¿¡¼­ º¼ ÀÏÀ» ´Ù º» ÈÄ, º¯±âÀÇ ¹°À» ³»¸®´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÇѲ¨¹ø¿¡ ¹°À» Áà Èê·Áº¸³»´Â ±×·± ÀÏÀÔ´Ï´Ù. X À©µµ¿ì¿¡ ¹¹ ±×·± ÀÏÀÌ ÇÊ¿äÇϳı¸¿ä? °ÅÂü ÀÌ»óÇϱº¿ä. C ÇÁ·Î±×·¥À» °øºÎÇغ¸½Ã¸é, printf¿Í °°Àº ¸¹Àº Ãâ·Â¹®µéÀÌ ½ÇÇà Á÷ÈÄ¿¡ Ãâ·ÂÀÌ ÀÌ·ç¾îÁö´Â °ÍÀº ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¾Æ½Ç °Ì´Ï´Ù. ½ÇÁ¦´Â ¸Å¹ø Ãâ·Â ¸í·ÉÀ» ¹ÞÀ» ¶§ ¸¶´Ù Ãâ·ÂÀ» ÇÏ´Â °Íº¸´Ù´Â ÇѲ¨¹ø¿¡ ¹öÆÛ¿¡ ¸ð¾Æ³õ°í ¶§°¡ µÇ¸é ´Ü ÇÑ ¹øÀÇ ½ÇÇàÀ¸·Î È¿À²¼ºÀ» ³ôÀÌ´Â ±â¼úÀ» äÅÃÇÕ´Ï´Ù. X À©µµ¿ìµµ ¶ÇÇÑ ±×·¸½À´Ï´Ù. ±× ¼ö¸¹Àº Ŭ¶óÀ̾ðÆ®µé·ÎºÎÅÍÀÇ ¼­ºñ½º ¿äûÀ» ±× ¶§ ±× ¶§ ½ÇÇàÇÏ°Ô µÇ¸é ´É·üÀÌ ¶³¾îÁö°Ô µÇ¹Ç·Î, ¼­¹ö´Â ¹öÆÛ¸¦ ¸¶·ÃÇÏ°í ±× ¹öÆÛ°¡ Â÷°Å³ª ¹öÆÛ¸¦ ºñ¿ì¶ó´Â ¸í½ÃÀûÀÎ ¿ä±¸°¡ ÀÖÀ» ¶§¸¸ ½ÇÇàÀ» ÇÏ°Ô µË´Ï´Ù. À̹ø ¿¹´Â X À©µµ¿ì ¼­¹ö¿¡°Ô´Â Äà¹æ±Íµµ ²ð ÇÊ¿ä°¡ ¾÷À» ¸¸Å­, ÀÚÀßÇÑ ¿ä±¸À̱⠶§¹®¿¡ ±×·± ¸í·ÉÀ» ³»¸°´Ù°í Çؼ­ ¹öÆÛ°¡ Âû ¸® ¸¸¹«ÇÕ´Ï´Ù. ±×·¯´Ï, °­Á¦·Î 'º¯±â ¹°À» ÂÓ ³»·Á¾ß°ÚÁÒ?' <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü XFlush ( Display *display ); </verb></tscreen> <sect2>ÄÄÆÄÀÏ <p> À§ ¿¹Á¦¸¦ ex02.c¶ó°í ÀúÀåÇϼ̴ٸé, <tscreen><verb> cc -o ex02 ex02.c -lX11 -I/usr/X11/include -L/usr/X11/lib </verb></tscreen> º¸Åë -I, -L ¿É¼ÇÀº ÁÖÁö ¾ÊÀ¸¼Åµµ µÇÁö¸¸ Á¦´ë·Î Çì´õÈ­ÀÏ°ú ¶óÀ̺귯¸®¸¦ ãÁö ¸øÇÒ ¶§´Â ¸í½ÃÀûÀ¸·Î ÁÖ½Ã¸é µË´Ï´Ù. <sect2>½ÇÇà <p> ÀÚ, ÀÌÁ¦ X Å͹̳Π»ó¿¡¼­ ½ÇÇàÀ» Çغ¼±î¿ä? ¿ì¸®°¡ ¿¹»óÇß´ø °Í°ú´Â Á» ´Ù¸¦ °ÍÀÔ´Ï´Ù. ¿Ö³Ä±¸¿ä? ¿©·¯ºÐ²²¼­ fvwm°ú °°Àº À©µµ¿ì °ü¸®ÀÚ¸¦ ¾²°í °è½Ã¸é, ¿ì¸®°¡ ÀǵµÇÏÁö´Â ¾Ê¾ÒÁö¸¸ ±× ³ðÀÌ ¿ì¸®°¡ ¸¸µé°íÀÚ Çϴ âÀÇ ¸ð¾ç¿¡ °³ÀÔÇÏ°í µé¾î¿À±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ ºÎºÐ¿¡ ´ëÇÑ ¼³¸í ¶ÇÇÑ ´ÙÀ½ ¹øÀ¸·Î ¹Ì·ç±â·Î ÇÏ°í ´ÜÁö âÀÌ ¸¸µé¾îÁ³´Ù´Â °Í¸¸ È®ÀÎÇÏ°í ³Ñ¾î°¡ÁÒ. :) Á¾·á´Â ½ÇÇà½ÃŲ Å͹̳Πâ¿¡¼­ ¿£ÅÍÅ°¸¦ ÇÑ ¹ø ´­·¯ÁÖ½Ã¸é µË´Ï´Ù. ¾ÆÂü! ¿¹Á¦¿¡¼­ ¿Ö getchar()¸¦ ½è´ÂÁö ÇÑ ¹ø »ý°¢Çغ¸¼¼¿ä. ±×¸®°í, À§¿¡¼­ ¿£ÅÍ Å°°¡ ¾Æ´Ï¶ó ½ºÆäÀ̽º¹Ù °°Àº °ÍÀ» ´©¸£¸é ¿Ö Á¾·áÇÏÁö ¾Ê´ÂÁöµµ »ý°¢Çغ¸¼¼¿ä. ¾Æ·¡¿¡¼­ ±× ´äÀ» µå¸®°Ú½À´Ï´Ù. <sect1>⠾ȿ¡ ¶Ç âÀ» ¸¸µé¾î º¾½Ã´Ù. <p> ¹Ù·Î ¾Õ¿¡¼­ ¾ÆÁÖ °£´ÜÇÑ Ã¢ Çϳª¸¦ ¸¸µé¾î º¸¾ÒÁö¿ä. À̹ø¿¡´Â ±× ⠾ȿ¡´Ù ´Ù¸¥ ÀÛÀº âµéÀ» ¿©·¯ °³ ¸¸µé¾î º¸±â·Î ÇÏ°Ú½À´Ï´Ù. <itemize> <item>¿¹Á¦ 3 </itemize> <tscreen><verb> #include <X11/Xlib.h> main() { Display *d ; Window root, p, w1, w2, w3 ; unsigned long Black, White ; d = XOpenDisplay (NULL); /* ÁÖ ÇÁ·Î±×·¥ ºÎºÐ ½ÃÀÛ */ root = DefaultRootWindow(d); Black = BlackPixel(d,0); White = WhitePixel(d,0); p = XCreateSimpleWindow (d, root, 100, 100, 600, 400, 2, Black, White ); w1 = XCreateSimpleWindow (d, p, 50, 50, 200, 150, 2, Black, White ); w2 = XCreateSimpleWindow (d, p, 200, 100, 200, 150, 2, Black, White ); w3 = XCreateSimpleWindow (d, p, 350, 200, 200, 150, 2, Black, White ); XMapWindow(d, p); XMapWindow(d, w1); XMapWindow(d, w2); XMapWindow(d, w3); XFlush(d); sleep(3); XDestroySubwindows(d, p); XDestoryWindow(d, p); /* ÁÖ ÇÁ·Î±×·¥ ºÎºÐ ³¡ */ XCloseDisplay (d); } </verb></tscreen> ÀÌÁ¦´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ Á¡Á¡ º¹ÀâÇØÁö´Â °Í °°°í, ½ÇÁ¦ ÇÁ·Î±×·¥ °°¾ÆÁö´Â±º¿ä. ÇÏÁö¸¸ ±âº» »À´ë´Â º¯ÇÔÀÌ ¾ø½À´Ï´Ù! Á¦°¡ /* */·Î Ç¥½ÃÇÑ ºÎºÐ¸¸ÀÌ ´Ã¾úÀ» »Ó, ¿ì¸®´Â Ç×»ó 1. ¼­¹ö¿¡ Á¢¼Ó, 2. ¼­¹ö¿¡ ¿äû, 3. ¼­¹ö¿Í Á¢¼Ó ÇØÁ¦ ¶ó´Â ±âº»ÀûÀÎ µî½ÄÀ» ¸Ó¸® ¼Ó¿¡ µÎ°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. <sect2>¸ðµç âÀº ÀÚ½ÄâÀ» ¿©·¯ °³ °¡Áú ¼ö ÀÖ´Ù. <p> ¸ðµç âÀÇ ºÎ¸ðâÀº °á±¹ ·çƮâÀÔ´Ï´Ù. ±× ⠾ȿ¡¼­ ¸ðµç ÀÚ½ÄâµéÀÌ »ý¼ºµÇ°í Ç¥½ÃµË´Ï´Ù. ¶Ç ±× ÀÚ½ÄâµéÀº ¹Ù·Î ¶È°°Àº °úÁ¤À» ÅëÇؼ­ ÀÚ±â ÀÚ½ÅÀÇ ÀÚ½ÄâµéÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù. ¸¶Áö¸· ´Ü°èÀÇ ÀÚ½Äâµéµµ ¶ÇÇÑ ¸¶Âù°¡Áö·Î... ±×·¯ÇÑ ¿ø¸®¸¦ À̹ø ¿¹¿¡¼­ È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. »ê¾ÆÁ¦ÇÑ °°Àº °Ç ÇÊ¿ä¾ø°ÚÁÒ? :) Window Çü º¯¼ö root, p, w1, w2, w3 ÀÌ·¸°Ô ´Ù¼¸°³¸¦ ¼±¾ðÇصξú½À´Ï´Ù. root´Â DefaultRootWindow()¶ó´Â ¸ÅÅ©·Î¸¦ ÅëÇؼ­ ÇöÀç ·çƮâÀÇ ID¸¦ ±â¾ïÇÏ°í ÀÖ½À´Ï´Ù. ù¹ø° XCreateSimpleWindow ÇÔ¼ö¸¦ ÅëÇؼ­ ·çƮâÀÇ ÀÚ½ÄâÀ¸·Î¼­ p âÀ» ¸¸µé¾ú½À´Ï´Ù. µÎ¹ø° °°Àº ÇÔ¼ö¸¦ ÅëÇؼ­ À̹ø¿¡´Â À§¿¡¼­ ¸¸µé¾î ³õÀº p âÀ» ºÎ¸ðâÀ¸·Î ÇÏ´Â ÀÚ½Äâ w1 À» ¸¸µé¾ú½À´Ï´Ù. °°Àº °úÁ¤À» ÅëÇؼ­ p âÀÇ ÀÚ½Äâµé w2, w3¸¦ ¼­¹ö Ãø¿¡ ¸¸µé¾î ³õ¾Ò½À´Ï´Ù. ±ÍÂúÀ¸½Ã´õ¶óµµ â»ý¼º ÇÔ¼öµé¿¡ ÁÖ¾îÁø XY ÁÂÇ¥, â Å©±â¸¦ º¸½Ã°í âÀÌ ¾î¶»°Ô ³ªÅ¸³¯ °ÍÀÎÁö¸¦ ¿¹ÃøÇغ¸½Ê½Ã¿ä. << Àá±ñ »ý°¢Áß... >> ÄÄÆÄÀÏ ¹æ¹ýÀº ÀÌÀü°ú µ¿ÀÏÇÕ´Ï´Ù. À̹ø ¿¹Á¦¿¡¼­´Â Black, White¶ó´Â unsigned long Çü º¯¼ö µÎ °³¸¦ ¼±¾ðÇسõ°í´Â Àü¹ø ¿¹Á¦¿¡¼­µµ ¼±º¸ÀÎ ÀûÀÌ ÀÖ´Â BlackPixel(), WhitePixel()À̶ó´Â ¸ÅÅ©·Î¸¦ ½á¼­ °¢°¢ °ËÁ¤°ú Èò»öÀ» ³ªÅ¸³»´Â ¼öÄ¡¸¦ ÀúÀåÇÏ°í ÀÖ½À´Ï´Ù. â »ý¼ºÇÔ¼ö°¡ ¿©·¯ ¹ø ¾²¿´À¸¹Ç·Î ±× ¶§¸¶´Ù »ö»ó ÁöÁ¤ºÎºÐ¿¡ ¸ÅÅ©·Î¸¦ ½áÁֱ⠺¸´Ù´Â º¯¼ö¿¡ ÀúÀåÇØµÎ°í ±× º¯¼öÀÇ ÀúÀå°ªÀ» »ç¿ëÇÏ°íÀÚ Çß½À´Ï´Ù. º° °Ç ¾Æ´ÏÁÒ. ÀÚ, ¼­¹öÃø¿¡ ¸¸µé¾î ³õÀº âµéÀ» ³ªÅ¸³» ºÁ¾ß°ÚÁÒ? :) XMapWindow ÇÔ¼ö¸¦ ÅëÇؼ­ µð½ºÇ÷¹ÀÌ d ¿¡ ÀÚ½Äâ p ¸¦ Ç¥ÇöÇÕ´Ï´Ù. ±× ´ÙÀ½ 3°³ÀÇ ¹®Àåµµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. µð½ºÇ÷¹ÀÌ d ¿¡ w1, w2, w3¸¦ Ç¥ÇöÇÕ´Ï´Ù. w1, w2, w3´Â p âÀÇ ÀÚ½Äâµé·Î µî·Ï,»ý¼ºµÇ¾î Àֱ⠶§¹®¿¡ p ⠾ȿ¡ Ç¥ÇöµË´Ï´Ù. ±×¸®°í, ¸»¾¸Àº ¾Èµå·ÈÁö¸¸ ÀÚ½ÄâµéÀÇ ÁÂÇ¥°è´Â ¹Ù·Î Àü ºÎ¸ðâÀÇ ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÕ´Ï´Ù. ºÎ¸ðâÀÇ ¿ÞÂÊ À­±¸¼®ÀÌ ÀÚ½ÄâµéÀÇ ¿øÁ¡(0,0)ÀÌ µÇ´Â °ÍÀÌÁö¿ä. <sect2>ÀÚ½ÄâµéÀ» ÇѲ¨¹ø¿¡ ³ªÅ¸³»ÀÚ. <p> »ç½Ç ¸¶Áö¸· 3°³ÀÇ ¹®ÀåÀº ¾à°£ ¼ÒºñÀûÀÎ ¹®ÀåÀÔ´Ï´Ù. âÀÇ »ý¼º°ú Ç¥½Ã¶ó´Â °úÁ¤Àº º°°³ÀÇ °úÁ¤À̹ǷÎ, ÀÏ´Ü »ç¿ëÀ» À§Çؼ­ ¸î °³¸¦ »ý¼º½ÃÄѳõÀº ÈÄ, ±× ¶§ ±× ¶§ ¿øÇÏ´Â ÀÚ½Äâµé¸¸ Ç¥½ÃÇÒ ¶§´Â XMapWindow ÇÔ¼ö¸¦ ½á¾ß ÇÏ°ÚÁö¸¸, ¸¹Àº °æ¿ì ÇѲ¨¹ø¿¡ ÀÚ½ÄâµéÀ» ¸ù¶¥ Ç¥½ÃÇÏ°íÀÚ ÇÒ ¶§°¡ ¸¹°í, ±× °æ¿ì¿¡´Â Âü ¹ø°Å·ÓÁÒ? ±×·¡¼­ ¿©±â¼­ »õ·Î¿î ÇÔ¼ö Çϳª¸¦ ¼Ò°³½ÃÄÑ µå¸®°íÀÚ ÇÕ´Ï´Ù. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü XMapSubwindows ( Display * d, Window w ); </verb></tscreen> µð½ºÇ÷¹ÀÌ d ¿¡¼­ â w ÀÇ ¸ðµç ÀÚ½ÄâµéÀ» ÀÏ°ýÀûÀ¸·Î È­¸é¿¡ Ç¥½ÃÇÕ´Ï´Ù. Æí¸®¸¦ À§ÇØ Á¦°øµÇ´Â ÇÔ¼öÀÌÁö¿ä. ¾ÕÀ¸·Îµµ ¸¹Àº ÇÔ¼öµéÀÌ ±â´ÉÀº °ÅÀÇ °°À¸¸é¼­ ÀÌ·¸°Ô »ç¼ÒÇÏ°Ô ´Ù¸¥ ¿©·¯ °¡Áöµé·Î ¸¶·ÃµÇ¾î ÀÖ´Ù´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. <sect2>¾µ¸ð¾ø´Â ÀÚ¿øÀº ¾ø¾ÖÀÚ. <p> <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü : XDestroyWindow ( Display *d, Window p ); ÇÔ¼öÀÇ ¿øÇü : XDestroySubwindows ( Display *d, Window p ); </verb></tscreen> âÀ» Æı«Çعö¸®¶ó°í(Destory) ¿äûÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù. ´õ ÀÌ»ó Ç¥½ÃÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø âµéÀº ÀÚ¿øÀý¾àÀ» À§Çؼ­¶óµµ(¸Þ¸ð¸®¸¦ Â÷ÁöÇÏ°í ÀÖÀ¸´Ï±î¿ä) Á¦ ¶§ ¾ø¾ÖÁÖ´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. À§¿¡¼­º¸¸é µÎ Á¾·ùÀÇ À¯»çÇÑ ÇÔ¼ö°¡ Àִµ¥, ù¹ø° °ÍÀº ÁöÁ¤µÈ ÇϳªÀÇ Ã¢À» ¾ø¾Ö´Â °ÍÀÌ°í, µÎ¹ø°´Â ±× âÀÌ Æ÷ÇÔÇÏ°í ÀÖ´Â ¸ðµç ÀÚ½ÄâµéÀ» ã¾Æ¼­ ¾ø¾ÖÁÖ´Â °ÍÀÔ´Ï´Ù. ¹°·Ð ÀÚ½Äâµé Áß¿¡¼­ ¼±º°Çؼ­ ¾ø¾Ö·Á°í ÇÏ½Å´Ù¸é ´ç¿¬È÷ Çϳª¾¿ ¾ø¾Ö´Â ÇÔ¼öÀΠù¹ø° °ÍÀ» ¾²½Ç ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù. [¹Ù·Î Àü °­ÀÇ Áú¹®¿¡ ´ëÇÑ ´ä] Å°º¸µå ÀÔ·Â ¶ÇÇÑ ¹öÆÛ¹æ½ÄÀ̹ǷΠ½ºÆäÀ̽º¹Ù¸¦ ¸î ¹ø Ãĺ¸¾ÒÀÚ ½ÇÁ¦·Î ÇÁ·Î±×·¥ ¿¡´Â Àü´ÞÀÌ µÇÁö ¾Ê´Ù°¡ ¸®ÅÏÅ°¸¦ ¹ÞÀ¸¸é ÀϽÿ¡ Ç÷¯½¬µË´Ï´Ù. [¿À´Ã °­ÀǸ¦ ¸¶Ä¡¸é¼­...] Á¤¸» º¸Àß °Í ¾ø´Â ÇÁ·Î±×·¥ ¿¹¶ó°í »ý°¢ÇÏ½Ç Áö ¸ð¸£°ÚÁö¸¸, Á¦°¡ º¸±â¿¡´Â X À©µµ¿ì ÇÁ·Î±×·¡¹Ö¿¡¼­ âÀ» Ç¥½ÃÇÒ ÁÙ ¾Æ½Å´Ù¸é °ÅÀÇ ¹ÝÀº ¹è¿ì½Å °ÍÀ̶ó°í È®½ÇÈ÷ ¸»¾¸µå¸± ¼ö ÀÖ½À´Ï´Ù. ´õ¿í °íÂ÷¿øÀûÀ¸·Î ¹öÆ°, ´ëÈ­»óÀÚ, ¸Þ´º µîÀÇ ±×·¡ÇÈ ÀÎÅÍÆäÀ̽ºµµ °á±¹¿£ Àڱ׸¶ÇÑ Ã¢µéÀÇ °áÇÕÀÏ »ÓÀÔ´Ï´Ù. ³ªÁß¿¡ ¼Õ½±°Ô ¹Ù·Î ¿ì¸® °ç¿¡ ÀÖ´Â Athena Widget À̶ó°í ÇÏ´Â Æí¸®ÇÑ ÀÎÅÍÆäÀ̽º º¸µû¸®¸¦ »ç¿ëÇغ¸°Ô µÉ ÅÙµ¥¿ä, ¾Æ¸¶µµ ¿©·¯ºÐ ½º½º·Î Á¤¸» »ö´Ù¸¥ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé°í ½Í´Ù´Â »ý°¢ÀÌ µé°Ô µÇ½Ç °Ì´Ï´Ù. ¾öû³­ ÀÎÅÍÆäÀ̽ºÀÇ ÀÚÀ¯! ÀÌ°ÍÀº X À©µµ¿ì°¡ ´Ù¸¥ ¾î¶² GUI ½Ã½ºÅÛ º¸´Ùµµ °³¹æÀûÀÓÀ» Áõ¸íÇغ¸ÀÌ°Ô µÉ °Ì´Ï´Ù. ±â´ëÇØÁÖ¼¼¿ä. ÀÌ Â©¸·ÇÑ ¿¹¸¦, ÀÌ ¿¹¿¡¼­ º¸ÀÌ´Â ¼ø¼­¸¦ ²À ÀÌÇØÇÏ½Ã°í ¸Ó¸® ¼Ó¿¡ Ç×»ó ±â¾ïÇØ Áֽʽÿä. ¾ÆÁÖ Áß¿äÇÑ ÆÐÅÏ Áß¿¡ ÇϳªÀÔ´Ï´Ù. <sect1>ÀÌÁ¦´Â Èæ¹éÀÌ ¾Æ´Ï¶ó Ä®¶ó âÀ» ¸¸µé¾îº¾½Ã´Ù. <p> ¿À´ÃÀº ¾î¶»°Ô »ö»ó(Color)À» ¼­¹ö·ÎºÎÅÍ ¾ò¾î³»°í »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ±× µ¿¾È °è¼Ó ¹Ì·ï¿Ô´ø ÀÏÀ̱⵵ Çϱ¸¿ä... Áö±Ý±îÁö ¾Æ¹« ¼³¸í¾øÀÌ Àú´Â BlackPixel(), WhitePixel()µîÀÇ ¸ÅÅ©·Î¸¦ ¿¹Á¦¿¡¼­ ½á¿Ô½À´Ï´Ù. À̸§ÀÌ ³ªÅ¸³»µí °ËÁ¤»ö/¹é»öÀ» ±¸ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ¾úÁö¿ä. ÀÌÁ¦´Â ÀÌ°Í ¸»°íµµ ¿ì¸®°¡ ¿øÇÏ´Â »öµéÀ» ÀϹÝÀûÀ¸·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¾´Ï´Ù. »ö»ó ¶ÇÇÑ ¼­¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â ÀÚ¿øÀÇ ÇϳªÀÔ´Ï´Ù. µû¶ó¼­ âÀ» ¸¸µé¾î ´Þ¶ó°í ¼­¹ö¿¡ ¿äûÇÏ°í, Ç¥½ÃÇ϶ó°í ¿äûÇÏ´Â ÀÛ¾÷µé°ú ¸¶Âù°¡ÁöÀÇ °úÁ¤À» °ÅÄ¡°Ô µË´Ï´Ù. ¼­¹ö´Â Ä÷¯¸Ê(Color Map)À̶ó°í ÇÏ´Â °ÍÀ» °¡Áö°í ÀÖ½À´Ï´Ù. »ö»óÀ» ³ªÅ¸³»´Â Áöµµ ¶Ç´Â µµÇ¥¸¦ ¶æÇÏÁö¿ä. ÀÌ°ÍÀÌ ¾î¶² Àǹ̸¦ °¡Áö´ÂÁö Àá±ñ ¾Ë¾Æº¸°Ú½À´Ï´Ù. <sect2>Ä÷¯¸ÊÀ̶õ? <p> ÄÄÇ»ÅÍ°¡ »ç¿ëÇÏ°í ÀÖ´Â Ãâ·ÂÀåÄ¡ Áß¿¡ ºñÆ®¸Ê µð½ºÇ÷¹ÀÌ¿¡ ¼ÓÇÏ´Â CRT¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿©·¯ºÐ²²¼­ ´« ¾Õ¿¡ µÎ°í °è½Å ¸ð´ÏÅÍÀÌÁö¿ä. ÀÌ ¸ð´ÏÅÍÀÇ ¿ø¸®´Â ¿©·¯ºÐ ¸ðµÎ ¾Æ½Ã´Ù½ÃÇÇ ºûÀÇ 3¿ø»ö¿¡ ´ëÀÀÇÏ´Â 3°³ÀÇ ÀüÀÚÃÑÀÌ ¸ð´ÏÅÍ Ç¥¸é¿¡ ¹ß¶óÁ® ÀÖ´Â RGB Çü±¤¹°Áú¿¡ ¾Ë¸Â°Ô ºñÃçÁüÀ¸·Î½á ¿ì¸®°¡ ¿øÇÏ´Â ¸ðµç »öÀ» ¾ò´Â °ÍÀÔ´Ï´Ù. ¿ì¸®°¡ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ¿øÇÒ ¶§´Â ºûÀÇ 3¿ø»öÀ» ¾Ë¸Â°Ô ½á¼­ ÀüÀÚÃÑÀ» ¹ß»çÇÏÁö¿ä. ±×·±µ¥, ¹Ù·Î ¿©±â¼­ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ±¸ÇöÇÒ ¶§ °ú¿¬ ³ë¶ûÀº RGB ¸¦ °¢°¢ ¾î¶² ³óµµ·Î ¼¯¾î¾ß Çϴ°¡? º¸¶ó/ÀÚÁÖ»öÀº ¾î¶°ÇÑ°¡¸¦ ÀúÀåÇÏ°í Àִ ǥ°¡ ÇÊ¿äÇѵ¥¿ä, ¹Ù·Î ±×°ÍÀÌ Ä÷¯¸ÊÀÔ´Ï´Ù. ¼­¹ö´Â Àΰ£ÀÌ ¾Æ´Ï¶ó ±â°èÀ̱⠶§¹®¿¡ ¿ì¸®°¡ yellow¶ó°í ¸»ÇÏ¸é ¾î¶² °ÍÀÎÁö ÀüÇô ¾Ë ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. ´ÜÁö ÀڱⰡ °¡Áö°í ÀÖ´Â Ä÷¯¸Ê¿¡¼­ yellow¿¡ ÇØ´çµÇ´Â °ÍÀ» ã¾Æ¼­ ¸ð´ÏÅÍ¿¡°Ô Àû´çÇÑ ¾çÀÇ RGB Á¶ÇÕÀ» Àü´ÞÇÒ »ÓÀÔ´Ï´Ù. ¾î¶»½À´Ï±î? Ä÷¯¸ÊÀ̶ó´Â °ÍÀÌ Á¤¸» Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇÏ°í ÀÖÁö¿ä? ÀÌ°ÍÀÌ ¾û¸ÁÀÌ µÇ¸é ¾î¶»°Ô µÉ±î¿ä? ÄÄÇ»ÅÍ°¡ Á¤½Å¸øÂ÷¸®°í ³ë¶ûÀ» ¿øÇÒ ¶§ ºÐÈ«À» Ç¥½ÃÇÒ Áöµµ ¸ð¸¨´Ï´Ù. ¼­¹ö´Â ±âº»ÀûÀÎ Ä÷¯¸ÊÀ» °¡Áö°í ÀÖ½À´Ï´Ù. <sect2>¿øÇÏ´Â »öÀ» ¼±ÅÃÇϱâ À§ÇØ °ÅÄ¡´Â °úÁ¤ <p> ¾ÕÀ¸·Î »ö»óÀ» ÀÌ¿ëÇÏ´Â ¾î¶² ÀÛ¾÷µµ ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. <enum> <item>±âº» Ä÷¯¸Ê(Default ColorMap)ÀÇ ID¸¦ ¾Ë¾Æ³½´Ù. <item>À§ ±âº» Ä÷¯¸ÊÀ¸·ÎºÎÅÍ ¿øÇÏ´Â »öÀÇ Çȼ¿°ª(Pixel Value)¸¦ ¾Ë¾Æ³½´Ù. </enum> <itemize> <item>¿¹Á¦ 4 </itemize> <tscreen><verb> #include <X11/Xlib.h> main() { Display *d; Window Root, w; /* »ö»ó°ªÀ» ¾Ë¾Æ³¾ ¶§ ¾µ º¯¼öµé */ Colormap CMap; XColor color, color_exact; unsigned long Black, Blue; d = XOpenDisplay ( NULL ); /* ¿øÇÏ´Â »ö»ó °ËÁ¤/ÆĶûÀ» ¾ò´Â ºÎºÐ */ CMap = XDefaultColormap ( d, 0 ); XAllocNamedColor ( d, CMap, "black", &ero;color, &ero;color_exact ); Black = color.pixel; XAllocNamedColor ( d, CMap, "blue", &ero;color, &ero;color_exact ); Blue = color.pixel; Root = DefaultRootWindow ( d ); w = XCreateSimpleWindow ( d, Root, 100, 100, 600, 400, 2, Black, Blue ); XMapWindow ( d, w ); XFlush ( d ); sleep(10); XDestroyWindow ( d, w ); XCloseDisplay ( d ); } </verb></tscreen> À§ÀÇ ¿¹¸¦ »ìÆ캸½Ã¸é, »ö»ó°ª(unsigned longÇü °ª) Çϳª ¾ò´Â°Ô ±×·¸°Ô ½¬¿î °ÍÀº ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¹ß°ßÇϼÌÀ» °Ì´Ï´Ù. ¸Ç ¸ÕÀú ÇؾßÇÒ ÀÏÀº Ä÷¯¸ÊÀÇ ID¸¦ ¼­¹ö·ÎºÎÅÍ ¾Ë¾Æ³»´Â °ÍÀÔ´Ï´Ù. Colormap Çü º¯¼ö CMapÀ» Çϳª ¼±¾ðÇصξú½À´Ï´Ù. ±×¸®°í ³ª¼­ XDefaultColormap() ÇÔ¼ö¸¦ ½á¼­ ÇöÀçÀÇ ¼­¹ö, ÇöÀçÀÇ ±âº» È­¸é(0¹ø È­¸é)ÀÇ ±âº» Ä÷¯¸Ê ID¸¦ ¹Ýȯ¹Þ½À´Ï´Ù. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü Colormap XDefaultColormap ( Display *d, int screen_no ); </verb></tscreen> ÀÌÁ¦ Ä÷¯¸ÊÀ» ¾Ë¾Æ³ÂÀ¸´Ï, ¿ì¸®°¡ ¿øÇÏ´Â »öÀÇ Çȼ¿°ªÀ» ¾Ë¾Æ³»º¾½Ã´Ù. ÀÌ ¶§¿¡´Â XColor Çü º¯¼ö µÎ °³°¡ ÇÊ¿äÇÕ´Ï´Ù. ±×¸®°í XAllocnamedColor ÇÔ¼ö¸¦ ½á¼­ ¼­¹ö´õ·¯ ÇÔ¼ö¿¡ ÁÖ¾îÁø Ä÷¯¸Ê¿¡¼­ ¿ì¸®°¡ ¿øÇÏ´Â »ö»óÀ̸§À» ã¾Æ¼­ ±× »ö»ó À̸§¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ XColorÇü º¯¼ö¿¡ ÀúÀåÇϵµ·Ï ¿äûÇÕ´Ï´Ù. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü Status XAllocNamedColor( Display *d, Colormap cmap, _XConst char* color_name, XColor *screen_def_return, XColor *exact_def_return ); </verb></tscreen> ¿©±â¼­ ³ª¿À´Â »õ·Î¿î ÀÚ·áÇü¿¡ ´ëÇؼ­ Áö±Ý ¸ðµÎ ¾Æ½Ç ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¾Æ¼Å¾ß ÇÑ´Ù°í »ý°¢ÇÒ ¶§ ²À ÀÚ¼¼È÷ ¼³¸íµå¸®°Ú½À´Ï´Ù. ÇÔ¼öÀÇ À̸§ ÀÚü°¡ »ó´çÈ÷ ±æ°í ¼³¸íÀûÀ̱⠶§¹®¿¡ ±× ³»¿ëÀ» ¾Ë¾Æº¸±â ÁÁ½À´Ï´Ù. ¹°·Ð ŸÀÌÇÎÇϱâ´Â ¿©°£ Èûµç°Ô ¾Æ´ÏÁÒ? ÀÌ ÇÔ¼ö´Â À̸§¿¡¼­µµ µå·¯³ªµíÀÌ Named Color Áï À̸§ÀÌ ºÙ¾î ÀÖ´Â »ö»ó¿¡ ´ëÇÏ¿©, ¿ì¸®°¡ ÀÌ ÇÔ¼ö¿¡ ÁÖ¼Ò·Î Àü´ÞÇØÁÖ´Â XColor Çü º¯¼ö µÎ °³¿¡ ¾Ë¸Â´Â Á¤º¸¸¦ ÇÒ´ç(Allocation)ÇØÁÝ´Ï´Ù. Çϳª´Â ½ºÅ©¸° ±âº»°ªÀ¸·Î¼­ Çϵå¿þ¾îÀûÀ¸·Î °¡Àå ±Ù»çÇÏ°Ô ½ÇÇö½Ãų ¼ö ÀÖ´Â Á¤º¸°¡ µé¾î°¡°í, ³ª¸ÓÁö Çϳª´Â ÁöÁ¤ÇÑ »öÀÇ Á¤È®ÇÑ Á¤º¸°¡ µé¾î°£´Ù°í ÇÕ´Ï´Ù. ¿ì¸®´Â ÀüÀÚ¸¸ »ç¿ëÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù. ¾µ¸¸ÇÑ ±×·¡ÇÈ ÇÁ·Î±×·¥À» ¸¸µé±â À§Çؼ­´Â ¾ÆÁÖ Á¤È®ÇÏ°Ô ¾Ë¾Æ¾ß ÇÏ°ÚÁö¸¸ Áö±Ý Á¦°¡ ÇÏ°íÀÚ ÇÏ´Â °­ÀÇ´Â À绡¸® X ÇÁ·Î±×·¡¹Ö Àü¹Ý¿¡ ´ëÇÏ¿© ÈȾ´Â ¼öÁØÀÌ´Ï ÀÌÇØÇϼ¼¿ä. À¸À×? ±×·±µ¥ À̸§ÀÌ ÀÖ´Â »ö»óÀ̶ó´Ï... ÇÏ½Ç ºÐµéÀÌ °è½Ç °Í °°±º¿ä. Àü¹ø fvwm °­ÀÇ Áß »ö»ó¼³Á¤ °­ÀÇ ¶§ showrgb ¶ó´Â ¸í·ÉÀ» ±â¾ïÇϽʴϱî? ½© »óÅ¿¡¼­ showrgb Çغ¸½Ê½Ã¿ä. ±×·¯¸é ÇöÀç ¼­¹ö°¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â À̸§ºÙÀº »ö»óµé ¸ñ·ÏÀÌ RGB °ª°ú ÇÔ²² ÁÖ·ç·è ³ªÅ¸³ª°Ô µÉ °Ì´Ï´Ù. ¹Ù·Î ±× ¸ñ·Ï¿¡ ÀÖ´Â °Íµé¸¸À» ¸»ÇÕ´Ï´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â red, yellow, blue, green µîÀÌ ¹Ù·Î ±×°ÍÀÔ´Ï´Ù. À̺¯ÀÌ ¾ø´Â ÇÑ, ½ÇÆÐÇÏÁö ¾ÊÀ»Å×´Ï »ç½ÇÀº int Çü º¯¼öÀÎ Status¿¡´Â 0ÀÌ ¾Æ´Ñ True °ªÀÌ ¹ÝȯµÇ¾î ¿É´Ï´Ù. ¸¸¾à¿¡ ¹®Á¦°¡ ¹ß»ýÇß´Ù¸é False, 0 ÀÔ´Ï´Ù. ÀÌÁ¦´Â Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â XColor Çü º¯¼ö¸¦ ½á¼­ °á±¹¿¡ ¿ì¸®°¡ ¾Ë°í ½Í¾ú´ø °ªÀ» ¾Ë¾Æ³»º¾½Ã´Ù. XColor Çü º¯¼ö´Â Xlib.h ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â ±¸Á¶Ã¼ º¯¼ö·Î¼­ ¸î °³ÀÇ »ö»ó¿¡ ´ëÇÑ Á¤º¸¸¦ Áö´Ï°í ÀÖ´Ù°í º¸½Ã¸é µË´Ï´Ù. ¿ì¸®°¡ »ç¿ëÇÒ°ÍÀº ±× Áß¿¡ unsigned long Çü ¸â¹öÀÎ pixel ¸â¹öÀÔ´Ï´Ù. ±× °ªÀ» Black À̳ª Blue º¯¼ö¿¡ ÀúÀå½ÃÄÑ ³õÀ¸¸é µÇ´Â °ÍÀÌÁö¿ä. <sect2>¿ä¾à <p> »ö»óÀº ¼­¹ö°¡ °ü¸®ÇÏ´Â ÀÚ¿øÀÔ´Ï´Ù. À̸¦ »ç¿ëÇϱâ À§Çؼ­´Â XDefaultColormap ÇÔ¼ö¸¦ ½á¼­ ±âº»ÀûÀÎ Ä÷¯¸Ê ID¸¦ ¾Ë¾Æ³½ ÈÄ, XAllocNamedColor ÇÔ¼ö¸¦ ÅëÇؼ­ ƯÁ¤ À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ XColor Á¤º¸¸¦ ¾Ë¾Æ³À´Ï´Ù. ±×¸®°í ³ª¼­ XColor ±¸Á¶Ã¼ÀÇ pixel ¸â¹ö°ªÀ» Àо½Ã¸é µË´Ï´Ù. ±×·±µ¥, »ö»ó ÇϳªÀÇ Çȼ¿°ªÀ» ¾Ë±â À§Çؼ­ Ç×»ó ÀÌ·¸°Ô ¸¹Àº °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Ù´Ï, Á» ³Ê¹«ÇÑ °Í °°ÁÒ? ±×·¸´Ù¸é, ¿©·¯ºÐ²²¼­ »ö»óÀ̸§À» Àü´ÞÇØÁÖ¸é, ±× »ö»ó¿¡ °üÇÑ Çȼ¿°ªÀ» ¹ÝȯÇØÁÖ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ½Ã¸é µÉ °Ì´Ï´Ù. ²À ÇÑ ¹ø ¸¸µé¾îº¸¼¼¿ä. Ã¥À» °¡Áö°í °è½Å ºÐµéÀº ¾Æ½Ç Áöµµ ¸ð¸£°Ú³×¿ä. :) <sect1>¸¸µé¾î ³õÀº â °¡Áö°í ³î±â <p> ¿À´ÃÀº ¿ì¸®°¡ ÀÌ¹Ì ¸¸µé¾î ³õÀº âµé¿¡ ´ëÇؼ­ À̸®Àú¸® ¸¶À½²¯ ³î¾Æº¸°Ú½À´Ï´Ù. âÀÇ »ö±òÀ» ¹Ù²Û´ÙµçÁö, âÀÇ Å©±â¸¦ ¹Ù²Û´ÙµçÁö, ¾ø¾Ý´Ù°¡ ´Ù½Ã ³ªÅ¸³ª°Ô ÇÑ´ÙµçÁö ... ¹¹ ÀÌ·± ³îÀ̸¦ ÇÏ·Á°í ÇÕ´Ï´Ù. <sect2>ÀÌ¹Ì ¸¸µé¾î ³õÀº â »ö±ò ¹Ù²Ù±â <p> À쫆 ̢À» ¸¸µå½Ç ¶§ ¹è°æ»ö°ú Å׵θ®»öÀ» °áÁ¤Çسõ±â´Â ÇßÁö¸¸, »ç¶÷À̶õ°Ô ¸¶À½ÀÌ ´Þ¶óÁú ¶§µµ ÀÖ´Â °Í ¾Æ´Ï°Ú¾î¿ä? ÀÚ, ÀÌ¹Ì Ç¥½ÃµÇ¾î Àִ âÀ» ±×´ë·Î ³öµÐ ä »ö±ò¸¸ ÇÑ ¹ø ¹Ù²Ù¾î º¾½Ã´Ù. ¿©·¯ºÐÀÌ ¸¶À½¿¡ µå´Â »öÀ» °ñ¶óº¸¼¼¿ä. ¹Ù·Î Àü ½Ã°£¿¡ ¸»¾¸µå¸° »ö»ó Á¤º¸ ¾Ë¾Æ³»±â´Â ±â¾ïÇÏ°í °è½ÃÁÒ? <enum> <item>Å׵θ®(Border)»ö º¯È­ <tscreen><verb> XSetWindowBorder ( Display *d, Window w, unsigned long border_pixel ); </verb></tscreen> <item>¹è°æ(Background)»ö º¯È­ <tscreen><verb> XSetWindowBackground ( Display *d, Window w, unsigned long background_pixel ); </verb></tscreen> </enum> ¼³¸íÀÌ ÇÊ¿äÇÑ°¡¿ä? Àμö·Î ÁÖ¾îÁö´Â Window Çü º¯¼ö´Â ¿ì¸®°¡ »öÀ» º¯È­½ÃÅ°°íÀÚ ÇÏ´Â ´ë»ó âÀ» ³ªÅ¸³»´Â º¯¼ö¸¦ ¾²¸é µÇ°í¿ä, Çȼ¿°ªÀº ¿©·¯ºÐ²²¼­ ¿øÇϽô »öÀÇ Çȼ¿°ªÀ» Àú¹ø °­ÀÇ¿¡¼­Ã³·³ ±¸Çϼż­ Àü´ÞÇÏ½Ã¸é µÇ°í... ÀÚ, ¿¹Á¦ 3 ¹øÀÇ 10ÃÊ °£ Áö¿¬ ÇÔ¼ö(sleep) µÚ¿¡´Ù ¿©·¯ºÐ²²¼­ Çѹø ÀÌ ÇÔ¼öµéÀ» ÀÌ¿ëÇؼ­ »ö»óÀ» ¹Ù²Ù¾îº¸½Ê½Ã¿ä. ÀØÁö ¸¶½Ç °ÍÀº XFlush¸¦ ÇØÁÖ¼Å¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. XFlush¸¦ ÇØÁÖ½Ã°í ³ª¼­ ¶Ç ´Ù½Ã sleep ÇÔ¼ö¸¦ ¾²¼Å¾ß ±× °á°ú¸¦ È®ÀÎÇÏ½Ç ¼öÀÖ°ÚÁö¿ä? << »ý°¢ Áß... >> ¿©·¯ºÐ, Á» ¾î·Á¿î°¡¿ä? ±×·¯¸é Á¦°¡ Çغ» °á°ú¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù. ¿¹Á¦ 3 ¿¡ Ãß°¡ sleep(10); ¹®Àå ´ÙÀ½ºÎÅÍÀÔ´Ï´Ù. <tscreen><verb> XAllocNamedColor( d, CMap, "green", &ero;color, &ero;ExactColor ); XSetWindowBorder( d, w, color.pixel ); XAllocNamedColor( d, CMap, "peachpuff", &ero;color, &ero;ExactColor ); XSetWindowBackground( d, w, color.pixel ); /* ??? */ XFlush ( d ); sleep(5); </verb></tscreen> µîµî... ¼³¸íÀ» µå¸®ÀÚ¸é, Àü¹ÝºÎ¿¡¼­´Â green »öÀÇ Çȼ¿°ªÀ» ¾Ë¾Æ³»¼­ Å׵θ®»öÀ» º¯È­½ÃÄ×°í, ÈĹݺο¡¼­´Â peachpuff »öÀ¸·Î ¹è°æ»öÀ» ¹Ù²Ù¶ó°í Áö½ÃÇß½À´Ï´Ù. ±×¸®°í ²À ¹°³»¸®´Â °Í ÀØÁö ¸¶½Ê½Ã¿ä.(flush) ÇÏÁö¸¸ ÀÌ·¸°Ô ÇÑ´Ù°í Çؼ­ ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ¾ÆÁ÷ ºÎÁ·ÇÑ °ÍÀÌ Çϳª ÀÖ½À´Ï´Ù. ±×°ÍÀº ´ÙÀ½°ú °°Àº ÇÔ¼öÀÔ´Ï´Ù. 3. â ¹è°æÀ» Áö¿ì´Â ÇÔ¼ö, ¾Æ´Ï ´Ù½Ã Ä¥ÇÏ´Â ÇÔ¼ö!!! <tscreen><verb> XClearWindow ( Display *d, Window w ); </verb></tscreen> ÇÔ¼öÀÇ À̸§¿¡¼­ º¸À̵í, âÀ» Áö¿ì´Â, Á¤È®È÷ ¸»Çؼ­ âÀÇ ¹è°æÀ» Áö¿ì´Â ÇÔ¼öÀÔ´Ï´Ù. ´õ¿í »ó¼¼È÷ ¸»¾¸µå¸®ÀÚ¸é, ÇöÀçÀÇ ¹è°æÀ» Áö¿ì°í, ÇöÀç âÀÇ Á¤º¸ Áß ¹è°æ»ö¿¡ ÇØ´çÇÏ´Â »öÀ¸·Î ´Ù½Ã Ä¥ÇØÁÖ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¹è°æÀ» ¹Ù²Ù½Ã°íÀÚ ÇÒ ¶§´Â ÇÑ ¹ø âÀ» Áö¿öÁֽôø°¡ ¾Æ´Ï¸é ±×¿Í ¶È°°Àº È¿°ú¸¦ °®´Â ÀÏÀ» ÇØÁÖ½Ã¸é µË´Ï´Ù. ±×°ÍÀÌ ¹«¾ùÀ̳ı¸¿ä? âÀ» UnMap Çß´Ù°¡ ´Ù½Ã MapÇÏ½Ã¸é µË´Ï´Ù. µû¶ó¼­ Á¦°¡ À§¿¡¼­ /* ??? */ ¶ó°í ÇÑ ºÎºÐ¿¡ ´ÙÀ½°ú °°ÀÌ ½á³Ö¾îÁֽʽÿä. <tscreen><verb> XClearWindow ( d , w ); </verb></tscreen> âÀÇ Å׵θ®¿Í ¹è°æ»öÀ» ¹Ù²Ù´Â ÇàÀ§´Â â Á¶ÀÛ¿¡ À־ ¾ÆÁÖ ±âº»ÀûÀÎ ÇàÀ§ÀÓÀº ¹°·ÐÀÌ°Å´Ï¿Í ¾ÆÁÖ Áß¿äÇÑ ÇàÀ§À̱⵵ ÇÕ´Ï´Ù. ¿©·¯ºÐÀÌ X À©µµ¿ì ÇÁ·Î±×·¥¿¡¼­ ¸ÅÀÏ º¸½Ã´Â ¹öÆ°µéÀ» º¸¼¼¿ä. Æ÷ÀÎÅ͸¦ °¡Á®´Ù ´ë¸é Å׵θ®³ª ±× ÀÚü »öÀÌ º¯ÇÏ´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. °á±¹¿¡´Â ±× ¹öÆ°µµ Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ Ã¢À¸·Î ÀÌ·ç¾îÁ® ÀÖ´Â °Í¿¡ ºÒ°úÇÕ´Ï´Ù. ¸Þ´ºµµ ±×·¯ÇÏ°í¿ä. X À©µµ¿ì´Â ±×¾ß¸»·Î ¾ÆÁÖ Âزô¸¸ âºÎÅÍ ½ÃÀÛÇؼ­ Å͹̳Πâ°ú °°Àº Å« âµéÀ» Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. <sect2>â¿¡ ´ëÇÑ ¿©·¯ Á¤º¸¸¦ ¾Ë¾Æ³À½Ã´Ù. <p> ¸¹Àº ºÐµé²²¼­ geometry¶ó´Â ´Ü¾î¸¦ º¸½Å ÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. Geometry¶ó ÇÔÀº â¿¡ ´ëÇÑ ´ÙÀ½°ú °°Àº Á¤º¸¸¦ ¸»ÇÕ´Ï´Ù. âÀÇ ÁÂÇ¥(¹°·Ð âÀÇ ¿ÞÂÊ À­±¸¼® ÁÂÇ¥¸¦ ¸»ÇÏ°ÚÁÒ?), Æø°ú ³ôÀÌ, Å׵θ® µÎ²² µî. »ç°¢Çü âÀÇ ±âº» ¿ä¼ÒµéÀ̶ó°í ÇÒ ¼ö ÀÖ´Â °ÍÀÌÁÒ. â Àü¹Ý¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Á®´Ù ÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÇÔ¼ö Çϳª¸¦ ¸ÕÀú ¼Ò°³ÇÏ°Ú½À´Ï´Ù. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h>¿¡ ¼±¾ð Status XGetGeometry ( Display *display, Window drawable_object, Window root_ID, int *x, int *y, unsigned *width, unsigned *height, unsigned *border_width, unsigned *depth ) </verb></tscreen> <descrip> <tag>ÇÔ¼ö¿¡ ´ëÇÑ ¼³¸í :</tag> Geometry Á¤º¸¸¦ °¡Á®¿À´Â(Get) ÇÔ¼öÀÔ´Ï´Ù. ù¹ø° Display Çü Æ÷ÀÎÅÍ´Â ÇöÀç ÀÛ¾÷ ÁßÀÎ µð½ºÇ÷¹ÀÌ IDÀÌ°í, µÎ¹ø° Window Çü º¯¼ö´Â ¹Ù·Î ¿ì¸®°¡ geometry Á¤º¸¸¦ ¾Ë¾Æ³»°íÀÚ ÇÏ´Â ´ë»ó âÀÇ IDÀÔ´Ï´Ù. ±× ´ÙÀ½ º¯¼öµéÀº Çϳª°°ÀÌ Æ÷ÀÎÅÍ º¯¼öµéÀÔ´Ï´Ù. ¿©·¯ºÐµµ C ÇÁ·Î±×·¡¹ÖÀ» Çغ¸¼Å¼­ ¾Æ½Ã°ÚÁö¸¸, ¾î¶² ÇÔ¼öµç ¹Ýȯ°ªÀº Çϳª ¹Û¿¡ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ ±× ÇÔ¼ö¸¦ ÅëÇØ ¿©·¯ °³ÀÇ ¹Ýȯ°ªÀ» °¡Áö°íÀÚ ÇÒ ¶§ ¾²´Â ±â¼úÀÌ ¹Ù·Î ±× ÇÔ¼ö¿¡°Ô ÁÖ¼Ò ÁöÁ¤ ¹æ½ÄÀÇ È£Ãâ(Call by Reference), Áï Æ÷ÀÎÅÍ·Î º¯¼ö¸¦ Àü´ÞÇØÁÖ´Â ¹æ½ÄÀÔ´Ï´Ù. ±× ÇÔ¼ö¿¡¼­ ±× º¯¼öÀÇ ³»¿ë¿¡ ¾Ë¸Â´Â °ªÀ» ½áÁÖ¸é µÇ´Ï±î¿ä. ±×·¸½À´Ï´Ù. ¼¼¹ø° º¯¼öµéºÎÅÍ´Â ¿ì¸®°¡ ¾Ë°í ½ÍÀº Á¤º¸µéÀ» °¡Áö°í ¿Ã º¯¼öµéÀÔ´Ï´Ù. ¼¼¹ø° WindowÇü º¯¼ö´Â µÎ¹ø° Àμö¿¡¼­ ÁÖ¾îÁø ID¸¦ °®´Â âÀÌ ¼ÓÇÑ ROOT âÀÇ ID¸¦ ¹ÝȯÇÕ´Ï´Ù. Àú·Î¼­´Â ¾ÆÁ÷µµ ¿Ö ¼¼¹ø° Àμö¸¦ ÁÖ¾î¾ß ÇÏ´ÂÁö ±× Çʿ伺À» ÀÌÇØÇÒ ¼ö´Â ¾øÁö¸¸, È¥µ¿Çϼż­´Â ¾ÈµÇ´Â °ÍÀº ¾î¶² âÀÌ ¼ÓÇÏ´Â ÀÚ½ÅÀÇ ºÎ¸ðâ ID°¡ ¹ÝȯµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó Àý´ëÀûÀ¸·Î ROOT âÀÇ ID°¡ ¹ÝȯµÈ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ³×¹ø° Àμö´Â x ÁÂÇ¥, ´Ù¼¸¹ø° Àμö´Â y ÁÂÇ¥, ±× ´ÙÀ½Àº Æø, ³ôÀÌ, Å׵θ® µÎ²²ÀÔ´Ï´Ù. ±×¸®°í ¸¶Áö¸·Àº Depth Áï ±íÀ̸¦ ¸»Çϴµ¥, ÀÌ°ÍÀº ÇöÀç â¿¡¼­ »ö±òÀ» ±¸ÇöÇϴµ¥ ÀÖ¾î ¸î ºñÆ®¸¦ »ç¿ëÇÏ°í Àִ°¡¸¦ ¸»ÇØÁÝ´Ï´Ù. ÀÌ ¼ýÀÚ°¡ 8À̸é 8 ºñÆ® Ä®¶ó(8bpp) Áï 256 Ä®¶ó°¡ µÇ°ÚÁÒ? 16 bpp´Â 65536 Ä®¶ó, 24 bpp´Â 16¸¸ 7õ Ä®¶ó(16,777,216)¸¦ ¸»ÇÕ´Ï´Ù. ÀÚ, ¿ô±â´Â »ç½ÇÀº À§¿¡¼­ ¾Ë¾Æ³¾ ¼ö ÀÖ´Â x, y ÁÂÇ¥´Â ±× âÀÌ ¼ÓÇÑ ºÎ¸ðâÀÇ ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÑ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¸¸¾à ·çƮâÀÌ A âÀ» Æ÷ÇÔÇÏ°í, A âÀÌ ´Ù½Ã B âÀ» Æ÷ÇÔÇÑ´Ù°í ÇսôÙ. B â¿¡ ´ëÇÏ¿© XGetGeometry ÇϽøé, ¼¼¹ø° Àμö¿¡´Â ROOTâÀÇ ID°¡, x, y º¯¼ö¿¡´Â A âÀÇ ¿ÞÂÊ À­±¸¼®À» (0,0)À¸·Î ÇÏ´Â ÁÂÇ¥°è¸¦ ¾²´Â »ó´ëÀûÀÎ B âÀÇ ÁÂÇ¥°è°¡ ¹ÝȯµÇ¾î ¿É´Ï´Ù. <tag>µ¡ºÙÀÌ´Â ¸» ÇÑ ¸¶µð :</tag> ¸¶Áö¸·À¸·Î µ¡ºÙÀÌ°íÀÚ ÇÏ´Â »ç½ÇÀº ÀÌ·¸½À´Ï´Ù. ¿©·¯ºÐ²²¼­ Xlib.h È­ÀÏ¿¡¼­ XGetGeometry ÇÔ¼ö¸¦ ã¾Æ¼­ ½ÇÁ¦ ³»¿ëÀ» º¸½Ã¸é µÎ¹ø° º¯¼öÀÇ ÀÚ·áÇüÀº Window ÇüÀÌ ¾Æ´Ï¶ó ½ÇÁ¦·Î´Â Drawable Áï ¹«¾ùÀΰ¡¸¦ ±×¸± ¼ö ÀÖ´Â ´ë»óÀ¸·Î µÇ¾î ÀÖ´Ù´Â °ÍÀ» ¹ß°ßÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ±×°Í¿¡ ´ëÇÑ ¼³¸íÀº ´Ù½Ã µÚ·Î ¹Ì·ì´Ï´Ù. ¾îÂî µÇ¾úµç Drawable Çü ÀÚ·á¿¡´Â Window ÇüÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. </descrip> <sect2>ÀÌÁ¦´Â âÀÇ geometry¸¦ ¹Ù²Ù¾î º¾½Ã´Ù. <p> âÀÇ geometry¸¦ ¹Ù²Ù´Â ÇÔ¼öµéÀ» ¿©±â¿¡ ¼Ò°³ÇÕ´Ï´Ù. <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h>¿¡ ¼±¾ð XMoveWindow ( Display *display, Window w, int x, int y ); XResizeWindow ( Display *display, Window w, unsigned int width, unsigned int height ); XSetWindowBorderWidth ( Display *display, Window w, unsigned int border_width ); </verb></tscreen> ù¹ø° ÇÔ¼ö´Â âÀÇ À§Ä¡¸¦ ÁÖ¾îÁø x, y ÁÂÇ¥°ª¿¡ µû¶ó À̵¿½ÃÅ°´Â ³à¼®ÀÔ´Ï´Ù. ¹°·Ð ÁÂÇ¥´Â ºÎ¸ðâ ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÕ´Ï´Ù. µÎ¹ø° ÇÔ¼ö´Â Resize Áï Å©±â º¯È­½ÃÅ°´Â ÇÔ¼ö·Î¼­ ÁÖ¾îÁø Æø&³ôÀÌ °ª¿¡ µû¶ó Å©±â¸¦ º¯È­½Ãŵ´Ï´Ù. ¼¼¹ø°´Â ¹«½¼ ÀÏÀ» ÇÏ´ÂÁö ¼³¸íÇصå·Á¾ß Çϳª¿ä? ³×, ¸Â½À´Ï´Ù. Å׵θ® ÆøÀ» º¯È­½Ãŵ´Ï´Ù. ¿À´ÃÀÇ ¸ðµç ³»¿ëÀ» ´ã°í ÀÖ´Â ¿¹Á¦¸¦ Àû¾îµå¸®°í ¿À´Ã °­ÀǸ¦ ¸¶Ä¥±î ÇÕ´Ï´Ù. ÇÑ ¹ø ¿©·¯ºÐµé²²¼­ ºÐ¼®Çغ¸¼¼¿ä. <itemize> <item>¿¹Á¦ 6 </itemize> <tscreen><verb> /* âÀÇ »ö»ó º¯È­¿Í Geometry º¯È­ */ #include <X11/Xlib.h> /* ÇÔ¼ö ¼±¾ð */ unsigned long UsrColorPixel( Display*, char* ); int main() { Display *d; Window w0, w1, w2; /* One TopLevel Window &ero; Two Child Windows */ unsigned long black_pixel; int w_X1, w_Y1, w_X2, w_Y2; /* µÎ ÀÚ½ÄâÀÇ À§Ä¡ ÁÂÇ¥ */ unsigned int width, height, I; /* ÀÚ½ÄâÀÇ Æø &ero; ³ôÀÌ */ /* ¼­¹ö¿Í Á¢¼ÓÇϱ⠱׸®°í º¯¼öµéÀ» ÃʱâÈ­ */ d = XOpenDisplay ( NULL ); black_pixel = BlackPixel ( d, 0 ); width = 200; height = 100; w_X1 = 10; w_Y1 = 10; w_X2 = width - 10; w_Y2 = height - 10; /* ÀÚ, ½ÃÀÛÇغ¼±î¿ä? */ printf( "I will make windows.\n" ); sleep( 2 ); /* â Çϳª ±×¸®°í ÀÚ½Äâ 2°³ »ý¼º */ w0 = XCreateSimpleWindow ( d, DefaultRootWindow( d ), 100, 100, width*2, height*2, 1, black_pixel, WhitePixel( d, 0 ) ); w1 = XCreateSimpleWindow ( d, w0, w_X1, w_Y1, width, height, 1, black_pixel, UsrColorPixel( d, "magenta" ) ); w2 = XCreateSimpleWindow ( d, w0, w_X2, w_Y2, width, height, 3, black_pixel, UsrColorPixel( d, "blue" ) ); /* â°ú ÀÚ½ÄâÀ» È­¸é»ó¿¡ Ç¥½Ã */ XMapWindow( d, w0 ); XMapSubwindows( d, w0 ); XFlush( d ); printf( "Unmap &ero; Map.\n" ); sleep( 3 ); /* â Çϳª¸¦ UNMAP, MAP */ XUnmapWindow( d, w1 ); XFlush( d ); sleep( 1 ); XMapWindow( d, w1 ); XFlush ( d ); printf( "I will change the color of windows.\n" ); sleep( 3 ); /* â ÇϳªÀÇ »ö»óÀ» º¯°æ */ XSetWindowBorder( d, w2, UsrColorPixel( d, "red" ) ); XSetWindowBackground( d, w2, UsrColorPixel( d, "green" ) ); XClearWindow( d, w2 ); XFlush( d ); sleep( 1 ); XSetWindowBackground( d, w0, UsrColorPixel( d, "yellow" ) ); XClearWindow( d, w0 ); XFlush( d ); printf( "I will move windows.\n" ); sleep( 3 ); /* â Çϳª¾¿ À̵¿ */ for ( ; w_X1 < width - 10 ; ) { XMoveWindow( d, w1, w_X1++, w_Y1 ); XFlush( d ); } for ( ; w_X1 > 10 ; ) { XMoveWindow( d, w1, w_X1--, w_Y1 ); XFlush( d ); } for ( ; w_Y2 > 10 ; ) { XMoveWindow( d, w2, w_X2, w_Y2-- ); XFlush( d ); } for ( ; w_Y2 < height - 10 ; ) { XMoveWindow( d, w2, w_X2, w_Y2++ ); XFlush( d ); } printf( "I will change the size of windows.\n" ); sleep( 3 ); /* âÀÇ Å©±â¸¦ È®Àå/Ãà¼Ò */ XResizeWindow ( d, w1, width + 100, height + 50 ); XMoveResizeWindow ( d, w2, w_X2 + 50, w_Y1 + 20, width - 100, height - 50 ); /* XMoveResize !!! */ XFlush ( d ); printf( "At last, I will change the width of borders.\n" ); sleep( 3 ); /* âÀÇ Å׵θ® È®Àå */ for ( I = 1 ; I < 20 ; I++ ) { XSetWindowBorderWidth ( d, w2, I ); XFlush( d ); } printf( "Jobs done. Merci.\n" ); sleep( 3 ); /* â Æı« &ero; ¼­¹ö¿ÍÀÇ Á¢¼Ó ÇØÁ¦ */ XUnmapWindow( d, w0 ); XUnmapSubwindows( d, w0 ); XDestroySubwindows( d, w0 ); XDestroyWindow( d, w0 ); XCloseDisplay( d ); return 0; /* ¼º°øÀûÀ¸·Î ÇÁ·Î±×·¥À» ¼öÇà */ } /* UsrColorPixel() : ÁÖ¾îÁø À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ ±âº» Ä÷¯¸ÊÀÇ Çȼ¿°ª ¹Ýȯ */ unsigned long UsrColorPixel( display, name ) Display *display; char *name; { Colormap cmap; XColor c0, c1; cmap = DefaultColormap( display, 0 ); XAllocNamedColor( display, cmap, name, &ero;c0, &ero;c1 ); /* ¿©±â¼­ ¿ì¸®´Â c1 À» ¾ÆÁ÷ ÀÌ¿ëÇÏÁö ¾Ê½À´Ï´Ù. */ return ( c0.pixel ); } </verb></tscreen> ¿©±â±îÁö°¡ ¿¹Á¦ 6 ÀÔ´Ï´Ù. ¸¶Áö¸·¿¡ »ç¿ëÀÚ Á¤ÀÇÇÔ¼ö UsrColorPixel()Àº ¹Ù·Î Àü ½Ã°£¿¡ Á¦°¡ ¹®Á¦·Î ³»µå·È´ø °Í¿¡ ´ëÇÑ ´ä Áß ÇϳªÀÔ´Ï´Ù. ¿©·¯ºÐµé²²¼­ °¢ÀÚ ÀڽŸ¸ÀÇ Á¤ÀÇÇÔ¼ö¸¦ ¸¸µé¾î ³õÀ¸¼Ì°ÚÁö¿ä? Àú¶û ºñ±³ÇØ º¸½Ê½Ã¿ä. ÀÌ ¿¹Á¦¸¦ º¸½Ã¸é¼­ ÇÑ ÁÙ ÇÑ ÁÙÀÌ ¾î¶² ÀÏÀ» ÇÏ°Ô µÉ °ÍÀÎÁö ¹Ì¸® ¸Ó¸® ¼Ó¿¡¼­ ±×·Áº¸½Ã°í, ¹ø°Å·Î¿ì½Ã´õ¶óµµ ²À ¿¹Á¦¸¦ Àڱ⠼ÕÀ¸·Î ŸÀÌÇÎÇϽø鼭( »ó´çÇÑ ³ë°¡´ÙÁÒ? :) ) ÇÔ¼ö ÇϳªÇϳª¸¦ ÀÍÈ÷½Ã±â ¹Ù¶ø´Ï´Ù. ¸ðµç ÇÔ¼öµéÀÌ ¿Ö ±×·¸°Ô ¾²¿©Á®¾ß Çϴ°¡, ¿Ö ±×·¸°Ô ¹Û¿¡ ¸¸µéÁö ¸øÇߴ°¡¿¡ ´ëÇؼ­µµ »ý°¢ÇØÁÖ½Ã¸é ´õ¿í ÁÁ±¸¿ä. ±× ´ÙÀ½, ÀÌ ¿¹Á¦ ¼Ó¿¡´Â Á¦°¡ ¼³¸íµå¸®Áö ¾ÊÀº ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ±× ÇÔ¼ö´Â ¿©·¯ºÐ²²¼­ ÈûµéÀÌÁö ¾Ê°í ±× ÀÇ¹Ì¿Í »ç¿ë¹ýÀ» ¾Æ½Ç ¼ö ÀÖÀ» °Å¶ó°í »ý°¢ÇÕ´Ï´Ù. ¿©·¯ºÐµµ Àß ¾Æ½Ç °Ì´Ï´Ù. ÇÁ·Î±×·¡¹ÖÀº Â¥Áõ³¯ Á¤µµ·Î ¸¹Àº ½Ç¼öµéÀÇ ¿¬¹ß ¼Ó¿¡¼­ ±× ½Ç·ÂÀÌ ´Ã¾î°£´Ù´Â »ç½Ç, ±×¸®°í ¾û¶×ÇÑ ½Ç¼ö ¼Ó¿¡¼­ Áß¿äÇÑ ¹®Á¦µéÀ» ÆľÇÇØ ³ª°¥ ¼ö ÀÖ´Ù´Â »ç½Ç ¸»ÀÔ´Ï´Ù. ´ÙÀ½°ú °°Àº ¹®ÀåÀÌ ¿¹Á¦¿¡ ÀÖÁÒ? <tscreen><verb> XSetWindowBackground( d, w0, UsrColorPixel( d, "yellow" ) ); </verb></tscreen> ¿ä ¹®ÀåÀ» /* */À¸·Î ÁÖ¼®¹® ó¸®ÇϽðųª Áö¿ì½Å ´ÙÀ½ ÄÄÆÄÀÏÇÏ°í ½ÇÇà½ÃÄÑ º¸¼¼¿ä. ÀÚ, ¾î¶² ÀÏÀÌ ÀϾ´Ï±î? X À©µµ¿ì ÇÁ·Î±×·¡¹Ö º° °Í ¾Æ´Õ´Ï´Ù. âÀ» °¡Áö°í ³ë´Â Àå³­À̶ó°í³ª ÇÒ±î¿ä? <sect>È޽İ­ÀÇ : ¸®¼Ò½º(Resource) <p> À̹ø¿¡´Â Xlib ÇÁ·Î±×·¡¹ÖÀ» ¶°³ª¼­ Àá½Ã ±âºÐÀüȯÀ» ÇÒ±î ÇÕ´Ï´Ù. °è¼Ó ¶È°°Àº ÆÐÅÏÀÇ ÇÁ·Î±×·¡¹Ö °øºÎ¸¦ ÇÏ´Ùº¸¸é ÁöÄ¡ÁÒ? ±×·¡¼­ Àç¹ÌÀÖ´Â ÀÏ ÇÑ °¡Áö¸¦ ¿À´Ã Çغ¸·Á°í ÇÕ´Ï´Ù. XÀ©µµ´Â »ç¿ëÀÚ¿¡°Ô ¹«ÇÑÇÑ ÀÚÀ¯¸¦ ÁÖ´Â ½Ã½ºÅÛÀÔ´Ï´Ù. À©µµ 3.1¿Í À© 95¸¸ ¾²°í »ì¾Æ¿Â ¿ì¸®µé¿¡°Ô´Â óÀ½¿¡ »ó´çÈ÷ °Ì¸Ô°Ô ÇÏÁö¸¸, ¾Ë¾Æ°¡¸é ¾Ë¾Æ °¥¼ö·Ï ÀÌÇØÇϱⰡ ±×·¸°Ô ¾î·Á¿î °ÍÀº ¾Æ´Ï¸ç, ÇÑ ¹ø ¾Ë°í ³ª¸é À̰͸¸Å­ Æí¸®ÇÑ °ÍÀÌ ¾ø½À´Ï´Ù. ÄÄÇ»Å͸¦ »ç¿ëÇÑ´Ù´Â °ÍÀÌ ´Ü¼ø¹Ýº¹ ÀÛ¾÷À» ½Ç¼ö¾øÀÌ ºü¸£°Ô Çس½´Ù´Â ±âº» ÃëÁöµµ ÀÖÁö¸¸, Ä÷¯ µð½ºÇ÷¹ÀÌÀÇ °³¹ß µîÀ¸·ÎºÎÅÍ ½ÃÀÛµÈ ÄÄÇ»ÅÍÀÇ ¸ÖƼ¹Ìµð¾îÈ­´Â ½Ã°¢Àû À̹ÌÁö¿¡ ´ëÇÑ ¸¹Àº °ü½ÉÀ» °¡Áö°Ô ÇØ¿Ô½À´Ï´Ù. ƯÈ÷ ÄÄÇ»ÅÍ ±×·¡ÇÈ ºÐ¾ß´Â Çö´ë¿¡ ¾ø¾î¼­´Â ¾ÈµÉ Áß¿äÇÑ ÄÄÇ»ÅÍ È°¿ë ºÐ¾ßÀÌÁö¿ä. X À©µµ´Â Çϳª·Î Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º Á¦ÇÑ»çÇ× °°Àº °ÍÀÌ ¾ø½À´Ï´Ù. ¿©·¯ºÐÀÇ fvwm À©µµ°ü¸®ÀÚ¸¦ ´Ù¸¥ À©µµ°ü¸®ÀÚ·Î ¹Ù²Ù¾îÁֱ⸸ ÇÏ¸é ¾ÆÁÖ »ö´Ù¸¥ ºÐÀ§±â¸¦ ´À³¥ ¼ö ÀÖ½À´Ï´Ù. ´Ù¾ç¼º°ú ÇÔ²² ºÐÀ§±â´Â ´Þ¸® Çϸ鼭µµ ¸ðµç ±â´ÉÀº º¯ÇÔ¾ø´Â ÀÏ°ü¼ºµµ °¡Áö°í ÀÖ´Â °ÍÀÌ X À©µµÀÔ´Ï´Ù. ½ÃÀÛÇÏ´Â ¸»ÀÌ Á» ±æ¾úÁÒ? ¿À´Ã ¿ì¸®´Â ÀÚ¿ø(Resource)À̶ó°í ÇÏ´Â X À©µµÀÇ Áß¿ä ÇÑ °³³ä¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸°í, ¸î °¡Áö Àç¹ÌÀÖ´Â ½Ç½ÀÀ» Çغ¼±î ÇÕ´Ï´Ù. ¿À´Ã ½Ç½ÀÀ» ÅëÇØ ¿©·¯ºÐÀº X ÇÁ·Î±×·¥À» ¿©·¯ºÐÀÇ ÃëÇâ¿¡ ¸Âµµ·Ï º¯È­½ÃÅ°´Â Áñ°Å¿òÀ» ´©¸®½Ç ¼ö ÀÖ½À´Ï´Ù. ±×·³, ½ÃÀÛÇغ¸µµ·Ï ÇÏÁÒ. <sect1>¸®¼Ò½º(Resource)¶õ ¹«¾ùÀΰ¡? <p> ¾Õ¼­µµ °£·«ÇÏ°Ô ¼³¸íµå·ÈÁö¸¸, ´Ù½Ã±Ý ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù. ¸®¼Ò½º¶ó´Â °³³äÀº X À©µµ ½Ã½ºÅÛ¿¡¼­ ¸î °¡Áö ´Ù¸¥ Àǹ̷Π»ç¿ëµÇ°í ÀÖ½À´Ï´Ù. ù¹ø°·Î X Server Resource¶ó´Â °³³äÀε¥, ¿ì¸®°¡ Áö±Ý ÇÏ°í ÀÖ´Â Xlib ÇÁ·Î±×·¡¹Ö¿¡¼­µµ ³ª¿ÔµíÀÌ, ¼­¹ö°¡ °ü¸®ÇÏ´Â ´ë»óÀ¸·Î¼­ÀÇ Ã¢(window), ÆùÆ®(font), »ö»ó(color), ±×·¡ÇÈ ÄÁÅؽºÆ®(GC) µîÀÌ ¹Ù·Î ±×°ÍµéÀÔ´Ï´Ù. Àü¼úÇÑ ¹Ù¿Í °°ÀÌ Å¬¶óÀ̾ðÆ®´Â ´ÜÁö ¸®¼Ò½º ID ¸¸À» °¡Áö°í À̸®Àú¸® ¼­¹ö¿¡°Ô ¿øÇÏ´Â ¼­ºñ½º¸¦ ¿äûÇÒ »Ó ÀÔ´Ï´Ù. µÎ¹ø°·Î Xlib º¸´Ù ÇÑ ´Ü°è »óÀ§ÀÇ Xt(X Toolkit) ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ³ª¿À´Â ³»¿ëÀ¸·Î¼­ »ç¿ëÀÚ°¡ À̸®Àú¸® ¼ÂÆÃÀ» ÇÒ ¼ö ÀÖ´Â À§Á¬(Widget)ÀÇ ¼Ó¼ºÀ̶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. À§Á¬¿¡ °ü·ÃµÈ »ö»ó, ÆùÆ®, À§Ä¡, ¸ð¾ç µîÀÌ ±×°ÍÀÔ´Ï´Ù. Xlib ÇÁ·Î±×·¡¹ÖÀ» ¾î´À Á¤µµ ³¡³½ ÈÄ Athena À§Á¬ SetÀ» °¡Áö°í Xt ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ º»°ÝÀûÀ¸·Î ´Ù·ç°Ô µÉ ³»¿ëÀÌÁö¸¸, ¹Ì¸® ¼±º¸ÀÌ°íÀÚ ÇÕ´Ï´Ù. X ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á¸é ¿ì¼± °ÅÀÇ ¸ðµç X À¯Æ¿¸®Æ¼ÀÇ ÀÇ¹Ì¿Í »ç¿ë¹ý, ±×¸®°í ¹Ù·Î ÀÌ ¸®¼Ò½º¿¡ ´ëÇÑ ¿¬½ÀÀ» ¸¹ÀÌ Çصξî¾ß ÇÕ´Ï´Ù. <sect1>¸®¼Ò½º Name°ú Class <p> ¿¹¸¦ µé¾î°¡¸ç ¼³¸íÇÏ´Â °ÍÀÌ ÁÁ°Ú±º¿ä. ¿©·¯ºÐÀÌ ÇöÀç X À©µµ¿¡¼­ ÀÌ ±ÛÀ» ÀÐ°í °è½Å´Ù°í °¡Á¤ÇÏ°Ú½À´Ï´Ù. ÀÚ, ¸í·ÉÇàÀ̵ç fvwm ¹öÆ°¹Ù¿¡¼­µç °£¿¡ Seyon À̶ó´Â Åë½Å ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸¼¼¿ä. ÇϳªÀÇ Å͹̳ΠâÀÌ ¶ß°í, ¶Ç Çϳª ÀÛÀº âÀÌ ¶å´Ï´Ù. ±× ÀÛÀº âÀÇ Á¦¸ñÀº "Seyon Command Center"ÀÔ´Ï´Ù. ¿©±â¼­ ´ÙÀÌ¾ó¸µ µîÀÇ ¿©·¯ °¡Áö ¼¼¿¬ °ü·Ã ¸í·ÉÀ» ³»¸®´Â »ç·ÉºÎÀÇ ¿ªÇÒÀ» Çس¾ ¼ö ÀÖ½À´Ï´Ù. Àß ¾Æ½Ã´Â »çÇ×ÀÏ °Ì´Ï´Ù. ÅؽºÆ® ¹®¼­ÀÌ´Ù º¸´Ï ¼³¸íÇϱⰡ Á» Èûµé±â´Â ÇÏÁö¸¸ µÇ´Â ¸¸Å­ Çغ¸ÁÒ. ¿ì¼± ¼¼¿¬ »ç·ÉºÎ¸¦ ÀÚ¼¼È÷ º¸½Ã¸é ÀüüÀûÀ¸·Î 4°³ÀÇ ¿µ¿ªÀ¸·Î µÇ¾î ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. À§¿¡¼­ºÎÅÍ Ã¹¹ø° ¿µ¿ªÀº DTR, DSR, RTS, CTS, RNG µî ¸ðµ© °ü·Ã »óȲÀ» º¸¿©ÁÖ´Â »óȲâÀÔ´Ï´Ù. µÎ¹ø° ¿µ¿ªÀº ¼¼¿¬ ÇÁ·Î±×·¥ÀÌ »ç¿ëÀÚ¿¡°Ô º¸³»´Â ¸Þ¼¼Áö¸¦ º¸¿©Áִ âÀÔ´Ï´Ù. ¼¼¹ø° ¿µ¿ªÀº »ç¿ëÀÚ Á¤ÀÇ ¹öÆ°µéÀÌ º¸¿©Áö´Â ¿µ¿ª ÀÔ´Ï´Ù. Athena ¹¹ ÀÌ·± ¹®ÀÚ¿­µéÀÌ º¸ÀÌ´Â ÇÑ ÁÙÀ» ¸»ÇÕ´Ï´Ù. ±× ´ÙÀ½ ¸¶Áö¸·À¸·Î About, Help, Set, Dial µîÀÇ ¹öÆ°µéÀÌ ¹è¿­µÇ¾î ÀÖ´Â Á¦ÀÏ Å« »ç°¢Çü ¿µ¿ªÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀúÇÑÅ׸¸ º¸À̳ª¿ä? »ç½Ç µÎ¹ø°¸¸ Á¦¿ÜÇÏ°í °°Àº »ö»óÀ¸·Î Ä¥ÇØÁ® ÀÖÀ¸´Ï ¾ð¶æ ÆľÇÇϱⰡ ½±Áö´Â ¾Ê½À´Ï´Ù. ÇÏÁö¸¸ ¾ÕÀ¸·Î ºÐ¸íÇØÁú °Ì´Ï´Ù. ¿©±â¼­ ÀÛÀº ¹öÆ°µéÀ» ¿ÀºêÁ§Æ®, °´Ã¼(Object)¶ó°í ºÎ¸¨´Ï´Ù. Xt ÇÁ·Î±×·¡¹ÖÀ» ÇÏ½Ç ÁÙ ¾Æ½Ã´Â ºÐµéÀº ±Ý¹æ ÀÌÇØÇϽðÚÁÒ? ¸ð¸£½Ã´õ¶óµµ ÀÏ´Ü ÀúÀÇ ¼³¸íÀ» ³¡±îÁö µé¾îÁֽŴٸé ÀÌÇØÇϱ⠾î·ÆÁö´Â ¾ÊÀ» °ÍÀÔ´Ï´Ù. ³× ¹ø° ¿µ¿ªÀÇ Ã¹¹ø° About À̶ó°í ¾º¿©Á® ÀÖ´Â ¹öÆ° °´Ã¼¸¦ ÇÑ ¹ø »ìÆì º¸ÁÒ. ÀÌ·¯ÇÑ ¸ðµç °´Ã¼´Â ¼¼¿¬À̶ó´Â ÇÁ·Î±×·¥À» Muhammad¶ó´Â »ç¶÷ÀÌ ¸¸µé ¶§, °íÀ¯ÇÑ À̸§À» ÁÖ°Ô µË´Ï´Ù. ÀÌ AboutÀ̶ó°í ¾º¿©Á® ÀÖ´Â ¹öÆ°Àº ÇÁ·Î±×·¥ »ó¿¡¼­ aboutÀ̶ó´Â À̸§(Name)À» °¡Áö°í ÀÖ½À´Ï´Ù. ´ÙÀ½À¸·Î Help ¹öÆ°Àº help¶ó´Â À̸§À», Set ¹öÆ°Àº setÀ̶ó´Â À̸§À», µîµî Çؼ­ Shell ¹öÆ°Àº shellCommand¶ó´Â À̸§À» °¡Áö°í ÀÖ½À´Ï´Ù. ¹¹ À̸§Àº Á¤È®ÇÑ ±ÔÄ¢ÀÌ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó Muhammad¾¾ ¸¶À½´ë·Î Áö¾îÁØ °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀÌ ¹Ù·Î ¹öÆ° °´Ã¼ÀÇ À̸§(Name)ÀÔ´Ï´Ù. ±×·±µ¥, ÀÚ¼¼È÷ º¼ ÇÊ¿äµµ ¾øÀÌ ±× ¹öÆ°µéÀº ±× À§¿¡ ¾º¿©ÀÖ´Â ±ÛÀÚ¸¸ ´Ù¸£°í, À§¿¡¼­ »ìÆ캸¾ÒµíÀÌ À̸§¸¸ ´Ù¸£Áö, º»ÁúÀûÀ¸·Î °°Àº ºÎ·ù¿¡ ¼ÓÇÑ ³à¼®µéÀ̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸»Àº À¯½ÄÇÏ°Ô ±× ¹öÆ°µé ¸ðµÎ ÇϳªÀÇ Class¿¡ ¼ÓÇÑ´Ù°í ¸»ÇÕ´Ï´Ù. ¿ä ¹öÆ°µéÀÌ ¸ðµÎ ¼ÓÇÑ Class´Â Athena À§Á¬ set Áß¿¡¼­ Command À§Á¬¿¡ ÇØ´çÇÕ´Ï´Ù. Command¶ó°í ÇÏ´Â °ÍÀÌ ÀÌ ClassÀÇ À̸§ÀÔ´Ï´Ù. Çò°¥¸®ÁÒ? ¼¼»ó ¸ðµç °Í¿¡´Â À̸§ÀÌ Àֱ⠸¶·ÃÀε¥... ¾ÕÀ¸·Î ±×³É À̸§ ¶Ç´Â °´Ã¼ À̸§À̶ó°í ÇÏ´Â °ÍÀº ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇؼ­ ºÙ¿©Áö´Â °³º°ÀûÀÎ À̸§(Name)À» ¶æÇÕ´Ï´Ù. ±× ´ÙÀ½À¸·Î Class ¶Ç´Â Ŭ·¡½º ¸íÀº ±× Ŭ·¡½º Àüü¸¦ ºÎ¸£´Â ´ëÇ¥ÀûÀÎ À̸§ÀÔ´Ï´Ù. ¿ö³« Çò°¥¸®´Â ºÎºÐÀ̶ó X ÇÁ·Î±×·¡¸ÓµéÀº ±×³É À̸§Àº ¼Ò¹®ÀÚ·Î ½ÃÀÛÇÏ°í Ŭ·¡½º ¸íÀº ´ë¹®ÀÚ·Î ½ÃÀÛÇÏ´Â °ü½ÀÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ±ÔÄ¢À» ¹«½ÃÇÏ´Â ÇÁ·Î±×·¡¸Ó´Â ¾øÀ» °Ì´Ï´Ù. Àڱ⠸ڴë·Î Çß´Ù°¡´Â X ÇÁ·Î±×·¡¸Ó ¼¼°è¿¡¼­ Ãß¹æ´çÇÏ°í ¸» °Ì´Ï´Ù. :) <sect1>°´Ã¼ÀÇ ¸®¼Ò½º <p> À§¿¡¼­ »ìÆ캻 ¹öÆ° °´Ã¼´Â ÇÁ·Î±×·¡¸Ó ¶Ç´Â »ç¿ëÀÚ°¡ ÀÚÀ¯·Ó°Ô Á¤ÇØÁÙ ¼ö ÀÖ´Â ¸î °¡Áö ¼Ó¼ºÀ» °®´Âµ¥ ¹Ù·Î ±×°ÍÀ» °´Ã¼ÀÇ ¸®¼Ò½º, ±×³É ÁÙ¿© ¸®¼Ò½º¶ó°í ºÎ¸¨´Ï´Ù. ¾ÕÀ¸·Î ¸®¼Ò½º¶ó°í ÇÏ¸é ¹Ù·Î °´Ã¼ÀÇ ¼ºÁúÀ» ÀǹÌÇÏ´Â ¸®¼Ò½º¸¦ ¸»ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ¼³¸íÇغ¸ÁÒ. ÀÚ, Áö±Ý ÇöÀç ¿­·Á ÀÖ´Â ¼¼¿¬À» ´ÝÀ¸½Ã°í ÇÑÅÒÀ̳ª X ÅÒ »ó¿¡¼­ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇغ¾½Ã´Ù. <tscreen><verb> seyon -modem /dev/modem -xrm "*about.label: ABOUT" </verb></tscreen> -modem ¿É¼Ç µÚ¿¡ ¿©·¯ºÐÀÇ ¸ðµ©ÀÌ ´Þ¸° Æ÷Æ®¸¦ ÁöÁ¤ÇÏ´Â È­ÀϸíÀ» ½áÁÖ½Ã¸é µÇ°í ±× ´ÙÀ½ Á¦°¡ ¼³¸íµå¸®°íÀÚ ÇÏ´Â Á¤¸»·Î Áß¿äÇÑ ¸í·ÉÇà ¿É¼ÇÀÌ ¿©±â¿¡ ÀÖ±º¿ä. Áß¿ä! Áß¿ä! Áß¿ä! -xrm ¿É¼Ç »ç¿ë¹ý: -xrm "¸®¼Ò½º Á¤ÀÇ ¹®ÀÚ¿­" ÀÚ, ¾î¶»°Ô µÇ¾ú½À´Ï±î? AboutÀ̶ó°í ¾º¿©ÀÖ´ø °ÍÀÌ ABOUT·Î ¹Ù²î¾úÁÒ? ±× ´ÙÀ½¿¡´Â ´ÙÀ½°ú °°ÀÌ Çغ¾½Ã´Ù. <tscreen><verb> seyon -modem /dev/modem -xrm "*about.foreground: red" </verb></tscreen> ±ÛÀÚ»öÀÌ ¹Ù²î¾úÁö¿ä? Commmand À§Á¬ Ŭ·¡½º¿¡ ¼ÓÇØ ÀÖ°í À̸§Àº aboutÀÎ ¹öÆ°ÀÇ ¶óº§(Label)°ú Àü°æ»öÀ» ÇÑ ¹ø ¹Ù²Ù¾îº¸¾Ò½À´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î Çؼ­ ¿ì¸®´Â ¿ì¸® °³¼º´ë·Î ¿øÇÏ´Â ¼¼¿¬ »ç·ÉºÎ¸¦ ¸¸µé¾î ³¾ ¼ö ÀÖ½À´Ï´Ù. ¾à°£ ¾î·Á¿öÁö´Â±º¿ä. ´ÙÀ½°ú °°ÀÌ Çغ¾½Ã´Ù. <tscreen><verb> seyon -modem /dev/modem -xrm "*Command.foreground: Turquoise" </verb></tscreen> °á°ú¸¦ º¸¸é ¸ðµç ¹öÆ°ÀÇ Àü°æ»öÀÌ Turquoise»öÀ¸·Î º¯ÇÑ °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. Ŭ·¡½º ¸íÀ» ÁöÁ¤ÇÏ¸é ±× Å¬·¡½º¿¡ ¼ÓÇÏ´Â ¸ðµç °´Ã¼¿¡ ´ëÇÏ¿© ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù. -xrm ¿É¼ÇÀ» ÀÌ·± ÀÏÀ» Çس¾ ¼ö ÀÖ´Â ³à¼®ÀÔ´Ï´Ù. "¸®¼Ò½º Á¤ÀÇ ¹®ÀÚ¿­"ÀÇ Çü½Ä¿¡ ´ëÇÏ¿© °£·«ÇÏ°Ô ¾Ë¾Æº¾½Ã´Ù. <tscreen><verb> "À̸§.À̸§.À̸§: <¸®¼Ò½º°ª>" ¶Ç´Â (ApplicationClass|applicationName)*(ResourceClass|resourceName) : value </verb></tscreen> ÀÌ·¸°Ô ¾Ë¾ÆµÎ¾îµµ ÀÏ´ÜÀº ±¦Âú½À´Ï´Ù. ÀÚ, ¿©±â¼­ À̸§Àº Ŭ·¡½º¸íÀÏ ¼öµµ ÀÖ°í °´Ã¼ÀÇ Æ¯º°ÇÑ À̸§ÀÌ µÉ ¼öµµ ÀÖ½À´Ï´Ù. ±×¸®°í À̸§À» ÁöÁ¤Çϴµ¥ ÀÖ¾î *³ª ? ¹®ÀÚ¿Í °°Àº ¿ÍÀϵå Ä«µåµµ »ç¿ë°¡´ÉÇÕ´Ï´Ù. À§ÀÇ ¿¹¿¡¼­ Ç×»óÀûÀ¸·Î * ¹®ÀÚ¸¦ »ç¿ëÇØ¿ÔÁö¿ä. À̸§°ú À̸§Àº ¸¶Ä§Ç¥(.)·Î ºÐ¸® ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ À̸§Àº ¸î ´Ü°è°í °è¼ÓµÉ ¼ö ÀÖ½À´Ï´Ù. À§¿¡¼­´Â 3°³¸¸ º¸¿´Áö¸¸ ¸î °³°¡ ¸¶Ä§Ç¥·Î ºÐ¸®µÉ Áö´Â ÇÁ·Î±×·¥¸¶´Ù ´Ù¸¨´Ï´Ù. À§Á¬À̶ó´Â °´Ã¼µé °£¿¡´Â À§°è(hierachy)¶ó°í ÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. Á·º¸¶ó°í º¸¸é ÁÁ½À´Ï´Ù. ¼¼¿¬¿¡¼­´Â ´ÙÀ½°ú °°Àº °ü°è°¡ ¼º¸³ÇÕ´Ï´Ù. ¼¼¿¬ »ç·ÉºÎ´Â À§¿¡¼­ ¼­¼úÇÑ ÀÏÁ¤ ¿µ¿ª, Áï ¹öÆ°µéÀ» Æ÷ÇÔÇÒ ¾î¶² ¿µ¿ªÀ» °®½À´Ï´Ù. ±× ¿µ¿ªÀº ´Ù½Ã ¹öÆ°µéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¹öÆ°À» ´©¸£¸é ¶Ç ´Ù¸¥ ¸Þ´º°¡ ¶á´ÙµçÁö ÇÏ´Â °ÍÀ¸·Î º¸¾Æ ¹öÆ°µé °¢°¢µµ ¹«¾ùÀΰ¡¸¦ °è¼Ó Æ÷ÇÔÇÏ°í ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¸ðµç °´Ã¼µéÀº ¼¼¿¬À̶ó´Â Àüü ÇÁ·Î±×·¥¿¡ ¼ÓÇØ Àִµ¥, ¼¼¿¬ÀÇ ÇÁ·Î±×·¥ À̸§ÀÌ seyonÀÌ°í, ¼¼¿¬ÀÇ Å¬·¡½º¸íÀº SeyonÀÔ´Ï´Ù. ÀÌ°Ç Muhammad¾¾°¡ X ÇÁ·Î±×·¡¹Ö °ü½À¿¡ µû¶ó ºÙ¿©ÁØ À̸§ÀÔ´Ï´Ù. ¼¼¿¬¿¡ °ü·ÃµÈ ¸ðµç °´Ã¼¸¦ ÁöÁ¤ÇÒ ¶§´Â Ç×»ó "Seyon." ÀÌ·± ½ÄÀ¸·Î ½ÃÀÛÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ·± ½ÄÀ¸·Î ¸ðµÎ ½áÁÖ´Â °æ¿ì´Â µå¹°°í * ¹®ÀÚ µîÀ» ½á¼­ Ç¥ÇöÇÕ´Ï´Ù. *´Â ¸ðµç ¹®ÀÚ¸¦ ´ëÇ¥ÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» ¿°µÎ¿¡ µÎ°í ÀÌ ±ÛÀ» °è¼Ó Àо°¡½Ã±æ ¹Ù¶ø´Ï´Ù. ¸®¼Ò½º ¶ÇÇÑ ¸®¼Ò½º Ŭ·¡½º¸íµµ ÀÖ°í ¸®¼Ò½º ±×³É À̸§µµ ÀÖ½À´Ï´Ù. ¶óº§µµ ¹Ù²Ù°í »ö»óµµ ¹Ù²Ù½Ã·Á¸é -xrm ¿É¼ÇÀ» ¿©·¯ ¹ø ÁÖ½Ã¸é µË´Ï´Ù. <sect1>XlibÀÇ ¸®¼Ò½º ¸Å´ÏÁ® <p> -xrm ¿É¼ÇÀÌ ¾µ¸ð°¡ ÀÖ±â´Â Çϳª ±×°ÍÀ» ¿©·¯¹ø ¾²´Âµ¥´Â ÇÑ°è°¡ ÀÖÁÒ? Áß¿äÇÑ ¸î °³ÀÇ ¸®¼Ò½º¸¦ ¹Ù²Ù¾îÁÖ·Á°í ÇÒ ¶§ ¾²´Â Á¤µµÀÏ »ÓÀÔ´Ï´Ù. ÀÌ°Í ¸»°í ´Ù¸¥ ¸ÞÄ¿´ÏÁòÀÌ ÀÖ½À´Ï´Ù. ¼¼¿¬Àº ½ÇÇàµÇÀÚ¸¶ÀÚ /usr/lib/X11/app-defaults µð·ºÅ丮¿¡¼­ ÀÚ½ÅÀÇ Å¬·¡½º¸í¿¡ ÇØ´çÇÏ´Â È­Àϸí SeyonÀ» ã¾Æ¼­ ÀнÀ´Ï´Ù. ±× È­ÀÏ¿¡´Â ¼¼¿¬¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸µéÀÌ µé¾î ÀÖ½À´Ï´Ù. ¼¼¿¬ »ç·ÉºÎÀÇ ¸ðµç ¼ÂÆÃÀÌ ±× ¾È¿¡ µé¾îÀֱ⵵ ÇÏÁÒ. ±× µð·ºÅ丮´Â ·çÆ®±ÇÇÑÀ¸·Î µé¾î°¡¼Å¼­ Seyon È­ÀÏÀ» Write °¡´ÉÀ¸·Î ¼³Á¤ÇÑ ÈÄ ´Ù¸¥ À̸§À¸·Î Àá½Ã ¹Ù²Ù¾î º¾½Ã´Ù. ¼¼¿¬Àº ¾û¸ÁÀÌ µÇ°í ¸¿´Ï´Ù. ´ÙÀ½À¸·Î ¼¼¿¬Àº ¿©·¯ºÐÀÇ .Xdefaults ¼ÂÆÿ¡¼­ ¼¼¿¬¿¡ ´ëÇÑ ¼ÂÆÃÀÌ ÀÖ³ª »ìÆ캾´Ï´Ù. ¸¶Áö¸·À¸·Î ¼¼¿¬Àº ¸í·ÉÇà¿¡¼­ -xrm ¿É¼ÇÀ» Àоî³À´Ï´Ù. <bf>ÁÖÀÇ :</bf>.xinitrc ¿¡ xrdb -merge .Xdefaults ¿Í °°Àº ¹®ÀåÀÌ ÀÖ³ª »ìÆ캸½Ê½Ã¿ä. ¶Ç´Â userresources=$HOME/.XdefaultsÀΰ¡ È®ÀÎÇغ¸½Ê½Ã¿ä. ¸¸¾à ¸®¼Ò½º¿¡ ´ëÇÑ ¼ÂÆÃÀÌ ¼­·Î Ãæµ¹ÇÏ´Â °æ¿ì¿¡´Â ¸í·ÉÇàÀÌ ÃÖ¿ì¼±, ±× ´ÙÀ½À¸·Î .Xdefaults, ±×¸®°í ³ª¼­ ¾îÇø®ÄÉÀÌ¼Ç µðÆúÆ® SeyonÀÌ µÚµû¸¨´Ï´Ù. ¸¶Âù°¡Áö·Î Ŭ·¡½º¸í¿¡ ´ëÇÑ ¼ÂÆÿ¡ ´ëÇÏ¿©, ƯÁ¤ °´Ã¼¿¡ ´ëÇÑ ¼ÂÆÃÀÌ ¿ì¼±ÇÕ´Ï´Ù. <tscreen><verb> -xrm "*Command.foreground: red" -xrm "*about.foregrond: blue" </verb></tscreen> ÀÌ·± ½ÄÀÇ ¼ÂÆÃÀÌ ÀÖ´Ù¸é, about ¹öÆ°Àº Command Ŭ·¡½º¿¡ ¼ÓÇϹǷΠred ¼Ó¼ºÀ» °¡Áö´Â °ÍÀÌ ¾Æ´Ï¶ó ´õ¿í ´õ Ưº°ÇÑ ¼ÂÆÃÀÎ blue¸¦ ¶ì°Ô µË´Ï´Ù. - ¹°·Ð ÀÌ·¸°Ô °£´ÜÈ÷ ¸»ÇÒ ¼ö´Â ¾øÁö¸¸, ´õ ÀÚ¼¼ÇÑ °ÍÀº °ü·Ã¼­ÀûÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù. ¸®½º½º¿¡ ´ëÇÑ ÀûÀýÇÑ ¼ÂÆÃÀ» ¼±ÅÃÇØÁÖ´Â °ÍÀÌ ¹Ù·Î ¿ì¸®¿¡°Ô´Â Æò¼Ò º¸ÀÌÁö ¾Ê°Ô ¿­½ÉÈ÷ ÀÏÇÏ°í ÀÖ´Â XlibÀÇ "¸®¼Ò½º ¸Å´ÏÁ®"ÀÔ´Ï´Ù. ÀÚ, ·çÆ®±ÇÇÑÀ¸·Î /usr/lib/X11/app-defaults/SeyonÀ» ¼öÁ¤Çغ¾´Ï´Ù. ¿©±â¼­ ¿ì¸®´Â Á¤¸»·Î Àç¹ÌÀÖ´Â ÀÏÀ» ¸¹ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. <sect1>¾îÇø®ÄÉÀÌ¼Ç µðÆúÆ® È­ÀÏ ´Ù·ç±â <p> fvwm¿¡¼­´Â #·Î ½ÃÀÛÇÏ´Â ¹®ÀåÀÌ ÁÖ¼®¹®À̾úÁö¸¸, ¿©±â¼­´Â !·Î ½ÃÀÛÇÏ´Â ¹®ÀåÀÌ ÁÖ¼®¹®À¸·Î 󸮵˴ϴÙ. fvwm¿¡¼­ .fvwmrc È­ÀÏÀ» ´Ù·çµí ã±â ±â´ÉÀ» ÅëÇØ ¿øÇÏ´Â ¹®ÀåÀ» ã¾Æ¼­ ¼öÁ¤Çغ¾½Ã´Ù. Àüü¸¦ ¼³¸íµå¸± ¼ö´Â ¾ø°í Àç¹ÌÀÖ´Â °Í¸¸ °ñ¶ó¼­ ¼³¸íµå¸³´Ï´Ù. <tscreen><verb> *.title: Seyon Command Center </verb></tscreen> ¾î¶² Ŭ·¡½º, °´Ã¼µç °£¿¡ titleÀ̶ó°í ÇÏ´Â ¸®¼Ò½º¸¦ °¡Áø ³à¼®ÀÇ °ª¿¡´Ù Seyon Command Center¶ó´Â ¹®ÀÚ¿­À» ÇÒ´çÇÕ´Ï´Ù. ÀÌ ¹®ÀÚ¿­À» ¹Ù²Ù¾îÁÖ¸é ¼¼¿¬ »ç·ÉžÀÇ Å¸ÀÌƲ¹Ù Á¦¸ñÀÌ ¹Ù²ò´Ï´Ù. <tscreen><verb> *.iconName: <¾ÆÀÌÄÜ À̸§> </verb></tscreen> ¾ÆÀÌÄÜ »óÅ¿¡¼­ ³ªÅ¸³ª´Â À̸§À» ÁöÁ¤ÇØÁÝ´Ï´Ù. fvwmÀÇ IconTitle °°Àº ¼ÂÆÃÀ¸·Îµµ °¡´ÉÇÏÁÒ. <tscreen><verb> *font: <ÆùÆ®> </verb></tscreen> *·Î ½ÃÀÛÇÏ´Ï ¸ðµç ¹®ÀÚ¿­À» ´ëÇ¥ÇÏ°í ³¡ÀÌ font·Î ³¡³ª´Â ¸ðµç ¸®¼Ò½º ¼ÂÆÿ¡ Àû¿ëµË´Ï´Ù. µû¶ó¼­ ¿©±â¼­ ÁÖ¾îÁö´Â <ÆùÆ®>´Â ¼¼¿¬ÀÌ ±âº»ÀûÀ¸·Î »ç¿ëÇÏ°Ô µË´Ï´Ù. <tscreen><verb> *Cursor: <Ä¿¼­¸í> </verb></tscreen> ±âº» ÁöÁ¤°ªÀº hand2·Î µÇ¾î ÀÖÁÒ? fvwm ¸¶¿ì½º Ä¿¼­ ¹Ù²Ù±â¿Í ¸¶Âù°¡ÁöÀÔ´Ï´Ù¸¸, ¿©±â¼­´Â ¼ýÀÚ°¡ ¾Æ´Ï¶ó ¹®ÀÚ¿­À» »ç¿ëÇÕ´Ï´Ù. /usr/include/X11/cursorfont.h È­ÀÏ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ¾Õ¿¡ ºÙÀº XC_´Â »©°í À̸§À» ½áÁÝ´Ï´Ù. °ËÀº ¼ÕÀÎ hand1À¸·Î ÇÑ ¹ø ¹Ù²ãº¸½Ã´Â °Íµµ... <tscreen><verb> *ShapeStyle: <¸ð¾ç> </verb></tscreen> ¹öÆ°ÀÇ ¸ð¾çÀ» Á¤ÀÇÇØÁØ´Ù. <¸ð¾ç>¿¡ ¿Ã ¼ö ÀÖ´Â °ªÀº /usr/include/X11/XawÀÇ Command.h¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. °¡´ÉÇÑ °ªÀº Rectangle, RoundedRectangle, Oval, Ellipse ÀÌ·¸°Ô ³× °¡Áö°¡ ÀÖ½À´Ï´Ù. ÇÑÂüÀ» ³»·Á°£ ÈÄ... *Box·Î ½ÃÀÛÇÏ´Â ºÎºÐÀ» ã¾Æº¾½Ã´Ù. ÀÌ°ÍÀº ¿ì¸®°¡ À§¿¡¼­ »ìÆ캸¾Ò´ø ¹öÆ°µéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â »ç°¢Çü ¿µ¿ªÀ» ¸»ÇÕ´Ï´Ù. ±âº»ÀûÀ¸·Î´Â ´ÙÀ½°ú °°Àº ÁÙÀÌ ¾øÁö¸¸ »ðÀÔÇغ¾½Ã´Ù. <tscreen><verb> *Box.background: <»ö»ó> </verb></tscreen> ÀÚ, ´ÜÁ¶·Ó±â¸¸ Çß´ø »ç°¢Çü ¿µ¿ªÀÇ »ö»óÀÌ ¹Ù²ò´Ï´Ù. <tscreen><verb> *ok.lable: OK *cancel.lable: Cancel *done.label: Done *yes.label: Yes *no.lable: No *edit.label: Edit </verb></tscreen> ÀÌ·± ½ÄÀÇ ÁÙµéÀ» ¹ß°ßÇϼ̽À´Ï±î? ok, cancel, done, µîÀº ¹öÆ° °´Ã¼ÀÇ À̸§ÀÔ´Ï´Ù. ok ¹öÆ°ÀÇ label ¸®¼Ò½º°¡ OK·Î µÇ¾îÀÖÁÒ? ÀÌ ºÎºÐÀ» °íÄ¡¸é ¿µ¾î±ÇÀÌ ¾Æ´Ñ ³ª¶ó »ç¿ëÀÚ°¡ »ç¿ëÇϱâ Æí¸®ÇÏ°ÚÁö¿ä? ÇÁ¶û½º »ç¶÷À̶ó¸é *yes.labelÀ» Qui·Î, *no.labelÀ» NonÀ¸·Î ¹Ù²Ü °Ì´Ï´Ù. µ¶ÀÏ »ç¶÷À̶ó¸é *yes.labelÀ» Ya (¸Â³ª¿ä?) *no.labelÀ» NeinÀ¸·Î ¹Ù²Ü °Ì´Ï´Ù. ¿ì¸®´Â "¿¹", "¾Æ´Ï¿À"·Î ÇÏ¸é µË´Ï´Ù. *aboutÀ¸·Î ½ÃÀÛÇÏ´Â ÁÙµéÀº about ¹öÆ°¿¡ °üÇÑ °ÍÀÔ´Ï´Ù. *setÀ¸·Î ½ÃÀÛÇÏ´Â ÁÙµéÀ» ¹Ø¿¡ ÀÖÁÒ? Set ¹öÆ°À» ´©¸£¸é º¸µå, Æи®Æ¼, Æ÷Æ® µî¿¡ ´ëÇÑ ¼ÂÆÃÀ» ÇÏ´Â »õ·Î¿î âÀÌ Çϳª »ý±é´Ï´Ù. ±×°ÍÀÇ À̸§ÀÌ uBoxÀÎ °Í °°½À´Ï´Ù. <tscreen><verb> *set*uBox.Toggle.background: <»ö»ó> *set*uBox.Toggle.foreground: <»ö»ó> </verb></tscreen> Åä±Û¹öÆ°¿¡ ÇØ´çÇÏ´Â °ÍÀº Strip 8th, CTS/RTS ¼³Á¤ µîÀÔ´Ï´Ù. Àü°æ»ö/¹è°æ»öÀº ¼³Á¤µÇÁö ¾ÊÀº »óÅÂÀÇ »ö»óÀ̸ç, ¼³Á¤µÇ¸é Àü°æ»ö/¹è°æ»öÀÌ µÚ¹Ù²ò´Ï´Ù. ³ª¸ÓÁö ÁÙÀº ¸ðµÎ label¿¡ °üÇÑ °ÍÀ̹ǷΠ¼³¸íµå¸®Áö ¾Ê°Ú½À´Ï´Ù. <tscreen><verb> *transfer*upload*font: <ÆùÆ®> </verb></tscreen> ¾÷·ÎµåÇÒ ¶§ È­ÀϸíÀ» ÀԷ¹޴ â¿¡¼­ ¾²´Â ÆùÆ®°¡ ³Ê¹« ÀÛ´Ù°í »ý°¢ÇÏÁö ¾ÊÀ¸½Ê´Ï±î? <ÆùÆ®>¸¦ Å« °ÍÀ¸·Î ¹Ù²Ù¾î ÁÖ½Ã¸é µË´Ï´Ù. *edit*title: File Edit ¶ó´Â ÁÙ±îÁö ÀüÁøÇÕ´Ï´Ù. º¸Åë ¿¡µðÅÍ¿¡ »ç¿ëµÇ´Â ÆùÆ®°¡ ³Ê¹« ÀÛÁÒ? *edit*Text*font ¸¦ ¹Ù²Ù¾î ÁÖ½Ã¸é µË´Ï´Ù. ±â¿Õ¿¡ ¹Ù²Û °Å À§·Î ¿Ã¶ó°¡¸é *help ¼ÂÆÃÀÌ Àִµ¥, *help*Text*font¶ó´Â ÁÙÀ» ³Ö¾î¼­ ÆùÆ®¸¦ ¹Ù²Ù¾î º¾½Ã´Ù. <tscreen><verb> ! ! Message box ! </verb></tscreen> ¿©±â±îÁö °¡º¾½Ã´Ù. ¸Þ½ÃÁö ¹Ú½ºÀÇ ¹è°æ»öÀ» ¹Ù²Ù¾î º¸ÁÒ. <tscreen><verb> *messageBox*background: <»ö»ó> *messageBox*foreground: <»ö»ó> ! ! Status box ! </verb></tscreen> ¸ðµ© °ü·Ã »óȲâÀÔ´Ï´Ù. <tscreen><verb> *statusBox.background: <»ö»ó> *statusBox.foreground: <»ö»ó> µîµî ! ! Quick Keys ! </verb></tscreen> ¿©±â¿¡´Â »ç¿ëÀÚ Á¤ÀÇ ¹öÆ°ÀÌ µé¾î°¡´Â âÀÔ´Ï´Ù. <tscreen><verb> *quickKeyBox.Command.font: <»ö»ó> *quickKeyBox.background: <»ö»ó> *quickKey1.visible: < on ¶Ç´Â off > *quickKey2.visible: < on ¶Ç´Â off > ... </verb></tscreen> ´ÜÃà ¹öưâ¿¡ ¾µ µ¥ ¾ø´Â ¹öÆ°µéÀÌ Ç¥½ÃµÇ¾î ÀÖ½À´Ï´Ù. º¸Åë ¾²Áöµµ ¾Ê°í ÀÖÁö¿ä. onÀº ±× ¹öÆ°À» º¸ÀÌ°Ô ÇÏ°í off´Â º¸ÀÌÁö ¾Ê°Ô ÇÕ´Ï´Ù. <tscreen><verb> *quickKey1.action: <Çൿ> ... *quickKey1.label: <¹®ÀÚ¿­> ... </verb></tscreen> ÀÚ, À§¿¡¼­ <Çൿ>¿¡ µé¾î°¥ ¼ö ÀÖ´Â ¼¼¿¬ ³»ºÎÀÇ ÇÔ¼öµéÀº ¿©·¯ °¡Áö°¡ ÀÖ½À´Ï´Ù. ¿©±â¼­ ¼¼¿¬ÀÇ ³î¶ó¿î ±â´ÉÀÌ µ¸º¸ÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº ¼¼¿¬ ¸Þ´º¾óÀ» Âü°íÇϽðí¿ä. ¸¹ÀÌ ¾²ÀÌ´Â °Í Çϳª¸¸ ¼Ò°³ÇÕ´Ï´Ù. º¸Åë ¹öÆ° Çϳª·Î ZMODEM ¾÷·Îµå/´Ù¿î·Îµå ¹öÆ°À» Á¤ÀÇÇؼ­ ¾²´Â °Ì´Ï´Ù. Transfer ¹öÆ°À» ´©¸£¸é ÇöÀç µî·ÏµÇ¾î ÀÖ´Â È­ÀÏ Àü¼Û Á¤ÀÇ°¡ ¸®½ºÆ®·Î ³ª¿É´Ï´Ù. Àú´Â ¼¼¿¬ÀÇ ³»ºÎ ÇÔ¼ö Áß FileTransfer()¸¦ »ç¿ëÇÏ°Ú½À´Ï´Ù. <tscreen><verb> »ç¿ë Çü½Ä : FileTransfer( <Àü¼Û ÇÁ·ÎÅäÄÝ ¹øÈ£> [, <È­Àϸ®½ºÆ®> ] ) </verb></tscreen> <Àü¼Û ÇÁ·ÎÅäÄÝ ¹øÈ£>°¡ ÀǹÌÇÏ´Â °ÍÀº À§ ¸®½ºÆ®¿¡ ³ª¿À´Â ¼ø¼­¸¦ ¸»ÇÕ´Ï´Ù. ¸Ç óÀ½ °ÍÀÌ 1ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. <È­Àϸ®½ºÆ®>´Â º¸Åë Àû¾îÁÖÁö ¾Ê½À´Ï´Ù. È­ÀÏÀ» ´Ù¿î¹Þ´Â °æ¿ì¿¡´Â ÇÊ¿ä¾ø°í, È­ÀÏ Àü¼ÛÀÇ °æ¿ì¿¡´Â È­ÀÏÀ̸§À» ÀԷ¹޵µ·Ï ÇÁ·ÎÅäÄÝÀÌ Àß Á¤ÀǵǾî ÀÖÀ» °Ì´Ï´Ù. Àú´Â XRZ 0.5¸¦ ¹Þ¾Æ¼­ ´Ù¿îÇÁ·Î±×·¥À¸·Î ¾²°í Àִµ¥¿ä, ±×°ÍÀ» G E T À̶ó´Â À̸§ÀÇ ´ÜÃà¹öÆ°À¸·Î Á¤ÀÇÇؼ­ ¾¹´Ï´Ù. ½Ã°£ÀÌ µÈ´Ù¸é XSZ¸¦ ¸¸µé°í´Â ½ÍÁö¸¸ ¼Ò½ººÐ¼®¸¸ Çسõ°í ¸ÅÀÏ ¹Ì·ç±â¸¸ Çϳ׿ä. <itemize> <item>¿¹ </itemize> <tscreen><verb> *quickKey1.visible: on *quickKey1.lable: G E T *quickKey1.action: FileTransfer(1); Beep(); *quickKey?.font: 8x16 </verb></tscreen> Âü°í·Î ÀúÀÇ È­ÀÏ Àü¼Û Á¤ÀÇ ¸®½ºÆ® 1 ¹øÀº "Xrz3D" "$xrz" No ÀÔ´Ï´Ù. ¸¶Áö¸·À¸·Î Fun message¿¡ ´ëÇÏ¿© ¾Ë¾Æº¾½Ã´Ù. <tscreen><verb> *funMessages: \ "Hi there! Helloooooooooo!" \ ... "I've fallen and I can't get up!" </verb></tscreen> ¿©·¯ °³ÀÇ ¹®ÀÚ¿­À» Àû¾îÁִµ¥ ÁÙÀ» ¹Ù²Ü ¶§ \ ¹®ÀÚ¸¦ »ç¿ëÇÑ °Í¿¡ À¯ÀÇÇսôÙ. <sect1>»ç¿ëÀÚ ¸®¼Ò½º È­ÀÏ .Xdefaults <p> ¾Õ¿¡¼­ ´Þ¸® ¼¼¿¬ÀÇ Å¬·¡½º¸í SeyonÀ» ¾Õ¿¡´Ù ºÙ¿©Áֽñ⠹ٶø´Ï´Ù. ÀúÀÇ ¿¹¸¦ º¸¿©µå¸®´Â °ÍÀ¸·Î ³¡À» ¸Î°Ú½À´Ï´Ù. ¼¼¿¬ ±× ÀÚü¿¡ ´ëÇÏ¿© ¼³¸íÀ» ÇÑ´Ù´Â °ÍÀÌ ¿Ø¸¸ÇÑ ºÐ·® °¡Áö°í´Â ¾öµÎµµ ¸ø³¾ ¸¸Å­ ¸¹¾Æ¼­ ... Á¦°¡ ¼¼¿¬±îÁö ´Ù·ê ¼ö´Â ¾øÀ» °Í °°½À´Ï´Ù. ´Ù¸¥ ÆÄ¿ö ¸®´ª¼­ºÐµé²²¼­ ÇØÁֽøé Á¦°Ôµµ µµ¿òÀÌ µÇ·Ã¸¸... È­ÀÏ ³»¿ëÀ» °»½ÅÇϽŠÈÄ, ÅÒ »ó¿¡¼­ xrdb -merge .Xdefaults ÇϽøé X ¸¦ Á¾·áÇϰųª ÇÏÁö ¾Ê¾Æµµ °»½ÅµÈ ¸®¼Ò½º ¼ÂÆÃÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. <tscreen><verb> ! --- Seyon --- Seyon.modems: /dev/modem Seyon.vt100.background: DarkBlue Seyon.vt100.foreground: white Seyon.*.pointerShape: pencil Seyon.dialDelay: 0 Seyon.idleGuardInterval: 300 Seyon.autoZmodem: off Seyon.metaKeyTranslation: off Seyon.captureFile: cap Seyon.showFunMessages: on Seyon.dialRepeat: 100 Seyon.autoZmodemAction: $xrz Seyon.modemHangupString: ATH0^M Seyon.idleGuard: on Seyon.hangupConfirm: off Seyon.rtsctsFlowControl: on Seyon.defaultBPS: 38400 Seyon.zmodemAutoDownload: off Seyon.zmodemAutoDownloadCommand: $xrz ! --- ÀÌ ºÎºÐÀÌ ¸®¼Ò½º ¼ÂÆÃÀ» ´Ù·ç°í ÀÖ½À´Ï´Ù --- Seyon*title: Seyon Command Centre Seyon*iconName: My Seyon Seyon*Cursor: hand1 Seyon*yes.label: Qui Seyon*no.label: Non Seyon*set*uBox.Toggle.background: Pink Seyon*set*uBox.Toggle.foreground: SteelBlue Seyon*transfer.label: Up/Dn Seyon*transfer*upload*title: Which File ? Seyon*transfer*upload*font: -adobe-courier-medium-r-normal--18-*-*-*-*-*-*-* Seyon*transfer*upload*dialog.lable: Enter FileName Seyon*exit.label: Quit Seyon*messageBox*foreground: purple4 Seyon*messageBox*background: seashell1 Seyon*statusBox.background: grey Seyon*quickKeyBox.Command.font: 9x15bold Seyon*quickKeyBox.background: steelblue Seyon*quickKey1.visible: on Seyon*quickKey2.visible: on Seyon*quickKey3.visible: off Seyon*quickKey4.visible: off Seyon*quickKey5.visible: off Seyon*quickKey1.action: FileTransfer(1); Beep(); Seyon*quickKey2.action: FileTransfer(2); Beep(); Seyon*quickKey?.font: 8x16 Seyon*quickKey1.label: G E T Seyon*quickKey2.label: P U T Seyon*Command.background: PeachPuff Seyon*quickKey1.background: DeepPink Seyon*dial.background: blue Seyon*dial.foreground: snow Seyon*hangup.background: SeaGreen Seyon*hangup.foreground: snow Seyon*misc.background: Pink Seyon*cancel.background: DeepPink Seyon*dismiss.background: DeepPink Seyon*exit.background: grey Seyon*exit.foreground: black Seyon*directory*lBox.ok.background: blue Seyon*directory*lBox.ok.foreground: snow </verb></tscreen> ! Âü°í·Î È­ÀÏ Àü¼Û Á¤ÀÇ 2¹øÀº ´Ù¿î·Îµå·Î¼­ "ZDown" "$sz -vv" y ÀÔ´Ï´Ù. X À©µµ´Â »ç¿ëÀÚ¿¡°Ô ¹«ÇÑÇÑ ÀÚÀ¯¸¦ ÁÖ°í ÀÖ´Ù! <sect1>xterm ÀÇ ¸®¼Ò½º¿¡ °üÇÏ¿© <p> xtermÀÇ Å¬·¡½º¸íÀº XTermÀÔ´Ï´Ù. man xterm ÇϽøé ÀÚ¼¼ÇÏ°Ô ¸®¼Ò½º ¸ñ·ÏÀÌ ³ª¿É´Ï´Ù. ±×°ÍÀ» Âü°íÇÏ½Ã¸é µË´Ï´Ù. Àú´Â ¸î °¡Áö¸¸ ´Ù·ç±â·Î ÇÏÁö¿ä. <tscreen><verb> XTerm*cursorColor: <»ö»ó> </verb></tscreen> Ä¿¼­ÀÇ »ö»óÀ» ¹Ù²ß´Ï´Ù. <tscreen><verb> XTerm*font: <ÆùÆ®> XTerm*pointerShape: <Æ÷ÀÎÅ͸í> XTerm*scrollBar: <on/off> ½ºÅ©·Ñ¹Ù¸¦ Ç¥½ÃÇÒ °ÍÀΰ¡? XTerm*saveLines: <¼öÄ¡°ª> ¸î ÁÙÀ» ±â¾ïÇصΰí ÀÖÀ» °ÍÀΰ¡? </verb></tscreen> ÇÏ¿©Æ° ¾öû³ª°Ô ¸¹Àº ¸®¼Ò½ºµéÀÌ ÀÖ½À´Ï´Ù. ¿ì¸® ¸ðµÎ°¡ ¸¹ÀÌ ¾²´Â hantermÀº XtermÀ» ±â¹ÝÀ¸·Î ÇϽŠ°Í ¾Æ½ÃÁÒ? hantermÀÇ Å¬·¡½º¸íÀº HantermÀÔ´Ï´Ù. ÇÑÅÒ¿¡ ´ëÇÏ¿© ¸®¼Ò½º ¼ÂÆÃÀ» ÇϽ÷Á¸é XTerm ºÎºÐÀ» HantermÀ¸·Î ¹Ù²Ù¾î ÁÖ½Ã¸é µË´Ï´Ù. <sect1>¸ÖƼ ¸®¼Ò½º ¼ÂÆà °¡Áö±â <p> ´ÙÀ½°ú °°ÀÌ Çغ¾½Ã´Ù. <tscreen><verb> xterm-1.Font: 7x13bold xterm-2.Font: 6x10 xterm-3.Font: fixed </verb></tscreen> xterm-1, xterm-2, xterm-3Àº Ŭ·¡½º¸íÀÌ ¾Æ´Ï¶ó ±×³É À̸§ÀÔ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ xtermÀ» ½ÇÇà½ÃÄÑ º¸¸é ¾î¶»°Ô µÉ±î¿ä? <tscreen><verb> xterm -name "xterm-1" xterm -name "xterm-2" xterm -name "xterm-3" </verb></tscreen> ¿¹»óÇϽŠ°á°ú°¡ ³ª¿Ô½À´Ï±î? <sect1>±â Ÿ <p> ¿©·¯ºÐÀÌ ¸¹ÀÌ »ç¿ëÇÏ´Â CD Ç÷¹À̾î·Î¼­ workmanÀÌ ÀÖ½À´Ï´Ù. Ŭ·¡½º¸íÀº WorkmanÀÔ´Ï´Ù. ´ëÇ¥ÀûÀÎ ¸®¼Ò½º´Â ´ÙÀ½°ú °°½À´Ï´Ù. <tscreen><verb> Workman.initialVolume: <¼öÄ¡> </verb></tscreen> Ãʱ⠺¼·ýÀ» Á¤ÇØÁØ´Ù. <¼öÄ¡>´Â 0ºÎÅÍ 100 »çÀÌ Ãʱ⠺¼·ýÀÌ ¸¾¿¡ µéÁö ¾ÊÀ¸¸é Á¤ÇØÁֽʽÿä. <tscreen><verb> Workman.smallButtons: <³í¸®°ª(true,false)> </verb></tscreen> ÀÛÀº ¹öÆ°À» »ç¿ëÇÒ °ÍÀΰ¡? <tscreen><verb> Workman.autoPlay: < never, normal, always > </verb></tscreen> always¸¦ ¼±ÅÃÇÏ¸é ¿öÅ©¸Ç ½ÇÇà½Ã ½Ãµð ¾È¿¡ µé¾îÀÖ´Â À½¾Ç½Ãµð¸¦ ¿¬ÁÖÇÕ´Ï´Ù. ÀÚµ¿À¸·Î CD¸¦ ¿¬ÁÖÇØ ÁشٵçÁö ÇÏ´Â ±â´ÉÀº ¹ú½áºÎÅÍ ÀÖ¾î¿Ô´Âµ¥, Áö±Ý¿¡¾ß »õ·Î¿î ±â´ÉÀÌ »ý±ä °Í ¸¶³É ¶°µé¾î´ë´Â °æ¿ì¸¦ º¸¸é ÇѽÉÇÕ´Ï´Ù. X À©µµ ½ÃÀ۽à Ç×»ó ±×·¸°Ô ÇϽ÷Á¸é fvwm ÃʱâÈ­ ÇÔ¼ö¿¡ workmanÀ» ½ÇÇà½ÃÄÑ Áֽʽÿä. ¹°·Ð autoPlay ¸®¼Ò½º¸¦ always·Î ¼³Á¤ÇϽðí¿ä. ±× ´ÙÀ½ Style ¿É¼ÇÀ¸·Î StartIconic ÇÏ½Ã¸é ¾ÆÀÌÄÜ »óÅ·Π½ÃÀÛÇÏ°ÚÁÒ? ±× ´ÙÀ½À¸·Î xcalc¸¦ ¿¹·Î µé¾î º¸ÁÒ. ¿ì¸® ¸ðµÎÀÇ xcalc´Â »ó´çÈ÷ ĢĢÇÑ °è»ê±â¿¡ ºÒ°úÇÕ´Ï´Ù. Ŭ·¡½º¸íÀº XCalcÀÔ´Ï´Ù. ¹öÆ° Çϳª Çϳª¿¡ ´ëÇÏ¿© »ö»óÀ» ÀúÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. <tscreen><verb> XCalc.ti.Command.background: <»ö»ó> XCalc.ti.Command.foreground: <»ö»ó> </verb></tscreen> º¸ÅëÀÇ °æ¿ì xcalc´Â TI-30 °è»ê±â¸¦ ¿¡¹Ä·¹ÀÌÆ®ÇÏÁö¸¸ xcalc ½ÇÇà¿É¼Ç¿¡ -rpnÀ» ÁÖ¸é ¿·À¸·Î ±ä HP-10C °è»ê±âó·³ ÇൿÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡ À§ÀÇ ti¸¦ ¸ðµÎ hp·Î ¹Ù²Û ¼ÂÆÃÀ» ÇÊ¿äÇÕ´Ï´Ù. TI °è»ê±âÀÇ ¹öÆ° Çϳª Çϳª¿¡ ´ëÇÑ ¼ÂÆÃÀº XCalc.hp.button4.background ÀÌ·±½ÄÀ¸·Î ÇØÁÝ´Ï´Ù. CE/C ¹öÆ°À̳ª AC ¹öÆ°Àº »ö»óÀ» ¹Ù²Ù¾îºÁµµ ÁÁ°ÚÁö¿ä? XCalc.ti.button4.background ±×¸®°í button5ÀÇ »ö»óÀ» ¹Ù²Ù½Ê½Ã¿ä. <sect>X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ±×·¡ÇÈ <p> ¾ÆÁ÷ â¿¡ ´ëÇÏ¿© ÇÒ À̾߱âµéÀº ¸¹ÀÌ ³²¾Æ ÀÖÁö¸¸, ½ä··ÇÑ Ã¢¸¸ °¡Áö°í À̸® Àú¸® Àå³­Ä¡´Â °ÍÀº ±×¸¸µÎ°í ´çºÐ°£Àº GRAPHICS ¿¡ ´ëÇÏ¿© °øºÎÇغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. <sect1>X À©µµ¿ì ±×·¡ÇÈÀÇ ±âº» °³³ä <p> <descrip> <tag>¾îµð¿¡(Where) ±×¸± °ÍÀΰ¡?</tag> ¹¹, ³Ê¹« ´ç¿¬ÇÑ °Í ¾Æ´Ï°Ú¾î¿ä? â(Window) ¾È¿¡´Ù ±×¸²À» ±×¸®°ÚÁö¿ä. ÇÏÁö¸¸, ¿ÀÁ÷ ±×°Í¸¸Àº ¾Æ´Ï¶ø´Ï´Ù. â ¸»°íµµ ±×¸± ¼ö ÀÖ´Â °÷ÀÌ Àִµ¥, ±×°ÍÀ» Pixmap À̶ó°í ÇÕ´Ï´Ù. Áß¿äÇÑ ÀÚ·áÇü(Variable Type) Áß¿¡ Window¿Í Pixmap ÀÌ µÎ °¡Áö°¡ Àִµ¥, ÀÌ µÎ °³¸¦ ÇÕÃļ­ ÀÚ·áÇü DrawableÀ̶ó°í ÇÕ´Ï´Ù. Drawable? ÀÚ, ±×¸²À» ±×¸®´Â °ÍÀÌ °¡´ÉÇÏ´Ù´Â ¶æÀÌÁÒ? ¾îµð¼­ º» °Íµµ °°ÁÒ? ¹Ù·Î Àü¹ø °­ÀÇ XGetGeometry ÇÔ¼ö¿¡¼­ Àá±ñ ³ª¿Ô´ø ³à¼®ÀÔ´Ï´Ù. ´çºÐ°£ °è¼Ó â¿¡´Ù¸¸ ±×¸± °ÍÀÌ¿À´Ï, Pixmap¿¡ ´ëÇÑ ¼³¸íÀ» ´ÙÀ½À¸·Î ¹Ì·ì´Ï´Ù. ÀÌ·¸°Ô ¹Ì·ïµµ µÇ³Ä±¸¿ä? °ÆÁ¤ÇÏÁö ¸¶½Ê½Ã¿ä. Drawable ÀÚ·áÇüÀ̶ó°í µÇ¾î ÀÖ´Â °ÍÀº Window³ª Pixmap µÎ °¡Áö¿¡ ¶È°°ÀÌ Àû¿ëµÇ¹Ç·Î »õ·Ó°Ô ¹è¿ì½Ç ÇÊ¿ä°¡ ¾ø°í ÀÌÇØÇϽñ⵵ ½¬¿ï °Ì´Ï´Ù. <tag>¾î¶² º×À» °¡Áö°í? ( Graphics Context )</tag> Å« º×, ÀÛÀº º× ... »¡°£»ö, ³ë¶õ»ö, ÁÖȲ»ö ... ¹«¾ùÀΰ¡¸¦ ±×¸± ¶§ ÀÚ½ÅÀÇ ±¸¹Ì¿¡ ¸Â°Ô ´Ù¾çÇÑ µµ±¸¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ¾î¾ß ÇÏ°ÚÁÒ? X À©µµ¿ì ½Ã½ºÅÛÀº Graphics Context ù±ÛÀÚ¸¸ µû¼­ GC¶ó°í ÇÏ´Â ¾ÆÁÖ Æ¯º°ÇÑ ÀÚ¿ø(Resource)À» °¡Áö°í ÀÖ½À´Ï´Ù. ¿ä GC¶ó°í ÇÏ´Â °Í¿¡ °ú¿¬ ¾î¶»°Ô(How) ±×¸± °ÍÀΰ¡? ¶ó´Â ¹®Á¦¿¡ ´ëÇÑ Á¤º¸¸¦ ÀüÀûÀ¸·Î(!) °¡Áö°í ÀÖ½À´Ï´Ù. Ç×»ó ÀÚ¿øÀº ¼­¹ö°¡ µ¶ÀçÀûÀ¸·Î(!) °ü¸®¸¦ ÇÏ´Â ¸ð½ÀÀ» ¿©±â¼­µµ ¿³º¼ ¼ö ÀÖ±º¿ä. :) <tag>¾î¶² °ÍÀ» ±×¸± ¼ö Àִ°¡? ( ±×·¡ÇÈ ³»¿ë )</tag> ±×·¡ÇÈ¿¡ ±âº»ÀÎ Á¡(Point), ¼±(Line)À» ±×¸± ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ Á¡, ÇϳªÀÇ ¼±À» ±×¸®¶ó°í ¼­¹ö¿¡°Ô ¿äûÇÏ´Â ÇÔ¼öµéÀÌ ´ç¿¬È÷ ±¸ºñµÇ¾î ÀÖ°í, ¿©±â¿¡ °³¹ßÀÚ Æí¸®¸¦ À§Çؼ­ ¿©·¯ °³ÀÇ Á¡, ¿©·¯ °³ÀÇ ¼±À» ±×¸®´Â ÇÔ¼ö, »ç°¢Çü, ¿øÈ£ µîµîÀ» ±×¸®µµ·Ï ¿äûÇÏ´Â ÇÔ¼ö°¡ ¶ÇÇÑ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. ¸¶Áö¸·À¸·Î ÅؽºÆ® ¹®ÀÚ¸¦ ±×·Á³¾ ¼ö ÀÖ´Â ÇÔ¼öµéÀÌ À־ ¿øÇÏ´Â ÆùÆ®¸¦ °¡Áö°í ¹®ÀÚ¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. X À©µµ¿ì´Â GUI üÁ¦À̹ǷΠ±ÛÀÚ ¶ÇÇÑ ¾²´Â °Ô ¾Æ´Ï¶ó ´Ù¸¥ µµÇü°ú ¸¶Âù°¡Áö·Î ±×¸®´Â °ÍÀÌÁÒ. Âü°í·Î ¿©·¯ºÐÀÌ ½½·¢À» ¼³Ä¡ÇÒ ¶§ PEX ¶óÀ̺귯¸®¸¦ ¼³Ä¡Çϼ̴ٸé 3Â÷¿ø ±×·¡ÇÈÀ» ¾ÆÁÖ ½±°Ô ±×¸± ¼ö ÀÖ½À´Ï´Ù. ³ªÁß¿¡ ±âȸ°¡ µÇ¸é ¾à°£ ¼³¸íÀ» µå¸± ¿¹Á¤ÀÔ´Ï´Ù¸¸... </descrip> <sect2>±×·¡ÇÈÀÇ ±âº» ÀýÂ÷ <p> ¾î¶² ÇÁ·Î±×·¡¹ÖÀÌµç ¸¶Âù°¡ÁöÀÌ°ÚÁö¸¸, X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº ¾î¶² ÀÏÀ» ¼öÇàÇϵçÁö Á¤ÇØÁ® ÀÖ´Â ¸î ´Ü°èÀÇ ÀýÂ÷¸¦ µû¶ó¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÀýÂ÷¸¦ ¸Ó¸® ¼Ó¿¡ Ç×»ó ±â¾ïÇÏ½Ç ¼ö ÀÖ´Â ºÐµéÀ̾߸»·Î X À©µµ¿ì ÇÁ·Î±×·¡¹Ö µµ»çµéÀÌ µÇ½Ã´Â °Ì´Ï´Ù. <descrip> <tag><±âº» ÀýÂ÷></tag> <enum> <item>¿ì¼± ±×¸± ´ë»óÀÌ ¹Ì¸® ÁغñµÇ¾î ÀÖ¾î¾ß ÇÏ°ÚÁÒ? ¿ì¸®´Â XCreateSimpleWindow ÇÔ¼ö¸¦ ÅëÇØ Ã¢À» ¸¸µé¾î ³õÀ¸¸é µË´Ï´Ù. <item><bf>Áß¿ä!!!</bf> ±× ´ÙÀ½¿¡´Â GC¶ó°í Çϴ Ưº°ÇÑ ÀÚ¿øÀ» ¼­¹ö¿¡°Ô ¸¸µé¾î ´Þ¶ó°í ¿äûÇÕ´Ï´Ù. ±×¸®°í ¿ì¸®´Â GCÀÇ ID¸¸ ¼­¹ö¿¡°Ô¼­ ¹ÝȯÀ» ¹Þ½À´Ï´Ù. ¿ì¸®°¡ GC ÀÚü³»¿ëÀ» ´Ù °¡Á®¿Ã ¼ö´Â ¾ø½À´Ï´Ù. ´ÜÁö! ±× ID¸¸ °¡Á®¿É´Ï´Ù. <item>±×¸®°í ½ÍÀº ½ºÅ¸ÀÏÀ» Á¤ÇÏ°í GCÀÇ Æ¯Á¤°ªÀ» ¹Ù²Ù¾î ´Þ¶ó°í ¿äûÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ¼±ÀÇ ±½±â, Á¡¼±ÀÌ³Ä ½Ç¼±À̳Ä, »ö»óÀº ¾î¶² °ÍÀ¸·Î ÇÏ´À³Ä µîµî <item>±×¸®°í ½ÍÀº µµÇüÀ» ¼±ÅÃÇؼ­ ¾Ë¸Â´Â ÇÔ¼ö¸¦ È£ÃâÇÏ¿© Á¡ÀÌµç ¼±ÀÌµç ¶Ç´Â »ç°¢ÇüÀ̵簡¿¡ ¾î¶² â¿¡ ¾î¶² GC¸¦ ÀÌ¿ëÇؼ­ ±×¸®¶ó°í ¼­¹ö¿¡°Ô ¿äûÇÕ´Ï´Ù. </enum> </descrip> Áö±ÝºÎÅÍ´Â ÀÌ ¼ø¼­ ±×´ë·Î ¼³¸íÀ» Çسª°¥ °ÍÀÔ´Ï´Ù. À§ ±âº»ÀýÂ÷¸¦ ²À ±â¾ïÇϼ¼¿ä. <sect2>¿ì¼± GC ¸¦ ¸¸µéÀÚ. <p> ±âº» ÀýÂ÷ 1 ¿¡ ´ëÇؼ­´Â ¼³¸íµå¸®Áö ¾Ê½À´Ï´Ù. â ¸¸µå´Â °Å Áö±Ý±îÁö ÇØ¿ÔÀݾƿä? <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h> GC XCreateGC ( Display *display, Drawable drw, unsigned long bitmask, XGCValues *values ); </verb></tscreen> bitmask, XGCValues Çü º¯¼ö values¿¡ ´ëÇÑ ¼³¸í¸¸ÀÌ ÇÊ¿äÇÏ°Ú±º¿ä. <itemize> <item><XGCValues Çü º¯¼ö ±¸Á¶Ã¼¿¡ ´ëÇÑ ¼³¸í> </itemize> <X11/Xlib.h>¿¡ Á¤ÀǵǾî ÀÖ´Â XGCValues±¸Á¶Ã¼¿£ ´ÙÀ½°ú °°Àº ¸â¹öµéÀÌ ÀÖ½À´Ï´Ù. <tscreen><verb> -------------------------------------------------------------------- # ¸â ¹ö ¸í ºñÆ® ¸Å½ºÆ® ±âº»°ª -------------------------------------------------------------------- 1 int function GCFunction GXCopy 2 unsigned long plane_mask GCPlaneMask ¸ðµÎ 1 3 unsigned long foreground GCForeground 0 4 unsigned long background GCBackground 1 5 int line_width GCLineWidth 0 6 int line_style GCLineStyle LineSolid 7 int cap_style GCCapStyle CapButt 8 int join_style GCJoinStyle JoinMiter 9 int fill_style GCFillStyle FillSolid 10 int fill_rule GCFillRule EvenOddRule 11 int arc_mode GCArcMode ArcPieSlice 12 Pixmap tile GCTile ? 13 Pixmap stipple GCStipple ? 14 int ts_x_origin GCTileStipXOrigin 0 15 int ts_y_origin GCTileStipYOrigin 0 16 Font font GCFont ? 17 int subwindow_mode GCSubwindowMode ClipByChildren 18 Bool graphics_exposures GCGraphicsExposures True 19 int clip_x_origin GCClipXOrigin 0 20 int clip_y_origin GCClipYOrigin 0 21 Pixmap clip_mask GCClipMask None 22 int dash_offset GCDashOffset 0 23 char dashes GCDashList 4 </verb></tscreen> ºñÆ® ¸Å½ºÅ© ¸ÅÅ©·Î¿Í ±âº»°ª¿¡¼­ÀÇ ¸ÅÅ©·Î´Â <X11/Xlib.h> È­ÀÏ¿¡¼­ ÀÚµ¿À¸·Î Æ÷ÇÔ(#include)ÇÏ´Â <X11/X.h> È­ÀÏÀÇ GRAPHICS DEFINITION ºÎºÐ¿¡ Á¤ÀǵǾî ÀÖÀ¸´Ï ±× ºÎºÐÀ» ã¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù. ? Ç¥ÇÑ ºÎºÐÀº ¾ÆÁ÷Àº ¾Ë ÇÊ¿ä°¡ ¾ø°Å³ª 16¹ø FontÀÇ °æ¿ì¿¡´Â ½Ã½ºÅÛ¸¶´Ù ´Ù¸¥ ´Ù¸¥ °ªÀ̹ǷΠÁ¤ÇØÁöÁö ¾ÊÀº °ªÀ̶ó´Â ¶æÀÔ´Ï´Ù. À§ µµÇ¥¸¦ ÁÖÀDZí°Ô »ìÆ캸½Ê½Ã¿ä. ¸â¹ö¸í°ú ºñÆ® ¸Å½ºÅ©¸í »çÀÌ¿¡´Â ÇÑ ´«¿¡µµ ô ¾Ë¾Æº¼ ¼ö ÀÖ´Â ¸í¸í±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù. ºñÆ® ¸Å½º¸íÀº Ç×»ó GC·Î ½ÃÀÛÇÏ°í ¸â¹ö¸íÀÌ ¼Ò¹®ÀÚÀÎ °Í°ú ´Þ¸® Ç×»ó ´ë¹®ÀÚ, ±×¸®°í ´Ü¾î¸¶´Ù ´ë¹®ÀÚ¸¦ ¾¹´Ï´Ù. ¸â¹ö¸í¿¡ ÀÖ´Â ´ë½¬(-) ¹®ÀÚ´Â ¾ø¾Û´Ï´Ù. ¸â¹ö¸íÀ» ¼Ò¹®Àڷθ¸ ½è±â ¶§¹®¿¡ ´Ü¾î±¸º°À» À§ÇØ ´ë½¬°¡ µé¾î°£ °Í¿¡ ºÒ°úÇϴϱî¿ä. ÀÌ·¯ÇÑ ¸í¸í ¹æ½ÄÀº X Àü¹Ý¿¡ »ç¿ëµÇ°í ÀÖÀ¸´Ï ¼ÒȦÈ÷ ³Ñ±âÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù. ÇÁ·Î±×·¥ ³»¿¡¼­ º¸Åë ´ÙÀ½°ú °°Àº °úÁ¤À» ÅëÇØ GC¸¦ ¼­¹ö Ãø¿¡ »ý¼º,µî·Ï½ÃÅ°°í ID¸¦ ÀÔ¼öÇÕ´Ï´Ù. <tscreen><verb> Display *display; /* µð½ºÇ÷¹ÀÌ ¼­¹öÀÇ ID */ Window window; /* »ý¼ºµÉ âÀÇ ID */ GC gc; /* ¿ì¸®°¡ »ç¿ëÇÒ º× */ XGCValues gvalue; /* º×ÀÇ ¼Ó¼ºÀ» ÁöÁ¤ÇÒ ¶§ ±× ¼Ó¼ºÀ» ÀúÀåÇØµÑ º¯¼ö */ ... /* ¿ì¸®°¡ ¿øÇÏ´Â ±×·¡ÇÈ ¼Ó¼º¸¸À» ¼ÂÆÃÇÑ´Ù */ gvalue.line_width = 20; gvalue.line_style = LineOnOffDash; gvalue.cap_style = CapRound; gvalue.join_style = JoinRound; /* ÁÖÀÇ */ gc = XCreateGC ( display, window, GCLineWidth | GCLineStyle | GCCapStyle, &ero;gvalue ); /* ¿©±â¼­ ´«¿©°Ü º¼ °ÍÀº GCLineWidth | GCLineStyle | GCCapStyle ºÎºÐÀÌ´Ù. ¿ì¸®°¡ XGCValues Çü º¯¼ö gvalue¿¡ ¼ÂÆÃÇÑ ¼Ó¼ºÀÇ ¸Å½ºÅ©¸¦ OR Çü½ÄÀ¸·Î ÁöÁ¤ÇØÁÖ¾î¾ß ÇÑ´Ù. */ </verb></tscreen> º×À» óÀ½ ¸¸µé ¶§ºÎÅÍ ¹Ì¸® ¸î °¡Áö ¼Ó¼ºÀ» ¸¸µé¾î ³õ°í ½ÃÀÛÇÏ´Â ÀüÇüÀûÀÎ ¹æ½Ä ÀÔ´Ï´Ù. ºñÆ® ¸Å½ºÅ© ¾´ ¹æ½ÄÀ» Á¤¸»·Î À¯½ÉÈ÷ »ìÆ캸½Ê½Ã¿ä. ±×·¯¸é ÇÑ °¡Áö »ç½ÇÀ» ´«Ä¡Ã¤½Ç ¼ö ÀÖ½À´Ï´Ù. /* ÁÖÀÇ */¶ó°í ÇÑ ÁÙ¿¡¼­ µÎ ÁÙÀÌ À̾îÁú ¶§ ¾î¶² ¸ð¾çÀ¸·Î À̾îÁúÁö¿¡ ´ëÇÏ¿© Á¤ÇØÁÖ¾úÁö¸¸ GC¸¦ ¸¸µé ¶§ ºñÆ® ¸Å½ºÅ©¿¡¼­ GCJoinStyle À» ³Ö¾îÁÖÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¼Ó¼ºÀÌ µÇÁö ¸øÇÕ´Ï´Ù. ¾î¶»°Ô º¸¸é ´ç¿¬ÇÏÁÒ? ÄÄÇ»ÅÍ°¡ ¹«½¼ ÀçÁÖ·Î ¿ì¸®°¡ ¹«½¼ °ªÀ» ¿øÇÏ´ÂÁö ¾Ë°Ú½À´Ï´Ù. ÀÌ·¯Àú·¯ÇÑ °ÍÀ» ÁöÁ¤ÇØ µÎ¾úÀ¸´Ï ±×°ÍÀ» ¼ÂÆÃÇ϶ó. ÀÌ·± ½ÄÀ¸·Î ÀÚ¼¼È÷ ¾Ë·ÁÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. <sect2>GCÀÇ ½ºÅ¸ÀÏ ¼³Á¤Çϱâ <p> ¸Å¹ø GC¸¦ ¸¸µé ¶§¸¸ ¼Ó¼ºÀ» Á¤ÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ÀÌ¹Ì »¡°­ ¹°°¨À» Àû½Å º×À̶ó ÇÏ´õ¶óµµ ¹°¿¡ ¾Ä¾î³»°í ÆĶû ¹°°¨À» Àû½Ç ¼öµµ ÀÖ´Â °Í ¾Æ´Ï°Ú½À´Ï±î? <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h> XChangeGC ( Display *display, GC gc, unsigned long mask, XGCValues *gvalues ); </verb></tscreen> »ç¿ë¹ýÀº À§¿¡¼­¿Í °°½À´Ï´Ù. º×ÀÇ ¼Ó¼ºÀ» ¹Ù²Ù°í ½ÍÀ» ¶§´Â XGCValues Çü º¯¼öÀÇ ¸â¹ö¿¡ ÀûÀýÇÑ °ªÀ» ¼ÂÆÃÇÑ ÈÄ, ÀÌ ÇÔ¼ö¸¦ ºÎ¸£¸é µË´Ï´Ù. ºñÆ®¸Å½ºÅ©¸¦ Àß ¾²¼Å¾ß°ÚÁÒ? <sect2>ÀÌÁ¦ ¹°°¨¿¡ Àû½Å º×À¸·Î ±×·Áº¾½Ã´Ù. <p> <sect3>Á¡ ±×¸®´Â ÇÔ¼ö <p> <tscreen><verb> ÇÔ¼ö ¿øÇü : <X11/Xlib.h> XDrawPoint( Display *display, Drawable d, GC gc, int x, int y ); XDrawPoints ( Display *display, Drawable d, GC gc, XPoint *points, int npoints, int mode ); typedef struct { short x, y; } XPoint; /* Âü°í : XSegment, XRectangle, XArc */ </verb></tscreen> XDrawPoints ÇÔ¼ö´Â µÚ¿¡ º¹¼öÇüÀÓÀ» ÀǹÌÇÏ´Â s°¡ ºÙÀº °Í¿¡ À¯ÀÇÇսôÙ. ¿©·¯ °³ÀÇ Á¡À» XPoint Çü ±¸Á¶Ã¼ ¹è¿­¿¡ ³Ö¾î¼­ ÇÑ ¹øÀÇ ÇÔ¼ö ºÎ¸£±â·Î ±×¸®°íÀÚ ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ¸ðµç ½ºÅ¸ÀÏ¿¡ ´ëÇÑ ¼ÂÆÃÀº Ç×»ó GC Çü º¯¼ö°¡ °¡¸®Å°´Â ¼­¹öÀÇ ¸Þ¸ð¸®¿¡ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇսôÙ. npoints º¯¼ö´Â Á¡ ¹è¿­ÀÇ °¹¼ö¸¦ ÁöÁ¤ÇØÁÝ´Ï´Ù. mode ¿¡´Â ´ÙÀ½ µÎ °¡Áö°¡ Àִµ¥ CoordModeOriginÀº ÁÖ¾îÁø ¸ðµç ÁÂÇ¥°¡ DrawableÀÇ ¿øÁ¡¿¡ ´ëÇÑ ÁÂÇ¥·Î ÁÖ¾îÁ³À½À» ÀǹÌÇϸç, CoorDModePrevious´Â ÃÖÃÊÀÇ Á¡¸¸ Drawable ¿øÁ¡¿¡ ´ëÇÑ ÁÂÇ¥ÀÌ¸ç ³ª¸ÓÁö´Â ¹Ù·Î Á÷ÀüÀÇ Á¡¿¡ ´ëÇÑ »ó´ë ÁÂÇ¥·Î Ç¥½ÃµÇ¾î ÀÖÀ½À» ³ªÅ¸³»ÁÝ´Ï´Ù. <sect3>Á÷¼± ±×¸®´Â ÇÔ¼ö <p> <tscreen><verb> ÇÔ¼ö ¿øÇü : <X11/Xlib.h> XDrawLine( Display *display, Drawable d, GC gc, int x1, int y1, int x2, int y2 ); XDrawLines( Display *display, Drawable d, GC gc, XPoints *points, int npoints, int mode ); XDrawSegments( Display *display, Drawable d, GC gc, XSegment *segments, int nsegments ); </verb></tscreen> ù¹ø° ÇÔ¼ö´Â Drawable ³»¿¡¼­ ( x1, y1 )¿¡¼­ ( x2, y2 ) ÁÂÇ¥±îÁö ¼±À» ±ß´Â ¾ÆÁÖ ÀϹÝÀûÀÎ ÇÔ¼öÀÔ´Ï´Ù. µÎ¹ø° ÇÔ¼ö´Â ¿¬ÇÊ ¶¼Áö ¾Ê°í ±×¸®±â¸¦ ¸»ÇÕ´Ï´Ù. XPoint ±¸Á¶Ã¼ ¹è¿­ÀÇ Á¡µéÀÌ °è¼Ó À̾îÁö´Â ÇüÅ·Π±×·ÁÁø´Ù. ÁÂÇ¥¿¡ ´ëÇÑ Ç¥±â´Â mode °ªÀ¸·Î ÇÕ´Ï´Ù. Á¡ ±×¸®´Â ÇÔ¼ö XDrawPoints¿¡¼­¿Í °°½À´Ï´Ù. ¼¼¹ø° XDrawSegments´Â µÎ¹ø° ÇÔ¼ö¿Í ´Þ¸® ¿¬¼ÓµÈ ¹è¿­ÀÇ Á¡µéÀ» ÇÑ ½Ö ¾¿ ¹­¾î¼­ ¼±À» ¿©·¯ °³ ±×¸°´Ù. (x1,y1)¿¡¼­ (x2,y2)¿¡ ±ß°í, ´Ù½Ã (x3,y3)¿¡¼­ (x4,y4)¿¡ ±ß´Â ¹æ½ÄÀÔ´Ï´Ù. ¼± ½ºÅ¸ÀÏÀÌ ¸¹À¸¹Ç·Î Xlib¿¡ ´ëÇÑ ·¹ÆÛ·±½º PS È­ÀÏ µîÀ» ±¸ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. Ã¥À» »çÁö ¾Ê¾Æµµ ¿Ïº®ÇÑ ¼³¸í¼­°¡ µÉ ¸¸Å­ Àß ¸¸µé¾îÁ® ÀÖ½À´Ï´Ù. <tscreen><verb> Âü°í ÇÔ¼ö : XSetLineAttributes () XSetDash () </verb></tscreen> <sect3>Á÷»ç°¢Çü ±×¸®´Â ÇÔ¼ö <p> <tscreen><verb> ÇÔ¼ö ¿øÇü : <X11/Xlib.h> XDrawRectangle ( Display *display, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height ); XDrawRectangles( Display *display, Drawable d, GC gc, XRectangle rectangels[], int nrectangles ); </verb></tscreen> <sect3>³ª¸ÓÁö <p> ±×·¡ÇÈ¿¡ °ü½ÉÀÌ ¸¹À¸½Å ºÐµéÀº ½º½º·Î ³ª¸ÓÁö ÇÔ¼öµéÀ» Á¶»çÇϽñ⠹ٶø´Ï´Ù. ÀÌ°Í¿¡ ¸¸Á·ÇϽÃÁö ¸øÇÏ´Â ºÐµéÀº 3D ±×·¡ÇÈ ¶óÀ̺귯¸®ÀÎ PEXlib ¿¡ ´ëÇÑ °øºÎ¸¦ ÇÏ½Ã¸é µË´Ï´Ù. ÀÌ°Í¿¡ ´ëÇÑ ³»¿ëÀº Xlib ÇÁ·Î±×·¡¹Ö ¼öÁØÀ» ³Ñ¾î¼­°í ±× ÀÚü·Îµµ ¹æ´ëÇϱ⠶§¹®¿¡ ¿©·¯ºÐÀÇ ÀÇÁö¿¡ ¸Ã±é´Ï´Ù. À§¿¡¼­ ¼³¸íÇÑ ÇÔ¼öµéÀ» °¡Áö°í ´ÙÀ½¿¡´Â ½Ç½ÀÀ» Çغ¸±â·Î ÇսôÙ. ±×¸®°í °£·«ÇÏ°Ô ÆùÆ®¸¦ °¡Áö°í ¹®ÀÚ¿­ ³ªÅ¸³»±â¸¦ ´Ù·ç¾îº¸°Ú½À´Ï´Ù. <sect1>±×·¡ÇÈÀÇ ¿¬½À <p> Xlib ±×·¡ÇÈÀº X ÇÁ·Î±×·¡¹ÖÀÇ ±âÃÊ°¡ µÇ¾îÁÖ´Â ¾ÆÁÖ ±âº»ÀûÀÎ ±â´ÉÀÔ´Ï´Ù. X À©µµ¿ì´Â ¿ÂÅë ±×·¡ÇÈÀ¸·Î °¡µæ Â÷ ÀÖ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. Á¡ ÇϳªºÎÅÍ ¸ðµç º¹ÀâÇÑ µµÇüÀº °á±¹ Xlib ÀÇ ÇÔ¼ö¸¦ ÅëÇؼ­ °¡´ÉÇÑ °ÍÀÔ´Ï´Ù. Á¦ °èȹÀ¸·Î´Â ¾öû³­ ¼Óµµ·Î Xlib ÇÁ·Î±×·¡¹ÖÀ» ¸¶Ä¡°í ¾î¼­ »¡¸® ¿©·¯ºÐÀÌ Àç¹ÌÀÖ¾î ÇÒ Xt ÇÁ·Î±×·¡¹ÖÀ¸·Î ³Ñ¾î°¡°í ½ÍÀºµ¥¿ä, ¹Ù·Î ±× °÷¿¡¼­ À§Á¬À» »õ·Î ¸¸µç´Ùµç°¡ ÇÒ ¶§ ¾ÆÁÖ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù. Àú¸¦ µû¶ó ¿À½Ã¸é ¿©·¯ºÐ¸¸ÀÇ ¸ÚÁø À§Á¬À» ¸¸µé ¼ö ÀÖµµ·Ï ¾È³»Çص帮°Ú½À´Ï´Ù. ¶Ç ¸ð¸£ÁÒ. ¿©·¯ºÐ Áß¿¡¼­ Á¤¸»·Î »ó»ó·ÂÀÌ ¶Ù¾î³ª°í ¸ÚÁø À§Á¬ÀÌ ³ª¿À¸é FWF(Free Widget Foundation)ÀÇ À§Á¬¼Â¿¡ Æ÷ÇԵǾî Àü¼¼°èÀÇ ÇÁ·Î±×·¡¸Óµé¿¡°Ô ¾Ë·ÁÁú ¼öµµ ÀÖ½À´Ï´Ù. ¼Ò½º°¡ °ø°³µÇ¾î ÀÖÁö ¾Ê´Â ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â ºÒ°¡´ÉÇÑ ÀÏ ¾Æ´Ï°Ú½À´Ï±î? ´Ù½Ã ÇÑ ¹ø È®ÀÎÇÕ´Ï´Ù! Xlib ±×·¡ÇÈÀº Ç×»ó GC ¶ó°í ÇÏ´Â ¸®¼Ò½º¸¦ °¡Áö°í ÇÕ´Ï´Ù. ±× GC´Â ±×·¡ÇÈ¿¡ °üÇÑ ¿©·¯ Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â ³à¼®Àä, ´ç¿¬È÷ ¼­¹ö Ãø¿¡´Ù GC »ý¼ºÀ» ÀÇ·ÚÇÏ°í ¿ì¸®´Â ±× GCÀÇ ID¸¸À» ¹Þ¾Æ¿É´Ï´Ù. ÀÌ°ÍÀº X À©µµ¿ìÀÇ ³×Æ®¿öÅ© ÁöÇâÀû Ư¼º¿¡¼­ ³ª¿À´Â °ÍÀ¸·Î¼­, ³×Æ®¿öÅ©¸¦ ÅëÇؼ­ ÃÖ¼ÒÀÇ Á¤º¸¸¦ ÀüÇϸ鼭µµ ¿øÇÏ´Â ±â´ÉÀ» ¾ò°íÀÚ Çϱ⠶§¹®ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¸Å¹ø red ¶ó´Â »ö»óÀ¸·Î ¼±À» ±×À¸¶ó´Â 100¹øÀÇ ¸í·ÉÀÌ ÀÖ´Ù¸é, red·Î ±×¸®¶ó°í´Â ¸í·ÉÀÌ °è¼Ó ³×Æ®¿öÅ©¸¦ Ÿ°í ¼­¹ö·Î ÀüÇØÁ®¾ß ÇÒ °ÍÀÔ´Ï´Ù. ¿©·¯ °¡Áö ÁÖ¹®»çÇ×À» ¹Ì¸® µî·ÏÇسõ°í °£´ÜÈ÷ ±× ID¸¸À» Àü¼ÛÇÏ´Â ¹æ½ÄÀÌ ÈξÀ ³×Æ®¿öÅ©ÀÇ ·Îµå¸¦ ÁÙÀÌ´Â ¹æ¹ýÀÌ µÇ°ÚÁÒ? ¹°·Ð Á׾´Â °ÍÀº Ç×»ó ¼­¹öÀÔ´Ï´Ù. :) ÀÌÁ¦ºÎÅÍ ±×·¡ÇÈÀ» ¿¬½ÀÇغ¾½Ã´Ù <itemize> <item>¿¹Á¦ 7 </itemize> <tscreen><verb> #include <X11/Xlib.h> /* »ö»ó À̸§¿¡ ÇØ´çÇÏ´Â Çȼ¿°ª ¹ÝȯÇÏ´Â ÇÔ¼ö */ unsigned long UsrColorPixel( Display*, char* ); /* ¿äûÀ» Ç÷¯½¬ÇÏ°í ÁöÁ¤µÈ Ãʸ¸Å­ Áö¿¬½ÃÅ°´Â ÇÔ¼ö */ void Pause( Display*, int ); static XPoint points[] = {{ 200, 50 },{ 100, 150 },{ 300, 150 },{ 200, 50 }}; static XSegment segs[] = {{ 10, 10, 390, 190 },{ 10, 190, 390, 10 }}; static char dash_list[] = { 20, 5, 10, 5 }; int main() { Display *d; Window w; /* One TopLevel Window &ero; Two Child Windows */ GC gc; XGCValues gv; /* ¼­¹ö¿Í Á¢¼ÓÇϱ⠱׸®°í º¯¼öµéÀ» ÃʱâÈ­ */ d = XOpenDisplay ( NULL ); /* ÀÚ, ½ÃÀÛÇغ¼±î¿ä? */ w = XCreateSimpleWindow ( d, DefaultRootWindow( d ), 100, 100, 400, 200, 1, BlackPixel(d,0), WhitePixel(d,0) ); XMapWindow( d, w ); Pause( d, 2 ); /* * [1] Á¡(Point)À» Âï¾îº¾´Ï´Ù. XDrawPoint(s) ÇÔ¼ö »ç¿ë */ gv.foreground = UsrColorPixel( d, "red" ); gc = XCreateGC( d, w, GCForeground, &ero;gv ); XDrawPoint ( d, w, gc, 200, 100 ); Pause( d, 3 ); gv.foreground = UsrColorPixel( d, "blue" ); XChangeGC ( d, gc, GCForeground, &ero;gv ); XDrawPoints ( d, w, gc, points, 3, CoordModeOrigin ); Pause( d, 3 ); /* * °íÇػ󵵿¡¼­´Â ¹¹ °ÅÀÇ ¾Èº¸ÀÏ Á¤µµ·Î RED»öÀÇ ÀÛÀº Á¡ Çϳª, * ±×¸®°í ³ª¼­ BLUE»öÀÇ Á¡ 3°³¸¦ Âï°í ÀÖ½À´Ï´Ù. Á¤¸»·Î ÁýÁßÇؼ­ * º¸¼Å¾ß ÇÒ °Ì´Ï´Ù. ¸ð´ÏÅÍ°¡ ´õ·¯¿ì¸é ¸ÕÁö¿Í ±¸º°ÀÌ ¾ÈµÉÁöµµ... :) */ XClearWindow( d, w ); { int i, j; for ( j = 0; j < 200 ; j++ ) for ( i = 0; i < 400 ; i++ ) { XDrawPoint( d, w, gc, i, j ); XFlush ( d ); } } Pause( d, 3 ); /* * BLUE Á¡À¸·Î â Çϳª °¡µæÈ÷ Ä¥Çغ¾´Ï´Ù. XFlush ÇÔ¼ö¸¦ °íÀÇ·Î ½á¼­ * ±× °úÁ¤À» ¾Ë¾Æº¼ ¼ö ÀÖµµ·Ï ÇÏ¿´½À´Ï´Ù. »ý°¢º¸´Ù ºü¸£°Ô ÂïÈú °Ì´Ï´Ù. * ¸®´ª½º´Â ¿ÏÀüÇÑ ÀǹÌÀÇ 32ºñÆ® OS À̴ϱî¿ä. */ /* * [2] ¼±(Line)À» ±×·Áº¾´Ï´Ù. */ XSetWindowBackground ( d, w, UsrColorPixel( d, "blue" ) ); gv.foreground = WhitePixel( d, 0 ); gv.background = UsrColorPixel( d, "red" ); gv.line_width = 20; XChangeGC( d, gc, GCForeground|GCBackground|GCLineWidth, &ero;gv ); XDrawLine ( d, w, gc, 20, 20, 380, 180 ); /* CapButt */ Pause ( d, 3 ); gv.cap_style = CapRound; XChangeGC( d, gc, GCCapStyle, &ero;gv ); XClearWindow( d, w ); XDrawLine ( d, w, gc, 380, 20, 20, 180 ); Pause ( d, 3 ); gv.cap_style = CapProjecting; XChangeGC( d, gc, GCCapStyle, &ero;gv ); XClearWindow( d, w ); XDrawLine ( d, w, gc, 20, 20, 380, 180 ); Pause ( d, 3 ); /* * ¿©±â±îÁö´Â XDrawLine ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ĸ ½ºÅ¸ÀÏ(Cap)ÀÌ ¼­·Î * ¾î¶»°Ô ´Ù¸¥Áö È®ÀÎÇØ º¸½Ê½Ã¿ä. */ XSetLineAttributes ( d, gc, 10, LineDoubleDash, CapRound, JoinRound ); XSetDashes( d, gc, 0, dash_list, 4 ); XClearWindow( d, w ); XDrawSegments ( d, w, gc, segs, 2 ); Pause ( d, 3 ); XClearWindow ( d, w ); XSetLineAttributes ( d, gc, 15, LineOnOffDash, CapButt, JoinBevel ); XDrawLines( d, w, gc, points, 4, CoordModeOrigin ); Pause ( d, 3 ); /* * ¼±³¡Á¡ ½ºÅ¸ÀÏ¿¡´Â CapButt, CapRound, CapProjecting 3 °¡Áö°¡ ÀÖ½À´Ï´Ù. * ¼±°ú ¼±ÀÌ ¸¸³ª´Â ¹æ½Ä¿¡µµ ¼¼ °¡Áö°¡ ÀÖ½À´Ï´Ù. JoinMiter, JoinRound, * ±×¸®°í JoinBevel ÀÌ ±×°ÍÀÌÁÒ. * Áß¿äÇÑ °Í! ¼±ÀÇ ½ºÅ¸ÀÏ¿¡´Â ±×³É LineSolid, LineOnOffDash, LineDouble- * Dash °¡ ÀÖ½À´Ï´Ù. * XSetLineAttributes(), XSetDashes()´Â ¿¬±¸°úÁ¦ÀÔ´Ï´Ù. */ /* * [3] ÀÌÁ¦ 2Â÷¿øÀ¸·Î °¡º¾½Ã´Ù. »ç°¢ÇüºÎÅÍ ½ÃÀÛ! */ XClearWindow( d, w ); XSetLineAttributes ( d, gc, 5, LineSolid, CapButt, JoinRound ); XDrawRectangle( d, w, gc, 50 /* X */, 50 /* Y */, 300 /* width */, 100 /* height */ ); Pause( d, 3 ); { XRectangle rect[7]; int i; for ( i = 0; i < 7 ; i ++ ) { rect[i].x = 10 + i * 50; rect[i].y = 20; rect[i].width = 40 ; rect[i].height = 150; } XClearWindow( d, w ); XSetLineAttributes(d,gc,1,LineDoubleDash,CapProjecting,JoinMiter); XDrawRectangles ( d, w, gc, rect, 7 ); Pause ( d, 3 ); } /* * ÀÚ, XDrawRectangle(s)ÀÇ »ç¿ë¹ýÀ» ¾Æ¼Ì³ª¿ä? ±×·¸´Ù¸é ¿¬±¸°úÁ¦°¡ ÀÖ½º * ´Ï´Ù. ÀÌµé ´ë½Å¿¡ XFillRectangle(s)¸¦ ½áº¸½Ê½Ã¿ä. ¾î¶² ÀÏÀÌ ÀϾ * ´Ï±î? */ /* * [4] µÕ±×·± °Íµµ ±×·Áº¾½Ã´Ù. */ { int i, radi; XArc arc[2]; XClearWindow ( d, w ); XSetLineAttributes(d,gc,10,LineSolid,CapRound,JoinRound); for ( radi = 0 ; radi <= 360 ; radi += 90 ) { XDrawArc ( d, w, gc, 10, 10, 380, 180, 0 * 64, radi * 64 ); Pause( d, 1 ); } for ( i = 0 ; i < 2 ; i ++ ) { arc[i].x = 30 + 200 * i; arc[i].y = 30; arc[i].width = arc[i].height = 100; arc[i].angle1 = 0 * 64; arc[i].angle2 = 90 * ( i + 1 ) * 64; } XClearWindow ( d, w ); XDrawArcs( d, w, gc, arc, 2 ); Pause( d, 1 ); XSetForeground( d, gc, UsrColorPixel(d,"yellow") ); for ( i = 0 ; i < 2 ; i ++ ) { XClearWindow ( d, w ); XSetArcMode ( d, gc, i == 0 ? ArcPieSlice : ArcChord ); for ( radi = 0 ; radi <= 360 ; radi += 90 ) { XFillArc ( d, w, gc, 10, 10, 380, 180, 0 * 64, radi * 64 ); Pause( d, 1 ); } XClearWindow( d, w ); XFillArcs( d, w, gc, arc, 2 ); Pause( d, 1 ); } } /* GC, â Æı« &ero; ¼­¹ö¿ÍÀÇ Á¢¼Ó ÇØÁ¦ */ XFreeGC( d, gc ); XUnmapWindow( d, w ); XDestroyWindow( d, w ); XCloseDisplay( d ); return 0; } /* UsrColorPixel() : ÁÖ¾îÁø À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ ±âº» Ä÷¯¸ÊÀÇ Çȼ¿°ª ¹Ýȯ */ unsigned long UsrColorPixel( display, name ) Display *display; char *name; { Colormap cmap; XColor c0, c1; cmap = DefaultColormap( display, 0 ); XAllocNamedColor( display, cmap, name, &ero;c0, &ero;c1 ); return ( c0.pixel ); } void Pause( Display *d, int secs ) { XFlush ( d ); sleep( secs ); } </verb></tscreen> ÄÄÆÄÀÏÀº -lX11 ¿É¼ÇÀ» Áּż­ Xlib ¿Í ¸µÅ©½ÃÄÑ ÁÖ½Ã¸é µË´Ï´Ù. ÃÖ´ëÇÑ Xlib ±×·¡ÇÈ ÇÔ¼öµéÀÇ ±â´ÉÀ» º¸ÀÌ·Á°í ³ë·ÂÇß½À´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼­ º¸¿©µå¸° °Í¸¸À¸·Î´Â ¸¹ÀÌ ºÎÁ·ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÀÚÀ¯·Î¿î ´Ù°¢ÇüÀ» ±×¸®¸é¼­ »ö»óÀ» Ä¥ÇÒ ¼ö ÀÖ´Â XFillPolygon()°ú °°ÀÌ À¯¿ëÇÑ ÇÔ¼ö´Â ¼³¸íµå¸®Áö ¾Ê¾Ò½À´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº ¿©·¯ºÐÀÇ Å½±¸¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ´ÙÀ½ ¹ø¿¡´Â ÆùÆ® Ãâ·ÂÇÏ´Â ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸±â·Î ÇսôÙ. ¿µ¹®ÀÚ Ãâ·Â°ú ´ç¿¬È÷ ÇÑ±Û Ãâ·Â¿¡ °üÇÑ ¾ê±â¸¦ Çغ¸µµ·Ï ÇÏÁÒ. ÆùÆ® °­ÀǸ¦ ¸¶Ä¡¸é ÀÌÁ¦ X À©µµ¿ì´Ù¿î ÇÁ·Î±×·¥À» © ¼ö ÀÖ´Â "À̺¥Æ®"¸¦ ´Ù·ê ¼ö ÀÖ°Ô µÇ°Ú±º¿ä. Xlib µµ ¾ó¸¶ ³²Áö ¾Ê¾Ò½À´Ï´Ù. Èû³»¼¼¿ä. :) <sect>X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ÆùÆ® <P> Xlib ¿Í ÇÔ²² ÇÏ´Â X ÇÁ·Î±×·¡¹ÖÀÌ Àç¹ÌÀÖÀ¸½Å°¡¿ä? Xlib Àº ¾ÆÁÖ Àú¼ö¼øÀÇ ÇÔ¼ö ¸ðÀ½ÀÔ´Ï´Ù. µû¶ó¼­ ÀÌ°Í ÀÚü¸¸À¸·Î´Â ÇÁ·Î±×·¥À» Â¥³»±â°¡ »ó´çÈ÷ Èûµì´Ï´Ù. ½ÇÁ¦ ¾îÇà °³¹ß¿¡ À־´Â ¹Ù·Î À§ »óÀ§ ¼öÁØÀÎ Toolkit ¼öÁØ¿¡¼­ ÀÌ·ç¾îÁöÁö¿ä. ¶Ç´Â ¸¹Àº »ç¶÷µéÀÌ »ç¿ëÇÏ°í ÀÖ´Â ½ÇÁúÀûÀΠǥÁØ ¸ðƼÇÁ(Motif)°¡ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ Á¦°¡ °­Á¶ÇÏ°í ½ÍÀº °ÍÀº Toolkit°ú ¸ðƼÇÁ¸¸À¸·Î´Â ¾î¶² ÁÁÀº ÇÁ·Î±×·¥µµ ¸¸µé ¼ö°¡ ¾ø½À´Ï´Ù. Xlib °¡ Àú¼öÁØÀÌÁö¸¸ ±×°ÍÀº ´Ù½Ã ¸»ÇÏ¸é °­·ÂÇÏ´Ù´Â ¸»µµ µË´Ï´Ù. ÀÌ µÑÀÌ °áÇÕÇؾ߸¸ ¼º´ÉÁÁÀº ÇÁ·Î±×·¥ÀÌ ³ª¿Â´Ù°í È®½ÅÇÕ´Ï´Ù. ¾ÆÁ÷µµ ÇؾßÇÒ ¾ê±âµéÀÌ ¸¹Áö¸¸, ¾ÕÀ¸·Î ³²Àº °Íµé¿¡ ´ëÇؼ­ °£·«ÇÏ°Ô ¸»¾¸µå¸®°í ¿À´ÃÀÇ °­ÀǸ¦ ½ÃÀÛÇغ¼±î ÇÕ´Ï´Ù. ¿À´ÃÀÇ ÆùÆ® Ãâ·Â °­ÀÇ¿¡ ÀÌ¾î °¡Àå Áß¿äÇÏ´Ù°í »ý°¢µÇ´Â À̺¥Æ® 󸮹®Á¦ ( ¸¶¿ì½º À̺¥Æ®, Å°º¸µå À̺¥Æ® )°¡ ³²¾Æ ÀÖ½À´Ï´Ù. X À©µµÀÇ Ä÷¯ ½Ã½ºÅÛ¿¡ ´ëÇؼ­´Â Xt ( X Toolkit ) ÇÁ·Î±×·¡¹Ö¿¡ µé¾î°¡¼­ ¼³¸íµå¸®°Ú½À´Ï´Ù. ³Ê¹« ¿À·§µ¿¾È Xlib ÇÁ·Î±×·¡¹Ö¿¡ ¸Ó¹«¸£¸é Èï¹Ì¸¦ Àұ⠽±±â ¶§¹®ÀÔ´Ï´Ù. <sect1>ÆùÆ® Ãâ·Â¿¡ ´ëÇÏ¿© ... <p> ¾î¶°ÇÑ ÅؽºÆ®(Text)¸¦ Ãâ·ÂÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ 3 °¡Áö °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. <enum> <item>¿ì¼± ¿øÇÏ´Â ÆùÆ®¸¦ °ñ¶ó¼­ ¼­¹ö´õ·¯ ±× ÆùÆ®¸¦ ÀûÀçÇ϶ó°í ¿äûÇÑ´Ù. ±×·¯¸é ¼­¹ö´Â ¿ª½Ã ÆùÆ®¿¡ ´ëÇÑ ID¸¸À» µ¹·ÁÁØ´Ù. ¸¸¾à ¿äûÇÑ ÆùÆ®°¡ ¾ø´Ù¸é ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. <item>ÆùÆ®µµ °á±¹¿£ "±×¸®´Â °Í"ÀÌ´Ù. µû¶ó¼­ ±×·¡ÇÈ ÄÁÅؽºÆ® GC°¡ ÀÌ¹Ì ÀÖ¾î¾ß ÇÑ´Ù. ÀÏ´Ü ¸¸µé¾î ³õÀº GC¿¡´Ù°¡ ÆùÆ® ID¸¦ ÁöÁ¤ÇØÁØ´Ù. <item>ÀÌÁ¦´Â ÀûÀýÇÑ ÇÔ¼ö¸¦ ÅëÇؼ­ Ãâ·ÂÇÑ´Ù. ÀÌ ¶§ ¿ì¸®´Â [2]¹ø °úÁ¤¿¡¼­ ÀÌ¹Ì ÆùÆ® ID Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â GC ¸¸À» »ç¿ëÇÏ¸é µÈ´Ù. 1¹ÙÀÌÆ®°è ¶óƾ°è ¹®ÀÚ´Â XDrawString ÇÔ¼ö¸¦, ¿ì¸®³ª¶ó¿Í °°Àº 2¹ÙÀÌÆ®°è ¹®ÀÚ´Â XDrawString16 ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Ãâ·ÂÇÑ´Ù. </enum> <tscreen><verb> °£·«ÇÑ ÇÔ¼öÀÇ »ç¿ë µµÇ¥¸¦ ±×·Áº¸¸é, [1] XLoadFont() --> [2] XSetFont() --> [3] XDrawString[16]() </verb></tscreen> <sect1>X À©µµ¿ìÀÇ ÆùÆ® ½Ã½ºÅÛÀ» ¾Ë¾Æº¾½Ã´Ù. <p> º»ÀÎÀº X À©µµ¿ì °ü¸®ÀÚ fvwm °­ÀǸ¦ Çϸ鼭 ÆùÆ®¼³Á¤ ºÎºÐ¿¡¼­ ¾ÆÁÖ °£·«ÇÏ°Ô X À©µµ¿ìÀÇ ÆùƮü°è, XLFD¶ó´Â ¸í¸í±ÔÄ¢¿¡ ´ëÇؼ­ ³íÇß´Ù. fvwm °­ÀÇ¿¡¼­´Â öÀúÇÏ°Ô À¯Àú(user) ÀÔÀå¿¡¼­ ½±°Ô ±â¼úÇÏ·Á°í ÇßÀ¸³ª, ÀÌÁ¦ ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á°í ÇϽô ¿©·¯ºÐ¿¡°Ô´Â ´õ¿í ´õ Àü¹®ÀûÀÎ Áö½ÄÀÌ ÇÊ¿äÇϸ®¶ó º¾´Ï´Ù. Åë»ó X À©µµ¿ìÀÇ ÆùÆ®´Â /usr/lib/X11/fonts ¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù. ±× ÇϺΠµð·ºÅ丮¸¦ º¸½Ã¸é 100dpi, 75dpi, Speedo, Type1, misc µîÀÇ µð·ºÅ丮¸¦ ãÀ¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ±× µð·ºÅ丮¿¡ µé¾î°¡º¸½Ã¸é È­ÀϸíÀÌ .pcf.Z ·Î ³¡³ª´Â ¾öû³ª°Ô ¸¹Àº È­ÀϵéÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. Z ´Â compress·Î ¾ÐÃàµÇ¾úÀ½À» ³ªÅ¸³» ÁÖ´Â °ÍÀ¸·Î¼­ X À©µµ¿ì ½Ã½ºÅÛÀº ÆùÆ®¿¡ ´ëÇÑ ¾ÐÃàÀ» Áö¿øÇÕ´Ï´Ù. ¿©·¯ºÐµµ ¾Æ½Ã°ÚÁö¸¸, ÆùÆ®°¡ Â÷ÁöÇÏ´Â µð½ºÅ© ¿ë·®Àº ¾î¸Ó¾î¸¶ ÇÕ´Ï´Ù. ƯÈ÷ M$ À©µµ¿ì °è¿­¿¡¼­ ¾²ÀÌ´ø ¿Ï¼ºÇü ÀúÀå ¹æ½ÄÀÇ ÆùÆ®µéÀº È­ÀÏ Çϳª°¡ 1¸Þ°¡¸¦ ³Ñ¾î°¡´Â °ÍÀÌ Çã´ÙÇßÁö¿ä. ±ú²ýÇÑ ¹®¼­¿¡ ´ëÇÑ ¿å½ÉÀº ´Ù¾çÇÑ ÆùÆ®¿¡ ´ëÇÑ ¿ä±¸·Î À̾îÁ³±¸¿ä. ¾ÐÃà ÆùÆ®¿¡ ´ëÇÑ Áö¿øÀº Á¤¸»·Î ÇÊ¿äÇÑ °ÍÀÓÀ» ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ±× ´ÙÀ½ fonts.dir, fonts.alias¿Í °°Àº Áß¿äÇÑ È­ÀÏÀ» ¸¸³ª½Ç ¼ö ÀÖ½À´Ï´Ù. <descrip> <tag>fonts.dir</tag> ÀÌ È­ÀÏÀº ÇöÀç µð·ºÅ丮¿¡ ¼³Ä¡µÇ¾î ÀÖ´Â ÆùÆ® È­ÀÏ¿¡ ´ëÇÑ XLFD Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù. »õ·Î¿î ÆùÆ®¸¦ ¼³Ä¡ÇÏ°í ³ª¼­´Â mkfontdir ¸í·ÉÀ» ½á¼­ fonts.dir È­ÀÏÀ» °»½ÅÇÕ´Ï´Ù. <tag>fonts.alias</tag> XLFD ½ÄÀÇ ¸í¸í¹æ½ÄÀ¸·Î ÆùÆ® À̸§À» ½áÁشٴ °ÍÀº »ó´çÇÑ °í¿ªÀÌ ¾Æ´Ò ¼ö ¾ø½À´Ï´Ù. ±×·¡¼­ alias º°¸íÀ» »ç¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î¼­ ¿ì¸®°¡ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ°í ÀÖ´Â fixed ¶ó´Â À̸§ÀÇ ÆùÆ®´Â °¢°¢ÀÇ ½Ã½ºÅÛ¸¶´Ù ½ÇÁ¦·Î´Â ´Ù¸¥ ÆùÆ®¸¦ ÁöĪÇÏ°í ÀÖÀ» ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ alias´Â ÆùÆ®À̸§À» ¿Ü¿ì±â ÁÁ°Ô »ç¿ëÀÚ°¡ Á¤ÀÇÇؼ­ ¾µ ¼ö ÀÖµµ·Ï ÇØÁشٴ ¸éµµ °¡Áö°í ÀÖ°í, ƯÁ¤ ÆùÆ®À̸§ÀÌ ¸ðµç ½Ã½ºÅÛ¿¡ Ç×»ó ÀÖ´Â °Íó·³ ÇÒ ¼öµµ Àִٴµ¥ ±× ÀÇÀÇ°¡ ÀÖ½À´Ï´Ù. ¹Ù·Î À§¿¡¼­ ¿¹¸¦ µç fixed¶ó´Â À̸§ÀÇ ÆùÆ®ÀÌ ÁÁÀº ¿¹ÀÔ´Ï´Ù. Âü°í·Î fixed ¶ó´Â ÆùÆ® alias °¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é ´ëºÎºÐÀÇ °æ¿ì X ÀÚü°¡ ¶ß´Ù°¡ ¸» °Ì´Ï´Ù. ÀÌ È­ÀÏÀº ÀÚµ¿À¸·Î »ý¼ºµÇ´Â °ÍÀÌ ¾Æ´Ï´Ï ²À ¹é¾÷À» ÇØµÎ°í ¼öÁ¤ÇϽñ⠹ٶø´Ï´Ù. <tag>fonts.scale</tag> ¿©·¯ºÐÀÌ Speedo³ª Type1 µð·ºÅ丮·Î °¡º¸½Ã¸é fonts.scaleÀ̶ó´Â È­ÀÏÀ» ãÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù. ÆùÆ® È­Àϸí°ú ±×¿¡ ´ëÇÑ XLFD ¹æ½ÄÀÇ Ç¥±â°¡ ¾º¿©Á® ÀÖ½À´Ï´Ù. ÀÌ µÎ °¡Áö Ư¼öÇÑ ÆùÆ®¿¡ ´ëÇؼ­´Â Á¶±Ý ÀÖ´Ù°¡ ¼³¸íµå¸®±â·Î ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì fonts.dir È­ÀÏ°ú ³»¿ëÀÌ °°À» °Ì´Ï´Ù. </descrip> <sect1>X Logical Font Descriptio : XLFD ¿¡ ´ëÇÏ¿© <p> X À©µµ¿ì ½Ã½ºÅÛ¿¡¼­´Â ÆùÆ®°¡ °®°í ÀÖ´Â ¼ºÁúÀ» Áö½ÃÇϱâ À§ÇÏ¿© 14°³ÀÇ Çʵå·Î ÀÌ·ç¾îÁø ±â¼ú¹æ½ÄÀ» ¾¹´Ï´Ù. ¹Ù·Î ÀÌ°ÍÀ» XLFD¶ó°í ÇÏÁö¿ä. ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. <tscreen><verb> -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 </verb></tscreen> 14°³ÀÇ Çʵå´Â ¸ðµÎ - ¹®ÀÚ·Î ºÐ¸®µÇ¾î ÀÖ½À´Ï´Ù. °¢°¢ÀÇ Àǹ̿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ ·Ï ÇÒ±î¿ä? <descrip> <tag>Á¦ÀÛÀÚ Çʵå ( Foundry Field )</tag> º¸Åë ¸Ç ¾Õ¿¡ ¿À´Â ÀÌ Çʵå´Â * ¹®ÀÚ¸¦ ½á¼­ ¾î¶² °÷¿¡¼­ ¸¸µé¾ú´ÂÁö »ó°üÇÏÁö ¾Ê´Â °æ¿ì°¡ ¸¹½À´Ï´Ù. º¸Åë Adobe ȸ»ç°¡ ¸¸µç ÆùÆ®ÀÇ °æ¿ì¿¡´Â adobe¶ó´Â ¹®ÀÚ°¡ µé¾î°¡ ÀÖÁö¿ä. ÀÌ ¹Û¿¡µµ bitstream, b&h, schumacher, sun, kaist, hanyang, misc µîÀÇ ¹®ÀÚ¿­ÀÌ µé¾î°¡ ÀÖ´Â °ÍÀ» Á¾Á¾ º¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. <tag>Æйи® Çʵå ( Family Field )</tag> ÀÌ ³à¼®ÀÌ ±× ÆùÆ®ÀÇ ÀüüÀûÀÎ ¸ð¾çÀ» °áÁ¤ÇÕ´Ï´Ù. ¿ì¸®°¡ ¸¹ÀÌ µé¾îº» Helvetica, Times Roman, Courier µîµîÀÌ ±×°ÍÀÔ´Ï´Ù. ¿ì¸® ÆùÆ®ÀÎ °æ¿ì¿¡´Â myeongjo, gothic µîÀÌ ¹Ù·Î ±×°ÍÀÌÁÒ. <tag>¹«°Ô Çʵå(?) ( Weight Field )</tag> medium, bold, demibold µîÀÇ °ªÀ» °¡Áý´Ï´Ù. ¾î¶² ÀǹÌÀÎÁö ¾Æ½Ç °Ì´Ï´Ù. <tag>°æ»çµµ Çʵå(?) ( Slant Field )</tag> È°ÀÚÀÇ °æ»ç¿¡ ´ëÇÑ Áö½ÃÀÚÀÔ´Ï´Ù. r Àº ¿ì¸®°¡ ¾Ë°í ÀÖ´Â Á¤»óÀûÀÎ ·Î¸¸Ã¼, i´Â ÀÌÅŸ¯Ã¼¸¦ ¸»Çϸç, o ´Â ¹«¾ùÀϱî¿ä? Oblique ¶ó°í Çؼ­ À̰͵µ °æ»ç¹®ÀÚüÀε¥, ¹¹¶ó°í ¼³¸íµå·Á¾ß ÇÒÁö... ÀÌ°Í ¸»°íµµ ri, ro µîÀÇ °ªÀÌ Àִµ¥ °¢°¢ reverse italic, reverse oblique ÀÇ Àǹ̸¦ °®½À´Ï´Ù. <tag>Æø Çʵå ( Setwidth Name Field )</tag> º¸ÅëÀÇ °æ¿ì ¸ðµÎ normal·Î ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ¿Ü¿¡ condensed, narrow µîÀÇ °ªÀ» °¡Áý´Ï´Ù. <tag>ºÎ°¡Àû ½ºÅ¸ÀÏ Çʵå(?) ( Additional Style Field )</tag> ¼¼¸®ÇÁ(Serif)¿Í »ê¼¼¸®ÇÁ(Sans Serif)ÀÇ Â÷ÀÌ °°ÀÌ ºÎ°¡Àû ½ºÅ¸ÀÏÀÇ Â÷À̸¦ ³ªÅ¸³» ÁÖ´Â ÇʵåÀÔ´Ï´Ù. ¼¼¸®ÇÁ´Â º¸Åë ¿ì¸®°¡ º¸´Â ·Î¸¶ÀÚ È°Àڷμ­ I, M °ú °°Àº ±ÛÀÚ À§ ¾Æ·¡¿¡ ÀÖ´Â °¡´Ã°í ªÀº ¼±À» ¸»ÇÕ´Ï´Ù. ¹ºÁö °¨ÀÌ ¿À½Ê´Ï±î? I ÀÚ À§ ¾Æ·¡¿¡ ÀÖ´Â ¿·À¸·Î °¡´Â ¼± º¸À̽ÃÁÒ? ¿©·¯ºÐÀÌ ÇÑÅÒÀ» ¾²½Ã°í ¶ÇÇÑ ±âº» ÆùÆ® (-kaist-*-johab-* ...)¸¦ ¾²½Å´Ù¸é Áö±Ý ´çÀå È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ¼¼¸®ÇÁ ¹®ÀÚ¶õ ¹Ù·Î ±×·¯ÇÑ Àå½ÄÀ» °®´Â ¹®ÀÚ¸¦ ¸»ÇÕ´Ï´Ù. »ê¼¼¸®ÇÁ´Â ±×·¯ÇÑ Àå½ÄÀÌ ¾ø´Â ¹®ÀÚ¸¦ ¸»ÇÕ´Ï´Ù. Sans ¶ó°í ÇÏ´Â °ÍÀÌ ¿µ¾î °í¾î·Î Without À̶ó´Â ÀǹÌÀ̱⠶§¹®ÀÔ´Ï´Ù. Sans Serif ¶Ç´Â Sanserif ¶ó°í ÇÕ´Ï´Ù. º¸Åë nil ÀÇ °ª, ¾Æ¹« °ªµµ ¾ø´Â °æ¿ì°¡ Çã´ÙÇÕ´Ï´Ù. ¿©·¯ºÐÀÌ ÆùÆ®¸íÀ» »ìÆ캸½Ã¸é Ç×»ó 6¹ø° Çʵ尡 ¾Æ¹« °ªµµ ¾øÀÌ -- ÀÌ·± ½ÄÀ¸·Î 󸮵Ǿî ÀÖ´Â °ÍÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. <tag>È°ÀÚ Å©±â Çʵå ( Pixel Size Field )</tag> ¾ÆÁÖ ¸¹ÀÌ »ç¿ëÇÏ´Â Çʵå·Î¼­ È°ÀÚÀÇ Å©±â¸¦ ³ªÅ¸³»´Â ÇʵåÀÔ´Ï´Ù. ¿ì¸®°¡ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ´Â ¿µ¿ªÀº ¾Æ¸¶µµ 10 ~ 20 »çÀÌ°¡ ¾Æ´Ò±î »ý°¢ÇÕ´Ï´Ù. Scalable ÆùÆ®¿¡´Â ÇØ´ç»çÇ×ÀÌ ¾ø½À´Ï´Ù. ÀÚÀ¯·Ó°Ô ÁöÁ¤ÇØ Áֽʽÿä. ±× ÀÌ¿ÜÀÇ ºñÆ®¸Ê ÆùÆ®µéÀº ƯÁ¤ Å©±âÀÇ È°Àڵ鸸ÀÌ Á¸ÀçÇÕ´Ï´Ù. <tag>Çʵå ( Point Size Field )</tag> ´ÜµµÁ÷ÀÔÀûÀ¸·Î ¸ð¸¨´Ï´Ù! :) <tag>X ¹æÇâ ÇØ»óµµ Çʵå ( X Resolution Field )</tag> <tag>Y ¹æÇâ ÇØ»óµµ Çʵå ( Y Resolution Field )</tag> °¢°¢ X, Y ¹æÇâÀÇ Çػ󵵸¦ ³ªÅ¸³À´Ï´Ù. ¿©·¯ºÐÀÌ 75 dpi, 100 dpi ÆùÆ®¸¦ ¼³Ä¡ ÇÏ¼Ì´Ù¸é ±× µð·ºÅ丮¿¡ °¡¼­ È®ÀÎÇغ¸½Ê½Ã¿ä. 75, 100 µîÀÇ ¼ýÀÚ°¡ ¾º¿©Á® ÀÖ½À´Ï´Ù. Scalable¿¡¼­´Â 0 ÀÔ´Ï´Ù. <tag>°ø°£ Çʵå ( Space Field )</tag> ¿µ¹®ÀÚ¿¡¼­ È°ÀÚ I¿Í MÀ» »ý°¢ÇØ º¾½Ã´Ù. µÎ ¹®ÀÚÀÇ ÆøÀÌ ´Ù¸£ÁÒ? I Àڴ ȦÂßÇÑ ¹®ÀÚÀÌ°í M ÀÚ´Â ¶×¶×ÇÑ ¹®ÀÚÀε¥, ÄÄÇ»ÅÍ¿¡¼­´Â µÎ È°ÀÚ¸¦ ¶È°°Àº »ç°¢ÇüÀÇ ¿µ¿ª¿¡ ³Ö¾î »ý°¢ÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù. ±×³É Ãâ·ÂÇϱâ ÆíÇϴϱî¿ä. ±×·¯ÇÑ ÀϹÝÀûÀÎ °æ¿ì¸¦ m , Monospace ¶ó°í Çϸç, I¿Í M ÀÚ¿Í °°ÀÌ Æø¿¡ µû¶ó °£°ÝÀ» Á¶È­·Ó°Ô Á¤·ÄÇØÁÖ´Â °ÍÀ» p , Proportional ºñ·Ê¹®ÀÚ¶ó°í ÇÕ´Ï´Ù. ÃâÆǹ° ±×¸®°í ¼öÁØ ³ôÀº ¿¡µðÅÍÀÇ °æ¿ì p È°ÀÚ¸¦ ¾²°ÚÁö¿ä? c ´Â m °ú µ¿ÀÏÇÑ ÀǹÌÀÔ´Ï´Ù. ¿ì¸®°¡ ¾²°íÀÚ ÇÏ´Â È°ÀÚ´Â ´ëºÎºÐ m ÀÔ´Ï´Ù. °è»êÀÌ °£ÆíÇϴϱî¿ä. <tag>Æò±Õ Æø Çʵå ( Average Width Field )</tag> ±ÛÀÚ ±×´ë·Î ÀÔ´Ï´Ù. Æò±ÕÀ̶ó°í ÇÑ ÀÌÀ¯´Â À§¿¡¼­ ¸»¾¸µå¸®´Â °Í¿¡ ÀÇÇÏ¸é ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. Çѱۿ¡´Â Àû¿ë»çÇ× ¾ø´Â °Í °°½À´Ï´Ù. <tag>µî·Ï Çʵå ( Registry Field )</tag> µî·Ï ÇʵåÀÔ´Ï´Ù. ¿©±â¿¡ µé¾î°¡´Â °ª ¸î °¡Áö¸¦ ¼Ò°³ÇÔÀ¸·Î½á ¼³¸íÀ» ´ë½Å ÇÏ°Ú½À´Ï´Ù. adobe, dec, iso646.1991, ¿ì¸®°¡ ¾ÆÁÖ ÀÚÁÖ º¸´Â iso8859, johab, johabs, ksc5601.1987 µîÀÌ ±×°ÍÀÔ´Ï´Ù. Áï ¹®ÀÚ ¼¼Æ®¸¦ ÀǹÌÇÏ´Â °Í °°ÁÒ? johab(s)Àº Á¶ÇÕÇü ¹æ½ÄÀÇ ÀÚ¼Ò ÆùÆ®À̸ç, ksc5601.1987Àº ¿Ï¼ºÇü ¹æ½ÄÀÇ ±ÛÀÚ ÆùÆ®ÀÔ´Ï´Ù. ÀϹÝÀûÀÎ ¿µ¹®ÀÚ´Â iso8859ÀÔ´Ï´Ù. <tag>ÀÎÄÚµù Çʵå ( Encoding Field )</tag> ÈÞ, ¸¶Áö¸· ÇʵåÀ̱º¿ä. 0, 1, 8, irv µîÀÇ °ªµéÀÌ µé¾î°¡ ÀÖ½À´Ï´Ù. Àß ¸ð¸£´Â ÇʵåÀÔ´Ï´Ù. 13¹ø° Çʵå¿Í ¿¬°üÇÏ¿© »ý°¢ÇϽøé ÁÁ½À´Ï´Ù. º¸Åë iso8859-1, ksc5601.1987-0, iso646.1991-irv °ú °°Àº ²ôÆ®¸Ó¸® ±ÛÀÚµéÀ» º¸½Ç ¼ö ÀÖ½À´Ï´Ù. </descrip> <sect1>¿µ¹® ÅؽºÆ® Ãâ·Â ¿¬½À <p> Ãâ·Â ¿¹¸¦ »ìÆ캸±â·Î ÇսôÙ. <itemize> <item>¿¹Á¦ </itemize> <tscreen><verb> #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> int main() { Display *dpy; Window w; Font f; GC gc; XSetWindowAttributes xswa; xswa.override_redirect = True; dpy = XOpenDisplay ( NULL); w = XCreateSimpleWindow( dpy, RootWindow( dpy, 0 ), 50, 50, 400, 300, 5, BlackPixel( dpy, 0 ), WhitePixel( dpy, 0 ) ); XChangeWindowAttributes ( dpy, w, CWOverrideRedirect, &ero;xswa ); XMapWindow ( dpy, w ); /* ----------------- ¿©±â¼­ºÎÅÍ°¡ º»°ÝÀûÀ¸·Î Áß¿äÇÑ ºÎºÐ ----- */ gc = XCreateGC( dpy, w, 0L, ( XGCValues * ) NULL ); /* [1] */ f = XLoadFont( dpy, "fixed" ); /* [2] */ XSetFont ( dpy, gc, f ); /* [3] */ /* ÆùÆ® µî·ÏÀÌ µÈ GC ¸¦ °¡Áö°í Àü°æ»öÀ¸·Î ¹®ÀÚ¿­ Ãâ·Â */ XDrawString( dpy, w, gc, 100, 130, "Hello, Linuxers! Never Seen :)", 16 ); /* [4] */ /* ----------------------------------------------------------- */ XFlush( dpy ); getchar(); /* µÞó¸® */ XUnloadFont( dpy, f ); XFreeGC( dpy, gc ); XDestroyWindow( dpy, w ); XCloseDisplay( dpy ); } </verb></tscreen> ÄÄÆÄÀÏ ¹æ¹ýÀº <tscreen><verb> gcc -o drawstring drawstring.c -L/usr/X11/lib -lX11 </verb></tscreen> ¼Ò½º ¿¹Á¦°¡ Á» ÁÁÁö ¾Ê´õ¶óµµ ÀÌÇØÇϽñ⠹ٶø´Ï´Ù. :) ÀÌ¹Ì Àü¿¡ ¼³¸íµå¸° ºÎºÐÀº »©°í º»°ÝÀûÀ¸·Î ´Ù¸¥ ºÎºÐ¸¸ ¼³¸íµå¸®°Ú½À´Ï´Ù. ÀÚ, ÆùÆ®µµ °á±¹Àº Á¡À» Âï¾î¼­ â¿¡´Ù ±×¸®´Â °ÍÀ̹ǷΠGC ¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. ¿ì¼±Àº GC ¸¦ Çϳª ¸¸µé¾î¾ß°ÚÁÒ? <tscreen><verb> gc = XCreateGC( dpy, w, 0L, ( XGCValues* ) NULL ); </verb></tscreen> ±×¸®°í À§¿¡¼­ °­Á¶Çß´ø ÆùÆ® ÀûÀç¿Í »ç¿ëÀÇ Áß°£ °úÁ¤À» ¸Ó¸® ¼Ó¿¡ ¶°¿Ã¸®½Ê½Ã¿ä. <descrip> <tag>ÆùÆ® ÀûÀç ( Font Loading )</tag> <tscreen><verb> ÇÔ¼ö ¿øÇü : Font XLoadFont( Display *dpy, char *font_name ); </verb></tscreen> font_name ¹®ÀÚ¿­Àº ¹Ù·Î À§¿¡¼­ ±æ°Ô ¼³¸íµå·È´ø XLFD ½ÄÀÇ ¿ÏÀüÇÑ ÆùÆ®À̸§ ¶Ç´Â ÆùÆ® º°¸í(alias)¸¦ ÁöÁ¤ÇØÁÖ½Ã¸é µË´Ï´Ù. ¼º°øÇϸé Font Çü º¯¼ö¸¦ ¹ÝȯÇÕ´Ï´Ù. ½ÇÆÐÇÏ¸é ¹°·Ð NULL ÀÌ°ÚÁö¿ä? À§¿¡¼­´Â fixed ¶ó´Â º°¸íÀ» °¡Áø X À©µµ¿ìÀÇ °¡Àå ±âº»ÀûÀÎ ÆùÆ®¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ±× ÆùÆ®°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é X À©µµ¿ì ÀÚü°¡ ¾Æ¸¶ ½ÃÀÛÇÏÁö ¾Ê¾ÒÀ»°ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ¾Æ½Ã´Â ÆùÆ® À̸§ ¶Ç´Â Á÷Á¢ /usr/X11/lib/fonts µð·ºÅ丮¿¡ °¡¼Å¼­ °¢ µð·ºÅ丮ÀÇ fonts.dir ¿¡ ³ª¿ÍÀÖ´Â °ÍµéÀ» ½ÃÇèÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ÇÑ ¹ø ¸ÚÁø ¾Æµµºñ»çÀÇ ÆùÆ®¸¦ »ç¿ëÇغ¼±î¿ä? ±×·³ fixed ¶ó°í ¾²½Å ºÎºÐÀ» ¹Ù²ã º¸½Ê½Ã¿ä. <tscreen><verb> -adobe-courier-medium-o-normal--25-180-100-100-m-150-iso8859-1 </verb></tscreen> ±×¸®°í ´Ù½Ã ÄÄÆÄÀÏ... ±×·±µ¥ ¸¸¾à¿¡ ¿©·¯ºÐ²²¼­ ÁöÁ¤ÇØÁֽŠÆùÆ®¸¦ X ¼­¹ö( Á¤È®È÷´Â ÆùÆ®¿¡ °üÇÏ¿©´Â X ÆùÆ® ¼­¹ö xfs ÀÇ ´ã´ç )°¡ ãÁö ¸øÇÒ ¶§, ¶Ç´Â Áö¿øÇÏÁö ¾Ê´Â °æ¿ì ¿¡·¯°¡ ¹ß»ýÇϸç Font Çü ¹Ýȯ°ª¿¡ ¾î¶² °ªÀÌ ¿Ã Áö´Â Á¤È®È÷ ¸ð¸¨´Ï´Ù. ±×¸®°í stderr ¿¡ ´ÙÀ½°ú °°Àº ¸Þ¼¼Áö°¡ Ãâ·ÂµË´Ï´Ù. <tscreen><verb> X Error of failed request: BadName(named color or font does not exist) Major opcode of failed request: 45 (X_OpenFont) Serial number of failed request: 9 Current serial number in output stream: 15 </verb></tscreen> ÆùÆ® ÀûÀç¿Í °üÇÑ ÇÑ ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö¿¡¼­ XLoadFont ÇÔ¼ö¸¦ ¾²Áö´Â ¾Ê´Â °Í °°½À´Ï´Ù. ´ë½Å XLoadQueryFont ¶ó°í ÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇÏÁö¿ä. :) ÀÚ... ±×·±µ¥ ¿ä°Ç ¿©·¯ºÐ²² °úÁ¦·Î ³²°Ü¾ß ÇÏ°Ú±º¿ä. ¹Ù·Î ´ÙÀ½¿¡ ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù. °úÁ¦´Â XLoadQueryFont, ÀÌ¿Í °ü·ÃÇÑ XFontStruct ÀÇ ±¸Á¶ Á¶»çÀÔ´Ï´Ù. ¸ÇÆäÀÌÁö¿¡ ³Ê¹«µµ Á¤È®È÷ ³ª¿Í ÀÖÀ¸´Ï±ñ °ÆÁ¤ÇÏÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù. <tag>ÆùÆ®¸¦ GC ¿¡ µî·Ï</tag> <tscreen><verb> ÇÔ¼ö ¿øÇü : XSetFont( Display *dpy, GC gc, Font font ); </verb></tscreen> ÆùÆ® ID °ªÀ» GC Á¤º¸¿¡ ¼ö·ÏÇϵµ·Ï ¿äûÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾ÕÀ¸·Î Ãâ·ÂµÇ´Â ÅؽºÆ®´Â GC ¿¡ ÁöÁ¤µÇ¾î ÀÖ´Â Àü°æ»öÀ¸·Î Ç¥½ÃµÇ°Ô µË´Ï´Ù. ±×·¯°í º¸´Ï GC ¶ó°í ÇÏ´Â °ÍÀº ±×·¡ÇÈ¿¡ °üÇÑ ¸ðµç Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â ³à¼®À̶ó°í ÇÒ ¼ö°¡ Àֳ׿ä. ´Ù½Ã ÇÑ ¹ø ±â¾ïÇսôÙ! X À©µµ¿ì ±×·¡ÇÈ¿¡ À־ Áß¿äÇÑ ¿ä GC ¸¦.... :) <tag>½ÇÁ¦ ÅؽºÆ® Ãâ·Â</tag> <tscreen><verb> ÇÔ¼ö ¿øÇü : XDrawString(display, d, gc, x, y, string, length) Display *display; Drawable d; GC gc; int x, y; char *string; int length; </verb></tscreen> Drawable Àº Window Çü º¯¼ö³ª Pixmap Çü º¯¼öÀ» ¸»ÇÏÁÒ? ÀÚ, ⠾ȿ¡¼­ÀÇ ÁÂÇ¥°ªÀ» ÁÖ½Ã°í ¹®ÀÚ¿­ string À» ³Ñ°Ü ÁÝ´Ï´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î ÀØÁö ¸¶¼Å¾ß ÇÒ°ÍÀº ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ ¾ó¸¶ÀÎÁö¸¦ length ¿¡ ÀúÀåÇؼ­ ³Ö¾îÁÖ¼Å¾ß µÈ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¿©·¯ºÐ, À§ ¿¹Á¦ ÇÁ·Î±×·¥ ¼Ò½º¿Í ½ÇÇàÅ°½Å È­¸é¿¡ Ãâ·ÂµÈ °á°ú¿¡¼­ ¹º°¡ ÀÌ»óÇÑ Á¡À» ¹ß°ßÇÏÁö ¾ÊÀ¸¼Ì½À´Ï±î? :>> ¿¹. ±×·¸½À´Ï´Ù. "Hello, Linuxers! Never Seen :)" ¶ó°í ¹®ÀÚ¿­À» ÁÖ±ä ÇßÁö¸¸ µÞºÎºÐ Áï, 'Never Seen :)' À̶ó°í ÇÏ´Â ºÎºÐÀº ½ÇÁ¦ Ãâ·ÂÀÌ µÇÁú ¾Ê½À´Ï´Ù. <tag>µÞó¸®</tag> ¼¼»ó¸¸»ç ½ÃÀÛµµ Áß¿äÇÏ°í °úÁ¤µµ Áß¿äÇÏÁö¸¸ À¯Á¾ÀÇ ¹Ì¸¦ °ÅµÎ´Â °Íµµ Áß¿äÇÏ´Ù°í »ý°¢ÇÕ´Ï´Ù. /* µÞó¸® */¶ó°í ÁÖ¼®À» ´Ü ºÎºÐ¿¡¼­´Â XUnloadFont() À» »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù. ±× µÚÀÇ ¸ðµç °úÁ¤µµ ¸¶Âù°¡ÁöÀÌÁö¸¸ ÇÁ·Î±×·¥ Á¾·á ÈÄ ÀÚµ¿À¸·Î ÀÌ·ç¾îÁö´Â °úÁ¤À̱ä ÇÕ´Ï´Ù. ÇÏÁö¸¸, ¿©·¯ºÐ²²¼­ ¹º°¡ »ó¿ë ÇÁ·Î±×·¥À̳ª ¹º°¡ ±×·²µíÇÑ ÇÁ·Î±×·¥À» ¸¸µå½Ã·Á°í ÇÏ½Å´Ù¸é ²À µÞ󸮸¦ ÀßÇØÁֽʽÿä. </descrip> <sect>X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ÇѱÛÆùÆ® <p> ÀÚ, º¹½ÀÇغ¼±î¿ä? X À©µµ¿ì¿¡¼­ ÇϳªÀÇ ¹®ÀÚ ¶Ç´Â ¹®ÀÚ¿­À» Ãâ·ÂÇϱâ À§Çؼ­´Â ¸î °¡Áö °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. <enum> <item>ÀÚ½ÅÀÌ ¿øÇÏ´Â ÆùÆ®¸í( XLFD ¹æ½ÄÀÌµç º°¸íÀÌµç °£¿¡... )À» ¾Ë°í XLoadFont ÇÔ¼ö·Î X À©µµ¿ìÀÇ ÆùÆ®¼­¹ö(xfs)·ÎºÎÅÍ Font ID¸¦ ¹Þ¾Æ¿É´Ï´Ù. <item>±× ID ¸¦ °¡Áö°í ±×·¡ÇÈ ÄÜÅؽºÆ®(GC)¿¡ µî·ÏÇÕ´Ï´Ù. <item>ÀÌÁ¦ ¸¶Áö¸·À¸·Î XDrawString ÇÔ¼ö¸¦ ½á¼­ ¿øÇϴ âÀÇ ¿øÇÏ´Â À§Ä¡¿¡´Ù ¹®ÀÚ¿­À» »Ñ·ÁÁÝ´Ï´Ù. </enum> ¾ÆÁÖ °£´ÜÇÑ °úÁ¤ÀÌÁÒ? ¿À´ÃÀº ÀÌ°ÍÀ» ½ÉÈ­ÇнÀÇÏ°Ú½À´Ï´Ù. ±×¸®°í ÇÑ±Û Ãâ·Â¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÁÒ. <sect1>ÇÑ±Û Ãâ·Â¿¡ °üÇÑ ¸î °¡Áö À̾߱â <p> <sect2>½ÃÀÛÇÏ´Â Áö·çÇÑ À̾߱â <p> ÄÄÇ»Å͸¦ ¾²¸é¼­ ¿ì¸®¸¦ °¡Àå ¸¹ÀÌ ±«·ÓÈ÷´Â ¹®Á¦ Áß¿¡ Çϳª°¡ ¹Ù·Î ÇÑ±Û ¹®Á¦ ÀÔ´Ï´Ù. À߸øµÈ Á¤Ä¡·Î ÀÎÇØ ¿ì¸® ÇÑ±Û ÄÚµå´Â Á¶ÇÕÇü/¿Ï¼ºÇü ÀÌÁ¦´Â ¾ó¸¶Àü °øÁøû¿¡¼­ ¸¸µç °ÅÀÇ À¯¸í¹«½ÇÇÑ KSC5700 ÄÚµå, M$ µîÀÌ ÁÖÃàÀÌ µÇ¾î ÃßÁøÇÏ°í ÀÖ´Â À¯´ÏÄÚµå, M$ »ç¿¡¼­ Çѱ¹ÀεéÀ» ¿ì·ÕÇÏ´Â µíÀÌ ¹öÁ£ÀÌ ¸¸µé¾î ³õ°í À©µµ±× 95¿Í À©µµ±× NT ¿¡¼­ ¾²°í ÀÖ´Â È®Àå¿Ï¼ºÇü( ¶Ç´Â ÅëÇտϼºÇü, À̸§ÀÌ ¾îÂî µÇ¾úµç ½Çü´Â °°À½ )ÀÌ ÀÖ½À´Ï´Ù. ¿ì¸®ÀÇ ÇѱÛÀÌ °ÅÀÇ ¸ö»ìÀ» ¾Î°í ÀÖ´Ù°í Çصµ °ú¾ðÀÌ ¾Æ´Õ´Ï´Ù. ÄÄÇ»ÅÍÀÇ ÃÊâ±â( ÇöÀçÀÇ ÇÑÄÄ»ç »çÀå ÀÌÂùÁø¾¾°¡ ±× À¯¸íÇÑ ¾Æ·¡ÇѱÛÀ» ¸¸µé´ø ½ÃÀý ÀÌÀü )¿¡ °¢ ȸ»ç¿¡¼­ ¿Õ¼ºÇÏ°Ô º¸¿©ÁÖ¾ú´ø ÇѱÛÈ­ÀÇ ¿­±â´Â Á¤¸»·Î ¶ß°Å¿ü½À´Ï´Ù. ±×¾ß ¹°·Ð ´ç¿¬È÷ Á¶ÇÕÇüÀ̾úÁö¿ä. ÇÏÁö¸¸ Á¤ºÎ¿Í ¸î¸î °üº¯ Á¤ºÎÀÇ ÇϼöÀÎ °üº¯ ÇÐÀÚµé ´öºÐ¿¡ ¿Ï¼ºÇüÀ̶ó´Â ±«¹°ÀÌ Åº»ýÇÏ¿´°í, ±× ÀÌÈÄ ÇѱÛÈ­ÀÇ ¿­±â´Â Âù¹°À» µÚÁý¾î ½è½À´Ï´Ù. °Ô´Ù°¡ ÇѱÛÀº ¾î´À»õ ±â¾÷ÀÌ ¼ÒÇÁÆ®¿þ¾î¸¦ ÆȾƸԱâ À§ÇÑ ¹«±â°¡ µÇ¾î¹ö¸®°í ¸»¾Ò½À´Ï´Ù. ÇѱÛÈ­ ±â¼úÀº ±â¾÷ÀÇ µ¶Á¡ÀûÀÎ ¶óÀ̼¾½º³ª ´Ù¸§ ¾ø¾îÁ³°í M$ »çÀÇ °æ¿ì¿¡´Â ´õ´õ¿í ÇѱÛÀ» º¼¸ð·Î »ï°í ÀÖÁö¿ä. ¸®´ª¼­µé¿¡°Ô ÇѱÛÈ­ ±â¼úÀ» °¡Á®´Ù Á٠ȸ»ç´Â ¾ø½À´Ï´Ù! ¹Ù·Î ¿ì¸®µéÀÇ ÈûÀ¸·Î ÀÌ·èÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ ¸®´ª¼­µéÀº ³²µéÀÌ ÇØÁÖ±æ ¹Ù¶óÁöµµ ¾Ê½À´Ï´Ù. ¹Ù·Î ÀÌÁ¦ºÎÅÍ ¿ì¸® ½º½º·ÎÀÇ ÈûÀ¸·Î ¾Æ¸§´Ù¿î ÇѱÛÀ» ±¸ÇöÇØ ³ª°©½Ã´Ù. ÇѱÛÀ» º¼¸ð·Î Àâ°í ¼ÒºñÀÚ¸¦ ¿ì·ÕÇÏ´Â ±â¾÷µé¿¡°Ô º»¶§¸¦ º¸¿©Áà¾ß ÇÒ ½Ã°£À̶ó°í »ý°¢ÇÕ´Ï´Ù. <sect2>ÇÑ±Û Ãâ·Â! ¹«¾ùÀÌ ´Ù¸¥°¡? <p> ¸ðµç ¹®Á¦´Â ¹Ù·Î ¿µ¹® ·Î¸¶ÀÚ´Â 1 ¹ÙÀÌÆ®·Î Ç¥ÇöÇÏ°íµµ ³²´Â ¹Ý¸é, Çѱ¹¾î, Áß±¹¾î ÀϺ»¾î¿Í °°Àº µ¿¾ç±Ç ¾ð¾îµéÀº 2 ¹ÙÀÌÆ® ÀÌ»óÀ» ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. µû¶ó¼­ 1 ¹ÙÀÌÆ® ·Î¸¶ÀÚ¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö¿Í´Â ´Ù¸¥ ¹æ½ÄÀÇ ÇÔ¼ö¸¦ »ç¿ëÇϸç, ¹®ÀÚ¿­¿¡ ´ëÇÑ ¾à°£ÀÇ °¡°ø°úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. <itemize> <item> XDrawString ÇÔ¼ö ´ë½Å¿¡ XDrawString16 À̶ó´Â ÇÔ¼ö »ç¿ë <item> º¸ÅëÀÇ ¹®ÀÚ¿­À» ±×´ë·Î »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, XChar2b ¶ó´Â ±¸Á¶Ã¼ ÀÚ·áÇüÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. µû¶ó¼­ º¸Åë ¹®ÀÚ¿­ --> XChar2bÇü ¹è¿­·Î ¹Ù²ãÁÖ´Â Áö·çÇÑ °úÁ¤ÀÌ ÇÊ¿ä. <item>¿µ¹®°ú ÇѱÛÀ» °°ÀÌ Ãâ·ÂÇØ¾ß ÇϹǷΠ¿µ¹®Àº XDrawString À¸·Î, ÇѱÛÀº XDrawString16 ÇÔ¼ö¸¦ µû·Î ¾¹´Ï´Ù. ±×·¸´Ù¸é ¿ì¸®´Â º¸ÅëÀÇ C ¹®ÀÚ¿­¿¡¼­ ¿µ¹®Àº ¿µ¹®´ë·Î, ÇѱÛÀº Çѱ۴ë·Î ÃßÃâÇس»´Â ±×·± ÀÛ¾÷ÀÌ ÇÊ¿ä. </itemize> ±× ¿Ü¿¡ ÆùÆ®¸¦ Àоî¿À´Â °Í, GC¿¡ µî·ÏÇÏ´Â °Í°ú °°Àº °úÁ¤Àº Â÷ÀÌ ¾ø½À´Ï´Ù. ´ÜÁö Á¶°ÇÀÌ Çϳª ÀÖ´Ù¸é X ÆùÆ®¼­¹ö(xfs, X À©µµ¿ì¸¦ ½ÃÀÛÇÏ¸é ¿ì¸® ¸ð¸£°Ô ¶° ÀÖ½À´Ï´Ù ±×·¯´Ï °ÆÁ¤ÇÏ½Ç ÇÊ¿ä¾øÀ½ )°¡ 2 ¹ÙÀÌÆ® Ãâ·ÂÀ» Áö¿øÇÏ´À³ÄÀÇ ¹®Á¦Àε¥, ¿äÁò¿¡ 2 ¹Ù ÀÌÆ® Áö¿øÇÏÁö ¾Ê´Â X ¼­¹öµµ ÀÖ³ª¿ä? :) <sect2>X À©µµ¿ì¿¡¼­ ÇÑ±Û ¾îÇÃÀ» °³¹ßÇÏ´Â ¹æ¹ý <p> X À©µµ¿ì¿¡¼­ ÇÑ±Û ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â ¹æ¹ýÀº Å©°Ô 2 °¡Áö°¡ ÀÖ½À´Ï´Ù. <itemize> <item>°¡Àå ±ÍÂúÀº ¹æ¹ý, ±×¸®°í °¡Àå ¶È¶ÈÄ¡ ¸øÇÑ ¹æ¹ý, ÇÏÁö¸¸ °ÅÀÇ ´ëºÎºÐÀÇ ÇÑ±Û ¾îÇõéÀÌ Ã¤¿ëÇÏ°í ÀÖ´Â ¹æ½Ä, À߸¸ ÇÏ¸é °¡Àå ¿Ïº®ÇÑ ÇÑ±Û ±¸Çö ¹æ¹ý : ¹Ù·Î °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ÇÑ±Û ±â´ÉÀ» ³»ÀåÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. º¸Åë À¯¸íÇÑ ¿µ¹® ÇÁ·Î±×·¥ÀÇ ¼Ò½º¿¡¼­ ÀÔ·Â/Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ÇØÅ·ÇÏ´Â ¹æ½Ä¿¡¼­ ¸¹ÀÌ ¾ºÀÌ°í ÀÖ½À´Ï´Ù. ¿¹) ÇÑÅÒ, ÇÑEmacs, ÇÑ±Û fvwm 2.* µî Àý´ë ´Ù¼öÀÇ ÇÁ·Î±×·¥µé <item>¸¹Àº ÇÁ·Î±×·¡¸ÓÀÇ °øµ¿³ë·ÂÀÌ ÇÊ¿äÇÑ ¹æ¹ý, º¸Åë ¿ì¸®°¡ À©µµ±× 3.1 °ú °°Àº °÷¿¡¼­ ÈçÈ÷ º¸´Â ¹æ¹ý : Áï! X À©µµ¿ì¿¡¼­ÀÇ Çϳª·Î ÅëÀÏµÈ ÀÔ·Â/Ãâ·Â ¹æ½ÄÀ» ( Input/Output Method ) ¸¸µé¾î ³õ°í ±× ±â´ÉÀ» ¾îÇõ鿡¼­ »ç¿ëÇÏ´Â ¹æ½Ä. Áï, ÇÑ±Û ±â´ÉÀ» ³»ÀåÇÏÁö ¾Ê°í, ÀÔÃâ·Â¿¡ ´ëÇÑ ±âº»ÀûÀÎ ±ÔÄ¢¸¸ ÁöÄÑÁÖ¸é µÇ´Â ¹æ½ÄÀÔ´Ï´Ù. ¾ÈŸ±õ°Ôµµ »ó¿ë X À©µµ¿ì¿¡¼­´Â ÀÌ·± ÇÑ±Û ±â´ÉÀ» ±â¼úÁøµé¿¡ ÀÇÇØ ¸¸µé¾ú´ÂÁö ¸ð¸£Áö¸¸ ¿ì¸®°¡ ¾²°í ÀÖ´Â XFree86 ¿¡´Â ¾ÆÁ÷ ÀÌ·± ±â´ÉÀÌ ¾ø½À´Ï´Ù. ÀÌ°ÍÀº Àü¹® ¿ë¾î·Î ¸»ÇÏÀÚ¸é X À©µµ¿ìÀÇ Internationalization ±â´É Áï I18N °ú L10NÀ» ÀÌ¿ëÇÑ´Ù°í ¸»ÇÕ´Ï´Ù. ( Âü°í·Î I18N Àº Internationalization À̶ó´Â ´Ü¾î¿¡¼­ óÀ½ I ¿Í ¸Ç³¡ N »çÀÌ¿¡ 18 °³ÀÇ ¿µ¹®ÀÚ°¡ µé¾îÀֱ⠶§¹®¿¡ ±×·¸°Ô ¸í¸íÇÑ °ÍÀÌ°í, L10NÀº Localization À̶ó´Â ±ÛÀÚ¿¡¼­ À¯·¡ÇÕ´Ï´Ù ) ¿©·¯ºÐÀÌ IBM AIX °°Àº °ÍÀ» ½áº¸¼Ì´ÂÁö ¸ð¸£°Ú±º¿ä. ÀÌ ¹æ¹ýÀº °øÅëµÈ ¾î¶² ÀÏ¿¡ °ü¼ºÀ» Áشٴ ÀÕÁ¡ÀÌ ÀÖÁö¸¸ ÀÚÄ© À߸ø ¸¸µé¸é °ÅÀÇ ¾ûÅ͸® ÇѱÛÀÌ µÇ°í ¸¿´Ï´Ù:) ÇöÀç X11 R6 ¿¡¼­´Â ÃæºÐÇÑ °³¹ßȯ°æÀÌ ÁÖ¾îÁ® ÀÖ½À´Ï´Ù. ´ÜÁö... ¿¹) ? </itemize> ÀÌ¿Ü¿¡µµ ¿ì¸®°¡ À©µµ±×¿¡¼­ ÁÖ·Î »ç¿ëÇÏ¿´´ø ÇѸÞÇѱÛó·³ HanX ¶ó°í ÇÏ´Â °ÍÀ» ÀÌ¿ëÇؼ­ ÇѱÛÀ» º¼ ¼ö ÀÖµµ·Ï(Ãâ·Â¸¸) ÇÏ´Â ¹æ½Äµµ ÀÖ½À´Ï´Ù. ¿ì¸®°¡ ÀÍÇô¾ß ÇÒ °ÍÀº ÀüÀÚ/ÈÄÀÚÀÇ °³¹ß ¸ðµÎ¿¡ °øÅëµÇ´Â °¡Àå ±âº»ÀûÀÎ ÇѱÛÃâ·Â ¹æ¹ýÀÔ´Ï´Ù. ÇöÀç Àú´Â ÈÄÀÚÀÇ °³¹ß¿¡ ³ë·Â ÁßÀÔ´Ï´Ù. ¾î¼­ »¡¸® XFree86 ¿¡µµ »ó¿ë ¸øÁö ¾ÊÀº ÇÑ±Û ½Ã½ºÅÛÀ» žÀçÇÏ¿© ÇÁ·Î±×·¥ °³¹ß¿¡¼­ ÇÑ±Û Ã³¸®¿¡ ÇÒ¾ÖÇÏ´Â ½Ã°£°ú ³ë·ÂÀ» ¾Æ³¥ ¼ö ÀÖµµ·Ï ÇؾßÇÑ´Ù°í ¹Ï½À´Ï´Ù. <sect1>ÇÑ±Û Ãâ·Â °úÁ¤ <p> <sect2>¹«¾ùÀÌ ¶Ç ¹®Á¦Àΰ¡? <p> ÇöÀç X À©µµ¿ì¿¡¼­ »ç¿ëµÇ´Â ÇÑ±Û ÆùÆ®ÀÇ Á¾·ù´Â Å©°Ô 3 °¡Áö¶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. 1 ¹ø°·Î´Â ¿©·¯ºÐÀÌ ¾Ö¿ëÇϽô ÇÑÅÒ Á¶ÇÕÇü ÆùÆ®ÀÔ´Ï´Ù. 2 ¹ø°´Â ´ë¿ìÆùÆ®, ÇѾçÆùÆ® µîÀÇ ¿Ï¼ºÇü ÆùÆ®ÀÔ´Ï´Ù. 3 ¹ø°´Â °°Àº ¿Ï¼ºÇü ÆùÆ®À̸鼭µµ ¾ÕÀÇ µÎ °³¿Í´Â ¾ÆÁÖ »ç¼ÒÇÏ°Ô ´Ù¸¥ 󸮰úÁ¤À» °ÅÃÄ¾ß ÇÏ´Â »ïº¸ ÆùÆ®°¡ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ´Ù¾çÇÑ ÆùÆ® Çü½ÄÀÇ Á¸Àç´Â ´Ù¾çÇÑ ÆùÆ® Ãâ·Â ¿¹ºñÀÛ¾÷ÀÌ ÇÊ¿äÇÔÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. Àú´Â ÀÏ´Ü ¿©±â¼­ Á¦ÀÏ °£´ÜÇÑ 2 ¹ø° °æ¿ì¸¸ ¼³¸íµå¸®±â·Î ÇÏ°Ú½À´Ï´Ù. ¹Ì·ÁÇÑ ÆùÆ®ÀÎ 1 ¹ø° ÇÑÅÒ Á¶ÇÕÇü ÆùÆ®ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ÇÑ ¹øÀÇ °­ÀǸ¦ ÇÒ¾ÖÇØ¾ß ÇÒ ¸¸Å­ ¸¹Àº À̾߱Ⱑ ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù. ( »ç½ÇÀº »ïº¸ ÆùÆ®°¡ ´õ ½±Áö¸¸¼­µµ ±¸ÇÒ ¼ö°¡ ¾øÀ¸´Ï... ) ÀÚ, ±×·¯¸é ¿©·¯ºÐÀÌ ¿Ï¼ºÇü ¹æ½ÄÀÇ ÆùÆ®¸¦ °¡Áö°í ÀÖ´Ù°í »ý°¢ÇÏ°í ½ÃÀÛÇÏ°Ú½À´Ï´Ù <tscreen><verb> ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h> ¿¡ ¼±¾ð XDrawString16(display, d, gc, x, y, string, length) Display *display; Drawable d; GC gc; int x, y; XChar2b *string; int length; </verb></tscreen> ¿ì¸®´Â ÇÑ±Û ÆùÆ®¸¦ °¡Áö°í ÇѱÛÀ» Ãâ·ÂÇϱâ À§Çؼ­ XDrawString À̶ó´Â 1 ¹ÙÀÌÆ® ¾ð¾î±Ç ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ³¡¿¡ 16À̶ó´Â ¼ýÀÚ°¡ ºÙÀº ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ±×¸®°í À¯½ÉÈ÷ »ìÆ캸¸é XDrawString ¿¡¼­´Â char * ÇüÀ̾ú´ø ºÎºÐÀÌ ¿©±â¼­´Â XChar2b * ÇüÀ¸·Î ¹Ù²î¾î ÀÖÁÒ. ¿ì¸®´Â ¿©±â¼­ »õ·Î¿î ÀÚ·áÇü¿¡ ´ëÇؼ­ ¶ÇÇÑ ¾Ë¾ÆºÁ¾ß ÇÕ´Ï´Ù. :< <tscreen><verb> typedef struct { /* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; </verb></tscreen> ¿ì¸® ¸»¿¡ ´ëÇÑ Ç¥ÇöÀº ÇöÀç 2 ¹ÙÀÌÆ® Ç¥Çö¹ýÀÌ °¡Àå ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÀ¸¸é Ç¥ÁØÀûÀ̶ó°íµµ ¸»ÇÒ ¼ö ÀÖÀ» °Í °°½À´Ï´Ù. ÇÑ±Û ÇÑ ±ÛÀÚ "ÇÑ" À̶ó´Â ¹®ÀÚ´Â ¿µ¹® 2 ¹ÙÀÌÆ®·Î µÇ¾î ÀÖ°í ±×°Í°ú ÀÏ´ëÀÏ ´ëÀÀÇÏ´Â °ÍÀÌ ¹Ù·Î XChar2b Çü º¯¼öÀÔ´Ï´Ù. µû¶ó¼­ ¿ì¸®´Â char * Çü ¹è¿­À» XChar2b * Çü ¹è¿­·Î º¯È¯½ÃÄÑ Áֱ⸸ ÇÏ¸é µË´Ï´Ù. ±Ùµ¥ ¿ì¸®°¡ ¸¹ÀÌ °¡Áö°í ÀÖ´Â ÇѾçÆùÆ®³ª ´ë¿ìÆùÆ®ÀÇ °æ¿ì, ¸»ÀÌ ½±Áö ±×·¸°Ô´Â µÇÁø ¾Ê½À´Ï´Ù. ´ÙÀ½°ú °°Àº ¿¬»êÀÌ ÀÌ·ç¾îÁ®¾ß ÇÕ´Ï´Ù. ÀÏ´Ü 'ÇÑ'À̶ó°í ÇÏ´Â 2 ¹ÙÀÌÆ® ÇÑ±Û ÇÑ ±ÛÀÚ°¡ ÀÖ´Ù°í Ä¡¸é... <tscreen><verb> char *Han = "ÇÑ"; XChar2b HanX; HanX.byte1 = *(Han) - 0x80; /* ÁÖÀÇ! 0x80 °ªÀ» »©ÁÖ°í ÀÖ´Ù */ HanX.byte2 = *(Han+1) - 0x80; </verb></tscreen> º¸½Ã´Ù½ÃÇÇ ±×³É ÇÑ±Û 2 ¹ÙÀÌÆ®¿Í XChar2b Çü ±¸Á¶Ã¼ ¸â¹ö °£ÀÇ °£´ÜÇÑ ÀÏ´ëÀÏ ´ëÀÀÀÌ ¾Æ´Ï¶ó, 0x80 °ªÀ» »©ÁÖ¾î¾ß ÇÑ´Ù´Â ÀÚÀßÇÑ Áß°£ °úÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ( Âü°í·Î »ïº¸ ÆùÆ®´Â 0x80 °ªÀº °ªÀ» »©ÁÖÁö ¾Ê°í ±×³É ÀÏ´ëÀÏ ´ëÀÀ½Ãŵ´Ï´Ù. ) ÀÌÁ¦ Á» °¨ÀÌ ¿À¼Ì½À´Ï±î? ¾Ë°í ³ª´Ï ±²ÀåÈ÷ ½±Áö ¾Ê³ª¿ä? :) <tscreen><verb> #include <X11/Xlib.h> #include <stdio.h> int main() { Display *dpy; int screen; Window w; Font hanFont, engFont; GC gc; XChar2b HStrBuf[256]; int n; dpy = XOpenDisplay( NULL ); screen = DefaultScreen( dpy ); w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 400, 300, 2, BlackPixel( dpy, screen ), WhitePixel( dpy, screen )); XMapWindow( dpy, w ); XFlush(dpy); sleep(4); /* ¿Ö ³Ö¾úÀ»±î¿ä? */ gc = XCreateGC ( dpy, w, 0L, (XGCValues *) NULL ); hanFont = XLoadFont ( dpy, "-daewoo-mincho-*-r-normal--16-*-*-*-c-*-*-*" ); engFont = XLoadFont ( dpy, "fixed" ); XSetFont( dpy, gc, hanFont ); n = convert_ks_to_display("¾È³çÇϼ¼¿ä¸®´ª¼­", HStrBuf, 10); XDrawString16(dpy, w, gc, 100, 100, HStrBuf, n); XSetFont( dpy, gc, engFont ); XDrawString(dpy, w, gc, 100, 150, "Welcome to Linux!", 17 ); XFlush(dpy); getchar(); } /* ÇÑÅÒ ¼Ò½º¿¡¼­ Àοë */ int convert_ks_to_display(char *str, XChar2b *buf, int n) { int i, j; for (i = 0, j = 0; i < n;) { buf[j].byte1 = str[i] - 0x80; buf[j].byte2 = str[i+1] - 0x80; i += 2, j++; } return j; } </verb></tscreen> ÄÄÆÄÀÏ ¹æ¹ýÀº ¶È°°½À´Ï´Ù. ÀÌ»ó ¾øÀÌ ½ÇÇàµÇ·Á¸é ¿©·¯ºÐÀº /usr/X11R6/lib/fonts µð·ºÅ丮ÀÇ ÇϺΠµð·ºÅ丮 misc µð·ºÅ丮¿¡ ´ë¿ì ÆùÆ®°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. È­ÀϸíÀº hanglm16.pcf.Z ÀÔ´Ï´Ù. fonts.dir È­ÀÏÀ» »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. ÇöÀç °¡Áö°í °è½Ã´Â ¿Ï¼ºÇü ¹æ½ÄÀÇ ÆùÆ®¸¦ ¾Æ¹«°Å³ª Àû¾îÁÖ½Ã¸é µË´Ï´Ù. Àü¿¡ ¼³¸íµå·È´ø XLFD ¹æ½ÄÀÇ Ç¥±â ¶Ç´Â ÀÚÁÖ ¾²´Â ÆùÆ®¸í¿¡ ´ëÇÏ¿© fonts.alias ¿¡´Ù º°¸íÀ» Á¤ÇØÁÖ½Ã°í ±× º°¸íÀ» »ç¿ëÇϽõçÁö ¸¶À½´ë·Î ÇÏ½Ã¸é µË´Ï´Ù. Âü°í·Î À§¿¡¼­ »ç¿ëÇÑ ¿µ¹® ÆùÆ®¸í fixed ´Â »ç½Ç º°¸í¿¡ ÇØ´çµË´Ï´Ù. fonts.alias ¸Ç ¾Õ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. <sect2>¾ÆÁ÷µµ ³²Àº ¹®Á¦°¡ ÀÖ´Ù! <p> Çѱ۷ΠÃâ·ÂÀ» Çغ¸½Ã´Ï ¾î¶°¼¼¿ä? Á¦°¡ óÀ½À¸·Î ÇÑÅÒ ¼Ò½º¸¦ º¸°í µ¶ÇÐÇϸ鼭 º°°Í ¾Æ´ÏÁö¸¸¼­µµ ÇѱÛÀÌ Ãâ·ÂµÇ´Ï Âü ±âºÐÀÌ ÁÁ´õ±º¿ä. ±Ùµ¥ ¹®Á¦´Â ±×·¸°Ô °£´ÜÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¹«¾ùÀ̳ı¸¿ä? À§ÀÇ ¼Ò½º¸¦ Àß »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. Àß º¸½Ã¸é ÇѱÛÀº Çѱ۴ë·Î µû·Î, ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î Ãâ·ÂÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´Â °ÍÀϱî¿ä? ¿¹! ±×·¸½À´Ï´Ù. ¿ì¸®´Â ¾ÈŸ±õ°Ôµµ Çѱ۰ú ¿µ¹®À» È¥¿ëÇؼ­ ¾²´Â ½Ã´ë¿¡ »ì°í ÀÖ½À´Ï´Ù. µû¶ó¼­ ¿ì¸®´Â Á¾Á¾ »ç¿ëÀڷκÎÅÍ ´ÙÀ½°ú °°Àº ¹®ÀÚ¿­À» ¹Þ°Ô µË´Ï´Ù. <tscreen><verb> char *MixedString = "ÀúÀÇ ÄÚ³Ý ÁÖ¼Ò´Â freeyong@soback.kornet.nm.kr ÀÔ´Ï´Ù"; </verb></tscreen> ¹«¾ùÀÌ ¹®Á¦ÀÌ°Ú½À´Ï±î? XDrawString ÇÔ¼ö´Â ¿À·ÎÁö 1 ¹ÙÀÌÆ® ¹®ÀÚ±Ç ÆùÆ®¸¸ Ãâ·ÂÇÕ´Ï´Ù. ÀÌ¿¡ ºñÇÏ¿© XDrawString16 ÇÔ¼ö´Â ¹Ý´ë·Î 2 ¹ÙÀÌÆ® ¹®ÀÚ±Ç ÆùÆ®¸¸ Ãâ·ÂÇÕ´Ï´Ù. ±×·¸´Ù¸é À§¿Í °°ÀÌ Çѱ۰ú ¿µ¹®ÀÌ ¼¯¿© ÀÖ´Â °æ¿ì¿¡´Â ¹®ÀÚ¿­À» ÁÖ¿í °Ë»öÇϸ鼭 Çѱ۰ú ¿µ¹®À» µû·Î Ãâ·ÂÇØÁÖ¾î¾ß ÇÑ´Ù´Â °á·ÐÀÌ ³ª¿É´Ï´Ù. :< ÀÌ ºÎºÐÀÌ ¾à°£ÀÇ ³ë·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿µ¹®°ú ÇѱÛÀÇ Á¶È­¸¦ ¸ÂÃß´Â °ÍÀÌ ÇöÀç·Î¼­´Â ¾ÆÁÖ Áß¿äÇÕ´Ï´Ù. ¾îÂî ÇÏ´Ùº¸´Ï ¿ì¸®³ª¶óµµ ¿µ¾î¹®È­±ÇÀÌ µÇ¹ö¸° µíÇÑ ¾¹¾µÇÑ ±âºÐÀ» ¹ö¸± ¼ö°¡ ¾ø³×¿ä. ƯÈ÷ ÄÄÇ»ÅÍ ºÐ¾ß¿¡ À־ Çѱ۸¸ ÀßµÇ°í ¿µ¹®Àº ´ë½Å¿¡ ²ÎÀÌ µÇ¹ö¸°´Ù¸é ¾Æ¹«µµ ±×°Å ¾²Áö ¾Ê½À´Ï´Ù. µû¶ó¼­ ¿©·¯ºÐÀº ÆùÆ® ·Îµù/ÆùÆ®¸¦ GC ¿¡ µî·Ï/ÆùÆ® Ãâ·Â ÀÌ·¸°Ô °£´ÜÇÑ °úÁ¤À» ³Ñ ¾î¼­¼­ ÆùÆ®¿¡ ´ëÇØ¿© ÀÚÀ¯ÀÚÀç·Î ó¸®ÇÏ½Ç ¼ö ÀÖ´Â ´É·ÂÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. <sect2>Çѱ۰ú ¿µ¹®À» ±¸º°Çؼ­ Âï±â <p> ¿©±â¼­ºÎÅÍ´Â Á» ¾î·Á¿öÁö±â ½ÃÀÛÇÕ´Ï´Ù. Á¦°¡ ¿©±â¿¡ Àû¾î³õÀº ÇÔ¼ö´Â ÇÑÅÒ ¼Ò½º¿¡¼­ ÇѱÛó¸® ºÎºÐÀ» º¸°í °í´ë·Î ÀúÀÇ ÇÑ±Û fvwm 2.0.42ÀÇ ÇÑ±Û Ã³¸®·çƾÀ¸·Î º¹»çÇÏ°í ¾à°£À» ¼öÁ¤ÇÑ °ÍÀÔ´Ï´Ù. ÀÌ ¸ðµç ºÎºÐÀ» ÀÌÇØÇÏ½Ç ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×¸®°í ¾î´À Á¤µµ ½Ç·ÂÀÌ µÇ½Ã´Â ºÐµéÀº ÀÌ¹Ì ´Ù ¾Ë°í °è½Ã´Â ³»¿ëÀ̶ó°í ¹Ï½À´Ï´Ù. ¿©·¯ºÐÀÌ ÁÖ¸ñÇÏ¼Å¾ß ÇÒ ºÎºÐÀº ¼Ò½º ¾È¿¡¼­ ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù. <tscreen><verb> void HanXDrawString(Display *d, Drawable w, GC gc, XFontStruct *hfont, XFontStruct *efont, int x, int hy, int ey, char *str, int len, int hcode, int ftype ) { int n; char *p; XChar2b buf[256]; /* ÀÌ ÇÔ¼ö´Â º¸ÅëÀÇ ¾Æ½ºÅ° ¿µ¹®ÀÚ¿Í ÇѱÛÀÌ È¥ÇյǾî ÀÖ´Â ¹®ÀÚ¿­À» ¹Þ½À´Ï´Ù. ¿©±â¼­´Â str À̶ó´Â º¯¼öÀÔ´Ï´Ù. */ while (len > 0) { if (*str &ero; 0x80) { /* ¹Ù·Î 0x80 °ú AND ¿¬»êÀ» ÇÔÀ¸·Î½á ¹ÙÀÌÆ®ÀÇ 8 ¹ø° ºñÆ®°¡ 1 ·Î µÇ¾î ÀÖ´Â °¡¸¦ È®ÀÎÇÕ´Ï´Ù. ±×·¡¼­ ÂüÀÌ¸é ±× ¹ÙÀÌÆ®¿Í ´ÙÀ½ ¹ÙÀÌÆ® µÎ °³´Â ÇѱÛÀ» ±¸¼ºÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. */ for (p = str; len > 0 &ero;&ero; (*p &ero; 0x80); p += 2, len -= 2) ; /* ¿©±â¿¡ for ( ) ; ¶ó°í ÇÏ´Â Àç¹ÌÀÖ´Â ¹®ÀåÀÌ ÀÖ½À´Ï´Ù. ÇöÀç ÇѱÛÀÌ Ã³À½À¸ ·Î ³ªÅ¸³­ À§Ä¡ºÎÅÍ ¾îµð±îÁö ÇѱÛÀÌ Áö¼ÓµÇ´Â°¡¸¦ üũÇؼ­ ÇÑ±Û ¹®ÀÚ¿­¸¸ Ãß·Á³»¾î ó¸®ÇÏ°íÀÚ ÇÏ´Â °Ì´Ï´Ù. */ n = HanXCharConvert(str,buf,p-str, hcode, ftype ); XSetFont( d, gc, hfont->fid ); XDrawString16(d,w,gc,x,hy,buf,n); /* ¹Ù·Î ¿©±â¼­ XDrawString16 ÇÔ¼ö¸¦ ½á¼­ Ãâ·ÂÇÏ°í ÀÖ½À´Ï´Ù */ x += XTextWidth16(hfont,buf,n); /* XTextWidth16 À̶ó´Â ÇÔ¼ö´Â ´«¿©°Ü º¸¼Å¾ß°ÚÁÒ? */ } else { /* ¿µ¹®ÀÏ ¶§ ó¸®ÇÏ´Â ·çƾÀÔ´Ï´Ù */ for (p = str; len > 0 &ero;&ero; !(*p &ero; 0x80); p++, len--) ; /* ¸¶Âù°¡Áö·Î °è¼ÓÀûÀ¸·Î ASCII ¹®ÀÚ¸¸ ³ª¿Ã ¶§±îÁö Æ÷ÀÎÅÍ À̵¿ */ XSetFont( d, gc, efont->fid ); XDrawString(d,w,gc,x,ey,str,p-str); x += XTextWidth(efont,str,p-str); } str = p; } XSetFont( d, gc, efont->fid ); } /* À§¿¡¼­ ¾µ µ¥ ¾øÀÌ °è¼Ó XSetFont ¸¦ ¾²´Â ÀÌÀ¯´Â ÇϳªÀÇ GC ¿¡´Ù°¡ ÇÑ ¹øÀº ÇÑ±Û ÆùÆ®¸¦ µî·ÏÇß´Ù°¡, ¶Ç ÇÑ ¹øÀº ¿µ¹® ÆùÆ®¸¦ µî·ÏÇÏ´Â ÀÛ¾÷À» Çϱ⠶§¹® ÀÔ´Ï´Ù. */ </verb></tscreen> ÀÚ, ¼³¸íÀ» µå¸®ÁÒ. À§¿¡¼­ »ç¿ëÇÑ Å×Å©´ÐÀº ÇÑ±Û ÇÁ·Î±×·¡¹ÖÀ» ÇϽ÷Á´Â ºÐµéÀº ¾ÆÁÖ ±âº»ÀûÀ¸·Î ÀÍÈ÷¼Ì¾î¾ß ÇÏ´Â ³»¿ëÀÔ´Ï´Ù. ÇÑ±Û ÇÑ ±ÛÀÚ´Â 2 ¹ÙÀÌÆ®À̸ç, ù¹ø° ¹ÙÀÌÆ®ÀÇ MSB ´Â 1 ·Î ¼ÂÆõȴٴ »ç½ÇÀÌÁÒ. ±×·¡¼­ ÇѱÛÀÎÁö ¾Æ´ÑÁö¸¦ üũÇÏ´Â °¡Àå ±âº»ÀûÀ̸鼭µµ À¯ÀÏÇÑ ¹æ¹ýÀº ¹Ù·Î ºñÆ®¸Å½ºÅ© ¿¬»êÀ» Çغ¸´Â °Ì´Ï´Ù. 0x80 À̴ϱñ ÀÌÁø¼ö·Î´Â 1000 0000 ÀÔ´Ï´Ù. ÀÌ ¼ýÀÚ¿Í & ¿¬»êÀ» ÇÏ¸é µÑ ´Ù 1 ÀÎ °æ¿ì¸¸ ÂüÀÌ µÇ¹Ç·Î °ú¿¬ MSB °¡ 1 Àΰ¡ ¾Æ´Ñ°¡¸¦ ½Äº°Çس¾ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº C ¾ð¾îÃ¥À» º¸½Ã°í ºñÆ®¸Å½ºÅ© ¿¬»êÀ» °øºÎÇϽñ⠹ٶø´Ï´Ù. Á¦°¡ ±ÇÇÏ°í ½ÍÀº Ã¥Àº Ä¿´Ï°Ç & ¸®Ä¡ÀÇ "C Programming Language" ÀÔ´Ï´Ù. Ä¿´Ï°Ç°ú ¸®Ä¡°¡ ¾î¶² »ç¶÷ÀÎÁö´Â ¾Æ½ÃÁÒ? :) ¸ð¸£½Ã¸é ²À ¾Ë¾Æº¸¼¼¿ä. ±âÃÊ »ó½Ä¿¡ ÇØ´çÇϴϱñ¿ä :) <sect2>ÆùÆ®¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸ ¾Ë¾Æ³»±â <p> ÇÑ±Û Ãâ·Â ¹ú½áºÎÅÍ ÀÌ·¸°Ô ¾î·Æ±º¿ä. ( ±Ùµ¥ ÇÑ±Û ÀÔ·ÂÀº ´õ¿í ´õ Ȳ´çÇÒ °Ì´Ï´Ù ) ÀÌÁ¦ºÎÅÍ ´Ù·ç°íÀÚ ÇÏ´Â ³»¿ëÀº ¿ì¸®°¡ óÇÒ ¼ö ÀÖ´Â ¾î¶² °æ¿ì¿¡¶óµµ ÀÚÀ¯ÀÚÀç·Î ÆùÆ®¸¦ ó¸®ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. XDrawString À̳ª XDrawString16 À̶ó´Â ÇÔ¼ö´Â ¿ì¸®°¡ Á¤ÇØÁÖÁö ¾Ê¾Æµµ ÆùÆ® °íÀ¯ÀÇ Æ¯¼º¿¡ µû¶ó ¹®ÀÚ¿­À» ¿¹»Ú°Ô ÇÑ ÁÙ·Î ³ªÅ¸³»ÁÝ´Ï´Ù. ÇÏÁö¸¸ µÎ ÁÙ ÀÌ»óÀÌ µÇ´Â ¹®ÀÚ¿­Àº? ÁÙ°£°ÝÀ» ¾î¶»°Ô ÇÒ±î¿ä? Ãâ·ÂµÈ ¹®ÀÚ¿­Àº µµ´ëü ¾ó¸¶ÀÇ ÆøÀ» °¡Áö°í ÀÖ´ÂÁö... µîµî ¹®ÀÚ¿­À» ¿©·¯ºÐ ¸¶À½²¯ Ãâ·ÂÇϱâ À§Çؼ­´Â ÆùÆ®¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ Á¤º¸ ¶Ç´Â ÇÊ¿ä¿¡ µû¶ó ÇÑ ±ÛÀÚ ÇÑ ±ÛÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë¾Æ³»¾ß ÇÕ´Ï´Ù. ±Ùµ¥ ÆùÆ®¿¡ ´ëÇÑ Á¤º¸´Â ¾îµð¿¡ ÀÖ´Ù°í ÇßÁÒ? ¿¹. ¸Â½À´Ï´Ù. ±×°ÍÀº X ¼­¹ö¿¡ ÀÖ½À´Ï´Ù. ¿ì¸®´Â º¸Åë °¡Àå °£´ÜÇÑ ÇüÅ·μ­ XLoadFont ÇÔ¼ö¸¦ ½á¼­ ÆùÆ® ID ¸¦ ¾ò¾î¿É´Ï´Ù. <sect3>°¡Àå °£´ÜÇÑ ¹æ¹ý <p> <tscreen><verb> XQueryTextExtents16(display, font_ID, string, nchars, direction_return, font_ascent_return, font_descent_return, overall_return) Display *display; XID font_ID; XChar2b *string; int nchars; int *direction_return; int *font_ascent_return, *font_descent_return; XCharStruct *overall_return; </verb></tscreen> ¿ì¸®°¡ »ç¿ëÇÏ°íÀÚ ÇÏ´Â ÇÔ¼ö´Â ¹Ù·Î XQueryTextExtents16 À̶ó´Â ¾ÆÁÖ ±ä À̸§À» °¡Áø ÇÔ¼öÀÔ´Ï´Ù. ¿ì¸® ºñ¿µ¾î ¹®È­±Ç »ç¶÷µé¿¡°Ô´Â ÈûµéÁö ¸ô¶óµµ ±×µé¿¡°Ô´Â ½¬¿î ÇÔ¼ö¸íÀÌ°ÚÁÒ? X ·Î ½ÃÀÛÇÏ´Â ÇÔ¼ö´Â ¹Ù·Î Xlib ÇÔ¼öÀÓÀ» ÀǹÌÇÏ´Â °ÍÀÌ°í Query Á¶»çÇÏ´Ù, TextExtents ´Â ÅؽºÆ®ÀÇ ¿µ¿ª ¹üÀ§, µÚ¿¡ 16 À» ºÙÀÎ °ÍÀº 1 ¹ÙÀÌÆ®±Ç ¹®ÀÚ°¡ ¾Æ´Ï¶ó 2 ¹ÙÀÌÆ®±Ç ¹®ÀÚÀÓÀ» ³ªÅ¸³»ÁÖ°í ÀÖ½À´Ï´Ù. ÀÏ´Ü À§¿¡¼­ ÆùÆ® ID º¯¼öÇüÀÌ XID ÀÎ °ÍÀº ¿©·¯ºÐÀÌ »ý°¢ÇØ º¸½Ê½Ã¿ä. 2 ¹ÙÀÌÆ®±Ç ¹®ÀÚ¿­À̹ǷΠXChar2b Çü ¹è¿­À» »ç¿ëÇÏ¿´°í nchars ´Â ±× ¹è¿­ÀÇ Å©±â¸¦ ¾Ë·ÁÁÝ´Ï´Ù ÀÌÁ¦ºÎÅÍ 4 °³ÀÇ Æ÷ÀÎÅÍ Àü´Þº¯¼öµéÀÌ ÀÖ±º¿ä. ¿©·¯ºÐÀÌ »ý°¢Çϱ⿡ ¿Ö ÀÌ ³à¼®µéÀº Æ÷ÀÎÅÍ·Î ÁÖ¾îÁ³À»±î¿ä? ¸Â½À´Ï´Ù. ÀÌ º¯¼öµé¿¡´Ù°¡ ¿ì¸®°¡ ¿øÇÏ´Â Á¤º¸¸¦ ¾ò¾î ¿À·Á°í ÇÏ´Â °ÍÀÔ´Ï´Ù. direction_return Àº FontLeftToRight, FontRightToLeft ¶ó´Â Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù ¿µ¾î¸¦ Á»¸¸ ÀÐÀ¸½Ç ¼ö ÀÖ´Ù¸é ¹«½¼ ¶æÀÎÁö ¾Æ½Ç °Ì´Ï´Ù. º¸ÅëÀÇ °æ¿ì FontLeftToRight ÀÌ°ÚÁÒ? ¹®ÀÚ¿­ÀÇ Ãâ·ÂÀÌ Á --< ¿ì Àΰ¡? ¾Æ´Ï¸é ±× ¹Ý´ëÀΰ¡ ÀÔ´Ï´Ù. font_ascent_return°ú font_descent_return ¿¡ ´ëÇÑ À̾߱â´Â ÇÑ±Û ¹®ÀÚ¿Í´Â ´Ù¸¥ ¿µ¹® ¹®ÀÚ¸¸ÀÇ Æ¯¼º¿¡ ´ëÇؼ­ ¾Ë¾Æ¾ß ¾ê±â°¡ µÉ °Í °°±º¿ä. ¿ì¸® ¹®ÀÚ´Â ÀÌ·¯ÇÑ °³³äÀÌ ¾ø´Ù°í³ª ÇÒ±î¿ä? ¿µ¹®ÀÚ y ¸¦ ¿¹·Î µé¾îº¾½Ã´Ù. º¸Åë ¿ì¸®°¡ ÁßÇб³ óÀ½ µé¾î°¡¼­( À¹! ¿äÁòÀº ÃʵîÇб³¿¡¼­ºÎÅÍ Çϳª¿ä? ) ¿µ¾î ½Ã°£¿¡ ÇÏ´Â ÀÏÀº ¾ËÆĺª ¾²±â¿´½À´Ï´Ù. ÀÏ´Ü ¹®¹æ±¸¿¡ °¡¼­ µû·Î Á¦ÀÛµÈ ¿µ¾î ³ëÆ®¸¦ ÇÑ ±Ç »ð´Ï´Ù. °øÃ¥À» ÆîÄ¡¸é ¸¶Ä¡ ¿À¼±Áöó·³ ÁÙÀÌ ÁÖ¿íÁÖ¿í ±×¾îÁ® ÀÖ°í, ÀÚ¼¼È÷ º¸½Ã¸é ÆĶõÁÙ ¸»°í »¡°£ÁÙÀÌ ±×¾îÁ® ÀÖ´ø °ÍÀÌ ±â¾ï³ª½Ê´Ï±î? ±× »¡°£ÁÙÀº baseline À̶ó°í ÇÕ´Ï´Ù. a b c ¿Í °°Àº ¹®ÀÚ´Â ¸ðµÎ ±× »¡°£ÁÙ À§¿¡ ¾º¿©Áý´Ï´Ù. ÇÏÁö¸¸ g j y °°Àº ¹®ÀÚµéÀº »¡°£ÁÙ ¾Æ·¡·Î ³»·Á°¡´Â ºÎºÐÀÌ ÀÖÁö¿ä? ÀÌÁ¦ °¨ÀÌ ¿À¼ÌÀ» °Ì´Ï´Ù. font_ascent_return ( ascentÀÇ ÀÇ¹Ì¿Í descentÀÇ Àǹ̸¦ »çÀüÀ» ã¾Æº¸½Ã¸é ¾ÆÁÖ ¸íÈ®ÇØÁý´Ï´Ù )´Â ±× »¡°£ baseline À§·Î ¸î Çȼ¿¸¸Å­ ¿Ã¶ó°¡ Àִ°¡? ±×¸®°í font_descent_returnÀº baseline ¾Æ·¡·Î ¾ó¸¶¸¸Å­Àΰ¡¸¦ ³ªÅ¸³»ÁÝ´Ï´Ù. ¿ì¸® Çѱ۰ú´Â ÀüÇô °ü·ÃÀÌ ¾ø´Ù°í ÇÒ ¼ö ÀÖÁÒ. :) ÇÏÁö¸¸! ±×·¸Áöµµ ¾Ê½À´Ï´Ù. ¿ì¸®°¡ Çѱ۰ú ¿µ¹®À» È¥¿ëÇÒ ¶§ ¿ì¸® ÇѱÛÀº ¿µ¹®°ú Á¶È­¸¦ ÀÌ·ç±â À§Çؼ­ Ç×»ó baseline À§¿¡ ¾º¿©Á®¾ß ÇÏ°ÚÁÒ? ¾û¶×ÇÏ°Ô y ÀÚÀÇ ¹ØºÎºÐ°ú ÆòÇàÇÏ°Ô ¾º¿©Áö¸é ¿µ º¸±â ½È¾îÁý´Ï´Ù. overall_returnÀº ±ÛÀÚ ±×´ë·Î Àü¹ÝÀûÀÎ Á¤º¸¸¦ °¡Á®´Ù ÁÝ´Ï´Ù. »õ·Î¿î ÀÚ·áÇüÀ̱º¿ä. XCharStruct ¶ó´Â.... ÀÌ ÀÚ·áÇüÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁ® ÀÖ´ÂÁö´Â Xlib.h Çì´õ È­ÀÏ¿¡¼­ ã¾Æº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù. <tscreen><verb> /* * per character font metric information. */ typedef struct { short lbearing; /* origin to left edge of raster */ short rbearing; /* origin to right edge of raster */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of raster */ short descent; /* baseline to bottom edge of raster */ unsigned short attributes; /* per char flags (not predefined) */ } XCharStruct; </verb></tscreen> ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â °ú¿¬ Áö±Ý Ãâ·ÂÇÏ·Á°í ÇÏ´Â ¹®ÀÚ¿­ÀÌ ¾î´À ¸¸Å­ÀÇ ¿µ¿ªÀ» Â÷ÁöÇÒ °ÍÀΰ¡¸¦ °¡´ÆÇÏ´Â °ÍÀÔ´Ï´Ù. ¹®ÀÚ¿­ÀÇ ³ôÀÌ(height)´Â ´ÙÀ½°ú °°½À´Ï´Ù. <tscreen><verb> ascent ¸Ø¹ö + descent ¸â¹ö </verb></tscreen> À§·Î ¾ó¸¶¸¸Å­À̸ç, ¾Æ·¡·Î ¾ó¸¶¸¸Å­ÀÎÁö¸¦ ´õÇÏ¸é µË´Ï´Ù. ÇѱÛÀº descent = 0 :) ±×·¡µµ ÀÏ°ü¼ºÀ» À§Çؼ­ Ç×»ó ÀÌ·¸°Ô ½áÁֽʽÿä. ´ÙÀ½À¸·Î ¹®ÀÚ¿­ÀÇ Æø(width)Àº ¾î¶»°Ô °è»êÇÒ±î¿ä? <tscreen><verb> rbearing ¸â¹ö - lbearing ¸â¹ö ¶Ç´Â ±×³É width ¸â¹ö¸¦ »ç¿ë </verb></tscreen> 1 ¹ÙÀÌÆ®±Ç ¹®ÀÚ¿¡ ´ëÇؼ­´Â XQueryTextExtents ¸¦ ¾¹´Ï´Ù. <sect3>´õ ÁÁÀº ¹æ¹ý <p> À§ÀÇ ¹æ¹ýÀº ¾î¶² Á¤º¸¸¦ ¾Ë°íÀÚ ÇÒ ¶§ Ç×»ó X ¼­¹ö¿¡°Ô ¿äûÀ» ÇØ¾ß ÇϹǷΠ³×Æ®¿öÅ© ·Îµå°¡ ¸¹ÀÌ °Å¸®°Ô µÇ¸ç, ÇÁ·Î±×·¥ÀÌ ´À·ÁÁö´Â ÁÖ¹üÀÌ µË´Ï´Ù. ±×·¡¼­ ÇÁ·Î±×·¥´Ù¿î ÇÁ·Î±×·¥À» Â¥´Â °æ¿ì¿¡´Â ´ëºÎºÐ XLoadFont ·Î ÆùÆ®·ÎµùÇÏ°í, XQueryTextExtents(16) °°Àº ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ´Ù¸¥ ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù. <bf>XLoadFont ´ë½Å¿¡ XLoadQuerFont ÇÔ¼ö¸¦ ¾¹½Ã´Ù.</bf> XLoadQueryFont ´Â ÆùÆ®¸¦ ·ÎµùÇϸ鼭 Query ÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù. <tscreen><verb> XFontStruct *XLoadQueryFont(display, name) Display *display; char *name; </verb></tscreen> XLoadFont¿¡¼­Ã³·³ ÆùÆ®¸íÀ» Àü´ÞÇØÁÖ´Â °ÍÀº °°Áö¸¸, º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¹ÝȯµÇ´Â °ªÀÌ Font ÇüÀÌ ¾Æ´Ï¶ó XFontStruct ¶ó´Â ÀÚ·áÇüÀÔ´Ï´Ù. <tscreen><verb> typedef struct XExtData *ext_data; /* hook for extension to hang data */ Font fid; /* Font id for this font */ /* ÁÖ¸ñ! */ unsigned direction; /* hint about direction the font is painted */ unsigned min_char_or_byte2;/* first character */ unsigned max_char_or_byte2;/* last character */ unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist;/* flag if all characters have non-zero size*/ unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ } XFontStruct; </verb></tscreen> ÀÚ·áÇüÀÌ ²Ï º¹ÀâÇÑ Æí¿¡ ¼ÓÇϴ±º¿ä. :) ÁÖ¸ñÇÏ½Ç °ÍÀº ÆùÆ® ID °¡ XFontStruct ÀÚ·áÇüÀÇ fid ¸â¹ö¿¡ ÀúÀåµÇ¾î ÀÖ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ÆùÆ® ID ¸¦ ¾²°í ½ÍÀ¸½Ç ¶§´Â fid ¸â¹ö°ªÀ» »ç¿ëÇϼ¼¿ä. XSetFont ÇÔ¼ö¸¦ »ç¿ëÇÏ½Ç ¶§´Â ¹Ù·Î ÆùÆ® ID ¸¦ »ç¿ëÇϼž߰ÚÁÒ? ÀÏ´Ü ±¸Á¶Ã¼¿¡´Ù°¡ ¸ù¶¥ ÆùÆ® °ü·Ã Á¤º¸¸¦ °¡Á®¿ÔÀ¸¹Ç·Î ÀÌÁ¦´Â ¾î¶² Á¤º¸¸¦ ¾Ë¾Æ ³»±â À§ÇØ X ¼­¹ö¿Í Åë½ÅÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀÌ XFontStruct ±¸Á¶Ã¼¸¦ °¡Áö°í °è½Ã¸é ´ÙÀ½°ú °°Àº ÇÔ¼öµéÀ» ÅëÇؼ­ ¿©·¯°¡Áö Á¤º¸¸¦ ij³»½Ç ¼ö ÀÖ½À´Ï´Ù. <itemize> <item>XTextWidth16 <tscreen><verb> int XTextWidth(font_struct, string, count) XFontStruct *font_struct; char *string; int count; int XTextWidth16(font_struct, string, count) XFontStruct *font_struct; XChar2b *string; int count; </verb></tscreen> ÁÖ¾îÁø ¹®ÀÚ¿­( string )ÀÌ Â÷ÁöÇÒ Çȼ¿ ÆøÀ» ¾Ë¾Æ³À´Ï´Ù. <item>XTextExtents16 <tscreen><verb> XTextExtents(font_struct, string, nchars, direction_return, font_ascent_return, font_descent_return, overall_return) XFontStruct *font_struct; char *string; int nchars; int *direction_return; int *font_ascent_return, *font_descent_return; XCharStruct *overall_return; XTextExtents16(font_struct, string, nchars, direction_return, font_ascent_return, font_descent_return, overall_return) XFontStruct *font_struct; XChar2b *string; int nchars; int *direction_return; int *font_ascent_return, *font_descent_return; XCharStruct *overall_return; </verb></tscreen> ³»¿ëÀº XQueryTextExtents16 °ú °°½À´Ï´Ù. </itemize> ¿À´ÃÀÇ ¼³¸íÀº ¿©±â¼­ ¸¶Ä¡±â·Î ÇÏ°Ú½À´Ï´Ù. »ç½Ç ÆùÆ®¿¡ ´ëÇÑ ¼³¸íÀº ±×¸²À» º¸¿© µå¸®¸é¼­ ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù´Â »ý°¢ÀÌ µå´Â±º¿ä. ¼­Á¡¿¡ °¡º¸½Ã¸é ¸¹Àº Âü°í ¼­ÀûÀÌ ÀÖÀ¸¹Ç·Î ±×³É ½½Â½ ÆùÆ® Property ¿¡ °üÇÑ ºÎºÐÀ» Àß »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. ±×¸®°í ÇÑ±Û ÇÁ¸°ÆÃÀ» À§Çؼ­´Â ÇÑÅÒ ¼Ò½ºÀÇ hangul.c ºÎºÐÀ» Àß ÈȾ½Ã±â ¹Ù¶ø´Ï´Ù. ¶Ç´Â ÇÑ±Û fvwm 2.0.42 ¼Ò½º¿¡¼­ libs µð·ºÅ丮¿¡ °¡º¸½Ã¸é HangulSupport.c ¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ±×°ÍÀ» »ìÆ캸½Ã´øÁö¿ä... <sect>X ÇÁ·Î±×·¡¹Ö ±âÃÊ : À̺¥Æ®Ã³¸® <p> Áö±Ý±îÁö´Â ±× ÀÚü·Î´Â ½ÇÁúÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé±â¿¡´Â ºÒ°¡´ÉÇÑ °¡Àå ±âº»ÀûÀÎ °³³äµé¸¸À» ÀÍÇô¿ÔÁö¸¸, ÀÌÁ¦ºÎÅÍ´Â Á» ´Þ¶óÁú °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀº ÀÌÁ¦ º»°ÝÀûÀÎ ÇÁ·Î±×·¡¹Ö¿¡ µé¾î°¡½Ç Áغñ°¡ µÇ¾ú½À´Ï´Ù. ¿À´Ã ¹è¿ï ³»¿ëÀº "GUI ÇÁ·Î±×·¡¹Ö"¿¡¼­ °¡Àå ÇÙ½ÉÀûÀÎ °³³äÀÎ "À̺¥Æ® event"¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ÀÌ¹Ì À©µµ±× ÇÁ·Î±×·¡¹Ö °°Àº °ÍÀ» Çغ» ÀûÀÌ ÀÖ´Â ºÐµéÀº, ±×¸®°í ƯÈ÷ ¿¾³¯ µµ±× ½ÃÀýºÎÅÍ C ·Î ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀº Áö±ÝºÎÅÍ ¸»¾¸µå¸®´Â ¸î °¡Áö ¾ê±â¿¡ ´ëÇÏ¿© ±Ý¹æ ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. ÀüÇô ¸ð¸£½Ã´Â Ãʺ¸ºÐÀÇ °æ¿ì¿¡´Â ÀÏ´Ü ¸ðµç °ÍÀ» ÀÌÇØÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ´ÜÁö À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº ¸ðµÎµé "À̺¥Æ®" ó¸® ¹æ½ÄÀÇ µ¶Æ¯ÇÑ ÇÁ·Î±×·¡¹Ö ½ºÅ¸ÀÏÀ» °®´Â´Ù´Â ¹®±¸ Çϳª¸¸ ±â¾ïÇØ Áֽñ⠹ٶø´Ï´Ù. <sect1>À̺¥Æ® ó¸® ¹æ½Ä°ú ¼øÂ÷ÀûÀΠó¸® ¹æ½Ä Â÷ÀÌÁ¡ <p> ¿ì¼± ¼øÂ÷ÀûÀΠó¸® ¹æ½Ä¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. C ¸¦ º¸Åë ÀýÂ÷¾ð¾î¶ó°í ºÎ¸¨´Ï´Ù. ¸ðµç ÀÏ¿¡´Â ¼ø¼­°¡ ÀÖ´Ù! °¡Àå Àΰ£ÀûÀÎ »ç°í ¹æ½ÄÀ» ¸ðµ¨·Î ÇÏ°í ÀÖ°í °á±¹ ¾î¶² ¾ð¾îµç °£¿¡ Àΰ£ÀÇ ³í¸®´Â Ç×»ó ¿øÀÎ --< °á°úÀÇ ¼ø¼­¸¦ °¡Áö°í »ý°¢ÇÏ´Â ¹æ½ÄÀÇ º¯È­, öÇÐÀÇ º¯È­¾øÀÌ´Â ¾ÕÀ¸·Îµµ Ç×»ó ³²¾ÆÀÖÀ» °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ Áö±Ý ÇÏ°í ÀÖ´Â ¸ðµç ÀÏÀÌ ´Ù ÀýÂ÷¸¦ °®½À´Ï´Ù. ±×¸®°í ±×°ÍÀº Ç×»ó ¸ðµç ÇÁ·Î±×·¡¹ÖÀÇ ±âº»ÀÌ¸ç ³ªÁß¿¡ À̺¥Æ® ó¸® ¹æ½ÄÀ̶ó ÇÒ Áö¶óµµ ½ºÄÉÀÏÀ» ÀÛ°Ô º¸¸é °á±¹¿¡´Â Àڱ׸¶ÇÑ ¼øÂ÷ ó¸® ¹æ½ÄµéÀÇ °áÇÕÀ̶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. º¸Åë ¼Ð ½ºÅ©¸³Æ®¿Í °°ÀÌ ´Ü ÇÑ ¹øÀÇ ÀÔ·ÂÀ» ¹Þ°í ´Ü ÇÑ ¹øÀÇ Ã³¸®·Î ³¡³ª´Â ÇÁ·Î±×·¥µéÀÌ ÀüÇüÀûÀÎ ¿¹ÀÔ´Ï´Ù. ±×¿¡ ¹ÝÇؼ­ À̺¥Æ® ó¸® ¹æ½ÄÀº "¼ö¸¹Àº ¹öÆ°, ¾ðÁ¦ Ŭ¸¯ÇÒ Áö ¸ð¸£´Â º¯´öÀåÀÌ ¸¶¿ì½º"¶ó´Â °ÍÀ» Ư¡À¸·Î ÇÕ´Ï´Ù. À©µµ¿ì ½Ã½ºÅÛÀÌ µÇ¸é¼­ºÎÅÍ ÇÁ·Î±×·¡¸ÓµéÀº Á¤¸»·Î ¸¹Àº °í¹ÎÀ» Çϱ⠽ÃÀÛÇßÁö¿ä. µµ´ëü ¼ø¼­¶ó´Â °ÍÀ» ¹ß°ßÇϱⰡ Èûµé´Ù´Â °ÍÀÌ ¹®Á¦ÀÔ´Ï´Ù. ¾î¶² ¹öÆ°À» ´©¸¥ ´ÙÀ½ ¾î¶² ¹öÆ°À» ´©¸¦ °ÍÀÎÁö´Â ¿¹ÃøÇÒ ¼ö°¡ ¾ø ½À´Ï´Ù. ¼øÁøÇÑ »ç¿ëÀÚ´Â ¾Æ¹«·¸°Ô ¸¶À½³»Å°´Â ´ë·Î ¹öÆ°À» ´­·¯´ð´Ï´Ù. µµ´ëü ¸¶¿ì½º°¡ ¾îµð·Î ¿òÁ÷ÀÏ Áöµµ ¿¹°ßÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÏÀÌ ÀÌ·¯Çϱ⠶§¹®¿¡ X À©µµ¿ì ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀº ¾ÆÁÖ ÆÇÀÌÇÏ°Ô ´Ù¸¥ ¾î¶² ÀÏÁ¤ ÇÑ ÆÐÅÏÀ» °®½À´Ï´Ù. »ç½Ç ³ªÁß¿¡ º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ À̺¥Æ® 󸮹æ½ÄÀ̶ó´Â °Íµµ ¾ÆÁÖ ½±½À´Ï´Ù. ±×¸®°í ´ëÇü ÇÁ·Î±×·¥À» ¸¸µé ¶§ ÁÁÁö¿ä. ±×¸®°í À̺¥Æ® 󸮹æ½ÄÀº ±× ¹«¾ùº¸´Ùµµ C++ °ú °°Àº ¿ÀºêÁ§Æ® ¿À¸®¿£Æ¼µðµå ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í Á¦ÀÏ Àß ¸Â½À´Ï´Ù. ÇÏÁö¸¸ X À©µµ¿ì´Â ¾ÆÁ÷ C ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î µÇ¾î ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ C++ ·Î Â¥µµ »ó°ü¾ø°í ¾î¶»°Ô º¸¸é C++ ·Î Â¥´Â °ÍÀÌ ´õ¿í ¾Ë¸Â´ÂÁöµµ ¸ð¸¨´Ï´Ù. ½ÇÁ¦ X ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é OOP ºñ½ÁÇÑ ½ºÅ¸ÀÏÀ» ¸¹ÀÌ »ç¿ëÇϴϱî¿ä. À̺¥Æ® ó¸® ¹æ½ÄÀÇ ÇÁ·Î±×·¡¹ÖÀº º¸Åë ÀÌ·± ½ÄÀ¸·Î »ý°¢ÇÕ´Ï´Ù. ¹öÆ°À» ¸î °³ ¸¸µç´Ù. °¢ ¹öÆ°ÀÌ ´­·ÁÁö¸é ¼öÇàµÉ µ¶Æ¯ÇÑ ÇÔ¼öµéÀ» ÁöÁ¤ÇØÁØ´Ù. ±×¸®°í ³ª¼­ ¿ì¸®´Â ¹öÆ°ÀÌ ´­·ÁÁö±â¸¸À» ±â´Ù¸°´Ù. ±×¸®°í ¹öÆ°ÀÌ ´­·ÁÁú ¶§¸¶´Ù ¿¹¸¦ µé¾î 1 ¹ø ¹öÆ°Àº ¿øÀ», 2 ¹ø ¹öÆ°Àº »ç°¢ÇüÀ», ±×¸®°í 3 ¹ø ¹öÆ°Àº Á÷¼±À» ±×¸®µµ·Ï ÇÑ´Ù. Áï ¾î¶² °´Ã¼¸¦ ¸ÕÀú ¸¸µé°í ³ª¼­ ±×°Í¿¡´Ù°¡ ƯÁ¤ ±â´ÉÀ» ºÎ¿©ÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. ÀÌ·± ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀ̱⠶§¹®¿¡ ºñÁÖ¾ó C ´Ï ºñÁÖ¾ó º£À̽ÄÀÌ´Ï ÇÏ´Â °ÍÀÌ °¡´ÉÇÑ °ÍÀÔ´Ï´Ù. ±â¾ïÇϽʽÿä. ¸ÕÀú ¾î¶² ¹öÆ°À» ¸¸µì´Ï´Ù. ±×¸®°í ±× ¹öÆ°¿¡´Ù°¡ ¿øÇÏ´Â ±â´ÉÀ» Çϳª¾¿ ºÎ¿©ÇÕ´Ï´Ù. ´­·ÁÁö¸é ½ÇÇàÀ» ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î "Exit" ¹öÆ°À» ¸¸µé¸é ¿ì¸®´Â ÇÁ·Î±×·¥À» Á¾·áÇÏ¸é µË´Ï´Ù. <sect1>º¹ÀâÇÑ ÀÏÀº X ¼­¹ö°¡ ó¸®ÇÕ´Ï´Ù. ¿ì¸®´Â ´ÜÁö... <p> ÀÚ½ÅÀÌ ÇÁ·Î±×·¡¹ÖÇÏ´Â Ç÷§Æ÷¿ÈÀ» ¹Ï´Â ÀÏÀº ÂüÀ¸·Î Áß¿äÇÕ´Ï´Ù. À©µµ±×95 ÇÁ·Î±×·¡¸ÓµéÀº À©µµ±×95¸¦ ¹Ï°í, X ÇÁ·Î±×·¡¸ÓµéÀº X À©µµ¿ì¸¦ ¹Ï½À´Ï´Ù. ÀüÀÚ´Â M$°¡ ¼¼°è ½ÃÀå¿¡¼­ À̱ä´Ù´Â °ÍÀ» ¹Ï°í ÈÄÀÚÀº X À©µµ¿ì ±× ÀÚüÀÇ ´É·Â°ú °¡´É¼ºÀ» ¹Ï½À´Ï´Ù. À©µµ±×95 ÀÚü¸¦ ¹ÏÁö´Â ¾Ê°ÚÁö¿ä? :) X À©µµ¿ì°¡ ¶ßÁö ¸¶ÀÚ Á¤½Å¾øÀÌ µ¹¾Æ´Ù´Ï´Â ¸¶¿ì½º, ¶Ç´Â ¾ðÁ¦ ŸÀÌÇ뵃 Áö ¸ð¸£´Â Å°º¸µå, ÀÌ ¸ðµç °Í¿¡ ´ëÇؼ­ ¿©·¯ºÐÀº °ÆÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. ¸¶¿ì½º°¡ ¾îµð·Î ¿ò Á÷ÀÌ°í ÀÖ´ÂÁö ±×¸®°í Å°º¸µå ÀÔ·ÂÀ» ¹ÞÀ¸¸é ¾î¶»°Ô ÇÒ °ÍÀÎÁö¿¡ ´ëÇؼ­´Â X ¼­¹ö°¡ ´ã´çÇÕ´Ï´Ù. ±×´Â ¸¶Ä¡ ¿©·¯ºÐ¿¡°Ô Ä«µå Æи¦ µ¹¸®´Â µô·¯¿Íµµ °°½À´Ï´Ù. ¿©·¯ºÐÀÌ ¸¸µç ÇÁ·Î±×·¥Àº ÇÔ²² ½ÇÇàµÇ°í ÀÖ´Â ±× ¸¹Àº âµé°ú °øÁ¸ÇÕ´Ï´Ù. µµ´ëü ¾î´À â¿¡¼­ ¸¶¿ì½º Ŭ¸¯ÀÌ ¹ú¾îÁ³´ÂÁö¿¡ ´ëÇؼ­ °ÆÁ¤ÇÒ ÇÊ¿ä¾ø½À´Ï´Ù. ¿©·¯ºÐÀÇ Ã¢¿¡¼­ Ŭ¸¯ÀÌ ÀÌ·ç¾îÁö¸é X ¼­¹ö°¡ ¾Ë¾Æ¼­ ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥¿¡°Ô "À̺¥Æ®"¸¦ º¸³À´Ï´Ù. ½ÉÁö¾î ³ª´Â Å°º¸µå ÀÔ·ÂÀº ÇÊ¿ä¾ø´Ù. ´ÜÁö ¸¶¿ì½º¸¸À¸·Î ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À̹ǷΠ"Å°º¸µå ÀÔ·ÂÀ̶ó´Â À̺¥Æ®"´Â Å뺸ÇÏÁö ¸»¾Æ´Þ¶ó! °í ¿äûÇϸé X ¼­¹ö´Â ¾Ë¾Æ¼­ Å°º¸µå ÀÔ·ÂÀº ¿©·¯ºÐ¿¡°Ô ÁÖÁö ¾Ê½À´Ï´Ù. ¿©·¯ºÐÀº while ¹®Àå Çϳª¸¦ °¡Áö°í ¹«ÇÑ·çÇÁ¸¦ µ¹¸é¼­ ¸¸¾à À̺¥Æ®°¡ »ý±ä´Ù¸é ±×°ÍÀÌ ¸¶¿ì½º Ŭ¸¯ÀÎÁö ¾Æ´Ï¸é Å°º¸µå ÀÔ·ÂÀÎÁö, ¸¶¿ì½º Ŭ¸¯ÀÌ¸é ¸î ¹ø° ¸¶¿ì½º ¹öÆ°ÀÎÁö ¸î °³¸¦ µ¿½Ã¿¡ ´­·¶´ÂÁö µîÀ» È®ÀÎÇÏ°í ¾Ë¸Â´Â ÇൿÀ» ÃëÇØÁÖ¸é µË´Ï´Ù. °³³ä»ó ÇÁ·Î±×·¡¹ÖÀº ½±½À´Ï´Ù. ¿©·¯ºÐ ÇÁ·Î±×·¥ÀÇ ¼º°øÀº ¿À·ÎÁö ¿©·¯ºÐÀÇ Ã¢Á¶·Â¿¡ ´Þ¸° °ÍÀÌÁö »ç½Ç À©µµ±×95ÀÎÁö X À©µµ¿ìÀÎÁö´Â »ó°ü¾ø½À´Ï´Ù. ½ÉÁö¾î ²À X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» C ¾ð¾î·Î Ç϶õ ¹ýµµ ¾ø½À´Ï´Ù. Tcl/Tk ¿Í °°Àº ¸ÚÁø ½ºÅ©¸³Æà ¾ð¾îµéµµ ¸¹°í ±× °­·ÂÇÔÀ» ÀÔÁõ¹Þ°í ÀÖ½À´Ï´Ù. ´ÜÁö C ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÑ´Ù´Â °ÍÀº ¿©·¯ºÐ¿¡°Ô ¾ÆÁÖ ÅºÅºÇÑ ±âÃʸ¦ ¸¶·ÃÇØÁÖ°í ´Ù¸¥ ¾î¶² ÇÁ·Î±×·¡¹Öµµ ½±°Ô ÇÒ ¼ö ÀÖ´Â ÀڽۨÀ» Áشٴ °ÍÀ» ¸»¾¸µå¸®°í ½Í½À´Ï´Ù. <sect1>ÀϹÝÀûÀÎ ÄÚµå ÇüŸ¦ º¸°í ´«¿¡ ÀÍÈü½Ã´Ù. <p> ÀÌ ¼Ò½º´Â ¿Ïº®ÇÑ ¼Ò½º°¡ ¾Æ´Ï¶ó ±×³É °³³äÀûÀÎ ¼Ò½ºÀÏ »ÓÀÔ´Ï´Ù. <tscreen><verb> Display display; XEvent xe; /* À̺¥Æ® ó¸® ±¸Á¶Ã¼ */ Window window1; /* X ¼­¹ö¶û Á¢¼ÓÀ» ÇÕ´Ï´Ù. XOpenDisplay ÇÔ¼ö »ç¿ë */ /* °£´ÜÇÑ Ã¢ Çϳª¸¦ ¸¸µé¾îµÓ´Ï´Ù. */ /* ¿øÇÏ´Â À̺¥Æ®¸¸À» ¼­¹ö¿¡°Ô µî·ÏÇÕ´Ï´Ù */ XSelectInput( display, window1, StructureNotifyMask | ExposureMask | ButtonPressMask ); XMapWindow( display, window1 ); /* ¿©±â¼­ºÎÅÍ º»°ÝÀûÀÎ ÇÁ·Î±×·¥ÀÇ ·ÎÁ÷ÀÌ Àü°³µË´Ï´Ù */ while(1) /* WHILE ¹®ÀÇ ½ÃÀÛ */ { /* À̺¥Æ®°¡ »ý±â±â¸¦ ±â´Ù¸®°í ÀÖ½À´Ï´Ù */ XNextEvent( display, &ero;xe ); /* À̺¥Æ®°¡ »ý±â¸é ´ÙÀ½ ÁÙÀ» ½ÇÇàÇÕ´Ï´Ù. À̺¥Æ®°¡ ¾î¶² Á¾·ùÀÇ À̺¥ Æ®ÀÎÁö¸¦ ½Äº°Çس»°í ±×¿¡ ¾Ë¸Â´Â ÇൿÀ» ÇÕ´Ï´Ù */ switch ( xe.type ) { case Expose: printf("Expose À̺¥Æ® ¹ß»ý\n"); break; case ButtonPress: printf("¹öÆ°ÀÌ ´­·ÁÁ³½À´Ï´Ù.\n"); break; case ConfigureNotify: printf("âÀÇ »óÅ°¡ ¹Ù²î¾ú½À´Ï´Ù.\n"); break case ClientMessage: printf("´Ù¸¥ Ŭ¶óÀ̾ðÆ®°¡ ¸Þ¼¼Áö¸¦ º¸³»¿Ô½À´Ï´Ù\n"); break; default: printf("¹ß»ýÇÑ À̺¥Æ®¸¦ ¹«½ÃÇÕ´Ï´Ù\n"); break; } } /* WHILE ¹®ÀÇ ³¡ */ </verb></tscreen> À§¿¡¼­ º¸¿©µå¸° ÆÐÅÏÀ» ¸Ó¸® ¼Ó¿¡ Ç×»ó ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¹ö½º¸¦ Ÿ°í °¡¸é¼­µµ ±×¸®°í È­Àå½Ç¿¡¼­ º¼ ÀÏÀ» º¼ ¶§µµ À½¾ÇÀ» µè°í À־ ¿©ÀÚ Ä£±¸¸¦ ¸¸³ª¼­ µÎ ´«À» ¹Ù¶óº¸°í ÀÖÀ¸¸é¼­µµ... Àá°á¿¡µµ... ¹«¾ùÀ̵ç ÀüÇüÀûÀÎ ÆÐÅÏÀ̶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ ÆÐÅÏÀ» ´«Ä¡Ã¤½Ã´Â °ÍÀÌ °¡Àå Áß¿äÇÕ´Ï´Ù. ±×·³ ÀÌÁ¦ Â÷±ÙÂ÷±Ù ¾Ë¾Æ°¡º¸µµ·Ï ÇսôÙ. <sect1>ÆÐÅÏ ºÐ¼® <p> Á¦ÀÏ ¸ÕÀú ´«¿¡ ¶ç´Â °ÍÀº ¹Ù·Î XEvent ¶ó´Â »õ·Î¿î ÀÚ·áÇüÀÔ´Ï´Ù. C ÇÁ·Î±×·¥ÀÌµç ¹¹µç °£¿¡ ÇÁ·Î±×·¡¹ÖÀÇ ±âº» ¿ä¼Ò´Â "ÀÚ·áÇü°ú ¾Ë°í¸®Áò"ÀÔ´Ï´Ù. ÈÄÀÚ´Â ¿©·¯ºÐÀÇ ¸òÀ̶ó Ä¡°í ÀÏ´Ü ÀڱⰡ »ç¿ëÇÏ´Â ÀÚ·áÇü¿¡ ´ëÇؼ­ Àͼ÷ÇØÁ® ÀÖÁö ¾Ê°Å³ª ´ëÃæ ¾Ë°í ³Ñ¾î°¡°Ô µÈ´Ù¸é ÇÁ·Î±×·¡¹ÖÀÇ ¹Ý¿¡ Àͼ÷ÇÏÁö ¾Ê°í ¹ÝÀ» ´ëÃæ ÇØ°áÇÑ °Í°ú µ¿ÀÏ ÇÕ´Ï´Ù. ÀÚ·áÇü¿¡ ´ëÇؼ­ Áï½Ã ¾Ë¾Æº¸µµ·Ï ÇսôÙ. <tscreen><verb> /* * this union is defined so Xlib can always use the same sized * event structure internally, to avoid memory fragmentation. */ typedef union _XEvent { int type; /* must not be changed; first element */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent; </verb></tscreen> XEvent ´Â <X11/Xlib.h>¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. Áö±Ý ´çÀå Xlib.h Çì´õÈ­ÀÏÀ» ÆíÁý±â·Î ¿­¾î¼­ ³»¿ëÀ» È®ÀÎÇϽʽÿä. Çì´õ È­ÀÏÀÇ ³»¿ëÀº ¾ðÁ¨°¡´Â ÇÑ ¹ø ¸ù¶¥ ÀоîºÁ¾ß ÇÒ ¶§°¡ ¿À°ÚÁö¿ä? º¸½Ã´Ù½ÃÇÇ XEvent ´Â °ø¿ëü( À¯´Ï¾ð union )ÀÔ´Ï´Ù. °ø¿ëü°¡ ¹«¾ùÀÎÁö ¸ð¸£½Å´Ù¸é ÀÏ´Ü X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº Á¢¾îµÎ½Ã°í Áö±Ý ´çÀå °¡Àå ½¬¿î C ÇÁ·Î±×·¡¹Ö Ã¥¿¡¼­ °ø¿ëü¿¡ ´ëÇؼ­ °øºÎÇϽñ⠹ٶø´Ï´Ù. XEvent °ø¿ëüÀÇ ±¸Á¶´Â ÀüüÀûÀ¸·Î ´ÙÀ½°ú °°½À´Ï´Ù. <tscreen><verb> typedef union _XEvent { int type; /* ²À! ù¹ø° ¸â¹ö¿©¾ß ÇÑ´Ù. */ ... X*Event <º¯¼ö¸í> ... long pad[24]; } XEvent; </verb></tscreen> °ø¿ëüÀÇ Å©±â´Â °ø¿ëüÀÇ ¸â¹ö Áß °¡Àå Å« ÀÚ·áÇüÀÇ Å©±â¿Í °°½À´Ï´Ù. ¸¶Áö¸· ¸â¹ö¸¦ º¸¸é XEvent ´Â long Çü ÀÚ·á 24 °³ Á¤µµÀÇ Å©±â¸¦ °®´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¾Æ¸¶µµ Á¦ÀÏ ÀÛÀº ÀÚ·áÇüÀº int type ÀÌ°ÚÁÒ? Áß°£¿¡ ¹«¼öÈ÷ ¸¹ÀÌ µé¾î°¡ ÀÖ´Â X*Event ÀÚ·áÇüÀ» ÇÑ ¹ø º¾½Ã´Ù. XAnyEvent, XKeyEvent, XButtonEvent, XMotionEvent, XExposeEvent µîµîÀÇ X ·Î ½ÃÀÛÇÏ°í Event·Î ³¡³ª´Â À̸§ÀÇ ±¸Á¶Ã¼°¡ ÀÖ½À´Ï´Ù. ±× ±¸Á¶Ã¼ ÀÚ·áÇüµé ¶ÇÇÑ ¸ðµÎ Xlib.h ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. ÇÑ ¹ø »ìÆ캸ÁÒ. <tscreen><verb> typedef struct { int type; /* <-- ÁÖ¸ñ! */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display;/* Display the event was read from */ Window window; /* window on which event was requested in event mask */ } XAnyEvent; typedef struct { int type; /* <-- ÁÖ¸ñ! */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ } XKeyEvent; typedef struct { int type; /* <-- ÁÖ¸ñ! */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef struct { int type; /* <-- ÁÖ¸ñ! */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ char is_hint; /* detail */ Bool same_screen; /* same screen flag */ } XMotionEvent; typedef struct { int type; /* <-- ÁÖ¸ñ! */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int x, y; int width, height; int count; /* if non-zero, at least this many more */ } XExposeEvent; </verb></tscreen> ¿©±â¼­´Â ¸î °³ÀÇ ±¸Á¶Ã¼¸¸À» ¿¹·Î µé¾úÀ» »ÓÀÔ´Ï´Ù. ¿·¿¡ ¾à°£ÀÇ ¼³¸íÀÌ µé¾îÀÖÀ¸´Ï ±×°ÍÀ» Âü°íÇÏ½Ã¸é µË´Ï´Ù. ¸ðµÎµé ±¸Á¶Ã¼Àε¥ ±¸Á¶Ã¼ ¸â¹öµéÀ» ¼­·Î ºñ±³ÇØ°¡¸é¼­ º¸½Ê½Ã¿ä. ¿©±â¼­ ¿©·¯ºÐ ½º½º·Î °üÂûÀ» Çس»¸é X ÇÁ·Î±×·¡¹ÖÀº Àç¹ÌÀÖ½À´Ï´Ù. XAnyEvent ÀÇ ³»¿ëÀº ÇÑ ¹ø ¸Ó¸® ¼Ó¿¡ ³Ö°í ´Ù¸¥ X*Event ±¸Á¶Ã¼ ¸â¹öµéÀ» »ìÆ캸½Ê½Ã¿ä. ±×·¯¸é ¿©Áö¾øÀÌ ¸ðµç ±¸Á¶Ã¼¿¡´Â XAnyEvent ÀÇ ³»¿ëÀÌ ¸ðµÎ µé¾î ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. <sect1>À̺¥Æ® ÀÚ·áÇü »ç¿ë¹ý <p> ¸ðµç À̺¥Æ® ±¸Á¶Ã¼µéÀ» ´ëÇ¥ÇÏ°í ÀÖ´Â °ø¿ëü XEvent ¸¦ ÇÁ·Î±×·¥¿¡¼­ ÀÏ´Ü »ç¿ëÇÕ´Ï´Ù. X ¼­¹ö°¡ ¿ì¸®µé ÇÁ·Î±×·¥¿¡°Ô ¾î¶² À̺¥Æ®°¡ ¹ß»ýÇß´Ù°í ÇÏ¸é ¹Ù·Î XEvent¸¦ º¸³»ÁÝ´Ï´Ù. ±×·¯¸é ¿ì¸®´Â ¿ì¼±! XEvent ÀÇ °¡Àå ±âÃÊÀûÀÎ ÀÚ·áÇüÀÎ int typeÀÇ ³»¿ëÀ» »ìÆ캾´Ï´Ù. ±× type °ªÀ» °¡Áö°í ÀÌ À̺¥Æ®°¡ °ú¿¬ ¸¶¿ì½º°ú °ü·ÃµÈ °ÍÀÎÁö ¾Æ´Ï¸é Å°º¸µå¿Í °ü·ÃµÈ °ÍÀÎÁö µîÀ» ÆǺ°ÇÕ´Ï´Ù. ÆǺ°ÀÌ µÇ¸é ±×¿¡ ¾Ë¸Â´Â ÀÚ·áÇü Áï XEventÀÇ °ø¿ëü ¸â¹öµéÀ» ÀûÀýÇÏ°Ô »ç¿ëÇÕ´Ï´Ù. ¸¶¿ì½º¿Í °ü·ÃµÇ¸é XEvent ¿¡¼­ ¸¶¿ì½º¿Í °ü·ÃµÈ ¸â¹öÀÎ XButtonEvent, XMotionEvent °°Àº °ÍÀ» ÀÌ¿ëÇÏ¿© À̺¥Æ®¸¦ Çؼ®ÇÕ´Ï´Ù. Å°º¸µå¿¡ °ü·ÃµÇ¾î ÀÖ´Ù¸é À̹ø¿¡´Â ±× ÀÚ·áÇüµé ´ë½Å¿¡ XKeyEvent ¸¦ »ç¿ëÇÕ´Ï´Ù. °¢ ±¸Á¶Ã¼´Â ¶Ç ´Ù½Ã Àڱ⿡°Ô ¾Ë¸Â´Â ±¸Á¶Ã¼ ¸â¹öµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ±×°ÍÀ» º¸°í Çؼ®ÇÏ¸é µË´Ï´Ù. ¸¸¾à ¸¶¿ì½º¿¡ °ü·ÃµÇ¾ú´Ù¸é unsigned int button ¸â¹ö¸¦ º¸°í ¾î¶² ¹öÆ°ÀÎÁö¸¦ Çؼ®ÇÕ´Ï´Ù. ¸¸¾à Å°º¸µå¿¡ °ü·ÃµÇ¾ú´Ù¸é unsigned int keycode ¸¦ º¸°í Çؼ®ÇÕ´Ï´Ù. ±×·¯ÇÑ °úÁ¤À» ¹Ù·Î switch ( xe.type ) ¹®Àå¿¡¼­ ÇÏ°í ÀÖ´Â °ÍÀÔ´Ï´Ù. case ¹®¿¡ ³ªÅ¸³­ Expose, ButtonPress µîÀº ¸ÅÅ©·ÎÀÔ´Ï´Ù. X.h ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù. <tscreen><verb> #define KeyPress 2 #define KeyRelease 3 #define ButtonPress 4 #define ButtonRelease 5 #define MotionNotify 6 #define EnterNotify 7 #define LeaveNotify 8 #define FocusIn 9 #define FocusOut 10 #define KeymapNotify 11 #define Expose 12 #define GraphicsExpose 13 #define NoExpose 14 #define VisibilityNotify 15 </verb></tscreen> <sect1>⸶´Ù ÀڱⰡ ¿øÇÏ´Â À̺¥Æ®¸¸À» ¿¹¾àÇϱâ <p> ¿¹Á¦ ¼Ò½º¸¦ º¸½Ã¸é ´ÙÀ½°ú °°Àº ºÎºÐÀÌ ÀÖ½À´Ï´Ù. <tscreen><verb> XSelectInput( display, window1, StructureNotifyMask | ExposureMask | ButtonPressMask ); XMapWindow( display, window1 ); </verb></tscreen> XSelectInputÀ̶ó´Â ÇÔ¼ö°¡ º¸À̴±º¿ä. »õ·Î¿î ÇÔ¼ö´Ï±î Àá½Ã ´«¿¡ ÀÍÇôµÎ¾î¾ß°ÚÁÒ? man ¸í·ÉÀ» ¶°¿Ã¸®¼Å¾ß ÇÕ´Ï´Ù. man XSelectInput <tscreen><verb> NAME XSelectInput - À̺¥Æ® ÀÔ·ÂÀ» ¼±ÅÃÇÕ´Ï´Ù. SYNTAX XSelectInput(display, w, event_mask) Display *display; Window w; long event_mask; ARGUMENTS display X ¼­¹ö¿ÍÀÇ Á¢¼Ó ID event_mask À̺¥Æ® ¸Å½ºÅ© w À̺¥Æ® ¼±ÅÃÀ» Àû¿ëÇÒ Ã¢ ID </verb></tscreen> ¸Å½ºÅ©(Mask)¶ó°í ÇÏ´Â ±â¹ý ¶ÇÇÑ ¾ÆÁÖ Áß¿äÇÑ C ÇÁ·Î±×·¡¹Ö ½ÇÀü ±â¹ýÀÔ´Ï´Ù. ¸ð¸£½Ã´Â ºÐÀº ´çÀå C ÇÁ·Î±×·¡¹Ö Ã¥À» º¸½Ê½Ã¿ä. Á¦°¡ »ý°¢¿£ ¿øÆÇ Ä¿´Ï°Ç & ¸®Ä¡ÀÇ ¾ÆÁÖ ¾ãÁö¸¸ ±× ¾î¶² C ÇÁ·Î±×·¡¹Ö Çؼ³Ã¥º¸´Ùµµ ¶Ù¾î³­ "C ÇÁ·Î±×·¡¹Ö ·©±ÍÁö" ¶ó´Â Ã¥À» ±ÇÇÕ´Ï´Ù. Ç×»ó °¡Áö°í ´Ù´Ï±â¿¡ Âü ÁÁ½À´Ï´Ù. ¾µµ¥ ¾øÀÌ ½±°Ô ¾²Áöµµ ¾î·Æ°Ô ¾²Áöµµ ¾ÊÀº ¸íÀúÀÌÁö¿ä. À§¿¡¼­º¸¸é ¿ì¸®´Â °¢ ⸶´Ù XSelectInput À̶ó´Â ÇÔ¼ö¸¦ ÅëÇؼ­ ÀڱⰡ °ü½É°®´Â À̺¥Æ®¸¸À» µî·ÏÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î OK ³ª CANCEL ¹öÆ°À» Ç¥½ÃÇϴ âÀÇ ÀÔÀå¿¡¼­ Å°º¸µå ÀÔ·ÂÀ̳ª ¸¶¿ì½ºÀÇ À̵¿ °°Àº °ÍÀº ÀüÇô ÇÊ¿ä¾ø°ÚÁö¿ä? ¹öÆ°ÀÌ ´­·È³ª ¾È´­·È³ª¸¸ È®ÀÎÇÏ¸é µË´Ï´Ù. <tscreen><verb> StructureNotifyMask | ExposureMask | ButtonPressMask </verb></tscreen> ºñÆ®¿¬»ê OR ¶ÇÇÑ ¾ÆÁÖ ¸¹ÀÌ Á¢ÇÏ´Â ±â¼úÀÔ´Ï´Ù. <tscreen><verb> #define NoEventMask 0L #define KeyPressMask (1L<<0) #define KeyReleaseMask (1L<<1) #define ButtonPressMask (1L<<2) #define ButtonReleaseMask (1L<<3) #define EnterWindowMask (1L<<4) #define LeaveWindowMask (1L<<5) #define PointerMotionMask (1L<<6) #define PointerMotionHintMask (1L<<7) #define Button1MotionMask (1L<<8) #define Button2MotionMask (1L<<9) #define Button3MotionMask (1L<<10) #define Button4MotionMask (1L<<11) #define Button5MotionMask (1L<<12) #define ButtonMotionMask (1L<<13) </verb></tscreen> ¿©·¯ºÐÀº (1L>>2) ¶ó´Â Ç¥Çö¿¡ Àͼ÷ÇØÁö¼Å¾ß ÇÕ´Ï´Ù. ¾ÕÀ¸·Îµµ ÀÚÁÖ ³ª¿À°í ±âº»ÀûÀÎ ½ÇÀü Å×Å©´ÐÀ̴ϱî¿ä. ±×·³ °£´ÜÇÑ ¿¹¸¦ µé¾îº¼±î¿ä? <descrip> <tag>°£´ÜÇÑ ¿¹</tag> °£´ÜÇÑ ¹öÆ°À» Çϳª ¸¸µé¾î¼­ Ŭ¸¯Çϸé Hello, Linuxers ¶ó´Â ¹®ÀÚ¿­À» Ãâ·ÂÇÑ ÈÄ Á¾·áÇÏ´Â ¿¹¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù. <tscreen><verb> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <stdio.h> int main( int argc, char* argv[] ) { Display *dpy; Window w; Font f; GC gc; XEvent xe; 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 ); f = XLoadFont( dpy, "fixed" ); XSetFont( dpy, gc, f ); XSetLineAttributes( dpy, gc, 5, LineSolid, CapRound, JoinRound ); XSelectInput( dpy, w, ExposureMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask ); XMapWindow( dpy, w ); XFlush( dpy ); while ( True ) { XNextEvent( dpy, &ero;xe ); switch ( xe.type ) { case Expose: printf("Expose À̺¥Æ®°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.\n"); XSetForeground( dpy, gc, BlackPixel( dpy, 0 ) ) XDrawString( dpy, w, gc, 40, 30, "O K", 3 ); break; case ButtonPress: printf("¹öÆ°À» ´©¸£¼Ì½À´Ï´Ù!\n"); exit(1); break; case EnterNotify: printf("¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î¿Ô½À´Ï´Ù.\n"); XSetForeground( dpy, gc, BlackPixel( dpy, 0 ) ); XDrawRectangle( dpy, w, gc, 10, 10, 80, 30 ); break; case LeaveNotify: printf("¸¶¿ì½º°¡ â ¹ÛÀ¸·Î ³ª°¬½À´Ï´Ù.\n"); XSetForeground( dpy, gc, WhitePixel( dpy, 0 ) ); XDrawRectangle( dpy, w, gc, 10, 10, 80, 30 ); break; default: printf("¸ð¸£´Â À̺¥Æ®ÀÔ´Ï´Ù. ¹«½ÃÇÕ´Ï´Ù.\n"); break; } } return 0; } </verb></tscreen> À§ ¿¹Á¦¸¦ event.example.c ¶ó´Â À̸§À¸·Î ÀúÀåÇÏ°í ´ÙÀ½°ú °°ÀÌ ÇØÁÝ´Ï´Ù. <tscreen><verb> gcc -o event.example event.example.c -lX11 -L/usr/X11/lib </verb></tscreen> ½ÇÇàÀº ÇÑÅÒ Ã¢°ú °°ÀÌ ÇѱÛÀÌ Ãâ·ÂµÉ ¼ö ÀÖ´Â °÷¿¡¼­ ½ÇÇàÇØÁֽʽÿä. <tscreen><verb> ./event.example </verb></tscreen> <tag>¿¹Á¦¿¡ ´ëÇÑ ¼³¸í</tag> XSelectInput ÇÔ¼ö°¡ ³ª¿À±â Àü±îÁö ³ª¿À´Â ¸ðµç °ÍµéÀº ÀÌ¹Ì ¿ì¸®°¡ Àß ¾Ë°í ÀÖ´Â ³»¿ëÀÔ´Ï´Ù. ¼­¹ö¿Í Á¢¼ÓÀ» ÇÏ°í âÀ» Çϳª ¸¸µì´Ï´Ù. ÆùÆ® Ãâ·Â°ú »ç°¢Çü ±×¸®±â¸¦ ÇÒ °ÍÀ̹ǷΠGC ¸¦ ¸¸µé¾îµÎ´Â °Íµµ ÀØÁö ¾Ê½À´Ï´Ù. ½Ã½ºÅÛÀÇ ±âº»ÀÎ fixed ÆùÆ®¸¦ ·ÎµùÇÏ°í GC ¼¼Æõµ ±×·°Àú·° ÇصӴϴÙ. <enum> <item>âÀ» MAPÇϱâ Àü¿¡ ¿ì¼± ¿øÇÏ´Â À̺¥Æ®¸¦ °ñ¶óµÐ´Ù. XSelectInput ÇÔ¼ö¸¦ ÅëÇؼ­ ¿ì¸®´Â ¿øÇϴ â¿¡´Ù°¡ ¿ì¸®°¡ °ü½ÉÀ» °®´Â À̺¥Æ® ¸¸À» µî·ÏÇصдÙ. ±×·¯¸é ³ª¸ÓÁö À̺¥Æ®µéÀº ±×³É ¹«½ÃµÇ¹ö¸®°í ¸¸´Ù. ¿©±â¼­ ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀº ÀÏ´Ü ¾ÆÁÖ¾ÆÁÖ Áß¿äÇÑ À̺¥Æ®ÀÇ ÇϳªÀÎ Expose À̺¥Æ®, ¸¶¿ì½º ¹öÆ°ÀÌ Å¬¸¯µÇ¾ú´Â°¡¸¦ ¾Ë¾Æº¸´Â À̺¥Æ® ±×¸®°í â ¼ÓÀ¸·Î ¸¶¿ì½º Æ÷ÀÎÅÍ°¡ µé¾î°¬´Â°¡, ³ª¿Ô´Â°¡¸¦ ¾Ë·ÁÁÖ´Â À̺¥Æ®¸¦ ¼³Á¤ÇÏ¿´½À´Ï´Ù. <tscreen><verb> ExposureMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask </verb></tscreen> <item>Expose À̺¥Æ®ÀÇ Á߿伺 Expose´Â ¿µ¾îÀÇ ¶æ ±×´ë·Î "¹ÛÀ¸·Î µå·¯³ª´Ù"¶ó´Â ÀǹÌÀÔ´Ï´Ù. À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ °í·ÁÇØÁà¾ß ÇÒ °Í Áß Çϳª´Â ÇÑ È­¸éÀ» µ¿½Ã¿¡ ¸¹Àº âµéÀÌ °øÀ¯ÇÏ°í ÀÖ´Ù´Â »ç½ÇÀÔ´Ï´Ù. âµéÀÌ À̸®Àú¸® ¼­·Î¸¦ °¡¸®±âµµ ÇÏ°í ´Ù½Ã ³ªÅ¸³ª±âµµ ÇÏ¸ç ¾ÆÀÌÄÜÀ¸·Î µÇ¾ú´Ù°¡ ´Ù½Ã ¿ø»óÅ·Πµ¹¾Æ¿À±âµµ ÇÕ´Ï´Ù. Å©±â°¡ ´Ã±âµµ ÇÏÁö¿ä. ƯÈ÷³ª ´Ù¸¥ â¿¡ °¡·È´Ù°¡ ´Ù½Ã ³ªÅ¸³ª°Ô µÉ ¶§´Â ³²µé¿¡ ÀÇÇؼ­ °¡·ÁÁ³´ø ºÎºÐµéÀ» ´Ù½Ã ±×·ÁÁà¾ß ÇÕ´Ï´Ù. ±×·±µ¥ ¿©·¯ºÐÀÌ Xt/¸ðƼÇÁ °°Àº ¼öÁØ¿¡¼­´Â ´À³¢Áö ¸ø ÇϼÌÀ»Áö ¸ð¸£°ÚÁö¸¸ Xlib Àº Àú¼öÁØÀ̹ǷΠ¿©·¯ºÐ ½º½º·Î°¡ ³²µé¿¡ ÀÇÇØ °¡·ÁÁ³´Ù°¡ ´Ù½Ã ³ªÅ¸³¯ ¶§ Áö¿öÁ³´ø ºÎºÐÀ» º¹±¸ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ½ÇÁ¦·Î ¸ðƼÇÁ °°Àº °ÍµéÀº ÀÌ¹Ì Xlib ÀÇ ÇÔ¼ö¸¦ ½á¼­ ¿©·¯ºÐ ¸ô·¡ ´Ù½Ã ±×·ÁÁÖ´Â ÀÛ¾÷À» ´ë½Å ÇØÁÖ°í ÀÖÀ» »ÓÀÔ´Ï´Ù. Expose À̺¥Æ®´Â ¿©·¯ºÐÀÇ Ã¢ÀÌ ¸Ç óÀ½ XMapWindow ÇÔ¼ö¿¡ ÀÇÇؼ­ »Ð! ÇÏ°í ³ªÅ¸³¯ ¶§ óÀ½À¸·Î ¹ß»ýÇÕ´Ï´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀº âÀÌ ¸Ç óÀ½ »Ð! ÇÏ°í ³ªÅ¸³¯ ¶§ ÀÚ±â ÀÚ½ÅÀ» ¿©·¯ ¸ð·Î Ä¡ÀåÇÕ´Ï´Ù. ¶ÇÇÑ ³²µé¿¡ ÀÇÇØ °¡·ÁÁ³´Ù°¡ ´Ù½Ã »Ð! ÇÏ°í ¿©·¯ºÐ¿¡°Ô ³ªÅ¸³¾ ¶§´Â ÀûÀýÇÏ°Ô Áö¿öÁø ºÎºÐÀ» º¹±¸ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿©±â¼­´Â ¾ÆÁÖ °£´ÜÇÑ ¹æ½ÄÀ¸·Î ó¸®Çß½À´Ï´Ù. Expose À̺¥Æ®°¡ ¹ß»ýÇÒ ¶§¸¶´Ù ´Ù½Ã O K ¶ó´Â ±Û¾¾¸¦ ½áÁÖ´Â °ÍÀÌÁö¿ä. <item>while ( True ) ¹®ÀåÀ» ÅëÇؼ­ À̺¥Æ® ó¸® ¹«ÇÑ ·çÇÁ¸¦ µ½´Ï´Ù. XNextEvent ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¿©·¯ºÐÀÌ ¿øÇÏ´Â À̺¥Æ® Áß Çϳª°¡ »ý±æ ¶§±îÁö ±â´Ù¸³´Ï´Ù. À̺¥Æ®°¡ ¾È»ý±â¸é °¡¸¸È÷ ÀÖ½À´Ï´Ù. ±×·¯´Ù°¡ »ý±â¸é ÆĶó¹ÌÅÍ·Î ÁÖ¾îÁø XEvent °ø¿ëü¿¡´Ù°¡ À̺¥Æ® Á¤º¸¸¦ Àû¾î¼­ º¸³»ÁÝ´Ï´Ù. </enum> <tscreen><verb> switch ( xe.type ) </verb></tscreen> ÀÚ, À̺¥Æ®¶ó´Â °ÍÀº Á¾·ù°¡ ¸¹±â ¶§¹®¿¡ ±×°ÍÀÌ ¸¶¿ì½º¿Í °ü·ÃµÈ °ÍÀÎÁö Å°º¸µå¿Í °ü·ÃµÈ °ÍÀÎÁö¸¦ ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ±×°Í¿¡ ¸Â°Ô ÀûÀýÇÏ°Ô Ã³¸®ÇØ¾ß Çϴϱî¿ä. <tscreen><verb> case Expose: Expose À̺¥Æ® ¹ß»ý½Ã¿¡´Â ÀûÀýÇÏ°Ô ÀÚ±â ÀÚ½ÅÀ» ±×·ÁÁְųª º¹±¸ ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. XDrawString ÇÔ¼ö·Î "O K"¶ó°í ½áÁÝ´Ï´Ù. ¸ÕÀú XSetForeground ÇÔ¼ö·Î Àü°æ»öÀ» °ËÁ¤À¸·Î ÇØÁÝ´Ï´Ù. case ButtonPress: ¹öÆ°ÀÌ ´­¸®¸é( ¾î¶² ¹öÆ°ÀÌµç »ó°üÇÏÁö ¾Ê°í ) exit(1) Á¾·áÇÕ´Ï´Ù. case EnterNotify: ¸¶¿ì½º°¡ â ¾ÈÀ¸·Î µé¾î°¡¸é XDrawRectangle ÇÔ¼ö·Î »ç°¢ÇüÀ» Å× µÎ¸®¿¡ ±×·ÁÁÝ´Ï´Ù. ¿©·¯ºÐÀÇ ¸¶¿ì½º°¡ µé¾î¿Ô´Ù´Â °ÍÀ» È®½ÇÇÏ°Ô º¸¿©ÁÖ±â À§Çؼ­ÀÔ´Ï´Ù. case LeaveNotify: ¸¶¿ì½º°¡ ³ª°¡¸é ³ª°¬´Ù´Â °ÍÀ» º¸¿©ÁÖ±â À§ÇØ Àü°æ»öÀ» ÇϾá»öÀ¸ ·Î Áï, ¹è°æ»ö°ú °°°Ô Çؼ­ »ç°¢ÇüÀ» ±×·ÁÁÝ´Ï´Ù. ±×·¯¸é Áö¿öÁö´Â È¿°ú°¡ ³ª°ÚÁö¿ä? default: ¾Ë ¼ö ¾ø´Â À̺¥Æ®´Â ¹«½ÃÇÕ´Ï´Ù. </verb></tscreen> </descrip> À§¿¡¼­ ¿¹·Î µç °ÍÀº ¿©·¯ºÐÀÌ ¾ÆÁÖ ½±°Ô Á¢ÇÒ ¼ö ÀÖ´Â ¹öÆ° Çϳª¸¦ ¾ÆÁÖ Àú¼öÁØ¿¡¼­ ÇØ°áÇÑ °ÍÀÔ´Ï´Ù. º¸Åë ¹öÆ°À» Ŭ¸¯Çϱâ À§ÇÏ¿© ¸¶¿ì½º¸¦ °¡Á®´Ù ´ë¸é ¹öÆ° ÀüüÀÇ »ö»óÀÌ º¯ÇÑ´ÙµçÁö ÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ¹Ù·Î À̺¥Æ®¿¡ ¸Â°Ô Àڱ⠸ð¾çÀ» ±×¸®¸é µÇ´Â °ÍÀÔ´Ï´Ù. ¿ø¸®´Â ¾ÆÁÖ °£´ÜÇÏÁö¿ä? ¹öÆ° Çϳª¸¦ ¸¸µé¾î º¸¾Ò½À´Ï´Ù. ±âÁ¸ÀÇ ¶óÀ̺귯¸®¸¸ ¾²´Â °ÍÀÌ ¾Æ´Ï¶ó ¿©·¯ºÐÀÌ Àú¼öÁØÀ¸·Î ¾ÆÁÖ Àç¹ÌÀÖ´Â ÇൿÀ» ÇÏ´Â ¹öÆ°À» ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù. ´Ù¸¥ »ç¶÷Àº Èä³»³¾ ¼ö ¾ø´Â Àç¹ÌÀÖ´Â ÀÏÀ» ÇÏ´Â °Í, ÀÌ°ÍÀº Àú¼öÁØ ÇÔ¼ö Xlib À» ¹è¿ìÁö ¾Ê°í ´Â ÀÌ·ê ¼ö ¾ø´Â ÀÏÀÔ´Ï´Ù. <sect>X ÇÁ·Î±×·¡¹Ö, X ·ÎÄÉÀÏ ÀÌ¿ë Ãâ·Â <p> ¾ÆÁ÷ ÀûÀº ¼öÀ̱â´Â ÇÏÁö¸¸ ¸®´ª½ºÀÇ ÀüÆÄ¿Í ´õºÒ¾î X À©µµ¿ì¿¡ ´ëÇÑ °ü½Éµµ Á¡Á¡ ´õ ÇØ°¡´Â µí ÇÑ ´À³¦À» ¹Þ½À´Ï´Ù. ¿ì¸®°¡ Çѱ¹ÀÎÀÎ ÀÌ»ó ÇÇÇÒ ¼ö ¾ø´Â ¹®Á¦´Â ¿ì¸®ÀÇ ±ÛÀÇ ¿Ã¹Ù¸¥ Ç¥ÇöÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. Àڱ⠳ª¶ó ¸»À» »ç¶ûÇÏÁö ¾Ê°Å³ª °ü½ÉÀ» °®°í ¹ßÀü½ÃÅ°Áö ¾Ê´Â ¹ÎÁ·Àº ÀÌ ¼¼»ó¿¡¼­ »ç¶óÁö´Â °Í ¾Æ´Ï°Ú½À´Ï±î? ±×¸®°í Àڱ⠸»À» °®Áö ¾Ê´Â ¹ÎÁ·ÀÌ µµ´ëü ¾î¶² ÀںνÉÀ» °¡Áú ¼ö ÀÖÀ»±î¿ä? ÄÄÇ»ÅÍ Á¤º¸ ¹®È­ÀÇ ½Ã´ë¿¡ »ì°í ÀÖ´Â ¿ì¸®¿¡°Ô ÇѱÛÀº ¼±Á¶µéÀÇ ³ë·ÂÀ» À̾î¹Þ¾Æ ´õ¿í ´õ ¹ßÀü½ÃÅ°°í Çö´ëÈ­½ÃÄÑ¾ß ÇÒ »ì¾ÆÀÖ´Â ¾ð¾î¶ó´Â »ý°¢ÀÌ µì´Ï´Ù. ÃÖ¼ÒÇÑ ¹ßÀüÀº ¾È½ÃÅ°´õ¶óµµ ¾ÖÂøÀ» °®°í »ç¿ëÀº ÇØ¾ß ÇÒ °Í ¾Æ´Ï°Ú½À´Ï±î? À©µµ±× »ç¿ëÀÚ ½ÃÀý ¹«ÁöÇÏ°Ôµµ Ç×»ó ÀÌ·± ¸»À» Àڽſ¡°Ô Çϸ鼭 ÄÄÇ»Å͸¦ »ç¿ëÇØ ¿Ô´ø °Í °°½À´Ï´Ù. "ÇÑ±Û À©µµ¿ì´Â ¾ÈµÅ... ¿ª½Ã... ÇѱÛÈ­¸¸ ÇÏ¸é ¿µ ¾Æ´Ï¾ß... ÇÑ±Û ¾ÈµÅ..." ¿ô±â´Â »ç½ÇÀº ¾ûÅ͸®·Î ÇѱÛÈ­¸¦ ½ÃŲ M$ ÃøÀ̳ª ¹Ì±¹ °¡¼­ ³ª¶óÀÇ ±â¼úÀ» ÆȾƸ԰í ÀÖ´Â Çѱ¹ÀÇ ÄÄÇ»ÅÍ ±â¼úÀڵ鿡°Ô ºñ³­À» º¸³»´Â °ÍÀÌ ¾Æ´Ï¶ó "ÇѱÛ" ÀÚü¸¦ µé¸ÔÀÌ°í ÀÖ¾ú´Ù´Â °ÍÀÔ´Ï´Ù. »ç½Ç 1 ¹ÙÀÌÆ® ¹®Àڱǿ¡¼­ ź»ýÇÑ ÄÄÇ»ÅͶó´Â ȯ°æ ¼Ó¿¡¼­ Èûµç ½Î¿òÀ» ÇÏ°í ÀÖ´Â °ÍÀÌ »ç½ÇÀÔ´Ï´Ù. Èûµç ÀÏÀÌÁö¸¸ ´©±¸³ª ÇÒ ¼ö ÀÖ´Â ÀÏÀ̶ó¸é ¹ú½á ´Ù¸¥ »ç¶÷µéÀÌ ´Ù ÇسõÀ» °Ì´Ï´Ù. Èûµç ÀÏÀ» Àß Ç϶ó°í ºñ½Ñ µ· µé¿©°¡¸ç ±ÍÁßÇÑ ½Ã°£À» ½ñ¾ÆºÎ¾î°¡¸ç ÇÁ·Î±×·¡¸Ó°¡ µÇ·Á´Â °Í ¾Æ´Ò±î¿ä? 1 ¹ÙÀÌÆ® ¹®ÀÚº¸´Ù´Â ¾à°£ ¾î·Á¿î °úÁ¤À» °ÅÄ¡Áö¸¸ ±×·¸°Ô ¾î·Á¿î °Íµµ ¾Æ´Õ´Ï´Ù. ¿¹Àü¿¡ µµ±× ½ÃÀý¿¡´Â ÇÑ±Û ÀÔÃâ·Â ¸ðµÎ¸¦ ¸Å¹ø ¸¸µé¾î¼­ »ç¿ëÇß´ø ±â¾ïµµ ³³´Ï´Ù. ¾ÆÁÖ °£´ÜÈ÷ ÇÑ±Û ±â´É ÀÚü¸¦ ³»ÀåÇعö¸®´Ï ¼Ó ÆíÇÒ ¼ö ÀÖ¾úÁö¸¸ Áö±ÝÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ß »óȲ¿¡´Â ÀüÇô ¸ÂÁö ¾Ê´Â ±¸´Ú´Ù¸® ¹æ½ÄÀ¸·Î º¯È­ÇÏ°í ¸»¾Ò½À´Ï´Ù. X À©µµ¿ì°¡ Á¦°øÇÏ°í ÀÖ´Â ¸¹Àº ±â´ÉµéÀ» ÃæºÐÈ÷ È°¿ëÇϸ鼭 ÇѱÛÀ» ½±°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ÀÏ´ÜÀº Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ´Ù½Ã ÇÑ ¹ø ¼Ò°³Çص帳´Ï´Ù. <sect1>X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏ ±â´ÉÀ» »ç¿ëÇÑ ÇÑ±Û Ãâ·Â <p> <sect2>X À©µµ¿ì¿¡¼­ÀÇ ÇÑ±Û Ãâ·Â ¹æ½Ä¿¡ ´ëÇÏ¿© <p> <itemize> <item>Àú¼öÁØÀÇ ¹æ¹ý : XDrawString16 ÇÔ¼ö ÀÌ¿ë <item>°í¼öÁØÀÇ ¹æ¹ý : XmbDrawString, XwcDrawString ÇÔ¼ö ÀÌ¿ë </itemize> ¿ì¼± Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑÅÒ, ±×¸®°í ÇѱÛÈ­µÈ À©µµ¿ì °ü¸®Àڵ鿡¼­ »ç¿ëÇÏ°í ÀÖ´Â ¹æ½ÄÀ¸·Î¼­ °í¼öÁØÀÇ ¹æ¹ý°ú ±¸º°µÇ´Â ±âÁØÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ Á¦°øÇÏ°í ÀÖ´Â ±¹Á¦È­(I18N, Internationalization)¿Í Áö¿ªÈ­(L10N, Localization) ±â¼úÀ» »ç¿ëÇϴ°¡ ¿©ºÎ¿¡ ´Þ·ÁÀÖ½À´Ï´Ù. XDrawString16 ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇØ µå¸° ÀûÀÌ ÀÖ´Â °ÍÀ¸·Î ¾Ð´Ï´Ù. ±× ±ÛÀ» ÀÐÁö ¾ÊÀ¸¼Ì´Ù¸é ±× ±ÛÀ» ¸ÕÀú Àо½Ã±â ¹Ù¶ø´Ï´Ù. Àú¼öÁØÀÇ ¹æ¹ýÀº ÇÑ±Û ¹®ÀÚ¿­( char Çü )À» Çѱ۰ú ¿µ¹®À¸·Î ³ª´©¾î¼­( ¹ÙÀÌÆ®ÀÇ ÃÖ»óÀ§ ºñÆ®¸¦ º¸°í ÆÇ´Ü ) ÇÑ±Û ºÎºÐÀº XChar2b Çü ¹è¿­¿¡ ³Ö¾î¼­ 2 ¹ÙÀÌÆ®¿ë ÇÔ¼öÀÎ XDrawString16 ÇÔ¼ö·Î Ãâ·ÂÇÏ°í ¿µ¹® ºÎºÐÀº µû·Î 1 ¹ÙÀÌÆ® Àü¿ë ÇÔ¼öÀÎ XDrawString ÇÔ¼ö·Î Ãâ·ÂÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù. Àú¼öÁØÀ̹ǷΠ»ó´çÈ÷ ¹ø°Å·Ó´Ù°í ÇÏÁö ¾ÊÀ» ¼ö ¾ø½À´Ï´Ù. Çѱ۰ú ¿µ¹®À» ¼¯¾î¼­ ¾²´Â °æ¿ì¿¡´Â Á¤¸» ½Å°æ¾µ ÀÏÀÌ ¸¹½À´Ï´Ù. ¹®ÀÚ¿­À» Àо ÀÏÀÏÀÌ ÇѱÛÀÌ Ãâ·ÂµÇ´Â È­¸é ÆøÀ» °è»êÇÏ°í ±× ´ÙÀ½¿¡ ¿µ¹®À» Ãâ·ÂÇÏ°í ±× ÆøÀ» °è»êÇÑ ÈÄ ´Ù½Ã ÇѱÛÀ» Ãâ·ÂÇÏ°í... °í¼öÁØÀÇ ¹æ¹ýÀº ¹Ù·Î X À©µµ¿ì ½Ã½ºÅÛÀÌ R5 ºÎÅÍ Áö¿øÇϱ⠽ÃÀÛÇÑ ±¹Á¦È­/Áö¿ªÈ­ ±â¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. °°Àº 1 ¹ÙÀÌÆ® ¹®ÀÚ±ÇÀ̶ó ÇÒ Áö¶óµµ ¿µ¾î¿¡ ¸ÂÃçÁø ASCII ¹®Àڷδ ºÒ°¡´ÉÇÑ À¯·´¾ð¾î( ÇÁ¶û½º¾î, µ¶ÀÏ¾î µî... )¿Í ¾ÖÃʺÎÅÍ ASCII·Î´Â Åõµ ¾ø´Â 2 ¹ÙÀÌÆ® ÀÌ»óÀÇ ¹®ÀÚ±ÇÀÎ Çѱ¹¾î, Áß±¹¾î, ÀϺ»¾î µî¿¡ ´ëÇÑ ½Ã½ºÅÛ Â÷¿øÀÇ Áö¿øÀÌ ³íÀǵǸ鼭 ÇÁ·Î±×·¡¸ÓµéÀÌ ½±°Ô ±¹Á¦ÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé ¼öÀÖµµ·Ï °í¹ÎÇÑ °á°úÀÔ´Ï´Ù. ±¹Á¦È­¶õ ÇÁ·Î±×·¥ÀÌ ¾î¶² ¾ð¾î ȯ°æ¿¡¼­µç »ç¿ëµÉ ¼ö ÀÖµµ·Ï À¯¿¬ÇÏ°Ô ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀ» ¸»ÇÏ¸ç ±×·¸°Ô ±¹Á¦È­µÈ ÇÁ·Î±×·¥À» ƯÁ¤ ¾ð¾î³ª ¹®È­¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀûÀÀ½ÃÅ°´Â °ÍÀ» Áö¿ªÈ­¶ó°í ºÎ¸¨´Ï´Ù. ÀÌ¹Ì ¼Ö¶ó¸®½º³ª HP-UX µî¿¡¼­ »ó¿ë X À©µµ¿ì¸¦ º¸½Å ºÐµéÀº ÀÌ°ÍÀÌ ¹«¾ùÀ» ¶æÇÏ´ÂÁö ¾Æ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. À©µµ±×95 °°Àº °ÍÀ» ÇÁ¶û½ºÆÇ, µ¶ÀϾîÆÇ, Çѱ¹¾îÆÇ, Áß±¹¾îÆÇ, ÀϺ»¾îÆÇ ÀÌ·¸°Ô ´ßÁúÀ» ÇØ°¡¸é¼­ µû·Îµû·Î ¸¸µå´Â °Í°ú´Â Â÷¿øÀÌ ´Ù¸¨´Ï´Ù. °£´ÜÇÑ ¼³Á¤ Çϳª·Î °°Àº X À©µµ¿ì ½Ã½ºÅÛÀÌ ¿©·¯ °³ÀÇ ¾ð¾î·Î µ¿ÀÛÇϵµ·Ï ¼³°èµÇ¾î ÀÖ½À´Ï´Ù. ·Î±×ÀÎ È­¸éºÎÅÍ°¡ ¾Æ¿¹ ´Þ¶óÁöÁö¿ä. <sect2>X À©µµ¿ì ½Ã½ºÅÛÀÌ Áö¿øÇÏ´Â I18N, L10N ÀÌ¿ëÇϱâ <p> ÀÌÁ¦ ¾Ë¾Æº¼ ³»¿ëÀº ¹Ù·Î °í¼öÁØÀÇ ÇÑ±Û Ãâ·Â¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ¾î¶² ÀýÂ÷¸¦ °ÅÃÄ¾ß ÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇսôÙ. <descrip> <tag>LOCALE µ¥ÀÌÅͺ£À̽º Áö¿øÀ» ´©°¡ Çϴ°¡?</tag> À¯´Ð½º ½Ã½ºÅÛÀÇ ·ÎÄÉÀÏ Áö¿øÀº ÀÏ´Ü X À©µµ¿ì ½Ã½ºÅÛÀÌ ¾Æ´Ñ ANSI/POSIX ±Ô°Ý Â÷¿øÀÇ Áö¿øÀÌ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ »ó¿ë À¯´Ð½º³ª ¾Æ´Â ¹Ù ¾øÁö¸¸ FreeBSD ¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼­ Áö¿øÇÏ°í ÀÖ´Â °ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. Áö±Ý ÇöÀç GNU NLS ÆÀ¿¡¼­ ¿­½ÉÈ÷ ÇÁ·Î±×·¥ ¸Þ¼¼Áö Áö¿ªÈ­¸¦ ÇÏ°í °è½Å ºÐµéÀÇ °á°ú°¡ Á¶¸¸°£ ¿ì¸® °ç¿¡ ¿À°Ô µÇ°ÚÁö¿ä? ±× ºÐµé¿¡°Ô °Ý·Á¸¦ º¸³À´Ï´Ù. ¸®´ª½º´Â ¾ÆÁ÷ C ¶óÀ̺귯¸®¿¡ ´ëÇؼ­ Á¦´ë·Î ¸ð¸£±â ¶§¹®¿¡ È®½ÇÇÏ°Ô ¸»¾¸µå¸± ¼ö ¾ø½À´Ï´Ù. C ¶óÀ̺귯¸® 5.4.X ¿¡¼­ ·ÎÄÉÀÏ¿¡ ´ëÇÑ Áö¿øÀÌ ÀÖ´Ù°í´Â ÇÏ´Â °Í °°Àºµ¥ Á¦´ë·Î È®ÀÎÀÌ µÇÁú ¾Ê´Âµ¥´Ù°¡ ÀúÀÇ °ü½É ¿µ¿ªÀ» ·Î¿ì·¹º§ ÇÁ·Î±×·¡¹ÖÀÌ ¾Æ´Ï¶ó¼­... µÎ¹ø°·Î´Â ¿î¿µÃ¼Á¦ ÀÚüÀÇ Áö¿ø°ú´Â ¿ÏÀü º°µµ·Î X À©µµ¿ì ÀÚüÀûÀ¸·Î ÇØ°áÇØÁÖ´Â ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿À´Ã X À©µµ¿ì ÀÚü°¡ Áö¿øÇÏ´Â ·ÎÄÉÀÏ Áö¿øÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ °ÍÀÔ´Ï´Ù. ÀüÀÚ³ª ÈÄÀÚ ¸ðµÎ Áß¿äÇѵ¥ ÀÏ´Ü X À©µµ¿ì ÀÚüÀûÀ¸·Îµµ Áö¿øÀ» ÇØÁشٴ °ÍÀº ¾î¶² Ç÷§Æ÷¿ÈÀΰ¡¿¡ »ó°ü¾øÀÌ °°Àº X À©µµ¿ì¸¸ µ¹¾Æ°£´Ù¸é ¾îµð¼­µç ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î µ¿ÀÛÇϸ®¶õ º¸ÀåÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¸®´ª½º C ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¿¬±¸´Â ½Ã°£À» ³»¼­ Á» ´õ ÇغÁ¾ß ÇÒ °Í °°½À´Ï´Ù. ¸¹Àº »ç¶÷µéÀÌ ¶Ù¾îµé¾îÁֱ⸦ ¹Ù¶ö »ÓÀÔ´Ï´Ù. ¸®´ª½º´Â °³¹æ üÁ¦À̹ǷΠÀÚ¿øÀÚ°¡ ¸¹Àº °÷ÀÇ ºÐÀ§±â¸¦ µû¸£Áö ¾Ê°Ú¾î¿ä? ¾Æ½Ã¾ÆÀÇ ÀþÀºÀ̵éÀÌ ¸¹ÀÌ ¶Ù¾îµé ¼ö·Ï ¸®´ª½º ÀÚü´Â ±¹Á¦ÀûÀÎ ¿î¿µÃ¼Á¦·Î ´Ù½Ã ž ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù. <tag>¿©·¯ºÐÀÇ X À©µµ¿ì ½Ã½ºÅÛÀ» Á¡°ËÇÕ´Ï´Ù.</tag> ANSI ±Ô°Ý¿¡¼­ Á¤ÀÇÇÑ ¹Ù¿Í °°½À´Ï´Ù. C ¼ÐÀ» ¾²´Â ºÐµéÀº setenv LANG ko ¿Í °°Àº Ç¥ÇöÀ» ½áº¸½Å ÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. ÀÌ ±ÛÀº ANSI ±Ô°ÝÀÇ setlocale ÇÔ¼ö¿¡ °ü·ÃµÈ ¸ðµç »çÇ×À» ÀÚ¼¼È÷ ¼³¸íÇϱâ À§ÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î µû·Î °øºÎÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ¾ÆÁÖ Áß¿äÇÑ À̽´ ÁßÀÇ ÇϳªÀÎ °ÍÀº ºÐ¸íÇÑ °Í °°½À´Ï´Ù. ÀÏ´ÜÀº /usr/X11R6/lib/X11/locale µð·ºÅ丮¿Í ³»¿ëÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇغ¸½Ê½Ã¿ä. ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ X À©µµ¿ì ½Ã¸®Á Á¦´ë·Î ¼³Ä¡Çß´Ù¸é ÀÖ¾î¾ß ÇÒ ³»¿ëÀÔ´Ï´Ù. <tscreen><verb> 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/ </verb></tscreen> ko ¶ó´Â µð·ºÅ丮°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±× ¾È¿¡´Â XLC_LOCALE À̶ó´Â È­ÀÏÀÌ µé¾îÀÖ½À´Ï´Ù. ±× È­ÀÏ ¾È¿¡ Çѱ¹¾îÀÇ Ãâ·Â¿¡ ´ëÇÑ °ü·Ã Á¤º¸°¡ µé¾îÀÖ½À´Ï´Ù. º¸ÅëÀº LANG ¼¼ÆÃÀÌ ¾ø´Â °æ¿ì ±âº»ÀûÀ¸·Î C µð·ºÅ丮¿¡ ÀÖ´Â ³»¿ëÀ» »ç¿ëÇÕ´Ï´Ù. À§ È­ÀϵéÀÌ Á¦´ë·Î ÀÖ´Â °ÍÀ» È®ÀÎÇÑ ÈÄ¿¡ ²À ´ÙÀ½ ¼¼ÆÃÀ» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. º»¼Ð °è¿­À̶ó¸é... <tscreen><verb> export LANG=ko </verb></tscreen> C ¼Ð °è¿­À̶ó¸é... <tscreen><verb> setenv LANG ko </verb></tscreen> </descrip> ³ªÁß¿¡ °°Àº ÇÁ·Î±×·¥¿¡ ´ëÇؼ­ ±×³É LANG ¼¼ÆÃÀ» Àç¹Ì»ï¾Æ ja ¶ó°í ¹Ù²ãº¸½Ê½Ã¿ä. ±×·¯¸é Àç¹ÌÀÖ´Â ÀÏÀÌ ¹ú¾îÁú °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ³×½ºÄÉÀÌÇÁ¿¡¼­ ¿É¼Ç ¸Þ´º¿¡¼­ ÄÚµù ¿É¼Ç¸¸ ¹Ù²ãÁÖ¸é ÅؽºÆ®ÀÇ ³»¿ëÀÌ Çѱ۷Πº¸¿´´Ù°¡ ÀϺ»¾î·Î º¸¿´´Ù ÇÏ´Â ¿ø¸®¸¦ ½±°Ô ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ¸¸®¶ó º¾´Ï´Ù. <bf>ÀÌÁ¦ºÎÅÍ ÇÁ·Î±×·¡¹ÖÀ» Çغ¾½Ã´Ù.</bf> ÇÁ·Î±×·¡¹ÖÀ̶õ ÀüÇüÀûÀÎ ÆÐÅÏÀÌ ÀÖ°Ô ¸¶·ÃÀÌÁö¿ä. ±×¸®°í È®½ÇÇÑ ÆÐÅÏ( ¹°·Ð ÁÁÀº ÆÐÅÏ :> )À» ÀÍÇôµÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¿¹Á¦¸¦ ¼Õ¼ö ŸÀÌÇÎÇØ º¸½Ã´Â °ÍÀÌ ÁÁÀ» °Ì´Ï´Ù. ÀÏ´Ü ÄÄÆÄÀÏÀ» Çغ¸°í Á¦´ë·Î µÈ´Ù´Â °ÍÀ» È®ÀÎÇϽñ⠹ٶø´Ï´Ù. <tscreen><verb> 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-*-*-*-*-*-*-*", &ero;missing_charsets, &ero;num_missing_charsets, &ero;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, &ero;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, &ero;dummy, &ero;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); } </verb></tscreen> ÀÚ, ÄÄÆÄÀÏÀ» Çغ¸µµ·Ï ÇսôÙ. ¾à°£ÀÇ ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº ²À ¸®´ª½º¿¡¼­¸¸ ÄÄÆÄÀÏÇ϶õ ¹ýÀº ¾ø½À´Ï´Ù. ( È®ÀÎÀº ¾ÈÇßÁö¸¸... ) ½Ã½ºÅÛ ¼öÁØ¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´Â °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÕ´Ï´Ù. <tscreen><verb> gcc -o test_locale test.locale.c -lX11 -L/usr/X11/lib </verb></tscreen> ¸®´ª½º ½Ã½ºÅÛÀÎ °æ¿ì¿¡´Â X À©µµ¿ì ÀÚüÀÇ ·ÎÄÉÀÏÀ» »ç¿ëÇÒ °ÍÀ̹ǷΠ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¾î¾ß¸¸ ÇÕ´Ï´Ù. <tscreen><verb> gcc -o test_locale test.locale.c -DX_LOCALE -lX11 -L/usr/X11/lib </verb></tscreen> ¼ø¼­´ë·Î ¼³¸íÀ» Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. <descrip> <tag>½Ã½ºÅÛÀÌ ·ÎÄÉÀÏÀ» Áö¿øÇϴ°¡?</tag> setlocale ÇÔ¼ö¸¦ ½á¼­ ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ¶Ç´Â X À©µµ¿ì ½Ã½ºÅÛ Â÷¿ø¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏ´ÂÁö ¿©ºÎ¿¡ ´ëÇؼ­ ¾Ë¾Æº¾´Ï´Ù. ½ÇÇàµÇ´Â Ç÷§Æ÷¿È¿¡¼­ ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ´Ù¸¥ Á¶Ä¡¸¦ ÃëÇϵçÁö ¾Æ´Ï¸é ½ÇÇàÀ» ÁßÁöÇØ¾ß ÇÒ °ÍÀÔ´Ï´Ù. Á¦´ë·Î µÈ °á°ú°¡ ³ª¿ÀÁú ¾ÊÀ»Å״ϱî¿ä. <tscreen><verb> setlocale (LC_ALL,"") == NULL ÀÌ ¹®ÀåÀ¸·Î È®ÀÎÀ» ÇÏ°í ÀÖ½À´Ï´Ù. </verb></tscreen> <tag>X À©µµ¿ì Â÷¿ø¿¡¼­ÀÇ ·ÎÄÉÀÏ Áö¿ø ¿©ºÎ È®ÀÎ</tag> XSupportsLocale ÇÔ¼ö¿Í XSetLocaleModifiers ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·ÎÄÉÀÏ Áö¿ø¿©ºÎ¸¦ ¹°¾îº¾´Ï´Ù. ÈÄÀÚÀÇ ÇÔ¼ö´Â "X ÀÔ·Â ¼­¹ö"¿¡ °ü°èµÈ °ÍÀ̹ǷΠÁö±ÝÀ¸·Î¼­´Â ¼³¸íµå¸± ¼ö°¡ ¾ø°í »ó´çÈ÷ Àü¹®ÀûÀÎ ¾ê±â·Î ºüÁú °¡´É¼ºÀÌ ¸¹½À´Ï´Ù. Á¶¸¸°£¿¡ "X ÀÔ·Â ¼­¹ö" Á¦ÀÛ¿¡ ´ëÇؼ­ µû·Î ¼Ò°³¸¦ Çص帮±â·Î ÇÏ°Ú½À´Ï´Ù. ±Ã±ÝÁõÀ» Âü±â ¾î·Á¿î ºÐÀº ±×³É ¿À·¼¸® ÃâÆÇ»çÀÇ X À©µµ¿ì ½Ã¸®Áî Volume One Xlib ÇÁ·Î±×·¡¹Ö ¸Å´º¾óÀ» º¸½Ã¸é µË´Ï´Ù. <tag>ÆùÆ®¼Â(FontSet)À̶ó´Â °³³ä....</tag> ÆùÆ®¼ÂÀ̶ó´Â °³³äÀº ±ÛÀÚ ±×´ë·Î ÆùÆ®ÀÇ ÇÑ ¼¼Æ®¸¦ ¸»ÇÕ´Ï´Ù. ¾î¶² ƯÁ¤ ¾ð¾îÀÇ Äڵ忡 ¸Â´Â( ¿¹¸¦ µé¾î ASCII, ISO8859-1, EUC-KR, ISO-2022-KR µîµî ) ¹®ÀÚ ÆùÆ®µéÀÌ ÀÌ¹Ì ¸¶·ÃµÇ¾î ÀÖ¾î¾ß Ãâ·ÂÀ» ÇÒ ¼ö ÀÖ°ÚÁö¿ä? Áï ȯ°æ º¯¼ö LANG ÀÌ Áö½ÃÇÏ´Â ÄÚµù ½ºÅ¸ÀÏ¿¡ ¸Â´Â ÆùÆ®µéÀÇ ÇÑ ¼¼Æ®¸¦ ÁöÁ¤ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¸ðƼÇÁ ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å ºÐµéÀ̶ó¸é ÆùÆ®¼ÂÀ̶ó´Â °³³ä¿¡ ´ëÇؼ­ ¾î´À Á¤µµ ¾Æ½Ç °Ì´Ï´Ù. ÀÏ´ÜÀº X À©µµ¿ì ·ÎÄÉÀÏÀ» ÀÌ¿ëÇÏ´Â ¹æ½ÄÀº ÆùÆ®¼ÂÀ» »ç¿ëÇÑ´Ù´Â »ç½ÇÀ» Á¤È®È÷ ¾Æ¼Å¾ß ÇÕ´Ï´Ù. »ý°¢º¸´Ù »ó´çÈ÷ °£ÆíÇÏ°Ô ¸¸µì´Ï´Ù. XCreateFontSet ÇÔ¼ö¸¦ ÀÌ¿ëÇÏÁö¿ä. µÎ¹ø° Àμö·Î ±×³É -*-*-*-*-*-*-16-*-*-*-*-*-*-* À̶ó°í XLFD ¹æ½ÄÀÇ ÆùÆ®¸íÀ» ÁöÁ¤ÇØÁÖ¾úÀ¸¹Ç·Î 16 Æ÷ÀÎÆ® ÆùÆ®µéÀ» ã¾Æ³»¼­ ÆùÆ®¼Â¿¡ µî·ÏÇÏ°Ô µË´Ï´Ù. ¸¸¾à 16 Æ÷ÀÎÆ® ÆùÆ®°¡ ¾ø´Ù¸é °¡Àå °¡±î¿î ÆùÆ®¸¦ ã¾Æ¼­ X À©µµ¿ì ÀÚü°¡ ½ºÄÉÀϸµÀ» ÇØÁÝ´Ï´Ù. ÀÌ ¶§°¡ X À©µµ¿ìÀÇ °¡Àå Ãë¾àÇÑ ºÎºÐÀε¥... 2 ¹ÙÀÌÆ®±ÇÀÇ ¾öû³­ ¾çÀÇ ÆùÆ®¸¦ ½ºÄÉÀϸµÇÏ°Ô µÉ ¶§´Â ¸¶Ä¡ X ¼­¹ö°¡ ¸ØÃç¹ö¸®´Â µí ÇÑ Çö»óÀÌ ÀϾ´Ï´Ù. ÆùÆ®¸¦ ¸ðµÎ º¯È¯ÇÏ´À¶ó ¾öû³­ ½Ã°£À» ¼ÒºñÇÏ°í Àֱ⠶§¹®ÀÌÁö¿ä. À§ ¼ýÀÚ¸¦ 15³ª ´Ù¸¥ ¼ýÀÚ·Î ¹Ù²Ù¾î¼­ ÇÑ ¹ø Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ±× Â÷ÀÌÀ» ´À³¢½Ç ¼öµµ ÀÖÀ» °Ì´Ï´Ù. <tag>¹®ÀÚ¿­ÀÇ Ãâ·ÂÀº °£´ÜÈ÷ XmbDrawString ÇÔ¼ö ÀÌ¿ë</tag> À§¿¡¼­´Â DrawCenteredMbString ¶ó´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö ³»¿¡¼­ ¸ÖƼ ¹ÙÀÌÆ® ÄÚµù¿¡ »ç¿ëÇÏ´Â Ãâ·Â ÇÔ¼ö XmbDrawString ¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. À§¿¡¼­ º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¿¾³¯¿¡ Àú¼öÁØ Ãâ·ÂÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇѱÛÀ» Çѱ۴ë·Î ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î ´ßÁúÀ» ÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. -_- ÇÑ±Û ÄÚµùµÈ 2 ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ±×³É ¾²¸é µË´Ï´Ù. ´ÜÁö À§¿¡¼­´Â ¹®ÀÚ Ãâ·Â À§Ä¡¸¦ Á¶Á¤Çϱâ À§ÇÏ¿© XmbTextExtents ÇÔ¼ö¿Í °°Àº °ÍÀ» »ç¿ëÇÏ¿´½À´Ï´Ù. </descrip> <sect>¸¶°¨Çϸ鼭 <p> ÀÌÁ¦±îÁö Ãâ·ÂÀÇ ¹®Á¦¸¸À» ´Ù·ç¾úÁö¸¸ ÇÁ·ÎÁ§Æ® ÁßÀÎ "X ÀԷ¼­¹ö"ÀÇ Áøô »óȲ¿¡ ¸ÂÃ߾ ÇÑ±Û ÀÔ·ÂÀÇ ¹®Á¦¸¦ ´Ù·ç¾îº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ¾ÏÆ° Ãâ·Â¿¡ ´ëÇÑ ¼³¸íÀÌ ¿©·¯ºÐ¿¡°Ô ¸¹Àº µµ¿òÀÌ µÇ±æ ¹Ù¶ø´Ï´Ù. ÀÏ´ÜÀº Á¶±Ý¸¸ ³ë·ÂÇÏ¸é °ÅÀÇ ¸ðµç ¸Þ¼¼Áö¸¦ ÇѱÛÈ­ ÆÐÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ³²ÀÌ ¾ÈÇØÁÖ¸é ½º½º·Î ³ª¼­´Â °Í, ¸®´ª¼­µéÀÇ ¸ÚÁø ÀÚ¼¼ ¾Æ´Ï°Ú½À´Ï±î? Á¦ÀÏ ¸ÚÁø ¿î¿µÃ¼Á¦·Î ¿ì¸®°¡ °¡²Ù¾î ³ª°©½Ã´Ù. ½Ã°£ÀÌ Á»Ã³·³ ³ªÁú ¾Ê´Â±º¿ä. ¹è¿ï °ÍÀº ¸¹Àºµ¥ ½Ã°£Àº ÃѾ˰°ÀÌ Èê·¯°¡°í ... ½Ã°£À» Á» ´õ È¿À²ÀûÀ¸·Î ½á¼­ ¿©·¯ºÐÀ» ÀÚÁÖ ºÉ ¼ö ÀÖ°Ô µÇ±æ ¹Ù¶ø´Ï´Ù. ±×·³... </article>