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

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