Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Нельзя организовывать как оверлейные стандартные модули (Dos, Crt и т. д.) и модули, содержащие обработку прерываний.
8.3. Инициализация работы оверлеев
В модуле Overlay определены процедуры OvrInit, OvrInitEMS, OvrSetBuf, OvrClearBuf, OvrSetRetry и функции OvrGetBuf и OvrGetRetry.
8.3.1. Включение администратора оверлеев
Перед первым обращением к какой-либо подпрограмме, хранящейся в Ovr-файле, в программе необходимо включить (инициализировать) администратор оверлеев. Включение производится один раз. Для этого служит процедура OvrInit. Заголовок процедуры имеет вид:
OvrInit (OvrFileName: String),
Данная процедура определена в модуле Overlay. Процедура производит инициализацию администратора оверлеев и открывает оверлейный файл, имя которого определяет параметр OvrFileName (имя файла должно быть тем же, что у файла, содержащего основную часть программы, но с расширением ovr). Вызова процедуры OvrInit в принципе достаточно, чтобы работать с оверлеями (если не оптимизировать работу администратора и не обрабатывать его возможные ошибки).
8.3.2. Обработка ошибок администратора
В модуле Overlay определена переменная OvrResult типа Integer. В данной переменной сохраняются коды завершения процедур и функций модуля Overlay. Определено семь возможных значений OvrResult. Для каждого из них предопределена константа (таблица ошибка! текст указанного стиля в документе отсутствует..1).
Таблица Ошибка! Текст указанного стиля в документе отсутствует..1 – Коды завершения процедур и функций модуля Overlay
Константа | Значение | Описание |
OvrOk | 0 | Нормальное завершение |
OvrError | -1 | Ошибка управления Overlay |
OvrNotFound | -2 | Файл. ovr не найден |
OvrNoMemory | -3 | Не хватает памяти для буфера оверлеев |
OvrIOError | -4 | Ошибка ввода-вывода оверлейного файла |
OvrNoEMSDriver | -5 | Драйвер EMS не установлен |
OvrNoEMSMemory | -6 | Недостаточно EMS памяти |
Ошибка OvrError возникает при попытке инициализации неоверлейного файла.
Ошибка OvrNotFound возникает при неправильном размещении оверлейного файла на диске. Если в фактическом параметре OvrFileName процедуры OvrInit не указан полный путь, то файл ищется в текущем каталоге, затем в каталоге, где находится ехе-файл и в каталогах, указанных в системной переменной MS-DOS Path. Если в этих каталогах файл не найден, генерируется ошибка OvrNotFound и осуществляется останов программы (ошибка выполнения 208 «Администратор оверлеев не установлен»).
OvrNoMemory появляется при нехватке свободной памяти в компьютере или если самый крупный оверлейный модуль (он определяет размер оверлейного буфера) следует разбить на несколько независимых модулей.
OvrIOError обычно свидетельствует о сбое при вводе-выводе оверлейного файла или о повреждении оверлейного файла.
Все вышеназванные ошибки могут появляться при инициализации администратора.
Две последние ошибки могут появиться при работе процедуры инициализации OvrInitEMS.
Переменная OvrResult подобна стандартной функции IOResult за исключением того, что OvrResult не устанавливается в ноль при обращении к ней.
Константы ошибок могут быть использованы для анализа ошибок после инициализации администратора; например, с помощью операторов вида:
If OvrResult = OvrNotFound …
или
If OvrResult <> OvrOk Then
Case OvrResult of
OvrIOError:…
OvrNoEMSDriver:…
и т. д.
Пример 8.2.
Простейшая оверлейная программа. Пусть исходный текст программы хранится в файле OvrDemo. pas.
Program OvrDemo; {Главная программа}
{$F+}
Uses Overlay, Crt, Unit1, Unit2;
{$O Unit1}
{$O Unit2}
Begin
OvrInit (‘OvrDemo. ovr’);
If OvrResult <> 0 Then {или OvrResult <> OvrOk}
Begin
Writeln (‘Ошибка инициализации:’, OvrResult);
<Обработка ошибки инициализации> {например, Halt (1); где 1 – код выхода из программы (необязательный параметр, по умолчанию Halt (0))}
End;
Repeat
Write1;
Write2;
Until KeyРressed; {Функция возвращает значение True, если была нажата клавиша клавиатуры. Определена в CRT}
End. {Конец главной программы}
{$O+, F+} {1-ый оверлейный сегмент Unit1}
Unit Unit1;
Interface
Procedure Write1;
Implementation
Procedure Write1;
Begin
Writeln (‘1-ый оверлей’);
End;
End. {Конец Unit1}
{$O+, F+} {2-ой оверлейный сегмент Unit2}
Unit Unit2;
Interface
Procedure Write2;
Implementation
Uses Unit1;
Procedure Write2;
Begin
Writeln (‘2-ой оверлей’);
Writeln (‘А теперь снова’);
Write1;
Writeln (‘Конец второго оверлея’);
End;
End. {Конец Unit2}
8.3.3. Размещение оверлейного файла
в EMS-памяти
EMS-память – это расширенная память.
Для размещения оверлейного файла в EMS-памяти используется процедура OvrInitEMS (без параметров). Она проверяет, есть ли в компьютере расширенная память и установлена ли программа-драйвер этой памяти. Если эти условия выполняются, то ovr-файл целиком загрузится в EMS-память и программа будет работать значительно быстрее по сравнению с хранением ovr-файла на диске.
Вызов процедуры OvrInitEMS не является обязательным. При ее использовании предварительно все равно необходимо использовать процедуру OvrInit. Использование OvrInitEMS не отменяет необходимости в буфере оверлеев.
8.3.4. Управление оверлейным буфером
Размер оверлейного буфера назначается автоматически. Для управления размером оверлейного буфера используется функция
OvrGetBuf: LongInt,
а также процедуры
OvrSetBuf (Size: LongInt),
OvrClearBuf.
Функция OvrGetBuf возвращает размер текущего буфера в байтах.
Автоматически под буфер выделяется память такого размера, который необходим для загрузки наибольшего оверлейного модуля. Но если оверлейный модуль вызывает другой оверлейный модуль, то оба оверлейных модуля одновременно активны, то есть должны находиться в буфере. В этом случае размер буфера должен соответствовать суммарному размеру этих оверлейных модулей.
Процедура OvrSetBuf (Size: Longint) регулирует размер буфера. Она должна вызываться после процедур OvrInit и OvrInitEMS. Параметр Size задает требуемую величину буфера в байтах.
Дополнительная память для буфера выделяется из области динамической памяти. Процедура OvrSetBuf требует, чтобы динамическая память была пустой. Если же динамические переменные уже были распределены с помощью процедур New или GetMem, то будет выдано сообщение об ошибке (возможные ошибки OvrNoMemory и OvrError) В этом случае необходимо определить min-ый размер динамической памяти директивой {$M…}.
Если процедура OvrSetBuf приводит к ошибке, программа не останавливается, а размер буфера не изменяется.
Наиболее удобно менять значение буфера относительно текущего значения. Например,
OvrSetBuf (OvrGetBuf + 2048);
В данном случае размер буфера увеличился на 2Кб.
Процедура OvrClearBuf служит для принудительной очистки буфера. Это может быть полезно, например, если выполняется фрагмент программы, не использующий оверлейных подпрограмм. Тогда этот участок памяти можно использовать для размещения динамических переменных.
Литература
Основная и дополнительная литература
ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. , Основы алгоритмизации и структурного проектирования программ: Учеб. пособие по курсам «Основы алгоритмизации и программирования» и «Технология разработки программного обеспечения» для студ. спец. 40 01 01 “Программное обеспечение информационных технологий” дневной формы обучения. – Мн.: БГУИР, 2003. сновы алгоритмизации и программирования. – СПб, 2003. , Турбо Паскаль 7.0. – М.: ДМК, 1999. Shareware. Профессиональная разработка и продвижение программ. – СПб, 2003. труктурное программирование и конструирование программ. – М.: Мир, 1979. лгоритмы: Построение и анализ. – СПб, 2003. рофессиональное программирование. Системный подход. – СПб, 2003. Технологии разработки программного обеспечения: Учеб. Пособие. – СПб, 2003. , Программирование в среде Турбо Паскаль (версия 5.5): справочно-метод. пособие. - М.: МАИ, 1992. нженерия программного обеспечения. – СПб, 2003. и др. Программирование в среде Borland Pascal для Windows: справочное пособие. - Мн.: Выс. шк., 1996. ринципы проектирования и разработки программного обеспечения. Учебный курс. – СПб, 2003. Турбо Паскаль 7.0. Начальный курс. Учеб. Пособие. – М.: Нолидж, 2007. Программирование: Структурный подход. Алгоритмы. Turbo Pascal. Borland C++. Современный Fortran. – СПб, 2003.
Перечень наглядных пособий, методических указаний,
методических материалов
и используемых в учебном процессе технических средств
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |


