home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS 1
/
BBS#1.iso
/
document
/
pas60pg.lzh
/
PG13.MY
< prev
next >
Wrap
Text File
|
1991-02-01
|
39KB
|
851 lines
âïÇéÇ 13.
ÄéàÉïàê.
ÄóÑα½Ñ¿ - φΓ« τáßΓ¿ »α«úαá¼¼δ, ¬«Γ«αδÑ αáºñѽ∩εΓ «íΘπε «í½áßΓ∞
»á¼∩Γ¿. Æ«½∞¬« ΓÑ τáßΓ¿ »α«úαá¼¼δ, ¬«Γ«αδÑ ΓαÑíπεΓß∩ ñ½∩ óδ»«½¡Ñ¡¿∩
ñá¡¡«⌐ Σπ¡¬µ¿¿, αẼÑΘáεΓß∩ ó »á¼∩Γ¿ ó φΓ« óαѼ∩; ºáΓѼ «¡¿ ¼«úπΓ
íδΓ∞ »ÑαѬαδΓδ ñαπú¿¼¿ »α«úαἼἿ.
ÄóÑα½Ñ¿ ¼«úπΓ º¡áτ¿Γѽ∞¡« ß«¬αáΓ¿Γ∞ ¬«½¿τÑßΓó« »á¼∩Γ¿,
ΓαÑíπѼ«Ñ »α¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ. é ñÑ⌐ßΓó¿Γѽ∞¡«ßΓ¿, éδ ¼«ªÑΓÑ
óδ»«½¡∩Γ∞ »α«úαá¼¼δ, ¬«Γ«αδÑ ¡á¼¡«ú« í«½∞ΦÑ, τѼ ñ«ßΓπ»¡á∩ ó
ß¿ßΓÑ¼Ñ »á¼∩Γ∞, »«ß¬«½∞¬π ó ¬áªñδ⌐ ¼«¼Ñ¡Γ ó »á¼∩Γ¿ αẼÑΘáÑΓß∩
Γ«½∞¬« τáßΓ∞ »α«úαá¼¼δ.
Turbo Pascal π»αáó½∩ÑΓ «óÑα½Ñ∩¼¿ ¡á πα«ó¡Ñ ¼«ñπ½Ñ⌐; φΓ«
¡á¿¼Ñ¡∞Φá∩ τáßΓ∞ »α«úαá¼¼δ, ¬«Γ«απε ¼«ª¡« ßñѽáΓ∞ «óÑα½Ñ⌐¡«⌐. è«úñá
«óÑα½Ñ⌐¡á∩ »α«úαá¼¼á ¬«¼»¿½¿απÑΓß∩, Turbo Pascal úÑ¡Ñα¿απÑΓ
«óÑα½Ñ⌐¡δ⌐ Σá⌐½ (ß αáßΦ¿αÑ¡¿Ñ¼ .OVR) ó ñ«»«½¡Ñ¡¿Ñ ¬ óδ»«½¡¿¼«¼π
Σá⌐½π (ß αáßΦ¿αÑ¡¿Ñ¼ .EXE). .EXE Σá⌐½ ß«ñÑαª¿Γ ßΓáΓ¿τÑ߬πε
(¡Ñ»ÑαѬαδóáѼπε) τáßΓ∞ »α«úαá¼¼δ ¿ .OVR Σá⌐½ ß«ñÑαª¿Γ óßÑ ¼«ñπ½¿,
¬«Γ«αδÑ íπñπΓ »ÑαѬáτ¿óáΓ∞ß∩ ó/¿º »á¼∩Γ¿ ó« óαѼ∩ óδ»«½¡Ñ¡¿∩
»α«úαá¼¼δ.
çá ¿ß¬½ετÑ¡¿Ñ¼ ¡Ñ߬«½∞¬¿σ »αáó¿½ »α«úαá¼¼¿α«óá¡¿∩, «óÑα½Ñ⌐¡δÑ
¼«ñ㫨 ¿ñÑ¡Γ¿τ¡δ ß ¡Ñ«óÑα½Ñ⌐¡δ¼¿ ¼«ñπ½∩¼¿. é ñÑ⌐ßΓó¿Γѽ∞¡«ßΓ¿, Ñß½¿
éδ ß«í½εñáÑΓÑ φΓ¿ »αáó¿½á, éá¼ ñáªÑ ¡Ñ ¡πª¡« »ÑαѬ«¼»¿½¿α«óáΓ∞ φΓ¿
¼«ñπ½¿, τΓ«íδ ßñѽáΓ∞ ¿σ «óÑα½Ñ⌐¡δ¼¿. ÉÑΦÑ¡¿Ñ, íπñÑΓ ¼«ñπ½∞
«óÑα½Ñ⌐¡δ¼ ¿½¿ ¡ÑΓ, »α¿¡¿¼áÑΓ ú½áó¡á∩ »α«úαá¼¼á.
è«úñá «óÑα½Ñ⌐ ºáúαπªáÑΓß∩ ó »á¼∩Γ∞, «¡ »«¼ÑΘáÑΓß∩ ó «óÑα½Ñ⌐¡δ⌐
íπΣÑα, ¬«Γ«αδ⌐ αẼÑΘáÑΓß∩ ó »á¼∩Γ¿ ¼Ñªñπ ßΓѬ«¼ ¿ ¬πτÑ⌐. Å«
π¼«½τá¡¿ε, αẼÑα «óÑα½Ñ⌐¡«ú« íπΣÑαá πßΓá¡áó½¿óáÑΓß∩ ¬á¬ ¼«ª¡«
¼Ñ¡∞ΦÑ, ¡« «¡ ¼«ªÑΓ íδΓ∞ ½Ñú¬« πóѽ¿τÑ¡ ó« óαѼ∩ óδ»«½¡Ñ¡¿∩,
óδñѽѡ¿Ñ¼ ñ«»«½¡¿Γѽ∞¡«⌐ »á¼∩Γ¿ ¿º ¬πτ¿. èᬠßÑú¼Ñ¡Γ ñá¡¡δσ ¿
¼¿¡¿¼á½∞¡δ⌐ αẼÑα ¬πτ¿, αẼÑα íπΣÑαá «óÑα½ÑÑó (»« π¼«½τá¡¿ε)
αáß»αÑñѽ∩ÑΓß∩ »α¿ ºáúαπº¬Ñ .EXE Σá⌐½á. àß½¿ »á¼∩Γ¿ ¡Ññ«ßΓáΓ«τ¡«,
DOS óδñáÑΓ ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ (»α«úαá¼¼á ß½¿Φ¬«¼ óѽ¿¬á ñ½∩
ºáúαπº¬¿ ó »á¼∩Γ∞) ¿½¿ ¿¡ΓÑúα¿α«óá¡¡«⌐ ßαÑñ«⌐ Turbo Pascal
(¡Ññ«ßΓáΓ«τ¡« »á¼∩Γ¿ ñ½∩ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ).
àßΓ∞ «τÑ¡∞ ó᪡á∩ 󫺼«ª¡«ßΓ∞ ¼«¡¿Γ«αá «óÑα½ÑÑó »α¿ ºáúαπº¬Ñ
«óÑα½Ñ⌐¡«ú« Σá⌐½á ó ß½πτáÑ, ¬«úñá ó ß¿ßΓÑ¼Ñ ñ«ßΓáΓ«τ¡δ⌐ «íΩѼ
αáßΦ¿αÑ¡¡«⌐ »á¼∩Γ¿. ä½∩ φΓ¿σ µÑ½Ñ⌐ Turbo Pascal »«ññÑনóáÑΓ
æ»Ñµ¿Σ¿¬áµ¿ε ÉáßΦ¿αÑ¡¡«⌐ Åá¼∩Γ¿ Σ¿α¼ Lotus/Intel/Microsoft
(Expanded Memory Specification - EMS) óÑαß¿¿ 3.2 ¿ óδΦÑ. Å«ß½Ñ
ºáúαπº¬¿ ó EMS, «óÑα½Ñ⌐¡δ⌐ Σá⌐½ ºá¬αδóáÑΓß∩ ¿ ºáúαπº¬á «óÑα½ÑÑó
óδ»«½¡∩ÑΓß∩ íδßΓαδ¼ ¬«»¿α«ó᡿Ѽ ó »á¼∩Γ¿.
î«¡¿Γ«α «óÑα½ÑÑó.
î«¡¿Γ«α «óÑα½ÑÑó Turbo Pascal αÑ὿º«óá¡ ßΓá¡ñáαΓ¡δ¼ ¼«ñπ½Ñ¼
Overlay. ÆÑσ¡¿¬á π»αáó½Ñ¡¿∩ íπΣÑα«¼, ¿ß»«½∞ºπѼá∩ ¼«ñπ½Ñ¼ Overlay,
óßÑúñá úáαá¡Γ¿απÑΓ «»Γ¿¼á½∞¡πε »α«¿ºó«ñ¿Γѽ∞¡«ßΓ∞ ó óδñѽѡ¡«⌐
»á¼∩Γ¿. ìá»α¿¼Ñα, ¼«¡¿Γ«α «óÑα½ÑÑó óßÑúñá ß«σαá¡∩ÑΓ ó íπΣÑαÑ
«óÑα½ÑÑó ¬á¬ ¼«ª¡« í«½∞ΦÑ «óÑα½ÑÑó, ñ½∩ Γ«ú« τΓ«íδ ß«¬αáΓ¿Γ∞ τΓÑ¡¿Ñ
«óÑα½ÑÑó ß ñ¿ß¬á. Å«ß½Ñ Γ«ú« ¬á¬ «óÑα½Ñ⌐ ºáúαπªÑ¡, ó맮ó ½εí«⌐ Ñú«
»α«úαá¼¼δ »α«¿ºó«ñ¿Γß∩ Γá¬ªÑ íδßΓα«, ¬á¬ ó맮ó ¡Ñ«óÑα½Ñ⌐¡δσ
»α«úαá¼¼. ü«½ÑÑ Γ«ú«, ¬«úñá ¼«¡¿Γ«απ «óÑα½ÑÑó ΓαÑíπÑΓß∩ πñ὿Γ∞
«óÑα½Ñ⌐, τΓ«íδ «ßó«í«ñ¿Γ∞ »á¼∩Γ∞ ñ½∩ ñαπú«ú« «óÑα½Ñ∩, «¡ »δΓáÑΓß∩
πñ὿Γ∞ ΓÑ «óÑα½Ñ¿, ¬«Γ«αδÑ ¡Ñá¬Γ¿ó¡δ (¬«Γ«αδÑ ¡Ñ ¿¼ÑεΓ á¬Γ¿ó¡δσ
»α«úαá¼¼ ó ñá¡¡«Ñ óαѼ∩).
ä½∩ αÑ὿ºáµ¿¿ ßó«Ñ⌐ ΓÑσ¡¿¬¿ π»αáó½Ñ¡¿∩ «óÑα½Ñ∩¼¿, Turbo
Pascal ΓαÑíπÑΓ, τΓ«íδ éδ ß«í½εñ὿ ñóá ó᪡δσ »αáó¿½á »α¿ ¡á»¿ßá¡¿¿
ßó«¿σ »α«úαá¼¼:
- éßÑ «óÑα½Ñ⌐¡δÑ ¼«ñ㫨 ñ«½ª¡δ ¿¼ÑΓ∞ ñ¿αÑ¬Γ¿óπ {$O+}, ¬«Γ«αá∩
ºáßΓáó½∩ÑΓ ¬«¼»¿½∩Γ«α íδΓ∞ πóÑαÑ¡¡δ¼, τΓ« úÑ¡Ñα¿απѼδ⌐ ¬«ñ ¼«ªÑΓ
íδΓ∞ «óÑα½Ñ⌐¡δ¼.
- ä½∩ ó맮óá ½εí«⌐ «óÑα½Ñ⌐¡«⌐ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿ éδ ñ«½ª¡δ
úáαá¡Γ¿α«óáΓ∞, τΓ« óßÑ á¬Γ¿ó¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ ¿ß»«½∞ºπεΓ
ñá½∞¡εε ¼«ñѽ∞ ó맮óá (far call).
Äíá »αáó¿½á íπñπΓ «íΩ∩ß¡Ñ¡δ ó αáºñÑ½Ñ "Éáºαáí«Γ¬á «óÑα½Ñ⌐¡δσ
»α«úαá¼¼". æÑ⌐τáß ºá¼ÑΓ¿¼ Γ«½∞¬«, τΓ« éδ ¼«ªÑΓÑ ½Ñú¬« óδ»«½¡¿Γ∞ φΓ¿
ΓαÑí«óá¡¿∩, óßΓáó½∩∩ ñ¿αÑ¬Γ¿ó𠬫¼»¿½∩Γ«αá {$O+,F+} ó ¡áτὫ
¬áªñ«ú« «óÑα½Ñ⌐¡«ú« ¼«ñπ½∩ ¿ ñ¿αÑ¬Γ¿óπ {$F+} ó ¡áτὫ óßÑσ ñαπú¿σ
¼«ñπ½Ñ⌐ ¿ ú½áó¡«⌐ »α«úαá¼¼δ.
Åα¿¼Ñτá¡¿Ñ: àß½¿ ñ¿αÑ¬Γ¿óá {$F+} íπñÑΓ »α«»πΘÑ¡á ó «óÑα½Ñ⌐¡«⌐
»α«úαá¼¼Ñ, Γ« »α¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ 󫺡¿¬¡πΓ ¡Ñ»αÑñ߬áºπѼδÑ ¿,
󫺼«ª¡«, ¬áΓáßΓα«Σ¿τÑ߬¿Ñ αѺπ½∞ΓáΓδ.
ä¿αÑ¬Γ¿óá ¬«¼»¿½∩Γ«αá {$O ¿¼∩ ¼«ñπ½∩} ¿ß»«½∞ºπÑΓß∩ ó »α«úαá¼¼Ñ
ñ½∩ π¬áºá¡¿∩, ¬á¬«⌐ ¼«ñπ½∞ ñ«½ªÑ¡ íδΓ∞ «óÑα½Ñ⌐¡δ¼. ¥Γá ñ¿αÑ¬Γ¿óá
ñ«½ª¡á íδΓ∞ αẼÑΘÑ¡á »«ß½Ñ «»ÑαáΓ«αá uses ó »α«úαá¼¼Ñ, ¿ ó
«»ÑαáΓ«αÑ uses ßΓá¡ñáαΓ¡δ⌐ ¼«ñπ½∞ Äverlay ñ«½ªÑ¡ ßΓ«∩Γ∞ ñ« ½εí«ú«
«óÑα½Ñ⌐¡«ú« ¼«ñπ½∩. Åα¿¼Ñα:
programm Editor;
{$F+} {çáñáΓ∞ ñá½∞¡¿⌐ ó맮ó ñ½∩ óßÑσ »α«µÑñπα ¿ Σπ¡¬µ¿⌐}
uses
Overlay, Crt, EdInOut, EdFormat, EdPrint, EdFind, EdMain;
{$O EdInOut}
{$O EdFormat}
{$O EdPrint}
{$O EdFind}
{$O EdMain}
Åα¿¼Ñτá¡¿Ñ: 諼»¿½∩Γ«α óδñáÑΓ ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ, Ñß½¿ éδ
»δΓáÑΓÑß∞ ßñѽáΓ∞ «óÑα½Ñ⌐¡δ¼ ¼«ñπ½∞, ¬«Γ«αδ⌐ ¡Ñ íδ½ «Γ¬«¼»¿½¿α«óá¡
ó ß«ßΓ«∩¡¿¿ {$O+}. êº ßΓá¡ñáαΓ¡δσ ¼«ñπ½Ñ⌐ ¼«ªÑΓ íδΓ∞ «óÑα½Ñ⌐¡δ¼
Γ«½∞¬« ¼«ñπ½∞ Dos; óßÑ «ßΓá½∞¡δÑ ßΓá¡ñáαΓ¡δÑ ¼«ñ㫨 System,
Overlay, Graph, Crt, Turbo3, Graph3 ¡Ñ ¼«úπΓ íδΓ∞ «óÑα½Ñ⌐¡δ¼¿.
èα«¼Ñ Γ«ú«, »α«úαá¼¼δ, ß«ñÑαªáΘ¿Ñ «óÑα½Ñ⌐¡δÑ ¼«ñπ½¿, ñ«½ª¡δ íδΓ∞
«Γ¬«¼»¿½¿α«óá¡δ ¡á ñ¿ß¬; ¬«¼»¿½∩Γ«α óδñáÑΓ «Φ¿í¬π, Ñß½¿ éδ
»δΓáÑΓÑß∞ «Γ¬«¼»¿½¿α«óáΓ∞ Γá¬¿Ñ »α«úαá¼¼δ ó »á¼∩Γ¿.
î«¡¿Γ«α íπΣÑαá «óÑα½ÑÑó.
ÄóÑα½Ñ⌐¡δ⌐ íπΣÑα Turbo Pascal ½πτΦÑ óßÑú« «»¿ßáΓ∞ ¬á¬
¬«½∞µÑó«⌐ íπΣÑα, ¬«Γ«αδ⌐ ¿¼ÑÑΓ π¬áºáΓѽ∞ ¡á ¡áτὫ ¿ σó«ßΓ íπΣÑαá.
ÄóÑα½Ñ¿ óßÑúñá ºáúαπªáεΓß∩ ß ¡áτá½á íπΣÑαá, óδΓὬ¿óá∩ í«½ÑÑ ßΓáαδÑ
¬ σó«ßΓπ íπΣÑαá. è«úñá íπΣÑα ºá»«½¡∩ÑΓß∩ (Γ.Ñ. ¬«úñá ¡ÑΓ
ñ«ßΓáΓ«τ¡«ú« ßó«í«ñ¡«ú« »α«ßΓαá¡ßΓóá ¼Ñªñπ ¡áτὫ¼ ¿ σó«ßΓ«¼),
«óÑα½Ñ¿ óδΓὬ¿óáεΓß∩ ß ¬«¡µá íπΣÑαá, ñ½∩ Γ«ú« τΓ«íδ «ßó«í«ñ¿Γ∞
»α«ßΓαá¡ßΓó« ñ½∩ ¡«ó«ú« «óÑα½Ñ∩.
ū߬«½∞¬π «íδτ¡á∩ »á¼∩Γ∞ ¡Ñ ∩ó½∩ÑΓß∩ µ¿¬½¿τÑ߬«⌐ »« ßó«Ñ⌐
»α¿α«ñÑ, ñÑ⌐ßΓó¿Γѽ∞¡á∩ αÑ὿ºáµ¿∩ íπΣÑαá «óÑα½ÑÑó ó¬½ετáÑΓ
¡Ñ߬«½∞¬« í«½∞ΦÑ Φáú«ó ñ½∩ Γ«ú«, τΓ«íδ »αÑñßΓáó¿Γ∞ íπΣÑα óó¿ñÑ
¬«½∞µá. É¿ß. 13.1 ¿½½εßΓα¿απÑΓ φëà »α«µÑßß. É¿ßπ¡«¬ »«¬áºδóáÑΓ
ñ¿¡á¼¿¬π »«ñúαπº¬¿ «óÑα½ÑÑó ó »αÑñóáα¿Γѽ∞¡« »πßΓ«⌐ íπΣÑα «óÑα½ÑÑó.
ÄóÑα½Ñ⌐ Ç ºáúαπªáÑΓß∩ »Ñαóδ¼, ºá ¡¿¼ ºáúαπªáÑΓß∩ é, ºá ¡¿¼ - æ ¿
¡á¬«¡Ñµ - D. ÆѼ¡á∩ «í½áßΓ∞ »«¬áºδóáÑΓ ßó«í«ñ¡«Ñ »α«ßΓαá¡ßΓó«
íπΣÑαá.
É¿ß. 13.1
çáúαπº¬á ¿ óδΓὬ¿óá¡¿Ñ «óÑα½ÑÑó.
ÿáú 1 ÿáú 2
┌────────────┐ ┌────────────┐
│ ░░░░░░░░░░ │ │ ░░░░░░░░░░ │
│ ░░░░░░░░░░ │ │ ░░░░░░░░░░ │
│ ░░░░░░░░░░ │ │ ░░░░░░░░░░ │
│ ░░░░░░░░░░ │ ⫽«óá ───÷ ├────────────┤
│ ░░░░░░░░░░ │ │ ÄóÑα½Ñ⌐ B │
⫽«óá ────÷ ├────────────┤ ├────────────┤
│ ÄóÑα½Ñ⌐ Ç │ │ ÄóÑα½Ñ⌐ Ç │
òó«ßΓ ────÷ └────────────┘ òó«ßΓ ───÷ └────────────┘
ÿáú 3 ÿáú 4
┌────────────┐ ┌────────────┐
│ ░░░░░░░░░░ │ │ ÄóÑα½Ñ⌐ æ │
│ ░░░░░░░░░░ │ ├────────────┤
⫽«óá ────÷ ├────────────┤ │ ÄóÑα½Ñ⌐ é │
│ ÄóÑα½Ñ⌐ æ │ òó«ßΓ ───÷ ├────────────┤
├────────────┤ │ ░░░░░░░░░░ │
│ ÄóÑα½Ñ⌐ é │ │ ░░░░░░░░░░ │
├────────────┤ ⫽«óá ───÷ ├────────────┤
│ ÄóÑα½Ñ⌐ Ç │ │ ÄóÑα½Ñ⌐ D │
òó«ßΓ ────÷ └────────────┘ └────────────┘
èᬠéδ ¼«ªÑΓÑ ó¿ñÑΓ∞, ¿¡ΓÑαÑßπεΘ¿Ñ ¡áß ß½πτá¿ »«½πτáεΓß∩ »α¿
»ÑαÑσ«ñÑ «Γ Φáúá 3 ¬ Φáúπ 4. é«-»Ñαóδσ: π¬áºáΓѽ∞ ¡á ¡áτὫ
»ÑαÑ߬ᬿóáÑΓ τÑαѺ ¡¿ª¡εε úαá¡¿µπ íπΣÑαá «óÑα½ÑÑó, ºáßΓáó½∩∩
¼«¡¿Γ«α «óÑα½ÑÑó ßñó¿úáΓ∞ óßÑ ºáúαπªÑ¡¡δÑ «óÑα½Ñ¿ (¿ π¬áºáΓѽ∞ ¡á
σó«ßΓ) óóÑασ. ¥Γ«Γ ßñó¿ú ¡Ñ«íσ«ñ¿¼ ñ½∩ Γ«ú«, τΓ«íδ ß«σαá¡¿Γ∞
ßó«í«ñ¡πε «í½áßΓ∞, αáß»«½«ªÑ¡¡πε ¼Ñªñπ π¬áºáΓѽ∩¼¿ ¡á ¡áτὫ ¿ ¡á
σó«ßΓ. é«-óΓ«αδσ: ñ½∩ Γ«ú«, τΓ«íδ ºáúαπº¿Γ∞ «óÑα½Ñ⌐ D, ¼«¡¿Γ«α
«óÑα½ÑÑó óδΓὬ¿óáÑΓ «óÑα½Ñ⌐ Ç ¿º σó«ßΓá íπΣÑαá.
ÄóÑα½Ñ⌐ Ç ó φΓ«¼ ß½πτáÑ ∩ó½∩ÑΓß∩ ßá¼δ¼ αá¡¡¿¼ ¿º ºáúαπªÑ¡¡δσ
«óÑα½ÑÑó, ¿, ß½Ññ«óáΓѽ∞¡«, ½πτΦ¿¼ óδí«α«¼ ñ½∩ óδΓὬ¿óá¡¿∩, ¬«úñá
φΓ« ¡Ñ«íσ«ñ¿¼«. î«¡¿Γ«α «óÑα½ÑÑó »α«ñ«½ªáÑΓ óδΓὬ¿óáΓ∞ «óÑα½Ñ¿ ¿º
σó«ßΓá »«¬á ¡Ñ «ßó«í«ñ¿Γ ¼ÑßΓ« ñ½∩ ¡«ó«ú« «óÑα½Ñ∩ ó ú«½«óÑ íπΣÑαá,
¿ ¬áªñδ⌐ αáº, ¬«úñá π¬áºáΓѽ∞ ¡á ¡áτὫ ñ«ßΓ¿úáÑΓ úαá¡¿µδ íπΣÑαá,
«»Ñαᵿ∩ ßñó¿úá »«óΓ«α∩ÑΓß∩.
Æᬠαáí«ΓáÑΓ »« π¼«½τá¡¿ε ¼«¡¿Γ«α «óÑα½ÑÑó Turbo Pascal 6.0.
Äñ¡á¬«, ¼«¡¿Γ«α «óÑα½ÑÑó Turbo Pascal ¼«ªÑΓ αáí«ΓáΓ∞ ó αѪ¿¼Ñ
«»Γ¿¼¿ºáµ¿¿.
ÅαÑñ»«½«ª¿¼, τΓ« «óÑα½Ñ⌐ Ç ß«ñÑαª¿Γ α∩ñ τáßΓ« ¿ß»«½∞ºπѼδσ
»α«úαá¼¼. äáªÑ, Ñß½¿ φΓ¿ »α«úαá¼¼δ ¿ß»«½∞ºπεΓß∩ óßÑ óαѼ∩, Ç íπñÑΓ
óßÑúñá óδΓὬ¿óáΓ∞ß∩ ¿º «óÑα½Ñ⌐¡«ú« íπΣÑαá, ó¡«ó∞ ºáúαπªá∩ß∞ τÑαѺ
¬«α«Γ¬«Ñ óαѼ∩. Åα«í½Ñ¼á ºñÑß∞ ºá¬½ετáÑΓß∩ ó Γ«¼, τΓ« ¼«¡¿Γ«α
«óÑα½ÑÑó ¡¿τÑú« ¡Ñ º¡áÑΓ « τáßΓ«ΓÑ ó맮ó«ó »α«úαá¼¼ ¿º Ç - á º¡áÑΓ
Γ«½∞¬«, τΓ« ¬«úñá ¿ñÑΓ ó맮ó »α«úαá¼¼δ ¿º Ç, ¿ Ç ¡ÑΓ ó »á¼∩Γ¿, «¡
ñ«½ªÑ¡ ºáúαπº¿Γ∞ Ç. Äñ¡« ¿º αÑΦÑ¡¿⌐ φΓ«⌐ »α«í½Ñ¼δ ¼«ªÑΓ ºá¬½ετáΓß∩
ó »αÑαδóá¡¿¿ ¬áªñ«ú« ó맮óá »α«úαá¼¼δ ¿º Ç, ¿ Γ«úñá ¬áªñδ⌐ ó맮ó
»ÑαÑñó¿úáÑΓ Ç ó ú«½«óπ «óÑα½Ñ⌐¡«ú« íπΣÑαá, τΓ«íδ «ΓαếΓ∞ Ñú« ¡«óδ⌐
ßΓáΓπß, ¬á¬ ßἫú« »«ß½Ññ¡Ñú« ¿ß»«½∞º«óá¡¡«ú« «óÑα½Ñ∩. ÆᬫÑ
»αÑαδóá¡¿Ñ ó맮ó«ó, ¬ ß«ªá½Ñ¡¿ε, «τÑ¡∞ ñ«α«ú« ó ß¼δß½Ñ ß¬«α«ßΓ¿
óδ»«½¡Ñ¡¿∩, ¿ ó ¡Ñ¬«Γ«αδσ ß½πτá∩σ ¼«ªÑΓ ºá¼Ññ½¿Γ∞ »α«úαá¼¼π ñáªÑ
í«½∞ΦÑ, τѼ «»Ñαᵿ∩ ºáúαπº¬¿ «óÑα½ÑÑó.
Turbo Pascal «íÑß»Ñτ¿óáÑΓ ¬«¼»α«¼¿ßß¡«Ñ αÑΦÑ¡¿Ñ, ¬«Γ«α«Ñ
»αá¬Γ¿τÑ߬¿ ¡Ñ ñáÑΓ »«ΓÑα¿ »α«¿ºó«ñ¿Γѽ∞¡«ßΓ¿ ¿ ñ«ßΓ¿úáÑΓ óδß«¬«⌐
ßΓѻѡ¿ πß»Ñσá »α¿ «»αÑñѽѡ¿¿ τáßΓ« ¿ß»«½∞ºπѼδσ «óÑα½ÑÑó (¬«Γ«αδÑ
¡Ñ ñ«½ª¡δ óδΓὬ¿óáΓ∞ß∩): ¬«úñá «óÑα½Ñ⌐ í½¿º«¬ ¬ σó«ßΓπ «óÑα½Ñ⌐¡«ú«
íπΣÑαá, «¡ »«»áñáÑΓ ¡á "¿ß»δΓá¡¿Ñ". àß½¿, ó« óαѼ∩ φΓ«ú« »Ñα¿«ñá
¿ß»δΓá¡¿∩ »α«¿ßσ«ñ¿Γ ó맮ó »α«úαá¼¼δ ¿º «óÑα½Ñ∩, ¿ß»δΓá¡¿Ñ
"«Γ¼Ñ¡∩ÑΓß∩", «óÑα½Ñ⌐ ¡Ñ íπñÑΓ óδΓ«½¬¡πΓ, ¬«úñá «¡ ñ«ßΓ¿ú σó«ßΓá
«óÑα½Ñ⌐¡«ú« íπΣÑαá. é¼ÑßΓ« φΓ«ú« «¡ »α«ßΓ« »ÑαÑñó¿úáÑΓß∩ ó ú«½«óπ
íπΣÑαá, Γ.Ñ. »ÑαÑßѬáÑΓ úαá¡¿µπ ¬«½∞µá «óÑα½Ñ⌐¡«ú« íπΣÑαá. æ ñαπú«⌐
ßΓ«α«¡δ, Ñß½¿ ¡Ñ í佫 ó맮ó«ó ¬ φΓ«¼π «óÑα½Ñε ó« óαѼ∩ Ñú« »Ñα¿«ñá
¿ß»δΓá¡¿⌐, τΓ« ú«ó«α¿Γ « ¡¿º¬«⌐ τáßΓ«ΓÑ ¿ß»«½∞º«óá¡¿∩, «óÑα½Ñ⌐
óδΓὬ¿óáÑΓß∩, ¬«úñá ñ«ßΓ¿úáÑΓ σó«ßΓá «óÑα½Ñ⌐¡«ú« íπΣÑαá.
çáΓαáΓδ ¡á ßσѼπ ¿ß»δΓá¡¿⌐/«Γ¼Ñ¡δ, »α¿ ¬«Γ«α«⌐ τáßΓ«
¿ß»«½∞ºπѼδÑ «óÑα½Ñ¿ ß«σαá¡∩εΓß∩ ó íπΣÑαÑ «óÑα½ÑÑó, ºá¬½ετáεΓß∩ ó
»ÑαÑσóáΓδóá¡¿¿ Γ«½∞¬« «ñ¡«ú« ó맮óá ¬áªñδ⌐ αáº, ¬«úñá «óÑα½Ñ⌐
»α¿í½¿ªáÑΓß∩ ¬ σó«ßΓπ «óÑα½Ñ⌐¡«ú« íπΣÑαá.
äóÑ ¡«óδÑ »α«úαá¼¼δ ¼«¡¿Γ«αá «óÑα½ÑÑó OvrSetRetry ¿
OvrGetRetry π»αáó½∩εΓ ¼Ñσá¡¿º¼«¼ ¿ß»δΓá¡¿⌐/«Γ¼Ñ¡δ. OvrSetRetry
πßΓá¡áó½¿óáÑΓ αẼÑα «í½áßΓ¿ ó íπΣÑαÑ «óÑα½ÑÑó, ó ¬«Γ«α«⌐
»α«¿ßσ«ñ∩Γ ¿ß»δΓá¡¿∩, á OvrGetRetry ó«ºóαáΘáÑΓ ΓѬπΘπε πßΓá¡«ó¬π.
àß½¿ «óÑα½Ñ⌐ »«»áñáÑΓ ó¡πΓα∞ »«ß½Ññ¡¿σ OvrGetRetry íá⌐Γ »ÑαÑñ
σó«ßΓ«¼ íπΣÑαá «óÑα½ÑÑó, «¡ áóΓ«¼áΓ¿τÑ߬¿ »«»áñáÑΓ ¡á ¿ß»δΓá¡¿∩.
ïεí«Ñ ßó«í«ñ¡«Ñ »α«ßΓαá¡ßΓó« ó íπΣÑαÑ «óÑα½ÑÑó αáßß¼áΓα¿óáÑΓß∩ ¬á¬
τáßΓ∞ «í½áßΓ¿ ¿ß»δΓá¡¿⌐.
è«¡ßΓá¡Γδ ¿ »ÑαѼѡ¡δÑ.
¥Γ«Γ αáºñѽ ¬αáΓ¬« «»¿ßδóáÑΓ ¬«¡ßΓá¡Γδ ¿ »ÑαѼѡ¡δÑ,
«»αÑñѽѡ¡δÑ ó ¼«ñπ½Ñ Overlay.
OvrResult.
èáªñá∩ »α«µÑñπαá ¼«ñπ½∩ Overlay ó«ºóαáΘáÑΓ ¬«ñ ó«ºóαáΓá ó
»ÑαѼѡ¡πε OvrResult.
var OvrResult : Integer;
髺¼«ª¡δÑ ¬«ñδ ó«ºóαáΓá «»αÑñÑ½Ñ¡δ ¬«¡ßΓá¡ΓἿ, «»¿ßá¡¡δ¼¿
¡¿ªÑ. è«ñ ¡«½∞ «º¡áτáÑΓ πß»ÑΦ¡δ⌐ ó«ºóαáΓ.
ÅÑαѼѡ¡á∩ OvrResult »«ñ«í¡á ßΓá¡ñáαΓ¡«⌐ Σπ¡¬µ¿¿ IOResult, ºá
¿ß¬½ετÑ¡¿Ñ¼ Γ«ú«, τΓ« OvrResult ¡Ñ πßΓá¡áó½¿óáÑΓß∩ ó ¡«½∞ »α¿
«íαáΘÑ¡¿¿ ¬ ¡Ñ⌐. Å«φΓ«¼π, ¡Ñ ¡πª¡« ¬«»¿α«óáΓ∞ OvrResult ó ½«¬á½∞¡πε
»ÑαѼѡ¡πε »ÑαÑñ ÑÑ »α«óÑᬫ⌐.
OvrTrapCount.
var OvrTrapCount : Word;
èáªñδ⌐ αáº, ¬«úñá »α«úαá¼¼á ¿º «óÑα½Ñ∩ »αÑαδóáÑΓß∩ ¼«¡¿Γ«α«¼
«óÑα½Ñ∩, ½¿í« ¿º-ºá Γ«ú«, τΓ« «óÑα½Ñ∩ ¡ÑΓ ó »á¼∩Γ¿, ½¿í« ¿º-ºá
Γ«ú«, τΓ« «¡ ¡á ¿ß»δΓá¡¿¿, OvrTrapCount πóѽ¿τ¿óáÑΓß∩. ìáτá½∞¡«Ñ
º¡áτÑ¡¿Ñ OvrTrapCount ¡«½∞.
OvrLoadCount.
var OvrLoadCount : Word;
èáªñδ⌐ αáº, ¬«úñá «óÑα½Ñ⌐ ºáúαπªáÑΓß∩, »ÑαѼѡ¡á∩ OvrLoadCount
πóѽ¿τ¿óáÑΓß∩ ¡á Ññ¿¡¿µπ. ìáτá½∞¡«Ñ º¡áτÑ¡¿Ñ OvrLoadCount ¡«½∞.
Åα«óÑᬫ⌐ OvrTrapCount ¿ OvrLoadCount (¡á»α¿¼Ñα, ó «¬¡Ñ
Watch «Γ½áñτ¿¬á) »α¿ ¿ñÑ¡Γ¿τ¡«¼ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼, éδ ¼«ªÑΓÑ
π»αáó½∩Γ∞ ñÑ⌐ßΓó¿Ñ¼ «í½áßΓ¿ ¿ß»δΓá¡¿⌐ αẽ¿τ¡δσ αẼÑα«ó
(πßΓá¡áó½¿óáÑΓß∩ OvrSetRetry) ñ½∩ ¡áσ«ªñÑ¡¿∩ «»Γ¿¼á½∞¡«ú« αẼÑαá
éáΦÑ⌐ ¬«¡¬αÑΓ¡«⌐ »α«úαá¼¼δ.
OvrFileMode.
var OvrFileMode : éyte;
ÅÑαѼѡ¡á∩ OvrFileMode ¿ß»«½∞ºπÑΓß∩ ñ½∩ «»αÑñѽѡ¿∩ ¬«ñá
ñ«ßΓπ»á, »ÑαÑñáóáѼ«ú« ó DOS, ¬«úñá «Γ¬αδóáÑΓß∩ Σá⌐½ «óÑα½ÑÑó. Å«
π¼«½τá¡¿ε OvrFileMode ¡«½∞, τΓ« ß««ΓóÑΓßΓóπÑΓ ñ«ßΓπ»π Γ«½∞¬« ñ½∩
τΓÑ¡¿∩. Åα¿ßóá¿ó᡿Ѽ ¡«ó«ú« º¡áτÑ¡¿∩ OvrFileMode ñ« ó맮óá OvrInit
éδ ¼«ªÑΓÑ ¿º¼Ñ¡¿Γ∞ ¬«ñ ñ«ßΓπ»á, ¡á»α¿¼Ñα ñ½∩ Γ«ú«, τΓ«íδ αáºαÑΦ¿Γ∞
αáß»αÑñѽѡ¡δ⌐ ñ«ßΓπ» ó ßÑΓ¿. ü«½ÑÑ ñÑΓá½∞¡« ß« º¡áτÑ¡¿∩¼¿ ¬«ñ«ó
ñ«ßΓπ»á ¼«ª¡« «º¡á¬«¼¿Γ∞ß∩ ó éáΦѼ æ»αáó«τ¡«¼ απ¬«ó«ñßΓóÑ
»α«úαá¼¼¿ßΓá »« DOS.
OvrReadBuf.
Type OvrReadFunc = Function(OvrSeg : Word) : Integer;
var OvrReadBuf : OvrReadFunc;
Åα«µÑñπα¡á∩ »ÑαѼѡ¡á∩ OvrReadBuf »«ºó«½∩ÑΓ éá¼ »ÑαÑσóáΓδóáΓ∞
«»Ñαᵿ¿ ºáúαπº¬¿ «óÑα½ÑÑó, ¡á»α¿¼Ñα, ñ½∩ «íαáí«Γ¬¿ «Φ¿í«¬ ¿½¿ ñ½∩
»α«óÑન: »α¿ßπΓßΓóπÑΓ ½¿ ú¿í¬¿⌐ ñ¿ß¬. è«úñá ¼«¡¿Γ«α «óÑα½ÑÑó
τ¿ΓáÑΓ «óÑα½Ñ⌐, «¡ óδºδóáÑΓ Σπ¡¬µ¿ε, áñαÑß ¬«Γ«α«⌐ ºá»«¼¡Ñ¡ ó
OvrReadBuf. àß½¿ Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ ¡«½∞, ¼«¡¿Γ«α «óÑα½ÑÑó ßτ¿ΓáÑΓ,
τΓ« «»Ñαᵿ∩ íδ½á πß»ÑΦ¡«⌐. àß½¿ αѺπ½∞ΓáΓ Σπ¡¬µ¿¿ ¡Ñ ¡«½∞,
úÑ¡Ñα¿απÑΓß∩ «Φ¿í¬á óαѼѡ¿ óδ»«½¡Ñ¡¿∩ 209. Åáαá¼ÑΓα OvrSeg
»«¬áºδóáÑΓ, τΓ« «óÑα½Ñ⌐ ºáúαπªÑ¡, ¡« ¬á¬ éδ πó¿ñ¿ΓÑ »«ºªÑ, éá¼
¡¿¬«úñá ¡Ñ »«¡áñ«í¿Γß∩ ñ«ßΓπ» ¬ φΓ«⌐ ¿¡Σ«α¼áµ¿¿.
Åα¿¼Ñτá¡¿Ñ: éδ ¡¿¬«úñá ¡Ñ ñ«½ª¡δ óδºδóáΓ∞ ½εíπε «óÑα½Ñ⌐¡πε
»α«úαá¼¼π ¿º éáΦÑ⌐ Σπ¡¬µ¿¿ τΓÑ¡¿∩ «óÑα½Ñ∩. ¥Γ«Γ ó맮ó »α¿óÑñÑΓ ¬
¬αáσπ ß¿ßΓѼδ.
ä½∩ Γ«ú«, τΓ«íδ πßΓá¡«ó¿Γ∞ éáΦπ ß«íßΓóÑ¡¡πε Σπ¡¬µ¿ε τΓÑ¡¿∩
«óÑα½Ñ∩, éδ ñ«½ª¡δ ó¡áτá½Ñ ß«σαá¡¿Γ∞ »αÑñδñπΘÑÑ º¡áτÑ¡¿Ñ OvrReadBuf
ó »ÑαѼѡ¡«⌐ Γ¿»á OvrReadFunc ¿ ºáΓѼ »α¿ßó«¿Γ∞ éáΦπ Σπ¡¬µ¿ε τΓÑ¡¿∩
«óÑα½Ñ∩ OvrReadBuf. é¡πΓα¿ éáΦÑ⌐ Σπ¡¬µ¿¿ τΓÑ¡¿∩ éδ ñ«½ª¡δ óδºóáΓ∞
ß«σαá¡Ñ¡¡πε Σπ¡¬µ¿ε τΓÑ¡¿∩, τΓ«íδ »α«¿ºóÑßΓ¿ ñÑ⌐ßΓó¿Γѽ∞¡πε
«»Ñαáµ¿ε ºáúαπº¬¿. ïεíδÑ »α«óÑન, ¬«Γ«αδÑ éδ σ«Γ¿ΓÑ »α«¿ºóÑßΓ¿,
Γá¬¿Ñ ¬á¬ »α«óÑα¬á ¡á ¡á½¿τ¿Ñ ú¿í¬«ú« ñ¿ß¬á, ñ«½ª¡δ íδΓ∞
»α«¿ºóÑñÑ¡δ ñ« ó맮óá ß«σαá¡Ñ¡¡«⌐ Σπ¡¬µ¿¿ τΓÑ¡¿∩ ¿ »α«óÑα¬á ½εíδσ
«Φ¿í«¬ ñ«½ª¡á »α«¿ºó«ñ¿Γ∞ß∩ »«ß½Ñ φΓ«ú« ó맮óá.
è«ñ ñ½∩ πßΓá¡«ó¬¿ Σπ¡¬µ¿¿ «óÑα½ÑÑó ñ«½ªÑ¡ ¡áσ«ñ¿Γ∞ß∩ ßαáºπ
»«ß½Ñ ó맮óá OvrInit ¿ ó φΓ« óαѼ∩ OvrReadBuf íπñÑΓ ß«ñÑαªáΓ∞ áñαÑß
ßΓá¡ñáαΓ¡«⌐ Σπ¡¬µ¿¿ τΓÑ¡¿∩ ñ¿ß¬á.
àß½¿ éδ ΓᬠªÑ óδºδóáÑΓÑ OvrInitEMS, «¡á ¿ß»«½∞ºπÑΓ éáΦπ
Σπ¡¬µ¿ε τΓÑ¡¿∩ «óÑα½ÑÑó ß ñ¿ß¬á ó EMS-»á¼∩Γ∞, Ñß½¿ ¡Ñ í佫 «Φ¿í«¬,
«¡á ºá»«¼¿¡áÑΓ áñαÑß ßΓá¡ñáαΓ¡«⌐ Σπ¡¬µ¿¿ τΓÑ¡¿∩ EMS ó OvrReadBuf.
àß½¿ éδ ΓᬠªÑ ªÑ½áÑΓÑ »ÑαѬαδΓ∞ Σπ¡¬µ¿ε τΓÑ¡¿∩ EMS, »α«ßΓ«
»«óΓ«α¿ΓÑ »α«µÑßß πßΓá¡«ó¬¿ »«ß½Ñ ó맮óá OvrInitEMS.
æΓá¡ñáαΓ¡á∩ Σπ¡¬µ¿∩ τΓÑ¡¿∩ ß ñ¿ß¬á ó«ºóαáΘáÑΓ ¡«½∞ ó ß½πτáÑ
πß»Ñσá ¿ ¬«ñ «Φ¿í¬¿ DOS ó »α«Γ¿ó¡«¼ ß½πτáÑ. ǡὫú¿τ¡«, ßΓá¡ñáαΓ¡á∩
Σπ¡¬µ¿∩ τΓÑ¡¿∩ EMS ó«ºóαáΘáÑΓ ¡«½∞ ó ß½πτáÑ πß»Ñσá ¿ ¬«ñ «Φ¿í¬¿ EMS
ó »α«Γ¿ó¡«¼ ß½πτáÑ (º¡áτÑ¡¿Ñ ó ñ¿á»áº«¡Ñ $80 - $FF). è«ñδ «Φ¿í«¬
DOS ß¼. ó αáºñÑ½Ñ "ÄΦ¿í¬¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩" ó »α¿½«ªÑ¡¿¿ Ç φΓ«ú«
απ¬«ó«ñßΓóá »« Turbo Pascal. è«ñδ «Φ¿í«¬ EMS ß¼«Γα¿ ó ߻ѵ¿Σ¿¬áµ¿¿
αáßΦ¿αÑ¡¡«⌐ »á¼∩Γ¿ LOTUS/INTEL/MICROSOFT.
æ½ÑñπεΘ¿⌐ Σαáú¼Ñ¡Γ ¬«ñá ñѼ«¡ßΓα¿απÑΓ ¬á¬ »¿ßáΓ∞ ¿
πßΓá¡áó½¿óáΓ∞ Σπ¡¬µ¿ε τΓÑ¡¿∩ «óÑα½Ñ∩. ì«óá∩ Σπ¡¬µ¿∩ τΓÑ¡¿∩ «óÑα½Ñ∩
»«ßΓ«∩¡¡« óδºδóáÑΓ ß«σαá¡Ñ¡¡πε Σπ¡¬µ¿ε τΓÑ¡¿∩ «óÑα½ÑÑó ñ« ΓÑσ »«α,
»«¬á ¡Ñ 󫺡¿¬¡ÑΓ «Φ¿í¬á. ïεíá∩ «Φ¿í¬á »ÑαÑñáÑΓß∩ ó »α«µÑñπαδ
DOSError ¿½¿ EMSError (¡Ñ »«¬áºá¡¡δÑ ºñÑß∞) Γá¬, τΓ« «¡¿ ¼«úπΓ
óδñáΓ∞ «Φ¿í¬π »«½∞º«óáΓѽε. çá¼ÑΓ¿¼, τΓ« »áαá¼ÑΓα OvrSeg Γ«½∞¬«
»ÑαÑñáÑΓß∩ ó ß«σαá¡Ñ¡¡πε Σπ¡¬µ¿ε τΓÑ¡¿∩ «óÑα½ÑÑó ¿ ¡¿¬«úñá »α∩¼« ¡Ñ
π»αáó½∩ÑΓß∩ ¡«ó«⌐ Σπ¡¬µ¿Ñ⌐ τΓÑ¡¿∩ «óÑα½ÑÑó.
uses Overlay;
var
SaveOvrRead: OvrReadFunc;
UsingEMS: Boolean;
function MyOvrRead(OvrSeg: Word): Integer;
var
E: Integer;
begin
repeat
E := SaveOvrRead(OvrSeg);
if E <> 0 then
if UsingEms then
EMSError(E)
else
DOSError(E);
until E = 0;
MyOvrRead := 0;
end;
begin
OvrInit('MYPROG.OVR);
SaveOvrRead := OvrReadBuf; {ßΓá¡ñáαΓ¡á∩ Σπ¡¬µ¿∩
ß«σαá¡Ñ¡¿∩ ñ¿ß¬á}
OvrReadBuf := MyOvrRead; {πßΓá¡«ó¬á ßó«Ñ⌐ Σπ¡¬µ¿¿}
UsingEMS := False;
OvrInitEMS;
if (OvrResult = OvrOk) then
begin
SaveOvrRead := OvrReadBuf; {ßΓá¡ñáαΓ¡á∩ Σπ¡¬µ¿∩
ß«σαá¡Ñ¡¿∩ EMS}
OvrReadBuf := MyOvrRead; {πßΓá¡«ó¬á ßó«Ñ⌐ Σπ¡¬µ¿¿}
UsingEMS := True;
end;
...
end.
è«ñδ ó«ºóαáΓá.
ÄΦ¿í¬¿ ¼«ñπ½∩ Overlay óδñáεΓß∩ τÑαѺ »ÑαѼѡ¡πε OvrResult.
Ä»αÑñѽѡδ ß½ÑñπεΘ¿Ñ ¬«ñδ:
Æáí½¿µá 13.1. ç¡áτÑ¡¿∩ OvrResult.
───────────────────────────────────────────────────────────────────
è«¡ßΓá¡Γá ç¡áτÑ¡¿Ñ Ä»¿ßá¡¿Ñ
───────────────────────────────────────────────────────────────────
ovrOK 0 πß»ÑΦ¡«
ovrError -1 «Φ¿í¬á ¼«¡¿Γ«αá «óÑα½ÑÑó
ovrNotFound -2 Σá⌐½ «óÑα½ÑÑó ¡Ñ ¡á⌐ñÑ¡
ovrNoMemory -3 ¡ÑΓ »á¼∩Γ¿ ñ½∩ íπΣÑαá «óÑα½ÑÑó
ovrIOError -4 «Φ¿í¬á ó/ó «óÑα½Ñ⌐¡«ú« Σá⌐½á
ovrNoEMSDriver -5 ñαá⌐óÑα EMS ¡Ñ πßΓá¡«ó½Ñ¡
ovrNoEMSMemory -6 ¡Ññ«ßΓáΓ«τ¡« EMS »á¼∩Γ¿
───────────────────────────────────────────────────────────────────
Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿.
é ¼«ñπ½Ñ Overlay «»αÑñÑ½Ñ¡δ »α«µÑñπαδ OvrInit, OvrInitEMS,
OvrSetBuf, OvrClearBuf, OvrSetRetry ¿ Σπ¡¬µ¿¿ OvrGetBuf,
OvrGetRetry. çñÑß∞ «¡¿ ¬αáΓ¬« «»¿ßá¡δ.
OvrInit.
procedure OvrInit(FileName : String);
ê¡¿µ¿á½¿º¿απÑΓ ¼«¡¿Γ«α «óÑα½ÑÑó ¿ «Γ¬αδóáÑΓ «óÑα½Ñ⌐¡δ⌐ Σá⌐½.
àß½¿ »áαá¼ÑΓα FileName ¡Ñ ºáñáÑΓ πßΓα«⌐ßΓó« ¿½¿ ß»αáó«τ¡¿¬, Γ«
¼«¡¿Γ«α «óÑα½ÑÑó ¿ΘÑΓ Σá⌐½ ó ΓѬπΘѼ ß»αáó«τ¡¿¬Ñ, ß»αáó«τ¡¿¬Ñ,
ß«ñÑαªáΘѼ Σá⌐½ .EXE (»«ñ DOS 3.x) ¿ ó ß»αáó«τ¡¿¬áσ, ºáñá¡¡δσ
»ÑαѼѡ¡«⌐ ßαÑñδ DOS PATH. 髺¼«ª¡δÑ ¬«ñδ «Φ¿í«¬ OvrError ¿
OvrNotFound. é ß½πτáÑ «Φ¿í¬¿ ¼«¡¿Γ«α «óÑα½ÑÑó ¡Ñ πßΓá¡áó½¿óáÑΓß∩ ¿
»«»δΓ¬á óδºóáΓ∞ «óÑα½Ñ⌐¡πε »α«úαá¼¼π íπñÑΓ úÑ¡Ñα¿α«óáΓ∞ ¬«ñ «Φ¿í¬¿
óαѼѡ¿ óδ»«½¡Ñ¡¿∩ 208.
Åα¿¼Ñτá¡¿Ñ: Åα«µÑñπαá OvrInit ñ«½ª¡á íδΓ∞ óδºóá¡á ñ« ½εí«⌐
ñαπú«⌐ »α«µÑñπαδ ¼«¡¿Γ«αá «óÑα½ÑÑó.
OvrInitEMS.
procedure OvrInitEMS;
àß½¿ 󫺼«ª¡«, ºáúαπªáεΓ «óÑα½Ñ⌐¡δ⌐ Σá⌐½ ó EMS. àß½¿ πß»ÑΦ¡«,
«óÑα½Ñ⌐¡δ⌐ Σá⌐½ ºá¬αδóáÑΓß∩ ¿ óßÑ »«ß½ÑñπεΘ¿Ñ ºáúαπº¬¿ «óÑα½ÑÑó
π߬«α∩εΓß∩ ¿º-ºá íδßΓα«⌐ »ÑαÑñáτ¿ ó »á¼∩Γ¿. 髺¼«ª¡δÑ ¬«ñδ «Φ¿í«¬
OvrError, OvrIOError, OvrNoEmsDriver ¿ OvrNoEmsMemory. î«¡¿Γ«α
«óÑα½ÑÑó íπñÑΓ »α«ñ«½ªáΓ∞ αáí«ΓáΓ∞, Ñß½¿ OvrInitEMS ó«ºóαáΘáÑΓ
«Φ¿í¬π, ¡« «óÑα½Ñ¿ íπñπΓ τ¿ΓáΓ∞ß∩ ß ñ¿ß¬á.
Åα¿¼Ñτá¡¿Ñ: êß»«½∞º«óá¡¿Ñ OvrInitEMS ñ½∩ αẼÑΘÑ¡¿∩ Σá⌐½á
«óÑα½ÑÑó ó EMS ¡Ñ «Γ¼Ñ¡∩ÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿ ó íπΣÑαÑ «óÑα½ÑÑó. ÄóÑα½Ñ¿
íπñπΓ ¬«»¿α«óáΓ∞ß∩ ¿º EMS ó "¡«α¼á½∞¡πε" »á¼∩Γ∞ «óÑα½Ñ⌐¡«ú« íπΣÑαá
ñ« Γ«ú«, ¬á¬ «¡¿ ¼«úπΓ íδΓ∞ óδ»«½¡Ñ¡δ. Äñ¡á¬«, »«ß¬«½∞¬π Γá¬á∩
»ÑαÑñáτá ó »á¼∩Γ¿ º¡áτ¿Γѽ∞¡« íδß ΓαÑÑ, τѼ τΓÑ¡¿Ñ ß ñ¿ß¬á,
ΓαÑí«óá¡¿Ñ ¬ πóѽ¿τÑ¡¿ε αẼÑαá íπΣÑαá «óÑα½ÑÑó ßΓá¡«ó∩Γß∩
º¡áτ¿Γѽ∞¡« ¼Ñ¡∞ΦÑ.
OvrSetBuf.
procedure OvrSetBuf(Size : LongInt);
ôßΓá¡áó½¿óáÑΓ αẼÑα «óÑα½Ñ⌐¡«ú« íπΣÑαá. çáñá¡¡δ⌐ αẼÑα
ñ«½ªÑ¡ íδΓ∞ í«½∞ΦÑ ¿½¿ αáóÑ¡ ¡áτá½∞¡«¼π º¡áτÑ¡¿ε íπΣÑαá «óÑα½ÑÑó, ¿
¼Ñ¡∞ΦÑ ¿½¿ αáóÑ¡ º¡áτÑ¡¿ε MemAvail »½εß ΓѬπΘ¿⌐ αẼÑα «óÑα½Ñ⌐¡«ú«
íπΣÑαá. àß½¿ ºáñá¡¡δ⌐ αẼÑα í«½∞ΦÑ τѼ ΓѬπΘ¿⌐, Γ« ¿º ¡áτá½á ¬πτ¿
íπñÑΓ óδñѽѡ« ñ«»«½¡¿Γѽ∞¡«Ñ »α«ßΓαá¡ßΓó« (τΓ« π¼Ñ¡∞Φ¿Γ αẼÑα
¬πτ¿). àß½¿ ªÑ ºáñá¡¡δ⌐ αẼÑα ¼Ñ¡∞ΦÑ ΓѬπΘÑú«, Γ« ¿º½¿ΦѬ »á¼∩Γ¿
íπñÑΓ ó«ºóαáΘÑ¡ ó ¬πτπ. OvrSetBuf ΓαÑíπÑΓ, τΓ«íδ ¬πτá íδ½á »πßΓá∩,
Ñß½¿ ªÑ ñ¿¡á¼¿τÑ߬¿Ñ »ÑαѼѡ¡δÑ í뫨 πªÑ αáß»αÑñѽѡδ τÑαѺ New ¿½¿
GetMem, íπñÑΓ ó«ºóαáΘÑ¡á «Φ¿í¬á. 髺¼«ª¡δÑ ¬«ñδ «Φ¿í«¬ «vrNoMemory
¿ ovrError. î«¡¿Γ«α «óÑα½ÑÑó íπñÑΓ »α«ñ«½ªáΓ∞ αáí«ΓáΓ∞ Ñß½¿
OvrSetBuf ó«ºóαáΘáÑΓ «Φ¿í¬π, á αẼÑα íπΣÑαá «óÑα½ÑÑó ¡Ñ
¿º¼Ñ¡∩ÑΓß∩.
OvrGetBuf.
function OvrGetBuf : LongInt;
髺óαáΘáÑΓ ΓѬπΘ¿⌐ αẼÑα íπΣÑαá «óÑα½ÑÑó. ÅÑαó«¡áτá½∞¡« íπΣÑα
«óÑα½ÑÑó ¿¼ÑÑΓ ¼¿¡¿¼á½∞¡δ⌐ αẼÑα, ß««ΓóÑΓßΓóπ∩ αẼÑαπ ¡á¿í«½∞ΦÑú«
«óÑα½Ñ⌐¡«ú« ¼«ñπ½∩. üπΣÑα Γᬫú« αẼÑαá αáß»αÑñѽ∩ÑΓß∩ »α¿ ºá»π߬Ñ
»α«úαá¼¼δ áóΓ«¼áΓ¿τÑ߬¿.
Åα¿¼Ñτá¡¿Ñ: ¡áτá½∞¡δ⌐ αẼÑα íπΣÑαá ¼«ªÑΓ íδΓ∞ í«½∞ΦÑ 64è,
»«ß¬«½∞¬π ß«ñÑαª¿Γ ¬«ñ ¿ ¿¡Σ«α¼áµ¿ε ¡áßΓα«⌐¬¿ ñ½∩ ¡á¿í«½∞ΦÑú«
¼«ñπ½∩.
OvrClearBuf.
procedure OvrClearBuf;
Äτ¿ΘáÑΓ íπΣÑα «óÑα½ÑÑó. éßÑ «óÑα½Ñ⌐¡δÑ ¼«ñπ½¿, ºáúαπªÑ¡¡δÑ ó
íπΣÑα, óδΓÑß¡∩εΓß∩, τΓ« ºáßΓáó½∩ÑΓ ºáúαπªáΓ∞ »α«úαá¼¼δ, ¡Ñ«íσ«ñ¿¼δÑ
»α¿ »«ß½ÑñπεΘ¿σ ó맮óáσ ¿º «óÑα½Ñ⌐¡«ú« Σá⌐½á (¿½¿ EMS). àß½¿
OvrClearBuf ºá»πΘÑ¡ ¿º «óÑα½Ñ⌐¡«ú« ¼«ñπ½∩, Γ« φëà ¼«ñπ½∞ íπñÑΓ
¡Ñ¼Ññ½Ñ¡¡« ºáúαπªÑ¡ ß¡«óá, »«ß½Ñ «¬«¡τá¡¿∩ OvrClearBuf. î«¡¿Γ«α
«óÑα½ÑÑó ¡¿¬«úñá ¡Ñ ΓαÑíπÑΓ, τΓ«íδ éδ óδºδó὿ OvrClearBuf, ¿ ó
ñÑ⌐ßΓó¿Γѽ∞¡«ßΓ¿, ¿ß»«½∞º«óá¡¿Ñ φΓ«⌐ »α«µÑñπαδ íπñÑΓ πσπñΦáΓ∞
»α«¿ºó«ñ¿Γѽ∞¡«ßΓ∞ éáΦÑ⌐ »α«úαá¼¼δ, »«ß¬«½∞¬π »α¿ó«ñ¿Γ ¬
»ÑαѺáúαπº¬Ñ «óÑα½ÑÑó. OvrClearBuf ó¬½ετÑ¡á ¿ß¬½ετ¿Γѽ∞¡« ñ½∩
߻ѵ¿á½∞¡δσ µÑ½Ñ⌐, Γᬿσ ¬á¬ óαѼѡ¡«Ñ «ßó«í«ªñÑ¡¿Ñ »á¼∩Γ¿, ºá¡∩Γ«⌐
íπΣÑα«¼ «óÑα½ÑÑó.
OvrSetRetry.
procedure OvrSetRetry(Size : LongInt);
Åα«µÑñπαá OvrSetRetry πßΓá¡áó½¿óáÑΓ αẼÑα «í½áßΓ¿ ¿ß»δΓá¡¿⌐ ó
íπΣÑαÑ «óÑα½ÑÑó. àß½¿ «óÑα½Ñ⌐ »«»áñáÑΓ ó¡πΓα∞ Size íá⌐Γ »ÑαÑñ
σó«ßΓ«¼ íπΣÑαá «óÑα½ÑÑó, «¡ áóΓ«¼áΓ¿τÑ߬¿ ¡áτ¿¡áÑΓ ¿ß»δΓδóáΓ∞ß∩.
ïεí«Ñ ßó«í«ñ¡«Ñ »α«ßΓαá¡ßΓó« ó íπΣÑαÑ «óÑα½ÑÑó αáßß¼áΓα¿óáÑΓß∩ ¬á¬
τáßΓ∞ «í½áßΓ¿ ¿ß»δΓá¡¿⌐. ä½∩ ß«ó¼ÑßΓ¿¼«ßΓ¿ ß αá¡¡¿¼¿ óÑαß¿∩¼¿
¼«¡¿Γ«αá «óÑα½ÑÑó, αẼÑα «í½áßΓ¿ ¿ß»δΓá¡¿⌐ »« π¼«½τá¡¿ε - 0, »α¿
φΓ«¼ ¼Ñσá¡¿º¼ ¿ß»δΓá¡¿⌐/«Γ¼Ñ¡δ «Γ¬½ετáÑΓß∩.
Åα¿¼Ñα ¿ß»«½∞º«óá¡¿∩ OvrSetRetry:
OvrInit('MYPROG.OVR');
OvrSetBuf(BuferSize);
OvrSetRetry(BuferSize div 3);
ìÑ ßπΘÑßΓóπÑΓ φ¼»¿α¿τÑ߬«⌐ Σ«α¼π½δ ñ½∩ «»αÑñѽѡ¿∩
«»Γ¿¼á½∞¡«ú« αẼÑαá «í½áßΓ¿ ¿ß»δΓá¡¿⌐ - «ñ¡á¬« φ¬ß»Ñα¿¼Ñ¡Γδ
»«¬áºδóáεΓ, τΓ« ½πτΦ¿Ñ αѺπ½∞ΓáΓδ »«½πτáεΓß∩ ó ñ¿á»áº«¡Ñ «Γ 1/3 ñ«
1/2 αẼÑαá íπΣÑαá «óÑα½ÑÑó.
OvrGetRetry.
function OvrGetRetry : Longint;
öπ¡¬µ¿∩ OvrGetRetry ó«ºóαáΘáÑΓ ΓѬπΘ¿⌐ αẼÑα «í½áßΓ¿
¿ß»δΓá¡¿⌐ Γ.Ñ. º¡áτÑ¡¿Ñ, ¬«Γ«α«Ñ í佫 πßΓá¡«ó½Ñ¡« »«ß½Ññ¡¿¼ ó맮ó«¼
OvrSetRetry.
櫺ñá¡¿Ñ «óÑα½Ñ⌐¡δσ »α«úαá¼¼.
¥Γ«Γ αáºñѽ ñáÑΓ ó᪡πε ¿¡Σ«α¼áµ¿ε »« ß«ºñá¡¿ε «óÑα½Ñ⌐¡δσ
»α«úαá¼¼. ÆΘáΓѽ∞¡« ¿ºπτ¿ΓÑ Ñú«, »«ß¬«½∞¬π ó«»α«ßδ «íßπªñáѼδÑ
ºñÑß∞ ª¿º¡Ñ¡¡« ¡Ñ«íσ«ñ¿¼δ ñ½∩ ¡áñѪ¡«⌐ αáí«Γδ «óÑα½Ñ⌐¡δσ »α«úαá¼¼.
âÑ¡Ñαᵿ∩ «óÑα½Ñ⌐¡«ú« ¬«ñá.
Turbo Pascal »«ºó«½∩ÑΓ ¼«ñπ½ε íδΓ∞ «óÑα½Ñ⌐¡δ¼, Ñß½¿ «¡ íδ½
«Γ¬«¼»¿½¿α«óá¡ ß {$O+}. é φΓ«¼ ß½πτáÑ úÑ¡ÑαáΓ«α ¬«ñá ñѽáÑΓ
߻ѵ¿á½∞¡δÑ »αÑñ«ßë᫪¡«ßΓ¿ »α¿ »ÑαÑñáτÑ ßΓ᫬«óδσ ¬«¡ßΓá¡Γ ¿½¿
¬«¡ßΓá¡Γ ¼¡«ªÑßΓó ¿º «ñ¡«⌐ «óÑα½Ñ⌐¡«⌐ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿⌐ ó
ñαπúπε. ìá»α¿¼Ñα, Ñß½¿ UnitA ß«ñÑαª¿Γ »α«µÑñπαπ ß« ß½ÑñπεΘ¿¼
«»¿ß᡿Ѽ:
procedure WriteStr(S: String);
¿ UnitB ß«ñÑαª¿Γ «»ÑαáΓ«α
WriteStr('Hello world...');
Γ« Turbo Pascal »«¼ÑΘáÑΓ ßΓ᫬«óπε ¬«¡ßΓá¡Γπ 'Hello world...'
ó ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ UnitB ¿ »ÑαÑñáÑΓ π¬áºáΓѽ∞ ó »α«µÑñπαπ WriteStr.
Äñ¡á¬«, Ñß½¿ «íá ¼«ñπ½∩ «óÑα½Ñ⌐¡δÑ, Γ« φΓ« ¡Ñ íπñÑΓ αáí«ΓáΓ∞,
»«ß¬«½∞¬π »α¿ ó맮óÑ WriteStr, ¼«ñπ½∞ UnitB ¼«ªÑΓ íδΓ∞ »ÑαѬαδΓ
¼«ñπ½Ñ¼ UnitA, τΓ« ßñѽáÑΓ π¬áºáΓѽ∞ ¡ÑóÑα¡δ¼. ä¿αÑ¬Γ¿óá {$O+}
¿ß»«½∞ºπÑΓß∩ ñ½∩ ¿ºíѪ᡿∩ Γᬿσ »α«í½Ñ¼; ¬«úñá Turbo Pascal
¡áσ«ñ¿Γ ó맮ó «ñ¡«ú« ¼«ñπ½∩, «Γ¬«¼»¿½¿α«óá¡¡«ú« ß {$O+}, ¬«¼»¿½∩Γ«α
ñѽáÑΓ ¬«»¿ε óßÑσ ¬«¡ßΓá¡Γ ¿º ¬«ñ«ó«ú« ßÑú¼Ñ¡Γá ó« óαѼѡ¡δ⌐ ßΓѬ
ñ« »ÑαÑñáτ¿ π¬áºáΓѽ∩ ¡á ¡¿σ.
êß»«½∞º«óá¡¿Ñ {$O+} ó ¼«ñπ½Ñ ¡Ñ ºáßΓáó½∩ÑΓ óáß ñѽáΓ∞ Ñú«
«óÑα½Ñ⌐¡δ¼. ¥Γ« Γ«½∞¬« ºáßΓáó½∩ÑΓ Turbo Pascal «íÑß»Ñτ¿Γ∞, τΓ«íδ
»α¿ ªÑ½á¡¿¿, ¼«ñπ½∞ ¼«ú íδΓ∞ «óÑα½Ñ⌐¡δ¼. àß½¿ éδ ß«ºñáÑΓÑ ¼«ñπ½∞,
¬«Γ«αδ⌐ σ«Γ¿ΓÑ ¿ß»«½∞º«óáΓ∞ ¬á¬ «óÑα½Ñ⌐¡δ⌐ ¿ ¬á¬ ¡Ñ «óÑα½Ñ⌐¡δ⌐,
¬«¼»¿½¿απ⌐ΓÑ Ñú« ß {$O+}, τΓ«íδ ¿¼ÑΓ∞ «ñ¡π óÑαß¿ε «ñ¡«ú« ¼«ñπ½∩.
äá½∞¡∩∩ ¼«ñѽ∞ ó맮óá.
èᬠ߬áºá¡« αá¡ÑÑ, ñ½∩ ó맮óá ½εí«⌐ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿ ¿º
ñαπú«ú« ¼«ñπ½∩, éδ ñ«½ª¡δ úáαá¡Γ¿α«óáΓ∞, τΓ« óßÑ »α«µÑñπαδ ¿
Σπ¡¬µ¿¿, á¬Γ¿ó¡δÑ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ, ¿ß»«½∞ºπεΓ ñá½∞¡εε ¼«ñѽ∞ ó맮óá
(FAR call).
ìá»α¿¼Ñα: ÅπßΓ∞ OvrA - »α«µÑñπαá ó «óÑα½Ñ⌐¡«¼ ¼«ñπ½Ñ ¿ MainB ¿
MainC - »α«µÑñπαδ ó ú½áó¡«⌐ »α«úαá¼¼Ñ. àß½¿ ú½áó¡á∩ »α«úαá¼¼á
óδºδóáÑΓ MainC, ¬«Γ«αá∩ óδºδóáÑΓ MainB, ¬«Γ«αá∩ ó ßó«ε «τÑαÑñ∞
óδºδóáÑΓ OvrA, Γ« »α¿ ó맮óÑ OvrA, MainB ¿ MainC á¬Γ¿ó¡δ («¡¿ ÑΘÑ
¡Ñ óÑα¡π½¿ π»αáó½Ñ¡¿Ñ ó ú½áó¡πε »α«úαá¼¼π), Γ.Ñ ΓαÑíπÑΓß∩
¿ß»«½∞º«óáΓ∞ ñá½∞¡εε ¼«ñѽ∞ ó맮óá.
ÄíΩ∩ó½Ñ¡¡δÑ ó ú½áó¡«⌐ »α«úαá¼¼Ñ MainB ¿ MainC »« π¼«½τá¡¿ε
¿ß»«½∞ºπεΓ í½¿ª¡εε ¼«ñѽ∞ (NEAR call), ó ñá¡¡«¼ ß½πτáÑ ñ«½ª¡á íδΓ∞
¿ß»«½∞º«óá¡á ñ¿αÑ¬Γ¿óá {$F+} ñ½∩ π»αáó½Ñ¡¿∩ ñá½∞¡Ñ⌐ ¼«ñѽ¿ ó맮óá.
Åα«ßΓÑ⌐Φ¿⌐ ß»«ß«í πñ«ó½ÑΓó«αÑ¡¿∩ ΓαÑí«óá¡¿∩ ñá½∞¡Ñ⌐ ¼«ñѽ¿
ó맮óá, φΓ« »«¼ÑßΓ¿Γ∞ ñ¿αÑ¬Γ¿óπ {$F+} ó ¡áτὫ ú½áó¡«⌐ »α«úαá¼¼δ ¿
¬áªñ«ú« ¼«ñπ½∩. ǽ∞ΓÑα¡áΓ¿ó¡«, éδ ¼«ªÑΓÑ πßΓá¡«ó¿Γ∞ ñ¿αÑ¬Γ¿óπ $F ó
{$F+}, ¿ß»«½∞ºπ∩ ó ¬«¼á¡ñ¡«⌐ ßΓα«¬Ñ ñ¿αÑ¬Γ¿óπ /$F (ñ½∩ ÆÉæ.EXE) ¿½¿
Äptions/Compiler ó «¬¡Ñ Force Far Calls.
Å« ßαáó¡Ñ¡¿ε ß« ß¼ÑΦá¡¡δ¼¿ ó맮óἿ í½¿ª¡Ñ⌐ ¿ ñá½∞¡Ñ⌐ ¼«ñѽ¿,
éδ íπñÑΓÑ ñ«»«½¡¿Γѽ∞¡« ºáΓαáτ¿óáΓ∞: «ñ¡« ñ«»«½¡¿Γѽ∞¡«Ñ ß½«ó« ó
»á¼∩Γ¿ ßΓÑ¬á ¡á ¬áªñπε á¬Γ¿ó¡πε »α«µÑñπαπ ¿ «ñ¿¡ ñ«»«½¡¿Γѽ∞¡δ⌐
íá⌐Γ ¡á ¬áªñδ⌐ ó맮ó.
ê¡¿µ¿á½¿ºáµ¿∩ ¼«¡¿Γ«αá «óÑα½ÑÑó.
çñÑß∞ »α¿óÑñÑ¡« ¡Ñ߬«½∞¬« »α¿¼Ñα«ó, ¬á¬ ¿¡¿µ¿á½¿º¿α«óáΓ∞
¼«¡¿Γ«α «óÑα½ÑÑó. ê¡¿µ¿á½¿ºáµ¿«¡¡δ⌐ ¬«ñ ñ«½ªÑ¡ ßΓ«∩Γ∞ ñ« »Ñαó«ú«
ó맮óá ½εí«⌐ «óÑα½Ñ⌐¡«⌐ »α«úαá¼¼δ ¿ «íδτ¡« ¡áτ¿¡áÑΓ ú½áó¡πε
»α«úαá¼¼π.
æ½ÑñπεΘ¿⌐ »α¿¼Ñα »«¬áºδóáÑΓ ¬á¬ ¼á½« éδ ñ«½ª¡δ ßñѽáΓ∞, ñ½∩
¿¡¿µ¿á½¿ºáµ¿¿ ¼«¡¿Γ«αá «óÑα½ÑÑó:
begin
OvrInit('EDITOR.OVR');
end;
çñÑß∞ ¡ÑΓ «íαáí«Γ¬¿ «Φ¿í«¬, ¿ Ñß½¿ ¡Ññ«ßΓáΓ«τ¡« »á¼∩Γ¿ ñ½∩
íπΣÑαá «óÑα½ÑÑó ¿½¿ «óÑα½Ñ⌐¡δ⌐ Σá⌐½ ¡Ñ ¡á⌐ñÑ¡, Γ« »α¿ »«»δΓ¬Ñ
óδºóáΓ∞ «óÑα½Ñ⌐¡πε »α«úαá¼¼π 󫺡¿¬¡ÑΓ «Φ¿í¬á 208 (¼«¡¿Γ«α «óÑα½ÑÑó
¡Ñ πßΓá¡«ó½Ñ¡).
ÉáßΦ¿α¿¼ »αÑñδñπΘ¿⌐ »α¿¼Ñα:
begin
OvrInit('EDITOR.OVR');
OvrInitEMS;
end;
é φΓ«¼ ß½πτáÑ, Ñß½¿ ñ½∩ íπΣÑαá «óÑα½ÑÑó ñ«ßΓáΓ«τ¡« »á¼∩Γ¿ ¿
Ñß½¿ íδ½ ¡á⌐ñÑ¡ Σá⌐½ «óÑα½ÑÑó, ¼«¡¿Γ«α «óÑα½ÑÑó »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ
EMS »á¼∩Γ¿ ¿ Ñß½¿ «¡á ÑßΓ∞, ºáúαπªáÑΓ «óÑα½Ñ⌐¡δ⌐ Σá⌐½ ó EMS.
èᬠ߬áºá¡« óδΦÑ, »Ñαó«¡áτá½∞¡« íπΣÑα «óÑα½ÑÑó ñѽáÑΓß∩ ¬á¬
¼«ª¡« ¼Ñ¡∞ΦÑ, ¿½¿ Γ«τ¡ÑÑ, ñ«ßΓáΓ«τ¡« í«½∞Φ¿¼, τΓ«íδ ó¼ÑΘáΓ∞
¡á¿í«½∞Φ¿⌐ «óÑα½Ñ⌐. ¥Γ« ¼«ªÑΓ íδΓ∞ ¡«α¼á½∞¡δ¼ ñ½∩ í«½∞Φ¿¡ßΓóá
»α«úαá¼¼, ¡« »αÑñßΓáó∞ΓÑ ß¿Γπᵿε, ¬«úñá ¬á¬á∩-Γ« Σπ¡¬µ¿∩
αÑ὿º«óá¡á ñóπ¼∩ ¿½¿ í«½ÑÑ ¼«ñπ½∩¼¿, ¬áªñδ⌐ ¿º ¬«Γ«αδσ «óÑα½Ñ⌐¡δ⌐.
àß½¿ «íΘ¿⌐ αẼÑα φΓ¿σ ¼«ñπ½Ñ⌐ í«½∞ΦÑ τѼ αẼÑα í«½∞ΦÑú« ¼«ñπ½∩,
Γ« »α¿ τáßΓ«¼ «íαáΘÑ¡¿¿ «ñ¡«ú« ¼«ñπ½∩ ¬ ñαπú«¼π íπñÑΓ »α¿ó«ñ¿Γ∞ ¬
º¡áτ¿Γѽ∞¡«¼π «íΩѼπ ßó«»»¿¡úá (»«ñ¬áτ¬¿).
ÉÑΦÑ¡¿Ñ «τÑó¿ñ¡« - πóѽ¿τ¿Γ∞ «íΩѼ íπΣÑαá «óÑα½ÑÑó Γá¬, τΓ«íδ
ó ½εí«⌐ ¼«¼Ñ¡Γ í佫 ñ«ßΓáΓ«τ¡« »á¼∩Γ¿ ñ½∩ ß«ñÑαªá¡¿∩ óßÑσ «óÑα½ÑÑó,
¬«Γ«αδÑ τáßΓ« óδºδóáεΓ ñαπú ñαπúá.
æ½ÑñπεΘ¿⌐ »α¿¼Ñα »«¬áºδóáÑΓ ¿ß»«½∞º«óá¡¿Ñ OvrSetBuf ñ½∩
πóѽ¿τÑ¡¿∩ αẼÑαá íπΣÑαá:
const
OvrMaxSize = 80000;
begin
OvrInit('EDITOR.OVR');
OvrInitEMS;
OvrSetBuf(OvrMaxSize);
end;
ìÑ ßπΘÑßΓóπÑΓ «íΘÑ⌐ Σ«α¼π½δ ñ½∩ «»αÑñѽѡ¿∩ ¿ñÑá½∞¡«ú« αẼÑαá
íπΣÑαá «óÑα½ÑÑó. Æ«½∞¬« σ«α«ΦÑÑ º¡á¡¿Ñ »α«úαá¼¼δ ¿ ¡Ñí«½∞Φ«⌐
φ¬ß»Ñα¿¼Ñ¡Γ »«ºó«½∩ÑΓ óδíαáΓ∞ »α¿Ñ¼½Ñ¼«Ñ º¡áτÑ¡¿Ñ.
Åα¿¼Ñτá¡¿Ñ: ¿ß»«½∞º«óá¡¿Ñ OvrInitEMS ñ½∩ »«¼ÑΘÑ¡¿∩ «óÑα½Ñ⌐¡«ú«
Σá⌐½á ó EMS, ¡Ñ ß«¬αáΘáÑΓ ΓαÑí«óá¡¿⌐ ¬ íπΣÑαπ «óÑα½ÑÑó. ÄóÑα½Ñ¿,
»αѪñÑ, τѼ «¡¿ ¼«úπΓ íδΓ∞ óδ»«½¡Ñ¡δ, ñ«½ª¡δ íδΓ∞ ߬«»¿α«óá¡δ ¿º
EMS ó "¡«α¼á½∞¡πε" »á¼∩Γ∞ íπΣÑαá «óÑα½ÑÑó. Äñ¡á¬«, »«ß¬«½∞¬π
»ÑαÑß佬á ó »á¼∩Γ¿ º¡áτ¿Γѽ∞¡« íδßΓαÑÑ, τѼ ß ñ¿ß¬á, ΓαÑí«óá¡¿Ñ ¬
πóѽ¿τÑ¡¿ε αẼÑαá íπΣÑαá «óÑα½ÑÑó ßΓá¡«ó¿Γß∩ ¼Ñ¡∞ΦÑ.
Å«¼¡¿ΓÑ, τΓ« OvrSetBuf πóѽ¿τ¿óáÑΓ íπΣÑα «óÑα½ÑÑó, ß«¬αáΘá∩
¬πτπ. æ½Ññ«óáΓѽ∞¡« ¬πτá ñ«½ª¡á íδΓ∞ »πßΓ«⌐, ¿¡áτÑ OvrSetBuf ¡Ñ
íπñÑΓ αáí«ΓáΓ∞. àß½¿ éδ ¿ß»«½∞ºπÑΓÑ ¼«ñπ½∞ Graph, éδ ñ«½ª¡δ íδΓ∞
πóÑαÑ¡δ ó Γ«¼, τΓ« éδ óδºó὿ OvrSetBuf ñ« ó맮óá InitGraph,
¬«Γ«αδ⌐ αáß»αÑñѽ∩ÑΓ »á¼∩Γ∞ ó ¬πτÑ.
Åα¿óÑñѼ ñÑΓá½∞¡δ⌐ »α¿¼Ñα ¿¡¿µ¿á½¿ºáµ¿¿ ¼«¡¿Γ«αá «óÑα½ÑÑó ß
»«½¡«⌐ »α«óÑᬫ⌐ «Φ¿í«¬:
ß«nst
OvrMaxSize = 80000;
var
OvrName: String[79];
Size: Longint;
begin
OvrName := 'EDITOR.OVR';
repeat
OvrInit(OvrName);
if OvrResult = OvrNotFound then
begin
WriteLn('OóÑα½Ñ⌐¡δ⌐ Σá⌐½ ¡Ñ ¡á⌐ñÑ¡:', OvrName, '.');
Write('BóÑñ¿ΓÑ »αáó¿½∞¡«Ñ ¿¼∩ «óÑα½Ñ⌐¡«ú« Σá⌐½á: ');
ReadLn(OvrName);
end;
until OvrResult <> OvrNotFound;
if OvrResult <> OvrOk then
begin
WriteLn('OΦ¿í¬á ¼«¡¿Γ«α«á «óÑα½ÑÑó.');
Halt(1);
end;
OvrInitEMS;
if OvrResult <> OvrOk then
begin
case OvrResult of
ovrIOError: Write('OΦ¿í¬á ó/ó «óÑα½Ñ⌐¡«ú« Σá⌐½á');
ovrNoEMSDriver: Write('EMS ñαá⌐óÑα ¡Ñ πßΓá¡«ó½Ñ¡');
ovrNoEMSMemory: Write('HÑñ«ßΓáΓ«τ¡« EMS »á¼∩Γ¿');
end;
Write('H᪼¿ΓÑ óó«ñ...');
ReadLn;
end;
OvrSetBuf(OvrMaxSize);
end;
àß½¿ ¿¼∩ «óÑα½Ñ⌐¡«ú« Σá⌐½á ¡Ñ óÑα¡«, Γ« »«½∞º«óáΓѽε óδñáÑΓß∩
»«ñ߬Ậá ñ½∩ óó«ñá ¬«ααÑ¬Γ¡«ú« ¿¼Ñ¡¿.
çáΓѼ »α«óÑα∩ÑΓß∩ ¡ÑΓ ½¿ ñαπú¿σ «Φ¿í«¬ ¿¡¿µ¿á½¿ºáµ¿¿. àß½¿
«í¡áαπªÑ¡á «Φ¿í¬á, »α«úαá¼¼á ºáóÑαΦáÑΓß∩, »«ß¬«½∞¬π «Φ¿í¬¿ ó
OvrInit ∩ó½∩εΓß∩ ΣáΓá½∞¡δ¼¿ (Ñß½¿ ¿σ »α«¿ú¡«α¿α«óáΓ∞, 󫺡¿¬¡ÑΓ
«Φ¿í¬á »α¿ ó맮óÑ »Ñαó«⌐ «óÑα½Ñ⌐¡«⌐ »α«úαá¼¼δ).
Å«ß½Ñ πß»ÑΦ¡«⌐ ¿¡¿µ¿á½¿ºáµ¿¿, óδº«ó«¼ OvrInitEMS ñѽáÑΓß∩
»«»δΓ¬á ºáúαπº¿Γ∞ Σá⌐½ «óÑα½ÑÑó ó EMS Ñß½¿ φΓ« 󫺼«ª¡«. é ß½πτáÑ
«Φ¿í¬¿ óδñáÑΓß∩ ñ¿áú¡«ßΓ¿τÑ߬«Ñ ß««íΘÑ¡¿Ñ, ¡« »α«úαá¼¼á ¡Ñ
ºáóÑαΦáÑΓß∩, ó¼ÑßΓ« φΓ«ú« »α«úαá¼¼á íπñÑΓ »α«ñ«½ªáΓ∞ τ¿ΓáΓ∞ «óÑα½Ñ¿
ß ñ¿ß¬á.
ìᬫ¡Ñµ OvrSetBuf πßΓá¡áó½¿óáÑΓ »α¿Ñ¼½Ñ¼δ⌐ αẼÑα íπΣÑαá
«óÑα½ÑÑó. ¥Γ«Γ αẼÑα «»αÑñѽ∩ÑΓß∩ »πΓѼ á¡á½¿ºá ¿
φ¬ß»Ñα¿¼Ñ¡Γ¿α«óá¡¿∩ ß ¬«¡¬αÑΓ¡«⌐ »α«úαá¼¼«⌐. ÄΦ¿í¬¿ OvrSetBuf
¿ú¡«α¿απεΓß∩, σ«Γ∩ OvrResult ¼«ªÑΓ ß«ñÑαªáΓ∞ ¬«ñ -3 (OvrNoMemory).
àß½¿ »á¼∩Γ¿ ¡Ñ σóáΓ¿½«, ¼«¡¿Γ«α «óÑα½ÑÑó íπñÑΓ »α«ñ«½ªáΓ∞
¿ß»«½∞º«óáΓ∞ ¼¿¡¿¼á½∞¡δ⌐ íπΣÑα, αáß»αÑñѽѡ¡δ⌐ »α¿ ßΓáαΓÑ
»α«úαá¼¼δ.
ê¡¿µ¿á½¿ºáµ¿«¡¡á∩ τáßΓ∞ ó «óÑα½Ñ⌐¡δσ ¼«ñπ½∩σ.
èᬠ¿ ßΓáΓ¿τÑ߬¿Ñ ¼«ñπ½¿, «óÑα½Ñ⌐¡δÑ ¼«ñ㫨 ¼«úπΓ ¿¼ÑΓ∞
¿¡¿µ¿á½¿ºáµ¿«¡¡πε τáßΓ∞. ò«Γ∩ ¿¡¿µ¿á½¿ºáµ¿«¡¡δ⌐ ¬«ñ «óÑα½Ñ⌐¡«ú«
¼«ñπ½∩ ¡Ñ «Γ½¿τáÑΓß∩ «Γ ¡«α¼á½∞¡«ú« «óÑα½Ñ⌐¡«ú« ¬«ñá, ¼«¡¿Γ«α
«óÑα½ÑÑó ñ«½ªÑ¡ íδΓ∞ ¿¡¿µ¿á½¿º¿α«óá¡ »Ñαóδ¼, ΓᬠτΓ«íδ «¡ ¼«ú
ºáúαπº¿Γ∞ ¿ óδ»«½¡¿Γ∞ «óÑα½Ñ⌐¡δ⌐ ¼«ñπ½∞.
髺óαáΘá∩ß∞ ¬ »α«úαá¼¼Ñ Editor, »αÑñ»«½«ª¿¼, τΓ« ¼«ñπ½¿
EdInOut ¿ EdMain ¿¼ÑεΓ ¿¡¿µ¿á½¿ºáµ¿«¡¡δ⌐ ¬«ñ. ¥Γ« ΓαÑíπÑΓ, τΓ«íδ
OvrInit íδ½ óδºóá¡ ñ« ¿¡¿µ¿á½¿ºáµ¿«¡¡«ú« ¬«ñá EdInOut. ä½∩ φΓ«ú«
ÑßΓ∞ Γ«½∞¬« «ñ¿¡ »πΓ∞ - ß«ºñáΓ∞ ñ«»«½¡¿Γѽ∞¡δ⌐ ¡Ñ«óÑα½Ñ⌐¡δ⌐ ¼«ñπ½∞,
¬«Γ«αδ⌐ ßΓ«¿Γ ñ« EdInOut ¿ óδºδóáÑΓ OvrInit ó ßó«Ñ⌐
¿¡¿µ¿á½¿ºáµ¿«¡¡«⌐ τáßΓ¿:
unit EdInit;
interface
implementation
uses Overlay;
const
OvrMaxSize = 80000;
begin
OvrInit('EDITOR.OVR');
OvrInitEMS;
OvrSetBuf(OvrMaxSize);
end.
î«ñπ½∞ EdInit ñ«½ªÑ¡ ßΓ«∩Γ∞ ó «»ÑαáΓ«αÑ uses »α«úαá¼¼δ ñ«
½εí«ú« «óÑα½Ñ⌐¡«ú« ¼«ñπ½∩:
program Editor;
{$F+}
uses Overlay, Crt, Dos, EdInit, EdInOut, EdFormat, EdPrint,
EdFind, EdMain;
{$O EdInOut}
{$O EdFormat}
{$O EdPrint}
{$O EdFind}
{$O EdMain}
ò«Γ∩ ¿¡¿µ¿á½¿ºáµ¿«¡¡á∩ τáßΓ∞ ó «óÑα½Ñ⌐¡δσ ¼«ñπ½∩σ ñ«»πßΓ¿¼á,
ÑÑ ß½ÑñπÑΓ ¿ºíÑúáΓ∞ »« α∩ñπ »α¿τ¿¡.
é«-»Ñαóδσ, σ«Γ∩ ¿¡¿µ¿á½¿ºáµ¿«¡¡δ⌐ ¬«ñ óδ»«½¡∩ÑΓß∩ Γ«½∞¬« «ñ¿¡
αáº, «¡ ∩ó½∩ÑΓß∩ τáßΓ∞ε «óÑα½Ñ∩, ¿ ºá¡¿¼áÑΓ »á¼∩Γ∞ íπΣÑαá «óÑα½ÑÑó
»α¿ ºáúαπº¬Ñ «óÑα½Ñ⌐¡«ú« ¼«ñπ½∩. é«-óΓ«αδσ, Ñß½¿ α∩ñ «óÑα½Ñ⌐¡δσ
¼«ñπ½Ñ⌐ ß«ñÑαª¿Γ ¿¡¿µ¿á½¿ºáµ¿«¡¡πε τáßΓ∞, ¬áªñδ⌐ ¿º φΓ¿σ ¼«ñπ½Ñ⌐
íπñÑΓ τ¿ΓáΓ∞ß∩ ó »á¼∩Γ∞ »α¿ ßΓáαΓÑ »α«úαá¼¼δ.
â«αáºñ« ½πτΦ¿¼ ∩ó½∩ÑΓß∩ óáα¿á¡Γ, ¬«úñá óßÑ ¿¡¿µ¿á½¿ºáµ¿«¡¡δÑ
¬«ñδ ß«í¿αáεΓß∩ ó «ñ¿¡ ¿¡¿µ¿á½¿ºáµ¿«¡δ⌐ «óÑα½Ñ⌐¡δ⌐ ¼«ñπ½∞, ¬«Γ«αδ⌐
óδºδóáÑΓß∩ ó ¡áτá½Ñ »α«úαá¼¼δ ¿ í«½ÑÑ ¡¿úñÑ.
ùΓ« ¡Ñ½∞º∩ ó «óÑα½ÑÑ.
ìѬ«Γ«αδÑ ¼«ñ㫨 ¡Ñ ¼«úπΓ íδΓ∞ «óÑα½Ñ⌐¡δ¼¿. é τáßΓ¡«ßΓ¿, ¡Ñ
»δΓá⌐ΓÑß∞ ßñѽáΓ∞ «óÑα½Ñ⌐¡δ¼¿ ß½ÑñπεΘ¿Ñ ¼«ñ㫨 :
- î«ñπ½¿, ¬«¼»¿½¿α«óá¡¡δÑ ó ß«ßΓ«∩¡¿¿ {$O-}. 諼»¿½∩Γ«α óδñáßΓ
«Φ¿í¬π, Ñß½¿ éδ »«»δΓáÑΓÑß∞ ßñѽáΓ∞ «óÑα½Ñ⌐¡δ¼ ¼«ñπ½∞, ¬«Γ«αδ⌐ ¡Ñ
íδ½ «Γ¬«¼»¿½¿α«óá¡ ó ß«ßΓ«∩¡¿¿ {$O+}. Æᬿ¼¿ ¡Ñ«óÑα½Ñ⌐¡δ¼¿ ¼«ñπ½∩¼¿
∩ó½∩εΓß∩ System, Overlay, Crt, Graph, Turbo3, Graph3. (Åα¿¼Ñτá¡¿Ñ
»ÑαÑó«ñτ¿¬á: î«ñπ½∞ Dos Γ«ªÑ ¡Ñ ¼«ªÑΓ íδΓ∞ «óÑα½Ñ⌐¡δ¼).
- î«ñπ½¿, ¬«Γ«αδÑ ß«ñÑαªáΓ «íαáí«Γτ¿¬¿ »αÑαδóá¡¿⌐. êº-ºá
¡ÑαÑÑ¡ΓÑαáíѽ∞¡«⌐ ßΓαπ¬Γπαδ DOS ¼«ñπ½∞, ¬«Γ«αδ⌐ αÑ὿ºπÑΓ interrupt
»α«µÑñπαδ, ¡Ñ ñ«½ªÑ¡ íδΓ∞ «óÑα½Ñ⌐¡δ¼. ìá»α¿¼Ñα, Γᬿ¼ ¼«ñπ½Ñ¼
∩ó½∩ÑΓß∩ Crt, ¬«Γ«αδ⌐ αÑ὿ºπÑΓ «íαáí«Γτ¿¬ »αÑαδóá¡¿∩ Ctrl-Break.
- çáαÑú¿ßΓα¿α«óá¡¡δÑ ß »«¼«Θ∞ε RegisterBGIdriver ¿½¿
RegisterBGIfont BGI ñαá⌐óÑαδ ¿½¿ Φα¿ΣΓδ.
î«¡¿Γ«α «óÑα½ÑÑó ó Turbo Pascal »«½¡«ßΓ∞ε »«ññÑনóáÑΓ ó맮ó
«óÑα½Ñ⌐¡δσ »α«úαá¼¼ τÑαѺ π¬áºáΓѽ¿ ¡á »α«µÑñπαδ. Åα¿¼ÑαἿ Γᬿσ
π¬áºáΓѽÑ⌐ »α«µÑñπα ∩ó½∩εΓß∩: »α«µÑñπαδ óδσ«ñá ¿ ñαá⌐óÑαδ πßΓα«⌐ßΓó
ΓѬßΓ«óδσ Σá⌐½«ó.
èα«¼Ñ Γ«ú«, »ÑαÑñáτá «óÑα½Ñ⌐¡δσ »α«µÑñπα ¿ Σπ¡¬µ¿⌐ ¬á¬
»áαá¼ÑΓα«ó »α«µÑñπα¡«ú« Γ¿»á ¿ »α¿ßóá¿óá¡¿Ñ «óÑα½Ñ⌐¡δσ »α«µÑñπα ¿
Σπ¡¬µ¿⌐ »ÑαѼѡ¡δ¼ »α«µÑñπα¡«ú« Γ¿»á ΓᬠªÑ »«½¡«ßΓ∞ε
»«ññÑনóáÑΓß∩.
ÄΓ½áñ¬á «óÑα½ÑÑó.
ü«½∞Φ¿¡ßΓó« «Γ½áñτ¿¬«ó »«ññÑনóáεΓ «τÑ¡∞ «úαá¡¿τÑ¡¡δÑ
ß»«ß«í¡«ßΓ¿ «Γ½áñ¬¿ «óÑα½ÑÑó. é Turbo Pascal ¿ Turbo Debugger φΓ«
¡Ñ Γá¬. ê¡ΓÑúα¿α«óá¡¡δ⌐ «Γ½áñτ¿¬ »«½¡«ßΓ∞ε »«ññÑনóáÑΓ »«Φáú«ó«Ñ
óδ»«½¡Ñ¡¿Ñ ¿ Γ«τ¬¿ »αÑαδóá¡¿∩ ó «óÑα½Ñ∩σ. êß»«½∞ºπ∩ «óÑα½Ñ¿, óδ
¼«ªÑΓÑ ½Ñú¬« αáºαáíáΓδóáΓ∞ ¿ «Γ½áª¿óáΓ∞ «úα«¼¡δÑ »α«úαá¼¼δ ¿º
¿¡ΓÑúα¿α«óá¡¡«⌐ ßαÑñδ Turbo Pascal ¿½¿ Turbo Debugger.
é¡ÑΦ¡¿Ñ »α«úαá¼¼δ ó «óÑα½Ñ∩σ.
ÆᬠªÑ ¬á¬ ¿ «íδτ¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ Åá߬á½∩, ó¡ÑΦ¡¿Ñ
»α«úαá¼¼δ, ¡á»¿ßá¡¡δÑ ¡á ÇßßѼí½ÑαÑ, ñ«½ª¡δ ß««ΓóÑΓßΓó«óáΓ∞
«»αÑñѽѡ¡δ¼ »αáó¿½á¼ »α«úαá¼¼¿α«óá¡¿∩, τΓ«íδ αáí«ΓáΓ∞ ¬«ααÑ¬Γ¡« ß
¼«¡¿Γ«α«¼ «óÑα½ÑÑó.
àß½¿ »α«úαá¼¼á ¡á ÇßßѼí½ÑαÑ óδºδóáÑΓ ½ ε í π ε «óÑα½Ñ⌐¡πε
»α«µÑñπαπ ¿½¿ Σπ¡¬µ¿ε, ÇßßѼí½Ñα¡á∩ »α«úαá¼¼á ñ«½ª¡á ¿ß»«½∞º«óáΓ∞
ñá½∞¡εε ¼«ñѽ∞ ó맮óá ¿ ñ«½ª¡á πßΓá¡áó½¿óáΓ∞ ßΓѬ, ¿ß»«½∞ºπ∩
αÑú¿ßΓα éÉ. ìá»α¿¼Ñα, »αÑñ»«½«ª¿¼, τΓ« «óÑα½Ñ⌐¡á∩ »α«µÑñπαá
OtherProc ¡áσ«ñ¿Γß∩ ó ñαπú«¼ ¼«ñπ½Ñ ¿ τΓ« ÇßßѼí½Ñα¡á∩ »α«úαá¼¼á
ExternProc óδºδóáÑΓ ÑÑ. Æ«úñá ExternProc ñ«½ª¡á íδΓ∞ ñá½∞¡Ñ⌐ ¼«ñѽ¿
(far) ¿ ñ«½ª¡á πßΓá¡áó½¿óáΓ∞ ßΓѬ:
ExternProc PROC FAR
push bp ; ß«σαá¡¿Γ∞ BP
mov bp,sp ; πßΓá¡«ó¿Γ∞ ßΓѬ
sub sp,LocalSize ; αáß»αÑñѽ¿Γ∞ ½«¬á½∞¡δÑ
; »ÑαѼѡ¡δÑ
...
call OtherProc ; óδºóáΓ∞ ñαπú«⌐ «óÑα½Ñ⌐¡δ⌐
; ¼«ñπ½∞
...
mov sp,bp ; πñ὿Γ∞ ½«¬á½∞¡δÑ
; »ÑαѼѡ¡δÑ
pop bp ; ó«ßßΓá¡«ó¿Γ∞ BP
ret ParamSize ; ó«ºóαáΓ
ExternProc ENDP
úñÑ LocalSize - αẼÑα ½«¬á½∞¡δσ »ÑαѼѡ¡δσ ¿ ParamSize -
αẼÑα »áαá¼ÑΓα«ó. àß½¿ LocalSize = 0, Γ« ßΓ᫬¿ ß αáß»αÑñѽѡ¿Ñ¼ ¿
πñá½Ñ¡¿Ñ¼ ½«¬á½∞¡δσ »ÑαѼѡ¡δσ ¼«ª¡« «»πßΓ¿Γ∞.
¥Γ¿ ΓαÑí«óá¡¿∩ «ßΓá¡πΓß∩ Γᬿ¼¿ ªÑ, Ñß½¿ ExternProc ñѽáÑΓ
¡Ñ»α∩¼«⌐ ó맮ó «óÑα½Ñ⌐¡δσ »α«µÑñπα ¿½¿ Σπ¡¬µ¿⌐. ìá»α¿¼Ñα, Ñß½¿
OtherProc óδºδóáÑΓ «óÑα½Ñ⌐¡δÑ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿, ¡« ßá¼á ¡Ñ
«óÑα½Ñ⌐¡á∩, Γ« ExternProc Γá¬ªÑ ñ«½ª¡á ¿ß»«½∞º«óáΓ∞ ñá½∞¡εε ¼«ñѽ∞
ó맮óá ¿ πßΓá¡áó½¿óáΓ∞ ßΓѬ.
é ß½πτáÑ, ¬«úñá ÇßßѼí½Ñα¡á∩ »α«úαá¼¼á ¡Ñ ñѽáÑΓ »α∩¼«ú« ¿½¿
¡Ñ»α∩¼«ú« ó맮óá «óÑα½Ñ⌐¡«⌐ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿, ߻ѵ¿á½∞¡δσ
ΓαÑí«óá¡¿⌐ ¬ ¡Ñ⌐ ¡Ñ »αÑñΩ∩ó½∩ÑΓß∩: ÇßßѼí½Ñα¡á∩ »α«úαá¼¼á
¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ í½¿ª¡εε ¼«ñѽ∞ ó맮óá (near) ¿ ¡Ñ πßΓá¡áó½¿óáÑΓ
ßΓѬ.
ÄóÑα½Ñ⌐¡á∩ ÇßßѼí½Ñα¡á∩ »α«úαá¼¼á ¡Ñ ñ«½ª¡á ß«ºñáóáΓ∞ »ÑαѼѡ
¡δÑ ó ¬«ñ«ó«¼ ßÑú¼Ñ¡ΓÑ, »«ß¬«½∞¬π ½εíδÑ ¼«ñ¿Σ¿¬áµ¿¿, ßñѽᡡδÑ ó
«óÑα½Ñ⌐¡«¼ ¬«ñ«ó«¼ ßÑú¼Ñ¡ΓÑ, íπñπΓ »«ΓÑα∩¡δ, ¬«úñá «óÑα½Ñ⌐ íπñÑΓ
πñá½Ñ¡. èα«¼Ñ Γ«ú«, º¡áτÑ¡¿∩ π¬áºáΓѽÑ⌐ ¡á «íΩѬΓδ, ¡áσ«ñ∩Θ¿Ñß∩ ó
«óÑα½Ñ⌐¡«¼ ¬«ñ«ó«¼ ßÑú¼Ñ¡ΓÑ, ¼«úπΓ ¿º¼Ñ¡∩Γ∞ß∩ »«ß½Ñ ó맮óá ñαπú¿σ
«óÑα½ÑÑó, »«ß¬«½∞¬π ¼«¡¿Γ«α «óÑα½ÑÑó ßó«í«ñ¡« »ÑαѼÑΘáÑΓ ¿ πñá½∩ÑΓ
«óÑα½Ñ⌐¡δÑ ¬«ñ«óδÑ ßÑú¼Ñ¡Γδ.
ÄóÑα½Ñ¿ ó .EXE Σá⌐½áσ.
Turbo Pascal »αÑñ«ßΓáó½∩ÑΓ ó«º¼«ª¡«ßΓ∞ ß«σαá¡¿Γ∞ éáΦ¿ «óÑα½Ñ¿
ó ¬«¡µÑ .EXE Σá⌐½á éáΦÑ⌐ »α¿¬½áñ¡«⌐ »α«úαá¼¼δ, á ¡Ñ ó «Γñѽ∞¡«¼
.OVR Σá⌐½Ñ. ä½∩ »α¿ß«Ññ¿¡Ñ¡¿∩ .OVR Σá⌐½á ¬ ¬«¡µπ .EXE Σá⌐½á
¿ß»«½∞ºπ⌐ΓÑ ¬«¼á¡ñπ Copy DOS ß «»µ¿Ñ⌐ /b. ìá»α¿¼Ñα
Copy/b MYPROG.EXE + MYPROG.OVR
éδ ñ«½ª¡δ íδΓ∞ πóÑαÑ¡δ, τΓ« .EXE Σá⌐½ íδ½ «Γ¬«¼»¿½¿α«óá¡ íѺ
«Γ½áñ«τ¡«⌐ ¿¡Σ«α¼áµ¿¿ Turbo Debugger. ä½∩ φΓ«ú« ó IDE ¡Ñ«íσ«ñ¿¼«,
τΓ«íδ Debug/StandAlone Debugging í佫 πßΓá¡«ó½Ñ¡« ó Off; ß
¬«¼á¡ñ¡«⌐ óÑαß¿Ñ⌐ ¬«¼»¿½∩Γ«αá ¡Ñ ñ«½ª¡á íδΓ∞ π¬áºá¡á «»µ¿∩ /V.
ä½∩ τΓÑ¡¿∩ «óÑα½ÑÑó ß ¬«¡µá .EXE Σá⌐½á á ¡Ñ ¿º «Γñѽ∞¡«ú« .OVR
Σá⌐½á, »α«ßΓ« π¬áª¿ΓÑ ¿¼∩ .EXE Σá⌐½á ó ó맮óÑ OvrInit. àß½¿ éδ
αáí«ΓáÑΓÑ »«ñ DOS 3.X, éδ ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ ßΓá¡ñáαΓ¡πε Σπ¡¬µ¿ε
ParamStr ñ½∩ »«½πτÑ¡¿∩ ¿¼Ñ¡¿ .EXE Σá⌐½á. ìá»α¿¼Ñα:
OvrInit(ParamStr(0));