ЧАСТЬ
2. СТАНДАРТНЫЕ БИБЛИОТЕКИ
ГЛАВА 10. МОДУЛЬ SYSTEM
Предыдущая
страница |
Следующая страница
Модуль System является библиотекой Turbo
Pascal времени выполнения. Он реализует
низко-уровневые программы для всех встроенных возможностей
, таких как ввод/вывод, обработка строк, эмуляция
8087, плавающую точку, управление оверлеями и динамическое распределение
памяти. Модуль System используется автоматически
любым модулем или программой и никогда не требуется указывать его в
утверждении uses.
[начало] [оглавление]
Стандартные процедуры и функции.
В данном
разделе описываются все стандартные процедуры
и функции, использующиеся в Turbo Pascal, кроме
тех процедур и функций ввода/вывода, которые обсуждаются
в разделе "Ввод и вывод". Более подробная информация содержится
в Справочном руководстве по библиотеке.
Стандартные процедуры
и функции являются предопределенными. Поскольку все
предопределенные элементы действуют точно так же, как если бы они были
объявлены в окружающем программу блоке, то при
объявлении, переопределяющем тот же самый идентификатор внутри программы, конфликта не возникает.
[начало] [оглавление]
Процедуры управления обработкой.
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
Exit Позволяет немедленно выйти из текущего блока
Halt Останавливает выполнение программы и возвращает
в операционную систему
RunError Останавливает выполнение программы и генерирует
ошибку времени выполнения
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Процедуры динамического распределения.
Эти процедуры
и функции используются для
управления кучей - областью памяти, которая занимает всю
свободную память, остающуюся при выполнении
программы. Полное описание методов, используемых для
управления динамически распределяемой областью памяти,
приводится в разделе "Менеджер кучи" в главе 16 "Память".
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
Dispose Уничтожает
динамическую переменную
FreeMem Уничтожает динамическую переменную данного размера
GetMem Создает новую динамическую переменную заданного размера и устанавливает
переменную-указатель для нее
Mark Записывает в переменной-указателе состояние кучи
New Создает новую динамическую переменную и устанавливает на нее переменную-указатель
Release Возвращает кучу в заданное состояние
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Функции динамического распределения.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
MaxAvail
Возвращает размер наибольшего
непрерывного свободного блока кучи, соответствующей
размеру наибольшей динамической переменной, которая может быть распределена в момент вызова MaxAvail
MemAvail
Возвращает количество имеющихся в куче свободных байт
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Функции преобразования.
Процедуры Pack
и UnPack, определенные в стандартном Паскале, в Turbo Pascal не реализованы.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Chr Возвращает символ с заданным порядковым номером
Ord
Возвращает порядковый номер, имеющий
значение порядкового типа
Round Округляет значение вещественного типа до значения типа
LongInt
Trunc
Усекает значение вещественного типа до значения типа
LongInt
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Арифметические функции.
Примечание: При
компиляции в режиме числового сопроцессора, {$ N+}, возвращаемые значения
в программах с плавающей точкой в модуле System (Sqrt, Pi, Sin и т.д.)
имеют тип Еxtended вместо Real.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Abs Возвращает абсолютное значение аргумента
ArcTan Возвращает арктангенс аргумента
Cos Возвращает косинус аргумента
Exp Возвращает экспоненту аргумента
Frac Возвращает дробную часть аргумента
Int Возвращает целую часть аргумента
Ln Возвращает натуральный логарифм аргумента
Pi
Возвращает значение числа Pi {3.1415926535897932385}
Sin Возвращает синус аргумента
Sqr Возвращает
аргумент в квадрате
Sqrt Возвращает квадратный корень аргумента
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Процедуры порядкового типа.
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
Dec Уменьшает значение переменной
Inc Увеличивает значение переменной
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Функции порядкового типа.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Odd Проверяет, является ли аргумент нечетным числом
Pred Возвращает предшествующее значение аргумента
Succ Возвращает его последующее значение
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Строковые процедуры.
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
Delete Удаляет
подстроку из строки
Insert Вставляет подстроку в строку
Str
Преобразует численное значение в его строковое представление
Val
Преобразует строковое значение в его численное представление
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Строковые функции.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Concat Выполняет
конкатенацию последовательности строк
Copy Возвращает подстроку из строки
Length Возвращает динамическую длину строки
Pos Производит поиск подстроки в строке
───────────────────────────────────────────────────────────────────
[начало] [оглавление]
Функции для работы с указателями и
адресами.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Addr Возвращает
адрес заданного объекта
CSeg Возвращает текущее значение регистра CS
DSeg Возвращает текущее значение регистра DS
Ofs Возвращает смещение заданного объекта
Ptr
Преобразует базовый адрес сегмента и смещение в значение
типа указатель
Seg Возвращает сегмент для заданного объекта
SPtr Возвращает текущее значение регистра SP
SSeg Возвращает текущее значение регистра SS
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Другие
процедуры.
───────────────────────────────────────────────────────────────────
Процедура
Описание
───────────────────────────────────────────────────────────────────
FillChar Заполняет заданное число последовательных байт указанным значением
Move Копирует заданное
число последовательных байт из источника в назначение
Randomize Инициализирует случайным значением встроенный
генератор случайных чисел
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Другие
функции.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Hi Возвращает старший байт аргумента
Lo Возвращает
младший байт аргумента
ParamCount Возвращает число параметров, переданных
программе в командной строке
ParamStr Возвращает заданный параметр
командной строки
Random Возвращает случайное
число
SizeOf Возвращает число байт,
занимаемых аргументом
Swap Производит
перестановку старших и младших байт аргумента
UpCase Преобразует символ
в прописной
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Ввод
и вывод.
В данном разделе кратко описываются стандартные (встроенные)
функции и процедуры ввода-вывода Turbo Pascal. Для более детальной
информации см. главу 19.
[начало]
[оглавление]
Введение
во ввод/вывод.
Файловая переменная в Паскале - это любая переменная файлового типа.
В Паскале имеются три класса файлов : типированный
файл, текстовый файл, нетипированный файл.
Перед использованием файловой переменной она
должна быть связана с внешним файлом с помощью вызова процедуры
Assign. Внешним файлом обычно является поименнованный файл
на диске, но он также может представлять собой устройство,
как например, клавиатуру или дисплей. Во
внешних файлах сохраняется записанная
в файл информация, или они служат
источниками информации, которая считывается
из файла.
Когда связь с внешним файлом установлена, для подготовки ее к
операции ввода или вывода
файловая переменная должна быть "открыта".
Существующий файл можно открыть с помощью процедуры
Reset, а новый файл можно создать и открыть
с помощью процедуры Rewrite. Текстовые файлы, открытые
с помощью процедуры Reset, доступны только для чтения,
а текстовые файлы, открытые с помощью процедуры Rewrite
и Append, доступны только
для записи. Типированные и нетипированные
файлы всегда допускают как чтение, так и запись, независимо от
того, были они открыты с помощью процедуры
Reset или с помощью процедуры Rewrite.
Когда начинается выполнение программы, всегда автоматически
открываются стандартные текстовые файловые переменные
Input и Output (ввод и вывод). Input - это доступный
только для чтения файл, связаный с клавиатурой, а Output - это доступный только для записи файл, связанный с дисплеем.
Любой файл представляет собой линейную
последовательность элементов, каждый из которых имеет сложный
тип (или тип записи) файла. Каждый элемент
файла имеет номер. Первый элемент файла считается
нулевым элементом.
Обычно доступ к файлам организуется последовательно, то есть,
когда элемент считывается с помощью стандартной процедуры Read
или записывается с помощью стандартной процедуры Write, текущая позиция
файла перемещается к следующему по порядку элементу файла. Однако к
типированным и нетипированным файлам можно
организовать прямой доступ с помощью стандартной процедуры
Seek, которая перемещает текущую позицию файла к заданному
элементу. Текущую позицию в файле и текущий размер файла
можно определить с помощью стандартных функций
FilePos и FileSize.
Когда программа завершит обработку
файла, он должен закрываться с
помощью стандартной процедуры Close. После полного закрытия файла,
связанный с ним внешний файл обновляется. Затем файловая
переменная может быть связана с другим внешним файлом.
По умолчанию, при всех обращениях к стандартным функциям
и процедурам ввода/вывода автоматически производится
проверка на наличие ошибок. При обнаружении ошибки программа
прекращает работу и выводит на экран сообщение
об ошибке. С помощью директив компилятора
{$I+} и {$I-} эту автоматическую проверку
можно включить или выключить. Когда автоматическая проверка отключена,
то есть когда процедура или функция была скомпилирована с
директивой {$I-}, ошибки ввода/вывода, возникающие при работе
программы, не приводят к ее останову.
При этом, чтобы проверить результат выполнения
операции ввода/вывода, нужно использовать стандартную функцию
IOResult.
[начало]
[оглавление]
Процедуры
В/В.
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
Assign Присваивает имя внешнего файла файловой переменной
ChDir Меняет текущий справочник
Close Закрывает открытый файл
Erase Удаляет внешний файл
GetDir Возвращает текущий справочник на заданном диске
MkDir Создает подсправочник
Rename Переименовывает внешний файл
Reset Открывает существующий файл
Rewrite Создает и открывает новый файл
RmDir Удаляет пустой подсправочник
Seek Передвигает текущую
позицию файла на указанную компоненту (не используется с текстовыми
файлами).
Truncate Усекает размер файла до текущей позиции
в файле. (Не используется с текстовыми файлами)
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Функции
В/В.
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Eof
Возвращает для файла состояние end-of-file (конец файла)
FilePos Возвращает текущую позицию в файле. (Не
испольтзуется с текстовыми файлами)
FileSize Возвращает текущий размер файла. (Не испольтзуется с текстовыми файлами)
IOResult Возвращает целое значение, являющееся
состоянием последней выполненной операции ввода/вывода.
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Текстовые
файлы.
В этом разделе описываются операции ввода/вывода, использующие файловую
переменную стандартного типа Text. Заметим,
что в Turbo Pascal тип Text отличается от типа file of char.
При открытии текстового файла внешний файл интерпретируется
особым образом: считается, что
он представляет собой последовательность
символов, сгруппированных в строки, где каждая строка
заканчивается символом конца строки (end of line), который представляет
собой символ перевода каретки, за которым, возможно, следует
символ перевода строки.
Для текстовых файлов существует специальный
вид операций чтения и записи (Read и Write),
которые позволяют вам считывать и записывать значения, тип которых
отличается от типа Char. Такие значения автоматически
переводятся в символьное представление и обратно. Например,
Read(F, i), где i - переменная целого типа,
приведет к считыванию последовательности цифр, интерпретации
этой последовательности, как десятичного числа, и сохранению его в i.
Как было отмечено ранее, имеются две стандартные переменные
текстового типа - Input и Output. Стандартная файловая переменная
Input - это доступный только для
чтения файл, связанный со стандартным файлом
ввода операционной системы (обычно
это клавиатура), а стандартная файловая
переменная Output - это доступный только для записи
файл, связанный со стандартным файлом вывода операционной
системы (обычно это дисплей). Перед началом выполнения
программы файлы Input и
Output автоматически открываются, как если бы были выполнены
следующие операторы :
Assign(Input,''); Reset(Input);
Assign(Output,''); Rewrite(Output);
Аналогично, после выполнения программы
эти файлы автоматически закрываются.
Если программа использует стандартный модуль Crt,
то файлы Input и Output не будут по умолчанию
относиться к стандартным файлам ввода/вывода.
Для некоторых стандартных процедур, список которых приведен в
данном разделе, не требуется явно указывать в качестве
параметра файловую переменную. Если этот параметр опущен,
то по умолчанию будут рассматриваться Input и Output, в зависимости от того, будет ли процедура или функция ориентирована
на ввод или вывод. Например,
Read(Х)
соответствует Read(Input,Х) и Write(Х) соответствует
Write(Output,Х).
Если при вызове одной из процедур или функций из этого раздела вы задаете
файл, этот файл должен быть связан с внешним файлом
с помощью процедуры Assign и открыт с
помощью процедуры Reset, Rewrite, или Append. Если
для ориентированной на вывод процедуры или функции
Вы указываете на файл, который был открыт с помощью процедуры
Reset, то выведется сообщение об ошибке.
Аналогично, будет ошибкой задавать для ориентированной на ввод процедуры
или функции файл, открытый с помощью процедур Rewrite или Append .
[начало]
[оглавление]
Процедуры:
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
Append Открывает существующий
файл для добавления
Flush Выталкивает буфер
файла вывода
Read Считывает
одно или более значений из текстового файла в одну или более переменных
Readln Выполняет те же действия,
что и Read, а потом делает пропуск до начала следующей строки
файла
SetTextBuf Назначает буфер ввода/вывода для текстового
файла
Write Записывает в текстовый
файл одно или более значений
Writeln Выполняет те же действия,
что и Write, а затем добавляет к файлу маркер конца строки
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Функции:
───────────────────────────────────────────────────────────────────
Функция Описание
───────────────────────────────────────────────────────────────────
Eoln Возвращает
для файла состояние end-of-line (конец строки)
SeekEof Возвращает для файла состояние
end-of-file (конец файла)
SeekEoln Возвращает для файла состояние
end-of-line (конец строки)
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Нетипированные
файлы.
Нетипированные файлы представляют собой каналы ввода/вывода
нижнего уровня, используемые в основном для
прямого доступа к любому файлу на диске, независимо от его
типа и структуры.
Любой нетипированный файл объявляется со словом
file без атрибутов, например:
var
Datafile : file;
Для нетипированных файлов в процедурах Reset
и Rewrite допускается указывать дополнительный параметр, чтобы задать размер записи, использующийся при передаче данных.
По умолчанию длина записи равна 128 байт. Предпочтительной
длиной записи является длина записи, равная
1, поскольку это единственное значение, которое точно отражает размер любого файла (если длина записи равна 1, то неполные
записи невозможны).
За исключением процедур Read и Write для всех нетипированных
файлов допускается использование любой
стандартной процедуры, которую разрешено использовать
с типированными файлами. Вместо процедур Read
и Write здесь используются соответственно процедуры BlockRead и BlockWrite,
позволяющие пересылать данные с высокой скоростью.
[начало]
[оглавление]
Процедуры.
───────────────────────────────────────────────────────────────────
Процедура Описание
───────────────────────────────────────────────────────────────────
BlockRead Считывает в переменную одну
или более записей
BlockWrite Записывает одну или более записей
из переменной
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Переменная
FileMode.
Переменная FileMode, определенная
в модуле System, устанавливает код
доступа, который передается в DOS,
когда типированные и нетипированные файлы (но не текстовые) открываются
с помощью процедуры Reset.
По умолчанию задается значение FileMode равное
2, которое разрешает и чтение, и
запись. Присваивание другого значения переменной FileMode
приводит к тому, что все последующие вызовы
процедуры Reset будут использовать этот режим.
Диапазон возможных значений FileMode зависит от используемой
версии DOS. Однако для всех версий задаются следующие режимы :
0 : только чтение
1 : только запись
2 : чтение/запись
Версия 3.X DOS задает дополнительные режимы, которые главным
образом связаны с разделенным использованием файлов в сетях.
(Для получения более подробной информации, обратитесь к руководству программиста по DOS).
Примечание: Новые файлы, созданные с
помощью процедуры Rewrite, всегда открываются
в режиме Read/Write, соответствующем значению переменной FileMode
= 2.
[начало]
[оглавление]
Устройства в Turbo Pascal.
В Turbo Pascal и в операционной
системе DOS внешняя аппаратура, как например,
клавиатура, устройство печати, дисплей, рассматриваются,
как устройства. С точки зрения программиста
устройство можно рассматривать как файл и с ним можно работать
с помощью того же набора стандартных функций, что и с файлом. В Turbo
Pascal поддерживается два типа устройств -
устройства DOS и устройства для текстовых файлов.
[начало]
[оглавление]
Устройства
DOS.
Устройства DOS реализованы с помощью зарезервированных
имен устройств, которые имееют специальный
смысл. Устройства DOS полностью прозрачны :
в Turbo Pascal неизвестно даже,
когда файловая переменная связана с устройством,
а когда с файлом на диске. Например, программа:
var
Lst : Text;
begin
Assign(Lst, 'LPT1');
Rewrite(Lst);
Writeln(Lst, 'Hello World ...');
Close(Lst);
end.
выведет строку 'Hello World ...' на устройство печати,
хотя синтаксис точно такой же, как если
бы она выводилась в файл на диске.
Устройства, реализованные в операционной
системе DOS, используются для одновременного ввода или вывода.
Таким образом, устройства в DOS используются , обычно,
для вывода текстовых файлов. В редких случаях для работы с устройствами
DOS может оказаться полезным использование также нетипированного
файла. Каждое из устройств DOS описывается в следующем разделе.
В других реализациях DOS может быть предусмотрено
использование дополнительных устройств, поэтому мы не можем
предусмотреть все возможные случаи для описываемых в данном руководстве
устройств.
[начало]
[оглавление]
Устройство CON.
Устройство CON означает консоль, посредством которой выводимая информация
пересылается на экран дисплея, а вводимая информация
воспринимается с клавиатуры. Если не было изменено
направление ввода или вывода, то стандартные
файлы Input и Output и все файлы, которым присвоено
пустое имя, ссылаются на устройство CON. Вводимая с
устройства CON информация является
строчно - ориентированной и использует
средства редактирования строки, которые описаны
в руководстве по DOS. Символы считываются из буфера строки, а когда
буфер становится пустым, вводится новая строка. При нажатии
клавиши CTRL-Z генерируется символ
конца файла (end-of-file), после которого функция eof будет
возвращать значение True.
[начало]
[оглавление]
Устройства
LРT1, LРT2, LРT3.
В качестве возможного построчного
устройства печати допускается использование
трех устройств печати. Если присоединено одно устройство печати,
на него обычно ссылаются как на устройство LРT1. Для этого устройства
можно также использовать синоним PRN.
Построчное устройство печати - это устройство, предназначенное только
для вывода. При любой попытке использовать процедуру Reset
для открытия файла, связанного с одним из этих устройств, немедленно
генерируется признак конца файла.
Примечание: Стандартный модуль Printer описывает
текстовую файловую переменную с именем Lst и
устанавливает ее связь с устройством LРT1.
Чтобы обеспечить вывод какой-либо информации из вашей программы на устройство
печати, включите в предложение uses в своей программе модуль Printer, а для вывода используйте процедуры
Write(Lst,
...).
[начало]
[оглавление]
Устройства COM1 и COM2.
Устройствами коммуникационного порта
являются два последовательных коммуникационных
порта. Вместо COM1 можно использовать
синоним AUX.
[начало]
[оглавление]
Устройство NUL.
Нулевое устройство игнорирует любую запись
на него и немедленно генерирует признак
конца файла при попытке считывания с этого устройства. Его следует
использовать, если вы не хотите создавать
отдельный файл, а в программе требуется
указать имя входного или выходного файла.
[начало]
[оглавление]
Устройство,
предназначенное для текстовых файлов.
Устройство предназначенное для текстовых файлов, используется
для реализации устройств, не поддерживаемых
DOS, или для того, чтобы сделать доступным набор
средств, отличающийся от того, который предусмотрен
для аналогичного устройства DOS. Хорошим примером
устройства, предназначенного для текстового
файла, является устройство CRT, реализованное
с помощью стандартного модуля Crt. Его основной функцией
является обеспечение интерфейса с дисплеем и клавиатурой,
аналогично устройству CON в DOS. Однако устройство CRT
является более быстрым и поддерживает
такие неоценимые средства, как использование
цветов и окон.
В отличие от устройств DOS, устройства, предназначенные
для вывода текстовых файлов, не
имеют зарезервированных имен. Фактически у них вообще отсутствуют
имена.
Вместо этого файл связывается с устройством с помощью обычной
процедуры Assign. Например, стандартный модуль
Crt реализует процедуру AssignCrt,
которая связывает текстовые файлы с устройством CRT.
Кроме устройства CRT, в Turbo
Pascal для устройств, предназначенных для
текстовых файлов, Вы можете писать
свои собственные драйверы. Полностью этот вопрос освещается
в разделе "Драйвер устройства текстового файла" в главе 19
"Ввод и вывод".
[начало]
[оглавление]
Предопределенные
переменные.
Кроме процедур и функций модуль System
обеспечивает ряд предопределенных переменных.
Неинициализированные
переменные.
───────────────────────────────────────────────────────────────────
Переменная Тип Описание
───────────────────────────────────────────────────────────────────
Input Text стандартный файл ввода
Output Text стандартный файл вывода
SaveInt00 Pointer сохранение
прерывания $00
SaveInt02 Pointer сохранение
прерывания $02
SaveInt1B Pointer сохранение
прерывания $1B
SaveInt21 Pointer сохранение
прерывания $21
SaveInt23 Pointer сохранение
прерывания $23
SaveInt24 Pointer сохранение
прерывания $24
SaveInt35 Pointer сохранение
прерывания $35
SaveInt36 Pointer сохранение
прерывания $36
SaveInt37 Pointer сохранение
прерывания $37
SaveInt38 Pointer сохранение
прерывания $38
SaveInt39 Pointer сохранение
прерывания $39
SaveInt3A Pointer сохранение
прерывания $3A
SaveInt3B Pointer сохранение
прерывания $3B
SaveInt3C Pointer сохранение
прерывания $3C
SaveInt3D Pointer сохранение
прерывания $3D
SaveInt3F Pointer сохранение
прерывания $3F
SaveInt3E Pointer сохранение
прерывания $3E
SaveInt75 Pointer сохранение
прерывания $75
───────────────────────────────────────────────────────────────────
[начало]
[оглавление]
Инициализированные
переменные.
───────────────────────────────────────────────────────────────────
Переменная Тип Начальное Описание
значение
───────────────────────────────────────────────────────────────────
OvrCodeList
Word 0 список оверлейных сегментов кода
OvrHeapSize
Word 0 начальный размер буфера оверлеев
OvrDebugPtr
Pointer nil вектор отладчика
оверлеев
OvrHeapOrg
Word 0 начало буфера оверлеев
OvrHeapPrt
Word 0 указатель буфера оверлеев
OvrHeapEnd
Word 0 конец буфера оверлеев
OvrLoadList
Word 0 список загруженных оверлеев
OvrDosHandle
Word 0 обработчик DOS оверлеев
OvrEmsHandle
Word 0 обработчик EMS оверлеев
HeapOrg
Pointer nil начало кучи
HeapPtr Pointer
nil указатель кучи
HeapEnd Pointer
nil конец кучи
FreeList Pointer
nil список свободных блоков кучи
HeapError
Pointer nil функция обработки
ошибок кучи
ExitProc
Pointer nil процедура выхода
ExitCode
Integer 0 выходной
код
ErrorAddr
Pointer nil адрес ошибки времени
выполнения
PrefixSeg
Word 0 префикс программного сегмента
StackLimit
Word 0 указатель на нижнюю границу стека
InOutRes
Integer 0 буфер
результата в/в
RandSeed
LongInt 0 опорное
значение генератора случайных чисел
FileMode
Byte 2 режим открытия файла
Test8087
Byte 0 результат теста 8087
───────────────────────────────────────────────────────────────────
OvrCodeList, OvrHeapSize, OvrDebugPtr, OvrHeapOrg, OvrHeapPtr, OvrHeapEnd,
OvrHeapList, OvrDosHandle и OvrEmsHandle используются модулем
Overlay для реализации менеджера оверлеев Turbo Pascal.
Буфер оверлеев размещается между сегментом стека
и кучей и OvrHeapOrg и OvrHeapEnd
содержат адреса начала и конца сегмента. Размер буфера оверлеев
по умолчанию соответствует размеру
максимального оверлея в программе; если в программе нет
оверлеев, то размер оверлейного буфера равен нулю. Размер
буфера оверлеев может быть увеличен через
вызов процедуры OvrSetBuf из модуля Overlay, в этом
случае размер кучи соответственно уменьшается,
увеличивая значение HeapOrg.
HeapOrg, HeapPtr, HeapEnd, FreeList, HeapError используются
монитором кучи для реализации программ распределения динамической
памяти Turbo Pascal. Монитор кучи полностью описан
в главе 16 "Память".
Переменные ExitProc, ExitCode и ErrorAddr реализуют процедуры
выхода. Они так же описаны в главе 18 "Вопросы контроля".
PrefixSeg - это переменная типа слово (Word), содержащая адрес сегмента
префикса сегмента программы (PSP), создаваемый DOS, когда программа
выполняется. Полное описание префикса сегмента программы смотрите
в руководстве по операционной системе.
StackLimit содержит смещение от нижней границы сегмента стека, соответствующее
наименьшему значению регистра SP допустимому до того,
пока стек не будет переполнен. Обычно StackLimit равен нулю, но,
если программа откомпилирована с опциями {$N+,E+} эмулятор 8087 будет
устанавливать его равным 224 для резервирования
рабочего пространства на нижней границе сегмента стека,
если 8087 нет в системе.
InOutRes используется встроенными программами ввода/вывода для запоминания
значения возвращаемого при последующем вызове стандартной функции IOResult.
RandSeed содержит опорное число генератора случайных
чисел. При присваивании необходимого значения переменной RandSeed, функция
Random будет генерировать определенную последовательность случайных
чисел снова и снова. Это полезно в приложениях, где необходимо шифрование данных, в статистике и симулировании.
FileMode позволяет Вам изменить режим доступа,
с которым открываются типированные и нетипированные
файлы. (Стандартной процедурой Reset). Для больших
деталей смотри раздел "Переменная FileMode".
Test8087 хранит результат теста автообнаружения сопроцессора,
который выполняется при запуске программы, откомпилированной
с {$N+}. Для больших деталей смотри главу 14 "Использование 8087".
Input и Output - стандартные файлы , необходимые
в каждой реализации языка Паскаль. По умолчанию они ссылаются
на стандартные входные и выходные файлы в DOS. Для больших деталей
смотри раздел "Ввод/вывод".
Модуль System устанавливает некоторые вектора прерывания.
До установки собственных программ обработки
прерываний, System запоминает старые вектора в переменных
SaveIntXX.
Заметим, что модуль System содержит обработчик прерывания INT
24 для перехвата критических ошибок.
В программах Turbo Pascal критические
ошибки в DOS обрабатываются как любые другие
ошибки ввода/вывода; в состоянии {$ I+} программа завершается
с ошибкой времени выполнения, а в состоянии
{$I-} IOResult возвращает ненулевое значение.
Здесь приводится основа программы,
восстанавливающей первоначальный вектор и, следовательно,
первоначальную логику обработки критических ситуаций.
programm Restore;
uses Dos;
begin
SetIntVeg ($24, SaveInt 24);
end.
Процедура SwapVectors в модуле Dos переставляет
содержимое переменных SaveIntXX с текущим содержимым
векторов прерывания. SwapVectors должна быть
вызвана непосредственно перед и
непосредственно после вызова процедуры Exec, для того
чтобы быть уверенным что запускаемый через Exec процесс не использует
какой - либо обработчик прерывания, установленный
в текущем процессе и наоборот. Для большей информации
смотри описание процедуры SwapVectors в Справочном
руководстве по библиотеке.
[начало]
[оглавление]
Предыдущая
страница |
Следующая страница
|