- •Содержание
- •Раздел 1.Подпрограммы Общие сведения
- •Процедуры Описание процедур
- •Вызов процедур
- •Процедуры без параметров
- •Процедуры с параметрами
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры-переменные без типа
- •Параметры процедурного типа
- •Использование производных типов в качестве параметров подпрограмм
- •Принцип локализации имен
- •Функции Описание функций
- •Вызов функции
- •Рекурсивные подпрограммы
- •Директивы
- •Библиотечные модули пользователя Общие сведения
- •Структура модуля Unit
- •Особенности работы с модулями
- •Подключение к программе внешнего файла
- •Раздел 2.Простейший ввод-вывод Процедуры ввода из стандартного текстового файла Input
- •248 15 4 70 Значения 1-й строки
- •11 Значения 2-й строки
- •Процедуры вывода в стандартный текстовый файл Output
- •Раздел 3.Записи Структура записи
- •Записи без вариантной части
- •Записи с вариантами
- •Оператор присоединения With
- •Константа-запись
- •Раздел 4.Множества Общие сведения
- •Конструктор множества
- •Задание множественного типа
- •Операции над множествами
- •Ввод / вывод значения множественной переменной
- •Типизованные константы-множества
- •Раздел 5.Файлы Общие сведения
- •Процедура Assign
- •Файлы с типом
- •Процедура Assign
- •Процедура Rewrite (f)
- •Процедура Write (f, v1 [, v2, … , vn])
- •Процедура Reset (f)
- •Процедура Read (f, V [, v2, …, vn])
- •Функция Eof(f)
- •Процедура Seek (f, n)
- •Функция Filepos (f)
- •Функция Filesize(f)
- •Процедура Close (f)
- •Текстовые файлы
- •Процедура Assign (f, Name)
- •Процедура AssignСrt(f)
- •Процедура Append (f)
- •Процедура Rewrite (f)
- •Процедура Reset (f)
- •Процедура Read ([f,] v1 [, v2, …, vn])
- •Процедура Readln [([f] [,] [v1, v2, …, vn])]
- •Процедура Write ([f,] e1 [, e2, …, en])
- •Процедура Writeln([f,][e1,e2, …,en])
- •Процедура Close(f)
- •Процедура SetTextBuf (f, Buf [, Size])
- •Процедура Flush (f)
- •Сравнительная характеристика представления информации в файлах с типом и текстовых файлах
- •I. Представление числовой информации.
- •II. Представление текстовой информации.
- •Файлы без типа
- •Процедуры Reset и Rewrite
- •Процедура Blockread
- •Процедура Blockwrite
- •Проверка операций ввода-вывода
- •Раздел 6.Ссылочный тип (тип указатель) Общие сведения
- •Методы работы с динамическими переменными
- •Процедуры New и Dispose
- •Процедуры Getmem и Freemem
- •Процедуры Mark и Release
- •Раздел 7.Динамические структуры данных Динамические цепочки Структура динамической цепочки
- •Формирование цепочки
- •Поиск элемента в цепочке
- •Удаление элемента из цепочки
- •Вставка элемента в цепочку
- •Линейный однонаправленный список
- •Двунаправленные списки
- •Вставка элемента
- •Создание двунаправленного кольцевого списка с заглавным звеном
- •Удаление элемента
- •Поиск элемента
- •Очереди и стеки
- •Очередь lifo
- •Очередь fifo
- •Общие сведения
- •Способы организации таблиц
- •Однонаправленный список.
- •Однонаправленный список с упорядоченными записями.
- •Однонаправленный список с отдельным хранением текста записи.
- •Представление в виде массива.
- •Двоичное дерево.
- •Двоичные деревья Структура двоичного дерева
- •Построение дерева
- •Поиск записи в дереве
- •Включение записи в дерево
- •Удаление записи из дерева
- •Раздел 8.Оверлеи Общие сведения
- •Правила оформления оверлейных программ
- •Инициализация работы оверлеев
- •Включение администратора оверлеев
- •Обработка ошибок администратора
- •Размещение оверлейного файла в ems-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Инициализация работы оверлеев
В модуле Overlay определены процедуры OvrInit, OvrInitEMS, OvrSetBuf, OvrClearBuf, OvrSetRetry и функции OvrGetBuf и OvrGetRetry.
Включение администратора оверлеев
Перед первым обращением к какой-либо подпрограмме, хранящейся в Ovr-файле, в программе необходимо включить (инициализировать) администратор оверлеев. Включение производится один раз. Для этого служит процедура OvrInit. Заголовок процедуры имеет вид:
OvrInit (OvrFileName: String),
Данная процедура определена в модуле Overlay. Процедура производит инициализацию администратора оверлеев и открывает оверлейный файл, имя которого определяет параметр OvrFileName (имя файла должно быть тем же, что у файла, содержащего основную часть программы, но с расширением ovr). Вызова процедуры OvrInit в принципе достаточно, чтобы работать с оверлеями (если не оптимизировать работу администратора и не обрабатывать его возможные ошибки).
Обработка ошибок администратора
В модуле Overlay определена переменная OvrResult типа Integer. В данной переменной сохраняются коды завершения процедур и функций модуля Overlay. Определено семь возможных значений OvrResult. Для каждого из них предопределена константа (Таблица 8 .3).
Таблица 8.3 – Коды завершения процедур и функций модуля 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}