home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-12-06 | 75.0 KB | 2,461 lines |
- âïÇéÇ 3 -- 1 --
- -------
-
- Åα«úαá¼¼δ, «ßΓáεΘ¿Ñß∩ αѺ¿ñÑ¡Γ¡δ¼¿ »«ß½Ñ
- ºáóÑαΦÑ¡¿∩ ¿ Σ«α¼¿απεΘ¿Ñ »α¿ ¿σ ó맮óÑ
- óß»½δóáεΘ¿Ñ ¿º«íαáªÑ¡¿∩ ¡á φ¬αá¡Ñ ñ¿ß»½Ñ∩.
- -----------------------------------------------------------------
-
- Åα«ßΓá∩ ¡á »Ñαóδ⌐ óºú½∩ñ ¿ñÑ∩ ß«ºñá¡¿∩ »α«úαá¼¼, ¬«Γ«αδÑ
- «ßΓáó὿ß∞ íδ αѺ¿ñÑ¡Γ¡δ¼¿ ó »á¼∩Γ¿ »«ß½Ñ ¿σ ºáóÑαΦÑ¡¿∩ ¿
- αÑáú¿α«ó὿ ¡á ó맮ó Σ«α¼¿α«ó᡿Ѽ óß»½δóáεΘ¿σ ¿º«íαáªÑ¡¿⌐ ¡á
- φ¬αá¡Ñ ñ¿ß»½Ñ∩, ¡á ßἫ¼ ñÑ½Ñ ∩ó½∩ÑΓß∩ «ñ¡«⌐ ¿º ¡á¿í«½ÑÑ Γαπñ¡δσ
- ºáñáτ »α«úαá¼¼¿α«óá¡¿∩ ñ½∩ Å¥éî. Æá¬¿Ñ »α«úαá¼¼δ ¡áºδóáεΓß∩
- ÆSR-»α«úαἼἿ. Åα¿ τΓÑ¡¿¿ ñá¡¡«ú« αáºñѽá óδ ñ«½ª¡δ »«½πτΦÑ
- »α¿ßΓÑú¡πΓ∞ß∩ αѼ¡∩¼¿ íѺ«»áß¡«ßΓ¿ ¿ «ñÑΓ∞ ºáΘ¿Γ¡δ⌐ Φ½Ñ¼, Γ.¬.
- ß«ºñá¡¿Ñ TSR-»α«úαá¼¼ ßó∩ºá¡« ß α¿ß¬«¼. ì« φëà α¿ß¬ «»αáóñá¡
- 󫺼«ª¡δ¼ 󫺡áúαáªñÑ¡¿Ñ¼ - »«¿ßΓ¿¡Ñ »α«ΣÑßß¿«¡á½∞¡δ¼¿
- αѺπ½∞ΓáΓἿ, ¬«Γ«α묨 ú«αñ¿½ß∩ íδ ½εí«⌐ »α«úαá¼¼¿ßΓ ¼¿α«ó«ú«
- ¬½áßßá.
-
- ū߬«½∞¬π ÆSR-»α«úαá¼¼δ, ÑßΓÑßΓóÑ¡¡«, ñ«½ª¡δ ¡á ¡¿º¬«¼
- πα«ó¡Ñ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ß á»»áαáΓπα«⌐ ¿ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐,
- Γ« ¿º½áúáѼδÑ ó ñá¡¡«¼ αáºñÑ½Ñ ßóÑñÑ¡¿∩ íπñπΓ »α¿¼Ñ¡¿¼δ Γ«½∞¬« ¬
- Å¥éî ½¿¡¿¿ IBM PC, αáí«ΓáεΘ¿¼¿ »«ñ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐ DOS. Å«
- »α¿τ¿¡á¼, ¬«Γ«αδÑ íπñπΓ π¬áºá¡δ ¡¿ªÑ, »α¿ó«ñ¿¼δÑ ó αáºñѽÑ
- »α«úαá¼¼δ αáßßτ¿Γá¡δ ¡á ¬«¼»¿½∩Γ«α Turbo C, ¡« ¼«úπΓ íδΓ∞
- ¼«ñ¿Σ¿µ¿α«óá¡δ ¿ ñ½∩ ñαπú¿σ ¬«¼»¿½∩Γ«α«ó.
-
- ÅαÑñπ»αѪñÑ¡¿Ñ. ä½∩ αáºαáí«Γ¬¿ ¿ ¿ß»«½∞º«óá¡¿∩ TSR-»α«úαá¼¼
- σáαá¬ΓÑα¡á ¼«ñ¿Σ¿¬áµ¿∩ Γáí½¿µδ óÑ¬Γ«α«ó »αÑαδóá¡¿⌐. Åα¿óÑñÑ¡¡δÑ ó
- ñá¡¡«¼ αáºñÑ½Ñ »α«úαá¼¼δ Γαá¡ß½¿απεΓß∩ ß »«¼«Θ∞ε Æπαí« æ¿ óÑαß¿¿
- 1.0 ¿ ó φΓ«¼ ß½πτáÑ αáí«ΓáεΓ ¬«ααÑ¬Γ¡« ¿ íѺ »«ßΓ«α«¡¡¿σ
- φΣΣÑ¬Γ«ó. Åα¿ ¿ß»«½∞º«óá¡¿¿ ñαπú«ú« ¬«¼»¿½∩Γ«αá ¬«ααÑ¬Γ¡«ßΓ∞
- αáí«Γδ ¡Ñ úáαá¡Γ¿απÑΓß∩. èα«¼Ñ Γ«ú«, Ñß½¿ óδ íπñÑΓÑ ¡áí¿αáΓ∞ φΓ¿
- »α«úαá¼¼δ óαπτ¡πε, Γ« ¼«ªÑΓÑ ó¡ÑßΓ¿ ßó«¿ «Φ¿í¬¿. ê ó Γ«¼, ¿ ó
- ñαπú«¼ ß½πτáÑ φΓ« ¼«ªÑΓ »α¿óÑßΓ¿ ¬ ΣáΓá½∞¡«¼π ßí«ε ß¿ßΓѼδ, ó
- αѺπ½∞ΓáΓÑ τÑú« ¼«úπΓ íδΓ∞ π¡¿τΓ«ªÑ¡δ ñá¡¡δÑ ¡á óáΦѼ
- ó¿¡τÑßΓÑα߬«¼ ñ¿ß¬Ñ. Å«φΓ«¼π µÑ½Ñß««íαạ« ñѽáΓ∞ αѺÑαó¡δÑ ¬«»¿¿
- Σá⌐½«ó. ƒ πóÑαÑ¡, τΓ« »α¿ó«ñ¿½ ¬ ¬αáσπ ¼«ε ¼«ñѽ∞ 60 ¡Ñ ¼Ñ¡ÑÑ 100
- αẠºá ΓÑ ñóá ñ¡∩, »«¬á «Γ½áª¿óá½ «ß¡«ó¡πε ½«ú¿¬π ßó«Ñ⌐
- »α«úαá¼¼δ. (è ßτáßΓ∞ε, ∩ ¡Ñ ºáΓ¿αá½ »α¿ φΓ«¼ ó¿¡τÑßΓÑα߬«ú«
- ñ¿ß¬á).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 2 --
-
-
- ùΓ« Γá¬«Ñ TSR-»α«úαá¼¼á?
- -----------------------------------------------------------------
-
- ÆSR-»α«úαá¼¼δ ß«ºñáεΓß∩ »πΓѼ ó맮óá Σπ¡¬µ¿¿ 49 DOS, »«
- ¬«Γ«α«⌐ »α«¿ºó«ñ¿Γß∩ ó«ºóαáΓ ¿º »α«úαá¼¼δ ó DOS. Åα¿ φΓ«¼
- »α«úαá¼¼á «ßΓáÑΓß∩ ó «í½áßΓ¿ »á¼∩Γ¿, ¬«Γ«απε DOS ó ñá½∞¡Ñ⌐ΦѼ ¡Ñ
- ¿ß»«½∞ºπÑΓ. Æá¬¿¼ «íαẫ¼, »α«úαá¼¼á ¼«ªÑΓ íδΓ∞ ¼ú¡«óÑ¡¡« óδºóá¡á
- íѺ »«óΓ«α¡«⌐ ºáúαπº¬¿. Äñ¡¿¼ ¿º ¼¡«ú¿σ Φ¿α«¬« ¿ºóÑßΓ¡δσ »α¿¼Ñα«ó
- TSR-»α«úαá¼¼ ∩ó½∩ÑΓß∩ »α«úαá¼¼á Sidekick Σ¿α¼δ éorland.
-
- ü«½∞Φ¿¡ßΓó« TSR-»α«úαá¼¼ óδºδóáεΓß∩ ß »«¼«Θ∞ε »αÑαδóá¡¿∩,
- ¬«Γ«α«Ñ ¼«ªÑΓ íδΓ∞ ßΣ«α¼¿α«óá¡« ¡Ñ߬«½∞¬¿¼¿ ß»«ß«íἿ. ìá¿í«½ÑÑ
- αáß»α«ßΓαá¡Ñ¡¡δ¼¿ ∩ó½∩εΓß∩ »αÑαδóá¡¿∩ »« Γá⌐¼Ñαπ, »αÑαδóá¡¿∩
- ¬½áó¿áΓπαδ ¿ »ÑτáΓ¿ φ¬αá¡á. ä½∩ TSR-»α«úαá¼¼, Σ«α¼¿απεΘ¿σ
- ¿º«íαáªÑ¡¿Ñ ¡á φ¬αá¡Ñ, «íδτ¡« ¿ß»«½∞ºπεΓß∩ »αÑαδóá¡¿∩ «Γ
- ¬½áó¿áΓπαδ ¿½¿ »ÑτáΓ¿ φ¬αá¡á, »«ß¬«½∞¬π »«ºó«½∩εΓ »«½∞º«óáΓѽε
- óδºδóáΓ∞ TSR-»α«úαá¼¼π »πΓѼ «ñ¿¡«τ¡«ú« ¡áªáΓ¿∩ ¬½áó¿Φ¿.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 3 --
-
-
- ÅαÑαδóá¡¿∩ ó ßѼÑ⌐ßΓóÑ »α«µÑßß«α«ó 8086.
- -----------------------------------------------------------------
-
- Åα«µÑßß«αδ ßѼÑ⌐ßΓóá 8086 »«ññÑনóáεΓ ñ« 256 αẽ¿τ¡δσ
- »αÑαδóá¡¿⌐ »« óÑ¬Γ«απ. ÅαÑαδóá¡¿Ñ »« óÑ¬Γ«απ óδºδóáÑΓ óδ»«½¡Ñ¡¿Ñ
- »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿⌐ (ISR), áñαÑß ¬«Γ«α«⌐ ß«ñÑনΓß∩ ó
- Γáí½¿µÑ óÑ¬Γ«α«ó »αÑαδóá¡¿⌐. ò«Γ∩ ¡Ñ¬«Γ«αδÑ ßΓáαΦ¿Ñ »α«µÑßß«αδ
- ßѼÑ⌐ßΓóá ΓαÑíπεΓ, τΓ«íδ »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿∩
- αáß»«½áú὿ß∞ ó «»αÑñѽѡ¡δσ áñαÑßáσ »á¼∩Γ¿, ¼Ñσá¡¿º¼ »αÑαδóá¡¿⌐
- »« óÑ¬Γ«απ »«ºó«½∩ÑΓ «»αÑñѽ∩Γ∞ áñαÑßá »α«úαá¼¼ «íαáí«Γ¬¿
- »αÑαδóá¡¿⌐.
-
- Æáí½¿µá óÑ¬Γ«α«ó ¡áτ¿¡áÑΓß∩ ß áñαÑßá 0000:0000 ¿ ÑÑ αẼÑα
- ß«ßΓáó½∩ÑΓ 1024 íá⌐Γá. ū߬«½∞¬π áñαÑß »α«úαá¼¼δ «íαáí«Γ¬¿
- »αÑαδóá¡¿∩ ¼«ªÑΓ íδΓ∞ ½εíδ¼, Γ« ñ½∩ Ñú« «»αÑñѽѡ¿∩ ΓαÑíπÑΓß∩ 32
- αáºα∩ñá (4 íá⌐Γá). æ½Ññ«óáΓѽ∞¡«, αẼÑα ¬áªñ«⌐ ºá»¿ß¿ ó Γáí½¿µÑ
- óÑ¬Γ«α«ó ß«ßΓáó½∩ÑΓ 4 íá⌐Γá. ÇñαÑßá ISR-»α«úαá¼¼ ó Γáí½¿µÑ
- ºá»¿ßδóáεΓß∩ Γᬿ¼ «íαẫ¼, τΓ« áñαÑß »α«úαá¼¼δ «íαáí«Γ¬¿
- »αÑαδóá¡¿∩ 0 ¡áσ«ñ¿Γß∩ »« áñαÑßπ 0000:0000, »α«úαá¼¼δ «íαáí«Γ¬¿
- »αÑαδóá¡¿∩ »αÑαδóá¡¿∩ 1 - »« áñαÑßπ 0000:0004, »αÑαδóá¡¿∩ 2 - »«
- áñαÑßπ 0000:0008 ¿ Γ.ñ.
-
- è«úñá »α«¿ßσ«ñ¿Γ »αÑαδóá¡¿Ñ, Γ« ½εíδÑ ñαπú¿Ñ »αÑαδóá¡¿∩
- ºá»αÑΘáεΓß∩. éáΦá »α«úαá¼¼á «íαáí«Γ¬¿ »αÑαδóá¡¿∩ ßαáºπ »«ß½Ñ
- Γ«ú«, ¬á¬ «¡á ¡áτ¡ÑΓ óδ»«½¡∩Γ∞ß∩, ñ«½ª¡á αáºαÑΦ¿Γ∞ »αÑαδóá¡¿∩,
- τΓ«íδ ¿ºíѪáΓ∞ ¬αáσá ß¿ßΓѼδ. Åα«úαá¼¼á «íαáí«Γ¬¿ »αÑαδóá¡¿∩
- ñ«½ª¡á ºáóÑαΦáΓ∞ß∩ ¬«¼á¡ñ«⌐ IRET.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 4 --
-
-
- ÅαÑαδóá¡¿∩ »α«Γ¿ó DOS ¿ BIOS:
- TαÑó«úá ó ßΓαá¡Ñ DOS.
- -----------------------------------------------------------------
-
- Åα«úαá¼¼¿ßΓδ τáßΓ« óδαáªáεΓ ¡Ññ«ó«½∞ßΓó« ΓѼ, τΓ« DOS ¡Ñ
- ∩ó½∩ÑΓß∩ »«óΓ«α¡« óσ«ñ¿¼«⌐ »α«úαá¼¼«⌐. ¥Γ« «º¡áτáÑΓ, τΓ« ¬«úñá
- «ñ¡á »α«úαá¼¼á «íαáΘáÑΓß∩ ¬ DOS, Γ« ñαπúá∩ »α«úαá¼¼á φΓ«ú« ñѽáΓ∞
- ¡Ñ ¼«ªÑΓ. (¥Γ¿¼ «íΩ∩ß¡∩ÑΓß∩, ó τáßΓ¡«ßΓ¿, »«τѼπ DOS ¡Ñ ∩ó½∩ÑΓß∩
- ¼π½∞Γ¿ºáñáτ¡«⌐ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐). Æá¬¿¼ «íαẫ¼, »α«úαá¼¼á
- «íαáí«Γ¬¿ »αÑαδóá¡¿∩ ¡Ñ ¼«ªÑΓ óδºδóáΓ∞ ¡¿¬á¬«⌐ Σπ¡¬µ¿¿ DOS, Γá¬á∩
- »«»δΓ¬á »α¿ó«ñ¿Γ ¬ ¬αáσπ ß¿ßΓѼδ. Å«φΓ«¼π »α«úαá¼¼á «íαáí«Γ¬¿
- »αÑαδóá¡¿∩ ñ«½ª¡á ßá¼á óδ»«½¡∩Γ∞ ΓÑ ñÑ⌐ßΓó¿∩, ¬«Γ«αδÑ
- »α«¿ºó«ñ∩Γß∩ »α¿ «íαáΘÑ¡¿¿ ¬ Σπ¡¬µ¿∩¼ DOS. è ßτáßΓ∞ε, ñ½∩
- Σ«α¼¿α«óá¡¿∩ ó¿ñÑ«¿º«íαáªÑ¡¿∩ ¼δ ¼«ªÑ¼ ¿ß»«½∞º«óáΓ∞ »α«úαá¼¼δ
- ¡Ñ»«ßαÑñßΓóÑ¡¡«ú« «íαáΘÑ¡¿∩ ¬ ó¿ñÑ«»á¼∩Γ¿ ¿º αáºñѽ«ó 1 ¿ 2.
-
- BIOS ñ«»π߬áÑΓ ¡Ñ¬«Γ«απε »«óΓ«α¡πε óσ«ñ¿¼«ßΓ∞. ìá»α¿¼Ñα,
- »αÑαδóá¡¿Ñ 16, ß««ΓóÑΓßΓóπεΘÑÑ óó«ñπ ß ¬½áó¿áΓπαδ, ¼«ªÑΓ íδΓ∞
- ¿ß»«½∞º«óá¡« ó φΓ«¼ αѪ¿¼Ñ íѺ ¬á¬¿σ-½¿í« »«í«τ¡δσ φΣΣÑ¬Γ«ó.
- ìѬ«Γ«αδÑ ñαπú¿Ñ »«ñ»α«úαá¼¼δ ¿ß»«½∞º«óáΓ∞ Γᬿ¼ «íαẫ¼ ¡Ñ ßΓ«½∞
- íѺ«»áß¡«. Äí¡áαπª¿Γ∞ φΓ« ¼«ª¡« Γ«½∞¬« φ¬ß»Ñα¿¼Ñ¡Γá½∞¡δ¼ »πΓѼ. Ä
- Γ«¼, τΓ« Σπ¡¬µ¿ε ¡Ñ½∞º∩ ¿ß»«½∞º«óáΓ∞ ó Γᬫ¼ αѪ¿¼Ñ, óδ πº¡áÑΓÑ
- »« ΣáΓá½∞¡«¼π ßí«ε ß¿ßΓѼδ. ä½∩ »α¿óÑñÑ¡¡δσ ó ñá¡¡«¼ αáºñѽÑ
- »α¿¼Ñα«ó ¿ ñ½∩ ¼¡«ú¿σ αáß»α«ßΓαá¡Ñ¡¡δσ ó ¼¿αÑ »α«úαá¼¼ »αÑαδóá¡¿∩
- 16 󻫽¡Ñ ñ«ßΓáΓ«τ¡«.
-
- ū߬«½∞¬π ¼¡«ú¿Ñ ¿º Σπ¡¬µ¿⌐ ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿ ∩ºδ¬á æ¿
- «íαáΘáεΓß∩ ¬ DOS ¿½¿ ¬ BIOS, Γ« «¡¿ ¡Ñ ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ ΓÑσ
- Σπ¡¬µ¿⌐ DOS ¿ BIOS, ¬«Γ«αδÑ ¡Ñ «íÑß»Ñτ¿óáεΓ »«óΓ«α¡«⌐ óσ«ñ¿¼«ßΓ¿.
- æ½ÑñπÑΓ »«¼¡¿Γ∞, τΓ« ¡Ñ Γ«½∞¬« Σπ¡¬µ¿¿ óó«ñá-óδó«ñá «íαáΘáεΓß∩ ¬
- DOS ¿ BIOS. ìá»α¿¼Ñα, Σπ¡¬µ¿∩ αáß»αÑñѽѡ¿∩ »á¼∩Γ¿ malloc()
- «íαáΘáÑΓß∩ ¬ DOS ñ½∩ «»αÑñѽѡ¿∩ αẼÑαá ßó«í«ñ¡«⌐ »á¼∩Γ¿ ó
- ß¿ßΓѼÑ. è ß«ªá½Ñ¡¿ε, »α«úαá¼¼δ, ¬«Γ«αδÑ αáßßτ¿Γá¡δ ¡á «ñ¿¡
- ¬«¼»¿½∩Γ«α, ¼«úπΓ ¡Ñ αáí«ΓáΓ∞ ß ñαπú¿¼ ¬«¼»¿½∩Γ«α«¼. ¥Γ¿¼ ¿
- «íΩ∩ß¡∩ÑΓß∩, »«τѼπ TSR-»α«úαá¼¼δ ΓᬠΓαπñ¡« ß«ºñáóáΓ∞ ¿
- »ÑαÑ¡«ß¿Γ∞ ó ñαπúπε ßαÑñπ ¿ »«τѼπ TSR-»α«úαá¼¼ ß«ºñá¡« ßΓ«½∞
- ¡Ñ¼¡«ú« »α¿ ¿σ «τÑ¡∞ í«½∞Φ«⌐ »«»π½∩α¡«ßΓ¿.
-
- Å« ßπΘÑßΓóπ, óδ ñ«½ª¡δ ó«ß»α¿¡¿¼áΓ∞ TSR-»α«úαá¼¼δ ¬á¬
- "ºáí½πñΦ¿Ñ" »α«úαá¼¼δ, « ßπΘÑßΓó«óá¡¿¿ ¬«Γ«αδσ DOS ¡Ñ
- »«ñ«ºαÑóáÑΓ. ê ó ñá½∞¡Ñ⌐ΦѼ, τΓ«íδ ß«σαá¡¿Γ∞ Γá⌐¡π « ßó«Ñ¼
- ßπΘÑßΓó«óá¡¿¿ φΓ¿ »α«úαá¼¼δ ñ«½ª¡δ ¿ºíÑúáΓ∞ ½εí«ú« óºá¿¼«ñÑ⌐ßΓó¿∩
- ß DOS. éßÑú« »áαδ «íαáΘÑ¡¿⌐ ¬ DOS ñ«ßΓáΓ«τ¡«, ¿ óáΦÑ⌐ »α«úαá¼¼Ñ
- íπñÑΓ πßΓα«Ñ¡á ¬α«óáóá∩ αѺ¡∩. ùΓ«íδ φΓ«ú« ¿ºíѪáΓ∞, óδ ñ«½ª¡δ
- «ΘπΘáΓ∞ ßÑí∩ Φ»¿«¡«¼ ¿ ¿¼ÑΓ∞ ¡Ñαóδ áóΓ«ú«¡Θ¿¬á.
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 5 --
-
-
- î«ñ¿Σ¿¬áΓ«α Σπ¡¬µ¿⌐ »αÑαδóá¡¿∩ Æπαí« æ¿.
- -----------------------------------------------------------------
-
- ò«Γ∩ ßΓá¡ñáαΓ ANSI φΓ«ú« ¿ ¡Ñ ΓαÑíπÑΓ, Æπαí« æ¿ ó¬½ετáÑΓ
- ߻ѵ¿á½∞¡δ⌐ ¼«ñ¿Σ¿¬áΓ«α Γ¿»á Σπ¡¬µ¿¿, ¬«Γ«αδ⌐ ¡áºδóáÑΓß∩
- interrupt ¿ »«ºó«½∩ÑΓ ¿ß»«½∞º«óáΓ∞ Σπ¡¬µ¿¿ æ¿ ó ¬áτÑßΓóÑ
- TSR-»α«úαá¼¼. (ü«½∞Φ¿¡ßΓó« «ß¡«ó¡δσ αáºαáí«Γτ¿¬«ó ¬«¼»¿½∩Γ«α«ó æ¿
- »« óßÑ⌐ óÑα«∩Γ¡«ßΓ¿ ó¬½ετáΓ φΓ« ßαÑñßΓó« ó ßó«¿ íπñπΘ¿Ñ
- αáºαáí«Γ¬¿, »«ß¬«½∞¬π φΓ« «τÑ¡∞ ó᪡«Ñ αáßΦ¿αÑ¡¿Ñ). ìá»α¿¼Ñα,
- »αÑñ»«½«ª¿¼, τΓ« Σπ¡¬µ¿∩ test() ¿ß»«½∞ºπÑΓß∩ ñ½∩ «íαáí«Γ¬¿
- »αÑαδóá¡¿⌐. é φΓ«¼ ß½πτáÑ óδ ñ«½ª¡δ «»αÑñѽ¿Γ∞ ÑÑ Γá¬, ¬á¬
- »«¬áºá¡« ¡¿ªÑ. Åáαá¼ÑΓαδ, «»¿ßδóáεΘ¿Ñ º¡áτÑ¡¿∩ ß««ΓóÑΓßΓóπεΘ¿σ
- αÑú¿ßΓα«ó ó« óαѼ∩ »αÑαδóá¡¿∩, ¡Ñ ¡πª¡« «»αÑñѽ∩Γ∞, Ñß½¿ «¡¿ ¡Ñ
- íπñπΓ ¿ß»«½∞º«óáΓ∞ß∩.
-
- void interrupt test(bp, di, si, ds, es, dx, cx, bx,
- ax, ip, cs, flags)
- unsigned bp, di, si, ds, es, dx, cx, bx, ax, ip, cs, flags;
- {
- .
- .
- .
- }
-
- öπ¡¬µ¿∩ interrupt áóΓ«¼áΓ¿τÑ߬¿ ß«σαá¡∩ÑΓ º¡áτÑ¡¿∩ óßÑσ
- αÑú¿ßΓα«ó ¿ ó«ßßΓá¡áó½¿óáÑΓ ¿σ »ÑαÑñ ó«ºóαáΓ«¼ π»αáó½Ñ¡¿∩
- óδºδóáεΘÑ⌐ »α«úαá¼¼Ñ. ¥Γá Σπ¡¬µ¿∩ ¿ß»«½∞ºπÑΓ ñ½∩ ó«ºóαáΓá
- π»αáó½Ñ¡¿∩ ¬«¼á¡ñπ IRET ó¼ÑßΓ« «íδτ¡«⌐ ó Γᬫ¼ ß½πτáÑ ¬«¼á¡ñδ
- RET.
-
- é »αÑñßΓáó½Ñ¡¡δσ ó ñá¡¡«⌐ ¬¡¿úÑ »α¿¼Ñαáσ ¼«ñ¿Σ¿¬áΓ«α
- interrupt »α¿¼Ñ¡∩ÑΓß∩ Γ«½∞¬« ñ½∩ ΓÑσ Σπ¡¬µ¿⌐, ¬«Γ«αδÑ
- ¿ß»«½∞ºπεΓß∩ ó ¬áτÑßΓóÑ Γ«τѬ óσ«ñá ó »α«úαá¼¼δ «íαáí«Γ¬¿
- »αÑαδóá¡¿⌐ TSR-»α«úαá¼¼.
-
- àß½¿ óáΦ ¬«¼»¿½∩Γ«α ¡Ñ »«ññÑনóáÑΓ ¼«ñ¿Σ¿¬áΓ«α interrupt,
- Γ« óá¼ ¡Ñ«íσ«ñ¿¼« ¡á»¿ßáΓ∞ ¡á áßßѼí½ÑαÑ ¡Ñí«½∞Φ«⌐ ¿¡ΓÑαΣÑ⌐ß¡δ⌐
- ¼«ñπ½∞, ¬«Γ«αδ⌐ íπñÑΓ ß«σαá¡∩Γ∞ º¡áτÑ¡¿∩ αÑú¿ßΓα«ó,
- »ÑαÑπßΓá¡áó½¿óáΓ∞ αáºαÑΦÑ¡¿Ñ »αÑαδóá¡¿⌐, á ºáΓѼ óδºδóáΓ∞
- ß««ΓóÑΓßΓóπεΘπε Σπ¡¬µ¿ε æ¿. ä½∩ óδσ«ñá ¿º ¼«ñπ½∩ ¡Ñ«íσ«ñ¿¼«
- ¿ß»«½∞º«óáΓ∞ ¬«¼á¡ñπ IRET. æαÑñßΓóá ß«ºñá¡¿∩ Σπ¡¬µ¿⌐ ¡á ∩ºδ¬Ñ
- áßßѼí½Ñαá αẽ¿τ¡δ ñ½∩ αạδσ ¬«¼»¿½∩Γ«α«ó, ΓᬠτΓ« τ¿Γá⌐ΓÑ
- ¿¼ÑεΘÑÑß∩ π óáß απ¬«ó«ñßΓó« »«½∞º«óáΓѽ∩.
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 6 --
-
-
- ÄíΘ¿⌐ »½á¡ TSR-»α«úαá¼¼δ
- -----------------------------------------------------------------
-
- éßÑ TSR-»α«úαá¼¼δ «íδτ¡« ß«ßΓ«∩Γ ¿º ñóπσ αáºñѽ«ó. ÅÑαóá∩
- τáßΓ∞ ¿ß»«½∞ºπÑΓß∩ ñ½∩ ¿¡¿µ¿á½¿ºáµ¿¿ TSR-»α«úαá¼¼δ ¿ ó«ºóαáΓá
- π»αáó½Ñ¡¿∩ DOS »πΓѼ ¿ß»«½∞º«óá¡¿∩ αÑÑ¡ΓÑαáíѽ∞¡«ú« ß¿ßΓѼ¡«ú«
- ó맮óá. ¥Γá τáßΓ∞ ¡Ñ óδ»«½¡∩ÑΓß∩ ñ« ΓÑσ »«α, »«¬á ¡Ñ 󫺡¿¬áÑΓ
- ¡Ñ«íσ«ñ¿¼«ßΓ∞ ó »ÑαѺáúαπº¬Ñ »α«úαá¼¼δ. Åα¿ φΓ«¼ »α«¿ºó«ñ¿Γß∩
- ºá»¿ß∞ áñαÑßá Γ«τ¬¿ óσ«ñá TSR-»α«úαá¼¼δ ó ß««ΓóÑΓßΓóπεΘÑÑ ¼ÑßΓ«
- Γáí½¿µδ óÑ¬Γ«α«ó.
-
- éΓ«αá∩, »α¿¬½áñ¡á∩ τáßΓ∞, ºá¡¿¼áÑΓß∩ Σ«α¼¿α«ó᡿Ѽ
- ¿º«íαáªÑ¡¿⌐. Åα¿ φΓ«¼ »«τΓ¿ óßÑúñá ¿ß»«½∞ºπεΓß∩ «¬¡á, á
- ß½Ññ«óáΓѽ∞¡«,¿ »α«úαá¼¼δ π»αáó½Ñ¡¿∩ «¬¡á¼¿. Åα¿ φΓ«¼ ¿º«íαáªÑ¡¿Ñ
- ¡á φ¬αá¡Ñ ó«ßßΓá¡áó½¿óáÑΓß∩ »«ß½Ñ ºáóÑαΦÑ¡¿∩ αáí«Γδ »α¿¬½áñ¡«⌐
- τáßΓ¿ »α«úαá¼¼δ. æ½ÑñπÑΓ »«¼¡¿Γ∞, τΓ« π í«½∞Φ¿¡ßΓóá TSR-»α«úαá¼¼
- »α¿¬½áñ¡δÑ τáßΓ¿ »αÑñßΓáó½∩εΓ ß«í«⌐ πΓ¿½¿Γδ Σ«α¼¿α¿óá¡¿∩
- ¿º«íαáªÑ¡¿∩, ¬á¬ π »α«úαá¼¼δ Γ¿»á "ºá»¿ß¡«⌐ ¬¡¿ª¬¿" ¿½¿
- "¬á½∞¬π½∩Γ«αá". Å«ß½Ñ ßó«Ñú« ºáóÑαΦÑ¡¿∩ «¡¿ ó«ßßΓá¡áó½¿óáεΓ
- ¿º«íαáªÑ¡¿Ñ ¡á φ¬αá¡Ñ ó Γ«¼ ªÑ ó¿ñÑ, ¬á¬¿¼ «¡« í佫 »ÑαÑñ
- ºá»π߬«¼ φΓ¿σ »α«úαá¼¼.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 7 --
-
-
- êß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩ »ÑτáΓ¿ φ¬αá¡á.
- -----------------------------------------------------------------
-
- üѺ ß«¼¡Ñ¡¿⌐, »αÑαδó᡿Ѽ, ¬«Γ«α«Ñ ¡á¿í«½ÑÑ »α«ßΓ« "π¬αáßΓ∞"
- π DOS, ∩ó½∩ÑΓß∩ »αÑαδóá¡¿Ñ ¡«¼Ñα 5. ¥Γ« »αÑαδóá¡¿Ñ óδºδóáÑΓß∩ »α¿
- ¡áªáΓ¿¿ ¬½áó¿Φ¿ PT SCR. àß½¿ óδ ú«Γ«óδ »«ªÑαΓó«óáΓ∞ Σπ¡¬µ¿Ñ⌐
- »ÑτáΓ¿ φ¬αá¡á, Γ« ¼«ªÑΓÑ ºá¼Ñ¡¿Γ∞ áñαÑß φΓ«⌐ »α«úαá¼¼δ ó Γáí½¿µÑ
- óÑ¬Γ«α«ó áñαÑß«¼ óáΦÑ⌐ TSR-»α«úαá¼¼δ. Æá¬¿¼ «íαẫ¼, »α¿ ¬áªñ«¼
- ¡áªáΓ¿¿ ¬½áó¿Φ¿ PT SCR íπñÑΓ óδºδóáΓ∞ß∩ óáΦá TSR-»α«úαá¼¼á.
-
- Åα¿¼Ñα«¼ Γᬫ⌐ »α«úαá¼¼δ ∩ó½∩ÑΓß∩ αѺ¿ñÑ¡Γ¡δ⌐ ¬á½∞¬π½∩Γ«α.
- Åα«úαá¼¼δ ñ½∩ αáí«Γδ ß «¬¡á¼¿ ¿ »α«úαá¼¼á ¬á½∞¬π½∩Γ«αá ¿º αáºñѽá
- 2 »α¿ó«ñ∩Γß∩ ºñÑß∞ ß ¡Ñ¬«Γ«α묨 ¡Ñí«½∞Φ¿¼¿ ¿º¼Ñ¡Ñ¡¿∩¼¿.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 8 --
-
-
- Éáºñѽ ¿¡¿µ¿á½¿ºáµ¿¿
- -----------------------------------------------------------------
-
- Éáºñѽ ¿¡¿µ¿á½¿ºáµ¿¿ »α«úαá¼¼δ αѺ¿ñÑ¡Γ¡«ú« ¬á½∞¬π½∩Γ«αá
- «τÑ¡∞ ¡Ñí«½∞Φ«⌐ ¿ µÑ½¿¬«¼ »«¼ÑΘáÑΓß∩ ó ¡¿ªÑß½ÑñπεΘÑ⌐ Σπ¡¬µ¿¿
- main().
-
- void interrupt tsr_ap(); /* óσ«ñ ó »α¿¬½áñ¡πε »α«úαá¼¼π */
- main()
- {
- struct address {
- char far *p;
- } ;
- /* áñαÑß »αÑαδóá¡¿∩ »ÑτáΓ¿ φ¬αá¡á */
- struct address far *addr = (struct address far *) 20;
- addr->p = (char far *) tsr_ap;
- set_vid_mem();
- tsr(2000);
- }
-
- TSR-»α«úαá¼¼á »Ñαóδ¼ ñѽ«¼ ñ«½ª¡á ºá¼Ñ¡¿Γ∞ áñαÑß »α«úαá¼¼δ
- «íαáí«Γ¬¿ »αÑαδóá¡¿∩ 5 π¬áºáΓѽѼ Σπ¡¬µ¿¿, «»αÑñѽѡ¡«⌐ ó ßἫ⌐
- TSR-»α«úαá¼¼Ñ. àßΓ∞ ¡Ñ߬«½∞¬« ß»«ß«í«ó ¿º¼Ñ¡Ñ¡¿∩ áñαÑßá ó Γáí½¿µÑ
- óÑ¬Γ«α¡δσ »αÑαδóá¡¿⌐. Äñ¿¡ ¿º ß»«ß«í«ó ß«ßΓ«¿Γ ó ¿ß»«½∞º«óá¡¿¿
- ß¿ßΓѼ¡«ú« ó맮óá DOS. Äñ¡á¬« ¡Ñπñ«íßΓó« ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿¿
- DOS ºá¬½ετáÑΓß∩ ó Γ«¼, τΓ« «¡á ΓαÑíπÑΓ ºáñá¡¿∩ º¡áτÑ¡¿∩ áñαÑß¡«ú«
- ßÑú¼Ñ¡Γá ó αÑú¿ßΓαÑ àS, ¬«Γ«αδ⌐ ¡Ññ«ßΓπ»Ñ¡ »α¿ ¿ß»«½∞º«óá¡¿¿
- Σπ¡¬µ¿¿ int86(). ìѬ«Γ«αδÑ ¬«¼»¿½∩Γ«αδ, ¬á¬ ¡á»α¿¼Ñα Æπαí« æ¿,
- ó¬½ετáεΓ ß»Ñµ¿á½∞¡δÑ Σπ¡¬µ¿¿, »αÑñ¡áº¡áτÑ¡¡δÑ ñ½∩ πßΓá¡«ó¬¿
- áñαÑßá ó Γáí½¿µÑ »αÑαδóá¡¿⌐. Äñ¡á¬« ß»«ß«í, »αÑñ½áúáѼδ⌐ ºñÑß∞,
- íπñÑΓ αáí«ΓáΓ∞ »α¿ ¿ß»«½∞º«óá¡¿¿ »αá¬Γ¿τÑ߬¿ ½εí«ú« ¬«¼»¿½∩Γ«αá.
- öπ¡¬µ¿∩ tsr_ap() ∩ó½∩ÑΓß∩ Γ«τ¬«⌐ óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞
- TSR-»α«úαá¼¼δ. Ä¡á ¿ß»«½∞ºπÑΓ π¬áºáΓѽ∞ ¡á ß«ñÑন¼«Ñ Γáí½¿µδ
- óÑ¬Γ«α«ó, ß««ΓóÑΓßΓóπεΘÑÑ »αÑαδóá¡¿ε 5. (ìừ¼¿¡áѼ, τΓ« óÑ¬Γ«α 5
- αáß»«½«ªÑ¡ »« áñαÑßπ 20(4σ5) ó Γáí½¿µÑ, »«ß¬«½∞¬π ¬áªñδ⌐ óÑ¬Γ«α
- ¿¼ÑÑΓ αẼÑα 4 íá⌐Γá. ìѬ«Γ«αδÑ TSR-»α«úαá¼¼δ ó«ßßΓá¡áó½¿óáεΓ
- ¿ßσ«ñ¡«Ñ º¡áτÑ¡¿Ñ áñαÑßá. ì« »α¿ ¿ß»«½∞º«óá¡¿¿ »α¿ó«ñ¿¼δσ ºñÑß∞
- »α«úαá¼¼ óδ ñ«½ª¡δ íπñÑΓÑ »ÑαѺáúαπªáΓ∞ ß¿ßΓѼπ, τΓ«íδ
- ó«ßßΓá¡«ó¿Γ∞ ¿ßσ«ñ¡δÑ º¡áτÑ¡¿∩ óÑ¬Γ«α«ó »αÑαδóá¡¿⌐.
-
- é »αÑñδñπΘ¿σ αáºñѽáσ, »α«óÑα¬á αѪ¿¼á αáí«Γδ ó¿ñѫ߿ßΓѼδ
- »α«¿ºó«ñ¿½áß∞ ñ¿¡á¼¿τÑ߬¿ ΓѼ¿ »α«úαἼἿ, ¬«Γ«αδÑ ß ¡Ñ⌐
- αáí«Γ὿. Äñ¡á¬« ó ñá¡¡«¼ ß½πτáÑ φΓ« ¡Ñ»α¿¼Ñ¡¿¼«, »«ß¬«½∞¬π
- ΓαÑíπÑΓ ¿ß»«½∞º«óá¡¿∩ ß¿ßΓѼ¡δσ ó맮ó«ó DOS. é¼ÑßΓ« φΓ«ú«
- º¡áτÑ¡¿Ñ ú½«íá½∞¡«ú« π¬áºáΓѽ∩ vid_mem πßΓá¡áó½¿óáÑΓß∩ ß »«¼«Θ∞ε
- Σπ¡¬µ¿¿ set_vid_mem, »α¿ó«ñ¿¼«⌐ ¡¿ªÑ.
-
- set_vid_mem()
- {
- int vmode;
- vmode = video_mode();
- if((vmode!=2) && (vmode!=3) && (vmode!=7)) {
- printf("video must be in 80 column text mode");
- exit (1);
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 9 --
-
-
- }
- /* πßΓá¡«ó¿Γ∞ ß««ΓóÑΓßΓóπεΘ¿⌐ áñαÑß ó¿ñÑ«»á¼∩Γ¿ */
- if(vmode==7) vid_mem = (char far *) 0xB0000000;
- else vid_mem = (char far *) 0xB8000000;
- }
-
- ìᬫ¡Ñµ, óδσ«ñ ¿º Σπ¡¬µ¿¿ main() ocyΘÑßΓó½∩ÑΓß∩ »πΓѼ
- «íαáΘÑ¡¿∩ ¬ Σπ¡¬µ¿¿ tsr(), »α¿óÑñÑ¡¡«⌐ ¡¿ªÑ.
-
- /* ºáóÑαΦ¿Γ∞ óδ»«½¡Ñ¡¿Ñ, ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
- tsr(size)
- unsigned size;
- {
- union REGS r;
- r.h.ah = 49; /* ºáóÑαΦ¿Γ∞ ¿ «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
- r.h.al = 0; /* ¬«ñ ó«ºóαáΓá */
- r.x.dx = size;
- int86(0x21, &r, &r);
- }
-
- Åáαá¼ÑΓα size, «»αÑñѽ∩Ѽδ⌐ ó αÑú¿ßΓαÑ DX, ¿ß»«½∞ºπÑΓß∩ ñ½∩
- Γ«ú«, τΓ«íδ ß««íΘ¿Γ∞ DOS, ߬«½∞¬« »á¼∩Γ¿ ΓαÑíπÑΓß∩ ñ½∩ αẼÑΘÑ¡¿∩
- ÆSR-»α«úαá¼¼δ. ÉẼÑα »á¼∩Γ¿ «»αÑñѽ∩ÑΓß∩ ó 16-íá⌐Γ¡δσ
- »áαáúαáΣáσ. ê¡«úñá íδóáÑΓ Γαπñ¡« «»αÑñѽ¿Γ∞, ߬«½∞¬« »á¼∩Γ¿
- ¡Ñ«íσ«ñ¿¼« ñ½∩ αẼÑΘÑ¡¿∩ »α«úαá¼¼δ. ê Ñß½¿ ó φΓ«¼ ß½πτáÑ óδ
- αáºñѽ¿ΓÑ αẼÑα ºáúαπº«τ¡«ú« ¼«ñπ½∩ óáΦÑ⌐ »α«úαá¼¼δ (Σá⌐½á ß
- αáßΦ¿αÑ¡¿Ñ¼ .EXE) ¡á 16, á »«½πτÑ¡¡πε óѽ¿τ¿¡π π¼¡«ª¿ΓÑ ¡á 2, Γ«
- íπñÑΓÑ ºáßΓαáσ«óá¡δ «Γ «Φ¿í¬¿. Æ«τ¡« «»αÑñѽ¿Γ∞ αẼÑα
- ¡Ñ«íσ«ñ¿¼«⌐ »á¼∩Γ¿ Γαπñ¡«, »«ß¬«½∞¬π ºáúαπº«τ¡δÑ ¼«ñ㫨 τáßΓ¿τ¡«
- ¡á¬½áñδóáεΓß∩ ñαπú ¡á ñαπúá »α¿ ºáúαπº¬Ñ ¿ ¡Ñ«í∩ºáΓѽ∞¡«
- αẼÑΘáεΓß∩ ó ¡Ñ»αÑαδó¡«⌐ «í½áßΓ¿. (àß½¿ óδ ¡á¼ÑαÑóáΓÑß∞
- »α«ñáóáΓ∞ ßó«¿ »α«úαá¼¼δ, Γ« ¡áóÑα¡∩¬á σ«Γѽ¿ íδ º¡áΓ∞ Γ«τ¡«,
- ߬«½∞¬« »«ΓαÑíπÑΓß∩ »á¼∩Γ¿, τΓ«íδ ¡Ñ «¬áºáΓ∞ß∩ ß½¿Φ¬«¼
- αáßΓ«τ¿Γѽ∞¡δ¼. ìá¿í«½ÑÑ »α«ßΓ« φΓ« ¼«ª¡« «»αÑñѽ¿Γ∞
- φ¬ß»Ñα¿¼Ñ¡Γá½∞¡δ¼ »πΓѼ). è«ñ ó«ºóαáΓá, πßΓá¡áó½¿óáѼδ⌐ ó
- αÑú¿ßΓαÑ AL, »ÑαÑñáÑΓß∩ ß¿ßΓѼÑ.
-
- Å«ß½Ñ ºáóÑαΦÑ¡¿∩ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ¼áin() »α«úαá¼¼á
- «ßΓáÑΓß∩ ó »á¼∩Γ¿, ¿ ¡¿¬á¬á∩ ñαπúá∩ »α«úαá¼¼á ¡Ñ ¼«ªÑΓ íδΓ∞
- ºáúαπªÑ¡á ¡á ÑÑ ¼ÑßΓ«. ¥Γ« º¡áτ¿Γ, τΓ« »α¿¬½áñ¡á∩ τáßΓ∞ »α«úαá¼¼δ
- ó ½εí«⌐ ¼«¼Ñ¡Γ óαѼѡ¿ ú«Γ«óá íδΓ∞ ºá»πΘÑ¡¡«⌐ ¡áªáΓ¿Ñ¼ ¬½áó¿Φ¿ PT
- SCR.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 10 --
-
-
- Åਪ½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ
- -----------------------------------------------------------------
-
- Æ«τ¬«⌐ óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ ñ«½ª¡á íδΓ∞
- Σπ¡¬µ¿∩ Γ¿»á interrupt. é »αÑñßΓáó½Ñ¡¡«¼ ¡¿ªÑ »α¿¼ÑαÑ ºá»π߬
- »α¿¬½áñ¡«⌐ τáßΓ¿ óδ»«½¡∩ÑΓß∩ »πΓѼ ó맮óá Σπ¡¬µ¿¿ window_main().
-
- /* Æ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
- void interrupt tsr_ap()
- {
- if(!busy) {
- busy = !busy;
- window_main();
- busy = !busy;
- }
- }
-
- ⽫íá½∞¡á∩ »ÑαѼѡ¡á∩ busy »Ñαó«¡áτá½∞¡« πßΓá¡áó½¿óáÑΓß∩ ó
- 0. Åਪ½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ ¡Ñ ∩ó½∩ÑΓß∩ »«óΓ«α¡« óσ«ñ¿¼«⌐,
- ß½Ññ«óáΓѽ∞¡«, «¡á ¡Ñ ñ«½ª¡á ºá»π߬áΓ∞ß∩ ñóáªñδ ºá óαѼ∩ «ñ¡«ú«
- ¿ß»«½∞º«óá¡¿∩. ÅÑαѼѡ¡á∩ busy ¿ß»«½∞ºπÑΓß∩ ¬á¬ αẠñ½∩ Γ«ú«,
- τΓ«íδ »αÑñ«ΓóαáΓ¿Γ∞ φΓ«. (ìѬ«Γ«αδÑ ¬«¼»¿½∩Γ«αδ æ¿ ¼«úπΓ
- ß«ºñáóáΓ∞ αÑÑ¡ΓÑαáíѽ∞¡δÑ »α«úαá¼¼δ, ¡« íѺ«»áß¡ÑÑ ñ½∩ óáß ¡Ñ
- «íßπªñáΓ∞ ºñÑß∞ φΓ«ú« ó«»α«ßá).
-
- é »α«úαá¼¼δ π»αáó½Ñ¡¿∩ «¬¡á¼¿ ¡Ñ«íσ«ñ¿¼« ó¡ÑßΓ¿ ¡Ñ¬«Γ«αδÑ
- ¿º¼Ñ¡Ñ¡¿∩ ñ½∩ Γ«ú«, τΓ«íδ ¿σ ¼«ª¡« í佫 ¿ß»«½∞º«óáΓ∞ ó
- TSR-»α«úαá¼¼áσ. é«-»Ñαóδσ, ¡Ñ«íσ«ñ¿¼« ßΓáΓ¿τÑ߬¿ αáß»αÑñѽ∩Γ∞
- »á¼∩Γ∞, ¡Ñ«íσ«ñ¿¼πε ñ½∩ σαá¡Ñ¡¿∩ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á,
- »πΓѼ ¿ß»«½∞º«óá¡¿∩ ú½«íá½∞¡«ú« ¼áßß¿óá. éδ ¼«ú½¿ »α¿ó몭πΓ∞ ¬
- Γ«¼π, τΓ« φΓá »á¼∩Γ∞ αáß»αÑñѽ∩½áß∞ ñ¿¡á¼¿τÑ߬¿, ¡« ñá¡¡δ⌐ ß»«ß«í
- ºñÑß∞ ¡Ñ»α¿ú«ñÑ¡, óß½ÑñßΓó¿Ñ Γ«ú«, τΓ« Σπ¡¬µ¿¿ ñ¿¡á¼¿τÑ߬«ú«
- αáß»αÑñѽѡ¿∩ ¿ß»«½∞ºπεΓ ß¿ßΓѼ¡δ⌐ ó맮ó, ¬«Γ«αδ⌐ ¡Ññ«»πßΓ¿¼ ó
- TSR-»α«úαá¼¼áσ. Å« φΓ«⌐ ªÑ »α¿τ¿¡Ñ Σπ¡¬µ¿∩ go_to_xy() ¡Ñ ¼«ªÑΓ
- íδΓ∞ ¿ß»«½∞º«óá¡á ñ½∩ »«º¿µ¿«¡¿α«óá¡¿∩ ¬παß«αá. ìᬫ¡Ñµ,
- ßΓá¡ñáαΓ¡δÑ æ¿-Σπ¡¬µ¿¿ sscanf() ¿ sprintf() Γá¬ªÑ ¡Ñ ¼«úπΓ íδΓ∞
- ¿ß»«½∞º«óá¡δ (»« ¬αá⌐¡Ñ⌐ ¼ÑαÑ, ó Æπαí« æ¿), »«Γ«¼π τΓ« ΓᬪÑ
- «ßπΘÑßΓó½∩εΓ «íαáΘÑ¡¿∩ ¬ DOS. é¼ÑßΓ« ¡¿σ ¿ß»«½∞ºπεΓß∩ Σπ¡¬µ¿¿
- áΓ«i() ¿ itoa(). Å«½¡δ⌐ ΓѬßΓ »α«úαá¼¼δ αѺ¿ñÑ¡Γ¡«ú« ¬á½∞¬π½∩Γ«αá
- »αÑñßΓáó½Ñ¡ ¡¿ªÑ.
-
- /* TSR-»α«úαá¼¼á, ¿ß»«½∞ºπεΘá∩ »αÑαδóá¡¿Ñ »ÑτáΓ¿ φ¬αá¡á */
- #include "dos.h"
- #include "stdlib.h"
-
- #define BORDER 1
- #define ESC 27
- #define MAX_FRAME 1
- #define REV_VID 0x70
- #define NORM_VID 7
- #define BKSP 8
- void interrupt tsr_ap();
- void save_video(), restore_video();
- void write_string(), write_char();
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 11 --
-
-
- void display_header(), draw_border();
- void window_gets();
- void window_cleol(), window();
- void calc();
- char far *vid_mem;
- struct window_frame {
- int startx, endx, starty, endy;
- int curx, cury; /* ΓѬπΘÑÑ »«½«ªÑ¡¿Ñ ¬παß«αá ó «¬¡Ñ */
- unsigned char *p; /* π¬áºáΓѽ∞ íπΣÑαá */
- char *header; /* ß««íΘÑ¡¿Ñ ó óÑασ¡Ñ⌐ τáßΓ¿ «¬¡á */
- int border; /* ó¬½ετÑ¡¿Ñ/«Γ¬½ετÑ¡¿Ñ í«αñεαá */
- int active; /* á¬Γ¿óᵿ∩/ñÑá¬Γ¿óᵿ∩ «¬¡á */
- } frame[MAX_FRAME];
- char wp[4000]; /* íπΣÑα ñ½∩ σαá¡Ñ¡¿∩ ΓѬπΘÑú« ß«ñÑন¼«ú« φ¬αá¡á
-
- /* busy πßΓá¡«ó½Ñ¡á ó 1, Ñß½¿ »α«úαá¼¼á á¬Γ¿ó¡á, ¿¡áτÑ - ó 0 */
- char busy = 0;
-
- main()
- {
- struct address {
- char far *p;
- } ;
- /* áñαÑß »αÑαδóá¡¿∩ »ÑτáΓ¿ φ¬αá¡á */
- struct address far *addr = (struct address far *) 20;
- addr->p = (char far *) tsr_ap;
- set_vid_mem();
- tsr(2000);
- }
-
- set_vid_mem()
- {
- int vmode;
- vmode = video_mode();
- if((vmode!=2) && (vmode!=3) && (vmode!=7)) {
- printf("video must be in &0 column text mode");
- exit(1);
- }
- /* πßΓá¡«ó¿Γ∞ ß««ΓóÑΓßóπεΘ¿⌐ áñαÑß ó¿ñÑ«»á¼∩Γ¿ */
- if(vmode==7) vid_mem = (char far *) 0xB0000000;
- else vid_mem = (char far *) 0xB8000000;
- }
-
- /* Γ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
- void interrupt tsr_ap()
- {
-
-
- if(!busy) {
- busy = !busy;
- window_main();
- busy = !busy;
- }
- }
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 12 --
-
-
-
- /* ºáóÑαΦ¿Γ∞, ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
- tsr(size)
- unsigned size;
- {
- union REGS r;
- r.h.ah = 49; /* ºáóÑαΦ¿Γ∞, ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
- r.h.al = 0; /* ¬«ñ ó«ºóαáΓá */
- r.x.ax = size;
- int86(0x21, &r, &r);
- }
-
- window_main()
- {
- /* »Ñαóδ¼ ñѽ«¼, ß«ºñáΓ∞ ßΓαπ¬Γπα𠫬¡á */
- make_window(0, " Calculator ", 8, 20, 12, 60, BORDER);
- /* ñ½∩ á¬Γ¿óᵿ¿ «»¿ßá¡¡«ú« «¬¡á ¿ß»«½∞ºπ⌐ΓÑ window() */
- calc();
- }
-
- /*************************************************************/
- /* öπ¡¬µ¿¿ π»αáó½Ñ¡¿∩ «¬¡á¼¿ */
- /*************************************************************/
-
- /* éδóÑßΓ¿ ¡á φ¬αá¡ ß»π߬áεΘÑÑß∩ ¼Ñ¡ε */
- void window(num)
- int num; /* ¡«¼Ñα «¬¡á */
- {
-
- int vmode, choice;
- int x, y;
-
- /* ßñѽáΓ∞ «¬¡« á¬Γ¿ó¡δ¼ */
- if(!frame[num].active) { /* ¿ß»«½∞ºπÑΓß∩ ¡Ñ »«ßΓ«∩¡¡« */
- save_video(num); /* ß«σαá¡¿Γ∞ ΓѬπΘ¿⌐ φ¬αá¡ */
- frame[num].active = 1; /* πßΓá¡«ó¿Γ∞ Σ½áú á¬Γ¿ó¡«ßΓ¿ */
- }
-
- if(frame[num].border) draw_border(num);
- display_header(num); /* óδóÑßΓ¿ «¬¡« */
- }
-
- /* 櫺ñáΓ∞ ß»π߬áεΘÑÑß∩ «¬¡«
- Ñß½¿ «¬¡« ¼«ªÑΓ íδΓ∞ ß«ºñá¡«, ó«ºóαáΘáÑΓß∩ 1;
- ¿¡áτÑ ó«ºóαáΘáÑΓß∩ 0.
- */
- make_window(num, header, startx, starty, endx, endy, border)
- int num; /* ¡«¼Ñα «¬¡á */
- char *header; /* ΓѬßΓ ºáú«½«ó¬á */
-
- int startx, starty; /* ¬««αñ¿¡áΓδ X,Y ½Ñó«ú« óÑασ¡Ñú« πú½á */
- int endx, endy; /* ¬««αñ¿¡áΓδ X,Y »αáó«ú« ¡¿ª¡Ñú« πú½á */
- int border; /* íѺ í«αñεαá Ñß½¿ 0 */
- {
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 13 --
-
-
- register int i;
- int choice, vmode;
- unsigned char *p;
-
- if(num>MAX_FRAME) {
- window_puts(0, "Too many windows\n");
- return 0;
- }
-
- if((startx>24) || (starty>78) || (starty<0)) {
- window_puts(0, "range error");
- return 0;
- }
-
- if((endx>24) || (endy>79)) {
- window_puts(0, "window won't fit");
- return 0;
- }
-
- /* ß«ºñáΓ∞ ßΓαπ¬Γπα𠫬¡á */
- frame[num].startx = startx; frame[num].endx = endx;
- frame[num].starty = starty; frame[num].endy = endy;
- frame[num].p = wp;
- frame[num].header = header;
- frame[num].border = border;
- frame[num].active = 0;
- frame[num].curx = 0; frame[num].cury = 0;
- return 1;
- }
-
- /* äÑá¬Γ¿ó¿α«óáΓ∞ «¬¡« ¿ πñ὿Γ∞ Ñú« ß φ¬αá¡á */
- deactivate(num)
- int num;
- {
- /* πßΓá¡«ó¿Γ∞ ¬παß«α ó ½Ñóδ⌐ óÑασ¡¿⌐ πú«½ */
- frame[num].curx = 0;
- frame[num].cury = 0;
- restore_video(num);
- }
-
- /* éδóÑßΓ¿ ºáú«½«ó«¬ «¬¡á ó ß««ΓóÑΓßóπεΘÑÑ »«½Ñ */
- void display_header(num)
- int num;
- {
- register int i, y, len;
-
- y = frame[num].starty;
-
- /* éδτ¿ß½¿Γ∞ Γ«τ¡«Ñ º¡áτÑ¡¿Ñ µÑ¡Γαá½∞¡«⌐ »«º¿µ¿¿ ºáú«½«ó¬á
- Ñß½¿ «Γα¿µáΓѽ∞¡«Ñ - ºáú«½«ó«¬ ¡Ñ ¼«ªÑΓ íδΓ∞ óδóÑñÑ¡
- */
- len = strlen(frame[num].header);
-
- len = (frame[num].endy - y - len) / 2;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 14 --
-
-
- if(len<0) return; /* don't display it */
- y = y +len;
-
- write_string(frame[num].startx, y,
- frame[num].header, NORM_VID);
- }
-
- void draw_border(num)
- int num;
- {
- register int i;
- char far *v, far *t;
-
- v = vid_mem;
- t = v;
- for(i=frame[num].startx+1; i<frame[num].endx; i++) {
- v += (i*160) + frame[num].starty*2;
- *v++ = 179;
- *v = NORM_VID;
- v = t;
- v += (i*160) + frame[num].endy*2;
- *v++ = 179;
- *v = NORM_VID;
- v = t;
- }
- for(i=frame[num].starty+1; i<frame[num].endy; i++) {
- v += (frame[num].startx*160) + i*2;
- *v++ = 196;
- *v = NORM_VID;
- v = t;
- v += (frame[num].endx*160) + i*2;
- *v++ = 190;
- *v = NORM_VID;
- v = t;
- }
- write_char(frame[num].startx, frame[num].starty, 218, NORM_VID);
- write_char(frame[num].startx, frame[num].endy, 191, NORM_VID);
- write_char(frame[num].endx, frame[num].starty, 192, NORM_VID);
- write_char(frame[num].endx, frame[num].endy, 217, NORM_VID);
- }
-
- /**************************************************************/
- /* Ĭ«¡¡δÑ Σπ¡¬µ¿¿ óó«ñá/óδó«ñá */
- /**************************************************************/
-
- /* éδóÑßΓ¿ ßΓ᫬π ¡áτ¿¡á∩ ß ΓѬπΘÑ⌐ »«º¿µ¿¿ ¬παß«αá
- «»¿ßá¡¡«ú« «¬¡á.
- 髺óαáΓ¿Γ∞ 0 Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ;
- ¿ 1 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_puts(num, str)
- int num;
- char *str;
- {
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 15 --
-
-
- /* πíÑñ¿Γ∞ß∩, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
- if(!frame[num].active) return 0;
-
- for( ; *str; str++)
- window_putchar(num, *str);
- return 1;
- }
-
- /* éδóÑßΓ¿ ß¿¼ó«½ ó ΓѬπΘπε »«º¿µ¿ε ¬παß«αá
- «»¿ßá¡¡«ú« «¬¡á.
- 髺óαáΓ¿Γ∞ 0 Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ,
- ¿ 1 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_putchar(num, ch)
- int num;
- char ch;
- {
- register int x, y;
- char far *v;
-
- /* πíÑñ¿Γ∞ß∩, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
- if(!frame[num].active) return 0;
-
- x = frame[num].curx + frame[num].startx + 1;
- y = frame[num].cury + frame[num].starty + 1;
-
- v = vid_mem;
- v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
- if(y>=frame[num].endy) {
- return 1;
- }
- if(x>=frame[num].endx) {
- return 1;
- }
- if(ch=='\n') { /* ß¿¼ó«½ »ÑαÑσ«ñá ¡á ¡«óπε ßΓ᫬π */
- x++;
- y = frame[num].startx+1;
- v = vid_mem;
- v += (x+160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
- frame[num].curx++; /* ¿¡¬αÑ¼Ñ¡Γ¿α«óáΓ∞ X */
- frame[num].cury = 0; /* ßíα«ß¿Γ∞ Y */
- }
- else {
- frame[num].cury++;
- *v++ = ch; /* óδóÑßΓ¿ ß¿¼ó«½ */
- *v++ = NORM_VID; /* ¡«α¼á½∞¡δÑ áΓα¿íπΓδ ß¿¼ó«½á */
- }
- window_xy(num, frame[num].curx, frame[num].cury);
- return 1;
- }
-
- /* ôßΓá¡«ó¬á ¬παß«αá ó ºáñá¡¡πε »«º¿µ¿ε «¬¡á.
- 髺óαáΘáÑΓ 0 »α¿ óδσ«ñÑ ºá úαá¡¿µπ;
- ¡Ñ ¡«½∞ ó »α«Γ¿ó¡«¼ ß½πτáÑ.
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 16 --
-
-
- */
- window_xy(num, x, y)
- int num, x, y;
- {
-
- if(x<0 || x+frame[num].startx>=frame[num].endx-1)
- return 0;
- if(y<0 || y+frame[num].starty>=frame[num].endy-1)
- return 0;
- frame[num].curx = x;
- frame[num].cury = y;
- return 1;
- }
- /* æτ¿ΓáΓ∞ ßΓα«¬π ¿º «¬¡á. */
- void window_gets(num, s)
- int num;
- char *s;
- {
- char ch, *temp;
-
- temp = s;
- for(;;) {
- ch = window_getche(num);
- switch(ch) {
- case '\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
- *s='\0';
- return;
- case BKSP: /* ó«ºóαáΓ */
- if(s>temp) {
- s--;
- frame[num].cury--;
- if(frame[num].cury<0) frame[num].cury = 0;
- window_xy(num, frame[num].curx, frame[num].cury);
- write_char(frame[num].startx+ frame[num].curx+1,
- frame[num].starty+frame[num].cury+1, ' ', NORM_VID);
- }
- break;
- default: *s = ch;
- s++;
- }
- }
- }
-
- /* éó«ñ ß¿¼ó«½á ß ¬½áó¿áΓπαδ ó «¬¡«.
- 髺óαáΘáÑΓ »«½¡δ⌐ 16-αáºα∩ñ¡δ⌐ ߬á¡-¬«ñ.
- /*
- window_getche(num)
- int num;
- {
- union inkey {
- char ch[2];
- int i;
- } c;
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 17 --
-
-
- if(!frame[num].active) return 0; /* window not active */
- window_xy(num, frame[num].curx, frame[num].cury);
- c.i = bioskey(0); /* «íαáí«ΓáΓ∞ ¡áªáΓ¿Ñ ¬½áó¿Φ¿ */
-
- if(c.ch[0]) {
- switch(c.ch[0]) {
- case '\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
- break;
- case BKSP: /* ó«ºóαáΓ */
- break;
- default:
- if(frame[num].cury+frame[num].starty < frame[num].endy-1) {
- write char(frame[num].startx+ frame[num].curx+1,
- frame[num].curx--;
- window_xy(num, frame[num].curx, frame[num].cury);
- }
- return c.i;
- }
-
- /* Äτ¿ßΓ¿Γ∞ ñ« ¬«¡µá ßΓ᫬¿ */
- void window_cleol(num)
- int num;
- {
- register int i, x, y;
- x = frame[num].curx;
- y = frame[num].cury;
- window_xy(num, frame[num].curx, frame[num].cury);
-
- for(i=frame[num].cury; i<frame[num].endy-1; i++)
- window_putchar(num,' ');
-
- window_xy(num, x, y);
- }
-
- /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α ¡á «ñ¡π ßΓ᫬π óóÑασ.
- Åα¿ πß»ÑΦ¡«¼ ºáóÑαΦÑ¡¿¿ óÑα¡πΓ∞ ¡Ñ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ;
- ó »α«Γ¿ó¡«¼ ß½πτáÑ - 0.
- */
- window_upline(num)
- int num;
- {
- if(frame[num].curx>0) {
- frame[num].curx--;
- window_xy(num, frame[num].curx, frame[num].cury);
- return 1;
- }
- return 0;
- }
-
- /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α ¡á «ñ¡π ßΓ᫬π 󡿺.
- Åα¿ πß»ÑΦ¡«¼ ºáóÑαΦÑ¡¿¿ óÑα¡πΓ∞ ¡Ñ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ;
- ó »α«Γ¿ó¡«¼ ß½πτáÑ - 0.
- */
- window_downline(num)
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 18 --
-
-
-
- int num;
- {
- if(frame[num].curx<frame[num].endx-frame[num].startx-1} {
- frame[num].curx++;
- window_xy(num, frame[num].curx, frame[num].cury);
- return 1;
- }
- return 1;
- }
-
- /* óÑα¡πΓ∞ß∩ ¡á «ñ¡π »«º¿µ¿ε ¡áºáñ */
- window_bksp(num)
- int num;
- {
- if(frame[num].cury>0) {
- frame[num].cury--;
- window_xy(num, frame[num].curx, frame[num].cury);
- window_putchar(num, ' ');
- frame[num].cury--;
- window_xy(num, frame{num}.curx, frame[num].cury);
- }
- }
-
- /********************************************************/
- /* ä«»«½¡¿Γѽ∞¡δÑ Σπ¡¬µ¿¿ */
- /********************************************************/
-
- /* éδóÑßΓ¿ ßΓ᫬π ß πßΓá¡«ó½Ñ¡¡δ¼¿ áΓα¿íπΓἿ */
- void write_string(x, y, p, attrib)
- int x, y;
- char *p;
- int attrib;
- {
- register int i;
- char far *v;
- v = vid_mem;
- v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
- for(i+y; *p; i++) {
- *v++ = *p++; /* óδóÑßΓ¿ ß¿¼ó«½ */
- *v++ = attrib; /* óδóÑßΓ¿ áΓα¿íπΓδ */
- }
- }
-
- /* éδóÑßΓ¿ ß¿¼ó«½ ß πΓá¡«ó½Ñ¡¡δ¼¿ áΓα¿íπΓἿ */
- void write_char(x, y, ch, attrib)
- int x, y;
- char ch;
- int attrib;
- {
- register int i;
- char far *v;
-
- v = vid_mem;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 19 --
-
-
- v += (x*160) +y*2;
- *v++ = ch; /* óδóÑßΓ¿ ß¿¼ó«½ */
- *v = attrib; /* óδóÑßΓ¿ áΓα¿íπΓδ */
- }
-
- /* æ«σαá¡¿Γ∞ ß«ñÑন¼«Ñ «í½áßΓ¿ φ¬αá¡á */
- void save_video(num)
- int num;
- {
- register int i,j;
- char far *v, far *t;
- char *but_ptr;
-
- but_ptr = frame[num].p;
- v = vid_mem;
- t=v;
- for(i=frame[num].starty; i<frame[num].endy+1; i++)
- for(j=frame[num].startx; j<frame[num].endx+1; j++) {
- t = (v + (j*160) + i*2);
- *buf_ptr++ = *t++;
- *buf_ptr++ = *t;
- *(t-1) = ' '; /* «τ¿ßΓ¿Γ∞ «¬¡« */
- }
- }
-
- /* é«ßßΓá¡«ó¿Γ∞ ß«ñÑন¼«Ñ «í½áßΓ¿ φ¬αá¡á */
- void save_video(num)
- int num;
- {
- register int i,j;
- char far *v, far *t;
- char *but_ptr;
-
- but_ptr = frame[num].p;
- v = vid_mem;
- t=v;
- for(i=frame[num].starty; i<frame[num].endy+1; i++)
- for(j=frame[num].startx; j<frame[num].endx+1; j++) {
- v = t;
- v += (j*160) + i*2;
- *v++ = *but_ptr++; /* óδóÑßΓ¿ ß¿¼ó«½ */
- *v = *but_ptr++; /* óδóÑßΓ¿ áΓα¿íπΓδ */
- }
- frame[num].active = 0; /* ó«ßßΓá¡«ó¿Γ∞ ¿º«íαáªÑ¡¿Ñ */
- }
-
- /* 髺óαáΘáÑΓ ¬«ñ ΓѬπΘÑú« ó¿ñÑ«αѪ¿¼á */
- video_mode()
- {
- union REGS r;
-
- r.h.ah =15; /* »«½πτ¿Γ∞ ¬«ñ ó¿ñÑ«αѪ¿¼á */
- return int86(0x10, &r, &r) & 255;
- }
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 20 --
-
-
-
- /**********************************************************
- ¬á½∞¬π½∩Γ«α
- **********************************************************/
-
- #define MAX 100
-
- int *p; /* π¬áºáΓѽ∞ ßΓѬá */
- int *tos; /* π¬áºáΓѽ∞ óÑαΦ¿¡δ ßΓѬá */
- int *bos; /* π¬áºáΓѽ∞ ñ¡á ßΓѬá */
-
- char in[80], out[80];
- int stack[MAX];
-
- /* æΓѬ«óδ⌐, ß »«ßΓΣ¿¬ß¡«⌐ ºá»¿ß∞ε ¬á½∞¬π½∩Γ«α
- ¡á τÑΓδαÑ Σπ¡¬µ¿¿ */
-
- void calc()
- {
- int answer;
- int a, b;
- p = stack;
- tos = p;
- bos = p + MAX - 1;
- window(0);
- do {
- window_xy(0, 0, 0);
- window_cleol(0);
- window_puts(0, " : "); /* »α«¼»ΓÑα ¬á½∞¬π½∩Γ«αá */
- window_gets(0, in);
- window_puts(0, " \n ");
- window_cleol(0);
- switch(*in) {
- case '+ ':
- a = pop();
- b = pop();
- answer = a + b;
- push(a+b);
- break;
- case '-':
- a = pop();
- b = pop();
- answer = b-a;
- push(b-a);
- break;
- case '- ':
- a = pop();
- b = pop();
- answer = b*a;
- push(b*a);
- break;
- case '/ ':
- a = pop();
- b = pop();
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 21 --
-
-
- if(a==0) {
- window_puts(0, "divide by 0\n");
- break;
- }
- answer = b/a;
- push(b/a);
- break;
- default:
- push(atoi(in));
- continue;
- }
- itoa(answer, out, 10);
- window_puts(0, out);
- } while(*in);
- deactivate(0);
- }
-
- /* Å«¼ÑßΓ¿Γ∞ τ¿ß½« ó ßΓѬ.
- 髺óαáΓ¿Γ∞ 1 »α¿ πß»ÑΦ¡«¼ ºáóÑαΦÑ¡¿¿;
- ¿ 0, Ñß½¿ ßΓѬ »ÑαÑ»«½¡Ñ¡
- */
- push(i)
- int i;
- {
- if(p>bos) return 0;
- *p = i;
- p++;
- return 1;
- }
-
- /* êºó½Ñτ∞ óÑασ¡¿⌐ φ½Ñ¼Ñ¡Γ ßΓѬá
- 髺óαáΓ¿Γ∞ 0, Ñß½¿ ßΓѬ »πßΓ.
- */
- pop()
- {
- p--;
- if(p<tos) {
- p++;
- return 0;
- }
- return *p;
- }
-
- éδ ¼«ªÑΓÑ ßαáºπ óó«ñ¿Γ∞ φΓπ »α«úαá¼¼π ó ¥éî. ä½∩ Γ«ú«, τΓ«íδ
- πßΓá¡«ó¿Γ∞ »α¿¬½áñ¡πε τáßΓ∞, ºá»πßΓ¿ΓÑ ÑÑ ¡á óδ»«½¡Ñ¡¿Ñ. ä½∩
- ó맮óá ¬á½∞¬π½∩Γ«αá ¡áª¼¿ΓÑ ¬½áó¿Φπ PT SCR.
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 22 --
-
-
- êß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩ »« ¡áªáΓ¿ε ¬½áó¿Φ¿.
- -----------------------------------------------------------------
-
- ÅαÑαδóá¡¿Ñ »ÑτáΓ¿ φ¬αá¡á «τÑ¡∞ »α«ßΓ« ¿ß»«½∞º«óáΓ∞, ¡« π
- ¡Ñú« ÑßΓ∞ Γα¿ ¬απ»¡δσ ¡Ññ«ßΓáΓ¬á. é«-»Ñαóδσ, «¡« »«ºó«½∩ÑΓ íδΓ∞
- αѺ¿ñÑ¡Γ¡δ¼ ó ß¿ßΓÑ¼Ñ Γ«½∞¬« »α¿¬½áñ¡«⌐ τáßΓ¿ TSR-»α«úαá¼¼δ.
- é«-óΓ«αδσ, óδ ¡Ñ ¼«ªÑΓÑ »α¿ φΓ«¼ »«½∞º«óáΓ∞ß∩ »ÑτáΓ∞ε φ¬αá¡á.
- é-ΓαÑΓ∞¿σ, φΓ« αÑΦÑ¡¿Ñ »α«í½Ñ¼δ "ó ½«í", ¿ »«Γ«¼π «¡« ¡Ñ «τÑ¡∞
- σ«α«ΦÑÑ. ïπτΦ¿¼ ß»«ß«í«¼ ºá»π߬á TSR-»α«úαá¼¼δ ∩ó½∩ÑΓß∩
- ¿ß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩ 9 »« ¡áªáΓ¿ε ¬½áó¿Φ¿. ÅαÑαδóá¡¿Ñ 9
- óδ»«½¡∩ÑΓß∩ »α¿ ¬áªñ«¼ ¡áªáΓ¿¿ ¬½áó¿Φ¿ ¡á ¬½áó¿áΓπαÑ.
-
- Åα¿ ¿ß»«½∞º«óá¡¿¿ »αÑαδóá¡¿∩ 9 ñ½∩ ºá»π߬á TSR-»α«úαá¼¼
- ñ«½ª¡δ ß«í½εñáΓ∞ß∩ ß½ÑñπεΘ¿Ñ «ß¡«ó¡δÑ »«½«ªÑ¡¿∩. é«-»Ñαóδσ, éδ
- ñ«½ª¡δ »ÑαÑ»¿ßáΓ∞ áñαÑß ¿º Γáí½¿µδ óÑ¬Γ«α«ó, ß««ΓóÑΓßΓóπεΘ¿⌐
- »αÑαδóá¡¿ε 9, ó Γá¬«Ñ ¼ÑßΓ« Γáí½¿µδ, ¬«Γ«α«Ñ ß««ΓóÑΓßΓóπÑΓ
- ¡Ñ¿ß»«½∞ºπѼ«¼π DOS »αÑαδóá¡¿ε. îδ íπñѼ ¿ß»«½∞º«óáΓ∞ »αÑαδóá¡¿Ñ
- 60. çáΓѼ, ºá¡Ñß¿ΓÑ áñαÑß Γ«τ¬¿ óσ«ñá ó óáΦπ TSR-»α«úαá¼¼π »«
- áñαÑßπ »αÑαδóá¡¿∩ 9 ó Γáí½¿µÑ óÑ¬Γ«α«ó. Å«ß½Ñ ºá»π߬á óáΦá
- TSR-»α«úαá¼¼á »Ñαóδ¼ ñѽ«¼ ó맮óÑΓ τÑαѺ »αÑαδóá¡¿Ñ ñαá⌐óÑα óó«ñá
- ß ¬½áó¿áΓπαδ. çáΓѼ »α«óÑα∩ÑΓß∩, ¡Ñ ß««ΓóÑΓßΓóπÑΓ ½¿ óóÑñÑ¡¡δ⌐
- ß¿¼ó«½ "ú«α∩τÑ⌐ ¬½áó¿ΦÑ", ¬«Γ«αá∩ ¿ß»«½∞ºπÑΓß∩ ñ½∩ ºá»π߬á
- »α¿¬½áñ¡«⌐ τáßΓ¿ TSR-»α«úαá¼¼δ. àß½¿ ß««ΓóÑΓßΓóπÑΓ, Γ« »α¿¬½áñ¡á∩
- τáßΓ∞ ¡áτ¿¡áÑΓ óδ»«½¡∩Γ∞ß∩, ó »α«Γ¿ó¡«¼ ß½πτáÑ ¡¿¬á¬«ú« ñÑ⌐ßΓó¿∩
- ¡Ñ »α«¿ºó«ñ¿Γß∩ ¿ TSR-»α«úαá¼¼á ñÑá¬Γ¿ó¿απÑΓß∩. Æá¬¿¼ «íαẫ¼,
- »α¿ ¬áªñ«¼ ¡áªáΓ¿¿ »α«¿ßσ«ñ¿Γ «íαáΘÑ¡¿Ñ ¬ Σπ¡¬µ¿¿, αÑáú¿απεΘÑ⌐ ¡á
- ¡áªáΓ¿Ñ ¬½áó¿Φ, ¡« »α¿¬½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ ºá»π߬áÑΓß∩
- Γ«½∞¬« »α¿ ¡áªáΓ¿¿ «»αÑñѽѡ¡«⌐ ¬½áó¿Φ¿.
-
- êß»«½∞º«óá¡¿Ñ »αÑαδóá¡¿∩ »« ¡áªáΓ¿ε ¬½áó¿Φ¿ ¿¼ÑÑΓ ñóá
- »αÑ¿¼πΘÑßΓóá. é«-»Ñαóδσ, »α¿ φΓ«¼ ¡ÑΓ ¡¿¬á¬«⌐ »«ΓÑα¿
- Σπ¡¬µ¿«¡á½∞¡δσ 󫺼«ª¡«ßΓÑ⌐. é«-óΓ«αδσ, »«∩ó½∩ÑΓß∩ 󫺼«ª¡«ßΓ∞
- ¿ß»«½∞º«óáΓ∞ «ñ¡«óαѼѡ¡« ¡Ñ߬«½∞¬« αẽ¿τ¡δσ »α¿¬½áñ¡δσ τáßΓÑ⌐
- TSR-»α«úαá¼¼δ, óδº«ó ¬«Γ«αδσ «ßπΘÑßΓó½∩ÑΓß∩ ¡áªáΓ¿Ñ¼
- ß««ΓóÑΓßΓóπεΘ¿σ ¿¼ αẽ¿τ¡δσ "ú«α∩τ¿σ ¬½áó¿Φ". ÅαÑñßΓáó½Ñ¡¡á∩ ó
- ñá¡¡«¼ αáºñÑ½Ñ TSR-»α«úαá¼¼á ¿ß»«½∞ºπÑΓ φΓπ 󫺼«ª¡«ßΓ∞ ¿
- ó¬½ετáÑΓ ó ßó«⌐ ß«ßΓáó ¿ "¬á½∞¬π½∩Γ«α", ¿ "ºá»¿ß¡πε ¬¡¿ª¬π" (¿º
- αáºñѽá 2), ¬«Γ«αδÑ óδºδóáεΓß∩ «Γñѽ∞¡« ñαπú «Γ ñαπúá.
-
- ÅαѪñÑ, τѼ ¿ß»«½∞º«óáΓ∞ φΓπ 󫺼«ª¡«ßΓ∞, óδ ñ«½ª¡δ πº¡áΓ∞
- ¬«Ñ-τΓ« «í «íαáí«Γ¬Ñ BIOS ¡áªáΓ¿⌐ ¬½áó¿Φ.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 23 --
-
-
- üπΣÑα ß¿¼ó«½«ó, óóÑñÑ¡¡δσ ß ¬½áó¿áΓπαδ.
- -----------------------------------------------------------------
-
- èᬠóδ º¡áÑΓÑ, ßΓá¡ñáαΓ¡δÑ óÑαß¿¿ DOS íπΣÑਧπεΓ ñ« 15
- ß¿¼ó«½«ó, óóÑñÑ¡¡δσ ß ¬½áó¿áΓπαδ, τΓ« »«ºó«½∩ÑΓ óδ»«½¡¿Γ∞ óó«ñ ß
- «»ÑαѪѡ¿Ñ¼. Åα¿ ¬áªñ«¼ ¡áªáΓ¿¿ ¬½áó¿Φ¿ ¡áßΓπ»áÑΓ »αÑαδóá¡¿Ñ 9.
- Åα«úαá¼¼á ISR αÑᬵ¿¿ ¡á ¡áªáΓ¿Ñ ¬½áó¿Φ¿ »α¿¡¿¼áÑΓ ¬«ñ ß¿¼ó«½á ¿º
- »«αΓá ¿ »«¼ÑΘáÑΓ Ñú« ó íπΣÑα. è«úñá óδ «íαáΘáÑΓÑß∞ ¬ Σπ¡¬µ¿∩¼ DOS
- ¿½¿ BIOS óó«ñá ß ¬½áó¿áΓπαδ, «íαáíáΓδóáÑΓß∩ Γ«½∞¬« ß«ñÑন¼«Ñ
- íπΣÑαá, á ¡Ñ ΓѬπΘÑÑ ß«ñÑন¼«Ñ »«αΓá. ¥Γ« »«ºó«½∩ÑΓ óáΦ¿¼
- »α«úαἼἠ¡Ñ»«ßαÑñßΓóÑ¡¡« «íαáíáΓδóáΓ∞ ß«ñÑন¼«Ñ íπΣÑαá
- ß¿¼ó«½«ó, ΓᬠªÑ, ¬á¬ φΓ« ñѽáεΓ »α«úαá¼¼δ BIOS ¿ DOS. Æá¬¿¼
- «íαẫ¼, φΓ« »«ºó«½∩ÑΓ Σπ¡¬µ¿¿ αÑáú¿α«óá¡¿∩ ¡á ¡áªáΓ¿Ñ ¬½áó¿Φ
- óáΦÑ⌐ TSR-»α«úαá¼¼δ «»αÑñѽ∩Γ∞, íδ½á ½¿ ¡áªáΓá "ú«α∩τá∩ ¬½áó¿Φá",
- ¡Ñ π¡¿τΓ«ªá∩ »α¿ φΓ«¼ ß«ñÑন¼«ú« íπΣÑαá ß¿¼ó«½«ó.
-
-
- üπΣÑα óó«ñá ß ¬½áó¿áΓπαδ αáß»«½«ªÑ¡ »« áñαÑßπ 0000:041 (1054
- ó ñÑß∩Γ¿τ¡«⌐ ß¿ßΓÑ¼Ñ ßτ¿ß½Ñ¡¿∩ ). ū߬«½∞¬π »α¿ ¬áªñ«¼ ¡áªáΓ¿¿
- ¬½áó¿Φ¿ Σ«α¼¿απÑΓß∩ 16-í¿Γ¡δ⌐ ߬á¡-¬«ñ, Γ« ñ½∩ óó«ñá 15 ß¿¼ó«½«ó
- ΓαÑíπÑΓß∩ 30 íá⌐Γ. Äñ¡á¬« «íδτ¡« ¿ß»«½∞ºπεΓß∩ 32 íá⌐Γá, Γ.¬. ߬á¡
- -¬«ñ ¬½áó¿Φ¿ RETURN áóΓ«¼áΓ¿τÑ߬¿ ñ«íáó½∩ÑΓß∩ ¬ ¬«¡µπ íπΣÑαá.
- üπΣÑα «αúá¡¿º«óá¡ ó ó¿ñÑ µ¿¬½¿τÑ߬«⌐ «τÑαÑñ¿, ñ«ßΓπ» ¬ ¬«Γ«α«⌐
- «ßπΘÑßΓó½∩ÑΓß∩ τÑαѺ π¬áºáΓѽ¿ ¡áτá½á ¿ ¬«¡µá «τÑαÑñ¿. ô¬áºáΓѽ∞
- ¡áτá½á π¬áºδóáÑΓ ¡á ß¿¼ó«½, ¬«Γ«αδ⌐ íδ½ óóÑñÑ¡ »«ß½Ññ¡¿¼.
- ô¬áºáΓѽ∞ ¬«¡µá π¬áºδóáÑΓ ¡á ß½ÑñπεΘ¿⌐ ß¿¼ó«½, ¬«Γ«αδ⌐ íπñÑΓ
- »ÑαÑñá¡ »« ºá»α«ßπ ¡á óó«ñ ß¿¼ó«½á «Γ DOS ¿½¿ BIOS. ô¬áºáΓѽ∞
- ¡áτá½á σαá¡¿Γß∩ »« áñαÑßπ 0000:041C (1052 ó ñÑß∩Γ¿τ¡«⌐ ß.ß.).
- ç¡áτÑ¡¿∩ π¬áºáΓѽÑ⌐ ¡áτá½á ¿ ¬«¡µá Σá¬Γ¿τÑ߬¿ ¿ß»«½∞ºπεΓß∩ ñ½∩
- ¿¡ñѬߡ«⌐ áñαÑßᵿ¿ «τÑαÑñ¿, ¿ ß««ΓóÑΓßΓóπÑΓ ¿¡ñѬßπ ΓѬπΘÑ⌐
- »«º¿µ¿¿ +30. (¥Γ« ßó∩ºá¡« ß «ß«íÑ¡¡«ßΓ∩¼¿ óδ»«½¡Ñ¡¿∩ ¬«ßóÑ¡¡«⌐
- áñαÑßᵿ¿ »α«µÑßß«α«¼ 8086). ç¡áτÑ¡¿∩ π¬áºáΓѽÑ⌐ ¡áτá½á ¿ ¬«¡µá
- «τÑαÑñ¿ ß«ó»áñáεΓ ó Γ«¼ ß½πτáÑ, Ñß½¿ «τÑαÑñ∞ »πßΓá.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 24 --
-
-
- öπ¡¬µ¿∩ ¿¡¿µ¿á½¿ºáµ¿¿.
- -----------------------------------------------------------------
- ä½∩ »α¿¬½áñ¡«⌐ TSR-»α«úαá¼¼δ, »αÑñßΓáó½Ñ¡¡«⌐ ó ñá¡¡«¼
- αáºñѽÑ, ΓαÑíπÑΓß∩ ¡Ñí«½∞Φá∩ »« «íΩѼπ »α«úαá¼¼á ¿¡¿µ¿á½¿ºáµ¿¿.
- Ä¡á «Σ«α¼½Ñ¡á ó ó¿ñÑ Σπ¡¬µ¿¿ main(), ¬«Γ«αá∩ »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
- main()
- {
- struct address {
- char far *p;
- } temp;
- /* π¬áºáΓѽ∞ óÑ¬Γ«αá »αÑαδóá¡¿∩ 9 */
- struct address far *addr = (struct address far *) 36;
- /* π¬áºáΓѽ∞ óÑ¬Γ«αá »αÑαδóá¡¿∩ 60 */
- struct address far *int9 = (struct address far *) 240;
-
- /* Å«¼ÑßΓ¿Γ∞ áñαÑß «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ ¬½áó¿áΓπαδ
- ó óÑ¬Γ«α »αÑαδóá¡¿∩ 60. àß½¿ óÑ¬Γ«αá »αÑαδóá¡¿⌐ 60 ¿
- 61 ß«ñÑαªáΓ «ñ¿¡á¬«óδÑ áñαÑßá, Γ« TSR-»α«úαá¼¼á ¡Ñ
- íδ½á ºá»πΘÑ¡á.
- */
- if(int9->p == (int9+1)->p) {
- int9->p = addr->p;
- addr->p = (char far *) tsr_ap;
- printf("tsr installed - F2 for note pad, F3 for calculator ");
- } else {
- printf ("tsr application already initialized\n ");
- exit(1);
- } }
- set_vid_mem();
- tsr(2000);
- }
-
- æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« ñá¡¡á∩ óÑαß¿∩ »α«úαá¼¼δ ¡Ñ ñ«»π߬áÑΓ,
- τΓ«íδ ÑÑ ºá»π߬὿ í«½ÑÑ «ñ¡«ú« αáºá ó ΓÑτÑ¡¿Ñ «ñ¡«ú« ßÑá¡ßá
- αáí«Γδ. ¥Γ« ßó∩ºá¡« ß ΓѼ, τΓ« »«óΓ«α¡δ⌐ ºá»π߬ »α«úαá¼¼δ
- »α¿óÑñÑΓ ¬ ºá»¿ß¿ áñαÑßá Γ«τ¬¿ óσ«ñá ó TSR-»α«úαá¼¼π ó Γáí½¿µπ
- óÑ¬Γ«α«ó »« áñαÑßπ 60-ú« »αÑαδóá¡¿∩, á ß«ñÑαªáóΦ¿⌐ß∩ Γá¼ áñαÑß
- »α«úαá¼¼δ αÑᬵ¿¿ ¡á ¡áªáΓ¿Ñ ¬½áó¿Φ¿ íπñÑΓ ºá»«ατÑ¡. é« óαѼ∩
- αáí«Γδ Σπ¡¬µ¿¿ »α«óÑα∩ÑΓß∩, ß«ó»áñáÑΓ ½¿ ß«ñÑন¼«Ñ Γáí½¿µδ
- óÑ¬Γ«α«ó, ß««ΓóÑΓßΓóπεΘÑÑ »αÑαδóá¡¿∩¼ 60 ¿ 61. (ÅαÑαδóá¡¿Ñ 61
- Γá¬ªÑ ¡Ñ ¿ß»«½∞ºπÑΓß∩ DOS). DOS «íαáíáΓδóáÑΓ óßÑ ¡Ñ¿ß»«½∞ºπѼδÑ
- Ñε »αÑαδóá¡¿∩ «ñ¡«⌐ ¿ Γ«⌐ ªÑ »α«úαá¼¼«⌐ «íαáí«Γ¬¿ ¡Ññ«»πßΓ¿¼«ú«
- »αÑαδóá¡¿∩. æ½Ññ«óáΓѽ∞¡«, »ÑαÑñ ºá»π߬«¼ TSR-»α«úαá¼¼δ φΓ¿
- áñαÑßá íπñπΓ ß«ó»áñáΓ∞, á »«ß½Ñ ºá»πß¬á «¡¿ íπñπΓ αẽ¿τ¡δ.
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 25 --
-
-
- Åਪ½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ.
- -----------------------------------------------------------------
-
- Åα¿¼Ñ¡∩Ѽá∩ ºñÑß∞ Σπ¡¬µ¿∩ óσ«ñá ó TSR-»α«úαá¼¼π ∩ó½∩ÑΓß∩
- í«½ÑÑ ß½«ª¡«⌐, τѼ »α¿ ¿ß»«½∞º«óá¡¿¿ »αÑαδóá¡¿∩ »« »ÑτáΓ¿ φ¬αá¡á.
- ÅÑαóδ¼ ñѽ«¼ «¡á ñ«½ª¡á ßΣ«α¼¿α«óáΓ∞ »αÑαδóá¡¿Ñ 60, ñ½∩ Γ«ú«
- τΓ«íδ óó«ñ ß ¬½áó¿áΓπαδ «ßπΘÑßΓó½∩½ß∩ ßΓá¡ñáαΓ¡«⌐ »α«úαá¼¼«⌐
- óó«ñá. ü«½∞Φ¿¡ßΓó« ¬«¼»¿½∩Γ«α«ó æ¿ ¿¼ÑεΓ Σπ¡¬µ¿ε úÑ¡Ñαᵿ¿
- »αÑαδóá¡¿∩. é Æπαí« æ¿ φΓ« Σπ¡¬µ¿∩ geninterrupt(), »áαá¼ÑΓα«¼
- ¬«Γ«α«⌐ ∩ó½∩ÑΓß∩ ¡«¼Ñα Γ«ú« »αÑαδóá¡¿∩, ¬«Γ«α«Ñ óδ σ«Γ¿ΓÑ
- óδºóáΓ∞. Å«ß½Ñ ó«ºóαáΓá ¿º »αÑαδóá¡¿∩ 60 óáΦá Σπ¡¬µ¿∩ ñ«½ª¡á
- »α«óÑα¿Γ∞ ß«ñÑন¼«Ñ «τÑαÑñ¿, áñαÑßπѼ«Ñ ß »«¼«Θ∞ε π¬áºáΓѽ∩
- ¡áτá½á, ¡á »αÑñ¼ÑΓ Γ«ú«, ¡Ñ íδ½á ½¿ ¡áªáΓá "ú«α∩τá∩ ¬½áó¿Φá". ä½∩
- »αÑñßΓáó½Ñ¡¡«⌐ ºñÑß∞ »α«úαá¼¼δ "ú«α∩τ¿¼¿" ∩ó½∩εΓß∩ ¬½áó¿Φ¿ F2 ¿
- F3 ß »«º¿µ¿«¡¡δ¼¿ ¬«ñἿ 60 ¿ 61 ß««ΓóÑΓßΓóÑ¡¡«. ìáªáΓ¿Ñ "ú«α∩τÑ⌐
- ¬½áó¿Φ¿" ñ«½ª¡« íδΓ∞ «í¡áαπªÑ¡« »αѪñÑ, τѼ π»αáó½Ñ¡¿Ñ íπñÑΓ
- »ÑαÑñá¡« »α¿¬½áñ¡«⌐ τáßΓ¿ »α«úαá¼¼δ. ⽫íá½∞¡á∩ »ÑαѼѡ¡á∩ busy
- ¿ß»«½∞ºπÑΓß∩ ñ½∩ Γ«ú«, τΓ«íδ »αÑñ«ΓóαáΓ¿Γ∞ «ñ¡«óαѼѡ¡«Ñ
- ¿ß»«½∞º«óá¡¿Ñ «íÑ¿σ »α¿¬½áñ¡δσ τáßΓÑ⌐ »α«úαá¼¼δ, »«ß¬«½∞¬π
- í«½∞Φ¿¡ßΓó« ¬«¼»¿½∩Γ«α«ó æ¿ ¡Ñ »«ºó«½∩εΓ ß«ºñáóáΓ∞
- »«óΓ«α¡«-óσ«ñ¿¼δÑ »α«úαá¼¼δ. àß½¿ «ñ¡á ¿º »α¿¬½áñ¡δσ τáßΓÑ⌐
- á¬Γ¿ó¡á, Γ« ñαπú«⌐ τáßΓ¿ á¬Γ¿óᵿ∩ ó φëà ¼«¼Ñ¡Γ ºá»αÑΘÑ¡á.
- öπ¡¬µ¿∩ tsr_ap() »α¿ó«ñ¿Γß∩ ¡¿ªÑ.
-
- /* Æ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
- void interrupt tsr_ap()
- {
- char far *t = (char far *) 1050; /* áñαÑß π¬áºáΓѽ∩ ºáú«½«ó¬á *
- geninterrupt(60);
- if(*t != *(t+2)) { /* Ñß½¿ ¡Ñ »πßΓ«⌐ */
- t += *t - 30 + 5; /* »ÑαÑ⌐Γ¿ ¬ »«º¿µ¿¿ ß¿¼ó«½á */
- if(*t == 60 || *t == 61) {
- bioskey(0); /* ßíα«ß¿Γ∞ ¬½áó¿Φ¿ F2/F5 */
- if(!busy) {
- busy = !busy;
- }
- }
- }
- }
-
- æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« »áαá¼ÑΓα«¼ Σπ¡¬µ¿¿ window_main()
- ∩ó½∩ÑΓß∩ »«º¿µ¿«¡¡δ⌐ ¬«ñ "ú«α∩τÑ⌐ ¬½áó¿Φ¿", ñ½∩ Γ«ú«, τΓ«íδ «¡á
- ¼«ú½á «ßπΘÑßΓó¿Γ∞ óδí«α ß««ΓóÑΓßΓóπεΘÑ⌐ »α¿¬½áñ¡«⌐ τáßΓ¿.
-
- /* ß«ºñáΓ∞ «¬¡« */
- window_main(which)
- int which;
- {
- union inkey {
- char ch[2];
- int i;
- } c;
- int i;
- char ch;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 26 --
-
-
-
- /* ó«-»Ñαóδσ, ß«ºñáΓ∞ αá¼¬π «¬¡á */
- make_window(0," Notepad [F1 to exit] ", 5, 20, 17, 60, BORDER);
- make_window(1, " Colculator ", 8, 20, 12, 60, BORDER);
-
- /* ¿ß»«½∞º«óáΓ∞ window() ñ½∩ á¬Γ¿óᵿ¿ ß«ºñá¡¡«ú« «¬¡á */
- switch(which) {
- case 60:
- notepad();
- break;
- case 61:
- calc();
- break;
- }
- }
-
- éδ ¼«ªÑΓÑ ßαáºπ óó«ñ¿Γ∞ ó ¥éî »αÑñßΓáó½Ñ¡¡πε ºñÑß∞
- »α«úαá¼¼π. Å«ß½Ñ Γ«ú«, ¬á¬ óδ ÑÑ ºá»πßΓ¿ΓÑ, ¬½áó¿ΦÑ⌐ F2 íπñÑΓ
- óδí¿αáΓ∞ß∩ »α«úαá¼¼á "ºá»¿ß¡á∩ ¬¡¿ª¬á", á ¬½áó¿ΦÑ⌐ F3 -
- "¬á½∞¬π½∩Γ«α".
-
- /* Åα«úαá¼¼á, «ßΓáεΘá∩ß∩ αѺ¿ñÑ¡Γ¡«⌐ »«ß½Ñ ºáóÑαΦÑ¡¿∩ ¿
- ¿ß»«½∞ºπεΘá∩ »αÑαδóá¡¿Ñ 9 «Γ ¬½áó¿áΓπαδ.
- */
- #include "dos.h "
- #include "stdlib.h "
- #include "ctype.h "
-
- #define BORDER 1
- #define ESC 27
- #define MAX_FRAME 2
- #define REV_VID 0x70
- #define NORM_VID 7
- #define BKSP 8
-
- void interrupt tsr_ap();
- void save_video(), restore_video();
- void write_string(), write_char();
- void display_header(), draw_border();
- void window_gets();
- void window_cleol(), window();
- void notepad(), calc();
-
- char far *vid_mem;
- char wp[4000]; /* íπΣÑα ñ½∩ σαá¡Ñ¡¿∩ ΓѬπΘÑú«
- ß«ñÑন¼«ú« φ¬αá¡á */
- struct window_trame {
- int startx, endx, starty, endy;
- int curx, cury; /* ΓѬπΘÑÑ »«½«ªÑ¡¿Ñ ¬παß«αá ó «¬¡Ñ */
- unsigned char *p; /* π¬áºáΓѽ∞ ó íπΣÑαÑ */
- char *header; /* ß««íΘÑ¡¿Ñ ºáú«½«ó¬á */
- int border; /* ó¬½ετÑ¡¿Ñ/«Γ¬½ετÑ¡¿Ñ í«αñεαá */
- int active; /* óδó«ñ¿Γ∞/¡Ñ óδó«ñ¿Γ∞ ¡á φ¬αá¡ */
- } frame [MAX_FRAME];
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 27 --
-
-
- char in[80], out[80];
-
- /* busy πßΓá¡«ó½Ñ¡á ó 1,¬«úñá »α«úαá¼¼á á¬Γ¿ó¡á, ¿¡áτÑ - ó 0 */
- char busy = 0;
- main()
- {
- struct adaress {
- char far *p;
- }temp;
-
- /* π¬áºáΓѽ∞ ¡á óÑ¬Γ«α »αÑαδóá¡¿∩ 9 */
- struct address far *addr = (struct address far *) 36;
- /* π¬áºáΓѽ∞ ¡á óÑ¬Γ«α »αÑαδóá¡¿∩ 60 */
- struct address far *int9 = (struct address far *) 240;
-
- /* Å«¼ÑßΓ¿Γ∞ áñαÑß »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ ¬½áó¿áΓπαδ
- »« áñαÑßπ »αÑαδóá¡¿∩ 60. àß½¿ óÑ¬Γ«αá »αÑαδóá¡¿⌐ 60 ¿ 61
- ß«ñÑαªáΓ «ñ¿¡á¬«óδÑ áñαÑßá, Γ« TSR-»α«úαá¼¼á ¡Ñ íδ½á ºá»πΘÑ¡á.
- */
- if (int9->p == (int9+1)->p) {
- int9->p = addr->p;
- addr->p = (char far *) tsr_ap;
- printf ("tsr installed - F2 for note pad, F3 for calculator");
- } else {
- printf ("tsr application already initialized\n");
- exit (1);
- }
- set_vid_mem();
- tsr (800);
- }
- set_vid_mem()
- {
- int vmode;
- vmode = video_mode();
- if(( vmode != 2) && ( vmode != 3) && ( vmode != 7)) {
- printf("video must be in 80 column text mode");
- exit(1);
- }
- /* πßΓá¡«ó¿Γ∞ ß««ΓóÑΓßΓóπεΘ¿⌐ áñαÑß ó¿ñÑ«»á¼∩Γ¿ */
- if(vmode==7) vid_mem = (char far *) 0xB0000000;
- else vid_mem = (char far *) 0xB8000000;
- }
-
- /* Æ«τ¬á óσ«ñá ó »α¿¬½áñ¡πε τáßΓ∞ TSR-»α«úαá¼¼δ */
- void interrupt tsr_ap()
- {
- char far *t = (char far *) 1050; /* áñαÑß π¬áºáΓѽ∩ ºáú«½«ó¬á *
- geninterrupt(60);/* τ¿ΓáΓ∞ ß¿¼ó«½ */
- if(*t != *(t+2)) { /* Ñß½¿ ¡Ñ »πßΓ« */
- t += *t-30+5; /* »ÑαÑ⌐Γ¿ ¬ »«º¿µ¿¿ ß¿¼ó«½á */
- if(*t == 60 || *t == 61) {
- bioskey(0); /* ßíα«ß¿Γ∞ ¬½áó¿Φ¿ F2/F3 */
- if(!busy) {
- busy = !busy;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 28 --
-
-
- window_main(*t);
- busy = !busy;
- }
- }
- }
- }
-
- /* ºáóÑαΦ¿Γ∞ ¡« «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
- tsr(size)
- unsigned size;
- {
- union REGS r;
- r.h.ah = 49; /* ºáóÑαΦ¿Γ∞ ¿ «ßΓáó¿Γ∞ αѺ¿ñÑ¡Γ¡«⌐ */
- r.h.al = 0; /* ¬«ñ ó«ºóαáΓá */
- r.x.dx = size; /* αẼÑα »α«úαá¼¼δ/16 */
- int86(0x21, &r, &r);
- }
-
- /* ß«ºñáΓ∞ «¬¡« */
- window_main(which)
- int which;
- {
- union inkey {
- char ch[2];
- int i;
- } c;
- int i;
- char ch;
-
- /* ó«-»Ñαóδσ, ß«ºñáΓ∞ αá¼¬π «¬¡á */
- make_window(0, " Notepad [F1 to exit] ", 5, 20, 17, 60, BORDER);
- make_window(1, " Calculator ", 8, 20, 12, 60, BORDER);
-
- /* ¿ß»«½∞º«óáΓ∞ window() ñ½∩ á¬Γ¿óᵿ¿ ß«ºñá¡¡«ú« «¬¡á */
- switch(which) {
- case 60:
- notepad();
- break;
-
- case 61:
- calc();
- break;
- }
- }
-
- /***************************************************************/
- /* öπ¡¬µ¿¿ π»αáó½Ñ¡¿∩ «¬¡á¼¿ */
- /***************************************************************/
-
- /* éδóÑßΓ¿ ß»π߬áεΘÑÑß∩ «¬¡« */
- void window(num)
- int num; /* ¡«¼Ñα «¬¡á */
- {
- /* ßñѽáΓ∞ «¬¡« á¬Γ¿ó¡δ¼ */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 29 --
-
-
- if(!frame[num].active) { /* ¿ß»«½∞ºπÑΓß∩ ¡Ñ »«ßΓ«∩¡¡« */
- save_video(num); /* ß«σαá¡¿Γ∞ ΓѬπΘ¿⌐ φ¬αá¡ */
- frame[num].active = 1; /* πßΓá¡«ó¿Γ∞ Σ½áú á¬Γ¿ó¡«ßΓ¿ */
- }
- if(frame[num].border) draw_border(num);
- display_header(num); /* óδóÑßΓ¿ «¬¡« */
- }
-
- /* 櫺ñáΓ∞ αἬπ ß»π߬áεΘÑú«ß∩ «¬¡á.
- àß½¿ αá¼¬á ¼«ªÑΓ íδΓ∞ ß«ºñá¡á, ó«ºóαáΘáÑΓß∩ 1,
- ó »α«Γ¿ó¡«¼ ß½πτáÑ ó«ºóαáΘáÑΓß∩ 0.
- */
-
- make_window(num, header, startx, starty, endx, endy, border)
- int num; /* ¡«¼Ñα «¬¡á */
- char *header; /* ΓѬßΓ ºáú«½«ó¬á */
- int startx, starty; /* ¬««αñ¿¡áΓδ X,Y óÑασ¡Ñú« ½Ñó«ú« πú½á */
- int endx, endy; /* ¬««αñ¿¡áΓδ X,Y ¡¿ª¡Ñú« »αáó«ú« πú½á */
- int border; /* íѺ í«αñεαá Ñß½¿ 0 */
- {
- register int i;
- int choice, vmode;
- unsigned char *p;
-
- if(num>MAX_FRAME) {
- window_puts(0, "Too many windows\n");
- return 0;
- }
- if((startx>24) || (startx<0) || (starty>78) || (starty<0)) {
- window_puts(0, "range error");
- return 0;
- }
- if((endx>24) || (endy>79)) {
- window_puts(0, "window won't fit");
- return 0;
- }
-
-
- /* ÄΓóÑßΓ¿ ñ«ßΓáΓ«τ¡«Ñ ¬«½¿τÑßΓó« »á¼∩Γ¿ */
- p= (unsigned char *) malloc(2*(endx-startx+1)*(endy-starty+1));
- if(!p) exit(1); /* »«¼ÑßΓ¿ΓÑ ºñÑß∞ óáΦ ß«íßΓóÑ¡¡δ⌐
- «íαáí«Γτ¿¬ «Φ¿í«¬ */
-
- /* ß«ºñáΓ∞ αἬπ */
- frame[num].startx = startx; frame[num].endx = endx;
- frame[num].starty = starty; frame[num].endy = endy;
- frame[num].p = wp;
- frame[num].header = header;
- frame[num].border = border;
- frame[num].active = 0;
- frame[num].curx = 0; frame[num].cury = 0;
- return 1;
- }
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 30 --
-
-
- /* äÑá¬Γ¿ó¿α«óáΓ∞ «¬¡« ¿ πñ὿Γ∞ Ñú« ß φ¬αá¡á */
- deactivate(num)
- int num;
- {
- /* πßΓá¡«ó¿Γ∞ ¬παß«α ó ½Ñóδ⌐ óÑασ¡¿⌐ πú«½ */
- frame[num].curx = 0;
- frame[num].cury = 0;
- restore_video(num);
- }
-
- /* éδóÑßΓ¿ ΓѬßΓ ºáú«½«ó¬á ó ß««ΓóÑΓßΓóπεΘÑÑ »«½Ñ */
- void display_header(num)
- int num;
- {
- register int i, y, len;
- y = frame[num].starty;
-
- /* éδτ¿ß½¿Γ∞ ¡áτá½∞¡πε »«º¿µ¿ε «Γ¡«ß¿Γѽ∞¡«
- µÑ¡Γαá ºáú«½«ó¬á, Ñß½¿ «Γα¿µáΓѽ∞¡á∩, Γ«
- ß««íΘÑ¡¿Ñ ¡Ñ »«ñσ«ñ¿Γ.
- */
- len = strlen(frame[num].header);
- len = (frame[num].endy - y - len) / 2;
- if(len<0) return; /* ¡Ñ óδó«ñ¿Γ∞ Ñú« */
- y = y +len;
- write_string(frame[num].startx, y,
- frame[num].header, NORM_VID);
- {
- void draw_border(num)
- int num;
- {
- register int i;
- char far *v, far *t;
- v = vid_mem;
- t = v;
- for(i=frame[num].startx+1; i<frame[num].endx; i++) {
- v += (i*160) + frame[num].starty*2;
- *v++ = 179;
-
- *v = NORM_VID;
- v = t;
- v += (i*160) + frame[num].endy*2;
- *v++ = 179;
- *v = NORM_VID;
- v = t;
- }
- for(i=frame[num].starty+1; i<frame[num].endy; i++) {
- v += (frame[num].startx*160) + i*2;
- *v++ = 196;
- *v = NORM_VID;
- v = t;
- v += (frame[num].endx*160) + i*2;
- *v++ = 196;
- *v = NORM_VID;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 31 --
-
-
- v = t;
- }
- write_char(frame[num].startx, frame[num].starty, 218, NORM_VID);
- write_char(frame[num].startx, frame[num].endy, 191, NORM_VID);
- write_char(frame[num].endx, frame[num].starty, 192, NORM_VID);
- write_char(frame[num].endx, frame[num].endy, 217, NORM_VID);
- }
-
- /*************************************************************/
- /* Ĭ«¡¡δÑ Σπ¡¬µ¿¿ óó«ñá/óδó«ñá */
- /*************************************************************/
-
- /* éδóÑßΓ¿ ßΓ᫬π ¡áτ¿¡á∩ ß ΓѬπΘÑ⌐ »«º¿µ¿¿
- ó ß«ºñá¡¡«¼ «¬¡Ñ.
- 髺óαáΓ¿Γ∞ 0, Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ,
- ¿ 1 - ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_puts(num, str)
- int num;
- char *str;
- {
- /* πíÑñ¿ΓÑß∞, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
- if(!frame[num].active) return 0;
- for( ; *str; str++)
- window_putchar(num, *str);
- return 1;
- }
-
- /* éδóÑßΓ¿ ß¿¼ó«½ ó ΓѬπΘπε »«º¿µ¿ε ¬παß«αá
- ó ß«ºñá¡¡«¼ «¬¡Ñ
- 髺óαáΓ¿Γ∞ 0, Ñß½¿ «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ,
- ¿ 1 - ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_putchar(num, ch)
- int num;
- char ch;
- {
- register int x, y;
- char far *v;
-
- /* πíÑñ¿ΓÑß∞, τΓ« «¬¡« á¬Γ¿ó¡«Ñ */
- if(!frame[num].active) return 0;
-
- x = frame[num].curx + frame[num].startx + 1;
- y = frame[num].cury + frame[num].starty + 1;
-
- v = vid_mem;
- v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
- if(y>=frame[num].endy) {
- return 1;
- }
- if(x>=frame[num].endx) {
- return 1;
- }
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 32 --
-
-
-
- if(ch=='\n') { /* ß¿¼ó«½ »ÑαÑσ«ñá ¬ ¡«ó«⌐ ßΓα«¬Ñ */
- x++;
- y = frame[num].startx+1;
- v = vid_mem;
- v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
- frame[num].curx++; /* ¡áαáßΓ¿Γ∞ X */
- frame[num].cury = 0; /* ßíα«ß¿Γ∞ Y */
- }
- else {
- frame[num].cury++;
- *v++ = ch; /* óδóÑßΓ¿ ß¿¼ó«½ */
- *v++ = NORM_VID; /* ¡«α¼á½∞¡δÑ áΓα¿íπΓδ ß¿¼ó«½á */
- }
- window_xy(num, frame[num].curx, frame[num].cury);
- return 1;
- }
-
- /* ôßΓá¡«ó¿Γ∞ ¬παß«α ó «»αÑñѽѡ¡«⌐ »«º¿µ¿¿ «¬¡á.
- 髺óαáΓ¿Γ∞ 0 »α¿ óδσ«ñÑ ºá úαá¡¿µπ;
- ¿ ¡Ñ ¡«½∞ ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_xy(num, x, y)
- int num, x, y;
- {
- if(x<0 || x+frame[num].startx>=frame[num].endx-1)
- return 0;
- if(y<0 || y+frame[num].starty>=frame[num].endy-1)
- return 0;
- frame[num].curx = x;
- frame[num].cury = y;
- return 1;
- }
-
- /* æτ¿ΓáΓ∞ ßΓα«¬π ¿º «¬¡á */
- void window_gets(num, s)
- int num;
- char *s;
- {
- char ch, *temp;
- char out[10];
-
- temp = s;
- for(;;) {
- ch = window_getche(num);
- switch(ch) {
- case '\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
- *s='\0';
- return;
- case BKSP: /* ó«ºóαáΓ ¡á Φáú */
- if(s>temp) {
- s--;
- frame[num].cury--;
- if(frame[num].cury<0) frame[num].cury = 0;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 33 --
-
-
- window_xy(num, frame[num].curx, frame[num].cury);
- write_char(frame[num].startx+ frame[num].curx+1,
- frame[num].starty+frame[num].cury+1,' ',NORM_VID);
- }
- break;
- default: *s = ch;
- s++;
- }
- }
- }
-
- /* éóÑßΓ¿ ß¿¼ó«½ ó «¬¡«.
- 髺óαáΓ¿Γ∞ »«½¡δ⌐ 16-αáºα∩ñ¡δ⌐ ߬á¡-¬«ñ
- */
- window_getche(num)
- int num;
- {
- union inkey {
- char ch[2];
- int i;
- } c;
- if(!frame[num].active) return 0; /* «¬¡« ¡Ñ á¬Γ¿ó¡«Ñ */
- window_xy(num, frame[num].curx, frame[num].cury);
- c.i = bioskey(0); /* «íαáí«ΓáΓ∞ ¡áªáΓ¿Ñ ¬½áó¿Φ¿ */
- if(c.ch[0]) {
- switch(c.ch[0]) {
- case'\r': /* ¡áªáΓá ¬½áó¿Φá ENTER */
- break;
- case BKSP: /* ó«ºóαáΓ ¡á Φáú */
- break;
- default:
- if(frame[num].cury+frame[num].starty < frame[num].endy-1) {
- write_char(frame[num].startx+ frame[num].curx+1,
- frame[num].starty+frame[num].cury+1, c.ch[0], NORM_VID);
- frame[num].cury++;
- }
- }
- if(frame[num].curx < 0) frame[num].curx = 0;
- if(frame[num].curx+frame[num].startx > frame[num].endx-2)
- frame[num].curx--;
-
- window_xy(num, frame[num].curx, frame[num].cury);
- }
- return c.i;
- }
-
- /* Äτ¿ßΓ¿Γ∞ ñ« ¬«¡µá ßΓ᫬¿ */
- void window_cleol(num)
- int num;
- {
- register int i, x, y;
- x = frame[num].curx;
- y = frame[num].cury;
- window_xy(num, frame[num].curx, frame[num].cury);
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 34 --
-
-
- for(i=frame[num].cury; i<frame[num].endy-1; i++)
- window_putchar(num,' ');
- window_xy(num, x, y);
- }
-
- /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α óóÑασ ¡á «ñ¡π ßΓ᫬π.
- 髺óαáΓ¿Γ∞ ¡Ñ ¡«½∞ ó ß½πτáÑ πß»Ñσá
- ¿ 0 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_upline(num)
- int num;
- {
- if(frame[num].curx>0) {
- frame[num].curx--;
- window_xy(num, frame[num].curx, frame[num].cury);
- return 1;
- }
- return 0;
- }
-
- /* ÅÑαѼÑßΓ¿Γ∞ ¬παß«α 󡿺 ¡á «ñ¡π ßΓ᫬π.
- 髺óαáΓ¿Γ∞ ¡Ñ ¡«½∞ ó ß½πτáÑ πß»Ñσá
- ¿ 0 ó »α«Γ¿ó¡«¼ ß½πτáÑ.
- */
- window_downline(num)
- int num;
- {
- if(frame[num].curx<frame[num].endx-frame[num].startx-1) }
- frame[num].curx++;
- window_xy(num, frame[num].curx, frame[num].cury);
- return 1;
- }
- return 1;
- }
-
- /* ¡áºáñ ¡á «ñ¿¡ ß¿¼ó«½ */
- window_bksp(num)
- int num;
- {
- if(frame[num].cury>0) {
- frame[num].cury--;
- window_xy(num, frame[num].curx, frame[num].cury);
- window_putchar(num, ' ');
-
- frame[num].cury--;
- window_xy(num, frame[num].curx, frame[num].cury);
- }
- }
-
- /***************************************************************/
- /* ä«»«½¡¿Γѽ∞¡δÑ Σπ¡¬µ¿¿ */
- /***************************************************************/
-
- /* éδóÑßΓ¿ ßΓ᫬π ß π¬áºá¡¡δ¼¿ áΓα¿íπΓἿ */
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 35 --
-
-
- void write_string(x, y, p, attrib)
- int x, y;
- char *p;
- int attrib;
- {
- register int i;
- char far *v;
-
- v=vid_mem;
- v += (x*160) + y*2; /* óδτ¿ß½¿Γ∞ áñαÑß */
- for(i=y; *p; i++) {
- *v++ = *p++; /* ºá»¿ßáΓ∞ ß¿¼ó«½ */
- *v++ = attrib; /* ºá»¿ßáΓ∞ áΓα¿íπΓδ */
- }
- }
-
- /* éδóÑßΓ¿ ß¿¼ó«½ ß π¬áºá¡¡δ¼¿ áΓα¿íπΓἿ */
- void write_char(x, y, ch, attrib)
- int x, y;
- char ch;
- int attrib;
- {
- register int i;
- char far *v;
- v = vid_mem;
- v += (x*160) + y*2;
- *v++ = ch; /* ºá»¿ßáΓ∞ ß¿¼ó«½ */
- *v = attrib; /* ºá»¿ßáΓ∞ áΓα¿íπΓδ */
- }
-
- /* æ«σαá¡¿Γ∞ «í½áßΓ∞ φ¬αá¡á */
- void save_video(num)
- int num;
- {
- register int i, j;
- char *buf_ptr;
- char far *v, far *t;
- buf_ptr = frame[num].p;
- v = vid_mem;
- for(i=frame[num].starty; i<frame[num].endy+1; i++)
- for(j=frame[num].startx; j<frame[num].endx+1; j++) {
- t = (v + (j*160) + i*2);
- *buf_ptr++ = *t++;
-
- *buf_ptr++ = *t;
- *(t-1) = ' '; /* «τ¿ßΓ¿Γ∞ «¬¡« */
- }
- }
-
- /* é«ßßΓá¡«ó¿Γ∞ «í½áßΓ∞ φ¬αá¡á */
- void restore_video(num)
- int num;
- {
- register int i,j;
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 36 --
-
-
- char far *v, far *t;
- char *buf_ptr;
- buf_ptr = frame[num].p;
- v = vid_mem;
- t = v;
- for(i=frame[num].starty; i<frame[num].endy+1; i++)
- for(j=frame[num].startx; j<frame[num].endx+1; j++) {
- v = t;
- v += (j*160) + i*2;
- *v++ = *buf_ptr++; /* ºá»¿ßáΓ∞ ß¿¼»«½ */
- *v = *buf_ptr++; /* ºá»¿ßáΓ∞ áΓα¿íπΓδ */
- }
- frame[num].active = 0;/* ó«ßßΓá¡«ó¿Γ∞ ¿º«íαáªÑ¡¿Ñ */
- }
-
- /* 髺óαáΓ¿Γ∞ ¬«ñ ΓѬπΘÑú« ó¿ñÑ«αѪ¿¼á */
- video_mode()
- {
- union REGS r;
- r.h.ah = 15; /* »«½πτ¿Γ∞ ¬«ñ ó¿ñÑ«αѪ¿¼á */
- return int86(0x10, &r, &r) & 255;
- }
-
- /****************************************************/
- /* öπ¡¬µ¿¿ óß»½δóáεΘ¿σ «¬«¡ */
- /****************************************************/
-
- #define MAX 100
-
- int *p; /* π¬áºáΓѽ∞ ßΓѬá */
- int *tos; /* π¬áºáΓѽ∞ óÑαΦ¿¡δ ßΓѬá */
- int *bos; /* π¬áºáΓѽ∞ ñ¡á ßΓѬá */
- int stack[MAX];
-
- /* æΓѬ«óδ⌐, ß »«ßΓΣ¿¬ß¡«⌐ ºá»¿ß∞ε ¬á½∞¬π½∩Γ«α
- ß τÑΓδα∞¼∩ Σπ¡¬µ¿∩¼¿
- */
- void calc()
- {
- int answer;
- int a,b;
- p = stack;
- tos = p;
- bos = p+MAX-1;
-
- window(1);
- do {
- window_xy(1, 0, 0);
- window_cleol(1);
- window_puts(1, ": "); /* »α«¼»ΓÑα ¬á½∞¬π½∩Γ«αá */
- window_gets(1, in);
- window_puts(1, "\n ");
- window_cleol(1);
- switch(*in) {
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 37 --
-
-
- case '+':
- a = pop();
- b = pop();
- answer = a+b;
- push(a+b);
- break;
- case '-':
- a = pop();
- b = pop();
- answer = b-a;
- push(b-a);
- break;
- case '* ':
- a = pop();
- b = pop();
- answer = b*a;
- push(b*a);
- break;
- case '/ ':
- a = pop();
- b = pop();
- if(a==0) {
- window_puts(0, "divide by 0\n");
- break;
- }
- answer = b/a;
- push(b/a);
- break;
- default:
- push(atoi(in));
- continue;
- }
- itoa(answer, out, 10);
- window_puts(1, out);
- } while(*in);
- deactivate(1);
- }
- /* Å«¼ÑßΓ¿Γ∞ τ¿ß½« ó ßΓѬ.
- 髺óαáΓ¿Γ∞ 1 ó ß½πτáÑ πß»Ñσá
- ¿ 0 Ñß½¿ ßΓѬ »ÑαÑ»«½¡Ñ¡
- */
- push(i)
- int i;
- {
- if(p>bos) return 0;
- *p = i;
- p++;
-
- return 1;
- }
- /* êºó½Ñτ∞ óÑασ¡¿⌐ φ½Ñ¼Ñ¡Γ ¿º ßΓѬá.
- 髺óαáΓ¿Γ∞ 0 Ñß½¿ ßΓѬ »πßΓ.
- */
- pop()
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 38 --
-
-
- {
- p--;
- if(p<tos) {
- p++;
- return 0;
- }
- return *p;
- }
-
- /**********************************************************/
- /* éß»½δóáεΘá∩ ºá»¿ß¡á∩ ¬¡¿ª¬á */
- #define MAX_NOTE 10
- #define BKSP 8
- char notes[MAX_NOTE] [80];
- void notepad()
- {
- static first = 1;
- register int i, j;
- union inkey {
- char ch[2];
- int i;
- } c;
- char ch;
-
- /* ¿¡¿µ¿á½¿º¿α«óáΓ∞ ¼áßß¿ó ºá»¿ßÑ⌐ Ñß½¿ φΓ« ¡Ñ«íσ«ñ¿¼« */
- if(first) {
- for(i=0; i<MAX_NOTE; i++)
- *notes[i] = '\0 ';
- first = !first;
- }
- window(0);
-
- /* óδóÑßΓ¿ ßπΘÑßΓóπεΘ¿Ñ ºá»¿ß¿ */
- for(i=0; i<MAX_NOTE; i++) {
- if(*notes[i]) window_puts(0, notes[i]);
- window_putchar(0, '\n ');
- }
- i = 0;
- window_xy(0, 0, 0);
-
- for(;;) {
- c.i = bioskey(0); /* «íαáí«ΓáΓ∞ ¡áªáΓ¿Ñ ¬½áó¿Φ¿ */
- if(tolower(c.ch[1])==59) { /* F1 ñ½∩ óδσ«ñá */
- deactivate(0);
- break;
- }
-
- /* Ñß½¿ «íδτ¡á∩ ¬½áó¿Φá */
- if(isprint(c.ch[0]) || c.ch[0]==BKSP) {
- window_cleol(0);
- notes[i][0] = c.ch[0];
- j = 1;
- window_putchar(0, notes[i][0]);
- do {
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 39 --
-
-
- ch = window_getche(0);
- if(ch == BKSP) {
- if( j>0 ) {
- j--;
- window_bksp(0);
- }
- }
- else {
- notes[i][j] = ch;
- j++;
- }
- } while(notes[i][j-1]! = '\r ');
- notes[i][j-1] = '\0 ';
- i++;
- window_putchar(0, '\n ');
- }
-
- else { /* Ñß½¿ ߻ѵ¿á½∞¡á∩ ¬½áó¿Φá */
- switch(c.ch[1]) {
- case 72: /* ßΓαѽ¬á óóÑασ */
- if(i>0) {
- i--;
- window_upline(0);
- }
- break;
- case 80: /* ßΓαѽ¬á 󡿺 */
- if(i<MAX_NOTE-1) {
- i++;
- window_downline(0);
- }
- break;
- }
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 40 --
-
-
- Æá⌐¡á 28-ú« »αÑαδóá¡¿∩
- -----------------------------------------------------------------
-
- àßΓ∞ «ñ¡« ßαÑñßΓó« DOS, ¬«Γ«α«Ñ ¡Ñ «»¿ßδóáÑΓß∩ ó
- ñ«¬π¼Ñ¡Γᵿ¿, ¿ ¬«Γ«α«Ñ ¼«ªÑΓ ßñѽáΓ∞ TSR-»α«úαá¼¼δ í«½ÑÑ
- ¡áñѪ¡δ¼¿ ó ëà »Ñα¿«ñ óαѼѡ¿, ¬«úñá «¡¿ ¿ß»«½∞ºπεΓ ¼¡«ú«
- ß¿ßΓѼ¡δσ αÑßπαß«ó. é««íΘÑ ú«ó«α∩, Ñß½¿ »α¿¬½áñ¡á∩ τáßΓ∞ óáΦÑ⌐
- TSR-»α«úαá¼¼δ ºá¡¿¼áÑΓß∩ «í¼Ñ¡«¼ Γ«½∞¬« ß ¬«¡ß«½∞ε, Γ« óδ
- ºáßΓαáσ«óá¡δ «Γ ¡Ñ»α¿∩Γ¡«ßΓÑ⌐. ìÑ»α¿∩Γ¡«ßΓ¿ ¼«úπΓ ó«º¡¿¬¡πΓ∞ »α¿
- ¿ß»«½∞º«óá¡¿¿ Γᬿσ «íΩÑ¬Γ«ó, ¬á¬ ñ¿ß¬«óδÑ Σá⌐½δ ¿½¿ »«αΓδ óó«ñá-
- óδó«ñá. ò«Γ∩ φΓ« ¿ ¡Ñ «»¿ßá¡« ó ΓÑσ¡¿τÑ߬¿σ απ¬«ó«ñßΓóáσ »«
- «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼÑ, ¡« DOS óδºδóáÑΓ »αÑαδóá¡¿Ñ 28ì, ¬«úñá «¡á
- ¡áσ«ñ¿Γß∩ ó "íѺ«»áß¡«¼", Γ.Ñ. 󫽫ßΓ«¼ ß«ßΓ«∩¡¿¿. èᬠóá¼
- ¡áóÑα¡«Ñ ¿ºóÑßΓ¡«, »α¿ óδ»«½¡Ñ¡¿¿ «»αÑñѽѡ¡δσ Σπ¡¬µ¿⌐ DOS,
- ¬«Γ«αδÑ «Γ¡«ß∩Γß∩ ¬ ¬α¿Γ¿τÑ߬¿¼ πτáßΓ¬á¼, »«ß½Ñ ¡áτá½á ¿σ
- óδ»«½¡Ñ¡¿∩ »αÑαδóá¡¿∩ ñ«½ª¡δ íδΓ∞ ºá»αÑΘÑ¡δ. ÅαÑαδóá¡¿Ñ 28ì
- ¡¿¬«úñá ¡Ñ óδºδóáÑΓß∩ DOS ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ ¬α¿Γ¿τÑ߬«ú«
- πτáßΓ¬á. éδ ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ φΓ« ßαÑñßΓó« ñ½∩ ºáΘ¿Γδ «Γ ßí«Ñó
- óáΦÑ⌐ TSR-»α«úαá¼¼δ. ò«Γ∩ ºñÑß∞ ¡Ñ »αÑñßΓáó½Ñ¡« ¡¿¬á¬¿σ »α¿¼Ñα«ó
- »α«úαá¼¼, ¡« »αÑñ½áúáεΓß∩ ß½ÑñπεΘ¿Ñ «íΘ¿Ñ ß««íαáªÑ¡¿∩ »« φΓ«¼π
- ó«»α«ßπ.
-
- â½áó¡«Ñ «Γ½¿τ¿Ñ, ¬«Γ«α«Ñ óδ ñ«½ª¡δ ¿¼ÑΓ∞ óó¿ñπ »α¿
- ¿ß»«½∞º«óá¡¿¿ »αÑαδóá¡¿∩ 28ì, ºá¬½ετáÑΓß∩ ó ß»«ß«íÑ á¬Γ¿óᵿ¿
- »α¿¬½áñ¡«⌐ τáßΓ¿ óáΦÑ⌐ TSR-»α«úαá¼¼δ. è«úñá óδºδóáÑΓß∩ »αÑαδóá¡¿Ñ
- 28ì, »α¿¬½áñ¡á∩ τáßΓ∞ TSR-»α«úαá¼¼δ ¡Ñ ¼«ªÑΓ í«½∞ΦÑ
- á¬Γ¿ó¿α«óáΓ∞ß∩ τÑαѺ »α«úαá¼¼π «íαáí«Γ¬¿ ¡áªáΓ¿⌐ ¬½áó¿Φ. é¼ÑßΓ«
- φΓ«ú« »α«úαá¼¼á «íαáí«Γ¬¿ ¡áªáΓ¿⌐ ¬½áó¿Φ »α¿ ¡áªáΓ¿¿ "ú«α∩τÑ⌐
- ¬½áó¿Φ¿" »α«ßΓ« πßΓá¡áó½¿óáÑΓ Σ½áú (ó ñá½∞¡Ñ⌐ΦѼ ¿¼Ñ¡πѼδ⌐
- is-hotkey). ÅÑαÑñ ΓѼ, ¬á¬ »α¿¬½áñ¡á∩ τáßΓ∞ óáΦÑ⌐ TSR-»α«úαá¼¼δ
- ¼«ªÑΓ íδΓ∞ óδºóá¡á, óδ ñ«½ª¡δ ß«ºñáΓ∞ ¡«óδ⌐ «íαáí«Γτ¿¬ »αÑαδóá¡¿∩
- 28ì, ¬«Γ«αδ⌐ íπñÑΓ »α«óÑα∩Γ∞, πßΓá¡«ó½Ñ¡ Σ½áú is-hotkey ¿½¿ ¡ÑΓ.
- àß½¿ πßΓá¡«ó½Ñ¡, Γ« »α¿¬½áñ¡á∩ τáßΓ∞ á¬Γ¿ó¿απÑΓß∩, ßíαáßδóá∩ »α¿
- φΓ«¼ Σ½áú is-hotkey. Åα¿ φΓ«¼ óδ «í∩ºáΓѽ∞¡« ñ«½ª¡δ ¡Ñ »α«ßΓ«
- ¿º¼Ñ¡¿Γ∞ »Ñαó«¡áτá½∞¡«Ñ ß«ñÑন¼«Ñ óÑ¬Γ«αá »αÑαδóá¡¿∩ 28ì, á
- ¡á»α«Γ¿ó, ß«σαá¡¿Γ∞ Ñú« ¿ óδºδóáΓ∞ ¿ßσ«ñ¡«Ñ »αÑαδóá¡¿Ñ 28ì ¿º
- óáΦÑú« «íαáí«Γτ¿¬á 28-ú« »αÑαδóá¡¿∩.
-
- àß½¿ óδ ß«í¿αáÑΓÑß∞ »α«ñáóáΓ∞ óáΦ¿ TSR-»α«úαá¼¼δ, Γ« ñ«½ª¡δ
- «í∩ºáΓѽ∞¡« ¿ß»«½∞º«óáΓ∞ »αÑαδóá¡¿Ñ 28ì (σ«Γ∩ »« ¡Ñ¼π ¿ ¡ÑΓ
- ñ«¬π¼Ñ¡Γᵿ¿), »«ß¬«½∞¬π «¡« »«ºó«½∩ÑΓ ¿ºíѪáΓ∞ ß½πτá⌐¡δσ
- »αÑαδóá¡¿⌐ DOS ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ ¬α¿Γ¿τÑ߬¿σ πτáßΓ¬«ó.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
- â½áóá III -- 41 --
-
-
- Åα«í½Ñ¼δ »α¿ ß«ºñá¡¿¿ TSR-»α«úαá¼¼
- -----------------------------------------------------------------
-
- TSR-»α«úαá¼¼δ »« ßó«Ñ⌐ »α¿α«ñÑ «τÑ¡∞ ߬½«¡¡δ ¬ ßí«∩¼.
- ìá»α¿¼Ñα, ¿ß»«½∞º«óá¡¿Ñ TSR-»α«úαá¼¼δ, αáºαáí«Γá¡¡«⌐ «ñ¡¿¼
- »α«úαá¼¼¿ßΓ«¼, τáßΓ« ñѽáÑΓ ¡Ñ󫺼«ª¡δ¼ «ñ¡«óαѼѡ¡«Ñ
- ¿ß»«½∞º«óá¡¿Ñ ñαπú«⌐ TSR-»α«úαá¼¼δ, αáºαáí«Γá¡¡«⌐ ñαπú¿¼
- »α«úαá¼¼¿ßΓ«¼, »«ß¬«½∞¬π «íÑ »α«úαá¼¼δ íπñπΓ »δΓáΓ∞ß∩
- »Ñαѡạáτ¿Γ∞ áñαÑß »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ 9 ó Γáí½¿µÑ
- óÑ¬Γ«α«ó ¡á ßÑí∩. ìÑß«¼¡Ñ¡¡«, »α¿ ¿ß»«½∞º«óá¡¿¿ ßó«¿σ
- TSR-»α«úαá¼¼ óδ ¼«ªÑΓÑ ¿ºíѪáΓ∞ Γᬫú« α«ñá »α«í½Ñ¼, ¡« íπñ∞ΓÑ
- ó¡¿¼áΓѽ∞¡δ, Ñß½¿ ó óáΦÑ⌐ ß¿ßΓÑ¼Ñ »α¿ßπΓßΓóπÑΓ τπªá∩
- TSR-»α«úαá¼¼á.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó