Linuxdoc Sgml/X-Window-Programming-KLDP
<!doctype linuxdoc system>
<article>
<title>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>
|
You have an ambitious nature and may make a name for yourself. |











