home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / c.doc / 03.prn < prev    next >
Encoding:
Text File  |  1990-12-06  |  75.0 KB  |  2,461 lines

  1.                              âïÇéÇ 3                          -- 1 --
  2.                              -------
  3.  
  4.               Åα«úαá¼¼δ,   «ßΓáεΘ¿Ñß∩   αѺ¿ñÑ¡Γ¡δ¼¿  »«ß½Ñ
  5.               ºáóÑαΦÑ¡¿∩  ¿  Σ«α¼¿απεΘ¿Ñ   »α¿   ¿σ  ó맮óÑ
  6.               óß»½δóáεΘ¿Ñ  ¿º«íαáªÑ¡¿∩  ¡á  φ¬αá¡Ñ ñ¿ß»½Ñ∩.
  7.      -----------------------------------------------------------------
  8.  
  9.           Åα«ßΓá∩  ¡á  »Ñαóδ⌐  óºú½∩ñ  ¿ñÑ∩ ß«ºñá¡¿∩ »α«úαá¼¼, ¬«Γ«αδÑ
  10.      «ßΓáó὿ß∞  íδ  αѺ¿ñÑ¡Γ¡δ¼¿  ó  »á¼∩Γ¿  »«ß½Ñ  ¿σ  ºáóÑαΦÑ¡¿∩  ¿
  11.      αÑáú¿α«ó὿  ¡á  ó맮ó  Σ«α¼¿α«ó᡿Ѽ  óß»½δóáεΘ¿σ ¿º«íαáªÑ¡¿⌐ ¡á
  12.      φ¬αá¡Ñ ñ¿ß»½Ñ∩, ¡á ßἫ¼ ñѽѠ∩ó½∩ÑΓß∩ «ñ¡«⌐ ¿º ¡á¿í«½ÑÑ  Γαπñ¡δσ
  13.      ºáñáτ  »α«úαá¼¼¿α«óá¡¿∩  ñ½∩  Å¥éî.  Æá¬¿Ñ  »α«úαá¼¼δ  ¡áºδóáεΓß∩
  14.      ÆSR-»α«úαἼἿ. Åα¿ τΓÑ¡¿¿ ñá¡¡«ú«  αáºñѽᠠóδ  ñ«½ª¡δ  »«½πτΦÑ
  15.      »α¿ßΓÑú¡πΓ∞ß∩  αѼ¡∩¼¿  íѺ«»áß¡«ßΓ¿  ¿ «ñÑΓ∞ ºáΘ¿Γ¡δ⌐ Φ½Ñ¼, Γ.¬.
  16.      ß«ºñá¡¿Ñ TSR-»α«úαá¼¼ ßó∩ºá¡« ß α¿ß¬«¼.  ì«  φëà α¿ß¬  «»αáóñá¡
  17.      ó«º¼«ª¡δ¼    ó«º¡áúαáªñÑ¡¿Ñ¼    -    »«¿ßΓ¿¡Ñ   »α«ΣÑßß¿«¡á½∞¡δ¼¿
  18.      αѺπ½∞ΓáΓἿ, ¬«Γ«α묨 ú«αñ¿½ß∩  íδ  ½εí«⌐  »α«úαá¼¼¿ßΓ  ¼¿α«ó«ú«
  19.      ¬½áßßá.
  20.  
  21.           Å«ß¬«½∞¬π   ÆSR-»α«úαá¼¼δ,  ÑßΓÑßΓóÑ¡¡«,  ñ«½ª¡δ  ¡á  ¡¿º¬«¼
  22.      πα«ó¡Ñ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ß á»»áαáΓπα«⌐ ¿  «»Ñαᵿ«¡¡«⌐  ß¿ßΓѼ«⌐,
  23.      Γ«  ¿º½áúáѼδÑ ó ñá¡¡«¼ αáºñѽѠßóÑñÑ¡¿∩ íπñπΓ »α¿¼Ñ¡¿¼δ Γ«½∞¬« ¬
  24.      Å¥éî ½¿¡¿¿ IBM PC, αáí«ΓáεΘ¿¼¿ »«ñ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐ DOS.  Å«
  25.      »α¿τ¿¡á¼,  ¬«Γ«αδÑ  íπñπΓ  π¬áºá¡δ  ¡¿ªÑ,  »α¿ó«ñ¿¼δÑ  ó  αáºñѽÑ
  26.      »α«úαá¼¼δ  αáßßτ¿Γá¡δ  ¡á  ¬«¼»¿½∩Γ«α  Turbo  C,  ¡«  ¼«úπΓ  íδΓ∞
  27.      ¼«ñ¿Σ¿µ¿α«óá¡δ ¿ ñ½∩ ñαπú¿σ ¬«¼»¿½∩Γ«α«ó.
  28.  
  29.           ÅαÑñπ»αѪñÑ¡¿Ñ.  ä½∩ αáºαáí«Γ¬¿ ¿ ¿ß»«½∞º«óá¡¿∩ TSR-»α«úαá¼¼
  30.      σáαá¬ΓÑα¡á ¼«ñ¿Σ¿¬áµ¿∩ Γáí½¿µδ óÑ¬Γ«α«ó »αÑαδóá¡¿⌐. Åα¿óÑñÑ¡¡δÑ ó
  31.      ñá¡¡«¼ αáºñѽѠ»α«úαá¼¼δ Γαá¡ß½¿απεΓß∩ ß »«¼«Θ∞ε Æπαí«  æ¿ óÑαß¿¿
  32.      1.0  ¿  ó  φΓ«¼  ß½πτáÑ  αáí«ΓáεΓ  ¬«ααÑ¬Γ¡«  ¿  íѺ  »«ßΓ«α«¡¡¿σ
  33.      φΣΣÑ¬Γ«ó.  Åα¿  ¿ß»«½∞º«óá¡¿¿  ñαπú«ú«  ¬«¼»¿½∩Γ«αá  ¬«ααÑ¬Γ¡«ßΓ∞
  34.      αáí«Γδ ¡Ñ úáαá¡Γ¿απÑΓß∩.  èα«¼Ñ Γ«ú«, Ñß½¿ óδ íπñÑΓÑ ¡áí¿αáΓ∞ φΓ¿
  35.      »α«úαá¼¼δ óαπτ¡πε,  Γ« ¼«ªÑΓÑ ó¡ÑßΓ¿ ßó«¿ «Φ¿í¬¿.  ê ó Γ«¼,  ¿  ó
  36.      ñαπú«¼  ß½πτáÑ  φΓ«  ¼«ªÑΓ »α¿óÑßΓ¿ ¬ ΣáΓá½∞¡«¼π ßí«ε ß¿ßΓѼδ,  ó
  37.      αѺπ½∞ΓáΓÑ  τÑú«  ¼«úπΓ   íδΓ∞   π¡¿τΓ«ªÑ¡δ   ñá¡¡δÑ   ¡á   óáΦѼ
  38.      ó¿¡τÑßΓÑα߬«¼ ñ¿ß¬Ñ. Å«φΓ«¼π µÑ½Ñß««íαạ« ñѽáΓ∞ αѺÑαó¡δÑ ¬«»¿¿
  39.      Σá⌐½«ó. ƒ πóÑαÑ¡, τΓ« »α¿ó«ñ¿½ ¬ ¬αáσπ ¼«ε ¼«ñѽ∞ 60 ¡Ñ ¼Ñ¡ÑÑ 100
  40.      αẠ  ºá  ΓÑ  ñóá  ñ¡∩,  »«¬á  «Γ½áª¿óá½  «ß¡«ó¡πε  ½«ú¿¬π  ßó«Ñ⌐
  41.      »α«úαá¼¼δ.  (è ßτáßΓ∞ε,  ∩ ¡Ñ  ºáΓ¿αá½  »α¿  φΓ«¼  ó¿¡τÑßΓÑα߬«ú«
  42.      ñ¿ß¬á).
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  61. â½áóá III                                                       -- 2 --
  62.  
  63.  
  64.                ùΓ« ΓᬫѠTSR-»α«úαá¼¼á?
  65.      -----------------------------------------------------------------
  66.  
  67.           ÆSR-»α«úαá¼¼δ  ß«ºñáεΓß∩  »πΓѼ  ó맮óá  Σπ¡¬µ¿¿  49 DOS, »«
  68.      ¬«Γ«α«⌐  »α«¿ºó«ñ¿Γß∩  ó«ºóαáΓ  ¿º  »α«úαá¼¼δ  ó  DOS.  Åα¿  φΓ«¼
  69.      »α«úαἼᠠ«ßΓáÑΓß∩ ó «í½áßΓ¿ »á¼∩Γ¿, ¬«Γ«απε DOS ó ñá½∞¡Ñ⌐ΦѼ ¡Ñ
  70.      ¿ß»«½∞ºπÑΓ. Æá¬¿¼ «íαẫ¼, »α«úαἼᠼ«ªÑΓ íδΓ∞ ¼ú¡«óÑ¡¡« óδºóá¡á
  71.      íѺ »«óΓ«α¡«⌐ ºáúαπº¬¿. Äñ¡¿¼ ¿º ¼¡«ú¿σ Φ¿α«¬« ¿ºóÑßΓ¡δσ »α¿¼Ñα«ó
  72.      TSR-»α«úαá¼¼ ∩ó½∩ÑΓß∩ »α«úαá¼¼á Sidekick Σ¿α¼δ éorland.
  73.  
  74.           ü«½∞Φ¿¡ßΓó« TSR-»α«úαá¼¼ óδºδóáεΓß∩  ß  »«¼«Θ∞ε  »αÑαδóá¡¿∩,
  75.      ¬«Γ«α«Ñ  ¼«ªÑΓ íδΓ∞ ßΣ«α¼¿α«óá¡« ¡Ñ߬«½∞¬¿¼¿ ß»«ß«íἿ.  ìá¿í«½ÑÑ
  76.      αáß»α«ßΓαá¡Ñ¡¡δ¼¿  ∩ó½∩εΓß∩  »αÑαδóá¡¿∩  »«  Γá⌐¼Ñαπ,  »αÑαδóá¡¿∩
  77.      ¬½áó¿áΓπαδ   ¿   »ÑτáΓ¿  φ¬αá¡á.  ä½∩  TSR-»α«úαá¼¼,  Σ«α¼¿απεΘ¿σ
  78.      ¿º«íαáªÑ¡¿Ñ  ¡á  φ¬αá¡Ñ,  «íδτ¡«   ¿ß»«½∞ºπεΓß∩   »αÑαδóá¡¿∩   «Γ
  79.      ¬½áó¿áΓπαδ  ¿½¿  »ÑτáΓ¿ φ¬αá¡á,  »«ß¬«½∞¬π »«ºó«½∩εΓ »«½∞º«óáΓѽε
  80.      óδºδóáΓ∞ TSR-»α«úαá¼¼π »πΓѼ «ñ¿¡«τ¡«ú« ¡áªáΓ¿∩ ¬½áó¿Φ¿.
  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. â½áóá III                                                       -- 3 --
  122.  
  123.  
  124.                ÅαÑαδóá¡¿∩ ó ßѼÑ⌐ßΓóÑ »α«µÑßß«α«ó 8086.
  125.      -----------------------------------------------------------------
  126.  
  127.           Åα«µÑßß«αδ ßѼÑ⌐ßΓóá  8086  »«ññÑনóáεΓ  ñ«  256  αẽ¿τ¡δσ
  128.      »αÑαδóá¡¿⌐  »« óÑ¬Γ«απ. ÅαÑαδóá¡¿Ñ »« óÑ¬Γ«απ óδºδóáÑΓ óδ»«½¡Ñ¡¿Ñ
  129.      »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿⌐ (ISR), áñαÑß ¬«Γ«α«⌐ ß«ñÑনΓß∩  ó
  130.      Γáí½¿µÑ  óÑ¬Γ«α«ó  »αÑαδóá¡¿⌐.  ò«Γ∩ ¡Ñ¬«Γ«αδÑ ßΓáαΦ¿Ñ »α«µÑßß«αδ
  131.      ßѼÑ⌐ßΓóá   ΓαÑíπεΓ,   τΓ«íδ   »α«úαá¼¼δ   «íαáí«Γ¬¿   »αÑαδóá¡¿∩
  132.      αáß»«½áú὿ß∞  ó «»αÑñѽѡ¡δσ áñαÑßáσ »á¼∩Γ¿, ¼Ñσá¡¿º¼ »αÑαδóá¡¿⌐
  133.      »«  óÑ¬Γ«απ  »«ºó«½∩ÑΓ  «»αÑñѽ∩Γ∞  áñαÑßá   »α«úαá¼¼   «íαáí«Γ¬¿
  134.      »αÑαδóá¡¿⌐.
  135.  
  136.           Æáí½¿µá  óÑ¬Γ«α«ó  ¡áτ¿¡áÑΓß∩ ß áñαÑßá 0000:0000 ¿ ÑÑ αẼÑα
  137.      ß«ßΓáó½∩ÑΓ  1024  íá⌐Γá.  Å«ß¬«½∞¬π  áñαÑß  »α«úαá¼¼δ   «íαáí«Γ¬¿
  138.      »αÑαδóá¡¿∩  ¼«ªÑΓ íδΓ∞ ½εíδ¼, Γ« ñ½∩ Ñú« «»αÑñѽѡ¿∩ ΓαÑíπÑΓß∩ 32
  139.      αáºα∩ñá (4 íá⌐Γá). æ½Ññ«óáΓѽ∞¡«, αẼÑα ¬áªñ«⌐ ºá»¿ß¿ ó  Γáí½¿µÑ
  140.      óÑ¬Γ«α«ó  ß«ßΓáó½∩ÑΓ  4  íá⌐Γá.  ÇñαÑßá  ISR-»α«úαá¼¼  ó  Γáí½¿µÑ
  141.      ºá»¿ßδóáεΓß∩  Γᬿ¼  «íαẫ¼,  τΓ«  áñαÑß   »α«úαá¼¼δ   «íαáí«Γ¬¿
  142.      »αÑαδóá¡¿∩  0  ¡áσ«ñ¿Γß∩ »« áñαÑßπ 0000:0000, »α«úαá¼¼δ «íαáí«Γ¬¿
  143.      »αÑαδóá¡¿∩ »αÑαδóá¡¿∩ 1 - »« áñαÑßπ 0000:0004, »αÑαδóá¡¿∩ 2 -  »«
  144.      áñαÑßπ 0000:0008 ¿ Γ.ñ.
  145.  
  146.           è«úñá  »α«¿ßσ«ñ¿Γ  »αÑαδóá¡¿Ñ,  Γ«  ½εíδÑ  ñαπú¿Ñ »αÑαδóá¡¿∩
  147.      ºá»αÑΘáεΓß∩. éáΦá  »α«úαἼᠠ«íαáí«Γ¬¿  »αÑαδóá¡¿∩  ßαáºπ  »«ß½Ñ
  148.      Γ«ú«,  ¬á¬  «¡á  ¡áτ¡ÑΓ óδ»«½¡∩Γ∞ß∩, ñ«½ª¡á αáºαÑΦ¿Γ∞ »αÑαδóá¡¿∩,
  149.      τΓ«íδ ¿ºíѪáΓ∞  ¬αáσá  ß¿ßΓѼδ.  Åα«úαἼᠠ«íαáí«Γ¬¿  »αÑαδóá¡¿∩
  150.      ñ«½ª¡á  ºáóÑαΦáΓ∞ß∩ ¬«¼á¡ñ«⌐ IRET.
  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. â½áóá III                                                       -- 4 --
  182.  
  183.  
  184.                     ÅαÑαδóá¡¿∩ »α«Γ¿ó DOS ¿ BIOS:
  185.                     TαÑó«úá ó ßΓαá¡Ñ DOS.
  186.      -----------------------------------------------------------------
  187.  
  188.           Åα«úαá¼¼¿ßΓδ  τáßΓ«  óδαáªáεΓ  ¡Ññ«ó«½∞ßΓó«  ΓѼ, τΓ« DOS ¡Ñ
  189.      ∩ó½∩ÑΓß∩ »«óΓ«α¡« óσ«ñ¿¼«⌐ »α«úαá¼¼«⌐. ¥Γ«  «º¡áτáÑΓ,  τΓ«  ¬«úñá
  190.      «ñ¡á »α«úαἼᠫíαáΘáÑΓß∩ ¬ DOS, Γ« ñαπúá∩ »α«úαá¼¼á φΓ«ú« ñѽáΓ∞
  191.      ¡Ñ ¼«ªÑΓ. (¥Γ¿¼ «íΩ∩ß¡∩ÑΓß∩, ó τáßΓ¡«ßΓ¿, »«τѼπ DOS ¡Ñ  ∩ó½∩ÑΓß∩
  192.      ¼π½∞Γ¿ºáñáτ¡«⌐  «»Ñαᵿ«¡¡«⌐  ß¿ßΓѼ«⌐). Æá¬¿¼ «íαẫ¼, »α«úαá¼¼á
  193.      «íαáí«Γ¬¿ »αÑαδóá¡¿∩ ¡Ñ ¼«ªÑΓ óδºδóáΓ∞ ¡¿¬á¬«⌐ Σπ¡¬µ¿¿ DOS, Γá¬á∩
  194.      »«»δΓ¬á  »α¿ó«ñ¿Γ  ¬  ¬αáσπ  ß¿ßΓѼδ. Å«φΓ«¼π »α«úαἼᠫíαáí«Γ¬¿
  195.      »αÑαδóá¡¿∩   ñ«½ª¡á   ßá¼á   óδ»«½¡∩Γ∞   ΓÑ   ñÑ⌐ßΓó¿∩,   ¬«Γ«αδÑ
  196.      »α«¿ºó«ñ∩Γß∩  »α¿  «íαáΘÑ¡¿¿  ¬  Σπ¡¬µ¿∩¼  DOS.  è  ßτáßΓ∞ε,  ñ½∩
  197.      Σ«α¼¿α«óá¡¿∩ ó¿ñÑ«¿º«íαáªÑ¡¿∩  ¼δ  ¼«ªÑ¼  ¿ß»«½∞º«óáΓ∞  »α«úαá¼¼δ
  198.      ¡Ñ»«ßαÑñßΓóÑ¡¡«ú« «íαáΘÑ¡¿∩ ¬ ó¿ñÑ«»á¼∩Γ¿ ¿º αáºñѽ«ó 1 ¿ 2.
  199.  
  200.           BIOS  ñ«»π߬áÑΓ  ¡Ñ¬«Γ«απε  »«óΓ«α¡πε  óσ«ñ¿¼«ßΓ∞. ìá»α¿¼Ñα,
  201.      »αÑαδóá¡¿Ñ 16, ß««ΓóÑΓßΓóπεΘÑÑ óó«ñπ  ß  ¬½áó¿áΓπαδ,  ¼«ªÑΓ  íδΓ∞
  202.      ¿ß»«½∞º«óá¡«  ó  φΓ«¼  αѪ¿¼Ñ  íѺ  ¬á¬¿σ-½¿í« »«í«τ¡δσ φΣΣÑ¬Γ«ó.
  203.      ìѬ«Γ«αδÑ ñαπú¿Ñ »«ñ»α«úαá¼¼δ ¿ß»«½∞º«óáΓ∞ Γᬿ¼ «íαẫ¼ ¡Ñ ßΓ«½∞
  204.      íѺ«»áß¡«. Äí¡áαπª¿Γ∞ φΓ« ¼«ª¡« Γ«½∞¬« φ¬ß»Ñα¿¼Ñ¡Γá½∞¡δ¼ »πΓѼ. Ä
  205.      Γ«¼, τΓ« Σπ¡¬µ¿ε ¡Ñ½∞º∩ ¿ß»«½∞º«óáΓ∞ ó Γᬫ¼ αѪ¿¼Ñ,  óδ  πº¡áÑΓÑ
  206.      »«  ΣáΓá½∞¡«¼π  ßí«ε  ß¿ßΓѼδ.  ä½∩  »α¿óÑñÑ¡¡δσ ó ñá¡¡«¼ αáºñѽÑ
  207.      »α¿¼Ñα«ó ¿ ñ½∩ ¼¡«ú¿σ αáß»α«ßΓαá¡Ñ¡¡δσ ó ¼¿αÑ »α«úαá¼¼ »αÑαδóá¡¿∩
  208.      16 ó»«½¡Ñ ñ«ßΓáΓ«τ¡«.
  209.  
  210.           Å«ß¬«½∞¬π ¼¡«ú¿Ñ ¿º Σπ¡¬µ¿⌐ ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿ ∩ºδ¬á  æ¿
  211.      «íαáΘáεΓß∩  ¬  DOS  ¿½¿ ¬ BIOS, Γ« «¡¿ ¡Ñ ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ ΓÑσ
  212.      Σπ¡¬µ¿⌐ DOS ¿ BIOS, ¬«Γ«αδÑ ¡Ñ «íÑß»Ñτ¿óáεΓ »«óΓ«α¡«⌐ óσ«ñ¿¼«ßΓ¿.
  213.      æ½ÑñπÑΓ  »«¼¡¿Γ∞, τΓ« ¡Ñ Γ«½∞¬« Σπ¡¬µ¿¿ óó«ñá-óδó«ñá «íαáΘáεΓß∩ ¬
  214.      DOS ¿  BIOS.  ìá»α¿¼Ñα,  Σπ¡¬µ¿∩  αáß»αÑñѽѡ¿∩  »á¼∩Γ¿  malloc()
  215.      «íαáΘáÑΓß∩  ¬  DOS  ñ½∩  «»αÑñѽѡ¿∩  αẼÑαá  ßó«í«ñ¡«⌐ »á¼∩Γ¿ ó
  216.      ß¿ßΓѼÑ. è  ß«ªá½Ñ¡¿ε,  »α«úαá¼¼δ,  ¬«Γ«αδÑ  αáßßτ¿Γá¡δ  ¡á  «ñ¿¡
  217.      ¬«¼»¿½∩Γ«α,  ¼«úπΓ  ¡Ñ  αáí«ΓáΓ∞  ß  ñαπú¿¼  ¬«¼»¿½∩Γ«α«¼. ¥Γ¿¼ ¿
  218.      «íΩ∩ß¡∩ÑΓß∩,  »«τѼπ  TSR-»α«úαá¼¼δ  Γᬠ  Γαπñ¡«   ß«ºñáóáΓ∞   ¿
  219.      »ÑαÑ¡«ß¿Γ∞  ó  ñαπúπε  ßαÑñπ  ¿ »«τѼπ TSR-»α«úαá¼¼ ß«ºñá¡« ßΓ«½∞
  220.      ¡Ñ¼¡«ú« »α¿ ¿σ «τÑ¡∞ í«½∞Φ«⌐ »«»π½∩α¡«ßΓ¿.
  221.  
  222.           Å« ßπΘÑßΓóπ,  óδ  ñ«½ª¡δ  ó«ß»α¿¡¿¼áΓ∞   TSR-»α«úαá¼¼δ   ¬á¬
  223.      "ºáí½πñΦ¿Ñ"   »α«úαá¼¼δ,   «   ßπΘÑßΓó«óá¡¿¿   ¬«Γ«αδσ   DOS   ¡Ñ
  224.      »«ñ«ºαÑóáÑΓ.  ê ó  ñá½∞¡Ñ⌐ΦѼ,  τΓ«íδ  ß«σαá¡¿Γ∞  Γá⌐¡π  «  ßó«Ñ¼
  225.      ßπΘÑßΓó«óá¡¿¿ φΓ¿ »α«úαá¼¼δ ñ«½ª¡δ ¿ºíÑúáΓ∞ ½εí«ú« óºá¿¼«ñÑ⌐ßΓó¿∩
  226.      ß DOS.  éßÑú« »áαδ «íαáΘÑ¡¿⌐ ¬ DOS ñ«ßΓáΓ«τ¡«,  ¿ óáΦÑ⌐ »α«úαá¼¼Ñ
  227.      íπñÑΓ  πßΓα«Ñ¡á ¬α«óáóá∩ αѺ¡∩.  ùΓ«íδ φΓ«ú« ¿ºíѪáΓ∞,  óδ ñ«½ª¡δ
  228.      «ΘπΘáΓ∞ ßÑí∩ Φ»¿«¡«¼ ¿ ¿¼ÑΓ∞ ¡Ñαóδ áóΓ«ú«¡Θ¿¬á.
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  241. â½áóá III                                                       -- 5 --
  242.  
  243.  
  244.                î«ñ¿Σ¿¬áΓ«α Σπ¡¬µ¿⌐ »αÑαδóá¡¿∩ Æπαí« æ¿.
  245.      -----------------------------------------------------------------
  246.  
  247.           ò«Γ∩ ßΓá¡ñáαΓ ANSI φΓ«ú« ¿  ¡Ñ  ΓαÑíπÑΓ,  Æπαí« æ¿  ó¬½ετáÑΓ
  248.      ß»Ñµ¿á½∞¡δ⌐   ¼«ñ¿Σ¿¬áΓ«α   Γ¿»á   Σπ¡¬µ¿¿,   ¬«Γ«αδ⌐  ¡áºδóáÑΓß∩
  249.      interrupt  ¿  »«ºó«½∩ÑΓ  ¿ß»«½∞º«óáΓ∞  Σπ¡¬µ¿¿  æ¿   ó   ¬áτÑßΓóÑ
  250.      TSR-»α«úαá¼¼. (ü«½∞Φ¿¡ßΓó« «ß¡«ó¡δσ αáºαáí«Γτ¿¬«ó ¬«¼»¿½∩Γ«α«ó æ¿
  251.      »«  óßÑ⌐  óÑα«∩Γ¡«ßΓ¿  ó¬½ετáΓ  φΓ«  ßαÑñßΓó«  ó   ßó«¿   íπñπΘ¿Ñ
  252.      αáºαáí«Γ¬¿,  »«ß¬«½∞¬π  φΓ«  «τÑ¡∞  ó᪡«Ñ αáßΦ¿αÑ¡¿Ñ). ìá»α¿¼Ñα,
  253.      »αÑñ»«½«ª¿¼,  τΓ«  Σπ¡¬µ¿∩  test()  ¿ß»«½∞ºπÑΓß∩  ñ½∩   «íαáí«Γ¬¿
  254.      »αÑαδóá¡¿⌐.  é  φΓ«¼  ß½πτáÑ  óδ  ñ«½ª¡δ  «»αÑñѽ¿Γ∞  ÑÑ Γá¬, ¬á¬
  255.      »«¬áºá¡« ¡¿ªÑ. Åáαá¼ÑΓαδ,  «»¿ßδóáεΘ¿Ñ  º¡áτÑ¡¿∩  ß««ΓóÑΓßΓóπεΘ¿σ
  256.      αÑú¿ßΓα«ó  ó«  óαѼ∩ »αÑαδóá¡¿∩, ¡Ñ ¡πª¡« «»αÑñѽ∩Γ∞, Ñß½¿ «¡¿ ¡Ñ
  257.      íπñπΓ ¿ß»«½∞º«óáΓ∞ß∩.
  258.  
  259.      void interrupt test(bp, di, si, ds, es, dx, cx, bx,
  260.                          ax, ip, cs, flags)
  261.      unsigned bp, di, si, ds, es, dx, cx, bx, ax, ip, cs, flags;
  262.      {
  263.          .
  264.          .
  265.          .
  266.      }
  267.  
  268.           öπ¡¬µ¿∩  interrupt  áóΓ«¼áΓ¿τÑ߬¿  ß«σαá¡∩ÑΓ  º¡áτÑ¡¿∩  óßÑσ
  269.      αÑú¿ßΓα«ó  ¿  ó«ßßΓá¡áó½¿óáÑΓ  ¿σ  »ÑαÑñ   ó«ºóαáΓ«¼   π»αáó½Ñ¡¿∩
  270.      óδºδóáεΘÑ⌐   »α«úαá¼¼Ñ.   ¥Γá  Σπ¡¬µ¿∩  ¿ß»«½∞ºπÑΓ  ñ½∩  ó«ºóαáΓá
  271.      π»αáó½Ñ¡¿∩ ¬«¼á¡ñπ IRET ó¼ÑßΓ« «íδτ¡«⌐  ó  Γᬫ¼  ß½πτáÑ  ¬«¼á¡ñδ
  272.      RET.
  273.  
  274.           é   »αÑñßΓáó½Ñ¡¡δσ   ó  ñá¡¡«⌐  ¬¡¿úÑ  »α¿¼Ñαáσ  ¼«ñ¿Σ¿¬áΓ«α
  275.      interrupt   »α¿¼Ñ¡∩ÑΓß∩   Γ«½∞¬«   ñ½∩   ΓÑσ   Σπ¡¬µ¿⌐,   ¬«Γ«αδÑ
  276.      ¿ß»«½∞ºπεΓß∩   ó  ¬áτÑßΓóÑ  Γ«τѬ  óσ«ñá  ó  »α«úαá¼¼δ  «íαáí«Γ¬¿
  277.      »αÑαδóá¡¿⌐ TSR-»α«úαá¼¼.
  278.  
  279.           àß½¿ óáΦ  ¬«¼»¿½∩Γ«α  ¡Ñ »«ññÑনóáÑΓ ¼«ñ¿Σ¿¬áΓ«α interrupt,
  280.      Γ« óá¼ ¡Ñ«íσ«ñ¿¼« ¡á»¿ßáΓ∞ ¡á áßßѼí½ÑαÑ  ¡Ñí«½∞Φ«⌐  ¿¡ΓÑαΣÑ⌐ß¡δ⌐
  281.      ¼«ñπ½∞,    ¬«Γ«αδ⌐    íπñÑΓ    ß«σαá¡∩Γ∞    º¡áτÑ¡¿∩   αÑú¿ßΓα«ó,
  282.      »ÑαÑπßΓá¡áó½¿óáΓ∞  αáºαÑΦÑ¡¿Ñ  »αÑαδóá¡¿⌐,   á   ºáΓѼ   óδºδóáΓ∞
  283.      ß««ΓóÑΓßΓóπεΘπε  Σπ¡¬µ¿ε  æ¿.  ä½∩  óδσ«ñá  ¿º  ¼«ñπ½∩ ¡Ñ«íσ«ñ¿¼«
  284.      ¿ß»«½∞º«óáΓ∞ ¬«¼á¡ñπ IRET.  æαÑñßΓóá ß«ºñá¡¿∩  Σπ¡¬µ¿⌐  ¡á  ∩ºδ¬Ñ
  285.      áßßѼí½Ñαá  αẽ¿τ¡δ  ñ½∩  αạδσ  ¬«¼»¿½∩Γ«α«ó,  ΓᬠτΓ« τ¿Γá⌐ΓÑ
  286.      ¿¼ÑεΘÑÑß∩ π óáß απ¬«ó«ñßΓó« »«½∞º«óáΓѽ∩.
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  301. â½áóá III                                                       -- 6 --
  302.  
  303.  
  304.                ÄíΘ¿⌐ »½á¡ TSR-»α«úαá¼¼δ
  305.      -----------------------------------------------------------------
  306.  
  307.           éßÑ TSR-»α«úαá¼¼δ «íδτ¡« ß«ßΓ«∩Γ ¿º  ñóπσ  αáºñѽ«ó.  ÅÑαóá∩
  308.      τáßΓ∞  ¿ß»«½∞ºπÑΓß∩  ñ½∩  ¿¡¿µ¿á½¿ºáµ¿¿  TSR-»α«úαá¼¼δ ¿ ó«ºóαáΓá
  309.      π»αáó½Ñ¡¿∩ DOS »πΓѼ  ¿ß»«½∞º«óá¡¿∩  αÑÑ¡ΓÑαáíѽ∞¡«ú«  ß¿ßΓѼ¡«ú«
  310.      ó맮óá.  ¥Γá  τáßΓ∞  ¡Ñ óδ»«½¡∩ÑΓß∩ ñ« ΓÑσ »«α, »«¬á ¡Ñ ó«º¡¿¬áÑΓ
  311.      ¡Ñ«íσ«ñ¿¼«ßΓ∞ ó »ÑαѺáúαπº¬Ñ  »α«úαá¼¼δ.  Åα¿  φΓ«¼  »α«¿ºó«ñ¿Γß∩
  312.      ºá»¿ß∞  áñαÑßá  Γ«τ¬¿ óσ«ñá TSR-»α«úαá¼¼δ ó ß««ΓóÑΓßΓóπεΘÑÑ ¼ÑßΓ«
  313.      Γáí½¿µδ óÑ¬Γ«α«ó.
  314.  
  315.           éΓ«αá∩,   »α¿¬½áñ¡á∩    τáßΓ∞,   ºá¡¿¼áÑΓß∩    Σ«α¼¿α«ó᡿Ѽ
  316.      ¿º«íαáªÑ¡¿⌐.   Åα¿   φΓ«¼   »«τΓ¿  óßÑúñá  ¿ß»«½∞ºπεΓß∩  «¬¡á,  á
  317.      ß½Ññ«óáΓѽ∞¡«,¿ »α«úαá¼¼δ π»αáó½Ñ¡¿∩ «¬¡á¼¿. Åα¿ φΓ«¼ ¿º«íαáªÑ¡¿Ñ
  318.      ¡á  φ¬αá¡Ñ  ó«ßßΓá¡áó½¿óáÑΓß∩  »«ß½Ñ ºáóÑαΦÑ¡¿∩ αáí«Γδ »α¿¬½áñ¡«⌐
  319.      τáßΓ¿ »α«úαá¼¼δ. æ½ÑñπÑΓ »«¼¡¿Γ∞, τΓ« π í«½∞Φ¿¡ßΓóá  TSR-»α«úαá¼¼
  320.      »α¿¬½áñ¡δÑ   τáßΓ¿   »αÑñßΓáó½∩εΓ   ß«í«⌐   πΓ¿½¿Γδ  Σ«α¼¿α¿óá¡¿∩
  321.      ¿º«íαáªÑ¡¿∩,  ¬á¬  π  »α«úαá¼¼δ  Γ¿»á   "ºá»¿ß¡«⌐   ¬¡¿ª¬¿"   ¿½¿
  322.      "¬á½∞¬π½∩Γ«αá".   Å«ß½Ñ  ßó«Ñú«  ºáóÑαΦÑ¡¿∩  «¡¿  ó«ßßΓá¡áó½¿óáεΓ
  323.      ¿º«íαáªÑ¡¿Ñ ¡á φ¬αá¡Ñ  ó  Γ«¼  ªÑ  ó¿ñÑ,  ¬á¬¿¼  «¡«  í佫  »ÑαÑñ
  324.      ºá»π߬«¼ φΓ¿σ »α«úαá¼¼.
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  361. â½áóá III                                                       -- 7 --
  362.  
  363.  
  364.                êß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩ »ÑτáΓ¿ φ¬αá¡á.
  365.      -----------------------------------------------------------------
  366.  
  367.           üѺ ß«¼¡Ñ¡¿⌐, »αÑαδó᡿Ѽ, ¬«Γ«α«Ñ ¡á¿í«½ÑÑ »α«ßΓ« "π¬αáßΓ∞"
  368.      π DOS, ∩ó½∩ÑΓß∩ »αÑαδóá¡¿Ñ ¡«¼Ñα 5. ¥Γ« »αÑαδóá¡¿Ñ óδºδóáÑΓß∩ »α¿
  369.      ¡áªáΓ¿¿  ¬½áó¿Φ¿  PT  SCR.  àß½¿  óδ ú«Γ«óδ »«ªÑαΓó«óáΓ∞ Σπ¡¬µ¿Ñ⌐
  370.      »ÑτáΓ¿ φ¬αá¡á, Γ« ¼«ªÑΓÑ ºá¼Ñ¡¿Γ∞ áñαÑß φΓ«⌐ »α«úαá¼¼δ ó  Γáí½¿µÑ
  371.      óÑ¬Γ«α«ó  áñαÑß«¼  óáΦÑ⌐ TSR-»α«úαá¼¼δ. Æá¬¿¼ «íαẫ¼, »α¿ ¬áªñ«¼
  372.      ¡áªáΓ¿¿ ¬½áó¿Φ¿ PT SCR íπñÑΓ óδºδóáΓ∞ß∩ óáΦá TSR-»α«úαá¼¼á.
  373.  
  374.           Åα¿¼Ñα«¼  Γᬫ⌐  »α«úαá¼¼δ ∩ó½∩ÑΓß∩ αѺ¿ñÑ¡Γ¡δ⌐ ¬á½∞¬π½∩Γ«α.
  375.      Åα«úαá¼¼δ ñ½∩ αáí«Γδ ß «¬¡á¼¿ ¿ »α«úαἼᠬá½∞¬π½∩Γ«αá ¿º αáºñѽá
  376.      2 »α¿ó«ñ∩Γß∩ ºñÑß∞ ß ¡Ñ¬«Γ«α묨 ¡Ñí«½∞Φ¿¼¿ ¿º¼Ñ¡Ñ¡¿∩¼¿.
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  421. â½áóá III                                                       -- 8 --
  422.  
  423.  
  424.                Éáºñѽ ¿¡¿µ¿á½¿ºáµ¿¿
  425.      -----------------------------------------------------------------
  426.  
  427.           Éáºñѽ  ¿¡¿µ¿á½¿ºáµ¿¿  »α«úαá¼¼δ  αѺ¿ñÑ¡Γ¡«ú«  ¬á½∞¬π½∩Γ«αá
  428.      «τÑ¡∞ ¡Ñí«½∞Φ«⌐ ¿  µÑ½¿¬«¼  »«¼ÑΘáÑΓß∩  ó  ¡¿ªÑß½ÑñπεΘÑ⌐  Σπ¡¬µ¿¿
  429.      main().
  430.  
  431.      void interrupt tsr_ap(); /* óσ«ñ ó »α¿¬½áñ¡πε »α«úαá¼¼π */
  432.      main()
  433.      {
  434.        struct address {
  435.          char far *p;
  436.        } ;
  437.        /* áñαÑß »αÑαδóá¡¿∩ »ÑτáΓ¿ φ¬αá¡á */
  438.        struct address far *addr = (struct address far *) 20;
  439.        addr->p = (char far *) tsr_ap;
  440.        set_vid_mem();
  441.        tsr(2000);
  442.      }
  443.  
  444.           TSR-»α«úαἼᠻÑαóδ¼  ñѽ«¼  ñ«½ª¡á ºá¼Ñ¡¿Γ∞ áñαÑß »α«úαá¼¼δ
  445.      «íαáí«Γ¬¿ »αÑαδóá¡¿∩ 5 π¬áºáΓѽѼ Σπ¡¬µ¿¿,  «»αÑñѽѡ¡«⌐ ó  ßἫ⌐
  446.      TSR-»α«úαá¼¼Ñ. àßΓ∞ ¡Ñ߬«½∞¬« ß»«ß«í«ó ¿º¼Ñ¡Ñ¡¿∩ áñαÑßá ó Γáí½¿µÑ
  447.      óÑ¬Γ«α¡δσ »αÑαδóá¡¿⌐.  Äñ¿¡ ¿º ß»«ß«í«ó ß«ßΓ«¿Γ  ó  ¿ß»«½∞º«óá¡¿¿
  448.      ß¿ßΓѼ¡«ú«  ó맮óá  DOS.  Äñ¡á¬« ¡Ñπñ«íßΓó« ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿¿
  449.      DOS ºá¬½ετáÑΓß∩ ó Γ«¼, τΓ« «¡á ΓαÑíπÑΓ ºáñá¡¿∩ º¡áτÑ¡¿∩ áñαÑß¡«ú«
  450.      ßÑú¼Ñ¡Γá  ó  αÑú¿ßΓαÑ  àS,  ¬«Γ«αδ⌐  ¡Ññ«ßΓπ»Ñ¡ »α¿ ¿ß»«½∞º«óá¡¿¿
  451.      Σπ¡¬µ¿¿ int86().  ìѬ«Γ«αδÑ ¬«¼»¿½∩Γ«αδ,  ¬á¬ ¡á»α¿¼Ñα Æπαí«  æ¿,
  452.      ó¬½ετáεΓ   ß»Ñµ¿á½∞¡δÑ  Σπ¡¬µ¿¿,  »αÑñ¡áº¡áτÑ¡¡δÑ  ñ½∩  πßΓá¡«ó¬¿
  453.      áñαÑßá ó Γáí½¿µÑ »αÑαδóá¡¿⌐.  Äñ¡á¬« ß»«ß«í,  »αÑñ½áúáѼδ⌐ ºñÑß∞,
  454.      íπñÑΓ  αáí«ΓáΓ∞ »α¿ ¿ß»«½∞º«óá¡¿¿ »αá¬Γ¿τÑ߬¿ ½εí«ú« ¬«¼»¿½∩Γ«αá.
  455.      öπ¡¬µ¿∩  tsr_ap()  ∩ó½∩ÑΓß∩  Γ«τ¬«⌐  óσ«ñá  ó  »α¿¬½áñ¡πε   τáßΓ∞
  456.      TSR-»α«úαá¼¼δ.  Ä¡á  ¿ß»«½∞ºπÑΓ  π¬áºáΓѽ∞  ¡á ß«ñÑন¼«Ñ Γáí½¿µδ
  457.      óÑ¬Γ«α«ó, ß««ΓóÑΓßΓóπεΘÑÑ »αÑαδóá¡¿ε 5. (ìừ¼¿¡áѼ, τΓ« óÑ¬Γ«α 5
  458.      αáß»«½«ªÑ¡  »« áñαÑßπ 20(4σ5) ó Γáí½¿µÑ,  »«ß¬«½∞¬π ¬áªñδ⌐ óÑ¬Γ«α
  459.      ¿¼ÑÑΓ αẼÑα 4  íá⌐Γá.  ìѬ«Γ«αδÑ  TSR-»α«úαá¼¼δ  ó«ßßΓá¡áó½¿óáεΓ
  460.      ¿ßσ«ñ¡«Ñ  º¡áτÑ¡¿Ñ áñαÑßá.  ì« »α¿ ¿ß»«½∞º«óá¡¿¿ »α¿ó«ñ¿¼δσ ºñÑß∞
  461.      »α«úαá¼¼  óδ   ñ«½ª¡δ   íπñÑΓÑ   »ÑαѺáúαπªáΓ∞   ß¿ßΓѼπ,   τΓ«íδ
  462.      ó«ßßΓá¡«ó¿Γ∞ ¿ßσ«ñ¡δÑ º¡áτÑ¡¿∩ óÑ¬Γ«α«ó »αÑαδóá¡¿⌐.
  463.  
  464.           é »αÑñδñπΘ¿σ  αáºñѽáσ,  »α«óÑα¬á αѪ¿¼á αáí«Γδ ó¿ñѫ߿ßΓѼδ
  465.      »α«¿ºó«ñ¿½áß∞  ñ¿¡á¼¿τÑ߬¿  ΓѼ¿  »α«úαἼἿ,  ¬«Γ«αδÑ   ß   ¡Ñ⌐
  466.      αáí«Γ὿.  Äñ¡á¬«  ó  ñá¡¡«¼  ß½πτáÑ  φΓ« ¡Ñ»α¿¼Ñ¡¿¼«,  »«ß¬«½∞¬π
  467.      ΓαÑíπÑΓ  ¿ß»«½∞º«óá¡¿∩  ß¿ßΓѼ¡δσ  ó맮ó«ó  DOS.   é¼ÑßΓ«   φΓ«ú«
  468.      º¡áτÑ¡¿Ñ  ú½«íá½∞¡«ú« π¬áºáΓѽ∩ vid_mem πßΓá¡áó½¿óáÑΓß∩ ß »«¼«Θ∞ε
  469.      Σπ¡¬µ¿¿ set_vid_mem, »α¿ó«ñ¿¼«⌐ ¡¿ªÑ.
  470.  
  471.      set_vid_mem()
  472.      {
  473.        int vmode;
  474.        vmode = video_mode();
  475.        if((vmode!=2) && (vmode!=3) && (vmode!=7)) {
  476.          printf("video must be in 80 column text mode");
  477.          exit (1);
  478.  
  479.  
  480.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  481. â½áóá III                                                       -- 9 --
  482.  
  483.  
  484.        }
  485.        /* πßΓá¡«ó¿Γ∞ ß««ΓóÑΓßΓóπεΘ¿⌐ áñαÑß ó¿ñÑ«»á¼∩Γ¿ */
  486.        if(vmode==7) vid_mem = (char far *) 0xB0000000;
  487.        else vid_mem = (char far *) 0xB8000000;
  488.      }
  489.  
  490.           ìᬫ¡Ñµ, óδσ«ñ   ¿º   Σπ¡¬µ¿¿  main()  ocyΘÑßΓó½∩ÑΓß∩  »πΓѼ
  491.      «íαáΘÑ¡¿∩ ¬ Σπ¡¬µ¿¿ tsr(), »α¿óÑñÑ¡¡«⌐ ¡¿ªÑ.
  492.  
  493.      /* ºáóÑαΦ¿Γ∞ óδ»«½¡Ñ¡¿Ñ, ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
  494.      tsr(size)
  495.      unsigned size;
  496.      {
  497.        union REGS r;
  498.        r.h.ah = 49; /* ºáóÑαΦ¿Γ∞ ¿ «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
  499.        r.h.al = 0;  /* ¬«ñ ó«ºóαáΓá */
  500.        r.x.dx = size;
  501.        int86(0x21, &r, &r);
  502.      }
  503.  
  504.           Åáαá¼ÑΓα  size, «»αÑñѽ∩Ѽδ⌐ ó αÑú¿ßΓαÑ DX, ¿ß»«½∞ºπÑΓß∩ ñ½∩
  505.      Γ«ú«, τΓ«íδ ß««íΘ¿Γ∞ DOS, ß¬«½∞¬« »á¼∩Γ¿ ΓαÑíπÑΓß∩ ñ½∩ αẼÑΘÑ¡¿∩
  506.      ÆSR-»α«úαá¼¼δ.    ÉẼÑα   »á¼∩Γ¿   «»αÑñѽ∩ÑΓß∩   ó   16-íá⌐Γ¡δσ
  507.      »áαáúαáΣáσ.  ê¡«úñá  íδóáÑΓ  Γαπñ¡«  «»αÑñѽ¿Γ∞,  ß¬«½∞¬«  »á¼∩Γ¿
  508.      ¡Ñ«íσ«ñ¿¼«  ñ½∩  αẼÑΘÑ¡¿∩  »α«úαá¼¼δ.  ê  Ñß½¿ ó φΓ«¼ ß½πτáÑ óδ
  509.      αáºñѽ¿ΓÑ αẼÑα ºáúαπº«τ¡«ú« ¼«ñπ½∩  óáΦÑ⌐  »α«úαá¼¼δ  (Σá⌐½á  ß
  510.      αáßΦ¿αÑ¡¿Ñ¼ .EXE) ¡á 16,  á »«½πτÑ¡¡πε óѽ¿τ¿¡π π¼¡«ª¿ΓÑ ¡á 2, Γ«
  511.      íπñÑΓÑ  ºáßΓαáσ«óá¡δ   «Γ   «Φ¿í¬¿.   Æ«τ¡«   «»αÑñѽ¿Γ∞   αẼÑα
  512.      ¡Ñ«íσ«ñ¿¼«⌐ »á¼∩Γ¿ Γαπñ¡«,  »«ß¬«½∞¬π ºáúαπº«τ¡δÑ ¼«ñπ½¿ τáßΓ¿τ¡«
  513.      ¡á¬½áñδóáεΓß∩  ñαπú  ¡á  ñαπúá  »α¿  ºáúαπº¬Ñ   ¿   ¡Ñ«í∩ºáΓѽ∞¡«
  514.      αẼÑΘáεΓß∩   ó   ¡Ñ»αÑαδó¡«⌐   «í½áßΓ¿.  (àß½¿  óδ  ¡á¼ÑαÑóáΓÑß∞
  515.      »α«ñáóáΓ∞ ßó«¿ »α«úαá¼¼δ,  Γ« ¡áóÑα¡∩¬á σ«Γѽ¿  íδ  º¡áΓ∞  Γ«τ¡«,
  516.      ß¬«½∞¬«   »«ΓαÑíπÑΓß∩   »á¼∩Γ¿,   τΓ«íδ   ¡Ñ   «¬áºáΓ∞ß∩  ß½¿Φ¬«¼
  517.      αáßΓ«τ¿Γѽ∞¡δ¼.   ìá¿í«½ÑÑ   »α«ßΓ«    φΓ«    ¼«ª¡«    «»αÑñѽ¿Γ∞
  518.      φ¬ß»Ñα¿¼Ñ¡Γá½∞¡δ¼   »πΓѼ).   è«ñ   ó«ºóαáΓá,  πßΓá¡áó½¿óáѼδ⌐  ó
  519.      αÑú¿ßΓαÑ AL, »ÑαÑñáÑΓß∩ ß¿ßΓѼÑ.
  520.  
  521.           Å«ß½Ñ   ºáóÑαΦÑ¡¿∩   óδ»«½¡Ñ¡¿∩   Σπ¡¬µ¿¿  ¼áin()  »α«úαá¼¼á
  522.      «ßΓáÑΓß∩ ó »á¼∩Γ¿, ¿  ¡¿¬á¬á∩  ñαπúá∩  »α«úαἼᠠ¡Ñ  ¼«ªÑΓ  íδΓ∞
  523.      ºáúαπªÑ¡á ¡á ÑÑ ¼ÑßΓ«. ¥Γ« º¡áτ¿Γ, τΓ« »α¿¬½áñ¡á∩ τáßΓ∞ »α«úαá¼¼δ
  524.      ó ½εí«⌐ ¼«¼Ñ¡Γ óαѼѡ¿ ú«Γ«óá íδΓ∞ ºá»πΘÑ¡¡«⌐ ¡áªáΓ¿Ñ¼ ¬½áó¿Φ¿ PT
  525.      SCR.
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  541. â½áóá III                                                       -- 10 --
  542.  
  543.  
  544.                Åਪ½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ
  545.      -----------------------------------------------------------------
  546.  
  547.           Æ«τ¬«⌐  óσ«ñá  ó  »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ ñ«½ª¡á íδΓ∞
  548.      Σπ¡¬µ¿∩ Γ¿»á interrupt.  é  »αÑñßΓáó½Ñ¡¡«¼  ¡¿ªÑ  »α¿¼ÑαÑ  ºá»π߬
  549.      »α¿¬½áñ¡«⌐ τáßΓ¿  óδ»«½¡∩ÑΓß∩ »πΓѼ ó맮óá Σπ¡¬µ¿¿ window_main().
  550.  
  551.      /* Æ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
  552.      void interrupt tsr_ap()
  553.      {
  554.        if(!busy) {
  555.          busy = !busy;
  556.          window_main();
  557.          busy = !busy;
  558.        }
  559.      }
  560.  
  561.           â½«íá½∞¡á∩ »ÑαѼѡ¡á∩  busy  »Ñαó«¡áτá½∞¡« πßΓá¡áó½¿óáÑΓß∩ ó
  562.      0.  Åਪ½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ ¡Ñ ∩ó½∩ÑΓß∩ »«óΓ«α¡« óσ«ñ¿¼«⌐,
  563.      ß½Ññ«óáΓѽ∞¡«,  «¡á  ¡Ñ ñ«½ª¡á ºá»π߬áΓ∞ß∩ ñóáªñδ ºá óαѼ∩ «ñ¡«ú«
  564.      ¿ß»«½∞º«óá¡¿∩.  ÅÑαѼѡ¡á∩ busy ¿ß»«½∞ºπÑΓß∩ ¬á¬  αẠ ñ½∩  Γ«ú«,
  565.      τΓ«íδ   »αÑñ«ΓóαáΓ¿Γ∞   φΓ«.   (ìѬ«Γ«αδÑ  ¬«¼»¿½∩Γ«αδ  æ¿  ¼«úπΓ
  566.      ß«ºñáóáΓ∞ αÑÑ¡ΓÑαáíѽ∞¡δÑ »α«úαá¼¼δ,  ¡« íѺ«»áß¡ÑÑ  ñ½∩  óáß  ¡Ñ
  567.      «íßπªñáΓ∞ ºñÑß∞ φΓ«ú« ó«»α«ßá).
  568.  
  569.           é »α«úαá¼¼δ  π»αáó½Ñ¡¿∩  «¬¡á¼¿  ¡Ñ«íσ«ñ¿¼« ó¡ÑßΓ¿ ¡Ñ¬«Γ«αδÑ
  570.      ¿º¼Ñ¡Ñ¡¿∩  ñ½∩  Γ«ú«,  τΓ«íδ  ¿σ  ¼«ª¡«   í佫   ¿ß»«½∞º«óáΓ∞   ó
  571.      TSR-»α«úαá¼¼áσ.  é«-»Ñαóδσ,  ¡Ñ«íσ«ñ¿¼«  ßΓáΓ¿τÑ߬¿  αáß»αÑñѽ∩Γ∞
  572.      »á¼∩Γ∞,  ¡Ñ«íσ«ñ¿¼πε ñ½∩ σαá¡Ñ¡¿∩  ΓѬπΘÑú«  ß«ñÑন¼«ú«  φ¬αá¡á,
  573.      »πΓѼ  ¿ß»«½∞º«óá¡¿∩  ú½«íá½∞¡«ú« ¼áßß¿óá.  éδ ¼«ú½¿ »α¿ó몭πΓ∞ ¬
  574.      Γ«¼π, τΓ« φΓá »á¼∩Γ∞ αáß»αÑñѽ∩½áß∞ ñ¿¡á¼¿τÑ߬¿, ¡« ñá¡¡δ⌐ ß»«ß«í
  575.      ºñÑß∞  ¡Ñ»α¿ú«ñÑ¡,  óß½ÑñßΓó¿Ñ  Γ«ú«,  τΓ«  Σπ¡¬µ¿¿ ñ¿¡á¼¿τÑ߬«ú«
  576.      αáß»αÑñѽѡ¿∩ ¿ß»«½∞ºπεΓ ß¿ßΓѼ¡δ⌐ ó맮ó,  ¬«Γ«αδ⌐  ¡Ññ«»πßΓ¿¼  ó
  577.      TSR-»α«úαá¼¼áσ.  Å«  φΓ«⌐  ªÑ »α¿τ¿¡Ñ Σπ¡¬µ¿∩ go_to_xy() ¡Ñ ¼«ªÑΓ
  578.      íδΓ∞  ¿ß»«½∞º«óá¡á   ñ½∩   »«º¿µ¿«¡¿α«óá¡¿∩   ¬παß«αá.   ìᬫ¡Ñµ,
  579.      ßΓá¡ñáαΓ¡δÑ  æ¿-Σπ¡¬µ¿¿  sscanf() ¿ sprintf() ΓᬪѠ¡Ñ ¼«úπΓ íδΓ∞
  580.      ¿ß»«½∞º«óá¡δ (»« ¬αá⌐¡Ñ⌐ ¼ÑαÑ,  ó Æπαí«  æ¿),  »«Γ«¼π  τΓ«  ΓᬪÑ
  581.      «ßπΘÑßΓó½∩εΓ  «íαáΘÑ¡¿∩  ¬  DOS.  é¼ÑßΓ« ¡¿σ ¿ß»«½∞ºπεΓß∩ Σπ¡¬µ¿¿
  582.      áΓ«i() ¿ itoa(). Å«½¡δ⌐ ΓѬßΓ »α«úαá¼¼δ αѺ¿ñÑ¡Γ¡«ú« ¬á½∞¬π½∩Γ«αá
  583.      »αÑñßΓáó½Ñ¡ ¡¿ªÑ.
  584.  
  585.      /* TSR-»α«úαá¼¼á, ¿ß»«½∞ºπεΘá∩ »αÑαδóá¡¿Ñ »ÑτáΓ¿ φ¬αá¡á */
  586.      #include "dos.h"
  587.      #include "stdlib.h"
  588.  
  589.      #define BORDER 1
  590.      #define ESC 27
  591.      #define MAX_FRAME 1
  592.      #define REV_VID 0x70
  593.      #define NORM_VID 7
  594.      #define BKSP 8
  595.      void interrupt tsr_ap();
  596.      void save_video(), restore_video();
  597.      void write_string(), write_char();
  598.  
  599.  
  600.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  601. â½áóá III                                                       -- 11 --
  602.  
  603.  
  604.      void display_header(), draw_border();
  605.      void window_gets();
  606.      void window_cleol(), window();
  607.      void calc();
  608.      char far *vid_mem;
  609.      struct window_frame {
  610.        int startx, endx, starty, endy;
  611.        int curx, cury; /* ΓѬπΘÑÑ »«½«ªÑ¡¿Ñ ¬παß«αá ó «¬¡Ñ */
  612.        unsigned char *p; /* π¬áºáΓѽ∞ íπΣÑαá */
  613.        char *header;    /* ß««íΘÑ¡¿Ñ ó óÑασ¡Ñ⌐ τáßΓ¿ «¬¡á */
  614.        int border; /* ó¬½ετÑ¡¿Ñ/«Γ¬½ετÑ¡¿Ñ í«αñεαá */
  615.        int active; /* á¬Γ¿óᵿ∩/ñÑá¬Γ¿óᵿ∩ «¬¡á */
  616.      } frame[MAX_FRAME];
  617.      char wp[4000]; /* íπΣÑα ñ½∩ σαá¡Ñ¡¿∩ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á
  618.  
  619.      /* busy πßΓá¡«ó½Ñ¡á ó 1, Ñß½¿ »α«úαá¼¼á á¬Γ¿ó¡á, ¿¡áτÑ - ó 0 */
  620.      char busy = 0;
  621.  
  622.      main()
  623.      {
  624.        struct address {
  625.          char far *p;
  626.        } ;
  627.        /* áñαÑß »αÑαδóá¡¿∩ »ÑτáΓ¿ φ¬αá¡á */
  628.        struct address far *addr = (struct address far *) 20;
  629.        addr->p = (char far *) tsr_ap;
  630.        set_vid_mem();
  631.        tsr(2000);
  632.      }
  633.  
  634.      set_vid_mem()
  635.      {
  636.        int vmode;
  637.        vmode = video_mode();
  638.        if((vmode!=2) && (vmode!=3) && (vmode!=7)) {
  639.          printf("video must be in &0 column text mode");
  640.          exit(1);
  641.          }
  642.          /* πßΓá¡«ó¿Γ∞ ß««ΓóÑΓßóπεΘ¿⌐ áñαÑß ó¿ñÑ«»á¼∩Γ¿ */
  643.          if(vmode==7) vid_mem = (char far *) 0xB0000000;
  644.          else vid_mem = (char far *) 0xB8000000;
  645.      }
  646.  
  647.      /* Γ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
  648.      void interrupt tsr_ap()
  649.      {
  650.  
  651.  
  652.          if(!busy) {
  653.            busy = !busy;
  654.            window_main();
  655.            busy = !busy;
  656.          }
  657.       }
  658.  
  659.  
  660.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  661. â½áóá III                                                       -- 12 --
  662.  
  663.  
  664.  
  665.       /* ºáóÑαΦ¿Γ∞, ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
  666.       tsr(size)
  667.       unsigned size;
  668.       {
  669.         union REGS r;
  670.         r.h.ah = 49;   /* ºáóÑαΦ¿Γ∞, ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
  671.         r.h.al = 0;    /* ¬«ñ ó«ºóαáΓá */
  672.         r.x.ax = size;
  673.         int86(0x21, &r, &r);
  674.       }
  675.  
  676.         window_main()
  677.       {
  678.          /* »Ñαóδ¼ ñѽ«¼, ß«ºñáΓ∞ ßΓαπ¬Γπα𠫬¡á */
  679.          make_window(0, " Calculator ", 8, 20, 12, 60, BORDER);
  680.          /* ñ½∩ á¬Γ¿óᵿ¿ «»¿ßá¡¡«ú« «¬¡á ¿ß»«½∞ºπ⌐ΓÑ window() */
  681.          calc();
  682.       }
  683.  
  684.      /*************************************************************/
  685.      /* öπ¡¬µ¿¿ π»αáó½Ñ¡¿∩ «¬¡á¼¿                                 */
  686.      /*************************************************************/
  687.  
  688.       /* éδóÑßΓ¿ ¡á φ¬αá¡ ß»π߬áεΘÑÑß∩ ¼Ñ¡ε */
  689.       void window(num)
  690.       int num; /* ¡«¼Ñα «¬¡á */
  691.       {
  692.  
  693.         int vmode, choice;
  694.         int x, y;
  695.  
  696.         /* ßñѽáΓ∞ «¬¡« á¬Γ¿ó¡δ¼ */
  697.         if(!frame[num].active)  { /* ¿ß»«½∞ºπÑΓß∩ ¡Ñ »«ßΓ«∩¡¡« */
  698.           save_video(num);        /* ß«σαá¡¿Γ∞ ΓѬπΘ¿⌐ φ¬αá¡ */
  699.           frame[num].active = 1;  /* πßΓá¡«ó¿Γ∞ Σ½áú á¬Γ¿ó¡«ßΓ¿ */
  700.         }
  701.  
  702.         if(frame[num].border) draw_border(num);
  703.         display_header(num); /* óδóÑßΓ¿ «¬¡« */
  704.       }
  705.  
  706.       /* æ«ºñáΓ∞ ß»π߬áεΘÑÑß∩ «¬¡«
  707.          Ñß½¿ «¬¡« ¼«ªÑΓ íδΓ∞ ß«ºñá¡«, ó«ºóαáΘáÑΓß∩ 1;
  708.          ¿¡áτÑ ó«ºóαáΘáÑΓß∩ 0.
  709.       */
  710.       make_window(num, header, startx, starty, endx, endy, border)
  711.       int num; /* ¡«¼Ñα «¬¡á */
  712.       char *header;  /* ΓѬßΓ ºáú«½«ó¬á */
  713.  
  714.        int startx, starty; /* ¬««αñ¿¡áΓδ X,Y ½Ñó«ú« óÑασ¡Ñú« πú½á */
  715.        int endx, endy; /* ¬««αñ¿¡áΓδ X,Y »αáó«ú« ¡¿ª¡Ñú« πú½á */
  716.        int border;  /* íѺ í«αñεαá Ñß½¿ 0 */
  717.        {
  718.  
  719.  
  720.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  721. â½áóá III                                                       -- 13 --
  722.  
  723.  
  724.          register int i;
  725.          int choice, vmode;
  726.          unsigned char *p;
  727.  
  728.          if(num>MAX_FRAME)   {
  729.            window_puts(0, "Too many windows\n");
  730.            return 0;
  731.       }
  732.  
  733.       if((startx>24) || (starty>78) || (starty<0))  {
  734.         window_puts(0, "range error");
  735.         return  0;
  736.       }
  737.  
  738.       if((endx>24) || (endy>79))  {
  739.         window_puts(0, "window won't fit");
  740.         return 0;
  741.       }
  742.  
  743.       /* ß«ºñáΓ∞ ßΓαπ¬Γπα𠫬¡á */
  744.       frame[num].startx = startx; frame[num].endx = endx;
  745.       frame[num].starty = starty; frame[num].endy = endy;
  746.       frame[num].p = wp;
  747.       frame[num].header = header;
  748.       frame[num].border = border;
  749.       frame[num].active = 0;
  750.       frame[num].curx = 0; frame[num].cury = 0;
  751.       return 1;
  752.       }
  753.  
  754.       /* äÑá¬Γ¿ó¿α«óáΓ∞ «¬¡« ¿ πñ὿Γ∞ Ñú« ß φ¬αá¡á */
  755.       deactivate(num)
  756.       int num;
  757.       {
  758.         /* πßΓá¡«ó¿Γ∞ ¬παß«α ó ½Ñóδ⌐ óÑασ¡¿⌐ πú«½ */
  759.         frame[num].curx = 0;
  760.         frame[num].cury = 0;
  761.         restore_video(num);
  762.       }
  763.  
  764.       /* éδóÑßΓ¿ ºáú«½«ó«¬ «¬¡á ó ß««ΓóÑΓßóπεΘÑÑ »«½Ñ */
  765.       void display_header(num)
  766.       int num;
  767.       {
  768.         register int i, y, len;
  769.  
  770.         y = frame[num].starty;
  771.  
  772.         /* éδτ¿ß½¿Γ∞ Γ«τ¡«Ñ º¡áτÑ¡¿Ñ µÑ¡Γαá½∞¡«⌐ »«º¿µ¿¿ ºáú«½«ó¬á
  773.            Ñß½¿ «Γα¿µáΓѽ∞¡«Ñ - ºáú«½«ó«¬ ¡Ñ ¼«ªÑΓ íδΓ∞ óδóÑñÑ¡
  774.         */
  775.          len = strlen(frame[num].header);
  776.  
  777.          len = (frame[num].endy - y - len) / 2;
  778.  
  779.  
  780.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  781. â½áóá III                                                       -- 14 --
  782.  
  783.  
  784.          if(len<0) return; /* don't display it */
  785.          y = y +len;
  786.  
  787.          write_string(frame[num].startx, y,
  788.         frame[num].header, NORM_VID);
  789.       }
  790.  
  791.       void draw_border(num)
  792.       int num;
  793.       {
  794.         register int i;
  795.         char far *v, far *t;
  796.  
  797.         v = vid_mem;
  798.         t = v;
  799.         for(i=frame[num].startx+1; i<frame[num].endx; i++) {
  800.            v += (i*160) + frame[num].starty*2;
  801.            *v++ = 179;
  802.            *v = NORM_VID;
  803.            v = t;
  804.            v += (i*160) + frame[num].endy*2;
  805.            *v++ = 179;
  806.            *v = NORM_VID;
  807.            v = t;
  808.       }
  809.       for(i=frame[num].starty+1; i<frame[num].endy; i++) {
  810.          v += (frame[num].startx*160) + i*2;
  811.          *v++ = 196;
  812.          *v = NORM_VID;
  813.          v = t;
  814.          v += (frame[num].endx*160) + i*2;
  815.          *v++ = 190;
  816.          *v = NORM_VID;
  817.          v = t;
  818.       }
  819.       write_char(frame[num].startx, frame[num].starty, 218, NORM_VID);
  820.       write_char(frame[num].startx, frame[num].endy, 191, NORM_VID);
  821.       write_char(frame[num].endx, frame[num].starty, 192, NORM_VID);
  822.       write_char(frame[num].endx, frame[num].endy, 217, NORM_VID);
  823.       }
  824.  
  825.       /**************************************************************/
  826.       /*  Ä¬«¡¡δÑ Σπ¡¬µ¿¿ óó«ñá/óδó«ñá                              */
  827.       /**************************************************************/
  828.  
  829.       /* éδóÑßΓ¿ ßΓ᫬π ¡áτ¿¡á∩ ß ΓѬπΘÑ⌐ »«º¿µ¿¿ ¬παß«αá
  830.          «»¿ßá¡¡«ú« «¬¡á.
  831.          é«ºóαáΓ¿Γ∞ 0 Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ;
  832.          ¿ 1 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  833.       */
  834.       window_puts(num, str)
  835.       int num;
  836.       char *str;
  837.       {
  838.  
  839.  
  840.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  841. â½áóá III                                                       -- 15 --
  842.  
  843.  
  844.           /* πíÑñ¿Γ∞ß∩, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
  845.          if(!frame[num].active) return 0;
  846.  
  847.      for( ; *str; str++)
  848.        window_putchar(num, *str);
  849.      return 1;
  850.           }
  851.  
  852.           /* éδóÑßΓ¿ ß¿¼ó«½ ó ΓѬπΘπε »«º¿µ¿ε ¬παß«αá
  853.              «»¿ßá¡¡«ú« «¬¡á.
  854.              é«ºóαáΓ¿Γ∞ 0 Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ,
  855.              ¿ 1 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  856.           */
  857.           window_putchar(num, ch)
  858.           int num;
  859.           char ch;
  860.           {
  861.             register int x, y;
  862.             char far *v;
  863.  
  864.             /* πíÑñ¿Γ∞ß∩, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
  865.             if(!frame[num].active) return 0;
  866.  
  867.             x = frame[num].curx + frame[num].startx + 1;
  868.             y = frame[num].cury + frame[num].starty + 1;
  869.  
  870.             v = vid_mem;
  871.             v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
  872.             if(y>=frame[num].endy) {
  873.       return 1;
  874.            }
  875.            if(x>=frame[num].endx) {
  876.       return 1;
  877.           }
  878.           if(ch=='\n') { /* ß¿¼ó«½ »ÑαÑσ«ñá ¡á ¡«óπε ßΓ᫬π */
  879.           x++;
  880.           y = frame[num].startx+1;
  881.           v = vid_mem;
  882.           v += (x+160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
  883.           frame[num].curx++;  /* ¿¡¬αÑ¼Ñ¡Γ¿α«óáΓ∞ X */
  884.           frame[num].cury = 0; /* ßíα«ß¿Γ∞ Y */
  885.         }
  886.         else {
  887.           frame[num].cury++;
  888.           *v++ = ch;  /* óδóÑßΓ¿ ß¿¼ó«½ */
  889.           *v++ = NORM_VID; /* ¡«α¼á½∞¡δÑ áΓα¿íπΓδ ß¿¼ó«½á */
  890.         }
  891.         window_xy(num, frame[num].curx, frame[num].cury);
  892.         return 1;
  893.        }
  894.  
  895.        /* ôßΓá¡«ó¬á ¬παß«αá ó ºáñá¡¡πε »«º¿µ¿ε «¬¡á.
  896.           é«ºóαáΘáÑΓ 0 »α¿ óδσ«ñÑ ºá úαá¡¿µπ;
  897.           ¡Ñ ¡«½∞ ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  898.  
  899.  
  900.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  901. â½áóá III                                                       -- 16 --
  902.  
  903.  
  904.        */
  905.        window_xy(num, x, y)
  906.        int num, x, y;
  907.        {
  908.  
  909.            if(x<0 || x+frame[num].startx>=frame[num].endx-1)
  910.      return 0;
  911.            if(y<0 || y+frame[num].starty>=frame[num].endy-1)
  912.      return 0;
  913.            frame[num].curx = x;
  914.            frame[num].cury = y;
  915.            return 1;
  916.         }
  917.         /* æτ¿ΓáΓ∞ ßΓα«¬π ¿º «¬¡á. */
  918.         void window_gets(num, s)
  919.         int num;
  920.         char *s;
  921.         {
  922.           char ch, *temp;
  923.  
  924.           temp = s;
  925.           for(;;) {
  926.             ch = window_getche(num);
  927.             switch(ch) {
  928.       case '\r':  /* ¡áªáΓá ¬½áó¿Φá ENTER */
  929.         *s='\0';
  930.         return;
  931.       case BKSP: /* ó«ºóαáΓ */
  932.         if(s>temp) {
  933.           s--;
  934.           frame[num].cury--;
  935.           if(frame[num].cury<0) frame[num].cury = 0;
  936.             window_xy(num, frame[num].curx, frame[num].cury);
  937.       write_char(frame[num].startx+ frame[num].curx+1,
  938.           frame[num].starty+frame[num].cury+1, ' ', NORM_VID);
  939.         }
  940.         break;
  941.       default:  *s = ch;
  942.        s++;
  943.             }
  944.           }
  945.         }
  946.  
  947.         /* éó«ñ ß¿¼ó«½á ß ¬½áó¿áΓπαδ ó «¬¡«.
  948.            é«ºóαáΘáÑΓ »«½¡δ⌐ 16-αáºα∩ñ¡δ⌐ ß¬á¡-¬«ñ.
  949.         /*
  950.         window_getche(num)
  951.         int num;
  952.         {
  953.           union inkey {
  954.             char ch[2];
  955.             int i;
  956.           } c;
  957.  
  958.  
  959.  
  960.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  961. â½áóá III                                                       -- 17 --
  962.  
  963.  
  964.           if(!frame[num].active) return 0; /* window not active */
  965.           window_xy(num, frame[num].curx, frame[num].cury);
  966.           c.i = bioskey(0);    /* «íαáí«ΓáΓ∞ ¡áªáΓ¿Ñ ¬½áó¿Φ¿ */
  967.  
  968.        if(c.ch[0]) {
  969.         switch(c.ch[0]) {
  970.            case '\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
  971.      break;
  972.            case BKSP: /* ó«ºóαáΓ */
  973.              break;
  974.            default:
  975.      if(frame[num].cury+frame[num].starty < frame[num].endy-1) {
  976.      write char(frame[num].startx+ frame[num].curx+1,
  977.        frame[num].curx--;
  978.      window_xy(num, frame[num].curx, frame[num].cury);
  979.            }
  980.            return c.i;
  981.         }
  982.  
  983.         /* Äτ¿ßΓ¿Γ∞ ñ« ¬«¡µá ßΓ᫬¿ */
  984.         void window_cleol(num)
  985.         int num;
  986.         {
  987.           register int i, x, y;
  988.           x = frame[num].curx;
  989.           y = frame[num].cury;
  990.           window_xy(num, frame[num].curx, frame[num].cury);
  991.  
  992.           for(i=frame[num].cury; i<frame[num].endy-1; i++)
  993.             window_putchar(num,' ');
  994.  
  995.           window_xy(num, x, y);
  996.        }
  997.  
  998.        /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α ¡á «ñ¡π ßΓ᫬π óóÑασ.
  999.           Åα¿ πß»ÑΦ¡«¼ ºáóÑαΦÑ¡¿¿ óÑα¡πΓ∞ ¡Ñ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ;
  1000.           ó »α«Γ¿ó¡«¼ ß½πτáÑ - 0.
  1001.        */
  1002.        window_upline(num)
  1003.        int num;
  1004.        {
  1005.          if(frame[num].curx>0) {
  1006.            frame[num].curx--;
  1007.            window_xy(num, frame[num].curx, frame[num].cury);
  1008.            return 1;
  1009.         }
  1010.         return 0;
  1011.       }
  1012.  
  1013.       /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α ¡á «ñ¡π ßΓ᫬π ó¡¿º.
  1014.          Åα¿ πß»ÑΦ¡«¼ ºáóÑαΦÑ¡¿¿ óÑα¡πΓ∞ ¡Ñ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ;
  1015.          ó »α«Γ¿ó¡«¼ ß½πτáÑ - 0.
  1016.       */
  1017.       window_downline(num)
  1018.  
  1019.  
  1020.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1021. â½áóá III                                                       -- 18 --
  1022.  
  1023.  
  1024.  
  1025.      int num;
  1026.      {
  1027.        if(frame[num].curx<frame[num].endx-frame[num].startx-1} {
  1028.          frame[num].curx++;
  1029.          window_xy(num, frame[num].curx, frame[num].cury);
  1030.          return 1;
  1031.        }
  1032.        return 1;
  1033.      }
  1034.  
  1035.      /* óÑα¡πΓ∞ß∩ ¡á «ñ¡π »«º¿µ¿ε ¡áºáñ */
  1036.      window_bksp(num)
  1037.      int num;
  1038.      {
  1039.        if(frame[num].cury>0) {
  1040.          frame[num].cury--;
  1041.          window_xy(num, frame[num].curx, frame[num].cury);
  1042.          window_putchar(num, ' ');
  1043.          frame[num].cury--;
  1044.          window_xy(num, frame{num}.curx, frame[num].cury);
  1045.        }
  1046.      }
  1047.  
  1048.      /********************************************************/
  1049.      /* ä«»«½¡¿Γѽ∞¡δÑ Σπ¡¬µ¿¿                               */
  1050.      /********************************************************/
  1051.  
  1052.      /* éδóÑßΓ¿ ßΓ᫬π ß πßΓá¡«ó½Ñ¡¡δ¼¿ áΓα¿íπΓἿ */
  1053.      void write_string(x, y, p, attrib)
  1054.      int x, y;
  1055.      char *p;
  1056.      int attrib;
  1057.      {
  1058.        register int i;
  1059.        char far *v;
  1060.        v = vid_mem;
  1061.        v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
  1062.        for(i+y; *p; i++)  {
  1063.          *v++ = *p++;  /* óδóÑßΓ¿ ß¿¼ó«½ */
  1064.          *v++ = attrib;    /* óδóÑßΓ¿ áΓα¿íπΓδ */
  1065.        }
  1066.      }
  1067.  
  1068.      /* éδóÑßΓ¿ ß¿¼ó«½ ß πΓá¡«ó½Ñ¡¡δ¼¿ áΓα¿íπΓἿ */
  1069.      void write_char(x, y, ch, attrib)
  1070.      int x, y;
  1071.      char ch;
  1072.      int attrib;
  1073.      {
  1074.        register int i;
  1075.        char far *v;
  1076.  
  1077.        v = vid_mem;
  1078.  
  1079.  
  1080.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1081. â½áóá III                                                       -- 19 --
  1082.  
  1083.  
  1084.        v += (x*160) +y*2;
  1085.        *v++ = ch;  /* óδóÑßΓ¿ ß¿¼ó«½ */
  1086.        *v = attrib;    /* óδóÑßΓ¿ áΓα¿íπΓδ */
  1087.      }
  1088.  
  1089.      /* æ«σαá¡¿Γ∞ ß«ñÑন¼«Ñ «í½áßΓ¿ φ¬αá¡á */
  1090.      void save_video(num)
  1091.      int num;
  1092.      {
  1093.        register int i,j;
  1094.        char far *v, far *t;
  1095.        char *but_ptr;
  1096.  
  1097.        but_ptr = frame[num].p;
  1098.        v = vid_mem;
  1099.        t=v;
  1100.        for(i=frame[num].starty; i<frame[num].endy+1; i++)
  1101.          for(j=frame[num].startx; j<frame[num].endx+1; j++) {
  1102.            t = (v + (j*160) + i*2);
  1103.            *buf_ptr++ = *t++;
  1104.            *buf_ptr++ = *t;
  1105.            *(t-1) = ' ';  /* «τ¿ßΓ¿Γ∞ «¬¡« */
  1106.          }
  1107.      }
  1108.  
  1109.      /* é«ßßΓá¡«ó¿Γ∞ ß«ñÑন¼«Ñ «í½áßΓ¿ φ¬αá¡á */
  1110.      void save_video(num)
  1111.      int num;
  1112.      {
  1113.        register int i,j;
  1114.        char far *v, far *t;
  1115.        char *but_ptr;
  1116.  
  1117.        but_ptr = frame[num].p;
  1118.        v = vid_mem;
  1119.        t=v;
  1120.        for(i=frame[num].starty; i<frame[num].endy+1; i++)
  1121.          for(j=frame[num].startx; j<frame[num].endx+1; j++) {
  1122.            v = t;
  1123.            v += (j*160) + i*2;
  1124.            *v++ = *but_ptr++;   /* óδóÑßΓ¿ ß¿¼ó«½ */
  1125.            *v = *but_ptr++;   /* óδóÑßΓ¿ áΓα¿íπΓδ */
  1126.      }
  1127.      frame[num].active = 0; /* ó«ßßΓá¡«ó¿Γ∞ ¿º«íαáªÑ¡¿Ñ */
  1128.           }
  1129.  
  1130.           /* é«ºóαáΘáÑΓ ¬«ñ ΓѬπΘÑú« ó¿ñÑ«αѪ¿¼á */
  1131.           video_mode()
  1132.           {
  1133.      union REGS r;
  1134.  
  1135.      r.h.ah =15;  /* »«½πτ¿Γ∞ ¬«ñ ó¿ñÑ«αѪ¿¼á */
  1136.      return int86(0x10, &r, &r) & 255;
  1137.      }
  1138.  
  1139.  
  1140.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1141. â½áóá III                                                       -- 20 --
  1142.  
  1143.  
  1144.  
  1145.      /**********************************************************
  1146.               ¬á½∞¬π½∩Γ«α
  1147.      **********************************************************/
  1148.  
  1149.            #define MAX 100
  1150.  
  1151.            int *p;   /* π¬áºáΓѽ∞ ßΓѬá */
  1152.            int *tos; /* π¬áºáΓѽ∞ óÑαΦ¿¡δ ßΓѬᠠ*/
  1153.            int *bos; /* π¬áºáΓѽ∞ ñ¡á ßΓѬá */
  1154.  
  1155.          char in[80], out[80];
  1156.          int stack[MAX];
  1157.  
  1158.          /* æΓѬ«óδ⌐, ß »«ßΓΣ¿¬ß¡«⌐ ºá»¿ß∞ε ¬á½∞¬π½∩Γ«α
  1159.          ¡á τÑΓδαÑ Σπ¡¬µ¿¿ */
  1160.  
  1161.          void calc()
  1162.          {
  1163.            int answer;
  1164.            int a, b;
  1165.            p = stack;
  1166.            tos = p;
  1167.            bos = p + MAX - 1;
  1168.            window(0);
  1169.            do {
  1170.              window_xy(0, 0, 0);
  1171.              window_cleol(0);
  1172.              window_puts(0, " : "); /* »α«¼»ΓÑα ¬á½∞¬π½∩Γ«αá */
  1173.              window_gets(0, in);
  1174.              window_puts(0, " \n ");
  1175.              window_cleol(0);
  1176.              switch(*in) {
  1177.                case '+ ':
  1178.                  a = pop();
  1179.                  b = pop();
  1180.                  answer = a + b;
  1181.                  push(a+b);
  1182.                  break;
  1183.        case '-':
  1184.                  a = pop();
  1185.                  b = pop();
  1186.                  answer = b-a;
  1187.                  push(b-a);
  1188.                  break;
  1189.                case '- ':
  1190.                a = pop();
  1191.                b = pop();
  1192.                answer = b*a;
  1193.                push(b*a);
  1194.                break;
  1195.              case '/ ':
  1196.                a = pop();
  1197.                b = pop();
  1198.  
  1199.  
  1200.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1201. â½áóá III                                                       -- 21 --
  1202.  
  1203.  
  1204.                if(a==0) {
  1205.                    window_puts(0, "divide by 0\n");
  1206.                    break;
  1207.                }
  1208.                answer = b/a;
  1209.                push(b/a);
  1210.                break;
  1211.                default:
  1212.                  push(atoi(in));
  1213.                  continue;
  1214.             }
  1215.             itoa(answer, out, 10);
  1216.             window_puts(0, out);
  1217.         }   while(*in);
  1218.         deactivate(0);
  1219.      }
  1220.  
  1221.      /* Å«¼ÑßΓ¿Γ∞ τ¿ß½« ó ßΓѬ.
  1222.         é«ºóαáΓ¿Γ∞ 1 »α¿ πß»ÑΦ¡«¼ ºáóÑαΦÑ¡¿¿;
  1223.         ¿ 0, Ñß½¿ ßΓѬ »ÑαÑ»«½¡Ñ¡
  1224.      */
  1225.      push(i)
  1226.      int i;
  1227.      {
  1228.        if(p>bos) return 0;
  1229.        *p = i;
  1230.        p++;
  1231.        return 1;
  1232.      }
  1233.  
  1234.      /* êºó½Ñτ∞ óÑασ¡¿⌐ φ½Ñ¼Ñ¡Γ ßΓѬá
  1235.         é«ºóαáΓ¿Γ∞ 0, Ñß½¿ ßΓѬ »πßΓ.
  1236.      */
  1237.      pop()
  1238.      {
  1239.        p--;
  1240.        if(p<tos) {
  1241.          p++;
  1242.          return 0;
  1243.        }
  1244.        return *p;
  1245.      }
  1246.  
  1247.           éδ ¼«ªÑΓÑ ßαáºπ óó«ñ¿Γ∞ φΓπ »α«úαá¼¼π ó ¥éî. ä½∩ Γ«ú«, τΓ«íδ
  1248.      πßΓá¡«ó¿Γ∞ »α¿¬½áñ¡πε τáßΓ∞,  ºá»πßΓ¿ΓÑ  ÑÑ  ¡á  óδ»«½¡Ñ¡¿Ñ.  ä½∩
  1249.      ó맮óá ¬á½∞¬π½∩Γ«αᠡ᪼¿ΓÑ ¬½áó¿Φπ PT SCR.
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1261. â½áóá III                                                       -- 22 --
  1262.  
  1263.  
  1264.            êß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩ »« ¡áªáΓ¿ε ¬½áó¿Φ¿.
  1265.      -----------------------------------------------------------------
  1266.  
  1267.           ÅαÑαδóá¡¿Ñ »ÑτáΓ¿ φ¬αá¡á «τÑ¡∞  »α«ßΓ«  ¿ß»«½∞º«óáΓ∞,  ¡«  π
  1268.      ¡Ñú« ÑßΓ∞ Γα¿ ¬απ»¡δσ ¡Ññ«ßΓáΓ¬á.  é«-»Ñαóδσ,  «¡« »«ºó«½∩ÑΓ íδΓ∞
  1269.      αѺ¿ñÑ¡Γ¡δ¼ ó  ß¿ßΓѼѠ Γ«½∞¬«  »α¿¬½áñ¡«⌐  τáßΓ¿  TSR-»α«úαá¼¼δ.
  1270.      é«-óΓ«αδσ,  óδ  ¡Ñ  ¼«ªÑΓÑ  »α¿ φΓ«¼ »«½∞º«óáΓ∞ß∩ »ÑτáΓ∞ε φ¬αá¡á.
  1271.      é-ΓαÑΓ∞¿σ,  φΓ« αÑΦÑ¡¿Ñ »α«í½Ñ¼δ "󠽫í",  ¿ »«Γ«¼π «¡« ¡Ñ  «τÑ¡∞
  1272.      σ«α«ΦÑÑ.   ïπτΦ¿¼   ß»«ß«í«¼   ºá»π߬ᠠ TSR-»α«úαá¼¼δ   ∩ó½∩ÑΓß∩
  1273.      ¿ß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩  9  »«  ¡áªáΓ¿ε  ¬½áó¿Φ¿.  ÅαÑαδóá¡¿Ñ  9
  1274.      óδ»«½¡∩ÑΓß∩ »α¿ ¬áªñ«¼ ¡áªáΓ¿¿ ¬½áó¿Φ¿ ¡á ¬½áó¿áΓπαÑ.
  1275.  
  1276.           Åα¿ ¿ß»«½∞º«óá¡¿¿  »αÑαδóá¡¿∩  9  ñ½∩  ºá»π߬ᠠTSR-»α«úαá¼¼
  1277.      ñ«½ª¡δ ß«í½εñáΓ∞ß∩ ß½ÑñπεΘ¿Ñ «ß¡«ó¡δÑ  »«½«ªÑ¡¿∩.  é«-»Ñαóδσ,  éδ
  1278.      ñ«½ª¡δ  »ÑαÑ»¿ßáΓ∞  áñαÑß  ¿º  Γáí½¿µδ óÑ¬Γ«α«ó,  ß««ΓóÑΓßΓóπεΘ¿⌐
  1279.      »αÑαδóá¡¿ε  9,  ó  ΓᬫѠ ¼ÑßΓ«  Γáí½¿µδ,  ¬«Γ«α«Ñ  ß««ΓóÑΓßΓóπÑΓ
  1280.      ¡Ñ¿ß»«½∞ºπѼ«¼π DOS »αÑαδóá¡¿ε.  îδ íπñѼ ¿ß»«½∞º«óáΓ∞ »αÑαδóá¡¿Ñ
  1281.      60.  çáΓѼ,  ºá¡Ñß¿ΓÑ áñαÑß Γ«τ¬¿ óσ«ñá ó óáΦπ  TSR-»α«úαá¼¼π  »«
  1282.      áñαÑßπ  »αÑαδóá¡¿∩  9  ó  Γáí½¿µÑ  óÑ¬Γ«α«ó.  Å«ß½Ñ  ºá»π߬á óáΦá
  1283.      TSR-»α«úαἼᠻÑαóδ¼ ñѽ«¼ ó맮óÑΓ τÑαѺ »αÑαδóá¡¿Ñ ñαá⌐óÑα óó«ñá
  1284.      ß  ¬½áó¿áΓπαδ.  çáΓѼ »α«óÑα∩ÑΓß∩,  ¡Ñ ß««ΓóÑΓßΓóπÑΓ ½¿ óóÑñÑ¡¡δ⌐
  1285.      ß¿¼ó«½  "ú«α∩τÑ⌐  ¬½áó¿ΦÑ",  ¬«Γ«αá∩  ¿ß»«½∞ºπÑΓß∩  ñ½∩   ºá»π߬á
  1286.      »α¿¬½áñ¡«⌐ τáßΓ¿ TSR-»α«úαá¼¼δ. àß½¿ ß««ΓóÑΓßΓóπÑΓ, Γ« »α¿¬½áñ¡á∩
  1287.      τáßΓ∞ ¡áτ¿¡áÑΓ óδ»«½¡∩Γ∞ß∩,  ó »α«Γ¿ó¡«¼ ß½πτáÑ ¡¿¬á¬«ú« ñÑ⌐ßΓó¿∩
  1288.      ¡Ñ  »α«¿ºó«ñ¿Γß∩  ¿ TSR-»α«úαá¼¼á ñÑá¬Γ¿ó¿απÑΓß∩.  Æá¬¿¼ «íαẫ¼,
  1289.      »α¿ ¬áªñ«¼ ¡áªáΓ¿¿ »α«¿ßσ«ñ¿Γ «íαáΘÑ¡¿Ñ ¬ Σπ¡¬µ¿¿, αÑáú¿απεΘÑ⌐ ¡á
  1290.      ¡áªáΓ¿Ñ  ¬½áó¿Φ,  ¡«  »α¿¬½áñ¡á∩  τáßΓ∞ TSR-»α«úαá¼¼δ ºá»π߬áÑΓß∩
  1291.      Γ«½∞¬« »α¿ ¡áªáΓ¿¿ «»αÑñѽѡ¡«⌐ ¬½áó¿Φ¿.
  1292.  
  1293.           êß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩  »«  ¡áªáΓ¿ε  ¬½áó¿Φ¿   ¿¼ÑÑΓ   ñóá
  1294.      »αÑ¿¼πΘÑßΓóá.    é«-»Ñαóδσ,   »α¿   φΓ«¼   ¡ÑΓ   ¡¿¬á¬«⌐   »«ΓÑα¿
  1295.      Σπ¡¬µ¿«¡á½∞¡δσ ó«º¼«ª¡«ßΓÑ⌐.  é«-óΓ«αδσ,  »«∩ó½∩ÑΓß∩  ó«º¼«ª¡«ßΓ∞
  1296.      ¿ß»«½∞º«óáΓ∞  «ñ¡«óαѼѡ¡«  ¡Ñ߬«½∞¬« αẽ¿τ¡δσ »α¿¬½áñ¡δσ τáßΓÑ⌐
  1297.      TSR-»α«úαá¼¼δ,    óδº«ó    ¬«Γ«αδσ    «ßπΘÑßΓó½∩ÑΓß∩     ¡áªáΓ¿Ñ¼
  1298.      ß««ΓóÑΓßΓóπεΘ¿σ  ¿¼ αẽ¿τ¡δσ "ú«α∩τ¿σ ¬½áó¿Φ".  ÅαÑñßΓáó½Ñ¡¡á∩ ó
  1299.      ñá¡¡«¼  αáºñѽѠ TSR-»α«úαἼᠠ¿ß»«½∞ºπÑΓ  φΓπ   ó«º¼«ª¡«ßΓ∞   ¿
  1300.      ó¬½ετáÑΓ  ó ßó«⌐ ß«ßΓáó ¿ "¬á½∞¬π½∩Γ«α",  ¿ "ºá»¿ß¡πε ¬¡¿ª¬π" (¿º
  1301.      αáºñѽá 2), ¬«Γ«αδÑ óδºδóáεΓß∩ «Γñѽ∞¡« ñαπú «Γ ñαπúá.
  1302.  
  1303.           ÅαѪñÑ, τѼ ¿ß»«½∞º«óáΓ∞ φΓπ ó«º¼«ª¡«ßΓ∞,  óδ ñ«½ª¡δ  πº¡áΓ∞
  1304.      ¬«Ñ-τΓ« «í «íαáí«Γ¬Ñ BIOS ¡áªáΓ¿⌐ ¬½áó¿Φ.
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1321. â½áóá III                                                       -- 23 --
  1322.  
  1323.  
  1324.                  üπΣÑα ß¿¼ó«½«ó, óóÑñÑ¡¡δσ ß ¬½áó¿áΓπαδ.
  1325.      -----------------------------------------------------------------
  1326.  
  1327.           èᬠóδ º¡áÑΓÑ,  ßΓá¡ñáαΓ¡δÑ  óÑαß¿¿  DOS  íπΣÑਧπεΓ  ñ«  15
  1328.      ß¿¼ó«½«ó, óóÑñÑ¡¡δσ ß ¬½áó¿áΓπαδ,  τΓ« »«ºó«½∩ÑΓ óδ»«½¡¿Γ∞ óó«ñ ß
  1329.      «»ÑαѪѡ¿Ñ¼.  Åα¿ ¬áªñ«¼ ¡áªáΓ¿¿ ¬½áó¿Φ¿ ¡áßΓπ»áÑΓ »αÑαδóá¡¿Ñ  9.
  1330.      Åα«úαá¼¼á ISR αÑᬵ¿¿ ¡á ¡áªáΓ¿Ñ ¬½áó¿Φ¿ »α¿¡¿¼áÑΓ ¬«ñ ß¿¼ó«½á ¿º
  1331.      »«αΓá ¿ »«¼ÑΘáÑΓ Ñú« ó íπΣÑα. è«úñá óδ «íαáΘáÑΓÑß∞ ¬ Σπ¡¬µ¿∩¼ DOS
  1332.      ¿½¿  BIOS  óó«ñá  ß ¬½áó¿áΓπαδ,  «íαáíáΓδóáÑΓß∩ Γ«½∞¬« ß«ñÑন¼«Ñ
  1333.      íπΣÑαá,  á ¡Ñ  ΓѬπΘÑÑ  ß«ñÑন¼«Ñ  »«αΓá.  ¥Γ«  »«ºó«½∩ÑΓ  óáΦ¿¼
  1334.      »α«úαἼἠ  ¡Ñ»«ßαÑñßΓóÑ¡¡«   «íαáíáΓδóáΓ∞   ß«ñÑন¼«Ñ   íπΣÑαá
  1335.      ß¿¼ó«½«ó,  ΓᬠªÑ,  ¬á¬ φΓ« ñѽáεΓ »α«úαá¼¼δ BIOS  ¿  DOS.  Æá¬¿¼
  1336.      «íαẫ¼,  φΓ«  »«ºó«½∩ÑΓ  Σπ¡¬µ¿¿  αÑáú¿α«óá¡¿∩ ¡á ¡áªáΓ¿Ñ ¬½áó¿Φ
  1337.      óáΦÑ⌐ TSR-»α«úαá¼¼δ «»αÑñѽ∩Γ∞, íδ½á ½¿ ¡áªáΓá "ú«α∩τá∩ ¬½áó¿Φá",
  1338.      ¡Ñ π¡¿τΓ«ªá∩ »α¿ φΓ«¼ ß«ñÑন¼«ú« íπΣÑαá ß¿¼ó«½«ó.
  1339.  
  1340.  
  1341.           üπΣÑα óó«ñá ß ¬½áó¿áΓπαδ αáß»«½«ªÑ¡ »« áñαÑßπ 0000:041 (1054
  1342.      ó ñÑß∩Γ¿τ¡«⌐ ß¿ßΓѼѠßτ¿ß½Ñ¡¿∩ ).  Å«ß¬«½∞¬π »α¿  ¬áªñ«¼  ¡áªáΓ¿¿
  1343.      ¬½áó¿Φ¿ Σ«α¼¿απÑΓß∩ 16-í¿Γ¡δ⌐ ß¬á¡-¬«ñ,  Γ« ñ½∩ óó«ñá 15 ß¿¼ó«½«ó
  1344.      ΓαÑíπÑΓß∩ 30 íá⌐Γ. Äñ¡á¬« «íδτ¡« ¿ß»«½∞ºπεΓß∩ 32 íá⌐Γá, Γ.¬. ß¬á¡
  1345.      -¬«ñ  ¬½áó¿Φ¿  RETURN  áóΓ«¼áΓ¿τÑ߬¿  ñ«íáó½∩ÑΓß∩ ¬ ¬«¡µπ íπΣÑαá.
  1346.      üπΣÑα «αúá¡¿º«óá¡ ó ó¿ñÑ µ¿¬½¿τÑ߬«⌐ «τÑαÑñ¿,  ñ«ßΓπ»  ¬  ¬«Γ«α«⌐
  1347.      «ßπΘÑßΓó½∩ÑΓß∩  τÑαѺ π¬áºáΓѽ¿ ¡áτá½á ¿ ¬«¡µá «τÑαÑñ¿. ô¬áºáΓѽ∞
  1348.      ¡áτá½á  π¬áºδóáÑΓ  ¡á  ß¿¼ó«½,  ¬«Γ«αδ⌐  íδ½  óóÑñÑ¡   »«ß½Ññ¡¿¼.
  1349.      ô¬áºáΓѽ∞  ¬«¡µá  π¬áºδóáÑΓ  ¡á  ß½ÑñπεΘ¿⌐ ß¿¼ó«½,  ¬«Γ«αδ⌐ íπñÑΓ
  1350.      »ÑαÑñá¡ »« ºá»α«ßπ ¡á óó«ñ ß¿¼ó«½á «Γ  DOS  ¿½¿  BIOS.  ô¬áºáΓѽ∞
  1351.      ¡áτá½á  σαá¡¿Γß∩  »«  áñαÑßπ  0000:041C (1052 ó ñÑß∩Γ¿τ¡«⌐ ß.ß.).
  1352.      ç¡áτÑ¡¿∩ π¬áºáΓѽÑ⌐ ¡áτá½á ¿ ¬«¡µá  Σá¬Γ¿τÑ߬¿  ¿ß»«½∞ºπεΓß∩  ñ½∩
  1353.      ¿¡ñѬߡ«⌐  áñαÑßᵿ¿  «τÑαÑñ¿,  ¿  ß««ΓóÑΓßΓóπÑΓ  ¿¡ñѬßπ ΓѬπΘÑ⌐
  1354.      »«º¿µ¿¿ +30.  (¥Γ« ßó∩ºá¡« ß «ß«íÑ¡¡«ßΓ∩¼¿  óδ»«½¡Ñ¡¿∩  ¬«ßóÑ¡¡«⌐
  1355.      áñαÑßᵿ¿  »α«µÑßß«α«¼ 8086).  ç¡áτÑ¡¿∩ π¬áºáΓѽÑ⌐ ¡áτá½á ¿ ¬«¡µá
  1356.      «τÑαÑñ¿ ß«ó»áñáεΓ ó Γ«¼ ß½πτáÑ, Ñß½¿ «τÑαÑñ∞ »πßΓá.
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1381. â½áóá III                                                       -- 24 --
  1382.  
  1383.  
  1384.                       öπ¡¬µ¿∩ ¿¡¿µ¿á½¿ºáµ¿¿.
  1385.      -----------------------------------------------------------------
  1386.           ä½∩ »α¿¬½áñ¡«⌐   TSR-»α«úαá¼¼δ,   »αÑñßΓáó½Ñ¡¡«⌐   ó  ñá¡¡«¼
  1387.      αáºñѽÑ,  ΓαÑíπÑΓß∩ ¡Ñí«½∞Φá∩ »« «íΩѼπ »α«úαἼᠠ¿¡¿µ¿á½¿ºáµ¿¿.
  1388.      Ä¡á «Σ«α¼½Ñ¡á ó ó¿ñÑ Σπ¡¬µ¿¿ main(), ¬«Γ«αá∩ »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
  1389.      main()
  1390.      {
  1391.        struct address {
  1392.          char far *p;
  1393.        } temp;
  1394.        /* π¬áºáΓѽ∞ óÑ¬Γ«αá »αÑαδóá¡¿∩ 9 */
  1395.        struct address far *addr = (struct address far *) 36;
  1396.        /* π¬áºáΓѽ∞ óÑ¬Γ«αá »αÑαδóá¡¿∩ 60 */
  1397.        struct address far *int9 = (struct address far *) 240;
  1398.  
  1399.        /* Å«¼ÑßΓ¿Γ∞ áñαÑß «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ ¬½áó¿áΓπαδ
  1400.           ó óÑ¬Γ«α »αÑαδóá¡¿∩ 60. àß½¿ óÑ¬Γ«αá »αÑαδóá¡¿⌐ 60 ¿
  1401.           61 ß«ñÑαªáΓ «ñ¿¡á¬«óδÑ áñαÑßá, Γ« TSR-»α«úαἼᠡÑ
  1402.           íδ½á ºá»πΘÑ¡á.
  1403.        */
  1404.        if(int9->p == (int9+1)->p) {
  1405.          int9->p = addr->p;
  1406.          addr->p = (char far *) tsr_ap;
  1407.        printf("tsr installed - F2 for note pad, F3 for calculator ");
  1408.        } else {
  1409.          printf ("tsr application already initialized\n ");
  1410.          exit(1);
  1411.      }  }
  1412.        set_vid_mem();
  1413.        tsr(2000);
  1414.      }
  1415.  
  1416.           æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞,  τΓ« ñá¡¡á∩ óÑαß¿∩ »α«úαá¼¼δ ¡Ñ ñ«»π߬áÑΓ,
  1417.      τΓ«íδ ÑÑ ºá»π߬὿ í«½ÑÑ «ñ¡«ú«  αáºá  ó  ΓÑτÑ¡¿Ñ  «ñ¡«ú«  ßÑá¡ßá
  1418.      αáí«Γδ.  ¥Γ«  ßó∩ºá¡«  ß  ΓѼ,  τΓ«  »«óΓ«α¡δ⌐  ºá»π߬  »α«úαá¼¼δ
  1419.      »α¿óÑñÑΓ ¬ ºá»¿ß¿ áñαÑßá Γ«τ¬¿ óσ«ñá ó  TSR-»α«úαá¼¼π  ó  Γáí½¿µπ
  1420.      óÑ¬Γ«α«ó  »«  áñαÑßπ 60-ú« »αÑαδóá¡¿∩,  á ß«ñÑαªáóΦ¿⌐ß∩ Γá¼ áñαÑß
  1421.      »α«úαá¼¼δ αÑᬵ¿¿ ¡á ¡áªáΓ¿Ñ ¬½áó¿Φ¿  íπñÑΓ  ºá»«ατÑ¡.  é«  óαѼ∩
  1422.      αáí«Γδ  Σπ¡¬µ¿¿  »α«óÑα∩ÑΓß∩,  ß«ó»áñáÑΓ  ½¿  ß«ñÑন¼«Ñ  Γáí½¿µδ
  1423.      óÑ¬Γ«α«ó,  ß««ΓóÑΓßΓóπεΘÑÑ »αÑαδóá¡¿∩¼ 60 ¿  61.  (ÅαÑαδóá¡¿Ñ  61
  1424.      ΓᬪѠ ¡Ñ ¿ß»«½∞ºπÑΓß∩ DOS).  DOS «íαáíáΓδóáÑΓ óßÑ ¡Ñ¿ß»«½∞ºπѼδÑ
  1425.      Ñε »αÑαδóá¡¿∩ «ñ¡«⌐ ¿ Γ«⌐ ªÑ »α«úαá¼¼«⌐  «íαáí«Γ¬¿  ¡Ññ«»πßΓ¿¼«ú«
  1426.      »αÑαδóá¡¿∩.   æ½Ññ«óáΓѽ∞¡«,  »ÑαÑñ  ºá»π߬«¼  TSR-»α«úαá¼¼δ  φΓ¿
  1427.      áñαÑßá íπñπΓ ß«ó»áñáΓ∞, á »«ß½Ñ ºá»π߬ᠫ¡¿ íπñπΓ αẽ¿τ¡δ.
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1441. â½áóá III                                                       -- 25 --
  1442.  
  1443.  
  1444.                  Åਪ½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ.
  1445.      -----------------------------------------------------------------
  1446.  
  1447.           Åα¿¼Ñ¡∩Ѽá∩ ºñÑß∞  Σπ¡¬µ¿∩  óσ«ñá  ó  TSR-»α«úαá¼¼π ∩ó½∩ÑΓß∩
  1448.      í«½ÑÑ ß½«ª¡«⌐, τѼ »α¿ ¿ß»«½∞º«óá¡¿¿ »αÑαδóá¡¿∩ »« »ÑτáΓ¿ φ¬αá¡á.
  1449.      ÅÑαóδ¼  ñѽ«¼  «¡á  ñ«½ª¡á  ßΣ«α¼¿α«óáΓ∞ »αÑαδóá¡¿Ñ 60,  ñ½∩ Γ«ú«
  1450.      τΓ«íδ óó«ñ  ß  ¬½áó¿áΓπαδ  «ßπΘÑßΓó½∩½ß∩  ßΓá¡ñáαΓ¡«⌐  »α«úαá¼¼«⌐
  1451.      óó«ñá.   ü«½∞Φ¿¡ßΓó«  ¬«¼»¿½∩Γ«α«ó  æ¿  ¿¼ÑεΓ  Σπ¡¬µ¿ε  úÑ¡Ñαᵿ¿
  1452.      »αÑαδóá¡¿∩.  é Æπαí« æ¿ φΓ«  Σπ¡¬µ¿∩  geninterrupt(),  »áαá¼ÑΓα«¼
  1453.      ¬«Γ«α«⌐   ∩ó½∩ÑΓß∩  ¡«¼Ñα  Γ«ú«  »αÑαδóá¡¿∩,  ¬«Γ«α«Ñ  óδ  σ«Γ¿ΓÑ
  1454.      óδºóáΓ∞.  Å«ß½Ñ ó«ºóαáΓá ¿º »αÑαδóá¡¿∩  60  óáΦá  Σπ¡¬µ¿∩  ñ«½ª¡á
  1455.      »α«óÑα¿Γ∞  ß«ñÑন¼«Ñ  «τÑαÑñ¿,  áñαÑßπѼ«Ñ  ß  »«¼«Θ∞ε π¬áºáΓѽ∩
  1456.      ¡áτá½á, ¡á »αÑñ¼ÑΓ Γ«ú«, ¡Ñ íδ½á ½¿ ¡áªáΓá "ú«α∩τá∩ ¬½áó¿Φá". ä½∩
  1457.      »αÑñßΓáó½Ñ¡¡«⌐  ºñÑß∞  »α«úαá¼¼δ "ú«α∩τ¿¼¿" ∩ó½∩εΓß∩ ¬½áó¿Φ¿ F2 ¿
  1458.      F3 ß »«º¿µ¿«¡¡δ¼¿ ¬«ñἿ 60 ¿ 61 ß««ΓóÑΓßΓóÑ¡¡«. ìáªáΓ¿Ñ "ú«α∩τÑ⌐
  1459.      ¬½áó¿Φ¿"  ñ«½ª¡«  íδΓ∞  «í¡áαπªÑ¡«  »αѪñÑ,  τѼ π»αáó½Ñ¡¿Ñ íπñÑΓ
  1460.      »ÑαÑñá¡« »α¿¬½áñ¡«⌐ τáßΓ¿ »α«úαá¼¼δ.  â½«íá½∞¡á∩ »ÑαѼѡ¡á∩  busy
  1461.      ¿ß»«½∞ºπÑΓß∩   ñ½∩   Γ«ú«,   τΓ«íδ   »αÑñ«ΓóαáΓ¿Γ∞  «ñ¡«óαѼѡ¡«Ñ
  1462.      ¿ß»«½∞º«óá¡¿Ñ  «íÑ¿σ  »α¿¬½áñ¡δσ  τáßΓÑ⌐   »α«úαá¼¼δ,   »«ß¬«½∞¬π
  1463.      í«½∞Φ¿¡ßΓó«    ¬«¼»¿½∩Γ«α«ó    æ¿    ¡Ñ    »«ºó«½∩εΓ    ß«ºñáóáΓ∞
  1464.      »«óΓ«α¡«-óσ«ñ¿¼δÑ  »α«úαá¼¼δ.  àß½¿  «ñ¡á  ¿º  »α¿¬½áñ¡δσ  τáßΓÑ⌐
  1465.      á¬Γ¿ó¡á,  Γ«  ñαπú«⌐  τáßΓ¿  á¬Γ¿óᵿ∩  ó  φë༫¼Ñ¡Γ ºá»αÑΘÑ¡á.
  1466.      öπ¡¬µ¿∩ tsr_ap() »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
  1467.  
  1468.      /* Æ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
  1469.      void interrupt tsr_ap()
  1470.      {
  1471.        char far *t = (char far *) 1050; /* áñαÑß π¬áºáΓѽ∩ ºáú«½«ó¬á *
  1472.        geninterrupt(60);
  1473.        if(*t != *(t+2)) { /* Ñß½¿ ¡Ñ »πßΓ«⌐ */
  1474.          t += *t - 30 + 5; /* »ÑαÑ⌐Γ¿ ¬ »«º¿µ¿¿ ß¿¼ó«½á */
  1475.          if(*t == 60 || *t == 61) {
  1476.            bioskey(0); /* ßíα«ß¿Γ∞ ¬½áó¿Φ¿ F2/F5 */
  1477.            if(!busy) {
  1478.              busy = !busy;
  1479.            }
  1480.          }
  1481.        }
  1482.      }
  1483.  
  1484.           æ½ÑñπÑΓ  «Γ¼ÑΓ¿Γ∞,  τΓ«  »áαá¼ÑΓα«¼  Σπ¡¬µ¿¿   window_main()
  1485.      ∩ó½∩ÑΓß∩  »«º¿µ¿«¡¡δ⌐  ¬«ñ "ú«α∩τÑ⌐ ¬½áó¿Φ¿", ñ½∩ Γ«ú«, τΓ«íδ «¡á
  1486.      ¼«ú½á «ßπΘÑßΓó¿Γ∞ óδí«α ß««ΓóÑΓßΓóπεΘÑ⌐ »α¿¬½áñ¡«⌐ τáßΓ¿.
  1487.  
  1488.      /* ß«ºñáΓ∞ «¬¡« */
  1489.      window_main(which)
  1490.      int which;
  1491.      {
  1492.        union inkey {
  1493.          char ch[2];
  1494.          int i;
  1495.        } c;
  1496.        int i;
  1497.        char ch;
  1498.  
  1499.  
  1500.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1501. â½áóá III                                                       -- 26 --
  1502.  
  1503.  
  1504.  
  1505.        /* ó«-»Ñαóδσ, ß«ºñáΓ∞ αá¼¬π «¬¡á */
  1506.        make_window(0," Notepad [F1 to exit] ", 5, 20, 17, 60, BORDER);
  1507.        make_window(1, " Colculator ", 8, 20, 12, 60, BORDER);
  1508.  
  1509.        /* ¿ß»«½∞º«óáΓ∞ window() ñ½∩ á¬Γ¿óᵿ¿ ß«ºñá¡¡«ú« «¬¡á */
  1510.        switch(which) {
  1511.          case 60:
  1512.            notepad();
  1513.            break;
  1514.          case 61:
  1515.            calc();
  1516.            break;
  1517.        }
  1518.      }
  1519.  
  1520.           éδ ¼«ªÑΓÑ  ßαáºπ  óó«ñ¿Γ∞   ó   ¥éî   »αÑñßΓáó½Ñ¡¡πε   ºñÑß∞
  1521.      »α«úαá¼¼π.  Å«ß½Ñ  Γ«ú«,  ¬á¬ óδ ÑÑ ºá»πßΓ¿ΓÑ,  ¬½áó¿ΦÑ⌐ F2 íπñÑΓ
  1522.      óδí¿αáΓ∞ß∩  »α«úαἼᠠ"ºá»¿ß¡á∩  ¬¡¿ª¬á",  á   ¬½áó¿ΦÑ⌐   F3   -
  1523.      "¬á½∞¬π½∩Γ«α".
  1524.  
  1525.      /* Åα«úαá¼¼á, «ßΓáεΘá∩ß∩ αѺ¿ñÑ¡Γ¡«⌐ »«ß½Ñ ºáóÑαΦÑ¡¿∩ ¿
  1526.         ¿ß»«½∞ºπεΘá∩ »αÑαδóá¡¿Ñ 9 «Γ ¬½áó¿áΓπαδ.
  1527.      */
  1528.      #include "dos.h "
  1529.      #include "stdlib.h "
  1530.      #include "ctype.h "
  1531.  
  1532.      #define BORDER 1
  1533.      #define ESC 27
  1534.      #define MAX_FRAME 2
  1535.      #define REV_VID 0x70
  1536.      #define NORM_VID 7
  1537.      #define BKSP 8
  1538.  
  1539.      void interrupt tsr_ap();
  1540.      void save_video(), restore_video();
  1541.      void write_string(), write_char();
  1542.      void display_header(), draw_border();
  1543.      void window_gets();
  1544.      void window_cleol(), window();
  1545.      void notepad(), calc();
  1546.  
  1547.      char far *vid_mem;
  1548.      char wp[4000]; /* íπΣÑα ñ½∩ σαá¡Ñ¡¿∩ ΓѬπΘÑú«
  1549.                        ß«ñÑন¼«ú« φ¬αá¡á */
  1550.      struct window_trame {
  1551.        int startx, endx, starty, endy;
  1552.        int curx, cury; /* ΓѬπΘÑÑ »«½«ªÑ¡¿Ñ ¬παß«αá ó «¬¡Ñ */
  1553.        unsigned char *p; /* π¬áºáΓѽ∞ ó íπΣÑαÑ */
  1554.        char *header; /* ß««íΘÑ¡¿Ñ ºáú«½«ó¬á */
  1555.        int border; /* ó¬½ετÑ¡¿Ñ/«Γ¬½ετÑ¡¿Ñ í«αñεαá */
  1556.        int active; /* óδó«ñ¿Γ∞/¡Ñ óδó«ñ¿Γ∞ ¡á φ¬αá¡ */
  1557.      } frame [MAX_FRAME];
  1558.  
  1559.  
  1560.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1561. â½áóá III                                                       -- 27 --
  1562.  
  1563.  
  1564.      char in[80], out[80];
  1565.  
  1566.      /* busy πßΓá¡«ó½Ñ¡á ó 1,¬«úñá »α«úαá¼¼á á¬Γ¿ó¡á, ¿¡áτÑ - ó 0 */
  1567.      char busy = 0;
  1568.      main()
  1569.      {
  1570.      struct adaress {
  1571.        char far *p;
  1572.        }temp;
  1573.  
  1574.      /* π¬áºáΓѽ∞ ¡á óÑ¬Γ«α »αÑαδóá¡¿∩ 9 */
  1575.      struct address far *addr = (struct address far *) 36;
  1576.      /* π¬áºáΓѽ∞ ¡á óÑ¬Γ«α »αÑαδóá¡¿∩ 60 */
  1577.      struct address far *int9 = (struct address far *) 240;
  1578.  
  1579.      /* Å«¼ÑßΓ¿Γ∞ áñαÑß »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ ¬½áó¿áΓπαδ
  1580.         »« áñαÑßπ »αÑαδóá¡¿∩ 60. àß½¿ óÑ¬Γ«αá »αÑαδóá¡¿⌐ 60 ¿ 61
  1581.         ß«ñÑαªáΓ «ñ¿¡á¬«óδÑ áñαÑßá, Γ« TSR-»α«úαἼᠡѠíδ½á ºá»πΘÑ¡á.
  1582.      */
  1583.      if (int9->p == (int9+1)->p) {
  1584.      int9->p = addr->p;
  1585.      addr->p = (char far *) tsr_ap;
  1586.      printf ("tsr installed - F2 for note pad, F3 for calculator");
  1587.      } else {
  1588.      printf ("tsr application already initialized\n");
  1589.      exit (1);
  1590.      }
  1591.      set_vid_mem();
  1592.      tsr (800);
  1593.      }
  1594.      set_vid_mem()
  1595.      {
  1596.        int vmode;
  1597.        vmode = video_mode();
  1598.        if(( vmode != 2) && ( vmode != 3) && ( vmode != 7))  {
  1599.          printf("video must be in 80 column text mode");
  1600.          exit(1);
  1601.        }
  1602.        /* πßΓá¡«ó¿Γ∞ ß««ΓóÑΓßΓóπεΘ¿⌐ áñαÑß ó¿ñÑ«»á¼∩Γ¿ */
  1603.        if(vmode==7) vid_mem = (char far *) 0xB0000000;
  1604.        else vid_mem = (char far *) 0xB8000000;
  1605.      }
  1606.  
  1607.      /* Æ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
  1608.      void interrupt tsr_ap()
  1609.      {
  1610.        char far *t = (char far *) 1050; /* áñαÑß π¬áºáΓѽ∩ ºáú«½«ó¬á *
  1611.        geninterrupt(60);/* τ¿ΓáΓ∞ ß¿¼ó«½ */
  1612.        if(*t != *(t+2)) { /* Ñß½¿ ¡Ñ »πßΓ« */
  1613.        t += *t-30+5; /* »ÑαÑ⌐Γ¿ ¬ »«º¿µ¿¿ ß¿¼ó«½á */
  1614.        if(*t == 60 || *t == 61)  {
  1615.        bioskey(0); /* ßíα«ß¿Γ∞ ¬½áó¿Φ¿ F2/F3 */
  1616.        if(!busy) {
  1617.          busy = !busy;
  1618.  
  1619.  
  1620.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1621. â½áóá III                                                       -- 28 --
  1622.  
  1623.  
  1624.          window_main(*t);
  1625.          busy = !busy;
  1626.         }
  1627.        }
  1628.       }
  1629.      }
  1630.  
  1631.      /* ºáóÑαΦ¿Γ∞ ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
  1632.      tsr(size)
  1633.      unsigned size;
  1634.      {
  1635.        union REGS r;
  1636.        r.h.ah = 49;  /* ºáóÑαΦ¿Γ∞ ¿ «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
  1637.        r.h.al = 0;  /* ¬«ñ ó«ºóαáΓá */
  1638.        r.x.dx = size;  /* αẼÑα »α«úαá¼¼δ/16 */
  1639.        int86(0x21, &r, &r);
  1640.      }
  1641.  
  1642.      /* ß«ºñáΓ∞ «¬¡« */
  1643.      window_main(which)
  1644.      int which;
  1645.      {
  1646.        union inkey  {
  1647.          char ch[2];
  1648.          int i;
  1649.        } c;
  1650.        int i;
  1651.        char ch;
  1652.  
  1653.        /* ó«-»Ñαóδσ, ß«ºñáΓ∞ αá¼¬π «¬¡á */
  1654.       make_window(0, " Notepad [F1 to exit] ", 5, 20, 17, 60, BORDER);
  1655.       make_window(1, " Calculator ", 8, 20, 12, 60, BORDER);
  1656.  
  1657.        /* ¿ß»«½∞º«óáΓ∞ window() ñ½∩ á¬Γ¿óᵿ¿ ß«ºñá¡¡«ú« «¬¡á */
  1658.        switch(which)  {
  1659.          case 60:
  1660.            notepad();
  1661.            break;
  1662.  
  1663.            case 61:
  1664.              calc();
  1665.              break;
  1666.         }
  1667.      }
  1668.  
  1669.      /***************************************************************/
  1670.      /* öπ¡¬µ¿¿ π»αáó½Ñ¡¿∩ «¬¡á¼¿                                   */
  1671.      /***************************************************************/
  1672.  
  1673.      /* éδóÑßΓ¿ ß»π߬áεΘÑÑß∩ «¬¡« */
  1674.      void window(num)
  1675.      int num; /* ¡«¼Ñα «¬¡á */
  1676.      {
  1677.        /* ßñѽáΓ∞ «¬¡« á¬Γ¿ó¡δ¼ */
  1678.  
  1679.  
  1680.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1681. â½áóá III                                                       -- 29 --
  1682.  
  1683.  
  1684.        if(!frame[num].active)  {  /* ¿ß»«½∞ºπÑΓß∩ ¡Ñ »«ßΓ«∩¡¡« */
  1685.          save_video(num);         /* ß«σαá¡¿Γ∞ ΓѬπΘ¿⌐ φ¬αá¡ */
  1686.          frame[num].active = 1;  /* πßΓá¡«ó¿Γ∞ Σ½áú á¬Γ¿ó¡«ßΓ¿ */
  1687.          }
  1688.          if(frame[num].border) draw_border(num);
  1689.          display_header(num); /* óδóÑßΓ¿ «¬¡« */
  1690.      }
  1691.  
  1692.      /* æ«ºñáΓ∞ αἬπ ß»π߬áεΘÑú«ß∩ «¬¡á.
  1693.         àß½¿ αἬᠼ«ªÑΓ íδΓ∞ ß«ºñá¡á, ó«ºóαáΘáÑΓß∩ 1,
  1694.         ó »α«Γ¿ó¡«¼ ß½πτáÑ ó«ºóαáΘáÑΓß∩ 0.
  1695.      */
  1696.  
  1697.      make_window(num, header, startx, starty, endx, endy, border)
  1698.      int num;     /* ¡«¼Ñα «¬¡á */
  1699.      char *header;   /* ΓѬßΓ ºáú«½«ó¬á */
  1700.      int startx, starty;  /* ¬««αñ¿¡áΓδ X,Y óÑασ¡Ñú« ½Ñó«ú« πú½á */
  1701.      int endx, endy;  /* ¬««αñ¿¡áΓδ X,Y ¡¿ª¡Ñú« »αáó«ú« πú½á */
  1702.      int border;     /* íѺ í«αñεαá Ñß½¿ 0 */
  1703.      {
  1704.        register int i;
  1705.        int choice, vmode;
  1706.        unsigned char *p;
  1707.  
  1708.        if(num>MAX_FRAME)  {
  1709.          window_puts(0, "Too many windows\n");
  1710.          return 0;
  1711.        }
  1712.        if((startx>24) || (startx<0) || (starty>78) || (starty<0)) {
  1713.          window_puts(0, "range error");
  1714.          return 0;
  1715.        }
  1716.        if((endx>24) || (endy>79)) {
  1717.          window_puts(0, "window won't fit");
  1718.          return 0;
  1719.        }
  1720.  
  1721.  
  1722.      /* ÄΓóÑßΓ¿ ñ«ßΓáΓ«τ¡«Ñ ¬«½¿τÑßΓó« »á¼∩Γ¿ */
  1723.      p= (unsigned char *) malloc(2*(endx-startx+1)*(endy-starty+1));
  1724.        if(!p) exit(1); /* »«¼ÑßΓ¿ΓÑ ºñÑß∞ óáΦ ß«íßΓóÑ¡¡δ⌐
  1725.                           «íαáí«Γτ¿¬ «Φ¿í«¬ */
  1726.  
  1727.        /* ß«ºñáΓ∞ αἬπ */
  1728.        frame[num].startx = startx; frame[num].endx = endx;
  1729.        frame[num].starty = starty; frame[num].endy = endy;
  1730.        frame[num].p = wp;
  1731.        frame[num].header = header;
  1732.        frame[num].border = border;
  1733.        frame[num].active = 0;
  1734.        frame[num].curx = 0;  frame[num].cury = 0;
  1735.        return 1;
  1736.      }
  1737.  
  1738.  
  1739.  
  1740.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1741. â½áóá III                                                       -- 30 --
  1742.  
  1743.  
  1744.      /* äÑá¬Γ¿ó¿α«óáΓ∞ «¬¡« ¿ πñ὿Γ∞ Ñú« ß φ¬αá¡á */
  1745.      deactivate(num)
  1746.      int num;
  1747.      {
  1748.         /* πßΓá¡«ó¿Γ∞ ¬παß«α ó ½Ñóδ⌐ óÑασ¡¿⌐ πú«½ */
  1749.         frame[num].curx = 0;
  1750.         frame[num].cury = 0;
  1751.         restore_video(num);
  1752.      }
  1753.  
  1754.      /* éδóÑßΓ¿ ΓѬßΓ ºáú«½«ó¬á ó ß««ΓóÑΓßΓóπεΘÑÑ »«½Ñ */
  1755.      void display_header(num)
  1756.      int num;
  1757.      {
  1758.        register int i, y, len;
  1759.        y = frame[num].starty;
  1760.  
  1761.      /* éδτ¿ß½¿Γ∞ ¡áτá½∞¡πε »«º¿µ¿ε «Γ¡«ß¿Γѽ∞¡«
  1762.         µÑ¡Γαá ºáú«½«ó¬á, Ñß½¿ «Γα¿µáΓѽ∞¡á∩, Γ«
  1763.         ß««íΘÑ¡¿Ñ ¡Ñ »«ñσ«ñ¿Γ.
  1764.      */
  1765.      len = strlen(frame[num].header);
  1766.      len = (frame[num].endy - y - len) / 2;
  1767.      if(len<0) return; /* ¡Ñ óδó«ñ¿Γ∞ Ñú« */
  1768.      y = y +len;
  1769.      write_string(frame[num].startx, y,
  1770.                   frame[num].header, NORM_VID);
  1771.      {
  1772.      void draw_border(num)
  1773.      int num;
  1774.      {
  1775.        register int i;
  1776.        char far *v, far *t;
  1777.        v = vid_mem;
  1778.        t = v;
  1779.        for(i=frame[num].startx+1; i<frame[num].endx; i++) {
  1780.           v += (i*160) + frame[num].starty*2;
  1781.           *v++ = 179;
  1782.  
  1783.         *v = NORM_VID;
  1784.          v = t;
  1785.          v += (i*160) + frame[num].endy*2;
  1786.          *v++ = 179;
  1787.          *v = NORM_VID;
  1788.          v = t;
  1789.      }
  1790.      for(i=frame[num].starty+1; i<frame[num].endy; i++) {
  1791.         v += (frame[num].startx*160) + i*2;
  1792.         *v++ = 196;
  1793.         *v = NORM_VID;
  1794.         v = t;
  1795.         v += (frame[num].endx*160) + i*2;
  1796.         *v++ = 196;
  1797.         *v = NORM_VID;
  1798.  
  1799.  
  1800.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1801. â½áóá III                                                       -- 31 --
  1802.  
  1803.  
  1804.         v = t;
  1805.      }
  1806.      write_char(frame[num].startx, frame[num].starty, 218, NORM_VID);
  1807.      write_char(frame[num].startx, frame[num].endy, 191, NORM_VID);
  1808.      write_char(frame[num].endx, frame[num].starty, 192, NORM_VID);
  1809.      write_char(frame[num].endx, frame[num].endy, 217, NORM_VID);
  1810.      }
  1811.  
  1812.      /*************************************************************/
  1813.      /* Ä¬«¡¡δÑ Σπ¡¬µ¿¿ óó«ñá/óδó«ñá                              */
  1814.      /*************************************************************/
  1815.  
  1816.      /* éδóÑßΓ¿ ßΓ᫬π ¡áτ¿¡á∩ ß ΓѬπΘÑ⌐ »«º¿µ¿¿
  1817.         ó ß«ºñá¡¡«¼ «¬¡Ñ.
  1818.         é«ºóαáΓ¿Γ∞ 0, Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ,
  1819.         ¿ 1 - ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  1820.      */
  1821.      window_puts(num, str)
  1822.      int num;
  1823.      char *str;
  1824.      {
  1825.         /* πíÑñ¿ΓÑß∞, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
  1826.        if(!frame[num].active) return 0;
  1827.        for( ; *str; str++)
  1828.          window_putchar(num, *str);
  1829.        return 1;
  1830.      }
  1831.  
  1832.      /* éδóÑßΓ¿ ß¿¼ó«½ ó ΓѬπΘπε »«º¿µ¿ε ¬παß«αá
  1833.         ó ß«ºñá¡¡«¼ «¬¡Ñ
  1834.         é«ºóαáΓ¿Γ∞ 0, Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ,
  1835.         ¿ 1 - ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  1836.      */
  1837.      window_putchar(num, ch)
  1838.      int num;
  1839.      char ch;
  1840.      {
  1841.        register int x, y;
  1842.        char far *v;
  1843.  
  1844.         /* πíÑñ¿ΓÑß∞, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
  1845.        if(!frame[num].active) return 0;
  1846.  
  1847.        x = frame[num].curx + frame[num].startx + 1;
  1848.        y = frame[num].cury + frame[num].starty + 1;
  1849.  
  1850.        v = vid_mem;
  1851.        v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
  1852.        if(y>=frame[num].endy) {
  1853.          return 1;
  1854.        }
  1855.        if(x>=frame[num].endx) {
  1856.          return 1;
  1857.        }
  1858.  
  1859.  
  1860.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1861. â½áóá III                                                       -- 32 --
  1862.  
  1863.  
  1864.  
  1865.        if(ch=='\n') { /* ß¿¼ó«½ »ÑαÑσ«ñá ¬ ¡«ó«⌐ ßΓα«¬Ñ */
  1866.          x++;
  1867.          y = frame[num].startx+1;
  1868.          v = vid_mem;
  1869.          v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
  1870.          frame[num].curx++; /* ¡áαáßΓ¿Γ∞ X */
  1871.          frame[num].cury = 0; /* ßíα«ß¿Γ∞ Y */
  1872.        }
  1873.        else {
  1874.          frame[num].cury++;
  1875.          *v++ = ch; /* óδóÑßΓ¿ ß¿¼ó«½ */
  1876.          *v++ = NORM_VID; /* ¡«α¼á½∞¡δÑ áΓα¿íπΓδ ß¿¼ó«½á */
  1877.        }
  1878.        window_xy(num, frame[num].curx, frame[num].cury);
  1879.        return 1;
  1880.      }
  1881.  
  1882.      /* ôßΓá¡«ó¿Γ∞ ¬παß«α ó «»αÑñѽѡ¡«⌐ »«º¿µ¿¿ «¬¡á.
  1883.         é«ºóαáΓ¿Γ∞ 0 »α¿ óδσ«ñÑ ºá úαá¡¿µπ;
  1884.         ¿ ¡Ñ ¡«½∞ ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  1885.      */
  1886.      window_xy(num, x, y)
  1887.      int num, x, y;
  1888.      {
  1889.        if(x<0 || x+frame[num].startx>=frame[num].endx-1)
  1890.          return 0;
  1891.        if(y<0 || y+frame[num].starty>=frame[num].endy-1)
  1892.          return 0;
  1893.        frame[num].curx = x;
  1894.        frame[num].cury = y;
  1895.        return 1;
  1896.      }
  1897.  
  1898.      /* æτ¿ΓáΓ∞ ßΓα«¬π ¿º «¬¡á */
  1899.      void window_gets(num, s)
  1900.      int num;
  1901.      char *s;
  1902.      {
  1903.        char ch, *temp;
  1904.        char out[10];
  1905.  
  1906.           temp = s;
  1907.           for(;;) {
  1908.             ch = window_getche(num);
  1909.             switch(ch) {
  1910.               case '\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
  1911.                 *s='\0';
  1912.                 return;
  1913.               case BKSP: /* ó«ºóαáΓ ¡á Φáú */
  1914.                 if(s>temp) {
  1915.                 s--;
  1916.                 frame[num].cury--;
  1917.                 if(frame[num].cury<0) frame[num].cury = 0;
  1918.  
  1919.  
  1920.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1921. â½áóá III                                                       -- 33 --
  1922.  
  1923.  
  1924.                   window_xy(num, frame[num].curx, frame[num].cury);
  1925.                     write_char(frame[num].startx+ frame[num].curx+1,
  1926.                   frame[num].starty+frame[num].cury+1,' ',NORM_VID);
  1927.                 }
  1928.                 break;
  1929.               default: *s = ch;
  1930.                 s++;
  1931.           }
  1932.         }
  1933.      }
  1934.  
  1935.      /* éóÑßΓ¿ ß¿¼ó«½ ó «¬¡«.
  1936.         é«ºóαáΓ¿Γ∞ »«½¡δ⌐ 16-αáºα∩ñ¡δ⌐ ß¬á¡-¬«ñ
  1937.      */
  1938.      window_getche(num)
  1939.      int num;
  1940.      {
  1941.        union inkey {
  1942.          char ch[2];
  1943.          int i;
  1944.        } c;
  1945.        if(!frame[num].active) return 0; /* «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ */
  1946.        window_xy(num, frame[num].curx, frame[num].cury);
  1947.        c.i = bioskey(0);  /* «íαáí«ΓáΓ∞ ¡áªáΓ¿Ñ ¬½áó¿Φ¿ */
  1948.        if(c.ch[0]) {
  1949.          switch(c.ch[0]) {
  1950.            case'\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
  1951.              break;
  1952.            case BKSP: /* ó«ºóαáΓ ¡á Φáú */
  1953.              break;
  1954.            default:
  1955.           if(frame[num].cury+frame[num].starty < frame[num].endy-1) {
  1956.           write_char(frame[num].startx+ frame[num].curx+1,
  1957.             frame[num].starty+frame[num].cury+1, c.ch[0], NORM_VID);
  1958.             frame[num].cury++;
  1959.              }
  1960.         }
  1961.         if(frame[num].curx < 0) frame[num].curx = 0;
  1962.         if(frame[num].curx+frame[num].startx > frame[num].endx-2)
  1963.         frame[num].curx--;
  1964.  
  1965.            window_xy(num, frame[num].curx, frame[num].cury);
  1966.          }
  1967.          return c.i;
  1968.      }
  1969.  
  1970.      /* Äτ¿ßΓ¿Γ∞ ñ« ¬«¡µá ßΓ᫬¿ */
  1971.      void window_cleol(num)
  1972.      int num;
  1973.      {
  1974.        register int i, x, y;
  1975.        x = frame[num].curx;
  1976.        y = frame[num].cury;
  1977.        window_xy(num, frame[num].curx, frame[num].cury);
  1978.  
  1979.  
  1980.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1981. â½áóá III                                                       -- 34 --
  1982.  
  1983.  
  1984.        for(i=frame[num].cury; i<frame[num].endy-1; i++)
  1985.          window_putchar(num,' ');
  1986.        window_xy(num, x, y);
  1987.      }
  1988.  
  1989.      /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α óóÑασ ¡á «ñ¡π ßΓ᫬π.
  1990.         é«ºóαáΓ¿Γ∞ ¡Ñ ¡«½∞ ó ß½πτáÑ πß»Ñσá
  1991.         ¿ 0 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  1992.      */
  1993.      window_upline(num)
  1994.      int num;
  1995.      {
  1996.        if(frame[num].curx>0) {
  1997.          frame[num].curx--;
  1998.          window_xy(num, frame[num].curx, frame[num].cury);
  1999.          return 1;
  2000.        }
  2001.        return 0;
  2002.      }
  2003.  
  2004.      /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α ó¡¿º ¡á «ñ¡π ßΓ᫬π.
  2005.         é«ºóαáΓ¿Γ∞ ¡Ñ ¡«½∞ ó ß½πτáÑ πß»Ñσá
  2006.         ¿ 0 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
  2007.      */
  2008.      window_downline(num)
  2009.      int num;
  2010.      {
  2011.      if(frame[num].curx<frame[num].endx-frame[num].startx-1) }
  2012.        frame[num].curx++;
  2013.        window_xy(num, frame[num].curx, frame[num].cury);
  2014.        return 1;
  2015.       }
  2016.       return 1;
  2017.      }
  2018.  
  2019.      /* ¡áºáñ ¡á «ñ¿¡ ß¿¼ó«½ */
  2020.      window_bksp(num)
  2021.      int num;
  2022.      {
  2023.      if(frame[num].cury>0) {
  2024.        frame[num].cury--;
  2025.        window_xy(num, frame[num].curx, frame[num].cury);
  2026.        window_putchar(num, ' ');
  2027.  
  2028.           frame[num].cury--;
  2029.           window_xy(num, frame[num].curx, frame[num].cury);
  2030.         }
  2031.      }
  2032.  
  2033.      /***************************************************************/
  2034.      /* ä«»«½¡¿Γѽ∞¡δÑ Σπ¡¬µ¿¿                                      */
  2035.      /***************************************************************/
  2036.  
  2037.      /* éδóÑßΓ¿ ßΓ᫬π ß π¬áºá¡¡δ¼¿ áΓα¿íπΓἿ */
  2038.  
  2039.  
  2040.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2041. â½áóá III                                                       -- 35 --
  2042.  
  2043.  
  2044.      void write_string(x, y, p, attrib)
  2045.      int x, y;
  2046.      char *p;
  2047.      int attrib;
  2048.      {
  2049.        register int i;
  2050.        char far *v;
  2051.  
  2052.        v=vid_mem;
  2053.        v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
  2054.        for(i=y; *p; i++) {
  2055.          *v++ = *p++;  /* ºá»¿ßáΓ∞ ß¿¼ó«½ */
  2056.          *v++ = attrib;  /* ºá»¿ßáΓ∞ áΓα¿íπΓδ */
  2057.        }
  2058.      }
  2059.  
  2060.      /* éδóÑßΓ¿ ß¿¼ó«½ ß π¬áºá¡¡δ¼¿ áΓα¿íπΓἿ */
  2061.      void write_char(x, y, ch, attrib)
  2062.      int x, y;
  2063.      char ch;
  2064.      int attrib;
  2065.      {
  2066.        register int i;
  2067.        char far *v;
  2068.        v = vid_mem;
  2069.        v += (x*160) + y*2;
  2070.        *v++ = ch;  /* ºá»¿ßáΓ∞ ß¿¼ó«½ */
  2071.        *v = attrib;  /* ºá»¿ßáΓ∞ áΓα¿íπΓδ */
  2072.      }
  2073.  
  2074.      /* æ«σαá¡¿Γ∞ «í½áßΓ∞ φ¬αá¡á */
  2075.      void save_video(num)
  2076.      int num;
  2077.      {
  2078.        register int i, j;
  2079.        char *buf_ptr;
  2080.        char far *v, far *t;
  2081.        buf_ptr = frame[num].p;
  2082.        v = vid_mem;
  2083.        for(i=frame[num].starty; i<frame[num].endy+1; i++)
  2084.          for(j=frame[num].startx; j<frame[num].endx+1; j++) {
  2085.            t = (v + (j*160) + i*2);
  2086.            *buf_ptr++ = *t++;
  2087.  
  2088.            *buf_ptr++ = *t;
  2089.            *(t-1) = ' '; /* «τ¿ßΓ¿Γ∞ «¬¡« */
  2090.          }
  2091.      }
  2092.  
  2093.      /* é«ßßΓá¡«ó¿Γ∞ «í½áßΓ∞ φ¬αá¡á */
  2094.      void restore_video(num)
  2095.      int num;
  2096.      {
  2097.        register int i,j;
  2098.  
  2099.  
  2100.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2101. â½áóá III                                                       -- 36 --
  2102.  
  2103.  
  2104.        char far *v, far *t;
  2105.        char *buf_ptr;
  2106.        buf_ptr = frame[num].p;
  2107.        v = vid_mem;
  2108.        t = v;
  2109.        for(i=frame[num].starty; i<frame[num].endy+1; i++)
  2110.          for(j=frame[num].startx; j<frame[num].endx+1; j++) {
  2111.            v = t;
  2112.            v += (j*160) + i*2;
  2113.            *v++ = *buf_ptr++; /* ºá»¿ßáΓ∞ ß¿¼»«½ */
  2114.            *v = *buf_ptr++;  /* ºá»¿ßáΓ∞ áΓα¿íπΓδ */
  2115.        }
  2116.        frame[num].active = 0;/* ó«ßßΓá¡«ó¿Γ∞ ¿º«íαáªÑ¡¿Ñ */
  2117.      }
  2118.  
  2119.      /* é«ºóαáΓ¿Γ∞ ¬«ñ ΓѬπΘÑú« ó¿ñÑ«αѪ¿¼á */
  2120.      video_mode()
  2121.      {
  2122.        union REGS r;
  2123.        r.h.ah = 15;  /* »«½πτ¿Γ∞ ¬«ñ ó¿ñÑ«αѪ¿¼á */
  2124.        return int86(0x10, &r, &r) & 255;
  2125.      }
  2126.  
  2127.      /****************************************************/
  2128.      /* öπ¡¬µ¿¿ óß»½δóáεΘ¿σ «¬«¡                         */
  2129.      /****************************************************/
  2130.  
  2131.      #define MAX 100
  2132.  
  2133.      int *p; /* π¬áºáΓѽ∞ ßΓѬá */
  2134.      int *tos; /* π¬áºáΓѽ∞ óÑαΦ¿¡δ ßΓѬá */
  2135.      int *bos; /* π¬áºáΓѽ∞ ñ¡á ßΓѬá */
  2136.      int stack[MAX];
  2137.  
  2138.      /* æΓѬ«óδ⌐, ß »«ßΓΣ¿¬ß¡«⌐ ºá»¿ß∞ε ¬á½∞¬π½∩Γ«α
  2139.      ß τÑΓδα∞¼∩ Σπ¡¬µ¿∩¼¿
  2140.      */
  2141.      void calc()
  2142.      {
  2143.        int answer;
  2144.        int a,b;
  2145.        p = stack;
  2146.        tos = p;
  2147.        bos = p+MAX-1;
  2148.  
  2149.             window(1);
  2150.             do {
  2151.               window_xy(1, 0, 0);
  2152.               window_cleol(1);
  2153.               window_puts(1, ": "); /* »α«¼»ΓÑα ¬á½∞¬π½∩Γ«αá */
  2154.               window_gets(1, in);
  2155.               window_puts(1, "\n ");
  2156.               window_cleol(1);
  2157.               switch(*in) {
  2158.  
  2159.  
  2160.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2161. â½áóá III                                                       -- 37 --
  2162.  
  2163.  
  2164.                 case '+':
  2165.                   a = pop();
  2166.                   b = pop();
  2167.                   answer = a+b;
  2168.                   push(a+b);
  2169.                   break;
  2170.                   case '-':
  2171.                     a = pop();
  2172.                     b = pop();
  2173.                     answer = b-a;
  2174.                     push(b-a);
  2175.                     break;
  2176.                   case '* ':
  2177.                     a = pop();
  2178.                     b = pop();
  2179.                     answer = b*a;
  2180.                     push(b*a);
  2181.                     break;
  2182.                   case '/ ':
  2183.                     a = pop();
  2184.                     b = pop();
  2185.                     if(a==0) {
  2186.                         window_puts(0, "divide by 0\n");
  2187.                         break;
  2188.                     }
  2189.                     answer = b/a;
  2190.                     push(b/a);
  2191.                     break;
  2192.                   default:
  2193.                     push(atoi(in));
  2194.                     continue;
  2195.                }
  2196.                itoa(answer, out, 10);
  2197.                window_puts(1, out);
  2198.            }   while(*in);
  2199.            deactivate(1);
  2200.      }
  2201.      /* Å«¼ÑßΓ¿Γ∞ τ¿ß½« ó ßΓѬ.
  2202.         é«ºóαáΓ¿Γ∞ 1 ó ß½πτáÑ πß»Ñσá
  2203.         ¿ 0 Ñß½¿ ßΓѬ »ÑαÑ»«½¡Ñ¡
  2204.      */
  2205.      push(i)
  2206.      int i;
  2207.      {
  2208.        if(p>bos) return 0;
  2209.        *p = i;
  2210.        p++;
  2211.  
  2212.         return 1;
  2213.      }
  2214.      /* êºó½Ñτ∞ óÑασ¡¿⌐ φ½Ñ¼Ñ¡Γ ¿º ßΓѬá.
  2215.         é«ºóαáΓ¿Γ∞ 0 Ñß½¿ ßΓѬ »πßΓ.
  2216.      */
  2217.      pop()
  2218.  
  2219.  
  2220.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2221. â½áóá III                                                       -- 38 --
  2222.  
  2223.  
  2224.      {
  2225.        p--;
  2226.        if(p<tos) {
  2227.          p++;
  2228.          return 0;
  2229.        }
  2230.        return *p;
  2231.      }
  2232.  
  2233.      /**********************************************************/
  2234.      /*                éß»½δóáεΘá∩ ºá»¿ß¡á∩ ¬¡¿ª¬á             */
  2235.      #define MAX_NOTE 10
  2236.      #define BKSP 8
  2237.      char notes[MAX_NOTE] [80];
  2238.      void notepad()
  2239.      {
  2240.        static first = 1;
  2241.        register int i, j;
  2242.        union inkey {
  2243.          char ch[2];
  2244.          int i;
  2245.        } c;
  2246.        char ch;
  2247.  
  2248.        /* ¿¡¿µ¿á½¿º¿α«óáΓ∞ ¼áßß¿ó ºá»¿ßÑ⌐ Ñß½¿ φΓ« ¡Ñ«íσ«ñ¿¼« */
  2249.        if(first) {
  2250.          for(i=0; i<MAX_NOTE; i++)
  2251.            *notes[i] = '\0 ';
  2252.          first = !first;
  2253.          }
  2254.          window(0);
  2255.  
  2256.        /* óδóÑßΓ¿ ßπΘÑßΓóπεΘ¿Ñ ºá»¿ß¿ */
  2257.          for(i=0; i<MAX_NOTE; i++) {
  2258.            if(*notes[i]) window_puts(0, notes[i]);
  2259.            window_putchar(0, '\n ');
  2260.            }
  2261.            i = 0;
  2262.            window_xy(0, 0, 0);
  2263.  
  2264.            for(;;) {
  2265.              c.i = bioskey(0);  /* «íαáí«ΓáΓ∞ ¡áªáΓ¿Ñ ¬½áó¿Φ¿ */
  2266.              if(tolower(c.ch[1])==59) { /* F1 ñ½∩ óδσ«ñá */
  2267.                deactivate(0);
  2268.                break;
  2269.              }
  2270.  
  2271.              /* Ñß½¿ «íδτ¡á∩ ¬½áó¿Φá */
  2272.              if(isprint(c.ch[0]) || c.ch[0]==BKSP) {
  2273.                window_cleol(0);
  2274.                notes[i][0] = c.ch[0];
  2275.                j = 1;
  2276.                window_putchar(0, notes[i][0]);
  2277.                do {
  2278.  
  2279.  
  2280.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2281. â½áóá III                                                       -- 39 --
  2282.  
  2283.  
  2284.                  ch = window_getche(0);
  2285.                  if(ch == BKSP) {
  2286.                    if( j>0 ) {
  2287.                    j--;
  2288.                    window_bksp(0);
  2289.                  }
  2290.                }
  2291.                else {
  2292.                  notes[i][j] = ch;
  2293.                  j++;
  2294.                }
  2295.              } while(notes[i][j-1]! = '\r ');
  2296.              notes[i][j-1] = '\0 ';
  2297.              i++;
  2298.              window_putchar(0, '\n ');
  2299.            }
  2300.  
  2301.            else { /* Ñß½¿ ß»Ñµ¿á½∞¡á∩ ¬½áó¿Φá */
  2302.              switch(c.ch[1]) {
  2303.                case 72: /* ßΓαѽ¬á óóÑασ */
  2304.                  if(i>0) {
  2305.                    i--;
  2306.                    window_upline(0);
  2307.                  }
  2308.                 break;
  2309.               case 80: /* ßΓαѽ¬á ó¡¿º */
  2310.                 if(i<MAX_NOTE-1) {
  2311.                   i++;
  2312.                   window_downline(0);
  2313.                 }
  2314.                 break;
  2315.              }
  2316.           }
  2317.        }
  2318.      }
  2319.  
  2320.  
  2321.  
  2322.  
  2323.  
  2324.  
  2325.  
  2326.  
  2327.  
  2328.  
  2329.  
  2330.  
  2331.  
  2332.  
  2333.  
  2334.  
  2335.  
  2336.  
  2337.  
  2338.  
  2339.  
  2340.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2341. â½áóá III                                                       -- 40 --
  2342.  
  2343.  
  2344.                      Æá⌐¡á 28-ú« »αÑαδóá¡¿∩
  2345.      -----------------------------------------------------------------
  2346.  
  2347.           àßΓ∞  «ñ¡«  ßαÑñßΓó«   DOS,   ¬«Γ«α«Ñ   ¡Ñ   «»¿ßδóáÑΓß∩   ó
  2348.      ñ«¬π¼Ñ¡Γᵿ¿,  ¿  ¬«Γ«α«Ñ  ¼«ªÑΓ  ßñѽáΓ∞   TSR-»α«úαá¼¼δ   í«½ÑÑ
  2349.      ¡áñѪ¡δ¼¿  ó  Γ«Γ  »Ñα¿«ñ  óαѼѡ¿,  ¬«úñá  «¡¿  ¿ß»«½∞ºπεΓ ¼¡«ú«
  2350.      ß¿ßΓѼ¡δσ αÑßπαß«ó.  é««íΘÑ ú«ó«α∩,  Ñß½¿ »α¿¬½áñ¡á∩ τáßΓ∞  óáΦÑ⌐
  2351.      TSR-»α«úαá¼¼δ   ºá¡¿¼áÑΓß∩  «í¼Ñ¡«¼  Γ«½∞¬«  ß  ¬«¡ß«½∞ε,  Γ«  óδ
  2352.      ºáßΓαáσ«óá¡δ «Γ ¡Ñ»α¿∩Γ¡«ßΓÑ⌐.  ìÑ»α¿∩Γ¡«ßΓ¿ ¼«úπΓ ó«º¡¿¬¡πΓ∞ »α¿
  2353.      ¿ß»«½∞º«óá¡¿¿ Γᬿσ «íΩÑ¬Γ«ó, ¬á¬ ñ¿ß¬«óδÑ Σá⌐½δ ¿½¿ »«αΓδ óó«ñá-
  2354.      óδó«ñá.  ò«Γ∩ φΓ« ¿ ¡Ñ  «»¿ßá¡«  ó  ΓÑσ¡¿τÑ߬¿σ  απ¬«ó«ñßΓóáσ  »«
  2355.      «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼÑ,  ¡« DOS óδºδóáÑΓ »αÑαδóá¡¿Ñ 28ì,  ¬«úñá «¡á
  2356.      ¡áσ«ñ¿Γß∩  ó  "íѺ«»áß¡«¼",  Γ.Ñ.  σ«½«ßΓ«¼  ß«ßΓ«∩¡¿¿.  èᬠ óá¼
  2357.      ¡áóÑα¡«Ñ  ¿ºóÑßΓ¡«,  »α¿  óδ»«½¡Ñ¡¿¿  «»αÑñѽѡ¡δσ  Σπ¡¬µ¿⌐  DOS,
  2358.      ¬«Γ«αδÑ  «Γ¡«ß∩Γß∩  ¬  ¬α¿Γ¿τÑ߬¿¼  πτáßΓ¬á¼,  »«ß½Ñ  ¡áτá½á   ¿σ
  2359.      óδ»«½¡Ñ¡¿∩  »αÑαδóá¡¿∩  ñ«½ª¡δ  íδΓ∞  ºá»αÑΘÑ¡δ.  ÅαÑαδóá¡¿Ñ  28ì
  2360.      ¡¿¬«úñá  ¡Ñ  óδºδóáÑΓß∩  DOS  ó«  óαѼ∩  óδ»«½¡Ñ¡¿∩  ¬α¿Γ¿τÑ߬«ú«
  2361.      πτáßΓ¬á.  éδ ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ φΓ« ßαÑñßΓó« ñ½∩ ºáΘ¿Γδ «Γ ßí«Ñó
  2362.      óáΦÑ⌐ TSR-»α«úαá¼¼δ.  ò«Γ∩ ºñÑß∞ ¡Ñ »αÑñßΓáó½Ñ¡« ¡¿¬á¬¿σ »α¿¼Ñα«ó
  2363.      »α«úαá¼¼,  ¡«  »αÑñ½áúáεΓß∩  ß½ÑñπεΘ¿Ñ «íΘ¿Ñ ß««íαáªÑ¡¿∩ »« φΓ«¼π
  2364.      ó«»α«ßπ.
  2365.  
  2366.           â½áó¡«Ñ «Γ½¿τ¿Ñ,  ¬«Γ«α«Ñ  óδ   ñ«½ª¡δ   ¿¼ÑΓ∞   óó¿ñπ   »α¿
  2367.      ¿ß»«½∞º«óá¡¿¿  »αÑαδóá¡¿∩  28ì,  ºá¬½ετáÑΓß∩  ó ß»«ß«íÑ á¬Γ¿óᵿ¿
  2368.      »α¿¬½áñ¡«⌐ τáßΓ¿ óáΦÑ⌐ TSR-»α«úαá¼¼δ. è«úñá óδºδóáÑΓß∩ »αÑαδóá¡¿Ñ
  2369.      28ì,    »α¿¬½áñ¡á∩    τáßΓ∞   TSR-»α«úαá¼¼δ   ¡Ñ   ¼«ªÑΓ   í«½∞ΦÑ
  2370.      á¬Γ¿ó¿α«óáΓ∞ß∩ τÑαѺ »α«úαá¼¼π «íαáí«Γ¬¿ ¡áªáΓ¿⌐  ¬½áó¿Φ.  é¼ÑßΓ«
  2371.      φΓ«ú«  »α«úαἼᠠ«íαáí«Γ¬¿  ¡áªáΓ¿⌐  ¬½áó¿Φ »α¿ ¡áªáΓ¿¿ "ú«α∩τÑ⌐
  2372.      ¬½áó¿Φ¿"  »α«ßΓ«  πßΓá¡áó½¿óáÑΓ  Σ½áú  (ó  ñá½∞¡Ñ⌐ΦѼ   ¿¼Ñ¡πѼδ⌐
  2373.      is-hotkey).  ÅÑαÑñ ΓѼ,  ¬á¬ »α¿¬½áñ¡á∩ τáßΓ∞ óáΦÑ⌐ TSR-»α«úαá¼¼δ
  2374.      ¼«ªÑΓ íδΓ∞ óδºóá¡á, óδ ñ«½ª¡δ ß«ºñáΓ∞ ¡«óδ⌐ «íαáí«Γτ¿¬ »αÑαδóá¡¿∩
  2375.      28ì,  ¬«Γ«αδ⌐ íπñÑΓ »α«óÑα∩Γ∞, πßΓá¡«ó½Ñ¡ Σ½áú is-hotkey ¿½¿ ¡ÑΓ.
  2376.      àß½¿ πßΓá¡«ó½Ñ¡,  Γ« »α¿¬½áñ¡á∩ τáßΓ∞ á¬Γ¿ó¿απÑΓß∩, ßíαáßδóá∩ »α¿
  2377.      φΓ«¼  Σ½áú  is-hotkey.  Åα¿  φΓ«¼ óδ «í∩ºáΓѽ∞¡« ñ«½ª¡δ ¡Ñ »α«ßΓ«
  2378.      ¿º¼Ñ¡¿Γ∞ »Ñαó«¡áτá½∞¡«Ñ  ß«ñÑন¼«Ñ  óÑ¬Γ«αá  »αÑαδóá¡¿∩  28ì,  á
  2379.      ¡á»α«Γ¿ó,  ß«σαá¡¿Γ∞  Ñú«  ¿  óδºδóáΓ∞ ¿ßσ«ñ¡«Ñ »αÑαδóá¡¿Ñ 28ì ¿º
  2380.      óáΦÑú« «íαáí«Γτ¿¬á 28-ú« »αÑαδóá¡¿∩.
  2381.  
  2382.           àß½¿ óδ ß«í¿αáÑΓÑß∞ »α«ñáóáΓ∞ óáΦ¿ TSR-»α«úαá¼¼δ, Γ«  ñ«½ª¡δ
  2383.      «í∩ºáΓѽ∞¡«  ¿ß»«½∞º«óáΓ∞  »αÑαδóá¡¿Ñ  28ì  (σ«Γ∩  »«  ¡Ñ¼π ¿ ¡ÑΓ
  2384.      ñ«¬π¼Ñ¡Γᵿ¿),  »«ß¬«½∞¬π  «¡«   »«ºó«½∩ÑΓ   ¿ºíѪáΓ∞   ß½πτá⌐¡δσ
  2385.      »αÑαδóá¡¿⌐ DOS ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ ¬α¿Γ¿τÑ߬¿σ πτáßΓ¬«ó.
  2386.  
  2387.  
  2388.  
  2389.  
  2390.  
  2391.  
  2392.  
  2393.  
  2394.  
  2395.  
  2396.  
  2397.  
  2398.  
  2399.  
  2400.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2401. â½áóá III                                                       -- 41 --
  2402.  
  2403.  
  2404.                  Åα«í½Ñ¼δ »α¿ ß«ºñá¡¿¿ TSR-»α«úαá¼¼
  2405.      -----------------------------------------------------------------
  2406.  
  2407.           TSR-»α«úαá¼¼δ »«  ßó«Ñ⌐  »α¿α«ñÑ  «τÑ¡∞  ß¬½«¡¡δ  ¬   ßí«∩¼.
  2408.      ìá»α¿¼Ñα,   ¿ß»«½∞º«óá¡¿Ñ   TSR-»α«úαá¼¼δ,   αáºαáí«Γá¡¡«⌐  «ñ¡¿¼
  2409.      »α«úαá¼¼¿ßΓ«¼,    τáßΓ«    ñѽáÑΓ    ¡Ñ󫺼«ª¡δ¼    «ñ¡«óαѼѡ¡«Ñ
  2410.      ¿ß»«½∞º«óá¡¿Ñ    ñαπú«⌐   TSR-»α«úαá¼¼δ,   αáºαáí«Γá¡¡«⌐   ñαπú¿¼
  2411.      »α«úαá¼¼¿ßΓ«¼,   »«ß¬«½∞¬π   «íÑ   »α«úαá¼¼δ    íπñπΓ    »δΓáΓ∞ß∩
  2412.      »Ñαѡạáτ¿Γ∞  áñαÑß  »α«úαá¼¼δ  «íαáí«Γ¬¿ »αÑαδóá¡¿∩ 9 ó Γáí½¿µÑ
  2413.      óÑ¬Γ«α«ó   ¡á   ßÑí∩.   ìÑß«¼¡Ñ¡¡«,   »α¿   ¿ß»«½∞º«óá¡¿¿   ßó«¿σ
  2414.      TSR-»α«úαá¼¼  óδ  ¼«ªÑΓÑ ¿ºíѪáΓ∞ Γᬫú« α«ñá »α«í½Ñ¼,  ¡« íπñ∞ΓÑ
  2415.      ó¡¿¼áΓѽ∞¡δ,   Ñß½¿   ó   óáΦÑ⌐   ß¿ßΓѼѠ  »α¿ßπΓßΓóπÑΓ    τπªá∩
  2416.      TSR-»α«úαá¼¼á.
  2417.  
  2418.  
  2419.  
  2420.  
  2421.  
  2422.  
  2423.  
  2424.  
  2425.  
  2426.  
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448.  
  2449.  
  2450.  
  2451.  
  2452.  
  2453.  
  2454.  
  2455.  
  2456.  
  2457.  
  2458.  
  2459.  
  2460.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2461.