home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / c-book.doc / t2.cod < prev    next >
Encoding:
Text File  |  1990-10-26  |  81.2 KB  |  2,015 lines

  1.           ä½∩ Γ«ú«,  τΓ«íδ  »«¡∩Γ∞,  ¬á¬  ¼«ª¡«   ¿ß»«½∞º«óáΓ∞   «¬¡á,
  2.      ¡Ñ«íσ«ñ¿¼«  º¡áΓ∞,  ¬á¬¿Ñ  ñÑ⌐ßΓó¿∩  ß  «¬¡á¼¿  ¼«ª¡«  óδ»«½¡∩Γ∞.
  3.      Å«¼¡¿ΓÑ,  τΓ« «¬¡«¼  ∩ó½∩ÑΓß∩  »α∩¼«πú«½∞¡á∩  «í½áßΓ∞  ¡á  φ¬αá¡Ñ
  4.      ñ¿ß»½Ñ∩.  Ä¬¡á ¿¼ÑεΓ ¿ ñαπú¿Ñ ßó«⌐ßΓóá,  ¡« ú½áó¡«Ñ, τΓ« «Γ½¿τáÑΓ
  5.      ¿σ «Γ ñαπú¿σ Γ¿»«ó φ¬αá¡¡δσ ¿º«íαáªÑ¡¿⌐, - φΓ« ¿σ ß»«ß«í¡«ßΓ∞ ¬á¬
  6.      íδ óß»½δóáΓ∞ ¿ »«úαπªáΓ∞ß∩ «Γ¡«ß¿Γѽ∞¡« «ßΓá½∞¡«ú« ¿º«íαáªÑ¡¿∩.
  7.  
  8.           ê¡Σ«α¼áµ¿∩, ¬«Γ«αá∩     ß«ñÑαªá½áß∞     ó    ß««ΓóÑΓßΓóπεΘÑ⌐
  9.      »α∩¼«πú«½∞¡«⌐ «í½áßΓ¿ φ¬αá¡á ñ«  »«∩ó½Ñ¡¿∩  ¡«ó«ú«  «¬¡á,  ñ«½ª¡á
  10.      ß«σαá¡∩Γ∞ß∩.  Ä¬¡«  ¡á¬½áñδóáÑΓß∩  ¡á »αÑñΦÑßΓóπεΘÑÑ ¿º«íαáªÑ¡¿Ñ,
  11.      ¬á¬ íδ  óß»½δóáÑΓ.  è«úñá  «¬¡«  π¡¿τΓ«ªáÑΓß∩  (»«úαπªáÑΓß∩),  Γ«
  12.      ¿¡Σ«α¼áµ¿∩,   ¬«Γ«αá∩   íδ½á   ñ«   Ñú«  »«∩ó½Ñ¡¿∩,  ñ«½ª¡á  íδΓ∞
  13.      ó«ßßΓá¡«ó½Ñ¡á.  Æá τáßΓ∞ ¿º«íαáªÑ¡¿∩,  ¡á  ¬«Γ«απε  ¡á¬½áñδóáÑΓß∩
  14.      ¡«ó«Ñ «¬¡«,  ΓᬪѠ¼«ªÑΓ ß«ñÑαªáΓ∞ «¬¡á. ìá α¿ß. 5.3 »αÑñßΓáó½Ñ¡«
  15.      ¿º«íαáªÑ¡¿Ñ ¡á φ¬αá¡Ñ ñ¿ß»½Ñ∩,  ¬«Γ«α«Ñ ß«ñÑαª¿Γ ¡Ñ߬«½∞¬«  «¬«¡,
  16.      »α¿τѼ   ¬áªñ«Ñ   »«ß½ÑñπεΘÑÑ   «¬¡«   ¡á¬½áñδóáÑΓß∩   ¡á   τáßΓ∞
  17.      »αÑñδñπΘÑú«.
  18.  
  19.  
  20.      ┌───────────────────────────────────────────────────────────┐
  21.      │             ┌────────────────────────────┐                │
  22.      │             │                            │                │
  23.      │             │                            │                │
  24.      │             │                  ┌─────────┴──────┐         │
  25.      │             │                  │                │         │
  26.      │ ┌───────────┤                  │   Ä¬¡«  D      │         │
  27.      │ │           │          Ä¬¡«  B │                │         │
  28.      │ │           │                  │                │         │
  29.      │ │           │   ┌──────────────┤                ├──┐      │
  30.      │ │           │   │  Ä¬¡«  C     │                │  │      │
  31.      │ │        Ä¬¡│   │     ┌────────┴────────────────┴─┐│      │
  32.      │ │           │   │     │                           ││      │
  33.      │ │           │   │     │                           ││      │
  34.      │ │           └───┤     │        Ä¬¡«  E            ││      │
  35.      │ │               │     │                           ││      │
  36.      │ └───────────────┤     │                           ││      │
  37.      │                 │     └────────┬────────────────┬─┘│      │
  38.      │                 │              └────────────────┘  │      │
  39.      │                 └──────────────────────────────────┘      │
  40.  
  41.                              - 2 -
  42.      │                                                           │
  43.      │                                                           │
  44.      └───────────────────────────────────────────────────────────┘
  45.  
  46.                  É¿ß. 5.2  ìὫªÑ¡¿Ñ ¡Ñ߬«½∞¬¿σ «¬«¡
  47.  
  48.  
  49.           àß½¿ íδ ¬áªñá∩ »α«úαá¼¼á,  αáí«ΓáεΘá∩ ß «¬¡á¼¿,  ñ«½ª¡á íδ½á
  50.      π»αáó½∩Γ∞ αẼÑΘÑ¡¿Ñ¼ «¬«¡ ¿ ó«ßßΓá¡áó½¿óáΓ∞  ß«ñÑন¼«Ñ  φ¬αá¡á,
  51.      ¬«Γ«α«Ñ  í佫 ñ« ¿σ »«∩ó½Ñ¡¿∩,  Γ« ß«ºñá¡¿Ñ ¿ ß«»α«ó«ªñÑ¡¿Ñ Γᬿσ
  52.      »α«úαá¼¼ í佫  íδ  «τÑ¡∞ Γαπñ¡δ¼ ñѽ«¼.   è  ßτáßΓ∞ε,  ó φΓ«¼ ¡ÑΓ
  53.      ¡Ñ«íσ«ñ¿¼«ßΓ¿.  Å«ß¬«½∞¬π Σπ¡¬µ¿¿ ¿ ßó«⌐ßΓóá «¬«¡ ∩ó½∩εΓß∩ «íΘ¿¼¿
  54.      ñ½∩ αạδσ »α¿¼Ñ¡Ñ¡¿⌐,  Γ« ¼«ª¡« ¿ß»«½∞º«óáΓ∞  í¿í½¿«ΓѬπ Σπ¡¬µ¿⌐
  55.      «íΘÑú« ¡áº¡áτÑ¡¿∩ ñ½∩  αáí«Γδ ß «¬¡á¼¿.  ìáßΓ«∩Θá∩ ¬¡¿úá ß«ñÑনΓ
  56.      Γá¬πε í¿í½¿«ΓѬπ, ÑÑ Σπ¡¬µ¿¿ «»¿ßá¡δ ó αáºñѽѠ6.
  57.  
  58.           Äß¡«ó¡δσ «»Ñαᵿ⌐  »«  αáí«ΓÑ  ß  «¬¡á¼¿,  ¿ß»«½∞ºπεΘ¿σß∩  ó
  59.      í«½∞Φ¿¡ßΓóÑ »α«úαá¼¼,  ¡Ñ Γá¬ πª ¼¡«ú«,  ¿ «¡¿ ¡Ñ ß½¿Φ¬«¼ ß½«ª¡δ.
  60.      Åα¿ αáí«ΓÑ ß «¬¡á¼¿ óá¼ ¡Ñ«íσ«ñ¿¼« πßΓá¡«ó¿Γ∞ «¬¡«, «»αÑñѽ¿ó Ñú«
  61.      αẼÑαδ   ¿   ¼ÑßΓ«»«½«ªÑ¡¿Ñ.   éδ   ¿¼ÑÑΓÑ   ó«º¼«ª¡«ßΓ∞   ΓᬪÑ
  62.      πßΓá¡áó½¿óáΓ∞ Ñú« µóÑΓá,  úαá¡¿µπ ¿ ºáú«½«ó«¬.  éδ ¼«ªÑΓÑ ó»¿ßáΓ∞
  63.      ßó«⌐ ΓѬßΓ  ó¡πΓα∞  «¬¡á,  á  ΓᬪѠ »α¿  ¡Ñ«íσ«ñ¿¼«ßΓ¿  ¿º¼Ñ¡∩Γ∞
  64.      ¼ÑßΓ«»«½«ªÑ¡¿Ñ  «¬¡á.  ìᬫ¡Ñµ,  óδ ¼«ªÑΓÑ πñ὿Γ∞ «¬¡« ß φ¬αá¡á,
  65.      ó«ßßΓá¡«ó¿ó »α¿ φΓ«¼  ¿º«íαáªÑ¡¿Ñ,  ¬«Γ«α«Ñ  í佫  ¡á  φ¬αá¡Ñ  ñ«
  66.      »«∩ó½Ñ¡¿∩   «¬¡á.   Äß¡«óδóá∩ß∞  ¡á  φΓ¿σ  «»Ñαᵿ∩σ,  óδ  ¼«ªÑΓÑ
  67.      ß«ºñáóáΓ∞ »α«úαá¼¼δ,  ¬«Γ«αδÑ  ¿ß»«½∞ºπεΓ  τáαπεΘ¿Ñ  ¼¡«ú«µóÑΓ∞Ѽ
  68.      ¬αáß«¬  «¬¡á  ó  ¬áτÑßΓóÑ »«½∞º«óáΓѽ∞߬«ú« ¿¡ΓÑαΣÑ⌐ßá.  (æ½ÑñπÑΓ
  69.      »«¼¡¿Γ∞, τΓ« ¿ß»«½∞º«óá¡¿Ñ φΣΣÑ¬Γ¿ó¡«⌐ í¿í½¿«ΓѬ¿ ßἫ »« ßÑíÑ ¡Ñ
  70.      úáαá¡Γ¿απÑΓ   óδß«¬«Ñ   ¬áτÑßΓó«  »«½∞º«óáΓѽ∞߬¿σ  σáαá¬ΓÑα¿ßΓ¿¬
  71.      αáºαáíáΓδóáѼ«⌐ »α«úαá¼¼δ. Åα«úαá¼¼¿ßΓ ñ«½ªÑ¡ ¿ß»«½∞º«óáΓ∞ ó¼ÑßΓÑ
  72.      ß   «¬¡á¼¿  ΓᬪѠ ºóπ¬«óδÑ  φΣΣѬΓδ  ¿  ñαπú¿Ñ  ¿¡ßΓαπ¼Ñ¡Γá½∞¡δÑ
  73.      »α«úαá¼¼¡δÑ ßαÑñßΓóá).
  74.  
  75.           ùΓ«íδ »«¡∩Γ∞, ¬á¬ ¼«ª¡« π»αáó½∩Γ∞ ¿º«íαáªÑ¡¿Ñ¼ ¡á φ¬αá¡Ñ, óδ
  76.      ñ«½ª¡δ  αẫíαáΓ∞ß∩  ó  «αúá¡¿ºáµ¿¿ ó¿ñÑ«»á¼∩Γ¿.  Åα¿ó«ñ¿¼δÑ ¡¿ªÑ
  77.      ßóÑñÑ¡¿∩ »αÑñßΓáó½∩εΓ ß«í«⌐ óóÑñÑ¡¿Ñ  ó  áασ¿ΓѬΓπαπ  ó¿ñÑ«»á¼∩Γ¿
  78.      IBM  PC.  ä½∩ »«½πτÑ¡¿∩ ¿ßτÑα»δóáεΘÑ⌐ ¿¡Σ«α¼áµ¿¿ »« φΓ«¼π ó«»α«ßπ
  79.  
  80.                              - 3 -
  81.      «íαáΘá⌐ΓÑß∞ ¬ "Éπ¬«ó«ñßΓóπ Å¿ΓÑαá ì«αΓ«¡á  ñ½∩  »α«úαá¼¼¿ßΓ«ó  »«
  82.      IBM PC" (Å¿ΓÑα ì«αΓ«¡, îicrosoft Press, 1985).
  83.  
  84.  
  85.  
  86.              Çασ¿ΓѬΓπαá ó¿ñÑ«»á¼∩Γ¿
  87.      -----------------------------------------------------------------
  88.  
  89.           æ¿ßΓѼá Σ«α¼¿α«óá¡¿∩   ¿º«íαáªÑ¡¿∩   ∩ó½∩ÑΓß∩   ¡Ñ«ΓΩѼ½Ñ¼«⌐
  90.      τáßΓ∞ε  Å¥éî  IBM PC.  é  í«½ÑÑ αá¡¡¿σ  ¼«ñѽ∩σ  »Ñαß«¡á½∞¡δσ ¥éî
  91.      ó¿ñÑ«ΓÑନ¡á½δ   »«ñ¬½ετ὿ß∞   τÑαѺ    »«ß½Ññ«óáΓѽ∞¡δÑ   »«αΓδ
  92.      óó«ñá/óδó«ñá,  ¡« á»»áαáΓ¡á∩ áασ¿ΓѬΓπαá IBM PC ó¬½ετáÑΓ ó ßÑí∩ ¿
  93.      ó¿ñѫ߿ßΓѼπ.
  94.  
  95.           ÅαÑñ¡áº¡áτÑ¡¡«Ñ ñ½∩ óδó«ñá ¡á φ¬αá¡ ¿º«íαáªÑ¡¿Ñ  ß«ºñáÑΓß∩ ó
  96.      ó¿ñÑ«»á¼∩Γ¿.  é  IBM PC ó ¬áτÑßΓóÑ ó¿ñÑ«»á¼∩Γ¿ ¿ß»«½∞ºπÑΓß∩ τáßΓ∞
  97.      «»ÑαáΓ¿ó¡«⌐ »á¼∩Γ¿.  é¿ñÑ«»á¼∩Γ∞  ñ«ßΓπ»¡á  ñ½∩  τΓÑ¡¿∩  ¿ ºá»¿ß¿
  98.      »α«µÑßß«απ  ¿,   ß½Ññ«óáΓѽ∞¡«, óáΦ¿¼ »α«úαá¼¼á¼. é¿ñÑ«»α«µÑßß«α,
  99.      óσ«ñ∩Θ¿⌐  ó ß«ßΓáó ó¿ñÑ«¬«¡Γα«½½Ñαá,   »« ß«ñÑন¼«¼π ó¿ñÑ«»á¼∩Γ¿
  100.      »«ßΓ«∩¡¡«   Σ«α¼¿απÑΓ   ¿º«íαáªÑ¡¿Ñ ¡á  φ¬αá¡Ñ  ñ¿ß»½Ñ∩.  Å«φΓ«¼π
  101.      ¬áªñδ⌐ ¡«óδ⌐ ß¿¼ó«½,   ºá»¿ßá¡¡δ⌐ ó ó¿ñÑ«»á¼∩Γ∞, »«τΓ¿ ¡Ñ¼Ññ½Ñ¡¡«
  102.      »«∩ó½∩ÑΓß∩   ¡á  φ¬αá¡Ñ.   Å«ß¬«½∞¬π   ó¿ñÑ«»á¼∩Γ∞  ñ«ßΓπ»¡á  ñ½∩
  103.      ¼¿¬α«»α«µÑßß«αá,     Γ«    ß¬«α«ßΓ∞    Σ«α¼¿α«óá¡¿∩   ¿º«íαáªÑ¡¿∩
  104.      ß««ΓóÑΓßΓóπÑΓ   ß¬«α«ßΓ¿  »ÑαÑß佬¿  ß«ñÑন¼«ú«  »á¼∩Γ¿, ¬«Γ«αá∩
  105.      »αÑóδΦáÑΓ ß¬«α«ßΓ∞ »ÑαÑñáτ¿ ñá¡¡δσ »α¿ »«ñ¬½ετÑ¡¿¿ ó¿ñÑ«ΓÑନ¡á½á
  106.      τÑαѺ »«ß½Ññ«óáΓѽ∞¡δÑ »«αΓδ óó«ñá/óδó«ñá.
  107.  
  108.           ÇñαÑßá ó¿ñÑ«»á¼∩Γ¿ ¿ ÑÑ σáαá¬ΓÑα¿ßΓ¿¬¿ ∩ó½∩εΓß∩ ßΓá¡ñáαΓ¡δ¼¿
  109.      ñ½∩ óßÑσ Å¥éî ½¿¡¿¿ IBM PC, á ΓᬪѠ߫ó¼ÑßΓ¿¼δσ ß ¡¿¼¿.
  110.  
  111.           Å¥éî Γ¿»á IBM PC  ¼«ªÑΓ  ¿¼ÑΓ∞  «ñ¡π  ¿º  ΓαÑσ  ó¿ñѫ߿ßΓѼ,
  112.      ¿ß»«½∞ºπεΘ¿σ  αẽ¿τ¡δÑ  Γ¿»δ  ó¿ñÑ«¼«¡¿Γ«α«ó  ¿,  ß½Ññ«óáΓѽ∞¡«,
  113.      αẽ¿τ¡δÑ Γ¿»δ ó¿ñÑ«¬«¡Γα«½½Ñα«ó.  é¿ñÑ«¬«¡Γα«½½Ñα  »Ñαó«ú«  Γ¿»á
  114.      ¡áºδóáÑΓß∩  î«¡«σα«¼¡δ¼  Çñá»ΓÑα«¼  (îÇ),  «¡ «íÑß»Ñτ¿óáÑΓ αáí«Γπ
  115.      Γ«½∞¬«  ¼«¡«σα«¼¡«ú«  ó¿ñÑ«¼«¡¿Γ«αá  ó  ß¿¼ó«½∞¡«¼  αѪ¿¼Ñ  ¿  ¡Ñ
  116.      »«ññÑনóáÑΓ  úαáΣ¿τÑ߬«ú«  αѪ¿¼á.  é¿ñÑ«¬«¡Γα«½½Ñα óΓ«α«ú« Γ¿»á
  117.      ¡áºδóáÑΓß∩  ûóÑΓ¡δ¼  âαáΣ¿τÑ߬¿¼  Çñá»ΓÑα«¼  (CGA).   æ   »«¼«Θ∞ε
  118.  
  119.                              - 4 -
  120.      ¬«¡Γα«½½Ñαá  CGA  »«ñ¬½ετáÑΓß∩  µóÑΓ¡«⌐  ¼«¡¿Γ«α,  ¬«Γ«αδ⌐  ¼«ªÑΓ
  121.      αáí«ΓáΓ∞ ó ñóπσ αẽ¿τ¡δσ αѪ¿¼áσ.  é ß¿¼ó«½∞¡«¼  αѪ¿¼Ñ  ¿¼ÑÑΓß∩
  122.      ó«º¼«ª¡«ßΓ∞ óδí¿αáΓ∞ µóÑΓ Σ«¡á ¿ µóÑΓ ß¿¼ó«½á ¿º ó«ß∞¼¿ ó«º¼«ª¡δσ
  123.      µóÑΓ«ó,  á ΓᬪѠ«ñ¿¡ ¿º ñóπσ  πα«ó¡Ñ⌐  ¿¡Γѡ߿ó¡«ßΓ¿  µóÑΓá  ñ½∩
  124.      ß¿¼ó«½á.   é   úαáΣ¿τÑ߬«¼  αѪ¿¼Ñ  ¡¿º¬«ú«  αáºαÑΦÑ¡¿∩  (640x200
  125.      αáßΓα«óδσ Γ«τѬ) ¼«ª¡« αáí«ΓáΓ∞ Γ«½∞¬«  ß  «ñ¡¿¼  µóÑΓ«¼.  ÆαÑΓ¿⌐
  126.      ó¿ñÑ«¬«¡Γα«½½Ñα    ¡áºδóáÑΓß∩   ôß«óÑαΦÑ¡ßΓó«óá¡¡δ¼   âαáΣ¿τÑ߬¿¼
  127.      Çñá»ΓÑα«¼ (EGA),  ¬«Γ«αδ⌐ »«ññÑনóáÑΓ Γᬫ⌐ ªÑ ß¿¼ó«½∞¡δ⌐ αѪ¿¼,
  128.      τΓ«  ¿  CGA,  ¿  ¼¡«ú«µóÑΓ¡δ⌐  úαáΣ¿τÑ߬¿⌐  αѪ¿¼  í«½ÑÑ óδß«¬«ú«
  129.      αáºαÑΦÑ¡¿∩.
  130.  
  131.           Åα¿óÑñÑ¡¡δÑ ó  ñá¡¡«⌐  ¬¡¿úÑ  »α«úαá¼¼δ  αáí«ΓáεΓ ß ½εíδ¼ ¿º
  132.      φΓ¿σ ¬«¡Γα«½½Ñα«ó ó ß¿¼ó«½∞¡«¼ αѪ¿¼Ñ.  Å«ß¬«½∞¬π ó  φΓ«¼  αѪ¿¼Ñ
  133.      ¬«¡Γα«½½Ñαδ   CGA   ¿   EGA   Σπ¡¬µ¿«¡á½∞¡«    φ¬ó¿óá½Ñ¡Γ¡δ,   Γ«
  134.      ¡¿ªÑß½ÑñπεΘ¿Ñ  αáßßπªñÑ¡¿∩   ñ½∩  CGA  «Γ¡«ß∩Γß∩   ¬  «í«¿¼  φΓ¿¼
  135.      ¬«¡Γα«½½Ñαá¼.
  136.  
  137.           é¿ñÑ«»á¼∩Γ∞ «αúá¡¿º«óá¡á ó ó¿ñÑ ñóπ¼Ñα¡«ú« ¼áßß¿óá ß¿¼ó«½«ó,
  138.      ß«ßΓ«∩ΘÑú« ¿º α∩ñ«ó ¿ ¬«½«¡«¬. àÑ ¼«ª¡« αáßß¼áΓα¿óáΓ∞ ¿ ¬á¬ ¡áí«α
  139.      ß½ÑñπεΘ¿σ ñαπú ºá ñαπú«¼ 16-αáºα∩ñ¡δσ ß½«ó,  »« «ñ¡«¼π ¡á  ¬áªñδ⌐
  140.      ß¿¼ó«½. èáªñδ⌐ α∩ñ ß«ñÑαª¿Γ 80 ß½ÑñπεΘ¿σ ñαπú ºá ñαπú«¼ ß¿¼ó«½«ó,
  141.      óßÑ  «¡¿ «íαáºπεΓ  25  ß½ÑñπεΘ¿σ ñαπú  ºá  ñαπú«¼  ¬«½«¡«¬. æ½«ó«
  142.      ß«ñÑαª¿Γ  ¿¡Σ«α¼áµ¿ε  «í  «ñ¡«¼   ß¿¼ó«½Ñ   ¿   ß«ßΓ«¿Γ  ¿º  ñóπσ
  143.      ó«ß∞¼¿í¿Γ¡δσ íá⌐Γ:  «ñ¿¡ -  ñ½∩ ASCII-¬«ñá ß¿¼ó«½á,  óΓ«α«⌐ - ñ½∩
  144.      áΓα¿íπΓ«ó  ß¿¼ó«½á,  «»αÑñѽ∩εΘ¿σ   Ñú«  ¿º«íαáªÑ¡¿Ñ.   è«ñ ASCII
  145.      ºá»¿ßá¡ ó ¼½áñΦѼ (»αáó«¼) íá⌐ΓÑ ß½«óá.
  146.  
  147.           é¿ñÑ«»á¼∩Γ∞ ¬«¡Γα«½½Ñαá  îÇ  «αúá¡¿º«óá¡á   ó   ó¿ñÑ   «ñ¡«⌐
  148.      ßΓαá¡¿µδ,  á ¬«¡Γα«½½Ñαá CGA - ó ó¿ñÑ τÑΓδαÑσ ßΓαá¡¿µ.  Åα«úαá¼¼δ
  149.      ¿º φΓ«⌐  ¬¡¿ú¿  ¿ß»«½∞ºπεΓ  Γ«½∞¬«  »Ñαóπε  ßΓαá¡¿µπ  ó¿ñÑ«»á¼∩Γ¿
  150.      ¬«¡Γα«½½Ñαá CGA.
  151.  
  152.           é¿ñÑ«»á¼∩Γ∞ αáß»«½«ªÑ¡á   ó   óÑασ¡¿σ   «í½áßΓ∩σ  ñ«ßΓπ»¡«ú«
  153.      »α«µÑßß«απ   áñαÑß¡«ú«   »α«ßΓαá¡ßΓóá.   Éáºαáí«Γτ¿¬¿   IBM   PC,
  154.      ßΓ«½¬¡πóΦ¿ß∞  ß  «úαá¡¿τÑ¡¿Ñ¼  ¡á  ¼á¬ß¿¼á½∞¡δ⌐ «íΩѼ áñαÑßπѼ«ú«
  155.      áñαÑß¡«ú«  »α«ßΓαá¡ßΓóá   ó   1   ¼Ñúáíá⌐Γ,   αÑΦ¿½¿   αẼÑßΓ¿Γ∞
  156.      ó¿ñÑ«»á¼∩Γ∞  ¿  Åçô  üẫó«⌐  æ¿ßΓÑ¼δ  éó«ñá-éδó«ñá  (ROM BIOS) ó
  157.  
  158.                              - 5 -
  159.      óÑασ¡¿σ «í½áßΓ∩σ φΓ«ú« »α«ßΓαá¡ßΓóá.  ä½∩ Γ«ú«,  τΓ«íδ  »«ºó«½¿Γ∞
  160.      ¬«¡Γα«½½Ñαá¼   îÇ   ¿  CGA  αáí«ΓáΓ∞  ß«ó¼ÑßΓ¡«  ¡á  «ñ¡«⌐  Å¥éî,
  161.      αáºαáí«Γτ¿¬¿ ¡áº¡áτ¿½¿ αẽ¿τ¡δÑ áñαÑßá ßÑú¼Ñ¡Γ«ó ó¿ñÑ«»á¼∩Γ¿ ñ½∩
  162.      αạδ󠬫¡Γα«½½Ñα«ó.  Åá¼∩Γ∞ ¬«¡Γα«½½Ñαá îÇ ¡áτ¿¡áÑΓß∩ ó ßÑú¼Ñ¡ΓÑ
  163.      0xB000,  á »á¼∩Γ∞ ¬«¡Γα«½½Ñαá CGA - ó ßÑú¼Ñ¡ΓÑ 0xB800.  Åα«úαá¼¼á
  164.      ¼«ªÑΓ  «»αÑñѽ¿Γ∞,  ¬á¬«⌐  ¿º  ¬«¡Γα«½½Ñα«ó  ¿ß»«½∞ºπÑΓß∩,  »πΓѼ
  165.      ó맮óá ß««ΓóÑΓßΓóπεΘÑ⌐ Σπ¡¬µ¿¿  ROM  BIOS,  ¿  ¡áßΓα«¿Γ∞ß∩  Γᬿ¼
  166.      «íαẫ¼  ¡á ß««ΓóÑΓßΓóπεΘ¿⌐ áñαÑß ßÑú¼Ñ¡Γá ó¿ñÑ«»á¼∩Γ¿. Å«ß¬«½∞¬π
  167.      áασ¿ΓѬΓπαá ó¿ñÑ«»á¼∩Γ¿ ñ½∩ Γ«ú«  ¿  ñαπú«ú«  ß½πτá∩  ó  «ß¡«ó¡«¼
  168.      «ñ¿¡á¬«óá,  Γ«  ¡Ñ«íσ«ñ¿¼δÑ ñÑ⌐ßΓó¿∩ »« ¡áßΓα«⌐¬Ñ »α«úαá¼¼δ íπñπΓ
  169.      ¼¿¡¿¼á½∞¡δ¼¿.
  170.  
  171.           üá⌐Γ áΓα¿íπΓ«ó  ß¿¼ó«½á  ß«ñÑαª¿Γ   2   ΓαÑσαáºα∩ñ¡δσ   »«½∩
  172.      ¬«ñ¿α«óá¡¿∩  µóÑΓá  («ñ¡« ñ½∩ µóÑΓá Σ«¡á ß¿¼ó«½á ¿ «ñ¡« ñ½∩ µóÑΓá
  173.      ßἫú« ß¿¼ó«½á),  αáºα∩ñ ñ½∩ ºáñá¡¿∩ πα«ó¡∩  ¿¡Γѡ߿ó¡«ßΓ¿  µóÑΓá
  174.      ß¿¼ó«½á  ¿  αáºα∩ñ  ñ½∩ πßΓᡫ󬿠αѪ¿¼á ¼Ñαµá¡¿∩ ß¿¼ó«½á »α¿ Ñú«
  175.      «Γ«íαáªÑ¡¿¿.  ìá  α¿ß.  5.4   »αÑñßΓáó½Ñ¡á   ¬«¡Σ¿úπαᵿ∩   íá⌐Γá
  176.      áΓα¿íπΓ«ó.
  177.  
  178.  
  179.      ┌────┬────┬────┬────┬────┬────┬────┬────┐
  180.      │    │    │    │    │    │    │    │    │
  181.      │ B  │ R  │ G  │ B  │ I  │ R  │ G  │ B  │
  182.      │    │    │    │    │    │    │    │    │
  183.      └─┬──┼────┴────┴────┼──┬─┼────┴────┴────┤
  184.        │  └───────┬──────┘  │ └───────┬──────┘
  185.        │          │         │         │
  186.        │          │         │         └─────── µóÑΓ ß¿¼ó«½á
  187.        │          │         │
  188.        │          │         └───────────────── ¿¡Γѡ߿ó¡«ßΓ∞ µóÑΓá
  189.        │          │                                        ß¿¼ó«½á
  190.        │          └─────────────────────────── µóÑΓ Σ«¡á
  191.        │
  192.        └────────────────────────────────────── ¼Ñαµá¡¿Ñ ß¿¼ó«½á
  193.  
  194.  
  195.                 É¿ß. 5.4   üá⌐Γ áΓα¿íπΓ«ó ß¿¼ó«½á
  196.  
  197.                              - 6 -
  198.  
  199.  
  200.           è«¼í¿¡áµ¿¿ ¬αáß¡«⌐,  ºÑ½Ñ¡«⌐ ¿ ú«½πí«⌐ µóÑΓ«óδσ ß«ßΓáó½∩εΘ¿σ
  201.      »«ºó«½∩εΓ »«½πτ¿Γ∞ ¡áí«α ¿º ó«ß∞¼¿ «ΓτÑΓ½¿ó«  αẽ¿τáѼδσ µóÑΓ«ó:
  202.      íѽ«ú«, ¬αáß¡«ú«, ºÑ½Ñ¡«ú«, ú«½πí«ú«, ß¿¡Ñú«, ¼á½¿¡«ó«ú«, ªÑ½Γ«ú«
  203.      ¿ τÑα¡«ú«.  êß»«½∞º«óá¡¿Ñ αáºα∩ñá ¿¡Γѡ߿ó¡«ßΓ¿ ñ½∩ µóÑΓá ß¿¼ó«½á
  204.      »«ºó«½∩ÑΓ »«½πτ¿Γ∞ ÑΘÑ ó«ßѼ∞ ñ«»«½¡¿Γѽ∞¡δσ «ΓΓÑ¡¬«ó µóÑΓá.
  205.  
  206.           é ß½πτáÑ  ¿ß»«½∞º«óá¡¿∩ î«¡«σα«¼¡«ú« Çñá»ΓÑαá º¡áτÑ¡¿Ñ íá⌐Γá
  207.      áΓα¿íπΓ«ó  ¡Ñ¼¡«ú«  «Γ½¿τáÑΓß∩  «Γ  «»¿ßá¡¡«ú«  óδΦÑ.   Å«ß¬«½∞¬π
  208.      ó«º¼«ª¡«ßΓ∞   ¿ß»«½∞º«óá¡¿∩   αẽ¿τ¡δσ µóÑΓ«ó  ¡Ñ »«ññÑনóáÑΓß∩
  209.      ¬«¡Γα«½½Ñα«¼ îÇ,  Γ« αáºαÑΦÑ¡δ Γ«½∞¬« ¬«¼í¿¡áµ¿¿  íѽ«ú«  ß¿¼ó«½á
  210.      ¡á τÑα¡«¼  Σ«¡Ñ ¿½¿ τÑα¡«ú«  ß¿¼ó«½á ¡á íѽ«¼  Σ«¡Ñ.  äαπú¿Ñ ¬«ñδ
  211.      µóÑΓá  ñáεΓ  ¬«¼í¿¡áµ¿¿  τÑα¡«ú« ¡á  τÑα¡«¼ ¿½¿  íѽ«ú« ¡á íѽ«¼.
  212.      ò«Γ∩  ß½ÑñπÑΓ   «Γ¼ÑΓ¿Γ∞,   τΓ«   ¬«¼í¿¡áµ¿∩   ú«½πí«ú« ß¿¼ó«½á ¿
  213.      τÑα¡«ú« Σ«¡á Σ«α¼¿απÑΓ ¿º«íαáªÑ¡¿Ñ »«ñτÑભπΓ«ú«  ß¿¼ó«½á, τΓ« ¡Ñ
  214.      »«ññÑনóáÑΓß∩ πªÑ ¬«¡Γα«½½Ñα«¼ CGA.   î«¡«σα«¼¡δ⌐ Çñá»ΓÑα, ¬á¬ ¿
  215.      CGA,  »«ññÑনóáÑΓ  ó«º¼«ª¡«ßΓ¿  ºáñá¡¿∩  ¿¡Γѡ߿ó¡«ßΓ¿  µóÑΓá  ¿
  216.      αѪ¿¼á ¼Ñαµá¡¿∩ ß¿¼ó«½á.
  217.  
  218.           Å«ß¬«½∞¬π óδ ΓÑ»Ñα∞ º¡áÑΓÑ,  úñÑ αẼÑΘÑ¡á ó¿ñÑ«»á¼∩Γ∞ ¿ τΓ«
  219.      ó ¡ÑÑ ¼«ªÑΓ íδΓ∞ ºá»¿ßá¡«, Γ« ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ »α«úαá¼¼π pokes
  220.      ¿º  í¿í½¿«ΓѬ¿  Æπαí«  æ¿  ñ½∩ Σ«α¼¿α«óá¡¿∩ ¿º«íαáªÑ¡¿∩ ¡á φ¬αá¡Ñ
  221.      ñ¿ß»½Ñ∩.  ì¿ªÑ »α¿ó«ñ¿Γß∩  ½¿ßΓ¿¡ú  5.1  ¼á½Ñ¡∞¬«⌐  »α«úαá¼¼δ »«ñ
  222.      ¡áºó᡿Ѽ vidpoke.c,  ¬«Γ«αá∩ ºá»¿ßδóáÑΓ ßΓ᫬π ¡Ñ»«ßαÑñßΓóÑ¡¡« ó
  223.      ó¿ñÑ«»á¼∩Γ∞.   êßσ«ñ∩  ¿º  »αÑñ»«½«ªÑ¡¿∩,  τΓ«  ¡á  óáΦÑ⌐  ¼áΦ¿¡Ñ
  224.      αáí«ΓáÑΓ ¬«¡Γα«½½Ñα CGA,  »α«úαá¼¼á Σ«α¼¿απÑΓ ñ½∩ ¬áªñ«ú« ß¿¼ó«½á
  225.      íá⌐Γ áΓα¿íπΓá ß« º¡áτÑ¡¿Ñ¼ 7, τΓ« ß««ΓóÑΓßΓóπΓ «Γ«íαáªÑ¡¿ε ßΓ᫬¿
  226.      ó  ó¿ñÑ  íѽδσ   ß¿¼ó«½«ó   ¡á τÑα¡«¼ Σ«¡Ñ.   àß½¿ óδ ¿ß»«½∞ºπÑΓÑ
  227.      î«¡«σα«¼¡δ⌐ Çñá»ΓÑα,  ¿º¼Ñ¡¿ΓÑ ó ßΓα«¬Ñ # define VSEG º¡áτÑ¡¿Ñ  ß
  228.      0xB800  ¡á 0xB000.
  229.  
  230.  
  231.              ï¿ßΓ¿¡ú 5.1: vidpoke.c
  232.  
  233.      /* vidpoke.c */
  234.  
  235.  
  236.                              - 7 -
  237.      #define VSEG 0x6800
  238.      char vdata [] =  "ùΓ« ßñѽὠèá¡?";
  239.      main()
  240.      {
  241.      char *vp;
  242.      int v;
  243.      for (v=0, vp = vdata; *vp; v +=2, vp++)
  244.           poke ( VSEG, v, 0x700| *vp);
  245.      }
  246.  
  247.  
  248.  
  249.              "æ¡Ñú" ¿ «íαáΓ¡δ⌐ σ«ñ ½πτá αáºóÑαΓ¬¿
  250.      -----------------------------------------------------------------
  251.  
  252.           àß½¿ óδ   ºá»πßΓ¿ΓÑ   »α«úαá¼¼π   vidpoke.exe  ó  µ¿¬½Ñ  ¿½¿
  253.      º¡áτ¿Γѽ∞¡« πóѽ¿τ¿ΓÑ ñ½¿¡π óδó«ñ¿¼«⌐ ßΓ᫬¿,  Γ« ß¼«ªÑΓÑ πó¿ñÑΓ∞
  254.      ¡á   φ¬αá¡Ñ   Γᬠ  ¡áºδóáѼδ⌐  "ß¡Ñú",  ¬«Γ«αδ⌐  »«∩ó½∩ÑΓß∩  »α¿
  255.      óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ.  éδ íπñÑΓÑ ¡áí½εñáΓ∞ "ß¡Ñú" Γ«½∞¬« ó ß½πτáÑ
  256.      ¿ß»«½∞º«óá¡¿∩ ¬«¡Γα«½½Ñαá CGA ¿½¿ Ñú« á¡á½«úá.  è«¡Γα«½½Ñαδ àGA ¿
  257.      îÇ ¡Ñ ñáεΓ »«ñ«í¡«ú«  φΣΣѬΓá.  êº  ¡¿ªÑß½ÑñπεΘ¿σ  «íΩ∩ߡѡ¿⌐  óδ
  258.      πº¡áÑΓÑ,  »«τѼπ  ó«º¡¿¬áÑΓ  "ß¡Ñú"  ¿  ¬á¬  Ñú«  ¼«ª¡« πßΓαá¡¿Γ∞
  259.      »α«úαá¼¼¡¼¿ ßαÑñßΓóἿ.
  260.  
  261.           "æ¡Ñú" ó«º¡¿¬áÑΓ »α¿  ¿ß»«½∞º«óá¡¿¿  ¬«¡Γα«½½Ñαá  CGA  ¿º-ºá
  262.      «ß«íÑ¡¡«ßΓÑ⌐  á»»áαáΓ¡«⌐  áασ¿ΓѬΓπαδ  ó¿ñѫ߿ßΓѼδ.  Å«ß¬«½∞¬π ¿
  263.      ¼¿¬α«»α«µÑßß«α, ¿ ó¿ñÑ«¬«¡Γα«½½Ñα «íαáΘáεΓß∩ ¬ «ñ¡«⌐ ó¿ñÑ«»á¼∩Γ¿,
  264.      Γ«  ó  ß½πτáÑ  «ñ¡«óαѼѡ¡«ú« «íαáΘÑ¡¿∩ ó«º¡¿¬áÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ∞ ó
  265.      ¬««αñ¿¡¿α«óá¡¿¿   ñ«ßΓπ»á   ¬   »á¼∩Γ¿.  Éáí«Γá  ó¿ñÑ«¬«¡Γα«½½Ñαá
  266.      ß¿¡σα«¡¿º¿α«óá¡á »« óαѼѡ¿ ß αáí«Γ«⌐ ßσÑ¼δ  αáºóÑαΓ¬¿.  é« óαѼ∩
  267.      Σ«α¼¿α«óá¡¿∩ φ½Ñ¼Ñ¡Γá  ¿º«íαáªÑ¡¿∩   ¡á   φ¬αá¡Ñ  ó¿ñÑ«¬«¡Γα«½½Ñα
  268.      ñ«½ªÑ¡  ¿¼ÑΓ∞  ñ«ßΓπ»  ¬  ∩τÑ⌐¬Ñ  »á¼∩Γ¿,  ¬«Γ«αá∩  ß«ñÑαª¿Γ í¿Γ,
  269.      ß««ΓóÑΓßΓóπεΘ¿⌐ φΓ«¼π φ½Ñ¼Ñ¡Γπ  ¿º«íαáªÑ¡¿∩.   é¿ñÑ«»α«µÑßß«α »α¿
  270.      φΓ«¼  ¡Ñ  ¼«ªÑΓ  ªñáΓ∞,  »«ß¬«½∞¬π  «¡  ªÑßΓ¬«  ß¿¡σα«¡¿º¿α«óá¡ ß
  271.      πßΓα«⌐ßΓó«¼    Σ«α¼¿α«óá¡¿∩    αáßΓαá.     æ½Ññ«óáΓѽ∞¡«,    Ñß½¿
  272.      ó¿ñÑ«¬«¡Γα«½½Ñα   ¿    ¼¿¬α«»α«µÑßß«α     »δΓáεΓß∩   «ñ¡«óαѼѡ¡«
  273.      «íαáΓ¿Γ∞ß∩  ¬ «ñ¡«⌐ ¿ Γ«⌐ ªÑ  ∩τÑ⌐¬Ñ  »á¼∩Γ¿,  Γ« ó¿ñÑ«¬«¡Γα«½½Ñα
  274.  
  275.                              - 8 -
  276.      ñ«½ªÑ¡  ¿¼ÑΓ∞   »α¿   φΓ«¼   í«½ÑÑ  óδß«¬¿⌐ »α¿«α¿ΓÑΓ.  é  σ«α«Φ«
  277.      αáºαáí«Γá¡¡«⌐ ß¿ßΓѼѠ¼¿¬α«»α«µÑßß«α íπñÑΓ ¡áσ«ñ¿Γ∞ß∩ ó ß«ßΓ«∩¡¿¿
  278.      «ª¿ñá¡¿∩,  »α¿ ¬«Γ«α«¼ ºá»α«ßδ ¼¿¬α«»α«µÑßß«αá  ¬  ó¿ñÑ«»á¼∩Γ¿ ¡Ñ
  279.      »«ßΓπ»áεΓ.   é ¬«¡Γα«½½Ñαáσ îÇ ¿ EGA ¿ß»«½∞º«óá¡ φëà »α¿¡µ¿», ¿
  280.      óδ  ¼«ªÑΓÑ  ¡Ñ  íÑß»«¬«¿Γ∞ß∩  «   ¬«¡Σ½¿¬Γ¡δσ   ß¿Γπᵿ∩σ   ¼Ñªñπ
  281.      ¼¿¬α«»α«µÑßß«α«¼ ¿ ó¿ñÑ«¬«¡Γα«½½Ñα«¼ »α¿  ñ«ßΓπ»Ñ  ¬ ó¿ñÑ«»á¼∩Γ¿.
  282.      ì« ó ¬«¡Γα«½½ÑαÑ CGA ó ß¿¼ó«½∞¡«¼ αѪ¿¼Ñ   φΓ«ú«  ¡Ñ óδ»«½¡∩ÑΓß∩,
  283.      »«φΓ«¼π óδ ñ«½ª¡δ ßἿ »αÑñ»α¿¡¿¼áΓ∞ ¡Ñ¬«Γ«αδÑ ñÑ⌐ßΓó¿∩.
  284.  
  285.           é ß½πτáÑ ¿ß»«½∞º«óá¡¿∩ ¬«¡Γα«½½Ñαá CGA, Ñß½¿ ¼¿¬α«»α«µÑßß«απ
  286.      ¡πª¡« «íαáΓ¿Γ∞ß∩ ¬ ó¿ñÑ«»á¼∩Γ¿ ñ½∩ τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿,  Γ« φΓ« Ñ¼π
  287.      αáºαÑΦáÑΓß∩,  á ó¿ñÑ«¬«¡Γα«½½Ñαπ ñ«ßΓπ» ¡á φΓ« óαѼ∩ ºá»αÑΘáÑΓß∩.
  288.      Ç »«ß¬«½∞¬π αáí«Γá ó¿ñÑ«¬«¡Γα«½½Ñαá ªÑßΓ¬« »α¿ó∩ºá¡á »« óαѼѡ¿ ¬
  289.      Σ«α¼¿α«óá¡¿ε ú«α¿º«¡Γá½∞¡«⌐ ¿ óÑαΓ¿¬á½∞¡«⌐  αáºóÑαΓ«¬  ¡á  φ¬αá¡Ñ
  290.      ¥ïÆ,  Γ« ó¼ÑßΓ« ¿ºó½ÑτÑ¡¡δσ ¿º ó¿ñÑ«»á¼∩Γ¿ ñá¡¡δσ ó¿ñÑ«¬«¡Γα«½½Ñα
  291.      »α¿ Σ«α¼¿α«óá¡¿¿ ¿º«íαáªÑ¡¿∩ ó φΓ«  óαѼ∩  óδ¡πªñÑ¡  ¿ß»«½∞º«óáΓ∞
  292.      ß½πτá⌐¡δÑ  ñá¡¡δÑ.   Å«φΓ«¼π,   ¬«úñá  óáΦá   »α«úαἼᠠ¿º¼Ñ¡∩ÑΓ
  293.      ß«ñÑন¼«Ñ   »á¼∩Γ¿,   ¡á  φ¬αá¡Ñ  ß½πτá⌐¡δ¼   «íαẫ¼  ó«º¡¿¬áεΓ
  294.      ¼ÑαµáεΘ¿Ñ ßóÑΓ½δÑ »∩Γ¡á, ¡áºδóáѼδÑ "ß¡Ñú«¼".
  295.  
  296.           è ßτáßΓ∞ε,  ¬«¡Γα«½½Ñα  CGA  »«ºó«½∩ÑΓ  ¿ºíáó¿Γ∞ß∩  «Γ φΓ«ú«
  297.      αáºñαáªáεΘÑú« ¼Ñαµá¡¿∩.  Åα¿ Σ«α¼¿α«óá¡¿¿ ¿º«íαáªÑ¡¿∩  ¡á  φ¬αá¡Ñ
  298.      ¥ïÆ  φ½Ñ¬Γα«¡¡á∩  »πΦ¬á í«¼íáαñ¿απÑΓ φ½Ñ¬Γα«¡á¼¿ »∩Γ¡á Σ«ßΣ«αá ¡á
  299.      »«óÑασ¡«ßΓ¿  φ¬αá¡á.   àß½¿  φ¡Ñαú¿∩ φ½Ñ¬Γα«¡«ó  íπñÑΓ ñ«ßΓáΓ«τ¡«
  300.      óδß«¬á,   Γ«   »∩Γ¡á Σ«ßΣ«αá íπñπΓ ßóÑΓ¿Γ∞ß∩,  ó »α«Γ¿ó¡«¼ ß½πτáÑ
  301.      «¡¿ íπñπΓ ΓѼ¡δ¼¿.   êº«íαáªÑ¡¿Ñ ¡á φ¬αá¡Ñ ¥ïÆ Σ«α¼¿απÑΓß∩ ó ó¿ñÑ
  302.      »«ß½Ññ«óáΓѽ∞¡«ßΓ¿  ú«α¿º«¡Γá½∞¡δσ  ½¿¡¿⌐,  ¡áºδóáѼδσ αáßΓα«ó묨
  303.      ½¿¡¿∩¼¿.  è«¡Γα«½½Ñα CGA  Σ«α¼¿απÑΓ  200  Γá¬¿σ  ½¿¡¿⌐. ÉáºóÑαΓ¬á
  304.      «ßπΘÑßΓó½∩ÑΓß∩ φ½Ñ¬Γα«¡¡δ¼ ½πτ«¼  ß½Ñóá  ¡á»αáó«  ¿  ßóÑασπ ó¡¿º.
  305.      (ìá ßἫ¼ ñѽѠ¿ß»«½∞ºπεΓß∩ Γα¿ φ½Ñ¬Γα«¡¡δσ »πΦ¬¿,   »« «ñ¡«⌐ ñ½∩
  306.      ¬áªñ«ú« ¿º «ß¡«ó¡δσ µóÑΓ«ó:  ¬αáß¡«ú«,  ºÑ½Ñ¡«ú« ¿ ú«½πí«ú«). Åα¿
  307.      ñ«ßΓ¿ªÑ¡¿¿   ¬«¡µá   αáßΓα«ó«⌐   ½¿¡¿¿   φ½Ñ¬Γα«¡¡δ⌐  ½πτ  ñ«½ªÑ¡
  308.      »ÑαѼÑßΓ¿Γ∞ß∩ ¬   ½Ñó«¼π  ¬αáε φ¬αá¡á ¿ ¡á  «ñ¡π  ½¿¡¿ε ó¡¿º. ¥Γ«
  309.      »ÑαѼÑΘÑ¡¿Ñ ¡áºδóáÑΓß∩ ú«α¿º«¡Γá½∞¡δ¼ «íαáΓ¡δ¼  σ«ñ«¼ ½πτá. Å«ß½Ñ
  310.      Σ«α¼¿α«óá¡¿∩  ßἫ⌐ ¡¿ª¡Ñ⌐   αáßΓα«ó«⌐   ½¿¡¿¿   φ½Ñ¬Γα«¡¡δ⌐  ½πτ
  311.      ñ«½ªÑ¡ óÑα¡πΓ∞ß∩ ¬  ßἫ⌐  óÑασ¡Ñ⌐  αáßΓα«ó«⌐  ½¿¡¿¿  φ¬αá¡á. ¥Γ«
  312.      »ÑαѼÑΘÑ¡¿Ñ ¡áºδóáÑΓß∩ óÑαΓ¿¬á½∞¡δ¼ «íαáΓ¡δ¼ σ«ñ«¼ ½πτá. é« óαѼ∩
  313.  
  314.                              - 9 -
  315.      φΓ¿σ ñóπσ »ÑαѼÑΘÑ¡¿⌐ φ¡Ñαú¿∩  φ½Ñ¬Γα«¡¡«ú« ½πτá ¡¿º¬á∩,  ¿ «¡ ¡Ñ
  316.      »«ñßóÑτ¿óáÑΓ  αáßΓα«óδÑ   Γ«τ¬¿.    é  φΓ«  óαѼ∩  ¡Ñ  »α«¿ßσ«ñ¿Γ
  317.      «Γ«íαáªÑ¡¿∩   ß¿¼ó«½«ó   ¡á   φ¬αá¡Ñ,    ¿   ó¿ñÑ«¬«¡Γα«½½Ñα   ¡Ñ
  318.      «ßπΘÑßΓó½∩ÑΓ   τΓÑ¡¿∩   ¿º    ó¿ñÑ«»á¼∩Γ¿.    æ½Ññ«óáΓѽ∞¡«,    ó
  319.      »α«¼ÑªπΓ¬¿   óαѼѡ¿,   ß««ΓóÑΓßΓóπεΘ¿Ñ   «íαáΓ¡«¼π   σ«ñπ  ½πτá,
  320.      ¼¿¬α«»α«µÑßß«α ¿¼ÑÑΓ íÑß»αÑ»∩ΓßΓóÑ¡¡δ⌐ ñ«ßΓπ» ¬ ó¿ñÑ«»á¼∩Γ¿.
  321.  
  322.           è«¡Γα«½½Ñα CGA ¿¼ÑÑΓ á»»áαáΓ¡δ⌐ αÑú¿ßΓα, ß«ñÑন¼«Ñ ¬«Γ«α«ú«
  323.      π¬áºδóáÑΓ  ¡á  ß«ßΓ«∩¡¿Ñ  ßσѼ  «íαáΓ¡«ú«  σ«ñá  ½πτá.   Åα«óÑα∩∩
  324.      ß«ñÑন¼«Ñ φΓ«ú« αÑú¿ßΓαá,  »α«úαἼᠼ«ªÑΓ «ßπΘÑßΓó½∩Γ∞ ñ«ßΓπ» ¬
  325.      ó¿ñÑ«»á¼∩Γ¿    Γ«½∞¬«   ó  »α«¼ÑªπΓ¬¿  óαѼѡ¿,   ß««ΓóÑΓßΓóπεΘ¿Ñ
  326.      «íαáΓ¡«¼π  σ«ñπ  ½πτá,   τΓ«   »«ºó«½∩ÑΓ  ¿ºíѪáΓ∞  ó«º¡¿¬¡«óÑ¡¿∩
  327.      "ß¡Ñúá".    Åα«óÑα¬á   ß«ñÑন¼«ú«    φΓ«ú«    αÑú¿ßΓαá    ñ«½ª¡á
  328.      «ßπΘÑßΓó½∩Γ∞ß∩  ºá ñ«ßΓáΓ«τ¡« ¬«α«Γ¬¿⌐  »α«¼ÑªπΓ«¬ óαѼѡ¿.  àß½¿
  329.      óδ  »«»δΓáÑΓÑß∞ «ßπΘÑßΓó¿Γ∞   ÑÑ  ¿º »α«úαá¼¼δ  ¡á ∩ºδ¬Ñ óδß«¬«ú«
  330.      πα«ó¡∩ (¡á»α¿¼Ñα,  æ¿), Γ« «¡á αáí«ΓáΓ∞ ¡Ñ íπñÑΓ, »«ß¬«½∞¬π óαѼ∩
  331.      ¡á »α«óÑα¬π »αÑóδß¿Γ ó φΓ«¼ ß½πτáÑ  óαѼ∩ «íαáΓ¡«ú« σ«ñá  ½πτá. ê
  332.      «Γ "ß¡Ñúá" óδ ¡Ñ ¿ºíáó¿ΓÑß∞.
  333.  
  334.           Åα«í½Ñ¼á ¼«ªÑΓ   íδΓ∞   αÑΦѡᠠ Γ«½∞¬«   ß   »«¼«Θ∞ε  ∩ºδ¬á
  335.      áßßѼí½Ñαá.  ìỿßá¡¡á∩  ¡á  ∩ºδ¬Ñ  áßßѼí½Ñαá  »α«úαἼᠠ ¼«ªÑΓ
  336.      ñ«ª¿ñáΓ∞ß∩   »Ñα¿«ñá   «íαáΓ¡«ú«   σ«ñá  ½πτá,  »α«ñ«½ª¿Γѽ∞¡«ßΓ∞
  337.      ¬«Γ«α«ú« ñ«ßëëτ¡á ñ½∩ τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿ ß¿¼ó«½á ó  »á¼∩Γ∞. ƒºδ¬
  338.      áßßѼí½Ñαá  »«ºó«½∩ÑΓ ß«ºñáΓ∞ »α«úαá¼¼π,  ¬«Γ«αá∩ íπñÑΓ óδ»«½¡∩Γ∞
  339.      φΓ¿  ñÑ⌐ßΓó¿∩  ñ«ßΓáΓ«τ¡«  íδßΓα«,  τΓ«íδ   ß««ΓóÑΓßΓó«óáΓ∞   ΓѼ
  340.      «úαá¡¿τÑ¡¿∩¼ »« óαѼѡ¿, ¬«Γ«αδÑ ¡á¬½áñδóáεΓß∩ ó¿ñѫ߿ßΓѼ«⌐.
  341.  
  342.           çừ¼¡¿ΓÑ, τΓ«   ¬«¡Γα«½½Ñαδ   îÇ   ¿   EGA   ¿ºíáó½∩εΓ   «Γ
  343.      ¡Ñ«íσ«ñ¿¼«ßΓ¿ ¿ß»«½∞º«óá¡¿∩ Γᬫú« α«ñá  áßßѼí½Ñα¡«⌐  »α«úαá¼¼δ.
  344.      Ä»Ñαᵿ¿  τΓÑ¡¿∩  ß¿¼ó«½«ó  ¿º ó¿ñÑ«»á¼∩Γ¿ ¿ ºá»¿ß¿ ó ó¿ñÑ«»á¼∩Γ∞
  345.      íπñπΓ óδ»«½¡∩Γ∞ß∩ íδßΓαÑÑ »α¿ ¿ß»«½∞º«óá¡¿¿ φΓ¿σ ¬«¡Γα«½½Ñα«ó. ì«
  346.      φΓá áßßѼí½Ñα¡á∩ »α«úαá¼¼á ∩ó½∩ÑΓß∩ ¡Ñ«íσ«ñ¿¼«⌐ »α¿ ¿ß»«½∞º«óá¡¿¿
  347.      ¬«¡Γα«½½Ñαá CGA ó ß¿¼ó«½∞¡«¼ αѪ¿¼Ñ (Ñß½¿,  ¬«¡Ñτ¡«, óδ ¡Ñ ¿¼ÑÑΓÑ
  348.      ªÑ½á¡¿∩ ¡áí½εñáΓ∞ "ß¡Ñú" ¡á φ¬αá¡Ñ).
  349.  
  350.           éá¼ ¡Ñ«íσ«ñ¿¼«   º¡áΓ∞,   τΓ«   ¡Ñ¬«Γ«αδÑ   Γᬠ  ¡áºδóáѼδÑ
  351.      "ß«ó¼ÑßΓ¿¼δÑ ó¿ñÑ«¬«¡Γα«½½Ñαδ" ∩ó½∩εΓß∩ ¡Ññ«ßΓáΓ«τ¡« φΣΣÑ¬Γ¿ó¡δ¼¿
  352.  
  353.                              - 10 -
  354.      ñ½∩  IBM  Éæ  óß½ÑñßΓó¿Ñ »α«í½Ñ¼δ ß ß¿ú¡á½«¼ «íαáΓ¡«ú« σ«ñá ½πτá.
  355.      Æá¬Γ«óá∩  τáßΓ«Γá  4,77  îâµ  »α«µÑßß«αá  8088  ∩ó½∩ÑΓß∩  ß½¿Φ¬«¼
  356.      ¡¿º¬«⌐,  ¿ »α«ñ«½ª¿Γѽ∞¡«ßΓ∞ ß¿ú¡á½á,  ß««ΓóÑΓßΓóπεΘÑú« ß«ßΓ«∩¡¿ε
  357.      «íαáΓ¡«ú« σ«ñá ½πτá, ∩ó½∩ÑΓß∩ ß½¿Φ¬«¼ ¬«α«Γ¬«⌐. Åα¿ ¿ß»«½∞º«óá¡¿¿
  358.      φΓ«ú«  ß¿ú¡á½á  ó »α«úαá¼¼áσ ¡á áßßѼí½ÑαÑ π¡¿τΓ«ª¿Γ∞ óÑß∞ "ß¡Ñú"
  359.      ¡á φ¬αá¡Ñ ¡Ñ πñáÑΓß∩.  Å«φΓ«¼π ΓᬿѠó¿ñÑ«¬«¡Γα«½½Ñαδ »α¿¼Ñ¡∩εΓß∩
  360.      «íδτ¡«  ó  Å¥éî  ß  í«½ÑÑ  óδß«¬«⌐  Γá¬Γ«ó«⌐ τáßëë⌐ »α«µÑßß«αá,
  361.      Γᬿσ,  ¬á¬ IBM AT,  ¿½¿ ¿ß»«½∞ºπεΘ¿σ á¬ßѽÑαáΓ«α  ñ½∩  π߬«αÑ¡¿∩
  362.      óδ»«½¡Ñ¡¿∩ ¼áΦ¿¡¡δ󠬫¼á¡ñ.
  363.  
  364.           ì¿ªÑ »α¿ó«ñ¿Γß∩  «»¿ßá¡¿Ñ  ñóπσ  Σπ¡¬µ¿⌐ ¿º ¿ßσ«ñ¡«ú« ¼«ñπ½∩
  365.      ibmpc.c,  »«½¡á∩ ¿¡Σ«α¼áµ¿∩ « ¬«Γ«α«¼ ß«ñÑনΓß∩ ó αáºñѽѠ4. ¥Γ¿
  366.      Σπ¡¬µ¿¿  ¡á»¿ßá¡δ  ¡á ∩ºδ¬Ñ  æ¿,   ¡« ó¬½ετáεΓ Σαáú¼Ñ¡Γδ ¡á ∩ºδ¬Ñ
  367.      áßßѼí½Ñαá,   τΓ«  ñ«»π߬áÑΓß∩ ¬«¼»¿½∩Γ«α«¼  Æπαí«  æ¿.  ä½∩ Γ«ú«
  368.      τΓ«íδ  ¿ß»«½∞º«óáΓ∞  φΓ¿ Σπ¡¬µ¿¿,  ¡Ñ«íσ«ñ¿¼«  ¿¼ÑΓ∞ Γαá¡ß½∩Γ«α ß
  369.      ∩ºδ¬á  áßßѼí½Ñαá MASM.   ¥Γ¿ Σπ¡¬µ¿¿ αáí«ΓáεΓ ¬«ααÑ¬Γ¡«  ß ½εíδ¼
  370.      ó¿ñÑ«¬«¡Γα«½½Ñα«¼   ¿   π¡¿τΓ«ªáεΓ "ß¡Ñú"  ó ß½πτáÑ ¿ß»«½∞º«óá¡¿∩
  371.      ¬«¡Γα«½½Ñαá CGA.
  372.  
  373.           éá¼ ¡ÑΓ  ¡Ñ«íσ«ñ¿¼«ßΓ¿  óδºδóáΓ∞  φΓ¿   Σπ¡¬µ¿¿   ¿º   ßó«¿σ
  374.      »α«úαá¼¼,  «¡¿  ¿ß»«½∞ºπεΓß∩ »α«úαἼἿ ñ½∩ αáí«Γδ ß "«¬¡á¼¿" ¿º
  375.      φΓ«ú« αáºñѽá.  éδ  ¼«ªÑΓÑ  «ñ¡á¬«  ºáσ«ΓÑΓ∞  ¼«ñ¿Σ¿µ¿α«óáΓ∞  φΓ¿
  376.      Σπ¡¬µ¿¿, Ñß½¿ ¿ß»«½∞ºπÑΓÑ ¬«¡Γα«½½Ñαδ îÇ ¿ EGA ¿½¿ Ñß½¿ π óáß ¡ÑΓ
  377.      »α«úαá¼¼δ îÇSM.  àß½¿ óδ »¿ΦÑΓÑ »α«úαá¼¼δ ¿ »α¿ φΓ«¼  ¡Ñ¿ºóÑßΓ¡«,
  378.      ¬Γ«  ¿ ¡á ¬á¬«⌐ á»»áαáΓ¡«⌐ ¬«¡Σ¿úπαᵿ¿ íπñÑΓ ¿σ ¿ß»«½∞º«óáΓ∞, Γ«
  379.      ñ«½ª¡δ  «ßΓáó¿Γ∞  φΓ¿  Σπ¡¬µ¿¿  íѺ  ¿º¼Ñ¡Ñ¡¿⌐   ¿   ¿ß»«½∞º«óáΓ∞
  380.      Γαá¡ß½∩Γ«αδ Æπαí« æ¿ ¿ MASM ñ½∩ ¿σ Γαá¡ß½∩µ¿¿.
  381.  
  382.  
  383.              vpoke(unsigned vseg, unsigned adr, unsigned chr)
  384.              ------------------------------------------------
  385.  
  386.           ¥Γá Σπ¡¬µ¿∩  ºá¡«ß¿Γ  íá⌐Γ  ß  ¬«ñ«¼  ß¿¼ó«½á  ¿  íá⌐Γ ß Ñú«
  387.      áΓα¿íπΓἿ  ó  ó¿ñÑ«»á¼∩Γ∞.  Åáαá¼ÑΓα  adr   »αÑñßΓáó½∩ÑΓ   ß«í«⌐
  388.      ß¼ÑΘÑ¡¿Ñ ó íá⌐Γáσ «Γ ¡áτá½á ßÑú¼Ñ¡Γá ó¿ñÑ«»á¼∩Γ¿: 0 ß««ΓóÑΓßΓóπÑΓ
  389.      »Ñαó«¼π ß¿¼ó«½π,  2 - óΓ«α«¼π ¿ Γ.ñ.  Åáαá¼ÑΓα chr ß«ñÑαª¿Γ  íá⌐Γ
  390.      áΓα¿íπΓ«ó  ß¿¼ó«½á  (ßΓáαΦ¿⌐) ¿ ASCII-¬«ñ ß¿¼ó«½á.  Åáαá¼ÑΓα vseg
  391.  
  392.                              - 11 -
  393.      «»αÑñѽ∩ÑΓ áñαÑß ßÑú¼Ñ¡Γá ó¿ñÑ«»á¼∩Γ¿ (0xB800 ñ½∩ CGA, 0xB000 ñ½∩
  394.      îÇ).  ¥Γá  Σπ¡¬µ¿∩  «ßπΘÑßΓó½∩ÑΓ  óδó«ñ  ß¿¼ó«½á  ß  »α«óÑᬫ⌐ ¡á
  395.      «íαáΓ¡δ⌐ σ«ñ ½πτá, Γá¼, úñÑ φΓ« ¡Ñ«íσ«ñ¿¼«.
  396.  
  397.  
  398.              int vpeak(unsigned vseg,unsigned adr)
  399.              -------------------------------------
  400.  
  401.           ¥Γá Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ ¬«ñ ß¿¼ó«½á ¿ Ñú«  áΓα¿íπΓδ  (ßΓáαΦ¿⌐
  402.      íá⌐Γ),   αẼÑΘÑ¡¡δÑ ó ó¿ñÑ«»á¼∩Γ¿ »«  áñαÑßπ  vseg:adr,  Γ« ÑßΓ∞
  403.      óδ»«½¡∩εΓ  τΓÑ¡¿Ñ ß¿¼ó«½á ß  »α«óÑᬫ⌐ ¡á «íαáΓ¡δ⌐ σ«ñ  ½πτá, úñÑ
  404.      φΓ« ¡Ñ«íσ«ñ¿¼«.
  405.  
  406.  
  407.  
  408.              çᬽετÑ¡¿Ñ
  409.      -----------------------------------------------------------------
  410.  
  411.           êº½«ªÑ¡¡δÑ ßóÑñÑ¡¿∩ «í áασ¿ΓѬΓπαÑ  ó¿ñѫ߿ßΓÑ¼δ  IBM  PC  ¿
  412.      «ß¡«ó¡δσ  »α¿¡µ¿»áσ  αáí«Γδ ß φ¬αá¡¡δ¼¿ "«¬¡á¼¿" »«ºó«½∩εΓ »«¡∩Γ∞
  413.      »αÑñßΓáó½Ñ¡¡δÑ ó αáºñѽѠ6  ¿ßσ«ñ¡δÑ  ΓѬßΓδ  í¿í½¿«ΓѬ¿  Σπ¡¬µ¿⌐
  414.      π»αáó½Ñ¡¿∩   "«¬¡á¼¿",  πñ«ó½ÑΓó«α∩εΘ¿Ñ  ΓαÑí«óá¡¿∩¼  ¬«¼»¿½∩Γ«αá
  415.      Æπαí«   æ¿.   êß»«½∞º«óá¡¿Ñ    φΓ¿σ    Σπ¡¬µ¿⌐    «í½Ñúτ¿Γ    óá¼
  416.      »α«úαá¼¼¿α«óá¡¿Ñ ó¿ñÑ«¿º«íαáªÑ¡¿⌐.  éδ ¼«ªÑΓѠ߼ѽ« »α¿¼Ñ¡∩Γ∞ φΓ¿
  417.      Σπ¡¬µ¿¿,  ¿ ß¬«¡µÑ¡Γα¿α«óáΓ∞ ßó«Ñ ó¡¿¼á¡¿Ñ ¡á »α«í½Ñ¼áσ,  ¬«Γ«αδÑ
  418.      ß»Ñµ¿Σ¿τ¡δ ñ½∩ óáΦÑ⌐ »α¿¬½áñ¡«⌐ ºáñáτ¿.
  419.  
  420.  
  421.                                  â½áóá 6
  422.                                  -------
  423.  
  424.                        ü¿í½¿«ΓѬᠫ¬«¡¡δσ Σπ¡¬µ¿⌐
  425.      -----------------------------------------------------------------
  426.  
  427.           Åα«úαá¼¼δ, «»¿ßá¡¡δÑ ó φΓ«⌐ ¿ ¡Ñ߬«½∞¬¿σ »«ß½ÑñπεΘ¿σ ú½áóáσ,
  428.      »αÑñßΓáó½∩εΓ  í¿í½¿«ΓÑ¬π  «¬«¡¡δσ  Σπ¡¬µ¿⌐,  ¬«Γ«αá∩ »«ññÑনóáÑΓ
  429.      Φ¿α«¬¿⌐ ñ¿á»áº«¡ φ¬αá¡¡δ󠫬«¡¡δσ «»Ñαᵿ⌐.  öπ¡¬µ¿¿ »«ñαáºñѽѡδ
  430.  
  431.                              - 12 -
  432.      ¡á »«ñß¿ßΓѼδ, ¿ß»«½∞º«óá¡¿Ñ ¬«Γ«αδσ »«ºó«½∩ÑΓ «αúá¡¿º«óáΓ∞ ¼Ñ¡ε,
  433.      ¬«¡ΓѬßΓ¡«-π»αáó½∩ѼδÑ    »«ñ߬Ậ¿,   αÑñá¬Γ¿α«óá¡¿Ñ   ΓѬßΓá  ¿
  434.      Σ«α¼áΓ¿α«óá¡¿Ñ  ñá¡¡δσ  ó  »α¿¬½áñ¡δσ  ß¿ßΓѼáσ.  ¥Γ¿  »«ñß¿ßΓѼδ
  435.      »«ññÑনóáεΓß∩  «íΘѵѽÑó«⌐  «¬«¡¡«⌐  í¿í½¿«ΓѬ«⌐,  ¬«Γ«αá∩ ¼«ªÑΓ
  436.      ¿ß»«½∞º«óáΓ∞ß∩ ó »α¿¬½áñ¡δσ »α«úαá¼¼áσ ΓᬠªÑ,  ¬á¬ ¿ »«ñß¿ßΓѼδ.
  437.      é φΓ«⌐ ú½áóÑ «»¿ßδóáÑΓß∩ «íΘѵѽÑóá∩ í¿í½¿«ΓѬᠫ¬«¡¡δσ Σπ¡¬µ¿⌐.
  438.  
  439.           Ä¬«¡¡δÑ Σπ¡¬µ¿¿, «»¿ßá¡¡δÑ ó ñá¡¡«⌐ ú½áóÑ, ¼«úπΓ »α¿¼Ñ¡∩Γ∞ß∩
  440.      ñ½∩ «αúá¡¿ºáµ¿¿ «¬«¡  ó «ñ¡«⌐ ¿º  ñóπσ  ¬«¡Σ¿úπαᵿ⌐:  ßΓѬ«ó«⌐ ¿
  441.      ß½«Ñ¡«⌐;  «ñ¡á ¬«¡Σ¿úπαᵿ∩ ∩ó½∩ÑΓß∩ ß  Γ«τ¬¿ ºαÑ¡¿∩ ¿ß»«½∞ºπεΘÑ⌐
  442.      ¿σ »α«úαá¼¼δ »«ñ¼¡«ªÑßΓó«¼ ñαπú«⌐. æ½«Ñ¡δÑ «¬¡á «í½áñáεΓ í«½∞Φ¿¼¿
  443.      ó«º¼«ª¡«ßΓ∩¼¿, τѼ ßΓѬ«óδÑ, «ñ¡á¬« ßΓѬ«óδÑ í«½ÑÑ φΣΣÑ¬Γ¿ó¡δ, Γ«
  444.      ÑßΓ∞  óδñáτá  ¡á  φ¬αá¡  ¿  π¡¿τΓ«ªÑ¡¿Ñ  ¿σ  »α«¿ßσ«ñ¿Γ  íδßΓαÑÑ.
  445.      Åα«úαἼᠼ«ªÑΓ íδΓ∞ ßó∩ºá¡á ½¿í« ß« ßΓѬ«ó묨,  ½¿í« ß« ß½«Ñ¡δ¼¿
  446.      «¬«¡¡δ¼¿ Σπ¡¬µ¿∩¼¿, ¡« ¡Ñ ß ΓѼ¿ ¿ ñαπú¿¼¿ «ñ¡«óαѼѡ¡«.
  447.  
  448.           Åα¿  ¬«¼»¿½∩µ¿¿ «¬«¡¡δσ Σπ¡¬µ¿⌐, óδ ñ«½ª¡δ »α¿¡∩Γ∞ αÑΦÑ¡¿Ñ «
  449.      Γ«¼,  ¬á¬πε ¿¼Ñ¡¡« «¬«¡¡πε ¬«¡Σ¿úπαáµ¿ε »α¿¼Ñ¡¿Γ∞.   ä½∩ ßΓѬ«óδσ
  450.      «¬«¡ «»αÑñѽ∩ÑΓß∩ »ÑαѼѡ¡á∩ óαѼѡ¿  ¬«¼»¿½∩µ¿¿ FASTWINDOWS, ñ½∩
  451.      ß½«Ñ¡δσ  «¬«¡  «¡á  πñá½∩ÑΓß∩.  Åਪ½áñ¡á∩  »α«úαἼᠠ¼«ªÑΓ íδΓ∞
  452.      ßó∩ºá¡á ß ½εí«⌐ í¿í½¿«ΓѬ«⌐ ñ«  ΓÑσ »«α,  »«¬á  «¡á ¡Ñ ¿ß»«½∞ºπÑΓ
  453.      ó«º¼«ª¡«ßΓ¿,   »«ññÑনóáѼδÑ  Γ«½∞¬«   ñ½∩   ß½«Ñ¡δσ   «¬«¡.  ÆÑ
  454.      »α¿¬½áñ¡δÑ    »α«úαá¼¼δ,    ¬«Γ«αδÑ    ¿ß»«½∞ºπεΓ     ó«º¼«ª¡«ßΓ¿
  455.      ¿ß¬½ετ¿Γѽ∞¡«  ß½«Ñ¡δσ  «¬«¡,  ñ«½ª¡δ  íδΓ∞ ßó∩ºá¡δ ß í¿í½¿«ΓѬ«⌐
  456.      «¬«¡¡δσ  Σπ¡¬µ¿⌐,  ¬«Γ«αá∩  íδ½á  ¬«¼»¿½¿α«óá¡á  íѺ  «»αÑñѽѡ¿∩
  457.      FASTWINDOWS.
  458.  
  459.  
  460.  
  461.                æΓѬ«óδÑ «¬¡á
  462.      -----------------------------------------------------------------
  463.  
  464.           è«¡Σ¿úπαᵿ∩ ßΓѬ«óδσ    «¬«¡    »αÑñ»«½áúáÑΓ,   τΓ«   ½εíá∩
  465.      óδ»«½¡∩Ѽá∩  óἿ  ß  «¬¡«¼  «»Ñαᵿ∩  (ºá»¿ß∞  ó  ¡Ñú«   ΓѬßΓá,
  466.      ¿º¼Ñ¡Ñ¡¿Ñ µóÑΓá, π¡¿τΓ«ªÑ¡¿Ñ Ñú« ¿ Γ.ñ.) »α«¿ºó«ñ¿Γß∩, ¬«úñá «¬¡«
  467.      ∩ó½∩ÑΓß∩  »«½¡«ßΓ∞ε  ó¿ñ¿¼δ¼   »«½∞º«óáΓѽε.   Å«½¡á∩   ó¿ñ¿¼«ßΓ∞
  468.      «º¡áτáÑΓ,  τΓ«  ¡¿  «ñ¡á τáßΓ∞ «¬¡á ¡Ñ ¡á¬αδΓá ñαπú¿¼ «¬¡«¼ ¿ τΓ«
  469.  
  470.                              - 13 -
  471.      «¬¡« ¡Ñ ß¬αδΓ« Σπ¡¬µ¿Ñ⌐  hide_window  («  ¬«Γ«α«⌐  íπñÑΓ  ß¬áºá¡«
  472.      ¡¿ªÑ).  è«úñá  πßΓá¡«ó½Ñ¡«  ßΓѬ«ó«Ñ  «¬¡«,  «¬«¡¡«Ñ  »α«úαá¼¼¡«Ñ
  473.      «íÑß»ÑτÑ¡¿Ñ  ßΓα«¿Γ  íπΣÑα  ñ½∩  σαá¡Ñ¡¿∩  »αѪ¡Ñú«   ß«ñÑন¼«ú«
  474.      ó¿ñÑ«»á¼∩Γ¿, ¬«Γ«απε íπñÑΓ ºá¡¿¼áΓ∞ «¬¡«. é¿ñÑ«»á¼∩Γ∞ ß«σαá¡∩ÑΓß∩
  475.      ó íπΣÑαÑ, á «¬¡« ºá»¿ßδóáÑΓß∩ ó ó¿ñÑ«»á¼∩Γ∞. Åα¿ óδ»«½¡Ñ¡¿¿ ½εíδσ
  476.      «»Ñαᵿ⌐,   ¼«ñ¿Σ¿µ¿απεΘ¿σ   «¬¡«,   óßÑ   ¿º¼Ñ¡Ñ¡¿∩  óδ»«½¡∩εΓß∩
  477.      ¡Ñ»«ßαÑñßΓóÑ¡¡«  ó   ó¿ñÑ«»á¼∩Γ¿,   á   »α«úαá¼¼¡«Ñ   «íÑß»ÑτÑ¡¿Ñ
  478.      »αÑñ»«½áúáÑΓ,  τΓ«  «¬¡«  ∩ó½∩ÑΓß∩ »«½¡«ßΓ∞ε ó¿ñ¿¼δ¼.  è«úñá «¬¡«
  479.      π¡¿τΓ«ªáÑΓß∩,  ß«ñÑন¼«Ñ  σαá¡∩ΘÑú«  Ñú«   íπΣÑαá   ºá»¿ßδóáÑΓß∩
  480.      «íαáΓ¡«  ó  ó¿ñÑ«»á¼∩Γ∞,  ó«ßßΓá¡áó½¿óá∩ Γᬿ¼ «íαẫ¼ ó¿ñÑ««íαáº
  481.      »á¼∩Γ¿ ¬ ß«ßΓ«∩¡¿ε ñ« «íαẫóá¡¿∩ «¬¡á.
  482.  
  483.           éδ   íπñÑΓÑ  «íδτ¡«  «íαáΘáΓ∞ß∩   Γ«½∞¬«  ¬  ßΓѬ«ó«¼π «¬¡π,
  484.      «íαẫóá¡¡«¼π »«ß½Ññ¡¿¼.  àß½¿ óδ ß¡áτá½á ß«ºñ὿ «¬¡« Ç, á ºáΓѼ
  485.      «¬¡« é,  ¬«Γ«α«Ñ ºá¬αδóáÑΓ τáßΓ∞ «¬¡á Ç,  Γ« »α¿  ºá»¿ß¿ ΓѬßΓá ó
  486.      «¬¡« Ç ¼«ªÑΓ ß½πτ¿Γ∞ß∩,  τΓ« τáßΓ∞ ΓѬßΓá »«»áñÑΓ ó τáßΓ∞ «¬¡á é,
  487.      ºá¬αδóáεΘπε  «¬¡«  Ç.  äá½ÑÑ,  Ñß½¿  óδ   π¡¿τΓ«ª¿ΓÑ  «¬¡«  A  ñ«
  488.      π¡¿τΓ«ªÑ¡¿∩  «¬¡á  é,   Γ«   τáßΓ∞   íπΣÑαá   ß«σαá¡Ñ¡¿∩  «¬¡á  Ç
  489.      ºá»¿ΦÑΓß∩ ó ¡áτὫ τáßΓ¿ «¬¡á é.
  490.  
  491.           ü«½∞Φ¿¡ßΓó« ¬«¼¼ÑατÑ߬¿σ «¬«¡¡δσ »á¬ÑΓ«ó »«ññÑনóáÑΓ Γ«½∞¬«
  492.      ßΓѬ«óδÑ  «¬¡á,  »«ß¬«½∞¬π  í«½∞Φ¿¡ßΓó«  »α¿½«ªÑ¡¿⌐, ¿ß»«½∞ºπεΘ¿σ
  493.      «¬¡á,  ¼«úπΓ  πß»ÑΦ¡«  Σπ¡¬µ¿«¡¿α«óáΓ∞  ó  ßαÑñÑ  ßΓѬ«óδσ  «¬«¡.
  494.      Äíδτ¡«⌐  »αá¬Γ¿¬«⌐  ó  »α¿½«ªÑ¡¿∩σ  ∩ó½∩ÑΓß∩  ¿ß»«½∞º«óá¡¿Ñ «¬¡á,
  495.      «Γ¬αδΓ«ú«  »«ß½Ññ¡¿¼,  ¿ π¡¿τΓ«ªÑ¡¿Ñ «¬«¡ ó  »«α∩ñ¬Ñ, «íαáΓ¡«¼ ¿σ
  496.      ß«ºñá¡¿ε.  Æá¬¿Ñ  »α¿½«ªÑ¡¿∩  ñ«½ª¡δ  ¿ß»«½∞º«óáΓ∞  ßΓѬ«óδÑ «¬¡á
  497.      ¿º-ºá »αÑ¿¼πΘÑßΓó ¿σ Σπ¡¬µ¿«¡¿α«óá¡¿∩.
  498.  
  499.           Ä¬«¡¡δÑ «»Ñαᵿ¿,  «»¿ßá¡¡δÑ  ó ñá¡¡«⌐  ¬¡¿úÑ, »«ºó«½∩εΓ óá¼
  500.      ß«ºñáóáΓ∞ «ñ¡« ¿½¿ í«½ÑÑ «¬«¡ ¿ ºáΓѼ «Γ¡«ß¿Γ∞ αẽ¿τ¡δÑ «»Ñαᵿ¿
  501.      ¬  «ñ¡«¼π ¿º ß«ºñá¡¡δ󠫬«¡.  éδ ¼«ªÑΓÑ  «íαáΘáΓ∞ß∩ ¬ ¬«¡¬αÑΓ¡«¼π
  502.      «¬¡π ¿½¿ ¿ß»«½∞º«óáΓ∞ »πßΓπε ß»Ñµ¿Σ¿¬áµ¿ε ñ½∩ ß««íΘÑ¡¿∩ óδºóá¡¡«⌐
  503.      Σπ¡¬µ¿¿  « ßó«Ñ¼ ¡á¼ÑαÑ¡¿¿ óδ»«½¡¿Γ∞ «»Ñαáµ¿ε  ó  «¬¡Ñ, ß«ºñá¡¡«¼
  504.      »«ß½Ññ¡¿¼.  ¥Γ« ß«ú½áΦÑ¡¿Ñ ¿ß»«½∞ºπÑΓß∩  ¬á¬ ñ½∩ ßΓѬ«óδσ,  Γᬠ¿
  505.      ñ½∩  ß½«Ñ¡δ󠫬«¡,  «ñ¡á¬« »«½∞º«óáΓѽ¿  ßΓѬ«óδ󠫬«¡¡δσ Σπ¡¬µ¿⌐
  506.      ñ«½ª¡δ íδΓ∞ πóÑαÑ¡δ,  τΓ« ½εí«Ñ «¬¡«,  ¬ ¬«Γ«α«¼π «¡¿ «íαáΘáεΓß∩,
  507.      ½¿í« ß«ºñá¡« »«ß½Ññ¡¿¼, ½¿í« »«½¡«ßΓ∞ε ó¿ñ¿¼« ¡á φ¬αá¡Ñ.
  508.  
  509.                              - 14 -
  510.  
  511.  
  512.  
  513.                    æ½«Ñ¡δÑ «¬¡á
  514.      -----------------------------------------------------------------
  515.  
  516.           æ½«Ñ¡δÑ «¬¡á   «í½áñáεΓ   ú«αáºñ«   í«½∞ΦÑ⌐  ú¿í¬«ßΓ∞ε,  τѼ
  517.      ßΓѬ«óδÑ, ¬ Γ«¼π ªÑ «¡¿ »αÑñ«ßΓáó½∩εΓ »«½∞º«óáΓѽε ú«αáºñ« í«½∞ΦÑ
  518.      ó«º¼«ª¡«ßΓÑ⌐  »«  ß«ºñá¡¿ε  αẽ¿τ¡δ󠫬«¡¡δσ ¿¡ΓÑαΣÑ⌐ß«ó.  è«úñá
  519.      ß½«Ñ¡«Ñ  «¬¡«  ß«ºñá¡«,  ½εíá∩  «¬«¡¡á∩   «»Ñαᵿ∩   ¼«ªÑΓ   íδΓ∞
  520.      áñαÑß«óá¡á Ñ¼π, ¡Ñºáó¿ß¿¼« «Γ Ñú« ó¿ñ¿¼«ßΓ¿ ¿½¿ í½¿º«ßΓ¿ ¬ ñαπú¿¼
  521.      «¬¡á¼.  é ñ«»«½¡Ñ¡¿Ñ ¬ «íδτ¡«¼π ¡áí«α𠫬«¡¡δσ  «»Ñαᵿ⌐  ß½«Ñ¡δÑ
  522.      «¬¡á  ¼«úπΓ  »ÑαѼÑΘáΓ∞ß∩  ó  ñóπ¼Ñα¡«⌐  »½«ß¬«ßΓ¿ φ¬αá¡á ¿ ¼«úπΓ
  523.      óδñó¿úáΓ∞ß∩ ¡á »ÑαÑñ¡¿⌐ ¿½¿ πí¿αáΓ∞ß∩ ¡á  ºáñ¡¿⌐  »½á¡δ  ó  ß½«∩σ
  524.      ß«ºñá¡¡δ󠫬«¡.
  525.  
  526.           è«úñá ß«ºñá¡« ß½«Ñ¡«Ñ «¬¡«,  αáß»αÑñѽ∩ÑΓß∩ íπΣÑα ß«σαá¡Ñ¡¿∩
  527.      ó¿ñѫ߫ñÑন¼«ú«,  ¡«  «¬¡«  ¡Ñ  «Γ«íαáªáÑΓß∩.  üπΣÑα  ß«σαá¡Ñ¡¿∩
  528.      ¿¡¿µ¿á½¿º¿απÑΓß∩   ó¿ñÑ«º¡áτÑ¡¿∩¼¿,   ¬«Γ«αδÑ   «¬¡«   ¼«ú½«   íδ
  529.      ß«ñÑαªáΓ∞,  Ñß½¿ íδ «¡« í佫 ó¿ñ¿¼δ¼. ïεíδÑ »«ß½ÑñπεΘ¿Ñ «»Ñαᵿ¿,
  530.      »α«¿ºó«ñ¿¼δÑ  ó φΓ«¼  «¬¡Ñ,  »«¬á  «¡«  ¡Ñó¿ñ¿¼«,  »α«¿ºó«ñ∩Γß∩ ó
  531.      íπΣÑαÑ ß«σαá¡Ñ¡¿∩.
  532.  
  533.           è«úñá ß½«Ñ¡«Ñ  «¬¡«  «Γ«íαáªáÑΓß∩,   ó¿ñÑ«»á¼∩Γ∞   ¿   íπΣÑα
  534.      ß«σαá¡Ñ¡¿∩ «í¼Ñ¡¿óáεΓß∩ ß«ñÑন¼δ¼.  çáΓѼ,  ñ« ΓÑσ »«α »«¬á «¬¡«
  535.      ∩ó½∩ÑΓß∩ »«½¡«ßΓ∞ε ó¿ñ¿¼δ¼ (¡Ñ ºá¬αδΓδ¼  »«½¡«ßΓ∞ε  ¿½¿  τáßΓ¿τ¡«
  536.      ñαπú¿¼ «¬¡«¼), ½εíδÑ «»Ñαᵿ¿ »α«¿ºó«ñ∩Γß∩ ß ó¿ñÑ«»á¼∩Γ∞ε, á ¡Ñ ß
  537.      íπΣÑα«¼ ß«σαá¡Ñ¡¿∩.  è«úñá «ñ¡« ¿  í«½ÑÑ  ñαπú¿σ  «¬«¡  »«¬αδóáεΓ
  538.      áñαÑßπѼ«Ñ  «¬¡«  »«½¡«ßΓ∞ε  ¿½¿  τáßΓ¿τ¡«,  «»αÑñѽѡ¿Ñ  «í½áßΓ¿
  539.      ¿º¼Ñ¡Ñ¡¿∩ ∩ó½∩ÑΓß∩ í«½ÑÑ ß½«ª¡δ¼.  ä½∩ ΓÑσ τáßΓÑ⌐  «¬¡á,  ¬«Γ«αδÑ
  540.      ∩ó½∩εΓß∩ ó¿ñ¿¼δ¼¿,  ¿º¼Ñ¡Ñ¡¿Ñ »α«¿ºó«ñ¿Γß∩ ó ó¿ñÑ«»á¼∩Γ¿.  Äñ¡á¬«
  541.      ñ½∩ «í½áßΓÑ⌐,  ºá¬αδΓδσ ñαπú¿¼¿ «¬¡á¼¿,  ¿º¼Ñ¡Ñ¡¿Ñ »α«¿ºó«ñ¿Γß∩ ó
  542.      íπΣÑαÑ  ß«σαá¡Ñ¡¿∩ »«¬αδóáεΘÑú« «¬¡á.  Å«ß¬«½∞¬π «¬¡« ¼«ªÑΓ ¿¼ÑΓ∞
  543.      αẽ¿τ¡δÑ τáßΓ¿, ºá¬αδΓδÑ ¡Ñ߬«½∞¬¿¼¿ ñαπú¿¼¿ «¬¡á¼¿, Γ« á½ú«α¿Γ¼
  544.      «»αÑñѽѡ¿∩  ¼ÑßΓá,  úñÑ  ñ«½ª¡«  íδΓ∞ ßñѽᡫ ¿º¼Ñ¡Ñ¡¿Ñ,  «í∩ºá¡
  545.      ß¡áτá½á »α«ß¼«ΓαÑΓ∞ óßÑ «¬¡á,  ß«ºñá¡¡δÑ »«ºªÑ ñá¡¡«ú«,  ß  µÑ½∞ε
  546.      πßΓá¡«ó½Ñ¡¿∩  Σá¬Γá  óδ»«½¡Ñ¡¿∩  ¿º¼Ñ¡Ñ¡¿∩  ó  «í½áßΓ¿,  »«¬αδΓ«⌐
  547.  
  548.                              - 15 -
  549.      ß½ÑñπεΘ¿¼ «¬¡«¼ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿.  àß½¿ ΓᬫѠ«¬¡« ¡á⌐ñÑ¡«,  Γ«
  550.      ¿º¼Ñ¡Ñ¡¿Ñ ºá»¿ßδóáÑΓß∩ ó Ñú« íπΣÑα ß«σαá¡Ñ¡¿∩.  àß½¿ ¡¿ «ñ¡« «¬¡«
  551.      ¡Ñ ºá¬αδóáÑΓ ¼«ñ¿Σ¿µ¿απѼδ⌐ πτáßΓ«¬,  Γ« ¿º¼Ñ¡Ñ¡¿Ñ »α«¿ºó«ñ¿Γß∩ ó
  552.      ó¿ñÑ«»á¼∩Γ¿.
  553.  
  554.           Éáßß¼«Γα¿¼ α¿ßπ¡«¬ 6.1.  Æα¿ «¬¡á αáß»«½«ªÑ¡δ Γá¬, τΓ« τáßΓ∞
  555.      «¬¡á Ç ó¿ñ¿¼á, τáßΓ∞ ºá¬αδΓá «¬¡«¼ é ¿ τáßΓ∞ - «¬¡«¼ æ. é íπΣÑαáσ
  556.      ß«σαá¡Ñ¡¿∩ ¬áªñ«ú« «¬¡á  óδ ¼«ªÑΓÑ ó¿ñÑΓ∞   úαá¡¿µδ τáßΓÑ⌐ ñαπú¿σ
  557.      «¬«¡, ¬«Γ«αδÑ ºá¬αδΓδ.
  558.  
  559.      ┌───────────────────────────────────────────────────────────────┐
  560.      │                                                               │
  561.      │                                   .┌───────────┐              │
  562.      │                                .   │           │              │
  563.      │                             .      ├───────────┤ üπΣÑα        │
  564.      │                          .         │           │ ß«σαá¡Ñ¡¿∩ é │
  565.      │                       .            │           │              │
  566.      │                    .               │           │              │
  567.      │                 .                  └───────────┘              │
  568.      │             .                                  .              │
  569.      │         .                                                     │
  570.      │      .                                    .                   │
  571.      │      ┌──────────┐                                             │
  572.      │ ┌────┤ B        ├────┐               .                        │
  573.      │ │ A  │          │    │           .                            │
  574.      │ │    │     ┌────┴────┴───┐.   .                               │
  575.      │ │    │     │ C           │.        .                          │
  576.      │ │    └─────│             │               .                    │
  577.      │ └──────────│             │                       .            │
  578.      │            │             │                              .     │
  579.      │            │             │        ┌──────┬──────────┬───┐     │
  580.      │            └─────────────┘        │      │          │   │     │
  581.      │                 .                 │      │          │   │     │
  582.      │                     .             │      │          │   │     │
  583.      │                         .         ├──────┘          │   │     │
  584.      │                              .    ├─────────────────┘   │     │
  585.      │                                 . └─────────────────────┘     │
  586.  
  587.                              - 16 -
  588.      │                                      üπΣÑα ß«σαá¡Ñ¡¿∩ æ       │
  589.      │                                                               │
  590.      └───────────────────────────────────────────────────────────────┘
  591.  
  592.              É¿ßπ¡«¬ 6.1. Æα¿ ß½«Ñ¡δσ »ÑαѬαδóáεΘ¿σß∩ «¬¡á.
  593.  
  594.  
  595.           àß½¿ óδ ºá»¿Φ¿ΓÑ ΓѬßΓ«óπε ßΓ᫬π "now is the time"  ó  «¬¡«
  596.      Ç, ΓѬßΓ íπñÑΓ ¡á»αáó½Ñ¡ ó Γα¿ αẽ¿τ¡δσ ¼ÑßΓá. ÉѺπ½∞ΓáΓ »«¬áºá¡
  597.      ¡á α¿ßπ¡¬Ñ 6.2.  Æá¬  ¬á¬  τáßΓ∞  «¬¡á  Ç,  úñÑ  ºá»¿ßá¡«  "now",
  598.      ∩ó½∩ÑΓß∩   ó¿ñ¿¼«⌐,   Γ«  ß½«ó«  ºá»¿ßδóáÑΓß∩  ¡Ñ»«ßαÑñßΓóÑ¡¡«  ó
  599.      ó¿ñÑ«»á¼∩Γ∞ ¿ ¼«ªÑΓ íδΓ∞ »α«τ¿Γá¡« »«½∞º«óáΓѽѼ.  æ½«óá "is the"
  600.      ∩ó½∩εΓß∩  τáßΓ∞ε  «¬¡á  Ç,  ¬«Γ«αá∩ ºá¬αδΓá «¬¡«¼ é,  »«φΓ«¼π φΓ¿
  601.      ß½«óᠺỿßδóáεΓß∩  ó  íπΣÑα  ß«σαá¡Ñ¡¿∩  «¬¡á  é.  æ½«ó«  "time"
  602.      «¬áºδóáÑΓß∩  ó  Γ«⌐  τáßΓ¿  «¬¡á  Ç,  ¬«Γ«αá∩  »«¬αδΓá  «¬¡«¼  æ,
  603.      ß½Ññ«óáΓѽ∞¡« "time" ºá»¿ßδóáÑΓß∩ ó íπΣÑα ß«σαá¡Ñ¡¿∩ «¬¡á æ
  604.  
  605.  
  606.      ┌───────────────────────────────────────────────────────────────┐
  607.      │                                                               │
  608.      │                                                               │
  609.      │                                                               │
  610.      │                                                               │
  611.      │                              . ┌─────────┐                    │
  612.      │                        .       ├─────────┤                    │
  613.      │                 .              │ is the  │ üπΣÑα ß«σαá¡Ñ¡¿∩ é │
  614.      │          .                     │         │                    │
  615.      │         ┌───────┐              └─────────┘                    │
  616.      │ ┌───────┤ B     ├──────┐             .                        │
  617.      │ │ A     │    ┌──┴──────┴─┐.    .                              │
  618.      │ │   now │    │ C         │.              .                    │
  619.      │ │       └────┤           │                            .       │
  620.      │ └────────────┤           │           ┌─────┬────────┬──┐      │
  621.      │              └───────────┘           │     │   time │  │      │
  622.      │               .                      ├─────┘        │  │      │
  623.      │                      .               ├──────────────┘  │      │
  624.      │                                 .    └─────────────────┘      │
  625.  
  626.                              - 17 -
  627.      │                                       üπΣÑα ß«σαá¡Ñ¡¿∩ æ      │
  628.      │                                                               │
  629.      └───────────────────────────────────────────────────────────────┘
  630.  
  631.                  É¿ßπ¡«¬ 6.2. æ½«Ñ¡δÑ «¬¡á ß ΓѬßΓ«¼.
  632.  
  633.  
  634.           É¿ßπ¡«¬ 6.3. »«¬áºδóáÑΓ, τΓ« »α«¿ßσ«ñ¿Γ »α¿ π¡¿τΓ«ªÑ¡¿¿ «¬¡á
  635.      é.    ùáßΓ∞   «¬¡á  Ç  ¿º  Ñú«  íπΣÑαá   ß«σαá¡Ñ¡¿∩  »«ßΓπ»áÑΓ  ó
  636.      ó¿ñÑ«»á¼∩Γ∞,   ¿   ß½«ó«   "is"   ¼«ªÑΓ  ΓÑ»Ñα∞   íδΓ∞  »α«τ¿Γá¡«
  637.      »«½∞º«óáΓѽѼ.  Äñ¡á¬«, »«ß¬«½∞¬π τáßΓ∞ «¬¡á é íδ½á »«¬αδΓá «¬¡«¼
  638.      æ,   Γ«  τáßΓ∞  íπΣÑαá  ß«σαá¡Ñ¡¿∩  «¬¡á  é  ¬«»¿απÑΓß∩  ó  íπΣÑα
  639.      ß«σαá¡Ñ¡¿∩ «¬¡á æ, ß½Ññ«óáΓѽ∞¡«,  íπΣÑα ß«σαá¡Ñ¡¿∩ «¬¡á æ ΓÑ»Ñα∞
  640.      ß«ñÑαª¿Γ ß½«óá "the time".
  641.  
  642.      ┌───────────────────────────────────────────────────────────────┐
  643.      │                                                               │
  644.      │                                                               │
  645.      │                                                               │
  646.      │                                                               │
  647.      │ ┌──────────────────────┐                                      │
  648.      │ │  A         ┌─────────┴──────┐ .                             │
  649.      │ │            │  C             │        .                      │
  650.      │ │    now is  │                │                 .             │
  651.      │ │            │                │                          .    │
  652.      │ └────────────┤                │      ┌───────────────────┬──┐ │
  653.      │              └────────────────┘      │  the time         │  │ │
  654.      │               .                      │                   │  │ │
  655.      │                     .                │                   │  │ │
  656.      │                            .         ├───────────────────┘  │ │
  657.      │                                    . └──────────────────────┘ │
  658.      │                                         üπΣÑα ß«σαá¡Ñ¡¿∩ æ    │
  659.      │                                                               │
  660.      └───────────────────────────────────────────────────────────────┘
  661.  
  662.                É¿ßπ¡«¬ 6.3. ô¡¿τΓ«ªÑ¡¿Ñ ß½«Ñ¡«ú« «¬¡á.
  663.  
  664.  
  665.                              - 18 -
  666.  
  667.           ìѺáó¿ß¿¼« «Γ  ¿ß»«½∞º«óá¡¿∩  ßΓѬ«óδσ  ¿½¿  ß½«Ñ¡δσ   «¬«¡,
  668.      αáí«Γá  ¿σ  íπñÑΓ  ºáó¿ßÑΓ∞  «Γ ΓαÑí«óá¡¿⌐ óáΦÑ⌐ ß¿ßΓѼδ.  èáªñδ⌐
  669.      »«ñσ«ñ ¿¼ÑÑΓ ßó«¿ »αÑ¿¼πΘÑßΓóá ¿ ¡Ññ«ßΓáΓ¬¿.  àß½¿ óδ  ¡áτ὿  ß«
  670.      ßΓѬ«óδσ  «¬«¡  ¿ «í¡áαπª¿½¿ »«ºªÑ,  τΓ« óá¼ ¡πª¡δ ñ«»«½¡¿Γѽ∞¡δÑ
  671.      ßó«⌐ßΓóá  ß½«Ñ¡«⌐  «¬«¡¡«⌐  áασ¿ΓѬΓπαδ,  óδ   ¼«ªÑΓÑ   óδ»«½¡¿Γ∞
  672.      ¿º¼Ñ¡Ñ¡¿Ñ  »πΓѼ  »ÑαѬ«¼»¿½∩µ¿¿  «¬«¡¡δσ Σπ¡¬µ¿⌐ íѺ «»αÑñѽѡ¿∩
  673.      FASTWINDOWS ¿ »ÑαÑαÑñá¬Γ¿α«óáΓ∞ ßó∩º¿ óáΦ¿σ »α«úαá¼¼.
  674.  
  675.  
  676.  
  677.                     Ä¬«¡¡δÑ Σπ¡¬µ¿¿
  678.      -----------------------------------------------------------------
  679.  
  680.           ¥Γ¿ Σπ¡¬µ¿¿   ó¬½ετÑ¡δ  ó  «¬«¡¡πε  í¿í½¿«ΓѬπ.  ä½∩  ¬áªñ«⌐
  681.      Σπ¡¬µ¿¿  «»¿ßá¡δ  ÑÑ  ¡áº¡áτÑ¡¿Ñ  ¿  ß»«ß«í   »α¿¼Ñ¡Ñ¡¿∩.   äá½ÑÑ
  682.      »α¿ó«ñ∩Γß∩ »α¿¼Ñαδ ¿ß»«½∞º«óá¡¿∩ φΓ¿σ Σπ¡¬µ¿⌐.
  683.  
  684.  
  685.              WINDOW *establish_window(x,y,h,w)
  686.              ---------------------------------
  687.  
  688.           ¥Γá Σπ¡¬µ¿∩ ß«ºñáÑΓ «¬¡«,  ¡« ¡Ñ «Γ«íαáªáÑΓ Ñú«. (ä½∩ »«¬áºá
  689.      «¬¡á ó«ß»«½∞ºπ⌐ΓÑß∞ Σπ¡¬µ¿Ñ⌐ display_window).  Åáαá¼ÑΓαδ  x  ¿  y
  690.      ∩ó½∩εΓß∩  ¬««αñ¿¡áΓἿ  óÑασ¡Ñú« ½Ñó«ú« πú½á «¬¡á.  ¥Γ¿ »áαá¼ÑΓαδ
  691.      óδαáªáεΓß∩ ó ß¿¼ó«½∞¡δσ »«º¿µ¿∩σ φ¬αá¡á,  úñÑ  ¬««αñ¿¡áΓδ  ½Ñó«ú«
  692.      óÑασ¡Ñú« πú½á ßἫú« φ¬αá¡á αáó¡δ (0,0). Åáαá¼ÑΓαδ h ¿ w ∩ó½∩εΓß∩
  693.      óδß«Γ«⌐ ¿ Φ¿α¿¡«⌐ «¬¡á ó  ß¿¼ó«½∞¡δσ  »«º¿µ¿∩σ.  ¥Γá  Σπ¡¬µ¿∩  ¡Ñ
  694.      ó맮óÑΓ  ¡¿¬á¬«ú«  ¿º¼Ñ¡Ñ¡¿∩  φ¬αá¡á.  àß½¿  óδ  ß«ºñáñ¿ΓÑ  «¬¡«,
  695.      »«º¿µ¿∩ ¿  αẼÑαδ  ¬«Γ«α«ú«  ¡Ñ  »«ºó«½∩εΓ  Ñ¼π  íδΓ∞  »«½¡«ßΓ∞ε
  696.      ó¿ñ¿¼δ¼,  »α«úαá¼¼¡«Ñ «íÑß»ÑτÑ¡¿Ñ πßΓá¡«ó¿Γ »«º¿µ¿ε,  »α¿ ¬«Γ«α«⌐
  697.      «¡« »«½¡«ßΓ∞ε »«¼ÑßΓ¿Γß∩ ¡á φ¬αá¡Ñ.  àß½¿ Φ¿α¿¡á  í«½∞ΦÑ  80  ¿½¿
  698.      óδß«Γá  í«½∞ΦÑ 25,  Σπ¡¬µ¿∩ »αÑ«íαáºπÑΓ ß««ΓóÑΓßΓóπεΘ¿⌐ αẼÑα ñ«
  699.      ¼á¬ß¿¼á½∞¡« ñ«»πßΓ¿¼«ú« º¡áτÑ¡¿∩.
  700.  
  701.           Ä¬¡« ß«ºñáÑΓß∩  ß  π¼á½τ¿óáÑ¼δ¼¿   áΓα¿íπΓἿ.   àú«   αἬá
  702.      «íαáºπÑΓß∩  «ñ¿¡áα¡δ¼¿ ½¿¡¿∩¼¿,  µóÑΓ ß«ñÑন¼«ú« - ∩ᬫ-íѽδ⌐ ¡á
  703.  
  704.                              - 19 -
  705.      τÑα¡«¼ Σ«¡Ñ,  á ºáú«½«ó«¬ «ΓßπΓßΓóπÑΓ.  ¥Γ¿ áΓα¿íπΓδ  ¼«úπΓ  íδΓ∞
  706.      ¿º¼Ñ¡Ñ¡δ  ß««ΓóÑΓßΓóπεΘ¿¼¿  ó맮óἿ  ñαπú¿σ  Σπ¡¬µ¿⌐,  «»¿ßá¡¡δσ
  707.      ¡¿ªÑ.
  708.  
  709.           Ä¬¡á αáß»«½áúáεΓß∩ ó  «íαáΓ¡«¼  »«α∩ñ¬Ñ  »«  «Γ¡«ΦÑ¡¿ε  ¬ ¿σ
  710.      ß«ºñá¡¿ε. Ä¬¡«, ß«ºñá¡¡«Ñ ßá¼δ¼ »«ß½Ññ¡¿¼, ∩ó½∩ÑΓß∩ óÑασ¡¿¼ «¬¡«¼
  711.      φ¬αá¡á ¿ íπñÑΓ (»α¿ óδñáτÑ)  ºá¬αδóáΓ∞ «¬¡á, ß«ºñá¡¡δÑ αá¡ÑÑ. ¥Γá
  712.      ¿Ñαáασ¿∩ ºáó¿ß¿Γ «Γ »«α∩ñ¬á,  ó ¬«Γ«α«¼ «¬¡á «íαáºπεΓß∩,  á ¡Ñ «Γ
  713.      »«α∩ñ¬á ¿σ »«¬áºá.
  714.  
  715.           öπ¡¬µ¿∩ establish_window   ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ
  716.      WINDOW,  ¬«Γ«αá∩  «»αÑñѽѡá ó« ó¬½ετáѼ«¼  Σá⌐½Ñ twindow.h. ¥Γ«Γ
  717.      π¬áºáΓѽ∞ ¿ß»«½∞ºπÑΓß∩  »α¿ »«ß½ÑñπεΘ¿σ  ó맮óáσ  «¬«¡¡δσ Σπ¡¬µ¿⌐
  718.      ñ½∩ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ «¬¡á,  ¬ ¬«Γ«α«¼π «Γ¡«ß¿Γß∩  ó맮ó. ÅÑαÑñáóá⌐ΓÑ
  719.      π¬áºáΓѽ∞ NULL  ñαπú¿¼  «¬«¡¡δ¼ Σπ¡¬µ¿∩¼,  Ñß½¿ σ«Γ¿ΓÑ αáí«ΓáΓ∞ ß
  720.      «¬¡«¼, «íαẫóá¡¡δ¼ »«ß½Ññ¡¿¼.
  721.  
  722.  
  723.  
  724.                void set_border(WINDOW *wnd, int btype)
  725.                ---------------------------------------
  726.  
  727.           ¥Γá Σπ¡¬µ¿∩ πßΓá¡áó½¿óáÑΓ Γ¿» «¬«¡¡«⌐  αἬ¿.  ûѽ«τ¿ß½Ñ¡¡δ⌐
  728.      »áαá¼ÑΓα btype ñ«½ªÑ¡ »α¿¡¿¼áΓ∞ «ñ¡« ¿º ß½ÑñπεΘ¿σ º¡áτÑ¡¿⌐:
  729.  
  730.      .  0 - «ñ¿¡áα¡δÑ ½¿¡¿¿ (»« π¼«½τá¡¿ε);
  731.      .  1 - ñó«⌐¡δÑ ½¿¡¿¿;
  732.      .  2 - «ñ¿¡áα¡δÑ óÑασ ¿ ¡¿º, ñó«⌐¡δÑ í«¬«óδÑ;
  733.      .  3 - ñó«⌐¡δÑ óÑασ ¿ ¡¿º, «ñ¿¡áα¡δÑ í«¬«óδÑ;
  734.      .  4 - ß»Ñµ¿á½∞¡«Ñ »α«ΓὬ¿óáѼ«Ñ ó¡¿º «¬¡« ¼Ñ¡ε ß «ñ¿¡áα¡δ¼¿
  735.             ½¿¡¿∩¼¿ ¿ t-í½«¬«¼ «Γ óÑασ¡Ñú« ½Ñó«ú« ñ« óÑασ¡Ñú«
  736.             »αáó«ú« πú½á.
  737.  
  738.  
  739.  
  740.      void set_colors(WINDOW *wnd, int area, int bg, int fg, int inten)
  741.      -----------------------------------------------------------------
  742.  
  743.                              - 20 -
  744.  
  745.           ¥Γá Σπ¡¬µ¿∩ πßΓá¡áó½¿óáÑΓ  µóÑΓá  ñ½∩  «¬¡á.  Åáαá¼ÑΓα  area
  746.      ¼«ªÑΓ »α¿¡¿¼áΓ∞ ß½ÑñπεΘ¿Ñ º¡áτÑ¡¿∩:
  747.  
  748.      .  ALL
  749.      .  BORDER
  750.      .  TITLE
  751.      .  ACCENT
  752.      .  NORMAL
  753.  
  754.           ¥Γ«Γ    »áαá¼ÑΓα    «»αÑñѽ∩ÑΓ    τáßΓ¿   «¬¡á,   ¡á ¬«Γ«αδÑ
  755.      αáß»α«ßΓαá¡∩ÑΓß∩ ñÑ⌐ßΓó¿Ñ.  ALL ß««ΓóÑΓßΓóπÑΓ óßѼ τáßΓ∩¼. BORDER
  756.      πßΓá¡áó½¿óáÑΓ  µóÑΓá αἬ¿ «¬¡á,  ¬«Γ«αá∩ ºá¡¿¼áÑΓ «ñ¡«ß¿¼ó«½∞¡δ⌐
  757.      α∩ñ  »«º¿µ¿⌐ ó«¬απú  ¡Ñú«.  TITLE  πßΓá¡áó½¿óáÑΓ µóÑΓá ºáú«½«ó¬á,
  758.      αẼÑΘáѼ«ú« ¡á  óÑασ¡Ñ⌐  úαá¡¿µÑ  «¬¡á.  ACCENT  -  φΓ« «í½áßΓ∞,
  759.      ¿ß»«½∞ºπѼá∩   ñ½∩  í½«¬«ó  ¼Ñ¡ε  ¿  ñαπú«ú«  óδñѽѡ¡«ú« ΓѬßΓá,
  760.      ¬«Γ«αδ⌐  »«∩ó½∩ÑΓß∩  ó  ¬áτÑßΓóÑ  óαѼѡ¡«  »«ñßóÑτ¿óáѼδσ τáßΓÑ⌐
  761.      «í½áßΓ¿ NORMAL,  úñÑ «Γ«íαáªáÑΓß∩ óÑß∞ ΓѬßΓ.  ûѽδÑ  τ¿ß½á bg  ¿
  762.      fg   ºáñáεΓ   µóÑΓá ñ½∩ Σ«¡á  ¿  »ÑαÑñ¡Ñú« »½á¡á αẽ¿τ¡δσ τáßΓÑ⌐
  763.      «¬¡á. ä«»π߬áεΓß∩ ß½ÑñπεΘ¿Ñ µóÑΓá:
  764.  
  765.      .  RED      - á½δ⌐;
  766.      .  GREEN    - ºÑ½Ñ¡δ⌐;
  767.      .  BLUE     - ú«½πí«⌐;
  768.      .  WHITE    - íѽδ⌐;
  769.      .  YELLOW   - ªÑ½Γδ⌐;
  770.      .  AQUA     - á¬óá¼áα¿¡«óδ⌐;
  771.      .  MAGENTA  - ¬αáß¡δ⌐;
  772.      .  BLACK    - τÑα¡δ⌐.
  773.  
  774.           ûѽ«Ñ τ¿ß½«    inten   «»αÑñѽ∩ÑΓ   ¿¡Γѡ߿ó¡«ßΓ∞   ß¿¼ó«½«ó
  775.      »ÑαÑñ¡Ñú« »½á¡á ¿ ¼«ªÑΓ »α¿¡¿¼áΓ∞ ñóá º¡áτÑ¡¿∩:
  776.  
  777.      .  BRIGHT   - ∩α¬á∩
  778.      .  DIM      - «íδτ¡á∩
  779.  
  780.           éßÑ º¡áτÑ¡¿∩  «»αÑñѽѡδ ó ¿ßσ«ñ¡«¼ Σá⌐½Ñ twindow.h, ¬«Γ«αδ⌐
  781.  
  782.                              - 21 -
  783.      αáßß¼áΓα¿óáÑΓß∩ »«ºªÑ ó φΓ«⌐ ú½áóÑ.
  784.  
  785.  
  786.  
  787.                 void set_title(WINDOW *wnd, char *title)
  788.                 ----------------------------------------
  789.  
  790.           ¥Γá Σπ¡¬µ¿∩    πßΓá¡áó½¿óáÑΓ    º¡áτÑ¡¿Ñ   ºáú«½«ó¬á   «¬¡á.
  791.      ÅÑαÑñáóáѼá∩ óἿ  ßΓα«¬á  ñ«½ª¡á  ß«σαá¡∩Γ∞ß∩  ó  ΓÑτÑ¡¿Ñ  óßÑú«
  792.      ßπΘÑßΓó«óá¡¿∩ «¬¡á, »«φΓ«¼π ¿ß»«½∞ºπ⌐ΓÑ ½¿ΓÑαá½∞¡πε ¬«¡ßΓá¡Γπ ¿½¿
  793.      ó¡ÑΦ¡¿⌐ ¼áßß¿ó ß¿¼ó«½«ó.
  794.  
  795.  
  796.  
  797.                 void set_intensity(WINDOW *wnd, int inten)
  798.                 ------------------------------------------
  799.  
  800.           ¥Γá Σπ¡¬µ¿∩ πßΓá¡áó½¿óáÑΓ ¿¡Γѡ߿ó¡«ßΓ∞ Σ«¡á ñ½∩ óßÑσ τáßΓÑ⌐
  801.      «¬¡á. ç¡áτÑ¡¿∩¼¿ inten ¼«úπΓ íδΓ∞ BRIGHT ¿½¿ DIM.
  802.  
  803.  
  804.  
  805.                 void display_window(WINDOW *wnd)
  806.                 --------------------------------
  807.  
  808.           ¥Γá Σπ¡¬µ¿∩  «Γ«íαáªáÑΓ  «¬¡«,  ¬«Γ«α«Ñ  í佫 αá¡ÑÑ ß«ºñá¡«.
  809.      ùΓ«íδ ¿ºíѪáΓ∞  ¡Ñπñáτ¡«ú«  «Γ«íαáªÑ¡¿∩,  óδºδóá⌐ΓÑ  φΓπ  Σπ¡¬µ¿ε
  810.      »«ß½Ñ πßΓᡫ󬿠óßÑσ áΓα¿íπΓ«ó ¿,  Ñß½¿ ó«º¼«ª¡«, »«ß½Ñ Γ«ú«, ¬á¬
  811.      «¬¡« ºá»«½¡Ñ¡« ΓѬßΓ«¼, ¬«Γ«αδ⌐ «¡« ñ«½ª¡« óδñáóáΓ∞.
  812.  
  813.  
  814.  
  815.                  void delete_window(WINDOW *wnd)
  816.                  -------------------------------
  817.  
  818.           ¥Γá  Σπ¡¬µ¿∩  π¡¿τΓ«ªáÑΓ  ß«ºñá¡¡«Ñ  αá¡ÑÑ  «¬¡«.  àß½¿ «¬¡«
  819.      ∩ó½∩ÑΓß∩  ó¿ñ¿¼δ¼  (óδñá¡«  ß  »«¼«Θ∞ε  display_window),  Γ«  «¡«
  820.  
  821.                              - 22 -
  822.      «τ¿ΘáÑΓß∩, ¿ φ¬αá¡ ó«ßßΓá¡áó½¿óáÑΓß∩ ¬ Ñú« »αÑñδñπΘѼπ «íαáºπ.
  823.  
  824.  
  825.  
  826.                  void clear_window(WINDOW *wnd)
  827.                  ------------------------------
  828.  
  829.           ¥Γá Σπ¡¬µ¿∩ ºá»«½¡∩ÑΓ ΓѬßΓ«óπε «í½áßΓ∞ «¬¡á »α«íѽἿ.
  830.  
  831.  
  832.  
  833.                   void hide_window(WINDOW *wnd)
  834.                   -----------------------------
  835.  
  836.           ¥Γá Σπ¡¬µ¿∩ «τ¿ΘáÑΓ óδñá¡¡«Ñ «¬¡«,  ó«ßßΓá¡áó½¿óá∩ ¡á φ¬αá¡Ñ
  837.      Ñú« »αÑñδñπΘÑÑ ß«ñÑন¼«Ñ.  Ä¬¡« «ßΓáÑΓß∩  ßπΘÑßΓóπεΘ¿¼  ¿  ¼«ªÑΓ
  838.      ¼«ñ¿Σ¿µ¿α«óáΓ∞ß∩ ½εíδ¼ ß»«ß«í«¼. Å«ß½ÑñπεΘ¿⌐ ó맮ó display_window
  839.      ó«ßßΓá¡«ó¿Γ  Ñú«  ¡á  φ¬αá¡Ñ   ó   ß««ΓóÑΓßΓóπεΘѼ   αáß»«½«ªÑ¡¿¿
  840.      «Γ¡«ß¿Γѽ∞¡« ñαπú¿σ «¬«¡.
  841.  
  842.  
  843.  
  844.                    void wcursor(WINDOW *wnd, int x, int y)
  845.                    ---------------------------------------
  846.  
  847.           èáªñ«Ñ «¬¡«  «í½áñáÑΓ  ½«ú¿τÑ߬«⌐  »«º¿µ¿Ñ⌐ ¬παß«αá, ¬«Γ«αá∩
  848.      ¿º¼Ñ¡∩ÑΓß∩ «Γ 0,0  (óÑασ¡¿⌐ ½Ñóδ⌐ πú«½ ΓѬßΓ«ó«⌐ «í½áßΓ¿ «¬¡á) ñ«
  849.      úαá¡¿τ¡δσ αẼÑα«ó «¬¡á. ¥Γá Σπ¡¬µ¿∩ »ÑαÑßΓáó½∩ÑΓ ¬παß«α ó  «¬¡Ñ.
  850.  
  851.           öπ¡¬µ¿¿ wputehar ¿ wprintf óδñáεΓ ΓѬßΓ «Γ¡«ß¿Γѽ∞¡«  ñá¡¡«⌐
  852.      »«º¿µ¿¿ ¬παß«αá. Ä¡¿ ¿º¼Ñ¡∩εΓ »«º¿µ¿ε  ¬παß«αá Γ«τ¡«  ΓᬪÑ,  ¬á¬
  853.      φΓ« »α«¿ßσ«ñ¿½« íδ,  Ñß½¿ íδ π»αáó½Ñ¡¿Ñ ¬παß«α«¼ «ßπΘÑßΓó½∩½«ß∞ ß
  854.      »«¼«Θ∞ε   ¬½áó¿áΓπαδ   ñ¿ß»½Ñ∩.    æ¿¼ó«½   ¡«ó«⌐   ßΓ᫬¿   (\n)
  855.      πßΓá¡áó½¿óáÑΓ   ¬παß«α  ó  ¡π½Ñó«⌐   ßΓ«½íѵ   ß½ÑñπεΘÑ⌐  ßΓ᫬¿,
  856.      »ÑαѼÑΘá∩  ΓѬßΓ ó  «¬¡Ñ  óóÑασ ¡á  «ñ¡π ßΓ᫬π,  Ñß½¿ ¬παß«α πªÑ
  857.      ¡áσ«ñ¿Γß∩ ó ¡¿ª¡Ñ⌐ ßΓα«¬Ñ «¬¡á.  æ¿¼ó«½ Γáíπ½∩µ¿¿ (\t) »ÑαѼÑΘáÑΓ
  858.      ¬παß«α   ¬   ß½ÑñπεΘÑ⌐   »«º¿µ¿¿  Γáíπ½∩µ¿¿  ó  «¬¡Ñ.   Æáíπ½∩µ¿¿
  859.  
  860.                              - 23 -
  861.      αáß»«½áúáεΓß∩ ß ¿¡ΓÑαóὫ¼ ó τÑΓδαÑ ß¿¼ó«½á.
  862.  
  863.  
  864.  
  865.                     void wprintf(WINDOW *wnd, char *fmt, ...)
  866.                     -----------------------------------------
  867.  
  868.           ¥Γá  Σπ¡¬µ¿∩  ∩ó½∩ÑΓß∩  «¬«¡¡«⌐  óÑαß¿Ñ⌐ ßΓá¡ñáαΓ¡«⌐ Σπ¡¬µ¿¿
  869.      printf ∩ºδ¬á æ¿.  Ä¡á ¿ß»«½∞ºπÑΓ ßΓá¡ñáαΓ¡πε  Σπ¡¬µ¿ε sprintf ñ½∩
  870.      »«ßΓα«Ñ¡¿∩   ßΓ᫬¿,    óδñáóáѼ«⌐   ó   «¬¡«.   ôíÑñ¿ΓÑß∞,   τΓ«
  871.      αѺπ½∞Γ¿απεΘá∩ ßΓα«¬á ¡Ñ ñ½¿¡¡ÑÑ 100 ß¿¼ó«½«ó, ¿½¿ ¿º¼Ñ¡¿ΓÑ ñ½¿¡π
  872.      ó ¼áßß¿óÑ dlin Σπ¡¬µ¿¿ wprintf ó ¿ßσ«ñ¡«¼ Σá⌐½Ñ twindow.c.
  873.  
  874.  
  875.  
  876.                      void wputchar(WINDOW *wnd, int ch)
  877.                      ----------------------------------
  878.  
  879.           ¥Γá Σπ¡¬µ¿∩ ∩ó½∩ÑΓß∩ «¬«¡¡«⌐ óÑαß¿Ñ⌐ putchar. Ä¡á ºá»¿ßδóáÑΓ
  880.      ß¿¼ó«½ ¿º ch  ó «¬¡« ó  ΓѬπΘπε »«º¿µ¿ε ¬παß«αá.  èπαß«α »α¿ φΓ«¼
  881.      »α«ñó¿úáÑΓß∩ ñá½∞ΦÑ.  àß½¿ ß¿¼ó«½ ∩ó½∩ÑΓß∩  ß¿¼ó«½«¼ ¡«ó«⌐ ßΓ᫬¿
  882.      (\n),  ¬παß«α »ÑαÑßΓáó½∩ÑΓß∩ ó ¡π½Ñóπε  »«º¿µ¿ε ß½ÑñπεΘÑ⌐ ßΓ᫬¿.
  883.      àß½¿  ß¿¼ó«½  ∩ó½∩ÑΓß∩  Γáíπ½∩µ¿Ñ⌐  (\t),  ¬παß«α  »α«ñó¿úáÑΓß∩ ¬
  884.      ß½ÑñπεΘÑ⌐  »«º¿µ¿¿  Γáíπ½∩µ¿¿  «¬¡á.  Ä¬«¡¡δÑ  »«º¿µ¿¿  Γáíπ½∩µ¿¿
  885.      αáß»«½áúáεΓß∩ ó ¬áªñ«⌐ τÑΓóÑαΓ«⌐ »«º¿µ¿¿ «¬¡á.
  886.  
  887.  
  888.  
  889.                       void reverse_video(WINDOW *wnd)
  890.                       -------------------------------
  891.  
  892.           Å«ß½Ñ «íαáΘÑ¡¿∩ ¬ φΓ«⌐ Σπ¡¬µ¿¿ óßÑ ó맮óδ wprintf ¿ wputchar
  893.      íπñπΓ »α¿ «Γ«íαáªÑ¡¿¿ ¿ß»«½∞º«óáΓ∞ µóÑΓá ACCENT ó¼ÑßΓ« NORMAL.
  894.  
  895.  
  896.  
  897.                        void normal_video(WINDOW *wnd)
  898.  
  899.                              - 24 -
  900.                        ------------------------------
  901.  
  902.           Å«ß½Ñ «íαáΘÑ¡¿∩ ¬ φΓ«⌐ Σπ¡¬µ¿¿ óßÑ ó맮óδ wprintf ¿ wputchar
  903.      íπñπΓ »α¿ «Γ«íαáªÑ¡¿¿  ¿ß»«½∞º«óáΓ∞  µóÑΓá  NORMAL.  ¥Γá  Σπ¡¬µ¿∩
  904.      ¿ß»«½∞ºπÑΓß∩  ñ½∩ ó«ºóαáΓá ¬ ¡«α¼á½∞¡«¼π «Γ«íαáªÑ¡¿ε »«ß½Ñ ó맮óá
  905.      reverse_video.
  906.  
  907.  
  908.  
  909.                         void close_all()
  910.                         ----------------
  911.  
  912.           ¥Γá Σπ¡¬µ¿∩ π¡¿τΓ«ªáÑΓ óßÑ «íαẫóá¡¡δÑ «¬¡á.
  913.  
  914.  
  915.  
  916.                  void move_windom(WINDOW *wnd, int x, int y)
  917.                  -------------------------------------------
  918.  
  919.           ¥Γá Σπ¡¬µ¿∩ »ÑαѼÑΘáÑΓ  «¬¡« Γᬿ¼  «íαẫ¼, τΓ« Ñú« óÑασ¡¿⌐
  920.      ½Ñóδ⌐ πú«½ πßΓá¡áó½¿óáÑΓß∩ ó ß¿¼ó«½∞¡δ󠬫«αñ¿¡áΓáσ, ºáñá¡¡δσ x ¿
  921.      π. ¥Γá Σπ¡¬µ¿∩ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡á Γ«½∞¬« ñ½∩ ß½«Ñ¡δ󠫬«¡.
  922.  
  923.  
  924.  
  925.                   void rmove_window(WINDOW *wnd, int x, int y)
  926.                   --------------------------------------------
  927.  
  928.           ¥Γá Σπ¡¬µ¿∩ »ÑαѼÑΘáÑΓ «¬¡« »πΓѼ ñ«íáó½Ñ¡¿∩ ¬ º¡áτÑ¡¿∩¼ x ¿
  929.      y ΓѬπΘ¿σ ¬««αñ¿¡áΓ ½Ñó«ú« óÑασ¡Ñú« πú½á  «¬¡á.  êß»«½∞ºπ⌐ΓÑ  φΓπ
  930.      Σπ¡¬µ¿ε Γ«½∞¬« ñ½∩ ß½«Ñ¡δ󠫬«¡.
  931.  
  932.  
  933.  
  934.                          void forefront(WINDOW *wnd)
  935.                          ---------------------------
  936.  
  937.  
  938.                              - 25 -
  939.           ¥Γá  Σπ¡¬µ¿∩  »ÑαѼÑΘáÑΓ  «¬¡«  ó  ßἫѠ »ÑαÑñ¡ÑÑ »«½«ªÑ¡¿Ñ
  940.      «Γ¡«ß¿Γѽ∞¡« ñαπú¿σ  «¬«¡.  Ä¬¡«,  Ñß½¿  «¡« ó¿ñ¿¼«, «Γ«íαáªáÑΓß∩
  941.      »«óÑασ «ßΓá½∞¡δσ.  êß»«½∞ºπ⌐ΓÑ  φΓπ  Σπ¡¬µ¿ε  Γ«½∞¬«  ñ½∩ ß½«Ñ¡δσ
  942.      «¬«¡.
  943.  
  944.  
  945.  
  946.                          void rear_window(WINDOW *wnd)
  947.                          -----------------------------
  948.  
  949.           ¥Γá Σπ¡¬µ¿∩  »ÑαѼÑΘáÑΓ  «¬¡«  ó  ßἫѠ  ºáñ¡ÑÑ   »«½«ªÑ¡¿Ñ
  950.      «Γ¡«ß¿Γѽ∞¡« ñαπú¿σ «¬«¡. Ä¬¡«, Ñß½¿ «¡« ó¿ñ¿¼«, «Γ«íαáªáÑΓß∩ »«ñ
  951.      óßѼ¿ «ßΓá½∞¡δ¼¿.  êß»«½∞ºπ⌐ΓÑ φΓπ  Σπ¡¬µ¿ε  Γ«½∞¬«  ñ½∩  ß½«Ñ¡δσ
  952.      «¬«¡.
  953.  
  954.  
  955.  
  956.               int get_selection(WINDOW *wnd, int sel, char *keys)
  957.               ---------------------------------------------------
  958.  
  959.           ¥Γá Σπ¡¬µ¿∩ »«ºó«½∩ÑΓ ¿ß»«½∞º«óáΓ∞ «¬¡« ó  ¬áτÑßΓóÑ ¼Ñ¡ε. éδ
  960.      ñ«½ª¡δ ß«ºñáΓ∞ «¬¡«  ¿ ºá»¿ßáΓ∞  ó ¡Ñú«  ¡Ñ߬«½∞¬«  ßΓ᫬ ΓѬßΓá,
  961.      ß¬áªÑ¼,  Σπ¡¬µ¿Ñ⌐ wprintf.  éδ ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ set_colors ñ½∩
  962.      πßΓᡫ󬿠 º¡áτÑ¡¿⌐ µóÑΓ«ó ACCENT  ó «¬¡Ñ (»«  π¼«½τá¡¿ε - τÑα¡δÑ
  963.      íπ¬óδ ¡á íѽ«¼ Σ«¡Ñ).  çáΓѼ óδ  óδºδóáÑΓÑ get_selection. öπ¡¬µ¿∩
  964.      ¿ß»«½∞ºπÑΓ  «¬¡«  ó   ¬áτÑßΓóÑ  ¼Ñ¡ε,   ¬áªñá∩   ßΓα«¬á  ¬«Γ«α«ú«
  965.      »αÑñßΓáó½∩ÑΓ  á½∞ΓÑα¡áΓ¿óπ  óδí«αá.  Ç½∞ΓÑα¡áΓ¿óδ  »«ñßóÑτ¿óáεΓß∩
  966.      µóÑΓ«¼  ACCENT.   ûѽ«τ¿ß½Ñ¡¡«Ñ  º¡áτÑ¡¿Ñ  sel  ¿ß»«½∞ºπÑΓß∩  ñ½∩
  967.      »Ñαó«¡áτá½∞¡«ú« αẼÑΘÑ¡¿∩ ∩ᬫú« í½«¬á ¬παß«αá ¼Ñ¡ε ¡á  «ñ¡«⌐ ¿º
  968.      á½∞ΓÑα¡áΓ¿ó.  ç¡áτÑ¡¿Ñ 1  ß««ΓóÑΓßΓóπÑΓ »Ñαó«⌐ á½∞ΓÑα¡áΓ¿óÑ,  2 -
  969.      óΓ«α«⌐ ¿ Γ.ñ.
  970.  
  971.           Å«½∞º«óáΓѽ∞ ¼«ªÑΓ  »ÑαѼÑΘáΓ∞  í½«¬  ¼Ñ¡ε  óóÑασ   ¿   ó¡¿º
  972.      ¬½áó¿ΦἿ π»αáó½Ñ¡¿∩ ¬παß«α«¼ ¿ »α«¿ºó«ñ¿Γ∞ óδí«α ó ¼Ñ¡ε ¬½áó¿ΦÑ⌐
  973.      <éó«ñ>.  è½áó¿Φá <è½ετ> »α¿¼Ñ¡∩ÑΓß∩ ñ½∩ óδσ«ñá ¿º φΓ«ú« »α«µÑßßá.
  974.  
  975.           Cß佬á keys  π¬áºδóáÑΓ  ¡á  ßΓα«¬π  º¡áτÑ¡¿⌐ ¬½áó¿Φ, ¬«Γ«αδÑ
  976.  
  977.                              - 26 -
  978.      ¼«úπΓ ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩ óδí«αá ¿º ¼Ñ¡ε.  ìѬ«Γ«αδÑ ß¿ßΓÑ¼δ  ¼Ñ¡ε
  979.      αáºαÑΦáεΓ  »«½∞º«óáΓÑ½ε  »α¿¼Ñ¡∩Γ∞   ¡áªáΓ¿∩   ¬½áó¿Φ   ¡áα∩ñπ  ß
  980.      »ÑαѼÑΘÑ¡¿Ñ¼  í½«¬á  ¬παß«αá.  ä½∩  ó䬽ετÑ¡¿∩  φΓ«⌐  ó«º¼«ª¡«ßΓ¿
  981.      »ÑαÑñá⌐ΓÑ »áαá¼ÑΓαπ keys ßß佬π NULL.
  982.  
  983.           ¥Γá Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ µÑ½«τ¿ß½Ñ¡¡«Ñ º¡áτÑ¡¿Ñ, αáó¡«Ñ ¡«¼Ñαπ
  984.      óδíαá¡¡«⌐ ó ¼Ñ¡ε á½∞ΓÑα¡áΓ¿óδ.  ç¡áτÑ¡¿Ñ «íδτ¡« αáó¡∩ÑΓß∩ Ññ¿¡¿µÑ
  985.      ¿ í«½ÑÑ,  «ñ¡á¬«,  Ñß½¿  »«½∞º«óáΓѽ∞  ¡áª¿¼áÑΓ  ¬½áó¿Φπ  <è½ετ>,
  986.      Σπ¡¬µ¿∩  ó«ºóαáΘáÑΓ ¡π½∞. öπ¡¬µ¿∩ íπñÑΓ ΓᬪѠó«ºóαáΘáΓ∞ º¡áτÑ¡¿∩
  987.      FWD  ¿½¿  BS,  Ñß½¿   »«½∞º«óáΓѽ∞  ¡áª¿¼áÑΓ  ¬½áó¿Φ¿  π»αáó½Ñ¡¿∩
  988.      ¬παß«α«¼ ó»αáó« ¿½¿ ó½Ñó«. ¥Γ¿ º¡áτÑ¡¿∩ «»αÑñѽѡδ ó keys.h.
  989.  
  990.  
  991.  
  992.                      void error_message(char *s)
  993.                      ---------------------------
  994.  
  995.           ¥Γá Σπ¡¬µ¿∩ óδñáÑΓ ß««íΘÑ¡¿Ñ  «í «Φ¿í¬Ñ, π¬áºδóáѼ«Ñ ßß佬«⌐
  996.      s,  ¿  ó¬½ετáÑΓ   ºóπ¬«ó«⌐   ß¿ú¡á½.   æ««íΘÑ¡¿Ñ  «Γ«íαáªáÑΓß∩  ó
  997.      «¬¡Ñ ó ¡¿ª¡Ñ¼  »αáó«¼  ¬óáñαá¡ΓÑ φ¬αá¡á.  æ««íΘÑ¡¿Ñ  «ßΓáÑΓß∩  ¡á
  998.      φ¬αá¡Ñ »«ß½Ñ ºáóÑαΦÑ¡¿∩ Σπ¡¬µ¿¿.
  999.  
  1000.  
  1001.  
  1002.                        void clear_message()
  1003.                        --------------------
  1004.  
  1005.           ¥Γá Σπ¡¬µ¿∩ πñá½∩ÑΓ  ß««íΘÑ¡¿Ñ  «í  «Φ¿í¬Ñ,  Ñß½¿  «¡«  í佫
  1006.      óδñá¡« Σπ¡¬µ¿Ñ⌐ error_message.
  1007.  
  1008.  
  1009.  
  1010.                ï¿ßΓ¿¡ú¿ «¬«¡¡δσ Σπ¡¬µ¿⌐
  1011.      -----------------------------------------------------------------
  1012.  
  1013.           äá¡¡δÑ ½¿ßΓ¿¡ú¿ ß«ñÑαªáΓ ¿ßσ«ñ¡δÑ  Σá⌐½δ  Σπ¡¬µ¿⌐  »«ññÑ᪬¿
  1014.      «¬¡á. Åα¿ó«ñ∩Γß∩ ñóá  ½¿ßΓ¿¡úá:  twindow.h  ¿  twindow.c.  èáªñδ⌐
  1015.  
  1016.                              - 27 -
  1017.      ½¿ßΓ¿¡ú ß«»α«ó«ªñáÑΓß∩ «»¿ß᡿Ѽ Ñú« ß«ñÑαªá¡¿∩.
  1018.  
  1019.  
  1020.                  êßσ«ñ¡δ⌐ ½¿ßΓ¿¡ú: twindow.h
  1021.                  ---------------------------
  1022.  
  1023.           ï¿ßΓ¿¡ú 6.1,  twindow.h,  «»αÑñѽ∩ÑΓ  «¬«¡¡δÑ  ßΓαπ¬Γπαδ   ¿
  1024.      ß«ñÑαª¿Γ  »α«Γ«Γ¿»δ  ñ½∩  Σπ¡¬µ¿⌐.  éδ ñ«½ª¡δ ó¬½ετáΓ∞ ¿σ ó ½εíπε
  1025.      ¿ßσ«ñ¡πε »α«úαá¼¼π, ¬«Γ«αá∩ ¿ß»«½∞ºπÑΓ «¬«¡¡δÑ Σπ¡¬µ¿¿.
  1026.  
  1027.      ï¿ßΓ¿¡ú 6.1: twindow.h
  1028.  
  1029.      /* twindow.h */
  1030.      /*  éδñѽ¿ΓÑ φΓ« «»αÑñѽѡ¿Ñ ¿º ¬«¼¼Ñ¡Γáα¿∩ ñ½∩ ßΓѬ«óδ󠫬«¡,
  1031.      *   ¡« ¡Ñ ñ½∩ ß½«Ñ¡δ󠫬«¡.
  1032.      *
  1033.      * #define FASTWINDOWS
  1034.      *
  1035.      */
  1036.      /* window colors */
  1037.  
  1038.      #define RED   4
  1039.      #define GREEN 2
  1040.      #define BLUE  1
  1041.      #define WHITE (RED+GREEN+BLUE)
  1042.      #define YELLOW (RED+GREEN)
  1043.      #define AQUA (GREEN+BLUE)
  1044.      #define MAGENTA (RED+BLUE)
  1045.      #define BLACK 0
  1046.      #define BRIGHT 8
  1047.      #define DIM 0
  1048.  
  1049.      #define BORDER 0
  1050.      #define TITLE 1
  1051.      #define ACCENT 2
  1052.      #define NORMAL 3
  1053.      #define ALL 4
  1054.  
  1055.                              - 28 -
  1056.  
  1057.      #define TRUE 1
  1058.      #define FALSE 0
  1059.      #define ERROR -1
  1060.      #define OK 0
  1061.  
  1062.      /* «¬«¡¡δÑ π»αáó½∩εΘ¿Ñ ßΓαπ¬Γπαδ */
  1063.  
  1064.      typedef struct field {    /* «»¿ßá¡¿Ñ »«½∩ óó«ñá ñá¡¡δσ  */
  1065.          char *fmask;          /* ¼á߬ᠻ«½∩ óó«ñá ñá¡¡δσ */
  1066.          int fprot;            /* ºáΘ¿Γá »«½∩ */
  1067.          char *fbuff;          /* íπΣÑα »«½∩ */
  1068.          int ftype;            /* Γ¿» »«½∩ */
  1069.          int from;             /* ßΓα«¬á »«½∩ */
  1070.          int fcol;             /* ßΓ«½íѵ »«½∩ */
  1071.          void (*fhelp)();      /* Σπ¡¬µ¿∩ »«ñ߬Ậ¿ »«½∩ */
  1072.          char *fhwin;          /* Σπ¡¬µ¿∩ »«ñ߬Ậ¿ «¬¡á */
  1073.          int flx, fly;         /* αáß»«½«ªÑ¡¿Ñ »«ñ߬Ậ¿ «¬¡á */
  1074.          int (*fvalid)();      /* Σπ¡¬µ¿∩ ºá»«½¡Ñ¡¿∩ »«½∩ */
  1075.          struct field *fnxt;   /* ß½ÑñπεΘÑÑ »«½Ñ óδñáτ¿ */
  1076.          struct field *fprv;   /* »αÑñδñπΘÑÑ »«½Ñ óδñáτ¿ */
  1077.      } FIELD;
  1078.      typedef struct _wnd {
  1079.          int _wv;            /* ¿ßΓ¿¡á, Ñß½¿ «¬¡« ó¿ñ¿¼« */
  1080.          int _hd;            /* ¿ßΓ¿¡á, Ñß½¿ «¬¡« ß¬αδΓ« */
  1081.          char *_ws;         /* π¬áºδóáÑΓ ¡á í½«¬ ß«σαá¡Ñ¡¿∩ «¬¡á */
  1082.          char *_tl;         /* π¬áºδóáÑΓ ¡á ºáú«½«ó«¬ «¬¡á */
  1083.          int _wx;           /* nv x ¬««αñ¿¡áΓá */
  1084.          int _wy;           /* nv y ¬««αñ¿¡áΓá */
  1085.          int _ww;           /* Φ¿α¿¡á «¬¡á */
  1086.          int _wh;           /* óδß«Γá «¬¡á */
  1087.          int _wsp;          /* π¬áºáΓѽ∞ »α«¬απΓ¬¿ */
  1088.          int _sp;           /* π¬áºáΓѽ∞ óδí«αá */
  1089.          int _cr;           /* »«º¿µ¿∩  σ  ¬παß«αá */
  1090.          int btype;         /* Γ¿» αἬ¿ */
  1091.          int wcolor[4];     /* µóÑΓá «¬¡á */
  1092.          int _pn;           /* »αÑñδñπΘ¿⌐ ¡«α¼á½∞¡δ⌐ µóÑΓ */
  1093.  
  1094.                              - 29 -
  1095.          struct _wnd *_nx;  /* π¬áºδóáÑΓ ¡á ß½ÑñπεΘÑÑ «¬¡« */
  1096.          struct _wnd *_pv;  /* π¬áºδóáÑΓ ¡á »αÑñδñπΘÑÑ «¬¡« */
  1097.          FIELD *_fh;        /* π¬áºδóáÑΓ ¡á 1-Ñ »«½Ñ óó«ñá ñá¡¡δσ */
  1098.          FIELD *_ft;    /* π¬áºδóáÑΓ ¡á »«ß½Ññ¡ÑÑ »«½Ñ óó«ñá ñá¡¡δσ */
  1099.      } WINDOW;
  1100.      typedef struct w_menu {
  1101.          char *mname;
  1102.          char **mselcs;
  1103.          void (**func)();
  1104.      } MENU;
  1105.      #define SAV      (wnd->_ws)
  1106.      #define WTITLE   (wnd->_tl)
  1107.      #define COL      (wnd->_wx)
  1108.      #define ROW      (wnd->_wy)
  1109.      #define WIDTH    (wnd->_ww)
  1110.      #define HEIGHT   (wnd->_wh)
  1111.      #define SCROLL   (wnd->_wsp)
  1112.      #define SELECT   (wnd->_sp)
  1113.      #define WCURS    (wnd->_cr)
  1114.      #define WBORDER  (wnd->wcolor[BORDER])
  1115.      #define WTITLEC  (wnd->wcolor[TITLE])
  1116.      #define WACCENT  (wnd->wcolor[ACCENT])
  1117.      #define WNORMAL  (wnd->wcolor[NORMAL])
  1118.      #define PNORMAL  (wnd->_pn)
  1119.      #define BTYPE    (wnd->btype)
  1120.      #define NEXT     (wnd->_nx)
  1121.      #define PREV     (wnd->_pv)
  1122.      #define WCOLOR   (wnd->wcolor)
  1123.      #define VISIBLE  (wnd->_wv)
  1124.      #define HIDDEN   (wnd->_hd)
  1125.      #define FHEAD    (wnd->_fh)
  1126.      #define FTAIL    (wnd->_ft)
  1127.  
  1128.      #define NW       (wcs[wnd->btype].nw)
  1129.      #define NE       (wcs[wnd->btype].ne)
  1130.      #define SE       (wcs[wnd->btype].se)
  1131.      #define SW       (wcs[wnd->btype].sw)
  1132.  
  1133.                              - 30 -
  1134.      #define SIDE     (wcs[wnd->btype].side)
  1135.      #define LINE     (wcs[wnd->btype].line)
  1136.  
  1137.      /* ÅÉÄÆÄÆêÅ¢ öôìèûêë ê îÇèÉÄæ¢ */
  1138.  
  1139.      /* «íΘѵѽÑóδÑ Σπ¡¬µ¿¿ ¿ ¼á¬α«ßδ */
  1140.  
  1141.      void clear_screen(void);
  1142.      int vmode(void);
  1143.      void cursor(int, int);
  1144.      void curr_cursor(int *, int *);
  1145.      int cursor_type(void);
  1146.      void set_cursor_type(int);
  1147.      int get_char(void);
  1148.      int scroll_lock(void);
  1149.      void vpoke(unsigned, unsigned, unsigned);
  1150.      int vpeek(unsigned, unsigned);
  1151.  
  1152.      /* «¬«¡¡δÑ Σπ¡¬µ¿¿ ¿ ¼á¬α«ßδ */
  1153.  
  1154.      WINDOW *establish_window(int, int, int, int);
  1155.      void set_border(WINDOW *, int);
  1156.      void set_colors(WINDOW *, int, int, int, int);
  1157.      void set_intensity(WINDOW *, int);
  1158.      void set_title(WINDOW *, char *);
  1159.      void display_window(WINDOW *);
  1160.      void delete_window(WINDOW *);
  1161.      void clear_window(WINDOW *);
  1162.      void hide_window(WINDOW *);
  1163.      void wprintf(WINDOW *, char *, ...);
  1164.      void wputchar(WINDOW *, int);
  1165.      void close_all(void);
  1166.      void wcursor(WINDOW *, int x, int y);
  1167.      void error_message(char *);
  1168.      void clear_message(void);
  1169.      int get_selection(WINDOW *, int, char *);
  1170.  
  1171.  
  1172.                              - 31 -
  1173.      #define reverse_video(wnd) wnd->wcolor[3]=wnd->wcolor[2]
  1174.      #define normal_video(wnd) wnd->wcolor[3]=wnd->_pn
  1175.      #define rmove_window(wnd,x,y) repos_wnd(wnd, x, y, 0)
  1176.      #define move_window(wnd,x,y) repos_wnd(wnd, COL-x, ROW-y, 0)
  1177.      #define forefront(wnd) repos_wnd(wnd, 0, 0, 1)
  1178.      #define rear_window(wnd) repos_wnd(wnd, 0, 0, -1)
  1179.  
  1180.      /* ó¡πΓαÑ¡¡¿Ñ ñ½∩ «¬«¡¡δσ »α«µÑßß«ó */
  1181.  
  1182.      void accent(WINDOW *);
  1183.      void deaccent(WINDOW *);
  1184.      void scroll(WINDOW *, int);
  1185.      void repos_wnd(WINDOW *, int, int, int);
  1186.      void acline(WINDOW *, int);
  1187.      #define accent(wnd) acline(wnd, WACCENT)
  1188.      #define deaccent(wnd) acline(wnd, WNORMAL)
  1189.      #define clr(bg,fg,in) ((fg)|(bg<<4)|(in))
  1190.      #define vad(x,y) ((y)*160+(x)*2)
  1191.      #ifdef FASTWINDOWS
  1192.      #define cht(ch,at) (((ch)&255)|((at)<<8))
  1193.      #define displ(w,x,y,c,a) vpoke(VSG,vad(x+COL,y+ROW),cht(c,a))
  1194.      #define dget(w,x,y) vpeek(VSG,vad(x+COL,y+ROW))
  1195.      #define verify_wnd(w) (*(w)=listtail)!=0
  1196.      #else
  1197.      void displ(WINDOW *wnd, int x, int y, int ch, int at);
  1198.      #endif
  1199.      /* Σπ¡¬µ¿∩ αÑñá¬Γ«αá */
  1200.      void text_editor(WINDOW *, char *, unsigned);
  1201.  
  1202.      /* Σπ¡¬µ¿∩ ¼Ñ¡ε */
  1203.      void menu_select(char *name, MENU *mn);
  1204.  
  1205.      /* Σπ¡¬µ¿∩ »«ñ߬Ậ¿ */
  1206.      void load_help(char *);
  1207.      void set_help(char *, int, int);
  1208.  
  1209.      /* Σπ¡¬µ¿∩ óó«ñá ñá¡¡δσ */
  1210.  
  1211.                              - 32 -
  1212.      void init_template(WINDOW *);
  1213.      FIELD *establish_field(WINDOW *, int, int, char *, char *, int);
  1214.      void clear_template(WINDOW *);
  1215.      void field_tally(WINDOW *);
  1216.      int data_entry(WINDOW *);
  1217.      void wprompt(WINDOW *, int, int, char *);
  1218.      void error_message(char *);
  1219.      void clear_notice(void);
  1220.      void field_window(FIELD *, char *, int, int);
  1221.      #define field_protect(f,s)   f->fprot=s
  1222.      #define field_help(f,h)      f->fhelp=h
  1223.      #define field_validate(f,v)  f->fvalid=v
  1224.  
  1225.  
  1226.  
  1227.                Ä»¿ßá¡¿Ñ »α«úαá¼¼δ: twindow.h
  1228.      -----------------------------------------------------------------
  1229.  
  1230.           â½«íá½∞¡á∩ »ÑαѼѡ¡á∩    FASTWINDOWS    «»αÑñѽѡᠠ  ó¡πΓα¿
  1231.      ¬«¼¼Ñ¡Γáα¿∩  ó  »αÑñßΓáó½Ñ¡¡«⌐  »α«úαá¼¼Ñ.  é¬½ετÑ¡¿Ñ  »ÑαѼѡ¡«⌐
  1232.      αáßßτ¿Γá¡«  ¡á  »α¿¼Ñ¡Ñ¡¿Ñ  ßΓѬ«ó«⌐  «¬«¡¡«⌐  ¬«¡Σ¿úπαᵿ¿.  üѺ
  1233.      ¿º¼Ñ¡Ñ¡¿⌐  »α¿   ¬«¼»¿½∩µ¿¿   íπñÑΓ   »α¿¡∩Γá   ß½«Ñ¡á∩   «¬«¡¡á∩
  1234.      ¬«¡Σ¿úπαᵿ∩.  ä½∩ ¬«¼»¿½∩µ¿¿ ßΓѬ«ó«⌐ «¬«¡¡«⌐ ß¿ßΓÑ¼δ ¡Ñ«íσ«ñ¿¼«
  1235.      óδñѽ¿Γ∞ «»ÑαáΓ«α #define ¿º ¬«¼¼Ñ¡Γáα¿∩.
  1236.  
  1237.           æΓαπ¬Γπαá   FIELD  ¿ß»«½∞ºπÑΓß∩  ñ½∩ «»αÑñѽѡ¿∩ »«½Ñ⌐ óó«ñá
  1238.      ñá¡¡δσ  ó¡πΓα¿  «í½áßΓ¿ ñá¡¡δσ  ó «¬¡áσ.  ¥Γ«Γ  »α«µÑßß  «»¿ßá¡ ó
  1239.      â½áóÑ 8.
  1240.  
  1241.           æΓαπ¬Γπαá  WINDOW  «»¿ßδóáÑΓ «¬¡« ñ½∩ ß¿ßΓѼδ . èáªñ«¼π «¬¡π
  1242.      ¡áº¡áτáÑΓß∩ «ñ¡á ßΓαπ¬Γπαá φΓ«ú« Γ¿»á.
  1243.  
  1244.           æΓαπ¬Γπαá    MENU    ¿ß»«½∞ºπÑΓß∩  »α«úαá¼¼¡δ¼  «íÑß»ÑτÑ¡¿Ñ¼
  1245.      «¬«¡¡δσ ¼Ñ¡ε  ó â½áóÑ 10.  ä«½ªÑ¡ íδΓ∞  ¼áßß¿ó  ßΓαπ¬Γπα  MENU  ß
  1246.      «ñ¡¿¼ φ½Ñ¼Ñ¡Γ«¼ ñ½∩ ¬áªñ«ú« »α«ΓὬ¿óáѼ«ú« ó¡¿º ¼Ñ¡ε.
  1247.  
  1248.           æ»¿ß«¬   «»ÑαáΓ«α«ó    #define   ¿ß»«½∞ºπÑΓß∩  ñ½∩  »α¿ñá¡¿∩
  1249.  
  1250.                              - 33 -
  1251.      «»ÑαáΓ«αá¼  ó   twindow.c  ½πτΦÑ⌐ τ¿ΓáѼ«ßΓ¿. î¡Ñ¼«¡¿τÑ߬¿Ñ ¿¼Ñ¡á
  1252.      ß««ΓóÑΓßΓóπεΓ φ½Ñ¼Ñ¡Γá¼   ßΓαπ¬Γπαδ    WINDOW,  π¬áºá¡¡«⌐ ßß佬«⌐
  1253.      wnd.  éßÑ Σπ¡¬µ¿¿ ó   twindow.c  ¿ß»«½∞ºπεΓ  ¿¼∩  φΓ«⌐  ßß佬¿ »«
  1254.      ß«ú½áΦÑ¡¿ε.
  1255.  
  1256.           twindow.h   ß«ñÑαª¿Γ  »α«Γ«Γ¿»δ  ñ½∩  óßÑσ  «¬«¡¡δσ Σπ¡¬µ¿⌐,
  1257.      ¬«Γ«αδÑ íπñπΓ óδºδóáΓ∞ß∩ »α¿¬½áñ¡δ¼¿ »α«úαἼἿ.
  1258.  
  1259.  
  1260.                    êßσ«ñ¡δ⌐ ½¿ßΓ¿¡ú: twindow.c.
  1261.                    ----------------------------
  1262.  
  1263.           ï¿ßΓ¿¡ú  6.2  -  φΓ«   twindow.c.  Ä¡ ß«ñÑαª¿Γ óßÑ «»¿ßá¡¡δÑ
  1264.      αá¡ÑÑ ó φΓ«⌐  ú½áóÑ  Σπ¡¬µ¿¿.  éδ  ñ«½ª¡δ  «Γ¬«¼»¿½¿α«óáΓ∞  Ñú« ¿
  1265.      ßó∩ºδóáΓ∞  Ñú«  «íΩÑ¬Γ¡δ⌐  ¼«ñπ½∞  ß  ½εí«⌐  »α«úαá¼¼«⌐,  ¬«Γ«αá∩
  1266.      ¿ß»«½∞ºπÑΓ «¬¡á.  Å«ß¬«½∞¬π «¡ óδºδóáÑΓ Σπ¡¬µ¿¿ ¿º   ibmpc.c, Ñú«
  1267.      «íΩÑ¬Γ¡δ⌐  ¼«ñπ½∞  ñ«½ªÑ¡  íδΓ∞  ΓᬪѠ ó¬½ετÑ¡  ó αÑñá¬Γ¿α«óá¡¿Ñ
  1268.      ßó∩ºÑ⌐.
  1269.  
  1270.      ï¿ßΓ¿¡ú 6-2: twindow.c
  1271.  
  1272.      /* twindow.c */
  1273.      #include <stdio.h>
  1274.      #include <ctype.h>
  1275.      #include <stdarg.h>
  1276.      #include <dos.h>
  1277.      #include <alloc.h>
  1278.      #include <stdlib.h>
  1279.      #include <string.h>
  1280.      #include "twindow.h"
  1281.      #include "keys.h"
  1282.  
  1283.      #define TABS 4
  1284.      #define SCRNHT 25
  1285.      #define SCRNWIDTH 80
  1286.      #define ON  1
  1287.      #define OFF 0
  1288.  
  1289.                              - 34 -
  1290.      #define ERROR -1
  1291.  
  1292.      /* ½«¬á½∞¡δÑ »α«Γ«Γ¿»δ */
  1293.      redraw(WINDOW *wnd);
  1294.      wframe(WINDOW *wnd);
  1295.      dtitle(WINDOW *wnd);
  1296.      int *waddr(WINDOW *wnd, int x, int y);
  1297.      vswap(WINDOW *wnd);
  1298.      vsave(WINDOW *wnd);
  1299.      vrstr(WINDOW *wnd);
  1300.      add_list(WINDOW *wnd);
  1301.      beg_list(WINDOW *wnd);
  1302.      remove_list(WINDOW *wnd);
  1303.      insert_list(WINDOW *wl, WINDOW *w2);
  1304.      #ifndef FASTWINDOWS
  1305.      int dget(WINDOW *wnd, int x, int y);
  1306.      verify_wnd(WINDOW **wl);
  1307.      #endif
  1308.  
  1309.      /* ¼áßß¿ó ¡áí«α«ó ß¿¼ó«½«ó αἬ¿ */
  1310.      struct {
  1311.          int nw, ne, se, sw, side, line;
  1312.      } wcs[] = {
  1313.          {218,191,217,192,179,196},  /* «ñ¿¡áα¡á∩ ½¿¡¿∩ */
  1314.          {201,187,188,200,186,205},  /* ñó«⌐¡á∩ ½¿¡¿∩ */
  1315.          {214,183,189,211,186,196}, /* «ñ¿¡áα¡δ⌐ óÑασ, ñó«⌐¡δÑ í«¬á */
  1316.          {213,184,190,212,179,205}, /* ñó«⌐¡«⌐ óÑασ, «ñ¿¡áα¡δÑ í«¬á */
  1317.          {194,194,217,192,179,196},  /* óδΓὬ¿óáѼ«Ñ ó¡¿º ¼Ñ¡ε */
  1318.      };
  1319.  
  1320.  
  1321.      /* ú«½«óá ¿ σó«ßΓ ßó∩ºá¡¡«ú« ß»¿ß¬á «¬«¡¡δσ ßΓαπ¬Γπα */
  1322.      WINDOW *listhead = NULL;
  1323.      WINDOW *listtail = NULL;
  1324.      int VSG;    /*  áñαÑß ó¿ñÑ«ßÑú¼Ñ¡Γá  */
  1325.  
  1326.      /* ß«ºñá¡¿Ñ ¡«ó«ú« «¬¡á */
  1327.  
  1328.                              - 35 -
  1329.      WINDOW *establish_window(x, y, h, w)
  1330.      {
  1331.          WINDOW *wnd;
  1332.  
  1333.          VSG = (vmode() == 7 ? 0xb000 : 0xb800);
  1334.          if ((wnd = (WINDOW *) malloc(sizeof (WINDOW))) == NULL)
  1335.              return NULL;
  1336.      /* »áαá¼ÑΓαδ «úαá¡¿τÑ¡¿⌐ */
  1337.      WTITLE = "";
  1338.      HEIGHT = min(h, SCRNHT);
  1339.      WIDTH = min(w, SCRNWIDTH);
  1340.      COL = max(0, min(x, SCRNWIDTH-WIDTH));
  1341.      ROW = max(0, min(y, SCRNHT-HEIGHT));
  1342.      WCURS = 0;
  1343.      SCROLL = 0;
  1344.      SELECT = 1;
  1345.      BTYPE = 0;
  1346.      VISIBLE = HIDDEN = 0;
  1347.      PREV = NEXT = NULL;
  1348.      FHEAD = FTAIL = NULL;
  1349.      WBORDER=WNORMAL=PNORMAL=WTITLEC =
  1350.                  clr(BLACK, WHITE, BRIGHT);
  1351.      WACCENT = clr(WHITE, BLACK, DIM);
  1352.          if ((SAV = malloc(WIDTH * HEIGHT * 2)) == (char *) 0)
  1353.              return NULL;
  1354.          add_list(wnd);
  1355.      #ifndef FASTWINDOWS
  1356.          clear_window(wnd);
  1357.          wframe(wnd);
  1358.      #endif
  1359.          return wnd;
  1360.      }
  1361.  
  1362.      /* πßΓá¡«ó¿Γ∞ αá¼¬π «¬¡á */
  1363.      void set_border(WINDOW *wnd, int btype)
  1364.      {
  1365.          if (verify_wnd(&wnd))   {
  1366.  
  1367.                              - 36 -
  1368.              BTYPE = btype;
  1369.              redraw(wnd);
  1370.          }
  1371.      }
  1372.  
  1373.      /* πßΓá¡«ó¿Γ∞ µóÑΓá */
  1374.      void set_colors(WINDOW *wnd,int area, int bg, int fg, int inten)
  1375.      {
  1376.          if (vmode() == 7)   {
  1377.              if (bg != WHITE && bg != BLACK)
  1378.                  return;
  1379.              if (fg != WHITE && fg != BLACK)
  1380.                  return;
  1381.          }
  1382.          if (verify_wnd(&wnd))   {
  1383.              if (area == ALL)
  1384.                  while (area)
  1385.                      WCOLOR [--area] = clr(bg, fg, inten);
  1386.              else
  1387.                  WCOLOR [area] = clr(bg, fg, inten);
  1388.              redraw(wnd);
  1389.          }
  1390.      }
  1391.  
  1392.      /* πßΓá¡«ó¿Γ∞ ∩ᬫßΓ∞ «¬¡á */
  1393.      void set_intensity(WINDOW *wnd, int inten)
  1394.      {
  1395.          int area = ALL;
  1396.  
  1397.          if (verify_wnd(&wnd))    {
  1398.              while (area)    {
  1399.                  WCOLOR [--area] &= ~BRIGHT;
  1400.                  WCOLOR [area] |= inten;
  1401.             }
  1402.             redraw(wnd);
  1403.          }
  1404.      }
  1405.  
  1406.                              - 37 -
  1407.  
  1408.      /* πßΓá¡«ó¿Γ∞ ºáú«½«ó«¬ */
  1409.      void set_title(WINDOW *wnd, char *title)
  1410.      {
  1411.          if (verify_wnd(&wnd))   {
  1412.              WTITLE = title;
  1413.              redraw(wnd);
  1414.          }
  1415.      }
  1416.  
  1417.      /* »ÑαÑóδñáΓ∞ «¬¡« »α¿ ¿º¼Ñ¡Ñ¡¿¿ áΓα¿íπΓá */
  1418.      static redraw(WINDOW *wnd)
  1419.      {
  1420.      #ifndef FASTWINDOWS
  1421.          int x, y, chat, atr;
  1422.  
  1423.           for (y = 1; y < HEIGHT-1; y++)
  1424.              for (x = 1; x < WIDTH-1; x++)       {
  1425.                  chat = dget(wnd, x, y);
  1426.                  atr = (((chat>>8)&255) ==
  1427.                      PNORMAL ? WNORMAL : WACCENT);
  1428.                  displ(wnd, x, y, chat&255, atr);
  1429.              }
  1430.          wframe(wnd);
  1431.      #endif
  1432.          PNORMAL = WNORMAL;
  1433.      }
  1434.  
  1435.      /* óδñáΓ∞ ß«ºñá¡¡«Ñ «¬¡« */
  1436.      void display_window(WINDOW *wnd)
  1437.      {
  1438.          if (verify_wnd(&wnd) && !VISIBLE)    {
  1439.              VISIBLE = 1;
  1440.      #ifdef FASTWINDOWS
  1441.              if (HIDDEN)  {
  1442.                  HIDDEN = 0;
  1443.                  vrstr(wnd);
  1444.  
  1445.                              - 38 -
  1446.             }
  1447.             else     {
  1448.                  vsave(wnd);
  1449.                  clear_window(wnd);
  1450.                  wframe(wnd);
  1451.             }
  1452.      #else
  1453.             vswap(wnd);
  1454.      #endif
  1455.          }
  1456.      }
  1457.  
  1458.      /* ºá¬αδΓ∞ óßÑ «¬¡á */
  1459.      void close_all()
  1460.      {
  1461.          WINDOW *sav, *wnd = listtail;
  1462.  
  1463.          while (wnd) {
  1464.              sav = PREV;
  1465.              delete_window(wnd);
  1466.              wnd = sav;
  1467.          }
  1468.      }
  1469.  
  1470.      /* πñ὿Γ∞ «¬¡« */
  1471.      void delete_window(WINDOW *wnd)
  1472.      {
  1473.          if (verify_wnd(&wnd))       {
  1474.              hide_window(wnd);
  1475.              free(SAV);
  1476.              remove_list(wnd);   /* πñ὿Γ∞ «¬¡« ¿º ß»¿ß¬á */
  1477.              free(wnd);
  1478.          }
  1479.      }
  1480.  
  1481.      /* ß¬αδΓ∞ «¬¡« */
  1482.      void hide_window(WINDOW *wnd)
  1483.  
  1484.                              - 39 -
  1485.      {
  1486.          if (verify_wnd(&wnd) && VISIBLE)      {
  1487.      #ifndef FASTWINDOWS
  1488.              vswap(wnd);
  1489.      #else
  1490.              vrstr(wnd);
  1491.      #endif
  1492.              HIDDEN = 1;
  1493.              VISIBLE = 0;
  1494.          }
  1495.      }
  1496.  
  1497.      #ifndef FASTWINDOWS
  1498.      /* »ÑαѼÑΘÑ¡¿Ñ «¬¡á ó Ñú«  3-σ ¼Ñα¡«¼ »½á¡Ñ */
  1499.      void repos_wnd(WINDOW *wnd, int x, int y, int z)
  1500.      {
  1501.          WINDOW *twnd;
  1502.          int x1, y1, chat;
  1503.          if (!verify_wnd(&wnd))
  1504.              return;
  1505.          twnd = establish_window(x+COL, y+ROW, HEIGHT, WIDTH);
  1506.          twnd -> _tl = WTITLE;
  1507.          twnd -> btype = BTYPE;
  1508.          twnd -> wcolor[BORDER] = WBORDER;
  1509.          twnd -> wcolor[TITLE] = WTITLEC;
  1510.          twnd -> wcolor[ACCENT] = WACCENT;
  1511.          twnd -> wcolor[NORMAL] = WNORMAL;
  1512.          twnd -> _wsp = SCROLL;
  1513.          twnd -> _cr = WCURS;
  1514.          if (z != 1) {
  1515.              remove_list(twnd);
  1516.              if (z == 0)
  1517.                  insert_list(twnd, wnd);
  1518.              else
  1519.                  beg_list(twnd);
  1520.           }
  1521.           for (y1 = 0; y1 < twnd->_wh; y1++)
  1522.  
  1523.                              - 40 -
  1524.               for (x1 = 0; x1 < twnd->_ww; x1++)   {
  1525.                   chat = dget(wnd, x1, y1);
  1526.                   displ(twnd, x1, y1, chat&255, (chat>>8)&255);
  1527.               }
  1528.           twnd->_wv = 1;
  1529.           vswap(twnd);
  1530.           hide_window(wnd);
  1531.           free(SAV);
  1532.           remove_list(wnd);
  1533.           *wnd = *twnd;
  1534.           insert_list(wnd, twnd);
  1535.           remove_list(twnd);
  1536.           free(twnd);
  1537.      }
  1538.      #endif
  1539.  
  1540.      /* «τ¿ßΓ¿Γ∞ «í½áßΓ∞ «¬¡á */
  1541.      void clear_window(WINDOW *wnd)
  1542.      {
  1543.         register int x1, y1;
  1544.  
  1545.         if (verify_wnd(&wnd))
  1546.             for (y1 = 1; y1 < HEIGHT-1; y1++)
  1547.                 for (x1 = 1; x1 < WIDTH-1; x1++)
  1548.                     displ(wnd,x1, y1, ' ', WNORMAL);
  1549.      }
  1550.  
  1551.      /* ¿º«íαếΓ∞ «¬¡« */
  1552.      static wframe(WINDOW *wnd)
  1553.      {
  1554.          register int x1, y1;
  1555.  
  1556.          if (!verify_wnd(&wnd))
  1557.              return;
  1558.      /* ºáú«½«ó«¬ «¬¡á */
  1559.      displ(wnd,0, 0, NW, WBORDER);
  1560.      dtitle(wnd);
  1561.  
  1562.                              - 41 -
  1563.      displ(wnd,WIDTH-1, 0, NE, WBORDER);
  1564.      /* í«¬«óδÑ ßΓ«α«¡δ «¬¡á */
  1565.      for (y1 = 1; y1 < HEIGHT-1; y1++)        {
  1566.          displ(wnd,0, y1, SIDE, WBORDER);
  1567.          displ(wnd,WIDTH-1, y1, SIDE, WBORDER);
  1568.      }
  1569.      /* ¡¿º «¬¡á */
  1570.      displ(wnd,0, y1, SW, WBORDER);
  1571.      for (x1 = 1; x1 < WIDTH-1; x1++)
  1572.          displ(wnd,x1, y1, LINE, WBORDER);
  1573.      displ(wnd,x1, y1, SE, WBORDER);
  1574.      }
  1575.  
  1576.      /* óδñáΓ∞ ºáú«½«ó«¬ «¬¡á */
  1577.      static dtitle(WINDOW *wnd)
  1578.      {
  1579.          int x1 = 1, i, ln;
  1580.          char *s = WTITLE;
  1581.  
  1582.          if (!verify_wnd(&wnd))
  1583.              return;
  1584.          if (s)  {
  1585.              ln = strlen(s);
  1586.              if (ln > WIDTH-2)
  1587.                  i = 0;
  1588.              else
  1589.                  i = ((WIDTH-2-ln) / 2);
  1590.              if (i > 0)
  1591.                  while (i--)
  1592.                      displ(wnd, x1++, 0, LINE, WBORDER);
  1593.              while (*s && x1 < WIDTH-1)
  1594.                  displ(wnd, x1++, 0, *s++, WTITLEC);
  1595.          }
  1596.          while (x1 < WIDTH-1)
  1597.              displ(wnd, x1++, 0, LINE, WBORDER);
  1598.      }
  1599.  
  1600.  
  1601.                              - 42 -
  1602.      /* «¬«¡¡«-«α¿Ñ¡Γ¿α«óá¡¡á∩ printf */
  1603.      void wprintf(WINDOW *wnd, char *ln, ...)
  1604.      {
  1605.          char dlin [100], *dl = dlin;
  1606.  
  1607.          if (verify_wnd(&wnd))        {
  1608.              va_list ap;
  1609.              va_start(ap, ln);
  1610.              vsprintf(dlin, ln, ap);
  1611.              va_end(ap);
  1612.              while (*dl)
  1613.                  wputchar(wnd, *dl++);
  1614.          }
  1615.      }
  1616.  
  1617.      /* ºá»¿ßáΓ∞ ß¿¼ó«½ ó «¬¡« */
  1618.      void wputchar(WINDOW *wnd, int c)
  1619.      {
  1620.         if (!verify_wnd(&wnd))
  1621.             return;
  1622.         switch (c)  {
  1623.             case '\n':
  1624.                 if (SCROLL == HEIGHT-3)
  1625.                     scroll(wnd, UP);
  1626.                 else
  1627.                     SCROLL++;
  1628.                 WCURS = 0;
  1629.                 break;
  1630.             case '\t':
  1631.                 do displ(wnd,(WCURS++)+3,SCROLL+1,'',WNORMAL);
  1632.                     while ((WCURS%TABS) && (WCURS+1) < WIDTH-1);
  1633.                 break;
  1634.             default: ;
  1635.                 if ((WCURS+1) < WIDTH-1)    {
  1636.                     displ(wnd, WCURS+1, SCROLL+1, c, WNORMAL);
  1637.                     WCURS++;
  1638.                 }
  1639.  
  1640.                              - 43 -
  1641.                 break;
  1642.           }
  1643.      }
  1644.  
  1645.      /* πßΓá¡«ó¿Γ∞ ¬παß«α «¬¡á */
  1646.      void wcursor(WINDOW *wnd, int x, int y)
  1647.      {
  1648.          if (verify_wnd(&wnd) && x < WIDTH-1 && y < HEIGHT-1)   {
  1649.              WCURS = x;
  1650.              SCROLL = y;
  1651.              cursor(COL+x+1, ROW+y+1);
  1652.          }
  1653.      }
  1654.  
  1655.      /* »«ºó«½∩ÑΓ »«½∞º«óáΓÑ½ε »α«¿ºóÑßΓ¿ «¬«¡¡δ⌐ óδí«α */
  1656.      int get_selections(WINDOW *wnd, int s, char *keys)
  1657.      {
  1658.          int c = 0, ky;
  1659.          if (!verify_wnd(&wnd))
  1660.              return 0;
  1661.          SELECT = s;
  1662.          while (c != ESC && c != '\r' && c != BS && c != FWD)    {
  1663.              accent(wnd);
  1664.              c = get_char();
  1665.              deaccent(wnd);
  1666.              switch (c)      {
  1667.                  case UP:    if (SELECT > 1)
  1668.                                  SELECT--;
  1669.                              else
  1670.                                  SELECT = SCROLL+1;
  1671.                                      break;
  1672.                  case DN:    if (SELECT < SCROLL+1)
  1673.                                  SELECT++;
  1674.                              else
  1675.                                  SELECT = 1;
  1676.                              break;
  1677.                  case '\r':
  1678.  
  1679.                              - 44 -
  1680.                  case ESC:
  1681.                  case FWD:
  1682.                  case BS:    break;
  1683.                  default:    if (keys)    {
  1684.                                  ky = 0;
  1685.                                  while (*(keys + ky))     {
  1686.                                      if (*(keys+ky)==toupper(c) ||
  1687.                                          *(keys+ky)==tolower(c))
  1688.                                          return ky + 1;
  1689.                                      ky++;
  1690.                                  }
  1691.                               }
  1692.                break;
  1693.              }
  1694.           }
  1695.          return  c == '\r' ?  SELECT : c == ESC ? 0 : c;
  1696.      }
  1697.  
  1698.      union REGS rg;
  1699.  
  1700.  
  1701.      /* »α«¬απτ¿óáÑΓ ß«ñÑন¼«Ñ «¬¡á óóÑασ ¿½¿ ó¡¿º */
  1702.      void scroll(WINDOW *wnd, int dir)
  1703.      {
  1704.         int row = HEIGHT-1, col, chat;
  1705.  
  1706.         if (!verify_wnd(&wnd))
  1707.             return;
  1708.         if (NEXT == NULL && HEIGHT > 3 && VISIBLE)   {
  1709.             rg.h.ah = dir == UP ? 6 : 7;
  1710.             rg.h.al = 1;
  1711.             rg.h.bh = WNORMAL;
  1712.             rg.h.cl = COL + 1;
  1713.             rg.h.ch = ROW + 1;
  1714.             rg.h.dl = COL + WIDTH - 2;
  1715.             rg.h.dh = ROW + HEIGHT - 2;
  1716.             int86(16, &rg, &rg);
  1717.  
  1718.                              - 45 -
  1719.             return;
  1720.         }
  1721.         if (dir == UP)  {
  1722.             for (row = 2; row < HEIGHT-1; row++)
  1723.                 for (col = 1; col < WIDTH-1; col++)  {
  1724.                     chat = dget(wnd, col, row);
  1725.                     displ(wnd,col,row-1,chat&255,(chat>>8)&255);
  1726.                 }
  1727.             for (col = 1; col < WIDTH-1; col++)
  1728.                 displ(wnd, col, row-1, ' ', WNORMAL);
  1729.         }
  1730.         else    {
  1731.             for (row = HEIGHT-2; row > 1; --row)
  1732.                 for (col = 1; col < WIDTH-1; col++)  {
  1733.                     chat = dget(wnd, col, row-1);
  1734.                     displ(wnd,col,row,chat&255,(chat>>8)&255);
  1735.                 }
  1736.             for (col = 1; col < WIDTH-1; col++)
  1737.                 displ(wnd, col, row, '', WNORMAL);
  1738.          }
  1739.      }
  1740.  
  1741.      #ifndef FASTWINDOWS
  1742.      /* óδτ¿ß½∩ÑΓ áíα¿ß «Γ«íαáªáѼ«ú« ß¿¼ó«½á «¬¡á */
  1743.  
  1744.      static int *waddr(WINDOW *wnd, int x, int y)
  1745.      {
  1746.         WINDOW *nxt = NEXT;
  1747.         int *vp;
  1748.  
  1749.         if (!VISIBLE)
  1750.             return (int *) (SAV+y*(WIDTH*2)+x*2);
  1751.         x += COL;
  1752.         y += ROW;
  1753.         while (nxt) {
  1754.             if (nxt->_wv)
  1755.                 if (x >= nxt->_wx && x <= nxt->_wx + nxt->_ww-1)
  1756.  
  1757.                              - 46 -
  1758.                     if (y >= nxt->_wy &&
  1759.                             y <= nxt->_wy + nxt->_wh-1) {
  1760.                         x -= nxt->_wx;
  1761.                         y -= nxt->_wy;
  1762.                         vp = (int *)
  1763.                             ((nxt->_ws) +y*(nxt->_ww*2)+x*2);
  1764.                         return vp;
  1765.                     }
  1766.             nxt = nxt->_nx;
  1767.          }
  1768.          return NULL;
  1769.      }
  1770.  
  1771.      /* óδñáΓ∞ ß¿¼ó«½ ó «¬¡« */
  1772.      void displ(WINDOW *wnd, int x, int y, int ch, int at)
  1773.      {
  1774.  
  1775.          int *vp;
  1776.          int vch = (ch&255)|(at<<8);
  1777.  
  1778.          if ((vp = waddr(wnd, x, y)) != NULL)
  1779.              *vp = vch;
  1780.          else
  1781.              vpoke(VSG,vad(x+COL,y+ROW),vch);
  1782.      }
  1783.  
  1784.      /* »«½πτ¿Γ∞ «Γ«íαáªÑ¡¡δ⌐ ß¿¼ó«½ ¿º «¬¡á */
  1785.      static int dget(WINDOW *wnd, int x, int y)
  1786.      {
  1787.          int *vp;
  1788.  
  1789.          if ((vp = waddr(wnd, x, y)) != NULL)
  1790.              return *vp;
  1791.          return vpeek(VSG,vad(x+COL,y+ROW));
  1792.      }
  1793.  
  1794.      /* ó¿ñÑ«Σπ¡¬µ¿¿ ¡¿º¬«ú« πα«ó¡∩ */
  1795.  
  1796.                              - 47 -
  1797.  
  1798.      /* «í¼Ñ¡¿óáÑΓ ß«ñÑন¼«Ñ ó¿ñÑ««íαáºá ¿ íπΣÑαá ß«σαá¡Ñ¡¿∩ */
  1799.      static vswap(WINDOW *wnd)
  1800.      {
  1801.          int x, y, chat;
  1802.          int *bf = (int *) SAV;
  1803.  
  1804.          for (y = 0; y < HEIGHT; y++)
  1805.              for (x = 0; x < WIDTH; x++)  {
  1806.                  chat = *bf;
  1807.                  *bf++ = dget(wnd, x, y);
  1808.                  displ(wnd, x, y, chat&255, (chat>>8)&255);
  1809.              }
  1810.      }
  1811.  
  1812.      #else
  1813.  
  1814.      /* ß«σαá¡∩ÑΓ ó¿ñÑ«»á¼∩Γ∞ ó íπΣÑαÑ ß«σαá¡Ñ¡¿∩ */
  1815.      static vsave(WINDOW *wnd)
  1816.      {
  1817.          int x, y;
  1818.          int *bf = (int *) SAV;
  1819.  
  1820.          for (y = 0; y < HEIGHT; y++)
  1821.              for (x = 0; x < WIDTH; x++)
  1822.                  *bf++ = vpeek(VSG, vad(x+COL, y+ROW));
  1823.      }
  1824.  
  1825.      /* ó«ßßΓá¡áó½¿óáÑΓ ó¿ñÑ«»á¼∩Γ∞ ¿º íπΣÑαá ß«σαá¡Ñ¡¿∩ */
  1826.      static vrstr(WINDOW *wnd)
  1827.      {
  1828.          int x, y;
  1829.          int *bf = (int *) SAV;
  1830.  
  1831.          for (y = 0; y < HEIGHT; y++)
  1832.              for (x = 0; x < WIDTH; x++)
  1833.                  vpoke(VSG,vad(x+COL, y+ROW), *bf++);
  1834.  
  1835.                              - 48 -
  1836.      }
  1837.      #endif
  1838.  
  1839.      /* ºá¼Ñ¡∩ÑΓ ∩ᬫßΓ∞ ßΓ᫬¿, π¬áºδóáѼ«⌐ SELECT */
  1840.      void acline(WINDOW *wnd, int set)
  1841.      {
  1842.          int x, ch;
  1843.  
  1844.          if (!verify_wnd(&wnd))
  1845.              return;
  1846.          for (x = 1; x < WIDTH - 1; x++) {
  1847.              ch = dget(wnd, x, SELECT) & 255;
  1848.              displ(wnd, x, SELECT, ch, set);
  1849.          }
  1850.      }
  1851.  
  1852.      /* öôìèûêê ÄüÉÇüÄÆèê æÅêæèÇ */
  1853.  
  1854.      /* ñ«íáó½∩ÑΓ «¬¡« ó ¬«¡Ñµ ß»¿ß¬á */
  1855.      static add_list(WINDOW *wnd)
  1856.      {
  1857.          if (listtail)    {
  1858.              PREV = listtail;
  1859.              listtail->_nx = wnd;
  1860.          }
  1861.          listtail = wnd;
  1862.          if (!listhead)
  1863.              listhead = wnd;
  1864.      }
  1865.  
  1866.      /* ñ«íáó½∩ÑΓ «¬¡« ó ¡áτὫ ß»¿ß¬á */
  1867.      static beg_list(WINDOW *wnd)
  1868.      {
  1869.         if (listhead)    {
  1870.             NEXT = listhead;
  1871.             listhead->_pv = wnd;
  1872.         }
  1873.  
  1874.                              - 49 -
  1875.         listhead = wnd;
  1876.         if (!listtail)
  1877.             listtail = wnd;
  1878.      }
  1879.  
  1880.      /* πñá½∩ÑΓ «¬¡« ¿º ß»¿ß¬á */
  1881.      static remove_list(WINDOW *wnd)
  1882.      {
  1883.         if (NEXT)
  1884.             NEXT->_pv = PREV;
  1885.         if (PREV)
  1886.             PREV->_nx = NEXT;
  1887.         if (listhead == wnd)
  1888.             listhead = NEXT;
  1889.         if (listtail == wnd)
  1890.             listtail = PREV;
  1891.         NEXT = PREV = NULL;
  1892.      }
  1893.  
  1894.      /* óßΓáó½∩ÑΓ w 1 »«ß½Ñ  w 2 */
  1895.      static insert_list(WINDOW *w1, WINDOW *w2)
  1896.      {
  1897.         w1->_pv = w2;
  1898.         w1->_nx = w2->_nx;
  1899.         w2->_nx = w1;
  1900.         if (w1->_nx == NULL)
  1901.             listtail = w1;
  1902.         else
  1903.             w1->_nx->_pv = w1;
  1904.      }
  1905.      #ifndef FASTWINDOWS
  1906.      /* »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ «¬¡á ó ß»¿ß¬Ñ */
  1907.      static verify_wnd(WINDOW **w1)
  1908.      {
  1909.         WINDOW *wnd;
  1910.  
  1911.         wnd = listhead;
  1912.  
  1913.                              - 50 -
  1914.         if (*w1 == NULL)
  1915.             *w1 = listtail;
  1916.         else    {
  1917.             while (wnd != NULL) {
  1918.                 if (*w1 == wnd)
  1919.                     break;
  1920.                 wnd = NEXT;
  1921.             }
  1922.         }
  1923.         return wnd != NULL;
  1924.      }
  1925.      #endif
  1926.  
  1927.      WINDOW *ewnd = NULL;
  1928.  
  1929.      /* ß««íΘÑ¡¿Ñ «í «Φ¿í¬áσ */
  1930.      void error_message(char *s)
  1931.      {
  1932.          ewnd = establish_window(50, 22, 3, max(10, strlen(s)+2));
  1933.          set_colors(ewnd, ALL, RED, YELLOW, BRIGHT);
  1934.          set_title(ewnd, " ERROR! ");
  1935.          display_window(ewnd);
  1936.          wprintf(ewnd, s);
  1937.          putchar(BELL);
  1938.      }
  1939.  
  1940.      void clear_message()
  1941.      {
  1942.         if (ewnd)
  1943.             delete_window(ewnd);
  1944.         ewnd = NULL;
  1945.      }
  1946.  
  1947.  
  1948.  
  1949.                  Ä»¿ßá¡¿Ñ »α«úαá¼¼δ: twindow.c
  1950.                  -----------------------------
  1951.  
  1952.                              - 51 -
  1953.  
  1954.           äá½ÑÑ «»¿ßδóáÑΓß∩ ¿ßσ«ñ¡á∩  »α«úαἼᠠtwindow.c. ä½∩ ¬áªñ«⌐
  1955.      Σπ¡¬µ¿¿ «»¿ßδóáÑΓß∩,  τΓ« «¡á ñѽáÑΓ ¿ ¬á¬  αáí«ΓáÑΓ. Åα«úαá¼¼¿ßΓ
  1956.      ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞  φΓ¿ «»¿ßá¡¿∩ ñ½∩ »«¡¿¼á¡¿∩ ΓѬßΓá »α«úαá¼¼δ.
  1957.  
  1958.           ÄíΩ∩ó½Ñ¡¿∩ ó¡ÑΦ¡¿σ ñá¡¡δσ ó twindow.c ó¬½ετáεΓ »α«Γ«Γ¿»δ ñ½∩
  1959.      ¬áªñ«⌐ Σπ¡¬µ¿¿,  ½«¬á½∞¡δÑ ó ¿ßσ«ñ¡«¼ Σá⌐½Ñ,  ¼áßß¿ó ßΓαπ¬Γπα ñ½∩
  1960.      «»αÑñѽѡ¿∩ »∩Γ¿ Γ¿»«ó αἬ¿ «¬¡á, ú«½«ó¡«⌐ ¿ σó«ßΓ«ó«⌐ π¬áºáΓѽ¿
  1961.      ñ½∩ ß»¿ß¬á ßΓαπ¬Γπα WINDOW.
  1962.  
  1963.           ÉἬᠫ¬¡á  π»αáó½∩ÑΓß∩ φ½Ñ¼Ñ¡Γ«¼  ßΓαπ¬Γπαδ WINDOW, ¬«Γ«αá∩
  1964.      πßΓá¡áó½¿óáÑΓ «¬¡«. ¥Γ«Γ φ½Ñ¼Ñ¡Γ ∩ó½∩ÑΓß∩ µÑ½«τ¿ß½Ñ¡¡δ¼ ß¼ÑΘÑ¡¿Ñ¼
  1965.      ó  Γáí½¿µÑ Γ¿»«ó  αἬ¿.  éσ«ñ,  ¡á  ¬«Γ«αδ⌐  π¬áºδóáÑΓ ß¼ÑΘÑ¡¿Ñ,
  1966.      ß«ñÑαª¿Γ ΦÑßΓ∞ º¡áτÑ¡¿⌐,  ¬áªñ«Ñ ¿º ¬«Γ«αδσ  »αÑñßΓáó½∩ÑΓ «ñ¡π ¿º
  1967.      ßΓ«α«¡ ¿½¿ πº½«ó «¬¡á. ÅÑαó«Ñ º¡áτÑ¡¿Ñ «»αÑñѽ∩ÑΓ   óÑασ¡¿⌐ ½Ñóδ⌐
  1968.      ¿½¿  ßÑóÑα«-ºá»áñ¡δ⌐  πú«½.  ê¼∩  »ÑαѼѡ¡«⌐  (nw,  ne,  se,  sw)
  1969.      ß««íΘáÑΓ  óá¼,   ¬á¬«⌐  πú«½  «»αÑñѽ∩ÑΓß∩.   ûѽ«Ñ   τ¿ß½«  side
  1970.      «Γ¡«ß¿Γß∩  ¬  óÑαΓ¿¬á½∞¡δ¼  ßΓ«α«¡á¼  αἬ¿;   µÑ½«Ñ  τ¿ß½«  line
  1971.      ß««ΓóÑΓßΓóπÑΓ  óÑασ¡Ñ⌐  ¿  ¡¿ª¡Ñ⌐  ú«α¿º«¡Γá½∞¡δ¼  ½¿¡¿∩¼  αἬ¿.
  1972.      ç¡áτÑ¡¿∩ «Γ¡«ß∩Γß∩  ¬  ß¿¼ó«½á¼  ¿º  ¡áí«αá  úαáΣ¿τÑ߬¿σ ß¿¼ó«½«ó
  1973.      Å¥éî.
  1974.  
  1975.           äóÑ  WINDOW-ßß佬¿ listhead   ¿ listtail ∩ó½∩εΓß∩ ú«½«ó¡δ¼ ¿
  1976.      σó«ßΓ«óδ¼ π¬áºáΓѽ∩¼¿ ñ½∩ ß»¿ß¬á «¬«¡.  è«úñá ß«ºñáεΓß∩ «¬¡á, «¡¿
  1977.      ñ«íáó½∩εΓß∩ ¬ φΓ«¼π ß»¿ß¬π. ÅÑαó«¡áτá½∞¡« φΓ¿ ñóá π¬áºáΓѽ∩ αáó¡δ
  1978.      NULL.   è«úñá  ß«ºñáÑΓß∩  »Ñαó«Ñ  «¬¡«,   óδñѽ∩ÑΓß∩  »á¼∩Γ∞  ñ½∩
  1979.      ßΓαπ¬Γπαδ WINDOW, ¿ ÑÑ áñαÑß ¬«»¿απÑΓß∩ ó «íá π¬áºáΓѽ∩. ô ß»¿ß¬á
  1980.      ¿¼ÑÑΓß∩  ú«½«óá,  π¬áºδóáεΘá∩  ¡á  »Ñαó«Ñ  «¬¡«  ß»¿ß¬á, ¿ σó«ßΓ,
  1981.      π¬áºδóáεΘ¿⌐ ¡á »«ß½Ññ¡ÑÑ.  è«úñá ß«ºñáÑΓß∩ óΓ«α«Ñ «¬¡«, Ñú« áñαÑß
  1982.      ¬«»¿απÑΓß∩ ó σó«ßΓ«ó«⌐ π¬áºáΓѽ∞.  èα«¼Ñ Γ«ú«, áñαÑß óΓ«α«ú« «¬¡á
  1983.      ºá»¿ßδóáÑΓß∩ ó π¬áºáΓѽ∞  _nx  ó »Ñαó«⌐ ßΓαπ¬ΓπαÑ WINDOW, á áñαÑß
  1984.      »Ñαó«⌐  ºá»¿ßδóáÑΓß∩  ó  π¬áºáΓѽ∞   _pv  óΓ«α«⌐.  â«½«óá  ß»¿ß¬á
  1985.      π¬áºδóáÑΓ ¡á  »Ñαó«Ñ  «¬¡«,  ¬«Γ«α«Ñ  π¬áºδóáÑΓ ¡á  óΓ«α«Ñ ¿ Γ.ñ.
  1986.      òó«ßΓ ß»¿ß¬á  π¬áºδóáÑΓ  ¡á  »«ß½Ññ¡ÑÑ  «¬¡«.  èáªñ«Ñ  «¬¡« ΓᬪÑ
  1987.      π¬áºδóáÑΓ ¡á ßó«Ñú« »αÑñΦÑßΓóÑ¡¡¿¬á ó µÑ»¿, ß½Ññ«óáΓѽ∞¡«, ß»¿ß«¬
  1988.      ∩ó½∩ÑΓß∩ ñóπ¡á»αáó½Ñ¡¡«⌐ ßΓαπ¬Γπα«⌐ ñá¡¡δσ, ¡áºδóáѼ«⌐ ñóπßó∩º¡δ¼
  1989.      ß»¿ß¬«¼.   (ä½∩ º¡á¬«¼ßΓóá ß« ß»¿ß¬«ó묨  ßΓαπ¬ΓπαἿ ñá¡¡δσ ß¼.:
  1990.  
  1991.                              - 52 -
  1992.      Brady. æ Development Tools for the IBM PC. - 1986.).
  1993.  
  1994.           öπ¡¬µ¿∩ establish_window   ¿¡¿µ¿á½¿º¿απÑΓ   »ÑαѼѡ¡πε   VSG
  1995.      áñαÑß«¼  ßÑú¼Ñ¡Γá  ó¿ñÑ«»á¼∩Γ¿.  öπ¡¬µ¿∩  αáß»αÑñѽ∩ÑΓ »á¼∩Γ∞ ñ½∩
  1996.      ßΓαπ¬Γπαδ  WINDOW  ¿  ¿¡¿µ¿á½¿º¿απÑΓ   φΓπ   ßΓαπ¬Γπαπ   «¬«¡¡δ¼¿
  1997.      σáαá¬ΓÑα¿ßΓ¿¬á¼¿,  »α¿¡¿¼áÑ¼δ¼¿ »« π¼«½τá¡¿ε,  á ΓᬪѠαẼÑα«¼ ¿
  1998.      ¬««αñ¿¡áΓἿ,  ºáñá¡¡δ¼¿ »α¿ ó맮óÑ Σπ¡¬µ¿¿.  Ä¡á óδñѽ∩ÑΓ »á¼∩Γ∞
  1999.      ñ½∩  íπΣÑαá  ß«σαá¡Ñ¡¿∩  ó¿ñÑ«»á¼∩Γ¿  ¿ ºá»¿ßδóáÑΓ áñαÑß íπΣÑαá ó
  2000.      ßΓαπ¬Γπαπ WINDOW.  Å«ß½Ñ ¿¡¿µ¿á½¿ºáµ¿¿ ßΓαπ¬Γπαδ Σπ¡¬µ¿∩ óδºδóáÑΓ
  2001.      add_list  ñ½∩  ñ«íáó½Ñ¡¿∩  ßΓαπ¬Γπαδ  ¬  ß»¿ß¬π  «¬«¡.  ÆÑ¬ßΓ«óá∩
  2002.      «í½áßΓ∞  «¬¡á  «τ¿ΘáÑΓß∩,   ¿   «íαẠ  «¬¡á   óδñѽ∩ÑΓß∩,   Ñß½¿
  2003.      «íαáíáΓδóáεΓß∩  ß½«Ñ¡δÑ  «¬¡á.  ¥Γ¿  Σπ¡¬µ¿¿  «»Ñα¿απεΓ  ó íπΣÑαÑ
  2004.      ß«σαá¡Ñ¡¿∩, »«φΓ«¼π «¬¡« »«¬á ¡Ñ ¿º«íαáªáÑΓß∩. öπ¡¬µ¿∩ establish_
  2005.      window ó«ºóαáΘáÑΓ áñαÑß ßΓαπ¬Γπαδ WINDOW ó Γ«τ¬π ó맮óá.
  2006.  
  2007.           öπ¡¬µ¿¿  set_border,  set_colors,  set_intensity ¿ set_title
  2008.      ¼«ñ¿Σ¿µ¿απεΓ σáαá¬ΓÑα¿ßΓ¿¬¿ ß«ºñá¡¡«ú« «¬¡á. æ¡áτá½á «¡¿ óδºδóáεΓ
  2009.      verify_wnd  ñ½∩  »α«óÑન  Γ«ú«,  τΓ«  »α¿  ó맮óÑ  »ÑαÑñá¡ áñαÑß
  2010.      ß«ºñá¡¡«ú« «¬¡á. çáΓѼ «¡¿ ¼«ñ¿Σ¿µ¿απεΓ ºáñá¡¡δ⌐ áΓα¿íπΓ. é ¬«¡µÑ
  2011.      «¡¿ óδºδóáεΓ Σπ¡¬µ¿ε redraw ñ½∩ ºá»¿ß¿ ¿º¼Ñ¡Ñ¡¿⌐ ¡á φ¬αá¡.
  2012.  
  2013.           öπ¡¬µ¿∩ redraw »ÑαÑóδñáÑΓ «¬¡«,  Ñß½¿ «íαáíáΓδóáεΓß∩ ß½«Ñ¡δÑ
  2014.      «¬¡á.
  2015.