  X  α׷ ʰ
  ̸, geoman@nownuri.net
  1996 3 19
  ____________________________________________________________

  

  1. ϸ鼭
     1.1  
     1.2 뷫   Ұ

  2. X α׷  : Xlib
     2.1 X  α׷ֿ  ռ
     2.2 X  α׷̶ ?
     2.3 ˾Ƶξ  
     2.4 ,  غ?
        2.4.1 Display?
        2.4.2 XOpenDisplay Լ
        2.4.3 XCloseDisplay Լ
     2.5  â ϳ  ô.
        2.5.1 Window  
        2.5.2 â , ǥ ...
        2.5.3 XCreateSimpleWindow Լ Ͽ...
        2.5.4 XMapWindow()
        2.5.5 XFlush()
        2.5.6 
        2.5.7 
     2.6 â ȿ  â  ô.
        2.6.1  â ڽâ     ִ.
        2.6.2 ڽâ Ѳ Ÿ.
        2.6.3  ڿ .
     2.7   ƴ϶ Į â ô.
        2.7.1 ÷̶?
        2.7.2 ϴ  ϱ  ġ 
        2.7.3 
     2.8   â  
        2.8.1 ̹   â  ٲٱ
        2.8.2 â    ˾Ƴô.
        2.8.3  â geometry ٲپ ô.

  3. ޽İ : ҽ(Resource)
     3.1 ҽ(Resource) ΰ?
     3.2 ҽ Name Class
     3.3 ü ҽ
     3.4 Xlib ҽ Ŵ
     3.5 ø̼ Ʈ ȭ ٷ
     3.6  ҽ ȭ .Xdefaults
     3.7 xterm  ҽ Ͽ
     3.8 Ƽ ҽ  
     3.9  Ÿ

  4. X α׷  : ׷
     4.1 X  ׷ ⺻ 
        4.1.1 ׷ ⺻ 
        4.1.2 켱 GC  .
        4.1.3 GC Ÿ ϱ
        4.1.4     ׷ô.
           4.1.4.1  ׸ Լ
           4.1.4.2  ׸ Լ
           4.1.4.3 簢 ׸ Լ
           4.1.4.4 
     4.2 ׷ 

  5. X α׷  : Ʈ
     5.1 Ʈ ¿ Ͽ ...
     5.2 X  Ʈ ý ˾ƺô.
     5.3 X Logical Font Descriptio : XLFD  Ͽ
     5.4  ؽƮ  

  6. X α׷  : ѱƮ
     6.1 ѱ ¿    ̾߱
        6.1.1 ϴ  ̾߱
        6.1.2 ѱ !  ٸ?
        6.1.3 X 쿡 ѱ  ϴ 
     6.2 ѱ  
        6.2.1   ΰ?
        6.2.2    ִ!
        6.2.3 ѱ۰  ؼ 
        6.2.4 Ʈ  ߿  ˾Ƴ
           6.2.4.1   
           6.2.4.2   

  7. X α׷  : ̺Ʈó
     7.1 ̺Ʈ ó İ  ó  
     7.2   X  óմϴ. 츮 ...
     7.3 Ϲ ڵ ¸   ô.
     7.4  м
     7.5 ̺Ʈ ڷ 
     7.6 â ڱⰡ ϴ ̺Ʈ ϱ

  8. X α׷, X  ̿ 
     8.1 X  ü    ѱ 
        8.1.1 X 쿡 ѱ  Ŀ Ͽ
        8.1.2 X  ý ϴ I18N, L10N ̿ϱ

  9. ϸ鼭

  ______________________________________________________________________

  1.  ϸ鼭

    ⼺ǰ ϴµ  ʰ, ġ
  âϴ  ϴ  Դϴ.  Ŀι 
  ŭ  ϴ ü Ʈ  ְڽϱ?  ̸ŭ
  ü "⺻"  ü  ְڽϱ? ׷ 츮
    麸ٵ ںν մϴ.

  ,   !

   ϸ鼭  غ ̶   
   Ͻ ̶   .  ϸ鼭 ڱ 
  α׷ ¥ Ͻ е  ¥ ¥  
  ϴ ̶   ֽϴ.  ʹ   غ
  մϴ.

  1.1.   

  񿡼 иϰ Ÿ ó,  ٷ ϴ 
  α׷ Ϲݿ   ƴմϴ. װ  ٷ  ִ ѵ
  ϴ.  ¸ а Ͻô е ⺻  
  ׿  شǽô е̼ž  н ̷ ̶
  մϴ.

    ⺻ C α׷ Ͻ  ִ 

    SHELL ũƮ  ƽô 

    н 迭 μ/ȭó/ñ׳   ƽô 

    ? ׷   ̰ Ǿϴ. 켱 
  ȭ ⿩  ִ ⺻ ͵鿡 ؼ Ǹ ұ? ϴ
     غҽϴ. ׷   е鲲
  ȭ  ƴ϶  ȭ  ߱ؾ Ѵٴ ǽ
    Ƽ ⸦  غϴ.

  1.2.  뷫   Ұ

   帮 ǳ  α׷ Ϲݿ Ͽ ٷ
  ʽϴ.   X  ý GUI ڿ ڽ α׷
  ̿ϴµ Ͽ,  X  α׷ "̽"  븸
  ٷ մϴ.

    X  â  Ҹ, 

    X ׷

    X Event óϱ

    Ű/콺  Է

    Ÿ 

  MS   GUI ü α׷ غ е ƽǰ̴ϴ.
   ߿ ִ κ å ̷  ٷ . 
  븸 Ŵٰ ؼ  ǹ X  α׷  
   ̴ϴ.    𸣽Ŵٸ X  α׷
     ϴ.     븸 
  ֽϴ.   ɵ X  α׷ ´ ̹  °
   Ŀ   ϴ. (       )

  2.  X α׷  : Xlib

  X  α׷ֿ Ͻô  ȯմϴ.  ƴ 
     ̶   ִٸ, ׸  ¸
      س X  α׷ µ ܳ
  ϸ鼭 X  α׷ ʰ ұ մϴ. ƴ
   ð   Բ ż  X  α׷ӷ
   ʽÿ. ׸  ݴϴ.

  2.1.  X  α׷ֿ  ռ

     Źմϴ. X  ý MS  95
   ͸ ܸϴ üʹ  ٸ  ǰ ǥ
  ýԴϴ.  в ̷ ϽŴٸ, ٷ X 
  α׷ Ͻʽÿ.

  , 켱 ؾ  ͵ ֽϴ.  ý X α׷
   غ Ǿ ִ ˾ƺ  ?   д е
  ּ X 찡 ۵ϰ  ù(?) е ̰,  
    ġ X α׷   ִ   
   ġϼ̴ Ȯ ñ ٶϴ. /usr/include/X11 Ա׸
  /usr/X11/lib  ȭϵ ִ Դϴ.

   ٰ̻? , ׷ սô.

  2.2.  X  α׷̶ ?

  X  α׷̶ X  'ڿ(Resource)' ̿ϴ
  α׷Դϴ.  X ڿ ǥ â(Window), (Color Map),
  Ʈ(font)  ֽϴ.  ̷ ڿ X  (Server)
  ϴ ༮   ϰ ֽϴ. 츮  ̹ 
  ִ 'Ģ' , ڿ ϰ ִ  Ͽ, 
  츮 ϴ ڿ ش޶ ûϴ Դϴ. ٷ 츮
      , ׸   ̰ 
  츮 ϴ  ޶ ϴ   ǥ ϰ ˴ϴ.

  ̷ α׷ Ŭ̾Ʈ(Client) . /Ŭ̾Ʈ
  ̶ ؼ ׻ α׷ "  Ͽ ϴ 
  Ѵ"  Ͽ  α׷ ¥ ˴ϴ. ̴  ư
    ִ  츮 Ŭ̾Ʈ  Ͽ 񽺸
  ޴´ٴ "Ʈũ "̰ ̷  α׷ ˴ϴ.
  ͳ ô븦  ִ 츮Դ  ߿ ̶  
  ֽϴ. в  Բ X α׷ 踦 ŽϽô 
   ڿ  Ʈũ α׷ Ͻ   ̴ϴ.

  츮   Ģ   ϰ, 񽺸 ް, 
   ϴ    ̶  ׻ ּ!

  2.3.  ˾Ƶξ  

    忡  X  α׷ ϰ  ̴ϴ.
  , ̷ ǵ ˰ ž    α׷ֿ
  ͼ  ִٰ մϴ.

  cd /usr/X11/lib غ. ׸ ls ... lib ڷ ϴ 
  ȭϵ ִ  ȮϽ   ̴ϴ.  ༮ '̺귯'
  츮 ׻ ִ Դϴ. ̵  ƹ ͵  
  ϴ.  ༮ в Ұ 帮 մϴ.

    libX11 : ̸ 巯  ⺻ ̺귯Դϴ. 
     ģ  ģ ̴ Դϴ.  ߿, ׸ 
      X   ִ Xlib Դϴ.

    libXt  : X Ŷ(X Toolkit Intrinsic)̶ θϴ. Xlib 
     Ǿ ִ   ƾԴϴ. ߿ ̶ ϴ X
     ̽  ߿  ٷ   մϴ. ̰
      Ͻ  ִ  ǽø X α׷  ų
     ٸ.

    libXaw : Athena Widget Դϴ. ձڸ  aw Դϴ.  
       Ƽ(Motif) Ǿ   ʴ  ϴ.
      X  MIT  μ Free ̹Ƿ,  а
     ϳ  ģ   α׷ ̽ 
     մϴ. Ƽ    å    װ
     Ͻø ˴ϴ.  Ǿ ˾Ƶνø, Ƽ ݹ Ͻ
      ֽϴ.  libXaw3d ִµ,  libXaw 
     ʶؼ Ѱ谡 ֱ ,   ش ׷ ġϽô
       Դϴ.  ̳ ƮũƮ ư ణ
     3, ׸ Ƽ  ǳ.

    libXmu : Miscellaneous Utilities ձڵ鸸  mu Դϴ. Ÿ
       ִ ༮,  ȵ ༮Դϴ. 
     Ÿ ̶ ϴ  ϵ  ...

    libXpm : Ȯڰ xpm ȭϵ   ? ÷ Ʈ ȭ
       ׷  ̺귯Դϴ.  ߿  ?

   ģ Ұ 帮 鱺.    ʾƼ...
  ߿ Ұ 帱 ȸ  ...

  2.4.  ,  غ?

  Ŭ̾Ʈ   ؾ   ϱ? ...   ϴ
  Դϴ.

       ΰ? ϴ  ذؾ մϴ. 
  ,  ȯ濡 ͼϽ е   . 
   ͳ  Ͻñ  Ͻñ   ̴ϴ.
   X  ȯ濡      ִ
  ǻ    ִ ǻ Ϳ ϳ â 
    ʹ    ְŵ.

  vi, emacs  ͸ ̿ؼ     ִ ȭ
  ϳ  .

     1

        #include <X11/Xlib.h>

        main()
        {
               Display *d ;

               d = XOpenDisplay ("localhost:0.0") ;

               XCloseDisplay (d) ;
        }

     ex01.c ̸ ϼ̴ٸ,

       cc -o ex01 ex01.c -lX11 غʽÿ.

   ߵ˴ϱ? ȵȴٱ?  ׷?    
   ø Ƹ  ã´ٰ ׷ ʳ?

  ׷   INCLUDE 丮 ֽʽÿ.

       cc -o ex01 ex01.c -I/usr/include/X11 -lX11

   ǵ ũ ȵǴٸ ̺귯 丮 ּ.
  -L/usr/X11/lib  ࿡ ߰Űø ˴ϴ.

    ̷ٸ,  Ѻ. ex10 !

  в ǸϽô    ֽϴ. :) ̰ ?

  !  α׷ X  α׷    ִ
  ̳ ٸ  ߿ α׷Դϴ.  ׷  ͳ׿.
  :)

   ͸(?) X  α׷   帮 մϴ.

  ù INCLUDE  XOpenDisplay, XCloseDisplay, Display 
  Ǿ ִ ȭ Xlib.h ԽŰ Դϴ.  翬
  main Լ ǵǾ߰?

  Display  d  մϴ.

  2.4.1.  Display?

  ÷̰   ƽ ̴ϴ. в ٷ  տ ΰ
    Ͷ ϴ '÷'Դϴ. ׷ ⼭
  Display ϴ  X  ýۿ ణ Ȯ ǹ̷
  մϴ.

   : Display ϳ  ϰ ִ 1 ̻
  ũ(Screen), 1 Ű, 콺  Ǿ ִ ü̸
  ũ̼(Workstation) ̶ θ⵵ Ѵ.

  ̷ ÷̴   ϳ ü Ÿ ũ ϳ
   찡  Ư  2 ̻ ũ  쵵
    ֽϴ. ϳ ǻͿ   ͸  " "
  ý۵    ֽϴ.   ϵ شٸ, X
  ý   ȭ  ̿  ֽϴ. ̷ α׷ ϳ
    ְ? X  ýۿ ʹ 
  ̷ϴ.

  2.4.2.  XOpenDisplay Լ

  ,  츮 ϴ ÷   غô.

       XOpenDisplay ("localhost:0.0");

    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 ȯ溯  о  մϴ.

  2.4.3.  XCloseDisplay Լ

  ؼ   ϳ ,   ľ  ?  
  Լ ٷ XCloseDisplay ԼԴϴ.

     ,    ٺ α׷ ϳ
  ¥ҽϴ.  X  α׷ ⺻  1 α׷ 
   ϴ.  ϰ   ,  մϴ.
    ۾ XOpenDisplay Լ XCloseDisplay Լ ̿
  ֽø ˴ϴ.

      ,  Xlib.h ȭ  캸ʽÿ.  
  Display    , ǵǾ ִ ø,  
  ϰ ִ ü(struct)  ȮϽ  ֽϴ.

  2.5.   â ϳ  ô.

  տ  (?) α׷     
   쿴ϴ. ׷,   ϰ   
   ϳ Ѻ սô. ٷ â ϳ  ǥغ
  ̴ϴ.

     2

        #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);
        }

  ̹  Window  ο ڷ XDefaultRootWindow(),
  XCreateSimpleWindow(), XMapWindow(), XFlush()  ο Լ
  ±.  ! BlackPixel(), WhitePixel()  ũε
  ̴±.   ũε ߿ 帮 ϰڽϴ.
  Ϸ翡 ʹ    Ӹ ݾƿ?

  2.5.1.  Window  

  츮 â    â ϳ    Window 
   ϳ ʿϴٰ Ͻø ˴ϴ. Window   ϳ 
  â    ϰ ִ  ü  Ͻø
  ˴ϴ.   ִ δ â ũ, ġ,   ֽϴ.

  2.5.2.  â , ǥ ...

  ݺ 帮 ⺻   Ӹ ӿ ־μ.  
  â  츮 켱  â   ϰ  
  ϳ ̹ ߾ մϴ.  Window   ϳ.  
   â ϳ ڴٰ  û մϴ. ( ڿ
  帮 Լ ) ̺    â̶ ڿ ϳ
   (!!!)  ϴ.  ׸ â ڿ  ڿ
  ȣ(Resource ID) Ʊ Ŭ̾Ʈ ʿ   
  ȯݴϴ.   ٷ Ŭ̾Ʈ     â
     ݴϴ.  ߿?

  ̷   â ڿ ϳ ,   
  ϴ   â ȭ鿡 ǥش޶ ûϸ  ˾Ƽ  â
  ǥݴϴ.  û  ȭ鿡    ֽϴ.

  Ǵ  Ÿ ִ â Ͽ  ׵θ ٲ۴ٵ
  ϴ  ۾  Ʊ Window   ؼ   ֽϴ.

  츮   ڿ Ͽ   ڿ   츮
  Ŭ̾Ʈ α׷   ڿ  ID 
  س ֽϴ. ׸ ϴ   ڿ ǥѴٵ,
  Ѵٵ, Ǵ شٵ ϴ ۾ մϴ. ׸ ߿ 
  ʿ䰡  ڿ ؼ   ϶ մϴ.

   ̷  帰   ֽʽÿ.   츮
   ϴ   κ 帰 ̳ ٸϴ.

  2.5.3.  XCreateSimpleWindow Լ Ͽ...

  Լ ̸ ״ ؼغ " â Ѵ" ʽϱ?
  츮  ȭǿ  ִٸ, ̰͸ŭ   ԱⰡ 
  ְڽϱ ...   â  Լ Ͽ ˾ƺ
  .

        Լ (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 );

  Լ    âϱ.   Լ κ 
  ̷ٰ  ϼŵ մϴ.    ־ ϴ
      ̴ϴ.  ĳó  ũ ̽ , ٴٴ 
    غڸ, 1° Display  ʹ XOpenDisplay()
   ÷̸ Ű ̸, 2° Window  
  ϴ â ҼӵǴ θ â̸, 3°, 4°  x, y ǥ
  ϰ, 5° ȼ  , 6° ȼ  , ׸
  7° ׵θ β,  8° 9° ׵θ  â
  ⺻  īŰ unsigned long  ġԴϴ.

   ϳ ÷̿ κ  ġϱ 1° μ
     , غ,  Ŭ̾Ʈ
  α׷  ÷  α׷    ʽϱ?
  ׷,     ̻ ÷̸ ϰ  
  ֽϴ. ٷ  ù° μ  Դϴ.  2°, θ â
  ΰ? --- X   â ׻  â  ְų, 
  â ڱ ڽ(Child) ϴ.  ٺδ X 찡
  ڸ  â ٷ ׵θ  â, Ʈ(root)âԴϴ. ٷ
   â  â ϴ Դϴ.  α׷̵ ó â ٷ
  Ʈâ ڽâ ˴ϴ.  â ٽ ڱ ڽâ 󸶵 
   .  Ǿ簣  Ǵ â (?)  մϴ.
  ڱ θâ ˾ƾ  ʰھ?  ⼭ 
  XDefaultRootWindow() Լ Ͽ ˾ƺô.

   Լ 

   Window XDefaultRootWindow ( Display *display );

   ༮  Display  Ͱ Ű  ⺻(Default)
  Ʈâ â ID ˾ƴٰ ID Window   ǵ ִ
  Դϴ.

  츮  ϴ â  Ʈâ ٷ Ʒ ڽâ
  ǹǷ,   XCreateSimpleWindow() ι° θâ ID
  ־ ϱ  ʿ ԼԴϴ.

   ڸϹǷ 8°, 9°   κп  
  帳ϴ.

  X 쿡    ϴ ϳ ڿμ 
   ϰ ֽϴ.  츮 ϴ  ŭ  
  ų   ϴ.  Ȥ  XV   ׷ α׷
  鼭 ׷ ȭ    ٸ Ÿ  غ 
  ֽϱ?  쿣 XV ϴ ŭ  ڿ Լ ޹
  ϱ Դϴ.  ...

   巯 ׳   Īϴ  ڸ  
  ƴ϶, BlackPixel(), WhitePixel()̶ ũθ ϴ. ̹
  ¿    ׷  ʴٴ Ǹ
  ֽñ ٶϴ.    Ⱑ ̾ϴ. 
   ֽʽÿ.

  2.5.4.  XMapWindow()

   ༮ ΰ ϸ,    뺸 â 
  Ÿ ø   ༮Դϴ. â  ǥô 
  .

        Լ 

        XMapWindow ( Display *display, Window w );

  Ư ÷  w â ȭ鿡  ǥմϴ.  ⼭
   Map μ " ׸","ġϴ" Դϴ.  ٴϴ
  а  ׸  (Mapping)Ѵٶ մϴ.

  2.5.5.  XFlush()

  ƴ, ̰  ? ÷(flush) ȭǿ     ,
      մϴ. Ѳ    ׷
  Դϴ. X 쿡  ׷  ʿϳı?  ̻ϱ.

  C α׷ غø, printf   ¹  Ŀ
   ̷  ƴ϶  ƽ ̴ϴ.  Ź 
       ϴ ͺٴ Ѳ ۿ Ƴ 
  Ǹ     ȿ ̴  äմϴ. X 쵵
   ׷ϴ.   Ŭ̾Ʈκ  û   
   ϰ Ǹ ɷ  ǹǷ,  ۸ ϰ 
  ۰ ų ۸   䱸    ϰ
  ˴ϴ.
  ̹  X  Դ ͵  ʿ䰡  ŭ, 
  䱸̱  ׷  ٰ ؼ ۰   մϴ.
  ׷,  '   ߰?'

        Լ 

        XFlush ( Display *display );

  2.5.6.  

    ex02.c ϼ̴ٸ,

        cc -o ex02 ex02.c -lX11 -I/usr/X11/include -L/usr/X11/lib

   -I, -L ɼ  ŵ   ȭϰ ̺귯
  ã    ֽø ˴ϴ.

  2.5.7.  

  ,  X ͹̳ 󿡼  غ?  츮 ߴ Ͱ 
  ٸ Դϴ. ֳı? в fvwm   ڸ 
  ø, 츮 ǵ ʾ   츮  ϴ â
  翡 ϰ  Դϴ.  κп    
   ̷ ϰ  â ٴ ͸ Ȯϰ Ѿ. :)

   Ų ͹̳ â Ű   ֽø ˴ϴ.

  !   getchar()    غ. ׸,
    Ű ƴ϶ ̽     
  ʴ غ.  Ʒ   帮ڽϴ.

  2.6.  â ȿ  â  ô.

  ٷ տ   â ϳ  . ̹  â
  ȿ ٸ  â     ϰڽϴ.

     3

   #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);
  }

    α׷    ,  α׷
  ±.   ⺻   ϴ!  /* */ ǥ
  κи þ , 츮 ׻ 1.  , 2.  û, 3.
      ⺻  Ӹ ӿ ΰ ־ մϴ.

  2.6.1.   â ڽâ     ִ.

   â θâ ᱹ ƮâԴϴ.  â ȿ  ڽâ
  ǰ ǥõ˴ϴ.   ڽâ ٷ Ȱ  ؼ ڱ
  ڽ ڽâ   ֽϴ.  ܰ ڽâ鵵 
  ... ׷  ̹  ȮϽ  ֽϴ. 
    ʿ? :)

  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) Ǵ .

  2.6.2.  ڽâ Ѳ Ÿ.

    3  ణ Һ Դϴ. â 
  ǥö   ̹Ƿ, ϴ  ؼ  
  ѳ ,     ϴ ڽâ鸸 ǥ  XMapWindow
  Լ  ϰ,   Ѳ ڽâ  ǥϰ 
   ,  쿡  ŷ?  ׷ ⼭ ο Լ ϳ
  Ұ 帮 մϴ.

        Լ 

        XMapSubwindows ( Display * d, Window w );

  ÷ d  â w   ڽâ ϰ ȭ鿡
  ǥմϴ.    Ǵ Լ.

  ε  Լ   鼭 ̷ ϰ ٸ 
   õǾ ִٴ    ֽϴ.

  2.6.3.   ڿ .

        Լ  : XDestroyWindow ( Display *d, Window p );
        Լ  : XDestroySubwindows ( Display *d, Window p );

  â ıع(Destory) ûϴ ԼԴϴ.  ̻ ǥ
  ʿ䰡  â ڿ ؼ(޸𸮸 ϰ
  ϱ)   ִ  ʿմϴ.   
   Լ ִµ, ù°   ϳ â ִ ̰,
  ι°  â ϰ ִ  ڽâ ãƼ ִ
  Դϴ.  ڽâ ߿ ؼ ַ ϽŴٸ 翬
  ϳ ִ Լ ù°    ۿ ϴ.

  [ٷ     ]

  Ű Է  ۹̹Ƿ ̽ٸ   ĺ 
  α׷    ʴٰ Ű  Ͻÿ ÷˴ϴ.

  [ Ǹ ġ鼭...]

      α׷  Ͻ  𸣰, 
  ⿡ X  α׷ֿ â ǥ  ƽŴٸ  
   ̶ Ȯ 帱  ֽϴ.   ư,
  ȭ, ޴  ׷ ̽ ᱹ ڱ׸ â 
  Դϴ. ߿ ս ٷ 츮 翡 ִ Athena Widget ̶ ϴ
   ̽  غ  ٵ, Ƹ  
   ٸ ̽  ʹٴ   ǽ ̴ϴ. û
  ̽ ! ̰ X 찡 ٸ  GUI ý ٵ
   غ̰  ̴ϴ. ּ.

   © ,   ̴   Ͻð Ӹ ӿ ׻
   ֽʽÿ.  ߿  ߿ ϳԴϴ.

  2.7.    ƴ϶ Į â ô.

    (Color) κ    ִ
  ؼ ˾ƺ ϰڽϴ.    ̷Դ ̱⵵ ϱ...

  ݱ ƹ   BlackPixel(), WhitePixel() ũθ
   Խϴ. ̸ Ÿ / Ͽ  
  ־.  ̰  츮 ϴ  Ϲ 
  ϴ ؼ ˾ƺϴ.

     ϰ ִ ڿ ϳԴϴ.  â 
  ޶  ûϰ, ǥ϶ ûϴ ۾  
  ġ ˴ϴ.

   ÷(Color Map)̶ ϴ   ֽϴ. 
  Ÿ  Ǵ ǥ . ̰  ǹ̸  
  ˾ƺڽϴ.

  2.7.1.  ÷̶?

  ǻͰ ϰ ִ ġ ߿ Ʈ ÷̿ ϴ
  CRT  ֽϴ. ٷ в  տ ΰ  .
       ƽôٽ  3 ϴ 3
    ǥ鿡 ߶ ִ RGB  ˸° ν
  츮 ϴ    Դϴ. 츮 //ֻ 
     3 ˸° Ἥ  ߻. ׷, ٷ
  ⼭ //ֻ      RGB   
  󵵷  ϴ°? /ֻ Ѱ ϰ ִ ǥ
  ʿѵ, ٷ װ ÷Դϴ.

   ΰ ƴ϶ ̱  츮 yellow ϸ 
      ϴ.  ڱⰡ  ִ ÷ʿ
  yellow شǴ  ãƼ Ϳ   RGB  
  Դϴ. ϱ?  ÷̶   ߿ ġ ϰ
  ? ̰  Ǹ  ɱ? ǻͰ Ÿ 
    ȫ ǥ  𸨴ϴ.

   ⺻ ÷  ֽϴ.

  2.7.2.  ϴ  ϱ  ġ 

    ̿ϴ  ۾    ľ մϴ.

  1. ⺻ ÷(Default ColorMap) ID ˾Ƴ.

  2.  ⺻ ÷κ ϴ  ȼ(Pixel Value) ˾Ƴ.

     4

        #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", &color, &color_exact );
               Black = color.pixel;
               XAllocNamedColor ( d, CMap, "blue",  &color, &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 );
        }

    캸ø, (unsigned long ) ϳ ° ׷
    ƴ϶  ߰ϼ ̴ϴ.

    ؾ  ÷ ID κ ˾Ƴ Դϴ.
  Colormap   CMap ϳ صξϴ. ׸ 
  XDefaultColormap() Լ Ἥ  ,  ⺻ ȭ(0
  ȭ) ⺻ ÷ ID ȯ޽ϴ.

        Լ 

        Colormap XDefaultColormap ( Display *d, int screen_no );

   ÷ ˾Ƴ, 츮 ϴ  ȼ ˾Ƴô.
    XColor     ʿմϴ. ׸ XAllocnamedColor
  Լ Ἥ  Լ ־ ÷ʿ 츮 ϴ ̸
  ãƼ   ̸ شϴ  XColor  ϵ
  ûմϴ.
        Լ 

         Status XAllocNamedColor( Display *d,
                                  Colormap cmap,
                                  _XConst char* color_name,
                                  XColor *screen_def_return,
                                  XColor *exact_def_return );

  ⼭  ο ڷ ؼ   ƽ ʿ ϴ.
  Ƽž Ѵٰ    ڼ 帮ڽϴ.  Լ ̸
  ü   ̱    ˾ƺ ϴ.
   Ÿϱ   ƴ?  Լ ̸ 巯
  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    Ǵ
  .

  2.7.3.  

    ϴ ڿԴϴ. ̸ ϱ ؼ
  XDefaultColormap Լ Ἥ ⺻ ÷ ID ˾Ƴ ,
  XAllocNamedColor Լ ؼ Ư ̸   XColor 
  ˾Ƴϴ. ׸  XColor ü pixel  оø
  ˴ϴ.

  ׷,  ϳ ȼ ˱ ؼ ׻ ̷  
  ľ ϴٴ,  ʹ  ? ׷ٸ, в ̸
  ָ,    ȼ ȯִ   Լ
  ۼϽø  ̴ϴ.     . å   е
  ƽ  𸣰ڳ׿. :)

  2.8.    â  

   츮 ̹   â鿡 ؼ ̸ 
  ƺڽϴ.  â  ٲ۴ٵ, â ũ⸦ ٲ۴ٵ,
  ݴٰ ٽ Ÿ Ѵٵ ...  ̷ ̸ Ϸ մϴ.

  2.8.1.  ̹   â  ٲٱ

  ϴ â    ׵θ س ,
  ̶  ޶  ִ  ƴϰھ? , ̹ ǥõǾ
  ִ â ״  ä    ٲپ ô.  
    󺸼. ٷ  ð 帰   ˾Ƴ
  ϰ ?

  1. ׵θ(Border) ȭ

          XSetWindowBorder ( Display *d, Window w, unsigned long border_pixel );

  2. (Background) ȭ

        XSetWindowBackground ( Display *d, Window w, unsigned long background_pixel );

   ʿѰ? μ ־ Window   츮 
  ȭŰ ϴ  â Ÿ   ǰ, ȼ
  в Ͻô  ȼ  ǿó ϼż
  Ͻø ǰ...

  ,  3  10   Լ(sleep) ڿ в ѹ 
  Լ ̿ؼ  ٲپʽÿ.    XFlush
  ּž Ѵٴ Դϴ. XFlush ֽð   ٽ sleep Լ
  ž   ȮϽ ְ?

  <<  ... >>

  ,  ? ׷  غ  帮ڽϴ.

   3  ߰ sleep(10);  Դϴ.

        XAllocNamedColor( d, CMap, "green", &color, &ExactColor );
        XSetWindowBorder( d, w, color.pixel );

        XAllocNamedColor( d, CMap, "peachpuff", &color, &ExactColor );
        XSetWindowBackground( d, w, color.pixel );

        /* ??? */

        XFlush ( d );

        sleep(5);

  ...

   帮ڸ, ݺο green  ȼ ˾Ƴ ׵θ
  ȭװ, Ĺݺο peachpuff   ٲٶ
  ߽ϴ.  ׸     ʽÿ.(flush)

   ̷ Ѵٰ ؼ ϴ    ִ  ƴմϴ.
     ϳ ֽϴ. װ   ԼԴϴ.
  3. â   Լ, ƴ ٽ ĥϴ Լ!!!

        XClearWindow ( Display *d, Window w );

  Լ ̸ ̵, â , Ȯ ؼ â  
  ԼԴϴ.   帮ڸ,   ,  â
     شϴ  ٽ ĥִ  մϴ. 
  ٲٽð     â ֽô ƴϸ ׿ Ȱ ȿ
    ֽø ˴ϴ.  װ ̳ı? â UnMap ߴٰ
  ٽ MapϽø ˴ϴ.

     /* ??? */   κп  
  ־ֽʽÿ.

        XClearWindow ( d , w );

  â ׵θ  ٲٴ  â ۿ ־  ⺻
   ̰ŴϿ  ߿ ̱⵵ մϴ.  X 
  α׷  ô ư . ͸  
  ׵θ  ü  ϴ    ֽϴ. ᱹ  ư
  ϳ Ǵ  ̻ â ̷ ִ Ϳ Ұմϴ. ޴
  ׷ϰ. X  ׾߸  ز â ؼ ͹̳
  â  ū â ϰ ֽϴ.

  2.8.2.  â    ˾Ƴô.

   е鲲 geometry ܾ    ̴ϴ. Geometry
   â     մϴ.  â ǥ( â 
   ǥ ϰ?),  , ׵θ β .

  簢 â ⺻ ҵ̶   ִ . â ݿ  
   ִ  ϴ Լ ϳ  Ұϰڽϴ.

        Լ  : <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
                              )

     Լ   :
        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 â ǥ谡 ȯǾ ɴϴ.

     ̴    :
         ̰ ϴ  ̷ϴ. в Xlib.h
        ȭϿ XGetGeometry Լ ãƼ   ø ι°
         ڷ Window  ƴ϶ δ Drawable 
        ΰ ׸  ִ  Ǿ ִٴ  ߰Ͻ 
        ֽϴ. װͿ   ٽ ڷ ̷ϴ.  Ǿ
        Drawable  ڷῡ Window  ԵǾ ֽϴ.

  2.8.3.   â geometry ٲپ ô.

  â geometry ٲٴ Լ ⿡ Ұմϴ.

        Լ  : <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 );

  ù° Լ â ġ ־ x, y ǥ  ̵Ű
  ༮Դϴ.   ǥ θâ ǥ踦  մϴ. ι°
  Լ Resize  ũ ȭŰ Լμ ־ &  
  ũ⸦ ȭŵϴ. °   ϴ ص ϳ?
  , ½ϴ. ׵θ  ȭŵϴ.

      ִ  帮  Ǹ ĥ
  մϴ.    е鲲 мغ.

     6

  /* â  ȭ Geometry ȭ */

  #include <X11/Xlib.h>

  /* Լ  */
  unsigned long UsrColorPixel( Display*, char* );

  int main()
  {
          Display *d;
          Window w0, w1, w2; /* One TopLevel Window & Two Child Windows */
          unsigned long black_pixel;
          int w_X1, w_Y1, w_X2, w_Y2;    /*  ڽâ ġ ǥ */
          unsigned int width, height, I; /* ڽâ  &  */

          /*  ϱ ׸  ʱȭ */
          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 & 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 );

          /* â ı &    */
          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, &c0, &c1 );
          /* ⼭ 츮 c1   ̿ ʽϴ. */

          return ( c0.pixel );
  }

    6 Դϴ.   Լ UsrColorPixel()
  ٷ  ð   ȴ Ϳ    ϳԴϴ.
  е鲲  ڽŸ Լ  ̰?  
  ʽÿ.

    ø鼭       ϰ   ̸ Ӹ
  ӿ ׷ð, ŷοô   ڱ 
  ŸϽø鼭(  밡? :) ) Լ ϳϳ ñ
  ٶϴ.  Լ  ׷  ϴ°,  ׷ ۿ
   ߴ° ؼ ֽø  .  ,  
  ӿ  帮  Լ ֽϴ.  Լ в
   ʰ  ǹ̿  ƽ   Ŷ մϴ.

  е  ƽ ̴ϴ. α׷ ¥   Ǽ 
  ӿ  Ƿ þٴ , ׸  Ǽ ӿ ߿
   ľ   ִٴ  Դϴ.   
   ?

        XSetWindowBackground( d, w0, UsrColorPixel( d, "yellow" ) );

    /* */ ּ óϽðų   ϰ
   . ,   Ͼϱ?

  X  α׷   ƴմϴ. â   峭̶
  ұ?

  3.  ޽İ : ҽ(Resource)

  ̹ Xlib α׷   ȯ ұ մϴ. 
  Ȱ  α׷ θ ϴٺ ġ? ׷ ִ  
    غ մϴ.

  X ڿ   ִ ýԴϴ.  3.1  95
   ƿ 츮鿡Դ ó  ̸԰ , ˾ư ˾
   ϱⰡ ׷   ƴϸ,   ˰  ̰͸ŭ
    ϴ. ǻ͸ Ѵٴ  ܼݺ ۾
  Ǽ  سٴ ⺻  , ÷ ÷ 
  κ ۵ ǻ Ƽ̵ȭ ð ̹  
    ؿԽϴ. Ư ǻ ׷ оߴ 뿡 
  ȵ ߿ ǻ Ȱ о.

  X  ϳ ǵ ̽ ѻ   ϴ.
   fvwm ڸ ٸ ڷ ٲپֱ⸸ ϸ 
  ٸ ⸦   ֽϴ. پ缺 Բ  ޸ ϸ鼭
    Ծ ϰ  ִ  X Դϴ.

  ϴ   ?  츮 ڿ(Resource)̶ ϴ X
   ߿  信 Ͽ ˾ƺ,   ִ ǽ غ
  մϴ.  ǽ   X α׷  ⿡ µ
  ȭŰ ſ   ֽϴ. ׷, غ .

  3.1.  ҽ(Resource) ΰ?

  ռ ϰ , ٽñ  帮ڽϴ. ҽ
   X  ýۿ   ٸ ǹ̷ ǰ ֽϴ.

  ù° X Server Resource ε, 츮  ϰ ִ Xlib
  α׷ֿ Ե,  ϴ μ â(window),
  Ʈ(font), (color), ׷ ؽƮ(GC)  ٷ װ͵Դϴ.
   ٿ  Ŭ̾Ʈ  ҽ ID   ̸
   ϴ 񽺸 û  Դϴ.

  ι° Xlib   ܰ  Xt(X Toolkit) α׷ ϴٺ
   μ ڰ ̸    ִ (Widget)
  Ӽ̶   ֽϴ.  õ , Ʈ, ġ,  
  װԴϴ. Xlib α׷     Athena  Set
   Xt α׷    ٷ  , ̸
  ̰ մϴ.

  X α׷Ӱ Ƿ 켱   X ƿƼ ǹ̿ ,
  ׸ ٷ  ҽ    صξ մϴ.

  3.2.  ҽ Name Class

    ϴ  ڱ.   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 α׷ 迡 ߹ϰ 
  ̴ϴ. :)

  3.3.  ü ҽ

   캻 ư ü α׷ Ǵ ڰ Ӱ  
  ִ   Ӽ µ ٷ װ ü ҽ, ׳ ٿ
  ҽ θϴ.   ҽ ϸ ٷ ü 
  ǹϴ ҽ մϴ.

    غ. ,    ִ  ð ̳
  X  󿡼   Էغô.

        seyon -modem /dev/modem -xrm "*about.label: ABOUT"

  -modem ɼ ڿ   ޸ Ʈ ϴ ȭϸ
  ֽø ǰ    帮 ϴ  ߿ 
  ɼ ⿡ ֱ.

  ߿! ߿! ߿! -xrm ɼ

  : -xrm "ҽ  ڿ"

  ,  Ǿϱ? About̶ ִ  ABOUT ٲ?

      غô.

        seyon -modem /dev/modem -xrm "*about.foreground: red"

  ڻ ٲ?

  Commmand  Ŭ  ְ ̸ about ư (Label)
     ٲپҽϴ. ̷  ؼ 츮 츮 
  ϴ  ɺθ    ֽϴ.

  ణ ±.   غô.

        seyon -modem /dev/modem -xrm "*Command.foreground: Turquoise"

     ư  Turquoise    
  ֽϴ.  Ŭ  ϸ  Ŭ ϴ  ü Ͽ
  ϴ Դϴ.

  -xrm ɼ ̷  س  ִ ༮Դϴ. "ҽ  ڿ"
  Ŀ Ͽ ϰ ˾ƺô.

        "̸.̸.̸: <ҽ>"

               Ǵ

        (ApplicationClass|applicationName)*(ResourceClass|resourceName) : value

  ̷ ˾Ƶξ ϴ ϴ.

  , ⼭ ̸ Ŭ  ְ ü Ư ̸  
  ֽϴ.  ׸ ̸ ϴµ ־ * ? ڿ  ϵ
  ī嵵 밡մϴ.    ׻ * ڸ ؿ.
  ̸ ̸ ħǥ(.) и մϴ. ̷ ̸  ܰ ӵ
   ֽϴ.  3    ħǥ и 
  α׷ ٸϴ.

  ̶ ü  (hierachy) ϴ  ֽϴ.
    ϴ.    谡 մϴ. 
  ɺδ    ,  ư   
  ϴ.   ٽ ư  ֽϴ. ư  
  ٸ ޴ ٵ ϴ   ư  ΰ 
  ϰ ִٴ    ֽϴ.

  ̷  ü ̶ ü α׷  ִµ, 
  α׷ ̸ seyon̰,  Ŭ SeyonԴϴ. ̰
  Muhammad X α׷   ٿ ̸Դϴ.  õ
   ü   ׻ "Seyon." ̷  ؾ 
  Դϴ.  ̷   ִ  幰 *  
  Ἥ ǥմϴ. *  ڸ ǥ  ִٴ  ο ΰ
     оñ ٶϴ. ҽ  ҽ Ŭ ְ
  ҽ ׳ ̸ ֽϴ.

  󺧵 ٲٰ  ٲٽ÷ -xrm ɼ   ֽø ˴ϴ.

  3.4.  Xlib ҽ Ŵ

  -xrm ɼ  ֱ ϳ װ  µ Ѱ谡 ?
  ߿   ҽ ٲپַ     Դϴ.  ̰
   ٸ Ŀ ֽϴ.

   ڸ /usr/lib/X11/app-defaults 丮 ڽ
  Ŭ شϴ ȭϸ Seyon ãƼ нϴ.  ȭϿ 
   ߿   ֽϴ.  ɺ    ȿ
  ֱ⵵ .   丮 Ʈ ż Seyon ȭ
  Write    ٸ ̸  ٲپ ô. 
   ǰ ϴ.     .Xdefaults ÿ
     ֳ 캾ϴ.   ࿡ -xrm
  ɼ оϴ.

   :.xinitrc  xrdb -merge .Xdefaults    ֳ
  캸ʽÿ. Ǵ userresources=$HOME/.Xdefaultsΰ Ȯغʽÿ.

   ҽ    浹ϴ 쿡  ֿ켱, 
   .Xdefaults, ׸  ø̼ Ʈ Seyon
  ڵϴ.  Ŭ  ÿ Ͽ, Ư ü 
   켱մϴ.

         -xrm "*Command.foreground: red"
         -xrm "*about.foregrond: blue"

  ̷   ִٸ, about ư Command Ŭ ϹǷ red
  Ӽ   ƴ϶   Ư  blue  ˴ϴ. -
   ̷    ,  ڼ  ü
  Ͻñ ٶϴ.

      ִ  ٷ 츮Դ 
   ʰ  ϰ ִ Xlib "ҽ Ŵ"Դϴ.

  , Ʈ /usr/lib/X11/app-defaults/Seyon غϴ.
  ⼭ 츮  ִ     ֽϴ.

  3.5.  ø̼ Ʈ ȭ ٷ

  fvwm # ϴ  ּ̾, ⼭ ! ϴ
   ּ ó˴ϴ. fvwm .fvwmrc ȭ ٷ ã
    ϴ  ãƼ غô. ü 帱 
   ִ ͸  帳ϴ.

        *.title: Seyon Command Center

   Ŭ, ü  title̶ ϴ ҽ  ༮ 
  Seyon Command Center ڿ Ҵմϴ.  ڿ ٲپָ
   ž ŸƲ  ٲϴ.

        *.iconName: < ̸>

   ¿ Ÿ ̸ ݴϴ. fvwm IconTitle 
  ε .

        *font: <Ʈ>

  * ϴ  ڿ ǥϰ  font   ҽ
  ÿ ˴ϴ.  ⼭ ־ <Ʈ>  ⺻
  ϰ ˴ϴ.

   *Cursor: <Ŀ>

  ⺻  hand2 Ǿ ? fvwm 콺 Ŀ ٲٱ
  Դϴٸ, ⼭ ڰ ƴ϶ ڿ մϴ.
  /usr/include/X11/cursorfont.h ȭϿ ǵǾ ֽϴ. տ 
  XC_  ̸ ݴϴ.    hand1   ٲ㺸ô
  ͵...

        *ShapeStyle:   <>

  ư  ش. <>   ִ 
  /usr/include/X11/Xaw Command.h ǵǾ ֽϴ.  
  Rectangle, RoundedRectangle, Oval, Ellipse ̷   ֽϴ.

    ...

  *Box ϴ κ ãƺô. ̰ 츮  캸Ҵ
  ư ϰ ִ 簢  մϴ. ⺻δ 
     غô.

        *Box.background:       <>

  , ӱ⸸ ߴ 簢   ٲϴ.

        *ok.lable: OK
        *cancel.lable: Cancel
        *done.label: Done
        *yes.label: Yes
        *no.lable: No
        *edit.label: Edit

  ̷  ٵ ߰ϼ̽ϱ? ok, cancel, done,  ư ü
  ̸Դϴ.  ok ư label ҽ OK Ǿ?  κ ġ
   ƴ  ڰ ϱ ϰ?  ̶
  *yes.label Qui, *no.label Non ٲ ̴ϴ.  ̶
  *yes.label Ya (³?)  *no.label Nein ٲ ̴ϴ. 츮
  "", "ƴϿ" ϸ ˴ϴ.

  *about ϴ ٵ about ư  Դϴ.

  *set ϴ ٵ ؿ ?

  Set ư  , иƼ, Ʈ    ϴ ο â
  ϳ ϴ. װ ̸ uBox  ϴ.

   *set*uBox.Toggle.background: <>
   *set*uBox.Toggle.foreground: <>

  ۹ư شϴ  Strip 8th, CTS/RTS  Դϴ.
  /    ̸, Ǹ
  / ڹٲϴ.     label  ̹Ƿ
  帮 ʰڽϴ.

        *transfer*upload*font: <Ʈ>

  ε  ȭϸ Է¹޴ â  Ʈ ʹ ۴ٰ 
  ʴϱ? <Ʈ> ū  ٲپ ֽø ˴ϴ.

  *edit*title: File Edit  ٱ մϴ.   Ϳ Ǵ
  Ʈ ʹ ? *edit*Text*font  ٲپ ֽø ˴ϴ. տ ٲ
    ö󰡸 *help  ִµ, *help*Text*font  ־
  Ʈ ٲپ ô.

        !
        ! Message box
        !

   ô.  ޽ ڽ  ٲپ .

        *messageBox*background: <>
        *messageBox*foreground: <>

        !
        ! Status box
        !

    ȲâԴϴ.

        *statusBox.background: <>
        *statusBox.foreground: <> 

        !
        ! Quick Keys
        !

  ⿡   ư  âԴϴ.

        *quickKeyBox.Command.font: <>
        *quickKeyBox.background: <>

        *quickKey1.visible: < on Ǵ off >
        *quickKey2.visible: < on Ǵ off >
        ...

   ưâ    ư ǥõǾ ֽϴ.   ʰ
  .  on  ư ̰ ϰ off  ʰ մϴ.

        *quickKey1.action: <ൿ>
        ...

        *quickKey1.label: <ڿ>
        ...

  ,  <ൿ>   ִ   Լ  
  ֽϴ.  ⼭    Դϴ.  ڼ  
  ޴ Ͻð.  ̴  ϳ Ұմϴ.   ư
  ϳ ZMODEM ε/ٿε ư ؼ  ̴ϴ.

  Transfer ư   ϵǾ ִ ȭ  ǰ Ʈ
  ɴϴ.     Լ  FileTransfer() ϰڽϴ.

          : FileTransfer( <  ȣ> [, <ȭϸƮ> ] )

  <  ȣ> ǹϴ   Ʈ  
  մϴ.   ó  1 մϴ. <ȭϸƮ>  
  ʽϴ.  ȭ ٿ޴ 쿡 ʿ, ȭ  쿡
  ȭ̸ Է¹޵   ǵǾ  ̴ϴ.  XRZ
  0.5 ޾Ƽ ٿα׷  ִµ, װ G E T ̶
  ̸ ư ؼ ϴ. ð ȴٸ XSZ 
   ҽм س  ̷⸸ ϳ׿.

    

        *quickKey1.visible: on
        *quickKey1.lable: G  E  T
        *quickKey1.action: FileTransfer(1); Beep();
        *quickKey?.font: 8x16

    ȭ   Ʈ 1  "Xrz3D" "$xrz" No Դϴ.

   Fun message Ͽ ˾ƺô.

   *funMessages: \
          "Hi there! Helloooooooooo!" \
          ...
          "I've fallen and I can't get up!"

    ڿ ִµ  ٲ  \ ڸ  Ϳ
  սô.

  3.6.   ҽ ȭ .Xdefaults

  տ ޸  Ŭ Seyon տ ٿֽñ ٶϴ.  
   帮   ΰڽϴ.   ü Ͽ 
  Ѵٴ  ظ з  ε  ŭ Ƽ ... 
   ٷ    ϴ. ٸ Ŀ е鲲 ֽø
  Ե  Ƿø...

  ȭ  Ͻ ,  󿡼 xrdb -merge .Xdefaults Ͻø X 
  ϰų  ʾƵ ŵ ҽ  ȮϽ  ֽϴ.

    ! --- 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

  !  ȭ   2 ٿεμ "ZDown" "$sz -vv" y Դϴ.

  X  ڿ   ְ ִ!

  3.7.  xterm  ҽ Ͽ

  xterm Ŭ XTermԴϴ.

  man xterm Ͻø ڼϰ ҽ  ɴϴ. װ Ͻø
  ˴ϴ.     ٷ .

        XTerm*cursorColor: <>

  Ŀ  ٲߴϴ.

        XTerm*font:    <Ʈ>
        XTerm*pointerShape: <͸>
        XTerm*scrollBar:       <on/off>        ũѹٸ ǥ ΰ?
        XTerm*saveLines:       <ġ>          صΰ  ΰ?

  Ͽư û  ҽ ֽϴ.

  츮 ΰ   hanterm Xterm  Ͻ  ƽ?
  hanterm Ŭ HantermԴϴ. ҿ Ͽ ҽ 
  Ͻ÷ XTerm κ Hanterm ٲپ ֽø ˴ϴ.

  3.8.  Ƽ ҽ  

    غô.

        xterm-1.Font: 7x13bold
        xterm-2.Font: 6x10
        xterm-3.Font: fixed

  xterm-1, xterm-2, xterm-3 Ŭ ƴ϶ ׳ ̸Դϴ. 
   xterm    ɱ?

        xterm -name "xterm-1"
        xterm -name "xterm-2"
        xterm -name "xterm-3"

  Ͻ  Խϱ?

  3.9.   Ÿ

    ϴ CD ÷̾μ workman ֽϴ.  Ŭ
  WorkmanԴϴ. ǥ ҽ  ϴ.

        Workman.initialVolume: <ġ>

  ʱ  ش. <ġ> 0 100  ʱ   
   ֽʽÿ.

        Workman.smallButtons:  <(true,false)>

   ư  ΰ?

        Workman.autoPlay:      < never, normal, always >

  always ϸ ũ  õ ȿ ִ ǽõ
  մϴ.  ڵ CD  شٵ ϴ  
  ־Դµ, ݿ ο      츦 
  ѽմϴ.  X  ۽ ׻ ׷ Ͻ÷ fvwm ʱȭ Լ
  workman  ֽʽÿ.  autoPlay ҽ always
  Ͻð.   Style ɼ StartIconic Ͻø  ·
  ϰ?

    xcalc   . 츮  xcalc  ĢĢ
  ⿡ Ұմϴ.

  Ŭ XCalcԴϴ. ư ϳ ϳ Ͽ   
  ֽϴ.

        XCalc.ti.Command.background:   <>
        XCalc.ti.Command.foreground:   <>

    xcalc TI-30 ⸦ ķƮ xcalc ɼǿ
  -rpn ָ   HP-10C ó ൿմϴ.  쿡 
  ti  hp ٲ  ʿմϴ.

  TI  ư ϳ ϳ   XCalc.hp.button4.background
  ̷ ݴϴ. CE/C ư̳ AC ư  ٲپ
  ?  XCalc.ti.button4.background ׸ button5 
  ٲٽʽÿ.

  4.  X α׷  : ׷

   â Ͽ  ̾߱   , ䷷ â 
  ̸  峭ġ  ׸ΰ а GRAPHICS  Ͽ
  غ ϰڽϴ.

  4.1.  X  ׷ ⺻ 

     (Where) ׸ ΰ?
        , ʹ 翬  ƴϰھ? â(Window) ȿ ׸
        ׸. ,  װ͸ ƴ϶ϴ. â  ׸ 
        ִ  ִµ, װ Pixmap ̶ մϴ. ߿
        ڷ(Variable Type) ߿ Window Pixmap    ִµ,
           ļ ڷ Drawable̶ մϴ. Drawable? ,
        ׸ ׸  ϴٴ ?   ͵ ? ٷ
          XGetGeometry Լ  Դ ༮Դϴ. а
         âٸ ׸ ̿, Pixmap   
        ̷ϴ. ̷ ̷ﵵ ǳı?   ʽÿ. Drawable
        ڷ̶ Ǿ ִ  Window Pixmap   Ȱ
        ǹǷ Ӱ  ʿ䰡  Ͻñ⵵  ̴ϴ.

       ? ( Graphics Context )
        ū ,   ... , , Ȳ ... ΰ ׸ 
        ڽ ̿ ° پ    ־ ϰ? X
         ý Graphics Context ùڸ  GC ϴ 
        Ư ڿ(Resource)  ֽϴ.   GC ϴ Ϳ
         (How) ׸ ΰ?    
        (!)  ֽϴ. ׻ ڿ  (!)
         ϴ  ⼭   ֱ. :)

       ׸  ִ°? ( ׷  )
        ׷ȿ ⺻ (Point), (Line) ׸  ֽϴ. ϳ
        , ϳ  ׸  ûϴ Լ 翬
        Ǿ ְ, ⿡   ؼ   , 
          ׸ Լ, 簢, ȣ  ׸ ûϴ
        Լ  غǾ ֽϴ.  ؽƮ ڸ ׷
         ִ Լ ־ ϴ Ʈ  ڸ ǥ 
        ֽϴ. X  GUI ü̹Ƿ     ƴ϶
        ٸ   ׸ .    
        ġ  PEX ̺귯 ġϼ̴ٸ 3 ׷  
        ׸  ֽϴ. ߿ ȸ Ǹ ణ  帱
        Դϴٸ...

  4.1.1.  ׷ ⺻ 

   α׷̵ ̰, X  α׷  
  ϵ  ִ  ܰ   մϴ. ̷ 
  Ӹ ӿ ׻ Ͻ  ִ е̾߸ X  α׷
   ǽô ̴ϴ.

     <⺻ >

        1. 켱 ׸  ̸ غǾ ־ ϰ? 츮
           XCreateSimpleWindow Լ  â   ˴ϴ.

        2. ߿!!!   GC ϴ Ư ڿ  
           ޶ ûմϴ. ׸ 츮 GC ID Լ ȯ
           ޽ϴ. 츮 GC ü    ϴ. !
            ID ɴϴ.

        3. ׸  Ÿ ϰ GC Ư ٲپ ޶
           ûմϴ.     , ̳ Ǽ̳, 
             ϴ 

        4. ׸   ؼ ˸´ Լ ȣϿ ̵
           ̵ Ǵ 簢̵簡  â  GC ̿ؼ
           ׸  ûմϴ.

  ݺʹ   ״  س Դϴ.  ⺻ 
  ϼ.

  4.1.2.  켱 GC  .

  ⺻  1  ؼ 帮 ʽϴ. â   ݱ
  ؿݾƿ?

        Լ  : <X11/Xlib.h>

        GC XCreateGC ( Display *display,
                       Drawable drw,
                       unsigned long bitmask,
                       XGCValues *values
                     );

  bitmask, XGCValues   values   ʿϰڱ.

    <XGCValues   ü  >

     <X11/Xlib.h> ǵǾ ִ XGCValuesü   
     ֽϴ.

  --------------------------------------------------------------------
   #                        Ʈ ŽƮ             ⺻
  --------------------------------------------------------------------
   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

  Ʈ Žũ ũο ⺻ ũδ <X11/Xlib.h> ȭϿ
  ڵ (#include)ϴ <X11/X.h> ȭ GRAPHICS DEFINITION
  κп ǵǾ   κ ãƺñ ٶϴ. ? ǥ κ
    ʿ䰡 ų 16 Font 쿡 ý۸ ٸ ٸ
  ̹Ƿ   ̶ Դϴ.

   ǥ Ǳ 캸ʽÿ.  Ʈ Žũ ̿ 
   ô ˾ƺ  ִ Ģ ֽϴ. Ʈ Ž ׻ GC
  ϰ  ҹ Ͱ ޸ ׻ 빮, ׸ ܾ
  빮ڸ ϴ.  ִ 뽬(-) ڴ ۴ϴ. 
  ҹڷθ   ܾ  뽬  Ϳ
  Ұϴϱ. ̷   X ݿ ǰ  Ȧ
  ѱ ñ ٶϴ.

  α׷       GC  
  ,ϽŰ ID Լմϴ.

   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,
                    &gvalue );

   /* ⼭    GCLineWidth | GCLineStyle | GCCapStyle κ̴.
      츮 XGCValues   gvalue  Ӽ Žũ OR 
      ־ Ѵ.                                                    */

   ó   ̸   Ӽ   ϴ
    Դϴ. Ʈ Žũ    
  캸ʽÿ. ׷    ġä  ֽϴ. /* 
  */  ٿ   ̾    ̾ Ͽ
  ־ GC   Ʈ Žũ GCJoinStyle  ־
  ʾұ  Ӽ  մϴ.   翬? ǻͰ
   ַ 츮   ϴ ˰ڽϴ. ̷ 
   ξ װ ϶. ̷  ڼ ˷ 
  ȵ˴ϴ.

  4.1.3.  GC Ÿ ϱ

  Ź GC   Ӽ   ִ  ƴմϴ. ̹ 
    ̶ ϴ  ľ Ķ    ִ
   ƴϰڽϱ?

        Լ  : <X11/Xlib.h>

        XChangeGC (    Display *display,
                       GC gc,
                       unsigned long mask,
                       XGCValues *gvalues
                  );

    ϴ.  Ӽ ٲٰ   XGCValues 
       ,  Լ θ ˴ϴ.
  ƮŽũ  ž߰?

  4.1.4.      ׷ô.

  4.1.4.1.   ׸ Լ

   Լ  : <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 */

  XDrawPoints Լ ڿ  ǹϴ s  Ϳ սô.
     XPoint  ü 迭 ־   Լ θ
  ׸   մϴ.  ŸϿ   ׻ GC  
  Ű  ޸𸮿 ִٴ  սô. npoints  
  迭  ݴϴ.  mode     ִµ
  CoordModeOrigin ־  ǥ Drawable   ǥ
  ־ ǹϸ, CoorDModePrevious   Drawable 
   ǥ̸  ٷ     ǥ ǥõǾ
   Ÿݴϴ.

  4.1.4.2.   ׸ Լ

        Լ  : <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 );

  ù° Լ Drawable  ( x1, y1 ) ( x2, y2 ) ǥ 
  ߴ  Ϲ ԼԴϴ. ι° Լ   ʰ ׸⸦
  մϴ.  XPoint ü 迭   ̾ · ׷.
  ǥ  ǥ mode  մϴ.  ׸ Լ
  XDrawPoints ϴ.  ° XDrawSegments ι° Լ ޸
  ӵ 迭         ׸. (x1,y1)
  (x2,y2) ߰, ٽ (x3,y3) (x4,y4) ߴ Դϴ.

   Ÿ Ƿ Xlib  ۷ PS ȭ  ϴ 
  ϴ.  å  ʾƵ Ϻ   ŭ  
  ֽϴ.

         Լ : XSetLineAttributes ()
                    XSetDash ()

  4.1.4.3.  簢 ׸ Լ

        Լ  : <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 );

  4.1.4.4.  

  ׷ȿ   е   Լ Ͻñ
  ٶϴ.  ̰Ϳ Ͻ ϴ е 3D ׷ ̺귯
  PEXlib   θ Ͻø ˴ϴ. ̰Ϳ   Xlib
  α׷  Ѿ  üε ϱ   
  ñϴ.

    Լ   ǽ غ սô.  ׸
  ϰ Ʈ  ڿ Ÿ⸦ ٷڽϴ.

  4.2.  ׷ 

  Xlib ׷ X α׷ ʰ Ǿִ  ⺻ Դϴ.
  X   ׷   ִٰ Ͻø ˴ϴ. 
  ϳ    ᱹ Xlib  Լ ؼ 
  Դϴ.  ȹδ û ӵ Xlib α׷ ġ 
    ־  Xt α׷ Ѿ , ٷ 
     ٵ簡    ϰ Դϴ.  
  ø и     ֵ ȳص帮ڽϴ. 
  .  ߿   پ   
  FWF(Free Widget Foundation) ¿ ԵǾ 
  α׷ӵ鿡 ˷  ֽϴ. ҽ Ǿ  ʴ ٸ
  ýۿ Ұ  ƴϰڽϱ?

  ٽ   Ȯմϴ! Xlib ׷ ׻ GC  ϴ ҽ 
  մϴ.   GC ׷ȿ    ϰ ִ ༮ε,
  翬   GC  Ƿϰ 츮  GC ID
  ޾ƿɴϴ. ̰ X  Ʈũ  Ư 
  μ, Ʈũ ؼ ּ  ϸ鼭 ϴ 
   ϱ Դϴ.   Ź red    
  100  ִٸ, red ׸   Ʈũ Ÿ
     Դϴ.   ֹ ̸ س
    ID ϴ  ξ Ʈũ ε带 ̴ 
  ǰ?  ׾  ׻ Դϴ. :)

   ׷ غô

     7

  #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 & 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, &gv );
          XDrawPoint ( d, w, gc, 200, 100 );
          Pause( d, 3 );

          gv.foreground = UsrColorPixel( d, "blue" );
          XChangeGC ( d, gc, GCForeground, &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, &gv );
          XDrawLine ( d, w, gc, 20, 20, 380, 180 ); /* CapButt */
          Pause ( d, 3 );

          gv.cap_style = CapRound;
          XChangeGC( d, gc, GCCapStyle, &gv );
          XClearWindow( d, w );
          XDrawLine ( d, w, gc, 380, 20, 20, 180 );
          Pause ( d, 3 );

          gv.cap_style = CapProjecting;
          XChangeGC( d, gc, GCCapStyle, &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, â ı &    */
          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, &c0, &c1 );

          return ( c0.pixel );
  }

  void Pause( Display *d, int secs )
  {
          XFlush ( d );
          sleep( secs );
  }

   -lX11 ɼ ּż Xlib  ũ ֽø ˴ϴ.

  ִ Xlib ׷ Լ  ̷ ߽ϴ. 
   帰 ͸δ  մϴ.   ο
  ٰ ׸鼭  ĥ  ִ XFillPolygon()  
  Լ 帮 ʾҽϴ.  ڼ   Ž ޷
  ֽϴ.

    Ʈ ϴ  ؼ ˾ƺ սô.  °
  翬 ѱ ¿  ⸦ غ . Ʈ Ǹ ġ 
  X ٿ α׷ ©  ִ "̺Ʈ" ٷ  ְ ǰڱ.
  Xlib    ʾҽϴ. . :)

  5.  X α׷  : Ʈ

  Xlib  Բ ϴ X α׷ Ű? Xlib   
  Լ Դϴ.  ̰ üδ α׷ ¥Ⱑ 
  ϴ.    ߿ ־ ٷ    Toolkit
  ؿ ̷.  Ǵ   ϰ ִ  ǥ
  Ƽ(Motif) ֽϴ.    ϰ   Toolkit
  Ƽδ   α׷   ϴ. Xlib 
   װ ٽ ϸ ϴٴ  ˴ϴ.  
  ؾ߸  α׷ ´ٰ Ȯմϴ.

   ؾ  ,   ͵鿡 ؼ ϰ
  帮  Ǹ غ մϴ.  Ʈ  ǿ
  ̾  ߿ϴٰ Ǵ ̺Ʈ ó ( 콺 ̺Ʈ, Ű
  ̺Ʈ )  ֽϴ.  X  ÷ ýۿ ؼ Xt ( X
  Toolkit ) α׷ֿ  帮ڽϴ. ʹ  Xlib
  α׷ֿ ӹ ̸ ұ  Դϴ.

  5.1.  Ʈ ¿ Ͽ ...

   ؽƮ(Text) ϱ ؼ   3  
  ľ մϴ.

  1. 켱 ϴ Ʈ    Ʈ ϶ ûѴ.
     ׷   Ʈ  ID ش.  û Ʈ
     ٸ  ߻Ѵ.

  2. Ʈ ᱹ "׸ "̴.  ׷ ؽƮ GC ̹
     ־ Ѵ. ϴ   GCٰ Ʈ ID ش.

  3.   Լ ؼ Ѵ.   츮 2] 
     ̹ Ʈ ID  ϰ ִ GC  ϸ ȴ. 1Ʈ
     ƾ ڴ XDrawString Լ, 츮  2Ʈ ڴ
     XDrawString16 Լ Ͽ Ѵ.

          Լ  ǥ ׷,

        [1] XLoadFont() -->  [2] XSetFont()  -->  [3] XDrawString[16]()

  5.2.  X  Ʈ ý ˾ƺô.

   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  ߿ ȭ   ֽϴ.

     fonts.dir
         ȭ  丮 ġǾ ִ Ʈ ȭϿ  XLFD
          ֽϴ. ο Ʈ ġϰ  mkfontdir
         Ἥ fonts.dir ȭ մϴ.

     fonts.alias
        XLFD   Ʈ ̸ شٴ   
        ƴ  ϴ. ׷ alias  մϴ.  
        츮   ϰ ִ fixed  ̸ Ʈ 
        ý۸ δ ٸ Ʈ Īϰ   ֽϴ.
        ̷ alias Ʈ̸ ܿ  ڰ ؼ  
        ֵ شٴ 鵵  ְ, Ư Ʈ̸  ýۿ
        ׻ ִ ó   ִٴµ  ǰ ֽϴ. ٷ
           fixed ̸ Ʈ  Դϴ. 
        fixed  Ʈ alias  Ǿ   κ  X
        ü ߴٰ  ̴ϴ.   ȭ ڵ Ǵ 
        ƴϴ   صΰ Ͻñ ٶϴ.

     fonts.scale
         Speedo Type1 丮 ø fonts.scale̶
        ȭ ã  ֽϴ. Ʈ ȭϸ ׿  XLFD 
        ǥⰡ  ֽϴ.     Ư Ʈ ؼ 
        ִٰ 帮 մϴ.  κ  fonts.dir ȭϰ
          ̴ϴ.

  5.3.  X Logical Font Descriptio : XLFD  Ͽ

  X  ýۿ Ʈ  ִ  ϱ Ͽ 14
  ʵ ̷  ϴ. ٷ ̰ XLFD . 
   ̷ ֽϴ.

         -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1

  14 ʵ  - ڷ иǾ ֽϴ.  ǹ̿ ؼ
  ˾ƺ  ұ?

      ʵ ( Foundry Field )
          տ   ʵ * ڸ Ἥ   
         ʴ 찡 ϴ.  Adobe ȸ簡  Ʈ
        쿡 adobe ڰ  .  ۿ bitstream,
        b&h, schumacher, sun, kaist, hanyang, misc  ڿ 
        ִ      ̴ϴ.

     йи ʵ ( Family Field )
         ༮  Ʈ ü  մϴ. 츮 
         Helvetica, Times Roman, Courier  װԴϴ. 츮
        Ʈ 쿡 myeongjo, gothic  ٷ װ.

      ʵ(?) ( Weight Field )
        medium, bold, demibold   ϴ.  ǹ ƽ
        ̴ϴ.

     絵 ʵ(?) ( Slant Field )
        Ȱ 翡  Դϴ. r  츮 ˰ ִ 
        θü, i Ÿü ϸ, o  ϱ? Oblique 
        ؼ ̰͵ 繮üε,   ... ̰
         ri, ro   ִµ  reverse italic, reverse
        oblique  ǹ̸ ϴ.

      ʵ ( Setwidth Name Field )
           normal Ǿ ֽϴ. ̿ܿ condensed,
        narrow   ϴ.

     ΰ Ÿ ʵ(?) ( Additional Style Field )
        (Serif) 꼼(Sans Serif)   ΰ Ÿ
        ̸ Ÿ ִ ʵԴϴ.   츮  θ
        Ȱڷμ I, M     Ʒ ִ ð ª 
        մϴ.   ʴϱ? I   Ʒ ִ   
        ̽?   ð  ⺻ Ʈ
        (-kaist-*-johab-* ...) Ŵٸ   ȮϽ 
        ֽϴ.  ڶ ٷ ׷   ڸ մϴ.
        꼼 ׷   ڸ մϴ. Sans  ϴ
           Without ̶ ṉ̀ Դϴ. Sans Serif
        Ǵ Sanserif  մϴ.   nil  , ƹ  
        찡 մϴ.  Ʈ 캸ø ׻ 6°
        ʵ尡 ƹ   -- ̷  óǾ ִ   
        ֽϴ.

     Ȱ ũ ʵ ( Pixel Size Field )
          ϴ ʵμ Ȱ ũ⸦ Ÿ ʵԴϴ.
        츮   ϴ  Ƹ 10   20 ̰ ƴұ
        մϴ. Scalable Ʈ ش ϴ. Ӱ
         ֽʽÿ.  ̿ Ʈ Ʈ Ư ũ
        Ȱڵ鸸 մϴ.

     ʵ ( Point Size Field )
        ܵ 𸨴ϴ! :)

     X  ػ ʵ ( X Resolution Field )

     Y  ػ ʵ ( Y Resolution Field )
         X, Y  ػ󵵸 Ÿϴ.  75 dpi, 100 dpi
        Ʈ ġ ϼ̴ٸ  丮  Ȯغʽÿ. 75, 100
         ڰ  ֽϴ. Scalable 0 Դϴ.

      ʵ ( Space Field )
        ڿ Ȱ I M  ô.    ٸ? I
        ڴ Ȧ ̰ M ڴ ׶ ε, ǻͿ 
        Ȱڸ Ȱ 簢  ־ ϴ 찡 κԴϴ.
        ׳ ϱ ϴϱ. ׷ Ϲ 츦 m , Monospace
         ϸ, I M ڿ     ȭӰ ִ
         p , Proportional ʹڶ մϴ. ǹ ׸ 
           p Ȱڸ ? c  m  
        ǹԴϴ. 츮  ϴ Ȱڴ κ m Դϴ. 
        ϴϱ.

       ʵ ( Average Width Field )
         ״ Դϴ. ̶    帮 Ϳ
        ϸ  Ͻ   ̴ϴ. ѱۿ   
        ϴ.

      ʵ ( Registry Field )
         ʵԴϴ. ⿡     Ұν
          ϰڽϴ. adobe, dec, iso646.1991, 츮 
          iso8859, johab, johabs, ksc5601.1987  װԴϴ.
          Ʈ ǹϴ  ?  johab(s)   ڼ
        Ʈ̸, ksc5601.1987 ϼ   ƮԴϴ. Ϲ
        ڴ iso8859Դϴ.

     ڵ ʵ ( Encoding Field )
        ,  ʵ̱. 0, 1, 8, irv    ֽϴ.
         𸣴 ʵԴϴ. 13° ʵ Ͽ Ͻø
        ϴ.  iso8859-1, ksc5601.1987-0, iso646.1991-irv 
         ƮӸ ڵ   ֽϴ.

  5.4.   ؽƮ  

    캸 սô.

    

        #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, &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 );
        }

   

            gcc -o drawstring drawstring.c -L/usr/X11/lib -lX11

  ҽ    ʴ Ͻñ ٶϴ. :) ̹ 
  帰 κ   ٸ κи 帮ڽϴ.

  , Ʈ ᱹ   â ׸ ̹Ƿ GC  ʿ
  մϴ.  켱 GC  ϳ ߰?

         gc = XCreateGC( dpy, w, 0L, ( XGCValues* ) NULL );

  ׸  ߴ Ʈ   ߰  Ӹ ӿ
  øʽÿ.

     Ʈ  ( Font Loading )

           Լ  :

           Font XLoadFont( Display *dpy, char *font_name );

     font_name ڿ ٷ   ȴ XLFD  
     Ʈ̸ Ǵ Ʈ (alias) ֽø ˴ϴ. ϸ Font
       ȯմϴ.  ϸ  NULL ̰?

      fixed    X   ⺻ Ʈ
     Ͽϴ.   Ʈ Ǿ  ʴٸ X  ü
     Ƹ  ʾԴϴ.   ƽô Ʈ ̸ Ǵ 
     /usr/X11/lib/fonts 丮 ż  丮 fonts.dir 
     ִ ͵ غñ ٶϴ.

        Ƶ Ʈ غ? ׷ fixed  
     κ ٲ ʽÿ.

            -adobe-courier-medium-o-normal--25-180-100-100-m-150-iso8859-1

     ׸ ٽ ...

     ׷ ࿡ в ֽ Ʈ X ( Ȯ Ʈ
     Ͽ X Ʈ  xfs   ) ã  , Ǵ 
     ʴ   ߻ϸ Font  ȯ     Ȯ
     𸨴ϴ.

     ׸ stderr    ޼ µ˴ϴ.

          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

     Ʈ     α׷ֿ XLoadFont Լ 
     ʴ  ϴ.  XLoadQueryFont  ϴ Լ .
     :)  ... ׷  в  ܾ ϰڱ. ٷ 
      帮ڽϴ.  XLoadQueryFont, ̿  XFontStruct
       Դϴ.  ʹ Ȯ  ϱ 
     ñ ٶϴ.

     Ʈ GC  

           Լ  :

           XSetFont( Display *dpy, GC gc, Font font );

     Ʈ ID  GC  ϵ ûմϴ. ̷ ν
      µǴ ؽƮ GC  Ǿ ִ  ǥõǰ
     ˴ϴ.

     ׷  GC  ϴ  ׷ȿ    ϰ ִ
     ༮̶   ֳ׿. ٽ   սô! X  ׷ȿ
     ־ ߿  GC .... :)

      ؽƮ 

           Լ  :

           XDrawString(display, d, gc, x, y, string, length)
                        Display *display;
                        Drawable d;
                        GC gc;
                        int x, y;
                        char *string;
                        int length;

     Drawable  Window   Pixmap   ? , â
     ȿ ǥ ֽð ڿ string  Ѱ ݴϴ. ׸
       ž Ұ ڿ ̰  length 
     ؼ ־ּž ȴٴ Դϴ.

     ,   α׷ ҽ Ű ȭ鿡 µ 
      ̻  ߰ ̽ϱ? :>>

     . ׷ϴ.  "Hello, Linuxers! Never Seen :)"  ڿ
     ֱ  ޺κ ,

     ó
        󸸻 ۵ ߿ϰ  ߿  ̸ ŵδ
        ͵ ߿ϴٰ մϴ. /* ó */ ּ 
        κп XUnloadFont()  ϰ ֽϴ.   
          α׷   ڵ ̷
        ̱ մϴ. , в   α׷̳ 
        ׷ α׷ ÷ ϽŴٸ  ó
        ֽʽÿ.

  6.  X α׷  : ѱƮ

  , غ? X 쿡 ϳ  Ǵ ڿ ϱ
  ؼ    ľ մϴ.
  1. ڽ ϴ Ʈ( XLFD ̵ ̵ ... ) ˰
     XLoadFont Լ X  Ʈ(xfs)κ Font ID
     ޾ƿɴϴ.

  2.  ID   ׷ ؽƮ(GC) մϴ.

  3.   XDrawString Լ Ἥ ϴ â ϴ ġ
     ڿ ѷݴϴ.

    ?  ̰ ȭнϰڽϴ. ׸ ѱ
  ¿ Ͽ ˾ƺ .

  6.1.  ѱ ¿    ̾߱

  6.1.1.  ϴ  ̾߱

  ǻ͸ 鼭 츮     ߿ ϳ ٷ ѱ
   Դϴ. ߸ ġ  츮 ѱ ڵ /ϼ 
   û    KSC5700 ڵ, M$  
  Ǿ ϰ ִ ڵ, M$ 翡 ѱε ϴ  
     95  NT   ִ Ȯϼ( Ǵ
  տϼ, ̸  Ǿ ü  ) ֽϴ. 츮 ѱ
    ΰ ִٰ ص  ƴմϴ. ǻ â( 
  Ļ     Ʒѱ    ) 
  ȸ翡 ռϰ ־ ѱȭ   ߰ſϴ. ׾
   翬 ̾.  ο    ϼ 
  ڵ п ϼ̶  źϿ,   ѱȭ 
    ϴ. Դٰ ѱ   Ʈ
  ȾƸԱ  Ⱑ Ǿ ҽϴ. ѱȭ  
   ̼ ٸ  M$  쿡  ѱ
    .

  鿡 ѱȭ    ȸ ϴ! ٷ 츮
   ̷ؾ մϴ.    ֱ ٶ
  ʽϴ. ٷ  츮   Ƹٿ ѱ 
  ô. ѱ   Һڸ ϴ 鿡 
    ð̶ մϴ.

  6.1.2.  ѱ !  ٸ?

    ٷ  θڴ 1 Ʈ ǥϰ  ݸ,
  ѱ, ߱ Ϻ    2 Ʈ ̻ ʿ
  Ѵٴ Դϴ.  1 Ʈ θڸ ϴ Լʹ ٸ
   Լ ϸ, ڿ  ణ  ľ մϴ.

    XDrawString Լ ſ XDrawString16 ̶ Լ 

     ڿ ״   , XChar2b  ü
     ڷ ؾ Ѵ.   ڿ --> XChar2b 迭
     ٲִ   ʿ.

     ѱ  ؾ ϹǷ  XDrawString , ѱ
     XDrawString16 Լ  ϴ. ׷ٸ 츮  C
     ڿ  , ѱ ѱ۴ س ׷ ۾
     ʿ.

   ܿ Ʈ о , GC ϴ Ͱ   
  ϴ.   ϳ ִٸ X Ʈ(xfs, X 츦 ϸ
  츮 𸣰  ֽϴ ׷ Ͻ ʿ ) 2 Ʈ 
  ϴ ε,  2  Ʈ  ʴ X  ֳ?
  :)

  6.1.3.  X 쿡 ѱ  ϴ 

  X 쿡 ѱ ø̼ ϴ  ũ 2 
  ֽϴ.

      , ׸  ȶġ  ,  
     κ ѱ õ äϰ ִ , ߸ ϸ  Ϻ
     ѱ   : ٷ  α׷ ѱ  ϴ
     Դϴ.    α׷ ҽ Է/¿ 
     κ ŷϴ Ŀ  ̰ ֽϴ.

     ) , Emacs, ѱ fvwm 2.*   ټ α׷

     α׷  ʿ ,  츮  3.1 
          : ! X 쿡 ϳ ϵ
     Է/  ( Input/Output Method )    
     õ鿡 ϴ .  , ѱ   ʰ, ¿
      ⺻ Ģ ָ Ǵ Դϴ. ŸԵ  X
     쿡 ̷ ѱ  鿡   
     츮  ִ XFree86   ̷  ϴ.  ̰
       ڸ X  Internationalization   I18N
      L10N ̿Ѵٰ մϴ. (  I18N 
     Internationalization ̶ ܾ ó I  ǳ N ̿ 18
      ڰ ֱ  ׷  ̰, L10N
     Localization ̶ ڿ մϴ )  IBM AIX 
      Ẹ̴ 𸣰ڱ.     Ͽ 
     شٴ   ĩ ߸   ͸ ѱ ǰ
     ϴ:)  X11 R6   ȯ ־ ֽϴ.
     ...

     ) ?

  ̿ܿ 츮 ׿ ַ Ͽ Ѹѱó HanX  ϴ
   ̿ؼ ѱ   ֵ(¸) ϴ ĵ ֽϴ.

  츮    /  ο Ǵ  ⺻
  ѱ Դϴ.    ߿  Դϴ.  
  XFree86     ѱ ý žϿ α׷ ߿
  ѱ ó Ҿϴ ð  Ƴ  ֵ ؾѴٰ Ͻϴ.

  6.2.  ѱ  

  6.2.1.    ΰ?

   X 쿡 Ǵ ѱ Ʈ  ũ 3   
  ֽϴ.  1 °δ  ֿϽô   ƮԴϴ. 2
  ° Ʈ, ѾƮ  ϼ ƮԴϴ. 3 °  ϼ
  Ʈ̸鼭   ʹ  ϰ ٸ ó ľ ϴ
  ﺸ Ʈ ֽϴ.

  ̷ پ Ʈ   پ Ʈ  ۾ ʿ
  ǹ մϴ.

   ϴ ⼭   2 ° 츸 帮 ϰڽϴ.
  ̷ Ʈ 1 °   Ʈ  ٸ   Ǹ
  Ҿؾ  ŭ  ̾߱Ⱑ ʿϱ Դϴ. (  ﺸ
  Ʈ     ... )

  , ׷  ϼ  Ʈ  ִٰ ϰ
  ϰڽϴ

   Լ  : <X11/Xlib.h>  

    XDrawString16(display, d, gc, x, y, string, length)
               Display *display;
               Drawable d;
               GC gc;
               int x, y;
               XChar2b *string;
               int length;

  츮 ѱ Ʈ  ѱ ϱ ؼ XDrawString ̶ 1
  Ʈ  Լ  ʰ  16̶ ڰ  Լ
  ϰ ˴ϴ.  ׸  캸 XDrawString  char *
  ̾ κ ⼭ XChar2b *  ٲ . 츮 ⼭
  ο ڷ ؼ  ˾ƺ մϴ. :<

         typedef struct {         /* normal 16 bit characters are two bytes */
                   unsigned char byte1;
                   unsigned char byte2;
          } XChar2b;

  츮   ǥ  2 Ʈ ǥ   ǰ 
  ǥ̶     ϴ. ѱ   "" ̶
  ڴ  2 Ʈ Ǿ ְ װͰ ϴ ϴ  ٷ
  XChar2b  Դϴ.   츮 char *  迭 XChar2b * 
  迭 ȯ ֱ⸸ ϸ ˴ϴ.  ٵ 츮   ִ
  ѾƮ Ʈ ,   ׷Դ  ʽϴ.

     ̷ մϴ. ϴ ''̶ ϴ 2 Ʈ
  ѱ  ڰ ִٰ ġ...

          char *Han = "";
          XChar2b HanX;

          HanX.byte1 = *(Han)   - 0x80;        /* ! 0x80  ְ ִ */
          HanX.byte2 = *(Han+1) - 0x80;

  ôٽ ׳ ѱ 2 Ʈ XChar2b  ü   
  ϴ  ƴ϶, 0x80  ־ Ѵٴ  ߰ 
  ʿմϴ.  (  ﺸ Ʈ 0x80    ʰ ׳
  ϴ ŵϴ. )

     ̽ϱ? ˰    ʳ? :)

  #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;
  }

    Ȱϴ. ̻  Ƿ 
  /usr/X11R6/lib/fonts 丮 Ϻ 丮 misc 丮 
  Ʈ ġǾ ־ մϴ.  ȭϸ hanglm16.pcf.Z Դϴ.
  fonts.dir ȭ 캸ñ ٶϴ.   ô ϼ 
  Ʈ ƹų ֽø ˴ϴ.  ȴ XLFD  ǥ
  Ǵ   Ʈ Ͽ fonts.alias   ֽð 
   Ͻõ  Ͻø ˴ϴ.    
  Ʈ fixed    ش˴ϴ. fonts.alias  տ ǵǾ
  ֽϴ.
  6.2.2.     ִ!

  ѱ۷  غô ?  ó  ҽ 
  ϸ鼭  ƴ ѱ µǴ   . ٵ
   ׷  ʾҽϴ. ̳ı?

   ҽ  캸ñ ٶϴ.  ø ѱ ѱ۴ ,
     ϰ ֽϴ. ̰  ǹϴ
  ϱ? !  ׷ϴ. 츮 ŸԵ ѱ۰  ȥؼ
   ô뿡  ֽϴ.   츮  ڷκ 
   ڿ ް ˴ϴ.

        char *MixedString = " ڳ ּҴ freeyong@soback.kornet.nm.kr Դϴ";

   ̰ڽϱ?

  XDrawString Լ  1 Ʈ ڱ Ʈ մϴ. ̿
  Ͽ XDrawString16 Լ ݴ 2 Ʈ ڱ Ʈ մϴ.
  ׷ٸ   ѱ۰   ִ 쿡 ڿ ֿ
  ˻ϸ鼭 ѱ۰   ־ Ѵٴ  ɴϴ. :<

   κ ణ  ʿ Ѵٰ   ֽϴ.  ѱ
  ȭ ߴ  μ  ߿մϴ.  ϴٺ
  츮 ȭ ǹ      ׿.
  Ư ǻ о߿ ־ ѱ۸ ߵǰ  ſ  ǹٸ
  ƹ װ  ʽϴ.

    Ʈ ε/Ʈ GC  /Ʈ  ̷ 
     Ʈ ؿ  óϽ  ִ ɷ
  ʿϰ ˴ϴ.

  6.2.3.  ѱ۰  ؼ 

  ⼭ʹ   մϴ.  ⿡  Լ
   ҽ ѱó κ    ѱ fvwm 2.0.42 ѱ
  óƾ ϰ ణ  Դϴ.   κ Ͻ
  ʿ ϴ.  ׸   Ƿ ǽô е ̹  ˰
  ô ̶ Ͻϴ.   ָϼž  κ ҽ ȿ
   帮ڽϴ.

  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 & 0x80) {
      /*
          ٷ 0x80  AND  ν Ʈ 8 ° Ʈ 1  Ǿ ִ
           Ȯմϴ. ׷ ̸  Ʈ  Ʈ   ѱ
          Ѵٰ   ֽϴ.
      */

        for (p = str; len > 0 && (*p & 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 && !(*p & 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 ٰ  
     ѱ Ʈ ߴٰ,     Ʈ ϴ ۾ ϱ 
     Դϴ.
  */

  ,  帮.   ũ ѱ α׷ Ͻ÷
  е  ⺻ ̾ ϴ Դϴ. ѱ  ڴ 2
  Ʈ̸, ù° Ʈ MSB  1  õȴٴ . ׷
  ѱ ƴ üũϴ  ⺻̸鼭   ٷ
  ƮŽũ  غ ̴ϴ.  0x80 ̴ϱ δ 1000 0000
  Դϴ.  ڿ &  ϸ   1  츸  ǹǷ  MSB
   1 ΰ ƴѰ ĺس  ִ Դϴ.

  ڼ  C å ð ƮŽũ  Ͻñ ٶϴ.
   ϰ  å Ŀϰ & ġ "C Programming Language" Դϴ.
  Ŀϰǰ ġ   ƽ? :)  𸣽ø  ˾ƺ.
   Ŀ شϴϱ :)

  6.2.4.  Ʈ  ߿  ˾Ƴ

  ѱ   ̷ Ʊ. ( ٵ ѱ Է   Ȳ
  ̴ϴ )

   ٷ ϴ  츮 ó  ִ  쿡
   Ʈ óϴ   Դϴ. XDrawString ̳
  XDrawString16 ̶ Լ 츮  ʾƵ Ʈ  Ư
   ڿ ڰ  ٷ Ÿݴϴ.    ̻ Ǵ
  ڿ? ٰ  ұ? µ ڿ ü  
   ִ...  ڿ   ϱ ؼ Ʈ
     Ǵ ʿ信     ڿ  
  ˾Ƴ մϴ.

  ٵ Ʈ    ִٰ ? . ½ϴ. װ X
   ֽϴ. 츮    ·μ XLoadFont Լ
  Ἥ Ʈ ID  ɴϴ.

  6.2.4.1.    

              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;

  츮 ϰ ϴ Լ ٷ 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  ȭϿ ãƺ  ϴ.

       /*
        * 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;

   Լ ϴ    Ϸ ϴ ڿ 
  ŭ   ΰ ϴ Դϴ. ڿ
  (height)  ϴ.

               ascent ع + descent 

   󸶸ŭ̸, Ʒ 󸶸ŭ ϸ ˴ϴ. ѱ descent
  = 0 :) ׷ ϰ ؼ ׻ ̷ ֽʽÿ.

   ڿ (width)  ұ?

               rbearing  - lbearing    Ǵ ׳ width  

  1 Ʈ ڿ ؼ XQueryTextExtents  ϴ.

  6.2.4.2.    

      ˰   ׻ X  û ؾ
  ϹǷ Ʈũ ε尡  Ÿ Ǹ, α׷  ֹ
  ˴ϴ. ׷ α׷ٿ α׷ ¥ 쿡 κ XLoadFont
   Ʈεϰ, XQueryTextExtents(16)  Լ  ʰ ٸ
   մϴ.

  XLoadFont ſ XLoadQuerFont Լ ô.

  XLoadQueryFont  Ʈ εϸ鼭 Query Ѵٴ ǹԴϴ.

               XFontStruct *XLoadQueryFont(display, name)
                            Display *display;
                            char *name;

  XLoadFontó Ʈ ִ  , ô ٿ 
  ȯǴ  Font  ƴ϶ XFontStruct  ڷԴϴ.

       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;

  ڷ    ϴ±. :)  ָϽ  Ʈ ID 
  XFontStruct ڷ fid  Ǿ ִٴ Դϴ. 
  Ʈ ID     fid  ϼ.

  XSetFont Լ Ͻ  ٷ Ʈ ID  ϼž߰?

  ϴ üٰ  Ʈ   Ƿ  
   ˾   X   ʿ䰡 ٴ  ֽϴ.

   XFontStruct ü  ø   Լ
  ؼ   ĳ  ֽϴ.

    XTextWidth16

         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;

  ־ ڿ( string )  ȼ  ˾Ƴϴ.

    XTextExtents16

              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;

   XQueryTextExtents16  ϴ.

    ⼭ ġ ϰڽϴ.  Ʈ  
  ׸  帮鼭 ϴ  ʿϴٴ  ±. 
  ø    Ƿ ׳ ½ Ʈ Property  
  κ  캸ñ ٶϴ.

  ׸ ѱ  ؼ  ҽ hangul.c κ 
  Ⱦñ ٶϴ. Ǵ ѱ fvwm 2.0.42 ҽ libs 丮
  ø HangulSupport.c   ֽϴ. װ 캸ô...

  7.  X α׷  : ̺Ʈó

  ݱ  üδ  α׷ ⿡ Ұ 
  ⺻ 鸸 , ʹ  ޶ Դϴ.
     α׷ֿ  غ Ǿϴ.

     "GUI α׷"  ٽ  "̺Ʈ
  event"  Դϴ. ̹  α׷   غ 
  ִ е, ׸ Ư    C  α׷ غ
  е ݺ 帮   ⿡ Ͽ ݹ Ͻ  
  ̴ϴ.  𸣽ô ʺ 쿡 ϴ    
  Ƿ   α׷ ε "̺Ʈ" ó  Ư
  α׷ Ÿ ´ٴ  ϳ  ֽñ ٶϴ.

  7.1.  ̺Ʈ ó İ  ó  

  켱  ó Ŀ ؼ ˾ƺ ϰڽϴ.

  C    θϴ.  Ͽ  ִ! 
  ΰ   𵨷 ϰ ְ ᱹ    ΰ
   ׻  --<    ϴ  ȭ, ö
  ȭ̴ ε ׻  Դϴ.   ϰ ִ
      ϴ. ׸ װ ׻  α׷
  ⺻̸ ߿ ̺Ʈ ó ̶    ۰ 
  ᱹ ڱ׸  ó ĵ ̶   ֽϴ.

    ũƮ     Է ް    ó
   α׷  Դϴ.

  ׿ ؼ ̺Ʈ ó  " ư,  Ŭ  𸣴
   콺"  Ư¡ մϴ.  ý Ǹ鼭
  α׷ӵ    ϱ . ü 
   ߰ϱⰡ ٴ  Դϴ.  ư   
  ư      ϴ.  ڴ ƹ
  Ű  ư ϴ. ü 콺   
    ϴ.

   ̷ϱ  X  α׷   ϰ ٸ
      ϴ.  ߿ ø ƽð ̺Ʈ
  ó̶ ͵  ϴ. ׸  α׷  
  . ׸ ̺Ʈ ó  ٵ C++   Ʈ
  Ƽ α׷    ½ϴ.  X 
   C α׷  Ǿ ֽϴ.  C++  ¥ 
    C++  ¥   ˸´ 𸨴ϴ.   X
  α׷ ϴٺ OOP  Ÿ  ϴϱ.

  ̺Ʈ ó  α׷  ̷  մϴ.

  ư   .  ư   Ư Լ
  ش.  ׸  츮 ư ⸸ ٸ. ׸
  ư     1  ư , 2  ư 簢,
  ׸ 3  ư  ׸ Ѵ.   ü  
   װͿٰ Ư  οϴ Դϴ. ̷ α׷
  ̱  ־ C  ־ ̴̽ ϴ  
  Դϴ. Ͻʽÿ.   ư ϴ. ׸ 
  ưٰ ϴ  ϳ οմϴ.   մϴ.
    "Exit" ư  츮 α׷ ϸ ˴ϴ.

  7.2.    X  óմϴ. 츮 ...

  ڽ α׷ϴ ÷ ϴ   ߿մϴ. 95
  α׷ӵ 95 ϰ, X α׷ӵ X 츦 Ͻϴ.
  ڴ M$  忡 ̱ٴ  ϰ  X   ü
  ɷ° ɼ Ͻϴ. 95 ü  ʰ? :)

  X 찡   ž ƴٴϴ 콺, Ǵ  Ÿε 
  𸣴 Ű,   Ϳ ؼ   ʿ䰡 ϴ.
  콺   ̰ ִ ׸ Ű Է   
   ؼ X  մϴ. ״ ġ п ī и
   ͵ ϴ.   α׷ Բ ǰ ִ
    â մϴ. ü  â 콺 Ŭ
   ؼ  ʿϴ.  â Ŭ
  ̷ X  ˾Ƽ  α׷ "̺Ʈ" ϴ.

    Ű Է ʿ.  콺 ۵ϴ
  α׷̹Ƿ "Ű Է̶ ̺Ʈ" 뺸 ƴ޶! 
  ûϸ X  ˾Ƽ Ű Է п  ʽϴ.

   while  ϳ  ѷ 鼭  ̺Ʈ
  ٸ װ 콺 Ŭ ƴϸ Ű Է, 콺
  Ŭ̸  ° 콺 ư   ÿ   Ȯϰ
  ˸´ ൿ ָ ˴ϴ.   α׷ ϴ. 
  α׷    â¿ ޸  
  95 X  ϴ.   X 
  α׷ C  ϶  ϴ. Tcl/Tk    ũ
  鵵    ް ֽϴ.  C α׷ 
  X  α׷ Ѵٴ  п  źź ʸ
  ְ ٸ  α׷ֵ    ִ ڽŰ شٴ 
  帮 ͽϴ.

  7.3.  Ϲ ڵ ¸   ô.

   ҽ Ϻ ҽ ƴ϶ ׳  ҽ Դϴ.

   Display display;

   XEvent xe;                             /* ̺Ʈ ó ü */
   Window window1;

   /* X   մϴ. XOpenDisplay Լ  */

   /*  â ϳ Ӵϴ. */

   /* ϴ ̺Ʈ  մϴ */
   XSelectInput( display, window1, StructureNotifyMask | ExposureMask
                                  | ButtonPressMask );

   XMapWindow( display, window1 );

   /* ⼭  α׷  ˴ϴ */

   while(1)       /* WHILE   */
   {
          /* ̺Ʈ ⸦ ٸ ֽϴ */
          XNextEvent( display, &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   */

   帰  Ӹ ӿ ׻ ־ մϴ.  Ÿ
  鼭 ׸ ȭǿ       ־ 
  ģ    ٶ󺸰 鼭... ῡ...

  ̵  ̶  ֽϴ. ׷  ġäô
    ߿մϴ. ׷   ˾ư սô.

  7.4.   м

       ٷ XEvent  ο ڷԴϴ. C
  α׷̵   α׷ ⺻ Ҵ "ڷ
  ˰"Դϴ. ڴ  ̶ ġ ϴ ڱⰡ ϴ
  ڷ ؼ ͼ  ʰų  ˰ Ѿ ȴٸ
  α׷ ݿ ͼ ʰ   ذ Ͱ  մϴ.
  ڷ ؼ  ˾ƺ սô.

       /*
        * 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;

  XEvent  <X11/Xlib.h> ǵǾ ֽϴ.   Xlib.h
  ȭ    ȮϽʽÿ.  ȭ 
      о   ?

  ôٽ XEvent  ü( Ͼ union )Դϴ. ü 
  𸣽Ŵٸ ϴ X  α׷ νð     C
  α׷ å ü ؼ Ͻñ ٶϴ.

  XEvent ü  ü  ϴ.

  typedef union _XEvent {
          int type;               /* ! ù°  Ѵ. */
          ...
          X*Event <>
          ...
          long pad[24];
  } XEvent;

  ü ũ ü    ū ڷ ũ ϴ.
     XEvent  long  ڷ 24   ũ⸦ 
     ֽϴ. ׸ Ƹ   ڷ int type ̰?

  ߰    ִ X*Event ڷ   ô.
  XAnyEvent, XKeyEvent, XButtonEvent, XMotionEvent, XExposeEvent 
  X  ϰ Event  ̸ ü ֽϴ.  ü
  ڷ   Xlib.h  ǵǾ ֽϴ.   캸.

  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;
  ⼭   ü   Դϴ.  ణ 
   װ Ͻø ˴ϴ. ε üε ü 
   ذ鼭 ʽÿ. ⼭    س X
  α׷ ֽϴ.

  XAnyEvent     Ӹ ӿ ְ ٸ X*Event ü 
  캸ʽÿ. ׷   ü XAnyEvent   
   ִٴ    ֽϴ.

  7.5.  ̺Ʈ ڷ 

   ̺Ʈ ü ǥϰ ִ ü 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 
  ǵǾ ֽϴ.

               #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

  7.6.  â ڱⰡ ϴ ̺Ʈ ϱ

   ҽ ø   κ ֽϴ.

         XSelectInput( display, window1, StructureNotifyMask | ExposureMask
                                         | ButtonPressMask );

         XMapWindow( display, window1 );

  XSelectInput̶ Լ ̴±. ο Լϱ  
  ξ߰?  man  øž մϴ. man XSelectInput

        NAME
              XSelectInput - ̺Ʈ Է մϴ.

        SYNTAX
              XSelectInput(display, w, event_mask)
                    Display *display;
                    Window w;
                    long event_mask;

        ARGUMENTS
              display    X   ID
              event_mask ̺Ʈ Žũ
              w          ̺Ʈ   â ID

  Žũ(Mask) ϴ    ߿ C α׷ 
  Դϴ.  𸣽ô   C α׷ å ʽÿ. 
    Ŀϰ & ġ     C α׷
  ؼåٵ پ "C α׷ "  å մϴ. ׻
   ٴϱ⿡  ϴ.     ư  
  .

   츮  â XSelectInput ̶ Լ ؼ ڱⰡ
  ɰ ̺Ʈ   ִٴ    ֽϴ.   OK
   CANCEL ư ǥϴ â 忡 Ű Է̳ 콺 ̵
     ʿ? ư ȳ ȴȳ Ȯϸ ˴ϴ.

        StructureNotifyMask | ExposureMask | ButtonPressMask

  Ʈ OR    ϴ Դϴ.

        #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)

   (1L>>2)  ǥ ͼž մϴ. ε  
  ⺻  ũ̴ϱ.
  ׷   ?

      
         ư ϳ  Ŭϸ Hello, Linuxers 
        ڿ   ϴ  帮ڽϴ.

     #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, &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;
     }

       event.example.c  ̸ ϰ  
     ݴϴ.
           gcc -o event.example event.example.c -lX11 -L/usr/X11/lib

       â  ѱ µ  ִ  ֽʽÿ.

           ./event.example

       
        XSelectInput Լ     ͵ ̹ 츮
         ˰ ִ Դϴ.   ϰ â ϳ ϴ.
        Ʈ ° 簢 ׸⸦  ̹Ƿ GC  δ ͵
         ʽϴ. ý ⺻ fixed Ʈ εϰ GC õ
        ׷ صӴϴ.

        1. â MAPϱ  켱 ϴ ̺Ʈ д.
           XSelectInput Լ ؼ 츮 ϴ âٰ 츮
             ̺Ʈ  صд. ׷  ̺Ʈ
           ׳ õǹ . ⼭ 츮 ϴ  ϴ
           ־ ߿ ̺Ʈ ϳ Expose ̺Ʈ, 콺 ư
           ŬǾ° ˾ƺ ̺Ʈ ׸ â  콺
           Ͱ °, Դ° ˷ִ ̺Ʈ
           Ͽϴ.

               ExposureMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask

        2. Expose ̺Ʈ ߿伺 Expose   ״ "
           巯" ǹԴϴ.  ýۿ   
            ϳ  ȭ ÿ  â ϰ ִٴ
           Դϴ. â ̸ θ ⵵ ϰ ٽ
           Ÿ⵵ ϸ  Ǿٰ ٽ · ƿ⵵
           մϴ. ũⰡ ñ⵵ .

           Ư ٸ â ȴٰ ٽ Ÿ   鿡 ؼ
            κе ٽ ׷ մϴ. ׷ 
           Xt/Ƽ  ؿ   ϼ 𸣰 Xlib
            ̹Ƿ  ΰ 鿡  ٰ ٽ
           Ÿ   κ ־ մϴ.  Ƽ
            ͵ ̹ Xlib  Լ Ἥ   ٽ
           ׷ִ ۾  ְ  Դϴ.

           Expose ̺Ʈ  â  ó XMapWindow Լ
           ؼ ! ϰ Ÿ  ó ߻մϴ. κ
           α׷ â  ó ! ϰ Ÿ  ڱ ڽ 
            ġմϴ.  鿡  ٰ ٽ ! ϰ
           п Ÿ  ϰ  κ ־
           մϴ. ⼭    ó߽ϴ. Expose
           ̺Ʈ ߻  ٽ O K  ۾ ִ .

        3. while ( True )  ؼ ̺Ʈ ó   ϴ.
           XNextEvent Լ ϸ  ϴ ̺Ʈ  ϳ
             ٸϴ. ̺Ʈ Ȼ  ֽϴ.
           ׷ٰ  Ķͷ ־ XEvent üٰ ̺Ʈ
             ݴϴ.

            switch ( xe.type )

     , ̺Ʈ     װ 콺 õ
      Ű õ  ˾ƾ  ʿ䰡 ֽϴ. װͿ
     ° ϰ óؾ ϴϱ.

            case Expose:

               Expose ̺Ʈ ߻ÿ ϰ ڱ ڽ ׷ְų 
               ־ մϴ. XDrawString Լ "O K" ݴϴ.
                XSetForeground Լ   ݴϴ.

            case ButtonPress:

               ư (  ư̵  ʰ ) exit(1) մϴ.

            case EnterNotify:

               콺 â   XDrawRectangle Լ 簢 
               θ ׷ݴϴ.  콺 Դٴ  Ȯϰ
               ֱ ؼԴϴ.

            case LeaveNotify:

               콺  ٴ  ֱ   Ͼ
                ,   ؼ 簢 ׷ݴϴ. ׷ 
               ȿ ?

            default:

                  ̺Ʈ մϴ.

           ִ ư ϳ 
  ؿ ذ Դϴ.  ư Ŭϱ Ͽ 콺
    ư ü  Ѵٵ ϴ    ֽϴ.
  ٷ ̺Ʈ ° ڱ  ׸ Ǵ Դϴ.  
  ?

  ư ϳ  ҽϴ.  ̺귯   ƴ϶
     ִ ൿ ϴ ư  
  ֽϴ. ٸ  䳻   ִ  ϴ , ̰
   Լ Xlib   ʰ  ̷   Դϴ.

  8.  X α׷, X  ̿ 

    ̱   Ŀ Ҿ X 쿡 
  ɵ   ذ    ޽ϴ.

  츮 ѱ ̻     츮  ùٸ ǥ̶
    ֽϴ. ڱ    ʰų   Ű
  ʴ   󿡼   ƴϰڽϱ? ׸ ڱ 
   ʴ  ü  ںν   ?
  ǻ  ȭ ô뿡  ִ 츮 ѱ  
  ̾޾   Ű ȭѾ  ִ  
  ϴ. ּ  ȽŰ    ؾ  
  ƴϰڽϱ?

     ϰԵ ׻ ̷  ڽſ ϸ鼭 ǻ͸
   Դ  ϴ.

  "ѱ  ȵ... ... ѱȭ ϸ  ƴϾ... ѱ
  ȵ..."

    ͸ ѱȭ Ų M$ ̳ ̱   
  ȾƸ԰ ִ ѱ ǻ ڵ鿡    ƴ϶
  "ѱ" ü ̰ ־ٴ Դϴ.

   1 Ʈ ڱǿ ź ǻͶ ȯ ӿ  ο
  ϰ ִ  Դϴ.      ִ ̶
   ٸ   س ̴ϴ.    ϶  
  鿩  ð ƺξ α׷Ӱ Ƿ  ƴұ?

  1 Ʈ ںٴ ణ   ġ ׷  ͵
  ƴմϴ.     ѱ  θ Ź 
  ߴ ﵵ ϴ.    ѱ  ü ع 
    ־  Ʈ  Ȳ   ʴ
  ڴٸ  ȭϰ ҽϴ.

  X 찡 ϰ ִ  ɵ  Ȱϸ鼭 ѱ 
  ǥ  ִ  ؼ ϴ ¿  κ ٽ  
  Ұص帳ϴ.

  8.1.  X  ü    ѱ 

  8.1.1.  X 쿡 ѱ  Ŀ Ͽ

      : XDrawString16 Լ ̿

      : XmbDrawString, XwcDrawString Լ ̿

  켱   , ׸ ѱȭ  ڵ鿡
  ϰ ִ μ   Ǵ  ٷ X 
  ý ϰ ִ ȭ(I18N, Internationalization)
  ȭ(L10N, Localization)  ϴ° ο ޷ֽϴ.
  XDrawString16 Լ ϴ  Ұ 帰  ִ 
  дϴ.    ̴ٸ    оñ ٶϴ.

    ѱ ڿ( char  ) ѱ۰  (
  Ʈ ֻ Ʈ  Ǵ ) ѱ κ XChar2b  迭
  ־ 2 Ʈ Լ XDrawString16 Լ ϰ  κ
   1 Ʈ  Լ XDrawString Լ ϴ 
  մϴ.

  ̹Ƿ  ŷӴٰ    ϴ. ѱ۰ 
    쿡  Ű澵  ϴ. ڿ о 
  ѱ µǴ ȭ  ϰ    ϰ  
    ٽ ѱ ϰ...

    ٷ X  ý R5  ϱ 
  ȭ/ȭ  ϴ Դϴ.  1 Ʈ ڱ̶ 
     ASCII ڷδ Ұ ( ,
  Ͼ ... ) ʺ ASCIIδ õ  2 Ʈ ̻ ڱ
  ѱ, ߱, Ϻ   ý   ǵǸ鼭
  α׷ӵ   α׷  ֵ 
  Դϴ. ȭ α׷   ȯ濡   ֵ
  ϰ α׷ϴ  ϸ ׷ ȭ α׷ Ư
   ȭ   ֵ Ű  ȭ θϴ.

  ̹ ֶ󸮽 HP-UX   X 츦  е ̰ 
  ϴ ƽ   ̴ϴ. 95   , Ͼ,
  ѱ, ߱, Ϻ ̷  ذ鼭 ε 
  Ͱ  ٸϴ.    ϳ  X  ý
     ϵ Ǿ ֽϴ. α ȭͰ ƿ
  ޶.

  8.1.2.  X  ý ϴ I18N, L10N ̿ϱ

   ˾ƺ  ٷ  ѱ ¿  Դϴ.

    ľ ϴ ؼ ˾ƺ սô.

     LOCALE ͺ̽   ϴ°?
        н ý   ϴ X  ý ƴ
        ANSI/POSIX ԰   ֽϴ. κ  н
        ƴ   FreeBSD   ü ϰ ִ 
        ˰ ֽϴ.   GNU NLS   α׷ ޼
        ȭ ϰ  е   츮 翡  ǰ?
         е鿡 ݷ ϴ.

          C ̺귯 ؼ  𸣱 
        Ȯϰ 帱  ϴ. C ̺귯 5.4.X  Ͽ
          ִٰ ϴ    Ȯ 
        ʴµٰ    ο췹 α׷ ƴ϶...

        ι°δ ü ü    X 
        ü ذִ  ֽϴ. ٷ  X  ü
        ϴ   Ͽ ذ Դϴ. ڳ 
         ߿ѵ ϴ X  üε  شٴ 
         ÷ΰ   X 츸 ưٸ 𼭵
         α׷  ϸ    ִٴ
         ֽϴ.

         C ̺귯   ð    غ  
        ϴ.    پֱ⸦ ٶ Դϴ. 
         ü̹Ƿ ڿڰ   ⸦  ʰھ?
        ƽþ ̵  پ   ü 
        ü ٽ ¾   ϴ.

      X  ý մϴ.
        ANSI ԰ݿ  ٿ ϴ. C   е setenv
        LANG ko   ǥ Ẹ   ̴ϴ.   ANSI
        ԰ setlocale Լ õ   ڼ ϱ 
         ƴϹǷ  غñ ٶϴ.   ߿ ̽ 
        ϳ  и  ϴ.

        ϴ /usr/X11R6/lib/X11/locale 丮  ִ
        Ȯغʽÿ.   ǿ X  ø 
        ġߴٸ ־  Դϴ.

           C/             iso8859-3/     iso8859-8/     ko/            th_TH.TACTIS/
           compose.dir    iso8859-4/     iso8859-9/     koi8-r/        zh/
           en_US.utf/     iso8859-5/     ja/            locale.alias   zh_TW/
           iso8859-1/     iso8859-6/     ja.JIS/        locale.dir
           iso8859-2/     iso8859-7/     ja.SJIS/       tbl_data/

     ko  丮 ־ մϴ.  ȿ XLC_LOCALE ̶
     ȭ ֽϴ.  ȭ ȿ ѱ ¿   
     ֽϴ.

      LANG    ⺻ C 丮 ִ 
     մϴ.

      ȭϵ  ִ  Ȯ Ŀ    ־
     մϴ.

      迭̶...

                  export LANG=ko

     C  迭̶...

                  setenv LANG ko

  ߿  α׷ ؼ ׳ LANG  ̻ ja 
  ٲ㺸ʽÿ.  ׷ ִ   Դϴ. 
  ׽ ɼ ޴ ڵ ɼǸ ٲָ ؽƮ 
  ѱ۷ ٰ Ϻ  ϴ   Ͻ  
  ϴ.

   α׷ غô.

  α׷̶   ְ . ׸ Ȯ (
     :> ) δ  ϴ.

   ռ Ÿ ô   ̴ϴ. ϴ  غ
   ȴٴ  ȮϽñ ٶϴ.

                          X Locale  ̿ ѱ 

  */
  #include <stdio.h>
  #include <X11/Xlib.h>
  #include <X11/Xutil.h>
  /*
  #include <locale.h>
  */
  #include <X11/Xlocale.h>

  void DrawCenteredMbString ( Display *, Window, XFontSet, GC, char*, int, int,
                                  int, int, int );

  int
  main (argc, argv)
          int argc;
          char *argv[];
  {
          Display *dpy;
          Window  w;
          XFontSet fontset;
          char **missing_charsets;
          int num_missing_charsets;
          char *default_string;
          int i;
          GC      gc;
          XEvent  xe;

          char *program_name = argv[0];

          if ( setlocale (LC_ALL,"") == NULL )       {
                  (void) fprintf (stderr, "%s: cannot set locale.\n",
                  program_name );
                  exit (1);
          }

          if ( !XSupportsLocale () ) {
                  (void) fprintf (stderr,"%s: X does not support locale %s.\n",
                  program_name, setlocale( LC_ALL, NULL ) );
                  exit (1);
          }

          if ( XSetLocaleModifiers("") == NULL )    {
                  (void) fprintf (stderr,
                          "%s: Warning: cannot set locale modifiers.\n",
                          program_name);
          }

          dpy = XOpenDisplay ( NULL);
          w   = XCreateSimpleWindow ( dpy, RootWindow( dpy, 0 ), 50, 50,
                                          100, 50, 5, BlackPixel( dpy, 0 ),
                                          WhitePixel( dpy, 0 ) );
          gc = XCreateGC ( dpy, w, 0L, ( XGCValues * ) NULL );

          fontset = XCreateFontSet (dpy, "-*-*-*-*-*-*-16-*-*-*-*-*-*-*",
                          &missing_charsets, &num_missing_charsets,
                          &default_string);
          if ( num_missing_charsets > 0 ) {
                  (void) fprintf (stderr,
                          "%s: The following charsets are missing:\n",
                          program_name);
                  for ( i=0; i < num_missing_charsets; i++ )
                          (void)fprintf (stderr, "%s:   %s\n", program_name,
                                  missing_charsets[i]);
                  (void) fprintf (stderr, "%s: The string is %s", program_name,
                                  default_string);
                  (void) fprintf (stderr,
                                  "%s: of any characters from those sets.\n",
                                  program_name);
                  XFreeStringList (missing_charsets);
          }

          XSetLineAttributes ( dpy, gc, 5, LineSolid, CapRound, JoinRound );

          XSelectInput ( dpy, w, ExposureMask | ButtonPressMask
                          | EnterWindowMask | LeaveWindowMask );

          XMapWindow ( dpy, w );

          XFlush ( dpy );

          while ( True )
          {
                  XNextEvent ( dpy, &xe );

                  switch ( xe.type )      {

                  case Expose:
                          printf ("Expose ̺Ʈ ߻߽ϴ.\n");
                          XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) );
                          DrawCenteredMbString ( dpy, w, fontset, gc,
                                          "ȳ Hello",
                                          10, 0, 0, 100, 50 );
                          break;
                  case ButtonPress:
                          printf ("ư ̽ϴ!\n");
                          exit (1);
                          break;
                  case EnterNotify:
                          printf ("콺 â  Խϴ.\n");
                          XSetForeground ( dpy, gc, BlackPixel( dpy, 0 ) );
                          XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 );
                          break;
                  case LeaveNotify:
                          printf ("콺 â  ϴ.\n");
                          XSetForeground ( dpy, gc, WhitePixel( dpy, 0 ) );
                          XDrawRectangle ( dpy, w, gc, 0, 0, 100, 50 );
                          break;
                  default:
                          printf ("𸣴 ̺ƮԴϴ. մϴ.\n");
                          break;
                  }
          }
          return 0;
  }

  void
  DrawCenteredMbString (dpy, w, fontset, gc, str, num_bytes, x, y, width, height )
          Display *dpy;
          Window w;
          XFontSet fontset;
          GC gc;
          char *str;
          int num_bytes;
          int x,y, width, height;
  {
          XRectangle boundingbox;
          XRectangle dummy;
          int originx, originy;

          (void) XmbTextExtents (fontset, str, num_bytes, &dummy, &boundingbox);

          originx = x + ( width - boundingbox.width )/2 - boundingbox.x;
          originy = y + ( height - boundingbox.height)/2 - boundingbox.y;

          XmbDrawString (dpy, w, fontset, gc, originx, originy, str, num_bytes);
  }

  ,  غ սô. ణ ǰ ʿմϴ.

   α׷   ϶  ϴ. ( Ȯ
  ... )

  ý ؿ  ϴ 쿡   ؾ
  մϴ.

               gcc -o test_locale test.locale.c -lX11 -L/usr/X11/lib

   ý 쿡 X  ü   ̹Ƿ
    ־߸ մϴ.

               gcc -o test_locale test.locale.c -DX_LOCALE -lX11 -L/usr/X11/lib

    غ ϰڽϴ.

     ý  ϴ°?
        setlocale Լ Ἥ ý  Ǵ X  ý
          ϴ ο ؼ ˾ƺϴ. Ǵ
        ÷ȿ   ʴ´ٸ ٸ ġ ϵ
        ƴϸ  ؾ  Դϴ.     
        ״ϱ.

            setlocale (LC_ALL,"") == NULL   Ȯ ϰ ֽϴ.

     X      Ȯ
        XSupportsLocale Լ XSetLocaleModifiers Լ Ͽ
         θ ϴ.

         Լ "X Է "  ̹Ƿ μ
        帱       ɼ
        ϴ.  "X Է " ۿ ؼ  Ұ
        ص帮 ϰڽϴ. ñ    ׳ 
        ǻ X  ø Volume One Xlib α׷ Ŵ
        ø ˴ϴ.

     Ʈ(FontSet)̶ ....
        Ʈ̶   ״ Ʈ  Ʈ մϴ. 
        Ư  ڵ忡 ´(   ASCII, ISO8859-1, EUC-KR,
        ISO-2022-KR  )  Ʈ ̹ õǾ ־  
         ְ?  ȯ  LANG  ϴ ڵ ŸϿ ´
        Ʈ  Ʈ ־ մϴ.

        Ƽ α׷ غ е̶ Ʈ̶ 信 ؼ
          ƽ ̴ϴ. ϴ X   ̿ϴ 
        Ʈ Ѵٴ  Ȯ Ƽž մϴ.  
        ϰ ϴ.

        XCreateFontSet Լ ̿.

        ι° μ ׳ -*-*-*-*-*-*-16-*-*-*-*-*-*-* ̶ XLFD
         Ʈ ־Ƿ 16 Ʈ Ʈ ãƳ
        Ʈ¿ ϰ ˴ϴ.  16 Ʈ Ʈ ٸ 
         Ʈ ãƼ X  ü ϸ ݴϴ. 
         X    κε... 2 Ʈ û 
        Ʈ ϸϰ   ġ X    
         Ͼϴ.  Ʈ  ȯϴ û ð
        Һϰ ֱ .  ڸ 15 ٸ ڷ ٲپ 
         غñ ٶϴ.      ̴ϴ.

     ڿ   XmbDrawString Լ ̿
         DrawCenteredMbString    Լ  Ƽ
        Ʈ ڵ ϴ  Լ XmbDrawString 
        Ͽϴ.   ô ٿ   
        Լ Ͽ ѱ ѱ۴    
         ʿ䰡 ϴ. -_-

        ѱ ڵ 2 Ʈ ڸ ׳  ˴ϴ.   
         ġ ϱ Ͽ XmbTextExtents Լ  
        Ͽϴ.

  9.  ϸ鼭

     ٷ Ʈ  "X Է¼" ô
  Ȳ ߾ ѱ Է  ٷ ϰڽϴ. ư
  ¿   п   Ǳ ٶϴ.  ϴ
  ݸ ϸ   ޼ ѱȭ ġ  ֽϴ.

   ָ   ,   ڼ ƴϰڽϱ?

    ü 츮 پ ô.

  ð ó  ʴ±.    ð Ѿ˰ 귯
  ...  ð   ȿ Ἥ     ְ Ǳ
  ٶϴ.

  ׷...

