home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / c.doc / 04.prn < prev    next >
Encoding:
Text File  |  1990-12-05  |  102.6 KB  |  3,061 lines

  1.                                   âïÇéÇ 4                     -- 1 --
  2.                                   -------
  3.  
  4.                                   âÉÇöêèÇ
  5.      -----------------------------------------------------------------
  6.  
  7.           é φΓ«⌐  ú½áóÑ  »α¿ó«ñ¿Γß∩  íẫóδ⌐  ¡áí«α  Σπ¡¬µ¿⌐  úαáΣ¿¬¿,
  8.      ¬«Γ«αδÑ »«ºó«½∩εΓ α¿ß«óáΓ∞ («Γ«íαáªáΓ∞ ¡á φ¬αá¡Ñ)  Γ«τ¬¿,  ½¿¡¿¿,
  9.      »α∩¼«πú«½∞¡¿¬¿,  «¬απª¡«ßΓ¿,  ¿ß»«½∞ºπ∩  ó«º¼«ª¡«ßΓ¿  úαáΣ¿τÑ߬¿σ
  10.      áñá»ΓÑα«ó CGA ¿½¿ EGA.  ¥Γ¿ »α«úαá¼¼δ ¿ß»«½∞ºπεΓß∩ ¬á¬ «ß¡«óá, ¡á
  11.      ¬«Γ«α«⌐ ßΓα«∩Γß∩ Σπ¡¬µ¿¿ úαáΣ¿¬¿ í«½ÑÑ óδß«¬«ú« πα«ó¡∩. ä½∩ í«½ÑÑ
  12.      ñÑΓá½∞¡«ú« ¿ºπτÑ¡¿∩ φΓ¿σ íẫóδσ úαáΣ¿τÑ߬¿σ Σπ¡¬µ¿⌐ »αÑñ½áúáÑΓß∩
  13.      ¬¡¿úá   "æ:   The  Complete  Reference"  Herb  Schild  (Osborn  /
  14.      McGrow-Hall, 1987).
  15.  
  16.           Å«¼¿¼« ¬αáΓ¬«ú« »αÑñßΓáó½Ñ¡¿∩  íẫóδσ  Σπ¡¬µ¿⌐  úαáΣ¿¬¿,  ó
  17.      φΓ«⌐ ú½áóÑ »α¿ó«ñ∩Γß∩ ß½ÑñπεΘ¿Ñ »α«úαá¼¼δ:
  18.  
  19.           - ß«σαá¡Ñ¡¿Ñ úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐ ó Σá⌐½Ñ ¡á ñ¿ß¬Ñ;
  20.           - ºáúαπº¬á úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐ ¿º Σá⌐½á;
  21.           - óαáΘÑ¡¿Ñ «íΩÑ¬Γ«ó ó ñóπ¼Ñα¡«¼ »α«ßΓαá¡ßΓóÑ;
  22.           - ¬«»¿α«óá¡¿Ñ ¿½¿ »ÑαÑß佬á úαáΣ¿τÑ߬¿σ ¿º«íαáªÑ¡¿⌐.
  23.  
  24.           é   ¬«¡µÑ   ú½áóδ   »α¿óÑóÑ¡   ΓѬßΓ  "»α«úαá¼¼δ-σπñ«ª¡¿¬á",
  25.      »«ºó«½∩εΘÑ⌐ α¿ß«óáΓ∞ ¡á φ¬αá¡Ñ ΓÑନ¡á½á, ß ¿ß»«½∞º«ó᡿Ѽ ¬½áó¿Φ
  26.      »ÑαѼÑΘÑ¡¿∩ ¬παß«αá.
  27.  
  28.           Å« ¼ÑαÑ ó«ºαáßΓá¡¿∩ óáΦÑú« «»δΓá  »«  ¿ß»«½∞º«óá¡¿ε  Σπ¡¬µ¿⌐
  29.      úαáΣ¿¬¿,   óδ   ß¼«ªÑΓÑ   ßἫßΓ«∩Γѽ∞¡«   αáºαáíáΓδóáΓ∞  σ«α«Φ¿Ñ
  30.      »α«úαá¼¼δ.  ìá»α¿¼Ñα,  ¿ß»«½∞ºπ∩ Σπ¡¬µ¿¿  ß«σαá¡Ñ¡¿∩  ¿  ºáúαπº¬¿
  31.      úαáΣ¿τÑ߬¿σ   ¿º«íαáªÑ¡¿⌐,   óδ  ß¼«ªÑΓÑ  ß«ºñáóáΓ∞  úαáΣ¿¬¿  ¿½¿
  32.      ñ¿áúαá¼¼δ ¿  πß»ÑΦ¡«  ¿ß»«½∞º«óáΓ∞  ¿σ  ó  ß½πτáÑ  ¡Ñ«íσ«ñ¿¼«ßΓ¿.
  33.      êß»«½∞ºπ∩  Σπ¡¬µ¿¿  óαáΘÑ¡¿∩  ¿º«íαáªÑ¡¿⌐  «íΩÑ¬Γ«ó,  óδ  ß¼«ªÑΓÑ
  34.      αáºαáíáΓδóáΓ∞  »α«úαá¼¼δ  "ºóѺñ¡δσ  ó«⌐¡"  -   «íαáºÑµ   "ª¿ó«⌐"
  35.      úαáΣ¿¬¿,  ¬«Γ«αδÑ íπñπΓ »αÑñßΓáó½∩Γ∞ í«½∞Φ«⌐ ¿¡ΓÑαÑß ñ½∩ óáß.  éδ
  36.      ß¼«ªÑΓÑ  ΓᬪÑ,  ¿ß»«½∞º«óáΓ∞  φΓ¿   Σπ¡¬µ¿¿   ¬á¬   «ß¡«óπ   ñ½∩
  37.      ¿ß»«½∞º«óá¡¿∩  ß¿ßΓѼ áóΓ«¼áΓ¿º¿α«óá¡¡«ú« »α«Ñ¬Γ¿α«óá¡¿∩ (CAD/CAM
  38.      system).
  39.  
  40.           ä½∩  ¬«ααÑ¬Γ¡«ú«  ¿ß»«½∞º«óá¡¿∩  »α«úαá¼¼,  «»¿ßá¡δσ  ó φΓ«⌐
  41.      ú½áóÑ,  óá¼ ¡Ñ«íσ«ñ¿¼δ ¬«¼»∞εΓÑαδ Γ¿»á IBM PC  XT,  IBM PC AT ¿½¿
  42.      ñαπú¿Ñ    ß«ó¼ÑßΓ¿¼δÑ  ß  ¡¿¼¿  ¼«ñѽ¿,  ß¡áíªÑ¡¡δÑ  úαáΣ¿τÑ߬¿¼¿
  43.      áñá»ΓÑαἿ CGA  ¿½¿  EGA.  éßÑ  »α«úαá¼¼δ,  »α¿óÑñÑ¡¡δÑ  ó ñá¡¡«⌐
  44.      ú½áóÑ,  ¬α«¼Ñ »α«úαá¼¼ ¿º«íαáªÑ¡¿∩ Γ«τ¬¿, á»»áαáΓ¡«-¡Ñºáó¿ß¿¼δ, ¿
  45.      óδ ¼«ªÑΓÑ ß ¼¿¡¿¼á½∞¡δ¼¿ πß¿½¿∩¼¿  ßñѽáΓ∞ ¿σ  αáí«τ¿¼¿ ¡á ñαπú¿σ
  46.      Γ¿»áσ úαáΣ¿τÑ߬¿σ ¼áΦ¿¡.
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  61. â½áóá IV                                                       -- 2 --
  62.  
  63.  
  64.                       éêäàÄÉàåê ê  ûéàÆÄéǃ ÅÇïêÆÉÇ
  65.      -----------------------------------------------------------------
  66.  
  67.           ÅÑαÑñ ¿ß»«½∞º«ó᡿Ѽ  ¬á¬¿σ-½¿í«  Σπ¡¬µ¿⌐  úαáΣ¿¬¿ ¬«¼»∞εΓÑα
  68.      ñ«½ªÑ¡  íδΓ∞   »ÑαÑóÑñÑ¡   ó   ß««ΓóÑΓßΓóπεΘ¿⌐   ó¿ñÑ«αѪ¿¼.  ä½∩
  69.      ¬«¼»∞εΓÑα«ó  Γ¿»á  IBM PC  φΓ« «º¡áτáÑΓ,  τΓ« ñ«½ª¡δ íδΓ∞ óδíαá¡δ
  70.      »«ñσ«ñ∩Θ¿Ñ αѪ¿¼ ¿ »á½¿Γαá.
  71.  
  72.           é  Γáí½¿µÑ 4-1  »α¿óÑñÑ¡δ αẽ¿τ¡δÑ  ó¿ñÑ«αѪ¿¼δ,  ó ¬«Γ«αδσ
  73.      ¼«úπΓ αáí«ΓáΓ∞  ¬«¼»∞εΓÑαδ  IBM PC.  ä½∩  Σπ¡¬µ¿⌐,  »α¿óÑñÑ¡¡δσ ó
  74.      φΓ«⌐ ú½áóÑ,  ΓαÑíπÑΓß∩ 4 ó¿ñÑ«αѪ¿¼, »αÑñ»«½áúáεΘ¿⌐ ¿ß»«½∞º«óá¡¿Ñ
  75.      µóÑΓ¡«ú« úαáΣ¿τÑ߬«ú« ñ¿ß»½Ñ∩  ß αẼÑα¡«ßΓ∞ε φ¬αá¡á 320  ¡á 200.
  76.      ò«Γ∩ áñá»ΓÑα EGA »«ññÑনóáÑΓ ¿ αѪ¿¼δ  ß αáßΦ¿αÑ¡¡«⌐ αáºαÑΦáεΘÑ⌐
  77.      ß»«ß«í¡«ßΓ∞ε ñ¿ß»½Ñ∩, 4 ó¿ñÑ«αѪ¿¼ óδíαá¡ ó ¬áτÑßΓóÑ íẫó«ú« ñ½∩
  78.      αáºαáí«Γ¬¿ ¿ ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿⌐ úαáΣ¿¬¿ ó ßó∩º¿ ß ΓѼ,  τΓ« «¡
  79.      »«ññÑনóáÑΓß∩ ¬á¬ áñá»ΓÑα«¼ EGA, Γᬠ¿ CGA. êß»«½∞º«óá¡¿Ñ «ß«íδσ
  80.      αѪ¿¼«ó EGA ΓαÑíπÑΓ Γ«½∞¬« ¿º¼Ñ¡Ñ¡¿∩ Σπ¡¬µ¿⌐ ºá»¿ß¿ Γ«τ¬¿ (ß¼«Γα¿
  81.      ¬¡¿úπ  »«  ¿ß»«½∞º«óá¡¿ε úαáΣ¿¬¿ ó  EGA  "Advance  Grafics  in C"
  82.      Nelson   Jobson   Osborn/McGrow-Hall,   1987).   éá¼   ¡Ñ«íσ«ñ¿¼«
  83.      ºá»«¼¡¿Γ∞,  τΓ« ó« óßÑ󠬫ñáσ óÑασ¡¿⌐ ½Ñóδ⌐ πú«½ ¿¼ÑÑΓ ¬««αñ¿¡áΓδ
  84.      0,0.
  85.  
  86.           BIOS-»αÑαδóá¡¿Ñ 16,  Σπ¡¬µ¿∩  0,  πßΓá¡áó½¿óáÑΓ ó¿ñÑ«αѪ¿¼ ¿
  87.      ¿ß»«½∞ºπÑΓß∩ ó Σπ¡¬µ¿¿ mode(),  ΓѬßΓ ¬«Γ«α«⌐ »α¿óÑñÑ¡  ¡¿ªÑ.  ì«
  88.      »αѪñÑ  τѼ  óδ  «º¡á¬«¼¿ΓÑß∞  ß ¡Ñ⌐,  »αÑñ½áúáѼ óá¼ ó¡¿¼áΓѽ∞¡«
  89.      ¿ºπτ¿Γ∞   óßÑ   ó¿ñÑ«αѪ¿¼δ,   »«ññÑনóáѼδÑ    ß««ΓóÑΓßΓóπεΘ¿¼¿
  90.      áñá»ΓÑαἿ. ä½∩ φΓ«ú« «íαáΓ¿ΓÑß∞ ¬ Γáí½¿µÑ 4-1.
  91.  
  92.  
  93.      Æáí½¿µá 4-1 ÉѪ¿¼δ ΓÑନ¡á½á ñ½∩ ¼áΦ¿¡ IBM PC
  94.  
  95.      -----------------------------------------------------------------
  96.       ÉѪ¿¼             Æ¿»            ÉẼÑα¡«ßΓ∞  Çñá»ΓÑα
  97.                                          φ¬αá¡á
  98.      -----------------------------------------------------------------
  99.  
  100.         0    á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, τ/í      40σ25    CGA, EGA
  101.         1    á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, 16 µó.   40σ25    CGA, EGA
  102.         2    á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, τ/í      80σ25    CGA, EGA
  103.         3    á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, 16 µó.   80σ25    CGA, EGA
  104.         4    úαáΣ¿τÑ߬¿⌐, 4 µóÑΓá       320σ200    CGA, EGA
  105.         5    úαáΣ¿τÑ߬¿⌐, 4 ßÑαδσ Γ«¡á  320σ200    CGA, EGA
  106.         6    úαáΣ¿τÑ߬¿⌐, τ/í           640σ200    CGA, EGA
  107.         7    á½Σáó¿Γ¡«-µ¿Σα«ó«⌐, τ/í      80σ25   ¼«¡«σα«¼¡δ⌐
  108.         8    úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó     160σ200     PCjr
  109.         9    úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó     320σ200     PCjr
  110.        10    úαáΣ¿τÑ߬¿⌐, 4 µóÑΓá-PCjr  640σ200    PCjr, EGA
  111.                          16 µóÑΓ«ó-EGA
  112.        13    úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó     320σ200      EGA
  113.        14    úαáΣ¿τÑ߬¿⌐, 16 µóÑΓ«ó     640σ200      EGA
  114.        15    úαáΣ¿τÑ߬¿⌐, 4 µóÑΓá       640σ350      EGA
  115.      -----------------------------------------------------------------
  116.  
  117.           Ç ΓÑ»Ñα∞ »α¿óÑñѼ ΓѬßΓ Σπ¡¬µ¿¿ mode().
  118.  
  119.  
  120.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  121. â½áóá IV                                                       -- 3 --
  122.  
  123.  
  124.  
  125.           /* ôßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
  126.           void mode(mode_code)
  127.           int mode_code;
  128.                {
  129.                union REGS r;
  130.                r.h.al = mode_code;
  131.                r.h.ah = 0;
  132.                int86(0x10,&r,&r);
  133.                }
  134.  
  135.  
  136.           é 4-«¼ αѪ¿¼Ñ ñ«ßΓπ»¡δ  ñóÑ »á½¿Γαδ (¡áí«αá  µóÑΓ«ó). èáªñá∩
  137.      »á½¿Γαá   «»αÑñѽ∩ÑΓ  τÑΓδαÑ   µóÑΓá,   «Γ«íαáªáѼδÑ   ¡á  φ¬αá¡Ñ
  138.      ΓÑନ¡á½á.  é  IBM PC  »á½¿Γαá  0  «»αÑñѽ∩ÑΓ  ªÑ½Γδ⌐,  ºÑ½Ñ¡δ⌐ ¿
  139.      ¬αáß¡δ⌐   µóÑΓá,   »á½¿Γαá  1   «»αÑñѽ∩ÑΓ   íѽδ⌐,  ∩ᬫ-¬αáß¡δ⌐
  140.      (»πα»πα¡δ⌐)  ¿ ú«½πí«⌐ µóÑΓá. ä½∩ ¬áªñ«⌐ »á½¿Γαδ τÑΓóÑαΓδ¼ µóÑΓ«¼
  141.      ∩ó½∩ÑΓß∩ µóÑΓ  Σ«¡á,  ¬«Γ«αδ⌐ «íδτ¡« τÑα¡δ⌐.  BIOS-»αÑαδóá¡¿Ñ 16,
  142.      Σπ¡¬µ¿∩ 11, πßΓá¡áó½¿óáÑΓ »á½¿Γαπ.
  143.  
  144.           öπ¡¬µ¿∩  pallet(),  »α¿óÑñÑ¡¡á∩  ¡¿ªÑ,  πßΓá¡áó½¿óáÑΓ  ¡«¼Ñα
  145.      »á½¿Γαδ, ¬«Γ«αδ⌐ ºáñáÑΓß∩ ó ¬áτÑßΓóÑ º¡áτÑ¡¿∩ ÑÑ áαúπ¼Ñ¡Γá:
  146.  
  147.           /* ôßΓá¡«ó¬á »á½¿Γαδ */
  148.           void palette(pnum)
  149.           int pnum;
  150.                {
  151.                union REGS r;
  152.  
  153.                r.h.bh=1;    /* ¬«ñ 4 úαáΣ¿τÑ߬«ú« αѪ¿¼á */
  154.                r.h.bl=pnum; /* ¡«¼Ñα »á½¿Γαδ */
  155.                r.h.ah=11;   /* πßΓá¡áó½¿óáÑΓß∩ ñ½∩ ó맮óᠻ὿Γαδ */
  156.                int86(0x10,&r,&r);
  157.                }
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  181. â½áóá IV                                                       -- 4 --
  182.  
  183.  
  184.                            çÇÅêæ£  ÆÄùèê  ÉÇæÆÉÇ
  185.      -----------------------------------------------------------------
  186.  
  187.           Äñ¡«⌐ ¿º «ß¡«ó¡δσ »α«úαá¼¼ úαáΣ¿¬¿ ∩ó½∩ÑΓß∩ »α«úαἼᠺỿ߿
  188.      Γ«τ¬¿ αáßΓαá - ¡á¿¼Ñ¡∞ΦÑ⌐ áñαÑßπѼ«⌐ Γ«τ¬¿ ¡á φ¬αá¡Ñ  ñ¿ß»½Ñ∩.  é
  189.      ñá¡¡«¼  ß½πτáÑ  ΓÑନ¡  "Γ«τ¬á  αáßΓαá"  íπñÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩
  190.      «»¿ßá¡¿∩ ¡á¿¼Ñ¡∞ΦÑ⌐  áñαÑßπѼ«⌐  Γ«τ¬¿  ó  «Γñѽ∞¡δσ  úαáΣ¿τÑ߬¿σ
  191.      αѪ¿¼áσ.  Æá¬  ¬á¬  Σπ¡¬µ¿∩  ºá»¿ß¿  Γ«τ¬¿  αáßΓαá ¿ß»«½∞ºπÑΓß∩ ó
  192.      ñαπú¿σ »α«úαá¼¼áσ í«½ÑÑ óδß«¬«ú« πα«ó¡∩,  ÑÑ φΣΣÑ¬Γ¿ó¡«ßΓ∞  «τÑ¡∞
  193.      ó᪡ᠠ ñ½∩  íδßΓα«ñÑ⌐ßΓó¿∩  »α«úαá¼¼  óÑασ¡¿σ  πα«ó¡Ñ⌐,  ¬«Γ«αδÑ
  194.      ¡Ñ»«ßαÑñßΓóÑ¡¡«  αÑ὿ºπεΓ  Σπ¡¬µ¿¿  úαáΣ¿¬¿.   ìá   IBM   PC   ¿
  195.      ß«ó¼ÑßΓ¿¼δσ  ß  ¡¿¼¿  ¬«¼»∞εΓÑαáσ  ßπΘÑßΓóπεΓ  ñóá ß»«ß«íá óδó«ñá
  196.      ¿¡Σ«α¼áµ¿¿  ß  ¿ß»«½∞º«ó᡿Ѽ  Γ«τѬ   αáßΓαá.   ÅÑαóδ⌐   ß»«ß«í,
  197.      ¿ß»«½∞ºπεΘ¿⌐ »αÑαδóá¡¿∩ ROM-BIOS, ∩ó½∩ÑΓß∩ ¡á¿í«½ÑÑ »α«ßΓδ¼, ¡« ¿
  198.      ¡á¿¼Ñ¡ÑÑ íδßΓα«ñÑ⌐ßΓóπεΘ¿¼ (ß½¿Φ¬«¼ ¼Ññ½Ñ¡¡δ¼ ñ½∩  ¡áΦ¿σ  µÑ½Ñ⌐).
  199.      éΓ«αδ¼  ¿  í«½ÑÑ  íδßΓα«ñÑ⌐ßΓóπεΘ¿¼¿ ß»«ß«í«¼ ∩ó½∩ÑΓß∩ αẼÑΘÑ¡¿Ñ
  200.      ¿¡Σ«α¼áµ¿¿ ¡Ñ»«ßαÑñßΓóÑ¡¡« ó ó¿ñÑ«»á¼∩Γ¿  ñ¿ß»½Ñ∩  (ROM).  ê¼Ñ¡¡«
  201.      φëà¼ÑΓ«ñ ¿ αáßß¼áΓα¿óáÑΓß∩ ¡¿ªÑ.
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  241. â½áóá IV                                                       -- 5 --
  242.  
  243.  
  244.      Éáí«Γá áñá»ΓÑα«ó CGA/EGA ó úαáΣ¿τÑ߬ѫ¼ αѪ¿¼Ñ
  245.      ----------------------------------------------
  246.  
  247.           Çñá»ΓÑα CGA  óßÑúñá  αáß»«½áúáÑΓß∩  ó  ó¿ñÑ«»á¼∩Γ¿ »« áñαÑßπ
  248.      8000000h.  Çñá»ΓÑα EGA ¿¼ÑÑΓ  á¡á½«ú¿τ¡«Ñ  αáß»«½«ªÑ¡¿Ñ  ñ½∩  ΓÑσ
  249.      αѪ¿¼«ó,   ¬«Γ«αδÑ   ß«ó¼ÑßΓ¿¼δ  ß  αѪ¿¼á¼¿  CGA  (í«½ÑÑ  »«½¡πε
  250.      ¿¡Σ«α¼áµ¿ε « á»»áαáΓ¡δσ ßαÑñßΓóáσ  »«ññÑ᪬¿  úαáΣ¿¬¿  óδ  ¼«ªÑΓÑ
  251.      »«½πτ¿Γ∞   ó   απ¬«ó«ñßΓóÑ   "IBM   Technical  Reference").  é  4
  252.      úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ ¬áªñδ⌐ íá⌐Γ ß«ñÑαª¿Γ ¿¡Σ«α¼áµ¿ε « µóÑΓÑ  ñ½∩ 4
  253.      Γ«τѬ  αáßΓαá (ñ½∩ ¬áªñ«⌐ Γ«τ¬¿ αáßΓαá »« 2 í¿Γá). æ½Ññ«óáΓѽ∞¡«,
  254.      ñ½∩ αáí«Γδ ß  φ¬αá¡«¼  αẼÑα¡«ßΓ∞ε  320  ¡á  200  ΓαÑíπÑΓß∩  16è
  255.      »á¼∩Γ¿.  Æá¬  ¬á¬  ñóá  í¿Γá  ¼«úπΓ  ß«ñÑαªáΓ∞ Γ«½∞¬« 4 αẽ¿τ¡δσ
  256.      º¡áτÑ¡¿∩, ó 4 ó¿ñÑ«αѪ¿¼Ñ »«ññÑনóáεΓß∩ Γ«½∞¬« 4 µóÑΓá. ç¡áτÑ¡¿Ñ
  257.      ¬áªñ«ú«  ñóπσí¿Γ«ó«ú«  í½«¬á  «»αÑñѽ∩ÑΓ  µóÑΓ  ó  ß««ΓóÑΓßΓó¿¿ ß
  258.      Γáí½¿µÑ⌐, »α¿óÑñÑ¡¡«⌐ ¡¿ªÑ:
  259.  
  260.      ---------------------------------------------------
  261.       ç¡áτÑ¡¿Ñ   ûóÑΓ ó »á½¿ΓαÑ 0     ûóÑΓ ó »á½¿ΓαÑ 1
  262.      ---------------------------------------------------
  263.                       Σ«¡                   Σ«¡
  264.          1          ªÑ½Γδ⌐                ú«½πí«⌐
  265.          2          ¬αáß¡δ⌐               »πα»πα¡δ⌐
  266.          3          ºÑ½Ñ¡δ⌐               íπ½δ⌐
  267.      ---------------------------------------------------
  268.  
  269.           Äß«íÑ¡¡«ßΓ∞ áñá»ΓÑαá CGA ºá¬½ετáÑΓß∩ ó Γ«¼, τΓ« τÑΓ¡δÑ Γ«τ¬¿
  270.      αáßΓαá íπñπΓ αáß»«½áúáΓ∞ß∩ »« áñαÑßπ B8000000h,  á ¡ÑτÑΓ¡δÑ -  ¡á
  271.      2000h  (8152  -  ó ñÑß∩Γ¿τ¡«¼ ó¿ñÑ) íá⌐Γ«ó óδΦÑ,  Γ.Ñ.  »« áñαÑßπ
  272.      B8002000h.  æ½Ññ«óáΓѽ∞¡«,  ¬áªñá∩ ßΓ᫬á Γ«τѬ αáßΓαá ΓαÑíπÑΓ 80
  273.      íá⌐Γ«ó  (40 ñ½∩ τÑΓ¡δσ Γ«τѬ αáßΓαá,  40 - ñ½∩ ¡ÑτÑΓ¡δσ).  é¡πΓα¿
  274.      ¬áªñ«ú«  íá⌐Γá  Γ«τ¬¿  αáß»«½áúáεΓß∩  ß½Ñóá  ¡á»αáó«,   ¬á¬   «¡¿
  275.      »«∩ó½∩εΓß∩ ¡á φ¬αá¡Ñ ΓÑନ¡á½á.  ¥Γ« «º¡áτáÑΓ, τΓ« Γ«τ¬á αáßΓαá ß
  276.      ¡«¼Ñα«¼ 0 ºá¡¿¼áÑΓ 6 ¿ 7 í¿Γδ,  ó Γ« óαѼ∩,  ¬á¬ Γ«τ¬á  αáßΓαá  ß
  277.      ¡«¼Ñα«¼ 3 - 0 ¿ 1 í¿Γδ.
  278.  
  279.           Æá¬ ¬á¬  ¬áªñδ⌐ íá⌐Γ ¬«ñ¿απÑΓ º¡áτÑ¡¿Ñ τÑΓδαÑσ Γ«τѬ αáßΓαá,
  280.      óδ ñ«½ª¡δ ß«σαá¡∩Γ∞ º¡áτÑ¡¿Ñ ΓαÑσ Γ«τѬ »α¿  ¿º¼Ñ¡Ñ¡¿¿  «ñ¡«⌐  ¿º
  281.      ¡¿σ.  ïπτΦ¿⌐ ß»«ß«í ßñѽáΓ∞ φΓ« - ß«ºñá¡¿Ñ í¿Γ«ó«⌐ ¼á߬¿ ß« óßѼ¿
  282.      í¿ΓἿ,  πßΓá¡«ó½Ñ¡¡δ¼¿ ó 1, ¬α«¼Ñ ΓÑσ, ¬«Γ«αδÑ íπñπΓ ¿º¼Ñ¡∩Γ∞ß∩.
  283.      ç¡áτÑ¡¿Ñ í¿Γ«ó«⌐ ¼á߬¿ ß¬½áñδóáÑΓß∩ »« ßσѼѠ"ê" ß ñÑ⌐ßΓó¿Γѽ∞¡δ¼
  284.      º¡áτÑ¡¿Ñ¼ íá⌐Γá,  á ºáΓѼ  »«½πτÑ¡¡«Ñ  º¡áτÑ¡¿Ñ  ß¬½áñδóáÑΓß∩  »«
  285.      ßσѼѠ  "êïê"   ß  ¡«óδ¼  º¡áτÑ¡¿Ñ¼.  Äñ¡á¬«  ß¿Γπᵿ∩  ¡Ñ߬«½∞¬«
  286.      ¼Ñ¡∩ÑΓß∩, Ñß½¿ óδ σ«Γ¿ΓÑ ß½«ª¿Γ∞ »« ßσѼѠ"ìà-êïê" ¡«ó«Ñ ¿ ßΓáα«Ñ
  287.      º¡áτÑ¡¿∩.  é  φΓ«¼  ß½πτáÑ  óδ  »α«ßΓ« ß¬½áñδóáÑΓÑ »« ßσѼѠ"êïê"
  288.      ßΓáα«Ñ º¡áτÑ¡¿Ñ íá⌐Γá ß 0,  á ºáΓѼ ß¬½áñδóáÑΓÑ »« ßσѼѠ"ìà-êïê"
  289.      ¡«ó«Ñ  ñó«¿τ¡«Ñ »αÑñßΓáó½Ñ¡¿Ñ µóÑΓá ¿ »«½πτáÑΓÑ αѺπ½∞ΓáΓ.  ÇñαÑß
  290.      ΓαÑíπѼ«ú« íá⌐Γá «»αÑñѽ∩ÑΓß∩ »πΓѼ π¼¡«ªÑ¡¿∩ º¡áτÑ¡¿∩ ¬««αñ¿¡áΓδ
  291.      X ¡á 40,  á ºáΓѼ ñ«íáó½∩ÑΓß∩ º¡áτÑ¡¿Ñ ¬««αñ¿¡áΓδ Y,  ñѽѡ¡«Ñ ¡á
  292.      4.  ä½∩ Γ«ú«,τΓ«íδ «»αÑñѽ¿Γ∞, ¡áσ«ñ¿Γß∩ ½¿ Γ«τ¬á αáßΓαá ó τÑΓ¡«¼
  293.      ¿½¿  ¡ÑτÑΓ¡«¼  í½«¬Ñ  »á¼∩Γ¿,  ¿ß»«½∞ºπÑΓß∩  «ßΓáΓ«¬  «Γ  ñѽѡ¿∩
  294.      º¡áτÑ¡¿∩ ¬««αñ¿¡áΓδ ò ¡á 2.  àß½¿ «ßΓáΓ«¬ αáóÑ¡ 0,  í½«¬ ∩ó½∩ÑΓß∩
  295.      τÑΓ¡δ¼  (¿ß»«½∞ºπÑΓß∩  »Ñαóδ⌐  í½«¬),  ó  »α«Γ¿ó¡«¼ ß½πτáÑ - í½«¬
  296.      ¡ÑτÑΓ¡δ⌐ (¿ß»«½∞ºπÑΓß∩ óΓ«α«⌐ í½«¬).  ÆαÑíπѼδÑ í¿Γδ ó¡πΓα¿ íá⌐Γá
  297.      óδτ¿ß½∩εΓß∩   »πΓѼ  óδ»«½¡Ñ¡¿∩  ñѽѡ¿∩  »«  ¼«ñπ½ε  4.  ÄßΓáΓ«¬
  298.  
  299.  
  300.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  301. â½áóá IV                                                       -- 6 --
  302.  
  303.  
  304.      «»αÑñѽ∩ÑΓ ¡«¼Ñα ñóπσí¿Γ«ó«ú« »á¬ÑΓá, ¬«Γ«αδ⌐ ß«ñÑαª¿Γ ¿¡Σ«α¼áµ¿ε
  305.      «  ΓαÑíπѼδσ  Γ«τ¬áσ  αáßΓαá.  ä½∩ πßΓᡫ󬿠íá⌐Γá αѪ¿¼á µóÑΓá ¿
  306.      í¿Γ«ó«⌐ ¼á߬¿  ¿ß»«½∞ºπεΓß∩  «»ÑαáΓ«αδ  »«í¿Γ«ó«ú«  ßñó¿úá.  ò«Γ∩
  307.      ¼á¡¿»π½¿α«óá¡¿Ñ  í¿ΓἿ  ó Σπ¡¬µ¿¿ mempoint() ¡Ñ߬«½∞¬« ºá»πΓá¡«,
  308.      óδ,  «ñ¡á¬«,  íѺ Γαπñá αáºíÑαÑΓÑß∞ ó ¡Ñ⌐, Ñß½¿ ΓΘáΓѽ∞¡« ¿ºπτ¿ΓÑ
  309.      τΓ« ¿¼Ñ¡¡« ¿ ¬á¬ «¡á ñѽáÑΓ.
  310.  
  311.  
  312.      /* çỿß∞ Γ«τ¬¿ ó CGA/EGA */
  313.           void mempoint(x,y,color_code)
  314.           int x,y,color_code;
  315.             {
  316.             union mask {
  317.                char c[2];
  318.                int i;
  319.             } bit_mask;
  320.             int i,index,bit_position;
  321.             unsigned char t;
  322.             char xor; /* "ìà-êïê" µóÑΓá ó ß½πτáÑ Ñú« ¿º¼Ñ¡Ñ¡¿∩ */
  323.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó »á¼∩Γ¿
  324.                                                                 CGA */
  325.             bit_mask.i=0xFF3F; /* 11111111 00111111 ó ñó«¿τ¡«¼ ¬«ñÑ */
  326.             if (x<0 || x>199 || y<0 || y>319) return;
  327.             xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
  328.                                      αѪ¿¼ "ìà-êïê" */
  329.             color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
  330.  
  331.             /*  πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
  332.                 ó »αáóπε »«º¿µ¿ε */
  333.  
  334.              bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
  335.                                   ó íá⌐ΓÑ */
  336.              color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
  337.                                         ó ¡πª¡πε »«º¿µ¿ε */
  338.              bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
  339.                                           ¡πª¡πε »«º¿µ¿ε */
  340.  
  341.              /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
  342.               index=x*40+(y%4);
  343.               if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
  344.                                        óΓ«α«⌐ í½«¬ */
  345.               /* ºá»¿ß∞ µóÑΓá */
  346.                if (!xor) {  /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
  347.                   t=*(ptr+index) & bit_mask.c[0];
  348.                   *(ptr+index)=t|color_code;
  349.                }
  350.                else {
  351.                   t=*(ptr+index) | (char)0;
  352.                   *(ptr+index)=t & color_code;
  353.                }
  354.             }
  355.  
  356.  
  357.  
  358.  
  359.  
  360.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  361. â½áóá IV                                                       -- 7 --
  362.  
  363.  
  364.           çá¼ÑΓ¿¼, τΓ« Γ¿» π¬áºáΓѽ∩ ó¿ñÑ«»á¼∩Γ¿ «íΩ∩ó½Ñ¡ ¬á¬ far; φΓ«
  365.      ¡Ñ«íσ«ñ¿¼«, Ñß½¿  óδ  Γαá¡ß½¿απÑΓÑ  ó  ¼«ñѽ¿  ¼á½Ñ¡∞¬«⌐  (small)
  366.      »á¼∩Γ¿.  éδ ΓᬠªÑ ñ«½ª¡δ ºá¼ÑΓ¿Γ∞, τΓ« ß»Ñµ¿á½∞¡δ⌐ ¼áα¬Ñα αѪ¿¼á
  367.      ºá»¿ß¿  XOR,  «»αÑñѽѡ¡δ⌐ ó Σπ¡¬µ¿∩σ ROM-BIOS,  ¿ß»«½∞ºπÑΓß∩ ¿ ó
  368.      Σπ¡¬µ¿¿ mempoint().
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  421. â½áóá IV                                                       -- 8 --
  422.  
  423.  
  424.                             é¢ùàÉùêéÇìêà ïêìêë
  425.      -----------------------------------------------------------------
  426.  
  427.           öπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐ ∩ó½∩εΓß∩ «ß¡«ó¡δ¼¿ »«ñ»α«úαἼἿ
  428.      úαáΣ¿¬¿ ¿ ¿ß»«½∞ºπεΓß∩ ñ½∩ «Γ«íαáªÑ¡¿∩  ½¿¡¿⌐  ó  ºáñá¡¡«¼  µóÑΓÑ
  429.      »πΓѼ ºáñá¡¿∩ ÑÑ ¡áτá½∞¡δσ ¿ ¬«¡Ñτ¡δ󠬫«αñ¿¡áΓ.  é Γ« óαѼ∩, ¬á¬
  430.      ¿º«íαáªÑ¡¿Ñ óÑαΓ¿¬á½∞¡δσ ¿ ú«α¿º«¡Γá½∞¡δσ ½¿¡¿⌐  ¡Ñ  »αÑñßΓáó½∩ÑΓ
  431.      «ß«í«ú«  Γαπñá,  í«½ÑÑ Γαπñ¡«⌐ ºáñáτÑ⌐ ∩ó½∩ÑΓß∩ ß«ºñá¡¿Ñ Σπ¡¬µ¿⌐,
  432.      ¬«Γ«αδÑ α¿ßπεΓ ½¿¡¿¿  óñ«½∞  ñ¿áú«¡á½Ñ⌐.  ìá»α¿¼Ñα,  ¬á¬¿Ñ  Γ«τ¬¿
  433.      ß«ßΓáó½∩εΓ  ½¿¡¿ε,  óδτÑατ¿óáѼπε  «Γ Γ«τ¬¿ ß ¬««αñ¿¡áΓἿ 0,0 ñ«
  434.      Γ«τ¬¿ ß ¬««αñ¿¡áΓἿ 80,120?
  435.  
  436.           Äñ¿¡ ¿º »«ñσ«ñ«ó ¬  αáºαáí«Γ¬Ñ  Σπ¡¬µ¿⌐  óδτÑατ¿óá¡¿∩  ½¿¡¿⌐
  437.      ¿ß»«½∞ºπÑΓ  «Γ¡«ΦÑ¡¿Ñ ¼Ñªñπ ß¼ÑΘÑ¡¿Ñ¼ »« ¬««αñ¿¡áΓá¼ X ¿ Y. ùΓ«íδ
  438.      »«¬áºáΓ∞ φë໫ñσ«ñ ó ñÑ⌐ßΓó¿¿,  »α«óÑñѼ ½¿¡¿ε ¼Ñªñπ Γ«τ¬á¼¿  ß
  439.      ¬««αñ¿¡áΓἿ  0,0  ¿  5,10.  æ¼ÑΘÑ¡¿Ñ »« X αáó¡« 5,  á »« Y - 10.
  440.      ÄΓ¡«ΦÑ¡¿Ñ αáó¡« 1/2.  Ä¡«  íπñÑΓ  ¿ß»«½∞º«óáΓß∩  »α¿  «»αÑñѽѡ¿¿
  441.      ¬«φΣΣ¿µ¿Ñ¡Γá ºáó¿ß¿¼«ßΓ¿,  »« ¬«Γ«α«¼π ñ«½ª¡δ ¼Ñ¡∩Γ∞ß∩ ¬««αñ¿¡áΓδ
  442.      X ¿ Y »α¿ ¿º«íαáªÑ¡¿¿ ½¿¡¿⌐.  é ñá¡¡«¼ ß½πτáÑ φΓ«  «º¡áτáÑΓ,  τΓ«
  443.      »α¿αáΘÑ¡¿Ñ  ¬««αñ¿¡áΓδ  X  ß«ßΓáó½∩ÑΓ »«½«ó¿¡π óѽ¿τ¿¡δ ¿º¼Ñ¡Ñ¡¿∩
  444.      ¬««αñ¿¡áΓδ Y.  ìáτ¿¡áεΘ¿⌐ »α«úαá¼¼¿ßΓ τáßΓ« ¿ß»«½∞ºπÑΓ φëà¼ÑΓ«ñ
  445.      »α¿  αáºαáí«Γ¬Ñ  Σπ¡¬µ¿⌐  óδτÑατ¿óá¡¿∩  ½¿¡¿⌐.  ò«Γ∩ Γᬫ⌐ »«ñσ«ñ
  446.      ¼áΓѼáΓ¿τÑ߬¿ óÑαÑ¡ ¿ »α«ßΓ ñ½∩  »«¡¿¼á¡¿∩,  ñ½∩  Ñú«  »αáó¿½∞¡«⌐
  447.      αáí«Γδ  ¿  ñ½∩ Γ«ú«,  τΓ«íδ ¿ºíѪáΓ∞ ßÑα∞Ѻ¡δσ «Φ¿í«¬ «¬απú½Ñ¡¿∩,
  448.      ¡Ñ«íσ«ñ¿¼«  ¿ß»«½∞º«óáΓ∞  ¼áΓѼáΓ¿τÑ߬¿Ñ  «»Ñαᵿ¿  ß  τ¿ß½á¼¿  ß
  449.      »½áóáεΘÑ⌐  Γ«τ¬«⌐.  ¥Γ« «º¡áτáÑΓ,  τΓ« Σπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐
  450.      íπñπΓ αáí«ΓáΓ∞ ñ«ó«½∞¡« ¼Ññ½Ñ¡¡«, Ñß½¿ ó ß¿ßΓѼπ ¡Ñ íπñÑΓ ó¬½ετÑ¡
  451.      ¼áΓѼáΓ¿τÑ߬¿⌐  ß«»α«µÑßß«α  (¡á»α¿¼Ñα  -  Intel  8087).  Å« φΓ«⌐
  452.      »α¿τ¿¡Ñ φëà¼ÑΓ«ñ ¿ß»«½∞ºπÑΓß∩ ñ«ó«½∞¡« αÑñ¬«.
  453.  
  454.           ìá¿í«½ÑÑ «íΘ¿⌐    ¼ÑΓ«ñ    ¿º«íαáªÑ¡¿∩    ½¿¡¿⌐     ó¬½ετáÑΓ
  455.      ¿ß»«½∞º«óá¡¿Ñ  á½ú«α¿Γ¼á  üαѺѡσá¼á.  ò«Γ∩  «ß¡«ó«⌐ ó ¡Ñ¼ ß½πª¿Γ
  456.      ΓᬪѠ«Γ¡«ΦÑ¡¿Ñ ¼Ñªñπ αáßßΓ«∩¡¿∩¼¿ »« ¬««αñ¿¡áΓá¼ X ¿ Y, ó ñá¡¡«¼
  457.      ß½πτáÑ  ¡Ñ  ΓαÑíπÑΓß∩  óδ»«½¡∩Γ∞  ñѽѡ¿Ñ  ¿½¿ óδτ¿ß½Ñ¡¿Ñ τ¿ßѽ ß
  458.      »½áóáεΘÑ⌐  Γ«τ¬«⌐.  é¼ÑßΓ«  φΓ«ú«,  «Γ¡«ΦÑ¡¿Ñ  ¼Ñªñπ   º¡áτÑ¡¿∩¼¿
  459.      ¬««αñ¿¡áΓ  X  ¿  Y  »αÑñßΓáó½∩ÑΓß∩  ¬«ßóÑ¡¡δ¼ «íαẫ¼ τÑαѺ ßÑα¿¿
  460.      ß½«ªÑ¡¿⌐  ¿  óδτ¿Γá¡¿⌐.  Äß¡«ó¡«⌐  ¿ñÑÑ⌐  á½ú«α¿Γ¼á   üαѺѡσá¼á,
  461.      ∩ó½∩ÑΓß∩   αÑú¿ßΓαᵿ∩   ßαÑñ¡¿σ   º¡áτÑ¡¿⌐   »«úαÑΦ¡«ßΓÑ⌐  ¼Ñªñπ
  462.      ¿ñÑá½∞¡δ¼ »«½«ªÑ¡¿Ñ¼  ¬áªñ«⌐  Γ«τ¬¿  ¿  Γ«⌐  »«º¿µ¿Ñ⌐  ¡á  φ¬αá¡Ñ
  463.      ñ¿ß»½Ñ∩,  ó  ¬«Γ«α«⌐ «¡á ñÑ⌐ßΓó¿Γѽ∞¡« «Γ«íαáªáÑΓß∩.  Å«úαÑΦ¡«ßΓ∞
  464.      ¼Ñªñπ ¿ñÑá½∞¡δ¼ ¿ ñÑ⌐ßΓó¿Γѽ∞¡δ¼ »«½«ªÑ¡¿Ñ¼ Γ«τ¬¿ ó«º¡¿¬áÑΓ óó¿ñπ
  465.      «úαá¡¿τÑ¡¡δσ  ó«º¼«ª¡«ßΓÑ⌐  ΓÑσ¡¿τÑ߬¿σ  ßαÑñßΓó.  öá¬Γ¿τÑ߬¿  ¡Ñ
  466.      ßπΘÑßΓóπÑΓ   ñ¿ß»½ÑÑó   ß    íÑ߬«¡Ñτ¡«    í«½∞Φ«⌐    αáºαÑΦáεΘÑ⌐
  467.      ß»«ß«í¡«ßΓ∞ε,  ¿,  ß½Ññ«óáΓѽ∞¡«, ñÑ⌐ßΓó¿Γѽ∞¡«Ñ »«½«ªÑ¡¿Ñ ¬áªñ«⌐
  468.      Γ«τ¬¿ ¡á ½¿¡¿¿ ΓαÑíπÑΓ ¡á¿½πτΦÑ⌐ á»»α«¬ß¿¼áµ¿¿. é ¬áªñ«⌐ ¿ΓÑαᵿ¿
  469.      µ¿¬½á  óδτÑατ¿óá¡¿∩  ½¿¡¿¿ óδºδóáεΓß∩ ñóÑ »ÑαѼѡ¡δÑ xerr ¿ yerr,
  470.      ¬«Γ«αδÑ  πóѽ¿τ¿óáεΓß∩  ó  ºáó¿ß¿¼«ßΓ¿   «Γ   ¿º¼Ñ¡Ñ¡¿∩   óѽ¿τ¿¡
  471.      ¬««αñ¿¡áΓ  X  ¿  Y  ß««ΓóÑΓßΓóÑ¡¡«.  è«úñá  º¡áτÑ¡¿Ñ  »«úαÑΦ¡«ßΓ¿
  472.      ñ«ßΓ¿úáÑΓ «»αÑñѽѡ¡«ú« º¡áτÑ¡¿∩,  «¡«  ó¡«ó∞  πßΓá¡áó½¿óáÑΓß∩  ó
  473.      ¿ßσ«ñ¡«Ñ   »«½«ªÑ¡¿Ñ,   á   ß««ΓóÑΓßΓóπεΘ¿⌐   ßτÑΓτ¿¬   ¬««αñ¿¡áΓ
  474.      πóѽ¿τ¿óáÑΓß∩.  ¥Γ«Γ »α«µÑßß »α«ñ«½ªáÑΓß∩ ñ« ΓÑσ »«α,  »«¬á ½¿¡¿∩
  475.      ¡Ñ íπñÑΓ »«½¡«ßΓ∞ε óδτÑατÑ¡á.  öπ¡¬µ¿∩ line(),  »α¿óÑñÑ¡¡á∩ ¡¿ªÑ,
  476.      αÑ὿ºπÑΓ φëà¼ÑΓ«ñ.  éδ ñ«½ª¡δ ¿ºπτáΓ∞ ÑÑ ñ« ΓÑσ »«α,  »«¬á  ¡Ñ
  477.      »«⌐¼ÑΓÑ ¼Ñσá¡¿º¼á óδ»«½¡Ñ¡¿∩ óßÑσ ÑÑ «»Ñαᵿ⌐. çá¼ÑΓ¿¼, τΓ« ó ¡Ñ⌐
  478.  
  479.  
  480.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  481. â½áóá IV                                                       -- 9 --
  482.  
  483.  
  484.      ¿ß»«½∞ºπÑΓß∩  Σπ¡¬µ¿∩   mempoint(),   αáºαáí«Γá¡¡á∩   αá¡ÑÑ   ñ½∩
  485.      «Γ«íαáªÑ¡¿∩ Γ«τ¬¿ ¡á φ¬αá¡Ñ ΓÑନ¡á½á.
  486.  
  487.  
  488.       /* éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá ß ¿ß»«½∞º«ó᡿Ѽ
  489.          á½ú«α¿Γ¼á üαѺѡσá¼á */
  490.        void line(startx,starty,endx,endy,color)
  491.        int startx,starty,endx,endy,color;
  492.        {
  493.          register int t,distánce;
  494.          int xerr=0,yerr=0,delta_x,delta_y;
  495.          int incx,incy;
  496.  
  497.        /* óδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿∩ ó «í«¿σ ¡á»αáó½Ñ¡¿∩σ  */
  498.          delta_x=endx-startx;
  499.          delta_y=endy-starty;
  500.  
  501.        /* «»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿∩ Φáúá,
  502.           Φáú óδτ¿ß½∩ÑΓß∩ ½¿í« »« óÑαΓ¿¬á½∞¡«⌐, ½¿í« ú«α¿º«¡Γá½∞¡«⌐
  503.           ½¿¡¿¿   */
  504.           if (delta_x>0) incx=1;
  505.           else  if (delta_x==0) incx=0;
  506.           else  incx= -1;
  507.           if (delta_y>0) incy=1;
  508.           else  if (delta_y==0) incy=0;
  509.           else  incy= -1;
  510.  
  511.         /* «»αÑñѽѡ¿Ñ ¬á¬«Ñ αáßßΓ«∩¡¿Ñ í«½∞ΦÑ */
  512.           delta_x=abs(delta_x);
  513.           delta_y=abs(delta_y);
  514.           if (delta_x>delta_y) distance=delta_x;
  515.           else distance=delta_y;
  516.  
  517.         /* óδτÑατ¿óá¡¿Ñ ½¿¡¿¿ */
  518.           for (t=0; t<=distance+1; t++) {
  519.              mempoint(startx,starty,color);
  520.              xerr+=delta_x;
  521.              yerr+=delta_y;
  522.              if (xerr>distance) {
  523.                 xerr-=distance;
  524.                 startx+=incx;
  525.              }
  526.              if (yerr>distance) {
  527.                 yerr-=distance;
  528.                 starty+=incy;
  529.              }
  530.           }
  531.        }
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  541. â½áóá IV                                                       -- 10 --
  542.  
  543.  
  544.                  êçÄüÉÇåàìêà ê çÇèÉÇÿêéÇìêà ÅɃîÄôâÄï£ìêèÄé
  545.      -----------------------------------------------------------------
  546.  
  547.           àß½¿ π  óáß ÑßΓ∞ Σπ¡¬µ¿¿ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐,  Γ« ¡Ñ ß«ßΓáó¿Γ
  548.      «ß«í«ú«  Γαπñá  ß«ºñáΓ∞  Σπ¡¬µ¿¿  óδτÑατ¿óá¡¿∩   »α∩¼«πú«½∞¡¿¬«ó.
  549.      Åα¿¼Ñα,  »α¿óÑñÑ¡¡δ⌐ ºñÑß∞, óδτÑατ¿óáÑΓ »α∩¼«πú«½∞¡¿¬¿ ó ºáñá¡¡«¼
  550.      µóÑΓÑ »πΓѼ ºáñá¡¿∩ ¬««αñ¿¡áΓ ñóπσ »α«Γ¿ó«»«½«ª¡δσ πú½«ó.
  551.  
  552.  
  553.          /*  éδτÑατ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á  */
  554.         void box(startx,starty,endx,endy,color_code)
  555.         int startx,starty,endx,endy,color_code;
  556.         {
  557.            line(startx,starty,endx,starty,color_code);
  558.            line(startx,starty,startx,endy,color_code);
  559.            line(startx,endy,endx,endy,color_code);
  560.            line(endx,starty,endx,endy,color_code);
  561.         }
  562.  
  563.  
  564.           ä½∩ Γ«ú«,   τΓ«íδ   ºá¬αáß¿Γ∞    »α∩¼«πú«½∞¡¿¬,    ΓαÑíπÑΓß∩
  565.      óδ»«½¡¿Γ∞ ºá»¿ß∞  ó  ¬áªñπε  Γ«τ¬π  αáßΓαá ó¡πΓα¿ »α∩¼«πú«½∞¡¿¬á.
  566.      Åα«úαἼᠠ  fill_box(),    »α¿óÑñÑ¡¡á∩     ¡¿ªÑ,     ºá¬αáΦ¿óáÑΓ
  567.      »α∩¼«πú«½∞¡¿¬,  «»αÑñѽѡ¡δ⌐  ¬««αñ¿¡áΓἿ  ñóπσ  »α«Γ¿ó«»«½«ª¡δσ
  568.      πú½«ó,  ºáñá¡¡δ¼  µóÑΓ«¼.  é  ¡Ñ⌐  ¿ß»«½∞ºπÑΓß∩  Σπ¡¬µ¿∩  line(),
  569.      ºáñáεΘá∩ µóÑΓ ó¡πΓα¿ »α∩¼«πú«½∞¡¿¬á.
  570.  
  571.  
  572.         /* çá¬αáΦ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á ó ºáñá¡¡δ⌐ µóÑΓ */
  573.         void fill_box(startx,starty,endx,endy,color_code)
  574.         int startx,starty,endx,endy,color_code;
  575.         {
  576.            register int i,begin,end;
  577.  
  578.            begin=startx<endx ? startx:endx;
  579.            end=startx>endx ? startx:endx;
  580.  
  581.            for (i=begin;i<=end;++i)
  582.               line(i,starty,i,endy,color_code);
  583.          }
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  601. â½áóá IV                                                       -- 11 --
  602.  
  603.  
  604.                           é¢ùàÉùêéÇìêà ÄèÉôåìÄæÆàë
  605.      -----------------------------------------------------------------
  606.  
  607.           æá¼δ¼ íδßΓαδ¼ ¿  ½Ñú¬¿¼  ß»«ß«í«¼  óδτÑατ¿óá¡¿∩  «¬απª¡«ßΓÑ⌐
  608.      ∩ó½∩ÑΓß∩ ß»«ß«í, «ß¡«óá¡¡δ⌐ ¡á ¿ß»«½∞º«óá¡¿¿ «»∩Γ∞ Γᬿ á½ú«α¿Γ¼á
  609.      üαѺѡσá¼á,  »«σ«ªÑú« ¡á «ñ¡«¿¼Ñ¡¡δ⌐ á½ú«α¿Γ¼ óδτÑατ¿óá¡¿∩ ½¿¡¿⌐.
  610.      äá¡¡δ⌐  ¼ÑΓ«ñ  ΓᬪѠ ¡Ñ  ΓαÑíπÑΓ  óδτ¿ß½Ñ¡¿⌐  τ¿ßѽ  ß »½áóáεΘÑ⌐
  611.      Γ«τ¬«⌐,  ¬α«¼Ñ  óδτ¿ß½Ñ¡¿∩  ¬«φΣΣ¿µ¿Ñ¡Γá   ßªáΓ¿∩,   »«φΓ«¼π   «¡
  612.      «íÑß»Ñτ¿óáÑΓ  ñ«ßΓáΓ«τ¡«Ñ íδßΓα«ñÑ⌐ßΓó¿Ñ.  Å« ßπΘÑßΓóπ,  á½ú«α¿Γ¼
  613.      «ß¡«óá¡ ¡á »α¿αáΘÑ¡¿¿ ¬««αñ¿¡áΓ X ¿  Y  ¡á  óѽ¿τ¿¡π  »«úαÑΦ¡«ßΓ¿
  614.      ¼Ñªñπ  ¡¿¼¿.  ç¡áτÑ¡¿Ñ  »«úαÑΦ¡«ßΓ¿ ß«ñÑনΓß∩ ó »ÑαѼѡ«⌐ delta.
  615.      öπ¡¬µ¿∩  plot_circle()  óδ»«½¡∩ÑΓ  ºá»¿ß∞  Γ«τѬ  »«  «¬απª¡«ßΓ¿.
  616.      ÅÑαѼѡ¡á∩ asp_ratio ∩ó½∩ÑΓß∩ ú½«íá½∞¡«⌐,  Γ.¬.  «¡á ¿ß»«½∞ºπÑΓß∩
  617.      ¬á¬ ó Σπ¡¬µ¿¿  circle(),  Γᬠ ¿  ó  Σπ¡¬µ¿¿  plot_circle().  ¥Γá
  618.      »ÑαѼѡ¡á∩   ¼«ªÑΓ   íδΓ∞  »«½Ñº¡á  ß  Γ«τ¬¿  ºαÑ¡¿∩  ó«º¼«ª¡«ßΓ¿
  619.      πßΓá¡«ó½Ñ¡¿∩ ÑÑ  º¡áτÑ¡¿∩  ó¡Ñ  Σπ¡¬µ¿¿  circle()  ¿  ñá½∞¡Ñ⌐ΦÑú«
  620.      ¿ß»«½∞º«óá¡¿∩  ó¡πΓα¿  Σπ¡¬µ¿¿.  ÅπΓѼ  ¿º¼Ñ¡Ñ¡¿∩  º¡áτÑ¡¿∩  φΓ«⌐
  621.      »ÑαѼѡ¡«⌐   óδ  ¼«ªÑΓÑ  α¿ß«óáΓ∞  φ½½¿»ßδ.  Åáαá¼ÑΓαἿ  Σπ¡¬µ¿¿
  622.      circle() ∩ó½∩ÑΓß∩  µÑ¡Γα  «¬απª¡«ßΓ¿,  ÑÑ  αáñ¿πß ¿ µóÑΓ.  ÆÑ¬ßΓδ
  623.      Σπ¡¬µ¿⌐ »α¿óÑñÑ¡δ ¡¿ªÑ.
  624.  
  625.  
  626.          double asp_ratio;
  627.  
  628.         /* éδτÑατ¿óá¡¿Ñ «¬απª¡«ßΓ¿ ß ¿ß»«½∞º«ó᡿Ѽ á½ú«α¿Γ¼á
  629.            üαѺѡσá¼á */
  630.          void circle(x_center,y_center,radius,color_code)
  631.          int x_center,y_center,radius,color_code;
  632.          {
  633.             register x,y,delta;
  634.             asp_ratio=1.0; /* φΓ« τ¿ß½« ¼«ªÑΓ ¼Ñ¡∩ÑΓß∩ ó αẽ¿τ¡δσ
  635.                               ß½πτá∩σ */
  636.              y=radius;
  637.              delta=3-2*radius;
  638.              for (x=0;x<y; ) {
  639.                  plot_circle(x,y,x_center,y_center,color_code);
  640.                  if (delta<0)
  641.                     delta+=4*x+6;
  642.                  else {
  643.                     delta+=4*(x-y)+10;
  644.                     y--;
  645.                  }
  646.                  x++;
  647.               }
  648.               x=y;
  649.               if (y) plot_circle(x,y,x_center,y_center,color_code);
  650.            }
  651.  
  652.          /* öπ¡¬µ¿∩ »ÑτáΓáÑΓ Γ«τ¬¿, «»αÑñѽ∩εΘ¿Ñ «¬απª¡«ßΓ∞ */
  653.            void plot_circle(x,y,x_center,y_center,color_code)
  654.            int x,y,x_center,y_center,color_code;
  655.            {
  656.               int startx,starty,endx,endy,x1,y1;
  657.               starty=y*asp_ratio;
  658.  
  659.  
  660.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  661. â½áóá IV                                                       -- 12 --
  662.  
  663.  
  664.               endy=(y+1)*asp_ratio;
  665.               startx=x*asp_ratio;
  666.               endx=(x+1)*asp_ratio;
  667.  
  668.               for (x1=startx;x1<endx;++x1) {
  669.                  mempoint(x1+x_center,y+y_center,color_code);
  670.                  mempoint(x1+x_center,y_center-y,color_code);
  671.                  mempoint(x_center-x1,y+y_center,color_code);
  672.                  mempoint(x_center-x1,y_center-y,color_code);
  673.               }
  674.  
  675.               for (y1=starty;y1<endy;++y1) {
  676.                  mempoint(y1+x_center,x+y_center,color_code);
  677.                  mempoint(y1+x_center,y_center-x,color_code);
  678.                  mempoint(x_center-y1,x+y_center,color_code);
  679.                  mempoint(x_center-y1,y_center-x,color_code);
  680.               }
  681.            }
  682.  
  683.  
  684.           çá¬αáΦ¿óáΓ∞ «¬απª¡«ßΓ∞ ¼«ª¡« »πΓѼ »«óΓ«α¡«ú« ó맮óá Σπ¡¬µ¿¿
  685.      circle()  ß ºáñ᡿Ѽ  óßÑ í«½ÑÑ ¿  í«½ÑÑ  ¼Ñ¡∞ΦÑú«  αáñ¿πßá. ¥Γ«Γ
  686.      ß»«ß«í  ¿ß»«½∞ºπÑΓß∩  ó  Σπ¡¬µ¿¿   fill_circle(),  ΓѬßΓ  ¬«Γ«α«⌐
  687.      »α¿óÑñÑ¡ ¡¿ªÑ.
  688.  
  689.  
  690.          /* çá¬αáΦ¿óá¡¿Ñ «¬απª¡«ßΓ¿ »πΓѼ »«óΓ«α¡«ú« ó맮óá
  691.             circle() ß π¼Ñ¡∞ΦÑ¡¿Ñ¼ αáñ¿πßá */
  692.  
  693.             void fill_circle(x,y,r,c)
  694.             int x,y,r,c;
  695.             {
  696.                while (r) {
  697.                   circle(x,y,r,c);
  698.                   r--;
  699.                }
  700.              }
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  721. â½áóá IV                                                       -- 13 --
  722.  
  723.  
  724.                        ÅÉÄæÆàëÿǃ ÆàæÆÄéǃ ÅÉÄâÉÇîî¢
  725.      -----------------------------------------------------------------
  726.  
  727.           Åα¿óÑñÑ¡¡δÑ   ºñÑß∞  »α«úαἼᠠ¿½½εßΓα¿απεΓ   »α¿¼Ñ¡Ñ¡¿Ñ  ¿
  728.      ó«º¼«ª¡«ßΓ¿ αá¡ÑÑ «»¿ßá¡¡δσ Σπ¡¬µ¿⌐ »«ññÑ᪬¿  úαáΣ¿¬¿.
  729.  
  730.         /* Åα«úαá¼¼á, ¿½½εßΓα¿απεΘá∩ αáí«Γπ úαáΣ¿τÑ߬¿σ
  731.            Σπ¡¬µ¿⌐ */
  732.          #include "dos.h"
  733.          #include "stdio.h"
  734.  
  735.          void mode(),line(),box(),fill_box();
  736.          void mempoint(),palette(),xhairs();
  737.          void circle(),plot_circle(),fill_circle();
  738.  
  739.          double asp_ratio;
  740.  
  741.          main()
  742.          {
  743.          mode(4);
  744.          palette(0);
  745.          line(0,0,100,100,1);
  746.          box(50,50,80,90,2);
  747.          fill_box(100,0,120,40,3);
  748.          circle(100,160,30,2);
  749.          fill_circle(150,250,20,1);
  750.          getchar();
  751.          mode(2);
  752.         }
  753.              /* πßΓá¡«ó¬á »á½¿Γαδ */
  754.  
  755.          void palette(pnum)
  756.          int pnum;
  757.          {
  758.             union REGS r;
  759.  
  760.             r.h.bh=1; /* ¬«ñ 4 αѪ¿¼á úαáΣ¿¬¿ */
  761.             r.h.bl=pnum; /* ¡«¼Ñα »á½¿Γαδ */
  762.             r.h.ah=11; /* πßΓá¡áó½¿óáÑΓßá ñ½∩ ó맮óᠻ὿Γαδ */
  763.             int86(0x10,&r,&r);
  764.          }
  765.  
  766.           /* ôßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
  767.             void mode(mode_code)
  768.             int mode_code;
  769.             {
  770.                 union REGS r;
  771.                 r.h.al = mode_code;
  772.                 r.h.ah = 0;
  773.                 int86(0x10,&r,&r);
  774.              }
  775.  
  776.          /*  éδτÑατ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á  */
  777.         void box(startx,starty,endx,endy,color_code)
  778.  
  779.  
  780.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  781. â½áóá IV                                                       -- 14 --
  782.  
  783.  
  784.         int startx,starty,endx,endy,color_code;
  785.         {
  786.            line(startx,starty,endx,starty,color_code);
  787.            line(startx,starty,startx,endy,color_code);
  788.            line(startx,endy,endx,endy,color_code);
  789.            line(endx,starty,endx,endy,color_code);
  790.         }
  791.  
  792.       /* éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá ß ¿ß»«½∞º«ó᡿Ѽ
  793.          á½ú«α¿Γ¼á üαѺѡσá¼á */
  794.        void line(startx,starty,endx,endy,color)
  795.        int startx,starty,endx,endy,color;
  796.        {
  797.          register int t,distance;
  798.          int xerr=0,yerr=0,delta_x,delta_y;
  799.          int incx,incy;
  800.  
  801.        /* éδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿∩ ó «í«¿σ ¡á»αáó½Ñ¡¿∩σ         */
  802.          delta_x=endx-startx;
  803.          delta_y=endy-starty;
  804.  
  805.        /* Ä»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿∩ Φáúá,
  806.           Φáú óδτ¿ß½∩ÑΓß∩ ½¿í« »« óÑαΓ¿¬á½∞¡«⌐, ½¿í« »« ú«α¿º«¡Γá½∞¡«⌐
  807.           ½¿¡¿¿                   */
  808.           if (delta_x>0) incx=1;
  809.           else  if (delta_x==0) incx=0;
  810.           else  incx= -1;
  811.  
  812.           if (delta_y>0) incy=1;
  813.           else  if (delta_y==0) incy=0;
  814.           else  incy= -1;
  815.  
  816.         /* Ä»αÑñѽѡ¿Ñ ¬á¬«Ñ αáßßΓ«∩¡¿Ñ í«½∞ΦÑ */
  817.           delta_x=abs(delta_x);
  818.           delta_y=abs(delta_y);
  819.           if (delta_x>delta_y) distance=delta_x;
  820.           else distance=delta_y;
  821.  
  822.         /* éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ */
  823.           for (t=0; t<=distance+1; t++) {
  824.              mempoint(startx,starty,color);
  825.              xerr+=delta_x;
  826.              yerr+=delta_y;
  827.              if (xerr>distance) {
  828.                 xerr-=distance;
  829.                 startx+=incx;
  830.              }
  831.              if (yerr>distance) {
  832.                 yerr-=distance;
  833.                 starty+=incy;
  834.              }
  835.           }
  836.        }
  837.  
  838.  
  839.  
  840.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  841. â½áóá IV                                                       -- 15 --
  842.  
  843.  
  844.         /* çá¬αáΦ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á  ºáñá¡¡δ¼ µóÑΓ«¼ */
  845.  
  846.         void fill_box(startx,starty,endx,endy,color_code)
  847.         int startx,starty,endx,endy,color_code;
  848.         {
  849.            register int i,begin,end;
  850.  
  851.            begin=startx<endx ? startx:endx;
  852.            end=startx>endx ? startx:endx;
  853.  
  854.            for (i=begin;i<=end;++i)
  855.               line(i,starty,i,endy,color_code);
  856.          }
  857.  
  858.  
  859.         /* éδτÑατ¿óá¡¿Ñ «¬απª¡«ßΓ¿ ß ¿ß»«½∞º«ó᡿Ѽ á½ú«α¿Γ¼á
  860.            üαѺѡσá¼á */
  861.          void circle(x_center,y_center,radius,color_code)
  862.          int x_center,y_center,radius,color_code;
  863.          {
  864.             register x,y,delta;
  865.             asp_ratio=1.0; /* φΓ« τ¿ß½« ¼«ªÑΓ ¼Ñ¡∩ÑΓß∩ ó αẽ¿τ¡δσ
  866.                               ß½πτá∩σ */
  867.              y=radius;
  868.              delta=3-2*radius;
  869.              for (x=0;x<y; ) {
  870.                  plot_circle(x,y,x_center,y_center,color_code);
  871.                  if (delta<0)
  872.                     delta+=4*x+6;
  873.                  else {
  874.                     delta+=4*(x-y)+10;
  875.                     y--;
  876.                  }
  877.                  x++;
  878.               }
  879.               x=y;
  880.               if (y) plot_circle(x,y,x_center,y_center,color_code);
  881.            }
  882.  
  883.          /* öπ¡¬µ¿∩ ¿º«íαáªáÑΓ Γ«τ¬¿, «»αÑñѽ∩εΘ¿Ñ «¬απª¡«ßΓ∞ */
  884.            void plot_circle(x,y,x_center,y_center,color_code)
  885.            int x,y,x_center,y_center,color_code;
  886.            {
  887.               int startx,starty,endx,endy,x1,y1;
  888.               starty=y*asp_ratio;
  889.               endy=(y+1)*asp_ratio;
  890.               startx=x*asp_ratio;
  891.               endx=(x+1)*asp_ratio;
  892.  
  893.               for (x1=startx;x1<endx;++x1) {
  894.                  mempoint(x1+x_center,y+y_center,color_code);
  895.                  mempoint(x1+x_center,y_center-y,color_code);
  896.                  mempoint(x_center-x1,y+y_center,color_code);
  897.                  mempoint(x_center-x1,y_center-y,color_code);
  898.  
  899.  
  900.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  901. â½áóá IV                                                       -- 16 --
  902.  
  903.  
  904.               }
  905.  
  906.               for (y1=starty;y1<endy;++y1) {
  907.                  mempoint(y1+x_center,x+y_center,color_code);
  908.                  mempoint(y1+x_center,y_center-x,color_code);
  909.                  mempoint(x_center-y1,x+y_center,color_code);
  910.                  mempoint(x_center-y1,y_center-x,color_code);
  911.               }
  912.            }
  913.  
  914.  
  915.        /* çá¬αáΦ¿óá¡¿Ñ «¬απª¡«ßΓ¿ »πΓѼ »«óΓ«α¡«ú« ó맮óá
  916.             circle() ß π¼Ñ¡∞ΦÑ¡¿Ñ¼ αáñ¿πßá */
  917.             void fill_circle(x,y,r,c)
  918.             int x,y,r,c;
  919.             {
  920.                while (r) {
  921.                   circle(x,y,r,c);
  922.                   r--;
  923.                }
  924.          }
  925.  
  926.         /* çỿß∞ Γ«τ¬¿ ó CGA/EGA */
  927.          void mempoint(x,y,color_code)
  928.          int x,y,color_code;
  929.          {
  930.             union mask {
  931.                char c[2];
  932.                int i;
  933.             } bit_mask;
  934.             int i,index,bit_position;
  935.             unsigned char t;
  936.             char xor; /* "¿ß¬½ετáεΘÑÑ êïê" µóÑΓá ó ß½πτáÑ Ñú«
  937.                           ¿º¼Ñ¡Ñ¡¿∩ */
  938.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó »á¼∩Γ¿
  939.                                                       CGA */
  940.             bit_mask.i=0xFF3F;                 /* 11111111 00111111 ó
  941.                                                   ñó«¿τ¡«¼ ó¿ñÑ */
  942.             if (x<0 || x>199 || y<0 || y>319) return;
  943.             xor=color_code & 128;      /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
  944.                                           αѪ¿¼ "¿ß¬½ετáεΘÑú« êïê" */
  945.             color_code=color_code & 127;     /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
  946.  
  947.             /*  ôßΓá¡«ó¬á ¼á߬¿ í¿Γ«ó ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
  948.                 ó »αáóπε »«º¿µ¿ε */
  949.  
  950.              bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿ ó íá⌐ΓÑ */
  951.              color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
  952.                                         ó ¡πª¡πε »«º¿µ¿ε */
  953.              bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
  954.                                           ¡πª¡πε »«º¿µ¿ε */
  955.  
  956.              /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
  957.  
  958.  
  959.  
  960.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  961. â½áóá IV                                                       -- 17 --
  962.  
  963.  
  964.               index=x*40+(y%4);
  965.               if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
  966.                                        óΓ«α«⌐ í½«¬ */
  967.  
  968.               /* çỿß∞ µóÑΓá */
  969.                if (!xor) {  /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
  970.                   t=*(ptr+index) & bit_mask.c[0];
  971.                   *(ptr+index)=t|color_code;
  972.                }
  973.                else {
  974.                   t=*(ptr+index) | (char)0;
  975.                   *(ptr+index)=t & color_code;
  976.                }
  977.             }
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1021. â½áóá IV                                                       -- 18 --
  1022.  
  1023.  
  1024.                æÄòÉÇìàìêà ê çÇâÉôçèÇ âÉÇöêùàæèêò êçÄüÉÇåàìêë
  1025.      -----------------------------------------------------------------
  1026.  
  1027.           æ«σαá¡Ñ¡¿Ñ ¿   ºáúαπº¬á   úαáΣ¿τÑ߬¿σ  ¿º«íαáªÑ¡¿⌐  ∩ó½∩ÑΓß∩
  1028.      ñ«ó«½∞¡«  »α«ßΓδ¼  ñѽ«¼,  Γ.¬.  «íαẠ ¿º«íαáªÑ¡¿⌐  ¡áσ«ñ¿Γß∩  ó
  1029.      ó¿ñÑ«»á¼∩Γ¿ ñ¿ß»½Ñ∩, á ÑÑ ß«ñÑন¼«Ñ ½Ñú¬« ¬«»¿α«óáΓ∞ ¡á ñ¿ß¬«óδ⌐
  1030.      Σá⌐½.   â½áó¡«⌐   »α«í½Ñ¼«⌐   ∩ó½∩ÑΓß∩   ¡Ñ«íσ«ñ¿¼«ßΓ∞   óóÑñÑ¡¿∩
  1031.      »«½∞º«óáΓѽѼ  ¿¼Ñ¡¿  Σá⌐½á,  óó¿ñπ  Γ«ú«,  τΓ«  ºá»α«ß « óó«ñÑ ¿
  1032.      óóÑñÑ¡¡«Ñ ¿¼∩ Σá⌐½á ß«ΓαπΓ τáßΓ∞ ¿¡Σ«α¼áµ¿¿ ¡á φ¬αá¡Ñ.  ä½∩ Γ«ú«,
  1033.      τΓ«íδ   ¿ºíѪáΓ∞   φΓ«ú«,   αáºαáí«Γá¡δ   Σπ¡¬µ¿¿   save_pic()  ¿
  1034.      load_pic(),  ΓѬßΓδ ¬«Γ«αδσ »α¿ó«ñ∩Γß∩ ó ñá¡¡«¼  αáºñѽÑ.  ÅÑαóá∩
  1035.      Σπ¡¬µ¿∩  ß«σαá¡∩ÑΓ  14  óÑασ¡¿σ  ßΓ᫬  ¿º«íαáªÑ¡¿∩,  τ¿ßΓ¿Γ  φΓπ
  1036.      «í½áßΓ∞,  ºá»αáΦ¿óáÑΓ ¿¼∩ Σá⌐½á ¿,  »«ß½Ñ  Γ«ú«,  ¬á¬  «¡«  íπñÑΓ
  1037.      óóÑñÑ¡«, ó«ßßΓá¡áó½¿óáÑΓ ¿º«íαáªÑ¡¿Ñ.
  1038.  
  1039.  
  1040.         /* ß«σαá¡Ñ¡¿Ñ  úαáΣ¿τÑ߬«ú« ¿º«íαáªÑ¡¿∩ */
  1041.         void save_pic()
  1042.         {
  1043.           char fname[80];
  1044.           FILE *fp;
  1045.           register int i,j;
  1046.           char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  1047.                                                  »á¼∩Γ¿   CGA  */
  1048.           char far *temp;
  1049.           unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
  1050.  
  1051.           temp=ptr;
  1052.         /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
  1053.           for (i=0;i<14;++i)
  1054.              for (j=0;j<80;++j) {
  1055.                 buf[i][j]=*temp; /* τÑΓ¡δ⌐ íá⌐Γ */
  1056.                 buf[i][j+1]=*(temp+8152); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  1057.                 *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  1058.                 temp++;
  1059.              }
  1060.            goto_xy(0,0);
  1061.            printf("ê¼∩ Σá⌐½á:");
  1062.            gets(fname);
  1063.            if (!(fp=fopen(fname,"wb"))) {
  1064.                printf("öóá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
  1065.                return;
  1066.            }
  1067.  
  1068.            temp=ptr;
  1069.        /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
  1070.           for (i=0;i<14;++i)
  1071.              for (j=0;j<80;++j) {
  1072.                 *temp= buf[i][j]; /* τÑΓ¡δ⌐ íá⌐Γ */
  1073.                 *(temp+8125)=buf[i][j+1]; /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  1074.                 *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  1075.                 temp++;
  1076.              }
  1077.         /* ¬«»¿α«óá¡¿Ñ ¿º«íαáªÑ¡¿∩ ó Σá⌐½  */
  1078.  
  1079.  
  1080.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1081. â½áóá IV                                                       -- 19 --
  1082.  
  1083.  
  1084.            for (i=0;i<8152;i++) {
  1085.               putc(*ptr,fp); /* τÑΓ¡δ⌐ íá⌐Γ */
  1086.               putc(*(ptr+8125),fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  1087.               ptr++;
  1088.            }
  1089.  
  1090.            fclose(fp);
  1091.         }
  1092.  
  1093.        /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ */
  1094.          void load_pic()
  1095.          {
  1096.             char fname[80];
  1097.             FILE *fp;
  1098.             register int i,j;
  1099.  
  1100.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  1101.                                                    »á¼∩Γ¿   CGA  */
  1102.             char far *temp;
  1103.             unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
  1104.  
  1105.             temp=ptr;
  1106.         /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
  1107.             for (i=0;i<14;++i)
  1108.                for (j=0;j<80;j+=2) {
  1109.                   buf[i][j]=*temp;
  1110.                   buf[i][j+1]=*(temp+8152);
  1111.                   *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  1112.                   temp++;
  1113.                }
  1114.             goto_xy(0,0);
  1115.             printf("ê¼∩ Σá⌐½á:");
  1116.             gets(fname);
  1117.             if (!(fp=fopen(fname,"rb"))) {
  1118.                goto_xy(0,0);
  1119.                printf("öá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
  1120.                temp=ptr;
  1121.        /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
  1122.                for (i=0;i<14;++i)
  1123.                   for (j=0;j<80;j+=2) {
  1124.                      *temp= buf[i][j];
  1125.                      *(temp+8125)=buf[i][j+1];
  1126.                      temp++;
  1127.                   }
  1128.                return;
  1129.              }
  1130.       /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ ¿º Σá⌐½á */
  1131.            for (i=0;i<8152;i++) {
  1132.               *ptr=getc(fp); /* τÑΓ¡δ⌐ íá⌐Γ */
  1133.               *(ptr+8125)=getc(fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  1134.               ptr++;
  1135.            }
  1136.  
  1137.            fclose(fp);
  1138.  
  1139.  
  1140.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1141. â½áóá IV                                                       -- 20 --
  1142.  
  1143.  
  1144.         }
  1145.  
  1146.           Å«ñ»α«úαá¼¼δ  ¡áτ¿¡áεΓ  «íαáí«Γ¬π   ó¿ñÑ«»á¼∩Γ¿,  ¡áτ¿¡á∩  ß
  1147.      áñαÑßá,  ß«ñÑαªáΘÑú«ß∩  ó π¬áºáΓѽѠtemp  ßτ¿Γδóá∩  ¿½¿ ºá»¿ßδóá∩
  1148.      ¬áªñδ⌐ τÑΓ¡δ⌐ ¿ ¡ÑτÑΓ¡δ⌐ íá⌐Γδ ó »«α∩ñ¬Ñ  ó«ºαáßΓá¡¿∩ ¿σ áñαÑß«ó.
  1149.      Æá¬«⌐   »«ñσ«ñ   »«ºó«½∩ÑΓ   ñ«í¿Γ∞ß∩   »α«ßΓ«Γδ   ¿  ¡áú½∩ñ¡«ßΓ¿
  1150.      Σπ¡¬µ¿«¡¿α«óá¡¿∩   αáßß¼«ΓαÑ¡¡δσ   óδΦÑ  »«ñ»α«úαá¼¼.   é  ß½πτáÑ
  1151.      «íαáí«Γ¬¿  ó¿ñÑ«»á¼∩Γ¿  ó  »«α∩ñ¬Ñ  ó«ºαáßΓá¡¿∩  áñαÑß«ó, ó¡áτá½Ñ
  1152.      íπñÑΓ «Γ«íαáªáΓ∞ß∩ τÑΓ¡á∩ Γ«τ¬á αáßΓαá, á ºáΓѼ - ¡ÑτÑΓ¡á∩.
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1201. â½áóá IV                                                       -- 21 --
  1202.  
  1203.  
  1204.                          äôüïêÉÄéÇìêà ùÇæÆê ¥èÉÇìÇ
  1205.      -----------------------------------------------------------------
  1206.  
  1207.           ê¡«úñá íδóáÑΓ  »«½Ñº¡δ¼  ß¬«»¿α«óáΓ∞  τáßΓ∞  φ¬αá¡á ó ñαπúπε
  1208.      «í½áßΓ∞.  ¥Γ« ½Ñú¬« óδ»«½¡¿Γ∞  ¿ß»«½∞ºπ∩  Σπ¡¬µ¿ε  copy(),  ΓѬßΓ
  1209.      ¬«Γ«α«⌐ »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
  1210.  
  1211.           /* ¬«»¿α«óá¡¿Ñ τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
  1212.           void copy(startx,starty,endx,endy,x,y)
  1213.           int startx,starty;      /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
  1214.           int endx,endy;          /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
  1215.                                      ¬«»¿α«óá¡¿∩ */
  1216.           int x,y;      /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
  1217.                            ¬πñá íπñÑΓ »α«ó«ñ¿Γß∩ ¬«»¿α«óá¡¿Ñ */
  1218.           {
  1219.              int i,j;
  1220.              unsigned char c;
  1221.  
  1222.              for (;startx<endx;startx++,x++)
  1223.                 for (i=starty,j=y;i<endy;i++,j++) {
  1224.                    c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
  1225.                    mempoint(x,j,c); /* ºá»¿ß∞ ÑÑ ó ¡«óπε «í½áßΓ∞ */
  1226.                  }
  1227.             }
  1228.  
  1229.  
  1230.           èᬠóδ ¼«ú½¿ πíÑñ¿Γ∞ß∩,  »α¿ «íαáΘÑ¡¿¿ ¬ Σπ¡¬µ¿¿¼ ó ¬áτÑßΓóÑ
  1231.      ÑÑ   áαúπ¼Ñ¡Γ«ó   π¬áºδóáεΓß∩   óÑασ¡∩∩  ½Ñóá∩  ¿  ¡¿ª¡∩∩  »αáóá∩
  1232.      ¬««αñ¿¡áΓδ πú½«ó «í½áßΓ¿,  ¬«Γ«αá∩ íπñÑΓ ¬«»¿α«óáΓ∞ß∩,  ¿ óÑασ¡∩∩
  1233.      ½Ñóá∩ ¬««αñ¿¡áΓδ, ¬πñá ñѽáÑΓß∩ ¬«»¿∩.
  1234.  
  1235.           éδ ΓᬪѠ ¼«ªÑΓÑ  πíÑñ¿Γß∩,  τΓ«  ß  ¡Ñí«½∞Φ¿¼¿  ¿º¼Ñ¡Ñ¡¿∩¼¿
  1236.      Σπ¡¬µ¿ε  copy()  ¼«ª¡«  »αÑ«íαẫóáΓ∞  ó  Σπ¡¬µ¿ε move(). öπ¡¬µ¿∩
  1237.      move() »ÑαÑßδ½áÑΓ  π¬áºá¡¡πε  «í½áßΓ∞  ó ñαπúπε ¿ τ¿ßΓ¿Γ ¿ßσ«ñ¡«Ñ
  1238.      ¼ÑßΓ«. ÆÑ¬ßΓ Σπ¡¬µ¿¿ »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
  1239.  
  1240.  
  1241.  
  1242.        /* ÅÑαÑß佬á τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
  1243.           void move(startx,starty,endx,endy,x,y)
  1244.           int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
  1245.           int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
  1246.                             »ÑαÑß佬¿ */
  1247.           int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
  1248.                      ¬πñá íπñÑΓ »α«ó«ñ¿Γß∩ »ÑαÑß佬á */
  1249.           {
  1250.              int i,j;
  1251.              unsigned char c;
  1252.  
  1253.              for (;startx<endx;startx++,x++)
  1254.                 for (i=starty;j=y;i<endy;i++,j++) {
  1255.                    c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
  1256.                    mempoint(startx,i,0); /* ßΓ¿αá¡¿Ñ ßΓáα«ú«
  1257.                                             ¿º«íαáªÑ¡¿∩ */
  1258.  
  1259.  
  1260.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1261. â½áóá IV                                                       -- 22 --
  1262.  
  1263.  
  1264.                    mempoint(x,j,c); /* ºá»¿ß∞ Γ«τ¬¿ ó ¡«óπε «í½áßΓ∞ */
  1265.                  }
  1266.             }
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1321. â½áóá IV                                                       -- 23 --
  1322.  
  1323.  
  1324.                      éÉÇÖàìêà ÆÄùèê é ÅïÄæèÄæÆê ¥èÉÇìÇ
  1325.      -----------------------------------------------------------------
  1326.  
  1327.           éαáΘÑ¡¿Ñ Γ«τ¬¿  ó  »½«ß¬«ßΓ¿ φ¬αá¡á (ñóπ¼Ñα¡«¼ »α«ßΓαá¡ßΓóÑ)
  1328.      »αÑñßΓáó½∩ÑΓ ß«í«⌐ ñ«ó«½∞¡« »α«ßΓπε ºáñáτπ ó  ñѬáαΓ«ó«⌐  ß¿ßΓѼÑ
  1329.      ¬««αñ¿¡áΓ.  éδ ¼«ªÑΓÑ óß»«¼¡¿Γ∞ ¿º ¬παßá á¡á½¿Γ¿τÑ߬«⌐ úÑ«¼ÑΓα¿¿,
  1330.      τΓ« óαáΘÑ¡¿Ñ Γ«τ¬¿  ó«¬απú  µÑ¡Γαá  ¡á  πú«½  theta,  «»¿ßδóáÑΓß∩
  1331.      Σ«α¼π½«⌐:
  1332.  
  1333.               new_x = old_x * cos(theta) - old_y * sin(theta)
  1334.               new_y = old_x * sin(theta) - old_y * cos(theta)
  1335.  
  1336.           àñ¿¡ßΓóÑ¡¡«⌐ ß½«ª¡«ßΓ∞ε »α¿  π»«ΓαÑí½Ñ¡¿¿  φΓ¿σ  Σ«α¼π½  ñ½∩
  1337.      úαáΣ¿τÑ߬¿σ ñ¿ß»½ÑÑó íπñÑΓ ∩ó½∩Γß∩ Γ«Γ Σá¬Γ, τΓ« φ¬αá¡ ñ¿ß»½Ñ∩ ¡Ñ
  1338.      ∩ó½∩ÑΓß∩ ñѬáαΓ«óδ¼ »α«ßΓαá¡ßΓó«¼.  äѬáαΓ«óδ  «ß¿  «»αÑñѽ∩εΓ  4
  1339.      ¬óáñαá¡Γá,   ¬á¬  φΓ«  »«¬áºá¡«  ¡á  α¿ßπ¡¬Ñ  4-2.  Äñ¡á¬«  φ¬αá¡
  1340.      ΓÑନ¡á½á »αÑñßΓáó½∩ÑΓ ß«í«⌐ «ñ¿¡ ¿º ¬óáñαá¡Γ«ó,  «ß¿  X  ¿  Y  ó
  1341.      ¬«Γ«α«¼   »ÑαÑóÑα¡πΓδ.   ä½∩  αÑΦÑ¡¿∩  φΓ«⌐  »α«í½Ñ¼δ  ¡Ñ«íσ«ñ¿¼«
  1342.      «»αÑñѽ¿Γ∞ ¡«óδ⌐ µÑ¡Γα ¿ »α¿óÑßΓ¿ ó ß««ΓóÑΓßΓó¿Ñ ¬««αñ¿¡áΓδ X ¿ Y
  1343.      φ¬αá¡á  ¿ ¬««αñ¿¡áΓδ «ßÑ⌐ ñѬáαΓ«óá »α«ßΓαá¡ßΓóá.  ïεíá∩ Γ«τ¬á ¡á
  1344.      φ¬αá¡Ñ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á ó ¬áτÑßΓóÑ µÑ¡Γαá, ¡« «íδτ¡« µÑ¡Γα
  1345.      «»αÑñѽ∩ÑΓß∩  ¬á¬  ¼«ª¡«  í½¿ªÑ  ¬  µÑ¡Γαπ  «íΩѬΓá,  ¬«Γ«αδ⌐  ¼δ
  1346.      ß«í¿αáѼß∩ óαáΘáΓ∞.  öπ¡¬µ¿∩  rotate_point(),  »α¿óÑñÑ¡¡á∩  ¡¿ªÑ,
  1347.      óδτ¿ß½∩ÑΓ  óѽ¿τ¿¡π  ¡«óδσ  º¡áτÑ¡¿⌐  X  ¿  Y  ñ½∩ ºáñá¡¡«ú« πú½á
  1348.      óαáΘÑ¡¿∩.
  1349.  
  1350.  
  1351.         /* éαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ß ¬««αñ¿¡áΓἿ
  1352.            x_org ¿ y_org ¡á πú«½ theta */
  1353.           void rotate_point(theta,x,y,x_org,y_org)
  1354.           double theta,*x,*y;
  1355.           int x_org,y_org;
  1356.           {
  1357.              double tx,ty;
  1358.  
  1359.         /* ¡«α¼á½¿ºáµ¿∩ X ¿ Y ¬ ¡áτá½∞¡«¼π áñαÑßπ */
  1360.              tx=*x-x_org;
  1361.              ty=*y-y_org;
  1362.  
  1363.         /* óαáΘÑ¡¿Ñ */
  1364.               *x=tx*cos(theta)-ty*sin(theta);
  1365.               *y=tx*sin(theta)-ty*cos(theta);
  1366.  
  1367.          /* ó«ºóαáΘÑ¡¿Ñ º¡áτÑ¡¿⌐ ¬««αñ¿¡áΓ */
  1368.               *x+=x_org;
  1369.               *y+=y_org;
  1370.            }
  1371.  
  1372.  
  1373.           çá¼ÑΓ¿¼, τΓ«  rotate_point()  ¿º¼Ñ¡∩ÑΓ »áαá¼ÑΓαδ X ¿ Y »πΓѼ
  1374.      »α¿ßó«Ñ¡¿∩ ¿¼ ΓαÑíπѼ«ú« º¡áτÑ¡¿Ñ ñ½∩  »«½πτÑ¡¿∩  πú½á  óαáΘÑ¡¿∩,
  1375.      ºáñá¡¡«ú« »ÑαѼѡ¡«⌐ theta. ôú«½ óαáΘÑ¡¿∩ ºáñáÑΓß∩ ó αáñ¿á¡áσ.
  1376.  
  1377.  
  1378.  
  1379.  
  1380.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1381. â½áóá IV                                                       -- 24 --
  1382.  
  1383.  
  1384.      ┌──────────────────────────────────────────────────────────────┐
  1385.      │                                                              │
  1386.      │  äѬáαΓ«óá ß¿ßΓѼᠬ««αñ¿¡áΓ                Y                │
  1387.      │                                    II       ^       I        │
  1388.      │                                     +,-     │     +,+        │
  1389.      │                                             │                │
  1390.      │                                             │0.0             │
  1391.      │                                    ─────────┼───────── X     │
  1392.      │                                             │                │
  1393.      │                                     -,-     │     -,+        │
  1394.      │                                             │                │
  1395.      │                                   III       ∙       IV       │
  1396.      │                                                              │
  1397.      │                                                              │
  1398.      │                                                    0.0       │
  1399.      │  âαáΣ¿τÑ߬¿⌐ φ¬αá¡                          ┌────────── Y    │
  1400.      │                                             │                │
  1401.      │                                             │     +,+        │
  1402.      │                                             │                │
  1403.      │                                             ∙                │
  1404.      │                                             X                │
  1405.      └──────────────────────────────────────────────────────────────┘
  1406.  
  1407.      É¿ß. 4-2. äѬáαΓ«óδ ¬««αñ¿¡áΓδ ¡á úαáΣ¿τÑ߬«¼ φ¬αá¡Ñ.
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1441. â½áóá IV                                                       -- 25 --
  1442.  
  1443.  
  1444.      éαáΘÑ¡¿Ñ «í∞ѬΓá
  1445.      ----------------
  1446.  
  1447.           ò«Γ∩ Σπ¡¬µ¿∩ rotate_point(),  óδτ¿ß½∩εΘá∩ ΓαÑíπѼδÑ º¡áτÑ¡¿∩
  1448.      ¬««αñ¿¡áΓ  X  ¿ Y »α¿ óαáΘÑ¡¿¿ Γ«τ¬¿,  πªÑ íδ½á ¡á¼¿ αáßß¼«ΓαÑ¡á.
  1449.      Äñ¡á¬«,  «¡á ¡Ñ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á ñ½∩ óαáΘÑ¡¿∩  (»«ó«α«Γ«ó)
  1450.      «íΩÑ¬Γ«ó. ä½∩ φΓ«ú« ¡Ñ«íσ«ñ¿¼á ñαπúá∩ Σπ¡¬µ¿∩. Å«ñ «íΩÑ¬Γ«¼ ºñÑß∞
  1451.      ¿  ñá½ÑÑ  íπñѼ  »«¡¿¼áΓ∞  ¡áí«α   ßÑú¼Ñ¡Γ«ó   »α∩¼δσ   «ΓαѺ¬«ó.
  1452.      è««αñ¿¡áΓδ  ¬αá⌐¡¿σ  Γ«τѬ ¬áªñ«ú« «ΓαѺ¬á ß«ñÑαªáΓß∩ ó ñóπ¼Ñα¡«¼
  1453.      ¼áßß¿óÑ τ¿ßѽ ß »½áóáεΘÑ⌐ Γ«τ¬«⌐.  èáªñá∩ ßΓα«¬á ¼áßß¿óá ß«ñÑনΓ
  1454.      ¡áτá½∞¡δÑ  ¿  ¬«¡Ñτ¡δÑ ¬««αñ¿¡áΓδ ñá¡¡«ú« «ΓαѺ¬á.  ¥Γ« «º¡áτáÑΓ,
  1455.      τΓ« »Ñαóá∩  αẼÑα¡«ßΓ∞  ¼áßß¿óá  »αÑñßΓáó½∩ÑΓ  ß«í«⌐  ¬«½¿τÑßΓó«
  1456.      «ΓαѺ¬«ó,  óσ«ñ∩Θ¿σ ó ß«ßΓáó «íΩѬΓá,  á óΓ«αá∩ αẼÑα¡«ßΓ∞ íπñÑΓ
  1457.      αáó¡á  4  (τ¿ß½«  ¬««αñ¿¡áΓ  ¬αá⌐¡¿σ  Γ«τѬ  «ΓαѺ¬á).  ìá»α¿¼Ñα,
  1458.      ¼áßß¿ó, »α¿óÑñÑ¡¡δ⌐ ¡¿ªÑ
  1459.  
  1460.           double object [10][4];
  1461.  
  1462.      «»αÑñѽ∩ÑΓ «íΩѬΓ, ß«ßΓ«∩Θ¿⌐ ¿º 10 «ΓαѺ¬«ó.
  1463.  
  1464.           èᬠ»αá󿽫,   ¼áß߿󠠫αúá¡¿ºπÑΓß∩  Γá¬,  ¬á¬  »«¬áºá¡«  ¡á
  1465.      α¿ßπ¡¬Ñ 4-3.
  1466.  
  1467.      ┌───────────────────────────────────────────────────────────────┐
  1468.      │                                                               │
  1469.      │  ÅÑαóδ⌐        éΓ«α«⌐ ────────>                               │
  1470.      │  ¿¡ñѬߠ       ¿¡ñѬߠ                                        │
  1471.      │                                                               │
  1472.      │    │             0           1            2           3       │
  1473.      │    │                                                          │
  1474.      │    │                                                          │
  1475.      │    V                                                          │
  1476.      │                                                               │
  1477.      │    0          start_X1     start_Y1     end_X1     end_Y1     │
  1478.      │                                                               │
  1479.      │    1          start_X2     start_Y2     end_X2     end_Y2     │
  1480.      │                                                               │
  1481.      │    2          start_X3     start_Y3     end_X3      end_Y3    │
  1482.      │                                                               │
  1483.      │    3          start_X4     start_Y4     end_X4      end_Y4    │
  1484.      │    .             .                                            │
  1485.      │    .             .                                            │
  1486.      │    .             .                                            │
  1487.      │    n          start_Xn     start_Yn     end_Xn      end_Yn    │
  1488.      └───────────────────────────────────────────────────────────────┘
  1489.  
  1490.      É¿ß. 4-3. ôß½«ó¡á∩ «αúá¡¿ºáµ¿∩ ¼áßß¿óá.
  1491.  
  1492.  
  1493.           Ä»αÑñѽ¿Γ∞ «íΩÑ¬Γ  -  φΓ«  º¡áτ¿Γ   αẼÑßΓ¿Γ∞   ó   ¼áßß¿óÑ
  1494.      ¬««αñ¿¡áΓδ  ¡áτá½∞¡δσ  ¿  ¬«¡Ñτ¡δσ  Γ«τѬ «ΓαѺ¬«ó,  ß«ßΓáó½∩εΘ¿σ
  1495.      «íΩѬΓ.  ìá»α¿¼Ñα,  Ñß½¿ «íΩÑ¬Γ »αÑñßΓáó½∩ÑΓ ß«í«⌐  »α∩¼«πú«½∞¡¿¬
  1496.      ó¿ñá:
  1497.  
  1498.  
  1499.  
  1500.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1501. â½áóá IV                                                       -- 26 --
  1502.  
  1503.  
  1504.                          0.0┌─────────────────┐0.10
  1505.                             │                 │
  1506.                             │                 │
  1507.                             │                 │
  1508.                             │                 │
  1509.                         10.0└─────────────────┘10.10
  1510.  
  1511.      Γ« ó  ¼áßß¿ó,  «»αÑñѽ∩εΘ¿⌐   ñá¡¡δ⌐   »α∩¼«πú«½∞¡¿¬,   ºá¡«ß∩Γß∩
  1512.      ß½ÑñπεΘ¿Ñ τ¿ß½á:
  1513.  
  1514.           object[0][0] = 0; object[0][1] = 0;
  1515.           object[0][0] = 0; object[0][3] = 10;
  1516.  
  1517.           object[1][0] = 0; object[1][1] = 10;
  1518.           object[1][0] = 10; object[1][3] = 10;
  1519.  
  1520.           object[2][0] = 10; object[2][1] = 10;
  1521.           object[2][0] = 10; object[2][3] = 0;
  1522.  
  1523.           object[3][0] = 10; object[3][1] = 0;
  1524.           object[3][0] = 0; object[3][3] = 0;
  1525.  
  1526.           Å«ß½Ñ Γ«ú«,  ¬á¬  «íΩÑ¬Γ  «»αÑñѽѡ,  óδ ¼«ªÑΓÑ óαáΘáΓ∞ Ñú«,
  1527.      ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε rotate_object(),  »α¿óÑñÑ¡¡πε ¡¿ªÑ,  »« τáß«ó«⌐
  1528.      ßΓαѽ¬Ñ  (¬½áó¿Φá  <R>)  ¿½¿  ó  »α«Γ¿ó«»«½«ª¡πε ßΓ«α«¡π (¬½áó¿Φá
  1529.      <L>).
  1530.  
  1531.  
  1532.           /* éαáΘÑ¡¿Ñ ºáñá¡¡δσ «íΩÑ¬Γ«ó */
  1533.  
  1534.           void rotate_object(ob, theta, x, y, sides)
  1535.           double ob[][4]; /* «»¿ßá¡¿Ñ «íΩѬΓá */
  1536.           double theta;   /* πú«½ »«ó«α«Γá ó αáñ¿á¡áσ */
  1537.           int x, y;
  1538.           int sides;
  1539.             {
  1540.             register int i, j;
  1541.             double tempx, tempy;
  1542.             char ch;
  1543.  
  1544.             for(;;)
  1545.               {
  1546.               ch = getch(); /* óó«ñ »α¿º¡á¬á ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ */
  1547.               switch(tolower(ch))
  1548.                 {
  1549.                 case 'l': /* óαáΘÑ¡¿Ñ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿ */
  1550.                   theta = theta < 0 ? -theta : theta;
  1551.                   break;
  1552.                 case 'r': /* óαáΘÑ¡¿Ñ »« τáß«ó«⌐ ßΓαѽ¬Ñ  */
  1553.                   theta = theta > 0 ? -theta : theta;
  1554.                   break;
  1555.                 default: return;
  1556.                 }
  1557.               for(j=0; j<=sides; j++) /* ßΓ¿αá¡¿Ñ ßΓáαδσ ½¿¡¿⌐  */
  1558.  
  1559.  
  1560.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1561. â½áóá IV                                                       -- 27 --
  1562.  
  1563.  
  1564.                 {
  1565.                 line((int) ob[j][0], (int) ob[j][1],
  1566.                      (int) ob[j][2], (int) ob[j][3], 0);
  1567.                 rotate_point(theta, &ob[j][0],
  1568.                              &ob[j][1], x, y);
  1569.                 rotate_point(theta, &ob[j][2], &ob[j][3], x, y);
  1570.                 line((int) ob[j][0], (int) ob[j][1],
  1571.                      (int) ob[j][2], (int) ob[j][3], 2);
  1572.                 }
  1573.               }
  1574.             }
  1575.  
  1576.           èᬠ»«¬áºá¡«  ó «»¿ßá¡¿¿ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ rotate_object(),
  1577.      óαáΘÑ¡¿Ñ «ßπΘÑßΓó½∩ÑΓß∩ ó«¬απú µÑ¡Γαá, ºáñá¡¡«ú« ¬««αñ¿¡áΓἿ X ¿
  1578.      Y, ¡á πú«½, óѽ¿τ¿¡á ¬«Γ«α«ú« ºáñá¡á »áαá¼ÑΓα«¼ theta ó αáñ¿á¡áσ.
  1579.      î¿¡¿¼á½∞¡«Ñ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá theta αáó¡« 0.01  αáñ¿á¡. çá¼ÑΓ¿¼,
  1580.      τΓ«  «íΩÑ¬Γ  ß¡áτá½á  ßΓ¿αáÑΓß∩  ¿º ßΓáα«⌐ «í½áßΓ¿ αẼÑΘÑ¡¿∩,  á
  1581.      ºáΓѼ »ÑαÑα¿ß«óδóáÑΓß∩ ó¡«ó∞.  àß½¿ φΓ«  πß½«ó¿Ñ  ¡Ñ  ¼«ªÑΓ  íδΓ∞
  1582.      óδ»«½¡Ñ¡«,  Γ«  φ¬αá¡  «¬αáΦ¿óáÑΓß∩  ó ú«½πí«⌐ µóÑΓ.  ìÑ«íσ«ñ¿¼δ¼
  1583.      πß½«ó¿Ñ¼   óδ»«½¡Ñ¡¿∩    »α«úαá¼¼δ    rotate_object()    ∩ó½∩ÑΓß∩
  1584.      «í∩ºáΓѽ∞¡«Ñ ºáñá¡¿Ñ »áαá¼ÑΓαá sides.
  1585.  
  1586.           Åα¿óÑñÑ¡¡á∩ ¡¿ªÑ Σπ¡¬µ¿∩ display_object() ¡Ñ ¿¼ÑÑΓ «Γ¡«ΦÑ¡¿∩
  1587.      ¬ óαáΘÑ¡¿ε «íΩÑ¬Γ«ó,  ¡« «¡á ¼«ªÑΓ  íδΓ∞  »«½Ñº¡á  »α¿  αáí«ΓÑ  ß
  1588.      «íΩѬΓἿ.  Ä¡á α¿ßπÑΓ ¡á φ¬αá¡Ñ «íΩѬΓδ,  «»αÑñѽѡ¡δÑ ó ¼áßß¿óÑ
  1589.      ob.
  1590.  
  1591.           /* «Γ«íαáªÑ¡¿Ñ «íΩѬΓá ¡á φ¬αá¡Ñ */
  1592.           void display_object(ob, sides)
  1593.           double ob[][4];
  1594.           int sides;
  1595.           {
  1596.             register int i;
  1597.  
  1598.             for(i=0; i<sides; i++)
  1599.               line((int)ob[i][0], (int)ob[i][1],
  1600.                    (int)ob[i][2], (int)ob[i][3], 2);
  1601.             }
  1602.  
  1603.           é ¬áτÑßΓóÑ  ¿½½εßΓαᵿ¿   πñ«íßΓóá   ¿ß»«½∞º«óá¡¿∩   Σπ¡¬µ¿⌐
  1604.      óαáΘÑ¡¿∩  «íΩÑ¬Γ«ó ¡¿ªÑ »α¿ó«ñ∩Γß∩ »α«úαá¼¼δ óαáΘÑ¡¿∩ ¿º«íαáªÑ¡¿∩
  1605.      ñ«¼á.  ìá α¿ßπ¡¬Ñ 4-4 »«¬áºá¡« ¿º«íαáªÑ¡¿Ñ  ¡á  φ¬αá¡Ñ  ΓÑନ¡á½á
  1606.      ñ«¼á  »α¿  αẽ¿τ¡δσ  πú½áσ  »«ó«α«Γá ó«¬απú ß«íßΓóÑ¡¡«ú« µÑ¡Γαá.
  1607.      Åα∩¼«πú«½∞¡¿¬,  «íαá¼½∩εΘ¿⌐ ¿º«íαáªÑ¡¿Ñ óαáΘáѼ«ú« ñ«¼á,  »«¼«ªÑΓ
  1608.      óá¼ »αáó¿½∞¡« «µÑ¡¿Γ∞ ¼áßΦΓáí ¿ »Ñαß»Ñ¬Γ¿óπ.
  1609.  
  1610.      _________________________________________________________________
  1611.  
  1612.         Åα¿¼. »Ñα.  É¿ßπ¡«¬ 4-4 ¡Ñ ¼«ªÑΓ íδΓ∞ ó«ß»α«¿ºóÑñÑ¡ ¿¼ÑεΘ¿¼¿ß∩
  1613.                     ßαÑñßΓóἿ.
  1614.      _________________________________________________________________
  1615.  
  1616.      É¿ß. 4-4. éαáΘÑ¡¿Ñ «íΩѬΓá.
  1617.  
  1618.  
  1619.  
  1620.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1621. â½áóá IV                                                       -- 28 --
  1622.  
  1623.  
  1624.  
  1625.           /* Åα¿¼Ñα  óαáΘÑ¡¿∩  ¿º«íαáªÑ¡¿∩  «íΩѬΓá  ß  ¿ß»«½∞º«ó᡿Ѽ
  1626.              áñá»ΓÑαá CGA/EGA ó 4 úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ
  1627.           */
  1628.  
  1629.           #include "dos.h"
  1630.           #include "stdio.h"
  1631.           #include "math.h"
  1632.  
  1633.           void mode(), line(), mempoint(), palette();
  1634.           void rotate_point(), rotate_object(), display_object();
  1635.  
  1636.           /* ¼áßß¿ó house «»αÑñѽ∩ÑΓ ¿º«íαáªÑ¡¿Ñ ñ«¼á */
  1637.           double house[][4] =
  1638.             {
  1639.        /*  startx,   starty,        endx,         endy  */
  1640.            120,         120,         120,          200,   /* ñ«¼ */
  1641.            120,         200,          80,          200,
  1642.            80,          120,          80,          200,
  1643.            80,          120,         120,          120,
  1644.            60,          160,          80,          120,   /* ¬αδΦa*/
  1645.            60,          160,          80,          200,
  1646.            120,         155,         100,          155,   /* ñóÑα¿*/
  1647.            100,         155,         100,          165,
  1648.            100,         165,         120,          165,
  1649.            90,          130,         100,          130,   /* «¬¡á */
  1650.            90,          130,          90,          140,
  1651.            100,         130,         100,          140,
  1652.            90,          140,         100,          140,
  1653.            90,          180,         100,          180,
  1654.            90,          180,          90,          190,
  1655.            100,         180,         100,          190
  1656.            };
  1657.           main()
  1658.             {
  1659.             union k
  1660.               {
  1661.               char c[2];
  1662.               int i;
  1663.               }  key;
  1664.  
  1665.             mode(4);    /* αѪ¿¼   = 4 */
  1666.             palette(0); /* »á½¿Γαá = 0 */
  1667.  
  1668.             /* α¿ßπ¡«¬ αἬ¿,«íαá¼½∩εΘÑ⌐ ñ«¼ */
  1669.             line (30, 70, 30, 260, 2);
  1670.             line (160, 70, 160, 260, 2);
  1671.             line (30, 70, 160, 70, 2);
  1672.             line (30, 260, 160, 260, 2);
  1673.  
  1674.             display_object(house, 17);
  1675.             getchar();
  1676.             rotate_object(house, 0.025, 90, 160, 17);
  1677.             mode(3);
  1678.  
  1679.  
  1680.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1681. â½áóá IV                                                       -- 29 --
  1682.  
  1683.  
  1684.             }
  1685.  
  1686.           /* éδí«α »á½¿Γαδ */
  1687.           void palette(pnum)
  1688.           int pnum;
  1689.             {
  1690.             union REGS r;
  1691.  
  1692.             r.h.bh = 1; /* ¬«ñ 4 úαáΣ¿τÑ߬«ú« αѪ¿¼á */
  1693.             r.h.bl = pnum;
  1694.             r.h.ah = 11;
  1695.             int86(0x10, &r, &r);
  1696.             }
  1697.  
  1698.           /* éδí«α αѪ¿¼á */
  1699.           void mode(mode_code)
  1700.           int mode_code;
  1701.             {
  1702.             union REGS r;
  1703.  
  1704.             r.h.al = mode_code;
  1705.             r.h.ah = 0;
  1706.             int86(0x10, &r, &r);
  1707.             }
  1708.  
  1709.           /* É¿ßπ¡«¬ «ΓαѺ¬á »α∩¼«⌐ ºáñá¡¡«ú« µóÑΓá */
  1710.           void line(start_x, start_y, endx, endy, color)
  1711.           int start_x, start_y, endx, endy, color;
  1712.             {
  1713.             register int t, distance;
  1714.             int x=0, y=0, delta_x, delta_y;
  1715.             int incx, incy;
  1716.  
  1717.             /* óδτ¿ß½Ñ¡¿Ñ »α¿αáΘÑ¡¿⌐ »« x ¿ »« y */
  1718.             delta_x = endx-start_x;
  1719.             delta_y = endy-start_y;
  1720.  
  1721.             /* óδτ¿ß½Ñ¡¿Ñ »α¿º¡á¬«ó ¡á»αáó½Ñ¡¿⌐ «ΓαѺ¬á */
  1722.             if(delta_x>0)
  1723.               incx=1;
  1724.             else
  1725.               if(delta_x==0)
  1726.                 incx=0;
  1727.               else
  1728.                 incx= -1;
  1729.             if(delta_y>0)
  1730.               incy=1;
  1731.             else
  1732.               if(delta_y==0)
  1733.                 incy=0;
  1734.               else
  1735.                 incy= -1;
  1736.             delta_x=abs(delta_x);
  1737.             delta_y=abs(delta_y);
  1738.  
  1739.  
  1740.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1741. â½áóá IV                                                       -- 30 --
  1742.  
  1743.  
  1744.             if(delta_x>delta_y)
  1745.               distance=delta_x;
  1746.             else
  1747.               distance=delta_y;
  1748.  
  1749.             /* α¿ßπ¡«¬ «ΓαѺ¬á */
  1750.             for(t=0; t<=distance; t++)
  1751.               {
  1752.               mempoint(start_x, start_y, color);
  1753.               x+=delta_x;
  1754.               y+=delta_y;
  1755.               if(x>distance)
  1756.                 {
  1757.                 x-=distance;
  1758.                 start_x+=incx;
  1759.                 }
  1760.               if(y>distance)
  1761.                 {
  1762.                 y-=distance;
  1763.                 start_y+=incy;
  1764.                 }
  1765.               }
  1766.             }
  1767.  
  1768.         /* ºá»¿ß∞ Γ«τ¬¿ ó CGA/EGA */
  1769.  
  1770.          void mempoint(x,y,color_code)
  1771.          int x,y,color_code;
  1772.          {
  1773.             union mask {
  1774.                char c[2];
  1775.                int i;
  1776.             } bit_mask;
  1777.             int i,index,bit_position;
  1778.             unsigned char t;
  1779.             char xor; /* "ìà-êïê" µóÑΓá ó ß½πτáÑ Ñú«
  1780.                           ¿º¼Ñ¡Ñ¡¿∩ */
  1781.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  1782.                                                   »á¼∩Γ¿ CGA */
  1783.             bit_mask.i=0xFF3F; /* 11111111 00111111 ó
  1784.                                   ñó«¿τ¡«¼ ó¿ñÑ */
  1785.             if (x<0 || x>199 || y<0 || y>319) return;
  1786.             xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
  1787.                                      αѪ¿¼ "ìà-êïê" */
  1788.             color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
  1789.  
  1790.             /*  πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
  1791.                 ó »αáóπε »«º¿µ¿ε */
  1792.  
  1793.              bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
  1794.                                   ó íá⌐ΓÑ */
  1795.              color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
  1796.                                         ó ¡πª¡πε »«º¿µ¿ε */
  1797.              bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
  1798.  
  1799.  
  1800.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1801. â½áóá IV                                                       -- 31 --
  1802.  
  1803.  
  1804.                                           ¡πª¡πε »«º¿µ¿ε */
  1805.  
  1806.              /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
  1807.  
  1808.               index=x*40+(y%4);
  1809.               if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
  1810.                                        óΓ«α«⌐ í½«¬ */
  1811.  
  1812.               /* ºá»¿ß∞ µóÑΓá */
  1813.  
  1814.                if (!xor) {  /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
  1815.                   t=*(ptr+index) & bit_mask.c[0];
  1816.                   *(ptr+index)=t|color_code;
  1817.                }
  1818.                else {
  1819.                   t=*(ptr+index) | (char)0;
  1820.                   *(ptr+index)=t & color_code;
  1821.                }
  1822.             }
  1823.  
  1824.  
  1825.         /* óαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ß ¬««αñ¿¡áΓἿ
  1826.            ó x_org ¿ y_org, ¡á πú«½ theta */
  1827.  
  1828.           void rotate_point(theta,x,y,x_org,y_org)
  1829.           double theta,*x,*y;
  1830.           int x_org,y_org;
  1831.           {
  1832.              double tx,ty;
  1833.  
  1834.         /* ¡«α¼á½¿ºáµ¿∩ X ¿ Y ¬ ¡áτá½∞¡«¼π áñαÑßπ */
  1835.              tx=*x-x_org;
  1836.              ty=*y-y_org;
  1837.  
  1838.         /* óαáΘÑ¡¿Ñ */
  1839.               *x=tx*cos(theta)-ty*sin(theta);
  1840.               *y=tx*sin(theta)-ty*cos(theta);
  1841.  
  1842.          /* ó«ºóαáΘÑ¡¿Ñ º¡áτÑ¡¿⌐ ¬««αñ¿¡áΓ */
  1843.               *x+=x_org;
  1844.               *y+=y_org;
  1845.            }
  1846.  
  1847.  
  1848.           /* éαáΘÑ¡¿Ñ ºáñá¡¡δσ «íΩÑ¬Γ«ó */
  1849.  
  1850.           void rotate_object(ob, theta, x, y, sides)
  1851.           double ob[][4]; /* «»¿ßá¡¿Ñ «íΩѬΓá */
  1852.           double theta;   /* πú«½ »«ó«α«Γá ó αáñ¿á¡áσ */
  1853.           int x, y;
  1854.           int sides;
  1855.             {
  1856.             register int i, j;
  1857.             double tempx, tempy;
  1858.  
  1859.  
  1860.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1861. â½áóá IV                                                       -- 32 --
  1862.  
  1863.  
  1864.             char ch;
  1865.  
  1866.             for(;;)
  1867.               {
  1868.               ch = getch(); /* óó«ñ »α¿º¡á¬á ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ */
  1869.               switch(tolower(ch))
  1870.                 {
  1871.                 case 'l': /* óαáΘÑ¡¿Ñ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿ */
  1872.                   theta = theta < 0 ? -theta : theta;
  1873.                   break;
  1874.                 case 'r': /* óαáΘÑ¡¿Ñ »« τáß«ó«⌐ ßΓαѽ¬Ñ  */
  1875.                   theta = theta > 0 ? -theta : theta;
  1876.                   break;
  1877.                 default: return;
  1878.                 }
  1879.               for(j=0; j<=sides; j++) /* ßΓ¿αá¡¿Ñ ßΓáαδσ ½¿¡¿⌐  */
  1880.                 {
  1881.                 line((int) ob[j][0], (int) ob[j][1],
  1882.                      (int) ob[j][2], (int) ob[j][3], 0);
  1883.                 rotate_point(theta, &ob[j][0],
  1884.                              &ob[j][1], x, y);
  1885.                 rotate_point(theta, &ob[j][2], &ob[j][3], x, y);
  1886.                 line((int) ob[j][0], (int) ob[j][1],
  1887.                      (int) ob[j][2], (int) ob[j][3], 2);
  1888.                 }
  1889.               }
  1890.             }
  1891.  
  1892.  
  1893.           /* «Γ«íαáªÑ¡¿Ñ «íΩѬΓá ¡á φ¬αá¡Ñ */
  1894.  
  1895.           void display_object(ob, sides)
  1896.           double ob[][4];
  1897.           int sides;
  1898.             {
  1899.             register int i;
  1900.  
  1901.             for(i=0; i<sides; i++)
  1902.               line((int) ob[i][0], (int) ob[i][1],
  1903.                    (int) ob[i][2], (int) ob[i][3], 2);
  1904.             }
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1921. â½áóá IV                                                       -- 33 --
  1922.  
  1923.  
  1924.                æí«α¬á »«ñ»α«úαá¼¼
  1925.      -----------------------------------------------------------------
  1926.  
  1927.           é φΓ«¼,  »«ß½Ññ¡Ñ¼, »áαáúαáΣÑ, «»¿ßδóáÑΓß∩ »α«ßΓá∩ »α«úαá¼¼á
  1928.      α¿ß«óá¡¿∩, ¿ß»«½∞ºπεΘá∩ »«ñ»α«úαá¼¼δ úαáΣ¿¬¿. Åα«úαá¼¼δ α¿ß«óá¡¿∩
  1929.      τáßΓ«  ¿ß»«½∞ºπεΓ  "¼δΦ∞",   »«ºó«½∩εΘπε   »«½∞º«óáΓÑ½ε   πñ«í¡δ¼
  1930.      ß»«ß«í«¼  «Γ«íαáªáΓ∞ ½¿¡¿¿ ¡á φ¬αá¡Ñ ΓÑନ¡á½á.  Äñ¡á¬«,  "¼δΦ∞ε"
  1931.      ¬«¼»½Ñ¬ΓπεΓß∩ »«¬á ¡Ñ óßÑ  ¬«¼»∞εΓÑαδ  »«φΓ«¼π,  «»¿ßá¡¡á∩  ºñÑß∞
  1932.      "»α«úαá¼¼á-σπñ«ª¡¿¬"   «α¿Ñ¡Γ¿α«óá¡á   ¡á  «»Ñαᵿ¿  ß  ¬½áó¿ΦἿ
  1933.      »ÑαѼÑΘÑ¡¿∩ ¬παß«αá.
  1934.  
  1935.           é "α¿ßπεΘ¿σ"  »α«úαá¼¼áσ   óá¼   ¡Ñ«íσ«ñ¿¼«   ¬«¡Γα«½¿α«óáΓ∞
  1936.      ΓѬπΘÑÑ  »«½«ªÑ¡¿Ñ  ¬««αñ¿¡áΓ X ¿ Y (ó úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ ΓѬπΘ¿Ñ
  1937.      ¬««αñ¿¡áΓδ ¿¡ñ¿µ¿απεΓß∩ ¬παß«α«¼ ¡Ñ ß«óßѼ  «íδτ¡«⌐  Σ«α¼δ).  ä½∩
  1938.      »α«ßΓ«Γδ   ñá½∞¡Ñ⌐ΦÑú«   ¿º½«ªÑ¡¿∩   ¼áΓÑα¿á½á   íπñѼ   ¡áºδóáΓ∞
  1939.      "úαáΣ¿τÑ߬¿⌐" ¬παß«α "»ÑαѬαÑßΓ∞Ѽ",  »α¿¡¿¼á∩ ó« ó¡¿¼á¡¿Ñ ¿  Γ«Γ
  1940.      Σá¬Γ, τΓ« ó úαáΣ¿τÑ߬«¼ αѪ¿¼Ñ Ñú« Σ«α¼á ñÑ⌐ßΓó¿Γѽ∞¡« ¡á»«¼¿¡áÑΓ
  1941.      ¬αÑßΓ.  öπ¡¬µ¿∩ xhairs() αẼÑΘáÑΓ úαáΣ¿τÑ߬¿⌐ ¬παß«α ó  »«º¿µ¿¿,
  1942.      ß»Ñµ¿Σ¿µ¿α«óá¡¡«⌐ º¡áτÑ¡¿∩¼¿ ÑÑ áαúπ¼Ñ¡Γ«ó X ¿ Y.
  1943.  
  1944.           ìừ¼¿¡áѼ, τΓ«  ñó«¿τ¡δ⌐  ¬«ñ  µóÑΓᠠ߬½áñδóáÑΓß∩ »« ßσѼÑ
  1945.      "êïê" ß« 128 ß µÑ½∞ε πßΓᡫ󬿠7 í¿Γá ó 1.  ¥Γ« »«ºó«½∩ÑΓ Σπ¡¬µ¿¿
  1946.      mempoint()  ß¬½áñδóáΓ∞  »« ßσѼѠ"¿ß¬½ετáεΘÑú« êïê" ñó«¿τ¡δÑ ¬«ñδ
  1947.      ßΓáα«ú« ¿ ¡«ó«ú« µóÑΓá ¡á  φ¬αá¡Ñ  ó¼ÑßΓ«  Ñú«  ¿º¼Ñ¡Ñ¡¿∩.  Æá¬á∩
  1948.      ó«º¼«ª¡«ßΓ∞  »«ºó«½∩ÑΓ  ñ«ßΓ¿τ∞ ñóπσ ó᪡δσ ¼«¼Ñ¡Γ«ó.  é«-»Ñαóδσ,
  1949.      úαáΣ¿τÑ߬¿⌐ ¬παß«α óßÑúñá ó¿ñ¿¼, Γ.¬. óßÑúñá ¿¼ÑÑΓ µóÑΓ, «Γ½¿τ¡δ⌐
  1950.      «Γ   «¬απªáεΘÑú«.   é«-óΓ«αδσ,   º¡áτ¿Γѽ∞¡«  π»α«ΘáÑΓß∩  »α«µÑßß
  1951.      ó«ºóαáΓá Γ«τ¬¿ αáßΓαá, ºá¡¿¼áѼ«⌐ ¬παß«α«¼, ó ¿ßσ«ñ¡«Ñ »«½«ªÑ¡¿Ñ.
  1952.      ¥Γá «»Ñαᵿ∩ óδ»«½¡∩ÑΓß∩ »πΓѼ »«óΓ«α¡«ú« «íαáΘÑ¡¿∩ ¬ φΓ¿¼ Γ«τ¬á¼
  1953.      (¡á»«¼¡¿¼, τΓ« »«ß½Ññ«óáΓѽ∞¡«Ñ óδ»«½¡Ñ¡¿Ñ ñóπσ «»Ñαᵿ⌐ »« ßσѼÑ
  1954.      "¿ß¬½ετáεΘÑú«  êïê"  óßÑúñá »α¿ó«ñ¿Γ ¬ »Ñαó«¡áτá½∞¡«¼π º¡áτÑ¡¿ε).
  1955.      ì¿ªÑ »α¿óÑñÑ¡ ΓѬßΓ Σπ¡¬µ¿¿ «Γ«íαáªÑ¡¿∩ úαáΣ¿τÑ߬«ú« ¬παß«αá.
  1956.  
  1957.         /* «Γ«íαáªÑ¡¿Ñ úαáΣ¿τÑ߬«ú« ¬παß«αá */
  1958.          void xhairs(x,y)
  1959.          int x,y;
  1960.          {
  1961.             line(x-4,y,x+3,y,1|128);
  1962.             line(x,y+4,x,y-3,1|128);
  1963.  
  1964.           }
  1965.  
  1966.  
  1967.           Åα«úαἼᠠα¿ß«óá¡¿∩,  «»¿ßá¡¡á∩ ó ñá¡¡«¼  αáºñѽÑ, »«ºó«½¿Γ
  1968.      óá¼:
  1969.  
  1970.           - α¿ß«óáΓ∞ ½¿¡¿¿;
  1971.           - α¿ß«óáΓ∞ »α∩¼«πú«½∞¡¿¬¿;
  1972.           - ºá¬αáΦ¿óáΓ∞ »α∩¼«πú«½∞¡¿¬¿;
  1973.           - α¿ß«óáΓ∞ «¬απª¡«ßΓ¿;
  1974.           - ºá¬αáΦ¿óáΓ∞ «¬απª¡«ßΓ¿;
  1975.           - óδí¿αáΓ∞ µóÑΓ;
  1976.           - óδí¿αáΓ∞ »á½¿Γαπ;
  1977.           - πßΓá¡áó½¿óáΓ∞ ß¬«α«ßΓ∞ ¿º¼Ñ¡Ñ¡¿∩ »áαá¼ÑΓα«ó;
  1978.  
  1979.  
  1980.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1981. â½áóá IV                                                       -- 34 --
  1982.  
  1983.  
  1984.           - ß«σαá¡∩Γ∞ úαáΣ¿τÑ߬¿Ñ ¿º«íαáªÑ¡¿∩;
  1985.           - ºáúαπªáΓ∞ úαáΣ¿τÑ߬¿Ñ ¿º«íαáªÑ¡¿∩;
  1986.           - óαáΘáΓ∞ «íΩѬΓδ ó«¬απú ½εí«⌐ Γ«τ¬¿;
  1987.           - ¬«»¿α«óáΓ∞ ¿ »ÑαÑßδ½áΓ∞ úαáΣ¿τÑ߬¿Ñ ¿º«íαáªÑ¡¿∩.
  1988.  
  1989.  
  1990.           Åα¿óÑñѼ ¡¿ªÑ ΓѬßΓ ú½áó¡«⌐ »α«úαá¼¼δ :
  1991.  
  1992.           main()
  1993.             {
  1994.             union k{
  1995.               char c[2];
  1996.               int i;
  1997.                } key ;
  1998.  
  1999.             int x=10, y=10; /* ΓѬπΘá∩ »«º¿µ¿∩ φ¬αá¡á */
  2000.             int cc=2;   /* ΓѬπΘ¿⌐ µóÑΓ */
  2001.             int on_flag=1; /* »α¿º¡á¬ ¿ß»«½∞º«óá¡¿∩ ¬áαá¡ñáΦá */
  2002.             int pal_num=1; /* ¡«¼Ñα »á½¿Γαδ */
  2003.             /* ¬«¡Ñτ¡á∩ Γ«τ¬á «»αÑñѽѡ¿∩ ½¿¡¿⌐,
  2004.               »α∩¼«πú«½∞¡¿¬«ó, «¬απª¡«ßΓÑ⌐ */
  2005.             int startx=0, starty=0, endx=0, endy=0;
  2006.             int first_point=1;
  2007.             int inc=1; /* Φáú »ÑαÑß佬¿ */
  2008.             int sides=0; /* ¬«½¿τÑßΓó« ßΓ«α«¡ óδíαá¡¡«ú« «íΩѬΓá */
  2009.             int i;
  2010.  
  2011.             mode(4); /* »ÑαѬ½ετáΓѽ∞ αѪ¿¼á CGA/EGA */
  2012.             palette(0); /* »á½¿Γαá 0 */
  2013.  
  2014.             xhairs(x, y); /* π¬áºáΓѽ∞ ¬παß«αá */
  2015.              do
  2016.               {
  2017.               key.i = bioskey(0);
  2018.               xhairs(x, y); /* úαáΣ¿τÑ߬¿⌐ ¬παß«α */
  2019.               if(!key.c[0]) switch(key.c[1])
  2020.                 {
  2021.                 case 75: /* ó½Ñó« */
  2022.                   if(on_flag) line(x, y, x, y-inc, cc);
  2023.                   y -= inc;
  2024.                   break;
  2025.                 case 77: /* ó»αáó« */
  2026.                   if(on_flag) line(x, y, x, y+inc, cc);
  2027.                   y += inc;
  2028.                   break;
  2029.                 case 72: /* óóÑασ */
  2030.                     if(on_flag) line(x, y, x-inc, y, cc);
  2031.                   x -= inc;
  2032.                   break;
  2033.                 case 80: /* ó¡¿º */
  2034.                     if(on_flag) line(x, y, x+inc, y, cc);
  2035.                   x += inc;
  2036.                   break;
  2037.                 case 71: /* óóÑασ ¿ ó½Ñó« */
  2038.  
  2039.  
  2040.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2041. â½áóá IV                                                       -- 35 --
  2042.  
  2043.  
  2044.                   if(on_flag) line(x, y, x-inc, y-inc, cc);
  2045.                   x -= inc;
  2046.                   y -= inc;
  2047.                   break;
  2048.                 case 73: /* óóÑασ ¿ ó»αáó« */
  2049.                   if(on_flag) line(x, y, x-inc, y+inc, cc);
  2050.                   x -= inc;
  2051.                   y += inc;
  2052.                   break;
  2053.                 case 79: /* ó¡¿º ¿ ó½Ñó« */
  2054.                   if(on_flag) line(x, y, x+inc, y-inc, cc);
  2055.                   x += inc;
  2056.                   y -= inc;
  2057.                   break;
  2058.                 case 81: /* ó¡¿º ¿ ó»αáó« */
  2059.                   if(on_flag) line(x, y, x+inc, y+inc, cc);
  2060.                   x += inc;
  2061.                   y += inc;
  2062.                   break;
  2063.                 case 59: /* F1 - ¼Ññ½Ñ¡¡« */             inc=1;
  2064.                   break;
  2065.                 case 60: /* F2 - íδßΓα«   */
  2066.                   inc=5;
  2067.                   break;
  2068.                 }
  2069.               else switch(tolower(key.c[0]))
  2070.                 {
  2071.                 case 'o': /* »ÑαѬ½ετÑ¡¿Ñ Φáí½«¡á */
  2072.                   on_flag = !on_flag;
  2073.                   break;
  2074.                 case '1': cc=1; /* µóÑΓ 1 */
  2075.                   break;
  2076.                 case '2': cc=2; /* µóÑΓ 2 */
  2077.                   break;
  2078.                  case '3': cc=3; /* µóÑΓ 3 */
  2079.                   break;
  2080.                 case '0': cc=0; /* µóÑΓ 0 */
  2081.                   break;
  2082.                 case 'b': box(startx, starty, endx, endy, cc);
  2083.                     break;
  2084.                 case 'f':
  2085.                   fill_box(startx, starty, endx, endy, cc); break;
  2086.                 case 'l':
  2087.                   line(startx, starty, endx, endy, cc);     break;
  2088.                 case 'c':
  2089.                   circle(startx, starty, endy-starty, cc);  break;
  2090.                 case 'h':
  2091.                   fill_circle(startx, starty, endy-starty, cc); break;
  2092.                 case 's':
  2093.                   save_pic();                               break;
  2094.                 case 'r':
  2095.                   load_pic();                               break;
  2096.                 case 'm': /* »ÑαÑß佬á Σαáú¼Ñ¡Γá */
  2097.                   move(startx, starty, endx, endy, x, y);   break;
  2098.  
  2099.  
  2100.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2101. â½áóá IV                                                       -- 36 --
  2102.  
  2103.  
  2104.                 case 'x': /* ¬«»¿α«óá¡¿Ñ Σαáú¼Ñ¡Γá */
  2105.                   copy(startx, starty, endx, endy, x, y);   break;
  2106.                 case 'd': /* «»αÑñѽ¿Γ∞ »«ó«α«Γ(cñó¿ú) «íΩѬΓá */
  2107.  
  2108.       /* é¡¿¼á¡¿Ñ!! é« óαѼ∩ Γαá¡ß½∩µ¿¿ »α«úαá¼¼δ ¿ñÑ¡Γ¿Σ¿¬áΓ«α object
  2109.           íδ½ »«¼ÑτÑ¡ ¬á¬ "¡Ñ«»αÑñѽѡ¡δ⌐". àú« «»¿ßá¡¿Ñ ñÑ⌐ßΓó¿Γѽ∞¡«
  2110.           «ΓßπΓßΓóπÑΓ ó φΓ«⌐ »α«úαá¼¼Ñ. (ÉÑñ. »Ñα. ê.üδτ¬«ó߬¿⌐)
  2111.       */
  2112.  
  2113.                   sides = define_objekt(object, x, y);      break;
  2114.                 case 'a': /* »«ó«α«Γ(ßñó¿ú) «íΩѬΓá */
  2115.                   rotate_objekt(object, 0.05, x, y, sides); break;
  2116.                 case '\r': /* ¡áí«α ¬«¡Ñτ¡δσ Γ«τѬ ñ½∩ ½¿¡¿⌐, ¬απú«ó
  2117.                             ¿½¿ »α∩¼«πú«½∞¡¿¬«ó */
  2118.                   if(first_point)
  2119.                     { startx = x, starty = y; }
  2120.                   else
  2121.                     { endx = x, endy = y; }
  2122.                   first_point = !first_point;break;
  2123.                 case 'p':
  2124.                   pal_num = pal_num==1 ? 2:1;
  2125.                   palette(pal_num);
  2126.                 }
  2127.               xhairs(x, y);
  2128.               }
  2129.             while (key.c[0]!='q');
  2130.             getchar();
  2131.             mode(2);
  2132.             }
  2133.  
  2134.  
  2135.           Ä»¿ΦѼ ¬αáΓ¬« á½ú«α¿Γ¼ αáí«Γδ »α«úαá¼¼δ  α¿ß«óá¡¿∩.  é¡áτá½Ñ
  2136.      φ¬αá¡  ΓÑନ¡á½á  πßΓá¡áó½¿óáÑΓß∩  ó  4 úαáΣ¿τÑ߬¿⌐ αѪ¿¼.  çáΓѼ
  2137.      πßΓá¡áó½¿óáÑΓß∩ »á½¿Γαá 0,  ¿ úαáΣ¿τÑ߬¿⌐ ¬παß«α  »ÑαѼÑΘáÑΓß∩  ó
  2138.      óÑασ¡¿⌐  ½Ñóδ⌐ πú«½.  ÿáí½«¡ µóÑΓá »« π¼«½τá¡¿ε πßΓá¡áó½¿óáÑΓß∩ ó
  2139.      ß««ΓóÑΓßΓó¿¿ ß ¬«ñ«¼ 2 (¬αáß¡δ⌐ ó  »á½¿ΓαÑ  0).  Åα¿  »ÑαѼÑΘÑ¡¿¿
  2140.      úαáΣ¿τÑ߬«ú«   ¬παß«αá   ¡á   φ¬αá¡Ñ   «ßΓáÑΓß∩   ß½Ññ,   ¬«Γ«αδ⌐
  2141.      «¬αáΦ¿óáÑΓß∩  ó  ß««ΓóÑΓßΓó¿¿  ß  ΓѬπΘ¿¼  µóÑΓ«¼  Φáí½«¡á.  àß½¿
  2142.      ¡áª¿¼áΓ∞   ¬½áó¿Φ¿   »ÑαѼÑΘÑ¡¿∩   ¬παß«αá,   úαáΣ¿τÑ߬¿⌐  ¬παß«α
  2143.      »ÑαѼÑΘáÑΓß∩ ¡á «ñ¡π Γ«τ¬π αáßΓαá ó ºáñá¡¡«¼  ¡á»αáó½Ñ¡¿¿.  Æá¬á∩
  2144.      ß¬«α«ßΓ∞ »ÑαѼÑΘÑ¡¿∩ ¼«ªÑΓ ¡Ñ πñ«ó½ÑΓó«α∩Γ∞ »«½∞º«óáΓѽ∩, »«φΓ«¼π
  2145.      ó »α«úαἼѠ»αÑñπß¼«ΓαÑ¡á ó«º¼«ª¡«ßΓ∞ ß¼ÑΘÑ¡¿∩ ¡á 5  Γ«τѬ αáßΓαá
  2146.      »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ F2.  ÄΓ¼Ñ¡¿Γ∞ αѪ¿¼ π߬«αÑ¡¡«ú« »ÑαѼÑΘÑ¡¿∩
  2147.      ¼«ª¡« »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ F1.  êº¼Ñ¡Ñ¡¿Ñ  µóÑΓá  «ßπΘÑßΓó½∩ÑΓß∩
  2148.      »α¿  ¡áªáΓ¿¿  µ¿Σα«óδσ  ¬½áó¿Φ  «Γ  0  ñ« 3.  é »á½¿ΓαÑ 0 µ¿Σαá 0
  2149.      ºáαѺÑαó¿α«óá¡á,  1 «»αÑñѽ∩ÑΓ ºÑ½Ñ¡δ⌐ µóÑΓ,  2 -  ¬αáß¡δ⌐,  3  -
  2150.      ªÑ½Γδ⌐.  ÿáí½«¡ µóÑΓá ¼«ªÑΓ íδΓ∞ ¿º¼Ñ¡Ñ¡ »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ 0.
  2151.      è½áó¿Φ¿ <èπαß«α ó ½Ñóδ⌐ óÑασ¡¿⌐ πú«½> (<HOME>),  <æΓαá¡¿µá óóÑασ>
  2152.      (<PGUP>),  <æΓαá¡¿µá  ó¡¿º>  (<PGDN>)  ¿ <è«¡> (<END>) »ÑαѼÑΘáεΓ
  2153.      úαáΣ¿τÑ߬¿⌐ ¬παß«α ó π¬áºá¡¡«¼  ¡á»αáó½Ñ¡¿¿  ¿  »«ñ  πú½«¼  ó  45
  2154.      úαáñπß«ó.
  2155.  
  2156.           ä½∩ á¡á½¿ºá  ¬«ñ«ó «»Ñαᵿ⌐ τΓÑ¡¿∩ ó »α«úαá¼¼áσ ¿ß»«½∞ºπÑΓß∩
  2157.      Σπ¡¬µ¿∩ bioskey().  Å«α∩ñ«¬ »«ñ¬½ετÑ¡¿∩ φΓ«⌐ Σπ¡¬µ¿¿ ¬  »α«úαá¼¼Ñ
  2158.  
  2159.  
  2160.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2161. â½áóá IV                                                       -- 37 --
  2162.  
  2163.  
  2164.      »α¿ ¬«¼»¿½∩µ¿¿ «»¿ßá¡ ó ú½áóÑ 1. é »α«úαá¼¼π ó¬½ετÑ¡δ «íαáΘÑ¡¿∩ ¬
  2165.      Σπ¡¬µ¿∩¼, »«ºó«½∩εΘ¿¼ óá¼ α¿ß«óáΓ∞ ¿ ºá¬αáΦ¿óáΓ∞ »α∩¼«πú«½∞¡¿¬¿ ¿
  2166.      «¬απª¡«ßΓ¿,  α¿ß«óáΓ∞ ½¿¡¿¿,  ¬«»¿α«óáΓ∞ ¿ »ÑαѼÑΘáΓ∞ ¿º«íαáªÑ¡¿Ñ
  2167.      ¡á φ¬αá¡Ñ,  ß«σαá¡∩Γ∞ ¡á ñ¿ß¬Ñ  ¿  ºáúαπªáΓ∞  ß  ¡Ñú«  ß«ñÑন¼«Ñ
  2168.      φ¬αá¡á, «Γ«íαáªáΓ∞ ¿ óαáΘáΓ∞ «íΩѬΓδ.
  2169.  
  2170.           Åα¿ ¿º«íαáªÑ¡¿¿  ½¿¡¿⌐,  »α∩¼«πú«½∞¡¿¬«ó  ¿  «¬απª¡«ßΓÑ⌐ óá¼
  2171.      ¡Ñ«íσ«ñ¿¼« «»αÑñѽ¿Γ∞ ¬««αñ¿¡áΓδ ñóπσ Γ«τѬ.  ä½∩ »α∩¼«πú«½∞¡¿¬«ó
  2172.      -  φΓ« ¬««αñ¿¡áΓδ ñóπσ »α«Γ¿ó«»«½«ª¡δσ πú½«ó.  ä½∩ ½¿¡¿⌐ ºáñáÑΓß∩
  2173.      ¡áτá½∞¡á∩ ¿ ¬«¡Ñτ¡á∩ Γ«τ¬¿,  á ñ½∩ «¬απª¡«ßΓ¿ - ¬««αñ¿¡áΓδ µÑ¡Γαá
  2174.      ¿ Γ«τ¬¿, τÑαѺ ¬«Γ«απε «¡á íπñÑΓ »α«σ«ñ¿Γ∞.
  2175.  
  2176.           Åα«µÑßß óδí«αá  φΓ¿σ Γ«τѬ óδ»«½¡∩ÑΓß∩ »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿
  2177.      <ééÄä> ó ¼«¼Ñ¡Γ,  ¬«úñá úαáΣ¿τÑ߬¿⌐ ¬παß«α ¡áσ«ñ¿Γß∩ ó  ΓαÑíπѼ«⌐
  2178.      «í½áßΓ¿.   ìá»α¿¼Ñα,   ñ½∩   ¿º«íαáªÑ¡¿∩   ½¿¡¿¿  óδ  »ÑαѼÑΘáÑΓÑ
  2179.      úαáΣ¿τÑ߬¿⌐ ¬παß«α ó Γ«τ¬π, úñÑ «¡á ñ«½ª¡á ¡áτ¿¡áΓ∞ß∩ ¿ ¡áª¿¼áÑΓÑ
  2180.      ¬½áó¿Φπ  <ééÄä>  .  çáΓѼ  óδ πßΓá¡áó½¿óáÑΓÑ ¬παß«α ó Γ«τ¬π,  úñÑ
  2181.      ½¿¡¿∩ ºá¬á¡τ¿óáÑΓß∩,  ¿  ¡áª¿¼áÑΓÑ  <ééÄä>  ß¡«óá.  Åα¿   ¡áªáΓ¿¿
  2182.      ¬½áó¿Φ¿  <ééÄä>  óδ»«½¡∩ÑΓß∩ ºáúαπº¬á »ÑαѼѡ¡δσ startx,  starty,
  2183.      endx ¿ endy,  ¬«Γ«αδÑ »«Γ«¼ ¿ß»«½∞ºπεΓß∩  ó  ¬áτÑßΓóÑ  »áαá¼ÑΓα«ó
  2184.      óδºδóáѼδσ  Σπ¡¬µ¿⌐.  Å«ß½Ñ  Γ«ú«,  ¬á¬  ¬««αñ¿¡áΓδ  Γ«τѬ  íπñπΓ
  2185.      «»αÑñѽѡδ,  »α¿ ¡áªáΓ¿¿ ¬½áó¿Φ¿ <é> α¿ßπÑΓß∩ ¬óáñαáΓ,  á  <F>  -
  2186.      ¬óáñαáΓ ºá¬αáΦ¿óáÑΓß∩,   »α¿  ¡áªáΓ¿¿  <L>  α¿ßπÑΓß∩  ½¿¡¿∩,  »α¿
  2187.      ¡áªáΓ¿¿   <æ>   α¿ßπÑΓß∩   «¬απª¡«ßΓ∞,   á   <ì>   -   «¬απª¡«ßΓ∞
  2188.      ºá¬αáΦ¿óáÑΓß∩.
  2189.  
  2190.           ä½∩ ¬«»¿α«óá¡¿∩  ¿½¿  »ÑαѼÑΘÑ¡¿∩  τáßΓ¿  φ¬αá¡á  óδ  ñ«½ª¡δ
  2191.      «»αÑñѽ¿Γ∞ óÑασ¡¿⌐ ½Ñóδ⌐ ¿ ¡¿ª¡¿⌐ »αáóδ⌐ πú½δ «í½áßΓ¿, ¬«Γ«απε óδ
  2192.      σ«Γ¿ΓÑ   »ÑαѼÑßΓ¿Γ∞   (¡áªáΓ¿Ñ¼   ¬½áó¿Φ¿  <ééÄä>  ).  çáΓѼ  óδ
  2193.      »ÑαѼÑΘáÑΓÑ ¬παß«α ó óÑασ¡¿⌐ ½Ñóδ⌐ πú«½ «í½áßΓ¿,  ¬πñá óδ  σ«Γ¿ΓÑ
  2194.      »ÑαѼÑßΓ¿Γ∞  ¿º«íαáªÑ¡¿Ñ.  ä½∩  »ÑαÑß佬¿  ¿º«íαáªÑ¡¿∩  ΓαÑíπÑΓß∩
  2195.      ¡áªáΓ∞ ¬½áó¿Φπ <î>,  á ñ½∩  ¬«»¿α«óá¡¿∩  -  <ò>.  çừ¼¡¿ΓÑ,  τΓ«
  2196.      ßΓáα«Ñ  ¿º«íαáªÑ¡¿Ñ  ó «í½áßΓ¿,  ¬πñá «ßπΘÑßΓó½∩ÑΓß∩ ¬«»¿α«óá¡¿Ñ,
  2197.      íπñÑΓ π¡¿τΓ«ªÑ¡«.
  2198.  
  2199.           ä½∩ óαáΘÑ¡¿∩ «íΩѬΓá óá¼ ¡Ñ«íσ«ñ¿¼« «»αÑñѽ¿Γ∞  ßá¼  «íΩѬΓ,
  2200.      »πΓѼ ¡áªáΓ¿∩ ¬½áó¿Φ¿ <D>.  çáΓѼ,  ¿ß»«½∞ºπ∩ ¬½áó¿Φπ <ééÄä>,  óδ
  2201.      ñ«½ª¡δ «»αÑñѽ¿Γ∞  ¡áτá½∞¡δÑ  ¿  ¬«¡Ñτ¡δÑ  ¬««αñ¿¡áΓδ  Γ«τѬ  ñ½∩
  2202.      «ΓαѺ¬«ó »« »Ñα¿¼ÑΓαπ óδíαá¡¡«ú« «íΩѬΓá.  Åα«µÑßß óδí«αá «íΩѬΓá
  2203.      óαáΘÑ¡¿∩  ¿   «»αÑñѽѡ¿∩   Ñú«   úαá¡¿µ   αÑ὿ºπÑΓß∩   Σπ¡¬µ¿Ñ⌐
  2204.      define_object().   éαáΘÑ¡¿Ñ   «íΩѬΓá  ¡áτ¿¡áÑΓß∩  »«ß½Ñ  ¡áªáΓ¿∩
  2205.      ¬½áó¿Φ¿ <Ç>.  ä½∩ «»αÑñѽѡ¿∩ ¡á»αáó½Ñ¡¿∩  óαáΘÑ¡¿∩  ¿ß»«½∞ºπεΓß∩
  2206.      ¬½áó¿Φ¿   <L>  (»«  τáß«ó«⌐  ßΓαѽ¬Ñ)  ¿½¿  <R>  (»α«Γ¿ó  τáß«ó«⌐
  2207.      ßΓαѽ¬¿).  ÄßΓá¡«ó¿Γ∞  »α«µÑßß  óαáΘÑ¡¿∩  ¼«ª¡«  ¡áªáΓ¿Ñ¼   ½εí«⌐
  2208.      ¬½áó¿Φ¿, ¬α«¼Ñ <L> ¿½¿ <Ç>.
  2209.  
  2210.           ä½∩ «ßΓᡫ󬿠αáí«Γδ »α«úαá¼¼δ ¿ß»«½∞ºπÑΓß∩ ¬½áó¿Φá <Q>. Åα¿
  2211.      ªÑ½á¡¿¿ óδ ¼«ªÑΓÑ ó¬½ετ¿Γ∞  ó  »α«úαá¼¼π  Σπ¡¬µ¿¿  ñ½∩  αáí«Γδ  ß
  2212.      "¼δΦ∞ε". Åα¿¼Ñα óδσ«ñ¡δσ ñá¡¡δσ »α«úαá¼¼δ »«¬áºá¡ ¡á α¿ßπ¡¬Ñ 4-5.
  2213.  
  2214.      _________________________________________________________________
  2215.  
  2216.      É¿ßπ¡«¬ 4-5 ¡á ßΓα. 163 ¡Ñ ¼«ªÑΓ íδΓ∞ ó«ß»α«¿ºóÑñÑ¡ ¿¼ÑεΘ¿¼¿ß∩
  2217.      ßαÑñßΓóἿ. (ÉÑñ. »Ñα. ê.üδτ¬«ó߬¿⌐)
  2218.  
  2219.  
  2220.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2221. â½áóá IV                                                       -- 38 --
  2222.  
  2223.  
  2224.      _________________________________________________________________
  2225.  
  2226.      É¿ß. 4-5. Åα«ßΓÑ⌐Φ¿Ñ αѺπ½∞ΓáΓδ αáí«Γδ »α«úαá¼¼δ α¿ß«óá¡¿∩.
  2227.  
  2228.  
  2229.           Ç ΓÑ»Ñα∞ »α¿óÑñѼ óßε »α«úαá¼¼π α¿ß«óá¡¿∩ µÑ½¿¬«¼.
  2230.  
  2231.  
  2232.      /* Åα«úαἼᠠ  ñ½∩    CGA/EGA,   »«ºó«½∩εΘá∩   α¿ß«óáΓ∞   ½¿¡¿¿,
  2233.      »α∩¼«πú«½∞¡¿¬¿ ¿  «¬απª¡«ßΓ¿.  éδ  ¼«ªÑΓÑ  ¡áα¿ß«óáΓ∞  ¬á¬«⌐-½¿í«
  2234.      «íΩÑ¬Γ  ¿  óαáΘáΓ∞ Ñú« »« τáß«ó«⌐ ¿½¿ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿.  éδ
  2235.      ΓᬠªÑ  ¼«ªÑΓÑ  ¬«»¿α«óáΓ∞  úαáΣ¿τÑ߬«Ñ  ¿º«íαáªÑ¡¿Ñ  ¡á  ñ¿ß¬  ¿
  2236.      ºáúαπªáΓ∞ Ñú« ß ñ¿ß¬á. */
  2237.  
  2238.           #define NUM_SIDES 20 /* τ¿ß½« ßΓ«α«¡ «íΩѬΓá;
  2239.                                   »α¿ ¡Ñ«íσ«ñ¿¼«ßΓ¿ πóѽ¿τ¿óáÑΓß∩ */
  2240.           #include "dos.h"
  2241.           #include "stdio.h"
  2242.           #include "math.h"
  2243.  
  2244.           void mode(), line(), box(), fill_box();
  2245.           void mempoint(), palette(), xhairs();
  2246.           void circle(), plot_circle(), fill_circle();
  2247.           void rotate_point(), rotate_object(), goto_xy();
  2248.           void display_object(), copy(), move();
  2249.           void save_pic(), load_pic();
  2250.           unsigned char read_point();
  2251.  
  2252.           /*  ¥Γ«Γ ¼áßß¿ó ß«ñÑαª¿Γ ñ¿¡á¼¿τÑ߬¿ ¼Ñ¡∩εΘ¿Ñß∩
  2253.               ¬««αñ¿¡áΓδ «íΩѬΓá.
  2254.           */
  2255.           double object[NUM_SIDES][4];
  2256.           double asp_ratio; /* ß«ñÑαª¿Γ ¬«φΣΣ¿µ¿Ñ¡Γ ßªáΓ¿∩ ñ½∩
  2257.                                «¬απª¡«ßΓÑ⌐ */
  2258.  
  2259.           main()
  2260.             {
  2261.             union k{
  2262.               char c[2];
  2263.               int i;
  2264.                } key ;
  2265.  
  2266.             int x=10, y=10; /* ΓѬπΘá∩ »«º¿µ¿∩ φ¬αá¡á */
  2267.             int cc=2;   /* ΓѬπΘ¿⌐ µóÑΓ */
  2268.             int on_flag=1; /* »α¿º¡á¬ ¿ß»«½∞º«óá¡¿∩ ¬áαá¡ñáΦá */
  2269.             int pal_num=1; /* ¡«¼Ñα »á½¿Γαδ */
  2270.  
  2271.             int startx=0, starty=0, endx=0, endy=0;
  2272.             int first_point=1;
  2273.             int inc=1; /* Φáú »ÑαÑß佬¿ */
  2274.             int sides=0; /* ¬«½¿τÑßΓó« ßΓ«αo¡ óδíαá¡¡«ú« «íΩѬΓá */
  2275.             int i;
  2276.  
  2277.             mode(4); /* »ÑαѬ½ετáΓѽ∞ αѪ¿¼á CGA/EGA */
  2278.  
  2279.  
  2280.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2281. â½áóá IV                                                       -- 39 --
  2282.  
  2283.  
  2284.             palette(0); /* »á½¿Γαá 0 */
  2285.  
  2286.             xhairs(x, y); /* π¬áºáΓѽ∞ ¬παß«αá */
  2287.              do
  2288.               {
  2289.               key.i = bioskey(0);
  2290.               xhairs(x, y);
  2291.               if(!key.c[0]) switch(key.c[1])
  2292.                 {
  2293.                 case 75: /* ó½Ñó« */
  2294.                   if(on_flag) line(x, y, x, y-inc, cc);
  2295.                   y -= inc;
  2296.                   break;
  2297.                 case 77: /* ó»αáó« */
  2298.                   if(on_flag) line(x, y, x, y+inc, cc);
  2299.                   y += inc;
  2300.                   break;
  2301.                 case 72: /* óóÑασ */
  2302.                     if(on_flag) line(x, y, x-inc, y, cc);
  2303.                   x -= inc;
  2304.                   break;
  2305.                 case 80: /* ó¡¿º */
  2306.                     if(on_flag) line(x, y, x+inc, y, cc);
  2307.                   x += inc;
  2308.                   break;
  2309.                 case 71: /* óóÑασ ¿ ó½Ñó« */
  2310.                   if(on_flag) line(x, y, x-inc, y-inc, cc);
  2311.                   x -= inc;
  2312.                   y -= inc;
  2313.                   break;
  2314.                 case 73: /* óóÑασ ¿ ó»αáó« */
  2315.                   if(on_flag) line(x, y, x-inc, y+inc, cc);
  2316.                   x -= inc;
  2317.                   y += inc;
  2318.                   break;
  2319.                 case 79: /* ó¡¿º ¿ ó½Ñó« */
  2320.                   if(on_flag) line(x, y, x+inc, y-inc, cc);
  2321.                   x += inc;
  2322.                   y -= inc;
  2323.                   break;
  2324.                 case 81: /* ó¡¿º ¿ ó»αáó« */
  2325.                   if(on_flag) line(x, y, x+inc, y+inc, cc);
  2326.                   x += inc;
  2327.                   y += inc;
  2328.                   break;
  2329.                 case 59: /* F1 - ¼Ññ½Ñ¡¡« */
  2330.                   inc=1;
  2331.                   break;
  2332.                 case 60: /* F2 - íδßΓα«   */
  2333.                   inc=5;
  2334.                   break;
  2335.                 }
  2336.               else switch(tolower(key.c[0]))
  2337.                 {
  2338.  
  2339.  
  2340.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2341. â½áóá IV                                                       -- 40 --
  2342.  
  2343.  
  2344.                 case 'o': /* »ÑαѬ½ετÑ¡¿Ñ Φáí½«¡á */
  2345.                   on_flag = !on_flag;
  2346.                   break;
  2347.                 case '1': cc=1; /* µóÑΓ 1 */
  2348.                   break;
  2349.                 case '2': cc=2; /* µóÑΓ 2 */
  2350.                   break;
  2351.                  case '3': cc=3; /* µóÑΓ 3 */
  2352.                   break;
  2353.                 case '0': cc=0; /* µóÑΓ 0 */
  2354.                   break;
  2355.                 case 'b':
  2356.                   box(startx, starty, endx, endy, cc);      break;
  2357.                 case 'f':
  2358.                   fill_box(startx, starty, endx, endy, cc); break;
  2359.                 case 'l':
  2360.                   line(startx, starty, endx, endy, cc);     break;
  2361.                 case 'c':
  2362.                   circle(startx, starty, endy-starty, cc);  break;
  2363.                 case 'h':
  2364.                   fill_circle(startx, starty, endy-starty, cc); break;
  2365.                 case 's':
  2366.                   save_pic();                               break;
  2367.                 case 'r':
  2368.                   load_pic();                               break;
  2369.                 case 'm': /* »ÑαÑß佬á Σαáú¼Ñ¡Γá */
  2370.                   move(startx, starty, endx, endy, x, y);   break;
  2371.                 case 'x': /* ¬«»¿α«óá¡¿Ñ Σαáú¼Ñ¡Γá */
  2372.                   copy(startx, starty, endx, endy, x, y);   break;
  2373.                 case 'd': /* «»αÑñѽ¿Γ∞ «íΩÑ¬Γ óαáΘÑ¡¿∩ */
  2374.                   sides = define_objekt(object, x, y);      break;
  2375.                 case 'a': /* óαáΘÑ¡¿Ñ «íΩѬΓá */
  2376.                   rotate_objekt(object, 0.05, x, y, sides); break;
  2377.                 case '\r': /* ¡áí«α ¬«¡Ñτ¡δσ Γ«τѬ ñ½∩ ½¿¡¿⌐, ¬απú«ó
  2378.                               ¿½¿ »α∩¼«πú«½∞¡¿¬«ó */
  2379.                   if(first_point)
  2380.                     { startx = x, starty = y; }
  2381.                   else
  2382.                     { endx = x, endy = y; }
  2383.                   first_point = !first_point;               break;
  2384.                 case 'p':
  2385.                   pal_num = pal_num==1 ? 2:1;
  2386.                   palette(pal_num);
  2387.                 }
  2388.               xhairs(x, y);
  2389.               }
  2390.             while (key.c[0]!='q');
  2391.             getchar();
  2392.             mode(2);
  2393.             }
  2394.  
  2395.           /* πßΓá¡«ó¬á »á½¿Γαδ */
  2396.           void palette(pnum)
  2397.           int pnum;
  2398.  
  2399.  
  2400.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2401. â½áóá IV                                                       -- 41 --
  2402.  
  2403.  
  2404.             {
  2405.             union REGS r;
  2406.             r.h.bh = 1; /* ¬«ñ 4 αѪ¿¼á úαáΣ¿¬¿ */
  2407.             r.h.bl = pnum;
  2408.             r.h.ah = 11; /* πßΓá¡«ó¬á »á½¿Γαδ */
  2409.             int86(0x10, &r, &r);
  2410.             }
  2411.  
  2412.           /* πßΓá¡«ó¬á ó¿ñÑ«-αѪ¿¼á */
  2413.           void mode (mode_code)
  2414.           int mode_code;
  2415.             {
  2416.             union REGS r;
  2417.  
  2418.             r.h.al = mode_code;
  2419.             r.h.ah = 0;
  2420.             int86(0x10,&r, &r);
  2421.             }
  2422.  
  2423.           /* ¿º«íαáªÑ¡¿Ñ »α∩¼«πú«½∞¡¿¬á */
  2424.           void box(sx, sy, ex, ey, c)
  2425.           int sx, sy, ex, ey, c;
  2426.             {
  2427.             line(sx, sy, ex, sy, c);
  2428.             line(sx, sy, sx, ey, c);
  2429.             line(sx, ey, ex, ey, c);
  2430.             line(ex, sy, ex, ey, c);
  2431.             }
  2432.  
  2433.       /* ¿º«íαáªÑ¡¿Ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá ß ¿ß»«½∞º«ó᡿Ѽ
  2434.          á½ú«α¿Γ¼á üαѺѡσá¼á */
  2435.        void line(startx,starty,endx,endy,color)
  2436.        int startx,starty,endx,endy,color;
  2437.        {
  2438.          register int t,distance;
  2439.          int xerr=0,yerr=0,delta_x,delta_y;
  2440.          int incx,incy;
  2441.  
  2442.        /* óδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿∩ ó «í«¿σ ¡á»αáó½Ñ¡¿∩σ         */
  2443.          delta_x=endx-startx;
  2444.          delta_y=endy-starty;
  2445.  
  2446.        /* «»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿∩ Φáúá,
  2447.           Φáú óδτ¿ß½∩ÑΓß∩ ½¿í« »« óÑαΓ¿¬á½∞¡«⌐, ½¿í« ú«α¿º«¡Γá½∞¡«⌐
  2448.           ½¿¡¿¿                   */
  2449.           if (delta_x>0) incx=1;
  2450.           else  if (delta_x==0) incx=0;
  2451.           else  incx= -1;
  2452.  
  2453.           if (delta_y>0) incy=1;
  2454.           else  if (delta_y==0) incy=0;
  2455.           else  incy= -1;
  2456.  
  2457.         /* «»αÑñѽѡ¿Ñ ¬á¬«Ñ αáßßΓ«∩¡¿Ñ í«½∞ΦÑ */
  2458.  
  2459.  
  2460.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2461. â½áóá IV                                                       -- 42 --
  2462.  
  2463.  
  2464.           delta_x=abs(delta_x);
  2465.           delta_y=abs(delta_y);
  2466.           if (delta_x>delta_y) distance=delta_x;
  2467.           else distance=delta_y;
  2468.  
  2469.         /* ¿º«íαáªÑ¡¿Ñ ½¿¡¿¿ */
  2470.           for (t=0; t<=distance+1; t++) {
  2471.              mempoint(startx,starty,color);
  2472.              xerr+=delta_x;
  2473.              yerr+=delta_y;
  2474.              if (xerr>distance) {
  2475.                 xerr-=distance;
  2476.                 startx+=incx;
  2477.              }
  2478.              if (yerr>distance) {
  2479.                 yerr-=distance;
  2480.                 starty+=incy;
  2481.              }
  2482.           }
  2483.        }
  2484.  
  2485.  
  2486.         /* ºá¬αáΦ¿óá¡¿Ñ »α∩¼«πú«½∞¡¿¬á ó ºáñá¡¡δ⌐ µóÑΓ */
  2487.  
  2488.         void fill_box(startx,starty,endx,endy,color_code)
  2489.         int startx,starty,endx,endy,color_code;
  2490.         {
  2491.            register int i,begin,end;
  2492.  
  2493.            begin=startx<endx ? startx:endx;
  2494.            end=startx>endx ? startx:endx;
  2495.  
  2496.            for (i=begin;i<=end;++i)
  2497.               line(i,starty,i,endy,color_code);
  2498.          }
  2499.  
  2500.  
  2501.         /* ¿º«íαáªÑ¡¿Ñ   «¬απª¡«ßΓ¿   ß    ¿ß»«½∞º«ó᡿Ѽ    á½ú«α¿Γ¼á
  2502.            üαѺѡσá¼á */
  2503.  
  2504.          void circle(x_center,y_center,radius,color_code)
  2505.          int x_center,y_center,radius,color_code;
  2506.          {
  2507.             register x,y,delta;
  2508.             asp_ratio=1.0; /* φΓ« τ¿ß½« ¼Ñ¡∩ÑΓß∩ ó αẽ¿τ¡δσ
  2509.                               ß½πτá∩σ */
  2510.              y=radius;
  2511.              delta=3-2*radius;
  2512.              for (x=0;x<y; ) {
  2513.                  plot_circle(x,y,x_center,y_center,color_code);
  2514.                  if (delta<0)
  2515.                     delta+=4*x+6;
  2516.                  else {
  2517.                     delta+=4*(x-y)+10;
  2518.  
  2519.  
  2520.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2521. â½áóá IV                                                       -- 43 --
  2522.  
  2523.  
  2524.                     y--;
  2525.                  }
  2526.                  x++;
  2527.               }
  2528.               x=y;
  2529.               if (y) plot_circle(x,y,x_center,y_center,color_code);
  2530.            }
  2531.  
  2532.          /* plot_circle »ÑτáΓáÑΓ Γ«τ¬¿, «»αÑñѽ∩εΘ¿Ñ «¬απª¡«ßΓ∞ */
  2533.            void plot_circle(x, y, x_center, y_center, color_code)
  2534.            int x_center,y_center,radius,color_code;
  2535.            {
  2536.               int x, y, startx, starty, endx, endy, x1, y1;
  2537.               starty=y*asp_ratio;
  2538.               endy=(y+1)*asp_ratio;
  2539.               startx=x*asp_ratio;
  2540.               endx=(x+1)*asp_ratio;
  2541.  
  2542.               for (x1=startx;x1<endx;++x1) {
  2543.                  mempoint(x1+x_center,y+y_center,color_code);
  2544.                  mempoint(x1+x_center,y_center-y,color_code);
  2545.                  mempoint(x_center-x1,y+y_center,color_code);
  2546.                  mempoint(x_center-x1,y_center-y,color_code);
  2547.               }
  2548.  
  2549.               for (y1=starty;y1<endy;++y1) {
  2550.                  mempoint(y1+x_center,x+y_center,color_code);
  2551.                  mempoint(y1+x_center,y_center-x,color_code);
  2552.                  mempoint(x_center-y1,x+y_center,color_code);
  2553.                  mempoint(x_center-y1,y_center-x,color_code);
  2554.               }
  2555.            }
  2556.        }
  2557.  
  2558.        /* ºá¬αáΦ¿óá¡¿Ñ «¬απª¡«ßΓ¿ »πΓѼ »«óΓ«α¡«ú« ó맮óá
  2559.             circle() ß π¼Ñ¡∞ΦÑ¡¿Ñ¼ αáñ¿πßá */
  2560.  
  2561.             void fill_circle(x,y,r,c)
  2562.             int x,y,r,c;
  2563.             {
  2564.                while (r) {
  2565.                   circle(x,y,r,c);
  2566.                   r--;
  2567.                }
  2568.             }
  2569.         /* ºá»¿ß∞ Γ«τ¬¿ ó CGA/EGA */
  2570.  
  2571.          void mempoint(x,y,color_code)
  2572.          int x,y,color_code;
  2573.          {
  2574.             union mask {
  2575.                char c[2];
  2576.                int i;
  2577.             } bit_mask;
  2578.  
  2579.  
  2580.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2581. â½áóá IV                                                       -- 44 --
  2582.  
  2583.  
  2584.             int i,index,bit_position;
  2585.             unsigned char t;
  2586.             char xor; /* "¿ß¬½ετáεΘÑÑ êïê" µóÑΓá ó ß½πτáÑ Ñú«
  2587.                           ¿º¼Ñ¡Ñ¡¿∩ */
  2588.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  2589.                                                   »á¼∩Γ¿ CGA */
  2590.             bit_mask.i=0xFF3F; /* 11111111 00111111 ó
  2591.                                   ñó«¿τ¡«¼ ó¿ñÑ */
  2592.             if (x<0 || x>199 || y<0 || y>319) return;
  2593.             xor=color_code & 128; /* »α«óÑα¬á, πßΓá¡áó½¿óá½ß∩ ½¿
  2594.                                      αѪ¿¼ "¿ß¬½ετáεΘÑú« êïê" */
  2595.             color_code=color_code & 127; /* ¼á߬á ßΓáαΦ¿σ í¿Γ«ó */
  2596.  
  2597.             /*  πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
  2598.                 ó »αáóπε »«º¿µ¿ε */
  2599.  
  2600.              bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
  2601.                                   ó íá⌐ΓÑ */
  2602.              color_code<<=2*(3-bit_position); /* ßñó¿ú ¬«ñá µóÑΓá
  2603.                                         ó ¡πª¡πε »«º¿µ¿ε */
  2604.              bit_mask.i>>=2*bit_position; /* ßñó¿ú í¿Γ«ó«⌐ ¼á߬¿ ó
  2605.                                           ¡πª¡πε »«º¿µ¿ε */
  2606.  
  2607.              /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
  2608.  
  2609.               index=x*40+(y%4);
  2610.               if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
  2611.                                        óΓ«α«⌐ í½«¬ */
  2612.  
  2613.               /* ºá»¿ß∞ µóÑΓá */
  2614.  
  2615.                if (!xor) {  /* αѪ¿¼ ¿º¼Ñ¡Ñ¡¿∩ µóÑΓá */
  2616.                   t=*(ptr+index) & bit_mask.c[0];
  2617.                   *(ptr+index)=t|color_code;
  2618.                }
  2619.                else {
  2620.                   t=*(ptr+index) | (char)0;
  2621.                   *(ptr+index)=t & color_code;
  2622.                }
  2623.             }
  2624.  
  2625.         /* «Γ«íαáªÑ¡¿Ñ úαáΣ¿τÑ߬«ú« ¬παß«αá */
  2626.          void xhairs(x,y)
  2627.          int x,y;
  2628.          {
  2629.             line(x-4,y,x+3,y,1|128);
  2630.             line(x,y+4,x,y-3,1|128);
  2631.  
  2632.           }
  2633.  
  2634.         /* τΓÑ¡¿Ñ íá⌐Γá ¿º «»ÑαáΓ¿ó¡«⌐ »á¼∩Γ¿ CGA/EGA */
  2635.          unsigned char read_point(x,y)
  2636.          int x,y;
  2637.          {
  2638.  
  2639.  
  2640.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2641. â½áóá IV                                                       -- 45 --
  2642.  
  2643.  
  2644.             union mask {
  2645.                char c[2];
  2646.                int i;
  2647.             } bit_mask;
  2648.             int i,index,bit_position;
  2649.             unsigned char t;
  2650.             char xor; /* "¿ß¬½ετáεΘÑÑ êïê" µóÑΓá ó ß½πτáÑ Ñú«
  2651.                           ¿º¼Ñ¡Ñ¡¿∩ */
  2652.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  2653.                                                   »á¼∩Γ¿ CGA */
  2654.             bit_mask.i=3; /* 11111111 00111111 ó
  2655.                                   ñó«¿τ¡«¼ ó¿ñÑ */
  2656.             if (x<0 || x>199 || y<0 || y>319) return 0;
  2657.  
  2658.             /*  πßΓá¡«ó¬á í¿Γ«ó«⌐ ¼á߬¿ ¿ í¿Γ«ó αѪ¿¼á µóÑΓá
  2659.                 ó »αáóπε »«º¿µ¿ε */
  2660.              bit_position=y%4; /* óδτ¿ß½Ñ¡¿Ñ ¡πª¡«⌐ »«º¿µ¿¿
  2661.                                   ó íá⌐ΓÑ */
  2662.              bit_mask.i<<=2*(3-bit_position);
  2663.  
  2664.              /* «»αÑñѽѡ¿Ñ ΓαÑíπѼ«ú« íá⌐Γá ó »á¼∩Γ¿ ΓÑନ¡á½á */
  2665.               index=x*40+(y>>4);
  2666.               if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞ºπÑΓß∩
  2667.                                        óΓ«α«⌐ í½«¬ */
  2668.  
  2669.               /* ºá»¿ß∞ µóÑΓá */
  2670.                t=*(ptr+index) & bit_mask.c[0];
  2671.                t>>=2*(3-bit_position);
  2672.                return t;
  2673.             }
  2674.  
  2675.        /* ß«σαá¡Ñ¡¿Ñ  úαáΣ¿τÑ߬«ú« ¿º«íαáªÑ¡¿∩  */
  2676.  
  2677.         void save_pic()
  2678.         {
  2679.           char fname[80];
  2680.           FILE *fp;
  2681.           register int i,j;
  2682.           char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  2683.                                                  »á¼∩Γ¿   CGA  */
  2684.           char far *temp;
  2685.           unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
  2686.  
  2687.           temp=ptr;
  2688.         /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
  2689.           for (i=0;i<14;++i)
  2690.              for (j=0;j<80;++j) {
  2691.                 buf[i][j]=*temp; /* τÑΓ¡δ⌐ íá⌐Γ */
  2692.                 buf[i][j+1]=*(temp+8152); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  2693.                 *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  2694.                 temp++;
  2695.              }
  2696.            goto_xy(0,0);
  2697.            printf("ê¼∩ Σá⌐½á:");
  2698.  
  2699.  
  2700.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2701. â½áóá IV                                                       -- 46 --
  2702.  
  2703.  
  2704.            gets(fname);
  2705.            if (!(fp=fopen(fname,"wb"))) {
  2706.                printf("öá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
  2707.                return;
  2708.            }
  2709.  
  2710.            temp=ptr;
  2711.        /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
  2712.           for (i=0;i<14;++i)
  2713.              for (j=0;j<80;++j) {
  2714.                 *temp= buf[i][j]; /* τÑΓ¡δ⌐ íá⌐Γ */
  2715.                 *(temp+8125)=buf[i][j+1]; /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  2716.                 *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  2717.                 temp++;
  2718.              }
  2719.         /* ¬«»¿α«óá¡¿Ñ ¿º«íαáªÑ¡¿∩ ó Σá⌐½  */
  2720.            for (i=0;i<8152;i++) {
  2721.               putc(*ptr,fp); /* τÑΓ¡δ⌐ íá⌐Γ */
  2722.               putc(*(ptr+8125),fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  2723.               ptr++;
  2724.            }
  2725.  
  2726.            fclose(fp);
  2727.         }
  2728.  
  2729.  
  2730.        /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ */
  2731.  
  2732.          void load_pic()
  2733.          {
  2734.             char fname[80];
  2735.             FILE *fp;
  2736.             register int i,j;
  2737.  
  2738.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  2739.                                                    »á¼∩Γ¿   CGA  */
  2740.             char far *temp;
  2741.             unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
  2742.  
  2743.             temp=ptr;
  2744.         /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
  2745.             for (i=0;i<14;++i)
  2746.                for (j=0;j<80;j+=2) {
  2747.                   buf[i][j]=*temp;
  2748.                   buf[i][j+1]=*(temp+8152);
  2749.                   *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  2750.                   temp++;
  2751.                }
  2752.             goto_xy(0,0);
  2753.             printf("ê¼∩ Σá⌐½á:");
  2754.             gets(fname);
  2755.             if (!(fp=fopen(fname,"rb"))) {
  2756.                goto_xy(0,0);
  2757.                printf("öá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ\n");
  2758.  
  2759.  
  2760.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2761. â½áóá IV                                                       -- 47 --
  2762.  
  2763.  
  2764.                temp=ptr;
  2765.        /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
  2766.                for (i=0;i<14;++i)
  2767.                   for (j=0;j<80;j+=2) {
  2768.                      *temp= buf[i][j];
  2769.                      *(temp+8125)=buf[i][j+1];
  2770.                      temp++;
  2771.                   }
  2772.                return;
  2773.              }
  2774.       /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ ¿º Σá⌐½á */
  2775.            for (i=0;i<8152;i++) {
  2776.               *ptr=getc(fp); /* τÑΓ¡δ⌐ íá⌐Γ */
  2777.               *(ptr+8125)=getc(fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  2778.               ptr++;
  2779.            }
  2780.  
  2781.            fclose(fp);
  2782.         }
  2783.  
  2784.        /*  »«¼ÑßΓ¿Γ∞ ¬παß«α ó ºáñá¡¡«Ñ »«½«ªÑ¡¿Ñ */
  2785.            void goto_xy(x,y)
  2786.            int x,y;
  2787.            {
  2788.               r.h.ah=2; /* áñαÑßᵿ∩ ¬παß«αá */
  2789.               r.h.dl=y; /* ¬««αñ¿¡áΓá ßΓ«½íµá */
  2790.               r.h.dh=x; /* ¬««αñ¿¡áΓá ßΓ᫬¿ */
  2791.               r.h.bh=0; /* ó¿ñÑ«ßΓαá¡¿µá */
  2792.               int86(0x10,&r,&r);
  2793.             }
  2794.  
  2795.  
  2796.        /* ¬«»¿α«óá¡¿Ñ τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
  2797.  
  2798.           void copy(startx,starty,endx,endy,x,y)
  2799.           int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
  2800.           int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
  2801.                             ¬«»¿α«óá¡¿∩ */
  2802.           int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
  2803.                      ¬πñá íπñÑΓ »α«ó«ñ¿Γß∩ ¬«»¿α«óá¡¿Ñ */
  2804.           {
  2805.              int i,j;
  2806.              unsigned char c;
  2807.  
  2808.              for (;startx<endx;startx++,x++)
  2809.                 for (i=starty,j=y;i<endy;i++,j++) {
  2810.                    c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
  2811.                    mempoint(x,j,c); /* ºá»¿ß∞ ÑÑ ó ¡«óπε «í½áßΓ∞ */
  2812.                  }
  2813.             }
  2814.  
  2815.  
  2816.        /* »ÑαÑß佬á τáßΓ¿ φ¬αá¡á ó ñαπúπε «í½áßΓ∞ */
  2817.  
  2818.  
  2819.  
  2820.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2821. â½áóá IV                                                       -- 48 --
  2822.  
  2823.  
  2824.           void move(startx,starty,endx,endy,x,y)
  2825.           int startx,starty; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá */
  2826.           int endx,endy; /* ¡¿ª¡∩∩ »αáóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿
  2827.                             »ÑαÑß佬¿ */
  2828.           int x,y; /* óÑασ¡∩∩ ½Ñóá∩ ¬««αñ¿¡áΓá «í½áßΓ¿,
  2829.                      ¬πñá íπñÑΓ »α«ó«ñ¿Γ∞ß∩ »ÑαÑß佬á */
  2830.           {
  2831.              int i,j;
  2832.              unsigned char c;
  2833.  
  2834.              for (;startx<endx;startx++,x++)
  2835.                 for (i=starty,j=y;i<endy;i++,j++) {
  2836.                    c=read_point(startx,i); /* τΓÑ¡¿Ñ Γ«τ¬¿ */
  2837.                    mempoint(startx,i,0); /* ßΓ¿αá¡¿Ñ ßΓáα«ú«
  2838.                                             ¿º«íαáªÑ¡¿∩ */
  2839.                    mempoint(x,j,c); /* ºá»¿ß∞ Γ«τ¬¿ ó ¡«óπε «í½áßΓ∞ */
  2840.                  }
  2841.             }
  2842.  
  2843.  
  2844.         /* óαáΘÑ¡¿Ñ Γ«τ¬¿ ó«¬απú µÑ¡Γαá ß ¬««αñ¿¡áΓἿ
  2845.            x_org ¿ y_org ¡á πú«½ theta */
  2846.  
  2847.           void rotate_point(theta,x,y,x_org,y_org)
  2848.           double theta,*x,*y;
  2849.           int x_org,y_org;
  2850.           {
  2851.              double tx,ty;
  2852.  
  2853.         /* ¡«α¼á½¿ºáµ¿∩ X ¿ Y ¬ ¡áτá½∞¡«¼π áñαÑßπ */
  2854.              tx=*x-x_org;
  2855.              ty=*y-y_org;
  2856.  
  2857.         /* óαáΘÑ¡¿Ñ */
  2858.               *x=tx*cos(theta)-ty*sin(theta);
  2859.               *y=tx*sin(theta)-ty*cos(theta);
  2860.  
  2861.          /* ó«ºóαáΘÑ¡¿Ñ º¡áτÑ¡¿⌐ ¬««αñ¿¡áΓ */
  2862.               *x+=x_org;
  2863.               *y+=y_org;
  2864.            }
  2865.  
  2866.  
  2867.           /* éαáΘÑ¡¿Ñ ºáñá¡¡δσ «íΩÑ¬Γ«ó */
  2868.  
  2869.           void rotate_object(ob, theta, x, y, sides)
  2870.           double ob[][4]; /* «»¿ßá¡¿Ñ «íΩѬΓá */
  2871.           double theta;   /* πú«½ »«ó«α«Γá ó αáñ¿á¡áσ */
  2872.           int x, y;
  2873.           int sides;
  2874.             {
  2875.             register int i, j;
  2876.             double tempx, tempy;
  2877.             char ch;
  2878.  
  2879.  
  2880.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2881. â½áóá IV                                                       -- 49 --
  2882.  
  2883.  
  2884.  
  2885.             for(;;)
  2886.               {
  2887.               ch = getch(); /* óó«ñ »α¿º¡á¬á ¡á»αáó½Ñ¡¿∩ óαáΘÑ¡¿∩ */
  2888.               switch(tolower(ch))
  2889.                 {
  2890.                 case 'l': /* óαáΘÑ¡¿Ñ »α«Γ¿ó τáß«ó«⌐ ßΓαѽ¬¿ */
  2891.                   theta = theta < 0 ? -theta : theta;
  2892.                   break;
  2893.                 case 'r': /* óαáΘÑ¡¿Ñ »« τáß«ó«⌐ ßΓαѽ¬Ñ  */
  2894.                   theta = theta > 0 ? -theta : theta;
  2895.                   break;
  2896.                 default: return;
  2897.                 }
  2898.               for(j=0; j<=sides; j++) /* ßΓ¿αá¡¿Ñ ßΓáαδσ ½¿¡¿⌐  */
  2899.                 {
  2900.                 line((int) ob[j][0], (int) ob[j][1],
  2901.                      (int) ob[j][2], (int) ob[j][3], 0);
  2902.                 rotate_point(theta, &ob[j][0], &ob[j][1], x, y);
  2903.                 rotate_point(theta, &ob[j][2], &ob[j][3], x, y);
  2904.                 line((int) ob[j][0], (int) ob[j][1],
  2905.                      (int) ob[j][2], (int) ob[j][3], 2);
  2906.                 }
  2907.               }
  2908.             }
  2909.  
  2910.  
  2911.           /* «Γ«íαáªÑ¡¿Ñ «íΩѬΓá ¡á φ¬αá¡Ñ */
  2912.           void display_object(ob, sides)
  2913.           double ob[][4];
  2914.           int sides;
  2915.             {
  2916.             register int i;
  2917.  
  2918.             for(i=0; i<sides; i++)
  2919.               line((int)ob[i][0], (int)ob[i][1],
  2920.                    (int)ob[i][2], (int)ob[i][3], 2);
  2921.             }
  2922.  
  2923.        /* «»αÑñѽѡ¿Ñ «íΩѬΓá »« ºáñá¡¡δ¼ Γ«τ¬á¼ */
  2924.             define_object(ob,x,y)
  2925.             double ob[][4];
  2926.             int x,y;
  2927.             {
  2928.  
  2929.             union k{
  2930.               char c[2];
  2931.               int i;
  2932.                } key ;
  2933.             register int i,j;
  2934.  
  2935.             char far *ptr=(char far *) 0xB8000000; /* Γ«τ¬á ó
  2936.                                                    »á¼∩Γ¿   CGA  */
  2937.             char far *temp;
  2938.  
  2939.  
  2940.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2941. â½áóá IV                                                       -- 50 --
  2942.  
  2943.  
  2944.             unsigned char buf[14][80]; /* ß«ñÑαª¿Γ «íαẠφ¬αá¡á */
  2945.             int sides=0;
  2946.  
  2947.             temp=ptr;
  2948.         /* ß«σαá¡Ñ¡¿Ñ óÑασ¡¿σ ßΓ᫬ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á */
  2949.             for (i=0;i<14;++i)
  2950.                for (j=0;j<80;j+=2) {
  2951.                   buf[i][j]=*temp;
  2952.                   buf[i][j+1]=*(temp+8152);
  2953.                   *temp=0; *(temp+8152)=0; /* τ¿ßΓ¬á »«º¿µ¿⌐ φ¬αá¡á */
  2954.                   temp++;
  2955.                }
  2956.  
  2957.               i=0;
  2958.               xhairs(x,y);
  2959.               do {
  2960.                  goto_xy(0,0);
  2961.  
  2962.  
  2963.  
  2964.              printf("Ä»αÑñѽ¿ΓÑ ßΓ«α«¡π %d,",sides+1);
  2965.                  if (i==0) printf("éóÑñ¿ΓÑ »Ñαóπε úáíáα¿Γ¡πε Γ«τ¬π ");
  2966.                  else printf("éóÑñ¿ΓÑ óΓ«απε úáíáα¿Γ¡πε Γ«τ¬π ");
  2967.  
  2968.                  key.i=bioskey(0);
  2969.                  xhairs(x,y);
  2970.                  if (key.c[0]=13) {
  2971.                     ob[sides][++i]=(double) x;
  2972.                     ob[sides][++i]=(double) y;
  2973.                     if (i==4) {
  2974.                        i=0;
  2975.                        sides++;
  2976.                     }
  2977.                   }
  2978.                  /* »ÑαѼÑΘÑ¡¿Ñ úαáΣ¿τÑ߬«ú« ¬παß«αá */
  2979.                  if (rey.c[0]) switch (key.c[1]) {
  2980.                     case 75: /* ó½Ñó« */
  2981.                        y-=1;
  2982.                        break;
  2983.                       case 77: /* ó»αáó« */
  2984.                        y += 1
  2985.                        break;
  2986.                      case 72: /* óóÑασ */
  2987.                             x -= 1;
  2988.                        break;
  2989.                      case 80: /* ó¡¿º */
  2990.                             x += 1;
  2991.                        break;
  2992.                      case 71: /* óóÑασ ¿ ó½Ñó« */
  2993.                           x -= 1;
  2994.                        y -= 1;
  2995.                        break;
  2996.                      case 73: /* óóÑασ ¿ ó»αáó« */
  2997.                           x -= 1;
  2998.  
  2999.  
  3000.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  3001. â½áóá IV                                                       -- 51 --
  3002.  
  3003.  
  3004.                        y += 1;
  3005.                        break;
  3006.                      case 79: /* ó¡¿º ¿ ó½Ñó« */
  3007.                        x += 1;
  3008.                        y -= 1;
  3009.                        break;
  3010.                      case 81: /* ó¡¿º ¿ ó»αáó« */
  3011.                           x += 1;
  3012.                        y += 1;
  3013.                        break;
  3014.                     }
  3015.                     if (key.c[1]!=59) xhairs(x,y);
  3016.  
  3017.                  }  while (key.c[1]!=59); /* ¡áªáΓá ¬½áó¿Φá F1 */
  3018.  
  3019.                  /* ó«ßßΓá¡«ó½Ñ¡¿Ñ ß«ñÑন¼«ú« φ¬αá¡á */
  3020.                  for (i=0;i<14;++i)
  3021.                     for (j=0;j<80;j+=2) {
  3022.                        *temp= buf[i][j];
  3023.                        *(temp+8125)=buf[i][j+1];
  3024.                        temp++;
  3025.                     }
  3026.                  return sides;
  3027.               }
  3028.  
  3029.  
  3030.           ò«Γ∩ ó φΓ«⌐ »α«úαἼѠñ«ó«½∞¡« ¼¡«ú«  «»ÑαáΓ«α«ó,  óá¼  ¡áñ«
  3031.      óóÑßΓ¿ ÑÑ ó ßó«⌐ ¬«¼»∞εΓÑα, Γᬠ¬á¬ «¡á ñ«ó«½∞¡« ¿¡ΓÑαÑß¡á. Æá¬ªÑ
  3032.      «¡á   íπñÑΓ   ∩ó½∩Γ∞ß∩   σ«α«Φ¿¼   úαáΣ¿τÑ߬¿¼   ¿¡ßΓαπ¼Ñ¡Γá½∞¡δ¼
  3033.      ßαÑñßΓó«¼,   ¬«Γ«α«Ñ  óδ  ß¼«ªÑΓÑ  ¿ß»«½∞º«óáΓ∞  ó  ½εí«⌐  ¼«¼Ñ¡Γ
  3034.      óαѼѡ¿.
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.  
  3045.  
  3046.  
  3047.  
  3048.  
  3049.  
  3050.  
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.  
  3057.  
  3058.  
  3059.  
  3060.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  3061.